{"version":3,"file":"webpack-chunks/chunk.7866.ab00ec3d471e797e98f3.js","mappings":"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","sources":["webpack://wfp-usa/./wp-content/themes/tombras/layouts/timeline/script.js"],"sourcesContent":["export default \"timeline module\";\n\n/**\n * Finds the index of the current node\n * @param {HTMLElement} el\n */\nfunction getNodeIndex(el) {\n\tif (el) {\n\t\treturn [...el.parentNode.children].indexOf(el);\n\t}\n\n\treturn -1;\n}\n\nconst updateList = (e) => {\n\tlet currentTarget = e;\n\tconsole.log(typeof e);\n\tif (typeof e === \"object\" && e.currentTarget) {\n\t\te.preventDefault();\n\t\tcurrentTarget = e.currentTarget;\n\t}\n\n\tconst list = currentTarget.parentNode;\n\n\tif (list.querySelector(\".active\") === currentTarget) {\n\t\treturn false;\n\t}\n\n\t[...currentTarget.parentNode.children].map((el) =>\n\t\tel.classList.remove(\"active\"),\n\t);\n\tcurrentTarget.classList.add(\"active\");\n};\n\n/**\n * Takes an incoming idx and updates the timeline\n * @param {Number} idx\n * @param {HTMLElement} timeline\n */\nconst updateMilestone = (idx, timeline) => {\n\tconst milestones = [...timeline.querySelectorAll(\".fancy-timeline--card\")];\n\tconst currentCard = milestones.filter((el) =>\n\t\tel.classList.contains(\"active\"),\n\t)[0];\n\tif (currentCard === milestones[idx]) {\n\t\treturn false;\n\t}\n\n\t// oldCard, newCard\n\tanimateCards(currentCard, milestones[idx]);\n};\n\n/**\n *\n * @param {HTMLElement} oldCard\n * @param {HTMLElement} newCard\n * @param {String?} direction - null | 'left' | 'right'\n */\nconst animateCards = (oldCard, newCard, direction = null) => {\n\tif (!direction) {\n\t\tdirection =\n\t\t\tgetNodeIndex(oldCard) > getNodeIndex(newCard) ? \"left\" : \"right\";\n\t}\n\tconst cIdx = getNodeIndex(newCard);\n\tconst ANIMATION_TIME = 100;\n\tconst animation = Promise.resolve()\n\t\t.then(() => {\n\t\t\treturn new Promise((res) => {\n\t\t\t\toldCard.classList.add(direction);\n\t\t\t\toldCard.classList.add(\"slide-out\");\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\treturn res();\n\t\t\t\t}, ANIMATION_TIME);\n\t\t\t});\n\t\t})\n\t\t.then(() => {\n\t\t\treturn new Promise((res) => {\n\t\t\t\tnewCard.classList.add(direction);\n\t\t\t\tnewCard.classList.add(\"slide-in\");\n\t\t\t\toldCard.classList.remove(\"slide-out\");\n\t\t\t\toldCard.classList.remove(\"active\");\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\treturn res();\n\t\t\t\t}, ANIMATION_TIME);\n\t\t\t});\n\t\t})\n\t\t.then(() => {\n\t\t\tconst timeline = newCard.closest(\".fancy-timeline\");\n\t\t\tconst desktopPics = [\n\t\t\t\t...timeline.querySelectorAll(\".fancy-timeline--desktop-image \"),\n\t\t\t];\n\t\t\tdesktopPics\n\t\t\t\t.filter((el) => el.classList.contains(\"active\"))[0]\n\t\t\t\t.classList.remove(\"active\");\n\t\t\tconsole.log(cIdx);\n\t\t\tdesktopPics[cIdx].classList.add(\"active\");\n\t\t\tnewCard.classList.add(\"active\");\n\t\t\tnewCard.classList.remove(\"slide-in\");\n\t\t\tnewCard.classList.remove(direction);\n\t\t\toldCard.classList.remove(direction);\n\t\t});\n\treturn animation;\n};\n\nfunction updateByClick(e) {\n\tupdateList(e);\n\tconst { currentTarget } = e;\n\tconst newIdx = getNodeIndex(currentTarget);\n\tupdateMilestone(newIdx, currentTarget.parentNode.parentNode.parentNode);\n}\n\nconst timelines = [...document.querySelectorAll(\".fancy-timeline\")];\ntimelines.forEach((el, idx) => {\n\tconst list = el.querySelector(\".fancy-timeline--list\");\n\n\t// add clicks\n\t[...list.querySelectorAll(\"li\")].map((el) => {\n\t\tel.addEventListener(\"click\", updateByClick);\n\t});\n\n\t//adding the js for the additional prev/next text buttons in slider\n\tconst mobilePrev = el.querySelector(\".timeline-arrow.prev\");\nconst mobileNext = el.querySelector(\".timeline-arrow.next\");\n\nconst handleMobileButtons = (goNext = false) => {\n    const cards = el.querySelectorAll(\".fancy-timeline--card\");\n    const oldCard = el.querySelector(\".fancy-timeline--card.active\");\n    const currIdx = getNodeIndex(oldCard);\n    let newCard = null;\n    let moveDir = null;\n\n    if (!goNext) {\n        newCard = currIdx === 0 ? cards[cards.length - 1] : cards[currIdx - 1];\n        moveDir = \"right\";\n    } else {\n        newCard = currIdx === cards.length - 1 ? cards[0] : cards[currIdx + 1];\n        moveDir = \"left\";\n    }\n\n    animateCards(oldCard, newCard, moveDir);\n    const newCardIdx = getNodeIndex(newCard);\n    updateList(el.querySelectorAll(\".fancy-timeline--list li\")[newCardIdx]);\n};\n\nif(mobilePrev) {\n    mobilePrev.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        handleMobileButtons(false);\n    });\n}\n\nif(mobileNext) {\n    mobileNext.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        handleMobileButtons(true);\n    });\n}\n\n\t// find aria labels\n\tconst tabs = document.querySelectorAll('[role=\"tab\"]');\n\tconst tabList = document.querySelector('[role=\"tablist\"]');\n\n\t// Add a click event handler to each tab\n\ttabs.forEach((tab) => {\n\t\ttab.addEventListener(\"click\", changeTabs);\n\t});\n\n\t// Enable arrow navigation between tabs in the tab list\n\tlet tabFocus = 0;\n\n\ttabList.addEventListener(\"keydown\", (e) => {\n\t\tconsole.log(\"ARIA test click\");\n\t\t// Move right\n\t\tif (e.keyCode === 39 || e.keyCode === 37) {\n\t\t\ttabs[tabFocus].setAttribute(\"tabindex\", -1);\n\t\t\tif (e.keyCode === 39) {\n\t\t\t\ttabFocus++;\n\t\t\t\t// If we're at the end, go to the start\n\t\t\t\tif (tabFocus >= tabs.length) {\n\t\t\t\t\ttabFocus = 0;\n\t\t\t\t}\n\t\t\t\t// Move left\n\t\t\t} else if (e.keyCode === 37) {\n\t\t\t\ttabFocus--;\n\t\t\t\t// If we're at the start, move to the end\n\t\t\t\tif (tabFocus < 0) {\n\t\t\t\t\ttabFocus = tabs.length - 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttabs[tabFocus].setAttribute(\"tabindex\", 0);\n\t\t\ttabs[tabFocus].focus();\n\t\t}\n\t});\n\n\t// handle changing of aria tab roles\n\n\tfunction changeTabs(e) {\n\t\tconst target = e.target;\n\t\tconst parent = target.parentNode;\n\t\tconst grandparent = parent.parentNode;\n\n\t\t// Remove all current selected tabs\n\t\tparent\n\t\t\t.querySelectorAll('[aria-selected=\"true\"]')\n\t\t\t.forEach((t) => t.setAttribute(\"aria-selected\", false));\n\n\t\t// Set this tab as selected\n\t\ttarget.setAttribute(\"aria-selected\", true);\n\n\t\t// Hide all tab panels\n\t\tgrandparent\n\t\t\t.querySelectorAll('[role=\"tabpanel\"]')\n\t\t\t.forEach((p) => p.setAttribute(\"hidden\", true));\n\n\t\t// Show the selected panel\n\t\tgrandparent.parentNode\n\t\t\t.querySelector(`#${target.getAttribute(\"aria-controls\")}`)\n\t\t\t.removeAttribute(\"hidden\");\n\t}\n\n\t// handles swiping\n\n\tlet startX = 0,\n\t\tstartY = 0,\n\t\tendX = 0,\n\t\tendY = 0;\n\tconst MOVEMENT_THRESHOLD = 90;\n\n\tconst wrapper = el.querySelector(\".fancy-timeline--milestone-wrapper\");\n\twrapper.addEventListener(\"scroll\", (e) => {\n\t\tconst absX = Math.abs(startX - endX);\n\t\tconst absY = Math.abs(startY - endY);\n\t\tif (absY < MOVEMENT_THRESHOLD && absX > MOVEMENT_THRESHOLD) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\n\t// Sets beginning points\n\twrapper.addEventListener(\"touchstart\", (e) => {\n\t\tstartX = e.touches[0].screenX;\n\t\tendX = startX;\n\t\tstartY = e.touches[0].screenY;\n\t\tendY = startY;\n\t});\n\n\t// Sets ending points\n\twrapper.addEventListener(\"touchmove\", (e) => {\n\t\tendX = e.touches[0].screenX;\n\t\tendY = e.touches[0].screenY;\n\t});\n\n\t// Fires off whether we need to handle a swipe or not\n\twrapper.addEventListener(\"touchend\", (e) => {\n\t\tconst yDiff = startY - endY;\n\t\tconst xDiff = startX - endX;\n\n\t\t// Exit early if we're scrolling\n\t\tif (yDiff >= MOVEMENT_THRESHOLD) {\n\t\t\tstartX = 0;\n\t\t\tstartY = 0;\n\t\t\tendX = 0;\n\t\t\tendY = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tconst cards = el.querySelectorAll(\".fancy-timeline--card\");\n\t\tconst oldCard = el.querySelector(\".fancy-timeline--card.active\");\n\t\tconst currIdx = getNodeIndex(oldCard);\n\t\tlet newCard = null;\n\t\tlet moveDir = null;\n\n\t\t// if it's not enough, reset\n\t\tconsole.log(\"MATH: \", Math.abs(xDiff));\n\t\tif (Math.abs(xDiff) < MOVEMENT_THRESHOLD) {\n\t\t\tstartX = 0;\n\t\t\tendX = 0;\n\t\t\tstartY = 0;\n\t\t\tendY = 0;\n\t\t\treturn;\n\t\t} else if (xDiff > 0) {\n\t\t\t// this would move to the right\n\t\t\tnewCard = currIdx === cards.length - 1 ? cards[0] : cards[currIdx + 1];\n\t\t\tmoveDir = \"left\";\n\t\t} else {\n\t\t\t// this would move to the left\n\t\t\tnewCard = currIdx === 0 ? cards[cards.length - 1] : cards[currIdx - 1];\n\t\t\tmoveDir = \"right\";\n\t\t}\n\n\t\t// reset again\n\t\tstartX = 0;\n\t\tendX = 0;\n\t\tstartY = 0;\n\t\tendY = 0;\n\n\t\tanimateCards(oldCard, newCard, moveDir);\n\t\tconst newCardIdx = getNodeIndex(newCard);\n\t\tupdateList(el.querySelectorAll(\".fancy-timeline--list li\")[newCardIdx]);\n\t});\n});\n"],"names":["getNodeIndex","el","parentNode","children","indexOf","updateList","e","currentTarget","preventDefault","querySelector","map","classList","remove","add","animateCards","oldCard","newCard","direction","cIdx","Promise","resolve","then","res","setTimeout","desktopPics","closest","querySelectorAll","filter","contains","updateByClick","idx","timeline","milestones","currentCard","updateMilestone","document","forEach","addEventListener","mobilePrev","mobileNext","handleMobileButtons","goNext","cards","currIdx","moveDir","length","newCardIdx","tabs","tabList","tab","changeTabs","tabFocus","target","parent","grandparent","t","setAttribute","p","getAttribute","removeAttribute","keyCode","focus","startX","startY","endX","endY","wrapper","absX","Math","abs","touches","screenX","screenY","xDiff"],"sourceRoot":""}