framework/extensions/mentions/js/dist/forum.js.map
2018-06-20 05:19:54 +00:00

1 line
84 KiB
Plaintext

{"version":3,"sources":["webpack://module.exports/webpack/bootstrap","webpack://module.exports/external \"flarum.core.compat['extend']\"","webpack://module.exports/external \"flarum.core.compat['app']\"","webpack://module.exports/external \"flarum.core.compat['components/CommentPost']\"","webpack://module.exports/external \"flarum.core.compat['helpers/username']\"","webpack://module.exports/./node_modules/core-js/library/modules/_descriptors.js","webpack://module.exports/./node_modules/core-js/library/modules/_global.js","webpack://module.exports/external \"flarum.core.compat['components/Notification']\"","webpack://module.exports/external \"flarum.core.compat['components/Button']\"","webpack://module.exports/external \"flarum.core.compat['helpers/punctuateSeries']\"","webpack://module.exports/external \"flarum.core.compat['components/PostPreview']\"","webpack://module.exports/external \"flarum.core.compat['utils/string']\"","webpack://module.exports/./node_modules/core-js/library/modules/_is-object.js","webpack://module.exports/./node_modules/core-js/library/modules/_an-object.js","webpack://module.exports/./node_modules/core-js/library/modules/_core.js","webpack://module.exports/external \"flarum.core.compat['utils/extract']\"","webpack://module.exports/./node_modules/core-js/library/modules/_enum-bug-keys.js","webpack://module.exports/./node_modules/core-js/library/modules/_shared-key.js","webpack://module.exports/./node_modules/core-js/library/modules/_to-integer.js","webpack://module.exports/./node_modules/core-js/library/modules/_to-iobject.js","webpack://module.exports/./node_modules/core-js/library/modules/_has.js","webpack://module.exports/./node_modules/core-js/library/modules/_dom-create.js","webpack://module.exports/./node_modules/core-js/library/modules/_fails.js","webpack://module.exports/./node_modules/core-js/library/modules/_object-dp.js","webpack://module.exports/external \"flarum.core.compat['components/PostsUserPage']\"","webpack://module.exports/external \"flarum.core.compat['components/LinkButton']\"","webpack://module.exports/external \"flarum.core.compat['components/UserPage']\"","webpack://module.exports/external \"flarum.core.compat['Component']\"","webpack://module.exports/external \"flarum.core.compat['utils/KeyboardNavigatable']\"","webpack://module.exports/external \"flarum.core.compat['helpers/highlight']\"","webpack://module.exports/external \"flarum.core.compat['helpers/avatar']\"","webpack://module.exports/external \"flarum.core.compat['components/ComposerBody']\"","webpack://module.exports/./node_modules/textarea-caret/index.js","webpack://module.exports/./node_modules/@babel/runtime/core-js/object/create.js","webpack://module.exports/external \"flarum.core.compat['utils/DiscussionControls']\"","webpack://module.exports/external \"flarum.core.compat['helpers/icon']\"","webpack://module.exports/external \"flarum.core.compat['models/Post']\"","webpack://module.exports/external \"flarum.core.compat['Model']\"","webpack://module.exports/external \"flarum.core.compat['components/LoadingIndicator']\"","webpack://module.exports/external \"flarum.core.compat['components/NotificationGrid']\"","webpack://module.exports/./src/forum/utils/reply.js","webpack://module.exports/./src/forum/addPostReplyAction.js","webpack://module.exports/./node_modules/@babel/runtime/helpers/es6/inheritsLoose.js","webpack://module.exports/./src/forum/components/PostQuoteButton.js","webpack://module.exports/./src/forum/addPostQuoteButton.js","webpack://module.exports/./src/forum/utils/selectedText.js","webpack://module.exports/./src/forum/components/AutocompleteDropdown.js","webpack://module.exports/./src/forum/addComposerAutocomplete.js","webpack://module.exports/./src/forum/components/PostMentionedNotification.js","webpack://module.exports/./src/forum/components/UserMentionedNotification.js","webpack://module.exports/./src/forum/components/MentionsUserPage.js","webpack://module.exports/./src/forum/index.js","webpack://module.exports/./src/forum/addPostMentionPreviews.js","webpack://module.exports/./src/forum/addMentionedByList.js","webpack://module.exports/./node_modules/core-js/library/modules/_html.js","webpack://module.exports/./node_modules/core-js/library/modules/_uid.js","webpack://module.exports/./node_modules/core-js/library/modules/_library.js","webpack://module.exports/./node_modules/core-js/library/modules/_shared.js","webpack://module.exports/./node_modules/core-js/library/modules/_to-absolute-index.js","webpack://module.exports/./node_modules/core-js/library/modules/_to-length.js","webpack://module.exports/./node_modules/core-js/library/modules/_array-includes.js","webpack://module.exports/./node_modules/core-js/library/modules/_defined.js","webpack://module.exports/./node_modules/core-js/library/modules/_cof.js","webpack://module.exports/./node_modules/core-js/library/modules/_iobject.js","webpack://module.exports/./node_modules/core-js/library/modules/_object-keys-internal.js","webpack://module.exports/./node_modules/core-js/library/modules/_object-keys.js","webpack://module.exports/./node_modules/core-js/library/modules/_object-dps.js","webpack://module.exports/./node_modules/core-js/library/modules/_object-create.js","webpack://module.exports/./node_modules/core-js/library/modules/_property-desc.js","webpack://module.exports/./node_modules/core-js/library/modules/_to-primitive.js","webpack://module.exports/./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://module.exports/./node_modules/core-js/library/modules/_hide.js","webpack://module.exports/./node_modules/core-js/library/modules/_a-function.js","webpack://module.exports/./node_modules/core-js/library/modules/_ctx.js","webpack://module.exports/./node_modules/core-js/library/modules/_export.js","webpack://module.exports/./node_modules/core-js/library/modules/es6.object.create.js","webpack://module.exports/./node_modules/core-js/library/fn/object/create.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","a","global","window","Math","self","Function","__g","it","isObject","TypeError","version","__e","split","shared","uid","ceil","floor","isNaN","IObject","defined","document","is","createElement","exec","e","anObject","IE8_DOM_DEFINE","toPrimitive","dP","f","O","P","Attributes","properties","isBrowser","isFirefox","mozInnerScreenX","getCaretCoordinates","element","position","options","Error","debug","el","querySelector","parentNode","removeChild","div","id","body","appendChild","style","computed","getComputedStyle","currentStyle","isInput","nodeName","whiteSpace","wordWrap","visibility","forEach","prop","lineHeight","height","scrollHeight","parseInt","overflowY","overflow","textContent","substring","replace","span","coordinates","top","offsetTop","left","offsetLeft","backgroundColor","insertMention","post","component","quote","user","mention","username","number","content","props","originalContent","cursorPosition","editor","getSelectionRange","preceding","slice","precedingNewlines","length","match","insertAtCursor","Array","join","trim","reply_reply","app","composer","discussion","DiscussionControls_default","replyAction","then","newComponent","_inheritsLoose","subClass","superClass","create_default","constructor","__proto__","PostQuoteButton_PostQuoteButton","view","_this","this","extract_default","className","icon","children","translator","trans","onclick","hide","onmousedown","stopPropagation","_Button","config","isInitialized","$","on","show","$this","parentOffset","offsetParent","offset","css","showStart","scrollTop","outerHeight","showEnd","right","bottom","outerWidth","Button_default","addPostQuoteButton","external_flarum_core_compat_extend_","CommentPost_default","original","isHidden","session","canReply","$postBody","$container","handler","setTimeout","selection","getSelection","rangeCount","range","getRangeAt","parent","commonAncestorContainer","contains","clone","append","cloneContents","find","replaceWith","alt","src","innerText","href","text","selectedText","button","render","rects","getClientRects","firstRect","clientY","clientX","lastRect","after","addEventListener","AutocompleteDropdown_AutocompleteDropdown","init","active","index","keyWasJustPressed","items","map","item","navigate","delta","setIndex","clearTimeout","keyWasJustPressedTimeout","complete","eq","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","dropdownScroll","dropdownTop","dropdownBottom","itemTop","itemBottom","stop","animate","addComposerAutocomplete","ComposerBody_default","mentionStart","typed","searchTimeout","dropdown","$textarea","wrap","searched","navigator","KeyboardNavigatable_default","when","onUp","onDown","onSelect","onCancel","bindTo","indexOf","which","cursor","selectionStart","selectionEnd","substr","toLowerCase","makeSuggestion","replacement","username_default","highlight_default","insert","setValue","setSelectionRange","applySuggestion","onmouseenter","avatar_default","userMatches","displayName","some","buildSuggestions","suggestions","store","all","push","composerPost","posts","filter","contentType","sort","b","time","splice","string_","contentPlain","textarea_caret_default","width","typedLower","q","page","limit","PostMentionedNotification_PostMentionedNotification","notification","subject","auc","additionalUnreadCount","route","replyNumber","sender","transChoice","punctuateSeries_default","count","undefined","excerpt","Notification_default","UserMentionedNotification_UserMentionedNotification","MentionsUserPage_MentionsUserPage","loadResults","type","mentioned","loadLimit","external_flarum_core_compat_app_default","initializers","add","contentHtml","oldPostContentHtml","isEditing","parentPost","$parentPost","each","attrs","getAttribute","timeout","data","$preview","getPostElement","showPreview","$post","visible","pageYOffset","positionPreview","previewHeight","showPost","title","PostPreview_default","getById","LoadingIndicator_default","off","hidePreview","hasClass","one","preventDefault","hover","Post_default","mentionedBy","external_flarum_core_compat_Model_default","hasMany","replies","users","repliers","reply","overLimit","names","data-number","icon_default","notificationComponents","postMentioned","userMentioned","NotificationGrid_default","label","routes","path","UserPage_default","LinkButton_default","removeSelectors","documentElement","px","random","concat","toString","copyright","toInteger","max","min","toIObject","toLength","toAbsoluteIndex","IS_INCLUDES","fromIndex","cof","propertyIsEnumerable","has","arrayIndexOf","IE_PROTO","result","$keys","enumBugKeys","keys","getKeys","defineProperties","Properties","dPs","Empty","createDict","iframeDocument","iframe","display","contentWindow","open","write","lt","close","F","bitmap","configurable","writable","S","fn","val","valueOf","createDesc","aFunction","that","apply","arguments","ctx","$export","source","own","out","IS_FORCED","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","target","C","virtual","R","U","$Object","D"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 39);\n","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['components/CommentPost'];","module.exports = flarum.core.compat['helpers/username'];","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = flarum.core.compat['components/Notification'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['helpers/punctuateSeries'];","module.exports = flarum.core.compat['components/PostPreview'];","module.exports = flarum.core.compat['utils/string'];","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = flarum.core.compat['utils/extract'];","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = flarum.core.compat['components/PostsUserPage'];","module.exports = flarum.core.compat['components/LinkButton'];","module.exports = flarum.core.compat['components/UserPage'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['utils/KeyboardNavigatable'];","module.exports = flarum.core.compat['helpers/highlight'];","module.exports = flarum.core.compat['helpers/avatar'];","module.exports = flarum.core.compat['components/ComposerBody'];","/* jshint browser: true */\n\n(function () {\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nvar properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n\n];\n\nvar isBrowser = (typeof window !== 'undefined');\nvar isFirefox = (isBrowser && window.mozInnerScreenX != null);\n\nfunction getCaretCoordinates(element, position, options) {\n if (!isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n var debug = options && options.debug || false;\n if (debug) {\n var el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) el.parentNode.removeChild(el);\n }\n\n // The mirror div will replicate the textarea's style\n var div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n var style = div.style;\n var computed = window.getComputedStyle ? window.getComputedStyle(element) : element.currentStyle; // currentStyle for IE < 9\n var isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput)\n style.wordWrap = 'break-word'; // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug)\n style.visibility = 'hidden'; // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n style.lineHeight = computed.height;\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput)\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n\n var span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n var coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth']),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n height: parseInt(computed['lineHeight'])\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n}\n\nif (typeof module != 'undefined' && typeof module.exports != 'undefined') {\n module.exports = getCaretCoordinates;\n} else if(isBrowser) {\n window.getCaretCoordinates = getCaretCoordinates;\n}\n\n}());\n","module.exports = require(\"core-js/library/fn/object/create\");","module.exports = flarum.core.compat['utils/DiscussionControls'];","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['models/Post'];","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['components/LoadingIndicator'];","module.exports = flarum.core.compat['components/NotificationGrid'];","import DiscussionControls from 'flarum/utils/DiscussionControls';\n\nfunction insertMention(post, component, quote) {\n const user = post.user();\n const mention = '@' + (user ? user.username() : post.number()) + '#' + post.id() + ' ';\n\n // If the composer is empty, then assume we're starting a new reply.\n // In which case we don't want the user to have to confirm if they\n // close the composer straight away.\n if (!component.content()) {\n component.props.originalContent = mention;\n }\n\n const cursorPosition = component.editor.getSelectionRange()[0];\n const preceding = component.editor.value().slice(0, cursorPosition);\n const precedingNewlines = preceding.length == 0 ? 0 : 3 - preceding.match(/(\\n{0,2})$/)[0].length;\n\n component.editor.insertAtCursor(\n Array(precedingNewlines).join('\\n') + // Insert up to two newlines, depending on preceding whitespace\n (quote\n ? '> ' + mention + quote.trim().replace(/\\n/g, '\\n> ') + '\\n\\n'\n : mention)\n );\n}\n\nexport default function reply(post, quote) {\n const component = app.composer.component;\n if (component && component.props.post && component.props.post.discussion() === post.discussion()) {\n insertMention(post, component, quote);\n } else {\n DiscussionControls.replyAction.call(post.discussion())\n .then(newComponent => insertMention(post, newComponent, quote));\n }\n}\n","import { extend } from 'flarum/extend';\nimport Button from 'flarum/components/Button';\nimport CommentPost from 'flarum/components/CommentPost';\n\nimport reply from './utils/reply';\n\nexport default function () {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n\n const post = this.props.post;\n\n if (post.isHidden() || (app.session.user && !post.discussion().canReply())) return;\n\n items.add('reply',\n Button.component({\n className: 'Button Button--link',\n children: app.translator.trans('flarum-mentions.forum.post.reply_link'),\n onclick: () => reply(post)\n })\n );\n });\n}\n","import _Object$create from \"../../core-js/object/create\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = _Object$create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","import Button from 'flarum/components/Button';\nimport extract from 'flarum/utils/extract';\n\nimport reply from '../utils/reply';\n\nexport default class PostQuoteButton extends Button {\n view() {\n const post = extract(this.props, 'post');\n const content = extract(this.props, 'content');\n\n this.props.className = 'Button PostQuoteButton';\n this.props.icon = 'fas fa-quote-left';\n this.props.children = app.translator.trans('flarum-mentions.forum.post.quote_button');\n this.props.onclick = () => {\n this.hide();\n reply(post, content);\n };\n this.props.onmousedown = (e) => e.stopPropagation();\n\n return super.view();\n }\n\n config(isInitialized) {\n if (isInitialized) return;\n\n $(document).on('mousedown', this.hide.bind(this));\n }\n\n show(left, top) {\n const $this = this.$().show();\n const parentOffset = $this.offsetParent().offset();\n\n $this\n .css('left', left - parentOffset.left)\n .css('top', top - parentOffset.top);\n }\n\n showStart(left, top) {\n const $this = this.$();\n\n this.show(left, $(window).scrollTop() + top - $this.outerHeight() - 5);\n }\n\n showEnd(right, bottom) {\n const $this = this.$();\n\n this.show(right - $this.outerWidth(), $(window).scrollTop() + bottom + 5);\n }\n\n hide() {\n this.$().hide();\n }\n}\n","import { extend } from 'flarum/extend';\nimport CommentPost from 'flarum/components/CommentPost';\n\nimport PostQuoteButton from './components/PostQuoteButton';\nimport selectedText from './utils/selectedText';\n\nexport default function addPostQuoteButton() {\n extend(CommentPost.prototype, 'config', function(original, isInitialized) {\n const post = this.props.post;\n\n if (isInitialized || post.isHidden() || (app.session.user && !post.discussion().canReply())) return;\n\n const $postBody = this.$('.Post-body');\n\n // Wrap the quote button in a wrapper element so that we can render\n // button into it.\n const $container = $('<div class=\"Post-quoteButtonContainer\"></div>');\n\n const handler = function(e) {\n setTimeout(() => {\n const content = selectedText($postBody);\n if (content) {\n const button = new PostQuoteButton({post, content});\n m.render($container[0], button.render());\n\n const rects = window.getSelection().getRangeAt(0).getClientRects();\n const firstRect = rects[0];\n\n if (e.clientY < firstRect.bottom && e.clientX - firstRect.right < firstRect.left - e.clientX) {\n button.showStart(firstRect.left, firstRect.top);\n } else {\n const lastRect = rects[rects.length - 1];\n button.showEnd(lastRect.right, lastRect.bottom);\n }\n }\n }, 1);\n };\n\n this.$().after($container).on('mouseup', handler);\n\n if ('ontouchstart' in window) {\n document.addEventListener('selectionchange', handler, false);\n }\n });\n}\n","export default function selectedText(body) {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n const range = selection.getRangeAt(0);\n const parent = range.commonAncestorContainer;\n if (body[0] === parent || $.contains(body[0], parent)) {\n const clone = $(\"<div>\").append(range.cloneContents());\n\n // Replace emoji images with their shortcode (found in alt attribute)\n clone.find('img.emoji').replaceWith(function() {\n return this.alt;\n });\n\n // Replace all other images with a Markdown image\n clone.find('img').replaceWith(function() {\n return '![](' + this.src + ')';\n });\n\n // Replace all links with a Markdown link\n clone.find('a').replaceWith(function() {\n return '[' + this.innerText + '](' + this.href + ')';\n });\n\n return clone.text();\n }\n }\n return \"\";\n}\n","import Component from 'flarum/Component';\n\nexport default class AutocompleteDropdown extends Component {\n init() {\n this.active = false;\n this.index = 0;\n this.keyWasJustPressed = false;\n }\n\n view() {\n return (\n <ul className=\"Dropdown-menu MentionsDropdown\">\n {this.props.items.map(item => <li>{item}</li>)}\n </ul>\n );\n }\n\n show(left, top) {\n this.$().show().css({\n left: left + 'px',\n top: top + 'px'\n });\n this.active = true;\n }\n\n hide() {\n this.$().hide();\n this.active = false;\n }\n\n navigate(delta) {\n this.keyWasJustPressed = true;\n this.setIndex(this.index + delta, true);\n clearTimeout(this.keyWasJustPressedTimeout);\n this.keyWasJustPressedTimeout = setTimeout(() => this.keyWasJustPressed = false, 500);\n }\n\n complete() {\n this.$('li').eq(this.index).find('button').click();\n }\n\n setIndex(index, scrollToItem) {\n if (this.keyWasJustPressed && !scrollToItem) return;\n\n const $dropdown = this.$();\n const $items = $dropdown.find('li');\n let rangedIndex = index;\n\n if (rangedIndex < 0) {\n rangedIndex = $items.length - 1;\n } else if (rangedIndex >= $items.length) {\n rangedIndex = 0;\n }\n\n this.index = rangedIndex;\n\n const $item = $items.removeClass('active').eq(rangedIndex).addClass('active');\n\n if (scrollToItem) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({scrollTop}, 100);\n }\n }\n }\n}\n","import getCaretCoordinates from 'textarea-caret';\n\nimport { extend } from 'flarum/extend';\nimport ComposerBody from 'flarum/components/ComposerBody';\nimport avatar from 'flarum/helpers/avatar';\nimport usernameHelper from 'flarum/helpers/username';\nimport highlight from 'flarum/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/utils/KeyboardNavigatable';\nimport { truncate } from 'flarum/utils/string';\n\nimport AutocompleteDropdown from './components/AutocompleteDropdown';\n\nexport default function addComposerAutocomplete() {\n extend(ComposerBody.prototype, 'config', function(original, isInitialized) {\n if (isInitialized) return;\n\n const composer = this;\n const $container = $('<div class=\"ComposerBody-mentionsDropdownContainer\"></div>');\n const dropdown = new AutocompleteDropdown({items: []});\n const $textarea = this.$('textarea').wrap('<div class=\"ComposerBody-mentionsWrapper\"></div>');\n const searched = [];\n let mentionStart;\n let typed;\n let searchTimeout;\n\n const applySuggestion = function(replacement) {\n const insert = replacement + ' ';\n\n const content = composer.content();\n composer.editor.setValue(content.substring(0, mentionStart - 1) + insert + content.substr($textarea[0].selectionStart));\n\n const index = mentionStart - 1 + insert.length;\n composer.editor.setSelectionRange(index, index);\n\n dropdown.hide();\n };\n\n this.navigator = new KeyboardNavigatable();\n this.navigator\n .when(() => dropdown.active)\n .onUp(() => dropdown.navigate(-1))\n .onDown(() => dropdown.navigate(1))\n .onSelect(dropdown.complete.bind(dropdown))\n .onCancel(dropdown.hide.bind(dropdown))\n .bindTo($textarea);\n\n $textarea\n .after($container)\n .on('click keyup', function(e) {\n // Up, down, enter, tab, escape, left, right.\n if ([9, 13, 27, 40, 38, 37, 39].indexOf(e.which) !== -1) return;\n\n const cursor = this.selectionStart;\n\n if (this.selectionEnd - cursor > 0) return;\n\n // Search backwards from the cursor for an '@' symbol. If we find one,\n // we will want to show the autocomplete dropdown!\n const value = this.value;\n mentionStart = 0;\n for (let i = cursor - 1; i >= cursor - 30; i--) {\n const character = value.substr(i, 1);\n if (character === '@') {\n mentionStart = i + 1;\n break;\n }\n }\n\n dropdown.hide();\n dropdown.active = false;\n\n if (mentionStart) {\n typed = value.substring(mentionStart, cursor).toLowerCase();\n\n const makeSuggestion = function(user, replacement, content, className = '') {\n const username = usernameHelper(user);\n if (typed) {\n username.children[0] = highlight(username.children[0], typed);\n }\n\n return (\n <button className={'PostPreview ' + className}\n onclick={() => applySuggestion(replacement)}\n onmouseenter={function() {\n dropdown.setIndex($(this).parent().index());\n }}>\n <span className=\"PostPreview-content\">\n {avatar(user)}\n {username} {' '}\n {content}\n </span>\n </button>\n );\n };\n\n const userMatches = function(user) {\n const names = [\n user.username(),\n user.displayName()\n ];\n\n return names.some(value => value.toLowerCase().substr(0, typed.length) === typed);\n };\n\n const buildSuggestions = () => {\n const suggestions = [];\n\n // If the user has started to type a username, then suggest users\n // matching that username.\n if (typed) {\n app.store.all('users').forEach(user => {\n if (!userMatches(user)) return;\n\n suggestions.push(\n makeSuggestion(user, '@' + user.username(), '', 'MentionsDropdown-user')\n );\n });\n }\n\n // If the user is replying to a discussion, or if they are editing a\n // post, then we can suggest other posts in the discussion to mention.\n // We will add the 5 most recent comments in the discussion which\n // match any username characters that have been typed.\n const composerPost = composer.props.post;\n const discussion = (composerPost && composerPost.discussion()) || composer.props.discussion;\n if (discussion) {\n discussion.posts()\n .filter(post => post && post.contentType() === 'comment' && (!composerPost || post.number() < composerPost.number()))\n .sort((a, b) => b.time() - a.time())\n .filter(post => {\n const user = post.user();\n return user && userMatches(user);\n })\n .splice(0, 5)\n .forEach(post => {\n const user = post.user();\n suggestions.push(\n makeSuggestion(user, '@' + user.username() + '#' + post.id(), [\n app.translator.trans('flarum-mentions.forum.composer.reply_to_post_text', {number: post.number()}), ' — ',\n truncate(post.contentPlain(), 200)\n ], 'MentionsDropdown-post')\n );\n });\n }\n\n if (suggestions.length) {\n dropdown.props.items = suggestions;\n m.render($container[0], dropdown.render());\n\n dropdown.show();\n const coordinates = getCaretCoordinates(this, mentionStart);\n const width = dropdown.$().outerWidth();\n const height = dropdown.$().outerHeight();\n const parent = dropdown.$().offsetParent();\n let left = coordinates.left;\n let top = coordinates.top + 15;\n if (top + height > parent.height()) {\n top = coordinates.top - height - 15;\n }\n if (left + width > parent.width()) {\n left = parent.width() - width;\n }\n dropdown.show(left, top);\n } else {\n dropdown.active = false;\n dropdown.hide();\n }\n };\n\n dropdown.active = true;\n\n buildSuggestions();\n\n dropdown.setIndex(0);\n dropdown.$().scrollTop(0);\n\n clearTimeout(searchTimeout);\n if (typed) {\n searchTimeout = setTimeout(function() {\n const typedLower = typed.toLowerCase();\n if (searched.indexOf(typedLower) === -1) {\n app.store.find('users', {filter: {q: typed}, page: {limit: 5}}).then(() => {\n if (dropdown.active) buildSuggestions();\n });\n searched.push(typedLower);\n }\n }, 250);\n }\n }\n });\n });\n}\n","import Notification from 'flarum/components/Notification';\nimport username from 'flarum/helpers/username';\nimport punctuateSeries from 'flarum/helpers/punctuateSeries';\n\nexport default class PostMentionedNotification extends Notification {\n icon() {\n return 'fas fa-reply';\n }\n\n href() {\n const notification = this.props.notification;\n const post = notification.subject();\n const auc = notification.additionalUnreadCount();\n const content = notification.content();\n\n return app.route.discussion(post.discussion(), auc ? post.number() : (content && content.replyNumber));\n }\n\n content() {\n const notification = this.props.notification;\n const auc = notification.additionalUnreadCount();\n const user = notification.sender();\n\n return app.translator.transChoice('flarum-mentions.forum.notifications.post_mentioned_text', auc + 1, {\n user,\n username: auc ? punctuateSeries([\n username(user),\n app.translator.transChoice('flarum-mentions.forum.notifications.others_text', auc, {count: auc})\n ]) : undefined\n });\n }\n\n excerpt() {\n return this.props.notification.subject().contentPlain();\n }\n}\n","import Notification from 'flarum/components/Notification';\n\nexport default class UserMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n\n href() {\n const post = this.props.notification.subject();\n\n return app.route.discussion(post.discussion(), post.number());\n }\n\n content() {\n const user = this.props.notification.sender();\n\n return app.translator.trans('flarum-mentions.forum.notifications.user_mentioned_text', {user});\n }\n\n excerpt() {\n return this.props.notification.subject().contentPlain();\n }\n}\n","import PostsUserPage from 'flarum/components/PostsUserPage';\n\n/**\n * The `MentionsUserPage` component shows post which user Mentioned at\n */\nexport default class MentionsUserPage extends PostsUserPage {\n /**\n * Load a new page of the user's activity feed.\n *\n * @param {Integer} [offset] The position to start getting results from.\n * @return {Promise}\n * @protected\n */\n loadResults(offset) {\n return app.store.find('posts', {\n filter: {\n type: 'comment',\n mentioned: this.user.id()\n },\n page: {offset, limit: this.loadLimit},\n sort: '-time'\n });\n }\n}\n","import { extend } from 'flarum/extend';\nimport app from 'flarum/app';\nimport NotificationGrid from 'flarum/components/NotificationGrid';\nimport { getPlainContent } from 'flarum/utils/string';\n\nimport addPostMentionPreviews from './addPostMentionPreviews';\nimport addMentionedByList from './addMentionedByList';\nimport addPostReplyAction from './addPostReplyAction';\nimport addPostQuoteButton from './addPostQuoteButton';\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport PostMentionedNotification from './components/PostMentionedNotification';\nimport UserMentionedNotification from './components/UserMentionedNotification';\nimport UserPage from 'flarum/components/UserPage'\nimport LinkButton from 'flarum/components/LinkButton';\nimport MentionsUserPage from './components/MentionsUserPage';\n\napp.initializers.add('flarum-mentions', function() {\n // For every mention of a post inside a post's content, set up a hover handler\n // that shows a preview of the mentioned post.\n addPostMentionPreviews();\n\n // In the footer of each post, show information about who has replied (i.e.\n // who the post has been mentioned by).\n addMentionedByList();\n\n // Add a 'reply' control to the footer of each post. When clicked, it will\n // open up the composer and add a post mention to its contents.\n addPostReplyAction();\n\n // Show a Quote button when Post text is selected\n addPostQuoteButton();\n\n // After typing '@' in the composer, show a dropdown suggesting a bunch of\n // posts or users that the user could mention.\n addComposerAutocomplete();\n\n app.notificationComponents.postMentioned = PostMentionedNotification;\n app.notificationComponents.userMentioned = UserMentionedNotification;\n\n // Add notification preferences.\n extend(NotificationGrid.prototype, 'notificationTypes', function(items) {\n items.add('postMentioned', {\n name: 'postMentioned',\n icon: 'fas fa-reply',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_post_mentioned_label')\n });\n\n items.add('userMentioned', {\n name: 'userMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_user_mentioned_label')\n });\n });\n\n // Add mentions tab in user profile\n app.routes['user.mentions'] = {path: '/u/:username/mentions', component: MentionsUserPage.component()};\n extend(UserPage.prototype, 'navItems', function(items) {\n const user = this.user;\n items.add('mentions',\n LinkButton.component({\n href: app.route('user.mentions', {username: user.username()}),\n name: 'mentions',\n children: [app.translator.trans('flarum-mentions.forum.user.mentions_link')],\n icon: 'fas fa-at'\n }),\n 80\n );\n });\n\n // Remove post mentions when rendering post previews.\n getPlainContent.removeSelectors.push('a.PostMention');\n});\n","import { extend } from 'flarum/extend';\nimport CommentPost from 'flarum/components/CommentPost';\nimport PostPreview from 'flarum/components/PostPreview';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\n\nexport default function addPostMentionPreviews() {\n extend(CommentPost.prototype, 'config', function() {\n const contentHtml = this.props.post.contentHtml();\n\n if (contentHtml === this.oldPostContentHtml || this.isEditing()) return;\n\n this.oldPostContentHtml = contentHtml;\n\n const parentPost = this.props.post;\n const $parentPost = this.$();\n\n this.$('.UserMention, .PostMention').each(function() {\n m.route.call(this, this, false, {}, {attrs: {href: this.getAttribute('href')}});\n });\n\n this.$('.PostMention').each(function() {\n const $this = $(this);\n const id = $this.data('id');\n let timeout;\n\n // Wrap the mention link in a wrapper element so that we can insert a\n // preview popup as its sibling and relatively position it.\n const $preview = $('<ul class=\"Dropdown-menu PostMention-preview fade\"/>');\n $parentPost.append($preview);\n\n const getPostElement = () => {\n return $(`.PostStream-item[data-id=\"${id}\"]`);\n };\n\n const showPreview = () => {\n // When the user hovers their mouse over the mention, look for the\n // post that it's referring to in the stream, and determine if it's\n // in the viewport. If it is, we will \"pulsate\" it.\n const $post = getPostElement();\n let visible = false;\n if ($post.length) {\n const top = $post.offset().top;\n const scrollTop = window.pageYOffset;\n if (top > scrollTop && top + $post.height() < scrollTop + $(window).height()) {\n $post.addClass('pulsate');\n visible = true;\n }\n }\n\n // Otherwise, we will show a popup preview of the post. If the post\n // hasn't yet been loaded, we will need to do that.\n if (!visible) {\n // Position the preview so that it appears above the mention.\n // (The offsetParent should be .Post-body.)\n const positionPreview = () => {\n const previewHeight = $preview.outerHeight(true);\n let offset = 0;\n\n // If the preview goes off the top of the viewport, reposition it to\n // be below the mention.\n if ($this.offset().top - previewHeight < $(window).scrollTop() + $('#header').outerHeight()) {\n offset += $this.outerHeight(true);\n } else {\n offset -= previewHeight;\n }\n\n $preview.show()\n .css('top', $this.offset().top - $parentPost.offset().top + offset)\n .css('left', $this.offsetParent().offset().left - $parentPost.offset().left)\n .css('max-width', $this.offsetParent().width());\n };\n\n const showPost = post => {\n const discussion = post.discussion();\n\n m.render($preview[0], [\n discussion !== parentPost.discussion()\n ? <li><span className=\"PostMention-preview-discussion\">{discussion.title()}</span></li>\n : '',\n <li>{PostPreview.component({post})}</li>\n ]);\n positionPreview();\n };\n\n const post = app.store.getById('posts', id);\n if (post && post.discussion()) {\n showPost(post);\n } else {\n m.render($preview[0], LoadingIndicator.component());\n app.store.find('posts', id).then(showPost);\n positionPreview();\n }\n\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n }\n };\n\n const hidePreview = () => {\n getPostElement().removeClass('pulsate');\n if ($preview.hasClass('in')) {\n $preview.removeClass('in').one('transitionend', () => $preview.hide());\n }\n };\n\n $this.on('touchstart', e => e.preventDefault());\n\n $this.add($preview).hover(\n () => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n },\n () => {\n clearTimeout(timeout);\n getPostElement().removeClass('pulsate');\n timeout = setTimeout(hidePreview, 250);\n }\n )\n .on('touchend', e => {\n showPreview();\n e.stopPropagation();\n });\n\n $(document).on('touchend', hidePreview);\n });\n });\n}\n","import { extend } from 'flarum/extend';\nimport Model from 'flarum/Model';\nimport Post from 'flarum/models/Post';\nimport CommentPost from 'flarum/components/CommentPost';\nimport PostPreview from 'flarum/components/PostPreview';\nimport punctuateSeries from 'flarum/helpers/punctuateSeries';\nimport username from 'flarum/helpers/username';\nimport icon from 'flarum/helpers/icon';\n\nexport default function addMentionedByList() {\n Post.prototype.mentionedBy = Model.hasMany('mentionedBy');\n\n extend(CommentPost.prototype, 'footerItems', function(items) {\n const post = this.props.post;\n const replies = post.mentionedBy();\n\n if (replies && replies.length) {\n // If there is only one reply, and it's adjacent to this post, we don't\n // really need to show the list.\n if (replies.length === 1 && replies[0].number() === post.number() + 1) {\n return;\n }\n\n const hidePreview = () => {\n this.$('.Post-mentionedBy-preview')\n .removeClass('in')\n .one('transitionend', function() { $(this).hide(); });\n };\n\n const config = function(element, isInitialized) {\n if (isInitialized) return;\n\n const $this = $(element);\n let timeout;\n\n const $preview = $('<ul class=\"Dropdown-menu Post-mentionedBy-preview fade\"/>');\n $this.append($preview);\n\n $this.children().hover(function() {\n clearTimeout(timeout);\n timeout = setTimeout(function() {\n if (!$preview.hasClass('in') && $preview.is(':visible')) return;\n\n // When the user hovers their mouse over the list of people who have\n // replied to the post, render a list of reply previews into a\n // popup.\n m.render($preview[0], replies.map(reply => (\n <li data-number={reply.number()}>\n {PostPreview.component({\n post: reply,\n onclick: hidePreview\n })}\n </li>\n )));\n $preview.show();\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n }, 500);\n }, function() {\n clearTimeout(timeout);\n timeout = setTimeout(hidePreview, 250);\n });\n\n // Whenever the user hovers their mouse over a particular name in the\n // list of repliers, highlight the corresponding post in the preview\n // popup.\n $this.find('.Post-mentionedBy-summary a').hover(function() {\n $preview.find('[data-number=\"' + $(this).data('number') + '\"]').addClass('active');\n }, function() {\n $preview.find('[data-number]').removeClass('active');\n });\n };\n\n const users = [];\n const repliers = replies\n .sort(reply => reply.user() === app.session.user ? -1 : 0)\n .filter(reply => {\n const user = reply.user();\n if (users.indexOf(user) === -1) {\n users.push(user);\n return true;\n }\n });\n\n const limit = 4;\n const overLimit = repliers.length > limit;\n\n // Create a list of unique users who have replied. So even if a user has\n // replied twice, they will only be in this array once.\n const names = repliers\n .slice(0, overLimit ? limit - 1 : limit)\n .map(reply => {\n const user = reply.user();\n\n return (\n <a href={app.route.post(reply)}\n config={m.route}\n onclick={hidePreview}\n data-number={reply.number()}>\n {app.session.user === user ? app.translator.trans('flarum-mentions.forum.post.you_text') : username(user)}\n </a>\n );\n });\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = repliers.length - names.length;\n\n names.push(\n app.translator.transChoice('flarum-mentions.forum.post.others_text', count, {count})\n );\n }\n\n items.add('replies',\n <div className=\"Post-mentionedBy\" config={config}>\n <span className=\"Post-mentionedBy-summary\">\n {icon('fas fa-reply')}\n {app.translator.transChoice('flarum-mentions.forum.post.mentioned_by' + (repliers[0].user() === app.session.user ? '_self' : '') + '_text', names.length, {\n count: names.length,\n users: punctuateSeries(names)\n })}\n </span>\n </div>\n );\n }\n });\n}\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = true;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n"],"sourceRoot":""}