This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/app/lib/highlight-syntax.js

53 lines
1.0 KiB
JavaScript

import loadScript from "discourse/lib/load-script";
/*global hljs:true */
let _moreLanguages = [];
export default function highlightSyntax(elem, siteSettings, session) {
if (!elem) {
return;
}
const selector = siteSettings.autohighlight_all_code
? "pre code"
: "pre code[class]";
const codeblocks = elem.querySelectorAll(selector);
if (!codeblocks.length) {
return;
}
const path = session.highlightJsPath;
if (!path) {
return;
}
return loadScript(path).then(() => {
customHighlightJSLanguages();
codeblocks.forEach((e) => {
// Large code blocks can cause crashes or slowdowns
if (e.innerHTML.length > 30000) {
return;
}
e.classList.remove("lang-auto");
hljs.highlightElement(e);
});
});
}
export function registerHighlightJSLanguage(name, fn) {
_moreLanguages.push({ name, fn });
}
function customHighlightJSLanguages() {
_moreLanguages.forEach((l) => {
if (hljs.getLanguage(l.name) === undefined) {
hljs.registerLanguage(l.name, l.fn);
}
});
}