74 lines
2.6 KiB
JavaScript
74 lines
2.6 KiB
JavaScript
var currentScript = document.currentScript;
|
|
|
|
function removeMask (container) {
|
|
const emgithubPre = container.querySelector(".emgithub-pre");
|
|
const emgithubLoading = container.querySelector(".emgithub-loading");
|
|
emgithubLoading.classList.add("hide");
|
|
emgithubPre.classList.remove("hide");
|
|
emgithubPre.classList.remove("loading");
|
|
}
|
|
|
|
function embedTextToEle (codeText, container, lang, lineBegin, lineEnd) {
|
|
const emgithubPre = container.querySelector(".emgithub-pre");
|
|
const emgithubCode = document.createElement("code");
|
|
emgithubPre.appendChild(emgithubCode);
|
|
|
|
if (lineBegin > 0) {
|
|
const codeTextSplit = codeText.split("\n");
|
|
codeText = codeTextSplit.slice(lineBegin - 1, lineEnd).join("\n") + '\n';
|
|
}
|
|
|
|
// Dynamically adjust padding of pre to fit in the line numbers
|
|
const lineBeginDigit = lineBegin.toString().length;
|
|
const lineEndDigit = lineEnd.toString().length;
|
|
if (lineBeginDigit >= 4 || lineEndDigit >= 4) {
|
|
emgithubPre.style.paddingLeft = "4.5rem";
|
|
} else if (lineBeginDigit >= 3 || lineEndDigit >= 3) {
|
|
emgithubPre.style.paddingLeft = "4rem";
|
|
} else if (lineBeginDigit >= 2 || lineEndDigit >= 2) {
|
|
emgithubPre.style.paddingLeft = "3.5rem";
|
|
}
|
|
|
|
emgithubCode.classList.add(`language-${lang}`);
|
|
emgithubCode.textContent = codeText;
|
|
Prism.highlightAllUnder(container, false, () => {
|
|
requestAnimationFrame(() => {
|
|
removeMask(container);
|
|
})
|
|
});
|
|
}
|
|
|
|
function embedErrorToEle (errText, container) {
|
|
const emgithubPre = container.querySelector(".emgithub-code .emgithub-pre");
|
|
const emgithubCode = document.createElement("code");
|
|
emgithubPre.appendChild(emgithubCode);
|
|
|
|
emgithubPre.classList.remove("line-numbers");
|
|
emgithubPre.classList.add("no-line-numbers");
|
|
emgithubCode.textContent = errText;
|
|
|
|
removeMask(container);
|
|
}
|
|
|
|
async function embed () {
|
|
const sourceURL = new URL(currentScript.src);
|
|
const params = sourceURL.searchParams;
|
|
const rawFileURL = new URL(params.get("raw_file_url"));
|
|
const lang = params.get("lang");
|
|
const id = params.get("id");
|
|
const lineBegin = Number(params.get("line_begin"));
|
|
const lineEnd = Number(params.get("line_end"));
|
|
|
|
const emgithubContainer = document.getElementById(id);
|
|
const response = await fetch(rawFileURL);
|
|
if (response.ok) {
|
|
const text = await response.text();
|
|
embedTextToEle(text, emgithubContainer, lang, lineBegin, lineEnd);
|
|
} else {
|
|
embedErrorToEle(`Failed to process ${rawFileURL}\n${response.status}`, emgithubContainer);
|
|
}
|
|
}
|
|
|
|
window.addEventListener("DOMContentLoaded", () => {
|
|
embed();
|
|
}); |