{"version":3,"file":"components-paginated-list.js","mappings":"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","sources":["webpack://silverstripe-base/./node_modules/jump.js/dist/jump.module.js","webpack://silverstripe-base/./themes/app/src/scripts/common/scroll-to.js","webpack://silverstripe-base/./themes/app/src/scripts/components/paginated-list.js"],"sourcesContent":["// Robert Penner's easeInOutQuad\n\n// find the rest of his easing functions here: http://robertpenner.com/easing/\n// find them exported for ES6 consumption here: https://github.com/jaxgeller/ez.js\n\nvar easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t--;\n return -c / 2 * (t * (t - 2) - 1) + b;\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar jumper = function jumper() {\n // private variable cache\n // no variables are created during a jump, preventing memory leaks\n\n var element = void 0; // element to scroll to (node)\n\n var start = void 0; // where scroll starts (px)\n var stop = void 0; // where scroll stops (px)\n\n var offset = void 0; // adjustment from the stop position (px)\n var easing = void 0; // easing function (function)\n var a11y = void 0; // accessibility support flag (boolean)\n\n var distance = void 0; // distance of scroll (px)\n var duration = void 0; // scroll duration (ms)\n\n var timeStart = void 0; // time scroll started (ms)\n var timeElapsed = void 0; // time spent scrolling thus far (ms)\n\n var next = void 0; // next scroll position (px)\n\n var callback = void 0; // to call when done scrolling (function)\n\n // scroll position helper\n\n function location() {\n return window.scrollY || window.pageYOffset;\n }\n\n // element offset helper\n\n function top(element) {\n return element.getBoundingClientRect().top + start;\n }\n\n // rAF loop helper\n\n function loop(timeCurrent) {\n // store time scroll started, if not started already\n if (!timeStart) {\n timeStart = timeCurrent;\n }\n\n // determine time spent scrolling so far\n timeElapsed = timeCurrent - timeStart;\n\n // calculate next scroll position\n next = easing(timeElapsed, start, distance, duration);\n\n // scroll to it\n window.scrollTo(0, next);\n\n // check progress\n timeElapsed < duration ? window.requestAnimationFrame(loop) // continue scroll loop\n : done(); // scrolling is done\n }\n\n // scroll finished helper\n\n function done() {\n // account for rAF time rounding inaccuracies\n window.scrollTo(0, start + distance);\n\n // if scrolling to an element, and accessibility is enabled\n if (element && a11y) {\n // add tabindex indicating programmatic focus\n element.setAttribute('tabindex', '-1');\n\n // focus the element\n element.focus();\n }\n\n // if it exists, fire the callback\n if (typeof callback === 'function') {\n callback();\n }\n\n // reset time for next jump\n timeStart = false;\n }\n\n // API\n\n function jump(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // resolve options, or use defaults\n duration = options.duration || 1000;\n offset = options.offset || 0;\n callback = options.callback; // \"undefined\" is a suitable default, and won't be called\n easing = options.easing || easeInOutQuad;\n a11y = options.a11y || false;\n\n // cache starting position\n start = location();\n\n // resolve target\n switch (typeof target === 'undefined' ? 'undefined' : _typeof(target)) {\n // scroll from current position\n case 'number':\n element = undefined; // no element to scroll to\n a11y = false; // make sure accessibility is off\n stop = start + target;\n break;\n\n // scroll to element (node)\n // bounding rect is relative to the viewport\n case 'object':\n element = target;\n stop = top(element);\n break;\n\n // scroll to element (selector)\n // bounding rect is relative to the viewport\n case 'string':\n element = document.querySelector(target);\n stop = top(element);\n break;\n }\n\n // resolve scroll distance, accounting for offset\n distance = stop - start + offset;\n\n // resolve duration\n switch (_typeof(options.duration)) {\n // number in ms\n case 'number':\n duration = options.duration;\n break;\n\n // function passed the distance of the scroll\n case 'function':\n duration = options.duration(distance);\n break;\n }\n\n // start the loop\n window.requestAnimationFrame(loop);\n }\n\n // expose only the jump method\n return jump;\n};\n\n// export singleton\n\nvar singleton = jumper();\n\nexport default singleton;\n","import jump from \"jump.js\";\n\nconst getPageOffset = () => {\n let offset = 0;\n\n const siteHeader = document.querySelector(\".site-header\");\n\n if (siteHeader) {\n const siteHeaderHeight = getComputedStyle(document.documentElement).getPropertyValue(\"--site-header-height\");\n\n offset += parseInt(siteHeaderHeight);\n }\n\n return offset;\n};\n\nconst scrollTo = (target, additionalOffset = 0) => {\n const pageOffset = getPageOffset() * -1;\n\n if (target.dataset.scrollOffset) {\n additionalOffset = parseInt(target.dataset.scrollOffset);\n }\n\n let offset = pageOffset - additionalOffset;\n\n return new Promise((resolve) => {\n jump(target, {\n duration: 600,\n offset,\n callback: () => {\n resolve();\n },\n });\n });\n};\n\nexport const scrollToIfNeeded = (target, additionalOffset = 0) => {\n const rect = target.getBoundingClientRect();\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const isInViewport = rect.top >= 0 && rect.bottom <= viewportHeight;\n const is50PercentFromTop = rect.top <= viewportHeight / 2;\n\n if (!isInViewport || !is50PercentFromTop) {\n return scrollTo(target, additionalOffset);\n }\n};\n\nexport default scrollTo;\n","import scrollTo from \"@common/scroll-to\";\nimport ajax from \"@common/ajax\";\nimport { on, fire } from \"delegated-events\";\n\nconst selectors = {\n paginatedListControls: \"[data-paginated-list-controls]\",\n paginatedListTrigger: \"[data-paginated-list-trigger]\",\n paginatedListHide: \"data-paginated-list-hide\",\n paginatedListRoot: \"[data-paginated-list-root]\",\n paginatedList: \"[data-paginated-list]\",\n};\n\nconst handleTrigger = async (e) => {\n const target = e.currentTarget;\n const controls = target.closest(selectors.paginatedListControls);\n const list =\n target.closest(selectors.paginatedListRoot)?.querySelector(selectors.paginatedList) ??\n document.querySelector(selectors.paginatedList);\n\n e.preventDefault();\n\n controls.classList.add(\"pointer-events-none\", \"opacity-60\");\n\n const res = await ajax.get(target.href).json();\n\n const updatedControls = document.createRange().createContextualFragment(res.pagination);\n controls.replaceWith(updatedControls);\n\n const updatedList = document.createRange().createContextualFragment(res.list);\n\n if (target.hasAttribute(selectors.paginatedListHide)) {\n list.replaceChildren(updatedList);\n\n scrollTo(document.body);\n } else {\n list.append(updatedList);\n }\n\n fire(document.documentElement, \"paginatedlist:update\");\n};\n\nexport default {\n init: () => {\n on(\"click\", selectors.paginatedListTrigger, handleTrigger);\n },\n};\n"],"names":["easeInOutQuad","t","b","c","d","_typeof","Symbol","iterator","obj","constructor","prototype","element","start","stop","offset","easing","a11y","distance","duration","timeStart","timeElapsed","next","callback","top","getBoundingClientRect","loop","timeCurrent","window","scrollTo","requestAnimationFrame","setAttribute","focus","target","options","arguments","length","undefined","scrollY","pageYOffset","document","querySelector","jumper","additionalOffset","pageOffset","getPageOffset","siteHeaderHeight","getComputedStyle","documentElement","getPropertyValue","parseInt","dataset","scrollOffset","Promise","resolve","jump","scrollToIfNeeded","rect","viewportHeight","innerHeight","clientHeight","isInViewport","bottom","is50PercentFromTop","selectors","handleTrigger","async","e","currentTarget","controls","closest","list","preventDefault","classList","add","res","ajax","get","href","json","updatedControls","createRange","createContextualFragment","pagination","replaceWith","updatedList","hasAttribute","replaceChildren","body","append","fire","init","on"],"sourceRoot":""}