{"version":3,"sources":["node_modules/browser-pack/_prelude.js","frontend/Common/js/modules/InteractiveTimeline/entry/interactive-timeline.js","frontend/Common/js/modules/InteractiveTimeline/initInteractiveTimeline.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","_initInteractiveTimeline","__esModule","default","document","addEventListener","let","timeouts","articleObserver","IntersectionObserver","entries","observer","forEach","entry","isIntersecting","target","dataset","id","window","setTimeout","classList","add","unobserve","clearTimeout","root","rootMargin","threshold","querySelectorAll","parentEl","parentIndex","el","observe","timelineMarkers","yearRows","console","warn","marker","href","preventDefault","scrolToRow","rowEl","top","getBoundingClientRect","windowHeight","innerHeight","viewportOffset","offset","documentElement","scrollTop","focusTimeout","moveFocus","focus","scrollTo","removeEventListener","scroll","left","behavior","yearObserver","index","parseInt","setAttribute","remove","removeAttribute"],"mappings":"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","file":"interactive-timeline-generated.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\r\n initInteractiveTimeline();\r\n});\r\n","export default () => {\r\n let timeouts = {};\r\n\r\n // check for when article rows are visible\r\n const articleObserver = new IntersectionObserver(\r\n (entries, observer) => {\r\n // using setTimeout to ignore the affect when jump links are clicked\r\n entries.forEach((entry, i) => {\r\n if (entry.isIntersecting) {\r\n timeouts[entry.target.dataset.id] = window.setTimeout(() => {\r\n entry.target.classList.add(\"scrolled-into-view\");\r\n // only runs once to prevent the component from jittering as hidden articles shrink.\r\n observer.unobserve(entry.target);\r\n }, 300);\r\n } else {\r\n window.clearTimeout(timeouts[entry.target.dataset.id]);\r\n }\r\n });\r\n },\r\n {\r\n root: null,\r\n rootMargin: \"-40% 0px -20%\",\r\n threshold: 0.5,\r\n },\r\n );\r\n\r\n document\r\n .querySelectorAll(\".js-interactive-timeline\")\r\n .forEach((parentEl, parentIndex) => {\r\n // flag articles that are in view.\r\n parentEl\r\n .querySelectorAll(\".js-interactive-timeline-article\")\r\n .forEach((el, i) => {\r\n el.dataset.id = `article-${parentIndex}-${i}`;\r\n articleObserver.observe(el);\r\n });\r\n\r\n // assumption is that the length here matches the number of rows\r\n const timelineMarkers = parentEl.querySelectorAll(\r\n \".js-timeline-year-marker\",\r\n );\r\n const yearRows = parentEl.querySelectorAll(\r\n \".js-interactive-timeline-year\",\r\n );\r\n\r\n if (timelineMarkers.length !== yearRows.length) {\r\n console.warn(\"year rows don't match progress bar\");\r\n return;\r\n }\r\n\r\n timelineMarkers.forEach((marker, i) => {\r\n marker.href = marker.dataset.href; // working around inPageNavigation JS;\r\n marker.addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n scrolToRow(yearRows[i]);\r\n });\r\n });\r\n\r\n // check for when years are visible\r\n const yearObserver = new IntersectionObserver(\r\n (entries, observer) => {\r\n // using setTimeout to ignore the affect when jump links are clicked\r\n entries.forEach((entry) => {\r\n const index = parseInt(entry.target.dataset.index, 10);\r\n\r\n if (entry.isIntersecting) {\r\n entry.target.classList.add(\"scrolled-into-view\");\r\n timelineMarkers[index].classList.add(\"is-active\");\r\n timelineMarkers[index].setAttribute(\"aria-current\", \"location\");\r\n } else {\r\n entry.target.classList.remove(\"scrolled-into-view\");\r\n timelineMarkers[index].classList.remove(\"is-active\");\r\n timelineMarkers[index].removeAttribute(\"aria-current\");\r\n }\r\n });\r\n },\r\n {\r\n root: null,\r\n rootMargin: \"-47% 0px -47%\", //\"px\" - units required\r\n threshold: 0,\r\n },\r\n );\r\n\r\n // Flag rows that are in view and update the progress bar\r\n yearRows.forEach((el, i) => {\r\n el.dataset.index = i;\r\n yearObserver.observe(el);\r\n });\r\n });\r\n};\r\n\r\nfunction scrolToRow(rowEl) {\r\n const { top } = rowEl.getBoundingClientRect();\r\n const windowHeight = window.innerHeight;\r\n const viewportOffset = windowHeight * 0.41; // close to the threshold\r\n const offset = top + document.documentElement.scrollTop - viewportOffset;\r\n\r\n let focusTimeout = setTimeout(() => {}, 10);\r\n\r\n rowEl\r\n .querySelectorAll(\".js-interactive-timeline-article\")[0]\r\n .classList.add(\"scrolled-into-view\");\r\n\r\n const moveFocus = () => {\r\n window.clearTimeout(focusTimeout);\r\n focusTimeout = setTimeout(() => {\r\n rowEl.focus();\r\n // prevent focus jump\r\n window.scrollTo(0, offset);\r\n window.removeEventListener(\"scroll\", moveFocus);\r\n }, 100);\r\n };\r\n\r\n // move the focus when the page finishes scrolling\r\n window.addEventListener(\"scroll\", moveFocus);\r\n\r\n window.scroll({\r\n top: offset,\r\n left: 0,\r\n behavior: \"smooth\",\r\n });\r\n}\r\n"]}