Files
com.xaymar.www/assets/js/highlight.mjs
T
2024-05-16 11:40:24 +02:00

100 lines
2.0 KiB
JavaScript

'use strict';
// Highlight.JS: https://highlightjs.org/
async function initializeHighlightJS() {
const languageRE = /\blanguage-([a-zA-Z0-9_\-]+)\b/gi;
const noLanguageRE = /\bno-language\b/gi;
const languages = [
"apache",
"asciidoc",
"autohotkey",
"bash",
"basic",
"c",
"cmake",
"cpp",
"csharp",
"css",
"d",
"diff",
"gcode",
"glsl",
"go",
"gradle",
"graphql",
"http",
"ini",
"java",
"javascript",
"json",
"kotlin",
"latex",
"less",
"llvm",
"lua",
"makefile",
"markdown",
"nginx",
"objectivec",
"oxygene",
"perl",
"php",
"php-template",
"plaintext",
"protobuf",
"python",
"python-repl",
"r",
"ruby",
"rust",
"scss",
"shell",
"sql",
"swift",
"typescript",
"vbnet",
"wasm",
"xml",
"yaml",
];
console.log("highlight.JS: Loading...");
let highlightJS = await import("./highlightjs/highlight.mjs");
window.highlightJS = highlightJS.default;
console.log("highlight.JS: Configuring...");
window.highlightJS.configure({
"noHighlightRe": noLanguageRE,
"languageDetectRe": languageRE,
"cssSelector": "code.block[class*=\"language\"]",
"throwUnescapedHTML": true,
});
// Import all languages.
let langs = [];
for (let lang of languages) {
console.log(`highlight.JS: Importing language definition for '${lang}'...`);
langs.push(import(`./highlightjs/languages/${lang}.min.js`).then((mod) => {
window.highlightJS.registerLanguage(lang, mod.default);
console.log(`highlight.JS: Imported language definition for '${lang}'.`);
}));
}
await Promise.allSettled(langs)
// Highlight everything.
function highlightAllCode() {
console.log(`highlight.JS: Applying highlighting all valid code blocks...`);
window.highlightJS.highlightAll();
};
if (document.readyState === "complete"
|| document.readyState === "loaded"
|| document.readyState === "interactive") {
highlightAllCode();
} else {
document.addEventListener('DOMContentLoaded', () => {
highlightAllCode();
});
}
}
initializeHighlightJS();