123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // Link tabs, as per https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/#linked-tabs
- const savedCodeTab = localStorage.getItem("savedTab");
- const codeTabs = document.querySelectorAll(".tabbed-set > input");
- for (const tab of codeTabs) {
- tab.addEventListener("click", () => {
- const current = document.querySelector(`label[for=${tab.id}]`);
- const pos = current.getBoundingClientRect().top;
- const labelContent = current.innerHTML;
- const labels = document.querySelectorAll(".tabbed-set > label, .tabbed-alternate > .tabbed-labels > label");
- for (const label of labels) {
- if (label.innerHTML === labelContent) {
- document.querySelector(`input[id=${label.getAttribute("for")}]`).checked = true;
- }
- }
-
- // Preserve scroll position
- const delta = (current.getBoundingClientRect().top) - pos;
- window.scrollBy(0, delta);
- // Save
- localStorage.setItem("savedTab", labelContent);
- });
- // Select saved tab
- const current = document.querySelector(`label[for=${tab.id}]`);
- const labelContent = current.innerHTML;
- if (savedCodeTab === labelContent) {
- tab.checked = true;
- }
- }
- // Lightbox for screenshot
- const lightbox = document.createElement("div");
- lightbox.classList.add("lightbox");
- document.body.appendChild(lightbox);
- const showScreenshotOverlay = (e, el, group, index) => {
- lightbox.classList.add("show");
- document.addEventListener("keydown", nextScreenshotKeyboardListener);
- return showScreenshot(e, group, index);
- };
- const showScreenshot = (e, group, index) => {
- const actualIndex = resolveScreenshotIndex(group, index);
- lightbox.innerHTML = "<div class=\"close-lightbox\"></div>" + screenshots[group][actualIndex].innerHTML;
- lightbox.querySelector("img").onclick = (e) => {
- return showScreenshot(e, group, actualIndex + 1);
- };
- currentScreenshotGroup = group;
- currentScreenshotIndex = actualIndex;
- e.stopPropagation();
- return false;
- };
- const nextScreenshot = (e) => {
- return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex + 1);
- };
- const previousScreenshot = (e) => {
- return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex - 1);
- };
- const resolveScreenshotIndex = (group, index) => {
- if (index < 0) {
- return screenshots[group].length - 1;
- } else if (index > screenshots[group].length - 1) {
- return 0;
- }
- return index;
- };
- const hideScreenshotOverlay = (e) => {
- lightbox.classList.remove("show");
- document.removeEventListener("keydown", nextScreenshotKeyboardListener);
- };
- const nextScreenshotKeyboardListener = (e) => {
- switch (e.keyCode) {
- case 37:
- previousScreenshot(e);
- break;
- case 39:
- nextScreenshot(e);
- break;
- }
- };
- let currentScreenshotGroup = "";
- let currentScreenshotIndex = 0;
- let screenshots = {};
- Array.from(document.getElementsByClassName("screenshots")).forEach((sg) => {
- const group = sg.id;
- screenshots[group] = [...sg.querySelectorAll("a")];
- screenshots[group].forEach((el, index) => {
- el.onclick = (e) => {
- return showScreenshotOverlay(e, el, group, index);
- };
- });
- });
- lightbox.onclick = hideScreenshotOverlay;
|