mirror of
https://github.com/wassname/template.git
synced 2026-06-27 22:24:10 +08:00
52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
// Copyright 2018 The Distill Template Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import Prism from "prismjs";
|
|
import "prismjs/components/prism-python";
|
|
import "prismjs/components/prism-clike";
|
|
import "prismjs/components/prism-lua";
|
|
import "prismjs/components/prism-bash";
|
|
import "prismjs/components/prism-go";
|
|
import "prismjs/components/prism-markdown";
|
|
import "prismjs/components/prism-julia";
|
|
|
|
|
|
export default function(dom, data) {
|
|
let codeElements = [].slice.call(dom.querySelectorAll("dt-code"));
|
|
codeElements.forEach(el => {
|
|
let content = el.textContent;
|
|
el.innerHTML = "";
|
|
let language = el.getAttribute("language");
|
|
let c = dom.createElement("code");
|
|
if (el.getAttribute("block") === "") {
|
|
// Let's normalize the tab indents
|
|
content = content.replace(/\n/, "");
|
|
let tabs = content.match(/\s*/);
|
|
content = content.replace(new RegExp("\n" + tabs, "g"), "\n");
|
|
content = content.trim();
|
|
let p = dom.createElement("pre");
|
|
p.appendChild(c);
|
|
el.appendChild(p);
|
|
} else {
|
|
el.appendChild(c);
|
|
}
|
|
let highlighted = content;
|
|
if (Prism.languages[language]) {
|
|
c.setAttribute("class", "language-" + language);
|
|
highlighted = Prism.highlight(content, Prism.languages[language]);
|
|
}
|
|
c.innerHTML = highlighted;
|
|
});
|
|
}
|