From d7ba01c52c02470fbcea6bdc43e58ac0d28084de Mon Sep 17 00:00:00 2001 From: muqiuhan Date: Fri, 24 Feb 2023 14:22:33 +0000 Subject: deploy: c7baa4dd029ccb68a9b82cabb1282e6dd291dba1 --- js/highlightjs-line-numbers.js | 51 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 js/highlightjs-line-numbers.js (limited to 'js/highlightjs-line-numbers.js') diff --git a/js/highlightjs-line-numbers.js b/js/highlightjs-line-numbers.js new file mode 100644 index 00000000..194098d4 --- /dev/null +++ b/js/highlightjs-line-numbers.js @@ -0,0 +1,51 @@ +(function(w,d){'use strict';var TABLE_NAME='hljs-ln',LINE_NAME='hljs-ln-line',CODE_BLOCK_NAME='hljs-ln-code',NUMBERS_BLOCK_NAME='hljs-ln-numbers',NUMBER_LINE_NAME='hljs-ln-n',DATA_ATTR_NAME='data-line-number',BREAK_LINE_REGEXP=/\r\n|\r|\n/g;if(w.hljs){w.hljs.initLineNumbersOnLoad=initLineNumbersOnLoad;w.hljs.lineNumbersBlock=lineNumbersBlock;w.hljs.lineNumbersValue=lineNumbersValue;addStyles();}else{w.console.error('highlight.js not detected!');} +function isHljsLnCodeDescendant(domElt){var curElt=domElt;while(curElt){if(curElt.className&&curElt.className.indexOf('hljs-ln-code')!==-1){return true;} +curElt=curElt.parentNode;} +return false;} +function getHljsLnTable(hljsLnDomElt){var curElt=hljsLnDomElt;while(curElt.nodeName!=='TABLE'){curElt=curElt.parentNode;} +return curElt;} +function edgeGetSelectedCodeLines(selection){var selectionText=selection.toString();var tdAnchor=selection.anchorNode;while(tdAnchor.nodeName!=='TD'){tdAnchor=tdAnchor.parentNode;} +var tdFocus=selection.focusNode;while(tdFocus.nodeName!=='TD'){tdFocus=tdFocus.parentNode;} +var firstLineNumber=parseInt(tdAnchor.dataset.lineNumber);var lastLineNumber=parseInt(tdFocus.dataset.lineNumber);if(firstLineNumber!=lastLineNumber){var firstLineText=tdAnchor.textContent;var lastLineText=tdFocus.textContent;if(firstLineNumber>lastLineNumber){var tmp=firstLineNumber;firstLineNumber=lastLineNumber;lastLineNumber=tmp;tmp=firstLineText;firstLineText=lastLineText;lastLineText=tmp;} +while(selectionText.indexOf(firstLineText)!==0){firstLineText=firstLineText.slice(1);} +while(selectionText.lastIndexOf(lastLineText)===-1){lastLineText=lastLineText.slice(0,-1);} +var selectedText=firstLineText;var hljsLnTable=getHljsLnTable(tdAnchor);for(var i=firstLineNumber+1;i1||options.singleLine){var html='';for(var i=0,l=lines.length;i'+ +''+ +'
'+ +''+ +''+ +'{6}'+ +''+ +'',[LINE_NAME,NUMBERS_BLOCK_NAME,NUMBER_LINE_NAME,DATA_ATTR_NAME,CODE_BLOCK_NAME,i+options.startFrom,lines[i].length>0?lines[i]:' ']);} +return format('{1}
',[TABLE_NAME,html]);} +return inputHtml;} +function mapOptions(element,options){options=options||{};return{singleLine:getSingleLineOption(options),startFrom:getStartFromOption(element,options)};} +function getSingleLineOption(options){var defaultValue=false;if(!!options.singleLine){return options.singleLine;} +return defaultValue;} +function getStartFromOption(element,options){var defaultValue=1;var startFrom=defaultValue;if(isFinite(options.startFrom)){startFrom=options.startFrom;} +var value=getAttribute(element,'data-ln-start-from');if(value!==null){startFrom=toNumber(value,defaultValue);} +return startFrom;} +function duplicateMultilineNodes(element){var nodes=element.childNodes;for(var node in nodes){if(nodes.hasOwnProperty(node)){var child=nodes[node];if(getLinesCount(child.textContent)>0){if(child.childNodes.length>0){duplicateMultilineNodes(child);}else{duplicateMultilineNode(child.parentNode);}}}}} +function duplicateMultilineNode(element){var className=element.className;if(!/hljs-/.test(className))return;var lines=getLines(element.innerHTML);for(var i=0,result='';i0?lines[i]:' ';result+=format('{1}\n',[className,lineText]);} +element.innerHTML=result.trim();} +function getLines(text){if(text.length===0)return[];return text.split(BREAK_LINE_REGEXP);} +function getLinesCount(text){return(text.trim().match(BREAK_LINE_REGEXP)||[]).length;} +function async(func){w.setTimeout(func,0);} +function format(format,args){return format.replace(/\{(\d+)\}/g,function(m,n){return args[n]!==undefined?args[n]:m;});} +function getAttribute(element,attrName){return element.hasAttribute(attrName)?element.getAttribute(attrName):null;} +function toNumber(str,fallback){if(!str)return fallback;var number=Number(str);return isFinite(number)?number:fallback;}}(window,document)); \ No newline at end of file -- cgit v1.2.3