123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // Link tabs, as per https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/#linked-tabs
- const savedTab = localStorage.getItem('savedTab')
- const tabs = document.querySelectorAll(".tabbed-set > input")
- for (const tab of tabs) {
- 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 (savedTab === 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;
|