// 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 = '
' + 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;