3f0782d1cf
Firefox has an annoying bug that they refuse to fix where returning a valid 429 response is considered an aborted connection. Firefox makes no additional attempts at retrying, no matter what the request may have been. Chromium and even Internet Explorer handle this correctly.
123 lines
2.5 KiB
JavaScript
123 lines
2.5 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(new Promise(async (resolve, reject) => {
|
|
const start = performance.now();
|
|
const max_attempts = 5;
|
|
let attempt = 0;
|
|
|
|
let mod = undefined;
|
|
let err = null;
|
|
for (let attempt = 1; attempt <= 5; attempt++) {
|
|
try {
|
|
mod = await import(`./highlightjs/languages/${lang}.min.js`);
|
|
break;
|
|
} catch(ex) {
|
|
err = ex;
|
|
await new Promise((resolve, reject) => {
|
|
setTimeout(() => {resolve()}, 1000);
|
|
})
|
|
}
|
|
}
|
|
|
|
if (!mod) {
|
|
reject(err);
|
|
} else {
|
|
window.highlightJS.registerLanguage(lang, mod.default);
|
|
console.log(`highlight.JS: Imported language definition for '${lang}' after ${(performance.now() - start).toFixed(2)}ms.`);
|
|
resolve(mod);
|
|
}
|
|
}));
|
|
}
|
|
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();
|