aboutsummaryrefslogtreecommitdiff
path: root/node_modules/prismjs/plugins/line-numbers
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/prismjs/plugins/line-numbers
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/prismjs/plugins/line-numbers')
-rw-r--r--node_modules/prismjs/plugins/line-numbers/prism-line-numbers.css41
-rw-r--r--node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js159
-rw-r--r--node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.js1
3 files changed, 201 insertions, 0 deletions
diff --git a/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.css b/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.css
new file mode 100644
index 00000000..08b29ed6
--- /dev/null
+++ b/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.css
@@ -0,0 +1,41 @@
+pre[class*="language-"].line-numbers {
+ position: relative;
+ padding-left: 3.8em;
+ counter-reset: linenumber;
+}
+
+pre[class*="language-"].line-numbers > code {
+ position: relative;
+ white-space: inherit;
+}
+
+.line-numbers .line-numbers-rows {
+ position: absolute;
+ pointer-events: none;
+ top: 0;
+ font-size: 100%;
+ left: -3.8em;
+ width: 3em; /* works for line-numbers below 1000 lines */
+ letter-spacing: -1px;
+ border-right: 1px solid #999;
+
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+
+}
+
+ .line-numbers-rows > span {
+ pointer-events: none;
+ display: block;
+ counter-increment: linenumber;
+ }
+
+ .line-numbers-rows > span:before {
+ content: counter(linenumber);
+ color: #999;
+ display: block;
+ padding-right: 0.8em;
+ text-align: right;
+ }
diff --git a/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js b/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js
new file mode 100644
index 00000000..e9e684fe
--- /dev/null
+++ b/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js
@@ -0,0 +1,159 @@
+(function () {
+
+ if (typeof self === 'undefined' || !self.Prism || !self.document) {
+ return;
+ }
+
+ /**
+ * Plugin name which is used as a class name for <pre> which is activating the plugin
+ * @type {String}
+ */
+ var PLUGIN_NAME = 'line-numbers';
+
+ /**
+ * Regular expression used for determining line breaks
+ * @type {RegExp}
+ */
+ var NEW_LINE_EXP = /\n(?!$)/g;
+
+ /**
+ * Resizes line numbers spans according to height of line of code
+ * @param {Element} element <pre> element
+ */
+ var _resizeElement = function (element) {
+ var codeStyles = getStyles(element);
+ var whiteSpace = codeStyles['white-space'];
+
+ if (whiteSpace === 'pre-wrap' || whiteSpace === 'pre-line') {
+ var codeElement = element.querySelector('code');
+ var lineNumbersWrapper = element.querySelector('.line-numbers-rows');
+ var lineNumberSizer = element.querySelector('.line-numbers-sizer');
+ var codeLines = codeElement.textContent.split(NEW_LINE_EXP);
+
+ if (!lineNumberSizer) {
+ lineNumberSizer = document.createElement('span');
+ lineNumberSizer.className = 'line-numbers-sizer';
+
+ codeElement.appendChild(lineNumberSizer);
+ }
+
+ lineNumberSizer.style.display = 'block';
+
+ codeLines.forEach(function (line, lineNumber) {
+ lineNumberSizer.textContent = line || '\n';
+ var lineSize = lineNumberSizer.getBoundingClientRect().height;
+ lineNumbersWrapper.children[lineNumber].style.height = lineSize + 'px';
+ });
+
+ lineNumberSizer.textContent = '';
+ lineNumberSizer.style.display = 'none';
+ }
+ };
+
+ /**
+ * Returns style declarations for the element
+ * @param {Element} element
+ */
+ var getStyles = function (element) {
+ if (!element) {
+ return null;
+ }
+
+ return window.getComputedStyle ? getComputedStyle(element) : (element.currentStyle || null);
+ };
+
+ window.addEventListener('resize', function () {
+ Array.prototype.forEach.call(document.querySelectorAll('pre.' + PLUGIN_NAME), _resizeElement);
+ });
+
+ Prism.hooks.add('complete', function (env) {
+ if (!env.code) {
+ return;
+ }
+
+ // works only for <code> wrapped inside <pre> (not inline)
+ var pre = env.element.parentNode;
+ var clsReg = /\s*\bline-numbers\b\s*/;
+ if (
+ !pre || !/pre/i.test(pre.nodeName) ||
+ // Abort only if nor the <pre> nor the <code> have the class
+ (!clsReg.test(pre.className) && !clsReg.test(env.element.className))
+ ) {
+ return;
+ }
+
+ if (env.element.querySelector('.line-numbers-rows')) {
+ // Abort if line numbers already exists
+ return;
+ }
+
+ if (clsReg.test(env.element.className)) {
+ // Remove the class 'line-numbers' from the <code>
+ env.element.className = env.element.className.replace(clsReg, ' ');
+ }
+ if (!clsReg.test(pre.className)) {
+ // Add the class 'line-numbers' to the <pre>
+ pre.className += ' line-numbers';
+ }
+
+ var match = env.code.match(NEW_LINE_EXP);
+ var linesNum = match ? match.length + 1 : 1;
+ var lineNumbersWrapper;
+
+ var lines = new Array(linesNum + 1);
+ lines = lines.join('<span></span>');
+
+ lineNumbersWrapper = document.createElement('span');
+ lineNumbersWrapper.setAttribute('aria-hidden', 'true');
+ lineNumbersWrapper.className = 'line-numbers-rows';
+ lineNumbersWrapper.innerHTML = lines;
+
+ if (pre.hasAttribute('data-start')) {
+ pre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);
+ }
+
+ env.element.appendChild(lineNumbersWrapper);
+
+ _resizeElement(pre);
+
+ Prism.hooks.run('line-numbers', env);
+ });
+
+ Prism.hooks.add('line-numbers', function (env) {
+ env.plugins = env.plugins || {};
+ env.plugins.lineNumbers = true;
+ });
+
+ /**
+ * Global exports
+ */
+ Prism.plugins.lineNumbers = {
+ /**
+ * Get node for provided line number
+ * @param {Element} element pre element
+ * @param {Number} number line number
+ * @return {Element|undefined}
+ */
+ getLine: function (element, number) {
+ if (element.tagName !== 'PRE' || !element.classList.contains(PLUGIN_NAME)) {
+ return;
+ }
+
+ var lineNumberRows = element.querySelector('.line-numbers-rows');
+ var lineNumberStart = parseInt(element.getAttribute('data-start'), 10) || 1;
+ var lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);
+
+ if (number < lineNumberStart) {
+ number = lineNumberStart;
+ }
+ if (number > lineNumberEnd) {
+ number = lineNumberEnd;
+ }
+
+ var lineIndex = number - lineNumberStart;
+
+ return lineNumberRows.children[lineIndex];
+ }
+ };
+
+}()); \ No newline at end of file
diff --git a/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.js b/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.js
new file mode 100644
index 00000000..5291216f
--- /dev/null
+++ b/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.js
@@ -0,0 +1 @@
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e="line-numbers",t=/\n(?!$)/g,n=function(e){var n=r(e),s=n["white-space"];if("pre-wrap"===s||"pre-line"===s){var l=e.querySelector("code"),i=e.querySelector(".line-numbers-rows"),a=e.querySelector(".line-numbers-sizer"),o=l.textContent.split(t);a||(a=document.createElement("span"),a.className="line-numbers-sizer",l.appendChild(a)),a.style.display="block",o.forEach(function(e,t){a.textContent=e||"\n";var n=a.getBoundingClientRect().height;i.children[t].style.height=n+"px"}),a.textContent="",a.style.display="none"}},r=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null};window.addEventListener("resize",function(){Array.prototype.forEach.call(document.querySelectorAll("pre."+e),n)}),Prism.hooks.add("complete",function(e){if(e.code){var r=e.element.parentNode,s=/\s*\bline-numbers\b\s*/;if(r&&/pre/i.test(r.nodeName)&&(s.test(r.className)||s.test(e.element.className))&&!e.element.querySelector(".line-numbers-rows")){s.test(e.element.className)&&(e.element.className=e.element.className.replace(s," ")),s.test(r.className)||(r.className+=" line-numbers");var l,i=e.code.match(t),a=i?i.length+1:1,o=new Array(a+1);o=o.join("<span></span>"),l=document.createElement("span"),l.setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=o,r.hasAttribute("data-start")&&(r.style.counterReset="linenumber "+(parseInt(r.getAttribute("data-start"),10)-1)),e.element.appendChild(l),n(r),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}),Prism.plugins.lineNumbers={getLine:function(t,n){if("PRE"===t.tagName&&t.classList.contains(e)){var r=t.querySelector(".line-numbers-rows"),s=parseInt(t.getAttribute("data-start"),10)||1,l=s+(r.children.length-1);s>n&&(n=s),n>l&&(n=l);var i=n-s;return r.children[i]}}}}}(); \ No newline at end of file