mirror of
https://github.com/flarum/framework.git
synced 2025-02-03 20:25:14 +08:00
1 line
47 KiB
Plaintext
1 line
47 KiB
Plaintext
{"version":3,"sources":["webpack://@flarum/emoji/webpack/bootstrap","webpack://@flarum/emoji/external \"flarum.core.compat['extend']\"","webpack://@flarum/emoji/external \"flarum.core.compat['components/TextEditor']\"","webpack://@flarum/emoji/external \"flarum.core.compat['app']\"","webpack://@flarum/emoji/./node_modules/textarea-caret/index.js","webpack://@flarum/emoji/external \"flarum.core.compat['components/TextEditorButton']\"","webpack://@flarum/emoji/external \"flarum.core.compat['utils/KeyboardNavigatable']\"","webpack://@flarum/emoji/external \"flarum.core.compat['Component']\"","webpack://@flarum/emoji/external \"flarum.core.compat['models/Post']\"","webpack://@flarum/emoji/./node_modules/twemoji/dist/twemoji.esm.js","webpack://@flarum/emoji/./src/forum/helpers/getEmojiIconCode.js","webpack://@flarum/emoji/./src/forum/components/AutocompleteDropdown.js","webpack://@flarum/emoji/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/emoji/./src/forum/addComposerAutocomplete.js","webpack://@flarum/emoji/./src/forum/index.js","webpack://@flarum/emoji/./src/forum/renderEmoji.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","properties","isBrowser","window","isFirefox","mozInnerScreenX","getCaretCoordinates","element","position","options","Error","debug","el","document","querySelector","parentNode","removeChild","div","createElement","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","twemoji","base","ext","size","className","convert","fromCodePoint","codepoint","code","fromCharCode","toCodePoint","onerror","this","replaceChild","createText","alt","parse","what","how","callback","parseString","parseNode","defaultImageSrcGenerator","attributes","returnNull","folder","test","text","re","lastIndex","result","escaper","UFE0Fg","U200D","String","rescaper","shouldntBeParsed","clean","createTextNode","icon","concat","grabTheRightIcon","rawText","indexOf","node","attrib","attrname","modified","fragment","subnode","match","index","img","iconId","src","allText","grabAllTextNodes","nodeType","childNodes","length","push","toLowerCase","createDocumentFragment","nodeValue","exec","slice","Image","setAttribute","hasAttribute","str","ret","replacer","unicodeSurrogates","sep","charCodeAt","toString","join","getEmojiIconCode","emoji","AutocompleteDropdown","subClass","superClass","constructor","__proto__","init","active","keyWasJustPressed","view","app","translator","trans","props","items","map","item","attrs","show","$","css","hide","navigate","delta","setIndex","clearTimeout","keyWasJustPressedTimeout","setTimeout","complete","eq","find","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","scrollTop","dropdownScroll","dropdownTop","offset","dropdownBottom","outerHeight","itemTop","itemBottom","stop","animate","Component","addComposerAutocomplete","emojiKeys","keys","emojiMap","extend","TextEditor","original","isInitialized","emojiStart","typed","$container","dropdown","$textarea","wrap","navigator","KeyboardNavigatable","when","onUp","onDown","onSelect","onCancel","bindTo","after","on","e","which","cursor","selectionStart","selectionEnd","character","substr","makeSuggestion","onclick","replacement","composer","editor","replaceBeforeCursor","onmouseenter","parent","class","draggable","reEscape","similarEmoji","regTyped","RegExp","maxSuggestions","findMatchingEmojis","matcher","curEmoji","suggestions","render","width","outerWidth","offsetParent","Math","max","buildSuggestions","add","insertAtCursor","initializers","override","Post","contentHtml","oldContentHtml","emojifiedContentHtml","s9e","TextFormatter"],"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 = 10);\n","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['components/TextEditor'];","module.exports = flarum.core.compat['app'];","/* 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 = flarum.core.compat['components/TextEditorButton'];","module.exports = flarum.core.compat['utils/KeyboardNavigatable'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['models/Post'];","/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */\nvar twemoji=function(){\"use strict\";var twemoji={base:\"https://twemoji.maxcdn.com/v/13.0.0/\",ext:\".png\",size:\"72x72\",className:\"emoji\",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt,false),this)}},parse:parse,replace:replace,test:test},escaper={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"'\":\"'\",'\"':\""\"},re=/(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d])|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd1d\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78\\udd7a-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcb\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7a\\ude80-\\ude86\\ude90-\\udea8\\udeb0-\\udeb6\\udec0-\\udec2\\uded0-\\uded6]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g,UFE0Fg=/\\uFE0F/g,U200D=String.fromCharCode(8205),rescaper=/[&<>'\"]/g,shouldntBeParsed=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,fromCharCode=String.fromCharCode;return twemoji;function createText(text,clean){return document.createTextNode(clean?text.replace(UFE0Fg,\"\"):text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return\"\".concat(options.base,options.size,\"/\",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!(\"ownerSVGElement\"in subnode)&&!shouldntBeParsed.test(subnode.nodeName.toLowerCase())){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf(U200D)<0?rawText.replace(UFE0Fg,\"\"):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index),true))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(iconId&&src){img=new Image;img.onerror=options.onerror;img.setAttribute(\"draggable\",\"false\");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf(\"on\")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText,false));img=null}if(modified){if(i<text.length){fragment.appendChild(createText(text.slice(i),true))}subnode.parentNode.replaceChild(fragment,subnode)}}return node}function parseString(str,options){return replace(str,function(rawText){var ret=rawText,iconId=grabTheRightIcon(rawText),src=options.callback(iconId,options),attrib,attrname;if(iconId&&src){ret=\"<img \".concat('class=\"',options.className,'\" ','draggable=\"false\" ','alt=\"',rawText,'\"',' src=\"',src,'\"');attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf(\"on\")!==0&&ret.indexOf(\" \"+attrname+\"=\")===-1){ret=ret.concat(\" \",attrname,'=\"',escapeHTML(attrib[attrname]),'\"')}}ret=ret.concat(\"/>\")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value===\"number\"?value+\"x\"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint===\"string\"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how===\"function\"){how={callback:how}}return(typeof what===\"string\"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes===\"function\"?how.attributes:returnNull,base:typeof how.base===\"string\"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i<unicodeSurrogates.length){c=unicodeSurrogates.charCodeAt(i++);if(p){r.push((65536+(p-55296<<10)+(c-56320)).toString(16));p=0}else if(55296<=c&&c<=56319){p=c}else{r.push(c.toString(16))}}return r.join(sep||\"-\")}}();\nexport default twemoji;","/*! Copyright Twitter Inc. and other contributors. Licensed under MIT *//*\n https://github.com/twitter/twemoji/blob/gh-pages/LICENSE\n*/\n\nimport twemoji from 'twemoji';\n\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst U200D = String.fromCharCode(0x200D);\n\n// avoid runtime RegExp creation for not so smart,\n// not JIT based, and old browsers / engines\nconst UFE0Fg = /\\uFE0F/g;\n\n/**\n * Used to both remove the possible variant\n * and to convert utf16 into code points.\n * If there is a zero-width-joiner (U+200D), leave the variants in.\n * @param string the raw text of the emoji match\n * @return string the code point\n */\nexport default function getEmojiIconCode(emoji) {\n return twemoji.convert.toCodePoint(emoji.indexOf(U200D) < 0 ?\n emoji.replace(UFE0Fg, '') :\n emoji\n );\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 EmojiDropdown\">\n <li className=\"Dropdown-header\" key=\"0\">{app.translator.trans('flarum-emoji.forum.composer.type_to_search_text')}</li>\n {this.props.items.map(item => <li key={item.attrs.key}>{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:not(.Dropdown-header)').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:not(.Dropdown-header)');\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","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","import getCaretCoordinates from 'textarea-caret';\nimport emojiMap from 'simple-emoji-map';\n\nimport { extend } from 'flarum/extend';\nimport TextEditor from 'flarum/components/TextEditor';\nimport TextEditorButton from 'flarum/components/TextEditorButton';\nimport getEmojiIconCode from './helpers/getEmojiIconCode';\nimport KeyboardNavigatable from 'flarum/utils/KeyboardNavigatable';\n\nimport AutocompleteDropdown from './components/AutocompleteDropdown';\n\nexport default function addComposerAutocomplete() {\n const emojiKeys = Object.keys(emojiMap);\n\n extend(TextEditor.prototype, 'config', function(original, isInitialized) {\n if (isInitialized) return;\n\n const $container = $('<div class=\"ComposerBody-emojiDropdownContainer\"></div>');\n const dropdown = new AutocompleteDropdown({items: []});\n const $textarea = this.$('textarea').wrap('<div class=\"ComposerBody-emojiWrapper\"></div>');\n let emojiStart;\n let typed;\n\n const applySuggestion = (replacement) => {\n this.props.composer.editor.replaceBeforeCursor(emojiStart - 1, replacement + ' ');\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 input', 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\n // one and followed by a whitespace, we will want to show the\n // autocomplete dropdown!\n const value = this.value;\n emojiStart = 0;\n for (let i = cursor - 1; i >= 0; i--) {\n const character = value.substr(i, 1);\n // check what user typed, emoji names only contains alphanumeric,\n // underline, '+' and '-'\n if (!/[a-z0-9]|\\+|\\-|_|\\:/.test(character)) break;\n // make sure ':' followed by a whitespace or newline\n if (character === ':' && (i == 0 || /\\s/.test(value.substr(i - 1, 1)))) {\n emojiStart = i + 1;\n break;\n }\n }\n\n dropdown.hide();\n dropdown.active = false;\n\n if (emojiStart) {\n typed = value.substring(emojiStart, cursor).toLowerCase();\n\n const makeSuggestion = function({emoji, name, code}) {\n return (\n <button\n key={emoji}\n onclick={() => applySuggestion(emoji)}\n onmouseenter={function() {\n dropdown.setIndex($(this).parent().index() - 1);\n }}>\n <img alt={emoji} class=\"emoji\" draggable=\"false\" src={'//cdn.jsdelivr.net/gh/twitter/twemoji@13/assets/72x72/' + code + '.png'}/>\n {name}\n </button>\n );\n };\n\n const buildSuggestions = () => {\n const similarEmoji = [];\n\n // Build a regular expression to do a fuzzy match of the given input string\n const fuzzyRegexp = function(str) {\n const reEscape = new RegExp('\\\\(([' + ('+.*?[]{}()^$|\\\\'.replace(/(.)/g, '\\\\$1')) + '])\\\\)', 'g');\n return new RegExp('(.*)' + (str.toLowerCase().replace(/(.)/g, '($1)(.*?)')).replace(reEscape, '(\\\\$1)') + '$', 'i');\n };\n const regTyped = fuzzyRegexp(typed);\n\n let maxSuggestions = 7;\n\n const findMatchingEmojis = matcher => {\n for (let i = 0; i < emojiKeys.length && maxSuggestions > 0; i++) {\n const curEmoji = emojiKeys[i];\n\n if (similarEmoji.indexOf(curEmoji) === -1) {\n const names = emojiMap[curEmoji];\n for (let name of names) {\n if (matcher(name)) {\n --maxSuggestions;\n similarEmoji.push(curEmoji);\n break;\n }\n }\n }\n }\n };\n\n // First, try to find all emojis starting with the given string\n findMatchingEmojis(emoji => emoji.indexOf(typed) === 0);\n\n // If there are still suggestions left, try for some fuzzy matches\n findMatchingEmojis(emoji => regTyped.test(emoji));\n\n const suggestions = similarEmoji.map(emoji => ({\n emoji,\n name: emojiMap[emoji][0],\n code: getEmojiIconCode(emoji),\n })).map(makeSuggestion);\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, emojiStart);\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 top = Math.max(-$(this).offset().top, top);\n left = Math.max(-$(this).offset().left, left);\n dropdown.show(left, top);\n }\n };\n\n buildSuggestions();\n\n dropdown.setIndex(0);\n dropdown.$().scrollTop(0);\n dropdown.active = true;\n }\n });\n });\n\n extend(TextEditor.prototype, 'toolbarItems', function(items) {\n items.add('emoji', (\n <TextEditorButton onclick={() => this.props.composer.editor.insertAtCursor(':')} icon=\"far fa-smile\">\n {app.translator.trans('flarum-emoji.forum.composer.emoji_tooltip')}\n </TextEditorButton>\n ));\n });\n}\n","import app from 'flarum/app';\n\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport renderEmoji from './renderEmoji';\n\napp.initializers.add('flarum-emoji', () => {\n // After typing ':' in the composer, show a dropdown suggesting a bunch of\n // emoji that the user could use.\n addComposerAutocomplete();\n\n // render emoji as image in Posts content and title.\n renderEmoji();\n});\n","/*global s9e*/\n\nimport twemoji from 'twemoji';\n\nimport { override } from 'flarum/extend';\nimport Post from 'flarum/models/Post';\n\nexport default function renderEmoji() {\n override(Post.prototype, 'contentHtml', function(original) {\n const contentHtml = original();\n\n if (this.oldContentHtml !== contentHtml) {\n this.emojifiedContentHtml = twemoji.parse(contentHtml);\n this.oldContentHtml = contentHtml;\n }\n\n return this.emojifiedContentHtml;\n });\n\n override(s9e.TextFormatter, 'preview', (original, text, element) => {\n original(text, element);\n\n twemoji.parse(element);\n });\n}\n"],"sourceRoot":""} |