2021-06-15 14:26:38 +02:00
|
|
|
const Prism = require('prismjs')
|
2021-03-29 19:40:55 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
require('prismjs/plugins/line-numbers/prism-line-numbers.css')
|
|
|
|
require('prismjs/themes/prism-twilight.css')
|
2021-03-29 19:40:55 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
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')
|
2021-03-29 19:40:55 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
require('prismjs/plugins/keep-markup/prism-keep-markup')
|
|
|
|
require('prismjs/plugins/line-highlight/prism-line-highlight')
|
|
|
|
require('prismjs/plugins/line-numbers/prism-line-numbers')
|
2021-03-29 19:40:55 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
const Code = function (w) {
|
|
|
|
this.window = w
|
2021-03-29 13:58:05 +02:00
|
|
|
}
|
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
Code.prototype.init = function () {
|
|
|
|
Prism.highlightAllUnder(document)
|
|
|
|
const elements = this.window.document.querySelectorAll('code[data-title], div[data-title]')
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
for (let i = 0, len = elements.length; i < len; i++) {
|
|
|
|
const element = elements[i]
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
if (element.tagName === 'CODE') {
|
|
|
|
var code = element
|
|
|
|
var pre = code.parentNode
|
|
|
|
var post = pre.parentNode
|
|
|
|
} else {
|
|
|
|
var code = element.querySelector('code')
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
if (!code) {
|
|
|
|
continue
|
|
|
|
}
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
var pre = code.parentNode
|
|
|
|
var post = pre.parentNode
|
|
|
|
}
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
if (!pre || !post) {
|
|
|
|
continue
|
|
|
|
}
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
pre.classList.add('with-title')
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
const title = this.window.document.createElement('div')
|
|
|
|
title.classList.add('code-title')
|
|
|
|
title.textContent = element.getAttribute('data-title')
|
2021-03-29 13:58:05 +02:00
|
|
|
|
2021-06-15 14:26:38 +02:00
|
|
|
post.insertBefore(title, pre)
|
|
|
|
}
|
2021-03-29 13:58:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = Code
|