{"version":3,"sources":["node_modules/nodebb-plugin-markdown/public/js/highlightjs-line-numbers.js"],"names":["define","w","window","d","document","TABLE_NAME","LINE_NAME","CODE_BLOCK_NAME","NUMBERS_BLOCK_NAME","NUMBER_LINE_NAME","DATA_ATTR_NAME","BREAK_LINE_REGEXP","hljs","initLineNumbersOnLoad","lineNumbersBlock","addStyles","console","error","css","createElement","type","innerHTML","format","getElementsByTagName","appendChild","options","readyState","documentReady","addEventListener","blocks","querySelectorAll","i","hasOwnProperty","e","element","singleLine","firstLineIndex","async","duplicateMultilineNodes","addLineNumbersBlockFor","inputHtml","lines","getLines","length","trim","pop","html","l","nodes","childNodes","node","child","getLinesCount","textContent","duplicateMultilineNode","parentNode","className","test","result","text","split","match","func","setTimeout","args","replace","m","n"],"mappings":"AASAA,OAAO,4BAA6B,aAAc,WACjD,IAAIC,EAAIC,OACR,IAAIC,EAAIC,SAEL,IAAIC,EAAa,UACbC,EAAY,eACZC,EAAkB,eAClBC,EAAqB,kBACrBC,EAAmB,YACnBC,EAAiB,mBACjBC,EAAoB,cAExB,GAAIV,EAAEW,KAAM,CACRX,EAAEW,KAAKC,sBAAwBA,EAC/BZ,EAAEW,KAAKE,iBAAmBA,EAE1BC,QACG,CACHd,EAAEe,QAAQC,MAAM,8BAGpB,SAASF,IACL,IAAIG,EAAMf,EAAEgB,cAAc,SAC1BD,EAAIE,KAAO,WACXF,EAAIG,UAAYC,EACZ,0GAIAjB,EACAI,EACAC,IAEJP,EAAEoB,qBAAqB,QAAQ,GAAGC,YAAYN,GAGlD,SAASL,EAAuBY,GAC5B,GAAItB,EAAEuB,aAAe,WAAY,CAC7BC,EAAcF,OACX,CACHxB,EAAE2B,iBAAiB,mBAAoB,WACnCD,EAAcF,MAK1B,SAASE,EAAeF,GACpB,IACI,IAAII,EAAS1B,EAAE2B,iBAAiB,aAEhC,IAAK,IAAIC,KAAKF,EAAQ,CAClB,GAAIA,EAAOG,eAAeD,GAAI,CAC1BjB,EAAiBe,EAAOE,GAAIN,KAGtC,MAAOQ,GACLhC,EAAEe,QAAQC,MAAM,sBAAuBgB,IAI/C,SAASnB,EAAkBoB,EAAST,GAChC,UAAWS,IAAY,SAAU,OAGjCT,EAAUA,IACNU,WAAY,OAIhB,IAAIC,IAAmBX,EAAQU,WAAa,EAAI,EAEhDE,EAAM,WAEFC,EAAwBJ,GAExBA,EAAQb,UAAYkB,EAAuBL,EAAQb,UAAWe,KAItE,SAASG,EAAwBC,EAAWJ,GAExC,IAAIK,EAAQC,EAASF,GAGrB,GAAIC,EAAMA,EAAME,OAAO,GAAGC,SAAW,GAAI,CACrCH,EAAMI,MAGV,GAAIJ,EAAME,OAASP,EAAgB,CAC/B,IAAIU,EAAO,GAEX,IAAK,IAAIf,EAAI,EAAGgB,EAAIN,EAAME,OAAQZ,EAAIgB,EAAGhB,IAAK,CAC1Ce,GAAQxB,EACJ,kSASAd,EACAF,EACAG,EACAC,EACAH,EACAwB,EAAI,EACJU,EAAMV,GAAGY,OAAS,EAAIF,EAAMV,GAAK,MAIzC,OAAOT,EAAO,kCAAoCjB,EAAYyC,IAGlE,OAAON,EAQX,SAASF,EAAyBJ,GAC9B,IAAIc,EAAQd,EAAQe,WACpB,IAAK,IAAIC,KAAQF,EAAO,CACpB,GAAIA,EAAMhB,eAAekB,GAAO,CAC5B,IAAIC,EAAQH,EAAME,GAClB,GAAIE,EAAcD,EAAME,aAAe,EAAG,CACtC,GAAIF,EAAMF,WAAWN,OAAS,EAAG,CAC7BL,EAAwBa,OACrB,CACHG,EAAuBH,EAAMI,gBAWjD,SAASD,EAAwBpB,GAC7B,IAAIsB,EAAYtB,EAAQsB,UAExB,IAAO,QAAQC,KAAKD,GAAY,OAEhC,IAAIf,EAAQC,EAASR,EAAQb,WAE7B,IAAK,IAAIU,EAAI,EAAG2B,EAAS,GAAI3B,EAAIU,EAAME,OAAQZ,IAAK,CAChD2B,GAAUpC,EAAO,kCAAoCkC,EAAWf,EAAMV,KAG1EG,EAAQb,UAAYqC,EAAOd,OAG/B,SAASF,EAAUiB,GACf,GAAIA,EAAKhB,SAAW,EAAG,SACvB,OAAOgB,EAAKC,MAAMjD,GAGtB,SAASyC,EAAeO,GACpB,OAAQA,EAAKf,OAAOiB,MAAMlD,QAA0BgC,OAGxD,SAASN,EAAOyB,GACZ7D,EAAE8D,WAAWD,EAAM,GAQvB,SAASxC,EAAQA,EAAQ0C,GACrB,OAAO1C,EAAO2C,QAAQ,aAAc,SAASC,EAAGC,GAC5C,OAAOH,EAAKG,GAAKH,EAAKG,GAAKD","file":"node_modules/nodebb-plugin-markdown/public/js/highlightjs-line-numbers.js","sourcesContent":["/**\n * STOP! This file was edited from the version found in the repo\n * https://github.com/wcoder/highlightjs-line-numbers.js\n * \n * Changes:\n * - Made into a requirejs module\n * - Instead of passing window, document in as w and d, they\n * are defined at top of module\n */\ndefine('highlightjs-line-numbers', ['highlight'], function () {\n\tvar w = window;\n\tvar d = document;\n\n var TABLE_NAME = 'hljs-ln',\n LINE_NAME = 'hljs-ln-line',\n CODE_BLOCK_NAME = 'hljs-ln-code',\n NUMBERS_BLOCK_NAME = 'hljs-ln-numbers',\n NUMBER_LINE_NAME = 'hljs-ln-n',\n DATA_ATTR_NAME = 'data-line-number',\n BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g;\n\n if (w.hljs) {\n w.hljs.initLineNumbersOnLoad = initLineNumbersOnLoad;\n w.hljs.lineNumbersBlock = lineNumbersBlock;\n\n addStyles();\n } else {\n w.console.error('highlight.js not detected!');\n }\n\n function addStyles () {\n var css = d.createElement('style');\n css.type = 'text/css';\n css.innerHTML = format(\n '.{0}{border-collapse:collapse}\\\n .{0} td{padding:0}\\\n .{1}:before{content:attr({2})}',\n [\n TABLE_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME\n ]);\n d.getElementsByTagName('head')[0].appendChild(css);\n }\n\n function initLineNumbersOnLoad (options) {\n if (d.readyState === 'complete') {\n documentReady(options);\n } else {\n w.addEventListener('DOMContentLoaded', function () {\n documentReady(options);\n });\n }\n }\n\n function documentReady (options) {\n try {\n var blocks = d.querySelectorAll('code.hljs');\n\n for (var i in blocks) {\n if (blocks.hasOwnProperty(i)) {\n lineNumbersBlock(blocks[i], options);\n }\n }\n } catch (e) {\n w.console.error('LineNumbers error: ', e);\n }\n }\n\n function lineNumbersBlock (element, options) {\n if (typeof element !== 'object') return;\n\n // define options or set default\n options = options || {\n singleLine: false\n };\n\n // convert options\n var firstLineIndex = !!options.singleLine ? 0 : 1;\n\n async(function () {\n\n duplicateMultilineNodes(element);\n\n element.innerHTML = addLineNumbersBlockFor(element.innerHTML, firstLineIndex);\n });\n }\n\n function addLineNumbersBlockFor (inputHtml, firstLineIndex) {\n\n var lines = getLines(inputHtml);\n\n // if last line contains only carriage return remove it\n if (lines[lines.length-1].trim() === '') {\n lines.pop();\n }\n\n if (lines.length > firstLineIndex) {\n var html = '';\n\n for (var i = 0, l = lines.length; i < l; i++) {\n html += format(\n '\\\n \\\n
\\\n \\\n \\\n
{6}
\\\n \\\n ',\n [\n NUMBERS_BLOCK_NAME,\n LINE_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME,\n CODE_BLOCK_NAME,\n i + 1,\n lines[i].length > 0 ? lines[i] : ' '\n ]);\n }\n\n return format('{1}
', [ TABLE_NAME, html ]);\n }\n\n return inputHtml;\n }\n\n /**\n * Recursive method for fix multi-line elements implementation in highlight.js\n * Doing deep passage on child nodes.\n * @param {HTMLElement} element\n */\n function duplicateMultilineNodes (element) {\n var nodes = element.childNodes;\n for (var node in nodes) {\n if (nodes.hasOwnProperty(node)) {\n var child = nodes[node];\n if (getLinesCount(child.textContent) > 0) {\n if (child.childNodes.length > 0) {\n duplicateMultilineNodes(child);\n } else {\n duplicateMultilineNode(child.parentNode);\n }\n }\n }\n }\n }\n\n /**\n * Method for fix multi-line elements implementation in highlight.js\n * @param {HTMLElement} element\n */\n function duplicateMultilineNode (element) {\n var className = element.className;\n\n if ( ! /hljs-/.test(className)) return;\n\n var lines = getLines(element.innerHTML);\n\n for (var i = 0, result = ''; i < lines.length; i++) {\n result += format('{1}\\n', [ className, lines[i] ]);\n }\n\n element.innerHTML = result.trim();\n }\n\n function getLines (text) {\n if (text.length === 0) return [];\n return text.split(BREAK_LINE_REGEXP);\n }\n\n function getLinesCount (text) {\n return (text.trim().match(BREAK_LINE_REGEXP) || []).length;\n }\n\n function async (func) {\n w.setTimeout(func, 0);\n }\n\n /**\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\n * @param {string} format\n * @param {array} args\n */\n function format (format, args) {\n return format.replace(/\\{(\\d+)\\}/g, function(m, n){\n return args[n] ? args[n] : m;\n });\n }\n});"]}