2023-05-23 11:59:29 -05:00
|
|
|
import { Theme } from "./theme.mjs";
|
2022-03-09 10:23:26 -06:00
|
|
|
|
2023-05-23 11:59:29 -05:00
|
|
|
document.querySelectorAll(".js-only").forEach((a) =>
|
|
|
|
a.classList.remove("js-only")
|
|
|
|
);
|
|
|
|
document.querySelectorAll(".js-disabled-only").forEach((a) => a.remove());
|
2022-03-09 10:23:26 -06:00
|
|
|
|
2023-05-23 11:59:29 -05:00
|
|
|
const theme = new Theme();
|
|
|
|
document.querySelectorAll(".theme-toggler").forEach((a) =>
|
|
|
|
a.addEventListener("click", () => theme.cycle())
|
2023-05-11 13:54:04 -05:00
|
|
|
);
|
2020-12-15 16:30:13 -06:00
|
|
|
|
|
|
|
const initAlign = () => {
|
2023-05-11 13:54:04 -05:00
|
|
|
const cur = localStorage.getItem("align");
|
|
|
|
const prev = cur == "center" ? "left" : "center";
|
2023-05-23 11:59:29 -05:00
|
|
|
document.body.classList.add("align-" + cur);
|
|
|
|
document.body.classList.remove("align-" + prev);
|
2023-05-11 13:54:04 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
if (localStorage.getItem("align") === null) {
|
|
|
|
localStorage.setItem("align", "center");
|
2020-12-15 16:30:13 -06:00
|
|
|
}
|
2022-03-09 10:23:26 -06:00
|
|
|
|
2023-05-11 13:54:04 -05:00
|
|
|
initAlign();
|
|
|
|
|
|
|
|
const toggleAlign = (ev) => {
|
|
|
|
localStorage.setItem(
|
|
|
|
"align",
|
|
|
|
localStorage.getItem("align") == "center" ? "left" : "center",
|
|
|
|
);
|
|
|
|
initAlign();
|
|
|
|
if (!!ev.target) ev.preventDefault();
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
2023-05-23 11:59:29 -05:00
|
|
|
document.querySelectorAll(".align-toggler").forEach((a) =>
|
2023-05-11 13:54:04 -05:00
|
|
|
a.addEventListener("click", toggleAlign)
|
|
|
|
);
|
2022-03-09 10:23:26 -06:00
|
|
|
|
2023-05-11 13:54:04 -05:00
|
|
|
window.addEventListener("load", (_ev) => {
|
|
|
|
const selector = [1, 2, 3, 4, 5, 6].map((n) => `h${n}[id]`).join(",");
|
2023-05-23 11:59:29 -05:00
|
|
|
document.querySelectorAll(selector).forEach((el) => {
|
2023-05-11 13:54:04 -05:00
|
|
|
const anchorLink = document.createElement("a");
|
|
|
|
anchorLink.classList.add("anchor-link");
|
|
|
|
anchorLink.textContent = "§";
|
|
|
|
anchorLink.href = `#${el.id}`;
|
|
|
|
el.appendChild(anchorLink);
|
|
|
|
});
|
|
|
|
});
|
2022-03-09 10:23:26 -06:00
|
|
|
|
2023-05-11 13:54:04 -05:00
|
|
|
function initCodeCopyButtons() {
|
|
|
|
const codeBlocks = document.querySelectorAll("pre.chroma");
|
|
|
|
codeBlocks.forEach((block) => {
|
|
|
|
const code = block.querySelectorAll("code")[0];
|
2023-05-11 14:40:11 -05:00
|
|
|
const buttonContainer = document.createElement("p");
|
|
|
|
buttonContainer.classList.add("copy-code-button-container");
|
2023-05-11 13:54:04 -05:00
|
|
|
const button = document.createElement("button");
|
2023-05-11 14:40:11 -05:00
|
|
|
buttonContainer.appendChild(button);
|
2023-05-11 13:54:04 -05:00
|
|
|
button.classList.add("copy-code-button");
|
2023-05-11 14:40:11 -05:00
|
|
|
block.parentNode.parentNode.insertBefore(buttonContainer, block.parentNode);
|
2023-05-11 13:54:04 -05:00
|
|
|
button.textContent = "Copy";
|
|
|
|
button.addEventListener("click", (_ev) => {
|
2023-05-11 14:40:11 -05:00
|
|
|
button.disabled = true;
|
|
|
|
navigator.clipboard.writeText(code.textContent).catch(() => {
|
|
|
|
const lastText = button.textContent;
|
|
|
|
button.textContent = "Error Copying";
|
|
|
|
setTimeout(() => {
|
|
|
|
button.disabled = false;
|
|
|
|
button.textContent = lastText;
|
|
|
|
}, 500);
|
|
|
|
}).then(() => {
|
|
|
|
const lastText = button.textContent;
|
|
|
|
button.textContent = "Copied to clipbooard!";
|
|
|
|
setTimeout(() => {
|
|
|
|
button.disabled = false;
|
|
|
|
button.textContent = lastText;
|
|
|
|
}, 3000);
|
|
|
|
});
|
2023-05-11 13:54:04 -05:00
|
|
|
});
|
|
|
|
});
|
2020-12-15 16:30:13 -06:00
|
|
|
}
|
2022-03-09 10:23:26 -06:00
|
|
|
|
2023-05-11 13:54:04 -05:00
|
|
|
window.addEventListener("load", (_ev) => {
|
|
|
|
initCodeCopyButtons();
|
|
|
|
});
|