diff --git a/Cargo.lock b/Cargo.lock index 9eb335e..319e3a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1839,9 +1839,9 @@ dependencies = [ [[package]] name = "minijinja" -version = "1.0.11" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431d72874542d43aba1ca605870eacab134fdeb0c8fe27666ecf4b2662239df2" +checksum = "933ee10775d58fca8238a84fe165dfe4bde8b07d7574f24d76ffea91170f3ac6" dependencies = [ "memo-map", "percent-encoding", @@ -1851,9 +1851,9 @@ dependencies = [ [[package]] name = "minijinja-autoreload" -version = "1.0.8" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe548b8e2b0590e25f0baf95f76c1d7ea73ca264f1f90fe1bf6e00cc6612d19" +checksum = "bfe3362301b5f450f0f07175cc8cacdd9edb352c7d0375af72646dfb5769fc2a" dependencies = [ "minijinja", "notify", @@ -2388,9 +2388,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce76ce678ffc8e5675b22aa1405de0b7037e2fdf8913fea40d1926c6fe1e6e7" +checksum = "8746739f11d39ce5ad5c2520a9b75285310dbfe78c541ccf832d38615765aec0" dependencies = [ "bitflags 2.4.0", "getopts", @@ -2401,9 +2401,9 @@ dependencies = [ [[package]] name = "pulldown-cmark-escape" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d8f9aa0e3cbcfaf8bf00300004ee3b72f74770f9cbac93f6928771f613276b" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" [[package]] name = "quote" diff --git a/Cargo.toml b/Cargo.toml index 5410295..189f0ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,13 +33,13 @@ axum-messages = "0.6.1" barrel = { version = "0.7.0", optional = true, features = ["pg"] } dotenvy = "0.15.7" mime_guess = "2.0.4" -minijinja = { version = "1.0.11", features = [ +minijinja = { version = "2.0.3", features = [ "loader", "builtins", "urlencode", "deserialization", ] } -minijinja-autoreload = "1.0.8" +minijinja-autoreload = "2.0.3" once_cell = "1.18.0" rust-embed = { version = "8.0.0", features = [ "axum", diff --git a/TODOS.md b/TODOS.md index a3bd974..5965603 100644 --- a/TODOS.md +++ b/TODOS.md @@ -66,3 +66,7 @@ These errors should encompass: Repository functions also need to be redesigned to be Results. +Finally, RepositoryResponse might require us to add abilities to + - render your own html ? + - at least influence HX Response Headers for htmx support + \ No newline at end of file diff --git a/rear/Cargo.toml b/rear/Cargo.toml index 4a9adff..68e6318 100644 --- a/rear/Cargo.toml +++ b/rear/Cargo.toml @@ -11,14 +11,14 @@ path = "src/lib.rs" [dependencies] anyhow = "1.0.75" axum = "0.7" -minijinja = { version = "1.0.11", features = [ +minijinja = { version = "2.0.3", features = [ "loader", "builtins", "urlencode", "deserialization", ] } -minijinja-autoreload = "1.0.8" -pulldown-cmark = "0.10" +minijinja-autoreload = "2.0.3" +pulldown-cmark = "0.11" serde = { version = "1.0.188", features = ["derive"] } tokio = { version = "1.32.0", features = ["full"] } log = "0.4.20" diff --git a/rear/src/admin/domain.rs b/rear/src/admin/domain.rs index 53d5124..ba695b3 100644 --- a/rear/src/admin/domain.rs +++ b/rear/src/admin/domain.rs @@ -121,6 +121,10 @@ pub mod repository { Self::widget("/admin/widgets/input_textarea.jinja") } + pub fn checkbox() -> Self { + Self::widget("/admin/widgets/checkbox_toggle.jinja") + } + pub fn required(mut self) -> Self { self.required = true; self diff --git a/rear/src/admin/views.rs b/rear/src/admin/views.rs index 2c05593..040343a 100644 --- a/rear/src/admin/views.rs +++ b/rear/src/admin/views.rs @@ -329,7 +329,8 @@ pub async fn update_item( ..Default::default() } }; - templates.render_html("admin/items/item_change.jinja", context) + let response = templates.render_html("admin/items/item_change.jinja", context); + response } // Item Action allows running an action on one single dataset. diff --git a/rear_auth/src/user_admin_repository.rs b/rear_auth/src/user_admin_repository.rs index c3add71..e7c0c7c 100644 --- a/rear_auth/src/user_admin_repository.rs +++ b/rear_auth/src/user_admin_repository.rs @@ -37,7 +37,13 @@ impl AdminRepository for UserRepository { // fields_readonly: &["last_login", "date_joined"] } .build() - .set_widget("password", Widget::default().as_password()) + .set_widget( + "password", + Widget::widget("/admin/widgets/password_change.jinja").as_password(), + ) + .set_widget("is_staff", Widget::checkbox()) + .set_widget("is_active", Widget::checkbox()) + .set_widget("is_superuser", Widget::checkbox()) } async fn get(&self, model: &RepositoryContext, id: &Self::Key) -> Option { @@ -133,15 +139,34 @@ impl AdminRepository for UserRepository { .unwrap(); let mut user: entity::user::ActiveModel = user.unwrap().into(); - // change values + // should we really allow username change? if let Some(value) = data.get("username") { if let Some(value) = value.as_str() { user.username = Set(value.to_owned()); } } - if let Some(value) = data.get("password") { - user.password = Set(value.as_str().unwrap().to_owned()); + let keys = [ + "first_name", + "last_name", + "email", + "is_staff", + "is_active", + "is_superuser", + ]; + + for key in &keys { + if let Some(value) = data.get(*key) { + match *key { + "first_name" => user.first_name = Set(value.as_str().map(|s| s.to_owned())), + "last_name" => user.last_name = Set(value.as_str().map(|s| s.to_owned())), + "email" => user.email = Set(value.as_str().map(|s| s.to_owned())), + "is_staff" => user.is_staff = Set(value.as_bool().unwrap_or(false)), + "is_active" => user.is_active = Set(value.as_bool().unwrap_or(true)), + "is_superuser" => user.is_superuser = Set(value.as_bool().unwrap_or(false)), + _ => (), + } + } } // update diff --git a/static/htmx/htmx.min.js b/static/htmx/htmx.min.js index 4e63af6..1ab4e79 100644 --- a/static/htmx/htmx.min.js +++ b/static/htmx/htmx.min.js @@ -1 +1 @@ -(function (e, t) { if (typeof define === "function" && define.amd) { define([], t) } else if (typeof module === "object" && module.exports) { module.exports = t() } else { e.htmx = e.htmx || t() } })(typeof self !== "undefined" ? self : this, function () { return function () { "use strict"; var Y = { onLoad: t, process: Pt, on: Z, off: K, trigger: fe, ajax: wr, find: E, findAll: f, closest: v, values: function (e, t) { var r = nr(e, t || "post"); return r.values }, remove: U, addClass: B, removeClass: n, toggleClass: V, takeClass: j, defineExtension: qr, removeExtension: Hr, logAll: X, logNone: F, logger: null, config: { historyEnabled: true, historyCacheSize: 10, refreshOnHistoryMiss: false, defaultSwapStyle: "innerHTML", defaultSwapDelay: 0, defaultSettleDelay: 20, includeIndicatorStyles: true, indicatorClass: "htmx-indicator", requestClass: "htmx-request", addedClass: "htmx-added", settlingClass: "htmx-settling", swappingClass: "htmx-swapping", allowEval: true, allowScriptTags: true, inlineScriptNonce: "", attributesToSettle: ["class", "style", "width", "height"], withCredentials: false, timeout: 0, wsReconnectDelay: "full-jitter", wsBinaryType: "blob", disableSelector: "[hx-disable], [data-hx-disable]", useTemplateFragments: false, scrollBehavior: "smooth", defaultFocusScroll: false, getCacheBusterParam: false, globalViewTransitions: false, methodsThatUseUrlParams: ["get"], selfRequestsOnly: false }, parseInterval: d, _: e, createEventSource: function (e) { return new EventSource(e, { withCredentials: true }) }, createWebSocket: function (e) { var t = new WebSocket(e, []); t.binaryType = Y.config.wsBinaryType; return t }, version: "1.9.6" }; var r = { addTriggerHandler: St, bodyContains: oe, canAccessLocalStorage: M, findThisElement: de, filterValues: lr, hasAttribute: o, getAttributeValue: ee, getClosestAttributeValue: re, getClosestMatch: c, getExpressionVars: xr, getHeaders: sr, getInputValues: nr, getInternalData: ie, getSwapSpecification: fr, getTriggerSpecs: Ze, getTarget: ge, makeFragment: l, mergeObjects: se, makeSettleInfo: T, oobSwap: ye, querySelectorExt: le, selectAndSwap: Fe, settleImmediately: Wt, shouldCancel: tt, triggerEvent: fe, triggerErrorEvent: ue, withExtensions: C }; var b = ["get", "post", "put", "delete", "patch"]; var w = b.map(function (e) { return "[hx-" + e + "], [data-hx-" + e + "]" }).join(", "); function d(e) { if (e == undefined) { return undefined } if (e.slice(-2) == "ms") { return parseFloat(e.slice(0, -2)) || undefined } if (e.slice(-1) == "s") { return parseFloat(e.slice(0, -1)) * 1e3 || undefined } if (e.slice(-1) == "m") { return parseFloat(e.slice(0, -1)) * 1e3 * 60 || undefined } return parseFloat(e) || undefined } function Q(e, t) { return e.getAttribute && e.getAttribute(t) } function o(e, t) { return e.hasAttribute && (e.hasAttribute(t) || e.hasAttribute("data-" + t)) } function ee(e, t) { return Q(e, t) || Q(e, "data-" + t) } function u(e) { return e.parentElement } function te() { return document } function c(e, t) { while (e && !t(e)) { e = u(e) } return e ? e : null } function O(e, t, r) { var n = ee(t, r); var i = ee(t, "hx-disinherit"); if (e !== t && i && (i === "*" || i.split(" ").indexOf(r) >= 0)) { return "unset" } else { return n } } function re(t, r) { var n = null; c(t, function (e) { return n = O(t, e, r) }); if (n !== "unset") { return n } } function h(e, t) { var r = e.matches || e.matchesSelector || e.msMatchesSelector || e.mozMatchesSelector || e.webkitMatchesSelector || e.oMatchesSelector; return r && r.call(e, t) } function q(e) { var t = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i; var r = t.exec(e); if (r) { return r[1].toLowerCase() } else { return "" } } function i(e, t) { var r = new DOMParser; var n = r.parseFromString(e, "text/html"); var i = n.body; while (t > 0) { t--; i = i.firstChild } if (i == null) { i = te().createDocumentFragment() } return i } function H(e) { return e.match(/", 0); return r.querySelector("template").content } else { var n = q(e); switch (n) { case "thead": case "tbody": case "tfoot": case "colgroup": case "caption": return i("" + e + "
", 1); case "col": return i("" + e + "
", 2); case "tr": return i("" + e + "
", 2); case "td": case "th": return i("" + e + "
", 3); case "script": case "style": return i("
" + e + "
", 1); default: return i(e, 0) } } } function ne(e) { if (e) { e() } } function L(e, t) { return Object.prototype.toString.call(e) === "[object " + t + "]" } function A(e) { return L(e, "Function") } function N(e) { return L(e, "Object") } function ie(e) { var t = "htmx-internal-data"; var r = e[t]; if (!r) { r = e[t] = {} } return r } function I(e) { var t = []; if (e) { for (var r = 0; r < e.length; r++) { t.push(e[r]) } } return t } function ae(e, t) { if (e) { for (var r = 0; r < e.length; r++) { t(e[r]) } } } function P(e) { var t = e.getBoundingClientRect(); var r = t.top; var n = t.bottom; return r < window.innerHeight && n >= 0 } function oe(e) { if (e.getRootNode && e.getRootNode() instanceof window.ShadowRoot) { return te().body.contains(e.getRootNode().host) } else { return te().body.contains(e) } } function k(e) { return e.trim().split(/\s+/) } function se(e, t) { for (var r in t) { if (t.hasOwnProperty(r)) { e[r] = t[r] } } return e } function S(e) { try { return JSON.parse(e) } catch (e) { y(e); return null } } function M() { var e = "htmx:localStorageTest"; try { localStorage.setItem(e, e); localStorage.removeItem(e); return true } catch (e) { return false } } function D(t) { try { var e = new URL(t); if (e) { t = e.pathname + e.search } if (!t.match("^/$")) { t = t.replace(/\/+$/, "") } return t } catch (e) { return t } } function e(e) { return gr(te().body, function () { return eval(e) }) } function t(t) { var e = Y.on("htmx:load", function (e) { t(e.detail.elt) }); return e } function X() { Y.logger = function (e, t, r) { if (console) { console.log(t, e, r) } } } function F() { Y.logger = null } function E(e, t) { if (t) { return e.querySelector(t) } else { return E(te(), e) } } function f(e, t) { if (t) { return e.querySelectorAll(t) } else { return f(te(), e) } } function U(e, t) { e = s(e); if (t) { setTimeout(function () { U(e); e = null }, t) } else { e.parentElement.removeChild(e) } } function B(e, t, r) { e = s(e); if (r) { setTimeout(function () { B(e, t); e = null }, r) } else { e.classList && e.classList.add(t) } } function n(e, t, r) { e = s(e); if (r) { setTimeout(function () { n(e, t); e = null }, r) } else { if (e.classList) { e.classList.remove(t); if (e.classList.length === 0) { e.removeAttribute("class") } } } } function V(e, t) { e = s(e); e.classList.toggle(t) } function j(e, t) { e = s(e); ae(e.parentElement.children, function (e) { n(e, t) }); B(e, t) } function v(e, t) { e = s(e); if (e.closest) { return e.closest(t) } else { do { if (e == null || h(e, t)) { return e } } while (e = e && u(e)); return null } } function g(e, t) { return e.substring(0, t.length) === t } function _(e, t) { return e.substring(e.length - t.length) === t } function z(e) { var t = e.trim(); if (g(t, "<") && _(t, "/>")) { return t.substring(1, t.length - 2) } else { return t } } function W(e, t) { if (t.indexOf("closest ") === 0) { return [v(e, z(t.substr(8)))] } else if (t.indexOf("find ") === 0) { return [E(e, z(t.substr(5)))] } else if (t.indexOf("next ") === 0) { return [$(e, z(t.substr(5)))] } else if (t.indexOf("previous ") === 0) { return [G(e, z(t.substr(9)))] } else if (t === "document") { return [document] } else if (t === "window") { return [window] } else if (t === "body") { return [document.body] } else { return te().querySelectorAll(z(t)) } } var $ = function (e, t) { var r = te().querySelectorAll(t); for (var n = 0; n < r.length; n++) { var i = r[n]; if (i.compareDocumentPosition(e) === Node.DOCUMENT_POSITION_PRECEDING) { return i } } }; var G = function (e, t) { var r = te().querySelectorAll(t); for (var n = r.length - 1; n >= 0; n--) { var i = r[n]; if (i.compareDocumentPosition(e) === Node.DOCUMENT_POSITION_FOLLOWING) { return i } } }; function le(e, t) { if (t) { return W(e, t)[0] } else { return W(te().body, e)[0] } } function s(e) { if (L(e, "String")) { return E(e) } else { return e } } function J(e, t, r) { if (A(t)) { return { target: te().body, event: e, listener: t } } else { return { target: s(e), event: t, listener: r } } } function Z(t, r, n) { Nr(function () { var e = J(t, r, n); e.target.addEventListener(e.event, e.listener) }); var e = A(r); return e ? r : n } function K(t, r, n) { Nr(function () { var e = J(t, r, n); e.target.removeEventListener(e.event, e.listener) }); return A(r) ? r : n } var he = te().createElement("output"); function ve(e, t) { var r = re(e, t); if (r) { if (r === "this") { return [de(e, t)] } else { var n = W(e, r); if (n.length === 0) { y('The selector "' + r + '" on ' + t + " returned no matches!"); return [he] } else { return n } } } } function de(e, t) { return c(e, function (e) { return ee(e, t) != null }) } function ge(e) { var t = re(e, "hx-target"); if (t) { if (t === "this") { return de(e, "hx-target") } else { return le(e, t) } } else { var r = ie(e); if (r.boosted) { return te().body } else { return e } } } function me(e) { var t = Y.config.attributesToSettle; for (var r = 0; r < t.length; r++) { if (e === t[r]) { return true } } return false } function pe(t, r) { ae(t.attributes, function (e) { if (!r.hasAttribute(e.name) && me(e.name)) { t.removeAttribute(e.name) } }); ae(r.attributes, function (e) { if (me(e.name)) { t.setAttribute(e.name, e.value) } }) } function xe(e, t) { var r = Lr(t); for (var n = 0; n < r.length; n++) { var i = r[n]; try { if (i.isInlineSwap(e)) { return true } } catch (e) { y(e) } } return e === "outerHTML" } function ye(e, i, a) { var t = "#" + Q(i, "id"); var o = "outerHTML"; if (e === "true") { } else if (e.indexOf(":") > 0) { o = e.substr(0, e.indexOf(":")); t = e.substr(e.indexOf(":") + 1, e.length) } else { o = e } var r = te().querySelectorAll(t); if (r) { ae(r, function (e) { var t; var r = i.cloneNode(true); t = te().createDocumentFragment(); t.appendChild(r); if (!xe(o, e)) { t = r } var n = { shouldSwap: true, target: e, fragment: t }; if (!fe(e, "htmx:oobBeforeSwap", n)) return; e = n.target; if (n["shouldSwap"]) { De(o, e, e, t, a) } ae(a.elts, function (e) { fe(e, "htmx:oobAfterSwap", n) }) }); i.parentNode.removeChild(i) } else { i.parentNode.removeChild(i); ue(te().body, "htmx:oobErrorNoTarget", { content: i }) } return e } function be(e, t, r) { var n = re(e, "hx-select-oob"); if (n) { var i = n.split(","); for (let e = 0; e < i.length; e++) { var a = i[e].split(":", 2); var o = a[0].trim(); if (o.indexOf("#") === 0) { o = o.substring(1) } var s = a[1] || "true"; var l = t.querySelector("#" + o); if (l) { ye(s, l, r) } } } ae(f(t, "[hx-swap-oob], [data-hx-swap-oob]"), function (e) { var t = ee(e, "hx-swap-oob"); if (t != null) { ye(t, e, r) } }) } function we(e) { ae(f(e, "[hx-preserve], [data-hx-preserve]"), function (e) { var t = ee(e, "id"); var r = te().getElementById(t); if (r != null) { e.parentNode.replaceChild(r, e) } }) } function Se(o, e, s) { ae(e.querySelectorAll("[id]"), function (e) { var t = Q(e, "id"); if (t && t.length > 0) { var r = t.replace("'", "\\'"); var n = e.tagName.replace(":", "\\:"); var i = o.querySelector(n + "[id='" + r + "']"); if (i && i !== o) { var a = e.cloneNode(); pe(e, i); s.tasks.push(function () { pe(e, a) }) } } }) } function Ee(e) { return function () { n(e, Y.config.addedClass); Pt(e); Ct(e); Ce(e); fe(e, "htmx:load") } } function Ce(e) { var t = "[autofocus]"; var r = h(e, t) ? e : e.querySelector(t); if (r != null) { r.focus() } } function a(e, t, r, n) { Se(e, r, n); while (r.childNodes.length > 0) { var i = r.firstChild; B(i, Y.config.addedClass); e.insertBefore(i, t); if (i.nodeType !== Node.TEXT_NODE && i.nodeType !== Node.COMMENT_NODE) { n.tasks.push(Ee(i)) } } } function Te(e, t) { var r = 0; while (r < e.length) { t = (t << 5) - t + e.charCodeAt(r++) | 0 } return t } function Re(e) { var t = 0; if (e.attributes) { for (var r = 0; r < e.attributes.length; r++) { var n = e.attributes[r]; if (n.value) { t = Te(n.name, t); t = Te(n.value, t) } } } return t } function Oe(t) { var r = ie(t); if (r.onHandlers) { for (let e = 0; e < r.onHandlers.length; e++) { const n = r.onHandlers[e]; t.removeEventListener(n.event, n.listener) } delete r.onHandlers } } function qe(e) { var t = ie(e); if (t.timeout) { clearTimeout(t.timeout) } if (t.webSocket) { t.webSocket.close() } if (t.sseEventSource) { t.sseEventSource.close() } if (t.listenerInfos) { ae(t.listenerInfos, function (e) { if (e.on) { e.on.removeEventListener(e.trigger, e.listener) } }) } if (t.initHash) { t.initHash = null } Oe(e) } function m(e) { fe(e, "htmx:beforeCleanupElement"); qe(e); if (e.children) { ae(e.children, function (e) { m(e) }) } } function He(t, e, r) { if (t.tagName === "BODY") { return ke(t, e, r) } else { var n; var i = t.previousSibling; a(u(t), t, e, r); if (i == null) { n = u(t).firstChild } else { n = i.nextSibling } ie(t).replacedWith = n; r.elts = r.elts.filter(function (e) { return e != t }); while (n && n !== t) { if (n.nodeType === Node.ELEMENT_NODE) { r.elts.push(n) } n = n.nextElementSibling } m(t); u(t).removeChild(t) } } function Le(e, t, r) { return a(e, e.firstChild, t, r) } function Ae(e, t, r) { return a(u(e), e, t, r) } function Ne(e, t, r) { return a(e, null, t, r) } function Ie(e, t, r) { return a(u(e), e.nextSibling, t, r) } function Pe(e, t, r) { m(e); return u(e).removeChild(e) } function ke(e, t, r) { var n = e.firstChild; a(e, n, t, r); if (n) { while (n.nextSibling) { m(n.nextSibling); e.removeChild(n.nextSibling) } m(n); e.removeChild(n) } } function Me(e, t, r) { var n = r || re(e, "hx-select"); if (n) { var i = te().createDocumentFragment(); ae(t.querySelectorAll(n), function (e) { i.appendChild(e) }); t = i } return t } function De(e, t, r, n, i) { switch (e) { case "none": return; case "outerHTML": He(r, n, i); return; case "afterbegin": Le(r, n, i); return; case "beforebegin": Ae(r, n, i); return; case "beforeend": Ne(r, n, i); return; case "afterend": Ie(r, n, i); return; case "delete": Pe(r, n, i); return; default: var a = Lr(t); for (var o = 0; o < a.length; o++) { var s = a[o]; try { var l = s.handleSwap(e, r, n, i); if (l) { if (typeof l.length !== "undefined") { for (var u = 0; u < l.length; u++) { var f = l[u]; if (f.nodeType !== Node.TEXT_NODE && f.nodeType !== Node.COMMENT_NODE) { i.tasks.push(Ee(f)) } } } return } } catch (e) { y(e) } } if (e === "innerHTML") { ke(r, n, i) } else { De(Y.config.defaultSwapStyle, t, r, n, i) } } } function Xe(e) { if (e.indexOf(" -1) { var t = e.replace(/]*>|>)([\s\S]*?)<\/svg>/gim, ""); var r = t.match(/]*>|>)([\s\S]*?)<\/title>/im); if (r) { return r[2] } } } function Fe(e, t, r, n, i, a) { i.title = Xe(n); var o = l(n); if (o) { be(r, o, i); o = Me(r, o, a); we(o); return De(e, r, t, o, i) } } function Ue(e, t, r) { var n = e.getResponseHeader(t); if (n.indexOf("{") === 0) { var i = S(n); for (var a in i) { if (i.hasOwnProperty(a)) { var o = i[a]; if (!N(o)) { o = { value: o } } fe(r, a, o) } } } else { var s = n.split(","); for (var l = 0; l < s.length; l++) { fe(r, s[l].trim(), []) } } } var Be = /\s/; var p = /[\s,]/; var Ve = /[_$a-zA-Z]/; var je = /[_$a-zA-Z0-9]/; var _e = ['"', "'", "/"]; var ze = /[^\s]/; function We(e) { var t = []; var r = 0; while (r < e.length) { if (Ve.exec(e.charAt(r))) { var n = r; while (je.exec(e.charAt(r + 1))) { r++ } t.push(e.substr(n, r - n + 1)) } else if (_e.indexOf(e.charAt(r)) !== -1) { var i = e.charAt(r); var n = r; r++; while (r < e.length && e.charAt(r) !== i) { if (e.charAt(r) === "\\") { r++ } r++ } t.push(e.substr(n, r - n + 1)) } else { var a = e.charAt(r); t.push(a) } r++ } return t } function $e(e, t, r) { return Ve.exec(e.charAt(0)) && e !== "true" && e !== "false" && e !== "this" && e !== r && t !== "." } function Ge(e, t, r) { if (t[0] === "[") { t.shift(); var n = 1; var i = " return (function(" + r + "){ return ("; var a = null; while (t.length > 0) { var o = t[0]; if (o === "]") { n--; if (n === 0) { if (a === null) { i = i + "true" } t.shift(); i += ")})"; try { var s = gr(e, function () { return Function(i)() }, function () { return true }); s.source = i; return s } catch (e) { ue(te().body, "htmx:syntax:error", { error: e, source: i }); return null } } } else if (o === "[") { n++ } if ($e(o, a, r)) { i += "((" + r + "." + o + ") ? (" + r + "." + o + ") : (window." + o + "))" } else { i = i + o } a = t.shift() } } } function x(e, t) { var r = ""; while (e.length > 0 && !e[0].match(t)) { r += e.shift() } return r } var Je = "input, textarea, select"; function Ze(e) { var t = ee(e, "hx-trigger"); var r = []; if (t) { var n = We(t); do { x(n, ze); var i = n.length; var a = x(n, /[,\[\s]/); if (a !== "") { if (a === "every") { var o = { trigger: "every" }; x(n, ze); o.pollInterval = d(x(n, /[,\[\s]/)); x(n, ze); var s = Ge(e, n, "event"); if (s) { o.eventFilter = s } r.push(o) } else if (a.indexOf("sse:") === 0) { r.push({ trigger: "sse", sseEvent: a.substr(4) }) } else { var l = { trigger: a }; var s = Ge(e, n, "event"); if (s) { l.eventFilter = s } while (n.length > 0 && n[0] !== ",") { x(n, ze); var u = n.shift(); if (u === "changed") { l.changed = true } else if (u === "once") { l.once = true } else if (u === "consume") { l.consume = true } else if (u === "delay" && n[0] === ":") { n.shift(); l.delay = d(x(n, p)) } else if (u === "from" && n[0] === ":") { n.shift(); var f = x(n, p); if (f === "closest" || f === "find" || f === "next" || f === "previous") { n.shift(); f += " " + x(n, p) } l.from = f } else if (u === "target" && n[0] === ":") { n.shift(); l.target = x(n, p) } else if (u === "throttle" && n[0] === ":") { n.shift(); l.throttle = d(x(n, p)) } else if (u === "queue" && n[0] === ":") { n.shift(); l.queue = x(n, p) } else if ((u === "root" || u === "threshold") && n[0] === ":") { n.shift(); l[u] = x(n, p) } else { ue(e, "htmx:syntax:error", { token: n.shift() }) } } r.push(l) } } if (n.length === i) { ue(e, "htmx:syntax:error", { token: n.shift() }) } x(n, ze) } while (n[0] === "," && n.shift()) } if (r.length > 0) { return r } else if (h(e, "form")) { return [{ trigger: "submit" }] } else if (h(e, 'input[type="button"], input[type="submit"]')) { return [{ trigger: "click" }] } else if (h(e, Je)) { return [{ trigger: "change" }] } else { return [{ trigger: "click" }] } } function Ke(e) { ie(e).cancelled = true } function Ye(e, t, r) { var n = ie(e); n.timeout = setTimeout(function () { if (oe(e) && n.cancelled !== true) { if (!nt(r, e, Mt("hx:poll:trigger", { triggerSpec: r, target: e }))) { t(e) } Ye(e, t, r) } }, r.pollInterval) } function Qe(e) { return location.hostname === e.hostname && Q(e, "href") && Q(e, "href").indexOf("#") !== 0 } function et(t, r, e) { if (t.tagName === "A" && Qe(t) && (t.target === "" || t.target === "_self") || t.tagName === "FORM") { r.boosted = true; var n, i; if (t.tagName === "A") { n = "get"; i = Q(t, "href") } else { var a = Q(t, "method"); n = a ? a.toLowerCase() : "get"; if (n === "get") { } i = Q(t, "action") } e.forEach(function (e) { it(t, function (e, t) { if (v(e, Y.config.disableSelector)) { m(e); return } ce(n, i, e, t) }, r, e, true) }) } } function tt(e, t) { if (e.type === "submit" || e.type === "click") { if (t.tagName === "FORM") { return true } if (h(t, 'input[type="submit"], button') && v(t, "form") !== null) { return true } if (t.tagName === "A" && t.href && (t.getAttribute("href") === "#" || t.getAttribute("href").indexOf("#") !== 0)) { return true } } return false } function rt(e, t) { return ie(e).boosted && e.tagName === "A" && t.type === "click" && (t.ctrlKey || t.metaKey) } function nt(e, t, r) { var n = e.eventFilter; if (n) { try { return n.call(t, r) !== true } catch (e) { ue(te().body, "htmx:eventFilter:error", { error: e, source: n.source }); return true } } return false } function it(a, o, e, s, l) { var u = ie(a); var t; if (s.from) { t = W(a, s.from) } else { t = [a] } if (s.changed) { t.forEach(function (e) { var t = ie(e); t.lastValue = e.value }) } ae(t, function (n) { var i = function (e) { if (!oe(a)) { n.removeEventListener(s.trigger, i); return } if (rt(a, e)) { return } if (l || tt(e, a)) { e.preventDefault() } if (nt(s, a, e)) { return } var t = ie(e); t.triggerSpec = s; if (t.handledFor == null) { t.handledFor = [] } if (t.handledFor.indexOf(a) < 0) { t.handledFor.push(a); if (s.consume) { e.stopPropagation() } if (s.target && e.target) { if (!h(e.target, s.target)) { return } } if (s.once) { if (u.triggeredOnce) { return } else { u.triggeredOnce = true } } if (s.changed) { var r = ie(n); if (r.lastValue === n.value) { return } r.lastValue = n.value } if (u.delayed) { clearTimeout(u.delayed) } if (u.throttle) { return } if (s.throttle) { if (!u.throttle) { o(a, e); u.throttle = setTimeout(function () { u.throttle = null }, s.throttle) } } else if (s.delay) { u.delayed = setTimeout(function () { o(a, e) }, s.delay) } else { fe(a, "htmx:trigger"); o(a, e) } } }; if (e.listenerInfos == null) { e.listenerInfos = [] } e.listenerInfos.push({ trigger: s.trigger, listener: i, on: n }); n.addEventListener(s.trigger, i) }) } var at = false; var ot = null; function st() { if (!ot) { ot = function () { at = true }; window.addEventListener("scroll", ot); setInterval(function () { if (at) { at = false; ae(te().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"), function (e) { lt(e) }) } }, 200) } } function lt(t) { if (!o(t, "data-hx-revealed") && P(t)) { t.setAttribute("data-hx-revealed", "true"); var e = ie(t); if (e.initHash) { fe(t, "revealed") } else { t.addEventListener("htmx:afterProcessNode", function (e) { fe(t, "revealed") }, { once: true }) } } } function ut(e, t, r) { var n = k(r); for (var i = 0; i < n.length; i++) { var a = n[i].split(/:(.+)/); if (a[0] === "connect") { ft(e, a[1], 0) } if (a[0] === "send") { ht(e) } } } function ft(s, r, n) { if (!oe(s)) { return } if (r.indexOf("/") == 0) { var e = location.hostname + (location.port ? ":" + location.port : ""); if (location.protocol == "https:") { r = "wss://" + e + r } else if (location.protocol == "http:") { r = "ws://" + e + r } } var t = Y.createWebSocket(r); t.onerror = function (e) { ue(s, "htmx:wsError", { error: e, socket: t }); ct(s) }; t.onclose = function (e) { if ([1006, 1012, 1013].indexOf(e.code) >= 0) { var t = vt(n); setTimeout(function () { ft(s, r, n + 1) }, t) } }; t.onopen = function (e) { n = 0 }; ie(s).webSocket = t; t.addEventListener("message", function (e) { if (ct(s)) { return } var t = e.data; C(s, function (e) { t = e.transformResponse(t, null, s) }); var r = T(s); var n = l(t); var i = I(n.children); for (var a = 0; a < i.length; a++) { var o = i[a]; ye(ee(o, "hx-swap-oob") || "true", o, r) } Wt(r.tasks) }) } function ct(e) { if (!oe(e)) { ie(e).webSocket.close(); return true } } function ht(u) { var f = c(u, function (e) { return ie(e).webSocket != null }); if (f) { u.addEventListener(Ze(u)[0].trigger, function (e) { var t = ie(f).webSocket; var r = sr(u, f); var n = nr(u, "post"); var i = n.errors; var a = n.values; var o = xr(u); var s = se(a, o); var l = lr(s, u); l["HEADERS"] = r; if (i && i.length > 0) { fe(u, "htmx:validation:halted", i); return } t.send(JSON.stringify(l)); if (tt(e, u)) { e.preventDefault() } }) } else { ue(u, "htmx:noWebSocketSourceError") } } function vt(e) { var t = Y.config.wsReconnectDelay; if (typeof t === "function") { return t(e) } if (t === "full-jitter") { var r = Math.min(e, 6); var n = 1e3 * Math.pow(2, r); return n * Math.random() } y('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"') } function dt(e, t, r) { var n = k(r); for (var i = 0; i < n.length; i++) { var a = n[i].split(/:(.+)/); if (a[0] === "connect") { gt(e, a[1]) } if (a[0] === "swap") { mt(e, a[1]) } } } function gt(t, e) { var r = Y.createEventSource(e); r.onerror = function (e) { ue(t, "htmx:sseError", { error: e, source: r }); xt(t) }; ie(t).sseEventSource = r } function mt(a, o) { var s = c(a, yt); if (s) { var l = ie(s).sseEventSource; var u = function (e) { if (xt(s)) { return } if (!oe(a)) { l.removeEventListener(o, u); return } var t = e.data; C(a, function (e) { t = e.transformResponse(t, null, a) }); var r = fr(a); var n = ge(a); var i = T(a); Fe(r.swapStyle, n, a, t, i); Wt(i.tasks); fe(a, "htmx:sseMessage", e) }; ie(a).sseListener = u; l.addEventListener(o, u) } else { ue(a, "htmx:noSSESourceError") } } function pt(e, t, r) { var n = c(e, yt); if (n) { var i = ie(n).sseEventSource; var a = function () { if (!xt(n)) { if (oe(e)) { t(e) } else { i.removeEventListener(r, a) } } }; ie(e).sseListener = a; i.addEventListener(r, a) } else { ue(e, "htmx:noSSESourceError") } } function xt(e) { if (!oe(e)) { ie(e).sseEventSource.close(); return true } } function yt(e) { return ie(e).sseEventSource != null } function bt(e, t, r, n) { var i = function () { if (!r.loaded) { r.loaded = true; t(e) } }; if (n) { setTimeout(i, n) } else { i() } } function wt(t, i, e) { var a = false; ae(b, function (r) { if (o(t, "hx-" + r)) { var n = ee(t, "hx-" + r); a = true; i.path = n; i.verb = r; e.forEach(function (e) { St(t, e, i, function (e, t) { if (v(e, Y.config.disableSelector)) { m(e); return } ce(r, n, e, t) }) }) } }); return a } function St(n, e, t, r) { if (e.sseEvent) { pt(n, r, e.sseEvent) } else if (e.trigger === "revealed") { st(); it(n, r, t, e); lt(n) } else if (e.trigger === "intersect") { var i = {}; if (e.root) { i.root = le(n, e.root) } if (e.threshold) { i.threshold = parseFloat(e.threshold) } var a = new IntersectionObserver(function (e) { for (var t = 0; t < e.length; t++) { var r = e[t]; if (r.isIntersecting) { fe(n, "intersect"); break } } }, i); a.observe(n); it(n, r, t, e) } else if (e.trigger === "load") { if (!nt(e, n, Mt("load", { elt: n }))) { bt(n, r, t, e.delay) } } else if (e.pollInterval) { t.polling = true; Ye(n, r, e) } else { it(n, r, t, e) } } function Et(e) { if (Y.config.allowScriptTags && (e.type === "text/javascript" || e.type === "module" || e.type === "")) { var t = te().createElement("script"); ae(e.attributes, function (e) { t.setAttribute(e.name, e.value) }); t.textContent = e.textContent; t.async = false; if (Y.config.inlineScriptNonce) { t.nonce = Y.config.inlineScriptNonce } var r = e.parentElement; try { r.insertBefore(t, e) } catch (e) { y(e) } finally { if (e.parentElement) { e.parentElement.removeChild(e) } } } } function Ct(e) { if (h(e, "script")) { Et(e) } ae(f(e, "script"), function (e) { Et(e) }) } function Tt() { return document.querySelector("[hx-boost], [data-hx-boost]") } function Rt(e) { var t = null; var r = []; if (document.evaluate) { var n = document.evaluate('//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") ]]', e); while (t = n.iterateNext()) r.push(t) } else { var i = document.getElementsByTagName("*"); for (var a = 0; a < i.length; a++) { var o = i[a].attributes; for (var s = 0; s < o.length; s++) { var l = o[s].name; if (g(l, "hx-on:") || g(l, "data-hx-on:")) { r.push(i[a]) } } } } return r } function Ot(e) { if (e.querySelectorAll) { var t = Tt() ? ", a" : ""; var r = e.querySelectorAll(w + t + ", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws]," + " [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]"); return r } else { return [] } } function qt(e) { var n = s("#" + Q(e, "form")) || v(e, "form"); if (!n) { return } var t = function (e) { var t = v(e.target, "button, input[type='submit']"); if (t !== null) { var r = ie(n); r.lastButtonClicked = t } }; e.addEventListener("click", t); e.addEventListener("focusin", t); e.addEventListener("focusout", function (e) { var t = ie(n); t.lastButtonClicked = null }) } function Ht(e) { var t = We(e); var r = 0; for (let e = 0; e < t.length; e++) { const n = t[e]; if (n === "{") { r++ } else if (n === "}") { r-- } } return r } function Lt(t, e, r) { var n = ie(t); n.onHandlers = []; var i; var a = function (e) { return gr(t, function () { if (!i) { i = new Function("event", r) } i.call(t, e) }) }; t.addEventListener(e, a); n.onHandlers.push({ event: e, listener: a }) } function At(e) { var t = ee(e, "hx-on"); if (t) { var r = {}; var n = t.split("\n"); var i = null; var a = 0; while (n.length > 0) { var o = n.shift(); var s = o.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/); if (a === 0 && s) { o.split(":"); i = s[1].slice(0, -1); r[i] = s[2] } else { r[i] += o } a += Ht(o) } for (var l in r) { Lt(e, l, r[l]) } } } function Nt(t) { Oe(t); for (var e = 0; e < t.attributes.length; e++) { var r = t.attributes[e].name; var n = t.attributes[e].value; if (g(r, "hx-on:") || g(r, "data-hx-on:")) { let e = r.slice(r.indexOf(":") + 1); if (g(e, ":")) e = "htmx" + e; Lt(t, e, n) } } } function It(t) { if (v(t, Y.config.disableSelector)) { m(t); return } var r = ie(t); if (r.initHash !== Re(t)) { qe(t); r.initHash = Re(t); At(t); fe(t, "htmx:beforeProcessNode"); if (t.value) { r.lastValue = t.value } var e = Ze(t); var n = wt(t, r, e); if (!n) { if (re(t, "hx-boost") === "true") { et(t, r, e) } else if (o(t, "hx-trigger")) { e.forEach(function (e) { St(t, e, r, function () { }) }) } } if (t.tagName === "FORM" || Q(t, "type") === "submit" && o(t, "form")) { qt(t) } var i = ee(t, "hx-sse"); if (i) { dt(t, r, i) } var a = ee(t, "hx-ws"); if (a) { ut(t, r, a) } fe(t, "htmx:afterProcessNode") } } function Pt(e) { e = s(e); if (v(e, Y.config.disableSelector)) { m(e); return } It(e); ae(Ot(e), function (e) { It(e) }); ae(Rt(e), Nt) } function kt(e) { return e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase() } function Mt(e, t) { var r; if (window.CustomEvent && typeof window.CustomEvent === "function") { r = new CustomEvent(e, { bubbles: true, cancelable: true, detail: t }) } else { r = te().createEvent("CustomEvent"); r.initCustomEvent(e, true, true, t) } return r } function ue(e, t, r) { fe(e, t, se({ error: t }, r)) } function Dt(e) { return e === "htmx:afterProcessNode" } function C(e, t) { ae(Lr(e), function (e) { try { t(e) } catch (e) { y(e) } }) } function y(e) { if (console.error) { console.error(e) } else if (console.log) { console.log("ERROR: ", e) } } function fe(e, t, r) { e = s(e); if (r == null) { r = {} } r["elt"] = e; var n = Mt(t, r); if (Y.logger && !Dt(t)) { Y.logger(e, t, r) } if (r.error) { y(r.error); fe(e, "htmx:error", { errorInfo: r }) } var i = e.dispatchEvent(n); var a = kt(t); if (i && a !== t) { var o = Mt(a, n.detail); i = i && e.dispatchEvent(o) } C(e, function (e) { i = i && (e.onEvent(t, n) !== false && !n.defaultPrevented) }); return i } var Xt = location.pathname + location.search; function Ft() { var e = te().querySelector("[hx-history-elt],[data-hx-history-elt]"); return e || te().body } function Ut(e, t, r, n) { if (!M()) { return } e = D(e); var i = S(localStorage.getItem("htmx-history-cache")) || []; for (var a = 0; a < i.length; a++) { if (i[a].url === e) { i.splice(a, 1); break } } var o = { url: e, content: t, title: r, scroll: n }; fe(te().body, "htmx:historyItemCreated", { item: o, cache: i }); i.push(o); while (i.length > Y.config.historyCacheSize) { i.shift() } while (i.length > 0) { try { localStorage.setItem("htmx-history-cache", JSON.stringify(i)); break } catch (e) { ue(te().body, "htmx:historyCacheError", { cause: e, cache: i }); i.shift() } } } function Bt(e) { if (!M()) { return null } e = D(e); var t = S(localStorage.getItem("htmx-history-cache")) || []; for (var r = 0; r < t.length; r++) { if (t[r].url === e) { return t[r] } } return null } function Vt(e) { var t = Y.config.requestClass; var r = e.cloneNode(true); ae(f(r, "." + t), function (e) { n(e, t) }); return r.innerHTML } function jt() { var e = Ft(); var t = Xt || location.pathname + location.search; var r; try { r = te().querySelector('[hx-history="false" i],[data-hx-history="false" i]') } catch (e) { r = te().querySelector('[hx-history="false"],[data-hx-history="false"]') } if (!r) { fe(te().body, "htmx:beforeHistorySave", { path: t, historyElt: e }); Ut(t, Vt(e), te().title, window.scrollY) } if (Y.config.historyEnabled) history.replaceState({ htmx: true }, te().title, window.location.href) } function _t(e) { if (Y.config.getCacheBusterParam) { e = e.replace(/org\.htmx\.cache-buster=[^&]*&?/, ""); if (_(e, "&") || _(e, "?")) { e = e.slice(0, -1) } } if (Y.config.historyEnabled) { history.pushState({ htmx: true }, "", e) } Xt = e } function zt(e) { if (Y.config.historyEnabled) history.replaceState({ htmx: true }, "", e); Xt = e } function Wt(e) { ae(e, function (e) { e.call() }) } function $t(a) { var e = new XMLHttpRequest; var o = { path: a, xhr: e }; fe(te().body, "htmx:historyCacheMiss", o); e.open("GET", a, true); e.setRequestHeader("HX-History-Restore-Request", "true"); e.onload = function () { if (this.status >= 200 && this.status < 400) { fe(te().body, "htmx:historyCacheMissLoad", o); var e = l(this.response); e = e.querySelector("[hx-history-elt],[data-hx-history-elt]") || e; var t = Ft(); var r = T(t); var n = Xe(this.response); if (n) { var i = E("title"); if (i) { i.innerHTML = n } else { window.document.title = n } } ke(t, e, r); Wt(r.tasks); Xt = a; fe(te().body, "htmx:historyRestore", { path: a, cacheMiss: true, serverResponse: this.response }) } else { ue(te().body, "htmx:historyCacheMissLoadError", o) } }; e.send() } function Gt(e) { jt(); e = e || location.pathname + location.search; var t = Bt(e); if (t) { var r = l(t.content); var n = Ft(); var i = T(n); ke(n, r, i); Wt(i.tasks); document.title = t.title; setTimeout(function () { window.scrollTo(0, t.scroll) }, 0); Xt = e; fe(te().body, "htmx:historyRestore", { path: e, item: t }) } else { if (Y.config.refreshOnHistoryMiss) { window.location.reload(true) } else { $t(e) } } } function Jt(e) { var t = ve(e, "hx-indicator"); if (t == null) { t = [e] } ae(t, function (e) { var t = ie(e); t.requestCount = (t.requestCount || 0) + 1; e.classList["add"].call(e.classList, Y.config.requestClass) }); return t } function Zt(e) { var t = ve(e, "hx-disabled-elt"); if (t == null) { t = [] } ae(t, function (e) { var t = ie(e); t.requestCount = (t.requestCount || 0) + 1; e.setAttribute("disabled", "") }); return t } function Kt(e, t) { ae(e, function (e) { var t = ie(e); t.requestCount = (t.requestCount || 0) - 1; if (t.requestCount === 0) { e.classList["remove"].call(e.classList, Y.config.requestClass) } }); ae(t, function (e) { var t = ie(e); t.requestCount = (t.requestCount || 0) - 1; if (t.requestCount === 0) { e.removeAttribute("disabled") } }) } function Yt(e, t) { for (var r = 0; r < e.length; r++) { var n = e[r]; if (n.isSameNode(t)) { return true } } return false } function Qt(e) { if (e.name === "" || e.name == null || e.disabled) { return false } if (e.type === "button" || e.type === "submit" || e.tagName === "image" || e.tagName === "reset" || e.tagName === "file") { return false } if (e.type === "checkbox" || e.type === "radio") { return e.checked } return true } function er(e, t, r) { if (e != null && t != null) { var n = r[e]; if (n === undefined) { r[e] = t } else if (Array.isArray(n)) { if (Array.isArray(t)) { r[e] = n.concat(t) } else { n.push(t) } } else { if (Array.isArray(t)) { r[e] = [n].concat(t) } else { r[e] = [n, t] } } } } function tr(t, r, n, e, i) { if (e == null || Yt(t, e)) { return } else { t.push(e) } if (Qt(e)) { var a = Q(e, "name"); var o = e.value; if (e.multiple) { o = I(e.querySelectorAll("option:checked")).map(function (e) { return e.value }) } if (e.files) { o = I(e.files) } er(a, o, r); if (i) { rr(e, n) } } if (h(e, "form")) { var s = e.elements; ae(s, function (e) { tr(t, r, n, e, i) }) } } function rr(e, t) { if (e.willValidate) { fe(e, "htmx:validation:validate"); if (!e.checkValidity()) { t.push({ elt: e, message: e.validationMessage, validity: e.validity }); fe(e, "htmx:validation:failed", { message: e.validationMessage, validity: e.validity }) } } } function nr(e, t) { var r = []; var n = {}; var i = {}; var a = []; var o = ie(e); var s = h(e, "form") && e.noValidate !== true || ee(e, "hx-validate") === "true"; if (o.lastButtonClicked) { s = s && o.lastButtonClicked.formNoValidate !== true } if (t !== "get") { tr(r, i, a, v(e, "form"), s) } tr(r, n, a, e, s); if (o.lastButtonClicked || e.tagName === "BUTTON" || e.tagName === "INPUT" && Q(e, "type") === "submit") { var l = o.lastButtonClicked || e; var u = Q(l, "name"); er(u, l.value, i) } var f = ve(e, "hx-include"); ae(f, function (e) { tr(r, n, a, e, s); if (!h(e, "form")) { ae(e.querySelectorAll(Je), function (e) { tr(r, n, a, e, s) }) } }); n = se(n, i); return { errors: a, values: n } } function ir(e, t, r) { if (e !== "") { e += "&" } if (String(r) === "[object Object]") { r = JSON.stringify(r) } var n = encodeURIComponent(r); e += encodeURIComponent(t) + "=" + n; return e } function ar(e) { var t = ""; for (var r in e) { if (e.hasOwnProperty(r)) { var n = e[r]; if (Array.isArray(n)) { ae(n, function (e) { t = ir(t, r, e) }) } else { t = ir(t, r, n) } } } return t } function or(e) { var t = new FormData; for (var r in e) { if (e.hasOwnProperty(r)) { var n = e[r]; if (Array.isArray(n)) { ae(n, function (e) { t.append(r, e) }) } else { t.append(r, n) } } } return t } function sr(e, t, r) { var n = { "HX-Request": "true", "HX-Trigger": Q(e, "id"), "HX-Trigger-Name": Q(e, "name"), "HX-Target": ee(t, "id"), "HX-Current-URL": te().location.href }; dr(e, "hx-headers", false, n); if (r !== undefined) { n["HX-Prompt"] = r } if (ie(e).boosted) { n["HX-Boosted"] = "true" } return n } function lr(t, e) { var r = re(e, "hx-params"); if (r) { if (r === "none") { return {} } else if (r === "*") { return t } else if (r.indexOf("not ") === 0) { ae(r.substr(4).split(","), function (e) { e = e.trim(); delete t[e] }); return t } else { var n = {}; ae(r.split(","), function (e) { e = e.trim(); n[e] = t[e] }); return n } } else { return t } } function ur(e) { return Q(e, "href") && Q(e, "href").indexOf("#") >= 0 } function fr(e, t) { var r = t ? t : re(e, "hx-swap"); var n = { swapStyle: ie(e).boosted ? "innerHTML" : Y.config.defaultSwapStyle, swapDelay: Y.config.defaultSwapDelay, settleDelay: Y.config.defaultSettleDelay }; if (ie(e).boosted && !ur(e)) { n["show"] = "top" } if (r) { var i = k(r); if (i.length > 0) { for (var a = 0; a < i.length; a++) { var o = i[a]; if (o.indexOf("swap:") === 0) { n["swapDelay"] = d(o.substr(5)) } else if (o.indexOf("settle:") === 0) { n["settleDelay"] = d(o.substr(7)) } else if (o.indexOf("transition:") === 0) { n["transition"] = o.substr(11) === "true" } else if (o.indexOf("ignoreTitle:") === 0) { n["ignoreTitle"] = o.substr(12) === "true" } else if (o.indexOf("scroll:") === 0) { var s = o.substr(7); var l = s.split(":"); var u = l.pop(); var f = l.length > 0 ? l.join(":") : null; n["scroll"] = u; n["scrollTarget"] = f } else if (o.indexOf("show:") === 0) { var c = o.substr(5); var l = c.split(":"); var h = l.pop(); var f = l.length > 0 ? l.join(":") : null; n["show"] = h; n["showTarget"] = f } else if (o.indexOf("focus-scroll:") === 0) { var v = o.substr("focus-scroll:".length); n["focusScroll"] = v == "true" } else if (a == 0) { n["swapStyle"] = o } else { y("Unknown modifier in hx-swap: " + o) } } } } return n } function cr(e) { return re(e, "hx-encoding") === "multipart/form-data" || h(e, "form") && Q(e, "enctype") === "multipart/form-data" } function hr(t, r, n) { var i = null; C(r, function (e) { if (i == null) { i = e.encodeParameters(t, n, r) } }); if (i != null) { return i } else { if (cr(r)) { return or(n) } else { return ar(n) } } } function T(e) { return { tasks: [], elts: [e] } } function vr(e, t) { var r = e[0]; var n = e[e.length - 1]; if (t.scroll) { var i = null; if (t.scrollTarget) { i = le(r, t.scrollTarget) } if (t.scroll === "top" && (r || i)) { i = i || r; i.scrollTop = 0 } if (t.scroll === "bottom" && (n || i)) { i = i || n; i.scrollTop = i.scrollHeight } } if (t.show) { var i = null; if (t.showTarget) { var a = t.showTarget; if (t.showTarget === "window") { a = "body" } i = le(r, a) } if (t.show === "top" && (r || i)) { i = i || r; i.scrollIntoView({ block: "start", behavior: Y.config.scrollBehavior }) } if (t.show === "bottom" && (n || i)) { i = i || n; i.scrollIntoView({ block: "end", behavior: Y.config.scrollBehavior }) } } } function dr(e, t, r, n) { if (n == null) { n = {} } if (e == null) { return n } var i = ee(e, t); if (i) { var a = i.trim(); var o = r; if (a === "unset") { return null } if (a.indexOf("javascript:") === 0) { a = a.substr(11); o = true } else if (a.indexOf("js:") === 0) { a = a.substr(3); o = true } if (a.indexOf("{") !== 0) { a = "{" + a + "}" } var s; if (o) { s = gr(e, function () { return Function("return (" + a + ")")() }, {}) } else { s = S(a) } for (var l in s) { if (s.hasOwnProperty(l)) { if (n[l] == null) { n[l] = s[l] } } } } return dr(u(e), t, r, n) } function gr(e, t, r) { if (Y.config.allowEval) { return t() } else { ue(e, "htmx:evalDisallowedError"); return r } } function mr(e, t) { return dr(e, "hx-vars", true, t) } function pr(e, t) { return dr(e, "hx-vals", false, t) } function xr(e) { return se(mr(e), pr(e)) } function yr(t, r, n) { if (n !== null) { try { t.setRequestHeader(r, n) } catch (e) { t.setRequestHeader(r, encodeURIComponent(n)); t.setRequestHeader(r + "-URI-AutoEncoded", "true") } } } function br(t) { if (t.responseURL && typeof URL !== "undefined") { try { var e = new URL(t.responseURL); return e.pathname + e.search } catch (e) { ue(te().body, "htmx:badResponseUrl", { url: t.responseURL }) } } } function R(e, t) { return e.getAllResponseHeaders().match(t) } function wr(e, t, r) { e = e.toLowerCase(); if (r) { if (r instanceof Element || L(r, "String")) { return ce(e, t, null, null, { targetOverride: s(r), returnPromise: true }) } else { return ce(e, t, s(r.source), r.event, { handler: r.handler, headers: r.headers, values: r.values, targetOverride: s(r.target), swapOverride: r.swap, returnPromise: true }) } } else { return ce(e, t, null, null, { returnPromise: true }) } } function Sr(e) { var t = []; while (e) { t.push(e); e = e.parentElement } return t } function Er(e, t, r) { var n; var i; if (typeof URL === "function") { i = new URL(t, document.location.href); var a = document.location.origin; n = a === i.origin } else { i = t; n = g(t, document.location.origin) } if (Y.config.selfRequestsOnly) { if (!n) { return false } } return fe(e, "htmx:validateUrl", se({ url: i, sameHost: n }, r)) } function ce(e, t, n, r, i, M) { var a = null; var o = null; i = i != null ? i : {}; if (i.returnPromise && typeof Promise !== "undefined") { var s = new Promise(function (e, t) { a = e; o = t }) } if (n == null) { n = te().body } var D = i.handler || Tr; if (!oe(n)) { ne(a); return s } var l = i.targetOverride || ge(n); if (l == null || l == he) { ue(n, "htmx:targetError", { target: ee(n, "hx-target") }); ne(o); return s } var u = ie(n); var f = u.lastButtonClicked; if (f) { var c = Q(f, "formaction"); if (c != null) { t = c } var h = Q(f, "formmethod"); if (h != null) { e = h } } if (!M) { var X = function () { return ce(e, t, n, r, i, true) }; var F = { target: l, elt: n, path: t, verb: e, triggeringEvent: r, etc: i, issueRequest: X }; if (fe(n, "htmx:confirm", F) === false) { ne(a); return s } } var v = n; var d = re(n, "hx-sync"); var g = null; var m = false; if (d) { var p = d.split(":"); var x = p[0].trim(); if (x === "this") { v = de(n, "hx-sync") } else { v = le(n, x) } d = (p[1] || "drop").trim(); u = ie(v); if (d === "drop" && u.xhr && u.abortable !== true) { ne(a); return s } else if (d === "abort") { if (u.xhr) { ne(a); return s } else { m = true } } else if (d === "replace") { fe(v, "htmx:abort") } else if (d.indexOf("queue") === 0) { var U = d.split(" "); g = (U[1] || "last").trim() } } if (u.xhr) { if (u.abortable) { fe(v, "htmx:abort") } else { if (g == null) { if (r) { var y = ie(r); if (y && y.triggerSpec && y.triggerSpec.queue) { g = y.triggerSpec.queue } } if (g == null) { g = "last" } } if (u.queuedRequests == null) { u.queuedRequests = [] } if (g === "first" && u.queuedRequests.length === 0) { u.queuedRequests.push(function () { ce(e, t, n, r, i) }) } else if (g === "all") { u.queuedRequests.push(function () { ce(e, t, n, r, i) }) } else if (g === "last") { u.queuedRequests = []; u.queuedRequests.push(function () { ce(e, t, n, r, i) }) } ne(a); return s } } var b = new XMLHttpRequest; u.xhr = b; u.abortable = m; var w = function () { u.xhr = null; u.abortable = false; if (u.queuedRequests != null && u.queuedRequests.length > 0) { var e = u.queuedRequests.shift(); e() } }; var B = re(n, "hx-prompt"); if (B) { var S = prompt(B); if (S === null || !fe(n, "htmx:prompt", { prompt: S, target: l })) { ne(a); w(); return s } } var V = re(n, "hx-confirm"); if (V) { if (!confirm(V)) { ne(a); w(); return s } } var E = sr(n, l, S); if (i.headers) { E = se(E, i.headers) } var j = nr(n, e); var C = j.errors; var T = j.values; if (i.values) { T = se(T, i.values) } var _ = xr(n); var z = se(T, _); var R = lr(z, n); if (e !== "get" && !cr(n)) { E["Content-Type"] = "application/x-www-form-urlencoded" } if (Y.config.getCacheBusterParam && e === "get") { R["org.htmx.cache-buster"] = Q(l, "id") || "true" } if (t == null || t === "") { t = te().location.href } var O = dr(n, "hx-request"); var W = ie(n).boosted; var q = Y.config.methodsThatUseUrlParams.indexOf(e) >= 0; var H = { boosted: W, useUrlParams: q, parameters: R, unfilteredParameters: z, headers: E, target: l, verb: e, errors: C, withCredentials: i.credentials || O.credentials || Y.config.withCredentials, timeout: i.timeout || O.timeout || Y.config.timeout, path: t, triggeringEvent: r }; if (!fe(n, "htmx:configRequest", H)) { ne(a); w(); return s } t = H.path; e = H.verb; E = H.headers; R = H.parameters; C = H.errors; q = H.useUrlParams; if (C && C.length > 0) { fe(n, "htmx:validation:halted", H); ne(a); w(); return s } var $ = t.split("#"); var G = $[0]; var L = $[1]; var A = t; if (q) { A = G; var J = Object.keys(R).length !== 0; if (J) { if (A.indexOf("?") < 0) { A += "?" } else { A += "&" } A += ar(R); if (L) { A += "#" + L } } } if (!Er(n, A, H)) { ue(n, "htmx:invalidPath", H); ne(o); return s } b.open(e.toUpperCase(), A, true); b.overrideMimeType("text/html"); b.withCredentials = H.withCredentials; b.timeout = H.timeout; if (O.noHeaders) { } else { for (var N in E) { if (E.hasOwnProperty(N)) { var Z = E[N]; yr(b, N, Z) } } } var I = { xhr: b, target: l, requestConfig: H, etc: i, boosted: W, pathInfo: { requestPath: t, finalRequestPath: A, anchor: L } }; b.onload = function () { try { var e = Sr(n); I.pathInfo.responsePath = br(b); D(n, I); Kt(P, k); fe(n, "htmx:afterRequest", I); fe(n, "htmx:afterOnLoad", I); if (!oe(n)) { var t = null; while (e.length > 0 && t == null) { var r = e.shift(); if (oe(r)) { t = r } } if (t) { fe(t, "htmx:afterRequest", I); fe(t, "htmx:afterOnLoad", I) } } ne(a); w() } catch (e) { ue(n, "htmx:onLoadError", se({ error: e }, I)); throw e } }; b.onerror = function () { Kt(P, k); ue(n, "htmx:afterRequest", I); ue(n, "htmx:sendError", I); ne(o); w() }; b.onabort = function () { Kt(P, k); ue(n, "htmx:afterRequest", I); ue(n, "htmx:sendAbort", I); ne(o); w() }; b.ontimeout = function () { Kt(P, k); ue(n, "htmx:afterRequest", I); ue(n, "htmx:timeout", I); ne(o); w() }; if (!fe(n, "htmx:beforeRequest", I)) { ne(a); w(); return s } var P = Jt(n); var k = Zt(n); ae(["loadstart", "loadend", "progress", "abort"], function (t) { ae([b, b.upload], function (e) { e.addEventListener(t, function (e) { fe(n, "htmx:xhr:" + t, { lengthComputable: e.lengthComputable, loaded: e.loaded, total: e.total }) }) }) }); fe(n, "htmx:beforeSend", I); var K = q ? null : hr(b, n, R); b.send(K); return s } function Cr(e, t) { var r = t.xhr; var n = null; var i = null; if (R(r, /HX-Push:/i)) { n = r.getResponseHeader("HX-Push"); i = "push" } else if (R(r, /HX-Push-Url:/i)) { n = r.getResponseHeader("HX-Push-Url"); i = "push" } else if (R(r, /HX-Replace-Url:/i)) { n = r.getResponseHeader("HX-Replace-Url"); i = "replace" } if (n) { if (n === "false") { return {} } else { return { type: i, path: n } } } var a = t.pathInfo.finalRequestPath; var o = t.pathInfo.responsePath; var s = re(e, "hx-push-url"); var l = re(e, "hx-replace-url"); var u = ie(e).boosted; var f = null; var c = null; if (s) { f = "push"; c = s } else if (l) { f = "replace"; c = l } else if (u) { f = "push"; c = o || a } if (c) { if (c === "false") { return {} } if (c === "true") { c = o || a } if (t.pathInfo.anchor && c.indexOf("#") === -1) { c = c + "#" + t.pathInfo.anchor } return { type: f, path: c } } else { return {} } } function Tr(l, u) { var f = u.xhr; var c = u.target; var e = u.etc; var t = u.requestConfig; if (!fe(l, "htmx:beforeOnLoad", u)) return; if (R(f, /HX-Trigger:/i)) { Ue(f, "HX-Trigger", l) } if (R(f, /HX-Location:/i)) { jt(); var r = f.getResponseHeader("HX-Location"); var h; if (r.indexOf("{") === 0) { h = S(r); r = h["path"]; delete h["path"] } wr("GET", r, h).then(function () { _t(r) }); return } var n = R(f, /HX-Refresh:/i) && "true" === f.getResponseHeader("HX-Refresh"); if (R(f, /HX-Redirect:/i)) { location.href = f.getResponseHeader("HX-Redirect"); n && location.reload(); return } if (n) { location.reload(); return } if (R(f, /HX-Retarget:/i)) { u.target = te().querySelector(f.getResponseHeader("HX-Retarget")) } var v = Cr(l, u); var i = f.status >= 200 && f.status < 400 && f.status !== 204; var d = f.response; var a = f.status >= 400; var g = Y.config.ignoreTitle; var o = se({ shouldSwap: i, serverResponse: d, isError: a, ignoreTitle: g }, u); if (!fe(c, "htmx:beforeSwap", o)) return; c = o.target; d = o.serverResponse; a = o.isError; g = o.ignoreTitle; u.target = c; u.failed = a; u.successful = !a; if (o.shouldSwap) { if (f.status === 286) { Ke(l) } C(l, function (e) { d = e.transformResponse(d, f, l) }); if (v.type) { jt() } var s = e.swapOverride; if (R(f, /HX-Reswap:/i)) { s = f.getResponseHeader("HX-Reswap") } var h = fr(l, s); if (h.hasOwnProperty("ignoreTitle")) { g = h.ignoreTitle } c.classList.add(Y.config.swappingClass); var m = null; var p = null; var x = function () { try { var e = document.activeElement; var t = {}; try { t = { elt: e, start: e ? e.selectionStart : null, end: e ? e.selectionEnd : null } } catch (e) { } var r; if (R(f, /HX-Reselect:/i)) { r = f.getResponseHeader("HX-Reselect") } var n = T(c); Fe(h.swapStyle, c, l, d, n, r); if (t.elt && !oe(t.elt) && Q(t.elt, "id")) { var i = document.getElementById(Q(t.elt, "id")); var a = { preventScroll: h.focusScroll !== undefined ? !h.focusScroll : !Y.config.defaultFocusScroll }; if (i) { if (t.start && i.setSelectionRange) { try { i.setSelectionRange(t.start, t.end) } catch (e) { } } i.focus(a) } } c.classList.remove(Y.config.swappingClass); ae(n.elts, function (e) { if (e.classList) { e.classList.add(Y.config.settlingClass) } fe(e, "htmx:afterSwap", u) }); if (R(f, /HX-Trigger-After-Swap:/i)) { var o = l; if (!oe(l)) { o = te().body } Ue(f, "HX-Trigger-After-Swap", o) } var s = function () { ae(n.tasks, function (e) { e.call() }); ae(n.elts, function (e) { if (e.classList) { e.classList.remove(Y.config.settlingClass) } fe(e, "htmx:afterSettle", u) }); if (v.type) { if (v.type === "push") { _t(v.path); fe(te().body, "htmx:pushedIntoHistory", { path: v.path }) } else { zt(v.path); fe(te().body, "htmx:replacedInHistory", { path: v.path }) } } if (u.pathInfo.anchor) { var e = E("#" + u.pathInfo.anchor); if (e) { e.scrollIntoView({ block: "start", behavior: "auto" }) } } if (n.title && !g) { var t = E("title"); if (t) { t.innerHTML = n.title } else { window.document.title = n.title } } vr(n.elts, h); if (R(f, /HX-Trigger-After-Settle:/i)) { var r = l; if (!oe(l)) { r = te().body } Ue(f, "HX-Trigger-After-Settle", r) } ne(m) }; if (h.settleDelay > 0) { setTimeout(s, h.settleDelay) } else { s() } } catch (e) { ue(l, "htmx:swapError", u); ne(p); throw e } }; var y = Y.config.globalViewTransitions; if (h.hasOwnProperty("transition")) { y = h.transition } if (y && fe(l, "htmx:beforeTransition", u) && typeof Promise !== "undefined" && document.startViewTransition) { var b = new Promise(function (e, t) { m = e; p = t }); var w = x; x = function () { document.startViewTransition(function () { w(); return b }) } } if (h.swapDelay > 0) { setTimeout(x, h.swapDelay) } else { x() } } if (a) { ue(l, "htmx:responseError", se({ error: "Response Status Error Code " + f.status + " from " + u.pathInfo.requestPath }, u)) } } var Rr = {}; function Or() { return { init: function (e) { return null }, onEvent: function (e, t) { return true }, transformResponse: function (e, t, r) { return e }, isInlineSwap: function (e) { return false }, handleSwap: function (e, t, r, n) { return false }, encodeParameters: function (e, t, r) { return null } } } function qr(e, t) { if (t.init) { t.init(r) } Rr[e] = se(Or(), t) } function Hr(e) { delete Rr[e] } function Lr(e, r, n) { if (e == undefined) { return r } if (r == undefined) { r = [] } if (n == undefined) { n = [] } var t = ee(e, "hx-ext"); if (t) { ae(t.split(","), function (e) { e = e.replace(/ /g, ""); if (e.slice(0, 7) == "ignore:") { n.push(e.slice(7)); return } if (n.indexOf(e) < 0) { var t = Rr[e]; if (t && r.indexOf(t) < 0) { r.push(t) } } }) } return Lr(u(e), r, n) } var Ar = false; te().addEventListener("DOMContentLoaded", function () { Ar = true }); function Nr(e) { if (Ar || te().readyState === "complete") { e() } else { te().addEventListener("DOMContentLoaded", e) } } function Ir() { if (Y.config.includeIndicatorStyles !== false) { te().head.insertAdjacentHTML("beforeend", "") } } function Pr() { var e = te().querySelector('meta[name="htmx-config"]'); if (e) { return S(e.content) } else { return null } } function kr() { var e = Pr(); if (e) { Y.config = se(Y.config, e) } } Nr(function () { kr(); Ir(); var e = te().body; Pt(e); var t = te().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']"); e.addEventListener("htmx:abort", function (e) { var t = e.target; var r = ie(t); if (r && r.xhr) { r.xhr.abort() } }); var r = window.onpopstate; window.onpopstate = function (e) { if (e.state && e.state.htmx) { Gt(); ae(t, function (e) { fe(e, "htmx:restored", { document: te(), triggerEvent: fe }) }) } else { if (r) { r(e) } } }; setTimeout(function () { fe(e, "htmx:load", {}); e = null }, 0) }); return Y }() }); \ No newline at end of file +var htmx = function () { "use strict"; const Q = { onLoad: null, process: null, on: null, off: null, trigger: null, ajax: null, find: null, findAll: null, closest: null, values: function (e, t) { const n = cn(e, t || "post"); return n.values }, remove: null, addClass: null, removeClass: null, toggleClass: null, takeClass: null, swap: null, defineExtension: null, removeExtension: null, logAll: null, logNone: null, logger: null, config: { historyEnabled: true, historyCacheSize: 10, refreshOnHistoryMiss: false, defaultSwapStyle: "innerHTML", defaultSwapDelay: 0, defaultSettleDelay: 20, includeIndicatorStyles: true, indicatorClass: "htmx-indicator", requestClass: "htmx-request", addedClass: "htmx-added", settlingClass: "htmx-settling", swappingClass: "htmx-swapping", allowEval: true, allowScriptTags: true, inlineScriptNonce: "", inlineStyleNonce: "", attributesToSettle: ["class", "style", "width", "height"], withCredentials: false, timeout: 0, wsReconnectDelay: "full-jitter", wsBinaryType: "blob", disableSelector: "[hx-disable], [data-hx-disable]", scrollBehavior: "instant", defaultFocusScroll: false, getCacheBusterParam: false, globalViewTransitions: false, methodsThatUseUrlParams: ["get", "delete"], selfRequestsOnly: true, ignoreTitle: false, scrollIntoViewOnBoost: true, triggerSpecsCache: null, disableInheritance: false, responseHandling: [{ code: "204", swap: false }, { code: "[23]..", swap: true }, { code: "[45]..", swap: false, error: true }], allowNestedOobSwaps: true }, parseInterval: null, _: null, version: "2.0.1" }; Q.onLoad = $; Q.process = kt; Q.on = be; Q.off = we; Q.trigger = he; Q.ajax = Hn; Q.find = r; Q.findAll = p; Q.closest = g; Q.remove = K; Q.addClass = Y; Q.removeClass = o; Q.toggleClass = W; Q.takeClass = ge; Q.swap = ze; Q.defineExtension = Un; Q.removeExtension = Bn; Q.logAll = z; Q.logNone = J; Q.parseInterval = d; Q._ = _; const n = { addTriggerHandler: Et, bodyContains: le, canAccessLocalStorage: j, findThisElement: Ee, filterValues: dn, swap: ze, hasAttribute: s, getAttributeValue: te, getClosestAttributeValue: re, getClosestMatch: T, getExpressionVars: Cn, getHeaders: hn, getInputValues: cn, getInternalData: ie, getSwapSpecification: pn, getTriggerSpecs: lt, getTarget: Ce, makeFragment: k, mergeObjects: ue, makeSettleInfo: xn, oobSwap: Te, querySelectorExt: fe, settleImmediately: Gt, shouldCancel: dt, triggerEvent: he, triggerErrorEvent: ae, withExtensions: Ut }; const v = ["get", "post", "put", "delete", "patch"]; const R = v.map(function (e) { return "[hx-" + e + "], [data-hx-" + e + "]" }).join(", "); const O = e("head"); function e(e, t = false) { return new RegExp(`<${e}(\\s[^>]*>|>)([\\s\\S]*?)<\\/${e}>`, t ? "gim" : "im") } function d(e) { if (e == undefined) { return undefined } let t = NaN; if (e.slice(-2) == "ms") { t = parseFloat(e.slice(0, -2)) } else if (e.slice(-1) == "s") { t = parseFloat(e.slice(0, -1)) * 1e3 } else if (e.slice(-1) == "m") { t = parseFloat(e.slice(0, -1)) * 1e3 * 60 } else { t = parseFloat(e) } return isNaN(t) ? undefined : t } function ee(e, t) { return e instanceof Element && e.getAttribute(t) } function s(e, t) { return !!e.hasAttribute && (e.hasAttribute(t) || e.hasAttribute("data-" + t)) } function te(e, t) { return ee(e, t) || ee(e, "data-" + t) } function u(e) { const t = e.parentElement; if (!t && e.parentNode instanceof ShadowRoot) return e.parentNode; return t } function ne() { return document } function H(e, t) { return e.getRootNode ? e.getRootNode({ composed: t }) : ne() } function T(e, t) { while (e && !t(e)) { e = u(e) } return e || null } function q(e, t, n) { const r = te(t, n); const o = te(t, "hx-disinherit"); var i = te(t, "hx-inherit"); if (e !== t) { if (Q.config.disableInheritance) { if (i && (i === "*" || i.split(" ").indexOf(n) >= 0)) { return r } else { return null } } if (o && (o === "*" || o.split(" ").indexOf(n) >= 0)) { return "unset" } } return r } function re(t, n) { let r = null; T(t, function (e) { return !!(r = q(t, ce(e), n)) }); if (r !== "unset") { return r } } function a(e, t) { const n = e instanceof Element && (e.matches || e.matchesSelector || e.msMatchesSelector || e.mozMatchesSelector || e.webkitMatchesSelector || e.oMatchesSelector); return !!n && n.call(e, t) } function L(e) { const t = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i; const n = t.exec(e); if (n) { return n[1].toLowerCase() } else { return "" } } function N(e) { const t = new DOMParser; return t.parseFromString(e, "text/html") } function A(e, t) { while (t.childNodes.length > 0) { e.append(t.childNodes[0]) } } function I(e) { const t = ne().createElement("script"); se(e.attributes, function (e) { t.setAttribute(e.name, e.value) }); t.textContent = e.textContent; t.async = false; if (Q.config.inlineScriptNonce) { t.nonce = Q.config.inlineScriptNonce } return t } function P(e) { return e.matches("script") && (e.type === "text/javascript" || e.type === "module" || e.type === "") } function D(e) { Array.from(e.querySelectorAll("script")).forEach(e => { if (P(e)) { const t = I(e); const n = e.parentNode; try { n.insertBefore(t, e) } catch (e) { w(e) } finally { e.remove() } } }) } function k(e) { const t = e.replace(O, ""); const n = L(t); let r; if (n === "html") { r = new DocumentFragment; const i = N(e); A(r, i.body); r.title = i.title } else if (n === "body") { r = new DocumentFragment; const i = N(t); A(r, i.body); r.title = i.title } else { const i = N('"); r = i.querySelector("template").content; r.title = i.title; var o = r.querySelector("title"); if (o && o.parentNode === r) { o.remove(); r.title = o.innerText } } if (r) { if (Q.config.allowScriptTags) { D(r) } else { r.querySelectorAll("script").forEach(e => e.remove()) } } return r } function oe(e) { if (e) { e() } } function t(e, t) { return Object.prototype.toString.call(e) === "[object " + t + "]" } function M(e) { return typeof e === "function" } function X(e) { return t(e, "Object") } function ie(e) { const t = "htmx-internal-data"; let n = e[t]; if (!n) { n = e[t] = {} } return n } function F(t) { const n = []; if (t) { for (let e = 0; e < t.length; e++) { n.push(t[e]) } } return n } function se(t, n) { if (t) { for (let e = 0; e < t.length; e++) { n(t[e]) } } } function U(e) { const t = e.getBoundingClientRect(); const n = t.top; const r = t.bottom; return n < window.innerHeight && r >= 0 } function le(e) { const t = e.getRootNode && e.getRootNode(); if (t && t instanceof window.ShadowRoot) { return ne().body.contains(t.host) } else { return ne().body.contains(e) } } function B(e) { return e.trim().split(/\s+/) } function ue(e, t) { for (const n in t) { if (t.hasOwnProperty(n)) { e[n] = t[n] } } return e } function S(e) { try { return JSON.parse(e) } catch (e) { w(e); return null } } function j() { const e = "htmx:localStorageTest"; try { localStorage.setItem(e, e); localStorage.removeItem(e); return true } catch (e) { return false } } function V(t) { try { const e = new URL(t); if (e) { t = e.pathname + e.search } if (!/^\/$/.test(t)) { t = t.replace(/\/+$/, "") } return t } catch (e) { return t } } function _(e) { return vn(ne().body, function () { return eval(e) }) } function $(t) { const e = Q.on("htmx:load", function (e) { t(e.detail.elt) }); return e } function z() { Q.logger = function (e, t, n) { if (console) { console.log(t, e, n) } } } function J() { Q.logger = null } function r(e, t) { if (typeof e !== "string") { return e.querySelector(t) } else { return r(ne(), e) } } function p(e, t) { if (typeof e !== "string") { return e.querySelectorAll(t) } else { return p(ne(), e) } } function E() { return window } function K(e, t) { e = y(e); if (t) { E().setTimeout(function () { K(e); e = null }, t) } else { u(e).removeChild(e) } } function ce(e) { return e instanceof Element ? e : null } function G(e) { return e instanceof HTMLElement ? e : null } function Z(e) { return typeof e === "string" ? e : null } function h(e) { return e instanceof Element || e instanceof Document || e instanceof DocumentFragment ? e : null } function Y(e, t, n) { e = ce(y(e)); if (!e) { return } if (n) { E().setTimeout(function () { Y(e, t); e = null }, n) } else { e.classList && e.classList.add(t) } } function o(e, t, n) { let r = ce(y(e)); if (!r) { return } if (n) { E().setTimeout(function () { o(r, t); r = null }, n) } else { if (r.classList) { r.classList.remove(t); if (r.classList.length === 0) { r.removeAttribute("class") } } } } function W(e, t) { e = y(e); e.classList.toggle(t) } function ge(e, t) { e = y(e); se(e.parentElement.children, function (e) { o(e, t) }); Y(ce(e), t) } function g(e, t) { e = ce(y(e)); if (e && e.closest) { return e.closest(t) } else { do { if (e == null || a(e, t)) { return e } } while (e = e && ce(u(e))); return null } } function l(e, t) { return e.substring(0, t.length) === t } function pe(e, t) { return e.substring(e.length - t.length) === t } function i(e) { const t = e.trim(); if (l(t, "<") && pe(t, "/>")) { return t.substring(1, t.length - 2) } else { return t } } function m(e, t, n) { e = y(e); if (t.indexOf("closest ") === 0) { return [g(ce(e), i(t.substr(8)))] } else if (t.indexOf("find ") === 0) { return [r(h(e), i(t.substr(5)))] } else if (t === "next") { return [ce(e).nextElementSibling] } else if (t.indexOf("next ") === 0) { return [me(e, i(t.substr(5)), !!n)] } else if (t === "previous") { return [ce(e).previousElementSibling] } else if (t.indexOf("previous ") === 0) { return [ye(e, i(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 [H(e, !!n)] } else if (t.indexOf("global ") === 0) { return m(e, t.slice(7), true) } else { return F(h(H(e, !!n)).querySelectorAll(i(t))) } } var me = function (t, e, n) { const r = h(H(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 ye = function (t, e, n) { const r = h(H(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 fe(e, t) { if (typeof e !== "string") { return m(e, t)[0] } else { return m(ne().body, e)[0] } } function y(e, t) { if (typeof e === "string") { return r(h(t) || document, e) } else { return e } } function xe(e, t, n) { if (M(t)) { return { target: ne().body, event: Z(e), listener: t } } else { return { target: y(e), event: Z(t), listener: n } } } function be(t, n, r) { _n(function () { const e = xe(t, n, r); e.target.addEventListener(e.event, e.listener) }); const e = M(n); return e ? n : r } function we(t, n, r) { _n(function () { const e = xe(t, n, r); e.target.removeEventListener(e.event, e.listener) }); return M(n) ? n : r } const ve = ne().createElement("output"); function Se(e, t) { const n = re(e, t); if (n) { if (n === "this") { return [Ee(e, t)] } else { const r = m(e, n); if (r.length === 0) { w('The selector "' + n + '" on ' + t + " returned no matches!"); return [ve] } else { return r } } } } function Ee(e, t) { return ce(T(e, function (e) { return te(ce(e), t) != null })) } function Ce(e) { const t = re(e, "hx-target"); if (t) { if (t === "this") { return Ee(e, "hx-target") } else { return fe(e, t) } } else { const n = ie(e); if (n.boosted) { return ne().body } else { return e } } } function Re(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) && Re(e.name)) { t.removeAttribute(e.name) } }); se(n.attributes, function (e) { if (Re(e.name)) { t.setAttribute(e.name, e.value) } }) } function He(t, e) { const n = jn(e); for (let e = 0; e < n.length; e++) { const r = n[e]; try { if (r.isInlineSwap(t)) { return true } } catch (e) { w(e) } } return t === "outerHTML" } function Te(e, o, i) { let t = "#" + ee(o, "id"); let s = "outerHTML"; if (e === "true") { } else if (e.indexOf(":") > 0) { s = e.substr(0, e.indexOf(":")); t = e.substr(e.indexOf(":") + 1, e.length) } else { s = e } const n = ne().querySelectorAll(t); if (n) { se(n, function (e) { let t; const n = o.cloneNode(true); t = ne().createDocumentFragment(); t.appendChild(n); if (!He(s, e)) { t = h(n) } const r = { shouldSwap: true, target: e, fragment: t }; if (!he(e, "htmx:oobBeforeSwap", r)) return; e = r.target; if (r.shouldSwap) { _e(s, e, e, t, i) } se(i.elts, function (e) { he(e, "htmx:oobAfterSwap", r) }) }); o.parentNode.removeChild(o) } else { o.parentNode.removeChild(o); ae(ne().body, "htmx:oobErrorNoTarget", { content: o }) } return e } function qe(e) { se(p(e, "[hx-preserve], [data-hx-preserve]"), function (e) { const t = te(e, "id"); const n = ne().getElementById(t); if (n != null) { e.parentNode.replaceChild(n, e) } }) } function Le(l, e, u) { 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 = h(l); const i = e && e.querySelector(o + "[id='" + r + "']"); if (i && i !== e) { const s = t.cloneNode(); Oe(t, i); u.tasks.push(function () { Oe(t, s) }) } } }) } function Ne(e) { return function () { o(e, Q.config.addedClass); kt(ce(e)); Ae(h(e)); he(e, "htmx:load") } } function Ae(e) { const t = "[autofocus]"; const n = G(a(e, t) ? e : e.querySelector(t)); if (n != null) { n.focus() } } function c(e, t, n, r) { Le(e, n, r); while (n.childNodes.length > 0) { const o = n.firstChild; Y(ce(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 De(t) { const n = ie(t); if (n.onHandlers) { for (let e = 0; e < n.onHandlers.length; e++) { const r = n.onHandlers[e]; we(t, r.event, r.listener) } delete n.onHandlers } } function ke(e) { const t = ie(e); if (t.timeout) { clearTimeout(t.timeout) } if (t.listenerInfos) { se(t.listenerInfos, function (e) { if (e.on) { we(e.on, e.trigger, e.listener) } }) } De(e); se(Object.keys(t), function (e) { delete t[e] }) } function f(e) { he(e, "htmx:beforeCleanupElement"); ke(e); if (e.children) { se(e.children, function (e) { f(e) }) } } function Me(t, e, n) { if (t instanceof Element && t.tagName === "BODY") { return Ve(t, e, n) } let r; const o = t.previousSibling; c(u(t), t, e, n); if (o == null) { r = u(t).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.nextElementSibling } else { r = null } } f(t); if (t instanceof Element) { t.remove() } else { t.parentNode.removeChild(t) } } function Xe(e, t, n) { return c(e, e.firstChild, t, n) } function Fe(e, t, n) { return c(u(e), e, t, n) } function Ue(e, t, n) { return c(e, null, t, n) } function Be(e, t, n) { return c(u(e), e.nextSibling, t, n) } function je(e) { f(e); return u(e).removeChild(e) } function Ve(e, t, n) { const r = e.firstChild; c(e, r, t, n); if (r) { while (r.nextSibling) { f(r.nextSibling); e.removeChild(r.nextSibling) } f(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": Ue(n, r, o); return; case "afterend": Be(n, r, o); return; case "delete": je(n); return; default: var i = jn(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 (typeof l.length !== "undefined") { for (let e = 0; e < l.length; e++) { const u = l[e]; if (u.nodeType !== Node.TEXT_NODE && u.nodeType !== Node.COMMENT_NODE) { o.tasks.push(Ne(u)) } } } return } } catch (e) { w(e) } } if (t === "innerHTML") { Ve(n, r, o) } else { _e(Q.config.defaultSwapStyle, e, n, r, o) } } } function $e(e, n) { se(p(e, "[hx-swap-oob], [data-hx-swap-oob]"), function (e) { if (Q.config.allowNestedOobSwaps || e.parentElement === null) { const t = te(e, "hx-swap-oob"); if (t != null) { Te(t, e, n) } } else { e.removeAttribute("hx-swap-oob"); e.removeAttribute("data-hx-swap-oob") } }) } function ze(e, t, r, o) { if (!o) { o = {} } e = y(e); const n = document.activeElement; let i = {}; try { i = { elt: n, start: n ? n.selectionStart : null, end: n ? n.selectionEnd : null } } catch (e) { } const s = xn(e); if (r.swapStyle === "textContent") { e.textContent = t } else { let n = k(t); s.title = n.title; if (o.selectOOB) { const u = o.selectOOB.split(","); for (let t = 0; t < u.length; t++) { const c = u[t].split(":", 2); let e = c[0].trim(); if (e.indexOf("#") === 0) { e = e.substring(1) } const f = c[1] || "true"; const a = n.querySelector("#" + e); if (a) { Te(f, a, s) } } } $e(n, s); se(p(n, "template"), function (e) { $e(e.content, s); if (e.content.childElementCount === 0 && e.content.textContent.trim() === "") { 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, s) } if (i.elt && !le(i.elt) && ee(i.elt, "id")) { const d = document.getElementById(ee(i.elt, "id")); const g = { preventScroll: r.focusScroll !== undefined ? !r.focusScroll : !Q.config.defaultFocusScroll }; if (d) { if (i.start && d.setSelectionRange) { try { d.setSelectionRange(i.start, i.end) } catch (e) { } } d.focus(g) } } e.classList.remove(Q.config.swappingClass); se(s.elts, function (e) { if (e.classList) { e.classList.add(Q.config.settlingClass) } he(e, "htmx:afterSwap", o.eventInfo) }); if (o.afterSwapCallback) { o.afterSwapCallback() } if (!r.ignoreTitle) { kn(s.title) } const l = function () { se(s.tasks, function (e) { e.call() }); se(s.elts, function (e) { if (e.classList) { e.classList.remove(Q.config.settlingClass) } he(e, "htmx:afterSettle", o.eventInfo) }); if (o.anchor) { const e = ce(y("#" + o.anchor)); if (e) { e.scrollIntoView({ block: "start", behavior: "auto" }) } } bn(s.elts, r); if (o.afterSettleCallback) { o.afterSettleCallback() } }; if (r.settleDelay > 0) { E().setTimeout(l, r.settleDelay) } else { l() } } 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 (!X(e)) { e = { value: e } } he(n, i, e) } } } else { const s = r.split(","); for (let e = 0; e < s.length; e++) { he(n, s[e].trim(), []) } } } const Ke = /\s/; const x = /[\s,]/; const Ge = /[_$a-zA-Z]/; const Ze = /[_$a-zA-Z0-9]/; const Ye = ['"', "'", "/"]; const We = /[^\s]/; const Qe = /[{(]/; const et = /[})]/; function tt(e) { const t = []; let n = 0; while (n < e.length) { if (Ge.exec(e.charAt(n))) { var r = n; while (Ze.exec(e.charAt(n + 1))) { n++ } t.push(e.substr(r, n - r + 1)) } else if (Ye.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 nt(e, t, n) { return Ge.exec(e.charAt(0)) && e !== "true" && e !== "false" && e !== "this" && e !== n && t !== "." } function rt(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) { ae(ne().body, "htmx:syntax:error", { error: e, source: t }); return null } } } else if (s === "[") { e++ } if (nt(s, n, i)) { t += "((" + i + "." + s + ") ? (" + i + "." + s + ") : (window." + s + "))" } else { t = t + s } n = o.shift() } } } function b(e, t) { let n = ""; while (e.length > 0 && !t.test(e[0])) { n += e.shift() } return n } function ot(e) { let t; if (e.length > 0 && Qe.test(e[0])) { e.shift(); t = b(e, et).trim(); e.shift() } else { t = b(e, x) } return t } const it = "input, textarea, select"; function st(e, t, n) { const r = []; const o = tt(t); do { b(o, We); const l = o.length; const u = b(o, /[,\[\s]/); if (u !== "") { if (u === "every") { const c = { trigger: "every" }; b(o, We); c.pollInterval = d(b(o, /[,\[\s]/)); b(o, We); var i = rt(e, o, "event"); if (i) { c.eventFilter = i } r.push(c) } else { const f = { trigger: u }; var i = rt(e, o, "event"); if (i) { f.eventFilter = i } while (o.length > 0 && o[0] !== ",") { b(o, We); const a = o.shift(); if (a === "changed") { f.changed = true } else if (a === "once") { f.once = true } else if (a === "consume") { f.consume = true } else if (a === "delay" && o[0] === ":") { o.shift(); f.delay = d(b(o, x)) } else if (a === "from" && o[0] === ":") { o.shift(); if (Qe.test(o[0])) { var s = ot(o) } else { var s = b(o, x); if (s === "closest" || s === "find" || s === "next" || s === "previous") { o.shift(); const h = ot(o); if (h.length > 0) { s += " " + h } } } f.from = s } else if (a === "target" && o[0] === ":") { o.shift(); f.target = ot(o) } else if (a === "throttle" && o[0] === ":") { o.shift(); f.throttle = d(b(o, x)) } else if (a === "queue" && o[0] === ":") { o.shift(); f.queue = b(o, x) } else if (a === "root" && o[0] === ":") { o.shift(); f[a] = ot(o) } else if (a === "threshold" && o[0] === ":") { o.shift(); f[a] = b(o, x) } else { ae(e, "htmx:syntax:error", { token: o.shift() }) } } r.push(f) } } if (o.length === l) { ae(e, "htmx:syntax:error", { token: o.shift() }) } b(o, We) } while (o[0] === "," && o.shift()); if (n) { n[t] = r } return r } function lt(e) { const t = te(e, "hx-trigger"); let n = []; if (t) { const r = Q.config.triggerSpecsCache; n = r && r[t] || st(e, t, r) } if (n.length > 0) { return n } else if (a(e, "form")) { return [{ trigger: "submit" }] } else if (a(e, 'input[type="button"], input[type="submit"]')) { return [{ trigger: "click" }] } else if (a(e, it)) { return [{ trigger: "change" }] } else { return [{ trigger: "click" }] } } function ut(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 (!pt(n, e, Xt("hx:poll:trigger", { triggerSpec: n, target: e }))) { t(e) } ct(e, t, n) } }, n.pollInterval) } function ft(e) { return location.hostname === e.hostname && ee(e, "href") && ee(e, "href").indexOf("#") !== 0 } function at(e) { return g(e, Q.config.disableSelector) } function ht(t, n, e) { if (t instanceof HTMLAnchorElement && ft(t) && (t.target === "" || t.target === "_self") || t.tagName === "FORM") { 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"; if (r === "get") { } o = ee(t, "action") } e.forEach(function (e) { mt(t, function (e, t) { const n = ce(e); if (at(n)) { f(n); return } de(r, o, n, t) }, n, e, true) }) } } function dt(e, t) { const n = ce(t); if (!n) { return false } if (e.type === "submit" || e.type === "click") { if (n.tagName === "FORM") { return true } if (a(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 gt(e, t) { return ie(e).boosted && e instanceof HTMLAnchorElement && t.type === "click" && (t.ctrlKey || t.metaKey) } function pt(e, t, n) { const r = e.eventFilter; if (r) { try { return r.call(t, n) !== true } catch (e) { const o = r.source; ae(ne().body, "htmx:eventFilter:error", { error: e, source: o }); return true } } return false } function mt(s, l, e, u, c) { const f = ie(s); let t; if (u.from) { t = m(s, u.from) } else { t = [s] } if (u.changed) { t.forEach(function (e) { const t = ie(e); t.lastValue = e.value }) } se(t, function (o) { const i = function (e) { if (!le(s)) { o.removeEventListener(u.trigger, i); return } if (gt(s, e)) { return } if (c || dt(e, s)) { e.preventDefault() } if (pt(u, s, e)) { return } const t = ie(e); t.triggerSpec = u; if (t.handledFor == null) { t.handledFor = [] } if (t.handledFor.indexOf(s) < 0) { t.handledFor.push(s); if (u.consume) { e.stopPropagation() } if (u.target && e.target) { if (!a(ce(e.target), u.target)) { return } } if (u.once) { if (f.triggeredOnce) { return } else { f.triggeredOnce = true } } if (u.changed) { const n = ie(o); const r = o.value; if (n.lastValue === r) { return } n.lastValue = r } if (f.delayed) { clearTimeout(f.delayed) } if (f.throttle) { return } if (u.throttle > 0) { if (!f.throttle) { l(s, e); f.throttle = E().setTimeout(function () { f.throttle = null }, u.throttle) } } else if (u.delay > 0) { f.delayed = E().setTimeout(function () { l(s, e) }, u.delay) } else { he(s, "htmx:trigger"); l(s, e) } } }; if (e.listenerInfos == null) { e.listenerInfos = [] } e.listenerInfos.push({ trigger: u.trigger, listener: i, on: o }); o.addEventListener(u.trigger, i) }) } let yt = false; let xt = null; function bt() { if (!xt) { xt = function () { yt = true }; window.addEventListener("scroll", xt); setInterval(function () { if (yt) { yt = false; se(ne().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"), function (e) { wt(e) }) } }, 200) } } function wt(e) { if (!s(e, "data-hx-revealed") && U(e)) { e.setAttribute("data-hx-revealed", "true"); const t = ie(e); if (t.initHash) { he(e, "revealed") } else { e.addEventListener("htmx:afterProcessNode", function () { he(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 St(t, n, e) { let i = false; se(v, 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) { Et(t, e, n, function (e, t) { const n = ce(e); if (g(n, Q.config.disableSelector)) { f(n); return } de(r, o, n, t) }) }) } }); return i } function Et(r, e, t, n) { if (e.trigger === "revealed") { bt(); mt(r, n, t, e); wt(ce(r)) } else if (e.trigger === "intersect") { const o = {}; if (e.root) { o.root = fe(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) { he(r, "intersect"); break } } }, o); i.observe(ce(r)); mt(ce(r), n, t, e) } else if (e.trigger === "load") { if (!pt(e, r, Xt("load", { elt: r }))) { vt(ce(r), n, t, e.delay) } } else if (e.pollInterval > 0) { t.polling = true; ct(ce(r), n, e) } else { mt(r, n, t, e) } } function Ct(e) { const t = ce(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 Rt = (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 (Ct(e)) { t.push(ce(e)) } const n = Rt.evaluate(e); let r = null; while (r = n.iterateNext()) t.push(ce(r)) } function Ht(e) { const t = []; if (e instanceof DocumentFragment) { for (const n of e.childNodes) { Ot(n, t) } } else { Ot(e, t) } return t } function Tt(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 Xn) { const s = Xn[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 qt(e) { const t = g(ce(e.target), "button, input[type='submit']"); const n = Nt(e); if (n) { n.lastButtonClicked = t } } function Lt(e) { const t = Nt(e); if (t) { t.lastButtonClicked = null } } function Nt(e) { const t = g(ce(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 At(e) { e.addEventListener("click", qt); e.addEventListener("focusin", qt); e.addEventListener("focusout", Lt) } function It(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 Pt(t) { De(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) } It(t, e, r) } } } } function Dt(t) { if (g(t, Q.config.disableSelector)) { f(t); return } const n = ie(t); if (n.initHash !== Pe(t)) { ke(t); n.initHash = Pe(t); he(t, "htmx:beforeProcessNode"); if (t.value) { n.lastValue = t.value } const e = lt(t); const r = St(t, n, e); if (!r) { if (re(t, "hx-boost") === "true") { ht(t, n, e) } else if (s(t, "hx-trigger")) { e.forEach(function (e) { Et(t, e, n, function () { }) }) } } if (t.tagName === "FORM" || ee(t, "type") === "submit" && s(t, "form")) { At(t) } he(t, "htmx:afterProcessNode") } } function kt(e) { e = y(e); if (g(e, Q.config.disableSelector)) { f(e); return } Dt(e); se(Tt(e), function (e) { Dt(e) }); se(Ht(e), Pt) } function Mt(e) { return e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase() } function Xt(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 ae(e, t, n) { he(e, t, ue({ error: t }, n)) } function Ft(e) { return e === "htmx:afterProcessNode" } function Ut(e, t) { se(jn(e), function (e) { try { t(e) } catch (e) { w(e) } }) } function w(e) { if (console.error) { console.error(e) } else if (console.log) { console.log("ERROR: ", e) } } function he(e, t, n) { e = y(e); if (n == null) { n = {} } n.elt = e; const r = Xt(t, n); if (Q.logger && !Ft(t)) { Q.logger(e, t, n) } if (n.error) { w(n.error); he(e, "htmx:error", { errorInfo: n }) } let o = e.dispatchEvent(r); const i = Mt(t); if (o && i !== t) { const s = Xt(i, r.detail); o = o && e.dispatchEvent(s) } Ut(ce(e), function (e) { o = o && (e.onEvent(t, r) !== false && !r.defaultPrevented) }); return o } let Bt = location.pathname + location.search; function jt() { const e = ne().querySelector("[hx-history-elt],[data-hx-history-elt]"); return e || ne().body } function Vt(t, e) { if (!j()) { 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 = V(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 }; he(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) { ae(ne().body, "htmx:historyCacheError", { cause: e, cache: i }); i.shift() } } } function _t(t) { if (!j()) { return null } t = V(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(p(n, "." + t), function (e) { o(e, t) }); return n.innerHTML } function zt() { const e = jt(); 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) { he(ne().body, "htmx:beforeHistorySave", { path: t, historyElt: e }); Vt(t, e) } if (Q.config.historyEnabled) history.replaceState({ htmx: true }, ne().title, window.location.href) } function Jt(e) { if (Q.config.getCacheBusterParam) { e = e.replace(/org\.htmx\.cache-buster=[^&]*&?/, ""); if (pe(e, "&") || pe(e, "?")) { e = e.slice(0, -1) } } if (Q.config.historyEnabled) { history.pushState({ htmx: true }, "", e) } Bt = e } function Kt(e) { if (Q.config.historyEnabled) history.replaceState({ htmx: true }, "", e); Bt = e } function Gt(e) { se(e, function (e) { e.call(undefined) }) } function Zt(o) { const e = new XMLHttpRequest; const i = { path: o, xhr: e }; he(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) { he(ne().body, "htmx:historyCacheMissLoad", i); const e = k(this.response); const t = e.querySelector("[hx-history-elt],[data-hx-history-elt]") || e; const n = jt(); const r = xn(n); kn(e.title); Ve(n, t, r); Gt(r.tasks); Bt = o; he(ne().body, "htmx:historyRestore", { path: o, cacheMiss: true, serverResponse: this.response }) } else { ae(ne().body, "htmx:historyCacheMissLoadError", i) } }; e.send() } function Yt(e) { zt(); e = e || location.pathname + location.search; const t = _t(e); if (t) { const n = k(t.content); const r = jt(); const o = xn(r); kn(n.title); Ve(r, n, o); Gt(o.tasks); E().setTimeout(function () { window.scrollTo(0, t.scroll) }, 0); Bt = e; he(ne().body, "htmx:historyRestore", { path: e, item: t }) } else { if (Q.config.refreshOnHistoryMiss) { window.location.reload(true) } else { Zt(e) } } } function Wt(e) { let t = Se(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 Qt(e) { let t = Se(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", "") }); return t } function en(e, t) { se(e, function (e) { const t = ie(e); t.requestCount = (t.requestCount || 0) - 1; if (t.requestCount === 0) { e.classList.remove.call(e.classList, Q.config.requestClass) } }); se(t, function (e) { const t = ie(e); t.requestCount = (t.requestCount || 0) - 1; if (t.requestCount === 0) { e.removeAttribute("disabled") } }) } function tn(t, n) { for (let e = 0; e < t.length; e++) { const r = t[e]; if (r.isSameNode(n)) { return true } } return false } function nn(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 rn(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 on(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 sn(t, n, r, o, i) { if (o == null || tn(t, o)) { return } else { t.push(o) } if (nn(o)) { const s = ee(o, "name"); let e = o.value; if (o instanceof HTMLSelectElement && o.multiple) { e = F(o.querySelectorAll("option:checked")).map(function (e) { return e.value }) } if (o instanceof HTMLInputElement && o.files) { e = F(o.files) } rn(s, e, n); if (i) { ln(o, r) } } if (o instanceof HTMLFormElement) { se(o.elements, function (e) { if (t.indexOf(e) >= 0) { on(e.name, e.value, n) } else { t.push(e) } if (i) { ln(e, r) } }); new FormData(o).forEach(function (e, t) { if (e instanceof File && e.name === "") { return } rn(t, e, n) }) } } function ln(e, t) { const n = e; if (n.willValidate) { he(n, "htmx:validation:validate"); if (!n.checkValidity()) { t.push({ elt: n, message: n.validationMessage, validity: n.validity }); he(n, "htmx:validation:failed", { message: n.validationMessage, validity: n.validity }) } } } function un(t, e) { for (const n of e.keys()) { t.delete(n); e.getAll(n).forEach(function (e) { t.append(n, e) }) } return t } 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") { sn(n, o, i, g(e, "form"), l) } sn(n, r, i, e, l); if (s.lastButtonClicked || e.tagName === "BUTTON" || e.tagName === "INPUT" && ee(e, "type") === "submit") { const c = s.lastButtonClicked || e; const f = ee(c, "name"); rn(f, c.value, o) } const u = Se(e, "hx-include"); se(u, function (e) { sn(n, r, i, ce(e), l); if (!a(e, "form")) { se(h(e).querySelectorAll(it), function (e) { sn(n, r, i, e, l) }) } }); un(r, o); return { errors: i, formData: r, values: An(r) } } function fn(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 = Ln(e); let n = ""; e.forEach(function (e, t) { n = fn(n, t, e) }); return n } function hn(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 }; wn(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 gn(e) { return !!ee(e, "href") && ee(e, "href").indexOf("#") >= 0 } function pn(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 && !gn(e)) { r.show = "top" } if (n) { const s = B(n); if (s.length > 0) { for (let e = 0; e < s.length; e++) { const l = s[e]; if (l.indexOf("swap:") === 0) { r.swapDelay = d(l.substr(5)) } else if (l.indexOf("settle:") === 0) { r.settleDelay = d(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 u = l.substr(7); var o = u.split(":"); const c = o.pop(); var i = o.length > 0 ? o.join(":") : null; r.scroll = c; r.scrollTarget = i } else if (l.indexOf("show:") === 0) { const f = l.substr(5); var o = f.split(":"); const a = o.pop(); var i = o.length > 0 ? o.join(":") : null; r.show = a; r.showTarget = i } else if (l.indexOf("focus-scroll:") === 0) { const h = l.substr("focus-scroll:".length); r.focusScroll = h == "true" } else if (e == 0) { r.swapStyle = l } else { w("Unknown modifier in hx-swap: " + l) } } } } return r } function mn(e) { return re(e, "hx-encoding") === "multipart/form-data" || a(e, "form") && ee(e, "enctype") === "multipart/form-data" } function yn(t, n, r) { let o = null; Ut(n, function (e) { if (o == null) { o = e.encodeParameters(t, r, n) } }); if (o != null) { return o } else { if (mn(n)) { return un(new FormData, Ln(r)) } else { return an(r) } } } function xn(e) { return { tasks: [], elts: [e] } } function bn(e, t) { const n = e[0]; const r = e[e.length - 1]; if (t.scroll) { var o = null; if (t.scrollTarget) { o = ce(fe(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 = ce(fe(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 wn(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 wn(ce(u(r)), e, o, i) } function vn(e, t, n) { if (Q.config.allowEval) { return t() } else { ae(e, "htmx:evalDisallowedError"); return n } } function Sn(e, t) { return wn(e, "hx-vars", true, t) } function En(e, t) { return wn(e, "hx-vals", false, t) } function Cn(e) { return ue(Sn(e), En(e)) } function Rn(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) { ae(ne().body, "htmx:badResponseUrl", { url: t.responseURL }) } } } function C(e, t) { return t.test(e.getAllResponseHeaders()) } function Hn(e, t, n) { e = e.toLowerCase(); if (n) { if (n instanceof Element || typeof n === "string") { return de(e, t, null, null, { targetOverride: y(n), returnPromise: true }) } else { return de(e, t, y(n.source), n.event, { handler: n.handler, headers: n.headers, values: n.values, targetOverride: y(n.target), swapOverride: n.swap, select: n.select, returnPromise: true }) } } else { return de(e, t, null, null, { returnPromise: true }) } } function Tn(e) { const t = []; while (e) { t.push(e); e = e.parentElement } return t } function qn(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 he(e, "htmx:validateUrl", ue({ url: o, sameHost: r }, n)) } function Ln(e) { if (e instanceof FormData) return e; const t = new FormData; for (const n in e) { if (e.hasOwnProperty(n)) { if (typeof e[n].forEach === "function") { e[n].forEach(function (e) { t.append(n, e) }) } else if (typeof e[n] === "object") { t.append(n, JSON.stringify(e[n])) } else { t.append(n, e[n]) } } } return t } function Nn(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 An(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 Nn(e, t, n) } }, set: function (t, n, e) { if (typeof n !== "string") { return false } t.delete(n); if (typeof e.forEach === "function") { e.forEach(function (e) { t.append(n, 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 de(t, n, r, o, i, k) { 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 || Mn; const X = i.select || null; if (!le(r)) { oe(s); return e } const u = i.targetOverride || ce(Ce(r)); if (u == null || u == ve) { ae(r, "htmx:targetError", { target: te(r, "hx-target") }); oe(l); return e } let c = ie(r); const f = c.lastButtonClicked; if (f) { const L = ee(f, "formaction"); if (L != null) { n = L } const N = ee(f, "formmethod"); if (N != null) { if (N.toLowerCase() !== "dialog") { t = N } } } const a = re(r, "hx-confirm"); if (k === undefined) { const K = function (e) { return de(t, n, r, o, i, !!e) }; const G = { target: u, elt: r, path: n, verb: t, triggeringEvent: o, etc: i, issueRequest: K, question: a }; if (he(r, "htmx:confirm", G) === false) { oe(s); return e } } let h = r; let d = re(r, "hx-sync"); let g = null; let F = false; if (d) { const A = d.split(":"); const I = A[0].trim(); if (I === "this") { h = Ee(r, "hx-sync") } else { h = ce(fe(r, I)) } d = (A[1] || "drop").trim(); c = ie(h); if (d === "drop" && c.xhr && c.abortable !== true) { oe(s); return e } else if (d === "abort") { if (c.xhr) { oe(s); return e } else { F = true } } else if (d === "replace") { he(h, "htmx:abort") } else if (d.indexOf("queue") === 0) { const Z = d.split(" "); g = (Z[1] || "last").trim() } } if (c.xhr) { if (c.abortable) { he(h, "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 (c.queuedRequests == null) { c.queuedRequests = [] } if (g === "first" && c.queuedRequests.length === 0) { c.queuedRequests.push(function () { de(t, n, r, o, i) }) } else if (g === "all") { c.queuedRequests.push(function () { de(t, n, r, o, i) }) } else if (g === "last") { c.queuedRequests = []; c.queuedRequests.push(function () { de(t, n, r, o, i) }) } oe(s); return e } } const p = new XMLHttpRequest; c.xhr = p; c.abortable = F; const m = function () { c.xhr = null; c.abortable = false; if (c.queuedRequests != null && c.queuedRequests.length > 0) { const e = c.queuedRequests.shift(); e() } }; const U = re(r, "hx-prompt"); if (U) { var y = prompt(U); if (y === null || !he(r, "htmx:prompt", { prompt: y, target: u })) { oe(s); m(); return e } } if (a && !k) { if (!confirm(a)) { oe(s); m(); return e } } let x = hn(r, u, y); if (t !== "get" && !mn(r)) { x["Content-Type"] = "application/x-www-form-urlencoded" } if (i.headers) { x = ue(x, i.headers) } const B = cn(r, t); let b = B.errors; const j = B.formData; if (i.values) { un(j, Ln(i.values)) } const V = Ln(Cn(r)); const w = un(j, V); let v = dn(w, r); if (Q.config.getCacheBusterParam && t === "get") { v.set("org.htmx.cache-buster", ee(u, "id") || "true") } if (n == null || n === "") { n = ne().location.href } const S = wn(r, "hx-request"); const _ = ie(r).boosted; let E = Q.config.methodsThatUseUrlParams.indexOf(t) >= 0; const C = { boosted: _, useUrlParams: E, formData: v, parameters: An(v), unfilteredFormData: w, unfilteredParameters: An(w), headers: x, target: u, 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 (!he(r, "htmx:configRequest", C)) { oe(s); m(); return e } n = C.path; t = C.verb; x = C.headers; v = Ln(C.parameters); b = C.errors; E = C.useUrlParams; if (b && b.length > 0) { he(r, "htmx:validation:halted", C); oe(s); m(); return e } const $ = n.split("#"); const z = $[0]; const R = $[1]; let O = n; if (E) { O = z; const Y = !v.keys().next().done; if (Y) { if (O.indexOf("?") < 0) { O += "?" } else { O += "&" } O += an(v); if (R) { O += "#" + R } } } if (!qn(r, O, C)) { ae(r, "htmx:invalidPath", C); oe(l); return e } p.open(t.toUpperCase(), O, true); p.overrideMimeType("text/html"); p.withCredentials = C.withCredentials; p.timeout = C.timeout; if (S.noHeaders) { } else { for (const D in x) { if (x.hasOwnProperty(D)) { const W = x[D]; Rn(p, D, W) } } } const H = { xhr: p, target: u, requestConfig: C, etc: i, boosted: _, select: X, pathInfo: { requestPath: n, finalRequestPath: O, responsePath: null, anchor: R } }; p.onload = function () { try { const t = Tn(r); H.pathInfo.responsePath = On(p); M(r, H); en(T, q); he(r, "htmx:afterRequest", H); he(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) { he(e, "htmx:afterRequest", H); he(e, "htmx:afterOnLoad", H) } } oe(s); m() } catch (e) { ae(r, "htmx:onLoadError", ue({ error: e }, H)); throw e } }; p.onerror = function () { en(T, q); ae(r, "htmx:afterRequest", H); ae(r, "htmx:sendError", H); oe(l); m() }; p.onabort = function () { en(T, q); ae(r, "htmx:afterRequest", H); ae(r, "htmx:sendAbort", H); oe(l); m() }; p.ontimeout = function () { en(T, q); ae(r, "htmx:afterRequest", H); ae(r, "htmx:timeout", H); oe(l); m() }; if (!he(r, "htmx:beforeRequest", H)) { oe(s); m(); return e } var T = Wt(r); var q = Qt(r); se(["loadstart", "loadend", "progress", "abort"], function (t) { se([p, p.upload], function (e) { e.addEventListener(t, function (e) { he(r, "htmx:xhr:" + t, { lengthComputable: e.lengthComputable, loaded: e.loaded, total: e.total }) }) }) }); he(r, "htmx:beforeSend", H); const J = E ? null : yn(p, r, v); p.send(J); return e } function In(e, t) { const n = t.xhr; let r = null; let o = null; if (C(n, /HX-Push:/i)) { r = n.getResponseHeader("HX-Push"); o = "push" } else if (C(n, /HX-Push-Url:/i)) { r = n.getResponseHeader("HX-Push-Url"); o = "push" } else if (C(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 u = re(e, "hx-replace-url"); const c = ie(e).boosted; let f = null; let a = null; if (l) { f = "push"; a = l } else if (u) { f = "replace"; a = u } else if (c) { f = "push"; a = s || i } if (a) { if (a === "false") { return {} } if (a === "true") { a = s || i } if (t.pathInfo.anchor && a.indexOf("#") === -1) { a = a + "#" + t.pathInfo.anchor } return { type: f, path: a } } else { return {} } } function Pn(e, t) { var n = new RegExp(e.code); return n.test(t.toString(10)) } function Dn(e) { for (var t = 0; t < Q.config.responseHandling.length; t++) { var n = Q.config.responseHandling[t]; if (Pn(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 Mn(o, i) { const s = i.xhr; let l = i.target; const e = i.etc; const u = i.select; if (!he(o, "htmx:beforeOnLoad", i)) return; if (C(s, /HX-Trigger:/i)) { Je(s, "HX-Trigger", o) } if (C(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 } Hn("get", e, t).then(function () { Jt(e) }); return } const n = C(s, /HX-Refresh:/i) && s.getResponseHeader("HX-Refresh") === "true"; if (C(s, /HX-Redirect:/i)) { location.href = s.getResponseHeader("HX-Redirect"); n && location.reload(); return } if (n) { location.reload(); return } if (C(s, /HX-Retarget:/i)) { if (s.getResponseHeader("HX-Retarget") === "this") { i.target = o } else { i.target = ce(fe(o, s.getResponseHeader("HX-Retarget"))) } } const c = In(o, i); const r = Dn(s); const f = r.swap; let a = !!r.error; let h = Q.config.ignoreTitle || r.ignoreTitle; let d = r.select; if (r.target) { i.target = ce(fe(o, r.target)) } var g = e.swapOverride; if (g == null && r.swapOverride) { g = r.swapOverride } if (C(s, /HX-Retarget:/i)) { if (s.getResponseHeader("HX-Retarget") === "this") { i.target = o } else { i.target = ce(fe(o, s.getResponseHeader("HX-Retarget"))) } } if (C(s, /HX-Reswap:/i)) { g = s.getResponseHeader("HX-Reswap") } var p = s.response; var m = ue({ shouldSwap: f, serverResponse: p, isError: a, ignoreTitle: h, selectOverride: d }, i); if (r.event && !he(l, r.event, m)) return; if (!he(l, "htmx:beforeSwap", m)) return; l = m.target; p = m.serverResponse; a = m.isError; h = m.ignoreTitle; d = m.selectOverride; i.target = l; i.failed = a; i.successful = !a; if (m.shouldSwap) { if (s.status === 286) { ut(o) } Ut(o, function (e) { p = e.transformResponse(p, s, o) }); if (c.type) { zt() } if (C(s, /HX-Reswap:/i)) { g = s.getResponseHeader("HX-Reswap") } var y = pn(o, g); if (!y.hasOwnProperty("ignoreTitle")) { y.ignoreTitle = h } l.classList.add(Q.config.swappingClass); let n = null; let r = null; if (u) { d = u } if (C(s, /HX-Reselect:/i)) { d = s.getResponseHeader("HX-Reselect") } const x = re(o, "hx-select-oob"); const b = re(o, "hx-select"); let e = function () { try { if (c.type) { he(ne().body, "htmx:beforeHistoryUpdate", ue({ history: c }, i)); if (c.type === "push") { Jt(c.path); he(ne().body, "htmx:pushedIntoHistory", { path: c.path }) } else { Kt(c.path); he(ne().body, "htmx:replacedInHistory", { path: c.path }) } } ze(l, p, y, { select: d || b, selectOOB: x, eventInfo: i, anchor: i.pathInfo.anchor, contextElement: o, afterSwapCallback: function () { if (C(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 (C(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) { ae(o, "htmx:swapError", i); oe(r); throw e } }; let t = Q.config.globalViewTransitions; if (y.hasOwnProperty("transition")) { t = y.transition } if (t && he(o, "htmx:beforeTransition", i) && typeof Promise !== "undefined" && document.startViewTransition) { const w = new Promise(function (e, t) { n = e; r = t }); const v = e; e = function () { document.startViewTransition(function () { v(); return w }) } } if (y.swapDelay > 0) { E().setTimeout(e, y.swapDelay) } else { e() } } if (a) { ae(o, "htmx:responseError", ue({ error: "Response Status Error Code " + s.status + " from " + i.pathInfo.requestPath }, i)) } } const Xn = {}; function Fn() { 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 Un(e, t) { if (t.init) { t.init(n) } Xn[e] = ue(Fn(), t) } function Bn(e) { delete Xn[e] } function jn(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 = Xn[e]; if (t && n.indexOf(t) < 0) { n.push(t) } } }) } return jn(ce(u(e)), n, r) } var Vn = false; ne().addEventListener("DOMContentLoaded", function () { Vn = true }); function _n(e) { if (Vn || 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", " ." + Q.config.indicatorClass + "{opacity:0} ." + Q.config.requestClass + " ." + Q.config.indicatorClass + "{opacity:1; transition: opacity 200ms ease-in;} ." + Q.config.requestClass + "." + Q.config.indicatorClass + "{opacity:1; transition: opacity 200ms ease-in;} ") } } function zn() { const e = ne().querySelector('meta[name="htmx-config"]'); if (e) { return S(e.content) } else { return null } } function Jn() { const e = zn(); if (e) { Q.config = ue(Q.config, e) } } _n(function () { Jn(); $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) { Yt(); se(t, function (e) { he(e, "htmx:restored", { document: ne(), triggerEvent: he }) }) } else { if (n) { n(e) } } }; E().setTimeout(function () { he(e, "htmx:load", {}); e = null }, 0) }); return Q }(); \ No newline at end of file diff --git a/static/hyperscript/hyperscript.min.js b/static/hyperscript/hyperscript.min.js index ab174f7..68c74f5 100644 --- a/static/hyperscript/hyperscript.min.js +++ b/static/hyperscript/hyperscript.min.js @@ -1 +1 @@ -(function (e, t) { const r = t(e); if (typeof exports === "object" && typeof exports["nodeName"] !== "string") { module.exports = r } else { e["_hyperscript"] = r; if ("document" in e) e["_hyperscript"].browserInit() } })(typeof self !== "undefined" ? self : this, (e => { "use strict"; const t = { dynamicResolvers: [function (e, t) { if (e === "Fixed") { return Number(t).toFixed() } else if (e.indexOf("Fixed:") === 0) { let r = e.split(":")[1]; return Number(t).toFixed(parseInt(r)) } }], String: function (e) { if (e.toString) { return e.toString() } else { return "" + e } }, Int: function (e) { return parseInt(e) }, Float: function (e) { return parseFloat(e) }, Number: function (e) { return Number(e) }, Date: function (e) { return new Date(e) }, Array: function (e) { return Array.from(e) }, JSON: function (e) { return JSON.stringify(e) }, Object: function (e) { if (e instanceof String) { e = e.toString() } if (typeof e === "string") { return JSON.parse(e) } else { return Object.assign({}, e) } } }; const r = { attributes: "_, script, data-script", defaultTransition: "all 500ms ease-in", disableSelector: "[disable-scripting], [data-disable-scripting]", hideShowStrategies: {}, conversions: t }; class n { static OP_TABLE = { "+": "PLUS", "-": "MINUS", "*": "MULTIPLY", "/": "DIVIDE", ".": "PERIOD", "..": "ELLIPSIS", "\\": "BACKSLASH", ":": "COLON", "%": "PERCENT", "|": "PIPE", "!": "EXCLAMATION", "?": "QUESTION", "#": "POUND", "&": "AMPERSAND", $: "DOLLAR", ";": "SEMI", ",": "COMMA", "(": "L_PAREN", ")": "R_PAREN", "<": "L_ANG", ">": "R_ANG", "<=": "LTE_ANG", ">=": "GTE_ANG", "==": "EQ", "===": "EQQ", "!=": "NEQ", "!==": "NEQQ", "{": "L_BRACE", "}": "R_BRACE", "[": "L_BRACKET", "]": "R_BRACKET", "=": "EQUALS" }; static isValidCSSClassChar(e) { return n.isAlpha(e) || n.isNumeric(e) || e === "-" || e === "_" || e === ":" } static isValidCSSIDChar(e) { return n.isAlpha(e) || n.isNumeric(e) || e === "-" || e === "_" || e === ":" } static isWhitespace(e) { return e === " " || e === "\t" || n.isNewline(e) } static positionString(e) { return "[Line: " + e.line + ", Column: " + e.column + "]" } static isNewline(e) { return e === "\r" || e === "\n" } static isNumeric(e) { return e >= "0" && e <= "9" } static isAlpha(e) { return e >= "a" && e <= "z" || e >= "A" && e <= "Z" } static isIdentifierChar(e, t) { return e === "_" || e === "$" } static isReservedChar(e) { return e === "`" || e === "^" } static isValidSingleQuoteStringStart(e) { if (e.length > 0) { var t = e[e.length - 1]; if (t.type === "IDENTIFIER" || t.type === "CLASS_REF" || t.type === "ID_REF") { return false } if (t.op && (t.value === ">" || t.value === ")")) { return false } } return true } static tokenize(e, t) { var r = []; var a = e; var o = 0; var s = 0; var u = 1; var l = ""; var c = 0; function f() { return t && c === 0 } while (o < a.length) { if (S() === "-" && q() === "-" && (n.isWhitespace(N(2)) || N(2) === "" || N(2) === "-") || S() === "/" && q() === "/" && (n.isWhitespace(N(2)) || N(2) === "" || N(2) === "/")) { h() } else if (S() === "/" && q() === "*" && (n.isWhitespace(N(2)) || N(2) === "" || N(2) === "*")) { v() } else { if (n.isWhitespace(S())) { r.push(R()) } else if (!I() && S() === "." && (n.isAlpha(q()) || q() === "{" || q() === "-")) { r.push(d()) } else if (!I() && S() === "#" && (n.isAlpha(q()) || q() === "{")) { r.push(k()) } else if (S() === "[" && q() === "@") { r.push(E()) } else if (S() === "@") { r.push(T()) } else if (S() === "*" && n.isAlpha(q())) { r.push(y()) } else if (n.isAlpha(S()) || !f() && n.isIdentifierChar(S())) { r.push(x()) } else if (n.isNumeric(S())) { r.push(g()) } else if (!f() && (S() === '"' || S() === "`")) { r.push(w()) } else if (!f() && S() === "'") { if (n.isValidSingleQuoteStringStart(r)) { r.push(w()) } else { r.push(b()) } } else if (n.OP_TABLE[S()]) { if (l === "$" && S() === "{") { c++ } if (S() === "}") { c-- } r.push(b()) } else if (f() || n.isReservedChar(S())) { r.push(p("RESERVED", C())) } else { if (o < a.length) { throw Error("Unknown token: " + S() + " ") } } } } return new i(r, [], a); function m(e, t) { var r = p(e, t); r.op = true; return r } function p(e, t) { return { type: e, value: t || "", start: o, end: o + 1, column: s, line: u } } function h() { while (S() && !n.isNewline(S())) { C() } C() } function v() { while (S() && !(S() === "*" && q() === "/")) { C() } C(); C() } function d() { var e = p("CLASS_REF"); var t = C(); if (S() === "{") { e.template = true; t += C(); while (S() && S() !== "}") { t += C() } if (S() !== "}") { throw Error("Unterminated class reference") } else { t += C() } } else { while (n.isValidCSSClassChar(S())) { t += C() } } e.value = t; e.end = o; return e } function E() { var e = p("ATTRIBUTE_REF"); var t = C(); while (o < a.length && S() !== "]") { t += C() } if (S() === "]") { t += C() } e.value = t; e.end = o; return e } function T() { var e = p("ATTRIBUTE_REF"); var t = C(); while (n.isValidCSSIDChar(S())) { t += C() } if (S() === "=") { t += C(); if (S() === '"' || S() === "'") { let e = w(); t += e.value } else if (n.isAlpha(S()) || n.isNumeric(S()) || n.isIdentifierChar(S())) { let e = x(); t += e.value } } e.value = t; e.end = o; return e } function y() { var e = p("STYLE_REF"); var t = C(); while (n.isAlpha(S()) || S() === "-") { t += C() } e.value = t; e.end = o; return e } function k() { var e = p("ID_REF"); var t = C(); if (S() === "{") { e.template = true; t += C(); while (S() && S() !== "}") { t += C() } if (S() !== "}") { throw Error("Unterminated id reference") } else { C() } } else { while (n.isValidCSSIDChar(S())) { t += C() } } e.value = t; e.end = o; return e } function x() { var e = p("IDENTIFIER"); var t = C(); while (n.isAlpha(S()) || n.isNumeric(S()) || n.isIdentifierChar(S())) { t += C() } if (S() === "!" && t === "beep") { t += C() } e.value = t; e.end = o; return e } function g() { var e = p("NUMBER"); var t = C(); while (n.isNumeric(S())) { t += C() } if (S() === "." && n.isNumeric(q())) { t += C() } while (n.isNumeric(S())) { t += C() } if (S() === "e" || S() === "E") { if (n.isNumeric(q())) { t += C() } else if (q() === "-") { t += C(); t += C() } } while (n.isNumeric(S())) { t += C() } e.value = t; e.end = o; return e } function b() { var e = m(); var t = C(); while (S() && n.OP_TABLE[t + S()]) { t += C() } e.type = n.OP_TABLE[t]; e.value = t; e.end = o; return e } function w() { var e = p("STRING"); var t = C(); var r = ""; while (S() && S() !== t) { if (S() === "\\") { C(); let e = C(); if (e === "b") { r += "\b" } else if (e === "f") { r += "\f" } else if (e === "n") { r += "\n" } else if (e === "r") { r += "\r" } else if (e === "t") { r += "\t" } else if (e === "v") { r += "\v" } else { r += e } } else { r += C() } } if (S() !== t) { throw Error("Unterminated string at " + n.positionString(e)) } else { C() } e.value = r; e.end = o; e.template = t === "`"; return e } function S() { return a.charAt(o) } function q() { return a.charAt(o + 1) } function N(e = 1) { return a.charAt(o + e) } function C() { l = S(); o++; s++; return l } function I() { return n.isAlpha(l) || n.isNumeric(l) || l === ")" || l === '"' || l === "'" || l === "`" || l === "}" || l === "]" } function R() { var e = p("WHITESPACE"); var t = ""; while (S() && n.isWhitespace(S())) { if (n.isNewline(S())) { s = 0; u++ } t += C() } e.value = t; e.end = o; return e } } tokenize(e, t) { return n.tokenize(e, t) } } class i { constructor(e, t, r) { this.tokens = e; this.consumed = t; this.source = r; this.consumeWhitespace() } get list() { return this.tokens } _lastConsumed = null; consumeWhitespace() { while (this.token(0, true).type === "WHITESPACE") { this.consumed.push(this.tokens.shift()) } } raiseError(e, t) { a.raiseParseError(e, t) } requireOpToken(e) { var t = this.matchOpToken(e); if (t) { return t } else { this.raiseError(this, "Expected '" + e + "' but found '" + this.currentToken().value + "'") } } matchAnyOpToken(e, t, r) { for (var n = 0; n < arguments.length; n++) { var i = arguments[n]; var a = this.matchOpToken(i); if (a) { return a } } } matchAnyToken(e, t, r) { for (var n = 0; n < arguments.length; n++) { var i = arguments[n]; var a = this.matchToken(i); if (a) { return a } } } matchOpToken(e) { if (this.currentToken() && this.currentToken().op && this.currentToken().value === e) { return this.consumeToken() } } requireTokenType(e, t, r, n) { var i = this.matchTokenType(e, t, r, n); if (i) { return i } else { this.raiseError(this, "Expected one of " + JSON.stringify([e, t, r])) } } matchTokenType(e, t, r, n) { if (this.currentToken() && this.currentToken().type && [e, t, r, n].indexOf(this.currentToken().type) >= 0) { return this.consumeToken() } } requireToken(e, t) { var r = this.matchToken(e, t); if (r) { return r } else { this.raiseError(this, "Expected '" + e + "' but found '" + this.currentToken().value + "'") } } peekToken(e, t, r) { t = t || 0; r = r || "IDENTIFIER"; if (this.tokens[t] && this.tokens[t].value === e && this.tokens[t].type === r) { return this.tokens[t] } } matchToken(e, t) { if (this.follows.indexOf(e) !== -1) { return } t = t || "IDENTIFIER"; if (this.currentToken() && this.currentToken().value === e && this.currentToken().type === t) { return this.consumeToken() } } consumeToken() { var e = this.tokens.shift(); this.consumed.push(e); this._lastConsumed = e; this.consumeWhitespace(); return e } consumeUntil(e, t) { var r = []; var n = this.token(0, true); while ((t == null || n.type !== t) && (e == null || n.value !== e) && n.type !== "EOF") { var i = this.tokens.shift(); this.consumed.push(i); r.push(n); n = this.token(0, true) } this.consumeWhitespace(); return r } lastWhitespace() { if (this.consumed[this.consumed.length - 1] && this.consumed[this.consumed.length - 1].type === "WHITESPACE") { return this.consumed[this.consumed.length - 1].value } else { return "" } } consumeUntilWhitespace() { return this.consumeUntil(null, "WHITESPACE") } hasMore() { return this.tokens.length > 0 } token(e, t) { var r; var n = 0; do { if (!t) { while (this.tokens[n] && this.tokens[n].type === "WHITESPACE") { n++ } } r = this.tokens[n]; e--; n++ } while (e > -1); if (r) { return r } else { return { type: "EOF", value: "<<>>" } } } currentToken() { return this.token(0) } lastMatch() { return this._lastConsumed } static sourceFor = function () { return this.programSource.substring(this.startToken.start, this.endToken.end) }; static lineFor = function () { return this.programSource.split("\n")[this.startToken.line - 1] }; follows = []; pushFollow(e) { this.follows.push(e) } popFollow() { this.follows.pop() } clearFollows() { var e = this.follows; this.follows = []; return e } restoreFollows(e) { this.follows = e } } class a { constructor(e) { this.runtime = e; this.possessivesDisabled = false; this.addGrammarElement("feature", (function (e, t, r) { if (r.matchOpToken("(")) { var n = e.requireElement("feature", r); r.requireOpToken(")"); return n } var i = e.FEATURES[r.currentToken().value || ""]; if (i) { return i(e, t, r) } })); this.addGrammarElement("command", (function (e, t, r) { if (r.matchOpToken("(")) { const t = e.requireElement("command", r); r.requireOpToken(")"); return t } var n = e.COMMANDS[r.currentToken().value || ""]; let i; if (n) { i = n(e, t, r) } else if (r.currentToken().type === "IDENTIFIER") { i = e.parseElement("pseudoCommand", r) } if (i) { return e.parseElement("indirectStatement", r, i) } return i })); this.addGrammarElement("commandList", (function (e, t, r) { if (r.hasMore()) { var n = e.parseElement("command", r); if (n) { r.matchToken("then"); const t = e.parseElement("commandList", r); if (t) n.next = t; return n } } return { type: "emptyCommandListCommand", op: function (e) { return t.findNext(this, e) }, execute: function (e) { return t.unifiedExec(this, e) } } })); this.addGrammarElement("leaf", (function (e, t, r) { var n = e.parseAnyOf(e.LEAF_EXPRESSIONS, r); if (n == null) { return e.parseElement("symbol", r) } return n })); this.addGrammarElement("indirectExpression", (function (e, t, r, n) { for (var i = 0; i < e.INDIRECT_EXPRESSIONS.length; i++) { var a = e.INDIRECT_EXPRESSIONS[i]; n.endToken = r.lastMatch(); var o = e.parseElement(a, r, n); if (o) { return o } } return n })); this.addGrammarElement("indirectStatement", (function (e, t, r, n) { if (r.matchToken("unless")) { n.endToken = r.lastMatch(); var i = e.requireElement("expression", r); var a = { type: "unlessStatementModifier", args: [i], op: function (e, t) { if (t) { return this.next } else { return n } }, execute: function (e) { return t.unifiedExec(this, e) } }; n.parent = a; return a } return n })); this.addGrammarElement("primaryExpression", (function (e, t, r) { var n = e.parseElement("leaf", r); if (n) { return e.parseElement("indirectExpression", r, n) } e.raiseParseError(r, "Unexpected value: " + r.currentToken().value) })) } use(e) { e(this); return this } GRAMMAR = {}; COMMANDS = {}; FEATURES = {}; LEAF_EXPRESSIONS = []; INDIRECT_EXPRESSIONS = []; initElt(e, t, r) { e.startToken = t; e.sourceFor = i.sourceFor; e.lineFor = i.lineFor; e.programSource = r.source } parseElement(e, t, r = undefined) { var n = this.GRAMMAR[e]; if (n) { var i = t.currentToken(); var a = n(this, this.runtime, t, r); if (a) { this.initElt(a, i, t); a.endToken = a.endToken || t.lastMatch(); var r = a.root; while (r != null) { this.initElt(r, i, t); r = r.root } } return a } } requireElement(e, t, r, n) { var i = this.parseElement(e, t, n); if (!i) a.raiseParseError(t, r || "Expected " + e); return i } parseAnyOf(e, t) { for (var r = 0; r < e.length; r++) { var n = e[r]; var i = this.parseElement(n, t); if (i) { return i } } } addGrammarElement(e, t) { this.GRAMMAR[e] = t } addCommand(e, t) { var r = e + "Command"; var n = function (e, n, i) { const a = t(e, n, i); if (a) { a.type = r; a.execute = function (e) { e.meta.command = a; return n.unifiedExec(this, e) }; return a } }; this.GRAMMAR[r] = n; this.COMMANDS[e] = n } addFeature(e, t) { var r = e + "Feature"; var n = function (n, i, a) { var o = t(n, i, a); if (o) { o.isFeature = true; o.keyword = e; o.type = r; return o } }; this.GRAMMAR[r] = n; this.FEATURES[e] = n } addLeafExpression(e, t) { this.LEAF_EXPRESSIONS.push(e); this.addGrammarElement(e, t) } addIndirectExpression(e, t) { this.INDIRECT_EXPRESSIONS.push(e); this.addGrammarElement(e, t) } static createParserContext(e) { var t = e.currentToken(); var r = e.source; var n = r.split("\n"); var i = t && t.line ? t.line - 1 : n.length - 1; var a = n[i]; var o = t && t.line ? t.column : a.length - 1; return a + "\n" + " ".repeat(o) + "^^\n\n" } static raiseParseError(e, t) { t = (t || "Unexpected Token : " + e.currentToken().value) + "\n\n" + a.createParserContext(e); var r = new Error(t); r["tokens"] = e; throw r } raiseParseError(e, t) { a.raiseParseError(e, t) } parseHyperScript(e) { var t = this.parseElement("hyperscript", e); if (e.hasMore()) this.raiseParseError(e); if (t) return t } setParent(e, t) { if (typeof e === "object") { e.parent = t; if (typeof t === "object") { t.children = t.children || new Set; t.children.add(e) } this.setParent(e.next, t) } } commandStart(e) { return this.COMMANDS[e.value || ""] } featureStart(e) { return this.FEATURES[e.value || ""] } commandBoundary(e) { if (e.value == "end" || e.value == "then" || e.value == "else" || e.value == "otherwise" || e.value == ")" || this.commandStart(e) || this.featureStart(e) || e.type == "EOF") { return true } return false } parseStringTemplate(e) { var t = [""]; do { t.push(e.lastWhitespace()); if (e.currentToken().value === "$") { e.consumeToken(); var r = e.matchOpToken("{"); t.push(this.requireElement("expression", e)); if (r) { e.requireOpToken("}") } t.push("") } else if (e.currentToken().value === "\\") { e.consumeToken(); e.consumeToken() } else { var n = e.consumeToken(); t[t.length - 1] += n ? n.value : "" } } while (e.hasMore()); t.push(e.lastWhitespace()); return t } ensureTerminated(e) { const t = this.runtime; var r = { type: "implicitReturn", op: function (e) { e.meta.returned = true; if (e.meta.resolve) { e.meta.resolve() } return t.HALT }, execute: function (e) { } }; var n = e; while (n.next) { n = n.next } n.next = r } } class o { constructor(e, t) { this.lexer = e ?? new n; this.parser = t ?? new a(this).use(T).use(y); this.parser.runtime = this } matchesSelector(e, t) { var r = e.matches || e.matchesSelector || e.msMatchesSelector || e.mozMatchesSelector || e.webkitMatchesSelector || e.oMatchesSelector; return r && r.call(e, t) } makeEvent(t, r) { var n; if (e.Event && typeof e.Event === "function") { n = new Event(t, { bubbles: true, cancelable: true }); n["detail"] = r } else { n = document.createEvent("CustomEvent"); n.initCustomEvent(t, true, true, r) } return n } triggerEvent(e, t, r, n) { r = r || {}; r["sender"] = n; var i = this.makeEvent(t, r); var a = e.dispatchEvent(i); return a } isArrayLike(e) { return Array.isArray(e) || typeof NodeList !== "undefined" && (e instanceof NodeList || e instanceof HTMLCollection) } isIterable(e) { return typeof e === "object" && Symbol.iterator in e && typeof e[Symbol.iterator] === "function" } shouldAutoIterate(e) { return e != null && e[p] || this.isArrayLike(e) } forEach(e, t) { if (e == null) { } else if (this.isIterable(e)) { for (const r of e) { t(r) } } else if (this.isArrayLike(e)) { for (var r = 0; r < e.length; r++) { t(e[r]) } } else { t(e) } } implicitLoop(e, t) { if (this.shouldAutoIterate(e)) { for (const r of e) t(r) } else { t(e) } } wrapArrays(e) { var t = []; for (var r = 0; r < e.length; r++) { var n = e[r]; if (Array.isArray(n)) { t.push(Promise.all(n)) } else { t.push(n) } } return t } unwrapAsyncs(e) { for (var t = 0; t < e.length; t++) { var r = e[t]; if (r.asyncWrapper) { e[t] = r.value } if (Array.isArray(r)) { for (var n = 0; n < r.length; n++) { var i = r[n]; if (i.asyncWrapper) { r[n] = i.value } } } } } static HALT = {}; HALT = o.HALT; unifiedExec(e, t) { while (true) { try { var r = this.unifiedEval(e, t) } catch (n) { if (t.meta.handlingFinally) { console.error(" Exception in finally block: ", n); r = o.HALT } else { this.registerHyperTrace(t, n); if (t.meta.errorHandler && !t.meta.handlingError) { t.meta.handlingError = true; t.locals[t.meta.errorSymbol] = n; e = t.meta.errorHandler; continue } else { t.meta.currentException = n; r = o.HALT } } } if (r == null) { console.error(e, " did not return a next element to execute! context: ", t); return } else if (r.then) { r.then((e => { this.unifiedExec(e, t) })).catch((e => { this.unifiedExec({ op: function () { throw e } }, t) })); return } else if (r === o.HALT) { if (t.meta.finallyHandler && !t.meta.handlingFinally) { t.meta.handlingFinally = true; e = t.meta.finallyHandler } else { if (t.meta.onHalt) { t.meta.onHalt() } if (t.meta.currentException) { if (t.meta.reject) { t.meta.reject(t.meta.currentException); return } else { throw t.meta.currentException } } else { return } } } else { e = r } } } unifiedEval(e, t) { var r = [t]; var n = false; var i = false; if (e.args) { for (var a = 0; a < e.args.length; a++) { var o = e.args[a]; if (o == null) { r.push(null) } else if (Array.isArray(o)) { var s = []; for (var u = 0; u < o.length; u++) { var l = o[u]; var c = l ? l.evaluate(t) : null; if (c) { if (c.then) { n = true } else if (c.asyncWrapper) { i = true } } s.push(c) } r.push(s) } else if (o.evaluate) { var c = o.evaluate(t); if (c) { if (c.then) { n = true } else if (c.asyncWrapper) { i = true } } r.push(c) } else { r.push(o) } } } if (n) { return new Promise(((t, n) => { r = this.wrapArrays(r); Promise.all(r).then((function (r) { if (i) { this.unwrapAsyncs(r) } try { var a = e.op.apply(e, r); t(a) } catch (e) { n(e) } })).catch((function (e) { n(e) })) })) } else { if (i) { this.unwrapAsyncs(r) } return e.op.apply(e, r) } } _scriptAttrs = null; getScriptAttributes() { if (this._scriptAttrs == null) { this._scriptAttrs = r.attributes.replace(/ /g, "").split(",") } return this._scriptAttrs } getScript(e) { for (var t = 0; t < this.getScriptAttributes().length; t++) { var r = this.getScriptAttributes()[t]; if (e.hasAttribute && e.hasAttribute(r)) { return e.getAttribute(r) } } if (e instanceof HTMLScriptElement && e.type === "text/hyperscript") { return e.innerText } return null } hyperscriptFeaturesMap = new WeakMap; getHyperscriptFeatures(e) { var t = this.hyperscriptFeaturesMap.get(e); if (typeof t === "undefined") { if (e) { this.hyperscriptFeaturesMap.set(e, t = {}) } } return t } addFeatures(e, t) { if (e) { Object.assign(t.locals, this.getHyperscriptFeatures(e)); this.addFeatures(e.parentElement, t) } } makeContext(e, t, r, n) { return new f(e, t, r, n, this) } getScriptSelector() { return this.getScriptAttributes().map((function (e) { return "[" + e + "]" })).join(", ") } convertValue(e, r) { var n = t.dynamicResolvers; for (var i = 0; i < n.length; i++) { var a = n[i]; var o = a(r, e); if (o !== undefined) { return o } } if (e == null) { return null } var s = t[r]; if (s) { return s(e) } throw "Unknown conversion : " + r } parse(e) { const t = this.lexer, r = this.parser; var n = t.tokenize(e); if (this.parser.commandStart(n.currentToken())) { var i = r.requireElement("commandList", n); if (n.hasMore()) r.raiseParseError(n); r.ensureTerminated(i); return i } else if (r.featureStart(n.currentToken())) { var a = r.requireElement("hyperscript", n); if (n.hasMore()) r.raiseParseError(n); return a } else { var o = r.requireElement("expression", n); if (n.hasMore()) r.raiseParseError(n); return o } } evaluateNoPromise(e, t) { let r = e.evaluate(t); if (r.next) { throw new Error(i.sourceFor.call(e) + " returned a Promise in a context that they are not allowed.") } return r } evaluate(t, r, n) { class i extends EventTarget { constructor(e) { super(); this.module = e } toString() { return this.module.id } } var a = "document" in e ? e.document.body : new i(n && n.module); r = Object.assign(this.makeContext(a, null, a, null), r || {}); var o = this.parse(t); if (o.execute) { o.execute(r); return r.result } else if (o.apply) { o.apply(a, a, n); return this.getHyperscriptFeatures(a) } else { return o.evaluate(r) } function s() { return {} } } processNode(e) { var t = this.getScriptSelector(); if (this.matchesSelector(e, t)) { this.initElement(e, e) } if (e instanceof HTMLScriptElement && e.type === "text/hyperscript") { this.initElement(e, document.body) } if (e.querySelectorAll) { this.forEach(e.querySelectorAll(t + ", [type='text/hyperscript']"), (e => { this.initElement(e, e instanceof HTMLScriptElement && e.type === "text/hyperscript" ? document.body : e) })) } } initElement(e, t) { if (e.closest && e.closest(r.disableSelector)) { return } var n = this.getInternalData(e); if (!n.initialized) { var i = this.getScript(e); if (i) { try { n.initialized = true; n.script = i; const r = this.lexer, s = this.parser; var a = r.tokenize(i); var o = s.parseHyperScript(a); if (!o) return; o.apply(t || e, e); setTimeout((() => { this.triggerEvent(t || e, "load", { hyperscript: true }) }), 1) } catch (t) { this.triggerEvent(e, "exception", { error: t }); console.error("hyperscript errors were found on the following element:", e, "\n\n", t.message, t.stack) } } } } internalDataMap = new WeakMap; getInternalData(e) { var t = this.internalDataMap.get(e); if (typeof t === "undefined") { this.internalDataMap.set(e, t = {}) } return t } typeCheck(e, t, r) { if (e == null && r) { return true } var n = Object.prototype.toString.call(e).slice(8, -1); return n === t } getElementScope(e) { var t = e.meta && e.meta.owner; if (t) { var r = this.getInternalData(t); var n = "elementScope"; if (e.meta.feature && e.meta.feature.behavior) { n = e.meta.feature.behavior + "Scope" } var i = h(r, n); return i } else { return {} } } isReservedWord(e) { return ["meta", "it", "result", "locals", "event", "target", "detail", "sender", "body"].includes(e) } isHyperscriptContext(e) { return e instanceof f } resolveSymbol(t, r, n) { if (t === "me" || t === "my" || t === "I") { return r.me } if (t === "it" || t === "its" || t === "result") { return r.result } if (t === "you" || t === "your" || t === "yourself") { return r.you } else { if (n === "global") { return e[t] } else if (n === "element") { var i = this.getElementScope(r); return i[t] } else if (n === "local") { return r.locals[t] } else { if (r.meta && r.meta.context) { var a = r.meta.context[t]; if (typeof a !== "undefined") { return a } if (r.meta.context.detail) { a = r.meta.context.detail[t]; if (typeof a !== "undefined") { return a } } } if (this.isHyperscriptContext(r) && !this.isReservedWord(t)) { var o = r.locals[t] } else { var o = r[t] } if (typeof o !== "undefined") { return o } else { var i = this.getElementScope(r); o = i[t]; if (typeof o !== "undefined") { return o } else { return e[t] } } } } } setSymbol(t, r, n, i) { if (n === "global") { e[t] = i } else if (n === "element") { var a = this.getElementScope(r); a[t] = i } else if (n === "local") { r.locals[t] = i } else { if (this.isHyperscriptContext(r) && !this.isReservedWord(t) && typeof r.locals[t] !== "undefined") { r.locals[t] = i } else { var a = this.getElementScope(r); var o = a[t]; if (typeof o !== "undefined") { a[t] = i } else { if (this.isHyperscriptContext(r) && !this.isReservedWord(t)) { r.locals[t] = i } else { r[t] = i } } } } } findNext(e, t) { if (e) { if (e.resolveNext) { return e.resolveNext(t) } else if (e.next) { return e.next } else { return this.findNext(e.parent, t) } } } flatGet(e, t, r) { if (e != null) { var n = r(e, t); if (typeof n !== "undefined") { return n } if (this.shouldAutoIterate(e)) { var i = []; for (var a of e) { var o = r(a, t); i.push(o) } return i } } } resolveProperty(e, t) { return this.flatGet(e, t, ((e, t) => e[t])) } resolveAttribute(e, t) { return this.flatGet(e, t, ((e, t) => e.getAttribute && e.getAttribute(t))) } resolveStyle(e, t) { return this.flatGet(e, t, ((e, t) => e.style && e.style[t])) } resolveComputedStyle(e, t) { return this.flatGet(e, t, ((e, t) => getComputedStyle(e).getPropertyValue(t))) } assignToNamespace(t, r, n, i) { let a; if (typeof document !== "undefined" && t === document.body) { a = e } else { a = this.getHyperscriptFeatures(t) } var o; while ((o = r.shift()) !== undefined) { var s = a[o]; if (s == null) { s = {}; a[o] = s } a = s } a[n] = i } getHyperTrace(e, t) { var r = []; var n = e; while (n.meta.caller) { n = n.meta.caller } if (n.meta.traceMap) { return n.meta.traceMap.get(t, r) } } registerHyperTrace(e, t) { var r = []; var n = null; while (e != null) { r.push(e); n = e; e = e.meta.caller } if (n.meta.traceMap == null) { n.meta.traceMap = new Map } if (!n.meta.traceMap.get(t)) { var i = { trace: r, print: function (e) { e = e || console.error; e("hypertrace /// "); var t = 0; for (var n = 0; n < r.length; n++) { t = Math.max(t, r[n].meta.feature.displayName.length) } for (var n = 0; n < r.length; n++) { var i = r[n]; e(" ->", i.meta.feature.displayName.padEnd(t + 2), "-", i.meta.owner) } } }; n.meta.traceMap.set(t, i) } } escapeSelector(e) { return e.replace(/:/g, (function (e) { return "\\" + e })) } nullCheck(e, t) { if (e == null) { throw new Error("'" + t.sourceFor() + "' is null") } } isEmpty(e) { return e == undefined || e.length === 0 } doesExist(e) { if (e == null) { return false } if (this.shouldAutoIterate(e)) { for (const t of e) { return true } return false } return true } getRootNode(e) { if (e && e instanceof Node) { var t = e.getRootNode(); if (t instanceof Document || t instanceof ShadowRoot) return t } return document } getEventQueueFor(e, t) { let r = this.getInternalData(e); var n = r.eventQueues; if (n == null) { n = new Map; r.eventQueues = n } var i = n.get(t); if (i == null) { i = { queue: [], executing: false }; n.set(t, i) } return i } beepValueToConsole(e, t, r) { if (this.triggerEvent(e, "hyperscript:beep", { element: e, expression: t, value: r })) { var n; if (r) { if (r instanceof m) { n = "ElementCollection" } else if (r.constructor) { n = r.constructor.name } else { n = "unknown" } } else { n = "object (null)" } var a = r; if (n === "String") { a = '"' + a + '"' } else if (r instanceof m) { a = Array.from(r) } console.log("///_ BEEP! The expression (" + i.sourceFor.call(t).replace("beep! ", "") + ") evaluates to:", a, "of type " + n) } } hyperscriptUrl = "document" in e && document.currentScript ? document.currentScript.src : null } function s() { let e = document.cookie.split("; ").map((e => { let t = e.split("="); return { name: t[0], value: decodeURIComponent(t[1]) } })); return e } function u(e) { document.cookie = e + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT" } function l() { for (const e of s()) { u(e.name) } } const c = new Proxy({}, { get(e, t) { if (t === "then" || t === "asyncWrapper") { return null } else if (t === "length") { return s().length } else if (t === "clear") { return u } else if (t === "clearAll") { return l } else if (typeof t === "string") { if (!isNaN(t)) { return s()[parseInt(t)] } else { let e = document.cookie.split("; ").find((e => e.startsWith(t + "=")))?.split("=")[1]; if (e) { return decodeURIComponent(e) } } } else if (t === Symbol.iterator) { return s()[t] } }, set(e, t, r) { var n = null; if ("string" === typeof r) { n = encodeURIComponent(r); n += ";samesite=lax" } else { n = encodeURIComponent(r.value); if (r.expires) { n += ";expires=" + r.maxAge } if (r.maxAge) { n += ";max-age=" + r.maxAge } if (r.partitioned) { n += ";partitioned=" + r.partitioned } if (r.path) { n += ";path=" + r.path } if (r.samesite) { n += ";samesite=" + r.path } if (r.secure) { n += ";secure=" + r.path } } document.cookie = t + "=" + n; return true } }); class f { constructor(t, r, n, i, a) { this.meta = { parser: a.parser, lexer: a.lexer, runtime: a, owner: t, feature: r, iterators: {}, ctx: this }; this.locals = { cookies: c }; this.me = n, this.you = undefined; this.result = undefined; this.event = i; this.target = i ? i.target : null; this.detail = i ? i.detail : null; this.sender = i ? i.detail ? i.detail.sender : null : null; this.body = "document" in e ? document.body : null; a.addFeatures(t, this) } } class m { constructor(e, t, r) { this._css = e; this.relativeToElement = t; this.escape = r; this[p] = true } get css() { if (this.escape) { return o.prototype.escapeSelector(this._css) } else { return this._css } } get className() { return this._css.substr(1) } get id() { return this.className() } contains(e) { for (let t of this) { if (t.contains(e)) { return true } } return false } get length() { return this.selectMatches().length } [Symbol.iterator]() { let e = this.selectMatches(); return e[Symbol.iterator]() } selectMatches() { let e = o.prototype.getRootNode(this.relativeToElement).querySelectorAll(this.css); return e } } const p = Symbol(); function h(e, t) { var r = e[t]; if (r) { return r } else { var n = {}; e[t] = n; return n } } function v(e) { try { return JSON.parse(e) } catch (e) { d(e); return null } } function d(e) { if (console.error) { console.error(e) } else if (console.log) { console.log("ERROR: ", e) } } function E(e, t) { return new (e.bind.apply(e, [e].concat(t))) } function T(t) { t.addLeafExpression("parenthesized", (function (e, t, r) { if (r.matchOpToken("(")) { var n = r.clearFollows(); try { var i = e.requireElement("expression", r) } finally { r.restoreFollows(n) } r.requireOpToken(")"); return i } })); t.addLeafExpression("string", (function (e, t, r) { var i = r.matchTokenType("STRING"); if (!i) return; var a = i.value; var o; if (i.template) { var s = n.tokenize(a, true); o = e.parseStringTemplate(s) } else { o = [] } return { type: "string", token: i, args: o, op: function (e) { var t = ""; for (var r = 1; r < arguments.length; r++) { var n = arguments[r]; if (n !== undefined) { t += n } } return t }, evaluate: function (e) { if (o.length === 0) { return a } else { return t.unifiedEval(this, e) } } } })); t.addGrammarElement("nakedString", (function (e, t, r) { if (r.hasMore()) { var n = r.consumeUntilWhitespace(); r.matchTokenType("WHITESPACE"); return { type: "nakedString", tokens: n, evaluate: function (e) { return n.map((function (e) { return e.value })).join("") } } } })); t.addLeafExpression("number", (function (e, t, r) { var n = r.matchTokenType("NUMBER"); if (!n) return; var i = n; var a = parseFloat(n.value); return { type: "number", value: a, numberToken: i, evaluate: function () { return a } } })); t.addLeafExpression("idRef", (function (e, t, r) { var i = r.matchTokenType("ID_REF"); if (!i) return; if (!i.value) return; if (i.template) { var a = i.value.substring(2); var o = n.tokenize(a); var s = e.requireElement("expression", o); return { type: "idRefTemplate", args: [s], op: function (e, r) { return t.getRootNode(e.me).getElementById(r) }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { const e = i.value.substring(1); return { type: "idRef", css: i.value, value: e, evaluate: function (r) { return t.getRootNode(r.me).getElementById(e) } } } })); t.addLeafExpression("classRef", (function (e, t, r) { var i = r.matchTokenType("CLASS_REF"); if (!i) return; if (!i.value) return; if (i.template) { var a = i.value.substring(2); var o = n.tokenize(a); var s = e.requireElement("expression", o); return { type: "classRefTemplate", args: [s], op: function (e, t) { return new m("." + t, e.me, true) }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { const e = i.value; return { type: "classRef", css: e, evaluate: function (t) { return new m(e, t.me, true) } } } })); class r extends m { constructor(e, t, r) { super(e, t); this.templateParts = r; this.elements = r.filter((e => e instanceof Element)) } get css() { let e = "", t = 0; for (const r of this.templateParts) { if (r instanceof Element) { e += "[data-hs-query-id='" + t++ + "']" } else e += r } return e } [Symbol.iterator]() { this.elements.forEach(((e, t) => e.dataset.hsQueryId = t)); const e = super[Symbol.iterator](); this.elements.forEach((e => e.removeAttribute("data-hs-query-id"))); return e } } t.addLeafExpression("queryRef", (function (e, t, i) { var a = i.matchOpToken("<"); if (!a) return; var o = i.consumeUntil("/"); i.requireOpToken("/"); i.requireOpToken(">"); var s = o.map((function (e) { if (e.type === "STRING") { return '"' + e.value + '"' } else { return e.value } })).join(""); var u, l, c; if (s.indexOf("$") >= 0) { u = true; l = n.tokenize(s, true); c = e.parseStringTemplate(l) } return { type: "queryRef", css: s, args: c, op: function (e, ...t) { if (u) { return new r(s, e.me, t) } else { return new m(s, e.me) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("attributeRef", (function (e, t, r) { var n = r.matchTokenType("ATTRIBUTE_REF"); if (!n) return; if (!n.value) return; var i = n.value; if (i.indexOf("[") === 0) { var a = i.substring(2, i.length - 1) } else { var a = i.substring(1) } var o = "[" + a + "]"; var s = a.split("="); var u = s[0]; var l = s[1]; if (l) { if (l.indexOf('"') === 0) { l = l.substring(1, l.length - 1) } } return { type: "attributeRef", name: u, css: o, value: l, op: function (e) { var t = e.you || e.me; if (t) { return t.getAttribute(u) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("styleRef", (function (e, t, r) { var n = r.matchTokenType("STYLE_REF"); if (!n) return; if (!n.value) return; var i = n.value.substr(1); if (i.startsWith("computed-")) { i = i.substr("computed-".length); return { type: "computedStyleRef", name: i, op: function (e) { var r = e.you || e.me; if (r) { return t.resolveComputedStyle(r, i) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { return { type: "styleRef", name: i, op: function (e) { var r = e.you || e.me; if (r) { return t.resolveStyle(r, i) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } })); t.addGrammarElement("objectKey", (function (e, t, r) { var n; if (n = r.matchTokenType("STRING")) { return { type: "objectKey", key: n.value, evaluate: function () { return n.value } } } else if (r.matchOpToken("[")) { var i = e.parseElement("expression", r); r.requireOpToken("]"); return { type: "objectKey", expr: i, args: [i], op: function (e, t) { return t }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { var a = ""; do { n = r.matchTokenType("IDENTIFIER") || r.matchOpToken("-"); if (n) a += n.value } while (n); return { type: "objectKey", key: a, evaluate: function () { return a } } } })); t.addLeafExpression("objectLiteral", (function (e, t, r) { if (!r.matchOpToken("{")) return; var n = []; var i = []; if (!r.matchOpToken("}")) { do { var a = e.requireElement("objectKey", r); r.requireOpToken(":"); var o = e.requireElement("expression", r); i.push(o); n.push(a) } while (r.matchOpToken(",")); r.requireOpToken("}") } return { type: "objectLiteral", args: [n, i], op: function (e, t, r) { var n = {}; for (var i = 0; i < t.length; i++) { n[t[i]] = r[i] } return n }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("nakedNamedArgumentList", (function (e, t, r) { var n = []; var i = []; if (r.currentToken().type === "IDENTIFIER") { do { var a = r.requireTokenType("IDENTIFIER"); r.requireOpToken(":"); var o = e.requireElement("expression", r); i.push(o); n.push({ name: a, value: o }) } while (r.matchOpToken(",")) } return { type: "namedArgumentList", fields: n, args: [i], op: function (e, t) { var r = { _namedArgList_: true }; for (var i = 0; i < t.length; i++) { var a = n[i]; r[a.name.value] = t[i] } return r }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("namedArgumentList", (function (e, t, r) { if (!r.matchOpToken("(")) return; var n = e.requireElement("nakedNamedArgumentList", r); r.requireOpToken(")"); return n })); t.addGrammarElement("symbol", (function (e, t, r) { var n = "default"; if (r.matchToken("global")) { n = "global" } else if (r.matchToken("element") || r.matchToken("module")) { n = "element"; if (r.matchOpToken("'")) { r.requireToken("s") } } else if (r.matchToken("local")) { n = "local" } let i = r.matchOpToken(":"); let a = r.matchTokenType("IDENTIFIER"); if (a && a.value) { var o = a.value; if (i) { o = ":" + o } if (n === "default") { if (o.indexOf("$") === 0) { n = "global" } if (o.indexOf(":") === 0) { n = "element" } } return { type: "symbol", token: a, scope: n, name: o, evaluate: function (e) { return t.resolveSymbol(o, e, n) } } } })); t.addGrammarElement("implicitMeTarget", (function (e, t, r) { return { type: "implicitMeTarget", evaluate: function (e) { return e.you || e.me } } })); t.addLeafExpression("boolean", (function (e, t, r) { var n = r.matchToken("true") || r.matchToken("false"); if (!n) return; const i = n.value === "true"; return { type: "boolean", evaluate: function (e) { return i } } })); t.addLeafExpression("null", (function (e, t, r) { if (r.matchToken("null")) { return { type: "null", evaluate: function (e) { return null } } } })); t.addLeafExpression("arrayLiteral", (function (e, t, r) { if (!r.matchOpToken("[")) return; var n = []; if (!r.matchOpToken("]")) { do { var i = e.requireElement("expression", r); n.push(i) } while (r.matchOpToken(",")); r.requireOpToken("]") } return { type: "arrayLiteral", values: n, args: [n], op: function (e, t) { return t }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("blockLiteral", (function (e, t, r) { if (!r.matchOpToken("\\")) return; var n = []; var i = r.matchTokenType("IDENTIFIER"); if (i) { n.push(i); while (r.matchOpToken(",")) { n.push(r.requireTokenType("IDENTIFIER")) } } r.requireOpToken("-"); r.requireOpToken(">"); var a = e.requireElement("expression", r); return { type: "blockLiteral", args: n, expr: a, evaluate: function (e) { var t = function () { for (var t = 0; t < n.length; t++) { e.locals[n[t].value] = arguments[t] } return a.evaluate(e) }; return t } } })); t.addIndirectExpression("propertyAccess", (function (e, t, r, n) { if (!r.matchOpToken(".")) return; var i = r.requireTokenType("IDENTIFIER"); var a = { type: "propertyAccess", root: n, prop: i, args: [n], op: function (e, r) { var n = t.resolveProperty(r, i.value); return n }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("of", (function (e, t, r, n) { if (!r.matchToken("of")) return; var i = e.requireElement("unaryExpression", r); var a = null; var o = n; while (o.root) { a = o; o = o.root } if (o.type !== "symbol" && o.type !== "attributeRef" && o.type !== "styleRef" && o.type !== "computedStyleRef") { e.raiseParseError(r, "Cannot take a property of a non-symbol: " + o.type) } var s = o.type === "attributeRef"; var u = o.type === "styleRef" || o.type === "computedStyleRef"; if (s || u) { var l = o } var c = o.name; var f = { type: "ofExpression", prop: o.token, root: i, attribute: l, expression: n, args: [i], op: function (e, r) { if (s) { return t.resolveAttribute(r, c) } else if (u) { if (o.type === "computedStyleRef") { return t.resolveComputedStyle(r, c) } else { return t.resolveStyle(r, c) } } else { return t.resolveProperty(r, c) } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; if (o.type === "attributeRef") { f.attribute = o } if (a) { a.root = f; a.args = [f] } else { n = f } return e.parseElement("indirectExpression", r, n) })); t.addIndirectExpression("possessive", (function (e, t, r, n) { if (e.possessivesDisabled) { return } var i = r.matchOpToken("'"); if (i || n.type === "symbol" && (n.name === "my" || n.name === "its" || n.name === "your") && (r.currentToken().type === "IDENTIFIER" || r.currentToken().type === "ATTRIBUTE_REF" || r.currentToken().type === "STYLE_REF")) { if (i) { r.requireToken("s") } var a, o, s; a = e.parseElement("attributeRef", r); if (a == null) { o = e.parseElement("styleRef", r); if (o == null) { s = r.requireTokenType("IDENTIFIER") } } var u = { type: "possessive", root: n, attribute: a || o, prop: s, args: [n], op: function (e, r) { if (a) { var n = t.resolveAttribute(r, a.name) } else if (o) { var n; if (o.type === "computedStyleRef") { n = t.resolveComputedStyle(r, o["name"]) } else { n = t.resolveStyle(r, o["name"]) } } else { var n = t.resolveProperty(r, s.value) } return n }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, u) } })); t.addIndirectExpression("inExpression", (function (e, t, r, n) { if (!r.matchToken("in")) return; var i = e.requireElement("unaryExpression", r); var a = { type: "inExpression", root: n, args: [n, i], op: function (e, r, n) { var i = []; if (r.css) { t.implicitLoop(n, (function (e) { var t = e.querySelectorAll(r.css); for (var n = 0; n < t.length; n++) { i.push(t[n]) } })) } else if (r instanceof Element) { var a = false; t.implicitLoop(n, (function (e) { if (e.contains(r)) { a = true } })); if (a) { return r } } else { t.implicitLoop(r, (function (e) { t.implicitLoop(n, (function (t) { if (e === t) { i.push(e) } })) })) } return i }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("asExpression", (function (e, t, r, n) { if (!r.matchToken("as")) return; r.matchToken("a") || r.matchToken("an"); var i = e.requireElement("dotOrColonPath", r).evaluate(); var a = { type: "asExpression", root: n, args: [n], op: function (e, r) { return t.convertValue(r, i) }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("functionCall", (function (e, t, r, n) { if (!r.matchOpToken("(")) return; var i = []; if (!r.matchOpToken(")")) { do { i.push(e.requireElement("expression", r)) } while (r.matchOpToken(",")); r.requireOpToken(")") } if (n.root) { var a = { type: "functionCall", root: n, argExressions: i, args: [n.root, i], op: function (e, r, i) { t.nullCheck(r, n.root); var a = r[n.prop.value]; t.nullCheck(a, n); if (a.hyperfunc) { i.push(e) } return a.apply(r, i) }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { var a = { type: "functionCall", root: n, argExressions: i, args: [n, i], op: function (e, r, i) { t.nullCheck(r, n); if (r.hyperfunc) { i.push(e) } var a = r.apply(null, i); return a }, evaluate: function (e) { return t.unifiedEval(this, e) } } } return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("attributeRefAccess", (function (e, t, r, n) { var i = e.parseElement("attributeRef", r); if (!i) return; var a = { type: "attributeRefAccess", root: n, attribute: i, args: [n], op: function (e, r) { var n = t.resolveAttribute(r, i.name); return n }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return a })); t.addIndirectExpression("arrayIndex", (function (e, t, r, n) { if (!r.matchOpToken("[")) return; var i = false; var a = false; var o = null; var s = null; if (r.matchOpToken("..")) { i = true; o = e.requireElement("expression", r) } else { o = e.requireElement("expression", r); if (r.matchOpToken("..")) { a = true; var u = r.currentToken(); if (u.type !== "R_BRACKET") { s = e.parseElement("expression", r) } } } r.requireOpToken("]"); var l = { type: "arrayIndex", root: n, prop: o, firstIndex: o, secondIndex: s, args: [n, o, s], op: function (e, t, r, n) { if (t == null) { return null } if (i) { if (r < 0) { r = t.length + r } return t.slice(0, r + 1) } else if (a) { if (n != null) { if (n < 0) { n = t.length + n } return t.slice(r, n + 1) } else { return t.slice(r) } } else { return t[r] } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, l) })); var a = ["em", "ex", "cap", "ch", "ic", "rem", "lh", "rlh", "vw", "vh", "vi", "vb", "vmin", "vmax", "cm", "mm", "Q", "pc", "pt", "px"]; t.addGrammarElement("postfixExpression", (function (e, t, r) { var n = e.parseElement("primaryExpression", r); let i = r.matchAnyToken.apply(r, a) || r.matchOpToken("%"); if (i) { return { type: "stringPostfix", postfix: i.value, args: [n], op: function (e, t) { return "" + t + i.value }, evaluate: function (e) { return t.unifiedEval(this, e) } } } var o = null; if (r.matchToken("s") || r.matchToken("seconds")) { o = 1e3 } else if (r.matchToken("ms") || r.matchToken("milliseconds")) { o = 1 } if (o) { return { type: "timeExpression", time: n, factor: o, args: [n], op: function (e, t) { return t * o }, evaluate: function (e) { return t.unifiedEval(this, e) } } } if (r.matchOpToken(":")) { var s = r.requireTokenType("IDENTIFIER"); if (!s.value) return; var u = !r.matchOpToken("!"); return { type: "typeCheck", typeName: s, nullOk: u, args: [n], op: function (e, r) { var n = t.typeCheck(r, this.typeName.value, u); if (n) { return r } else { throw new Error("Typecheck failed! Expected: " + s.value) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { return n } })); t.addGrammarElement("logicalNot", (function (e, t, r) { if (!r.matchToken("not")) return; var n = e.requireElement("unaryExpression", r); return { type: "logicalNot", root: n, args: [n], op: function (e, t) { return !t }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("noExpression", (function (e, t, r) { if (!r.matchToken("no")) return; var n = e.requireElement("unaryExpression", r); return { type: "noExpression", root: n, args: [n], op: function (e, r) { return t.isEmpty(r) }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("some", (function (e, t, r) { if (!r.matchToken("some")) return; var n = e.requireElement("expression", r); return { type: "noExpression", root: n, args: [n], op: function (e, r) { return !t.isEmpty(r) }, evaluate(e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("negativeNumber", (function (e, t, r) { if (!r.matchOpToken("-")) return; var n = e.requireElement("unaryExpression", r); return { type: "negativeNumber", root: n, args: [n], op: function (e, t) { return -1 * t }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("unaryExpression", (function (e, t, r) { r.matchToken("the"); return e.parseAnyOf(["beepExpression", "logicalNot", "relativePositionalExpression", "positionalExpression", "noExpression", "negativeNumber", "postfixExpression"], r) })); t.addGrammarElement("beepExpression", (function (e, t, r) { if (!r.matchToken("beep!")) return; var n = e.parseElement("unaryExpression", r); if (n) { n["booped"] = true; var i = n.evaluate; n.evaluate = function (e) { let r = i.apply(n, arguments); let a = e.me; t.beepValueToConsole(a, n, r); return r }; return n } })); var s = function (e, t, r, n) { var i = t.querySelectorAll(r); for (var a = 0; a < i.length; a++) { var o = i[a]; if (o.compareDocumentPosition(e) === Node.DOCUMENT_POSITION_PRECEDING) { return o } } if (n) { return i[0] } }; var u = function (e, t, r, n) { var i = t.querySelectorAll(r); for (var a = i.length - 1; a >= 0; a--) { var o = i[a]; if (o.compareDocumentPosition(e) === Node.DOCUMENT_POSITION_FOLLOWING) { return o } } if (n) { return i[i.length - 1] } }; var l = function (e, t, r, n) { var i = []; o.prototype.forEach(t, (function (t) { if (t.matches(r) || t === e) { i.push(t) } })); for (var a = 0; a < i.length - 1; a++) { var s = i[a]; if (s === e) { return i[a + 1] } } if (n) { var u = i[0]; if (u && u.matches(r)) { return u } } }; var c = function (e, t, r, n) { return l(e, Array.from(t).reverse(), r, n) }; t.addGrammarElement("relativePositionalExpression", (function (e, t, r) { var n = r.matchAnyToken("next", "previous"); if (!n) return; var a = n.value === "next"; var o = e.parseElement("expression", r); if (r.matchToken("from")) { r.pushFollow("in"); try { var f = e.requireElement("unaryExpression", r) } finally { r.popFollow() } } else { var f = e.requireElement("implicitMeTarget", r) } var m = false; var p; if (r.matchToken("in")) { m = true; var h = e.requireElement("unaryExpression", r) } else if (r.matchToken("within")) { p = e.requireElement("unaryExpression", r) } else { p = document.body } var v = false; if (r.matchToken("with")) { r.requireToken("wrapping"); v = true } return { type: "relativePositionalExpression", from: f, forwardSearch: a, inSearch: m, wrapping: v, inElt: h, withinElt: p, operator: n.value, args: [o, f, h, p], op: function (e, t, r, n, f) { var p = t.css; if (p == null) { throw "Expected a CSS value to be returned by " + i.sourceFor.apply(o) } if (m) { if (n) { if (a) { return l(r, n, p, v) } else { return c(r, n, p, v) } } } else { if (f) { if (a) { return s(r, f, p, v) } else { return u(r, f, p, v) } } } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("positionalExpression", (function (e, t, r) { var n = r.matchAnyToken("first", "last", "random"); if (!n) return; r.matchAnyToken("in", "from", "of"); var i = e.requireElement("unaryExpression", r); const a = n.value; return { type: "positionalExpression", rhs: i, operator: n.value, args: [i], op: function (e, t) { if (t && !Array.isArray(t)) { if (t.children) { t = t.children } else { t = Array.from(t) } } if (t) { if (a === "first") { return t[0] } else if (a === "last") { return t[t.length - 1] } else if (a === "random") { return t[Math.floor(Math.random() * t.length)] } } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("mathOperator", (function (e, t, r) { var n = e.parseElement("unaryExpression", r); var i, a = null; i = r.matchAnyOpToken("+", "-", "*", "/") || r.matchToken("mod"); while (i) { a = a || i; var o = i.value; if (a.value !== o) { e.raiseParseError(r, "You must parenthesize math operations with different operators") } var s = e.parseElement("unaryExpression", r); n = { type: "mathOperator", lhs: n, rhs: s, operator: o, args: [n, s], op: function (e, t, r) { if (o === "+") { return t + r } else if (o === "-") { return t - r } else if (o === "*") { return t * r } else if (o === "/") { return t / r } else if (o === "mod") { return t % r } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; i = r.matchAnyOpToken("+", "-", "*", "/") || r.matchToken("mod") } return n })); t.addGrammarElement("mathExpression", (function (e, t, r) { return e.parseAnyOf(["mathOperator", "unaryExpression"], r) })); function f(e, t, r) { if (t["contains"]) { return t.contains(r) } else if (t["includes"]) { return t.includes(r) } else { throw Error("The value of " + e.sourceFor() + " does not have a contains or includes method on it") } } function p(e, t, r) { if (t["match"]) { return !!t.match(r) } else if (t["matches"]) { return t.matches(r) } else { throw Error("The value of " + e.sourceFor() + " does not have a match or matches method on it") } } t.addGrammarElement("comparisonOperator", (function (e, t, r) { var n = e.parseElement("mathExpression", r); var i = r.matchAnyOpToken("<", ">", "<=", ">=", "==", "===", "!=", "!=="); var a = i ? i.value : null; var o = true; var s = false; if (a == null) { if (r.matchToken("is") || r.matchToken("am")) { if (r.matchToken("not")) { if (r.matchToken("in")) { a = "not in" } else if (r.matchToken("a")) { a = "not a"; s = true } else if (r.matchToken("empty")) { a = "not empty"; o = false } else { if (r.matchToken("really")) { a = "!==" } else { a = "!=" } if (r.matchToken("equal")) { r.matchToken("to") } } } else if (r.matchToken("in")) { a = "in" } else if (r.matchToken("a")) { a = "a"; s = true } else if (r.matchToken("empty")) { a = "empty"; o = false } else if (r.matchToken("less")) { r.requireToken("than"); if (r.matchToken("or")) { r.requireToken("equal"); r.requireToken("to"); a = "<=" } else { a = "<" } } else if (r.matchToken("greater")) { r.requireToken("than"); if (r.matchToken("or")) { r.requireToken("equal"); r.requireToken("to"); a = ">=" } else { a = ">" } } else { if (r.matchToken("really")) { a = "===" } else { a = "==" } if (r.matchToken("equal")) { r.matchToken("to") } } } else if (r.matchToken("equals")) { a = "==" } else if (r.matchToken("really")) { r.requireToken("equals"); a = "===" } else if (r.matchToken("exist") || r.matchToken("exists")) { a = "exist"; o = false } else if (r.matchToken("matches") || r.matchToken("match")) { a = "match" } else if (r.matchToken("contains") || r.matchToken("contain")) { a = "contain" } else if (r.matchToken("includes") || r.matchToken("include")) { a = "include" } else if (r.matchToken("do") || r.matchToken("does")) { r.requireToken("not"); if (r.matchToken("matches") || r.matchToken("match")) { a = "not match" } else if (r.matchToken("contains") || r.matchToken("contain")) { a = "not contain" } else if (r.matchToken("exist") || r.matchToken("exist")) { a = "not exist"; o = false } else if (r.matchToken("include")) { a = "not include" } else { e.raiseParseError(r, "Expected matches or contains") } } } if (a) { var u, l, c; if (s) { u = r.requireTokenType("IDENTIFIER"); l = !r.matchOpToken("!") } else if (o) { c = e.requireElement("mathExpression", r); if (a === "match" || a === "not match") { c = c.css ? c.css : c } } var m = n; n = { type: "comparisonOperator", operator: a, typeName: u, nullOk: l, lhs: n, rhs: c, args: [n, c], op: function (e, r, n) { if (a === "==") { return r == n } else if (a === "!=") { return r != n } if (a === "===") { return r === n } else if (a === "!==") { return r !== n } if (a === "match") { return r != null && p(m, r, n) } if (a === "not match") { return r == null || !p(m, r, n) } if (a === "in") { return n != null && f(c, n, r) } if (a === "not in") { return n == null || !f(c, n, r) } if (a === "contain") { return r != null && f(m, r, n) } if (a === "not contain") { return r == null || !f(m, r, n) } if (a === "include") { return r != null && f(m, r, n) } if (a === "not include") { return r == null || !f(m, r, n) } if (a === "===") { return r === n } else if (a === "!==") { return r !== n } else if (a === "<") { return r < n } else if (a === ">") { return r > n } else if (a === "<=") { return r <= n } else if (a === ">=") { return r >= n } else if (a === "empty") { return t.isEmpty(r) } else if (a === "not empty") { return !t.isEmpty(r) } else if (a === "exist") { return t.doesExist(r) } else if (a === "not exist") { return !t.doesExist(r) } else if (a === "a") { return t.typeCheck(r, u.value, l) } else if (a === "not a") { return !t.typeCheck(r, u.value, l) } else { throw "Unknown comparison : " + a } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } return n })); t.addGrammarElement("comparisonExpression", (function (e, t, r) { return e.parseAnyOf(["comparisonOperator", "mathExpression"], r) })); t.addGrammarElement("logicalOperator", (function (e, t, r) { var n = e.parseElement("comparisonExpression", r); var i, a = null; i = r.matchToken("and") || r.matchToken("or"); while (i) { a = a || i; if (a.value !== i.value) { e.raiseParseError(r, "You must parenthesize logical operations with different operators") } var o = e.requireElement("comparisonExpression", r); const s = i.value; n = { type: "logicalOperator", operator: s, lhs: n, rhs: o, args: [n, o], op: function (e, t, r) { if (s === "and") { return t && r } else { return t || r } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; i = r.matchToken("and") || r.matchToken("or") } return n })); t.addGrammarElement("logicalExpression", (function (e, t, r) { return e.parseAnyOf(["logicalOperator", "mathExpression"], r) })); t.addGrammarElement("asyncExpression", (function (e, t, r) { if (r.matchToken("async")) { var n = e.requireElement("logicalExpression", r); var i = { type: "asyncExpression", value: n, evaluate: function (e) { return { asyncWrapper: true, value: this.value.evaluate(e) } } }; return i } else { return e.parseElement("logicalExpression", r) } })); t.addGrammarElement("expression", (function (e, t, r) { r.matchToken("the"); return e.parseElement("asyncExpression", r) })); t.addGrammarElement("assignableExpression", (function (e, t, r) { r.matchToken("the"); var n = e.parseElement("primaryExpression", r); if (n && (n.type === "symbol" || n.type === "ofExpression" || n.type === "propertyAccess" || n.type === "attributeRefAccess" || n.type === "attributeRef" || n.type === "styleRef" || n.type === "arrayIndex" || n.type === "possessive")) { return n } else { e.raiseParseError(r, "A target expression must be writable. The expression type '" + (n && n.type) + "' is not.") } return n })); t.addGrammarElement("hyperscript", (function (e, t, r) { var n = []; if (r.hasMore()) { while (e.featureStart(r.currentToken()) || r.currentToken().value === "(") { var i = e.requireElement("feature", r); n.push(i); r.matchToken("end") } } return { type: "hyperscript", features: n, apply: function (e, t, r) { for (const i of n) { i.install(e, t, r) } } } })); var v = function (e) { var t = []; if (e.token(0).value === "(" && (e.token(1).value === ")" || e.token(2).value === "," || e.token(2).value === ")")) { e.matchOpToken("("); do { t.push(e.requireTokenType("IDENTIFIER")) } while (e.matchOpToken(",")); e.requireOpToken(")") } return t }; t.addFeature("on", (function (e, t, r) { if (!r.matchToken("on")) return; var n = false; if (r.matchToken("every")) { n = true } var i = []; var a = null; do { var o = e.requireElement("eventName", r, "Expected event name"); var s = o.evaluate(); if (a) { a = a + " or " + s } else { a = "on " + s } var u = v(r); var l = null; if (r.matchOpToken("[")) { l = e.requireElement("expression", r); r.requireOpToken("]") } var c, f, m; if (r.currentToken().type === "NUMBER") { var p = r.consumeToken(); if (!p.value) return; c = parseInt(p.value); if (r.matchToken("to")) { var h = r.consumeToken(); if (!h.value) return; f = parseInt(h.value) } else if (r.matchToken("and")) { m = true; r.requireToken("on") } } var d, E; if (s === "intersection") { d = {}; if (r.matchToken("with")) { d["with"] = e.requireElement("expression", r).evaluate() } if (r.matchToken("having")) { do { if (r.matchToken("margin")) { d["rootMargin"] = e.requireElement("stringLike", r).evaluate() } else if (r.matchToken("threshold")) { d["threshold"] = e.requireElement("expression", r).evaluate() } else { e.raiseParseError(r, "Unknown intersection config specification") } } while (r.matchToken("and")) } } else if (s === "mutation") { E = {}; if (r.matchToken("of")) { do { if (r.matchToken("anything")) { E["attributes"] = true; E["subtree"] = true; E["characterData"] = true; E["childList"] = true } else if (r.matchToken("childList")) { E["childList"] = true } else if (r.matchToken("attributes")) { E["attributes"] = true; E["attributeOldValue"] = true } else if (r.matchToken("subtree")) { E["subtree"] = true } else if (r.matchToken("characterData")) { E["characterData"] = true; E["characterDataOldValue"] = true } else if (r.currentToken().type === "ATTRIBUTE_REF") { var T = r.consumeToken(); if (E["attributeFilter"] == null) { E["attributeFilter"] = [] } if (T.value.indexOf("@") == 0) { E["attributeFilter"].push(T.value.substring(1)) } else { e.raiseParseError(r, "Only shorthand attribute references are allowed here") } } else { e.raiseParseError(r, "Unknown mutation config specification") } } while (r.matchToken("or")) } else { E["attributes"] = true; E["characterData"] = true; E["childList"] = true } } var y = null; var k = false; if (r.matchToken("from")) { if (r.matchToken("elsewhere")) { k = true } else { r.pushFollow("or"); try { y = e.requireElement("expression", r) } finally { r.popFollow() } if (!y) { e.raiseParseError(r, 'Expected either target value or "elsewhere".') } } } if (y === null && k === false && r.matchToken("elsewhere")) { k = true } if (r.matchToken("in")) { var x = e.parseElement("unaryExpression", r) } if (r.matchToken("debounced")) { r.requireToken("at"); var g = e.requireElement("unaryExpression", r); var b = g.evaluate({}) } else if (r.matchToken("throttled")) { r.requireToken("at"); var g = e.requireElement("unaryExpression", r); var w = g.evaluate({}) } i.push({ execCount: 0, every: n, on: s, args: u, filter: l, from: y, inExpr: x, elsewhere: k, startCount: c, endCount: f, unbounded: m, debounceTime: b, throttleTime: w, mutationSpec: E, intersectionSpec: d, debounced: undefined, lastExec: undefined }) } while (r.matchToken("or")); var S = true; if (!n) { if (r.matchToken("queue")) { if (r.matchToken("all")) { var q = true; var S = false } else if (r.matchToken("first")) { var N = true } else if (r.matchToken("none")) { var C = true } else { r.requireToken("last") } } } var I = e.requireElement("commandList", r); e.ensureTerminated(I); var R, A; if (r.matchToken("catch")) { R = r.requireTokenType("IDENTIFIER").value; A = e.requireElement("commandList", r); e.ensureTerminated(A) } if (r.matchToken("finally")) { var O = e.requireElement("commandList", r); e.ensureTerminated(O) } var L = { displayName: a, events: i, start: I, every: n, execCount: 0, errorHandler: A, errorSymbol: R, execute: function (e) { let r = t.getEventQueueFor(e.me, L); if (r.executing && n === false) { if (C || N && r.queue.length > 0) { return } if (S) { r.queue.length = 0 } r.queue.push(e); return } L.execCount++; r.executing = true; e.meta.onHalt = function () { r.executing = false; var e = r.queue.shift(); if (e) { setTimeout((function () { L.execute(e) }), 1) } }; e.meta.reject = function (r) { console.error(r.message ? r.message : r); var n = t.getHyperTrace(e, r); if (n) { n.print() } t.triggerEvent(e.me, "exception", { error: r }) }; I.execute(e) }, install: function (e, r) { for (const r of L.events) { var n; if (r.elsewhere) { n = [document] } else if (r.from) { n = r.from.evaluate(t.makeContext(e, L, e, null)) } else { n = [e] } t.implicitLoop(n, (function (n) { var i = r.on; if (n == null) { console.warn("'%s' feature ignored because target does not exists:", a, e); return } if (r.mutationSpec) { i = "hyperscript:mutation"; const e = new MutationObserver((function (e, r) { if (!L.executing) { t.triggerEvent(n, i, { mutationList: e, observer: r }) } })); e.observe(n, r.mutationSpec) } if (r.intersectionSpec) { i = "hyperscript:intersection"; const e = new IntersectionObserver((function (r) { for (const o of r) { var a = { observer: e }; a = Object.assign(a, o); a["intersecting"] = o.isIntersecting; t.triggerEvent(n, i, a) } }), r.intersectionSpec); e.observe(n) } var o = n.addEventListener || n.on; o.call(n, i, (function a(o) { if (typeof Node !== "undefined" && e instanceof Node && n !== e && !e.isConnected) { n.removeEventListener(i, a); return } var s = t.makeContext(e, L, e, o); if (r.elsewhere && e.contains(o.target)) { return } if (r.from) { s.result = n } for (const e of r.args) { let t = s.event[e.value]; if (t !== undefined) { s.locals[e.value] = t } else if ("detail" in s.event) { s.locals[e.value] = s.event["detail"][e.value] } } s.meta.errorHandler = A; s.meta.errorSymbol = R; s.meta.finallyHandler = O; if (r.filter) { var u = s.meta.context; s.meta.context = s.event; try { var l = r.filter.evaluate(s); if (l) { } else { return } } finally { s.meta.context = u } } if (r.inExpr) { var c = o.target; while (true) { if (c.matches && c.matches(r.inExpr.css)) { s.result = c; break } else { c = c.parentElement; if (c == null) { return } } } } r.execCount++; if (r.startCount) { if (r.endCount) { if (r.execCount < r.startCount || r.execCount > r.endCount) { return } } else if (r.unbounded) { if (r.execCount < r.startCount) { return } } else if (r.execCount !== r.startCount) { return } } if (r.debounceTime) { if (r.debounced) { clearTimeout(r.debounced) } r.debounced = setTimeout((function () { L.execute(s) }), r.debounceTime); return } if (r.throttleTime) { if (r.lastExec && Date.now() < r.lastExec + r.throttleTime) { return } else { r.lastExec = Date.now() } } L.execute(s) })) })) } } }; e.setParent(I, L); return L })); t.addFeature("def", (function (e, t, r) { if (!r.matchToken("def")) return; var n = e.requireElement("dotOrColonPath", r); var i = n.evaluate(); var a = i.split("."); var o = a.pop(); var s = []; if (r.matchOpToken("(")) { if (r.matchOpToken(")")) { } else { do { s.push(r.requireTokenType("IDENTIFIER")) } while (r.matchOpToken(",")); r.requireOpToken(")") } } var u = e.requireElement("commandList", r); var l, c; if (r.matchToken("catch")) { l = r.requireTokenType("IDENTIFIER").value; c = e.parseElement("commandList", r) } if (r.matchToken("finally")) { var f = e.requireElement("commandList", r); e.ensureTerminated(f) } var m = { displayName: o + "(" + s.map((function (e) { return e.value })).join(", ") + ")", name: o, args: s, start: u, errorHandler: c, errorSymbol: l, finallyHandler: f, install: function (e, r) { var n = function () { var n = t.makeContext(r, m, e, null); n.meta.errorHandler = c; n.meta.errorSymbol = l; n.meta.finallyHandler = f; for (var i = 0; i < s.length; i++) { var a = s[i]; var o = arguments[i]; if (a) { n.locals[a.value] = o } } n.meta.caller = arguments[s.length]; if (n.meta.caller) { n.meta.callingCommand = n.meta.caller.meta.command } var p, h = null; var v = new Promise((function (e, t) { p = e; h = t })); u.execute(n); if (n.meta.returned) { return n.meta.returnValue } else { n.meta.resolve = p; n.meta.reject = h; return v } }; n.hyperfunc = true; n.hypername = i; t.assignToNamespace(e, a, o, n) } }; e.ensureTerminated(u); if (c) { e.ensureTerminated(c) } e.setParent(u, m); return m })); t.addFeature("set", (function (e, t, r) { let n = e.parseElement("setCommand", r); if (n) { if (n.target.scope !== "element") { e.raiseParseError(r, "variables declared at the feature level must be element scoped.") } let i = { start: n, install: function (e, r) { n && n.execute(t.makeContext(e, i, e, null)) } }; e.ensureTerminated(n); return i } })); t.addFeature("init", (function (e, t, r) { if (!r.matchToken("init")) return; var n = r.matchToken("immediately"); var i = e.requireElement("commandList", r); var a = { start: i, install: function (e, r) { let o = function () { i && i.execute(t.makeContext(e, a, e, null)) }; if (n) { o() } else { setTimeout(o, 0) } } }; e.ensureTerminated(i); e.setParent(i, a); return a })); t.addFeature("worker", (function (e, t, r) { if (r.matchToken("worker")) { e.raiseParseError(r, "In order to use the 'worker' feature, include " + "the _hyperscript worker plugin. See " + "https://hyperscript.org/features/worker/ for " + "more info."); return undefined } })); t.addFeature("behavior", (function (t, r, n) { if (!n.matchToken("behavior")) return; var i = t.requireElement("dotOrColonPath", n).evaluate(); var a = i.split("."); var o = a.pop(); var s = []; if (n.matchOpToken("(") && !n.matchOpToken(")")) { do { s.push(n.requireTokenType("IDENTIFIER").value) } while (n.matchOpToken(",")); n.requireOpToken(")") } var u = t.requireElement("hyperscript", n); for (var l = 0; l < u.features.length; l++) { var c = u.features[l]; c.behavior = i } return { install: function (t, n) { r.assignToNamespace(e.document && e.document.body, a, o, (function (e, t, n) { var a = r.getInternalData(e); var o = h(a, i + "Scope"); for (var l = 0; l < s.length; l++) { o[s[l]] = n[s[l]] } u.apply(e, t) })) } } })); t.addFeature("install", (function (t, r, n) { if (!n.matchToken("install")) return; var i = t.requireElement("dotOrColonPath", n).evaluate(); var a = i.split("."); var o = t.parseElement("namedArgumentList", n); var s; return s = { install: function (t, n) { r.unifiedEval({ args: [o], op: function (r, o) { var s = e; for (var u = 0; u < a.length; u++) { s = s[a[u]]; if (typeof s !== "object" && typeof s !== "function") throw new Error("No such behavior defined as " + i) } if (!(s instanceof Function)) throw new Error(i + " is not a behavior"); s(t, n, o) } }, r.makeContext(t, s, t, null)) } } })); t.addGrammarElement("jsBody", (function (e, t, r) { var n = r.currentToken().start; var i = r.currentToken(); var a = []; var o = ""; var s = false; while (r.hasMore()) { i = r.consumeToken(); var u = r.token(0, true); if (u.type === "IDENTIFIER" && u.value === "end") { break } if (s) { if (i.type === "IDENTIFIER" || i.type === "NUMBER") { o += i.value } else { if (o !== "") a.push(o); o = ""; s = false } } else if (i.type === "IDENTIFIER" && i.value === "function") { s = true } } var l = i.end + 1; return { type: "jsBody", exposedFunctionNames: a, jsSource: r.source.substring(n, l) } })); t.addFeature("js", (function (t, r, n) { if (!n.matchToken("js")) return; var i = t.requireElement("jsBody", n); var a = i.jsSource + "\nreturn { " + i.exposedFunctionNames.map((function (e) { return e + ":" + e })).join(",") + " } "; var o = new Function(a); return { jsSource: a, function: o, exposedFunctionNames: i.exposedFunctionNames, install: function () { Object.assign(e, o()) } } })); t.addCommand("js", (function (t, r, n) { if (!n.matchToken("js")) return; var i = []; if (n.matchOpToken("(")) { if (n.matchOpToken(")")) { } else { do { var a = n.requireTokenType("IDENTIFIER"); i.push(a.value) } while (n.matchOpToken(",")); n.requireOpToken(")") } } var o = t.requireElement("jsBody", n); n.matchToken("end"); var s = E(Function, i.concat([o.jsSource])); var u = { jsSource: o.jsSource, function: s, inputs: i, op: function (t) { var n = []; i.forEach((function (e) { n.push(r.resolveSymbol(e, t, "default")) })); var a = s.apply(e, n); if (a && typeof a.then === "function") { return new Promise((function (e) { a.then((function (n) { t.result = n; e(r.findNext(this, t)) })) })) } else { t.result = a; return r.findNext(this, t) } } }; return u })); t.addCommand("async", (function (e, t, r) { if (!r.matchToken("async")) return; if (r.matchToken("do")) { var n = e.requireElement("commandList", r); var i = n; while (i.next) i = i.next; i.next = t.HALT; r.requireToken("end") } else { var n = e.requireElement("command", r) } var a = { body: n, op: function (e) { setTimeout((function () { n.execute(e) })); return t.findNext(this, e) } }; e.setParent(n, a); return a })); t.addCommand("tell", (function (e, t, r) { var n = r.currentToken(); if (!r.matchToken("tell")) return; var i = e.requireElement("expression", r); var a = e.requireElement("commandList", r); if (r.hasMore() && !e.featureStart(r.currentToken())) { r.requireToken("end") } var o = "tell_" + n.start; var s = { value: i, body: a, args: [i], resolveNext: function (e) { var r = e.meta.iterators[o]; if (r.index < r.value.length) { e.you = r.value[r.index++]; return a } else { e.you = r.originalYou; if (this.next) { return this.next } else { return t.findNext(this.parent, e) } } }, op: function (e, t) { if (t == null) { t = [] } else if (!(Array.isArray(t) || t instanceof NodeList)) { t = [t] } e.meta.iterators[o] = { originalYou: e.you, index: 0, value: t }; return this.resolveNext(e) } }; e.setParent(a, s); return s })); t.addCommand("wait", (function (e, t, r) { if (!r.matchToken("wait")) return; var n; if (r.matchToken("for")) { r.matchToken("a"); var i = []; do { var a = r.token(0); if (a.type === "NUMBER" || a.type === "L_PAREN") { i.push({ time: e.requireElement("expression", r).evaluate() }) } else { i.push({ name: e.requireElement("dotOrColonPath", r, "Expected event name").evaluate(), args: v(r) }) } } while (r.matchToken("or")); if (r.matchToken("from")) { var o = e.requireElement("expression", r) } n = { event: i, on: o, args: [o], op: function (e, r) { var n = r ? r : e.me; if (!(n instanceof EventTarget)) throw new Error("Not a valid event target: " + this.on.sourceFor()); return new Promise((r => { var a = false; for (const s of i) { var o = n => { e.result = n; if (s.args) { for (const t of s.args) { e.locals[t.value] = n[t.value] || (n.detail ? n.detail[t.value] : null) } } if (!a) { a = true; r(t.findNext(this, e)) } }; if (s.name) { n.addEventListener(s.name, o, { once: true }) } else if (s.time != null) { setTimeout(o, s.time, s.time) } } })) } }; return n } else { var s; if (r.matchToken("a")) { r.requireToken("tick"); s = 0 } else { s = e.requireElement("expression", r) } n = { type: "waitCmd", time: s, args: [s], op: function (e, r) { return new Promise((n => { setTimeout((() => { n(t.findNext(this, e)) }), r) })) }, execute: function (e) { return t.unifiedExec(this, e) } }; return n } })); t.addGrammarElement("dotOrColonPath", (function (e, t, r) { var n = r.matchTokenType("IDENTIFIER"); if (n) { var i = [n.value]; var a = r.matchOpToken(".") || r.matchOpToken(":"); if (a) { do { i.push(r.requireTokenType("IDENTIFIER", "NUMBER").value) } while (r.matchOpToken(a.value)) } return { type: "dotOrColonPath", path: i, evaluate: function () { return i.join(a ? a.value : "") } } } })); t.addGrammarElement("eventName", (function (e, t, r) { var n; if (n = r.matchTokenType("STRING")) { return { evaluate: function () { return n.value } } } return e.parseElement("dotOrColonPath", r) })); function d(e, t, r, n) { var i = t.requireElement("eventName", n); var a = t.parseElement("namedArgumentList", n); if (e === "send" && n.matchToken("to") || e === "trigger" && n.matchToken("on")) { var o = t.requireElement("expression", n) } else { var o = t.requireElement("implicitMeTarget", n) } var s = { eventName: i, details: a, to: o, args: [o, i, a], op: function (e, t, n, i) { r.nullCheck(t, o); r.implicitLoop(t, (function (t) { r.triggerEvent(t, n, i, e.me) })); return r.findNext(s, e) } }; return s } t.addCommand("trigger", (function (e, t, r) { if (r.matchToken("trigger")) { return d("trigger", e, t, r) } })); t.addCommand("send", (function (e, t, r) { if (r.matchToken("send")) { return d("send", e, t, r) } })); var T = function (e, t, r, n) { if (n) { if (e.commandBoundary(r.currentToken())) { e.raiseParseError(r, "'return' commands must return a value. If you do not wish to return a value, use 'exit' instead.") } else { var i = e.requireElement("expression", r) } } var a = { value: i, args: [i], op: function (e, r) { var n = e.meta.resolve; e.meta.returned = true; e.meta.returnValue = r; if (n) { if (r) { n(r) } else { n() } } return t.HALT } }; return a }; t.addCommand("return", (function (e, t, r) { if (r.matchToken("return")) { return T(e, t, r, true) } })); t.addCommand("exit", (function (e, t, r) { if (r.matchToken("exit")) { return T(e, t, r, false) } })); t.addCommand("halt", (function (e, t, r) { if (r.matchToken("halt")) { if (r.matchToken("the")) { r.requireToken("event"); if (r.matchOpToken("'")) { r.requireToken("s") } var n = true } if (r.matchToken("bubbling")) { var i = true } else if (r.matchToken("default")) { var a = true } var o = T(e, t, r, false); var s = { keepExecuting: true, bubbling: i, haltDefault: a, exit: o, op: function (e) { if (e.event) { if (i) { e.event.stopPropagation() } else if (a) { e.event.preventDefault() } else { e.event.stopPropagation(); e.event.preventDefault() } if (n) { return t.findNext(this, e) } else { return o } } } }; return s } })); t.addCommand("log", (function (e, t, r) { if (!r.matchToken("log")) return; var n = [e.parseElement("expression", r)]; while (r.matchOpToken(",")) { n.push(e.requireElement("expression", r)) } if (r.matchToken("with")) { var i = e.requireElement("expression", r) } var a = { exprs: n, withExpr: i, args: [i, n], op: function (e, r, n) { if (r) { r.apply(null, n) } else { console.log.apply(null, n) } return t.findNext(this, e) } }; return a })); t.addCommand("beep!", (function (e, t, r) { if (!r.matchToken("beep!")) return; var n = [e.parseElement("expression", r)]; while (r.matchOpToken(",")) { n.push(e.requireElement("expression", r)) } var i = { exprs: n, args: [n], op: function (e, r) { for (let i = 0; i < n.length; i++) { const a = n[i]; const o = r[i]; t.beepValueToConsole(e.me, a, o) } return t.findNext(this, e) } }; return i })); t.addCommand("throw", (function (e, t, r) { if (!r.matchToken("throw")) return; var n = e.requireElement("expression", r); var i = { expr: n, args: [n], op: function (e, r) { t.registerHyperTrace(e, r); throw r } }; return i })); var y = function (e, t, r) { var n = e.requireElement("expression", r); var i = { expr: n, args: [n], op: function (e, r) { e.result = r; return t.findNext(i, e) } }; return i }; t.addCommand("call", (function (e, t, r) { if (!r.matchToken("call")) return; var n = y(e, t, r); if (n.expr && n.expr.type !== "functionCall") { e.raiseParseError(r, "Must be a function invocation") } return n })); t.addCommand("get", (function (e, t, r) { if (r.matchToken("get")) { return y(e, t, r) } })); t.addCommand("make", (function (e, t, r) { if (!r.matchToken("make")) return; r.matchToken("a") || r.matchToken("an"); var n = e.requireElement("expression", r); var i = []; if (n.type !== "queryRef" && r.matchToken("from")) { do { i.push(e.requireElement("expression", r)) } while (r.matchOpToken(",")) } if (r.matchToken("called")) { var a = e.requireElement("symbol", r) } var o; if (n.type === "queryRef") { o = { op: function (e) { var r, i = "div", o, s = []; var u = /(?:(^|#|\.)([^#\. ]+))/g; while (r = u.exec(n.css)) { if (r[1] === "") i = r[2].trim(); else if (r[1] === "#") o = r[2].trim(); else s.push(r[2].trim()) } var l = document.createElement(i); if (o !== undefined) l.id = o; for (var c = 0; c < s.length; c++) { var f = s[c]; l.classList.add(f) } e.result = l; if (a) { t.setSymbol(a.name, e, a.scope, l) } return t.findNext(this, e) } }; return o } else { o = { args: [n, i], op: function (e, r, n) { e.result = E(r, n); if (a) { t.setSymbol(a.name, e, a.scope, e.result) } return t.findNext(this, e) } }; return o } })); t.addGrammarElement("pseudoCommand", (function (e, t, r) { let n = r.token(1); if (!(n && n.op && (n.value === "." || n.value === "("))) { return null } var i = e.requireElement("primaryExpression", r); var a = i.root; var o = i; while (a.root != null) { o = o.root; a = a.root } if (i.type !== "functionCall") { e.raiseParseError(r, "Pseudo-commands must be function calls") } if (o.type === "functionCall" && o.root.root == null) { if (r.matchAnyToken("the", "to", "on", "with", "into", "from", "at")) { var s = e.requireElement("expression", r) } else if (r.matchToken("me")) { var s = e.requireElement("implicitMeTarget", r) } } var u; if (s) { u = { type: "pseudoCommand", root: s, argExressions: o.argExressions, args: [s, o.argExressions], op: function (e, r, n) { t.nullCheck(r, s); var i = r[o.root.name]; t.nullCheck(i, o); if (i.hyperfunc) { n.push(e) } e.result = i.apply(r, n); return t.findNext(u, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } else { u = { type: "pseudoCommand", expr: i, args: [i], op: function (e, r) { e.result = r; return t.findNext(u, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } return u })); var k = function (e, t, r, n, i) { var a = n.type === "symbol"; var o = n.type === "attributeRef"; var s = n.type === "styleRef"; var u = n.type === "arrayIndex"; if (!(o || s || a) && n.root == null) { e.raiseParseError(r, "Can only put directly into symbols, not references") } var l = null; var c = null; if (a) { } else if (o || s) { l = e.requireElement("implicitMeTarget", r); var f = n } else if (u) { c = n.firstIndex; l = n.root } else { c = n.prop ? n.prop.value : null; var f = n.attribute; l = n.root } var m = { target: n, symbolWrite: a, value: i, args: [l, c, i], op: function (e, r, i, o) { if (a) { t.setSymbol(n.name, e, n.scope, o) } else { t.nullCheck(r, l); if (u) { r[i] = o } else { t.implicitLoop(r, (function (e) { if (f) { if (f.type === "attributeRef") { if (o == null) { e.removeAttribute(f.name) } else { e.setAttribute(f.name, o) } } else { e.style[f.name] = o } } else { e[i] = o } })) } } return t.findNext(this, e) } }; return m }; t.addCommand("default", (function (e, t, r) { if (!r.matchToken("default")) return; var n = e.requireElement("assignableExpression", r); r.requireToken("to"); var i = e.requireElement("expression", r); var a = k(e, t, r, n, i); var o = { target: n, value: i, setter: a, args: [n], op: function (e, r) { if (r) { return t.findNext(this, e) } else { return a } } }; a.parent = o; return o })); t.addCommand("set", (function (e, t, r) { if (!r.matchToken("set")) return; if (r.currentToken().type === "L_BRACE") { var n = e.requireElement("objectLiteral", r); r.requireToken("on"); var i = e.requireElement("expression", r); var a = { objectLiteral: n, target: i, args: [n, i], op: function (e, r, n) { Object.assign(n, r); return t.findNext(this, e) } }; return a } try { r.pushFollow("to"); var i = e.requireElement("assignableExpression", r) } finally { r.popFollow() } r.requireToken("to"); var o = e.requireElement("expression", r); return k(e, t, r, i, o) })); t.addCommand("if", (function (e, t, r) { if (!r.matchToken("if")) return; var n = e.requireElement("expression", r); r.matchToken("then"); var i = e.parseElement("commandList", r); var a = false; let o = r.matchToken("else") || r.matchToken("otherwise"); if (o) { let t = r.peekToken("if"); a = t != null && t.line === o.line; if (a) { var s = e.parseElement("command", r) } else { var s = e.parseElement("commandList", r) } } if (r.hasMore() && !a) { r.requireToken("end") } var u = { expr: n, trueBranch: i, falseBranch: s, args: [n], op: function (e, r) { if (r) { return i } else if (s) { return s } else { return t.findNext(this, e) } } }; e.setParent(i, u); e.setParent(s, u); return u })); var x = function (e, t, r, n) { var i = t.currentToken(); var a; if (t.matchToken("for") || n) { var o = t.requireTokenType("IDENTIFIER"); a = o.value; t.requireToken("in"); var s = e.requireElement("expression", t) } else if (t.matchToken("in")) { a = "it"; var s = e.requireElement("expression", t) } else if (t.matchToken("while")) { var u = e.requireElement("expression", t) } else if (t.matchToken("until")) { var l = true; if (t.matchToken("event")) { var c = e.requireElement("dotOrColonPath", t, "Expected event name"); if (t.matchToken("from")) { var f = e.requireElement("expression", t) } } else { var u = e.requireElement("expression", t) } } else { if (!e.commandBoundary(t.currentToken()) && t.currentToken().value !== "forever") { var m = e.requireElement("expression", t); t.requireToken("times") } else { t.matchToken("forever"); var p = true } } if (t.matchToken("index")) { var o = t.requireTokenType("IDENTIFIER"); var h = o.value } var v = e.parseElement("commandList", t); if (v && c) { var d = v; while (d.next) { d = d.next } var E = { type: "waitATick", op: function () { return new Promise((function (e) { setTimeout((function () { e(r.findNext(E)) }), 0) })) } }; d.next = E } if (t.hasMore()) { t.requireToken("end") } if (a == null) { a = "_implicit_repeat_" + i.start; var T = a } else { var T = a + "_" + i.start } var y = { identifier: a, indexIdentifier: h, slot: T, expression: s, forever: p, times: m, until: l, event: c, on: f, whileExpr: u, resolveNext: function () { return this }, loop: v, args: [u, m], op: function (e, t, n) { var i = e.meta.iterators[T]; var o = false; var s = null; if (this.forever) { o = true } else if (this.until) { if (c) { o = e.meta.iterators[T].eventFired === false } else { o = t !== true } } else if (u) { o = t } else if (n) { o = i.index < n } else { var l = i.iterator.next(); o = !l.done; s = l.value } if (o) { if (i.value) { e.result = e.locals[a] = s } else { e.result = i.index } if (h) { e.locals[h] = i.index } i.index++; return v } else { e.meta.iterators[T] = null; return r.findNext(this.parent, e) } } }; e.setParent(v, y); var k = { name: "repeatInit", args: [s, c, f], op: function (e, t, r, n) { var i = { index: 0, value: t, eventFired: false }; e.meta.iterators[T] = i; if (t && t[Symbol.iterator]) { i.iterator = t[Symbol.iterator]() } if (c) { var a = n || e.me; a.addEventListener(r, (function (t) { e.meta.iterators[T].eventFired = true }), { once: true }) } return y }, execute: function (e) { return r.unifiedExec(this, e) } }; e.setParent(y, k); return k }; t.addCommand("repeat", (function (e, t, r) { if (r.matchToken("repeat")) { return x(e, r, t, false) } })); t.addCommand("for", (function (e, t, r) { if (r.matchToken("for")) { return x(e, r, t, true) } })); t.addCommand("continue", (function (e, t, r) { if (!r.matchToken("continue")) return; var n = { op: function (t) { for (var n = this.parent; true; n = n.parent) { if (n == undefined) { e.raiseParseError(r, "Command `continue` cannot be used outside of a `repeat` loop.") } if (n.loop != undefined) { return n.resolveNext(t) } } } }; return n })); t.addCommand("break", (function (e, t, r) { if (!r.matchToken("break")) return; var n = { op: function (n) { for (var i = this.parent; true; i = i.parent) { if (i == undefined) { e.raiseParseError(r, "Command `continue` cannot be used outside of a `repeat` loop.") } if (i.loop != undefined) { return t.findNext(i.parent, n) } } } }; return n })); t.addGrammarElement("stringLike", (function (e, t, r) { return e.parseAnyOf(["string", "nakedString"], r) })); t.addCommand("append", (function (e, t, r) { if (!r.matchToken("append")) return; var n = null; var i = e.requireElement("expression", r); var a = { type: "symbol", evaluate: function (e) { return t.resolveSymbol("result", e) } }; if (r.matchToken("to")) { n = e.requireElement("expression", r) } else { n = a } var o = null; if (n.type === "symbol" || n.type === "attributeRef" || n.root != null) { o = k(e, t, r, n, a) } var s = { value: i, target: n, args: [n, i], op: function (e, r, n) { if (Array.isArray(r)) { r.push(n); return t.findNext(this, e) } else if (r instanceof Element) { r.innerHTML += n; return t.findNext(this, e) } else if (o) { e.result = (r || "") + n; return o } else { throw Error("Unable to append a value!") } }, execute: function (e) { return t.unifiedExec(this, e) } }; if (o != null) { o.parent = s } return s })); function g(e, t, r) { r.matchToken("at") || r.matchToken("from"); const n = { includeStart: true, includeEnd: false }; n.from = r.matchToken("start") ? 0 : e.requireElement("expression", r); if (r.matchToken("to") || r.matchOpToken("..")) { if (r.matchToken("end")) { n.toEnd = true } else { n.to = e.requireElement("expression", r) } } if (r.matchToken("inclusive")) n.includeEnd = true; else if (r.matchToken("exclusive")) n.includeStart = false; return n } class b { constructor(e, t) { this.re = e; this.str = t } next() { const e = this.re.exec(this.str); if (e === null) return { done: true }; else return { value: e } } } class w { constructor(e, t, r) { this.re = e; this.flags = t; this.str = r } [Symbol.iterator]() { return new b(new RegExp(this.re, this.flags), this.str) } } t.addCommand("pick", ((e, t, r) => { if (!r.matchToken("pick")) return; r.matchToken("the"); if (r.matchToken("item") || r.matchToken("items") || r.matchToken("character") || r.matchToken("characters")) { const n = g(e, t, r); r.requireToken("from"); const i = e.requireElement("expression", r); return { args: [i, n.from, n.to], op(e, r, i, a) { if (n.toEnd) a = r.length; if (!n.includeStart) i++; if (n.includeEnd) a++; if (a == null || a == undefined) a = i + 1; e.result = r.slice(i, a); return t.findNext(this, e) } } } if (r.matchToken("match")) { r.matchToken("of"); const n = e.parseElement("expression", r); let i = ""; if (r.matchOpToken("|")) { i = r.requireToken("identifier").value } r.requireToken("from"); const a = e.parseElement("expression", r); return { args: [a, n], op(e, r, n) { e.result = new RegExp(n, i).exec(r); return t.findNext(this, e) } } } if (r.matchToken("matches")) { r.matchToken("of"); const n = e.parseElement("expression", r); let i = "gu"; if (r.matchOpToken("|")) { i = "g" + r.requireToken("identifier").value.replace("g", "") } console.log("flags", i); r.requireToken("from"); const a = e.parseElement("expression", r); return { args: [a, n], op(e, r, n) { e.result = new w(n, i, r); return t.findNext(this, e) } } } })); t.addCommand("increment", (function (e, t, r) { if (!r.matchToken("increment")) return; var n; var i = e.parseElement("assignableExpression", r); if (r.matchToken("by")) { n = e.requireElement("expression", r) } var a = { type: "implicitIncrementOp", target: i, args: [i, n], op: function (e, t, r) { t = t ? parseFloat(t) : 0; r = n ? parseFloat(r) : 1; var i = t + r; e.result = i; return i }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return k(e, t, r, i, a) })); t.addCommand("decrement", (function (e, t, r) { if (!r.matchToken("decrement")) return; var n; var i = e.parseElement("assignableExpression", r); if (r.matchToken("by")) { n = e.requireElement("expression", r) } var a = { type: "implicitDecrementOp", target: i, args: [i, n], op: function (e, t, r) { t = t ? parseFloat(t) : 0; r = n ? parseFloat(r) : 1; var i = t - r; e.result = i; return i }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return k(e, t, r, i, a) })); function S(e, t) { var r = "text"; var n; e.matchToken("a") || e.matchToken("an"); if (e.matchToken("json") || e.matchToken("Object")) { r = "json" } else if (e.matchToken("response")) { r = "response" } else if (e.matchToken("html")) { r = "html" } else if (e.matchToken("text")) { } else { n = t.requireElement("dotOrColonPath", e).evaluate() } return { type: r, conversion: n } } t.addCommand("fetch", (function (e, t, r) { if (!r.matchToken("fetch")) return; var n = e.requireElement("stringLike", r); if (r.matchToken("as")) { var i = S(r, e) } if (r.matchToken("with") && r.currentToken().value !== "{") { var a = e.parseElement("nakedNamedArgumentList", r) } else { var a = e.parseElement("objectLiteral", r) } if (i == null && r.matchToken("as")) { i = S(r, e) } var o = i ? i.type : "text"; var s = i ? i.conversion : null; var u = { url: n, argExpressions: a, args: [n, a], op: function (e, r, n) { var i = n || {}; i["sender"] = e.me; i["headers"] = i["headers"] || {}; var a = new AbortController; let l = e.me.addEventListener("fetch:abort", (function () { a.abort() }), { once: true }); i["signal"] = a.signal; t.triggerEvent(e.me, "hyperscript:beforeFetch", i); t.triggerEvent(e.me, "fetch:beforeRequest", i); n = i; var c = false; if (n.timeout) { setTimeout((function () { if (!c) { a.abort() } }), n.timeout) } return fetch(r, n).then((function (r) { let n = { response: r }; t.triggerEvent(e.me, "fetch:afterResponse", n); r = n.response; if (o === "response") { e.result = r; t.triggerEvent(e.me, "fetch:afterRequest", { result: r }); c = true; return t.findNext(u, e) } if (o === "json") { return r.json().then((function (r) { e.result = r; t.triggerEvent(e.me, "fetch:afterRequest", { result: r }); c = true; return t.findNext(u, e) })) } return r.text().then((function (r) { if (s) r = t.convertValue(r, s); if (o === "html") r = t.convertValue(r, "Fragment"); e.result = r; t.triggerEvent(e.me, "fetch:afterRequest", { result: r }); c = true; return t.findNext(u, e) })) })).catch((function (r) { t.triggerEvent(e.me, "fetch:error", { reason: r }); throw r })).finally((function () { e.me.removeEventListener("fetch:abort", l) })) } }; return u })) } function y(e) { e.addCommand("settle", (function (e, t, r) { if (r.matchToken("settle")) { if (!e.commandBoundary(r.currentToken())) { var n = e.requireElement("expression", r) } else { var n = e.requireElement("implicitMeTarget", r) } var i = { type: "settleCmd", args: [n], op: function (e, r) { t.nullCheck(r, n); var a = null; var o = false; var s = false; var u = new Promise((function (e) { a = e })); r.addEventListener("transitionstart", (function () { s = true }), { once: true }); setTimeout((function () { if (!s && !o) { a(t.findNext(i, e)) } }), 500); r.addEventListener("transitionend", (function () { if (!o) { a(t.findNext(i, e)) } }), { once: true }); return u }, execute: function (e) { return t.unifiedExec(this, e) } }; return i } })); e.addCommand("add", (function (e, t, r) { if (r.matchToken("add")) { var n = e.parseElement("classRef", r); var i = null; var a = null; if (n == null) { i = e.parseElement("attributeRef", r); if (i == null) { a = e.parseElement("styleLiteral", r); if (a == null) { e.raiseParseError(r, "Expected either a class reference or attribute expression") } } } else { var o = [n]; while (n = e.parseElement("classRef", r)) { o.push(n) } } if (r.matchToken("to")) { var s = e.requireElement("expression", r) } else { var s = e.requireElement("implicitMeTarget", r) } if (r.matchToken("when")) { if (a) { e.raiseParseError(r, "Only class and properties are supported with a when clause") } var u = e.requireElement("expression", r) } if (o) { return { classRefs: o, to: s, args: [s, o], op: function (e, r, n) { t.nullCheck(r, s); t.forEach(n, (function (n) { t.implicitLoop(r, (function (r) { if (u) { e.result = r; let i = t.evaluateNoPromise(u, e); if (i) { if (r instanceof Element) r.classList.add(n.className) } else { if (r instanceof Element) r.classList.remove(n.className) } e.result = null } else { if (r instanceof Element) r.classList.add(n.className) } })) })); return t.findNext(this, e) } } } else if (i) { return { type: "addCmd", attributeRef: i, to: s, args: [s], op: function (e, r, n) { t.nullCheck(r, s); t.implicitLoop(r, (function (r) { if (u) { e.result = r; let n = t.evaluateNoPromise(u, e); if (n) { r.setAttribute(i.name, i.value) } else { r.removeAttribute(i.name) } e.result = null } else { r.setAttribute(i.name, i.value) } })); return t.findNext(this, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } else { return { type: "addCmd", cssDeclaration: a, to: s, args: [s, a], op: function (e, r, n) { t.nullCheck(r, s); t.implicitLoop(r, (function (e) { e.style.cssText += n })); return t.findNext(this, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } } })); e.addGrammarElement("styleLiteral", (function (e, t, r) { if (!r.matchOpToken("{")) return; var n = [""]; var i = []; while (r.hasMore()) { if (r.matchOpToken("\\")) { r.consumeToken() } else if (r.matchOpToken("}")) { break } else if (r.matchToken("$")) { var a = r.matchOpToken("{"); var o = e.parseElement("expression", r); if (a) r.requireOpToken("}"); i.push(o); n.push("") } else { var s = r.consumeToken(); n[n.length - 1] += r.source.substring(s.start, s.end) } n[n.length - 1] += r.lastWhitespace() } return { type: "styleLiteral", args: [i], op: function (e, t) { var r = ""; n.forEach((function (e, n) { r += e; if (n in t) r += t[n] })); return r }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); e.addCommand("remove", (function (e, t, r) { if (r.matchToken("remove")) { var n = e.parseElement("classRef", r); var i = null; var a = null; if (n == null) { i = e.parseElement("attributeRef", r); if (i == null) { a = e.parseElement("expression", r); if (a == null) { e.raiseParseError(r, "Expected either a class reference, attribute expression or value expression") } } } else { var o = [n]; while (n = e.parseElement("classRef", r)) { o.push(n) } } if (r.matchToken("from")) { var s = e.requireElement("expression", r) } else { if (a == null) { var s = e.requireElement("implicitMeTarget", r) } } if (a) { return { elementExpr: a, from: s, args: [a, s], op: function (e, r, n) { t.nullCheck(r, a); t.implicitLoop(r, (function (e) { if (e.parentElement && (n == null || n.contains(e))) { e.parentElement.removeChild(e) } })); return t.findNext(this, e) } } } else { return { classRefs: o, attributeRef: i, elementExpr: a, from: s, args: [o, s], op: function (e, r, n) { t.nullCheck(n, s); if (r) { t.forEach(r, (function (e) { t.implicitLoop(n, (function (t) { t.classList.remove(e.className) })) })) } else { t.implicitLoop(n, (function (e) { e.removeAttribute(i.name) })) } return t.findNext(this, e) } } } } })); e.addCommand("toggle", (function (e, t, r) { if (r.matchToken("toggle")) { r.matchAnyToken("the", "my"); if (r.currentToken().type === "STYLE_REF") { let t = r.consumeToken(); var n = t.value.substr(1); var a = true; var o = i(e, r, n); if (r.matchToken("of")) { r.pushFollow("with"); try { var s = e.requireElement("expression", r) } finally { r.popFollow() } } else { var s = e.requireElement("implicitMeTarget", r) } } else if (r.matchToken("between")) { var u = true; var l = e.parseElement("classRef", r); r.requireToken("and"); var c = e.requireElement("classRef", r) } else { var l = e.parseElement("classRef", r); var f = null; if (l == null) { f = e.parseElement("attributeRef", r); if (f == null) { e.raiseParseError(r, "Expected either a class reference or attribute expression") } } else { var m = [l]; while (l = e.parseElement("classRef", r)) { m.push(l) } } } if (a !== true) { if (r.matchToken("on")) { var s = e.requireElement("expression", r) } else { var s = e.requireElement("implicitMeTarget", r) } } if (r.matchToken("for")) { var p = e.requireElement("expression", r) } else if (r.matchToken("until")) { var h = e.requireElement("dotOrColonPath", r, "Expected event name"); if (r.matchToken("from")) { var v = e.requireElement("expression", r) } } var d = { classRef: l, classRef2: c, classRefs: m, attributeRef: f, on: s, time: p, evt: h, from: v, toggle: function (e, r, n, i) { t.nullCheck(e, s); if (a) { t.implicitLoop(e, (function (e) { o("toggle", e) })) } else if (u) { t.implicitLoop(e, (function (e) { if (e.classList.contains(r.className)) { e.classList.remove(r.className); e.classList.add(n.className) } else { e.classList.add(r.className); e.classList.remove(n.className) } })) } else if (i) { t.forEach(i, (function (r) { t.implicitLoop(e, (function (e) { e.classList.toggle(r.className) })) })) } else { t.forEach(e, (function (e) { if (e.hasAttribute(f.name)) { e.removeAttribute(f.name) } else { e.setAttribute(f.name, f.value) } })) } }, args: [s, p, h, v, l, c, m], op: function (e, r, n, i, a, o, s, u) { if (n) { return new Promise((function (i) { d.toggle(r, o, s, u); setTimeout((function () { d.toggle(r, o, s, u); i(t.findNext(d, e)) }), n) })) } else if (i) { return new Promise((function (n) { var l = a || e.me; l.addEventListener(i, (function () { d.toggle(r, o, s, u); n(t.findNext(d, e)) }), { once: true }); d.toggle(r, o, s, u) })) } else { this.toggle(r, o, s, u); return t.findNext(d, e) } } }; return d } })); var t = { display: function (r, n, i) { if (i) { n.style.display = i } else if (r === "toggle") { if (getComputedStyle(n).display === "none") { t.display("show", n, i) } else { t.display("hide", n, i) } } else if (r === "hide") { const t = e.runtime.getInternalData(n); if (t.originalDisplay == null) { t.originalDisplay = n.style.display } n.style.display = "none" } else { const t = e.runtime.getInternalData(n); if (t.originalDisplay && t.originalDisplay !== "none") { n.style.display = t.originalDisplay } else { n.style.removeProperty("display") } } }, visibility: function (e, r, n) { if (n) { r.style.visibility = n } else if (e === "toggle") { if (getComputedStyle(r).visibility === "hidden") { t.visibility("show", r, n) } else { t.visibility("hide", r, n) } } else if (e === "hide") { r.style.visibility = "hidden" } else { r.style.visibility = "visible" } }, opacity: function (e, r, n) { if (n) { r.style.opacity = n } else if (e === "toggle") { if (getComputedStyle(r).opacity === "0") { t.opacity("show", r, n) } else { t.opacity("hide", r, n) } } else if (e === "hide") { r.style.opacity = "0" } else { r.style.opacity = "1" } } }; var n = function (e, t, r) { var n; var i = r.currentToken(); if (i.value === "when" || i.value === "with" || e.commandBoundary(i)) { n = e.parseElement("implicitMeTarget", r) } else { n = e.parseElement("expression", r) } return n }; var i = function (e, n, i) { var a = r.defaultHideShowStrategy; var o = t; if (r.hideShowStrategies) { o = Object.assign(o, r.hideShowStrategies) } i = i || a || "display"; var s = o[i]; if (s == null) { e.raiseParseError(n, "Unknown show/hide strategy : " + i) } return s }; e.addCommand("hide", (function (e, t, r) { if (r.matchToken("hide")) { var a = n(e, t, r); var o = null; if (r.matchToken("with")) { o = r.requireTokenType("IDENTIFIER", "STYLE_REF").value; if (o.indexOf("*") === 0) { o = o.substr(1) } } var s = i(e, r, o); return { target: a, args: [a], op: function (e, r) { t.nullCheck(r, a); t.implicitLoop(r, (function (e) { s("hide", e) })); return t.findNext(this, e) } } } })); e.addCommand("show", (function (e, t, r) { if (r.matchToken("show")) { var a = n(e, t, r); var o = null; if (r.matchToken("with")) { o = r.requireTokenType("IDENTIFIER", "STYLE_REF").value; if (o.indexOf("*") === 0) { o = o.substr(1) } } var s = null; if (r.matchOpToken(":")) { var u = r.consumeUntilWhitespace(); r.matchTokenType("WHITESPACE"); s = u.map((function (e) { return e.value })).join("") } if (r.matchToken("when")) { var l = e.requireElement("expression", r) } var c = i(e, r, o); return { target: a, when: l, args: [a], op: function (e, r) { t.nullCheck(r, a); t.implicitLoop(r, (function (r) { if (l) { e.result = r; let n = t.evaluateNoPromise(l, e); if (n) { c("show", r, s) } else { c("hide", r) } e.result = null } else { c("show", r, s) } })); return t.findNext(this, e) } } } })); e.addCommand("take", (function (e, t, r) { if (r.matchToken("take")) { var n = e.parseElement("classRef", r); var i = null; var a = null; if (n == null) { i = e.parseElement("attributeRef", r); if (i == null) { e.raiseParseError(r, "Expected either a class reference or attribute expression") } if (r.matchToken("with")) { a = e.requireElement("expression", r) } } if (r.matchToken("from")) { var o = e.requireElement("expression", r) } else { var o = n } if (r.matchToken("for")) { var s = e.requireElement("expression", r) } else { var s = e.requireElement("implicitMeTarget", r) } if (n) { var u = { classRef: n, from: o, forElt: s, args: [n, o, s], op: function (e, r, n, i) { t.nullCheck(n, o); t.nullCheck(i, s); var a = r.className; t.implicitLoop(n, (function (e) { e.classList.remove(a) })); t.implicitLoop(i, (function (e) { e.classList.add(a) })); return t.findNext(this, e) } }; return u } else { var u = { attributeRef: i, from: o, forElt: s, args: [o, s, a], op: function (e, r, n, a) { t.nullCheck(r, o); t.nullCheck(n, s); t.implicitLoop(r, (function (e) { if (!a) { e.removeAttribute(i.name) } else { e.setAttribute(i.name, a) } })); t.implicitLoop(n, (function (e) { e.setAttribute(i.name, i.value || "") })); return t.findNext(this, e) } }; return u } } })); function a(t, r, n, i) { if (n != null) { var a = t.resolveSymbol(n, r) } else { var a = r } if (a instanceof Element || a instanceof HTMLDocument) { while (a.firstChild) a.removeChild(a.firstChild); a.append(e.runtime.convertValue(i, "Fragment")); t.processNode(a) } else { if (n != null) { t.setSymbol(n, r, null, i) } else { throw "Don't know how to put a value into " + typeof r } } } e.addCommand("put", (function (e, t, r) { if (r.matchToken("put")) { var n = e.requireElement("expression", r); var i = r.matchAnyToken("into", "before", "after"); if (i == null && r.matchToken("at")) { r.matchToken("the"); i = r.matchAnyToken("start", "end"); r.requireToken("of") } if (i == null) { e.raiseParseError(r, "Expected one of 'into', 'before', 'at start of', 'at end of', 'after'") } var o = e.requireElement("expression", r); var s = i.value; var u = false; var l = false; var c = null; var f = null; if (o.type === "arrayIndex" && s === "into") { u = true; f = o.prop; c = o.root } else if (o.prop && o.root && s === "into") { f = o.prop.value; c = o.root } else if (o.type === "symbol" && s === "into") { l = true; f = o.name } else if (o.type === "attributeRef" && s === "into") { var m = true; f = o.name; c = e.requireElement("implicitMeTarget", r) } else if (o.type === "styleRef" && s === "into") { var p = true; f = o.name; c = e.requireElement("implicitMeTarget", r) } else if (o.attribute && s === "into") { var m = o.attribute.type === "attributeRef"; var p = o.attribute.type === "styleRef"; f = o.attribute.name; c = o.root } else { c = o } var h = { target: o, operation: s, symbolWrite: l, value: n, args: [c, f, n], op: function (e, r, n, i) { if (l) { a(t, e, n, i) } else { t.nullCheck(r, c); if (s === "into") { if (m) { t.implicitLoop(r, (function (e) { e.setAttribute(n, i) })) } else if (p) { t.implicitLoop(r, (function (e) { e.style[n] = i })) } else if (u) { r[n] = i } else { t.implicitLoop(r, (function (e) { a(t, e, n, i) })) } } else { var o = s === "before" ? Element.prototype.before : s === "after" ? Element.prototype.after : s === "start" ? Element.prototype.prepend : s === "end" ? Element.prototype.append : Element.prototype.append; t.implicitLoop(r, (function (e) { o.call(e, i instanceof Node ? i : t.convertValue(i, "Fragment")); if (e.parentElement) { t.processNode(e.parentElement) } else { t.processNode(e) } })) } } return t.findNext(this, e) } }; return h } })); function o(e, t, r) { var n; if (r.matchToken("the") || r.matchToken("element") || r.matchToken("elements") || r.currentToken().type === "CLASS_REF" || r.currentToken().type === "ID_REF" || r.currentToken().op && r.currentToken().value === "<") { e.possessivesDisabled = true; try { n = e.parseElement("expression", r) } finally { delete e.possessivesDisabled } if (r.matchOpToken("'")) { r.requireToken("s") } } else if (r.currentToken().type === "IDENTIFIER" && r.currentToken().value === "its") { var i = r.matchToken("its"); n = { type: "pseudopossessiveIts", token: i, name: i.value, evaluate: function (e) { return t.resolveSymbol("it", e) } } } else { r.matchToken("my") || r.matchToken("me"); n = e.parseElement("implicitMeTarget", r) } return n } e.addCommand("transition", (function (e, t, n) { if (n.matchToken("transition")) { var i = o(e, t, n); var a = []; var s = []; var u = []; var l = n.currentToken(); while (!e.commandBoundary(l) && l.value !== "over" && l.value !== "using") { if (n.currentToken().type === "STYLE_REF") { let e = n.consumeToken(); let t = e.value.substr(1); a.push({ type: "styleRefValue", evaluate: function () { return t } }) } else { a.push(e.requireElement("stringLike", n)) } if (n.matchToken("from")) { s.push(e.requireElement("expression", n)) } else { s.push(null) } n.requireToken("to"); if (n.matchToken("initial")) { u.push({ type: "initial_literal", evaluate: function () { return "initial" } }) } else { u.push(e.requireElement("expression", n)) } l = n.currentToken() } if (n.matchToken("over")) { var c = e.requireElement("expression", n) } else if (n.matchToken("using")) { var f = e.requireElement("expression", n) } var m = { to: u, args: [i, a, s, u, f, c], op: function (e, n, a, o, s, u, l) { t.nullCheck(n, i); var c = []; t.implicitLoop(n, (function (e) { var n = new Promise((function (n, i) { var c = e.style.transition; if (l) { e.style.transition = "all " + l + "ms ease-in" } else if (u) { e.style.transition = u } else { e.style.transition = r.defaultTransition } var f = t.getInternalData(e); var m = getComputedStyle(e); var p = {}; for (var h = 0; h < m.length; h++) { var v = m[h]; var d = m[v]; p[v] = d } if (!f.initalStyles) { f.initalStyles = p } for (var h = 0; h < a.length; h++) { var E = a[h]; var T = o[h]; if (T === "computed" || T == null) { e.style[E] = p[E] } else { e.style[E] = T } } var y = false; var k = false; e.addEventListener("transitionend", (function () { if (!k) { e.style.transition = c; k = true; n() } }), { once: true }); e.addEventListener("transitionstart", (function () { y = true }), { once: true }); setTimeout((function () { if (!k && !y) { e.style.transition = c; k = true; n() } }), 100); setTimeout((function () { var t = []; for (var r = 0; r < a.length; r++) { var n = a[r]; var i = s[r]; if (i === "initial") { var o = f.initalStyles[n]; e.style[n] = o } else { e.style[n] = i } } }), 0) })); c.push(n) })); return Promise.all(c).then((function () { return t.findNext(m, e) })) } }; return m } })); e.addCommand("measure", (function (e, t, r) { if (!r.matchToken("measure")) return; var n = o(e, t, r); var i = []; if (!e.commandBoundary(r.currentToken())) do { i.push(r.matchTokenType("IDENTIFIER").value) } while (r.matchOpToken(",")); return { properties: i, args: [n], op: function (e, r) { t.nullCheck(r, n); if (0 in r) r = r[0]; var a = r.getBoundingClientRect(); var o = { top: r.scrollTop, left: r.scrollLeft, topMax: r.scrollTopMax, leftMax: r.scrollLeftMax, height: r.scrollHeight, width: r.scrollWidth }; e.result = { x: a.x, y: a.y, left: a.left, top: a.top, right: a.right, bottom: a.bottom, width: a.width, height: a.height, bounds: a, scrollLeft: o.left, scrollTop: o.top, scrollLeftMax: o.leftMax, scrollTopMax: o.topMax, scrollWidth: o.width, scrollHeight: o.height, scroll: o }; t.forEach(i, (function (t) { if (t in e.result) e.locals[t] = e.result[t]; else throw "No such measurement as " + t })); return t.findNext(this, e) } } })); e.addLeafExpression("closestExpr", (function (e, t, r) { if (r.matchToken("closest")) { if (r.matchToken("parent")) { var n = true } var i = null; if (r.currentToken().type === "ATTRIBUTE_REF") { var a = e.requireElement("attributeRefAccess", r, null); i = "[" + a.attribute.name + "]" } if (i == null) { var o = e.requireElement("expression", r); if (o.css == null) { e.raiseParseError(r, "Expected a CSS expression") } else { i = o.css } } if (r.matchToken("to")) { var s = e.parseElement("expression", r) } else { var s = e.parseElement("implicitMeTarget", r) } var u = { type: "closestExpr", parentSearch: n, expr: o, css: i, to: s, args: [s], op: function (e, r) { if (r == null) { return null } else { let e = []; t.implicitLoop(r, (function (t) { if (n) { e.push(t.parentElement ? t.parentElement.closest(i) : null) } else { e.push(t.closest(i)) } })); if (t.shouldAutoIterate(r)) { return e } else { return e[0] } } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; if (a) { a.root = u; a.args = [u]; return a } else { return u } } })); e.addCommand("go", (function (e, t, r) { if (r.matchToken("go")) { if (r.matchToken("back")) { var n = true } else { r.matchToken("to"); if (r.matchToken("url")) { var i = e.requireElement("stringLike", r); var a = true; if (r.matchToken("in")) { r.requireToken("new"); r.requireToken("window"); var o = true } } else { r.matchToken("the"); var s = r.matchAnyToken("top", "middle", "bottom"); var u = r.matchAnyToken("left", "center", "right"); if (s || u) { r.requireToken("of") } var i = e.requireElement("unaryExpression", r); var l = r.matchAnyOpToken("+", "-"); if (l) { r.pushFollow("px"); try { var c = e.requireElement("expression", r) } finally { r.popFollow() } } r.matchToken("px"); var f = r.matchAnyToken("smoothly", "instantly"); var m = {}; if (s) { if (s.value === "top") { m.block = "start" } else if (s.value === "bottom") { m.block = "end" } else if (s.value === "middle") { m.block = "center" } } if (u) { if (u.value === "left") { m.inline = "start" } else if (u.value === "center") { m.inline = "center" } else if (u.value === "right") { m.inline = "end" } } if (f) { if (f.value === "smoothly") { m.behavior = "smooth" } else if (f.value === "instantly") { m.behavior = "instant" } } } } var p = { target: i, args: [i, c], op: function (e, r, i) { if (n) { window.history.back() } else if (a) { if (r) { if (o) { window.open(r) } else { window.location.href = r } } } else { t.implicitLoop(r, (function (e) { if (e === window) { e = document.body } if (l) { var t = e.getBoundingClientRect(); let n = document.createElement("div"); if (l.value === "-") { var r = -i } else { var r = - -i } n.style.position = "absolute"; n.style.top = t.x + r + "px"; n.style.left = t.y + r + "px"; n.style.height = t.height + 2 * r + "px"; n.style.width = t.width + 2 * r + "px"; n.style.zIndex = "" + Number.MIN_SAFE_INTEGER; n.style.opacity = "0"; document.body.appendChild(n); setTimeout((function () { document.body.removeChild(n) }), 100); e = n } e.scrollIntoView(m) })) } return t.findNext(p, e) } }; return p } })); r.conversions.dynamicResolvers.push((function (t, r) { if (!(t === "Values" || t.indexOf("Values:") === 0)) { return } var n = t.split(":")[1]; var i = {}; var a = e.runtime.implicitLoop.bind(e.runtime); a(r, (function (e) { var t = s(e); if (t !== undefined) { i[t.name] = t.value; return } if (e.querySelectorAll != undefined) { var r = e.querySelectorAll("input,select,textarea"); r.forEach(o) } })); if (n) { if (n === "JSON") { return JSON.stringify(i) } else if (n === "Form") { return new URLSearchParams(i).toString() } else { throw "Unknown conversion: " + n } } else { return i } function o(e) { var t = s(e); if (t == undefined) { return } if (i[t.name] == undefined) { i[t.name] = t.value; return } if (Array.isArray(i[t.name]) && Array.isArray(t.value)) { i[t.name] = [].concat(i[t.name], t.value); return } } function s(e) { try { var t = { name: e.name, value: e.value }; if (t.name == undefined || t.value == undefined) { return undefined } if (e.type == "radio" && e.checked == false) { return undefined } if (e.type == "checkbox") { if (e.checked == false) { t.value = undefined } else if (typeof t.value === "string") { t.value = [t.value] } } if (e.type == "select-multiple") { var r = e.querySelectorAll("option[selected]"); t.value = []; for (var n = 0; n < r.length; n++) { t.value.push(r[n].value) } } return t } catch (e) { return undefined } } })); r.conversions["HTML"] = function (e) { var t = function (e) { if (e instanceof Array) { return e.map((function (e) { return t(e) })).join("") } if (e instanceof HTMLElement) { return e.outerHTML } if (e instanceof NodeList) { var r = ""; for (var n = 0; n < e.length; n++) { var i = e[n]; if (i instanceof HTMLElement) { r += i.outerHTML } } return r } if (e.toString) { return e.toString() } return "" }; return t(e) }; r.conversions["Fragment"] = function (t) { var r = document.createDocumentFragment(); e.runtime.implicitLoop(t, (function (e) { if (e instanceof Node) r.append(e); else { var t = document.createElement("template"); t.innerHTML = e; r.append(t.content) } })); return r } } const k = new o, x = k.lexer, g = k.parser; function b(e, t) { return k.evaluate(e, t) } function w() { var t = Array.from(e.document.querySelectorAll("script[type='text/hyperscript'][src]")); Promise.all(t.map((function (e) { return fetch(e.src).then((function (e) { return e.text() })) }))).then((e => e.forEach((e => S(e))))).then((() => n((function () { a(); k.processNode(document.documentElement); e.document.addEventListener("htmx:load", (function (e) { k.processNode(e.detail.elt) })) })))); function n(e) { if (document.readyState !== "loading") { setTimeout(e) } else { document.addEventListener("DOMContentLoaded", e) } } function i() { var e = document.querySelector('meta[name="htmx-config"]'); if (e) { return v(e.content) } else { return null } } function a() { var e = i(); if (e) { Object.assign(r, e) } } } const S = Object.assign(b, { config: r, use(e) { e(S) }, internals: { lexer: x, parser: g, runtime: k, Lexer: n, Tokens: i, Parser: a, Runtime: o }, ElementCollection: m, addFeature: g.addFeature.bind(g), addCommand: g.addCommand.bind(g), addLeafExpression: g.addLeafExpression.bind(g), addIndirectExpression: g.addIndirectExpression.bind(g), evaluate: k.evaluate.bind(k), parse: k.parse.bind(k), processNode: k.processNode.bind(k), browserInit: w }); return S })); \ No newline at end of file +(function (e, t) { const r = t(e); if (typeof exports === "object" && typeof exports["nodeName"] !== "string") { module.exports = r } else { e["_hyperscript"] = r; if ("document" in e) e["_hyperscript"].browserInit() } })(typeof self !== "undefined" ? self : this, (e => { "use strict"; const t = { dynamicResolvers: [function (e, t) { if (e === "Fixed") { return Number(t).toFixed() } else if (e.indexOf("Fixed:") === 0) { let r = e.split(":")[1]; return Number(t).toFixed(parseInt(r)) } }], String: function (e) { if (e.toString) { return e.toString() } else { return "" + e } }, Int: function (e) { return parseInt(e) }, Float: function (e) { return parseFloat(e) }, Number: function (e) { return Number(e) }, Date: function (e) { return new Date(e) }, Array: function (e) { return Array.from(e) }, JSON: function (e) { return JSON.stringify(e) }, Object: function (e) { if (e instanceof String) { e = e.toString() } if (typeof e === "string") { return JSON.parse(e) } else { return Object.assign({}, e) } } }; const r = { attributes: "_, script, data-script", defaultTransition: "all 500ms ease-in", disableSelector: "[disable-scripting], [data-disable-scripting]", hideShowStrategies: {}, conversions: t }; class n { static OP_TABLE = { "+": "PLUS", "-": "MINUS", "*": "MULTIPLY", "/": "DIVIDE", ".": "PERIOD", "..": "ELLIPSIS", "\\": "BACKSLASH", ":": "COLON", "%": "PERCENT", "|": "PIPE", "!": "EXCLAMATION", "?": "QUESTION", "#": "POUND", "&": "AMPERSAND", $: "DOLLAR", ";": "SEMI", ",": "COMMA", "(": "L_PAREN", ")": "R_PAREN", "<": "L_ANG", ">": "R_ANG", "<=": "LTE_ANG", ">=": "GTE_ANG", "==": "EQ", "===": "EQQ", "!=": "NEQ", "!==": "NEQQ", "{": "L_BRACE", "}": "R_BRACE", "[": "L_BRACKET", "]": "R_BRACKET", "=": "EQUALS" }; static isValidCSSClassChar(e) { return n.isAlpha(e) || n.isNumeric(e) || e === "-" || e === "_" || e === ":" } static isValidCSSIDChar(e) { return n.isAlpha(e) || n.isNumeric(e) || e === "-" || e === "_" || e === ":" } static isWhitespace(e) { return e === " " || e === "\t" || n.isNewline(e) } static positionString(e) { return "[Line: " + e.line + ", Column: " + e.column + "]" } static isNewline(e) { return e === "\r" || e === "\n" } static isNumeric(e) { return e >= "0" && e <= "9" } static isAlpha(e) { return e >= "a" && e <= "z" || e >= "A" && e <= "Z" } static isIdentifierChar(e, t) { return e === "_" || e === "$" } static isReservedChar(e) { return e === "`" || e === "^" } static isValidSingleQuoteStringStart(e) { if (e.length > 0) { var t = e[e.length - 1]; if (t.type === "IDENTIFIER" || t.type === "CLASS_REF" || t.type === "ID_REF") { return false } if (t.op && (t.value === ">" || t.value === ")")) { return false } } return true } static tokenize(e, t) { var r = []; var a = e; var o = 0; var s = 0; var u = 1; var l = ""; var c = 0; function f() { return t && c === 0 } while (o < a.length) { if (q() === "-" && N() === "-" && (n.isWhitespace(I(2)) || I(2) === "" || I(2) === "-") || q() === "/" && N() === "/" && (n.isWhitespace(I(2)) || I(2) === "" || I(2) === "/")) { h() } else if (q() === "/" && N() === "*" && (n.isWhitespace(I(2)) || I(2) === "" || I(2) === "*")) { v() } else { if (n.isWhitespace(q())) { r.push(A()) } else if (!R() && q() === "." && (n.isAlpha(N()) || N() === "{" || N() === "-")) { r.push(d()) } else if (!R() && q() === "#" && (n.isAlpha(N()) || N() === "{")) { r.push(k()) } else if (q() === "[" && N() === "@") { r.push(E()) } else if (q() === "@") { r.push(T()) } else if (q() === "*" && n.isAlpha(N())) { r.push(y()) } else if (n.isAlpha(q()) || !f() && n.isIdentifierChar(q())) { r.push(x()) } else if (n.isNumeric(q())) { r.push(g()) } else if (!f() && (q() === '"' || q() === "`")) { r.push(w()) } else if (!f() && q() === "'") { if (n.isValidSingleQuoteStringStart(r)) { r.push(w()) } else { r.push(b()) } } else if (n.OP_TABLE[q()]) { if (l === "$" && q() === "{") { c++ } if (q() === "}") { c-- } r.push(b()) } else if (f() || n.isReservedChar(q())) { r.push(p("RESERVED", C())) } else { if (o < a.length) { throw Error("Unknown token: " + q() + " ") } } } } return new i(r, [], a); function m(e, t) { var r = p(e, t); r.op = true; return r } function p(e, t) { return { type: e, value: t || "", start: o, end: o + 1, column: s, line: u } } function h() { while (q() && !n.isNewline(q())) { C() } C() } function v() { while (q() && !(q() === "*" && N() === "/")) { C() } C(); C() } function d() { var e = p("CLASS_REF"); var t = C(); if (q() === "{") { e.template = true; t += C(); while (q() && q() !== "}") { t += C() } if (q() !== "}") { throw Error("Unterminated class reference") } else { t += C() } } else { while (n.isValidCSSClassChar(q())) { t += C() } } e.value = t; e.end = o; return e } function E() { var e = p("ATTRIBUTE_REF"); var t = C(); while (o < a.length && q() !== "]") { t += C() } if (q() === "]") { t += C() } e.value = t; e.end = o; return e } function T() { var e = p("ATTRIBUTE_REF"); var t = C(); while (n.isValidCSSIDChar(q())) { t += C() } if (q() === "=") { t += C(); if (q() === '"' || q() === "'") { let e = w(); t += e.value } else if (n.isAlpha(q()) || n.isNumeric(q()) || n.isIdentifierChar(q())) { let e = x(); t += e.value } } e.value = t; e.end = o; return e } function y() { var e = p("STYLE_REF"); var t = C(); while (n.isAlpha(q()) || q() === "-") { t += C() } e.value = t; e.end = o; return e } function k() { var e = p("ID_REF"); var t = C(); if (q() === "{") { e.template = true; t += C(); while (q() && q() !== "}") { t += C() } if (q() !== "}") { throw Error("Unterminated id reference") } else { C() } } else { while (n.isValidCSSIDChar(q())) { t += C() } } e.value = t; e.end = o; return e } function x() { var e = p("IDENTIFIER"); var t = C(); while (n.isAlpha(q()) || n.isNumeric(q()) || n.isIdentifierChar(q())) { t += C() } if (q() === "!" && t === "beep") { t += C() } e.value = t; e.end = o; return e } function g() { var e = p("NUMBER"); var t = C(); while (n.isNumeric(q())) { t += C() } if (q() === "." && n.isNumeric(N())) { t += C() } while (n.isNumeric(q())) { t += C() } if (q() === "e" || q() === "E") { if (n.isNumeric(N())) { t += C() } else if (N() === "-") { t += C(); t += C() } } while (n.isNumeric(q())) { t += C() } e.value = t; e.end = o; return e } function b() { var e = m(); var t = C(); while (q() && n.OP_TABLE[t + q()]) { t += C() } e.type = n.OP_TABLE[t]; e.value = t; e.end = o; return e } function w() { var e = p("STRING"); var t = C(); var r = ""; while (q() && q() !== t) { if (q() === "\\") { C(); let t = C(); if (t === "b") { r += "\b" } else if (t === "f") { r += "\f" } else if (t === "n") { r += "\n" } else if (t === "r") { r += "\r" } else if (t === "t") { r += "\t" } else if (t === "v") { r += "\v" } else if (t === "x") { const t = S(); if (Number.isNaN(t)) { throw Error("Invalid hexadecimal escape at " + n.positionString(e)) } r += String.fromCharCode(t) } else { r += t } } else { r += C() } } if (q() !== t) { throw Error("Unterminated string at " + n.positionString(e)) } else { C() } e.value = r; e.end = o; e.template = t === "`"; return e } function S() { const e = 16; if (!q()) { return NaN } let t = e * Number.parseInt(C(), e); if (!q()) { return NaN } t += Number.parseInt(C(), e); return t } function q() { return a.charAt(o) } function N() { return a.charAt(o + 1) } function I(e = 1) { return a.charAt(o + e) } function C() { l = q(); o++; s++; return l } function R() { return n.isAlpha(l) || n.isNumeric(l) || l === ")" || l === '"' || l === "'" || l === "`" || l === "}" || l === "]" } function A() { var e = p("WHITESPACE"); var t = ""; while (q() && n.isWhitespace(q())) { if (n.isNewline(q())) { s = 0; u++ } t += C() } e.value = t; e.end = o; return e } } tokenize(e, t) { return n.tokenize(e, t) } } class i { constructor(e, t, r) { this.tokens = e; this.consumed = t; this.source = r; this.consumeWhitespace() } get list() { return this.tokens } _lastConsumed = null; consumeWhitespace() { while (this.token(0, true).type === "WHITESPACE") { this.consumed.push(this.tokens.shift()) } } raiseError(e, t) { a.raiseParseError(e, t) } requireOpToken(e) { var t = this.matchOpToken(e); if (t) { return t } else { this.raiseError(this, "Expected '" + e + "' but found '" + this.currentToken().value + "'") } } matchAnyOpToken(e, t, r) { for (var n = 0; n < arguments.length; n++) { var i = arguments[n]; var a = this.matchOpToken(i); if (a) { return a } } } matchAnyToken(e, t, r) { for (var n = 0; n < arguments.length; n++) { var i = arguments[n]; var a = this.matchToken(i); if (a) { return a } } } matchOpToken(e) { if (this.currentToken() && this.currentToken().op && this.currentToken().value === e) { return this.consumeToken() } } requireTokenType(e, t, r, n) { var i = this.matchTokenType(e, t, r, n); if (i) { return i } else { this.raiseError(this, "Expected one of " + JSON.stringify([e, t, r])) } } matchTokenType(e, t, r, n) { if (this.currentToken() && this.currentToken().type && [e, t, r, n].indexOf(this.currentToken().type) >= 0) { return this.consumeToken() } } requireToken(e, t) { var r = this.matchToken(e, t); if (r) { return r } else { this.raiseError(this, "Expected '" + e + "' but found '" + this.currentToken().value + "'") } } peekToken(e, t, r) { t = t || 0; r = r || "IDENTIFIER"; if (this.tokens[t] && this.tokens[t].value === e && this.tokens[t].type === r) { return this.tokens[t] } } matchToken(e, t) { if (this.follows.indexOf(e) !== -1) { return } t = t || "IDENTIFIER"; if (this.currentToken() && this.currentToken().value === e && this.currentToken().type === t) { return this.consumeToken() } } consumeToken() { var e = this.tokens.shift(); this.consumed.push(e); this._lastConsumed = e; this.consumeWhitespace(); return e } consumeUntil(e, t) { var r = []; var n = this.token(0, true); while ((t == null || n.type !== t) && (e == null || n.value !== e) && n.type !== "EOF") { var i = this.tokens.shift(); this.consumed.push(i); r.push(n); n = this.token(0, true) } this.consumeWhitespace(); return r } lastWhitespace() { if (this.consumed[this.consumed.length - 1] && this.consumed[this.consumed.length - 1].type === "WHITESPACE") { return this.consumed[this.consumed.length - 1].value } else { return "" } } consumeUntilWhitespace() { return this.consumeUntil(null, "WHITESPACE") } hasMore() { return this.tokens.length > 0 } token(e, t) { var r; var n = 0; do { if (!t) { while (this.tokens[n] && this.tokens[n].type === "WHITESPACE") { n++ } } r = this.tokens[n]; e--; n++ } while (e > -1); if (r) { return r } else { return { type: "EOF", value: "<<>>" } } } currentToken() { return this.token(0) } lastMatch() { return this._lastConsumed } static sourceFor = function () { return this.programSource.substring(this.startToken.start, this.endToken.end) }; static lineFor = function () { return this.programSource.split("\n")[this.startToken.line - 1] }; follows = []; pushFollow(e) { this.follows.push(e) } popFollow() { this.follows.pop() } clearFollows() { var e = this.follows; this.follows = []; return e } restoreFollows(e) { this.follows = e } } class a { constructor(e) { this.runtime = e; this.possessivesDisabled = false; this.addGrammarElement("feature", (function (e, t, r) { if (r.matchOpToken("(")) { var n = e.requireElement("feature", r); r.requireOpToken(")"); return n } var i = e.FEATURES[r.currentToken().value || ""]; if (i) { return i(e, t, r) } })); this.addGrammarElement("command", (function (e, t, r) { if (r.matchOpToken("(")) { const t = e.requireElement("command", r); r.requireOpToken(")"); return t } var n = e.COMMANDS[r.currentToken().value || ""]; let i; if (n) { i = n(e, t, r) } else if (r.currentToken().type === "IDENTIFIER") { i = e.parseElement("pseudoCommand", r) } if (i) { return e.parseElement("indirectStatement", r, i) } return i })); this.addGrammarElement("commandList", (function (e, t, r) { if (r.hasMore()) { var n = e.parseElement("command", r); if (n) { r.matchToken("then"); const t = e.parseElement("commandList", r); if (t) n.next = t; return n } } return { type: "emptyCommandListCommand", op: function (e) { return t.findNext(this, e) }, execute: function (e) { return t.unifiedExec(this, e) } } })); this.addGrammarElement("leaf", (function (e, t, r) { var n = e.parseAnyOf(e.LEAF_EXPRESSIONS, r); if (n == null) { return e.parseElement("symbol", r) } return n })); this.addGrammarElement("indirectExpression", (function (e, t, r, n) { for (var i = 0; i < e.INDIRECT_EXPRESSIONS.length; i++) { var a = e.INDIRECT_EXPRESSIONS[i]; n.endToken = r.lastMatch(); var o = e.parseElement(a, r, n); if (o) { return o } } return n })); this.addGrammarElement("indirectStatement", (function (e, t, r, n) { if (r.matchToken("unless")) { n.endToken = r.lastMatch(); var i = e.requireElement("expression", r); var a = { type: "unlessStatementModifier", args: [i], op: function (e, t) { if (t) { return this.next } else { return n } }, execute: function (e) { return t.unifiedExec(this, e) } }; n.parent = a; return a } return n })); this.addGrammarElement("primaryExpression", (function (e, t, r) { var n = e.parseElement("leaf", r); if (n) { return e.parseElement("indirectExpression", r, n) } e.raiseParseError(r, "Unexpected value: " + r.currentToken().value) })) } use(e) { e(this); return this } GRAMMAR = {}; COMMANDS = {}; FEATURES = {}; LEAF_EXPRESSIONS = []; INDIRECT_EXPRESSIONS = []; initElt(e, t, r) { e.startToken = t; e.sourceFor = i.sourceFor; e.lineFor = i.lineFor; e.programSource = r.source } parseElement(e, t, r = undefined) { var n = this.GRAMMAR[e]; if (n) { var i = t.currentToken(); var a = n(this, this.runtime, t, r); if (a) { this.initElt(a, i, t); a.endToken = a.endToken || t.lastMatch(); var r = a.root; while (r != null) { this.initElt(r, i, t); r = r.root } } return a } } requireElement(e, t, r, n) { var i = this.parseElement(e, t, n); if (!i) a.raiseParseError(t, r || "Expected " + e); return i } parseAnyOf(e, t) { for (var r = 0; r < e.length; r++) { var n = e[r]; var i = this.parseElement(n, t); if (i) { return i } } } addGrammarElement(e, t) { this.GRAMMAR[e] = t } addCommand(e, t) { var r = e + "Command"; var n = function (e, n, i) { const a = t(e, n, i); if (a) { a.type = r; a.execute = function (e) { e.meta.command = a; return n.unifiedExec(this, e) }; return a } }; this.GRAMMAR[r] = n; this.COMMANDS[e] = n } addFeature(e, t) { var r = e + "Feature"; var n = function (n, i, a) { var o = t(n, i, a); if (o) { o.isFeature = true; o.keyword = e; o.type = r; return o } }; this.GRAMMAR[r] = n; this.FEATURES[e] = n } addLeafExpression(e, t) { this.LEAF_EXPRESSIONS.push(e); this.addGrammarElement(e, t) } addIndirectExpression(e, t) { this.INDIRECT_EXPRESSIONS.push(e); this.addGrammarElement(e, t) } static createParserContext(e) { var t = e.currentToken(); var r = e.source; var n = r.split("\n"); var i = t && t.line ? t.line - 1 : n.length - 1; var a = n[i]; var o = t && t.line ? t.column : a.length - 1; return a + "\n" + " ".repeat(o) + "^^\n\n" } static raiseParseError(e, t) { t = (t || "Unexpected Token : " + e.currentToken().value) + "\n\n" + a.createParserContext(e); var r = new Error(t); r["tokens"] = e; throw r } raiseParseError(e, t) { a.raiseParseError(e, t) } parseHyperScript(e) { var t = this.parseElement("hyperscript", e); if (e.hasMore()) this.raiseParseError(e); if (t) return t } setParent(e, t) { if (typeof e === "object") { e.parent = t; if (typeof t === "object") { t.children = t.children || new Set; t.children.add(e) } this.setParent(e.next, t) } } commandStart(e) { return this.COMMANDS[e.value || ""] } featureStart(e) { return this.FEATURES[e.value || ""] } commandBoundary(e) { if (e.value == "end" || e.value == "then" || e.value == "else" || e.value == "otherwise" || e.value == ")" || this.commandStart(e) || this.featureStart(e) || e.type == "EOF") { return true } return false } parseStringTemplate(e) { var t = [""]; do { t.push(e.lastWhitespace()); if (e.currentToken().value === "$") { e.consumeToken(); var r = e.matchOpToken("{"); t.push(this.requireElement("expression", e)); if (r) { e.requireOpToken("}") } t.push("") } else if (e.currentToken().value === "\\") { e.consumeToken(); e.consumeToken() } else { var n = e.consumeToken(); t[t.length - 1] += n ? n.value : "" } } while (e.hasMore()); t.push(e.lastWhitespace()); return t } ensureTerminated(e) { const t = this.runtime; var r = { type: "implicitReturn", op: function (e) { e.meta.returned = true; if (e.meta.resolve) { e.meta.resolve() } return t.HALT }, execute: function (e) { } }; var n = e; while (n.next) { n = n.next } n.next = r } } class o { constructor(e, t) { this.lexer = e ?? new n; this.parser = t ?? new a(this).use(T).use(y); this.parser.runtime = this } matchesSelector(e, t) { var r = e.matches || e.matchesSelector || e.msMatchesSelector || e.mozMatchesSelector || e.webkitMatchesSelector || e.oMatchesSelector; return r && r.call(e, t) } makeEvent(t, r) { var n; if (e.Event && typeof e.Event === "function") { n = new Event(t, { bubbles: true, cancelable: true }); n["detail"] = r } else { n = document.createEvent("CustomEvent"); n.initCustomEvent(t, true, true, r) } return n } triggerEvent(e, t, r, n) { r = r || {}; r["sender"] = n; var i = this.makeEvent(t, r); var a = e.dispatchEvent(i); return a } isArrayLike(e) { return Array.isArray(e) || typeof NodeList !== "undefined" && (e instanceof NodeList || e instanceof HTMLCollection) } isIterable(e) { return typeof e === "object" && Symbol.iterator in e && typeof e[Symbol.iterator] === "function" } shouldAutoIterate(e) { return e != null && e[p] || this.isArrayLike(e) } forEach(e, t) { if (e == null) { } else if (this.isIterable(e)) { for (const r of e) { t(r) } } else if (this.isArrayLike(e)) { for (var r = 0; r < e.length; r++) { t(e[r]) } } else { t(e) } } implicitLoop(e, t) { if (this.shouldAutoIterate(e)) { for (const r of e) t(r) } else { t(e) } } wrapArrays(e) { var t = []; for (var r = 0; r < e.length; r++) { var n = e[r]; if (Array.isArray(n)) { t.push(Promise.all(n)) } else { t.push(n) } } return t } unwrapAsyncs(e) { for (var t = 0; t < e.length; t++) { var r = e[t]; if (r.asyncWrapper) { e[t] = r.value } if (Array.isArray(r)) { for (var n = 0; n < r.length; n++) { var i = r[n]; if (i.asyncWrapper) { r[n] = i.value } } } } } static HALT = {}; HALT = o.HALT; unifiedExec(e, t) { while (true) { try { var r = this.unifiedEval(e, t) } catch (n) { if (t.meta.handlingFinally) { console.error(" Exception in finally block: ", n); r = o.HALT } else { this.registerHyperTrace(t, n); if (t.meta.errorHandler && !t.meta.handlingError) { t.meta.handlingError = true; t.locals[t.meta.errorSymbol] = n; e = t.meta.errorHandler; continue } else { t.meta.currentException = n; r = o.HALT } } } if (r == null) { console.error(e, " did not return a next element to execute! context: ", t); return } else if (r.then) { r.then((e => { this.unifiedExec(e, t) })).catch((e => { this.unifiedExec({ op: function () { throw e } }, t) })); return } else if (r === o.HALT) { if (t.meta.finallyHandler && !t.meta.handlingFinally) { t.meta.handlingFinally = true; e = t.meta.finallyHandler } else { if (t.meta.onHalt) { t.meta.onHalt() } if (t.meta.currentException) { if (t.meta.reject) { t.meta.reject(t.meta.currentException); return } else { throw t.meta.currentException } } else { return } } } else { e = r } } } unifiedEval(e, t) { var r = [t]; var n = false; var i = false; if (e.args) { for (var a = 0; a < e.args.length; a++) { var o = e.args[a]; if (o == null) { r.push(null) } else if (Array.isArray(o)) { var s = []; for (var u = 0; u < o.length; u++) { var l = o[u]; var c = l ? l.evaluate(t) : null; if (c) { if (c.then) { n = true } else if (c.asyncWrapper) { i = true } } s.push(c) } r.push(s) } else if (o.evaluate) { var c = o.evaluate(t); if (c) { if (c.then) { n = true } else if (c.asyncWrapper) { i = true } } r.push(c) } else { r.push(o) } } } if (n) { return new Promise(((t, n) => { r = this.wrapArrays(r); Promise.all(r).then((function (r) { if (i) { this.unwrapAsyncs(r) } try { var a = e.op.apply(e, r); t(a) } catch (e) { n(e) } })).catch((function (e) { n(e) })) })) } else { if (i) { this.unwrapAsyncs(r) } return e.op.apply(e, r) } } _scriptAttrs = null; getScriptAttributes() { if (this._scriptAttrs == null) { this._scriptAttrs = r.attributes.replace(/ /g, "").split(",") } return this._scriptAttrs } getScript(e) { for (var t = 0; t < this.getScriptAttributes().length; t++) { var r = this.getScriptAttributes()[t]; if (e.hasAttribute && e.hasAttribute(r)) { return e.getAttribute(r) } } if (e instanceof HTMLScriptElement && e.type === "text/hyperscript") { return e.innerText } return null } hyperscriptFeaturesMap = new WeakMap; getHyperscriptFeatures(e) { var t = this.hyperscriptFeaturesMap.get(e); if (typeof t === "undefined") { if (e) { this.hyperscriptFeaturesMap.set(e, t = {}) } } return t } addFeatures(e, t) { if (e) { Object.assign(t.locals, this.getHyperscriptFeatures(e)); this.addFeatures(e.parentElement, t) } } makeContext(e, t, r, n) { return new f(e, t, r, n, this) } getScriptSelector() { return this.getScriptAttributes().map((function (e) { return "[" + e + "]" })).join(", ") } convertValue(e, r) { var n = t.dynamicResolvers; for (var i = 0; i < n.length; i++) { var a = n[i]; var o = a(r, e); if (o !== undefined) { return o } } if (e == null) { return null } var s = t[r]; if (s) { return s(e) } throw "Unknown conversion : " + r } parse(e) { const t = this.lexer, r = this.parser; var n = t.tokenize(e); if (this.parser.commandStart(n.currentToken())) { var i = r.requireElement("commandList", n); if (n.hasMore()) r.raiseParseError(n); r.ensureTerminated(i); return i } else if (r.featureStart(n.currentToken())) { var a = r.requireElement("hyperscript", n); if (n.hasMore()) r.raiseParseError(n); return a } else { var o = r.requireElement("expression", n); if (n.hasMore()) r.raiseParseError(n); return o } } evaluateNoPromise(e, t) { let r = e.evaluate(t); if (r.next) { throw new Error(i.sourceFor.call(e) + " returned a Promise in a context that they are not allowed.") } return r } evaluate(t, r, n) { class i extends EventTarget { constructor(e) { super(); this.module = e } toString() { return this.module.id } } var a = "document" in e ? e.document.body : new i(n && n.module); r = Object.assign(this.makeContext(a, null, a, null), r || {}); var o = this.parse(t); if (o.execute) { o.execute(r); if (typeof r.meta.returnValue !== "undefined") { return r.meta.returnValue } else { return r.result } } else if (o.apply) { o.apply(a, a, n); return this.getHyperscriptFeatures(a) } else { return o.evaluate(r) } function s() { return {} } } processNode(e) { var t = this.getScriptSelector(); if (this.matchesSelector(e, t)) { this.initElement(e, e) } if (e instanceof HTMLScriptElement && e.type === "text/hyperscript") { this.initElement(e, document.body) } if (e.querySelectorAll) { this.forEach(e.querySelectorAll(t + ", [type='text/hyperscript']"), (e => { this.initElement(e, e instanceof HTMLScriptElement && e.type === "text/hyperscript" ? document.body : e) })) } } initElement(e, t) { if (e.closest && e.closest(r.disableSelector)) { return } var n = this.getInternalData(e); if (!n.initialized) { var i = this.getScript(e); if (i) { try { n.initialized = true; n.script = i; const r = this.lexer, s = this.parser; var a = r.tokenize(i); var o = s.parseHyperScript(a); if (!o) return; o.apply(t || e, e); setTimeout((() => { this.triggerEvent(t || e, "load", { hyperscript: true }) }), 1) } catch (t) { this.triggerEvent(e, "exception", { error: t }); console.error("hyperscript errors were found on the following element:", e, "\n\n", t.message, t.stack) } } } } internalDataMap = new WeakMap; getInternalData(e) { var t = this.internalDataMap.get(e); if (typeof t === "undefined") { this.internalDataMap.set(e, t = {}) } return t } typeCheck(e, t, r) { if (e == null && r) { return true } var n = Object.prototype.toString.call(e).slice(8, -1); return n === t } getElementScope(e) { var t = e.meta && e.meta.owner; if (t) { var r = this.getInternalData(t); var n = "elementScope"; if (e.meta.feature && e.meta.feature.behavior) { n = e.meta.feature.behavior + "Scope" } var i = h(r, n); return i } else { return {} } } isReservedWord(e) { return ["meta", "it", "result", "locals", "event", "target", "detail", "sender", "body"].includes(e) } isHyperscriptContext(e) { return e instanceof f } resolveSymbol(t, r, n) { if (t === "me" || t === "my" || t === "I") { return r.me } if (t === "it" || t === "its" || t === "result") { return r.result } if (t === "you" || t === "your" || t === "yourself") { return r.you } else { if (n === "global") { return e[t] } else if (n === "element") { var i = this.getElementScope(r); return i[t] } else if (n === "local") { return r.locals[t] } else { if (r.meta && r.meta.context) { var a = r.meta.context[t]; if (typeof a !== "undefined") { return a } if (r.meta.context.detail) { a = r.meta.context.detail[t]; if (typeof a !== "undefined") { return a } } } if (this.isHyperscriptContext(r) && !this.isReservedWord(t)) { var o = r.locals[t] } else { var o = r[t] } if (typeof o !== "undefined") { return o } else { var i = this.getElementScope(r); o = i[t]; if (typeof o !== "undefined") { return o } else { return e[t] } } } } } setSymbol(t, r, n, i) { if (n === "global") { e[t] = i } else if (n === "element") { var a = this.getElementScope(r); a[t] = i } else if (n === "local") { r.locals[t] = i } else { if (this.isHyperscriptContext(r) && !this.isReservedWord(t) && typeof r.locals[t] !== "undefined") { r.locals[t] = i } else { var a = this.getElementScope(r); var o = a[t]; if (typeof o !== "undefined") { a[t] = i } else { if (this.isHyperscriptContext(r) && !this.isReservedWord(t)) { r.locals[t] = i } else { r[t] = i } } } } } findNext(e, t) { if (e) { if (e.resolveNext) { return e.resolveNext(t) } else if (e.next) { return e.next } else { return this.findNext(e.parent, t) } } } flatGet(e, t, r) { if (e != null) { var n = r(e, t); if (typeof n !== "undefined") { return n } if (this.shouldAutoIterate(e)) { var i = []; for (var a of e) { var o = r(a, t); i.push(o) } return i } } } resolveProperty(e, t) { return this.flatGet(e, t, ((e, t) => e[t])) } resolveAttribute(e, t) { return this.flatGet(e, t, ((e, t) => e.getAttribute && e.getAttribute(t))) } resolveStyle(e, t) { return this.flatGet(e, t, ((e, t) => e.style && e.style[t])) } resolveComputedStyle(e, t) { return this.flatGet(e, t, ((e, t) => getComputedStyle(e).getPropertyValue(t))) } assignToNamespace(t, r, n, i) { let a; if (typeof document !== "undefined" && t === document.body) { a = e } else { a = this.getHyperscriptFeatures(t) } var o; while ((o = r.shift()) !== undefined) { var s = a[o]; if (s == null) { s = {}; a[o] = s } a = s } a[n] = i } getHyperTrace(e, t) { var r = []; var n = e; while (n.meta.caller) { n = n.meta.caller } if (n.meta.traceMap) { return n.meta.traceMap.get(t, r) } } registerHyperTrace(e, t) { var r = []; var n = null; while (e != null) { r.push(e); n = e; e = e.meta.caller } if (n.meta.traceMap == null) { n.meta.traceMap = new Map } if (!n.meta.traceMap.get(t)) { var i = { trace: r, print: function (e) { e = e || console.error; e("hypertrace /// "); var t = 0; for (var n = 0; n < r.length; n++) { t = Math.max(t, r[n].meta.feature.displayName.length) } for (var n = 0; n < r.length; n++) { var i = r[n]; e(" ->", i.meta.feature.displayName.padEnd(t + 2), "-", i.meta.owner) } } }; n.meta.traceMap.set(t, i) } } escapeSelector(e) { return e.replace(/:/g, (function (e) { return "\\" + e })) } nullCheck(e, t) { if (e == null) { throw new Error("'" + t.sourceFor() + "' is null") } } isEmpty(e) { return e == undefined || e.length === 0 } doesExist(e) { if (e == null) { return false } if (this.shouldAutoIterate(e)) { for (const t of e) { return true } return false } return true } getRootNode(e) { if (e && e instanceof Node) { var t = e.getRootNode(); if (t instanceof Document || t instanceof ShadowRoot) return t } return document } getEventQueueFor(e, t) { let r = this.getInternalData(e); var n = r.eventQueues; if (n == null) { n = new Map; r.eventQueues = n } var i = n.get(t); if (i == null) { i = { queue: [], executing: false }; n.set(t, i) } return i } beepValueToConsole(e, t, r) { if (this.triggerEvent(e, "hyperscript:beep", { element: e, expression: t, value: r })) { var n; if (r) { if (r instanceof m) { n = "ElementCollection" } else if (r.constructor) { n = r.constructor.name } else { n = "unknown" } } else { n = "object (null)" } var a = r; if (n === "String") { a = '"' + a + '"' } else if (r instanceof m) { a = Array.from(r) } console.log("///_ BEEP! The expression (" + i.sourceFor.call(t).replace("beep! ", "") + ") evaluates to:", a, "of type " + n) } } hyperscriptUrl = "document" in e && document.currentScript ? document.currentScript.src : null } function s() { let e = document.cookie.split("; ").map((e => { let t = e.split("="); return { name: t[0], value: decodeURIComponent(t[1]) } })); return e } function u(e) { document.cookie = e + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT" } function l() { for (const e of s()) { u(e.name) } } const c = new Proxy({}, { get(e, t) { if (t === "then" || t === "asyncWrapper") { return null } else if (t === "length") { return s().length } else if (t === "clear") { return u } else if (t === "clearAll") { return l } else if (typeof t === "string") { if (!isNaN(t)) { return s()[parseInt(t)] } else { let e = document.cookie.split("; ").find((e => e.startsWith(t + "=")))?.split("=")[1]; if (e) { return decodeURIComponent(e) } } } else if (t === Symbol.iterator) { return s()[t] } }, set(e, t, r) { var n = null; if ("string" === typeof r) { n = encodeURIComponent(r); n += ";samesite=lax" } else { n = encodeURIComponent(r.value); if (r.expires) { n += ";expires=" + r.maxAge } if (r.maxAge) { n += ";max-age=" + r.maxAge } if (r.partitioned) { n += ";partitioned=" + r.partitioned } if (r.path) { n += ";path=" + r.path } if (r.samesite) { n += ";samesite=" + r.path } if (r.secure) { n += ";secure=" + r.path } } document.cookie = t + "=" + n; return true } }); class f { constructor(t, r, n, i, a) { this.meta = { parser: a.parser, lexer: a.lexer, runtime: a, owner: t, feature: r, iterators: {}, ctx: this }; this.locals = { cookies: c }; this.me = n, this.you = undefined; this.result = undefined; this.event = i; this.target = i ? i.target : null; this.detail = i ? i.detail : null; this.sender = i ? i.detail ? i.detail.sender : null : null; this.body = "document" in e ? document.body : null; a.addFeatures(t, this) } } class m { constructor(e, t, r) { this._css = e; this.relativeToElement = t; this.escape = r; this[p] = true } get css() { if (this.escape) { return o.prototype.escapeSelector(this._css) } else { return this._css } } get className() { return this._css.substr(1) } get id() { return this.className() } contains(e) { for (let t of this) { if (t.contains(e)) { return true } } return false } get length() { return this.selectMatches().length } [Symbol.iterator]() { let e = this.selectMatches(); return e[Symbol.iterator]() } selectMatches() { let e = o.prototype.getRootNode(this.relativeToElement).querySelectorAll(this.css); return e } } const p = Symbol(); function h(e, t) { var r = e[t]; if (r) { return r } else { var n = {}; e[t] = n; return n } } function v(e) { try { return JSON.parse(e) } catch (e) { d(e); return null } } function d(e) { if (console.error) { console.error(e) } else if (console.log) { console.log("ERROR: ", e) } } function E(e, t) { return new (e.bind.apply(e, [e].concat(t))) } function T(t) { t.addLeafExpression("parenthesized", (function (e, t, r) { if (r.matchOpToken("(")) { var n = r.clearFollows(); try { var i = e.requireElement("expression", r) } finally { r.restoreFollows(n) } r.requireOpToken(")"); return i } })); t.addLeafExpression("string", (function (e, t, r) { var i = r.matchTokenType("STRING"); if (!i) return; var a = i.value; var o; if (i.template) { var s = n.tokenize(a, true); o = e.parseStringTemplate(s) } else { o = [] } return { type: "string", token: i, args: o, op: function (e) { var t = ""; for (var r = 1; r < arguments.length; r++) { var n = arguments[r]; if (n !== undefined) { t += n } } return t }, evaluate: function (e) { if (o.length === 0) { return a } else { return t.unifiedEval(this, e) } } } })); t.addGrammarElement("nakedString", (function (e, t, r) { if (r.hasMore()) { var n = r.consumeUntilWhitespace(); r.matchTokenType("WHITESPACE"); return { type: "nakedString", tokens: n, evaluate: function (e) { return n.map((function (e) { return e.value })).join("") } } } })); t.addLeafExpression("number", (function (e, t, r) { var n = r.matchTokenType("NUMBER"); if (!n) return; var i = n; var a = parseFloat(n.value); return { type: "number", value: a, numberToken: i, evaluate: function () { return a } } })); t.addLeafExpression("idRef", (function (e, t, r) { var i = r.matchTokenType("ID_REF"); if (!i) return; if (!i.value) return; if (i.template) { var a = i.value.substring(2); var o = n.tokenize(a); var s = e.requireElement("expression", o); return { type: "idRefTemplate", args: [s], op: function (e, r) { return t.getRootNode(e.me).getElementById(r) }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { const e = i.value.substring(1); return { type: "idRef", css: i.value, value: e, evaluate: function (r) { return t.getRootNode(r.me).getElementById(e) } } } })); t.addLeafExpression("classRef", (function (e, t, r) { var i = r.matchTokenType("CLASS_REF"); if (!i) return; if (!i.value) return; if (i.template) { var a = i.value.substring(2); var o = n.tokenize(a); var s = e.requireElement("expression", o); return { type: "classRefTemplate", args: [s], op: function (e, t) { return new m("." + t, e.me, true) }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { const e = i.value; return { type: "classRef", css: e, evaluate: function (t) { return new m(e, t.me, true) } } } })); class r extends m { constructor(e, t, r) { super(e, t); this.templateParts = r; this.elements = r.filter((e => e instanceof Element)) } get css() { let e = "", t = 0; for (const r of this.templateParts) { if (r instanceof Element) { e += "[data-hs-query-id='" + t++ + "']" } else e += r } return e } [Symbol.iterator]() { this.elements.forEach(((e, t) => e.dataset.hsQueryId = t)); const e = super[Symbol.iterator](); this.elements.forEach((e => e.removeAttribute("data-hs-query-id"))); return e } } t.addLeafExpression("queryRef", (function (e, t, i) { var a = i.matchOpToken("<"); if (!a) return; var o = i.consumeUntil("/"); i.requireOpToken("/"); i.requireOpToken(">"); var s = o.map((function (e) { if (e.type === "STRING") { return '"' + e.value + '"' } else { return e.value } })).join(""); var u, l, c; if (s.indexOf("$") >= 0) { u = true; l = n.tokenize(s, true); c = e.parseStringTemplate(l) } return { type: "queryRef", css: s, args: c, op: function (e, ...t) { if (u) { return new r(s, e.me, t) } else { return new m(s, e.me) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("attributeRef", (function (e, t, r) { var n = r.matchTokenType("ATTRIBUTE_REF"); if (!n) return; if (!n.value) return; var i = n.value; if (i.indexOf("[") === 0) { var a = i.substring(2, i.length - 1) } else { var a = i.substring(1) } var o = "[" + a + "]"; var s = a.split("="); var u = s[0]; var l = s[1]; if (l) { if (l.indexOf('"') === 0) { l = l.substring(1, l.length - 1) } } return { type: "attributeRef", name: u, css: o, value: l, op: function (e) { var t = e.you || e.me; if (t) { return t.getAttribute(u) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("styleRef", (function (e, t, r) { var n = r.matchTokenType("STYLE_REF"); if (!n) return; if (!n.value) return; var i = n.value.substr(1); if (i.startsWith("computed-")) { i = i.substr("computed-".length); return { type: "computedStyleRef", name: i, op: function (e) { var r = e.you || e.me; if (r) { return t.resolveComputedStyle(r, i) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { return { type: "styleRef", name: i, op: function (e) { var r = e.you || e.me; if (r) { return t.resolveStyle(r, i) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } })); t.addGrammarElement("objectKey", (function (e, t, r) { var n; if (n = r.matchTokenType("STRING")) { return { type: "objectKey", key: n.value, evaluate: function () { return n.value } } } else if (r.matchOpToken("[")) { var i = e.parseElement("expression", r); r.requireOpToken("]"); return { type: "objectKey", expr: i, args: [i], op: function (e, t) { return t }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { var a = ""; do { n = r.matchTokenType("IDENTIFIER") || r.matchOpToken("-"); if (n) a += n.value } while (n); return { type: "objectKey", key: a, evaluate: function () { return a } } } })); t.addLeafExpression("objectLiteral", (function (e, t, r) { if (!r.matchOpToken("{")) return; var n = []; var i = []; if (!r.matchOpToken("}")) { do { var a = e.requireElement("objectKey", r); r.requireOpToken(":"); var o = e.requireElement("expression", r); i.push(o); n.push(a) } while (r.matchOpToken(",")); r.requireOpToken("}") } return { type: "objectLiteral", args: [n, i], op: function (e, t, r) { var n = {}; for (var i = 0; i < t.length; i++) { n[t[i]] = r[i] } return n }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("nakedNamedArgumentList", (function (e, t, r) { var n = []; var i = []; if (r.currentToken().type === "IDENTIFIER") { do { var a = r.requireTokenType("IDENTIFIER"); r.requireOpToken(":"); var o = e.requireElement("expression", r); i.push(o); n.push({ name: a, value: o }) } while (r.matchOpToken(",")) } return { type: "namedArgumentList", fields: n, args: [i], op: function (e, t) { var r = { _namedArgList_: true }; for (var i = 0; i < t.length; i++) { var a = n[i]; r[a.name.value] = t[i] } return r }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("namedArgumentList", (function (e, t, r) { if (!r.matchOpToken("(")) return; var n = e.requireElement("nakedNamedArgumentList", r); r.requireOpToken(")"); return n })); t.addGrammarElement("symbol", (function (e, t, r) { var n = "default"; if (r.matchToken("global")) { n = "global" } else if (r.matchToken("element") || r.matchToken("module")) { n = "element"; if (r.matchOpToken("'")) { r.requireToken("s") } } else if (r.matchToken("local")) { n = "local" } let i = r.matchOpToken(":"); let a = r.matchTokenType("IDENTIFIER"); if (a && a.value) { var o = a.value; if (i) { o = ":" + o } if (n === "default") { if (o.indexOf("$") === 0) { n = "global" } if (o.indexOf(":") === 0) { n = "element" } } return { type: "symbol", token: a, scope: n, name: o, evaluate: function (e) { return t.resolveSymbol(o, e, n) } } } })); t.addGrammarElement("implicitMeTarget", (function (e, t, r) { return { type: "implicitMeTarget", evaluate: function (e) { return e.you || e.me } } })); t.addLeafExpression("boolean", (function (e, t, r) { var n = r.matchToken("true") || r.matchToken("false"); if (!n) return; const i = n.value === "true"; return { type: "boolean", evaluate: function (e) { return i } } })); t.addLeafExpression("null", (function (e, t, r) { if (r.matchToken("null")) { return { type: "null", evaluate: function (e) { return null } } } })); t.addLeafExpression("arrayLiteral", (function (e, t, r) { if (!r.matchOpToken("[")) return; var n = []; if (!r.matchOpToken("]")) { do { var i = e.requireElement("expression", r); n.push(i) } while (r.matchOpToken(",")); r.requireOpToken("]") } return { type: "arrayLiteral", values: n, args: [n], op: function (e, t) { return t }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("blockLiteral", (function (e, t, r) { if (!r.matchOpToken("\\")) return; var n = []; var i = r.matchTokenType("IDENTIFIER"); if (i) { n.push(i); while (r.matchOpToken(",")) { n.push(r.requireTokenType("IDENTIFIER")) } } r.requireOpToken("-"); r.requireOpToken(">"); var a = e.requireElement("expression", r); return { type: "blockLiteral", args: n, expr: a, evaluate: function (e) { var t = function () { for (var t = 0; t < n.length; t++) { e.locals[n[t].value] = arguments[t] } return a.evaluate(e) }; return t } } })); t.addIndirectExpression("propertyAccess", (function (e, t, r, n) { if (!r.matchOpToken(".")) return; var i = r.requireTokenType("IDENTIFIER"); var a = { type: "propertyAccess", root: n, prop: i, args: [n], op: function (e, r) { var n = t.resolveProperty(r, i.value); return n }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("of", (function (e, t, r, n) { if (!r.matchToken("of")) return; var i = e.requireElement("unaryExpression", r); var a = null; var o = n; while (o.root) { a = o; o = o.root } if (o.type !== "symbol" && o.type !== "attributeRef" && o.type !== "styleRef" && o.type !== "computedStyleRef") { e.raiseParseError(r, "Cannot take a property of a non-symbol: " + o.type) } var s = o.type === "attributeRef"; var u = o.type === "styleRef" || o.type === "computedStyleRef"; if (s || u) { var l = o } var c = o.name; var f = { type: "ofExpression", prop: o.token, root: i, attribute: l, expression: n, args: [i], op: function (e, r) { if (s) { return t.resolveAttribute(r, c) } else if (u) { if (o.type === "computedStyleRef") { return t.resolveComputedStyle(r, c) } else { return t.resolveStyle(r, c) } } else { return t.resolveProperty(r, c) } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; if (o.type === "attributeRef") { f.attribute = o } if (a) { a.root = f; a.args = [f] } else { n = f } return e.parseElement("indirectExpression", r, n) })); t.addIndirectExpression("possessive", (function (e, t, r, n) { if (e.possessivesDisabled) { return } var i = r.matchOpToken("'"); if (i || n.type === "symbol" && (n.name === "my" || n.name === "its" || n.name === "your") && (r.currentToken().type === "IDENTIFIER" || r.currentToken().type === "ATTRIBUTE_REF" || r.currentToken().type === "STYLE_REF")) { if (i) { r.requireToken("s") } var a, o, s; a = e.parseElement("attributeRef", r); if (a == null) { o = e.parseElement("styleRef", r); if (o == null) { s = r.requireTokenType("IDENTIFIER") } } var u = { type: "possessive", root: n, attribute: a || o, prop: s, args: [n], op: function (e, r) { if (a) { var n = t.resolveAttribute(r, a.name) } else if (o) { var n; if (o.type === "computedStyleRef") { n = t.resolveComputedStyle(r, o["name"]) } else { n = t.resolveStyle(r, o["name"]) } } else { var n = t.resolveProperty(r, s.value) } return n }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, u) } })); t.addIndirectExpression("inExpression", (function (e, t, r, n) { if (!r.matchToken("in")) return; var i = e.requireElement("unaryExpression", r); var a = { type: "inExpression", root: n, args: [n, i], op: function (e, r, n) { var i = []; if (r.css) { t.implicitLoop(n, (function (e) { var t = e.querySelectorAll(r.css); for (var n = 0; n < t.length; n++) { i.push(t[n]) } })) } else if (r instanceof Element) { var a = false; t.implicitLoop(n, (function (e) { if (e.contains(r)) { a = true } })); if (a) { return r } } else { t.implicitLoop(r, (function (e) { t.implicitLoop(n, (function (t) { if (e === t) { i.push(e) } })) })) } return i }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("asExpression", (function (e, t, r, n) { if (!r.matchToken("as")) return; r.matchToken("a") || r.matchToken("an"); var i = e.requireElement("dotOrColonPath", r).evaluate(); var a = { type: "asExpression", root: n, args: [n], op: function (e, r) { return t.convertValue(r, i) }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("functionCall", (function (e, t, r, n) { if (!r.matchOpToken("(")) return; var i = []; if (!r.matchOpToken(")")) { do { i.push(e.requireElement("expression", r)) } while (r.matchOpToken(",")); r.requireOpToken(")") } if (n.root) { var a = { type: "functionCall", root: n, argExressions: i, args: [n.root, i], op: function (e, r, i) { t.nullCheck(r, n.root); var a = r[n.prop.value]; t.nullCheck(a, n); if (a.hyperfunc) { i.push(e) } return a.apply(r, i) }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { var a = { type: "functionCall", root: n, argExressions: i, args: [n, i], op: function (e, r, i) { t.nullCheck(r, n); if (r.hyperfunc) { i.push(e) } var a = r.apply(null, i); return a }, evaluate: function (e) { return t.unifiedEval(this, e) } } } return e.parseElement("indirectExpression", r, a) })); t.addIndirectExpression("attributeRefAccess", (function (e, t, r, n) { var i = e.parseElement("attributeRef", r); if (!i) return; var a = { type: "attributeRefAccess", root: n, attribute: i, args: [n], op: function (e, r) { var n = t.resolveAttribute(r, i.name); return n }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return a })); t.addIndirectExpression("arrayIndex", (function (e, t, r, n) { if (!r.matchOpToken("[")) return; var i = false; var a = false; var o = null; var s = null; if (r.matchOpToken("..")) { i = true; o = e.requireElement("expression", r) } else { o = e.requireElement("expression", r); if (r.matchOpToken("..")) { a = true; var u = r.currentToken(); if (u.type !== "R_BRACKET") { s = e.parseElement("expression", r) } } } r.requireOpToken("]"); var l = { type: "arrayIndex", root: n, prop: o, firstIndex: o, secondIndex: s, args: [n, o, s], op: function (e, t, r, n) { if (t == null) { return null } if (i) { if (r < 0) { r = t.length + r } return t.slice(0, r + 1) } else if (a) { if (n != null) { if (n < 0) { n = t.length + n } return t.slice(r, n + 1) } else { return t.slice(r) } } else { return t[r] } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return e.parseElement("indirectExpression", r, l) })); var a = ["em", "ex", "cap", "ch", "ic", "rem", "lh", "rlh", "vw", "vh", "vi", "vb", "vmin", "vmax", "cm", "mm", "Q", "pc", "pt", "px"]; t.addGrammarElement("postfixExpression", (function (e, t, r) { var n = e.parseElement("primaryExpression", r); let i = r.matchAnyToken.apply(r, a) || r.matchOpToken("%"); if (i) { return { type: "stringPostfix", postfix: i.value, args: [n], op: function (e, t) { return "" + t + i.value }, evaluate: function (e) { return t.unifiedEval(this, e) } } } var o = null; if (r.matchToken("s") || r.matchToken("seconds")) { o = 1e3 } else if (r.matchToken("ms") || r.matchToken("milliseconds")) { o = 1 } if (o) { return { type: "timeExpression", time: n, factor: o, args: [n], op: function (e, t) { return t * o }, evaluate: function (e) { return t.unifiedEval(this, e) } } } if (r.matchOpToken(":")) { var s = r.requireTokenType("IDENTIFIER"); if (!s.value) return; var u = !r.matchOpToken("!"); return { type: "typeCheck", typeName: s, nullOk: u, args: [n], op: function (e, r) { var n = t.typeCheck(r, this.typeName.value, u); if (n) { return r } else { throw new Error("Typecheck failed! Expected: " + s.value) } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } else { return n } })); t.addGrammarElement("logicalNot", (function (e, t, r) { if (!r.matchToken("not")) return; var n = e.requireElement("unaryExpression", r); return { type: "logicalNot", root: n, args: [n], op: function (e, t) { return !t }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("noExpression", (function (e, t, r) { if (!r.matchToken("no")) return; var n = e.requireElement("unaryExpression", r); return { type: "noExpression", root: n, args: [n], op: function (e, r) { return t.isEmpty(r) }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addLeafExpression("some", (function (e, t, r) { if (!r.matchToken("some")) return; var n = e.requireElement("expression", r); return { type: "noExpression", root: n, args: [n], op: function (e, r) { return !t.isEmpty(r) }, evaluate(e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("negativeNumber", (function (e, t, r) { if (!r.matchOpToken("-")) return; var n = e.requireElement("unaryExpression", r); return { type: "negativeNumber", root: n, args: [n], op: function (e, t) { return -1 * t }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("unaryExpression", (function (e, t, r) { r.matchToken("the"); return e.parseAnyOf(["beepExpression", "logicalNot", "relativePositionalExpression", "positionalExpression", "noExpression", "negativeNumber", "postfixExpression"], r) })); t.addGrammarElement("beepExpression", (function (e, t, r) { if (!r.matchToken("beep!")) return; var n = e.parseElement("unaryExpression", r); if (n) { n["booped"] = true; var i = n.evaluate; n.evaluate = function (e) { let r = i.apply(n, arguments); let a = e.me; t.beepValueToConsole(a, n, r); return r }; return n } })); var s = function (e, t, r, n) { var i = t.querySelectorAll(r); for (var a = 0; a < i.length; a++) { var o = i[a]; if (o.compareDocumentPosition(e) === Node.DOCUMENT_POSITION_PRECEDING) { return o } } if (n) { return i[0] } }; var u = function (e, t, r, n) { var i = t.querySelectorAll(r); for (var a = i.length - 1; a >= 0; a--) { var o = i[a]; if (o.compareDocumentPosition(e) === Node.DOCUMENT_POSITION_FOLLOWING) { return o } } if (n) { return i[i.length - 1] } }; var l = function (e, t, r, n) { var i = []; o.prototype.forEach(t, (function (t) { if (t.matches(r) || t === e) { i.push(t) } })); for (var a = 0; a < i.length - 1; a++) { var s = i[a]; if (s === e) { return i[a + 1] } } if (n) { var u = i[0]; if (u && u.matches(r)) { return u } } }; var c = function (e, t, r, n) { return l(e, Array.from(t).reverse(), r, n) }; t.addGrammarElement("relativePositionalExpression", (function (e, t, r) { var n = r.matchAnyToken("next", "previous"); if (!n) return; var a = n.value === "next"; var o = e.parseElement("expression", r); if (r.matchToken("from")) { r.pushFollow("in"); try { var f = e.requireElement("unaryExpression", r) } finally { r.popFollow() } } else { var f = e.requireElement("implicitMeTarget", r) } var m = false; var p; if (r.matchToken("in")) { m = true; var h = e.requireElement("unaryExpression", r) } else if (r.matchToken("within")) { p = e.requireElement("unaryExpression", r) } else { p = document.body } var v = false; if (r.matchToken("with")) { r.requireToken("wrapping"); v = true } return { type: "relativePositionalExpression", from: f, forwardSearch: a, inSearch: m, wrapping: v, inElt: h, withinElt: p, operator: n.value, args: [o, f, h, p], op: function (e, t, r, n, f) { var p = t.css; if (p == null) { throw "Expected a CSS value to be returned by " + i.sourceFor.apply(o) } if (m) { if (n) { if (a) { return l(r, n, p, v) } else { return c(r, n, p, v) } } } else { if (f) { if (a) { return s(r, f, p, v) } else { return u(r, f, p, v) } } } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("positionalExpression", (function (e, t, r) { var n = r.matchAnyToken("first", "last", "random"); if (!n) return; r.matchAnyToken("in", "from", "of"); var i = e.requireElement("unaryExpression", r); const a = n.value; return { type: "positionalExpression", rhs: i, operator: n.value, args: [i], op: function (e, t) { if (t && !Array.isArray(t)) { if (t.children) { t = t.children } else { t = Array.from(t) } } if (t) { if (a === "first") { return t[0] } else if (a === "last") { return t[t.length - 1] } else if (a === "random") { return t[Math.floor(Math.random() * t.length)] } } }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); t.addGrammarElement("mathOperator", (function (e, t, r) { var n = e.parseElement("unaryExpression", r); var i, a = null; i = r.matchAnyOpToken("+", "-", "*", "/") || r.matchToken("mod"); while (i) { a = a || i; var o = i.value; if (a.value !== o) { e.raiseParseError(r, "You must parenthesize math operations with different operators") } var s = e.parseElement("unaryExpression", r); n = { type: "mathOperator", lhs: n, rhs: s, operator: o, args: [n, s], op: function (e, t, r) { if (o === "+") { return t + r } else if (o === "-") { return t - r } else if (o === "*") { return t * r } else if (o === "/") { return t / r } else if (o === "mod") { return t % r } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; i = r.matchAnyOpToken("+", "-", "*", "/") || r.matchToken("mod") } return n })); t.addGrammarElement("mathExpression", (function (e, t, r) { return e.parseAnyOf(["mathOperator", "unaryExpression"], r) })); function f(e, t, r) { if (t["contains"]) { return t.contains(r) } else if (t["includes"]) { return t.includes(r) } else { throw Error("The value of " + e.sourceFor() + " does not have a contains or includes method on it") } } function p(e, t, r) { if (t["match"]) { return !!t.match(r) } else if (t["matches"]) { return t.matches(r) } else { throw Error("The value of " + e.sourceFor() + " does not have a match or matches method on it") } } t.addGrammarElement("comparisonOperator", (function (e, t, r) { var n = e.parseElement("mathExpression", r); var i = r.matchAnyOpToken("<", ">", "<=", ">=", "==", "===", "!=", "!=="); var a = i ? i.value : null; var o = true; var s = false; if (a == null) { if (r.matchToken("is") || r.matchToken("am")) { if (r.matchToken("not")) { if (r.matchToken("in")) { a = "not in" } else if (r.matchToken("a")) { a = "not a"; s = true } else if (r.matchToken("empty")) { a = "not empty"; o = false } else { if (r.matchToken("really")) { a = "!==" } else { a = "!=" } if (r.matchToken("equal")) { r.matchToken("to") } } } else if (r.matchToken("in")) { a = "in" } else if (r.matchToken("a")) { a = "a"; s = true } else if (r.matchToken("empty")) { a = "empty"; o = false } else if (r.matchToken("less")) { r.requireToken("than"); if (r.matchToken("or")) { r.requireToken("equal"); r.requireToken("to"); a = "<=" } else { a = "<" } } else if (r.matchToken("greater")) { r.requireToken("than"); if (r.matchToken("or")) { r.requireToken("equal"); r.requireToken("to"); a = ">=" } else { a = ">" } } else { if (r.matchToken("really")) { a = "===" } else { a = "==" } if (r.matchToken("equal")) { r.matchToken("to") } } } else if (r.matchToken("equals")) { a = "==" } else if (r.matchToken("really")) { r.requireToken("equals"); a = "===" } else if (r.matchToken("exist") || r.matchToken("exists")) { a = "exist"; o = false } else if (r.matchToken("matches") || r.matchToken("match")) { a = "match" } else if (r.matchToken("contains") || r.matchToken("contain")) { a = "contain" } else if (r.matchToken("includes") || r.matchToken("include")) { a = "include" } else if (r.matchToken("do") || r.matchToken("does")) { r.requireToken("not"); if (r.matchToken("matches") || r.matchToken("match")) { a = "not match" } else if (r.matchToken("contains") || r.matchToken("contain")) { a = "not contain" } else if (r.matchToken("exist") || r.matchToken("exist")) { a = "not exist"; o = false } else if (r.matchToken("include")) { a = "not include" } else { e.raiseParseError(r, "Expected matches or contains") } } } if (a) { var u, l, c; if (s) { u = r.requireTokenType("IDENTIFIER"); l = !r.matchOpToken("!") } else if (o) { c = e.requireElement("mathExpression", r); if (a === "match" || a === "not match") { c = c.css ? c.css : c } } var m = n; n = { type: "comparisonOperator", operator: a, typeName: u, nullOk: l, lhs: n, rhs: c, args: [n, c], op: function (e, r, n) { if (a === "==") { return r == n } else if (a === "!=") { return r != n } if (a === "===") { return r === n } else if (a === "!==") { return r !== n } if (a === "match") { return r != null && p(m, r, n) } if (a === "not match") { return r == null || !p(m, r, n) } if (a === "in") { return n != null && f(c, n, r) } if (a === "not in") { return n == null || !f(c, n, r) } if (a === "contain") { return r != null && f(m, r, n) } if (a === "not contain") { return r == null || !f(m, r, n) } if (a === "include") { return r != null && f(m, r, n) } if (a === "not include") { return r == null || !f(m, r, n) } if (a === "===") { return r === n } else if (a === "!==") { return r !== n } else if (a === "<") { return r < n } else if (a === ">") { return r > n } else if (a === "<=") { return r <= n } else if (a === ">=") { return r >= n } else if (a === "empty") { return t.isEmpty(r) } else if (a === "not empty") { return !t.isEmpty(r) } else if (a === "exist") { return t.doesExist(r) } else if (a === "not exist") { return !t.doesExist(r) } else if (a === "a") { return t.typeCheck(r, u.value, l) } else if (a === "not a") { return !t.typeCheck(r, u.value, l) } else { throw "Unknown comparison : " + a } }, evaluate: function (e) { return t.unifiedEval(this, e) } } } return n })); t.addGrammarElement("comparisonExpression", (function (e, t, r) { return e.parseAnyOf(["comparisonOperator", "mathExpression"], r) })); t.addGrammarElement("logicalOperator", (function (e, t, r) { var n = e.parseElement("comparisonExpression", r); var i, a = null; i = r.matchToken("and") || r.matchToken("or"); while (i) { a = a || i; if (a.value !== i.value) { e.raiseParseError(r, "You must parenthesize logical operations with different operators") } var o = e.requireElement("comparisonExpression", r); const s = i.value; n = { type: "logicalOperator", operator: s, lhs: n, rhs: o, args: [n, o], op: function (e, t, r) { if (s === "and") { return t && r } else { return t || r } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; i = r.matchToken("and") || r.matchToken("or") } return n })); t.addGrammarElement("logicalExpression", (function (e, t, r) { return e.parseAnyOf(["logicalOperator", "mathExpression"], r) })); t.addGrammarElement("asyncExpression", (function (e, t, r) { if (r.matchToken("async")) { var n = e.requireElement("logicalExpression", r); var i = { type: "asyncExpression", value: n, evaluate: function (e) { return { asyncWrapper: true, value: this.value.evaluate(e) } } }; return i } else { return e.parseElement("logicalExpression", r) } })); t.addGrammarElement("expression", (function (e, t, r) { r.matchToken("the"); return e.parseElement("asyncExpression", r) })); t.addGrammarElement("assignableExpression", (function (e, t, r) { r.matchToken("the"); var n = e.parseElement("primaryExpression", r); if (n && (n.type === "symbol" || n.type === "ofExpression" || n.type === "propertyAccess" || n.type === "attributeRefAccess" || n.type === "attributeRef" || n.type === "styleRef" || n.type === "arrayIndex" || n.type === "possessive")) { return n } else { e.raiseParseError(r, "A target expression must be writable. The expression type '" + (n && n.type) + "' is not.") } return n })); t.addGrammarElement("hyperscript", (function (e, t, r) { var n = []; if (r.hasMore()) { while (e.featureStart(r.currentToken()) || r.currentToken().value === "(") { var i = e.requireElement("feature", r); n.push(i); r.matchToken("end") } } return { type: "hyperscript", features: n, apply: function (e, t, r) { for (const i of n) { i.install(e, t, r) } } } })); var v = function (e) { var t = []; if (e.token(0).value === "(" && (e.token(1).value === ")" || e.token(2).value === "," || e.token(2).value === ")")) { e.matchOpToken("("); do { t.push(e.requireTokenType("IDENTIFIER")) } while (e.matchOpToken(",")); e.requireOpToken(")") } return t }; t.addFeature("on", (function (e, t, r) { if (!r.matchToken("on")) return; var n = false; if (r.matchToken("every")) { n = true } var i = []; var a = null; do { var o = e.requireElement("eventName", r, "Expected event name"); var s = o.evaluate(); if (a) { a = a + " or " + s } else { a = "on " + s } var u = v(r); var l = null; if (r.matchOpToken("[")) { l = e.requireElement("expression", r); r.requireOpToken("]") } var c, f, m; if (r.currentToken().type === "NUMBER") { var p = r.consumeToken(); if (!p.value) return; c = parseInt(p.value); if (r.matchToken("to")) { var h = r.consumeToken(); if (!h.value) return; f = parseInt(h.value) } else if (r.matchToken("and")) { m = true; r.requireToken("on") } } var d, E; if (s === "intersection") { d = {}; if (r.matchToken("with")) { d["with"] = e.requireElement("expression", r).evaluate() } if (r.matchToken("having")) { do { if (r.matchToken("margin")) { d["rootMargin"] = e.requireElement("stringLike", r).evaluate() } else if (r.matchToken("threshold")) { d["threshold"] = e.requireElement("expression", r).evaluate() } else { e.raiseParseError(r, "Unknown intersection config specification") } } while (r.matchToken("and")) } } else if (s === "mutation") { E = {}; if (r.matchToken("of")) { do { if (r.matchToken("anything")) { E["attributes"] = true; E["subtree"] = true; E["characterData"] = true; E["childList"] = true } else if (r.matchToken("childList")) { E["childList"] = true } else if (r.matchToken("attributes")) { E["attributes"] = true; E["attributeOldValue"] = true } else if (r.matchToken("subtree")) { E["subtree"] = true } else if (r.matchToken("characterData")) { E["characterData"] = true; E["characterDataOldValue"] = true } else if (r.currentToken().type === "ATTRIBUTE_REF") { var T = r.consumeToken(); if (E["attributeFilter"] == null) { E["attributeFilter"] = [] } if (T.value.indexOf("@") == 0) { E["attributeFilter"].push(T.value.substring(1)) } else { e.raiseParseError(r, "Only shorthand attribute references are allowed here") } } else { e.raiseParseError(r, "Unknown mutation config specification") } } while (r.matchToken("or")) } else { E["attributes"] = true; E["characterData"] = true; E["childList"] = true } } var y = null; var k = false; if (r.matchToken("from")) { if (r.matchToken("elsewhere")) { k = true } else { r.pushFollow("or"); try { y = e.requireElement("expression", r) } finally { r.popFollow() } if (!y) { e.raiseParseError(r, 'Expected either target value or "elsewhere".') } } } if (y === null && k === false && r.matchToken("elsewhere")) { k = true } if (r.matchToken("in")) { var x = e.parseElement("unaryExpression", r) } if (r.matchToken("debounced")) { r.requireToken("at"); var g = e.requireElement("unaryExpression", r); var b = g.evaluate({}) } else if (r.matchToken("throttled")) { r.requireToken("at"); var g = e.requireElement("unaryExpression", r); var w = g.evaluate({}) } i.push({ execCount: 0, every: n, on: s, args: u, filter: l, from: y, inExpr: x, elsewhere: k, startCount: c, endCount: f, unbounded: m, debounceTime: b, throttleTime: w, mutationSpec: E, intersectionSpec: d, debounced: undefined, lastExec: undefined }) } while (r.matchToken("or")); var S = true; if (!n) { if (r.matchToken("queue")) { if (r.matchToken("all")) { var q = true; var S = false } else if (r.matchToken("first")) { var N = true } else if (r.matchToken("none")) { var I = true } else { r.requireToken("last") } } } var C = e.requireElement("commandList", r); e.ensureTerminated(C); var R, A; if (r.matchToken("catch")) { R = r.requireTokenType("IDENTIFIER").value; A = e.requireElement("commandList", r); e.ensureTerminated(A) } if (r.matchToken("finally")) { var L = e.requireElement("commandList", r); e.ensureTerminated(L) } var O = { displayName: a, events: i, start: C, every: n, execCount: 0, errorHandler: A, errorSymbol: R, execute: function (e) { let r = t.getEventQueueFor(e.me, O); if (r.executing && n === false) { if (I || N && r.queue.length > 0) { return } if (S) { r.queue.length = 0 } r.queue.push(e); return } O.execCount++; r.executing = true; e.meta.onHalt = function () { r.executing = false; var e = r.queue.shift(); if (e) { setTimeout((function () { O.execute(e) }), 1) } }; e.meta.reject = function (r) { console.error(r.message ? r.message : r); var n = t.getHyperTrace(e, r); if (n) { n.print() } t.triggerEvent(e.me, "exception", { error: r }) }; C.execute(e) }, install: function (e, r) { for (const r of O.events) { var n; if (r.elsewhere) { n = [document] } else if (r.from) { n = r.from.evaluate(t.makeContext(e, O, e, null)) } else { n = [e] } t.implicitLoop(n, (function (n) { var i = r.on; if (n == null) { console.warn("'%s' feature ignored because target does not exists:", a, e); return } if (r.mutationSpec) { i = "hyperscript:mutation"; const e = new MutationObserver((function (e, r) { if (!O.executing) { t.triggerEvent(n, i, { mutationList: e, observer: r }) } })); e.observe(n, r.mutationSpec) } if (r.intersectionSpec) { i = "hyperscript:intersection"; const e = new IntersectionObserver((function (r) { for (const o of r) { var a = { observer: e }; a = Object.assign(a, o); a["intersecting"] = o.isIntersecting; t.triggerEvent(n, i, a) } }), r.intersectionSpec); e.observe(n) } var o = n.addEventListener || n.on; o.call(n, i, (function a(o) { if (typeof Node !== "undefined" && e instanceof Node && n !== e && !e.isConnected) { n.removeEventListener(i, a); return } var s = t.makeContext(e, O, e, o); if (r.elsewhere && e.contains(o.target)) { return } if (r.from) { s.result = n } for (const e of r.args) { let t = s.event[e.value]; if (t !== undefined) { s.locals[e.value] = t } else if ("detail" in s.event) { s.locals[e.value] = s.event["detail"][e.value] } } s.meta.errorHandler = A; s.meta.errorSymbol = R; s.meta.finallyHandler = L; if (r.filter) { var u = s.meta.context; s.meta.context = s.event; try { var l = r.filter.evaluate(s); if (l) { } else { return } } finally { s.meta.context = u } } if (r.inExpr) { var c = o.target; while (true) { if (c.matches && c.matches(r.inExpr.css)) { s.result = c; break } else { c = c.parentElement; if (c == null) { return } } } } r.execCount++; if (r.startCount) { if (r.endCount) { if (r.execCount < r.startCount || r.execCount > r.endCount) { return } } else if (r.unbounded) { if (r.execCount < r.startCount) { return } } else if (r.execCount !== r.startCount) { return } } if (r.debounceTime) { if (r.debounced) { clearTimeout(r.debounced) } r.debounced = setTimeout((function () { O.execute(s) }), r.debounceTime); return } if (r.throttleTime) { if (r.lastExec && Date.now() < r.lastExec + r.throttleTime) { return } else { r.lastExec = Date.now() } } O.execute(s) })) })) } } }; e.setParent(C, O); return O })); t.addFeature("def", (function (e, t, r) { if (!r.matchToken("def")) return; var n = e.requireElement("dotOrColonPath", r); var i = n.evaluate(); var a = i.split("."); var o = a.pop(); var s = []; if (r.matchOpToken("(")) { if (r.matchOpToken(")")) { } else { do { s.push(r.requireTokenType("IDENTIFIER")) } while (r.matchOpToken(",")); r.requireOpToken(")") } } var u = e.requireElement("commandList", r); var l, c; if (r.matchToken("catch")) { l = r.requireTokenType("IDENTIFIER").value; c = e.parseElement("commandList", r) } if (r.matchToken("finally")) { var f = e.requireElement("commandList", r); e.ensureTerminated(f) } var m = { displayName: o + "(" + s.map((function (e) { return e.value })).join(", ") + ")", name: o, args: s, start: u, errorHandler: c, errorSymbol: l, finallyHandler: f, install: function (e, r) { var n = function () { var n = t.makeContext(r, m, e, null); n.meta.errorHandler = c; n.meta.errorSymbol = l; n.meta.finallyHandler = f; for (var i = 0; i < s.length; i++) { var a = s[i]; var o = arguments[i]; if (a) { n.locals[a.value] = o } } n.meta.caller = arguments[s.length]; if (n.meta.caller) { n.meta.callingCommand = n.meta.caller.meta.command } var p, h = null; var v = new Promise((function (e, t) { p = e; h = t })); u.execute(n); if (n.meta.returned) { return n.meta.returnValue } else { n.meta.resolve = p; n.meta.reject = h; return v } }; n.hyperfunc = true; n.hypername = i; t.assignToNamespace(e, a, o, n) } }; e.ensureTerminated(u); if (c) { e.ensureTerminated(c) } e.setParent(u, m); return m })); t.addFeature("set", (function (e, t, r) { let n = e.parseElement("setCommand", r); if (n) { if (n.target.scope !== "element") { e.raiseParseError(r, "variables declared at the feature level must be element scoped.") } let i = { start: n, install: function (e, r) { n && n.execute(t.makeContext(e, i, e, null)) } }; e.ensureTerminated(n); return i } })); t.addFeature("init", (function (e, t, r) { if (!r.matchToken("init")) return; var n = r.matchToken("immediately"); var i = e.requireElement("commandList", r); var a = { start: i, install: function (e, r) { let o = function () { i && i.execute(t.makeContext(e, a, e, null)) }; if (n) { o() } else { setTimeout(o, 0) } } }; e.ensureTerminated(i); e.setParent(i, a); return a })); t.addFeature("worker", (function (e, t, r) { if (r.matchToken("worker")) { e.raiseParseError(r, "In order to use the 'worker' feature, include " + "the _hyperscript worker plugin. See " + "https://hyperscript.org/features/worker/ for " + "more info."); return undefined } })); t.addFeature("behavior", (function (t, r, n) { if (!n.matchToken("behavior")) return; var i = t.requireElement("dotOrColonPath", n).evaluate(); var a = i.split("."); var o = a.pop(); var s = []; if (n.matchOpToken("(") && !n.matchOpToken(")")) { do { s.push(n.requireTokenType("IDENTIFIER").value) } while (n.matchOpToken(",")); n.requireOpToken(")") } var u = t.requireElement("hyperscript", n); for (var l = 0; l < u.features.length; l++) { var c = u.features[l]; c.behavior = i } return { install: function (t, n) { r.assignToNamespace(e.document && e.document.body, a, o, (function (e, t, n) { var a = r.getInternalData(e); var o = h(a, i + "Scope"); for (var l = 0; l < s.length; l++) { o[s[l]] = n[s[l]] } u.apply(e, t) })) } } })); t.addFeature("install", (function (t, r, n) { if (!n.matchToken("install")) return; var i = t.requireElement("dotOrColonPath", n).evaluate(); var a = i.split("."); var o = t.parseElement("namedArgumentList", n); var s; return s = { install: function (t, n) { r.unifiedEval({ args: [o], op: function (r, o) { var s = e; for (var u = 0; u < a.length; u++) { s = s[a[u]]; if (typeof s !== "object" && typeof s !== "function") throw new Error("No such behavior defined as " + i) } if (!(s instanceof Function)) throw new Error(i + " is not a behavior"); s(t, n, o) } }, r.makeContext(t, s, t, null)) } } })); t.addGrammarElement("jsBody", (function (e, t, r) { var n = r.currentToken().start; var i = r.currentToken(); var a = []; var o = ""; var s = false; while (r.hasMore()) { i = r.consumeToken(); var u = r.token(0, true); if (u.type === "IDENTIFIER" && u.value === "end") { break } if (s) { if (i.type === "IDENTIFIER" || i.type === "NUMBER") { o += i.value } else { if (o !== "") a.push(o); o = ""; s = false } } else if (i.type === "IDENTIFIER" && i.value === "function") { s = true } } var l = i.end + 1; return { type: "jsBody", exposedFunctionNames: a, jsSource: r.source.substring(n, l) } })); t.addFeature("js", (function (t, r, n) { if (!n.matchToken("js")) return; var i = t.requireElement("jsBody", n); var a = i.jsSource + "\nreturn { " + i.exposedFunctionNames.map((function (e) { return e + ":" + e })).join(",") + " } "; var o = new Function(a); return { jsSource: a, function: o, exposedFunctionNames: i.exposedFunctionNames, install: function () { Object.assign(e, o()) } } })); t.addCommand("js", (function (t, r, n) { if (!n.matchToken("js")) return; var i = []; if (n.matchOpToken("(")) { if (n.matchOpToken(")")) { } else { do { var a = n.requireTokenType("IDENTIFIER"); i.push(a.value) } while (n.matchOpToken(",")); n.requireOpToken(")") } } var o = t.requireElement("jsBody", n); n.matchToken("end"); var s = E(Function, i.concat([o.jsSource])); var u = { jsSource: o.jsSource, function: s, inputs: i, op: function (t) { var n = []; i.forEach((function (e) { n.push(r.resolveSymbol(e, t, "default")) })); var a = s.apply(e, n); if (a && typeof a.then === "function") { return new Promise((function (e) { a.then((function (n) { t.result = n; e(r.findNext(this, t)) })) })) } else { t.result = a; return r.findNext(this, t) } } }; return u })); t.addCommand("async", (function (e, t, r) { if (!r.matchToken("async")) return; if (r.matchToken("do")) { var n = e.requireElement("commandList", r); var i = n; while (i.next) i = i.next; i.next = t.HALT; r.requireToken("end") } else { var n = e.requireElement("command", r) } var a = { body: n, op: function (e) { setTimeout((function () { n.execute(e) })); return t.findNext(this, e) } }; e.setParent(n, a); return a })); t.addCommand("tell", (function (e, t, r) { var n = r.currentToken(); if (!r.matchToken("tell")) return; var i = e.requireElement("expression", r); var a = e.requireElement("commandList", r); if (r.hasMore() && !e.featureStart(r.currentToken())) { r.requireToken("end") } var o = "tell_" + n.start; var s = { value: i, body: a, args: [i], resolveNext: function (e) { var r = e.meta.iterators[o]; if (r.index < r.value.length) { e.you = r.value[r.index++]; return a } else { e.you = r.originalYou; if (this.next) { return this.next } else { return t.findNext(this.parent, e) } } }, op: function (e, t) { if (t == null) { t = [] } else if (!(Array.isArray(t) || t instanceof NodeList)) { t = [t] } e.meta.iterators[o] = { originalYou: e.you, index: 0, value: t }; return this.resolveNext(e) } }; e.setParent(a, s); return s })); t.addCommand("wait", (function (e, t, r) { if (!r.matchToken("wait")) return; var n; if (r.matchToken("for")) { r.matchToken("a"); var i = []; do { var a = r.token(0); if (a.type === "NUMBER" || a.type === "L_PAREN") { i.push({ time: e.requireElement("expression", r).evaluate() }) } else { i.push({ name: e.requireElement("dotOrColonPath", r, "Expected event name").evaluate(), args: v(r) }) } } while (r.matchToken("or")); if (r.matchToken("from")) { var o = e.requireElement("expression", r) } n = { event: i, on: o, args: [o], op: function (e, r) { var n = r ? r : e.me; if (!(n instanceof EventTarget)) throw new Error("Not a valid event target: " + this.on.sourceFor()); return new Promise((r => { var a = false; for (const s of i) { var o = n => { e.result = n; if (s.args) { for (const t of s.args) { e.locals[t.value] = n[t.value] || (n.detail ? n.detail[t.value] : null) } } if (!a) { a = true; r(t.findNext(this, e)) } }; if (s.name) { n.addEventListener(s.name, o, { once: true }) } else if (s.time != null) { setTimeout(o, s.time, s.time) } } })) } }; return n } else { var s; if (r.matchToken("a")) { r.requireToken("tick"); s = 0 } else { s = e.requireElement("expression", r) } n = { type: "waitCmd", time: s, args: [s], op: function (e, r) { return new Promise((n => { setTimeout((() => { n(t.findNext(this, e)) }), r) })) }, execute: function (e) { return t.unifiedExec(this, e) } }; return n } })); t.addGrammarElement("dotOrColonPath", (function (e, t, r) { var n = r.matchTokenType("IDENTIFIER"); if (n) { var i = [n.value]; var a = r.matchOpToken(".") || r.matchOpToken(":"); if (a) { do { i.push(r.requireTokenType("IDENTIFIER", "NUMBER").value) } while (r.matchOpToken(a.value)) } return { type: "dotOrColonPath", path: i, evaluate: function () { return i.join(a ? a.value : "") } } } })); t.addGrammarElement("eventName", (function (e, t, r) { var n; if (n = r.matchTokenType("STRING")) { return { evaluate: function () { return n.value } } } return e.parseElement("dotOrColonPath", r) })); function d(e, t, r, n) { var i = t.requireElement("eventName", n); var a = t.parseElement("namedArgumentList", n); if (e === "send" && n.matchToken("to") || e === "trigger" && n.matchToken("on")) { var o = t.requireElement("expression", n) } else { var o = t.requireElement("implicitMeTarget", n) } var s = { eventName: i, details: a, to: o, args: [o, i, a], op: function (e, t, n, i) { r.nullCheck(t, o); r.implicitLoop(t, (function (t) { r.triggerEvent(t, n, i, e.me) })); return r.findNext(s, e) } }; return s } t.addCommand("trigger", (function (e, t, r) { if (r.matchToken("trigger")) { return d("trigger", e, t, r) } })); t.addCommand("send", (function (e, t, r) { if (r.matchToken("send")) { return d("send", e, t, r) } })); var T = function (e, t, r, n) { if (n) { if (e.commandBoundary(r.currentToken())) { e.raiseParseError(r, "'return' commands must return a value. If you do not wish to return a value, use 'exit' instead.") } else { var i = e.requireElement("expression", r) } } var a = { value: i, args: [i], op: function (e, r) { var n = e.meta.resolve; e.meta.returned = true; e.meta.returnValue = r; if (n) { if (r) { n(r) } else { n() } } return t.HALT } }; return a }; t.addCommand("return", (function (e, t, r) { if (r.matchToken("return")) { return T(e, t, r, true) } })); t.addCommand("exit", (function (e, t, r) { if (r.matchToken("exit")) { return T(e, t, r, false) } })); t.addCommand("halt", (function (e, t, r) { if (r.matchToken("halt")) { if (r.matchToken("the")) { r.requireToken("event"); if (r.matchOpToken("'")) { r.requireToken("s") } var n = true } if (r.matchToken("bubbling")) { var i = true } else if (r.matchToken("default")) { var a = true } var o = T(e, t, r, false); var s = { keepExecuting: true, bubbling: i, haltDefault: a, exit: o, op: function (e) { if (e.event) { if (i) { e.event.stopPropagation() } else if (a) { e.event.preventDefault() } else { e.event.stopPropagation(); e.event.preventDefault() } if (n) { return t.findNext(this, e) } else { return o } } } }; return s } })); t.addCommand("log", (function (e, t, r) { if (!r.matchToken("log")) return; var n = [e.parseElement("expression", r)]; while (r.matchOpToken(",")) { n.push(e.requireElement("expression", r)) } if (r.matchToken("with")) { var i = e.requireElement("expression", r) } var a = { exprs: n, withExpr: i, args: [i, n], op: function (e, r, n) { if (r) { r.apply(null, n) } else { console.log.apply(null, n) } return t.findNext(this, e) } }; return a })); t.addCommand("beep!", (function (e, t, r) { if (!r.matchToken("beep!")) return; var n = [e.parseElement("expression", r)]; while (r.matchOpToken(",")) { n.push(e.requireElement("expression", r)) } var i = { exprs: n, args: [n], op: function (e, r) { for (let i = 0; i < n.length; i++) { const a = n[i]; const o = r[i]; t.beepValueToConsole(e.me, a, o) } return t.findNext(this, e) } }; return i })); t.addCommand("throw", (function (e, t, r) { if (!r.matchToken("throw")) return; var n = e.requireElement("expression", r); var i = { expr: n, args: [n], op: function (e, r) { t.registerHyperTrace(e, r); throw r } }; return i })); var y = function (e, t, r) { var n = e.requireElement("expression", r); var i = { expr: n, args: [n], op: function (e, r) { e.result = r; return t.findNext(i, e) } }; return i }; t.addCommand("call", (function (e, t, r) { if (!r.matchToken("call")) return; var n = y(e, t, r); if (n.expr && n.expr.type !== "functionCall") { e.raiseParseError(r, "Must be a function invocation") } return n })); t.addCommand("get", (function (e, t, r) { if (r.matchToken("get")) { return y(e, t, r) } })); t.addCommand("make", (function (e, t, r) { if (!r.matchToken("make")) return; r.matchToken("a") || r.matchToken("an"); var n = e.requireElement("expression", r); var i = []; if (n.type !== "queryRef" && r.matchToken("from")) { do { i.push(e.requireElement("expression", r)) } while (r.matchOpToken(",")) } if (r.matchToken("called")) { var a = e.requireElement("symbol", r) } var o; if (n.type === "queryRef") { o = { op: function (e) { var r, i = "div", o, s = []; var u = /(?:(^|#|\.)([^#\. ]+))/g; while (r = u.exec(n.css)) { if (r[1] === "") i = r[2].trim(); else if (r[1] === "#") o = r[2].trim(); else s.push(r[2].trim()) } var l = document.createElement(i); if (o !== undefined) l.id = o; for (var c = 0; c < s.length; c++) { var f = s[c]; l.classList.add(f) } e.result = l; if (a) { t.setSymbol(a.name, e, a.scope, l) } return t.findNext(this, e) } }; return o } else { o = { args: [n, i], op: function (e, r, n) { e.result = E(r, n); if (a) { t.setSymbol(a.name, e, a.scope, e.result) } return t.findNext(this, e) } }; return o } })); t.addGrammarElement("pseudoCommand", (function (e, t, r) { let n = r.token(1); if (!(n && n.op && (n.value === "." || n.value === "("))) { return null } var i = e.requireElement("primaryExpression", r); var a = i.root; var o = i; while (a.root != null) { o = o.root; a = a.root } if (i.type !== "functionCall") { e.raiseParseError(r, "Pseudo-commands must be function calls") } if (o.type === "functionCall" && o.root.root == null) { if (r.matchAnyToken("the", "to", "on", "with", "into", "from", "at")) { var s = e.requireElement("expression", r) } else if (r.matchToken("me")) { var s = e.requireElement("implicitMeTarget", r) } } var u; if (s) { u = { type: "pseudoCommand", root: s, argExressions: o.argExressions, args: [s, o.argExressions], op: function (e, r, n) { t.nullCheck(r, s); var i = r[o.root.name]; t.nullCheck(i, o); if (i.hyperfunc) { n.push(e) } e.result = i.apply(r, n); return t.findNext(u, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } else { u = { type: "pseudoCommand", expr: i, args: [i], op: function (e, r) { e.result = r; return t.findNext(u, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } return u })); var k = function (e, t, r, n, i) { var a = n.type === "symbol"; var o = n.type === "attributeRef"; var s = n.type === "styleRef"; var u = n.type === "arrayIndex"; if (!(o || s || a) && n.root == null) { e.raiseParseError(r, "Can only put directly into symbols, not references") } var l = null; var c = null; if (a) { } else if (o || s) { l = e.requireElement("implicitMeTarget", r); var f = n } else if (u) { c = n.firstIndex; l = n.root } else { c = n.prop ? n.prop.value : null; var f = n.attribute; l = n.root } var m = { target: n, symbolWrite: a, value: i, args: [l, c, i], op: function (e, r, i, o) { if (a) { t.setSymbol(n.name, e, n.scope, o) } else { t.nullCheck(r, l); if (u) { r[i] = o } else { t.implicitLoop(r, (function (e) { if (f) { if (f.type === "attributeRef") { if (o == null) { e.removeAttribute(f.name) } else { e.setAttribute(f.name, o) } } else { e.style[f.name] = o } } else { e[i] = o } })) } } return t.findNext(this, e) } }; return m }; t.addCommand("default", (function (e, t, r) { if (!r.matchToken("default")) return; var n = e.requireElement("assignableExpression", r); r.requireToken("to"); var i = e.requireElement("expression", r); var a = k(e, t, r, n, i); var o = { target: n, value: i, setter: a, args: [n], op: function (e, r) { if (r) { return t.findNext(this, e) } else { return a } } }; a.parent = o; return o })); t.addCommand("set", (function (e, t, r) { if (!r.matchToken("set")) return; if (r.currentToken().type === "L_BRACE") { var n = e.requireElement("objectLiteral", r); r.requireToken("on"); var i = e.requireElement("expression", r); var a = { objectLiteral: n, target: i, args: [n, i], op: function (e, r, n) { Object.assign(n, r); return t.findNext(this, e) } }; return a } try { r.pushFollow("to"); var i = e.requireElement("assignableExpression", r) } finally { r.popFollow() } r.requireToken("to"); var o = e.requireElement("expression", r); return k(e, t, r, i, o) })); t.addCommand("if", (function (e, t, r) { if (!r.matchToken("if")) return; var n = e.requireElement("expression", r); r.matchToken("then"); var i = e.parseElement("commandList", r); var a = false; let o = r.matchToken("else") || r.matchToken("otherwise"); if (o) { let t = r.peekToken("if"); a = t != null && t.line === o.line; if (a) { var s = e.parseElement("command", r) } else { var s = e.parseElement("commandList", r) } } if (r.hasMore() && !a) { r.requireToken("end") } var u = { expr: n, trueBranch: i, falseBranch: s, args: [n], op: function (e, r) { if (r) { return i } else if (s) { return s } else { return t.findNext(this, e) } } }; e.setParent(i, u); e.setParent(s, u); return u })); var x = function (e, t, r, n) { var i = t.currentToken(); var a; if (t.matchToken("for") || n) { var o = t.requireTokenType("IDENTIFIER"); a = o.value; t.requireToken("in"); var s = e.requireElement("expression", t) } else if (t.matchToken("in")) { a = "it"; var s = e.requireElement("expression", t) } else if (t.matchToken("while")) { var u = e.requireElement("expression", t) } else if (t.matchToken("until")) { var l = true; if (t.matchToken("event")) { var c = e.requireElement("dotOrColonPath", t, "Expected event name"); if (t.matchToken("from")) { var f = e.requireElement("expression", t) } } else { var u = e.requireElement("expression", t) } } else { if (!e.commandBoundary(t.currentToken()) && t.currentToken().value !== "forever") { var m = e.requireElement("expression", t); t.requireToken("times") } else { t.matchToken("forever"); var p = true } } if (t.matchToken("index")) { var o = t.requireTokenType("IDENTIFIER"); var h = o.value } var v = e.parseElement("commandList", t); if (v && c) { var d = v; while (d.next) { d = d.next } var E = { type: "waitATick", op: function () { return new Promise((function (e) { setTimeout((function () { e(r.findNext(E)) }), 0) })) } }; d.next = E } if (t.hasMore()) { t.requireToken("end") } if (a == null) { a = "_implicit_repeat_" + i.start; var T = a } else { var T = a + "_" + i.start } var y = { identifier: a, indexIdentifier: h, slot: T, expression: s, forever: p, times: m, until: l, event: c, on: f, whileExpr: u, resolveNext: function () { return this }, loop: v, args: [u, m], op: function (e, t, n) { var i = e.meta.iterators[T]; var o = false; var s = null; if (this.forever) { o = true } else if (this.until) { if (c) { o = e.meta.iterators[T].eventFired === false } else { o = t !== true } } else if (u) { o = t } else if (n) { o = i.index < n } else { var l = i.iterator.next(); o = !l.done; s = l.value } if (o) { if (i.value) { e.result = e.locals[a] = s } else { e.result = i.index } if (h) { e.locals[h] = i.index } i.index++; return v } else { e.meta.iterators[T] = null; return r.findNext(this.parent, e) } } }; e.setParent(v, y); var k = { name: "repeatInit", args: [s, c, f], op: function (e, t, r, n) { var i = { index: 0, value: t, eventFired: false }; e.meta.iterators[T] = i; if (t && t[Symbol.iterator]) { i.iterator = t[Symbol.iterator]() } if (c) { var a = n || e.me; a.addEventListener(r, (function (t) { e.meta.iterators[T].eventFired = true }), { once: true }) } return y }, execute: function (e) { return r.unifiedExec(this, e) } }; e.setParent(y, k); return k }; t.addCommand("repeat", (function (e, t, r) { if (r.matchToken("repeat")) { return x(e, r, t, false) } })); t.addCommand("for", (function (e, t, r) { if (r.matchToken("for")) { return x(e, r, t, true) } })); t.addCommand("continue", (function (e, t, r) { if (!r.matchToken("continue")) return; var n = { op: function (t) { for (var n = this.parent; true; n = n.parent) { if (n == undefined) { e.raiseParseError(r, "Command `continue` cannot be used outside of a `repeat` loop.") } if (n.loop != undefined) { return n.resolveNext(t) } } } }; return n })); t.addCommand("break", (function (e, t, r) { if (!r.matchToken("break")) return; var n = { op: function (n) { for (var i = this.parent; true; i = i.parent) { if (i == undefined) { e.raiseParseError(r, "Command `continue` cannot be used outside of a `repeat` loop.") } if (i.loop != undefined) { return t.findNext(i.parent, n) } } } }; return n })); t.addGrammarElement("stringLike", (function (e, t, r) { return e.parseAnyOf(["string", "nakedString"], r) })); t.addCommand("append", (function (e, t, r) { if (!r.matchToken("append")) return; var n = null; var i = e.requireElement("expression", r); var a = { type: "symbol", evaluate: function (e) { return t.resolveSymbol("result", e) } }; if (r.matchToken("to")) { n = e.requireElement("expression", r) } else { n = a } var o = null; if (n.type === "symbol" || n.type === "attributeRef" || n.root != null) { o = k(e, t, r, n, a) } var s = { value: i, target: n, args: [n, i], op: function (e, r, n) { if (Array.isArray(r)) { r.push(n); return t.findNext(this, e) } else if (r instanceof Element) { r.innerHTML += n; return t.findNext(this, e) } else if (o) { e.result = (r || "") + n; return o } else { throw Error("Unable to append a value!") } }, execute: function (e) { return t.unifiedExec(this, e) } }; if (o != null) { o.parent = s } return s })); function g(e, t, r) { r.matchToken("at") || r.matchToken("from"); const n = { includeStart: true, includeEnd: false }; n.from = r.matchToken("start") ? 0 : e.requireElement("expression", r); if (r.matchToken("to") || r.matchOpToken("..")) { if (r.matchToken("end")) { n.toEnd = true } else { n.to = e.requireElement("expression", r) } } if (r.matchToken("inclusive")) n.includeEnd = true; else if (r.matchToken("exclusive")) n.includeStart = false; return n } class b { constructor(e, t) { this.re = e; this.str = t } next() { const e = this.re.exec(this.str); if (e === null) return { done: true }; else return { value: e } } } class w { constructor(e, t, r) { this.re = e; this.flags = t; this.str = r } [Symbol.iterator]() { return new b(new RegExp(this.re, this.flags), this.str) } } t.addCommand("pick", ((e, t, r) => { if (!r.matchToken("pick")) return; r.matchToken("the"); if (r.matchToken("item") || r.matchToken("items") || r.matchToken("character") || r.matchToken("characters")) { const n = g(e, t, r); r.requireToken("from"); const i = e.requireElement("expression", r); return { args: [i, n.from, n.to], op(e, r, i, a) { if (n.toEnd) a = r.length; if (!n.includeStart) i++; if (n.includeEnd) a++; if (a == null || a == undefined) a = i + 1; e.result = r.slice(i, a); return t.findNext(this, e) } } } if (r.matchToken("match")) { r.matchToken("of"); const n = e.parseElement("expression", r); let i = ""; if (r.matchOpToken("|")) { i = r.requireToken("identifier").value } r.requireToken("from"); const a = e.parseElement("expression", r); return { args: [a, n], op(e, r, n) { e.result = new RegExp(n, i).exec(r); return t.findNext(this, e) } } } if (r.matchToken("matches")) { r.matchToken("of"); const n = e.parseElement("expression", r); let i = "gu"; if (r.matchOpToken("|")) { i = "g" + r.requireToken("identifier").value.replace("g", "") } console.log("flags", i); r.requireToken("from"); const a = e.parseElement("expression", r); return { args: [a, n], op(e, r, n) { e.result = new w(n, i, r); return t.findNext(this, e) } } } })); t.addCommand("increment", (function (e, t, r) { if (!r.matchToken("increment")) return; var n; var i = e.parseElement("assignableExpression", r); if (r.matchToken("by")) { n = e.requireElement("expression", r) } var a = { type: "implicitIncrementOp", target: i, args: [i, n], op: function (e, t, r) { t = t ? parseFloat(t) : 0; r = n ? parseFloat(r) : 1; var i = t + r; e.result = i; return i }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return k(e, t, r, i, a) })); t.addCommand("decrement", (function (e, t, r) { if (!r.matchToken("decrement")) return; var n; var i = e.parseElement("assignableExpression", r); if (r.matchToken("by")) { n = e.requireElement("expression", r) } var a = { type: "implicitDecrementOp", target: i, args: [i, n], op: function (e, t, r) { t = t ? parseFloat(t) : 0; r = n ? parseFloat(r) : 1; var i = t - r; e.result = i; return i }, evaluate: function (e) { return t.unifiedEval(this, e) } }; return k(e, t, r, i, a) })); function S(e, t) { var r = "text"; var n; e.matchToken("a") || e.matchToken("an"); if (e.matchToken("json") || e.matchToken("Object")) { r = "json" } else if (e.matchToken("response")) { r = "response" } else if (e.matchToken("html")) { r = "html" } else if (e.matchToken("text")) { } else { n = t.requireElement("dotOrColonPath", e).evaluate() } return { type: r, conversion: n } } t.addCommand("fetch", (function (e, t, r) { if (!r.matchToken("fetch")) return; var n = e.requireElement("stringLike", r); if (r.matchToken("as")) { var i = S(r, e) } if (r.matchToken("with") && r.currentToken().value !== "{") { var a = e.parseElement("nakedNamedArgumentList", r) } else { var a = e.parseElement("objectLiteral", r) } if (i == null && r.matchToken("as")) { i = S(r, e) } var o = i ? i.type : "text"; var s = i ? i.conversion : null; var u = { url: n, argExpressions: a, args: [n, a], op: function (e, r, n) { var i = n || {}; i["sender"] = e.me; i["headers"] = i["headers"] || {}; var a = new AbortController; let l = e.me.addEventListener("fetch:abort", (function () { a.abort() }), { once: true }); i["signal"] = a.signal; t.triggerEvent(e.me, "hyperscript:beforeFetch", i); t.triggerEvent(e.me, "fetch:beforeRequest", i); n = i; var c = false; if (n.timeout) { setTimeout((function () { if (!c) { a.abort() } }), n.timeout) } return fetch(r, n).then((function (r) { let n = { response: r }; t.triggerEvent(e.me, "fetch:afterResponse", n); r = n.response; if (o === "response") { e.result = r; t.triggerEvent(e.me, "fetch:afterRequest", { result: r }); c = true; return t.findNext(u, e) } if (o === "json") { return r.json().then((function (r) { e.result = r; t.triggerEvent(e.me, "fetch:afterRequest", { result: r }); c = true; return t.findNext(u, e) })) } return r.text().then((function (r) { if (s) r = t.convertValue(r, s); if (o === "html") r = t.convertValue(r, "Fragment"); e.result = r; t.triggerEvent(e.me, "fetch:afterRequest", { result: r }); c = true; return t.findNext(u, e) })) })).catch((function (r) { t.triggerEvent(e.me, "fetch:error", { reason: r }); throw r })).finally((function () { e.me.removeEventListener("fetch:abort", l) })) } }; return u })) } function y(e) { e.addCommand("settle", (function (e, t, r) { if (r.matchToken("settle")) { if (!e.commandBoundary(r.currentToken())) { var n = e.requireElement("expression", r) } else { var n = e.requireElement("implicitMeTarget", r) } var i = { type: "settleCmd", args: [n], op: function (e, r) { t.nullCheck(r, n); var a = null; var o = false; var s = false; var u = new Promise((function (e) { a = e })); r.addEventListener("transitionstart", (function () { s = true }), { once: true }); setTimeout((function () { if (!s && !o) { a(t.findNext(i, e)) } }), 500); r.addEventListener("transitionend", (function () { if (!o) { a(t.findNext(i, e)) } }), { once: true }); return u }, execute: function (e) { return t.unifiedExec(this, e) } }; return i } })); e.addCommand("add", (function (e, t, r) { if (r.matchToken("add")) { var n = e.parseElement("classRef", r); var i = null; var a = null; if (n == null) { i = e.parseElement("attributeRef", r); if (i == null) { a = e.parseElement("styleLiteral", r); if (a == null) { e.raiseParseError(r, "Expected either a class reference or attribute expression") } } } else { var o = [n]; while (n = e.parseElement("classRef", r)) { o.push(n) } } if (r.matchToken("to")) { var s = e.requireElement("expression", r) } else { var s = e.requireElement("implicitMeTarget", r) } if (r.matchToken("when")) { if (a) { e.raiseParseError(r, "Only class and properties are supported with a when clause") } var u = e.requireElement("expression", r) } if (o) { return { classRefs: o, to: s, args: [s, o], op: function (e, r, n) { t.nullCheck(r, s); t.forEach(n, (function (n) { t.implicitLoop(r, (function (r) { if (u) { e.result = r; let i = t.evaluateNoPromise(u, e); if (i) { if (r instanceof Element) r.classList.add(n.className) } else { if (r instanceof Element) r.classList.remove(n.className) } e.result = null } else { if (r instanceof Element) r.classList.add(n.className) } })) })); return t.findNext(this, e) } } } else if (i) { return { type: "addCmd", attributeRef: i, to: s, args: [s], op: function (e, r, n) { t.nullCheck(r, s); t.implicitLoop(r, (function (r) { if (u) { e.result = r; let n = t.evaluateNoPromise(u, e); if (n) { r.setAttribute(i.name, i.value) } else { r.removeAttribute(i.name) } e.result = null } else { r.setAttribute(i.name, i.value) } })); return t.findNext(this, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } else { return { type: "addCmd", cssDeclaration: a, to: s, args: [s, a], op: function (e, r, n) { t.nullCheck(r, s); t.implicitLoop(r, (function (e) { e.style.cssText += n })); return t.findNext(this, e) }, execute: function (e) { return t.unifiedExec(this, e) } } } } })); e.addGrammarElement("styleLiteral", (function (e, t, r) { if (!r.matchOpToken("{")) return; var n = [""]; var i = []; while (r.hasMore()) { if (r.matchOpToken("\\")) { r.consumeToken() } else if (r.matchOpToken("}")) { break } else if (r.matchToken("$")) { var a = r.matchOpToken("{"); var o = e.parseElement("expression", r); if (a) r.requireOpToken("}"); i.push(o); n.push("") } else { var s = r.consumeToken(); n[n.length - 1] += r.source.substring(s.start, s.end) } n[n.length - 1] += r.lastWhitespace() } return { type: "styleLiteral", args: [i], op: function (e, t) { var r = ""; n.forEach((function (e, n) { r += e; if (n in t) r += t[n] })); return r }, evaluate: function (e) { return t.unifiedEval(this, e) } } })); e.addCommand("remove", (function (e, t, r) { if (r.matchToken("remove")) { var n = e.parseElement("classRef", r); var i = null; var a = null; if (n == null) { i = e.parseElement("attributeRef", r); if (i == null) { a = e.parseElement("expression", r); if (a == null) { e.raiseParseError(r, "Expected either a class reference, attribute expression or value expression") } } } else { var o = [n]; while (n = e.parseElement("classRef", r)) { o.push(n) } } if (r.matchToken("from")) { var s = e.requireElement("expression", r) } else { if (a == null) { var s = e.requireElement("implicitMeTarget", r) } } if (a) { return { elementExpr: a, from: s, args: [a, s], op: function (e, r, n) { t.nullCheck(r, a); t.implicitLoop(r, (function (e) { if (e.parentElement && (n == null || n.contains(e))) { e.parentElement.removeChild(e) } })); return t.findNext(this, e) } } } else { return { classRefs: o, attributeRef: i, elementExpr: a, from: s, args: [o, s], op: function (e, r, n) { t.nullCheck(n, s); if (r) { t.forEach(r, (function (e) { t.implicitLoop(n, (function (t) { t.classList.remove(e.className) })) })) } else { t.implicitLoop(n, (function (e) { e.removeAttribute(i.name) })) } return t.findNext(this, e) } } } } })); e.addCommand("toggle", (function (e, t, r) { if (r.matchToken("toggle")) { r.matchAnyToken("the", "my"); if (r.currentToken().type === "STYLE_REF") { let t = r.consumeToken(); var n = t.value.substr(1); var a = true; var o = i(e, r, n); if (r.matchToken("of")) { r.pushFollow("with"); try { var s = e.requireElement("expression", r) } finally { r.popFollow() } } else { var s = e.requireElement("implicitMeTarget", r) } } else if (r.matchToken("between")) { var u = true; var l = e.parseElement("classRef", r); r.requireToken("and"); var c = e.requireElement("classRef", r) } else { var l = e.parseElement("classRef", r); var f = null; if (l == null) { f = e.parseElement("attributeRef", r); if (f == null) { e.raiseParseError(r, "Expected either a class reference or attribute expression") } } else { var m = [l]; while (l = e.parseElement("classRef", r)) { m.push(l) } } } if (a !== true) { if (r.matchToken("on")) { var s = e.requireElement("expression", r) } else { var s = e.requireElement("implicitMeTarget", r) } } if (r.matchToken("for")) { var p = e.requireElement("expression", r) } else if (r.matchToken("until")) { var h = e.requireElement("dotOrColonPath", r, "Expected event name"); if (r.matchToken("from")) { var v = e.requireElement("expression", r) } } var d = { classRef: l, classRef2: c, classRefs: m, attributeRef: f, on: s, time: p, evt: h, from: v, toggle: function (e, r, n, i) { t.nullCheck(e, s); if (a) { t.implicitLoop(e, (function (e) { o("toggle", e) })) } else if (u) { t.implicitLoop(e, (function (e) { if (e.classList.contains(r.className)) { e.classList.remove(r.className); e.classList.add(n.className) } else { e.classList.add(r.className); e.classList.remove(n.className) } })) } else if (i) { t.forEach(i, (function (r) { t.implicitLoop(e, (function (e) { e.classList.toggle(r.className) })) })) } else { t.forEach(e, (function (e) { if (e.hasAttribute(f.name)) { e.removeAttribute(f.name) } else { e.setAttribute(f.name, f.value) } })) } }, args: [s, p, h, v, l, c, m], op: function (e, r, n, i, a, o, s, u) { if (n) { return new Promise((function (i) { d.toggle(r, o, s, u); setTimeout((function () { d.toggle(r, o, s, u); i(t.findNext(d, e)) }), n) })) } else if (i) { return new Promise((function (n) { var l = a || e.me; l.addEventListener(i, (function () { d.toggle(r, o, s, u); n(t.findNext(d, e)) }), { once: true }); d.toggle(r, o, s, u) })) } else { this.toggle(r, o, s, u); return t.findNext(d, e) } } }; return d } })); var t = { display: function (r, n, i) { if (i) { n.style.display = i } else if (r === "toggle") { if (getComputedStyle(n).display === "none") { t.display("show", n, i) } else { t.display("hide", n, i) } } else if (r === "hide") { const t = e.runtime.getInternalData(n); if (t.originalDisplay == null) { t.originalDisplay = n.style.display } n.style.display = "none" } else { const t = e.runtime.getInternalData(n); if (t.originalDisplay && t.originalDisplay !== "none") { n.style.display = t.originalDisplay } else { n.style.removeProperty("display") } } }, visibility: function (e, r, n) { if (n) { r.style.visibility = n } else if (e === "toggle") { if (getComputedStyle(r).visibility === "hidden") { t.visibility("show", r, n) } else { t.visibility("hide", r, n) } } else if (e === "hide") { r.style.visibility = "hidden" } else { r.style.visibility = "visible" } }, opacity: function (e, r, n) { if (n) { r.style.opacity = n } else if (e === "toggle") { if (getComputedStyle(r).opacity === "0") { t.opacity("show", r, n) } else { t.opacity("hide", r, n) } } else if (e === "hide") { r.style.opacity = "0" } else { r.style.opacity = "1" } } }; var n = function (e, t, r) { var n; var i = r.currentToken(); if (i.value === "when" || i.value === "with" || e.commandBoundary(i)) { n = e.parseElement("implicitMeTarget", r) } else { n = e.parseElement("expression", r) } return n }; var i = function (e, n, i) { var a = r.defaultHideShowStrategy; var o = t; if (r.hideShowStrategies) { o = Object.assign(o, r.hideShowStrategies) } i = i || a || "display"; var s = o[i]; if (s == null) { e.raiseParseError(n, "Unknown show/hide strategy : " + i) } return s }; e.addCommand("hide", (function (e, t, r) { if (r.matchToken("hide")) { var a = n(e, t, r); var o = null; if (r.matchToken("with")) { o = r.requireTokenType("IDENTIFIER", "STYLE_REF").value; if (o.indexOf("*") === 0) { o = o.substr(1) } } var s = i(e, r, o); return { target: a, args: [a], op: function (e, r) { t.nullCheck(r, a); t.implicitLoop(r, (function (e) { s("hide", e) })); return t.findNext(this, e) } } } })); e.addCommand("show", (function (e, t, r) { if (r.matchToken("show")) { var a = n(e, t, r); var o = null; if (r.matchToken("with")) { o = r.requireTokenType("IDENTIFIER", "STYLE_REF").value; if (o.indexOf("*") === 0) { o = o.substr(1) } } var s = null; if (r.matchOpToken(":")) { var u = r.consumeUntilWhitespace(); r.matchTokenType("WHITESPACE"); s = u.map((function (e) { return e.value })).join("") } if (r.matchToken("when")) { var l = e.requireElement("expression", r) } var c = i(e, r, o); return { target: a, when: l, args: [a], op: function (e, r) { t.nullCheck(r, a); t.implicitLoop(r, (function (r) { if (l) { e.result = r; let n = t.evaluateNoPromise(l, e); if (n) { c("show", r, s) } else { c("hide", r) } e.result = null } else { c("show", r, s) } })); return t.findNext(this, e) } } } })); e.addCommand("take", (function (e, t, r) { if (r.matchToken("take")) { let u = null; let l = []; while (u = e.parseElement("classRef", r)) { l.push(u) } var n = null; var i = null; let c = l.length > 0; if (!c) { n = e.parseElement("attributeRef", r); if (n == null) { e.raiseParseError(r, "Expected either a class reference or attribute expression") } if (r.matchToken("with")) { i = e.requireElement("expression", r) } } if (r.matchToken("from")) { var a = e.requireElement("expression", r) } if (r.matchToken("for")) { var o = e.requireElement("expression", r) } else { var o = e.requireElement("implicitMeTarget", r) } if (c) { var s = { classRefs: l, from: a, forElt: o, args: [l, a, o], op: function (e, r, n, i) { t.nullCheck(i, o); t.implicitLoop(r, (function (e) { var r = e.className; if (n) { t.implicitLoop(n, (function (e) { e.classList.remove(r) })) } else { t.implicitLoop(e, (function (e) { e.classList.remove(r) })) } t.implicitLoop(i, (function (e) { e.classList.add(r) })) })); return t.findNext(this, e) } }; return s } else { var s = { attributeRef: n, from: a, forElt: o, args: [a, o, i], op: function (e, r, i, s) { t.nullCheck(r, a); t.nullCheck(i, o); t.implicitLoop(r, (function (e) { if (!s) { e.removeAttribute(n.name) } else { e.setAttribute(n.name, s) } })); t.implicitLoop(i, (function (e) { e.setAttribute(n.name, n.value || "") })); return t.findNext(this, e) } }; return s } } })); function a(t, r, n, i) { if (n != null) { var a = t.resolveSymbol(n, r) } else { var a = r } if (a instanceof Element || a instanceof HTMLDocument) { while (a.firstChild) a.removeChild(a.firstChild); a.append(e.runtime.convertValue(i, "Fragment")); t.processNode(a) } else { if (n != null) { t.setSymbol(n, r, null, i) } else { throw "Don't know how to put a value into " + typeof r } } } e.addCommand("put", (function (e, t, r) { if (r.matchToken("put")) { var n = e.requireElement("expression", r); var i = r.matchAnyToken("into", "before", "after"); if (i == null && r.matchToken("at")) { r.matchToken("the"); i = r.matchAnyToken("start", "end"); r.requireToken("of") } if (i == null) { e.raiseParseError(r, "Expected one of 'into', 'before', 'at start of', 'at end of', 'after'") } var o = e.requireElement("expression", r); var s = i.value; var u = false; var l = false; var c = null; var f = null; if (o.type === "arrayIndex" && s === "into") { u = true; f = o.prop; c = o.root } else if (o.prop && o.root && s === "into") { f = o.prop.value; c = o.root } else if (o.type === "symbol" && s === "into") { l = true; f = o.name } else if (o.type === "attributeRef" && s === "into") { var m = true; f = o.name; c = e.requireElement("implicitMeTarget", r) } else if (o.type === "styleRef" && s === "into") { var p = true; f = o.name; c = e.requireElement("implicitMeTarget", r) } else if (o.attribute && s === "into") { var m = o.attribute.type === "attributeRef"; var p = o.attribute.type === "styleRef"; f = o.attribute.name; c = o.root } else { c = o } var h = { target: o, operation: s, symbolWrite: l, value: n, args: [c, f, n], op: function (e, r, n, i) { if (l) { a(t, e, n, i) } else { t.nullCheck(r, c); if (s === "into") { if (m) { t.implicitLoop(r, (function (e) { e.setAttribute(n, i) })) } else if (p) { t.implicitLoop(r, (function (e) { e.style[n] = i })) } else if (u) { r[n] = i } else { t.implicitLoop(r, (function (e) { a(t, e, n, i) })) } } else { var o = s === "before" ? Element.prototype.before : s === "after" ? Element.prototype.after : s === "start" ? Element.prototype.prepend : s === "end" ? Element.prototype.append : Element.prototype.append; t.implicitLoop(r, (function (e) { o.call(e, i instanceof Node ? i : t.convertValue(i, "Fragment")); if (e.parentElement) { t.processNode(e.parentElement) } else { t.processNode(e) } })) } } return t.findNext(this, e) } }; return h } })); function o(e, t, r) { var n; if (r.matchToken("the") || r.matchToken("element") || r.matchToken("elements") || r.currentToken().type === "CLASS_REF" || r.currentToken().type === "ID_REF" || r.currentToken().op && r.currentToken().value === "<") { e.possessivesDisabled = true; try { n = e.parseElement("expression", r) } finally { delete e.possessivesDisabled } if (r.matchOpToken("'")) { r.requireToken("s") } } else if (r.currentToken().type === "IDENTIFIER" && r.currentToken().value === "its") { var i = r.matchToken("its"); n = { type: "pseudopossessiveIts", token: i, name: i.value, evaluate: function (e) { return t.resolveSymbol("it", e) } } } else { r.matchToken("my") || r.matchToken("me"); n = e.parseElement("implicitMeTarget", r) } return n } e.addCommand("transition", (function (e, t, n) { if (n.matchToken("transition")) { var i = o(e, t, n); var a = []; var s = []; var u = []; var l = n.currentToken(); while (!e.commandBoundary(l) && l.value !== "over" && l.value !== "using") { if (n.currentToken().type === "STYLE_REF") { let e = n.consumeToken(); let t = e.value.substr(1); a.push({ type: "styleRefValue", evaluate: function () { return t } }) } else { a.push(e.requireElement("stringLike", n)) } if (n.matchToken("from")) { s.push(e.requireElement("expression", n)) } else { s.push(null) } n.requireToken("to"); if (n.matchToken("initial")) { u.push({ type: "initial_literal", evaluate: function () { return "initial" } }) } else { u.push(e.requireElement("expression", n)) } l = n.currentToken() } if (n.matchToken("over")) { var c = e.requireElement("expression", n) } else if (n.matchToken("using")) { var f = e.requireElement("expression", n) } var m = { to: u, args: [i, a, s, u, f, c], op: function (e, n, a, o, s, u, l) { t.nullCheck(n, i); var c = []; t.implicitLoop(n, (function (e) { var n = new Promise((function (n, i) { var c = e.style.transition; if (l) { e.style.transition = "all " + l + "ms ease-in" } else if (u) { e.style.transition = u } else { e.style.transition = r.defaultTransition } var f = t.getInternalData(e); var m = getComputedStyle(e); var p = {}; for (var h = 0; h < m.length; h++) { var v = m[h]; var d = m[v]; p[v] = d } if (!f.initialStyles) { f.initialStyles = p } for (var h = 0; h < a.length; h++) { var E = a[h]; var T = o[h]; if (T === "computed" || T == null) { e.style[E] = p[E] } else { e.style[E] = T } } var y = false; var k = false; e.addEventListener("transitionend", (function () { if (!k) { e.style.transition = c; k = true; n() } }), { once: true }); e.addEventListener("transitionstart", (function () { y = true }), { once: true }); setTimeout((function () { if (!k && !y) { e.style.transition = c; k = true; n() } }), 100); setTimeout((function () { var t = []; for (var r = 0; r < a.length; r++) { var n = a[r]; var i = s[r]; if (i === "initial") { var o = f.initialStyles[n]; e.style[n] = o } else { e.style[n] = i } } }), 0) })); c.push(n) })); return Promise.all(c).then((function () { return t.findNext(m, e) })) } }; return m } })); e.addCommand("measure", (function (e, t, r) { if (!r.matchToken("measure")) return; var n = o(e, t, r); var i = []; if (!e.commandBoundary(r.currentToken())) do { i.push(r.matchTokenType("IDENTIFIER").value) } while (r.matchOpToken(",")); return { properties: i, args: [n], op: function (e, r) { t.nullCheck(r, n); if (0 in r) r = r[0]; var a = r.getBoundingClientRect(); var o = { top: r.scrollTop, left: r.scrollLeft, topMax: r.scrollTopMax, leftMax: r.scrollLeftMax, height: r.scrollHeight, width: r.scrollWidth }; e.result = { x: a.x, y: a.y, left: a.left, top: a.top, right: a.right, bottom: a.bottom, width: a.width, height: a.height, bounds: a, scrollLeft: o.left, scrollTop: o.top, scrollLeftMax: o.leftMax, scrollTopMax: o.topMax, scrollWidth: o.width, scrollHeight: o.height, scroll: o }; t.forEach(i, (function (t) { if (t in e.result) e.locals[t] = e.result[t]; else throw "No such measurement as " + t })); return t.findNext(this, e) } } })); e.addLeafExpression("closestExpr", (function (e, t, r) { if (r.matchToken("closest")) { if (r.matchToken("parent")) { var n = true } var i = null; if (r.currentToken().type === "ATTRIBUTE_REF") { var a = e.requireElement("attributeRefAccess", r, null); i = "[" + a.attribute.name + "]" } if (i == null) { var o = e.requireElement("expression", r); if (o.css == null) { e.raiseParseError(r, "Expected a CSS expression") } else { i = o.css } } if (r.matchToken("to")) { var s = e.parseElement("expression", r) } else { var s = e.parseElement("implicitMeTarget", r) } var u = { type: "closestExpr", parentSearch: n, expr: o, css: i, to: s, args: [s], op: function (e, r) { if (r == null) { return null } else { let e = []; t.implicitLoop(r, (function (t) { if (n) { e.push(t.parentElement ? t.parentElement.closest(i) : null) } else { e.push(t.closest(i)) } })); if (t.shouldAutoIterate(r)) { return e } else { return e[0] } } }, evaluate: function (e) { return t.unifiedEval(this, e) } }; if (a) { a.root = u; a.args = [u]; return a } else { return u } } })); e.addCommand("go", (function (e, t, r) { if (r.matchToken("go")) { if (r.matchToken("back")) { var n = true } else { r.matchToken("to"); if (r.matchToken("url")) { var i = e.requireElement("stringLike", r); var a = true; if (r.matchToken("in")) { r.requireToken("new"); r.requireToken("window"); var o = true } } else { r.matchToken("the"); var s = r.matchAnyToken("top", "middle", "bottom"); var u = r.matchAnyToken("left", "center", "right"); if (s || u) { r.requireToken("of") } var i = e.requireElement("unaryExpression", r); var l = r.matchAnyOpToken("+", "-"); if (l) { r.pushFollow("px"); try { var c = e.requireElement("expression", r) } finally { r.popFollow() } } r.matchToken("px"); var f = r.matchAnyToken("smoothly", "instantly"); var m = { block: "start", inline: "nearest" }; if (s) { if (s.value === "top") { m.block = "start" } else if (s.value === "bottom") { m.block = "end" } else if (s.value === "middle") { m.block = "center" } } if (u) { if (u.value === "left") { m.inline = "start" } else if (u.value === "center") { m.inline = "center" } else if (u.value === "right") { m.inline = "end" } } if (f) { if (f.value === "smoothly") { m.behavior = "smooth" } else if (f.value === "instantly") { m.behavior = "instant" } } } } var p = { target: i, args: [i, c], op: function (e, r, i) { if (n) { window.history.back() } else if (a) { if (r) { if (o) { window.open(r) } else { window.location.href = r } } } else { t.implicitLoop(r, (function (e) { if (e === window) { e = document.body } if (l) { let t = e.getBoundingClientRect(); let r = document.createElement("div"); let n = l.value === "+" ? i : i * -1; let a = m.inline == "start" || m.inline == "end" ? n : 0; let o = m.block == "start" || m.block == "end" ? n : 0; r.style.position = "absolute"; r.style.top = t.top + window.scrollY + o + "px"; r.style.left = t.left + window.scrollX + a + "px"; r.style.height = t.height + "px"; r.style.width = t.width + "px"; r.style.zIndex = "" + Number.MIN_SAFE_INTEGER; r.style.opacity = "0"; document.body.appendChild(r); setTimeout((function () { document.body.removeChild(r) }), 100); e = r } e.scrollIntoView(m) })) } return t.findNext(p, e) } }; return p } })); r.conversions.dynamicResolvers.push((function (t, r) { if (!(t === "Values" || t.indexOf("Values:") === 0)) { return } var n = t.split(":")[1]; var i = {}; var a = e.runtime.implicitLoop.bind(e.runtime); a(r, (function (e) { var t = s(e); if (t !== undefined) { i[t.name] = t.value; return } if (e.querySelectorAll != undefined) { var r = e.querySelectorAll("input,select,textarea"); r.forEach(o) } })); if (n) { if (n === "JSON") { return JSON.stringify(i) } else if (n === "Form") { return new URLSearchParams(i).toString() } else { throw "Unknown conversion: " + n } } else { return i } function o(e) { var t = s(e); if (t == undefined) { return } if (i[t.name] == undefined) { i[t.name] = t.value; return } if (Array.isArray(i[t.name]) && Array.isArray(t.value)) { i[t.name] = [].concat(i[t.name], t.value); return } } function s(e) { try { var t = { name: e.name, value: e.value }; if (t.name == undefined || t.value == undefined) { return undefined } if (e.type == "radio" && e.checked == false) { return undefined } if (e.type == "checkbox") { if (e.checked == false) { t.value = undefined } else if (typeof t.value === "string") { t.value = [t.value] } } if (e.type == "select-multiple") { var r = e.querySelectorAll("option[selected]"); t.value = []; for (var n = 0; n < r.length; n++) { t.value.push(r[n].value) } } return t } catch (e) { return undefined } } })); r.conversions["HTML"] = function (e) { var t = function (e) { if (e instanceof Array) { return e.map((function (e) { return t(e) })).join("") } if (e instanceof HTMLElement) { return e.outerHTML } if (e instanceof NodeList) { var r = ""; for (var n = 0; n < e.length; n++) { var i = e[n]; if (i instanceof HTMLElement) { r += i.outerHTML } } return r } if (e.toString) { return e.toString() } return "" }; return t(e) }; r.conversions["Fragment"] = function (t) { var r = document.createDocumentFragment(); e.runtime.implicitLoop(t, (function (e) { if (e instanceof Node) r.append(e); else { var t = document.createElement("template"); t.innerHTML = e; r.append(t.content) } })); return r } } const k = new o, x = k.lexer, g = k.parser; function b(e, t) { return k.evaluate(e, t) } function w() { var t = Array.from(e.document.querySelectorAll("script[type='text/hyperscript'][src]")); Promise.all(t.map((function (e) { return fetch(e.src).then((function (e) { return e.text() })) }))).then((e => e.forEach((e => S(e))))).then((() => n((function () { a(); k.processNode(document.documentElement); e.document.addEventListener("htmx:load", (function (e) { k.processNode(e.detail.elt) })) })))); function n(e) { if (document.readyState !== "loading") { setTimeout(e) } else { document.addEventListener("DOMContentLoaded", e) } } function i() { var e = document.querySelector('meta[name="htmx-config"]'); if (e) { return v(e.content) } else { return null } } function a() { var e = i(); if (e) { Object.assign(r, e) } } } const S = Object.assign(b, { config: r, use(e) { e(S) }, internals: { lexer: x, parser: g, runtime: k, Lexer: n, Tokens: i, Parser: a, Runtime: o }, ElementCollection: m, addFeature: g.addFeature.bind(g), addCommand: g.addCommand.bind(g), addLeafExpression: g.addLeafExpression.bind(g), addIndirectExpression: g.addIndirectExpression.bind(g), evaluate: k.evaluate.bind(k), parse: k.parse.bind(k), processNode: k.processNode.bind(k), version: "0.9.12", browserInit: w }); return S })); \ No newline at end of file diff --git a/static/hyperscript/readme.md b/static/hyperscript/readme.md index e154e19..3ff7dae 100644 --- a/static/hyperscript/readme.md +++ b/static/hyperscript/readme.md @@ -1 +1 @@ -https://unpkg.com/hyperscript.org@0.9.11/dist/_hyperscript.min.js +https://unpkg.com/hyperscript.org@0.9.12/dist/_hyperscript.min.js \ No newline at end of file diff --git a/templates/admin/base.jinja b/templates/admin/base.jinja index e631b66..ae39cf8 100644 --- a/templates/admin/base.jinja +++ b/templates/admin/base.jinja @@ -139,6 +139,9 @@ {% endblock body %} {% block bodyjs %} + + +