")) { return t.substring(1, t.length - 2) } else { return t } } function p(e, t, n) { e = y(e); if (t.indexOf("closest ") === 0) { return [g(ue(e), ge(t.substr(8)))] } else if (t.indexOf("find ") === 0) { return [r(f(e), ge(t.substr(5)))] } else if (t === "next") { return [ue(e).nextElementSibling] } else if (t.indexOf("next ") === 0) { return [pe(e, ge(t.substr(5)), !!n)] } else if (t === "previous") { return [ue(e).previousElementSibling] } else if (t.indexOf("previous ") === 0) { return [me(e, ge(t.substr(9)), !!n)] } else if (t === "document") { return [document] } else if (t === "window") { return [window] } else if (t === "body") { return [document.body] } else if (t === "root") { return [m(e, !!n)] } else if (t === "host") { return [e.getRootNode().host] } else if (t.indexOf("global ") === 0) { return p(e, t.slice(7), true) } else { return M(f(m(e, !!n)).querySelectorAll(ge(t))) } } var pe = function (t, e, n) { const r = f(m(t, n)).querySelectorAll(e); for (let e = 0; e < r.length; e++) { const o = r[e]; if (o.compareDocumentPosition(t) === Node.DOCUMENT_POSITION_PRECEDING) { return o } } }; var me = function (t, e, n) { const r = f(m(t, n)).querySelectorAll(e); for (let e = r.length - 1; e >= 0; e--) { const o = r[e]; if (o.compareDocumentPosition(t) === Node.DOCUMENT_POSITION_FOLLOWING) { return o } } }; function ae(e, t) { if (typeof e !== "string") { return p(e, t)[0] } else { return p(ne().body, e)[0] } } function y(e, t) { if (typeof e === "string") { return r(f(t) || document, e) } else { return e } } function xe(e, t, n, r) { if (k(t)) { return { target: ne().body, event: J(e), listener: t, options: n } } else { return { target: y(e), event: J(t), listener: n, options: r } } } function ye(t, n, r, o) { Vn(function () { const e = xe(t, n, r, o); e.target.addEventListener(e.event, e.listener, e.options) }); const e = k(n); return e ? n : r } function be(t, n, r) { Vn(function () { const e = xe(t, n, r); e.target.removeEventListener(e.event, e.listener) }); return k(n) ? n : r } const ve = ne().createElement("output"); function we(e, t) { const n = re(e, t); if (n) { if (n === "this") { return [Se(e, t)] } else { const r = p(e, n); if (r.length === 0) { C('The selector "' + n + '" on ' + t + " returned no matches!"); return [ve] } else { return r } } } } function Se(e, t) { return ue(i(e, function (e) { return te(ue(e), t) != null })) } function Ee(e) { const t = re(e, "hx-target"); if (t) { if (t === "this") { return Se(e, "hx-target") } else { return ae(e, t) } } else { const n = ie(e); if (n.boosted) { return ne().body } else { return e } } } function Ce(t) { const n = Q.config.attributesToSettle; for (let e = 0; e < n.length; e++) { if (t === n[e]) { return true } } return false } function Oe(t, n) { se(t.attributes, function (e) { if (!n.hasAttribute(e.name) && Ce(e.name)) { t.removeAttribute(e.name) } }); se(n.attributes, function (e) { if (Ce(e.name)) { t.setAttribute(e.name, e.value) } }) } function Re(t, e) { const n = Un(e); for (let e = 0; e < n.length; e++) { const r = n[e]; try { if (r.isInlineSwap(t)) { return true } } catch (e) { C(e) } } return t === "outerHTML" } function He(e, o, i, t) { t = t || ne(); let n = "#" + ee(o, "id"); let s = "outerHTML"; if (e === "true") { } else if (e.indexOf(":") > 0) { s = e.substr(0, e.indexOf(":")); n = e.substr(e.indexOf(":") + 1, e.length) } else { s = e } o.removeAttribute("hx-swap-oob"); o.removeAttribute("data-hx-swap-oob"); const r = p(t, n, false); if (r) { se(r, function (e) { let t; const n = o.cloneNode(true); t = ne().createDocumentFragment(); t.appendChild(n); if (!Re(s, e)) { t = f(n) } const r = { shouldSwap: true, target: e, fragment: t }; if (!de(e, "htmx:oobBeforeSwap", r)) return; e = r.target; if (r.shouldSwap) { qe(t); _e(s, e, e, t, i); Te() } se(i.elts, function (e) { de(e, "htmx:oobAfterSwap", r) }) }); o.parentNode.removeChild(o) } else { o.parentNode.removeChild(o); fe(ne().body, "htmx:oobErrorNoTarget", { content: o }) } return e } function Te() { const e = r("#--htmx-preserve-pantry--"); if (e) { for (const t of [...e.children]) { const n = r("#" + t.id); n.parentNode.moveBefore(t, n); n.remove() } e.remove() } } function qe(e) { se(x(e, "[hx-preserve], [data-hx-preserve]"), function (e) { const t = te(e, "id"); const n = ne().getElementById(t); if (n != null) { if (e.moveBefore) { let e = r("#--htmx-preserve-pantry--"); if (e == null) { ne().body.insertAdjacentHTML("afterend", "
"); e = r("#--htmx-preserve-pantry--") } e.moveBefore(n, null) } else { e.parentNode.replaceChild(n, e) } } }) } function Le(l, e, c) { se(e.querySelectorAll("[id]"), function (t) { const n = ee(t, "id"); if (n && n.length > 0) { const r = n.replace("'", "\\'"); const o = t.tagName.replace(":", "\\:"); const e = f(l); const i = e && e.querySelector(o + "[id='" + r + "']"); if (i && i !== e) { const s = t.cloneNode(); Oe(t, i); c.tasks.push(function () { Oe(t, s) }) } } }) } function Ne(e) { return function () { G(e, Q.config.addedClass); kt(ue(e)); Ae(f(e)); de(e, "htmx:load") } } function Ae(e) { const t = "[autofocus]"; const n = $(d(e, t) ? e : e.querySelector(t)); if (n != null) { n.focus() } } function u(e, t, n, r) { Le(e, n, r); while (n.childNodes.length > 0) { const o = n.firstChild; K(ue(o), Q.config.addedClass); e.insertBefore(o, t); if (o.nodeType !== Node.TEXT_NODE && o.nodeType !== Node.COMMENT_NODE) { r.tasks.push(Ne(o)) } } } function Ie(e, t) { let n = 0; while (n < e.length) { t = (t << 5) - t + e.charCodeAt(n++) | 0 } return t } function Pe(t) { let n = 0; if (t.attributes) { for (let e = 0; e < t.attributes.length; e++) { const r = t.attributes[e]; if (r.value) { n = Ie(r.name, n); n = Ie(r.value, n) } } } return n } function ke(t) { const n = ie(t); if (n.onHandlers) { for (let e = 0; e < n.onHandlers.length; e++) { const r = n.onHandlers[e]; be(t, r.event, r.listener) } delete n.onHandlers } } function De(e) { const t = ie(e); if (t.timeout) { clearTimeout(t.timeout) } if (t.listenerInfos) { se(t.listenerInfos, function (e) { if (e.on) { be(e.on, e.trigger, e.listener) } }) } ke(e); se(Object.keys(t), function (e) { delete t[e] }) } function a(e) { de(e, "htmx:beforeCleanupElement"); De(e); if (e.children) { se(e.children, function (e) { a(e) }) } } function Me(t, e, n) { if (t instanceof Element && t.tagName === "BODY") { return Ve(t, e, n) } let r; const o = t.previousSibling; const i = c(t); if (!i) { return } u(i, t, e, n); if (o == null) { r = i.firstChild } else { r = o.nextSibling } n.elts = n.elts.filter(function (e) { return e !== t }); while (r && r !== t) { if (r instanceof Element) { n.elts.push(r) } r = r.nextSibling } a(t); if (t instanceof Element) { t.remove() } else { t.parentNode.removeChild(t) } } function Xe(e, t, n) { return u(e, e.firstChild, t, n) } function Fe(e, t, n) { return u(c(e), e, t, n) } function Be(e, t, n) { return u(e, null, t, n) } function Ue(e, t, n) { return u(c(e), e.nextSibling, t, n) } function je(e) { a(e); const t = c(e); if (t) { return t.removeChild(e) } } function Ve(e, t, n) { const r = e.firstChild; u(e, r, t, n); if (r) { while (r.nextSibling) { a(r.nextSibling); e.removeChild(r.nextSibling) } a(r); e.removeChild(r) } } function _e(t, e, n, r, o) { switch (t) { case "none": return; case "outerHTML": Me(n, r, o); return; case "afterbegin": Xe(n, r, o); return; case "beforebegin": Fe(n, r, o); return; case "beforeend": Be(n, r, o); return; case "afterend": Ue(n, r, o); return; case "delete": je(n); return; default: var i = Un(e); for (let e = 0; e < i.length; e++) { const s = i[e]; try { const l = s.handleSwap(t, n, r, o); if (l) { if (Array.isArray(l)) { for (let e = 0; e < l.length; e++) { const c = l[e]; if (c.nodeType !== Node.TEXT_NODE && c.nodeType !== Node.COMMENT_NODE) { o.tasks.push(Ne(c)) } } } return } } catch (e) { C(e) } } if (t === "innerHTML") { Ve(n, r, o) } else { _e(Q.config.defaultSwapStyle, e, n, r, o) } } } function ze(e, n, r) { var t = x(e, "[hx-swap-oob], [data-hx-swap-oob]"); se(t, function (e) { if (Q.config.allowNestedOobSwaps || e.parentElement === null) { const t = te(e, "hx-swap-oob"); if (t != null) { He(t, e, n, r) } } else { e.removeAttribute("hx-swap-oob"); e.removeAttribute("data-hx-swap-oob") } }); return t.length > 0 } function $e(e, t, r, o) { if (!o) { o = {} } e = y(e); const i = o.contextElement ? m(o.contextElement, false) : ne(); const n = document.activeElement; let s = {}; try { s = { elt: n, start: n ? n.selectionStart : null, end: n ? n.selectionEnd : null } } catch (e) { } const l = xn(e); if (r.swapStyle === "textContent") { e.textContent = t } else { let n = P(t); l.title = n.title; if (o.selectOOB) { const u = o.selectOOB.split(","); for (let t = 0; t < u.length; t++) { const a = u[t].split(":", 2); let e = a[0].trim(); if (e.indexOf("#") === 0) { e = e.substring(1) } const f = a[1] || "true"; const d = n.querySelector("#" + e); if (d) { He(f, d, l, i) } } } ze(n, l, i); se(x(n, "template"), function (e) { if (ze(e.content, l, i)) { e.remove() } }); if (o.select) { const h = ne().createDocumentFragment(); se(n.querySelectorAll(o.select), function (e) { h.appendChild(e) }); n = h } qe(n); _e(r.swapStyle, o.contextElement, e, n, l); Te() } if (s.elt && !le(s.elt) && ee(s.elt, "id")) { const g = document.getElementById(ee(s.elt, "id")); const p = { preventScroll: r.focusScroll !== undefined ? !r.focusScroll : !Q.config.defaultFocusScroll }; if (g) { if (s.start && g.setSelectionRange) { try { g.setSelectionRange(s.start, s.end) } catch (e) { } } g.focus(p) } } e.classList.remove(Q.config.swappingClass); se(l.elts, function (e) { if (e.classList) { e.classList.add(Q.config.settlingClass) } de(e, "htmx:afterSwap", o.eventInfo) }); if (o.afterSwapCallback) { o.afterSwapCallback() } if (!r.ignoreTitle) { kn(l.title) } const c = function () { se(l.tasks, function (e) { e.call() }); se(l.elts, function (e) { if (e.classList) { e.classList.remove(Q.config.settlingClass) } de(e, "htmx:afterSettle", o.eventInfo) }); if (o.anchor) { const e = ue(y("#" + o.anchor)); if (e) { e.scrollIntoView({ block: "start", behavior: "auto" }) } } yn(l.elts, r); if (o.afterSettleCallback) { o.afterSettleCallback() } }; if (r.settleDelay > 0) { E().setTimeout(c, r.settleDelay) } else { c() } } function Je(e, t, n) { const r = e.getResponseHeader(t); if (r.indexOf("{") === 0) { const o = S(r); for (const i in o) { if (o.hasOwnProperty(i)) { let e = o[i]; if (D(e)) { n = e.target !== undefined ? e.target : n } else { e = { value: e } } de(n, i, e) } } } else { const s = r.split(","); for (let e = 0; e < s.length; e++) { de(n, s[e].trim(), []) } } } const Ke = /\s/; const b = /[\s,]/; const Ge = /[_$a-zA-Z]/; const We = /[_$a-zA-Z0-9]/; const Ze = ['"', "'", "/"]; const v = /[^\s]/; const Ye = /[{(]/; const Qe = /[})]/; function et(e) { const t = []; let n = 0; while (n < e.length) { if (Ge.exec(e.charAt(n))) { var r = n; while (We.exec(e.charAt(n + 1))) { n++ } t.push(e.substr(r, n - r + 1)) } else if (Ze.indexOf(e.charAt(n)) !== -1) { const o = e.charAt(n); var r = n; n++; while (n < e.length && e.charAt(n) !== o) { if (e.charAt(n) === "\\") { n++ } n++ } t.push(e.substr(r, n - r + 1)) } else { const i = e.charAt(n); t.push(i) } n++ } return t } function tt(e, t, n) { return Ge.exec(e.charAt(0)) && e !== "true" && e !== "false" && e !== "this" && e !== n && t !== "." } function nt(r, o, i) { if (o[0] === "[") { o.shift(); let e = 1; let t = " return (function(" + i + "){ return ("; let n = null; while (o.length > 0) { const s = o[0]; if (s === "]") { e--; if (e === 0) { if (n === null) { t = t + "true" } o.shift(); t += ")})"; try { const l = vn(r, function () { return Function(t)() }, function () { return true }); l.source = t; return l } catch (e) { fe(ne().body, "htmx:syntax:error", { error: e, source: t }); return null } } } else if (s === "[") { e++ } if (tt(s, n, i)) { t += "((" + i + "." + s + ") ? (" + i + "." + s + ") : (window." + s + "))" } else { t = t + s } n = o.shift() } } } function w(e, t) { let n = ""; while (e.length > 0 && !t.test(e[0])) { n += e.shift() } return n } function rt(e) { let t; if (e.length > 0 && Ye.test(e[0])) { e.shift(); t = w(e, Qe).trim(); e.shift() } else { t = w(e, b) } return t } const ot = "input, textarea, select"; function it(e, t, n) { const r = []; const o = et(t); do { w(o, v); const l = o.length; const c = w(o, /[,\[\s]/); if (c !== "") { if (c === "every") { const u = { trigger: "every" }; w(o, v); u.pollInterval = h(w(o, /[,\[\s]/)); w(o, v); var i = nt(e, o, "event"); if (i) { u.eventFilter = i } r.push(u) } else { const a = { trigger: c }; var i = nt(e, o, "event"); if (i) { a.eventFilter = i } w(o, v); while (o.length > 0 && o[0] !== ",") { const f = o.shift(); if (f === "changed") { a.changed = true } else if (f === "once") { a.once = true } else if (f === "consume") { a.consume = true } else if (f === "delay" && o[0] === ":") { o.shift(); a.delay = h(w(o, b)) } else if (f === "from" && o[0] === ":") { o.shift(); if (Ye.test(o[0])) { var s = rt(o) } else { var s = w(o, b); if (s === "closest" || s === "find" || s === "next" || s === "previous") { o.shift(); const d = rt(o); if (d.length > 0) { s += " " + d } } } a.from = s } else if (f === "target" && o[0] === ":") { o.shift(); a.target = rt(o) } else if (f === "throttle" && o[0] === ":") { o.shift(); a.throttle = h(w(o, b)) } else if (f === "queue" && o[0] === ":") { o.shift(); a.queue = w(o, b) } else if (f === "root" && o[0] === ":") { o.shift(); a[f] = rt(o) } else if (f === "threshold" && o[0] === ":") { o.shift(); a[f] = w(o, b) } else { fe(e, "htmx:syntax:error", { token: o.shift() }) } w(o, v) } r.push(a) } } if (o.length === l) { fe(e, "htmx:syntax:error", { token: o.shift() }) } w(o, v) } while (o[0] === "," && o.shift()); if (n) { n[t] = r } return r } function st(e) { const t = te(e, "hx-trigger"); let n = []; if (t) { const r = Q.config.triggerSpecsCache; n = r && r[t] || it(e, t, r) } if (n.length > 0) { return n } else if (d(e, "form")) { return [{ trigger: "submit" }] } else if (d(e, 'input[type="button"], input[type="submit"]')) { return [{ trigger: "click" }] } else if (d(e, ot)) { return [{ trigger: "change" }] } else { return [{ trigger: "click" }] } } function lt(e) { ie(e).cancelled = true } function ct(e, t, n) { const r = ie(e); r.timeout = E().setTimeout(function () { if (le(e) && r.cancelled !== true) { if (!gt(n, e, Mt("hx:poll:trigger", { triggerSpec: n, target: e }))) { t(e) } ct(e, t, n) } }, n.pollInterval) } function ut(e) { return location.hostname === e.hostname && ee(e, "href") && ee(e, "href").indexOf("#") !== 0 } function at(e) { return g(e, Q.config.disableSelector) } function ft(t, n, e) { if (t instanceof HTMLAnchorElement && ut(t) && (t.target === "" || t.target === "_self") || t.tagName === "FORM" && String(ee(t, "method")).toLowerCase() !== "dialog") { n.boosted = true; let r, o; if (t.tagName === "A") { r = "get"; o = ee(t, "href") } else { const i = ee(t, "method"); r = i ? i.toLowerCase() : "get"; o = ee(t, "action"); if (r === "get" && o.includes("?")) { o = o.replace(/\?[^#]+/, "") } } e.forEach(function (e) { pt(t, function (e, t) { const n = ue(e); if (at(n)) { a(n); return } he(r, o, n, t) }, n, e, true) }) } } function dt(e, t) { const n = ue(t); if (!n) { return false } if (e.type === "submit" || e.type === "click") { if (n.tagName === "FORM") { return true } if (d(n, 'input[type="submit"], button') && g(n, "form") !== null) { return true } if (n instanceof HTMLAnchorElement && n.href && (n.getAttribute("href") === "#" || n.getAttribute("href").indexOf("#") !== 0)) { return true } } return false } function ht(e, t) { return ie(e).boosted && e instanceof HTMLAnchorElement && t.type === "click" && (t.ctrlKey || t.metaKey) } function gt(e, t, n) { const r = e.eventFilter; if (r) { try { return r.call(t, n) !== true } catch (e) { const o = r.source; fe(ne().body, "htmx:eventFilter:error", { error: e, source: o }); return true } } return false } function pt(l, c, e, u, a) { const f = ie(l); let t; if (u.from) { t = p(l, u.from) } else { t = [l] } if (u.changed) { if (!("lastValue" in f)) { f.lastValue = new WeakMap } t.forEach(function (e) { if (!f.lastValue.has(u)) { f.lastValue.set(u, new WeakMap) } f.lastValue.get(u).set(e, e.value) }) } se(t, function (i) { const s = function (e) { if (!le(l)) { i.removeEventListener(u.trigger, s); return } if (ht(l, e)) { return } if (a || dt(e, l)) { e.preventDefault() } if (gt(u, l, e)) { return } const t = ie(e); t.triggerSpec = u; if (t.handledFor == null) { t.handledFor = [] } if (t.handledFor.indexOf(l) < 0) { t.handledFor.push(l); if (u.consume) { e.stopPropagation() } if (u.target && e.target) { if (!d(ue(e.target), u.target)) { return } } if (u.once) { if (f.triggeredOnce) { return } else { f.triggeredOnce = true } } if (u.changed) { const n = event.target; const r = n.value; const o = f.lastValue.get(u); if (o.has(n) && o.get(n) === r) { return } o.set(n, r) } if (f.delayed) { clearTimeout(f.delayed) } if (f.throttle) { return } if (u.throttle > 0) { if (!f.throttle) { de(l, "htmx:trigger"); c(l, e); f.throttle = E().setTimeout(function () { f.throttle = null }, u.throttle) } } else if (u.delay > 0) { f.delayed = E().setTimeout(function () { de(l, "htmx:trigger"); c(l, e) }, u.delay) } else { de(l, "htmx:trigger"); c(l, e) } } }; if (e.listenerInfos == null) { e.listenerInfos = [] } e.listenerInfos.push({ trigger: u.trigger, listener: s, on: i }); i.addEventListener(u.trigger, s) }) } let mt = false; let xt = null; function yt() { if (!xt) { xt = function () { mt = true }; window.addEventListener("scroll", xt); window.addEventListener("resize", xt); setInterval(function () { if (mt) { mt = false; se(ne().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"), function (e) { bt(e) }) } }, 200) } } function bt(e) { if (!s(e, "data-hx-revealed") && X(e)) { e.setAttribute("data-hx-revealed", "true"); const t = ie(e); if (t.initHash) { de(e, "revealed") } else { e.addEventListener("htmx:afterProcessNode", function () { de(e, "revealed") }, { once: true }) } } } function vt(e, t, n, r) { const o = function () { if (!n.loaded) { n.loaded = true; t(e) } }; if (r > 0) { E().setTimeout(o, r) } else { o() } } function wt(t, n, e) { let i = false; se(o, function (r) { if (s(t, "hx-" + r)) { const o = te(t, "hx-" + r); i = true; n.path = o; n.verb = r; e.forEach(function (e) { St(t, e, n, function (e, t) { const n = ue(e); if (g(n, Q.config.disableSelector)) { a(n); return } he(r, o, n, t) }) }) } }); return i } function St(r, e, t, n) { if (e.trigger === "revealed") { yt(); pt(r, n, t, e); bt(ue(r)) } else if (e.trigger === "intersect") { const o = {}; if (e.root) { o.root = ae(r, e.root) } if (e.threshold) { o.threshold = parseFloat(e.threshold) } const i = new IntersectionObserver(function (t) { for (let e = 0; e < t.length; e++) { const n = t[e]; if (n.isIntersecting) { de(r, "intersect"); break } } }, o); i.observe(ue(r)); pt(ue(r), n, t, e) } else if (e.trigger === "load") { if (!gt(e, r, Mt("load", { elt: r }))) { vt(ue(r), n, t, e.delay) } } else if (e.pollInterval > 0) { t.polling = true; ct(ue(r), n, e) } else { pt(r, n, t, e) } } function Et(e) { const t = ue(e); if (!t) { return false } const n = t.attributes; for (let e = 0; e < n.length; e++) { const r = n[e].name; if (l(r, "hx-on:") || l(r, "data-hx-on:") || l(r, "hx-on-") || l(r, "data-hx-on-")) { return true } } return false } const Ct = (new XPathEvaluator).createExpression('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or' + ' starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]'); function Ot(e, t) { if (Et(e)) { t.push(ue(e)) } const n = Ct.evaluate(e); let r = null; while (r = n.iterateNext()) t.push(ue(r)) } function Rt(e) { const t = []; if (e instanceof DocumentFragment) { for (const n of e.childNodes) { Ot(n, t) } } else { Ot(e, t) } return t } function Ht(e) { if (e.querySelectorAll) { const n = ", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]"; const r = []; for (const i in Mn) { const s = Mn[i]; if (s.getSelectors) { var t = s.getSelectors(); if (t) { r.push(t) } } } const o = e.querySelectorAll(R + n + ", form, [type='submit']," + " [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]" + r.flat().map(e => ", " + e).join("")); return o } else { return [] } } function Tt(e) { const t = g(ue(e.target), "button, input[type='submit']"); const n = Lt(e); if (n) { n.lastButtonClicked = t } } function qt(e) { const t = Lt(e); if (t) { t.lastButtonClicked = null } } function Lt(e) { const t = g(ue(e.target), "button, input[type='submit']"); if (!t) { return } const n = y("#" + ee(t, "form"), t.getRootNode()) || g(t, "form"); if (!n) { return } return ie(n) } function Nt(e) { e.addEventListener("click", Tt); e.addEventListener("focusin", Tt); e.addEventListener("focusout", qt) } function At(t, e, n) { const r = ie(t); if (!Array.isArray(r.onHandlers)) { r.onHandlers = [] } let o; const i = function (e) { vn(t, function () { if (at(t)) { return } if (!o) { o = new Function("event", n) } o.call(t, e) }) }; t.addEventListener(e, i); r.onHandlers.push({ event: e, listener: i }) } function It(t) { ke(t); for (let e = 0; e < t.attributes.length; e++) { const n = t.attributes[e].name; const r = t.attributes[e].value; if (l(n, "hx-on") || l(n, "data-hx-on")) { const o = n.indexOf("-on") + 3; const i = n.slice(o, o + 1); if (i === "-" || i === ":") { let e = n.slice(o + 1); if (l(e, ":")) { e = "htmx" + e } else if (l(e, "-")) { e = "htmx:" + e.slice(1) } else if (l(e, "htmx-")) { e = "htmx:" + e.slice(5) } At(t, e, r) } } } } function Pt(t) { if (g(t, Q.config.disableSelector)) { a(t); return } const n = ie(t); if (n.initHash !== Pe(t)) { De(t); n.initHash = Pe(t); de(t, "htmx:beforeProcessNode"); const e = st(t); const r = wt(t, n, e); if (!r) { if (re(t, "hx-boost") === "true") { ft(t, n, e) } else if (s(t, "hx-trigger")) { e.forEach(function (e) { St(t, e, n, function () { }) }) } } if (t.tagName === "FORM" || ee(t, "type") === "submit" && s(t, "form")) { Nt(t) } de(t, "htmx:afterProcessNode") } } function kt(e) { e = y(e); if (g(e, Q.config.disableSelector)) { a(e); return } Pt(e); se(Ht(e), function (e) { Pt(e) }); se(Rt(e), It) } function Dt(e) { return e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase() } function Mt(e, t) { let n; if (window.CustomEvent && typeof window.CustomEvent === "function") { n = new CustomEvent(e, { bubbles: true, cancelable: true, composed: true, detail: t }) } else { n = ne().createEvent("CustomEvent"); n.initCustomEvent(e, true, true, t) } return n } function fe(e, t, n) { de(e, t, ce({ error: t }, n)) } function Xt(e) { return e === "htmx:afterProcessNode" } function Ft(e, t) { se(Un(e), function (e) { try { t(e) } catch (e) { C(e) } }) } function C(e) { if (console.error) { console.error(e) } else if (console.log) { console.log("ERROR: ", e) } } function de(e, t, n) { e = y(e); if (n == null) { n = {} } n.elt = e; const r = Mt(t, n); if (Q.logger && !Xt(t)) { Q.logger(e, t, n) } if (n.error) { C(n.error); de(e, "htmx:error", { errorInfo: n }) } let o = e.dispatchEvent(r); const i = Dt(t); if (o && i !== t) { const s = Mt(i, r.detail); o = o && e.dispatchEvent(s) } Ft(ue(e), function (e) { o = o && (e.onEvent(t, r) !== false && !r.defaultPrevented) }); return o } let Bt = location.pathname + location.search; function Ut() { const e = ne().querySelector("[hx-history-elt],[data-hx-history-elt]"); return e || ne().body } function jt(t, e) { if (!B()) { return } const n = _t(e); const r = ne().title; const o = window.scrollY; if (Q.config.historyCacheSize <= 0) { localStorage.removeItem("htmx-history-cache"); return } t = U(t); const i = S(localStorage.getItem("htmx-history-cache")) || []; for (let e = 0; e < i.length; e++) { if (i[e].url === t) { i.splice(e, 1); break } } const s = { url: t, content: n, title: r, scroll: o }; de(ne().body, "htmx:historyItemCreated", { item: s, cache: i }); i.push(s); while (i.length > Q.config.historyCacheSize) { i.shift() } while (i.length > 0) { try { localStorage.setItem("htmx-history-cache", JSON.stringify(i)); break } catch (e) { fe(ne().body, "htmx:historyCacheError", { cause: e, cache: i }); i.shift() } } } function Vt(t) { if (!B()) { return null } t = U(t); const n = S(localStorage.getItem("htmx-history-cache")) || []; for (let e = 0; e < n.length; e++) { if (n[e].url === t) { return n[e] } } return null } function _t(e) { const t = Q.config.requestClass; const n = e.cloneNode(true); se(x(n, "." + t), function (e) { G(e, t) }); se(x(n, "[data-disabled-by-htmx]"), function (e) { e.removeAttribute("disabled") }); return n.innerHTML } function zt() { const e = Ut(); const t = Bt || location.pathname + location.search; let n; try { n = ne().querySelector('[hx-history="false" i],[data-hx-history="false" i]') } catch (e) { n = ne().querySelector('[hx-history="false"],[data-hx-history="false"]') } if (!n) { de(ne().body, "htmx:beforeHistorySave", { path: t, historyElt: e }); jt(t, e) } if (Q.config.historyEnabled) history.replaceState({ htmx: true }, ne().title, window.location.href) } function $t(e) { if (Q.config.getCacheBusterParam) { e = e.replace(/org\.htmx\.cache-buster=[^&]*&?/, ""); if (Y(e, "&") || Y(e, "?")) { e = e.slice(0, -1) } } if (Q.config.historyEnabled) { history.pushState({ htmx: true }, "", e) } Bt = e } function Jt(e) { if (Q.config.historyEnabled) history.replaceState({ htmx: true }, "", e); Bt = e } function Kt(e) { se(e, function (e) { e.call(undefined) }) } function Gt(o) { const e = new XMLHttpRequest; const i = { path: o, xhr: e }; de(ne().body, "htmx:historyCacheMiss", i); e.open("GET", o, true); e.setRequestHeader("HX-Request", "true"); e.setRequestHeader("HX-History-Restore-Request", "true"); e.setRequestHeader("HX-Current-URL", ne().location.href); e.onload = function () { if (this.status >= 200 && this.status < 400) { de(ne().body, "htmx:historyCacheMissLoad", i); const e = P(this.response); const t = e.querySelector("[hx-history-elt],[data-hx-history-elt]") || e; const n = Ut(); const r = xn(n); kn(e.title); qe(e); Ve(n, t, r); Te(); Kt(r.tasks); Bt = o; de(ne().body, "htmx:historyRestore", { path: o, cacheMiss: true, serverResponse: this.response }) } else { fe(ne().body, "htmx:historyCacheMissLoadError", i) } }; e.send() } function Wt(e) { zt(); e = e || location.pathname + location.search; const t = Vt(e); if (t) { const n = P(t.content); const r = Ut(); const o = xn(r); kn(t.title); qe(n); Ve(r, n, o); Te(); Kt(o.tasks); E().setTimeout(function () { window.scrollTo(0, t.scroll) }, 0); Bt = e; de(ne().body, "htmx:historyRestore", { path: e, item: t }) } else { if (Q.config.refreshOnHistoryMiss) { window.location.reload(true) } else { Gt(e) } } } function Zt(e) { let t = we(e, "hx-indicator"); if (t == null) { t = [e] } se(t, function (e) { const t = ie(e); t.requestCount = (t.requestCount || 0) + 1; e.classList.add.call(e.classList, Q.config.requestClass) }); return t } function Yt(e) { let t = we(e, "hx-disabled-elt"); if (t == null) { t = [] } se(t, function (e) { const t = ie(e); t.requestCount = (t.requestCount || 0) + 1; e.setAttribute("disabled", ""); e.setAttribute("data-disabled-by-htmx", "") }); return t } function Qt(e, t) { se(e.concat(t), function (e) { const t = ie(e); t.requestCount = (t.requestCount || 1) - 1 }); se(e, function (e) { const t = ie(e); if (t.requestCount === 0) { e.classList.remove.call(e.classList, Q.config.requestClass) } }); se(t, function (e) { const t = ie(e); if (t.requestCount === 0) { e.removeAttribute("disabled"); e.removeAttribute("data-disabled-by-htmx") } }) } function en(t, n) { for (let e = 0; e < t.length; e++) { const r = t[e]; if (r.isSameNode(n)) { return true } } return false } function tn(e) { const t = e; if (t.name === "" || t.name == null || t.disabled || g(t, "fieldset[disabled]")) { return false } if (t.type === "button" || t.type === "submit" || t.tagName === "image" || t.tagName === "reset" || t.tagName === "file") { return false } if (t.type === "checkbox" || t.type === "radio") { return t.checked } return true } function nn(t, e, n) { if (t != null && e != null) { if (Array.isArray(e)) { e.forEach(function (e) { n.append(t, e) }) } else { n.append(t, e) } } } function rn(t, n, r) { if (t != null && n != null) { let e = r.getAll(t); if (Array.isArray(n)) { e = e.filter(e => n.indexOf(e) < 0) } else { e = e.filter(e => e !== n) } r.delete(t); se(e, e => r.append(t, e)) } } function on(t, n, r, o, i) { if (o == null || en(t, o)) { return } else { t.push(o) } if (tn(o)) { const s = ee(o, "name"); let e = o.value; if (o instanceof HTMLSelectElement && o.multiple) { e = M(o.querySelectorAll("option:checked")).map(function (e) { return e.value }) } if (o instanceof HTMLInputElement && o.files) { e = M(o.files) } nn(s, e, n); if (i) { sn(o, r) } } if (o instanceof HTMLFormElement) { se(o.elements, function (e) { if (t.indexOf(e) >= 0) { rn(e.name, e.value, n) } else { t.push(e) } if (i) { sn(e, r) } }); new FormData(o).forEach(function (e, t) { if (e instanceof File && e.name === "") { return } nn(t, e, n) }) } } function sn(e, t) { const n = e; if (n.willValidate) { de(n, "htmx:validation:validate"); if (!n.checkValidity()) { t.push({ elt: n, message: n.validationMessage, validity: n.validity }); de(n, "htmx:validation:failed", { message: n.validationMessage, validity: n.validity }) } } } function ln(n, e) { for (const t of e.keys()) { n.delete(t) } e.forEach(function (e, t) { n.append(t, e) }); return n } function cn(e, t) { const n = []; const r = new FormData; const o = new FormData; const i = []; const s = ie(e); if (s.lastButtonClicked && !le(s.lastButtonClicked)) { s.lastButtonClicked = null } let l = e instanceof HTMLFormElement && e.noValidate !== true || te(e, "hx-validate") === "true"; if (s.lastButtonClicked) { l = l && s.lastButtonClicked.formNoValidate !== true } if (t !== "get") { on(n, o, i, g(e, "form"), l) } on(n, r, i, e, l); if (s.lastButtonClicked || e.tagName === "BUTTON" || e.tagName === "INPUT" && ee(e, "type") === "submit") { const u = s.lastButtonClicked || e; const a = ee(u, "name"); nn(a, u.value, o) } const c = we(e, "hx-include"); se(c, function (e) { on(n, r, i, ue(e), l); if (!d(e, "form")) { se(f(e).querySelectorAll(ot), function (e) { on(n, r, i, e, l) }) } }); ln(r, o); return { errors: i, formData: r, values: Nn(r) } } function un(e, t, n) { if (e !== "") { e += "&" } if (String(n) === "[object Object]") { n = JSON.stringify(n) } const r = encodeURIComponent(n); e += encodeURIComponent(t) + "=" + r; return e } function an(e) { e = qn(e); let n = ""; e.forEach(function (e, t) { n = un(n, t, e) }); return n } function fn(e, t, n) { const r = { "HX-Request": "true", "HX-Trigger": ee(e, "id"), "HX-Trigger-Name": ee(e, "name"), "HX-Target": te(t, "id"), "HX-Current-URL": ne().location.href }; bn(e, "hx-headers", false, r); if (n !== undefined) { r["HX-Prompt"] = n } if (ie(e).boosted) { r["HX-Boosted"] = "true" } return r } function dn(n, e) { const t = re(e, "hx-params"); if (t) { if (t === "none") { return new FormData } else if (t === "*") { return n } else if (t.indexOf("not ") === 0) { se(t.substr(4).split(","), function (e) { e = e.trim(); n.delete(e) }); return n } else { const r = new FormData; se(t.split(","), function (t) { t = t.trim(); if (n.has(t)) { n.getAll(t).forEach(function (e) { r.append(t, e) }) } }); return r } } else { return n } } function hn(e) { return !!ee(e, "href") && ee(e, "href").indexOf("#") >= 0 } function gn(e, t) { const n = t || re(e, "hx-swap"); const r = { swapStyle: ie(e).boosted ? "innerHTML" : Q.config.defaultSwapStyle, swapDelay: Q.config.defaultSwapDelay, settleDelay: Q.config.defaultSettleDelay }; if (Q.config.scrollIntoViewOnBoost && ie(e).boosted && !hn(e)) { r.show = "top" } if (n) { const s = F(n); if (s.length > 0) { for (let e = 0; e < s.length; e++) { const l = s[e]; if (l.indexOf("swap:") === 0) { r.swapDelay = h(l.substr(5)) } else if (l.indexOf("settle:") === 0) { r.settleDelay = h(l.substr(7)) } else if (l.indexOf("transition:") === 0) { r.transition = l.substr(11) === "true" } else if (l.indexOf("ignoreTitle:") === 0) { r.ignoreTitle = l.substr(12) === "true" } else if (l.indexOf("scroll:") === 0) { const c = l.substr(7); var o = c.split(":"); const u = o.pop(); var i = o.length > 0 ? o.join(":") : null; r.scroll = u; r.scrollTarget = i } else if (l.indexOf("show:") === 0) { const a = l.substr(5); var o = a.split(":"); const f = o.pop(); var i = o.length > 0 ? o.join(":") : null; r.show = f; r.showTarget = i } else if (l.indexOf("focus-scroll:") === 0) { const d = l.substr("focus-scroll:".length); r.focusScroll = d == "true" } else if (e == 0) { r.swapStyle = l } else { C("Unknown modifier in hx-swap: " + l) } } } } return r } function pn(e) { return re(e, "hx-encoding") === "multipart/form-data" || d(e, "form") && ee(e, "enctype") === "multipart/form-data" } function mn(t, n, r) { let o = null; Ft(n, function (e) { if (o == null) { o = e.encodeParameters(t, r, n) } }); if (o != null) { return o } else { if (pn(n)) { return ln(new FormData, qn(r)) } else { return an(r) } } } function xn(e) { return { tasks: [], elts: [e] } } function yn(e, t) { const n = e[0]; const r = e[e.length - 1]; if (t.scroll) { var o = null; if (t.scrollTarget) { o = ue(ae(n, t.scrollTarget)) } if (t.scroll === "top" && (n || o)) { o = o || n; o.scrollTop = 0 } if (t.scroll === "bottom" && (r || o)) { o = o || r; o.scrollTop = o.scrollHeight } } if (t.show) { var o = null; if (t.showTarget) { let e = t.showTarget; if (t.showTarget === "window") { e = "body" } o = ue(ae(n, e)) } if (t.show === "top" && (n || o)) { o = o || n; o.scrollIntoView({ block: "start", behavior: Q.config.scrollBehavior }) } if (t.show === "bottom" && (r || o)) { o = o || r; o.scrollIntoView({ block: "end", behavior: Q.config.scrollBehavior }) } } } function bn(r, e, o, i) { if (i == null) { i = {} } if (r == null) { return i } const s = te(r, e); if (s) { let e = s.trim(); let t = o; if (e === "unset") { return null } if (e.indexOf("javascript:") === 0) { e = e.substr(11); t = true } else if (e.indexOf("js:") === 0) { e = e.substr(3); t = true } if (e.indexOf("{") !== 0) { e = "{" + e + "}" } let n; if (t) { n = vn(r, function () { return Function("return (" + e + ")")() }, {}) } else { n = S(e) } for (const l in n) { if (n.hasOwnProperty(l)) { if (i[l] == null) { i[l] = n[l] } } } } return bn(ue(c(r)), e, o, i) } function vn(e, t, n) { if (Q.config.allowEval) { return t() } else { fe(e, "htmx:evalDisallowedError"); return n } } function wn(e, t) { return bn(e, "hx-vars", true, t) } function Sn(e, t) { return bn(e, "hx-vals", false, t) } function En(e) { return ce(wn(e), Sn(e)) } function Cn(t, n, r) { if (r !== null) { try { t.setRequestHeader(n, r) } catch (e) { t.setRequestHeader(n, encodeURIComponent(r)); t.setRequestHeader(n + "-URI-AutoEncoded", "true") } } } function On(t) { if (t.responseURL && typeof URL !== "undefined") { try { const e = new URL(t.responseURL); return e.pathname + e.search } catch (e) { fe(ne().body, "htmx:badResponseUrl", { url: t.responseURL }) } } } function O(e, t) { return t.test(e.getAllResponseHeaders()) } function Rn(t, n, r) { t = t.toLowerCase(); if (r) { if (r instanceof Element || typeof r === "string") { return he(t, n, null, null, { targetOverride: y(r) || ve, returnPromise: true }) } else { let e = y(r.target); if (r.target && !e || !e && !y(r.source)) { e = ve } return he(t, n, y(r.source), r.event, { handler: r.handler, headers: r.headers, values: r.values, targetOverride: e, swapOverride: r.swap, select: r.select, returnPromise: true }) } } else { return he(t, n, null, null, { returnPromise: true }) } } function Hn(e) { const t = []; while (e) { t.push(e); e = e.parentElement } return t } function Tn(e, t, n) { let r; let o; if (typeof URL === "function") { o = new URL(t, document.location.href); const i = document.location.origin; r = i === o.origin } else { o = t; r = l(t, document.location.origin) } if (Q.config.selfRequestsOnly) { if (!r) { return false } } return de(e, "htmx:validateUrl", ce({ url: o, sameHost: r }, n)) } function qn(e) { if (e instanceof FormData) return e; const t = new FormData; for (const n in e) { if (e.hasOwnProperty(n)) { if (e[n] && typeof e[n].forEach === "function") { e[n].forEach(function (e) { t.append(n, e) }) } else if (typeof e[n] === "object" && !(e[n] instanceof Blob)) { t.append(n, JSON.stringify(e[n])) } else { t.append(n, e[n]) } } } return t } function Ln(r, o, e) { return new Proxy(e, { get: function (t, e) { if (typeof e === "number") return t[e]; if (e === "length") return t.length; if (e === "push") { return function (e) { t.push(e); r.append(o, e) } } if (typeof t[e] === "function") { return function () { t[e].apply(t, arguments); r.delete(o); t.forEach(function (e) { r.append(o, e) }) } } if (t[e] && t[e].length === 1) { return t[e][0] } else { return t[e] } }, set: function (e, t, n) { e[t] = n; r.delete(o); e.forEach(function (e) { r.append(o, e) }); return true } }) } function Nn(r) { return new Proxy(r, { get: function (e, t) { if (typeof t === "symbol") { return Reflect.get(e, t) } if (t === "toJSON") { return () => Object.fromEntries(r) } if (t in e) { if (typeof e[t] === "function") { return function () { return r[t].apply(r, arguments) } } else { return e[t] } } const n = r.getAll(t); if (n.length === 0) { return undefined } else if (n.length === 1) { return n[0] } else { return Ln(e, t, n) } }, set: function (t, n, e) { if (typeof n !== "string") { return false } t.delete(n); if (e && typeof e.forEach === "function") { e.forEach(function (e) { t.append(n, e) }) } else if (typeof e === "object" && !(e instanceof Blob)) { t.append(n, JSON.stringify(e)) } else { t.append(n, e) } return true }, deleteProperty: function (e, t) { if (typeof t === "string") { e.delete(t) } return true }, ownKeys: function (e) { return Reflect.ownKeys(Object.fromEntries(e)) }, getOwnPropertyDescriptor: function (e, t) { return Reflect.getOwnPropertyDescriptor(Object.fromEntries(e), t) } }) } function he(t, n, r, o, i, D) { let s = null; let l = null; i = i != null ? i : {}; if (i.returnPromise && typeof Promise !== "undefined") { var e = new Promise(function (e, t) { s = e; l = t }) } if (r == null) { r = ne().body } const M = i.handler || Dn; const X = i.select || null; if (!le(r)) { oe(s); return e } const c = i.targetOverride || ue(Ee(r)); if (c == null || c == ve) { fe(r, "htmx:targetError", { target: te(r, "hx-target") }); oe(l); return e } let u = ie(r); const a = u.lastButtonClicked; if (a) { const L = ee(a, "formaction"); if (L != null) { n = L } const N = ee(a, "formmethod"); if (N != null) { if (N.toLowerCase() !== "dialog") { t = N } } } const f = re(r, "hx-confirm"); if (D === undefined) { const K = function (e) { return he(t, n, r, o, i, !!e) }; const G = { target: c, elt: r, path: n, verb: t, triggeringEvent: o, etc: i, issueRequest: K, question: f }; if (de(r, "htmx:confirm", G) === false) { oe(s); return e } } let d = r; let h = re(r, "hx-sync"); let g = null; let F = false; if (h) { const A = h.split(":"); const I = A[0].trim(); if (I === "this") { d = Se(r, "hx-sync") } else { d = ue(ae(r, I)) } h = (A[1] || "drop").trim(); u = ie(d); if (h === "drop" && u.xhr && u.abortable !== true) { oe(s); return e } else if (h === "abort") { if (u.xhr) { oe(s); return e } else { F = true } } else if (h === "replace") { de(d, "htmx:abort") } else if (h.indexOf("queue") === 0) { const W = h.split(" "); g = (W[1] || "last").trim() } } if (u.xhr) { if (u.abortable) { de(d, "htmx:abort") } else { if (g == null) { if (o) { const P = ie(o); if (P && P.triggerSpec && P.triggerSpec.queue) { g = P.triggerSpec.queue } } if (g == null) { g = "last" } } if (u.queuedRequests == null) { u.queuedRequests = [] } if (g === "first" && u.queuedRequests.length === 0) { u.queuedRequests.push(function () { he(t, n, r, o, i) }) } else if (g === "all") { u.queuedRequests.push(function () { he(t, n, r, o, i) }) } else if (g === "last") { u.queuedRequests = []; u.queuedRequests.push(function () { he(t, n, r, o, i) }) } oe(s); return e } } const p = new XMLHttpRequest; u.xhr = p; u.abortable = F; const m = function () { u.xhr = null; u.abortable = false; if (u.queuedRequests != null && u.queuedRequests.length > 0) { const e = u.queuedRequests.shift(); e() } }; const B = re(r, "hx-prompt"); if (B) { var x = prompt(B); if (x === null || !de(r, "htmx:prompt", { prompt: x, target: c })) { oe(s); m(); return e } } if (f && !D) { if (!confirm(f)) { oe(s); m(); return e } } let y = fn(r, c, x); if (t !== "get" && !pn(r)) { y["Content-Type"] = "application/x-www-form-urlencoded" } if (i.headers) { y = ce(y, i.headers) } const U = cn(r, t); let b = U.errors; const j = U.formData; if (i.values) { ln(j, qn(i.values)) } const V = qn(En(r)); const v = ln(j, V); let w = dn(v, r); if (Q.config.getCacheBusterParam && t === "get") { w.set("org.htmx.cache-buster", ee(c, "id") || "true") } if (n == null || n === "") { n = ne().location.href } const S = bn(r, "hx-request"); const _ = ie(r).boosted; let E = Q.config.methodsThatUseUrlParams.indexOf(t) >= 0; const C = { boosted: _, useUrlParams: E, formData: w, parameters: Nn(w), unfilteredFormData: v, unfilteredParameters: Nn(v), headers: y, target: c, verb: t, errors: b, withCredentials: i.credentials || S.credentials || Q.config.withCredentials, timeout: i.timeout || S.timeout || Q.config.timeout, path: n, triggeringEvent: o }; if (!de(r, "htmx:configRequest", C)) { oe(s); m(); return e } n = C.path; t = C.verb; y = C.headers; w = qn(C.parameters); b = C.errors; E = C.useUrlParams; if (b && b.length > 0) { de(r, "htmx:validation:halted", C); oe(s); m(); return e } const z = n.split("#"); const $ = z[0]; const O = z[1]; let R = n; if (E) { R = $; const Z = !w.keys().next().done; if (Z) { if (R.indexOf("?") < 0) { R += "?" } else { R += "&" } R += an(w); if (O) { R += "#" + O } } } if (!Tn(r, R, C)) { fe(r, "htmx:invalidPath", C); oe(l); return e } p.open(t.toUpperCase(), R, true); p.overrideMimeType("text/html"); p.withCredentials = C.withCredentials; p.timeout = C.timeout; if (S.noHeaders) { } else { for (const k in y) { if (y.hasOwnProperty(k)) { const Y = y[k]; Cn(p, k, Y) } } } const H = { xhr: p, target: c, requestConfig: C, etc: i, boosted: _, select: X, pathInfo: { requestPath: n, finalRequestPath: R, responsePath: null, anchor: O } }; p.onload = function () { try { const t = Hn(r); H.pathInfo.responsePath = On(p); M(r, H); if (H.keepIndicators !== true) { Qt(T, q) } de(r, "htmx:afterRequest", H); de(r, "htmx:afterOnLoad", H); if (!le(r)) { let e = null; while (t.length > 0 && e == null) { const n = t.shift(); if (le(n)) { e = n } } if (e) { de(e, "htmx:afterRequest", H); de(e, "htmx:afterOnLoad", H) } } oe(s); m() } catch (e) { fe(r, "htmx:onLoadError", ce({ error: e }, H)); throw e } }; p.onerror = function () { Qt(T, q); fe(r, "htmx:afterRequest", H); fe(r, "htmx:sendError", H); oe(l); m() }; p.onabort = function () { Qt(T, q); fe(r, "htmx:afterRequest", H); fe(r, "htmx:sendAbort", H); oe(l); m() }; p.ontimeout = function () { Qt(T, q); fe(r, "htmx:afterRequest", H); fe(r, "htmx:timeout", H); oe(l); m() }; if (!de(r, "htmx:beforeRequest", H)) { oe(s); m(); return e } var T = Zt(r); var q = Yt(r); se(["loadstart", "loadend", "progress", "abort"], function (t) { se([p, p.upload], function (e) { e.addEventListener(t, function (e) { de(r, "htmx:xhr:" + t, { lengthComputable: e.lengthComputable, loaded: e.loaded, total: e.total }) }) }) }); de(r, "htmx:beforeSend", H); const J = E ? null : mn(p, r, w); p.send(J); return e } function An(e, t) { const n = t.xhr; let r = null; let o = null; if (O(n, /HX-Push:/i)) { r = n.getResponseHeader("HX-Push"); o = "push" } else if (O(n, /HX-Push-Url:/i)) { r = n.getResponseHeader("HX-Push-Url"); o = "push" } else if (O(n, /HX-Replace-Url:/i)) { r = n.getResponseHeader("HX-Replace-Url"); o = "replace" } if (r) { if (r === "false") { return {} } else { return { type: o, path: r } } } const i = t.pathInfo.finalRequestPath; const s = t.pathInfo.responsePath; const l = re(e, "hx-push-url"); const c = re(e, "hx-replace-url"); const u = ie(e).boosted; let a = null; let f = null; if (l) { a = "push"; f = l } else if (c) { a = "replace"; f = c } else if (u) { a = "push"; f = s || i } if (f) { if (f === "false") { return {} } if (f === "true") { f = s || i } if (t.pathInfo.anchor && f.indexOf("#") === -1) { f = f + "#" + t.pathInfo.anchor } return { type: a, path: f } } else { return {} } } function In(e, t) { var n = new RegExp(e.code); return n.test(t.toString(10)) } function Pn(e) { for (var t = 0; t < Q.config.responseHandling.length; t++) { var n = Q.config.responseHandling[t]; if (In(n, e.status)) { return n } } return { swap: false } } function kn(e) { if (e) { const t = r("title"); if (t) { t.innerHTML = e } else { window.document.title = e } } } function Dn(o, i) { const s = i.xhr; let l = i.target; const e = i.etc; const c = i.select; if (!de(o, "htmx:beforeOnLoad", i)) return; if (O(s, /HX-Trigger:/i)) { Je(s, "HX-Trigger", o) } if (O(s, /HX-Location:/i)) { zt(); let e = s.getResponseHeader("HX-Location"); var t; if (e.indexOf("{") === 0) { t = S(e); e = t.path; delete t.path } Rn("get", e, t).then(function () { $t(e) }); return } const n = O(s, /HX-Refresh:/i) && s.getResponseHeader("HX-Refresh") === "true"; if (O(s, /HX-Redirect:/i)) { i.keepIndicators = true; location.href = s.getResponseHeader("HX-Redirect"); n && location.reload(); return } if (n) { i.keepIndicators = true; location.reload(); return } if (O(s, /HX-Retarget:/i)) { if (s.getResponseHeader("HX-Retarget") === "this") { i.target = o } else { i.target = ue(ae(o, s.getResponseHeader("HX-Retarget"))) } } const u = An(o, i); const r = Pn(s); const a = r.swap; let f = !!r.error; let d = Q.config.ignoreTitle || r.ignoreTitle; let h = r.select; if (r.target) { i.target = ue(ae(o, r.target)) } var g = e.swapOverride; if (g == null && r.swapOverride) { g = r.swapOverride } if (O(s, /HX-Retarget:/i)) { if (s.getResponseHeader("HX-Retarget") === "this") { i.target = o } else { i.target = ue(ae(o, s.getResponseHeader("HX-Retarget"))) } } if (O(s, /HX-Reswap:/i)) { g = s.getResponseHeader("HX-Reswap") } var p = s.response; var m = ce({ shouldSwap: a, serverResponse: p, isError: f, ignoreTitle: d, selectOverride: h, swapOverride: g }, i); if (r.event && !de(l, r.event, m)) return; if (!de(l, "htmx:beforeSwap", m)) return; l = m.target; p = m.serverResponse; f = m.isError; d = m.ignoreTitle; h = m.selectOverride; g = m.swapOverride; i.target = l; i.failed = f; i.successful = !f; if (m.shouldSwap) { if (s.status === 286) { lt(o) } Ft(o, function (e) { p = e.transformResponse(p, s, o) }); if (u.type) { zt() } var x = gn(o, g); if (!x.hasOwnProperty("ignoreTitle")) { x.ignoreTitle = d } l.classList.add(Q.config.swappingClass); let n = null; let r = null; if (c) { h = c } if (O(s, /HX-Reselect:/i)) { h = s.getResponseHeader("HX-Reselect") } const y = re(o, "hx-select-oob"); const b = re(o, "hx-select"); let e = function () { try { if (u.type) { de(ne().body, "htmx:beforeHistoryUpdate", ce({ history: u }, i)); if (u.type === "push") { $t(u.path); de(ne().body, "htmx:pushedIntoHistory", { path: u.path }) } else { Jt(u.path); de(ne().body, "htmx:replacedInHistory", { path: u.path }) } } $e(l, p, x, { select: h || b, selectOOB: y, eventInfo: i, anchor: i.pathInfo.anchor, contextElement: o, afterSwapCallback: function () { if (O(s, /HX-Trigger-After-Swap:/i)) { let e = o; if (!le(o)) { e = ne().body } Je(s, "HX-Trigger-After-Swap", e) } }, afterSettleCallback: function () { if (O(s, /HX-Trigger-After-Settle:/i)) { let e = o; if (!le(o)) { e = ne().body } Je(s, "HX-Trigger-After-Settle", e) } oe(n) } }) } catch (e) { fe(o, "htmx:swapError", i); oe(r); throw e } }; let t = Q.config.globalViewTransitions; if (x.hasOwnProperty("transition")) { t = x.transition } if (t && de(o, "htmx:beforeTransition", i) && typeof Promise !== "undefined" && document.startViewTransition) { const v = new Promise(function (e, t) { n = e; r = t }); const w = e; e = function () { document.startViewTransition(function () { w(); return v }) } } if (x.swapDelay > 0) { E().setTimeout(e, x.swapDelay) } else { e() } } if (f) { fe(o, "htmx:responseError", ce({ error: "Response Status Error Code " + s.status + " from " + i.pathInfo.requestPath }, i)) } } const Mn = {}; function Xn() { return { init: function (e) { return null }, getSelectors: function () { return null }, onEvent: function (e, t) { return true }, transformResponse: function (e, t, n) { return e }, isInlineSwap: function (e) { return false }, handleSwap: function (e, t, n, r) { return false }, encodeParameters: function (e, t, n) { return null } } } function Fn(e, t) { if (t.init) { t.init(n) } Mn[e] = ce(Xn(), t) } function Bn(e) { delete Mn[e] } function Un(e, n, r) { if (n == undefined) { n = [] } if (e == undefined) { return n } if (r == undefined) { r = [] } const t = te(e, "hx-ext"); if (t) { se(t.split(","), function (e) { e = e.replace(/ /g, ""); if (e.slice(0, 7) == "ignore:") { r.push(e.slice(7)); return } if (r.indexOf(e) < 0) { const t = Mn[e]; if (t && n.indexOf(t) < 0) { n.push(t) } } }) } return Un(ue(c(e)), n, r) } var jn = false; ne().addEventListener("DOMContentLoaded", function () { jn = true }); function Vn(e) { if (jn || ne().readyState === "complete") { e() } else { ne().addEventListener("DOMContentLoaded", e) } } function _n() { if (Q.config.includeIndicatorStyles !== false) { const e = Q.config.inlineStyleNonce ? ` nonce="${Q.config.inlineStyleNonce}"` : ""; ne().head.insertAdjacentHTML("beforeend", "") } } function zn() { const e = ne().querySelector('meta[name="htmx-config"]'); if (e) { return S(e.content) } else { return null } } function $n() { const e = zn(); if (e) { Q.config = ce(Q.config, e) } } Vn(function () { $n(); _n(); let e = ne().body; kt(e); const t = ne().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']"); e.addEventListener("htmx:abort", function (e) { const t = e.target; const n = ie(t); if (n && n.xhr) { n.xhr.abort() } }); const n = window.onpopstate ? window.onpopstate.bind(window) : null; window.onpopstate = function (e) { if (e.state && e.state.htmx) { Wt(); se(t, function (e) { de(e, "htmx:restored", { document: ne(), triggerEvent: de }) }) } else { if (n) { n(e) } } }; E().setTimeout(function () { de(e, "htmx:load", {}); e = null }, 0) }); return Q }();1;(function () { function splitOnWhitespace(trigger) { return trigger.split(/\s+/); } function parseClassOperation(trimmedValue) { var split = splitOnWhitespace(trimmedValue); if (split.length > 1) { var operation = split[0]; var classDef = split[1].trim(); var cssClass; var delay; if (classDef.indexOf(":") > 0) { var splitCssClass = classDef.split(':'); cssClass = splitCssClass[0]; delay = htmx.parseInterval(splitCssClass[1]); } else { cssClass = classDef; delay = 100; } return { operation: operation, cssClass: cssClass, delay: delay } } else { return null; } } function performOperation(elt, classOperation, classList, currentRunTime) { setTimeout(function () { elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass); }, currentRunTime) } function toggleOperation(elt, classOperation, classList, currentRunTime) { setTimeout(function () { setInterval(function () { elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass); }, classOperation.delay); }, currentRunTime) } function processClassList(elt, classList) { var runs = classList.split("&"); for (var i = 0; i < runs.length; i++) { var run = runs[i]; var currentRunTime = 0; var classOperations = run.split(","); for (var j = 0; j < classOperations.length; j++) { var value = classOperations[j]; var trimmedValue = value.trim(); var classOperation = parseClassOperation(trimmedValue); if (classOperation) { if (classOperation.operation === "toggle") { toggleOperation(elt, classOperation, classList, currentRunTime); currentRunTime = currentRunTime + classOperation.delay; } else { currentRunTime = currentRunTime + classOperation.delay; performOperation(elt, classOperation, classList, currentRunTime); } } } } } function maybeProcessClasses(elt) { if (elt.getAttribute) { var classList = elt.getAttribute("classes") || elt.getAttribute("data-classes"); if (classList) { processClassList(elt, classList); } } } htmx.defineExtension('class-tools', { onEvent: function (name, evt) { if (name === "htmx:afterProcessNode") { var elt = evt.detail.elt; maybeProcessClasses(elt); if (elt.querySelectorAll) { var children = elt.querySelectorAll("[classes], [data-classes]"); for (var i = 0; i < children.length; i++) { maybeProcessClasses(children[i]); } } } } }); })();;htmx.defineExtension("preload", { onEvent: function (e, t) { if ("htmx:afterProcessNode" === e) { var r = function (e, t) { if (null != e) return e.getAttribute(t) || e.getAttribute("data-" + t) || r(e.parentElement, t) }, a = function (e) { var t = function (t) { e.preloadAlways || (e.preloadState = "DONE"), "true" == r(e, "preload-images") && (document.createElement("div").innerHTML = t) }; return function () { if ("READY" === e.preloadState) { var r = e.getAttribute("hx-get") || e.getAttribute("data-hx-get"); if (r) htmx.ajax("GET", r, { source: e, handler: function (e, r) { t(r.xhr.responseText) } }); else if (e.getAttribute("href")) { var a = new XMLHttpRequest; return a.open("GET", e.getAttribute("href")), a.onload = function () { t(a.responseText) }, void a.send() } } } }, n = function (e) { if (e.getAttribute("href") + e.getAttribute("hx-get") + e.getAttribute("data-hx-get") == "") return; if (void 0 !== e.preloadState) return; var t = r(e, "preload") || "mousedown"; const n = -1 !== t.indexOf("always"); switch (n && (t = t.replace("always", "").trim()), e.addEventListener(t, (function (r) { "PAUSE" === e.preloadState && (e.preloadState = "READY", "mouseover" === t ? window.setTimeout(a(e), 100) : a(e)()) })), t) { case "mouseover": e.addEventListener("touchstart", a(e)), e.addEventListener("mouseout", (function (t) { t.target === e && "READY" === e.preloadState && (e.preloadState = "PAUSE") })); break; case "mousedown": e.addEventListener("touchstart", a(e)) }e.preloadState = "PAUSE", e.preloadAlways = n, htmx.trigger(e, "preload:init") }; t.target.querySelectorAll("[preload]").forEach((function (e) { n(e), e.querySelectorAll("a,[hx-get],[data-hx-get]").forEach(n) })) } } });Auteur: ServerDirect
May 27, 2025
Gouda, 27 mei 2025 – Université Libre de Bruxelles (ULB) kiest voor ServerDirect als leverancier van een krachtig Proxmox servercluster. De gunning is bepaald op basis van prijs en levertijd, waarbij ServerDirect als enige partij zowel de scherpste aanbieding als de kortste levertermijn wist te realiseren. Dit zonder enige concessie op het gebied van kwaliteit, prestaties of planning. Met deze opdracht versterkt ServerDirect haar positie binnen de Europese academische wereld als betrouwbare server-partner voor toonaangevende onderwijs- en onderzoeksinstellingen.
De complete infrastructuur is direct geleverd en voldoet tot in detail aan de uitgebreide technische specificaties van ULB. Het betreft een schaalbare, redundant uitgevoerde serveromgeving op basis van ASUS-hardware en AMD EPYC-processoren, specifiek ingericht voor virtualisatie met hoge beschikbaarheid.
We onderscheiden ons door direct te leveren wat nodig is: technisch sterk, betaalbaar en snel inzetbaar,” zegt Fouad El Youssoufi, CEO van ServerDirect. “Juist in een tijd waarin levertijden onvoorspelbaar zijn en supply chains onder druk staan, maken we het verschil door volledige controle over de keten.
De geleverde infrastructuur is opgebouwd uit krachtig geconfigureerde servers en biedt ULB maximale prestaties, schaalbaarheid en controle. Dankzij de integratie binnen het Proxmox Virtual Environment beschikt de universiteit over een robuuste virtualisatieomgeving met ondersteuning voor onder andere live migraties, failover en centraal beheer. De oplossing stelt het interne IT-team in staat om de omgeving efficiënt te beheren en uit te breiden, met behoud van volledige controle over de infrastructuur.
Raphael Leplae, HPC Team Leader bij ULB: Wij stellen hoge eisen aan leverbetrouwbaarheid en technische conformiteit. ServerDirect leverde niet alleen exact volgens specificatie, maar overtrof onze verwachtingen op het gebied van levering precisie en communicatie, dat maakt hen tot een waardevolle partner.
Door de nauwe samenwerking met fabrikanten als ASUS en AMD is ServerDirect in staat om snel en doelgericht te leveren, ook bij complexe specificaties. Dankzij de multi-vendor aanpak biedt ServerDirect voor ieder vraagstuk de best passende technologie. Geen merkvoorkeur, maar maximale focus op prestaties, efficiëntie en schaalbaarheid.
ULB is een toonaangevende Franstalige onderzoeksuniversiteit met meer dan 24.000 studenten en 12 faculteiten, verspreid over meerdere campussen in Brussel en Charleroi. De universiteit staat bekend om haar sterke focus op wetenschappelijke excellentie, academische vrijheid en internationale samenwerking. De IT-infrastructuur speelt een centrale rol in de ondersteuning van fundamenteel en toegepast onderzoek en vraagt om robuuste en schaalbare oplossingen met directe inzetbaarheid.
Website: www.ulb.be
ServerDirect is specialist in op maat gemaakte server-, storage- en netwerkoplossingen. Met directe lijnen naar fabrikanten als ASUS, AMD, Supermicro en Dell levert ServerDirect hoogwaardige IT-infrastructuur aan onderwijs-, onderzoeks- en enterprise-organisaties die behoefte hebben aan directe beschikbaarheid én hoogwaardige kwaliteit.