Locally add prismjs
This commit is contained in:
parent
35af792c6a
commit
6aa044cf9b
701 changed files with 35787 additions and 0 deletions
70
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.css
generated
vendored
Normal file
70
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.css
generated
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
pre[data-line] {
|
||||
position: relative;
|
||||
padding: 1em 0 1em 3em;
|
||||
}
|
||||
|
||||
.line-highlight {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: inherit 0;
|
||||
margin-top: 1em; /* Same as .prism’s padding-top */
|
||||
|
||||
background: hsla(24, 20%, 50%,.08);
|
||||
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
|
||||
|
||||
pointer-events: none;
|
||||
|
||||
line-height: inherit;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.line-highlight {
|
||||
/*
|
||||
* This will prevent browsers from replacing the background color with white.
|
||||
* It's necessary because the element is layered on top of the displayed code.
|
||||
*/
|
||||
-webkit-print-color-adjust: exact;
|
||||
color-adjust: exact;
|
||||
}
|
||||
}
|
||||
|
||||
.line-highlight:before,
|
||||
.line-highlight[data-end]:after {
|
||||
content: attr(data-start);
|
||||
position: absolute;
|
||||
top: .4em;
|
||||
left: .6em;
|
||||
min-width: 1em;
|
||||
padding: 0 .5em;
|
||||
background-color: hsla(24, 20%, 50%,.4);
|
||||
color: hsl(24, 20%, 95%);
|
||||
font: bold 65%/1.5 sans-serif;
|
||||
text-align: center;
|
||||
vertical-align: .3em;
|
||||
border-radius: 999px;
|
||||
text-shadow: none;
|
||||
box-shadow: 0 1px white;
|
||||
}
|
||||
|
||||
.line-highlight[data-end]:after {
|
||||
content: attr(data-end);
|
||||
top: auto;
|
||||
bottom: .4em;
|
||||
}
|
||||
|
||||
.line-numbers .line-highlight:before,
|
||||
.line-numbers .line-highlight:after {
|
||||
content: none;
|
||||
}
|
||||
|
||||
pre[id].linkable-line-numbers span.line-numbers-rows {
|
||||
pointer-events: all;
|
||||
}
|
||||
pre[id].linkable-line-numbers span.line-numbers-rows > span:before {
|
||||
cursor: pointer;
|
||||
}
|
||||
pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before {
|
||||
background-color: rgba(128, 128, 128, .2);
|
||||
}
|
346
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.js
generated
vendored
Normal file
346
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.js
generated
vendored
Normal file
|
@ -0,0 +1,346 @@
|
|||
(function () {
|
||||
|
||||
if (typeof Prism === 'undefined' || typeof document === 'undefined' || !document.querySelector) {
|
||||
return;
|
||||
}
|
||||
|
||||
var LINE_NUMBERS_CLASS = 'line-numbers';
|
||||
var LINKABLE_LINE_NUMBERS_CLASS = 'linkable-line-numbers';
|
||||
var NEW_LINE_EXP = /\n(?!$)/g;
|
||||
|
||||
/**
|
||||
* @param {string} selector
|
||||
* @param {ParentNode} [container]
|
||||
* @returns {HTMLElement[]}
|
||||
*/
|
||||
function $$(selector, container) {
|
||||
return Array.prototype.slice.call((container || document).querySelectorAll(selector));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the given element has the given class.
|
||||
*
|
||||
* @param {Element} element
|
||||
* @param {string} className
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function hasClass(element, className) {
|
||||
return element.classList.contains(className);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the given function.
|
||||
*
|
||||
* @param {() => any} func
|
||||
* @returns {void}
|
||||
*/
|
||||
function callFunction(func) {
|
||||
func();
|
||||
}
|
||||
|
||||
// Some browsers round the line-height, others don't.
|
||||
// We need to test for it to position the elements properly.
|
||||
var isLineHeightRounded = (function () {
|
||||
var res;
|
||||
return function () {
|
||||
if (typeof res === 'undefined') {
|
||||
var d = document.createElement('div');
|
||||
d.style.fontSize = '13px';
|
||||
d.style.lineHeight = '1.5';
|
||||
d.style.padding = '0';
|
||||
d.style.border = '0';
|
||||
d.innerHTML = ' <br /> ';
|
||||
document.body.appendChild(d);
|
||||
// Browsers that round the line-height should have offsetHeight === 38
|
||||
// The others should have 39.
|
||||
res = d.offsetHeight === 38;
|
||||
document.body.removeChild(d);
|
||||
}
|
||||
return res;
|
||||
};
|
||||
}());
|
||||
|
||||
/**
|
||||
* Returns the top offset of the content box of the given parent and the content box of one of its children.
|
||||
*
|
||||
* @param {HTMLElement} parent
|
||||
* @param {HTMLElement} child
|
||||
*/
|
||||
function getContentBoxTopOffset(parent, child) {
|
||||
var parentStyle = getComputedStyle(parent);
|
||||
var childStyle = getComputedStyle(child);
|
||||
|
||||
/**
|
||||
* Returns the numeric value of the given pixel value.
|
||||
*
|
||||
* @param {string} px
|
||||
*/
|
||||
function pxToNumber(px) {
|
||||
return +px.substr(0, px.length - 2);
|
||||
}
|
||||
|
||||
return child.offsetTop
|
||||
+ pxToNumber(childStyle.borderTopWidth)
|
||||
+ pxToNumber(childStyle.paddingTop)
|
||||
- pxToNumber(parentStyle.paddingTop);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the Line Highlight plugin is active for the given element.
|
||||
*
|
||||
* If this function returns `false`, do not call `highlightLines` for the given element.
|
||||
*
|
||||
* @param {HTMLElement | null | undefined} pre
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isActiveFor(pre) {
|
||||
if (!pre || !/pre/i.test(pre.nodeName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pre.hasAttribute('data-line')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (pre.id && Prism.util.isActive(pre, LINKABLE_LINE_NUMBERS_CLASS)) {
|
||||
// Technically, the line numbers plugin is also necessary but this plugin doesn't control the classes of
|
||||
// the line numbers plugin, so we can't assume that they are present.
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
var scrollIntoView = true;
|
||||
|
||||
Prism.plugins.lineHighlight = {
|
||||
/**
|
||||
* Highlights the lines of the given pre.
|
||||
*
|
||||
* This function is split into a DOM measuring and mutate phase to improve performance.
|
||||
* The returned function mutates the DOM when called.
|
||||
*
|
||||
* @param {HTMLElement} pre
|
||||
* @param {string | null} [lines]
|
||||
* @param {string} [classes='']
|
||||
* @returns {() => void}
|
||||
*/
|
||||
highlightLines: function highlightLines(pre, lines, classes) {
|
||||
lines = typeof lines === 'string' ? lines : (pre.getAttribute('data-line') || '');
|
||||
|
||||
var ranges = lines.replace(/\s+/g, '').split(',').filter(Boolean);
|
||||
var offset = +pre.getAttribute('data-line-offset') || 0;
|
||||
|
||||
var parseMethod = isLineHeightRounded() ? parseInt : parseFloat;
|
||||
var lineHeight = parseMethod(getComputedStyle(pre).lineHeight);
|
||||
var hasLineNumbers = Prism.util.isActive(pre, LINE_NUMBERS_CLASS);
|
||||
var codeElement = pre.querySelector('code');
|
||||
var parentElement = hasLineNumbers ? pre : codeElement || pre;
|
||||
var mutateActions = /** @type {(() => void)[]} */ ([]);
|
||||
var lineBreakMatch = codeElement.textContent.match(NEW_LINE_EXP);
|
||||
var numberOfLines = lineBreakMatch ? lineBreakMatch.length + 1 : 1;
|
||||
/**
|
||||
* The top offset between the content box of the <code> element and the content box of the parent element of
|
||||
* the line highlight element (either `<pre>` or `<code>`).
|
||||
*
|
||||
* This offset might not be zero for some themes where the <code> element has a top margin. Some plugins
|
||||
* (or users) might also add element above the <code> element. Because the line highlight is aligned relative
|
||||
* to the <pre> element, we have to take this into account.
|
||||
*
|
||||
* This offset will be 0 if the parent element of the line highlight element is the `<code>` element.
|
||||
*/
|
||||
var codePreOffset = !codeElement || parentElement == codeElement ? 0 : getContentBoxTopOffset(pre, codeElement);
|
||||
|
||||
ranges.forEach(function (currentRange) {
|
||||
var range = currentRange.split('-');
|
||||
|
||||
var start = +range[0];
|
||||
var end = +range[1] || start;
|
||||
end = Math.min(numberOfLines + offset, end);
|
||||
|
||||
if (end < start) {
|
||||
return;
|
||||
}
|
||||
|
||||
/** @type {HTMLElement} */
|
||||
var line = pre.querySelector('.line-highlight[data-range="' + currentRange + '"]') || document.createElement('div');
|
||||
|
||||
mutateActions.push(function () {
|
||||
line.setAttribute('aria-hidden', 'true');
|
||||
line.setAttribute('data-range', currentRange);
|
||||
line.className = (classes || '') + ' line-highlight';
|
||||
});
|
||||
|
||||
// if the line-numbers plugin is enabled, then there is no reason for this plugin to display the line numbers
|
||||
if (hasLineNumbers && Prism.plugins.lineNumbers) {
|
||||
var startNode = Prism.plugins.lineNumbers.getLine(pre, start);
|
||||
var endNode = Prism.plugins.lineNumbers.getLine(pre, end);
|
||||
|
||||
if (startNode) {
|
||||
var top = startNode.offsetTop + codePreOffset + 'px';
|
||||
mutateActions.push(function () {
|
||||
line.style.top = top;
|
||||
});
|
||||
}
|
||||
|
||||
if (endNode) {
|
||||
var height = (endNode.offsetTop - startNode.offsetTop) + endNode.offsetHeight + 'px';
|
||||
mutateActions.push(function () {
|
||||
line.style.height = height;
|
||||
});
|
||||
}
|
||||
} else {
|
||||
mutateActions.push(function () {
|
||||
line.setAttribute('data-start', String(start));
|
||||
|
||||
if (end > start) {
|
||||
line.setAttribute('data-end', String(end));
|
||||
}
|
||||
|
||||
line.style.top = (start - offset - 1) * lineHeight + codePreOffset + 'px';
|
||||
|
||||
line.textContent = new Array(end - start + 2).join(' \n');
|
||||
});
|
||||
}
|
||||
|
||||
mutateActions.push(function () {
|
||||
line.style.width = pre.scrollWidth + 'px';
|
||||
});
|
||||
|
||||
mutateActions.push(function () {
|
||||
// allow this to play nicely with the line-numbers plugin
|
||||
// need to attack to pre as when line-numbers is enabled, the code tag is relatively which screws up the positioning
|
||||
parentElement.appendChild(line);
|
||||
});
|
||||
});
|
||||
|
||||
var id = pre.id;
|
||||
if (hasLineNumbers && Prism.util.isActive(pre, LINKABLE_LINE_NUMBERS_CLASS) && id) {
|
||||
// This implements linkable line numbers. Linkable line numbers use Line Highlight to create a link to a
|
||||
// specific line. For this to work, the pre element has to:
|
||||
// 1) have line numbers,
|
||||
// 2) have the `linkable-line-numbers` class or an ascendant that has that class, and
|
||||
// 3) have an id.
|
||||
|
||||
if (!hasClass(pre, LINKABLE_LINE_NUMBERS_CLASS)) {
|
||||
// add class to pre
|
||||
mutateActions.push(function () {
|
||||
pre.classList.add(LINKABLE_LINE_NUMBERS_CLASS);
|
||||
});
|
||||
}
|
||||
|
||||
var start = parseInt(pre.getAttribute('data-start') || '1');
|
||||
|
||||
// iterate all line number spans
|
||||
$$('.line-numbers-rows > span', pre).forEach(function (lineSpan, i) {
|
||||
var lineNumber = i + start;
|
||||
lineSpan.onclick = function () {
|
||||
var hash = id + '.' + lineNumber;
|
||||
|
||||
// this will prevent scrolling since the span is obviously in view
|
||||
scrollIntoView = false;
|
||||
location.hash = hash;
|
||||
setTimeout(function () {
|
||||
scrollIntoView = true;
|
||||
}, 1);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
return function () {
|
||||
mutateActions.forEach(callFunction);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function applyHash() {
|
||||
var hash = location.hash.slice(1);
|
||||
|
||||
// Remove pre-existing temporary lines
|
||||
$$('.temporary.line-highlight').forEach(function (line) {
|
||||
line.parentNode.removeChild(line);
|
||||
});
|
||||
|
||||
var range = (hash.match(/\.([\d,-]+)$/) || [, ''])[1];
|
||||
|
||||
if (!range || document.getElementById(hash)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var id = hash.slice(0, hash.lastIndexOf('.'));
|
||||
var pre = document.getElementById(id);
|
||||
|
||||
if (!pre) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!pre.hasAttribute('data-line')) {
|
||||
pre.setAttribute('data-line', '');
|
||||
}
|
||||
|
||||
var mutateDom = Prism.plugins.lineHighlight.highlightLines(pre, range, 'temporary ');
|
||||
mutateDom();
|
||||
|
||||
if (scrollIntoView) {
|
||||
document.querySelector('.temporary.line-highlight').scrollIntoView();
|
||||
}
|
||||
}
|
||||
|
||||
var fakeTimer = 0; // Hack to limit the number of times applyHash() runs
|
||||
|
||||
Prism.hooks.add('before-sanity-check', function (env) {
|
||||
var pre = env.element.parentElement;
|
||||
if (!isActiveFor(pre)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cleanup for other plugins (e.g. autoloader).
|
||||
*
|
||||
* Sometimes <code> blocks are highlighted multiple times. It is necessary
|
||||
* to cleanup any left-over tags, because the whitespace inside of the <div>
|
||||
* tags change the content of the <code> tag.
|
||||
*/
|
||||
var num = 0;
|
||||
$$('.line-highlight', pre).forEach(function (line) {
|
||||
num += line.textContent.length;
|
||||
line.parentNode.removeChild(line);
|
||||
});
|
||||
// Remove extra whitespace
|
||||
if (num && /^(?: \n)+$/.test(env.code.slice(-num))) {
|
||||
env.code = env.code.slice(0, -num);
|
||||
}
|
||||
});
|
||||
|
||||
Prism.hooks.add('complete', function completeHook(env) {
|
||||
var pre = env.element.parentElement;
|
||||
if (!isActiveFor(pre)) {
|
||||
return;
|
||||
}
|
||||
|
||||
clearTimeout(fakeTimer);
|
||||
|
||||
var hasLineNumbers = Prism.plugins.lineNumbers;
|
||||
var isLineNumbersLoaded = env.plugins && env.plugins.lineNumbers;
|
||||
|
||||
if (hasClass(pre, LINE_NUMBERS_CLASS) && hasLineNumbers && !isLineNumbersLoaded) {
|
||||
Prism.hooks.add('line-numbers', completeHook);
|
||||
} else {
|
||||
var mutateDom = Prism.plugins.lineHighlight.highlightLines(pre);
|
||||
mutateDom();
|
||||
fakeTimer = setTimeout(applyHash, 1);
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('hashchange', applyHash);
|
||||
window.addEventListener('resize', function () {
|
||||
var actions = $$('pre')
|
||||
.filter(isActiveFor)
|
||||
.map(function (pre) {
|
||||
return Prism.plugins.lineHighlight.highlightLines(pre);
|
||||
});
|
||||
actions.forEach(callFunction);
|
||||
});
|
||||
|
||||
}());
|
1
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.min.css
generated
vendored
Normal file
1
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.min.css
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:after,.line-numbers .line-highlight:before{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,.2)}
|
1
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.min.js
generated
vendored
Normal file
1
node_modules/prismjs/plugins/line-highlight/prism-line-highlight.min.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document&&document.querySelector){var e,t="line-numbers",i="linkable-line-numbers",n=/\n(?!$)/g,r=!0;Prism.plugins.lineHighlight={highlightLines:function(o,u,c){var h=(u="string"==typeof u?u:o.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),d=+o.getAttribute("data-line-offset")||0,f=(function(){if(void 0===e){var t=document.createElement("div");t.style.fontSize="13px",t.style.lineHeight="1.5",t.style.padding="0",t.style.border="0",t.innerHTML=" <br /> ",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}()?parseInt:parseFloat)(getComputedStyle(o).lineHeight),p=Prism.util.isActive(o,t),g=o.querySelector("code"),m=p?o:g||o,v=[],y=g.textContent.match(n),b=y?y.length+1:1,A=g&&m!=g?function(e,t){var i=getComputedStyle(e),n=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(n.borderTopWidth)+r(n.paddingTop)-r(i.paddingTop)}(o,g):0;h.forEach((function(e){var t=e.split("-"),i=+t[0],n=+t[1]||i;if(!((n=Math.min(b+d,n))<i)){var r=o.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");if(v.push((function(){r.setAttribute("aria-hidden","true"),r.setAttribute("data-range",e),r.className=(c||"")+" line-highlight"})),p&&Prism.plugins.lineNumbers){var s=Prism.plugins.lineNumbers.getLine(o,i),l=Prism.plugins.lineNumbers.getLine(o,n);if(s){var a=s.offsetTop+A+"px";v.push((function(){r.style.top=a}))}if(l){var u=l.offsetTop-s.offsetTop+l.offsetHeight+"px";v.push((function(){r.style.height=u}))}}else v.push((function(){r.setAttribute("data-start",String(i)),n>i&&r.setAttribute("data-end",String(n)),r.style.top=(i-d-1)*f+A+"px",r.textContent=new Array(n-i+2).join(" \n")}));v.push((function(){r.style.width=o.scrollWidth+"px"})),v.push((function(){m.appendChild(r)}))}}));var P=o.id;if(p&&Prism.util.isActive(o,i)&&P){l(o,i)||v.push((function(){o.classList.add(i)}));var E=parseInt(o.getAttribute("data-start")||"1");s(".line-numbers-rows > span",o).forEach((function(e,t){var i=t+E;e.onclick=function(){var e=P+"."+i;r=!1,location.hash=e,setTimeout((function(){r=!0}),1)}}))}return function(){v.forEach(a)}}};var o=0;Prism.hooks.add("before-sanity-check",(function(e){var t=e.element.parentElement;if(u(t)){var i=0;s(".line-highlight",t).forEach((function(e){i+=e.textContent.length,e.parentNode.removeChild(e)})),i&&/^(?: \n)+$/.test(e.code.slice(-i))&&(e.code=e.code.slice(0,-i))}})),Prism.hooks.add("complete",(function e(i){var n=i.element.parentElement;if(u(n)){clearTimeout(o);var r=Prism.plugins.lineNumbers,s=i.plugins&&i.plugins.lineNumbers;l(n,t)&&r&&!s?Prism.hooks.add("line-numbers",e):(Prism.plugins.lineHighlight.highlightLines(n)(),o=setTimeout(c,1))}})),window.addEventListener("hashchange",c),window.addEventListener("resize",(function(){s("pre").filter(u).map((function(e){return Prism.plugins.lineHighlight.highlightLines(e)})).forEach(a)}))}function s(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function l(e,t){return e.classList.contains(t)}function a(e){e()}function u(e){return!!(e&&/pre/i.test(e.nodeName)&&(e.hasAttribute("data-line")||e.id&&Prism.util.isActive(e,i)))}function c(){var e=location.hash.slice(1);s(".temporary.line-highlight").forEach((function(e){e.parentNode.removeChild(e)}));var t=(e.match(/\.([\d,-]+)$/)||[,""])[1];if(t&&!document.getElementById(e)){var i=e.slice(0,e.lastIndexOf(".")),n=document.getElementById(i);n&&(n.hasAttribute("data-line")||n.setAttribute("data-line",""),Prism.plugins.lineHighlight.highlightLines(n,t,"temporary ")(),r&&document.querySelector(".temporary.line-highlight").scrollIntoView())}}}();
|
Loading…
Add table
Add a link
Reference in a new issue