{"version":3,"sources":["webpack:///./node_modules/markdown-it-emoji/lib/render.js","webpack:///./node_modules/markdown-it-emoji/index.js","webpack:///./node_modules/markdown-it-emoji/lib/normalize_opts.js","webpack:///./node_modules/markdown-it-emoji/lib/replace.js","webpack:///./node_modules/markdown-it-abbr/index.js","webpack:///./node_modules/markdown-it-emoji/lib/data/shortcuts.js","webpack:///./node_modules/markdown-it-deflist/index.js"],"names":["module","exports","tokens","idx","content","emojies_defs","emojies_shortcuts","emoji_html","emoji_replace","normalize_opts","md","options","defaults","defs","shortcuts","enabled","opts","utils","assign","renderer","rules","emoji","core","ruler","push","scanRE","replaceRE","quoteRE","str","replace","emojies","length","Object","keys","reduce","acc","key","indexOf","Array","isArray","forEach","alias","names","map","name","concat","sort","reverse","join","RegExp","arrayReplaceAt","ucm","lib","ucmicro","ZPCc","Z","source","P","Cc","splitTextToken","text","level","Token","token","last_pos","nodes","match","offset","src","emoji_name","hasOwnProperty","test","slice","markup","state","i","j","l","blockTokens","autolinkLevel","type","children","info","nesting","escapeRE","OTHER_CHARS","UNICODE_PUNCT_RE","UNICODE_SPACE_RE","abbr_def","startLine","endLine","silent","label","title","ch","labelStart","labelEnd","pos","bMarks","tShift","max","eMarks","charCodeAt","trim","env","abbreviations","line","abbr_replace","reg","m","regText","regSimple","currentToken","x","substr","a","b","split","lastIndex","exec","index","attrs","block","before","alt","after","angry","blush","broken_heart","confused","cry","frowning","heart","imp","innocent","joy","kissing","laughing","neutral_face","open_mouth","rage","smile","smiley","smiling_imp","sob","stuck_out_tongue","sunglasses","sweat","sweat_smile","unamused","wink","isSpace","skipMarker","marker","start","skipSpaces","markTightParagraphs","hidden","deflist","contentStart","ddLine","dtLine","itemLines","listLines","listTokIdx","nextLine","oldDDIndent","oldIndent","oldParentType","oldSCount","oldTShift","oldTight","prevEmptyEnd","tight","ddIndent","isEmpty","sCount","blkIndent","OUTER","getLines","parentType","tokenize"],"mappings":"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","file":"js/chunk-6212ce58.fc2be11c.js","sourcesContent":["'use strict';\n\nmodule.exports = function emoji_html(tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n","'use strict';\n\n\nvar emojies_defs = require('./lib/data/full.json');\nvar emojies_shortcuts = require('./lib/data/shortcuts');\nvar emoji_html = require('./lib/render');\nvar emoji_replace = require('./lib/replace');\nvar normalize_opts = require('./lib/normalize_opts');\n\n\nmodule.exports = function emoji_plugin(md, options) {\n var defaults = {\n defs: emojies_defs,\n shortcuts: emojies_shortcuts,\n enabled: []\n };\n\n var opts = normalize_opts(md.utils.assign({}, defaults, options || {}));\n\n md.renderer.rules.emoji = emoji_html;\n\n md.core.ruler.push('emoji', emoji_replace(md, opts.defs, opts.shortcuts, opts.scanRE, opts.replaceRE));\n};\n","// Convert input options to more useable format\n// and compile search regexp\n\n'use strict';\n\n\nfunction quoteRE(str) {\n return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&');\n}\n\n\nmodule.exports = function normalize_opts(options) {\n var emojies = options.defs,\n shortcuts;\n\n // Filter emojies by whitelist, if needed\n if (options.enabled.length) {\n emojies = Object.keys(emojies).reduce(function (acc, key) {\n if (options.enabled.indexOf(key) >= 0) {\n acc[key] = emojies[key];\n }\n return acc;\n }, {});\n }\n\n // Flatten shortcuts to simple object: { alias: emoji_name }\n shortcuts = Object.keys(options.shortcuts).reduce(function (acc, key) {\n // Skip aliases for filtered emojies, to reduce regexp\n if (!emojies[key]) { return acc; }\n\n if (Array.isArray(options.shortcuts[key])) {\n options.shortcuts[key].forEach(function (alias) {\n acc[alias] = key;\n });\n return acc;\n }\n\n acc[options.shortcuts[key]] = key;\n return acc;\n }, {});\n\n // Compile regexp\n var names = Object.keys(emojies)\n .map(function (name) { return ':' + name + ':'; })\n .concat(Object.keys(shortcuts))\n .sort()\n .reverse()\n .map(function (name) { return quoteRE(name); })\n .join('|');\n var scanRE = RegExp(names);\n var replaceRE = RegExp(names, 'g');\n\n return {\n defs: emojies,\n shortcuts: shortcuts,\n scanRE: scanRE,\n replaceRE: replaceRE\n };\n};\n","// Emojies & shortcuts replacement logic.\n//\n// Note: In theory, it could be faster to parse :smile: in inline chain and\n// leave only shortcuts here. But, who care...\n//\n\n'use strict';\n\n\nmodule.exports = function create_rule(md, emojies, shortcuts, scanRE, replaceRE) {\n var arrayReplaceAt = md.utils.arrayReplaceAt,\n ucm = md.utils.lib.ucmicro,\n ZPCc = new RegExp([ ucm.Z.source, ucm.P.source, ucm.Cc.source ].join('|'));\n\n function splitTextToken(text, level, Token) {\n var token, last_pos = 0, nodes = [];\n\n text.replace(replaceRE, function (match, offset, src) {\n var emoji_name;\n // Validate emoji name\n if (shortcuts.hasOwnProperty(match)) {\n // replace shortcut with full name\n emoji_name = shortcuts[match];\n\n // Don't allow letters before any shortcut (as in no \":/\" in http://)\n if (offset > 0 && !ZPCc.test(src[offset - 1])) {\n return;\n }\n\n // Don't allow letters after any shortcut\n if (offset + match.length < src.length && !ZPCc.test(src[offset + match.length])) {\n return;\n }\n } else {\n emoji_name = match.slice(1, -1);\n }\n\n // Add new tokens to pending list\n if (offset > last_pos) {\n token = new Token('text', '', 0);\n token.content = text.slice(last_pos, offset);\n nodes.push(token);\n }\n\n token = new Token('emoji', '', 0);\n token.markup = emoji_name;\n token.content = emojies[emoji_name];\n nodes.push(token);\n\n last_pos = offset + match.length;\n });\n\n if (last_pos < text.length) {\n token = new Token('text', '', 0);\n token.content = text.slice(last_pos);\n nodes.push(token);\n }\n\n return nodes;\n }\n\n return function emoji_replace(state) {\n var i, j, l, tokens, token,\n blockTokens = state.tokens,\n autolinkLevel = 0;\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline') { continue; }\n tokens = blockTokens[j].children;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n token = tokens[i];\n\n if (token.type === 'link_open' || token.type === 'link_close') {\n if (token.info === 'auto') { autolinkLevel -= token.nesting; }\n }\n\n if (token.type === 'text' && autolinkLevel === 0 && scanRE.test(token.content)) {\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(\n tokens, i, splitTextToken(token.content, token.level, state.Token)\n );\n }\n }\n }\n };\n};\n","// Enclose abbreviations in tags\n//\n'use strict';\n\n\nmodule.exports = function sub_plugin(md) {\n var escapeRE = md.utils.escapeRE,\n arrayReplaceAt = md.utils.arrayReplaceAt;\n\n // ASCII characters in Cc, Sc, Sm, Sk categories we should terminate on;\n // you can check character classes here:\n // http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n var OTHER_CHARS = ' \\r\\n$+<=>^`|~';\n\n var UNICODE_PUNCT_RE = md.utils.lib.ucmicro.P.source;\n var UNICODE_SPACE_RE = md.utils.lib.ucmicro.Z.source;\n\n\n function abbr_def(state, startLine, endLine, silent) {\n var label, title, ch, labelStart, labelEnd,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n if (pos + 2 >= max) { return false; }\n\n if (state.src.charCodeAt(pos++) !== 0x2A/* * */) { return false; }\n if (state.src.charCodeAt(pos++) !== 0x5B/* [ */) { return false; }\n\n labelStart = pos;\n\n for (; pos < max; pos++) {\n ch = state.src.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n }\n }\n\n if (labelEnd < 0 || state.src.charCodeAt(labelEnd + 1) !== 0x3A/* : */) {\n return false;\n }\n\n if (silent) { return true; }\n\n label = state.src.slice(labelStart, labelEnd).replace(/\\\\(.)/g, '$1');\n title = state.src.slice(labelEnd + 2, max).trim();\n if (label.length === 0) { return false; }\n if (title.length === 0) { return false; }\n if (!state.env.abbreviations) { state.env.abbreviations = {}; }\n // prepend ':' to avoid conflict with Object.prototype members\n if (typeof state.env.abbreviations[':' + label] === 'undefined') {\n state.env.abbreviations[':' + label] = title;\n }\n\n state.line = startLine + 1;\n return true;\n }\n\n\n function abbr_replace(state) {\n var i, j, l, tokens, token, text, nodes, pos, reg, m, regText, regSimple,\n currentToken,\n blockTokens = state.tokens;\n\n if (!state.env.abbreviations) { return; }\n\n regSimple = new RegExp('(?:' +\n Object.keys(state.env.abbreviations).map(function (x) {\n return x.substr(1);\n }).sort(function (a, b) {\n return b.length - a.length;\n }).map(escapeRE).join('|') +\n ')');\n\n regText = '(^|' + UNICODE_PUNCT_RE + '|' + UNICODE_SPACE_RE +\n '|[' + OTHER_CHARS.split('').map(escapeRE).join('') + '])'\n + '(' + Object.keys(state.env.abbreviations).map(function (x) {\n return x.substr(1);\n }).sort(function (a, b) {\n return b.length - a.length;\n }).map(escapeRE).join('|') + ')'\n + '($|' + UNICODE_PUNCT_RE + '|' + UNICODE_SPACE_RE +\n '|[' + OTHER_CHARS.split('').map(escapeRE).join('') + '])';\n\n reg = new RegExp(regText, 'g');\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline') { continue; }\n tokens = blockTokens[j].children;\n\n // We scan from the end, to keep position when new tags added.\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n if (currentToken.type !== 'text') { continue; }\n\n pos = 0;\n text = currentToken.content;\n reg.lastIndex = 0;\n nodes = [];\n\n // fast regexp run to determine whether there are any abbreviated words\n // in the current token\n if (!regSimple.test(text)) { continue; }\n\n while ((m = reg.exec(text))) {\n if (m.index > 0 || m[1].length > 0) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(pos, m.index + m[1].length);\n nodes.push(token);\n }\n\n token = new state.Token('abbr_open', 'abbr', 1);\n token.attrs = [ [ 'title', state.env.abbreviations[':' + m[2]] ] ];\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = m[2];\n nodes.push(token);\n\n token = new state.Token('abbr_close', 'abbr', -1);\n nodes.push(token);\n\n reg.lastIndex -= m[3].length;\n pos = reg.lastIndex;\n }\n\n if (!nodes.length) { continue; }\n\n if (pos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(pos);\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n\n md.block.ruler.before('reference', 'abbr_def', abbr_def, { alt: [ 'paragraph', 'reference' ] });\n\n md.core.ruler.after('linkify', 'abbr_replace', abbr_replace);\n};\n","// Emoticons -> Emoji mapping.\n//\n// (!) Some patterns skipped, to avoid collisions\n// without increase matcher complicity. Than can change in future.\n//\n// Places to look for more emoticons info:\n//\n// - http://en.wikipedia.org/wiki/List_of_emoticons#Western\n// - https://github.com/wooorm/emoticon/blob/master/Support.md\n// - http://factoryjoe.com/projects/emoticons/\n//\n'use strict';\n\nmodule.exports = {\n angry: [ '>:(', '>:-(' ],\n blush: [ ':\")', ':-\")' ],\n broken_heart: [ '= max) { return -1; }\n\n // Check bullet\n marker = state.src.charCodeAt(start++);\n if (marker !== 0x7E/* ~ */ && marker !== 0x3A/* : */) { return -1; }\n\n pos = state.skipSpaces(start);\n\n // require space after \":\"\n if (start === pos) { return -1; }\n\n // no empty definitions, e.g. \" : \"\n if (pos >= max) { return -1; }\n\n return start;\n }\n\n function markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n }\n\n function deflist(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n ddLine,\n dtLine,\n itemLines,\n listLines,\n listTokIdx,\n max,\n nextLine,\n offset,\n oldDDIndent,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n prevEmptyEnd,\n tight,\n token;\n\n if (silent) {\n // quirk: validation mode validates a dd block only, not a whole deflist\n if (state.ddIndent < 0) { return false; }\n return skipMarker(state, startLine) >= 0;\n }\n\n nextLine = startLine + 1;\n if (nextLine >= endLine) { return false; }\n\n if (state.isEmpty(nextLine)) {\n nextLine++;\n if (nextLine >= endLine) { return false; }\n }\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n contentStart = skipMarker(state, nextLine);\n if (contentStart < 0) { return false; }\n\n // Start list\n listTokIdx = state.tokens.length;\n tight = true;\n\n token = state.push('dl_open', 'dl', 1);\n token.map = listLines = [ startLine, 0 ];\n\n //\n // Iterate list items\n //\n\n dtLine = startLine;\n ddLine = nextLine;\n\n // One definition list can contain multiple DTs,\n // and one DT can be followed by multiple DDs.\n //\n // Thus, there is two loops here, and label is\n // needed to break out of the second one\n //\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n for (;;) {\n prevEmptyEnd = false;\n\n token = state.push('dt_open', 'dt', 1);\n token.map = [ dtLine, dtLine ];\n\n token = state.push('inline', '', 0);\n token.map = [ dtLine, dtLine ];\n token.content = state.getLines(dtLine, dtLine + 1, state.blkIndent, false).trim();\n token.children = [];\n\n token = state.push('dt_close', 'dt', -1);\n\n for (;;) {\n token = state.push('dd_open', 'dd', 1);\n token.map = itemLines = [ nextLine, 0 ];\n\n pos = contentStart;\n max = state.eMarks[ddLine];\n offset = state.sCount[ddLine] + contentStart - (state.bMarks[ddLine] + state.tShift[ddLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n oldTight = state.tight;\n oldDDIndent = state.ddIndent;\n oldIndent = state.blkIndent;\n oldTShift = state.tShift[ddLine];\n oldSCount = state.sCount[ddLine];\n oldParentType = state.parentType;\n state.blkIndent = state.ddIndent = state.sCount[ddLine] + 2;\n state.tShift[ddLine] = contentStart - state.bMarks[ddLine];\n state.sCount[ddLine] = offset;\n state.tight = true;\n state.parentType = 'deflist';\n\n state.md.block.tokenize(state, ddLine, endLine, true);\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - ddLine) > 1 && state.isEmpty(state.line - 1);\n\n state.tShift[ddLine] = oldTShift;\n state.sCount[ddLine] = oldSCount;\n state.tight = oldTight;\n state.parentType = oldParentType;\n state.blkIndent = oldIndent;\n state.ddIndent = oldDDIndent;\n\n token = state.push('dd_close', 'dd', -1);\n\n itemLines[1] = nextLine = state.line;\n\n if (nextLine >= endLine) { break OUTER; }\n\n if (state.sCount[nextLine] < state.blkIndent) { break OUTER; }\n contentStart = skipMarker(state, nextLine);\n if (contentStart < 0) { break; }\n\n ddLine = nextLine;\n\n // go to the next loop iteration:\n // insert DD tag and repeat checking\n }\n\n if (nextLine >= endLine) { break; }\n dtLine = nextLine;\n\n if (state.isEmpty(dtLine)) { break; }\n if (state.sCount[dtLine] < state.blkIndent) { break; }\n\n ddLine = dtLine + 1;\n if (ddLine >= endLine) { break; }\n if (state.isEmpty(ddLine)) { ddLine++; }\n if (ddLine >= endLine) { break; }\n\n if (state.sCount[ddLine] < state.blkIndent) { break; }\n contentStart = skipMarker(state, ddLine);\n if (contentStart < 0) { break; }\n\n // go to the next loop iteration:\n // insert DT and DD tags and repeat checking\n }\n\n // Finilize list\n token = state.push('dl_close', 'dl', -1);\n\n listLines[1] = nextLine;\n\n state.line = nextLine;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n }\n\n\n md.block.ruler.before('paragraph', 'deflist', deflist, { alt: [ 'paragraph', 'reference' ] });\n};\n"],"sourceRoot":""}