65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
const Prism = require('prismjs');
|
|
|
|
require('prismjs/plugins/line-numbers/prism-line-numbers.css');
|
|
require('prismjs/themes/prism-twilight.css');
|
|
|
|
require('prismjs/components/prism-scss');
|
|
require('prismjs/components/prism-markup');
|
|
require('prismjs/components/prism-markup-templating');
|
|
require('prismjs/components/prism-css');
|
|
require('prismjs/components/prism-clike');
|
|
require('prismjs/components/prism-javascript');
|
|
require('prismjs/components/prism-bash');
|
|
require('prismjs/components/prism-markdown');
|
|
require('prismjs/components/prism-nginx');
|
|
require('prismjs/components/prism-php');
|
|
require('prismjs/components/prism-python');
|
|
require('prismjs/components/prism-sql');
|
|
require('prismjs/components/prism-yaml');
|
|
|
|
require('prismjs/plugins/keep-markup/prism-keep-markup');
|
|
require('prismjs/plugins/line-highlight/prism-line-highlight');
|
|
require('prismjs/plugins/line-numbers/prism-line-numbers');
|
|
|
|
const Code = function(w) {
|
|
this.window = w;
|
|
}
|
|
|
|
Code.prototype.init = function() {
|
|
Prism.highlightAllUnder(document)
|
|
var elements = this.window.document.querySelectorAll('code[data-title], div[data-title]')
|
|
|
|
for (var i = 0, len = elements.length; i < len; i++) {
|
|
var element = elements[i];
|
|
|
|
if (element.tagName === 'CODE') {
|
|
var code = element;
|
|
var pre = code.parentNode;
|
|
var post = pre.parentNode;
|
|
} else {
|
|
var code = element.querySelector('code');
|
|
|
|
if (!code) {
|
|
continue;
|
|
}
|
|
|
|
var pre = code.parentNode;
|
|
var post = pre.parentNode;
|
|
}
|
|
|
|
if (!pre || !post) {
|
|
continue;
|
|
}
|
|
|
|
pre.classList.add('with-title');
|
|
|
|
var title = this.window.document.createElement('div');
|
|
title.classList.add('code-title');
|
|
title.textContent = element.getAttribute('data-title');
|
|
|
|
post.insertBefore(title, pre);
|
|
}
|
|
}
|
|
|
|
module.exports = Code
|