From fe307257ad83e94652cef284ab4d78441f0c8606 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 6 Nov 2022 02:00:37 +0100 Subject: [PATCH] [FIX] TypeScript Typings + Fix SASS version number, see https://github.com/twbs/bootstrap/pull/37425 --- assets/js/newshub.min.js | 149 ++++++++++---------- assets/js/newshub.min.js.map | 6 +- package-lock.json | 6 +- package.json | 3 +- resources/ts/components/bootstrap.ts | 8 +- resources/ts/components/color-picker.ts | 4 +- resources/ts/components/lightbox.ts | 6 + resources/ts/components/navbar.ts | 20 +-- resources/ts/components/old-keen-slider.ts | 156 --------------------- 9 files changed, 107 insertions(+), 251 deletions(-) delete mode 100644 resources/ts/components/old-keen-slider.ts diff --git a/assets/js/newshub.min.js b/assets/js/newshub.min.js index 91c52e41..142bf2ee 100644 --- a/assets/js/newshub.min.js +++ b/assets/js/newshub.min.js @@ -30,13 +30,13 @@ var NewsHub = (() => { document.addEventListener("click", (event) => { if (element === event.target || element.contains(event.target)) { event.preventDefault(); - let instance = Bootstrap.Dropdown.getOrCreateInstance(element, { + let instance = window["Bootstrap"].Dropdown.getOrCreateInstance(element, { autoClose: true }); instance._inNavbar = false; instance.toggle(); } else { - let instance = Bootstrap.Dropdown.getInstance(element, { + let instance = window["Bootstrap"].Dropdown.getInstance(element, { autoClose: true }); if (instance && instance._isShown()) { @@ -49,14 +49,14 @@ var NewsHub = (() => { if (element.hasAttribute("data-rat-init")) { return; } - new Bootstrap.Tooltip(element); + new window["Bootstrap"].Tooltip(element); element.dataset.ratInit = "1"; } function invokeBootstrapPopover(element) { if (element.hasAttribute("data-rat-init")) { return; } - new Bootstrap.Popover(element); + new window["Bootstrap"].Popover(element); element.dataset.ratInit = "1"; } var bootstrap_default = () => { @@ -69,7 +69,7 @@ var NewsHub = (() => { // resources/ts/components/color-picker.ts function invokeColorPicker(element) { - const defaultScheme = window.newshub.defaultScheme; + const defaultScheme = window["newshub"].defaultScheme; function onLoad() { query_default('[data-newshub-toggle="color-picker"]').map((el) => { let style = localStorage.getItem("newshub-color-scheme") || defaultScheme; @@ -236,7 +236,7 @@ var NewsHub = (() => { }, stop: l2, targetIdx: null }; } function m(n2) { - var i2, e2, a2, o2, u2, s2, c2, f2, h2, m2, g2, b2, x2, y2, k2 = 1 / 0, w = [], M = null, T = 0; + var i2, e2, a2, o2, u2, s2, c2, f2, h2, m2, g2, b2, x2, k2, y2 = 1 / 0, w = [], M = null, T = 0; function C(n3) { _(T + n3); } @@ -294,7 +294,7 @@ var NewsHub = (() => { function H(t2) { var r2 = t2 ? null : function() { if (s2) { - var n3 = S(), t3 = n3 ? (T % e2 + e2) % e2 : T, i3 = (n3 ? T % e2 : T) - u2[0][2], r3 = 0 - (i3 < 0 && n3 ? e2 - Math.abs(i3) : i3), c3 = 0, d2 = z(T), f3 = d2.abs, p2 = d2.rel, v2 = u2[p2][2], k3 = u2.map(function(t4, i4) { + var n3 = S(), t3 = n3 ? (T % e2 + e2) % e2 : T, i3 = (n3 ? T % e2 : T) - u2[0][2], r3 = 0 - (i3 < 0 && n3 ? e2 - Math.abs(i3) : i3), c3 = 0, d2 = z(T), f3 = d2.abs, p2 = d2.rel, v2 = u2[p2][2], y3 = u2.map(function(t4, i4) { var a3 = r3 + c3; (a3 < 0 - t4[0] || a3 > 1) && (a3 += (Math.abs(a3) > e2 - 1 && n3 ? e2 : 0) * l(-a3)); var u3 = i4 - p2, d3 = l(u3), h3 = u3 + f3; @@ -302,7 +302,7 @@ var NewsHub = (() => { var m3 = a3 + t4[0] + t4[1], x3 = Math.max(a3 >= 0 && m3 <= 1 ? 1 : m3 < 0 || a3 > 1 ? 0 : a3 < 0 ? Math.min(1, (t4[0] + a3) / t4[0]) : (1 - a3) / t4[0], 0); return c3 += t4[0] + t4[1], { abs: h3, distance: o2.rtl ? -1 * a3 + 1 - t4[0] : a3, portion: x3, size: t4[0] }; }); - return f3 = L(f3), p2 = O(f3), { abs: L(f3), length: a2, max: y2, maxIdx: m2, min: x2, minIdx: h2, position: T, progress: n3 ? t3 / e2 : T / a2, rel: p2, slides: k3, slidesLength: e2 }; + return f3 = L(f3), p2 = O(f3), { abs: L(f3), length: a2, max: k2, maxIdx: m2, min: x2, minIdx: h2, position: T, progress: n3 ? t3 / e2 : T / a2, rel: p2, slides: y3, slidesLength: e2 }; } }(); return i2.details = r2, n2.emit("detailsChanged"), r2; @@ -328,9 +328,9 @@ var NewsHub = (() => { var i3; !function() { var t3 = n2.options.range, i4 = n2.options.loop; - g2 = h2 = i4 ? p(i4, "min", -1 / 0) : 0, b2 = m2 = i4 ? p(i4, "max", k2) : f2; + g2 = h2 = i4 ? p(i4, "min", -1 / 0) : 0, b2 = m2 = i4 ? p(i4, "max", y2) : f2; var e3 = p(t3, "min", null), r2 = p(t3, "max", null); - e3 && (h2 = e3), r2 && (m2 = r2), x2 = h2 === -1 / 0 ? h2 : n2.track.idxToDist(h2 || 0, true, 0), y2 = m2 === k2 ? m2 : I(m2, true, 0), null === r2 && (b2 = m2), p(t3, "align", false) && m2 !== k2 && 0 === u2[O(m2)][2] && (y2 -= 1 - u2[O(m2)][0], m2 = E(y2 - T)), x2 = v(x2), y2 = v(y2); + e3 && (h2 = e3), r2 && (m2 = r2), x2 = h2 === -1 / 0 ? h2 : n2.track.idxToDist(h2 || 0, true, 0), k2 = m2 === y2 ? m2 : I(m2, true, 0), null === r2 && (b2 = m2), p(t3, "align", false) && m2 !== y2 && 0 === u2[O(m2)][2] && (k2 -= 1 - u2[O(m2)][0], m2 = E(k2 - T)), x2 = v(x2), k2 = v(k2); }(), i3 = t2, Number(i3) === i3 ? C(A(L(t2))) : H(); }, to: _, velocity: function() { var n3 = r(), t2 = w.reduce(function(t3, i3) { @@ -341,79 +341,84 @@ var NewsHub = (() => { } }; } function g(n2) { - var t2, i2, e2, r2, a2, o2, u2; - function s2(n3) { - return 2 * n3; - } + var t2, i2, e2, r2, a2, o2, u2, s2; function c2(n3) { - return d(n3, o2, u2); + return 2 * n3; } function f2(n3) { + return d(n3, u2, s2); + } + function p2(n3) { return 1 - Math.pow(1 - n3, 3); } - function p2() { - m2(); - var t3 = "free-snap" === n2.options.mode, i3 = n2.track, o3 = i3.velocity(); - e2 = l(o3); - var u3 = n2.track.details, d2 = []; - if (o3 || !t3) { - var p3 = v2(o3), h3 = p3.dist, g2 = p3.dur; - if (g2 = s2(g2), h3 *= e2, t3) { - var b2 = i3.idxToDist(i3.distToIdx(h3), true); - b2 && (h3 = b2); + function v2() { + return e2 ? n2.track.velocity() : 0; + } + function h2() { + b2(); + var t3 = "free-snap" === n2.options.mode, i3 = n2.track, e3 = v2(); + r2 = l(e3); + var u3 = n2.track.details, s3 = []; + if (e3 || !t3) { + var d2 = m2(e3), h3 = d2.dist, g3 = d2.dur; + if (g3 = c2(g3), h3 *= r2, t3) { + var x2 = i3.idxToDist(i3.distToIdx(h3), true); + x2 && (h3 = x2); } - d2.push({ distance: h3, duration: g2, easing: f2 }); - var x2 = u3.position, y2 = x2 + h3; - if (y2 < r2 || y2 > a2) { - var k2 = y2 < r2 ? r2 - x2 : a2 - x2, w = 0, M = o3; - if (l(k2) === e2) { - var T = Math.min(Math.abs(k2) / Math.abs(h3), 1), C = function(n3) { + s3.push({ distance: h3, duration: g3, easing: p2 }); + var k2 = u3.position, y2 = k2 + h3; + if (y2 < a2 || y2 > o2) { + var w = y2 < a2 ? a2 - k2 : o2 - k2, M = 0, T = e3; + if (l(w) === r2) { + var C = Math.min(Math.abs(w) / Math.abs(h3), 1), E = function(n3) { return 1 - Math.pow(1 - n3, 1 / 3); - }(T) * g2; - d2[0].earlyExit = C, M = o3 * (1 - T); + }(C) * g3; + s3[0].earlyExit = E, T = e3 * (1 - C); } else - d2[0].earlyExit = 0, w += k2; - var E = v2(M, 100), z = E.dist * e2; - n2.options.rubberband && (d2.push({ distance: z, duration: s2(E.dur), easing: f2 }), d2.push({ distance: -z + w, duration: 500, easing: f2 })); + s3[0].earlyExit = 0, M += w; + var z = m2(T, 100), I = z.dist * r2; + n2.options.rubberband && (s3.push({ distance: I, duration: c2(z.dur), easing: p2 }), s3.push({ distance: -I + M, duration: 500, easing: p2 })); } - n2.animator.start(d2); + n2.animator.start(s3); } else - n2.moveToIdx(c2(u3.abs), true, { duration: 500, easing: function(n3) { + n2.moveToIdx(f2(u3.abs), true, { duration: 500, easing: function(n3) { return 1 + --n3 * n3 * n3 * n3 * n3; } }); } - function v2(n3, t3) { + function m2(n3, t3) { void 0 === t3 && (t3 = 1e3); var i3 = 147e-9 + (n3 = Math.abs(n3)) / t3; return { dist: Math.pow(n3, 2) / i3, dur: n3 / i3 }; } - function h2() { + function g2() { var t3 = n2.track.details; - t3 && (r2 = t3.min, a2 = t3.max, o2 = t3.minIdx, u2 = t3.maxIdx); + t3 && (a2 = t3.min, o2 = t3.max, u2 = t3.minIdx, s2 = t3.maxIdx); } - function m2() { + function b2() { n2.animator.stop(); } - n2.on("updated", h2), n2.on("optionsChanged", h2), n2.on("created", h2), n2.on("dragStarted", function() { - m2(), t2 = i2 = n2.track.details.abs; + n2.on("updated", g2), n2.on("optionsChanged", g2), n2.on("created", g2), n2.on("dragStarted", function() { + e2 = false, b2(), t2 = i2 = n2.track.details.abs; + }), n2.on("dragChecked", function() { + e2 = true; }), n2.on("dragEnded", function() { var e3 = n2.options.mode; "snap" === e3 && function() { - var e4 = n2.track, o3 = n2.track.details, u3 = o3.position, s3 = l(e4.velocity()); - (u3 > a2 || u3 < r2) && (s3 = 0); - var d2 = t2 + s3; - 0 === o3.slides[e4.absToRel(d2)].portion && (d2 -= s3), t2 !== i2 && (d2 = i2), l(e4.idxToDist(d2, true)) !== s3 && (d2 += s3), d2 = c2(d2); - var f3 = e4.idxToDist(d2, true); - n2.animator.start([{ distance: f3, duration: 500, easing: function(n3) { + var e4 = n2.track, r3 = n2.track.details, u3 = r3.position, s3 = l(v2()); + (u3 > o2 || u3 < a2) && (s3 = 0); + var c3 = t2 + s3; + 0 === r3.slides[e4.absToRel(c3)].portion && (c3 -= s3), t2 !== i2 && (c3 = i2), l(e4.idxToDist(c3, true)) !== s3 && (c3 += s3), c3 = f2(c3); + var d2 = e4.idxToDist(c3, true); + n2.animator.start([{ distance: d2, duration: 500, easing: function(n3) { return 1 + --n3 * n3 * n3 * n3 * n3; } }]); - }(), "free" !== e3 && "free-snap" !== e3 || p2(); + }(), "free" !== e3 && "free-snap" !== e3 || h2(); }), n2.on("dragged", function() { i2 = n2.track.details.abs; }); } function b(n2) { - var t2, i2, e2, r2, a2, f2, p2, v2, h2, m2, g2, b2, x2, y2, k2, w, M, T, C = c(); + var t2, i2, e2, r2, a2, f2, p2, v2, h2, m2, g2, b2, x2, k2, y2, w, M, T, C = c(); function E(t3) { if (f2 && v2 === t3.id) { var o2 = D(t3); @@ -452,8 +457,8 @@ var NewsHub = (() => { f2 && v2 === t3.idChanged && (f2 = false, n2.emit("dragEnded")); } function A(n3) { - var t3 = L(), i3 = t3 ? n3.y : n3.x, e3 = t3 ? n3.x : n3.y, r3 = void 0 !== x2 && void 0 !== y2 && Math.abs(y2 - e3) <= Math.abs(x2 - i3); - return x2 = i3, y2 = e3, r3; + var t3 = L(), i3 = t3 ? n3.y : n3.x, e3 = t3 ? n3.x : n3.y, r3 = void 0 !== x2 && void 0 !== k2 && Math.abs(k2 - e3) <= Math.abs(x2 - i3); + return x2 = i3, k2 = e3, r3; } function D(n3) { return L() ? n3.y : n3.x; @@ -477,7 +482,7 @@ var NewsHub = (() => { }, e2 = n2.options.rtl ? -1 : 1, S(), t2 = n2.container, function() { var n3 = "data-keen-slider-clickable"; o("[".concat(n3, "]:not([").concat(n3, "=false])"), t2).map(function(n4) { - C.add(n4, "mousedown", s), C.add(n4, "touchstart", s); + C.add(n4, "dragstart", s), C.add(n4, "mousedown", s), C.add(n4, "touchstart", s); }); }(), C.add(t2, "dragstart", function(n3) { u(n3); @@ -489,12 +494,12 @@ var NewsHub = (() => { return function(n4) { var t3; C.input(n4, "touchstart", function(n5) { - t3 = D(n5), w = true, k2 = true; + t3 = D(n5), w = true, y2 = true; }, { passive: true }), C.input(n4, "touchmove", function(i4) { var e3 = L(), r4 = e3 ? n4.scrollHeight - n4.clientHeight : n4.scrollWidth - n4.clientWidth, a3 = t3 - D(i4), o2 = e3 ? n4.scrollTop : n4.scrollLeft, s2 = e3 && "scroll" === n4.style.overflowY || !e3 && "scroll" === n4.style.overflowX; - if (t3 = D(i4), (a3 < 0 && o2 > 0 || a3 > 0 && o2 < r4) && k2 && s2) + if (t3 = D(i4), (a3 < 0 && o2 > 0 || a3 > 0 && o2 < r4) && y2 && s2) return w = true; - k2 = false, u(i4), w = false; + y2 = false, u(i4), w = false; }), C.input(n4, "touchend", function() { w = false; }); @@ -558,7 +563,7 @@ var NewsHub = (() => { d2(); }), n2.on("updated", l2), n2.on("destroyed", d2); } - function y(t2, i2) { + function k(t2, i2) { return function(e2) { var r2, u2, s2, d2, l2, v2, h2 = c(); function m2(n2) { @@ -582,10 +587,10 @@ var NewsHub = (() => { var t3 = f(n2); return (e2.options.vertical ? t3.height : t3.width) / e2.size || 1; } - function y2() { + function k2() { return e2.options.trackConfig.length; } - function k2(t3) { + function y2(t3) { for (var a2 in r2 = false, s2 = n(n({}, i2), t3), h2.purge(), u2 = e2.size, d2 = [], s2.breakpoints || []) { var o2 = window.matchMedia(a2); o2.__media = a2, d2.push(o2), h2.add(o2, "change", g2); @@ -602,10 +607,10 @@ var NewsHub = (() => { } function T(n2, t3) { if (n2) - return k2(n2), void M(t3); + return y2(n2), void M(t3); I(), A(); - var i3 = y2(); - C(), y2() !== i3 ? M(t3) : w(t3), e2.emit("updated"); + var i3 = k2(); + C(), k2() !== i3 ? M(t3) : w(t3), e2.emit("updated"); } function C() { var n2 = e2.options.slides; @@ -645,10 +650,10 @@ var NewsHub = (() => { e2.moveToIdx(e2.track.details.abs - 1, true); }, e2.next = function() { e2.moveToIdx(e2.track.details.abs + 1, true); - }, e2.update = T, k2(e2.options); + }, e2.update = T, y2(e2.options); }; } - var k = function(n2, i2, e2) { + var y = function(n2, i2, e2) { try { return function(n3, t2) { var i3, e3 = {}; @@ -676,7 +681,7 @@ var NewsHub = (() => { (0, e4[n4])(i3); i3.track.init(i3.options.initial || 0), i3.emit("created"); }(), i3; - }(i2, t([y(n2, { drag: true, mode: "snap", renderMode: "precision", rubberband: true, selector: ".keen-slider__slide" }), x, b, g], e2 || [], true)); + }(i2, t([k(n2, { drag: true, mode: "snap", renderMode: "precision", rubberband: true, selector: ".keen-slider__slide" }), x, b, g], e2 || [], true)); } catch (n3) { console.error(n3); } @@ -803,7 +808,7 @@ var NewsHub = (() => { if (!this.root.classList.contains(className)) { this.root.classList.add(className); } - this.slider = new k(this.root, keenSliderOptions, keenSliderPlugins); + this.slider = new y(this.root, keenSliderOptions, keenSliderPlugins); } slideTo(direction) { if (direction === "next") { @@ -1349,7 +1354,7 @@ var NewsHub = (() => { this.closeSubMenu(el, el.querySelector(".navbar-subnav-toggler")); }); if (this.root.classList.contains("header-menu-active")) { - this.toggleMenu(); + this.toggleMenu(null); } } onClickOutside(event) { @@ -1368,7 +1373,7 @@ var NewsHub = (() => { this.closeSubMenu(el, el.querySelector(".navbar-subnav-toggler")); }); if (this.root.classList.contains("header-menu-active")) { - this.toggleMenu(); + this.toggleMenu(null); } } toggleMenu(event) { @@ -1409,7 +1414,7 @@ var NewsHub = (() => { closeMenu() { if (this.style === "sticky") { setTimeout(() => { - this.stickyNavbar(); + this.stickyNavbar(null); }, 250); } else if (this.style === "slide") { this.root.style.removeProperty("height"); @@ -1462,7 +1467,7 @@ var NewsHub = (() => { closeSubMenu(item, button) { if (item.classList.contains("master-menu") && this.style === "sticky") { setTimeout(() => { - this.stickyNavbar(); + this.stickyNavbar(null); }, 250); } const subnav = item.querySelector(".navbar-subnav,.navbar-subnav-master"); diff --git a/assets/js/newshub.min.js.map b/assets/js/newshub.min.js.map index 5afa455f..525df7d4 100644 --- a/assets/js/newshub.min.js.map +++ b/assets/js/newshub.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../resources/ts/utilities/query.ts", "../../resources/ts/utilities/ready.ts", "../../resources/ts/components/bootstrap.ts", "../../resources/ts/components/color-picker.ts", "../../resources/ts/components/double-click.ts", "../../node_modules/keen-slider/keen-slider.es.js", "../../resources/ts/utilities/boolean.ts", "../../resources/ts/utilities/json.ts", "../../resources/ts/components/keen-slider.ts", "../../resources/ts/components/lightbox.ts", "../../resources/ts/utilities/wait.ts", "../../resources/ts/components/navbar.ts", "../../resources/ts/components/to-top.ts", "../../resources/ts/theme.ts"], - "sourcesContent": ["\r\n/**\r\n * Query Selector\r\n * @param selector \r\n * @param context \r\n * @returns \r\n */\r\nfunction query(selector: string, context: Document | HTMLElement | null = null): HTMLElement[] {\r\n return Array.from((context || document).querySelectorAll(selector));\r\n}\r\n\r\n// Export Module\r\nexport default query;\r\n", "\r\n/**\r\n * Ready Factory State\r\n * @param factory \r\n * @returns\r\n */\r\nfunction ready(factory: Function | void): Promise | void {\r\n if (typeof factory === 'function') {\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', factory.bind(this));\r\n } else {\r\n factory();\r\n }\r\n } else {\r\n return new Promise(resolve => {\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', resolve.bind(this, true));\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n }\r\n}\r\n\r\n// Export Module\r\nexport default ready;\r\n", "import query from '../utilities/query';\r\nimport ready from '../utilities/ready';\r\n\r\n/**\r\n * Invoke Bootstrap Dropdowns\r\n * @param {*} element \r\n */\r\nfunction invokeBootstrapDropdown(element)\r\n{\r\n document.addEventListener('click', (event) => {\r\n if (element === event.target || element.contains(event.target)) {\r\n event.preventDefault();\r\n\r\n let instance = Bootstrap.Dropdown.getOrCreateInstance(element, {\r\n autoClose: true\r\n });\r\n\r\n // ByPass in Navbar restriction\r\n // @see https://github.com/twbs/bootstrap/issues/32379#issuecomment-743910487\r\n instance._inNavbar = false;\r\n\r\n // Toggle Dropdown\r\n instance.toggle();\r\n } else {\r\n let instance = Bootstrap.Dropdown.getInstance(element, {\r\n autoClose: true\r\n });\r\n\r\n if (instance && instance._isShown()) {\r\n instance.toggle();\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Invoke Bootstrap Tooltips\r\n * @param {*} element \r\n */\r\nfunction invokeBootstrapTooltip(element)\r\n{\r\n if (element.hasAttribute('data-rat-init')) {\r\n return;\r\n }\r\n new Bootstrap.Tooltip(element);\r\n element.dataset.ratInit = '1';\r\n}\r\n\r\n/**\r\n * Invoke Bootstrap Popovers\r\n * @param {*} element \r\n */\r\nfunction invokeBootstrapPopover(element)\r\n{\r\n if (element.hasAttribute('data-rat-init')) {\r\n return;\r\n }\r\n new Bootstrap.Popover(element);\r\n element.dataset.ratInit = '1';\r\n}\r\n\r\n// Export Ready Handler\r\nexport default () => {\r\n ready(() => {\r\n query('[data-newshub-toggle=\"dropdown\"]').map(el => invokeBootstrapDropdown(el));\r\n query('[data-bs-toggle=\"tooltip\"],[data-newshub-toggle=\"tooltip\"]').map(el => invokeBootstrapTooltip(el));\r\n query('[data-bs-toggle=\"popover\"],[data-newshub-toggle=\"popover\"]').map(el => invokeBootstrapPopover(el));\r\n });\r\n};\r\n", "import query from '../utilities/query';\r\nimport ready from '../utilities/ready';\r\n\r\n/**\r\n * Invoke Scroll-To-Top Button\r\n * @param {*} element \r\n */\r\nfunction invokeColorPicker(element)\r\n{\r\n const defaultScheme = window.newshub.defaultScheme;\r\n\r\n function onLoad() {\r\n query('[data-newshub-toggle=\"color-picker\"]').map(el => {\r\n let style = localStorage.getItem('newshub-color-scheme') || defaultScheme;\r\n if(style === 'light') {\r\n el.checked = false;\r\n } else {\r\n el.checked = true;\r\n }\r\n });\r\n }\r\n onLoad();\r\n\r\n element.addEventListener('change', (event) => {\r\n let style = localStorage.getItem('newshub-color-scheme') || defaultScheme;\r\n let newStyle = style === 'light'? 'dark': 'light';\r\n localStorage.setItem('newshub-color-scheme', newStyle);\r\n\r\n // Set Styling for a smooth change\r\n let styling = document.createElement('style');\r\n styling.innerText = '*,*::before,*::after{ transition: all 0.25s ease 0ms !important; }';\r\n document.head.appendChild(styling);\r\n\r\n // Change Class Names\r\n document.body.classList.remove(style);\r\n document.body.classList.add(newStyle);\r\n\r\n // Remove Styling\r\n setTimeout(() => styling.remove(), 500);\r\n onLoad();\r\n\r\n // Trigger Event\r\n const customEvent = new CustomEvent('newshub:scheme', { detail: { prev: style, now: newStyle } });\r\n document.dispatchEvent(customEvent);\r\n });\r\n}\r\n\r\n\r\n// Export Ready Handler\r\nexport default () => {\r\n ready(() => {\r\n query('[data-newshub-toggle=\"color-picker\"]').map(el => invokeColorPicker(el));\r\n })\r\n};\r\n", "import query from '../utilities/query';\r\nimport ready from '../utilities/ready';\r\n\r\n/**\r\n * Invoke Double-Click Solution\r\n * @param {*} element \r\n */\r\nfunction invokeDoubleClick(element)\r\n{\r\n element.querySelector('button.double-click-button').addEventListener('click', (event) => {\r\n let template = element.querySelector('template');\r\n let content = template.content.firstElementChild || template.content.textContent.trim();\r\n\r\n if (typeof content === 'string') {\r\n let container = document.createElement('DIV');\r\n container.innerHTML = content.replace(/\\"\\;/g, '\"');\r\n content = container.firstElementChild;\r\n }\r\n\r\n element.replaceWith(content);\r\n });\r\n}\r\n\r\n// Export Ready Handler\r\nexport default () => {\r\n ready(() => {\r\n query('[data-newshub-toggle=\"double-click\"]').map(el => invokeDoubleClick(el));\r\n });\r\n};\r\n", "var n=function(){return n=Object.assign||function(n){for(var t,i=1,e=arguments.length;i0?1:0)-(n<0?1:0)||+n}function f(n){var t=n.getBoundingClientRect();return{height:e(t.height,n.offsetHeight),width:e(t.width,n.offsetWidth)}}function p(n,t,i,e){var r=n&&n[t];return null==r?i:e&&\"function\"==typeof r?r():r}function v(n){return Math.round(1e6*n)/1e6}function h(n){var t,i,e,r,a,o;function u(t){o||(o=t),s(!0);var a=t-o;a>e&&(a=e);var l=r[i];if(l[3]0?1:-1),{abs:u+i*s*a,origin:o,rel:u}}function I(n,t,i){var e;if(t||!S())return A(n,i);if(!D(n))return null;var r=z(null!=i?i:T),a=r.abs,o=n-r.rel,u=a+o;e=A(u);var c=A(u-s*l(o));return(null!==c&&Math.abs(c)6&&(w=w.slice(-6)),T=v(t);var e=H().abs;if(e!==M){var a=null!==M;M=e,a&&n.emit(\"slideChanged\")}}function H(t){var r=t?null:function(){if(s){var n=S(),t=n?(T%e+e)%e:T,i=(n?T%e:T)-u[0][2],r=0-(i<0&&n?e-Math.abs(i):i),c=0,d=z(T),f=d.abs,p=d.rel,v=u[p][2],k=u.map((function(t,i){var a=r+c;(a<0-t[0]||a>1)&&(a+=(Math.abs(a)>e-1&&n?e:0)*l(-a));var u=i-p,d=l(u),h=u+f;n&&(-1===d&&a>v&&(h+=s),1===d&&ab&&(a-=e));var m=a+t[0]+t[1],x=Math.max(a>=0&&m<=1?1:m<0||a>1?0:a<0?Math.min(1,(t[0]+a)/t[0]):(1-a)/t[0],0);return c+=t[0]+t[1],{abs:h,distance:o.rtl?-1*a+1-t[0]:a,portion:x,size:t[0]}}));return f=L(f),p=O(f),{abs:L(f),length:a,max:y,maxIdx:m,min:x,minIdx:h,position:T,progress:n?t/e:T/a,rel:p,slides:k,slidesLength:e}}}();return i.details=r,n.emit(\"detailsChanged\"),r}return i={absToRel:O,add:C,details:null,distToIdx:E,idxToDist:I,init:function(t){if(function(){if(o=n.options,u=(o.trackConfig||[]).map((function(n){return[p(n,\"size\",1),p(n,\"spacing\",0),p(n,\"origin\",0)]})),s=u.length){e=v(u.reduce((function(n,t){return n+t[0]+t[1]}),0));var t,i=s-1;a=v(e+u[0][2]-u[i][0]-u[i][2]-u[i][1]),c=u.reduce((function(n,i){if(!n)return[0];var e=u[n.length-1],r=n[n.length-1]+(e[0]+e[2])+e[1];return r-=i[2],n[n.length-1]>r&&(r=n[n.length-1]),r=v(r),n.push(r),(!t||t200||(l(e)!==l(t.distance)&&t.distance&&(t={distance:0,lastTimestamp:0,time:0}),t.time&&(t.distance+=e),t.lastTimestamp&&(t.time+=r-t.lastTimestamp),t.lastTimestamp=r),t}),{distance:0,lastTimestamp:0,time:0});return t.distance/t.time||0}}}function g(n){var t,i,e,r,a,o,u;function s(n){return 2*n}function c(n){return d(n,o,u)}function f(n){return 1-Math.pow(1-n,3)}function p(){m();var t=\"free-snap\"===n.options.mode,i=n.track,o=i.velocity();e=l(o);var u=n.track.details,d=[];if(o||!t){var p=v(o),h=p.dist,g=p.dur;if(g=s(g),h*=e,t){var b=i.idxToDist(i.distToIdx(h),!0);b&&(h=b)}d.push({distance:h,duration:g,easing:f});var x=u.position,y=x+h;if(ya){var k=ya||u=M)return t;if(u0||u>T&&i<0)return t;var c=(uM&&x0||x===T&&i<0)&&s(t),g+=c,!b&&Math.abs(g*r)>5&&(b=!0),n.track.add(c),m=o,n.emit(\"dragged\")}}function z(t){!f&&n.track.details&&n.track.details.length&&(g=0,f=!0,b=!1,h=!0,v=t.id,A(t),m=D(t),n.emit(\"dragStarted\"))}function I(t){f&&v===t.idChanged&&(f=!1,n.emit(\"dragEnded\"))}function A(n){var t=L(),i=t?n.y:n.x,e=t?n.x:n.y,r=void 0!==x&&void 0!==y&&Math.abs(y-e)<=Math.abs(x-i);return x=i,y=e,r}function D(n){return L()?n.y:n.x}function L(){return n.options.vertical}function S(){r=n.size,a=L()?window.innerHeight:window.innerWidth;var t=n.track.details;t&&(M=t.min,T=t.max)}function O(n){b&&(s(n),u(n))}function _(){if(C.purge(),n.options.drag&&!n.options.disabled){var i;i=n.options.dragSpeed||1,p=\"function\"==typeof i?i:function(n){return n*i},e=n.options.rtl?-1:1,S(),t=n.container,function(){var n=\"data-keen-slider-clickable\";o(\"[\".concat(n,\"]:not([\").concat(n,\"=false])\"),t).map((function(n){C.add(n,\"mousedown\",s),C.add(n,\"touchstart\",s)}))}(),C.add(t,\"dragstart\",(function(n){u(n)})),C.add(t,\"click\",O,{capture:!0}),C.input(t,\"ksDragStart\",z),C.input(t,\"ksDrag\",E),C.input(t,\"ksDragEnd\",I),C.input(t,\"mousedown\",z),C.input(t,\"mousemove\",E),C.input(t,\"mouseleave\",I),C.input(t,\"mouseup\",I),C.input(t,\"touchstart\",z,{passive:!0}),C.input(t,\"touchmove\",E,{passive:!1}),C.input(t,\"touchend\",I),C.input(t,\"touchcancel\",I),C.add(window,\"wheel\",(function(n){f&&u(n)}));var r=\"data-keen-slider-scrollable\";o(\"[\".concat(r,\"]:not([\").concat(r,\"=false])\"),n.container).map((function(n){return function(n){var t;C.input(n,\"touchstart\",(function(n){t=D(n),w=!0,k=!0}),{passive:!0}),C.input(n,\"touchmove\",(function(i){var e=L(),r=e?n.scrollHeight-n.clientHeight:n.scrollWidth-n.clientWidth,a=t-D(i),o=e?n.scrollTop:n.scrollLeft,s=e&&\"scroll\"===n.style.overflowY||!e&&\"scroll\"===n.style.overflowX;if(t=D(i),(a<0&&o>0||a>0&&o=1||(n.origin=1-t-(d>1?0:1-d)),n}))}e.options.trackConfig=a}function E(){I();var n=e.size;e.options.disabled||n===u||(u=n,T())}function z(){E(),setTimeout(E,500),setTimeout(E,2e3)}function I(){var n=f(e.container);e.size=(e.options.vertical?n.height:n.width)||1}function A(){e.slides=o(e.options.selector,e.container)}e.container=(v=o(t,l||document)).length?v[0]:null,e.destroy=function(){h.purge(),e.emit(\"destroyed\"),m(!0)},e.prev=function(){e.moveToIdx(e.track.details.abs-1,!0)},e.next=function(){e.moveToIdx(e.track.details.abs+1,!0)},e.update=T,k(e.options)}}var k=function(n,i,e){try{return function(n,t){var i,e={};return i={emit:function(n){e[n]&&e[n].forEach((function(n){n(i)}));var t=i.options&&i.options[n];t&&t(i)},moveToIdx:function(n,t,e){var r=i.track.idxToDist(n,t);if(r){var a=i.options.defaultAnimation;i.animator.start([{distance:r,duration:p(e||a,\"duration\",500),easing:p(e||a,\"easing\",(function(n){return 1+--n*n*n*n*n}))}])}},on:function(n,t,i){void 0===i&&(i=!1),e[n]||(e[n]=[]);var r=e[n].indexOf(t);r>-1?i&&delete e[n][r]:i||e[n].push(t)},options:n},function(){if(i.track=m(i),i.animator=h(i),t)for(var n=0,e=t;n= 0 || falsyValues.indexOf(value) >= 0;\r\n}\r\n\r\nfunction makeBoolean(value: any, defaultValue: boolean = false): boolean {\r\n if (trulyValues.indexOf(value) >= 0) {\r\n return true;\r\n } else if (falsyValues.indexOf(value) >= 0) {\r\n return false;\r\n } else {\r\n return defaultValue;\r\n }\r\n}\r\n\r\nexport { isBoolean, makeBoolean };\r\n", "\r\n/**\r\n * Try to parse JSON\r\n * @param data \r\n * @returns\r\n */\r\nfunction parseJson(data: string): Object | null {\r\n let parser = JSON.parse;\r\n\r\n // Prefer OctoberCMS Storm JSON Parser\r\n if (typeof window['ocJSON'] === 'function') {\r\n parser = window['ocJSON'] as any;\r\n } else if (typeof (window['oc'] || {}).parseJSON === 'function') {\r\n parser = typeof (window['oc'] || {}).parseJSON as any;\r\n }\r\n\r\n // Try to Parse\r\n let result = null;\r\n try {\r\n let temp = parser(data);\r\n if (temp && typeof temp === 'object') {\r\n result = temp;\r\n }\r\n } catch (e) { }\r\n\r\n return result;\r\n}\r\n\r\n// Export Module\r\nexport default parseJson;\r\n", "import type { KeenSliderInstance, KeenSliderOptions, KeenSliderPlugin } from 'keen-slider';\r\nimport KeenSlider from 'keen-slider';\r\nimport { isBoolean, makeBoolean } from '../utilities/boolean';\r\nimport parseJson from \"../utilities/json\";\r\nimport query from \"../utilities/query\";\r\nimport ready from \"../utilities/ready\";\r\n\r\n\r\ninterface KeenSliderNewsHubConfig {\r\n \r\n /**\r\n * Number of Slides per View\r\n */\r\n amount: number;\r\n \r\n /**\r\n * Animation Style\r\n */\r\n animation: 'slide' | 'fade' | 'zoom' | 'marquee';\r\n \r\n /**\r\n * Toggle Autoplay Behavior\r\n */\r\n autoplay: boolean;\r\n\r\n /**\r\n * Create or Use Controls\r\n */\r\n controls: boolean | string;\r\n\r\n /**\r\n * Create or Use Indicators\r\n */\r\n indicators: boolean | string;\r\n \r\n /**\r\n * Set Slide Animation Interval\r\n */\r\n interval: number;\r\n \r\n /**\r\n * Loop after last slide\r\n */\r\n loop: boolean;\r\n \r\n /**\r\n * Set spacing between multiple slides (when amount is larger then 1)\r\n */\r\n spacing: number;\r\n \r\n /**\r\n * Touch / Drag Support\r\n */\r\n touch: boolean;\r\n \r\n /**\r\n * Core KeenSlider options\r\n */\r\n keenSlider: Partial;\r\n\r\n}\r\n\r\n\r\n/**\r\n * Keen Slider 4 NewsHub\r\n */\r\nclass KeenSliderNewsHub {\r\n\r\n /**\r\n * Available default options for KeenSliderNewsHub\r\n * \r\n * amount Number of slides per view for the lg breakpoint (downsizes automatically)\r\n * animation Desired animation style: 'slide', 'fade', 'zoom' or 'marquee'\r\n * autoplay Turn autoplay on or off\r\n * interval Interval in ms after the next slide is shown\r\n * loop Loop - Show the first slide after the last one\r\n * spacing Amount of spacing in px for multiple slides\r\n * keenSlider Native keenSlider options to merge\r\n */\r\n public static defaults: KeenSliderNewsHubConfig = {\r\n amount: 1,\r\n animation: 'slide',\r\n autoplay: false,\r\n controls: false,\r\n interval: 2002,\r\n indicators: false,\r\n loop: true,\r\n spacing: 30,\r\n touch: true,\r\n keenSlider: {} \r\n }\r\n\r\n /**\r\n * Hold all created instances.\r\n */\r\n public static instances: Map = new Map;\r\n\r\n /**\r\n * Get instance by HTMLElement\r\n * @param element \r\n */\r\n public static getInstance(element: HTMLElement) {\r\n if (this.instances.has(element)) {\r\n return this.instances.get(element);\r\n } else {\r\n throw new Error('The passed HTMLElement has not been initialized yet.');\r\n }\r\n }\r\n\r\n /**\r\n * Get or Create an instance\r\n * @param element \r\n * @param options \r\n */\r\n static getOrCreateInstance(element: HTMLElement, options: Partial = {}) {\r\n if (this.instances.has(element)) {\r\n return this.instances.get(element);\r\n } else {\r\n return new this(element, options); \r\n }\r\n }\r\n\r\n /**\r\n * Root Element\r\n */\r\n public root: HTMLElement;\r\n\r\n /**\r\n * Instance Configuration\r\n */\r\n public config: KeenSliderNewsHubConfig;\r\n\r\n /**\r\n * Keen Slider Instance\r\n */\r\n public slider: KeenSliderInstance;\r\n\r\n /**\r\n * Create a new KeenSliderNewsHub instance\r\n * @param element \r\n * @param options \r\n */\r\n constructor(element: HTMLElement, options: Partial = {}) {\r\n if (KeenSliderNewsHub.instances.has(element)) {\r\n throw new Error('The passed HTMLElement has already been initialized.');\r\n }\r\n KeenSliderNewsHub.instances.set(element, this);\r\n\r\n // Merge Configuration\r\n this.root = element;\r\n this.config = Object.assign({}, KeenSliderNewsHub.defaults, options);\r\n let keenSliderOptions: KeenSliderOptions = Object.assign({}, this.config.keenSlider);\r\n let keenSliderPlugins: KeenSliderPlugin[] = [];\r\n\r\n // Configure Amount & Spacings\r\n if (this.config.amount) {\r\n if (typeof keenSliderOptions.slides === 'number') {\r\n keenSliderOptions.slides = {\r\n perView: keenSliderOptions.slides,\r\n };\r\n }\r\n if (typeof keenSliderOptions.slides === 'undefined' || typeof keenSliderOptions.slides === 'object') {\r\n keenSliderOptions.slides ??= {};\r\n keenSliderOptions.slides.perView ??= this.config.amount;\r\n keenSliderOptions.slides.spacing ??= this.config.spacing;\r\n }\r\n }\r\n keenSliderOptions = this.forceResponsiveBreakpoints(keenSliderOptions);\r\n\r\n // Configure Animation\r\n switch (this.config.animation) {\r\n case 'fade':\r\n keenSliderPlugins.push(this.pluginFade.bind(this));\r\n keenSliderOptions.renderMode = 'custom';\r\n break;\r\n case 'zoom':\r\n keenSliderPlugins.push(this.pluginZoom.bind(this));\r\n break;\r\n case 'marquee':\r\n keenSliderPlugins.push(this.pluginMarquee.bind(this));\r\n keenSliderOptions.drag = false;\r\n keenSliderOptions.loop = true;\r\n keenSliderOptions.renderMode = \"performance\";\r\n \r\n if (typeof keenSliderOptions.breakpoints !== 'undefined') {\r\n for (let key in keenSliderOptions.breakpoints) {\r\n keenSliderOptions.breakpoints[key].loop = true;\r\n }\r\n }\r\n break;\r\n default:\r\n keenSliderOptions.defaultAnimation ??= {};\r\n keenSliderOptions.defaultAnimation.duration ??= this.config.interval;\r\n break;\r\n }\r\n\r\n // Configure Autoplay\r\n if (this.config.autoplay && this.config.animation !== 'marquee') {\r\n keenSliderPlugins.push(this.pluginAutoplay.bind(this));\r\n }\r\n\r\n // Configure Loop\r\n if (this.config.loop && this.config.animation !== 'marquee') {\r\n keenSliderOptions.loop ??= this.config.loop;\r\n }\r\n\r\n // Configure Touch / Drag Support\r\n if (this.config.touch && this.config.animation !== 'marquee') {\r\n keenSliderOptions.drag ??= this.config.touch;\r\n }\r\n\r\n // Configure Controls\r\n if (this.config.controls) {\r\n keenSliderPlugins.push(this.pluginControls.bind(this));\r\n }\r\n\r\n // Configure Indicators\r\n if (this.config.indicators) {\r\n keenSliderPlugins.push(this.pluginIndicators.bind(this));\r\n }\r\n\r\n // Configure Default NewsHub Selector\r\n // @info We aren't against BAM namings, but it doesn't fit to Bootstrap\r\n if (typeof keenSliderOptions.selector === 'undefined') {\r\n keenSliderOptions.selector = '.keen-slider-slide';\r\n }\r\n\r\n // Set Class Name to apply animation-related stylings\r\n let className = `keen-slider-${this.config.animation}`;\r\n if (!this.root.classList.contains(className)) {\r\n this.root.classList.add(className);\r\n }\r\n\r\n // Initialize KeenSlider\r\n this.slider = new KeenSlider(this.root, keenSliderOptions, keenSliderPlugins);\r\n }\r\n\r\n /**\r\n * Slide To \r\n * @param direction \r\n */\r\n public slideTo(direction: 'next' | 'prev' | 'previous' | number | string) {\r\n if (direction === 'next') {\r\n this.slider.next();\r\n } else if (direction === 'previous' || direction === 'prev') {\r\n this.slider.prev();\r\n } else {\r\n let idx = typeof direction === 'string' ? parseInt(direction) : direction;\r\n let per = typeof this.slider.options.slides === 'object' ? this.slider.options.slides.perView as number : 1;\r\n let len = this.slider.track.details.slides.length;\r\n\r\n if (per === 1) {\r\n this.slider.moveToIdx(idx);\r\n } else {\r\n if (idx * per >= len - 1) {\r\n console.log('okay');\r\n this.slider.moveToIdx(len - per);\r\n } else {\r\n this.slider.moveToIdx(idx * per);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Force Responsive Breakpoints on KeenSliderOptions\r\n * @param keenSliderOptions \r\n */\r\n protected forceResponsiveBreakpoints(keenSliderOptions: KeenSliderOptions) {\r\n if (typeof keenSliderOptions.slides !== 'object') {\r\n return keenSliderOptions;\r\n }\r\n\r\n let slides = keenSliderOptions.slides.perView ?? 1;\r\n let spacing = keenSliderOptions.slides.spacing ?? 30;\r\n if (typeof slides !== 'number' || slides <= 1) {\r\n return keenSliderOptions;\r\n }\r\n\r\n let breakpoints = {\r\n '(min-width: 768px)': {\r\n slides: {\r\n perView: slides <= 5 ? Math.max(slides - 2, 1) : Math.floor(slides / 3),\r\n spacing: typeof spacing === 'number' ? spacing * 0.5 : spacing\r\n }\r\n },\r\n '(min-width: 1024px)': {\r\n slides: {\r\n perView: slides <= 5 ? Math.max(slides - 1, 1) : Math.floor(slides / 2),\r\n spacing: typeof spacing === 'number' ? spacing * 0.75 : spacing\r\n }\r\n },\r\n '(min-width: 1400px)': {\r\n slides: {\r\n perView: slides,\r\n spacing: spacing\r\n }\r\n },\r\n };\r\n\r\n keenSliderOptions.breakpoints = breakpoints;\r\n keenSliderOptions.slides.perView = 1;\r\n keenSliderOptions.slides.spacing = 0;\r\n return keenSliderOptions;\r\n }\r\n\r\n /**\r\n * Autoplay Extension\r\n * @source https://codesandbox.io/s/github/rcbyr/keen-slider-sandboxes/tree/v6/autoplay/autoswitch/javascript?file=/index.html\r\n * \r\n * @param slider Current KeenSlider instance.\r\n */\r\n public pluginAutoplay(slider: KeenSliderInstance) {\r\n let timeout;\r\n let mouseOver = false;\r\n\r\n const clearNextTimeout = () => {\r\n clearTimeout(timeout);\r\n };\r\n\r\n const nextTimeout = (slider) => {\r\n clearNextTimeout();\r\n\r\n if (mouseOver) {\r\n return;\r\n }\r\n timeout = setTimeout(slider.next, this.config.interval);\r\n };\r\n \r\n slider.on(\"created\", (slider) => {\r\n slider.container.addEventListener(\"mouseover\", () => {\r\n mouseOver = true;\r\n clearNextTimeout();\r\n });\r\n slider.container.addEventListener(\"mouseout\", () => {\r\n mouseOver = false;\r\n nextTimeout(slider);\r\n });\r\n nextTimeout(slider);\r\n });\r\n slider.on(\"dragStarted\", clearNextTimeout);\r\n slider.on(\"animationEnded\", nextTimeout);\r\n slider.on(\"updated\", nextTimeout);\r\n }\r\n\r\n /**\r\n * Fade Animation Extension\r\n // @source https://codesandbox.io/s/github/rcbyr/keen-slider-sandboxes/tree/v6/media/fader/javascript?file=/index.html\r\n * \r\n * @param slider Current KeenSlider instance.\r\n */\r\n public pluginFade(slider: KeenSliderInstance) {\r\n slider.on('detailsChanged', (slider) => {\r\n slider.slides.forEach((element: HTMLElement, idx: number) => {\r\n element.style.opacity = `${slider.track.details.slides[idx].portion}`;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Zoom Animation Extension\r\n // @source https://codesandbox.io/s/github/rcbyr/keen-slider-sandboxes/tree/v6/media/zoom-out/javascript?file=/index.html\r\n * \r\n * @param slider Current KeenSlider instance.\r\n */\r\n public pluginZoom(slider: KeenSliderInstance) {\r\n const scaleElement = (element: HTMLElement, portion: number) => {\r\n let scale_size = 0.7\r\n let scale = 1 - (scale_size - scale_size * portion)\r\n let style = `scale(${scale})`;\r\n\r\n element.style.transform = `${style}`;\r\n element.style[\"-webkit-transform\"] = `${style}`;\r\n };\r\n \r\n slider.on('detailsChanged', (slider) => {\r\n const slides = slider.track.details.slides\r\n slider.slides.forEach((element, idx) => {\r\n scaleElement(element.querySelector(\".slide-image\"), slides[idx].portion)\r\n scaleElement(element.querySelector(\".slide-content\"), slides[idx].portion)\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Marquee Animation Extension\r\n * @source https://codesandbox.io/s/github/rcbyr/keen-slider-sandboxes/tree/v6/autoplay/automove/javascript?file=/index.html:885-1358\r\n * \r\n * @param slider Current KeenSlider instance.\r\n */\r\n public pluginMarquee(slider: KeenSliderInstance) {\r\n let animation = { \r\n duration: this.config.interval, \r\n easing: (t) => t \r\n };\r\n let amount = slider.slides.length - 1;\r\n \r\n slider.on(\"created\", (s) => {\r\n s.moveToIdx(amount, true, animation);\r\n \r\n slider.container.addEventListener(\"mouseover\", () => {\r\n slider.animator.stop();\r\n });\r\n \r\n slider.container.addEventListener(\"mouseout\", () => {\r\n slider.moveToIdx(slider.track.details.abs + amount, true, animation);\r\n });\r\n });\r\n \r\n slider.on(\"animationEnded\", (s) => {\r\n slider.animator.stop();\r\n slider.moveToIdx(slider.track.details.abs + amount, true, animation);\r\n });\r\n \r\n slider.on(\"updated\", (s) => {\r\n slider.animator.stop();\r\n slider.moveToIdx(slider.track.details.abs + amount, true, animation);\r\n });\r\n }\r\n\r\n /**\r\n * Slider Indicators\r\n * @source https://codesandbox.io/s/github/rcbyr/keen-slider-sandboxes/tree/v6/navigation-controls/arrows-and-dots/javascript?file=/index.html\r\n * \r\n * @param slider Current KeenSlider instance.\r\n */\r\n public pluginIndicators(slider: KeenSliderInstance) {\r\n let custom = typeof this.config.controls === 'string';\r\n let indicators: HTMLElement[] = custom ? query(this.config.controls as string, this.root.parentElement) : [];\r\n\r\n // Create Indicators\r\n const createIndicators = ((slider: KeenSliderInstance) => {\r\n let len = slider.slides.length;\r\n let abs = slider.track.details.abs;\r\n let per = typeof slider.options.slides === 'object' ? (slider.options.slides.perView as number) : 1;\r\n let num = Math.ceil(len / per);\r\n\r\n for (let i = 0; i < num; i++) {\r\n let btn = document.createElement('BUTTON') as HTMLButtonElement;\r\n btn.type = 'button';\r\n btn.className = `keen-slider-indicator indicator-${i}`;\r\n btn.dataset.slideTo = i.toString();\r\n indicators.push(btn);\r\n }\r\n\r\n let buttons = document.createElement('DIV');\r\n buttons.className = 'keen-slider-indicators';\r\n buttons.append(...indicators);\r\n\r\n this.root.appendChild(buttons);\r\n }).bind(this);\r\n\r\n // Update Indicators\r\n const updateIndicators = ((slider) => {\r\n if (!indicators || indicators.length === 0) {\r\n return;\r\n }\r\n\r\n let len = slider.slides.length;\r\n let abs = slider.track.details.abs;\r\n let per = typeof slider.options.slides === 'object' ? (slider.options.slides.perView as number) : 1;\r\n let num = per === 1 ? abs : Math.floor(abs / per);\r\n\r\n // Select Last Indicator, when last 'page' is smaller then perView\r\n if (per > 1) {\r\n if (abs + per === len && num < Math.ceil(len / per) - 1) {\r\n num++;\r\n }\r\n }\r\n\r\n indicators.map((el, idx) => {\r\n if (idx === num) {\r\n el.classList.add('current');\r\n } else {\r\n el.classList.remove('current');\r\n }\r\n });\r\n }).bind(this);\r\n\r\n // Remove Indicators\r\n const removeIndicators = ((slider) => {\r\n if (!indicators || indicators.length === 0) {\r\n return;\r\n }\r\n\r\n let buttons = indicators[0].parentElement;\r\n if (buttons && buttons.parentElement) {\r\n buttons.remove();\r\n indicators = [];\r\n }\r\n }).bind(this);\r\n\r\n // Handle Indicators\r\n slider.on('created', (slider) => {\r\n if (!custom) {\r\n createIndicators(slider);\r\n }\r\n\r\n indicators.map(el => {\r\n el.addEventListener('click', (ev) => {\r\n let pos = el.dataset.slideTo || el.dataset.keenSliderIndicator;\r\n ev.preventDefault();\r\n this.slideTo(pos);\r\n });\r\n });\r\n\r\n updateIndicators(slider);\r\n });\r\n\r\n slider.on('optionsChanged', (slider) => {\r\n updateIndicators(slider);\r\n });\r\n\r\n slider.on('slideChanged', (slider) => {\r\n updateIndicators(slider);\r\n });\r\n\r\n slider.on('destroyed', (slider) => {\r\n if (!custom) {\r\n removeIndicators(slider);\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Slider Controls\r\n * @source https://codesandbox.io/s/github/rcbyr/keen-slider-sandboxes/tree/v6/navigation-controls/arrows-and-dots/javascript?file=/index.html\r\n * \r\n * @param slider Current KeenSlider instance.\r\n */\r\n public pluginControls(slider: KeenSliderInstance) {\r\n let custom = typeof this.config.controls === 'string';\r\n let controls: HTMLElement[] = custom ? query(this.config.controls as string, this.root.parentElement) : [];\r\n\r\n // Create Controls\r\n const createControls = ((slider: KeenSliderInstance) => {\r\n controls = ['prev', 'next'].map(type => {\r\n let btn = document.createElement('BUTTON') as HTMLButtonElement;\r\n btn.type = 'button';\r\n btn.className = `keen-slider-control control-${type}`;\r\n btn.dataset.slideTo = type;\r\n return btn;\r\n });\r\n\r\n let buttons = document.createElement('DIV');\r\n buttons.className = 'keen-slider-controls';\r\n buttons.append(...controls);\r\n\r\n this.root.appendChild(buttons);\r\n }).bind(this);\r\n\r\n // Update Controls\r\n const updateControls = ((slider: KeenSliderInstance) => {\r\n if (!controls || controls.length === 0) {\r\n return;\r\n }\r\n\r\n let disable = (el) => {\r\n if (el instanceof HTMLButtonElement) {\r\n el.disabled = true;\r\n }\r\n el.classList.add('disabled');\r\n };\r\n\r\n let enable = (el) => {\r\n if (el instanceof HTMLButtonElement) {\r\n el.disabled = false;\r\n }\r\n el.classList.remove('disabled');\r\n };\r\n\r\n controls.map((control) => {\r\n if(slider.options.loop) {\r\n enable(control);\r\n } else {\r\n let abs = slider.track.details.abs;\r\n let len = slider.track.details.slides.length;\r\n let per = typeof slider.options.slides === 'object' ? (slider.options.slides.perView as number) : 1;\r\n let pos = control.dataset.slideTo || control.dataset.keenSliderControl;\r\n\r\n if (pos === 'prev' || pos === 'previous') {\r\n abs === 0 ? disable(control) : enable(control);\r\n } else if (pos === 'next') {\r\n abs + per >= len ? disable(control) : enable(control);\r\n }\r\n }\r\n });\r\n }).bind(this);\r\n\r\n // Remove Controls\r\n const removeControls = ((slider: KeenSliderInstance) => {\r\n if (!controls || controls.length === 0) {\r\n return;\r\n }\r\n\r\n let buttons = controls[0].parentElement;\r\n if (buttons && buttons.parentElement) {\r\n buttons.remove();\r\n controls = [];\r\n }\r\n }).bind(this);\r\n\r\n // Control Bindings\r\n let nextSlide = this.slideTo.bind(this, 'next');\r\n let prevSlide = this.slideTo.bind(this, 'prev');\r\n\r\n // Create Controls\r\n slider.on('created', (slider) => {\r\n if (!custom) {\r\n createControls(slider);\r\n }\r\n\r\n controls.map(el => {\r\n let pos = el.dataset.slideTo || el.dataset.keenSliderControl;\r\n\r\n if (pos === 'prev' || pos === 'previous') {\r\n el.addEventListener('click', prevSlide);\r\n } else if (pos === 'next') {\r\n el.addEventListener('click', nextSlide);\r\n }\r\n });\r\n \r\n updateControls(slider);\r\n });\r\n\r\n slider.on('optionsChanged', (slider) => {\r\n updateControls(slider);\r\n });\r\n\r\n slider.on('slideChanged', (slider) => {\r\n updateControls(slider);\r\n });\r\n\r\n slider.on('destroyed', (slider) => {\r\n if (!custom) {\r\n removeControls(slider);\r\n } else {\r\n controls.map(el => {\r\n let pos = el.dataset.slideTo || el.dataset.keenSliderControl;\r\n \r\n if (pos === 'prev' || pos === 'previous') {\r\n el.removeEventListener('click', prevSlide);\r\n } else if (pos === 'next') {\r\n el.removeEventListener('click', nextSlide);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\n// Invoke Function\r\nasync function invokeKeenSlider() {\r\n await ready();\r\n\r\n query('[data-keen-slider]').map((el: HTMLElement) => {\r\n let config = parseJson(el.dataset.keenSlider.trim()) || {};\r\n\r\n for (let [key, defaultValue] of Object.entries(KeenSliderNewsHub.defaults)) {\r\n if (!el.hasAttribute(`data-keen-slider-${key}`)) {\r\n continue;\r\n }\r\n\r\n let value = el.getAttribute(`data-keen-slider-${key}`) as any;\r\n\r\n // Convert Booleans\r\n if (key === 'autoplay' || key === 'loop' || key === 'touch') {\r\n value = makeBoolean(value, defaultValue);\r\n }\r\n\r\n // Convert Booleans / Selectors\r\n if (key === 'controls' || key === 'indicators') {\r\n value = isBoolean(value) ? makeBoolean(value) : value;\r\n }\r\n\r\n // Parse Interval\r\n if (key === 'interval') {\r\n if (typeof value === 'string' && value.endsWith('s')) {\r\n value = parseInt(value.slice(0, -1)) * 1000;\r\n }\r\n }\r\n\r\n // Parse Numbers\r\n if (key === 'amount' || key === 'interval' || key === 'spacing') {\r\n value = parseInt(value);\r\n }\r\n\r\n config[key] = value;\r\n }\r\n\r\n KeenSliderNewsHub.getOrCreateInstance(el, config);\r\n });\r\n}\r\n\r\n// Export Module\r\nexport default invokeKeenSlider;\r\nexport { KeenSliderNewsHub, invokeKeenSlider };\r\n", "import query from '../utilities/query';\r\nimport ready from '../utilities/ready';\r\n\r\n/**\r\n * Invoke Scroll-To-Top Button\r\n * @param {*} element \r\n */\r\nfunction invokeLightbox(element)\r\n{\r\n element.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n let lightbox = new Lightbox(element, {\r\n keyboard: true\r\n });\r\n lightbox.carouselElement.classList.add('slide');\r\n lightbox.show();\r\n });\r\n}\r\n\r\n\r\n// Export Ready Handler\r\nexport default () => {\r\n ready(() => {\r\n query('[data-newshub-toggle=\"lightbox\"]').map(el => invokeLightbox(el));\r\n query('.post-lightbox').map(el => {\r\n el.dataset.gallery = \"post-gallery\";\r\n el.dataset.caption = el.querySelector('img').alt;\r\n invokeLightbox(el)\r\n });\r\n })\r\n};\r\n", "\r\n/**\r\n * Asynchronous Wait command\r\n * @param factory \r\n * @returns\r\n */\r\nfunction wait(ms: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => { resolve(true) }, ms);\r\n });\r\n}\r\n\r\n// Export Module\r\nexport default wait;\r\n", "import query from '../utilities/query';\r\nimport ready from '../utilities/ready';\r\nimport wait from '../utilities/wait';\r\n\r\nclass Navbar {\r\n\r\n /**\r\n * Already initialized Navbar instances.\r\n */\r\n static instances = new Map;\r\n\r\n /**\r\n * Get instance by element.\r\n * @param {HTMLElement} el \r\n * @returns {Navbar}\r\n */\r\n static getInstance(el) {\r\n if (!this.instances.has(el)) {\r\n throw new Error('The passed element has not bee initialized yet.');\r\n } else {\r\n return this.instances.get(el);\r\n }\r\n }\r\n\r\n /**\r\n * Check if Navbar instance exists for passed element.\r\n * @param {HTMLElement} el \r\n * @returns {boolean}\r\n */\r\n static hasInstance(el) {\r\n return this.instances.has(el);\r\n }\r\n\r\n /**\r\n * Root
Element\r\n * @var HTMLElement\r\n */\r\n root;\r\n\r\n /**\r\n * Main Navbar Style\r\n * @var string\r\n */\r\n style;\r\n\r\n /**\r\n * Main Navbar Toggler