{"version":3,"sources":["site.js"],"names":["GotoTabByUrlHash","hash","window","location","tabLink","document","querySelector","click","scrollTo","SetupTabs","tabsList","tabButtons","querySelectorAll","tabPanelsContainer","tabPanels","switchTab","newTab","activePanelId","getAttribute","activePanel","forEach","button","setAttribute","panel","removeAttribute","focus","history","pushState","listitem","tab","index","addEventListener","e","preventDefault","currentTarget","key","currentTab","activeElement","parentElement","previousElementSibling","length","nextElementSibling","ready","readyState","callback","scrollRestoration","navSelect","onchange","href","value","pathname"],"mappings":"AAIA,SAAAA,mBAEA,IAAAC,EAAAC,OAAAC,SAAAF,KAEAA,IAEAG,EAAAC,SAAAC,cAAA,uBAAAL,EAAA,IAAA,KAKAG,EAAAG,MAAA,EAEAL,OAAAM,SAAA,EAAA,CAAA,EAGA,CAKA,SAAAC,YAIA,IAAAC,EAAAL,SAAAC,cAAA,qBAAA,EACA,MAAAK,EAAAD,EAAAE,iBAAA,QAAA,EACAC,EAAAR,SAAAC,cAAA,cAAA,EACAQ,EAAAT,SAAAO,iBAAA,oBAAA,EAoEA,SAAAG,EAAAC,GACA,IAAAC,EAAAD,EAAAE,aAAA,aAAA,EACAC,EAAAN,EAAAP,cAAAW,CAAA,EAEAN,EAAAS,QAAA,IACAC,EAAAC,aAAA,gBAAA,OAAA,EACAD,EAAAC,aAAA,WAAA,IAAA,CACA,CAAA,EAEAR,EAAAM,QAAA,IACAG,EAAAD,aAAA,SAAA,MAAA,CACA,CAAA,EAEAH,EAAAK,gBAAA,QAAA,EAEAR,EAAAM,aAAA,gBAAA,MAAA,EACAN,EAAAM,aAAA,WAAA,GAAA,EACAN,EAAAS,MAAA,EAGAC,QAAAC,UAAA,GAAA,GAAAV,CAAA,CACA,CArFAP,EAAAE,iBAAA,IAAA,EAAAQ,QAAA,IACAQ,EAAAN,aAAA,OAAA,cAAA,CACA,CAAA,EAEAX,EAAAS,QAAA,CAAAS,EAAAC,KAEA,IAAAA,EAEAD,EAAAP,aAAA,gBAAA,MAAA,GAEAO,EAAAP,aAAA,WAAA,IAAA,EACAR,EAAAgB,GAAAR,aAAA,SAAA,MAAA,GAGAO,EAAAE,iBAAA,QAAA,IACAC,EAAAC,eAAA,EACAlB,EAAAiB,EAAAE,aAAA,CACA,CAAA,CAEA,CAAA,EAEApB,EAAAM,QAAA,IACAG,EAAAD,aAAA,OAAA,UAAA,CACA,CAAA,EAEAZ,EAAAqB,iBAAA,UAAA,IACA,OAAAC,EAAAG,KACA,IAAA,aAkBAC,EAAA/B,SAAAgC,eACAC,cAAAC,uBAGAxB,EACAqB,EAAAE,cAAAC,uBAAAjC,cAAA,QAAA,CACA,EAJAS,EAAAJ,EAAAA,EAAA6B,OAAA,EAAA,EAlBA,MACA,IAAA,cA0BAJ,EAAA/B,SAAAgC,eACAC,cAAAG,mBAGA1B,EAAAqB,EAAAE,cAAAG,mBAAAnC,cAAA,QAAA,CAAA,EAFAS,EAAAJ,EAAA,EAAA,EA1BA,MACA,IAAA,OACAqB,EAAAC,eAAA,EACAlB,EAAAJ,EAAA,EAAA,EACA,MACA,IAAA,MACAqB,EAAAC,eAAA,EACAlB,EAAAJ,EAAAA,EAAA6B,OAAA,EAAA,CAEA,CAcA,IAVAJ,CAHA,CAAA,CA4CA,CAGA,IAAAM,MAAA,IACA,WAAArC,SAAAsC,WAAAC,EAAA,EACAvC,SAAA0B,iBAAA,mBAAAa,CAAA,CACA,EAEAF,MAAA,KAIA,sBAAAhB,UACAA,QAAAmB,kBAAA,UAKA,IAAAC,EAAAzC,SAAAC,cAAA,6BAAA,EACAwC,IAAAA,EAAAC,SAAA,WACA1C,SAAAF,SAAA6C,KAAAF,EAAAG,KACA,GAGA,MAAA/C,OAAAC,SAAA+C,UACAzC,UAAA,EAGAT,iBAAA,CACA,CAAA","file":"site.min.js","sourcesContent":["// Main JS file\n\n// Function to navigate directly to a tab on a course page.\n//\nfunction GotoTabByUrlHash() {\n // get the tab id from the url hash\n var hash = window.location.hash;\n // if there is a hash in the url\n if (hash) {\n // get the tab link that has the same id as the hash\n var tabLink = document.querySelector(\"button[data-target='\" + hash + \"']\");\n\n // if a tab link was found\n if (tabLink) {\n // click the tab link so that the tab is shown\n tabLink.click();\n // goto to top of page\n window.scrollTo(0, 0);\n }\n }\n}\n\n\n// Tabs\n//\nfunction SetupTabs() {\n // Accessibility/aria: http://web-accessibility.carnegiemuseums.org/code/tabs/\n // Inspiration/js: https://codepen.io/kevinpowell/pen/oNQgRKm\n //\n const tabsList = document.querySelector(\".tab-selection > ul\");\n const tabButtons = tabsList.querySelectorAll(\"button\");\n const tabPanelsContainer = document.querySelector(\".tab-content\");\n const tabPanels = document.querySelectorAll(\".tab-content > div\");\n\n //tabsList.setAttribute(\"role\", \"tablist\"); // Done in html\n\n tabsList.querySelectorAll(\"li\").forEach((listitem) => {\n listitem.setAttribute(\"role\", \"presentation\");\n });\n\n tabButtons.forEach((tab, index) => {\n //tab.setAttribute(\"role\", \"tab\"); // Done in html\n if (index === 0) {\n // First tab visible by default\n tab.setAttribute(\"aria-selected\", \"true\");\n } else {\n tab.setAttribute(\"tabindex\", \"-1\");\n tabPanels[index].setAttribute(\"hidden\", \"true\");\n }\n\n tab.addEventListener(\"click\", (e) => {\n e.preventDefault();\n switchTab(e.currentTarget);\n });\n\n });\n\n tabPanels.forEach((panel) => {\n panel.setAttribute(\"role\", \"tabpanel\");\n });\n\n tabsList.addEventListener(\"keydown\", (e) => {\n switch (e.key) {\n case \"ArrowLeft\":\n moveLeft();\n break;\n case \"ArrowRight\":\n moveRight();\n break;\n case \"Home\":\n e.preventDefault();\n switchTab(tabButtons[0]);\n break;\n case \"End\":\n e.preventDefault();\n switchTab(tabButtons[tabButtons.length - 1]);\n break;\n }\n });\n\n function moveLeft() {\n const currentTab = document.activeElement;\n if (!currentTab.parentElement.previousElementSibling) {\n switchTab(tabButtons[tabButtons.length - 1]);\n } else {\n switchTab(\n currentTab.parentElement.previousElementSibling.querySelector(\"button\")\n );\n }\n }\n\n function moveRight() {\n const currentTab = document.activeElement;\n if (!currentTab.parentElement.nextElementSibling) {\n switchTab(tabButtons[0]);\n } else {\n switchTab(currentTab.parentElement.nextElementSibling.querySelector(\"button\"));\n }\n }\n\n function switchTab(newTab) {\n const activePanelId = newTab.getAttribute(\"data-target\");\n const activePanel = tabPanelsContainer.querySelector(activePanelId);\n\n tabButtons.forEach((button) => {\n button.setAttribute(\"aria-selected\", \"false\");\n button.setAttribute(\"tabindex\", \"-1\");\n });\n\n tabPanels.forEach((panel) => {\n panel.setAttribute(\"hidden\", \"true\");\n });\n\n activePanel.removeAttribute(\"hidden\");\n\n newTab.setAttribute(\"aria-selected\", \"true\");\n newTab.setAttribute(\"tabindex\", \"0\");\n newTab.focus();\n\n // Set the url hash to the id without jumping to the hash\n history.pushState({}, '', activePanelId);\n }\n}\n\n\nvar ready = (callback) => {\n if (document.readyState != \"loading\") callback();\n else document.addEventListener(\"DOMContentLoaded\", callback);\n}\n\nready(() => {\n // DOM has loaded\n\n // Turn off browser auto scroll restoration behavior\n if ('scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n }\n\n // Version selector\n //\n var navSelect = document.querySelector('.version_navigation__select');\n if (navSelect) navSelect.onchange = function () {\n document.location.href = navSelect.value;\n };\n\n\n if (window.location.pathname !== \"/\") {\n SetupTabs();\n }\n\n GotoTabByUrlHash();\n});\n"]}