diff --git a/.gitignore b/.gitignore
index 734d703..da4ca55 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+./assets/index.js
+./assets/styles.js
+
local.db
# Created by https://www.toptal.com/developers/gitignore/api/go
# Edit at https://www.toptal.com/developers/gitignore?templates=go
diff --git a/assets/index.js b/assets/index.js
deleted file mode 100644
index 27e7a9b..0000000
--- a/assets/index.js
+++ /dev/null
@@ -1,3093 +0,0 @@
-(() => {
- var __create = Object.create;
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __getProtoOf = Object.getPrototypeOf;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __commonJS = (cb, mod) => function __require() {
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
- };
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
- // If the importer is in node compatibility mode or this is not an ESM
- // file that has been converted to a CommonJS file using a Babel-
- // compatible transform (i.e. "__esModule" has not been set), then set
- // "default" to the CommonJS "module.exports" for node compatibility.
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
- mod
- ));
-
- // script/node_modules/htmx.org/dist/htmx.min.js
- var require_htmx_min = __commonJS({
- "script/node_modules/htmx.org/dist/htmx.min.js"(exports, module) {
- (function(e2, t2) {
- if (typeof define === "function" && define.amd) {
- define([], t2);
- } else if (typeof module === "object" && module.exports) {
- module.exports = t2();
- } else {
- e2.htmx = e2.htmx || t2();
- }
- })(typeof self !== "undefined" ? self : exports, function() {
- return function() {
- "use strict";
- var Q = { onLoad: F, process: zt, on: de, off: ge, trigger: ce, ajax: Nr, find: C, findAll: f, closest: v, values: function(e2, t2) {
- var r2 = dr(e2, t2 || "post");
- return r2.values;
- }, remove: _, addClass: z, removeClass: n, toggleClass: $, takeClass: W, defineExtension: Ur, removeExtension: Br, logAll: V, logNone: j, 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, ignoreTitle: false, scrollIntoViewOnBoost: true, triggerSpecsCache: null }, parseInterval: d, _: t, createEventSource: function(e2) {
- return new EventSource(e2, { withCredentials: true });
- }, createWebSocket: function(e2) {
- var t2 = new WebSocket(e2, []);
- t2.binaryType = Q.config.wsBinaryType;
- return t2;
- }, version: "1.9.12" };
- var r = { addTriggerHandler: Lt, bodyContains: se, canAccessLocalStorage: U, findThisElement: xe, filterValues: yr, hasAttribute: o, getAttributeValue: te, getClosestAttributeValue: ne, getClosestMatch: c, getExpressionVars: Hr, getHeaders: xr, getInputValues: dr, getInternalData: ae, getSwapSpecification: wr, getTriggerSpecs: it, getTarget: ye, makeFragment: l, mergeObjects: le, makeSettleInfo: T, oobSwap: Ee, querySelectorExt: ue, selectAndSwap: je, settleImmediately: nr, shouldCancel: ut, triggerEvent: ce, triggerErrorEvent: fe, withExtensions: R };
- var w = ["get", "post", "put", "delete", "patch"];
- var i = w.map(function(e2) {
- return "[hx-" + e2 + "], [data-hx-" + e2 + "]";
- }).join(", ");
- var S = e("head"), q = e("title"), H = e("svg", true);
- function e(e2, t2) {
- return new RegExp("<" + e2 + "(\\s[^>]*>|>)([\\s\\S]*?)<\\/" + e2 + ">", !!t2 ? "gim" : "im");
- }
- function d(e2) {
- if (e2 == void 0) {
- return void 0;
- }
- let t2 = NaN;
- if (e2.slice(-2) == "ms") {
- t2 = parseFloat(e2.slice(0, -2));
- } else if (e2.slice(-1) == "s") {
- t2 = parseFloat(e2.slice(0, -1)) * 1e3;
- } else if (e2.slice(-1) == "m") {
- t2 = parseFloat(e2.slice(0, -1)) * 1e3 * 60;
- } else {
- t2 = parseFloat(e2);
- }
- return isNaN(t2) ? void 0 : t2;
- }
- function ee(e2, t2) {
- return e2.getAttribute && e2.getAttribute(t2);
- }
- function o(e2, t2) {
- return e2.hasAttribute && (e2.hasAttribute(t2) || e2.hasAttribute("data-" + t2));
- }
- function te(e2, t2) {
- return ee(e2, t2) || ee(e2, "data-" + t2);
- }
- function u(e2) {
- return e2.parentElement;
- }
- function re() {
- return document;
- }
- function c(e2, t2) {
- while (e2 && !t2(e2)) {
- e2 = u(e2);
- }
- return e2 ? e2 : null;
- }
- function L(e2, t2, r2) {
- var n2 = te(t2, r2);
- var i2 = te(t2, "hx-disinherit");
- if (e2 !== t2 && i2 && (i2 === "*" || i2.split(" ").indexOf(r2) >= 0)) {
- return "unset";
- } else {
- return n2;
- }
- }
- function ne(t2, r2) {
- var n2 = null;
- c(t2, function(e2) {
- return n2 = L(t2, e2, r2);
- });
- if (n2 !== "unset") {
- return n2;
- }
- }
- function h(e2, t2) {
- var r2 = e2.matches || e2.matchesSelector || e2.msMatchesSelector || e2.mozMatchesSelector || e2.webkitMatchesSelector || e2.oMatchesSelector;
- return r2 && r2.call(e2, t2);
- }
- function A(e2) {
- var t2 = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
- var r2 = t2.exec(e2);
- if (r2) {
- return r2[1].toLowerCase();
- } else {
- return "";
- }
- }
- function s(e2, t2) {
- var r2 = new DOMParser();
- var n2 = r2.parseFromString(e2, "text/html");
- var i2 = n2.body;
- while (t2 > 0) {
- t2--;
- i2 = i2.firstChild;
- }
- if (i2 == null) {
- i2 = re().createDocumentFragment();
- }
- return i2;
- }
- function N(e2) {
- return /
" + n2 + "", 0);
- var a2 = i2.querySelector("template").content;
- if (Q.config.allowScriptTags) {
- oe(a2.querySelectorAll("script"), function(e3) {
- if (Q.config.inlineScriptNonce) {
- e3.nonce = Q.config.inlineScriptNonce;
- }
- e3.htmxExecuted = navigator.userAgent.indexOf("Firefox") === -1;
- });
- } else {
- oe(a2.querySelectorAll("script"), function(e3) {
- _(e3);
- });
- }
- return a2;
- }
- switch (r2) {
- case "thead":
- case "tbody":
- case "tfoot":
- case "colgroup":
- case "caption":
- return s("", 1);
- case "col":
- return s("", 2);
- case "tr":
- return s("", 2);
- case "td":
- case "th":
- return s("", 3);
- case "script":
- case "style":
- return s("" + n2 + "
", 1);
- default:
- return s(n2, 0);
- }
- }
- function ie(e2) {
- if (e2) {
- e2();
- }
- }
- function I(e2, t2) {
- return Object.prototype.toString.call(e2) === "[object " + t2 + "]";
- }
- function k(e2) {
- return I(e2, "Function");
- }
- function P(e2) {
- return I(e2, "Object");
- }
- function ae(e2) {
- var t2 = "htmx-internal-data";
- var r2 = e2[t2];
- if (!r2) {
- r2 = e2[t2] = {};
- }
- return r2;
- }
- function M(e2) {
- var t2 = [];
- if (e2) {
- for (var r2 = 0; r2 < e2.length; r2++) {
- t2.push(e2[r2]);
- }
- }
- return t2;
- }
- function oe(e2, t2) {
- if (e2) {
- for (var r2 = 0; r2 < e2.length; r2++) {
- t2(e2[r2]);
- }
- }
- }
- function X(e2) {
- var t2 = e2.getBoundingClientRect();
- var r2 = t2.top;
- var n2 = t2.bottom;
- return r2 < window.innerHeight && n2 >= 0;
- }
- function se(e2) {
- if (e2.getRootNode && e2.getRootNode() instanceof window.ShadowRoot) {
- return re().body.contains(e2.getRootNode().host);
- } else {
- return re().body.contains(e2);
- }
- }
- function D(e2) {
- return e2.trim().split(/\s+/);
- }
- function le(e2, t2) {
- for (var r2 in t2) {
- if (t2.hasOwnProperty(r2)) {
- e2[r2] = t2[r2];
- }
- }
- return e2;
- }
- function E(e2) {
- try {
- return JSON.parse(e2);
- } catch (e3) {
- b(e3);
- return null;
- }
- }
- function U() {
- var e2 = "htmx:localStorageTest";
- try {
- localStorage.setItem(e2, e2);
- localStorage.removeItem(e2);
- return true;
- } catch (e3) {
- return false;
- }
- }
- function B(t2) {
- try {
- var e2 = new URL(t2);
- if (e2) {
- t2 = e2.pathname + e2.search;
- }
- if (!/^\/$/.test(t2)) {
- t2 = t2.replace(/\/+$/, "");
- }
- return t2;
- } catch (e3) {
- return t2;
- }
- }
- function t(e) {
- return Tr(re().body, function() {
- return eval(e);
- });
- }
- function F(t2) {
- var e2 = Q.on("htmx:load", function(e3) {
- t2(e3.detail.elt);
- });
- return e2;
- }
- function V() {
- Q.logger = function(e2, t2, r2) {
- if (console) {
- console.log(t2, e2, r2);
- }
- };
- }
- function j() {
- Q.logger = null;
- }
- function C(e2, t2) {
- if (t2) {
- return e2.querySelector(t2);
- } else {
- return C(re(), e2);
- }
- }
- function f(e2, t2) {
- if (t2) {
- return e2.querySelectorAll(t2);
- } else {
- return f(re(), e2);
- }
- }
- function _(e2, t2) {
- e2 = p(e2);
- if (t2) {
- setTimeout(function() {
- _(e2);
- e2 = null;
- }, t2);
- } else {
- e2.parentElement.removeChild(e2);
- }
- }
- function z(e2, t2, r2) {
- e2 = p(e2);
- if (r2) {
- setTimeout(function() {
- z(e2, t2);
- e2 = null;
- }, r2);
- } else {
- e2.classList && e2.classList.add(t2);
- }
- }
- function n(e2, t2, r2) {
- e2 = p(e2);
- if (r2) {
- setTimeout(function() {
- n(e2, t2);
- e2 = null;
- }, r2);
- } else {
- if (e2.classList) {
- e2.classList.remove(t2);
- if (e2.classList.length === 0) {
- e2.removeAttribute("class");
- }
- }
- }
- }
- function $(e2, t2) {
- e2 = p(e2);
- e2.classList.toggle(t2);
- }
- function W(e2, t2) {
- e2 = p(e2);
- oe(e2.parentElement.children, function(e3) {
- n(e3, t2);
- });
- z(e2, t2);
- }
- function v(e2, t2) {
- e2 = p(e2);
- if (e2.closest) {
- return e2.closest(t2);
- } else {
- do {
- if (e2 == null || h(e2, t2)) {
- return e2;
- }
- } while (e2 = e2 && u(e2));
- return null;
- }
- }
- function g(e2, t2) {
- return e2.substring(0, t2.length) === t2;
- }
- function G(e2, t2) {
- return e2.substring(e2.length - t2.length) === t2;
- }
- function J(e2) {
- var t2 = e2.trim();
- if (g(t2, "<") && G(t2, "/>")) {
- return t2.substring(1, t2.length - 2);
- } else {
- return t2;
- }
- }
- function Z(e2, t2) {
- if (t2.indexOf("closest ") === 0) {
- return [v(e2, J(t2.substr(8)))];
- } else if (t2.indexOf("find ") === 0) {
- return [C(e2, J(t2.substr(5)))];
- } else if (t2 === "next") {
- return [e2.nextElementSibling];
- } else if (t2.indexOf("next ") === 0) {
- return [K(e2, J(t2.substr(5)))];
- } else if (t2 === "previous") {
- return [e2.previousElementSibling];
- } else if (t2.indexOf("previous ") === 0) {
- return [Y(e2, J(t2.substr(9)))];
- } else if (t2 === "document") {
- return [document];
- } else if (t2 === "window") {
- return [window];
- } else if (t2 === "body") {
- return [document.body];
- } else {
- return re().querySelectorAll(J(t2));
- }
- }
- var K = function(e2, t2) {
- var r2 = re().querySelectorAll(t2);
- for (var n2 = 0; n2 < r2.length; n2++) {
- var i2 = r2[n2];
- if (i2.compareDocumentPosition(e2) === Node.DOCUMENT_POSITION_PRECEDING) {
- return i2;
- }
- }
- };
- var Y = function(e2, t2) {
- var r2 = re().querySelectorAll(t2);
- for (var n2 = r2.length - 1; n2 >= 0; n2--) {
- var i2 = r2[n2];
- if (i2.compareDocumentPosition(e2) === Node.DOCUMENT_POSITION_FOLLOWING) {
- return i2;
- }
- }
- };
- function ue(e2, t2) {
- if (t2) {
- return Z(e2, t2)[0];
- } else {
- return Z(re().body, e2)[0];
- }
- }
- function p(e2) {
- if (I(e2, "String")) {
- return C(e2);
- } else {
- return e2;
- }
- }
- function ve(e2, t2, r2) {
- if (k(t2)) {
- return { target: re().body, event: e2, listener: t2 };
- } else {
- return { target: p(e2), event: t2, listener: r2 };
- }
- }
- function de(t2, r2, n2) {
- jr(function() {
- var e3 = ve(t2, r2, n2);
- e3.target.addEventListener(e3.event, e3.listener);
- });
- var e2 = k(r2);
- return e2 ? r2 : n2;
- }
- function ge(t2, r2, n2) {
- jr(function() {
- var e2 = ve(t2, r2, n2);
- e2.target.removeEventListener(e2.event, e2.listener);
- });
- return k(r2) ? r2 : n2;
- }
- var pe = re().createElement("output");
- function me(e2, t2) {
- var r2 = ne(e2, t2);
- if (r2) {
- if (r2 === "this") {
- return [xe(e2, t2)];
- } else {
- var n2 = Z(e2, r2);
- if (n2.length === 0) {
- b('The selector "' + r2 + '" on ' + t2 + " returned no matches!");
- return [pe];
- } else {
- return n2;
- }
- }
- }
- }
- function xe(e2, t2) {
- return c(e2, function(e3) {
- return te(e3, t2) != null;
- });
- }
- function ye(e2) {
- var t2 = ne(e2, "hx-target");
- if (t2) {
- if (t2 === "this") {
- return xe(e2, "hx-target");
- } else {
- return ue(e2, t2);
- }
- } else {
- var r2 = ae(e2);
- if (r2.boosted) {
- return re().body;
- } else {
- return e2;
- }
- }
- }
- function be(e2) {
- var t2 = Q.config.attributesToSettle;
- for (var r2 = 0; r2 < t2.length; r2++) {
- if (e2 === t2[r2]) {
- return true;
- }
- }
- return false;
- }
- function we(t2, r2) {
- oe(t2.attributes, function(e2) {
- if (!r2.hasAttribute(e2.name) && be(e2.name)) {
- t2.removeAttribute(e2.name);
- }
- });
- oe(r2.attributes, function(e2) {
- if (be(e2.name)) {
- t2.setAttribute(e2.name, e2.value);
- }
- });
- }
- function Se(e2, t2) {
- var r2 = Fr(t2);
- for (var n2 = 0; n2 < r2.length; n2++) {
- var i2 = r2[n2];
- try {
- if (i2.isInlineSwap(e2)) {
- return true;
- }
- } catch (e3) {
- b(e3);
- }
- }
- return e2 === "outerHTML";
- }
- function Ee(e2, i2, a2) {
- var t2 = "#" + ee(i2, "id");
- var o2 = "outerHTML";
- if (e2 === "true") {
- } else if (e2.indexOf(":") > 0) {
- o2 = e2.substr(0, e2.indexOf(":"));
- t2 = e2.substr(e2.indexOf(":") + 1, e2.length);
- } else {
- o2 = e2;
- }
- var r2 = re().querySelectorAll(t2);
- if (r2) {
- oe(r2, function(e3) {
- var t3;
- var r3 = i2.cloneNode(true);
- t3 = re().createDocumentFragment();
- t3.appendChild(r3);
- if (!Se(o2, e3)) {
- t3 = r3;
- }
- var n2 = { shouldSwap: true, target: e3, fragment: t3 };
- if (!ce(e3, "htmx:oobBeforeSwap", n2)) return;
- e3 = n2.target;
- if (n2["shouldSwap"]) {
- Fe(o2, e3, e3, t3, a2);
- }
- oe(a2.elts, function(e4) {
- ce(e4, "htmx:oobAfterSwap", n2);
- });
- });
- i2.parentNode.removeChild(i2);
- } else {
- i2.parentNode.removeChild(i2);
- fe(re().body, "htmx:oobErrorNoTarget", { content: i2 });
- }
- return e2;
- }
- function Ce(e2, t2, r2) {
- var n2 = ne(e2, "hx-select-oob");
- if (n2) {
- var i2 = n2.split(",");
- for (var a2 = 0; a2 < i2.length; a2++) {
- var o2 = i2[a2].split(":", 2);
- var s2 = o2[0].trim();
- if (s2.indexOf("#") === 0) {
- s2 = s2.substring(1);
- }
- var l2 = o2[1] || "true";
- var u2 = t2.querySelector("#" + s2);
- if (u2) {
- Ee(l2, u2, r2);
- }
- }
- }
- oe(f(t2, "[hx-swap-oob], [data-hx-swap-oob]"), function(e3) {
- var t3 = te(e3, "hx-swap-oob");
- if (t3 != null) {
- Ee(t3, e3, r2);
- }
- });
- }
- function Re(e2) {
- oe(f(e2, "[hx-preserve], [data-hx-preserve]"), function(e3) {
- var t2 = te(e3, "id");
- var r2 = re().getElementById(t2);
- if (r2 != null) {
- e3.parentNode.replaceChild(r2, e3);
- }
- });
- }
- function Te(o2, e2, s2) {
- oe(e2.querySelectorAll("[id]"), function(e3) {
- var t2 = ee(e3, "id");
- if (t2 && t2.length > 0) {
- var r2 = t2.replace("'", "\\'");
- var n2 = e3.tagName.replace(":", "\\:");
- var i2 = o2.querySelector(n2 + "[id='" + r2 + "']");
- if (i2 && i2 !== o2) {
- var a2 = e3.cloneNode();
- we(e3, i2);
- s2.tasks.push(function() {
- we(e3, a2);
- });
- }
- }
- });
- }
- function Oe(e2) {
- return function() {
- n(e2, Q.config.addedClass);
- zt(e2);
- Nt(e2);
- qe(e2);
- ce(e2, "htmx:load");
- };
- }
- function qe(e2) {
- var t2 = "[autofocus]";
- var r2 = h(e2, t2) ? e2 : e2.querySelector(t2);
- if (r2 != null) {
- r2.focus();
- }
- }
- function a(e2, t2, r2, n2) {
- Te(e2, r2, n2);
- while (r2.childNodes.length > 0) {
- var i2 = r2.firstChild;
- z(i2, Q.config.addedClass);
- e2.insertBefore(i2, t2);
- if (i2.nodeType !== Node.TEXT_NODE && i2.nodeType !== Node.COMMENT_NODE) {
- n2.tasks.push(Oe(i2));
- }
- }
- }
- function He(e2, t2) {
- var r2 = 0;
- while (r2 < e2.length) {
- t2 = (t2 << 5) - t2 + e2.charCodeAt(r2++) | 0;
- }
- return t2;
- }
- function Le(e2) {
- var t2 = 0;
- if (e2.attributes) {
- for (var r2 = 0; r2 < e2.attributes.length; r2++) {
- var n2 = e2.attributes[r2];
- if (n2.value) {
- t2 = He(n2.name, t2);
- t2 = He(n2.value, t2);
- }
- }
- }
- return t2;
- }
- function Ae(e2) {
- var t2 = ae(e2);
- if (t2.onHandlers) {
- for (var r2 = 0; r2 < t2.onHandlers.length; r2++) {
- const n2 = t2.onHandlers[r2];
- e2.removeEventListener(n2.event, n2.listener);
- }
- delete t2.onHandlers;
- }
- }
- function Ne(e2) {
- var t2 = ae(e2);
- if (t2.timeout) {
- clearTimeout(t2.timeout);
- }
- if (t2.webSocket) {
- t2.webSocket.close();
- }
- if (t2.sseEventSource) {
- t2.sseEventSource.close();
- }
- if (t2.listenerInfos) {
- oe(t2.listenerInfos, function(e3) {
- if (e3.on) {
- e3.on.removeEventListener(e3.trigger, e3.listener);
- }
- });
- }
- Ae(e2);
- oe(Object.keys(t2), function(e3) {
- delete t2[e3];
- });
- }
- function m(e2) {
- ce(e2, "htmx:beforeCleanupElement");
- Ne(e2);
- if (e2.children) {
- oe(e2.children, function(e3) {
- m(e3);
- });
- }
- }
- function Ie(t2, e2, r2) {
- if (t2.tagName === "BODY") {
- return Ue(t2, e2, r2);
- } else {
- var n2;
- var i2 = t2.previousSibling;
- a(u(t2), t2, e2, r2);
- if (i2 == null) {
- n2 = u(t2).firstChild;
- } else {
- n2 = i2.nextSibling;
- }
- r2.elts = r2.elts.filter(function(e3) {
- return e3 != t2;
- });
- while (n2 && n2 !== t2) {
- if (n2.nodeType === Node.ELEMENT_NODE) {
- r2.elts.push(n2);
- }
- n2 = n2.nextElementSibling;
- }
- m(t2);
- u(t2).removeChild(t2);
- }
- }
- function ke(e2, t2, r2) {
- return a(e2, e2.firstChild, t2, r2);
- }
- function Pe(e2, t2, r2) {
- return a(u(e2), e2, t2, r2);
- }
- function Me(e2, t2, r2) {
- return a(e2, null, t2, r2);
- }
- function Xe(e2, t2, r2) {
- return a(u(e2), e2.nextSibling, t2, r2);
- }
- function De(e2, t2, r2) {
- m(e2);
- return u(e2).removeChild(e2);
- }
- function Ue(e2, t2, r2) {
- var n2 = e2.firstChild;
- a(e2, n2, t2, r2);
- if (n2) {
- while (n2.nextSibling) {
- m(n2.nextSibling);
- e2.removeChild(n2.nextSibling);
- }
- m(n2);
- e2.removeChild(n2);
- }
- }
- function Be(e2, t2, r2) {
- var n2 = r2 || ne(e2, "hx-select");
- if (n2) {
- var i2 = re().createDocumentFragment();
- oe(t2.querySelectorAll(n2), function(e3) {
- i2.appendChild(e3);
- });
- t2 = i2;
- }
- return t2;
- }
- function Fe(e2, t2, r2, n2, i2) {
- switch (e2) {
- case "none":
- return;
- case "outerHTML":
- Ie(r2, n2, i2);
- return;
- case "afterbegin":
- ke(r2, n2, i2);
- return;
- case "beforebegin":
- Pe(r2, n2, i2);
- return;
- case "beforeend":
- Me(r2, n2, i2);
- return;
- case "afterend":
- Xe(r2, n2, i2);
- return;
- case "delete":
- De(r2, n2, i2);
- return;
- default:
- var a2 = Fr(t2);
- for (var o2 = 0; o2 < a2.length; o2++) {
- var s2 = a2[o2];
- try {
- var l2 = s2.handleSwap(e2, r2, n2, i2);
- if (l2) {
- if (typeof l2.length !== "undefined") {
- for (var u2 = 0; u2 < l2.length; u2++) {
- var f2 = l2[u2];
- if (f2.nodeType !== Node.TEXT_NODE && f2.nodeType !== Node.COMMENT_NODE) {
- i2.tasks.push(Oe(f2));
- }
- }
- }
- return;
- }
- } catch (e3) {
- b(e3);
- }
- }
- if (e2 === "innerHTML") {
- Ue(r2, n2, i2);
- } else {
- Fe(Q.config.defaultSwapStyle, t2, r2, n2, i2);
- }
- }
- }
- function Ve(e2) {
- if (e2.indexOf(" -1) {
- var t2 = e2.replace(H, "");
- var r2 = t2.match(q);
- if (r2) {
- return r2[2];
- }
- }
- }
- function je(e2, t2, r2, n2, i2, a2) {
- i2.title = Ve(n2);
- var o2 = l(n2);
- if (o2) {
- Ce(r2, o2, i2);
- o2 = Be(r2, o2, a2);
- Re(o2);
- return Fe(e2, r2, t2, o2, i2);
- }
- }
- function _e(e2, t2, r2) {
- var n2 = e2.getResponseHeader(t2);
- if (n2.indexOf("{") === 0) {
- var i2 = E(n2);
- for (var a2 in i2) {
- if (i2.hasOwnProperty(a2)) {
- var o2 = i2[a2];
- if (!P(o2)) {
- o2 = { value: o2 };
- }
- ce(r2, a2, o2);
- }
- }
- } else {
- var s2 = n2.split(",");
- for (var l2 = 0; l2 < s2.length; l2++) {
- ce(r2, s2[l2].trim(), []);
- }
- }
- }
- var ze = /\s/;
- var x = /[\s,]/;
- var $e = /[_$a-zA-Z]/;
- var We = /[_$a-zA-Z0-9]/;
- var Ge = ['"', "'", "/"];
- var Je = /[^\s]/;
- var Ze = /[{(]/;
- var Ke = /[})]/;
- function Ye(e2) {
- var t2 = [];
- var r2 = 0;
- while (r2 < e2.length) {
- if ($e.exec(e2.charAt(r2))) {
- var n2 = r2;
- while (We.exec(e2.charAt(r2 + 1))) {
- r2++;
- }
- t2.push(e2.substr(n2, r2 - n2 + 1));
- } else if (Ge.indexOf(e2.charAt(r2)) !== -1) {
- var i2 = e2.charAt(r2);
- var n2 = r2;
- r2++;
- while (r2 < e2.length && e2.charAt(r2) !== i2) {
- if (e2.charAt(r2) === "\\") {
- r2++;
- }
- r2++;
- }
- t2.push(e2.substr(n2, r2 - n2 + 1));
- } else {
- var a2 = e2.charAt(r2);
- t2.push(a2);
- }
- r2++;
- }
- return t2;
- }
- function Qe(e2, t2, r2) {
- return $e.exec(e2.charAt(0)) && e2 !== "true" && e2 !== "false" && e2 !== "this" && e2 !== r2 && t2 !== ".";
- }
- function et(e2, t2, r2) {
- if (t2[0] === "[") {
- t2.shift();
- var n2 = 1;
- var i2 = " return (function(" + r2 + "){ return (";
- var a2 = null;
- while (t2.length > 0) {
- var o2 = t2[0];
- if (o2 === "]") {
- n2--;
- if (n2 === 0) {
- if (a2 === null) {
- i2 = i2 + "true";
- }
- t2.shift();
- i2 += ")})";
- try {
- var s2 = Tr(e2, function() {
- return Function(i2)();
- }, function() {
- return true;
- });
- s2.source = i2;
- return s2;
- } catch (e3) {
- fe(re().body, "htmx:syntax:error", { error: e3, source: i2 });
- return null;
- }
- }
- } else if (o2 === "[") {
- n2++;
- }
- if (Qe(o2, a2, r2)) {
- i2 += "((" + r2 + "." + o2 + ") ? (" + r2 + "." + o2 + ") : (window." + o2 + "))";
- } else {
- i2 = i2 + o2;
- }
- a2 = t2.shift();
- }
- }
- }
- function y(e2, t2) {
- var r2 = "";
- while (e2.length > 0 && !t2.test(e2[0])) {
- r2 += e2.shift();
- }
- return r2;
- }
- function tt(e2) {
- var t2;
- if (e2.length > 0 && Ze.test(e2[0])) {
- e2.shift();
- t2 = y(e2, Ke).trim();
- e2.shift();
- } else {
- t2 = y(e2, x);
- }
- return t2;
- }
- var rt = "input, textarea, select";
- function nt(e2, t2, r2) {
- var n2 = [];
- var i2 = Ye(t2);
- do {
- y(i2, Je);
- var a2 = i2.length;
- var o2 = y(i2, /[,\[\s]/);
- if (o2 !== "") {
- if (o2 === "every") {
- var s2 = { trigger: "every" };
- y(i2, Je);
- s2.pollInterval = d(y(i2, /[,\[\s]/));
- y(i2, Je);
- var l2 = et(e2, i2, "event");
- if (l2) {
- s2.eventFilter = l2;
- }
- n2.push(s2);
- } else if (o2.indexOf("sse:") === 0) {
- n2.push({ trigger: "sse", sseEvent: o2.substr(4) });
- } else {
- var u2 = { trigger: o2 };
- var l2 = et(e2, i2, "event");
- if (l2) {
- u2.eventFilter = l2;
- }
- while (i2.length > 0 && i2[0] !== ",") {
- y(i2, Je);
- var f2 = i2.shift();
- if (f2 === "changed") {
- u2.changed = true;
- } else if (f2 === "once") {
- u2.once = true;
- } else if (f2 === "consume") {
- u2.consume = true;
- } else if (f2 === "delay" && i2[0] === ":") {
- i2.shift();
- u2.delay = d(y(i2, x));
- } else if (f2 === "from" && i2[0] === ":") {
- i2.shift();
- if (Ze.test(i2[0])) {
- var c2 = tt(i2);
- } else {
- var c2 = y(i2, x);
- if (c2 === "closest" || c2 === "find" || c2 === "next" || c2 === "previous") {
- i2.shift();
- var h2 = tt(i2);
- if (h2.length > 0) {
- c2 += " " + h2;
- }
- }
- }
- u2.from = c2;
- } else if (f2 === "target" && i2[0] === ":") {
- i2.shift();
- u2.target = tt(i2);
- } else if (f2 === "throttle" && i2[0] === ":") {
- i2.shift();
- u2.throttle = d(y(i2, x));
- } else if (f2 === "queue" && i2[0] === ":") {
- i2.shift();
- u2.queue = y(i2, x);
- } else if (f2 === "root" && i2[0] === ":") {
- i2.shift();
- u2[f2] = tt(i2);
- } else if (f2 === "threshold" && i2[0] === ":") {
- i2.shift();
- u2[f2] = y(i2, x);
- } else {
- fe(e2, "htmx:syntax:error", { token: i2.shift() });
- }
- }
- n2.push(u2);
- }
- }
- if (i2.length === a2) {
- fe(e2, "htmx:syntax:error", { token: i2.shift() });
- }
- y(i2, Je);
- } while (i2[0] === "," && i2.shift());
- if (r2) {
- r2[t2] = n2;
- }
- return n2;
- }
- function it(e2) {
- var t2 = te(e2, "hx-trigger");
- var r2 = [];
- if (t2) {
- var n2 = Q.config.triggerSpecsCache;
- r2 = n2 && n2[t2] || nt(e2, t2, n2);
- }
- if (r2.length > 0) {
- return r2;
- } else if (h(e2, "form")) {
- return [{ trigger: "submit" }];
- } else if (h(e2, 'input[type="button"], input[type="submit"]')) {
- return [{ trigger: "click" }];
- } else if (h(e2, rt)) {
- return [{ trigger: "change" }];
- } else {
- return [{ trigger: "click" }];
- }
- }
- function at(e2) {
- ae(e2).cancelled = true;
- }
- function ot(e2, t2, r2) {
- var n2 = ae(e2);
- n2.timeout = setTimeout(function() {
- if (se(e2) && n2.cancelled !== true) {
- if (!ct(r2, e2, Wt("hx:poll:trigger", { triggerSpec: r2, target: e2 }))) {
- t2(e2);
- }
- ot(e2, t2, r2);
- }
- }, r2.pollInterval);
- }
- function st(e2) {
- return location.hostname === e2.hostname && ee(e2, "href") && ee(e2, "href").indexOf("#") !== 0;
- }
- function lt(t2, r2, e2) {
- if (t2.tagName === "A" && st(t2) && (t2.target === "" || t2.target === "_self") || t2.tagName === "FORM") {
- r2.boosted = true;
- var n2, i2;
- if (t2.tagName === "A") {
- n2 = "get";
- i2 = ee(t2, "href");
- } else {
- var a2 = ee(t2, "method");
- n2 = a2 ? a2.toLowerCase() : "get";
- if (n2 === "get") {
- }
- i2 = ee(t2, "action");
- }
- e2.forEach(function(e3) {
- ht(t2, function(e4, t3) {
- if (v(e4, Q.config.disableSelector)) {
- m(e4);
- return;
- }
- he(n2, i2, e4, t3);
- }, r2, e3, true);
- });
- }
- }
- function ut(e2, t2) {
- if (e2.type === "submit" || e2.type === "click") {
- if (t2.tagName === "FORM") {
- return true;
- }
- if (h(t2, 'input[type="submit"], button') && v(t2, "form") !== null) {
- return true;
- }
- if (t2.tagName === "A" && t2.href && (t2.getAttribute("href") === "#" || t2.getAttribute("href").indexOf("#") !== 0)) {
- return true;
- }
- }
- return false;
- }
- function ft(e2, t2) {
- return ae(e2).boosted && e2.tagName === "A" && t2.type === "click" && (t2.ctrlKey || t2.metaKey);
- }
- function ct(e2, t2, r2) {
- var n2 = e2.eventFilter;
- if (n2) {
- try {
- return n2.call(t2, r2) !== true;
- } catch (e3) {
- fe(re().body, "htmx:eventFilter:error", { error: e3, source: n2.source });
- return true;
- }
- }
- return false;
- }
- function ht(a2, o2, e2, s2, l2) {
- var u2 = ae(a2);
- var t2;
- if (s2.from) {
- t2 = Z(a2, s2.from);
- } else {
- t2 = [a2];
- }
- if (s2.changed) {
- t2.forEach(function(e3) {
- var t3 = ae(e3);
- t3.lastValue = e3.value;
- });
- }
- oe(t2, function(n2) {
- var i2 = function(e3) {
- if (!se(a2)) {
- n2.removeEventListener(s2.trigger, i2);
- return;
- }
- if (ft(a2, e3)) {
- return;
- }
- if (l2 || ut(e3, a2)) {
- e3.preventDefault();
- }
- if (ct(s2, a2, e3)) {
- return;
- }
- var t3 = ae(e3);
- t3.triggerSpec = s2;
- if (t3.handledFor == null) {
- t3.handledFor = [];
- }
- if (t3.handledFor.indexOf(a2) < 0) {
- t3.handledFor.push(a2);
- if (s2.consume) {
- e3.stopPropagation();
- }
- if (s2.target && e3.target) {
- if (!h(e3.target, s2.target)) {
- return;
- }
- }
- if (s2.once) {
- if (u2.triggeredOnce) {
- return;
- } else {
- u2.triggeredOnce = true;
- }
- }
- if (s2.changed) {
- var r2 = ae(n2);
- if (r2.lastValue === n2.value) {
- return;
- }
- r2.lastValue = n2.value;
- }
- if (u2.delayed) {
- clearTimeout(u2.delayed);
- }
- if (u2.throttle) {
- return;
- }
- if (s2.throttle > 0) {
- if (!u2.throttle) {
- o2(a2, e3);
- u2.throttle = setTimeout(function() {
- u2.throttle = null;
- }, s2.throttle);
- }
- } else if (s2.delay > 0) {
- u2.delayed = setTimeout(function() {
- o2(a2, e3);
- }, s2.delay);
- } else {
- ce(a2, "htmx:trigger");
- o2(a2, e3);
- }
- }
- };
- if (e2.listenerInfos == null) {
- e2.listenerInfos = [];
- }
- e2.listenerInfos.push({ trigger: s2.trigger, listener: i2, on: n2 });
- n2.addEventListener(s2.trigger, i2);
- });
- }
- var vt = false;
- var dt = null;
- function gt() {
- if (!dt) {
- dt = function() {
- vt = true;
- };
- window.addEventListener("scroll", dt);
- setInterval(function() {
- if (vt) {
- vt = false;
- oe(re().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"), function(e2) {
- pt(e2);
- });
- }
- }, 200);
- }
- }
- function pt(t2) {
- if (!o(t2, "data-hx-revealed") && X(t2)) {
- t2.setAttribute("data-hx-revealed", "true");
- var e2 = ae(t2);
- if (e2.initHash) {
- ce(t2, "revealed");
- } else {
- t2.addEventListener("htmx:afterProcessNode", function(e3) {
- ce(t2, "revealed");
- }, { once: true });
- }
- }
- }
- function mt(e2, t2, r2) {
- var n2 = D(r2);
- for (var i2 = 0; i2 < n2.length; i2++) {
- var a2 = n2[i2].split(/:(.+)/);
- if (a2[0] === "connect") {
- xt(e2, a2[1], 0);
- }
- if (a2[0] === "send") {
- bt(e2);
- }
- }
- }
- function xt(s2, r2, n2) {
- if (!se(s2)) {
- return;
- }
- if (r2.indexOf("/") == 0) {
- var e2 = location.hostname + (location.port ? ":" + location.port : "");
- if (location.protocol == "https:") {
- r2 = "wss://" + e2 + r2;
- } else if (location.protocol == "http:") {
- r2 = "ws://" + e2 + r2;
- }
- }
- var t2 = Q.createWebSocket(r2);
- t2.onerror = function(e3) {
- fe(s2, "htmx:wsError", { error: e3, socket: t2 });
- yt(s2);
- };
- t2.onclose = function(e3) {
- if ([1006, 1012, 1013].indexOf(e3.code) >= 0) {
- var t3 = wt(n2);
- setTimeout(function() {
- xt(s2, r2, n2 + 1);
- }, t3);
- }
- };
- t2.onopen = function(e3) {
- n2 = 0;
- };
- ae(s2).webSocket = t2;
- t2.addEventListener("message", function(e3) {
- if (yt(s2)) {
- return;
- }
- var t3 = e3.data;
- R(s2, function(e4) {
- t3 = e4.transformResponse(t3, null, s2);
- });
- var r3 = T(s2);
- var n3 = l(t3);
- var i2 = M(n3.children);
- for (var a2 = 0; a2 < i2.length; a2++) {
- var o2 = i2[a2];
- Ee(te(o2, "hx-swap-oob") || "true", o2, r3);
- }
- nr(r3.tasks);
- });
- }
- function yt(e2) {
- if (!se(e2)) {
- ae(e2).webSocket.close();
- return true;
- }
- }
- function bt(u2) {
- var f2 = c(u2, function(e2) {
- return ae(e2).webSocket != null;
- });
- if (f2) {
- u2.addEventListener(it(u2)[0].trigger, function(e2) {
- var t2 = ae(f2).webSocket;
- var r2 = xr(u2, f2);
- var n2 = dr(u2, "post");
- var i2 = n2.errors;
- var a2 = n2.values;
- var o2 = Hr(u2);
- var s2 = le(a2, o2);
- var l2 = yr(s2, u2);
- l2["HEADERS"] = r2;
- if (i2 && i2.length > 0) {
- ce(u2, "htmx:validation:halted", i2);
- return;
- }
- t2.send(JSON.stringify(l2));
- if (ut(e2, u2)) {
- e2.preventDefault();
- }
- });
- } else {
- fe(u2, "htmx:noWebSocketSourceError");
- }
- }
- function wt(e2) {
- var t2 = Q.config.wsReconnectDelay;
- if (typeof t2 === "function") {
- return t2(e2);
- }
- if (t2 === "full-jitter") {
- var r2 = Math.min(e2, 6);
- var n2 = 1e3 * Math.pow(2, r2);
- return n2 * Math.random();
- }
- b('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"');
- }
- function St(e2, t2, r2) {
- var n2 = D(r2);
- for (var i2 = 0; i2 < n2.length; i2++) {
- var a2 = n2[i2].split(/:(.+)/);
- if (a2[0] === "connect") {
- Et(e2, a2[1]);
- }
- if (a2[0] === "swap") {
- Ct(e2, a2[1]);
- }
- }
- }
- function Et(t2, e2) {
- var r2 = Q.createEventSource(e2);
- r2.onerror = function(e3) {
- fe(t2, "htmx:sseError", { error: e3, source: r2 });
- Tt(t2);
- };
- ae(t2).sseEventSource = r2;
- }
- function Ct(a2, o2) {
- var s2 = c(a2, Ot);
- if (s2) {
- var l2 = ae(s2).sseEventSource;
- var u2 = function(e2) {
- if (Tt(s2)) {
- return;
- }
- if (!se(a2)) {
- l2.removeEventListener(o2, u2);
- return;
- }
- var t2 = e2.data;
- R(a2, function(e3) {
- t2 = e3.transformResponse(t2, null, a2);
- });
- var r2 = wr(a2);
- var n2 = ye(a2);
- var i2 = T(a2);
- je(r2.swapStyle, n2, a2, t2, i2);
- nr(i2.tasks);
- ce(a2, "htmx:sseMessage", e2);
- };
- ae(a2).sseListener = u2;
- l2.addEventListener(o2, u2);
- } else {
- fe(a2, "htmx:noSSESourceError");
- }
- }
- function Rt(e2, t2, r2) {
- var n2 = c(e2, Ot);
- if (n2) {
- var i2 = ae(n2).sseEventSource;
- var a2 = function() {
- if (!Tt(n2)) {
- if (se(e2)) {
- t2(e2);
- } else {
- i2.removeEventListener(r2, a2);
- }
- }
- };
- ae(e2).sseListener = a2;
- i2.addEventListener(r2, a2);
- } else {
- fe(e2, "htmx:noSSESourceError");
- }
- }
- function Tt(e2) {
- if (!se(e2)) {
- ae(e2).sseEventSource.close();
- return true;
- }
- }
- function Ot(e2) {
- return ae(e2).sseEventSource != null;
- }
- function qt(e2, t2, r2, n2) {
- var i2 = function() {
- if (!r2.loaded) {
- r2.loaded = true;
- t2(e2);
- }
- };
- if (n2 > 0) {
- setTimeout(i2, n2);
- } else {
- i2();
- }
- }
- function Ht(t2, i2, e2) {
- var a2 = false;
- oe(w, function(r2) {
- if (o(t2, "hx-" + r2)) {
- var n2 = te(t2, "hx-" + r2);
- a2 = true;
- i2.path = n2;
- i2.verb = r2;
- e2.forEach(function(e3) {
- Lt(t2, e3, i2, function(e4, t3) {
- if (v(e4, Q.config.disableSelector)) {
- m(e4);
- return;
- }
- he(r2, n2, e4, t3);
- });
- });
- }
- });
- return a2;
- }
- function Lt(n2, e2, t2, r2) {
- if (e2.sseEvent) {
- Rt(n2, r2, e2.sseEvent);
- } else if (e2.trigger === "revealed") {
- gt();
- ht(n2, r2, t2, e2);
- pt(n2);
- } else if (e2.trigger === "intersect") {
- var i2 = {};
- if (e2.root) {
- i2.root = ue(n2, e2.root);
- }
- if (e2.threshold) {
- i2.threshold = parseFloat(e2.threshold);
- }
- var a2 = new IntersectionObserver(function(e3) {
- for (var t3 = 0; t3 < e3.length; t3++) {
- var r3 = e3[t3];
- if (r3.isIntersecting) {
- ce(n2, "intersect");
- break;
- }
- }
- }, i2);
- a2.observe(n2);
- ht(n2, r2, t2, e2);
- } else if (e2.trigger === "load") {
- if (!ct(e2, n2, Wt("load", { elt: n2 }))) {
- qt(n2, r2, t2, e2.delay);
- }
- } else if (e2.pollInterval > 0) {
- t2.polling = true;
- ot(n2, r2, e2);
- } else {
- ht(n2, r2, t2, e2);
- }
- }
- function At(e2) {
- if (!e2.htmxExecuted && Q.config.allowScriptTags && (e2.type === "text/javascript" || e2.type === "module" || e2.type === "")) {
- var t2 = re().createElement("script");
- oe(e2.attributes, function(e3) {
- t2.setAttribute(e3.name, e3.value);
- });
- t2.textContent = e2.textContent;
- t2.async = false;
- if (Q.config.inlineScriptNonce) {
- t2.nonce = Q.config.inlineScriptNonce;
- }
- var r2 = e2.parentElement;
- try {
- r2.insertBefore(t2, e2);
- } catch (e3) {
- b(e3);
- } finally {
- if (e2.parentElement) {
- e2.parentElement.removeChild(e2);
- }
- }
- }
- }
- function Nt(e2) {
- if (h(e2, "script")) {
- At(e2);
- }
- oe(f(e2, "script"), function(e3) {
- At(e3);
- });
- }
- function It(e2) {
- var t2 = e2.attributes;
- if (!t2) {
- return false;
- }
- for (var r2 = 0; r2 < t2.length; r2++) {
- var n2 = t2[r2].name;
- if (g(n2, "hx-on:") || g(n2, "data-hx-on:") || g(n2, "hx-on-") || g(n2, "data-hx-on-")) {
- return true;
- }
- }
- return false;
- }
- function kt(e2) {
- var t2 = null;
- var r2 = [];
- if (It(e2)) {
- r2.push(e2);
- }
- if (document.evaluate) {
- var n2 = document.evaluate('.//*[@*[ 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-") ]]', e2);
- while (t2 = n2.iterateNext()) r2.push(t2);
- } else if (typeof e2.getElementsByTagName === "function") {
- var i2 = e2.getElementsByTagName("*");
- for (var a2 = 0; a2 < i2.length; a2++) {
- if (It(i2[a2])) {
- r2.push(i2[a2]);
- }
- }
- }
- return r2;
- }
- function Pt(e2) {
- if (e2.querySelectorAll) {
- var t2 = ", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]";
- var r2 = e2.querySelectorAll(i + t2 + ", 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 r2;
- } else {
- return [];
- }
- }
- function Mt(e2) {
- var t2 = v(e2.target, "button, input[type='submit']");
- var r2 = Dt(e2);
- if (r2) {
- r2.lastButtonClicked = t2;
- }
- }
- function Xt(e2) {
- var t2 = Dt(e2);
- if (t2) {
- t2.lastButtonClicked = null;
- }
- }
- function Dt(e2) {
- var t2 = v(e2.target, "button, input[type='submit']");
- if (!t2) {
- return;
- }
- var r2 = p("#" + ee(t2, "form")) || v(t2, "form");
- if (!r2) {
- return;
- }
- return ae(r2);
- }
- function Ut(e2) {
- e2.addEventListener("click", Mt);
- e2.addEventListener("focusin", Mt);
- e2.addEventListener("focusout", Xt);
- }
- function Bt(e2) {
- var t2 = Ye(e2);
- var r2 = 0;
- for (var n2 = 0; n2 < t2.length; n2++) {
- const i2 = t2[n2];
- if (i2 === "{") {
- r2++;
- } else if (i2 === "}") {
- r2--;
- }
- }
- return r2;
- }
- function Ft(t2, e2, r2) {
- var n2 = ae(t2);
- if (!Array.isArray(n2.onHandlers)) {
- n2.onHandlers = [];
- }
- var i2;
- var a2 = function(e3) {
- return Tr(t2, function() {
- if (!i2) {
- i2 = new Function("event", r2);
- }
- i2.call(t2, e3);
- });
- };
- t2.addEventListener(e2, a2);
- n2.onHandlers.push({ event: e2, listener: a2 });
- }
- function Vt(e2) {
- var t2 = te(e2, "hx-on");
- if (t2) {
- var r2 = {};
- var n2 = t2.split("\n");
- var i2 = null;
- var a2 = 0;
- while (n2.length > 0) {
- var o2 = n2.shift();
- var s2 = o2.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/);
- if (a2 === 0 && s2) {
- o2.split(":");
- i2 = s2[1].slice(0, -1);
- r2[i2] = s2[2];
- } else {
- r2[i2] += o2;
- }
- a2 += Bt(o2);
- }
- for (var l2 in r2) {
- Ft(e2, l2, r2[l2]);
- }
- }
- }
- function jt(e2) {
- Ae(e2);
- for (var t2 = 0; t2 < e2.attributes.length; t2++) {
- var r2 = e2.attributes[t2].name;
- var n2 = e2.attributes[t2].value;
- if (g(r2, "hx-on") || g(r2, "data-hx-on")) {
- var i2 = r2.indexOf("-on") + 3;
- var a2 = r2.slice(i2, i2 + 1);
- if (a2 === "-" || a2 === ":") {
- var o2 = r2.slice(i2 + 1);
- if (g(o2, ":")) {
- o2 = "htmx" + o2;
- } else if (g(o2, "-")) {
- o2 = "htmx:" + o2.slice(1);
- } else if (g(o2, "htmx-")) {
- o2 = "htmx:" + o2.slice(5);
- }
- Ft(e2, o2, n2);
- }
- }
- }
- }
- function _t(t2) {
- if (v(t2, Q.config.disableSelector)) {
- m(t2);
- return;
- }
- var r2 = ae(t2);
- if (r2.initHash !== Le(t2)) {
- Ne(t2);
- r2.initHash = Le(t2);
- Vt(t2);
- ce(t2, "htmx:beforeProcessNode");
- if (t2.value) {
- r2.lastValue = t2.value;
- }
- var e2 = it(t2);
- var n2 = Ht(t2, r2, e2);
- if (!n2) {
- if (ne(t2, "hx-boost") === "true") {
- lt(t2, r2, e2);
- } else if (o(t2, "hx-trigger")) {
- e2.forEach(function(e3) {
- Lt(t2, e3, r2, function() {
- });
- });
- }
- }
- if (t2.tagName === "FORM" || ee(t2, "type") === "submit" && o(t2, "form")) {
- Ut(t2);
- }
- var i2 = te(t2, "hx-sse");
- if (i2) {
- St(t2, r2, i2);
- }
- var a2 = te(t2, "hx-ws");
- if (a2) {
- mt(t2, r2, a2);
- }
- ce(t2, "htmx:afterProcessNode");
- }
- }
- function zt(e2) {
- e2 = p(e2);
- if (v(e2, Q.config.disableSelector)) {
- m(e2);
- return;
- }
- _t(e2);
- oe(Pt(e2), function(e3) {
- _t(e3);
- });
- oe(kt(e2), jt);
- }
- function $t(e2) {
- return e2.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
- }
- function Wt(e2, t2) {
- var r2;
- if (window.CustomEvent && typeof window.CustomEvent === "function") {
- r2 = new CustomEvent(e2, { bubbles: true, cancelable: true, detail: t2 });
- } else {
- r2 = re().createEvent("CustomEvent");
- r2.initCustomEvent(e2, true, true, t2);
- }
- return r2;
- }
- function fe(e2, t2, r2) {
- ce(e2, t2, le({ error: t2 }, r2));
- }
- function Gt(e2) {
- return e2 === "htmx:afterProcessNode";
- }
- function R(e2, t2) {
- oe(Fr(e2), function(e3) {
- try {
- t2(e3);
- } catch (e4) {
- b(e4);
- }
- });
- }
- function b(e2) {
- if (console.error) {
- console.error(e2);
- } else if (console.log) {
- console.log("ERROR: ", e2);
- }
- }
- function ce(e2, t2, r2) {
- e2 = p(e2);
- if (r2 == null) {
- r2 = {};
- }
- r2["elt"] = e2;
- var n2 = Wt(t2, r2);
- if (Q.logger && !Gt(t2)) {
- Q.logger(e2, t2, r2);
- }
- if (r2.error) {
- b(r2.error);
- ce(e2, "htmx:error", { errorInfo: r2 });
- }
- var i2 = e2.dispatchEvent(n2);
- var a2 = $t(t2);
- if (i2 && a2 !== t2) {
- var o2 = Wt(a2, n2.detail);
- i2 = i2 && e2.dispatchEvent(o2);
- }
- R(e2, function(e3) {
- i2 = i2 && (e3.onEvent(t2, n2) !== false && !n2.defaultPrevented);
- });
- return i2;
- }
- var Jt = location.pathname + location.search;
- function Zt() {
- var e2 = re().querySelector("[hx-history-elt],[data-hx-history-elt]");
- return e2 || re().body;
- }
- function Kt(e2, t2, r2, n2) {
- if (!U()) {
- return;
- }
- if (Q.config.historyCacheSize <= 0) {
- localStorage.removeItem("htmx-history-cache");
- return;
- }
- e2 = B(e2);
- var i2 = E(localStorage.getItem("htmx-history-cache")) || [];
- for (var a2 = 0; a2 < i2.length; a2++) {
- if (i2[a2].url === e2) {
- i2.splice(a2, 1);
- break;
- }
- }
- var o2 = { url: e2, content: t2, title: r2, scroll: n2 };
- ce(re().body, "htmx:historyItemCreated", { item: o2, cache: i2 });
- i2.push(o2);
- while (i2.length > Q.config.historyCacheSize) {
- i2.shift();
- }
- while (i2.length > 0) {
- try {
- localStorage.setItem("htmx-history-cache", JSON.stringify(i2));
- break;
- } catch (e3) {
- fe(re().body, "htmx:historyCacheError", { cause: e3, cache: i2 });
- i2.shift();
- }
- }
- }
- function Yt(e2) {
- if (!U()) {
- return null;
- }
- e2 = B(e2);
- var t2 = E(localStorage.getItem("htmx-history-cache")) || [];
- for (var r2 = 0; r2 < t2.length; r2++) {
- if (t2[r2].url === e2) {
- return t2[r2];
- }
- }
- return null;
- }
- function Qt(e2) {
- var t2 = Q.config.requestClass;
- var r2 = e2.cloneNode(true);
- oe(f(r2, "." + t2), function(e3) {
- n(e3, t2);
- });
- return r2.innerHTML;
- }
- function er() {
- var e2 = Zt();
- var t2 = Jt || location.pathname + location.search;
- var r2;
- try {
- r2 = re().querySelector('[hx-history="false" i],[data-hx-history="false" i]');
- } catch (e3) {
- r2 = re().querySelector('[hx-history="false"],[data-hx-history="false"]');
- }
- if (!r2) {
- ce(re().body, "htmx:beforeHistorySave", { path: t2, historyElt: e2 });
- Kt(t2, Qt(e2), re().title, window.scrollY);
- }
- if (Q.config.historyEnabled) history.replaceState({ htmx: true }, re().title, window.location.href);
- }
- function tr(e2) {
- if (Q.config.getCacheBusterParam) {
- e2 = e2.replace(/org\.htmx\.cache-buster=[^&]*&?/, "");
- if (G(e2, "&") || G(e2, "?")) {
- e2 = e2.slice(0, -1);
- }
- }
- if (Q.config.historyEnabled) {
- history.pushState({ htmx: true }, "", e2);
- }
- Jt = e2;
- }
- function rr(e2) {
- if (Q.config.historyEnabled) history.replaceState({ htmx: true }, "", e2);
- Jt = e2;
- }
- function nr(e2) {
- oe(e2, function(e3) {
- e3.call();
- });
- }
- function ir(a2) {
- var e2 = new XMLHttpRequest();
- var o2 = { path: a2, xhr: e2 };
- ce(re().body, "htmx:historyCacheMiss", o2);
- e2.open("GET", a2, true);
- e2.setRequestHeader("HX-Request", "true");
- e2.setRequestHeader("HX-History-Restore-Request", "true");
- e2.setRequestHeader("HX-Current-URL", re().location.href);
- e2.onload = function() {
- if (this.status >= 200 && this.status < 400) {
- ce(re().body, "htmx:historyCacheMissLoad", o2);
- var e3 = l(this.response);
- e3 = e3.querySelector("[hx-history-elt],[data-hx-history-elt]") || e3;
- var t2 = Zt();
- var r2 = T(t2);
- var n2 = Ve(this.response);
- if (n2) {
- var i2 = C("title");
- if (i2) {
- i2.innerHTML = n2;
- } else {
- window.document.title = n2;
- }
- }
- Ue(t2, e3, r2);
- nr(r2.tasks);
- Jt = a2;
- ce(re().body, "htmx:historyRestore", { path: a2, cacheMiss: true, serverResponse: this.response });
- } else {
- fe(re().body, "htmx:historyCacheMissLoadError", o2);
- }
- };
- e2.send();
- }
- function ar(e2) {
- er();
- e2 = e2 || location.pathname + location.search;
- var t2 = Yt(e2);
- if (t2) {
- var r2 = l(t2.content);
- var n2 = Zt();
- var i2 = T(n2);
- Ue(n2, r2, i2);
- nr(i2.tasks);
- document.title = t2.title;
- setTimeout(function() {
- window.scrollTo(0, t2.scroll);
- }, 0);
- Jt = e2;
- ce(re().body, "htmx:historyRestore", { path: e2, item: t2 });
- } else {
- if (Q.config.refreshOnHistoryMiss) {
- window.location.reload(true);
- } else {
- ir(e2);
- }
- }
- }
- function or(e2) {
- var t2 = me(e2, "hx-indicator");
- if (t2 == null) {
- t2 = [e2];
- }
- oe(t2, function(e3) {
- var t3 = ae(e3);
- t3.requestCount = (t3.requestCount || 0) + 1;
- e3.classList["add"].call(e3.classList, Q.config.requestClass);
- });
- return t2;
- }
- function sr(e2) {
- var t2 = me(e2, "hx-disabled-elt");
- if (t2 == null) {
- t2 = [];
- }
- oe(t2, function(e3) {
- var t3 = ae(e3);
- t3.requestCount = (t3.requestCount || 0) + 1;
- e3.setAttribute("disabled", "");
- });
- return t2;
- }
- function lr(e2, t2) {
- oe(e2, function(e3) {
- var t3 = ae(e3);
- t3.requestCount = (t3.requestCount || 0) - 1;
- if (t3.requestCount === 0) {
- e3.classList["remove"].call(e3.classList, Q.config.requestClass);
- }
- });
- oe(t2, function(e3) {
- var t3 = ae(e3);
- t3.requestCount = (t3.requestCount || 0) - 1;
- if (t3.requestCount === 0) {
- e3.removeAttribute("disabled");
- }
- });
- }
- function ur(e2, t2) {
- for (var r2 = 0; r2 < e2.length; r2++) {
- var n2 = e2[r2];
- if (n2.isSameNode(t2)) {
- return true;
- }
- }
- return false;
- }
- function fr(e2) {
- if (e2.name === "" || e2.name == null || e2.disabled || v(e2, "fieldset[disabled]")) {
- return false;
- }
- if (e2.type === "button" || e2.type === "submit" || e2.tagName === "image" || e2.tagName === "reset" || e2.tagName === "file") {
- return false;
- }
- if (e2.type === "checkbox" || e2.type === "radio") {
- return e2.checked;
- }
- return true;
- }
- function cr(e2, t2, r2) {
- if (e2 != null && t2 != null) {
- var n2 = r2[e2];
- if (n2 === void 0) {
- r2[e2] = t2;
- } else if (Array.isArray(n2)) {
- if (Array.isArray(t2)) {
- r2[e2] = n2.concat(t2);
- } else {
- n2.push(t2);
- }
- } else {
- if (Array.isArray(t2)) {
- r2[e2] = [n2].concat(t2);
- } else {
- r2[e2] = [n2, t2];
- }
- }
- }
- }
- function hr(t2, r2, n2, e2, i2) {
- if (e2 == null || ur(t2, e2)) {
- return;
- } else {
- t2.push(e2);
- }
- if (fr(e2)) {
- var a2 = ee(e2, "name");
- var o2 = e2.value;
- if (e2.multiple && e2.tagName === "SELECT") {
- o2 = M(e2.querySelectorAll("option:checked")).map(function(e3) {
- return e3.value;
- });
- }
- if (e2.files) {
- o2 = M(e2.files);
- }
- cr(a2, o2, r2);
- if (i2) {
- vr(e2, n2);
- }
- }
- if (h(e2, "form")) {
- var s2 = e2.elements;
- oe(s2, function(e3) {
- hr(t2, r2, n2, e3, i2);
- });
- }
- }
- function vr(e2, t2) {
- if (e2.willValidate) {
- ce(e2, "htmx:validation:validate");
- if (!e2.checkValidity()) {
- t2.push({ elt: e2, message: e2.validationMessage, validity: e2.validity });
- ce(e2, "htmx:validation:failed", { message: e2.validationMessage, validity: e2.validity });
- }
- }
- }
- function dr(e2, t2) {
- var r2 = [];
- var n2 = {};
- var i2 = {};
- var a2 = [];
- var o2 = ae(e2);
- if (o2.lastButtonClicked && !se(o2.lastButtonClicked)) {
- o2.lastButtonClicked = null;
- }
- var s2 = h(e2, "form") && e2.noValidate !== true || te(e2, "hx-validate") === "true";
- if (o2.lastButtonClicked) {
- s2 = s2 && o2.lastButtonClicked.formNoValidate !== true;
- }
- if (t2 !== "get") {
- hr(r2, i2, a2, v(e2, "form"), s2);
- }
- hr(r2, n2, a2, e2, s2);
- if (o2.lastButtonClicked || e2.tagName === "BUTTON" || e2.tagName === "INPUT" && ee(e2, "type") === "submit") {
- var l2 = o2.lastButtonClicked || e2;
- var u2 = ee(l2, "name");
- cr(u2, l2.value, i2);
- }
- var f2 = me(e2, "hx-include");
- oe(f2, function(e3) {
- hr(r2, n2, a2, e3, s2);
- if (!h(e3, "form")) {
- oe(e3.querySelectorAll(rt), function(e4) {
- hr(r2, n2, a2, e4, s2);
- });
- }
- });
- n2 = le(n2, i2);
- return { errors: a2, values: n2 };
- }
- function gr(e2, t2, r2) {
- if (e2 !== "") {
- e2 += "&";
- }
- if (String(r2) === "[object Object]") {
- r2 = JSON.stringify(r2);
- }
- var n2 = encodeURIComponent(r2);
- e2 += encodeURIComponent(t2) + "=" + n2;
- return e2;
- }
- function pr(e2) {
- var t2 = "";
- for (var r2 in e2) {
- if (e2.hasOwnProperty(r2)) {
- var n2 = e2[r2];
- if (Array.isArray(n2)) {
- oe(n2, function(e3) {
- t2 = gr(t2, r2, e3);
- });
- } else {
- t2 = gr(t2, r2, n2);
- }
- }
- }
- return t2;
- }
- function mr(e2) {
- var t2 = new FormData();
- for (var r2 in e2) {
- if (e2.hasOwnProperty(r2)) {
- var n2 = e2[r2];
- if (Array.isArray(n2)) {
- oe(n2, function(e3) {
- t2.append(r2, e3);
- });
- } else {
- t2.append(r2, n2);
- }
- }
- }
- return t2;
- }
- function xr(e2, t2, r2) {
- var n2 = { "HX-Request": "true", "HX-Trigger": ee(e2, "id"), "HX-Trigger-Name": ee(e2, "name"), "HX-Target": te(t2, "id"), "HX-Current-URL": re().location.href };
- Rr(e2, "hx-headers", false, n2);
- if (r2 !== void 0) {
- n2["HX-Prompt"] = r2;
- }
- if (ae(e2).boosted) {
- n2["HX-Boosted"] = "true";
- }
- return n2;
- }
- function yr(t2, e2) {
- var r2 = ne(e2, "hx-params");
- if (r2) {
- if (r2 === "none") {
- return {};
- } else if (r2 === "*") {
- return t2;
- } else if (r2.indexOf("not ") === 0) {
- oe(r2.substr(4).split(","), function(e3) {
- e3 = e3.trim();
- delete t2[e3];
- });
- return t2;
- } else {
- var n2 = {};
- oe(r2.split(","), function(e3) {
- e3 = e3.trim();
- n2[e3] = t2[e3];
- });
- return n2;
- }
- } else {
- return t2;
- }
- }
- function br(e2) {
- return ee(e2, "href") && ee(e2, "href").indexOf("#") >= 0;
- }
- function wr(e2, t2) {
- var r2 = t2 ? t2 : ne(e2, "hx-swap");
- var n2 = { swapStyle: ae(e2).boosted ? "innerHTML" : Q.config.defaultSwapStyle, swapDelay: Q.config.defaultSwapDelay, settleDelay: Q.config.defaultSettleDelay };
- if (Q.config.scrollIntoViewOnBoost && ae(e2).boosted && !br(e2)) {
- n2["show"] = "top";
- }
- if (r2) {
- var i2 = D(r2);
- if (i2.length > 0) {
- for (var a2 = 0; a2 < i2.length; a2++) {
- var o2 = i2[a2];
- if (o2.indexOf("swap:") === 0) {
- n2["swapDelay"] = d(o2.substr(5));
- } else if (o2.indexOf("settle:") === 0) {
- n2["settleDelay"] = d(o2.substr(7));
- } else if (o2.indexOf("transition:") === 0) {
- n2["transition"] = o2.substr(11) === "true";
- } else if (o2.indexOf("ignoreTitle:") === 0) {
- n2["ignoreTitle"] = o2.substr(12) === "true";
- } else if (o2.indexOf("scroll:") === 0) {
- var s2 = o2.substr(7);
- var l2 = s2.split(":");
- var u2 = l2.pop();
- var f2 = l2.length > 0 ? l2.join(":") : null;
- n2["scroll"] = u2;
- n2["scrollTarget"] = f2;
- } else if (o2.indexOf("show:") === 0) {
- var c2 = o2.substr(5);
- var l2 = c2.split(":");
- var h2 = l2.pop();
- var f2 = l2.length > 0 ? l2.join(":") : null;
- n2["show"] = h2;
- n2["showTarget"] = f2;
- } else if (o2.indexOf("focus-scroll:") === 0) {
- var v2 = o2.substr("focus-scroll:".length);
- n2["focusScroll"] = v2 == "true";
- } else if (a2 == 0) {
- n2["swapStyle"] = o2;
- } else {
- b("Unknown modifier in hx-swap: " + o2);
- }
- }
- }
- }
- return n2;
- }
- function Sr(e2) {
- return ne(e2, "hx-encoding") === "multipart/form-data" || h(e2, "form") && ee(e2, "enctype") === "multipart/form-data";
- }
- function Er(t2, r2, n2) {
- var i2 = null;
- R(r2, function(e2) {
- if (i2 == null) {
- i2 = e2.encodeParameters(t2, n2, r2);
- }
- });
- if (i2 != null) {
- return i2;
- } else {
- if (Sr(r2)) {
- return mr(n2);
- } else {
- return pr(n2);
- }
- }
- }
- function T(e2) {
- return { tasks: [], elts: [e2] };
- }
- function Cr(e2, t2) {
- var r2 = e2[0];
- var n2 = e2[e2.length - 1];
- if (t2.scroll) {
- var i2 = null;
- if (t2.scrollTarget) {
- i2 = ue(r2, t2.scrollTarget);
- }
- if (t2.scroll === "top" && (r2 || i2)) {
- i2 = i2 || r2;
- i2.scrollTop = 0;
- }
- if (t2.scroll === "bottom" && (n2 || i2)) {
- i2 = i2 || n2;
- i2.scrollTop = i2.scrollHeight;
- }
- }
- if (t2.show) {
- var i2 = null;
- if (t2.showTarget) {
- var a2 = t2.showTarget;
- if (t2.showTarget === "window") {
- a2 = "body";
- }
- i2 = ue(r2, a2);
- }
- if (t2.show === "top" && (r2 || i2)) {
- i2 = i2 || r2;
- i2.scrollIntoView({ block: "start", behavior: Q.config.scrollBehavior });
- }
- if (t2.show === "bottom" && (n2 || i2)) {
- i2 = i2 || n2;
- i2.scrollIntoView({ block: "end", behavior: Q.config.scrollBehavior });
- }
- }
- }
- function Rr(e2, t2, r2, n2) {
- if (n2 == null) {
- n2 = {};
- }
- if (e2 == null) {
- return n2;
- }
- var i2 = te(e2, t2);
- if (i2) {
- var a2 = i2.trim();
- var o2 = r2;
- if (a2 === "unset") {
- return null;
- }
- if (a2.indexOf("javascript:") === 0) {
- a2 = a2.substr(11);
- o2 = true;
- } else if (a2.indexOf("js:") === 0) {
- a2 = a2.substr(3);
- o2 = true;
- }
- if (a2.indexOf("{") !== 0) {
- a2 = "{" + a2 + "}";
- }
- var s2;
- if (o2) {
- s2 = Tr(e2, function() {
- return Function("return (" + a2 + ")")();
- }, {});
- } else {
- s2 = E(a2);
- }
- for (var l2 in s2) {
- if (s2.hasOwnProperty(l2)) {
- if (n2[l2] == null) {
- n2[l2] = s2[l2];
- }
- }
- }
- }
- return Rr(u(e2), t2, r2, n2);
- }
- function Tr(e2, t2, r2) {
- if (Q.config.allowEval) {
- return t2();
- } else {
- fe(e2, "htmx:evalDisallowedError");
- return r2;
- }
- }
- function Or(e2, t2) {
- return Rr(e2, "hx-vars", true, t2);
- }
- function qr(e2, t2) {
- return Rr(e2, "hx-vals", false, t2);
- }
- function Hr(e2) {
- return le(Or(e2), qr(e2));
- }
- function Lr(t2, r2, n2) {
- if (n2 !== null) {
- try {
- t2.setRequestHeader(r2, n2);
- } catch (e2) {
- t2.setRequestHeader(r2, encodeURIComponent(n2));
- t2.setRequestHeader(r2 + "-URI-AutoEncoded", "true");
- }
- }
- }
- function Ar(t2) {
- if (t2.responseURL && typeof URL !== "undefined") {
- try {
- var e2 = new URL(t2.responseURL);
- return e2.pathname + e2.search;
- } catch (e3) {
- fe(re().body, "htmx:badResponseUrl", { url: t2.responseURL });
- }
- }
- }
- function O(e2, t2) {
- return t2.test(e2.getAllResponseHeaders());
- }
- function Nr(e2, t2, r2) {
- e2 = e2.toLowerCase();
- if (r2) {
- if (r2 instanceof Element || I(r2, "String")) {
- return he(e2, t2, null, null, { targetOverride: p(r2), returnPromise: true });
- } else {
- return he(e2, t2, p(r2.source), r2.event, { handler: r2.handler, headers: r2.headers, values: r2.values, targetOverride: p(r2.target), swapOverride: r2.swap, select: r2.select, returnPromise: true });
- }
- } else {
- return he(e2, t2, null, null, { returnPromise: true });
- }
- }
- function Ir(e2) {
- var t2 = [];
- while (e2) {
- t2.push(e2);
- e2 = e2.parentElement;
- }
- return t2;
- }
- function kr(e2, t2, r2) {
- var n2;
- var i2;
- if (typeof URL === "function") {
- i2 = new URL(t2, document.location.href);
- var a2 = document.location.origin;
- n2 = a2 === i2.origin;
- } else {
- i2 = t2;
- n2 = g(t2, document.location.origin);
- }
- if (Q.config.selfRequestsOnly) {
- if (!n2) {
- return false;
- }
- }
- return ce(e2, "htmx:validateUrl", le({ url: i2, sameHost: n2 }, r2));
- }
- function he(t2, r2, n2, i2, a2, e2) {
- var o2 = null;
- var s2 = null;
- a2 = a2 != null ? a2 : {};
- if (a2.returnPromise && typeof Promise !== "undefined") {
- var l2 = new Promise(function(e3, t3) {
- o2 = e3;
- s2 = t3;
- });
- }
- if (n2 == null) {
- n2 = re().body;
- }
- var M2 = a2.handler || Mr;
- var X2 = a2.select || null;
- if (!se(n2)) {
- ie(o2);
- return l2;
- }
- var u2 = a2.targetOverride || ye(n2);
- if (u2 == null || u2 == pe) {
- fe(n2, "htmx:targetError", { target: te(n2, "hx-target") });
- ie(s2);
- return l2;
- }
- var f2 = ae(n2);
- var c2 = f2.lastButtonClicked;
- if (c2) {
- var h2 = ee(c2, "formaction");
- if (h2 != null) {
- r2 = h2;
- }
- var v2 = ee(c2, "formmethod");
- if (v2 != null) {
- if (v2.toLowerCase() !== "dialog") {
- t2 = v2;
- }
- }
- }
- var d2 = ne(n2, "hx-confirm");
- if (e2 === void 0) {
- var D2 = function(e3) {
- return he(t2, r2, n2, i2, a2, !!e3);
- };
- var U2 = { target: u2, elt: n2, path: r2, verb: t2, triggeringEvent: i2, etc: a2, issueRequest: D2, question: d2 };
- if (ce(n2, "htmx:confirm", U2) === false) {
- ie(o2);
- return l2;
- }
- }
- var g2 = n2;
- var p2 = ne(n2, "hx-sync");
- var m2 = null;
- var x2 = false;
- if (p2) {
- var B2 = p2.split(":");
- var F2 = B2[0].trim();
- if (F2 === "this") {
- g2 = xe(n2, "hx-sync");
- } else {
- g2 = ue(n2, F2);
- }
- p2 = (B2[1] || "drop").trim();
- f2 = ae(g2);
- if (p2 === "drop" && f2.xhr && f2.abortable !== true) {
- ie(o2);
- return l2;
- } else if (p2 === "abort") {
- if (f2.xhr) {
- ie(o2);
- return l2;
- } else {
- x2 = true;
- }
- } else if (p2 === "replace") {
- ce(g2, "htmx:abort");
- } else if (p2.indexOf("queue") === 0) {
- var V2 = p2.split(" ");
- m2 = (V2[1] || "last").trim();
- }
- }
- if (f2.xhr) {
- if (f2.abortable) {
- ce(g2, "htmx:abort");
- } else {
- if (m2 == null) {
- if (i2) {
- var y2 = ae(i2);
- if (y2 && y2.triggerSpec && y2.triggerSpec.queue) {
- m2 = y2.triggerSpec.queue;
- }
- }
- if (m2 == null) {
- m2 = "last";
- }
- }
- if (f2.queuedRequests == null) {
- f2.queuedRequests = [];
- }
- if (m2 === "first" && f2.queuedRequests.length === 0) {
- f2.queuedRequests.push(function() {
- he(t2, r2, n2, i2, a2);
- });
- } else if (m2 === "all") {
- f2.queuedRequests.push(function() {
- he(t2, r2, n2, i2, a2);
- });
- } else if (m2 === "last") {
- f2.queuedRequests = [];
- f2.queuedRequests.push(function() {
- he(t2, r2, n2, i2, a2);
- });
- }
- ie(o2);
- return l2;
- }
- }
- var b2 = new XMLHttpRequest();
- f2.xhr = b2;
- f2.abortable = x2;
- var w2 = function() {
- f2.xhr = null;
- f2.abortable = false;
- if (f2.queuedRequests != null && f2.queuedRequests.length > 0) {
- var e3 = f2.queuedRequests.shift();
- e3();
- }
- };
- var j2 = ne(n2, "hx-prompt");
- if (j2) {
- var S2 = prompt(j2);
- if (S2 === null || !ce(n2, "htmx:prompt", { prompt: S2, target: u2 })) {
- ie(o2);
- w2();
- return l2;
- }
- }
- if (d2 && !e2) {
- if (!confirm(d2)) {
- ie(o2);
- w2();
- return l2;
- }
- }
- var E2 = xr(n2, u2, S2);
- if (t2 !== "get" && !Sr(n2)) {
- E2["Content-Type"] = "application/x-www-form-urlencoded";
- }
- if (a2.headers) {
- E2 = le(E2, a2.headers);
- }
- var _2 = dr(n2, t2);
- var C2 = _2.errors;
- var R2 = _2.values;
- if (a2.values) {
- R2 = le(R2, a2.values);
- }
- var z2 = Hr(n2);
- var $2 = le(R2, z2);
- var T2 = yr($2, n2);
- if (Q.config.getCacheBusterParam && t2 === "get") {
- T2["org.htmx.cache-buster"] = ee(u2, "id") || "true";
- }
- if (r2 == null || r2 === "") {
- r2 = re().location.href;
- }
- var O2 = Rr(n2, "hx-request");
- var W2 = ae(n2).boosted;
- var q2 = Q.config.methodsThatUseUrlParams.indexOf(t2) >= 0;
- var H2 = { boosted: W2, useUrlParams: q2, parameters: T2, unfilteredParameters: $2, headers: E2, target: u2, verb: t2, errors: C2, withCredentials: a2.credentials || O2.credentials || Q.config.withCredentials, timeout: a2.timeout || O2.timeout || Q.config.timeout, path: r2, triggeringEvent: i2 };
- if (!ce(n2, "htmx:configRequest", H2)) {
- ie(o2);
- w2();
- return l2;
- }
- r2 = H2.path;
- t2 = H2.verb;
- E2 = H2.headers;
- T2 = H2.parameters;
- C2 = H2.errors;
- q2 = H2.useUrlParams;
- if (C2 && C2.length > 0) {
- ce(n2, "htmx:validation:halted", H2);
- ie(o2);
- w2();
- return l2;
- }
- var G2 = r2.split("#");
- var J2 = G2[0];
- var L2 = G2[1];
- var A2 = r2;
- if (q2) {
- A2 = J2;
- var Z2 = Object.keys(T2).length !== 0;
- if (Z2) {
- if (A2.indexOf("?") < 0) {
- A2 += "?";
- } else {
- A2 += "&";
- }
- A2 += pr(T2);
- if (L2) {
- A2 += "#" + L2;
- }
- }
- }
- if (!kr(n2, A2, H2)) {
- fe(n2, "htmx:invalidPath", H2);
- ie(s2);
- return l2;
- }
- b2.open(t2.toUpperCase(), A2, true);
- b2.overrideMimeType("text/html");
- b2.withCredentials = H2.withCredentials;
- b2.timeout = H2.timeout;
- if (O2.noHeaders) {
- } else {
- for (var N2 in E2) {
- if (E2.hasOwnProperty(N2)) {
- var K2 = E2[N2];
- Lr(b2, N2, K2);
- }
- }
- }
- var I2 = { xhr: b2, target: u2, requestConfig: H2, etc: a2, boosted: W2, select: X2, pathInfo: { requestPath: r2, finalRequestPath: A2, anchor: L2 } };
- b2.onload = function() {
- try {
- var e3 = Ir(n2);
- I2.pathInfo.responsePath = Ar(b2);
- M2(n2, I2);
- lr(k2, P2);
- ce(n2, "htmx:afterRequest", I2);
- ce(n2, "htmx:afterOnLoad", I2);
- if (!se(n2)) {
- var t3 = null;
- while (e3.length > 0 && t3 == null) {
- var r3 = e3.shift();
- if (se(r3)) {
- t3 = r3;
- }
- }
- if (t3) {
- ce(t3, "htmx:afterRequest", I2);
- ce(t3, "htmx:afterOnLoad", I2);
- }
- }
- ie(o2);
- w2();
- } catch (e4) {
- fe(n2, "htmx:onLoadError", le({ error: e4 }, I2));
- throw e4;
- }
- };
- b2.onerror = function() {
- lr(k2, P2);
- fe(n2, "htmx:afterRequest", I2);
- fe(n2, "htmx:sendError", I2);
- ie(s2);
- w2();
- };
- b2.onabort = function() {
- lr(k2, P2);
- fe(n2, "htmx:afterRequest", I2);
- fe(n2, "htmx:sendAbort", I2);
- ie(s2);
- w2();
- };
- b2.ontimeout = function() {
- lr(k2, P2);
- fe(n2, "htmx:afterRequest", I2);
- fe(n2, "htmx:timeout", I2);
- ie(s2);
- w2();
- };
- if (!ce(n2, "htmx:beforeRequest", I2)) {
- ie(o2);
- w2();
- return l2;
- }
- var k2 = or(n2);
- var P2 = sr(n2);
- oe(["loadstart", "loadend", "progress", "abort"], function(t3) {
- oe([b2, b2.upload], function(e3) {
- e3.addEventListener(t3, function(e4) {
- ce(n2, "htmx:xhr:" + t3, { lengthComputable: e4.lengthComputable, loaded: e4.loaded, total: e4.total });
- });
- });
- });
- ce(n2, "htmx:beforeSend", I2);
- var Y2 = q2 ? null : Er(b2, n2, T2);
- b2.send(Y2);
- return l2;
- }
- function Pr(e2, t2) {
- var r2 = t2.xhr;
- var n2 = null;
- var i2 = null;
- if (O(r2, /HX-Push:/i)) {
- n2 = r2.getResponseHeader("HX-Push");
- i2 = "push";
- } else if (O(r2, /HX-Push-Url:/i)) {
- n2 = r2.getResponseHeader("HX-Push-Url");
- i2 = "push";
- } else if (O(r2, /HX-Replace-Url:/i)) {
- n2 = r2.getResponseHeader("HX-Replace-Url");
- i2 = "replace";
- }
- if (n2) {
- if (n2 === "false") {
- return {};
- } else {
- return { type: i2, path: n2 };
- }
- }
- var a2 = t2.pathInfo.finalRequestPath;
- var o2 = t2.pathInfo.responsePath;
- var s2 = ne(e2, "hx-push-url");
- var l2 = ne(e2, "hx-replace-url");
- var u2 = ae(e2).boosted;
- var f2 = null;
- var c2 = null;
- if (s2) {
- f2 = "push";
- c2 = s2;
- } else if (l2) {
- f2 = "replace";
- c2 = l2;
- } else if (u2) {
- f2 = "push";
- c2 = o2 || a2;
- }
- if (c2) {
- if (c2 === "false") {
- return {};
- }
- if (c2 === "true") {
- c2 = o2 || a2;
- }
- if (t2.pathInfo.anchor && c2.indexOf("#") === -1) {
- c2 = c2 + "#" + t2.pathInfo.anchor;
- }
- return { type: f2, path: c2 };
- } else {
- return {};
- }
- }
- function Mr(l2, u2) {
- var f2 = u2.xhr;
- var c2 = u2.target;
- var e2 = u2.etc;
- var t2 = u2.requestConfig;
- var h2 = u2.select;
- if (!ce(l2, "htmx:beforeOnLoad", u2)) return;
- if (O(f2, /HX-Trigger:/i)) {
- _e(f2, "HX-Trigger", l2);
- }
- if (O(f2, /HX-Location:/i)) {
- er();
- var r2 = f2.getResponseHeader("HX-Location");
- var v2;
- if (r2.indexOf("{") === 0) {
- v2 = E(r2);
- r2 = v2["path"];
- delete v2["path"];
- }
- Nr("GET", r2, v2).then(function() {
- tr(r2);
- });
- return;
- }
- var n2 = O(f2, /HX-Refresh:/i) && "true" === f2.getResponseHeader("HX-Refresh");
- if (O(f2, /HX-Redirect:/i)) {
- location.href = f2.getResponseHeader("HX-Redirect");
- n2 && location.reload();
- return;
- }
- if (n2) {
- location.reload();
- return;
- }
- if (O(f2, /HX-Retarget:/i)) {
- if (f2.getResponseHeader("HX-Retarget") === "this") {
- u2.target = l2;
- } else {
- u2.target = ue(l2, f2.getResponseHeader("HX-Retarget"));
- }
- }
- var d2 = Pr(l2, u2);
- var i2 = f2.status >= 200 && f2.status < 400 && f2.status !== 204;
- var g2 = f2.response;
- var a2 = f2.status >= 400;
- var p2 = Q.config.ignoreTitle;
- var o2 = le({ shouldSwap: i2, serverResponse: g2, isError: a2, ignoreTitle: p2 }, u2);
- if (!ce(c2, "htmx:beforeSwap", o2)) return;
- c2 = o2.target;
- g2 = o2.serverResponse;
- a2 = o2.isError;
- p2 = o2.ignoreTitle;
- u2.target = c2;
- u2.failed = a2;
- u2.successful = !a2;
- if (o2.shouldSwap) {
- if (f2.status === 286) {
- at(l2);
- }
- R(l2, function(e3) {
- g2 = e3.transformResponse(g2, f2, l2);
- });
- if (d2.type) {
- er();
- }
- var s2 = e2.swapOverride;
- if (O(f2, /HX-Reswap:/i)) {
- s2 = f2.getResponseHeader("HX-Reswap");
- }
- var v2 = wr(l2, s2);
- if (v2.hasOwnProperty("ignoreTitle")) {
- p2 = v2.ignoreTitle;
- }
- c2.classList.add(Q.config.swappingClass);
- var m2 = null;
- var x2 = null;
- var y2 = function() {
- try {
- var e3 = document.activeElement;
- var t3 = {};
- try {
- t3 = { elt: e3, start: e3 ? e3.selectionStart : null, end: e3 ? e3.selectionEnd : null };
- } catch (e4) {
- }
- var r3;
- if (h2) {
- r3 = h2;
- }
- if (O(f2, /HX-Reselect:/i)) {
- r3 = f2.getResponseHeader("HX-Reselect");
- }
- if (d2.type) {
- ce(re().body, "htmx:beforeHistoryUpdate", le({ history: d2 }, u2));
- if (d2.type === "push") {
- tr(d2.path);
- ce(re().body, "htmx:pushedIntoHistory", { path: d2.path });
- } else {
- rr(d2.path);
- ce(re().body, "htmx:replacedInHistory", { path: d2.path });
- }
- }
- var n3 = T(c2);
- je(v2.swapStyle, c2, l2, g2, n3, r3);
- if (t3.elt && !se(t3.elt) && ee(t3.elt, "id")) {
- var i3 = document.getElementById(ee(t3.elt, "id"));
- var a3 = { preventScroll: v2.focusScroll !== void 0 ? !v2.focusScroll : !Q.config.defaultFocusScroll };
- if (i3) {
- if (t3.start && i3.setSelectionRange) {
- try {
- i3.setSelectionRange(t3.start, t3.end);
- } catch (e4) {
- }
- }
- i3.focus(a3);
- }
- }
- c2.classList.remove(Q.config.swappingClass);
- oe(n3.elts, function(e4) {
- if (e4.classList) {
- e4.classList.add(Q.config.settlingClass);
- }
- ce(e4, "htmx:afterSwap", u2);
- });
- if (O(f2, /HX-Trigger-After-Swap:/i)) {
- var o3 = l2;
- if (!se(l2)) {
- o3 = re().body;
- }
- _e(f2, "HX-Trigger-After-Swap", o3);
- }
- var s3 = function() {
- oe(n3.tasks, function(e5) {
- e5.call();
- });
- oe(n3.elts, function(e5) {
- if (e5.classList) {
- e5.classList.remove(Q.config.settlingClass);
- }
- ce(e5, "htmx:afterSettle", u2);
- });
- if (u2.pathInfo.anchor) {
- var e4 = re().getElementById(u2.pathInfo.anchor);
- if (e4) {
- e4.scrollIntoView({ block: "start", behavior: "auto" });
- }
- }
- if (n3.title && !p2) {
- var t4 = C("title");
- if (t4) {
- t4.innerHTML = n3.title;
- } else {
- window.document.title = n3.title;
- }
- }
- Cr(n3.elts, v2);
- if (O(f2, /HX-Trigger-After-Settle:/i)) {
- var r4 = l2;
- if (!se(l2)) {
- r4 = re().body;
- }
- _e(f2, "HX-Trigger-After-Settle", r4);
- }
- ie(m2);
- };
- if (v2.settleDelay > 0) {
- setTimeout(s3, v2.settleDelay);
- } else {
- s3();
- }
- } catch (e4) {
- fe(l2, "htmx:swapError", u2);
- ie(x2);
- throw e4;
- }
- };
- var b2 = Q.config.globalViewTransitions;
- if (v2.hasOwnProperty("transition")) {
- b2 = v2.transition;
- }
- if (b2 && ce(l2, "htmx:beforeTransition", u2) && typeof Promise !== "undefined" && document.startViewTransition) {
- var w2 = new Promise(function(e3, t3) {
- m2 = e3;
- x2 = t3;
- });
- var S2 = y2;
- y2 = function() {
- document.startViewTransition(function() {
- S2();
- return w2;
- });
- };
- }
- if (v2.swapDelay > 0) {
- setTimeout(y2, v2.swapDelay);
- } else {
- y2();
- }
- }
- if (a2) {
- fe(l2, "htmx:responseError", le({ error: "Response Status Error Code " + f2.status + " from " + u2.pathInfo.requestPath }, u2));
- }
- }
- var Xr = {};
- function Dr() {
- return { init: function(e2) {
- return null;
- }, onEvent: function(e2, t2) {
- return true;
- }, transformResponse: function(e2, t2, r2) {
- return e2;
- }, isInlineSwap: function(e2) {
- return false;
- }, handleSwap: function(e2, t2, r2, n2) {
- return false;
- }, encodeParameters: function(e2, t2, r2) {
- return null;
- } };
- }
- function Ur(e2, t2) {
- if (t2.init) {
- t2.init(r);
- }
- Xr[e2] = le(Dr(), t2);
- }
- function Br(e2) {
- delete Xr[e2];
- }
- function Fr(e2, r2, n2) {
- if (e2 == void 0) {
- return r2;
- }
- if (r2 == void 0) {
- r2 = [];
- }
- if (n2 == void 0) {
- n2 = [];
- }
- var t2 = te(e2, "hx-ext");
- if (t2) {
- oe(t2.split(","), function(e3) {
- e3 = e3.replace(/ /g, "");
- if (e3.slice(0, 7) == "ignore:") {
- n2.push(e3.slice(7));
- return;
- }
- if (n2.indexOf(e3) < 0) {
- var t3 = Xr[e3];
- if (t3 && r2.indexOf(t3) < 0) {
- r2.push(t3);
- }
- }
- });
- }
- return Fr(u(e2), r2, n2);
- }
- var Vr = false;
- re().addEventListener("DOMContentLoaded", function() {
- Vr = true;
- });
- function jr(e2) {
- if (Vr || re().readyState === "complete") {
- e2();
- } else {
- re().addEventListener("DOMContentLoaded", e2);
- }
- }
- function _r() {
- if (Q.config.includeIndicatorStyles !== false) {
- re().head.insertAdjacentHTML("beforeend", "");
- }
- }
- function zr() {
- var e2 = re().querySelector('meta[name="htmx-config"]');
- if (e2) {
- return E(e2.content);
- } else {
- return null;
- }
- }
- function $r() {
- var e2 = zr();
- if (e2) {
- Q.config = le(Q.config, e2);
- }
- }
- jr(function() {
- $r();
- _r();
- var e2 = re().body;
- zt(e2);
- var t2 = re().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");
- e2.addEventListener("htmx:abort", function(e3) {
- var t3 = e3.target;
- var r3 = ae(t3);
- if (r3 && r3.xhr) {
- r3.xhr.abort();
- }
- });
- const r2 = window.onpopstate ? window.onpopstate.bind(window) : null;
- window.onpopstate = function(e3) {
- if (e3.state && e3.state.htmx) {
- ar();
- oe(t2, function(e4) {
- ce(e4, "htmx:restored", { document: re(), triggerEvent: ce });
- });
- } else {
- if (r2) {
- r2(e3);
- }
- }
- };
- setTimeout(function() {
- ce(e2, "htmx:load", {});
- e2 = null;
- }, 0);
- });
- return Q;
- }();
- });
- }
- });
-
- // script/index.ts
- var import_htmx = __toESM(require_htmx_min());
-})();
diff --git a/assets/styles.css b/assets/styles.css
deleted file mode 100644
index 47735b6..0000000
--- a/assets/styles.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.static{position:static}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.right-0{right:0}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mt-10{margin-top:2.5rem}.block{display:block}.flex{display:flex}.table{display:table}.hidden{display:none}.h-16{height:4rem}.h-8{height:2rem}.w-auto{width:auto}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-96,.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-3{gap:.75rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.overflow-x-auto{overflow-x:auto}.whitespace-nowrap{white-space:nowrap}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-5{padding:1.25rem}.p-3{padding:.75rem}.p-1{padding:.25rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pr-2{padding-right:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tracking-tight{letter-spacing:-.025em}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-blue-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity))}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}@media (min-width:640px){.sm\:static{position:static}.sm\:inset-auto{inset:auto}.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:items-stretch{align-items:stretch}.sm\:justify-start{justify-content:flex-start}.sm\:pr-0{padding-right:0}}.rtl\:text-right:where([dir=rtl],[dir=rtl] *){text-align:right}@media (prefers-color-scheme:dark){.dark\:border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.dark\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.dark\:bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.dark\:bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.dark\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity))}.dark\:placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity))}.dark\:hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.dark\:hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:focus\:ring-blue-800:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity))}}
\ No newline at end of file
diff --git a/cod4watcher b/cod4watcher
new file mode 100755
index 0000000..a28e5ac
Binary files /dev/null and b/cod4watcher differ
diff --git a/go.mod b/go.mod
index 0139fc1..1aad9a0 100644
--- a/go.mod
+++ b/go.mod
@@ -5,6 +5,7 @@ go 1.22.2
require github.com/a-h/templ v0.2.707
require (
+ github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
diff --git a/go.sum b/go.sum
index c07bbdc..ad9da2b 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,7 @@
github.com/a-h/templ v0.2.707 h1:T1Gkd2ugbRglZ9rYw/VBchWOSZVKmetDbBkm4YubM7U=
github.com/a-h/templ v0.2.707/go.mod h1:5cqsugkq9IerRNucNsI4DEamdHPsoGMQy99DzydLhM8=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/go-chi/chi v1.5.5 h1:vOB/HbEMt9QqBqErz07QehcOKHaWFtuj87tTDVz2qXE=
diff --git a/main.go b/main.go
index 5a4ce30..bb076ea 100644
--- a/main.go
+++ b/main.go
@@ -6,6 +6,7 @@ import (
"log/slog"
"net/http"
"os"
+ "time"
"gitea.henriburau.de/haw-lan/cod4watcher/models"
"gitea.henriburau.de/haw-lan/cod4watcher/routes"
@@ -29,9 +30,18 @@ func main() {
cs := services.NewCaptureService(persistence)
server := routes.NewServer(cs)
+ doneChan := make(chan bool)
+ scanner, err := services.NewScanner(persistence, time.Second*10, doneChan)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ go scanner.Scan()
+
router.Handle("/*", public())
router.Get("/health", routes.Make(server.HandleHealth))
router.Get("/captures/{captureID}", routes.Make(server.HandleCapture))
+ router.Delete("/captures/{captureID}", routes.Make(server.HandleCaptureDelete))
router.Get("/new/capture", routes.Make(server.HandleCaptureForm))
router.Post("/new/capture", routes.Make(server.HandleCaptureCreate))
router.Get("/", routes.Make(server.HandleHome))
diff --git a/models/capture.go b/models/capture.go
index a30db4b..ff0c47d 100644
--- a/models/capture.go
+++ b/models/capture.go
@@ -11,27 +11,26 @@ import (
type MapScoreList []MapScore
type Capture struct {
- ID int64 `bun:",pk,autoincrement"`
- Host string
- Port string
- Name string
- Active bool
- Start time.Time
+ ID int64 `bun:",pk,autoincrement"`
+ Host string `bun:",notnull"`
+ Port string `bun:",notnull"`
+ Name string `bun:",unique,notnull"`
+ Active bool `bun:",notnull"`
+ Start time.Time `bun:",notnull,default:current_timestamp"`
MapScores MapScoreList `bun:"rel:has-many,join:id=capture_id"`
}
type MapScore struct {
- ID int64 `bun:",pk,autoincrement"`
- CaptureID int64 `bun:"capture_id"`
- StartTime time.Time
- Map string
- ScoreList []Score `bun:"rel:has-many,join:id=mapscore_id"`
+ ID int64 `bun:",pk,autoincrement"`
+ CaptureID int64 `bun:"capture_id"`
+ StartTime time.Time `bun:",notnull"`
+ Map string `bun:",notnull"`
+ ScoreList []Score `bun:"rel:has-many,join:id=mapscore_id"`
}
type Score struct {
- ID int64 `bun:",pk,autoincrement"`
- MapScoreID int64 `bun:"mapscore_id"`
- Name string
+ Name string `bun:",pk,notnull"`
+ MapScoreID int64 `bun:"mapscore_id,pk,notnull"`
Score int
Ping int
}
@@ -57,7 +56,7 @@ func (msl MapScoreList) BuildTable() *ResultTable {
Header: []ResultTableHeader{{Title: "Name"}, {Title: "Total"}},
}
- userMapRows := make(map[string]*ResultTableRow)
+ userMapRows := make(map[string]int)
for mapIndex, mapScore := range msl {
rt.Header = append(rt.Header, ResultTableHeader{
@@ -73,12 +72,12 @@ func (msl MapScoreList) BuildTable() *ResultTable {
Individual: make([]int, len(msl)),
})
- userMapRows[score.Name] = &rt.Rows[len(rt.Rows)-1]
+ userMapRows[score.Name] = len(rt.Rows) - 1
}
row := userMapRows[score.Name]
- row.Total = row.Total + score.Score
- row.Individual[mapIndex] = score.Score
+ rt.Rows[row].Total = rt.Rows[row].Total + score.Score
+ rt.Rows[row].Individual[mapIndex] = score.Score
}
}
}
diff --git a/models/persistence.go b/models/persistence.go
index 806f3c7..08159bc 100644
--- a/models/persistence.go
+++ b/models/persistence.go
@@ -13,6 +13,13 @@ import (
type Persistence interface {
CreateCapture(context.Context, *Capture) error
GetCaptures(context.Context) ([]Capture, error)
+ GetCapturesByID(context.Context, int64) (*Capture, error)
+ DeleteCapture(context.Context, int64) error
+
+ GetRecentMapScore(context.Context, int64) (*MapScore, error)
+ CreateMapScore(context.Context, *MapScore) error
+
+ CreateOrUpdateScores(context.Context, []Score) error
}
type SQLitePersistence struct {
@@ -51,8 +58,53 @@ func (s *SQLitePersistence) GetCaptures(ctx context.Context) ([]Capture, error)
return captures, nil
}
+func (s *SQLitePersistence) GetCapturesByID(ctx context.Context, id int64) (*Capture, error) {
+ capture := Capture{
+ ID: id,
+ }
+
+ err := s.db.NewSelect().Model(&capture).WherePK().Relation("MapScores").Relation("MapScores.ScoreList").Scan(ctx)
+
+ return &capture, err
+}
+
+func (s *SQLitePersistence) DeleteCapture(ctx context.Context, id int64) error {
+ capture := Capture{
+ ID: id,
+ }
+
+ _, err := s.db.NewDelete().Model(&capture).WherePK().Exec(ctx)
+ return err
+}
+
func (s *SQLitePersistence) CreateCapture(ctx context.Context, capture *Capture) error {
_, err := s.db.NewInsert().Model(capture).Exec(ctx)
return err
}
+
+func (s *SQLitePersistence) GetRecentMapScore(ctx context.Context, captureid int64) (*MapScore, error) {
+ var scores []MapScore
+
+ err := s.db.NewSelect().Model(&scores).Where("capture_id = ?", captureid).Limit(1).Order("start_time DESC").Scan(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ if len(scores) <= 0 {
+ return nil, nil
+ }
+
+ return &scores[0], nil
+}
+
+func (s *SQLitePersistence) CreateMapScore(ctx context.Context, mapscore *MapScore) error {
+ _, err := s.db.NewInsert().Model(mapscore).Exec(ctx)
+
+ return err
+}
+
+func (s *SQLitePersistence) CreateOrUpdateScores(ctx context.Context, scores []Score) error {
+ _, err := s.db.NewInsert().Model(&scores).On("CONFLICT (name, mapscore_id) DO UPDATE").Exec(ctx)
+ return err
+}
diff --git a/routes/capture.go b/routes/capture.go
index fa7b404..50cfe2f 100644
--- a/routes/capture.go
+++ b/routes/capture.go
@@ -3,6 +3,7 @@ package routes
import (
"net/http"
"strconv"
+ "time"
"gitea.henriburau.de/haw-lan/cod4watcher/models"
"gitea.henriburau.de/haw-lan/cod4watcher/views/capture"
@@ -11,12 +12,12 @@ import (
func (s *Server) HandleCapture(w http.ResponseWriter, r *http.Request) error {
captureString := chi.URLParam(r, "captureID")
- captureID, err := strconv.Atoi(captureString)
+ captureID, err := strconv.ParseInt(captureString, 10, 64)
if err != nil {
return err
}
- foundCapture, err := s.cs.GetCaptureById(captureID)
+ foundCapture, err := s.cs.GetCaptureById(r.Context(), captureID)
if err != nil {
return err
}
@@ -24,6 +25,21 @@ func (s *Server) HandleCapture(w http.ResponseWriter, r *http.Request) error {
return Render(w, r, capture.Capture(foundCapture))
}
+func (s *Server) HandleCaptureDelete(w http.ResponseWriter, r *http.Request) error {
+ captureString := chi.URLParam(r, "captureID")
+ captureID, err := strconv.ParseInt(captureString, 10, 64)
+ if err != nil {
+ return err
+ }
+
+ err = s.cs.DeleteCapture(r.Context(), captureID)
+ if err != nil {
+ return err
+ }
+
+ return hxRedirect(w, r, "/")
+}
+
func (s *Server) HandleCaptureForm(w http.ResponseWriter, r *http.Request) error {
return Render(w, r, capture.CaptureForm(capture.CaptureFormValues{}, map[string]string{}))
}
@@ -34,14 +50,23 @@ func (s *Server) HandleCaptureCreate(w http.ResponseWriter, r *http.Request) err
return Render(w, r, capture.CaptureForm(formValues, errors))
}
- capture := &models.Capture{
+ newCapture := &models.Capture{
Host: formValues.Host,
Port: formValues.Port,
Name: formValues.Name,
Active: true,
+ Start: time.Now(),
}
- err := s.cs.CreateCapture(r.Context(), capture)
+ _, err := s.cs.GetServerStatus(r.Context(), newCapture)
+ if err != nil {
+ errors["host"] = err.Error()
+ errors["port"] = err.Error()
+
+ return Render(w, r, capture.CaptureForm(formValues, errors))
+ }
+
+ err = s.cs.CreateCapture(r.Context(), newCapture)
if err != nil {
return err
}
diff --git a/services/capture.go b/services/capture.go
index 9f691bc..6c4e879 100644
--- a/services/capture.go
+++ b/services/capture.go
@@ -11,11 +11,6 @@ type CaptureService struct {
p models.Persistence
}
-var mockCaptures = []models.Capture{
- {ID: 1, Host: "80.57.28.137", Port: "28960", Active: true, Name: "Gungame HAW-LAN 11", Start: time.Now().Add(-1 * time.Hour)},
- {ID: 1, Host: "80.57.28.137", Port: "28960", Active: true, Name: "Gungame HAW-LAN 12", Start: time.Now().Add(-5 * time.Minute)},
-}
-
func NewCaptureService(persistence models.Persistence) *CaptureService {
return &CaptureService{
p: persistence,
@@ -26,6 +21,10 @@ func (cs *CaptureService) CreateCapture(ctx context.Context, capture *models.Cap
return cs.p.CreateCapture(ctx, capture)
}
+func (cs *CaptureService) DeleteCapture(ctx context.Context, id int64) error {
+ return cs.p.DeleteCapture(ctx, id)
+}
+
func (cs *CaptureService) GetActiveCapures(ctx context.Context) ([]models.Capture, error) {
captures, err := cs.p.GetCaptures(ctx)
if err != nil {
@@ -42,26 +41,20 @@ func (cs *CaptureService) GetActiveCapures(ctx context.Context) ([]models.Captur
return result, nil
}
-func (cs *CaptureService) GetCaptureById(id int) (*models.Capture, error) {
- capture := mockCaptures[0]
+func (cs *CaptureService) GetServerStatus(ctx context.Context, capture *models.Capture) (*models.CoD4ServerStatus, error) {
server, err := models.NewCOD4ServerStatus(capture.Host, capture.Port, time.Second)
if err != nil {
return nil, err
}
- status, err := server.GetServerStatus()
+ return server.GetServerStatus()
+}
+
+func (cs *CaptureService) GetCaptureById(ctx context.Context, id int64) (*models.Capture, error) {
+ capture, err := cs.p.GetCapturesByID(ctx, id)
if err != nil {
return nil, err
}
- capture.MapScores = []models.MapScore{
- {
- ID: 0,
- StartTime: status.MapStartTime,
- Map: status.MapName,
- ScoreList: status.Score,
- },
- }
-
- return &capture, nil
+ return capture, nil
}
diff --git a/services/scanner.go b/services/scanner.go
new file mode 100644
index 0000000..0a96b47
--- /dev/null
+++ b/services/scanner.go
@@ -0,0 +1,97 @@
+package services
+
+import (
+ "context"
+ "log/slog"
+ "time"
+
+ "gitea.henriburau.de/haw-lan/cod4watcher/models"
+)
+
+type Scanner struct {
+ p models.Persistence
+ done chan bool
+ interval time.Duration
+}
+
+func NewScanner(p models.Persistence, interval time.Duration, done chan bool) (*Scanner, error) {
+ return &Scanner{
+ p, done, interval,
+ }, nil
+}
+
+func (s *Scanner) Scan() {
+ ticker := time.NewTicker(s.interval)
+ for {
+ select {
+ case <-s.done:
+ return
+ case <-ticker.C:
+ ctx := context.Background()
+ slog.Info("starting update")
+
+ captures, err := s.p.GetCaptures(ctx)
+ if err != nil {
+ slog.Error("cannot get captures", "err", err)
+ continue
+ }
+
+ for _, capture := range captures {
+ if capture.Active {
+ err := s.fetchInformation(ctx, capture)
+ if err != nil {
+ slog.Error("failed to update captures", "err", err)
+ continue
+ }
+ }
+ }
+
+ }
+ }
+
+}
+
+func (s *Scanner) fetchInformation(ctx context.Context, capture models.Capture) error {
+ server, err := models.NewCOD4ServerStatus(capture.Host, capture.Port, time.Second)
+ if err != nil {
+ return err
+ }
+
+ status, err := server.GetServerStatus()
+ if err != nil {
+ return err
+ }
+
+ slog.Info("fetched data", "host", capture.Host, "map", status.MapName)
+
+ recentMap, err := s.p.GetRecentMapScore(ctx, capture.ID)
+ if err != nil {
+ return err
+ }
+
+ if recentMap == nil || recentMap.StartTime.Before(status.MapStartTime) {
+ newMap := models.MapScore{
+ CaptureID: capture.ID,
+ StartTime: status.MapStartTime,
+ Map: status.MapName,
+ }
+
+ err := s.p.CreateMapScore(ctx, &newMap)
+ if err != nil {
+ return err
+ }
+
+ recentMap, err = s.p.GetRecentMapScore(ctx, capture.ID)
+ if err != nil {
+ return err
+ }
+ }
+
+ var scores []models.Score
+ for _, score := range status.Score {
+ score.MapScoreID = recentMap.ID
+ scores = append(scores, score)
+ }
+
+ return s.p.CreateOrUpdateScores(ctx, scores)
+}
diff --git a/tmp/bin/main b/tmp/bin/main
new file mode 100755
index 0000000..ad87fa9
Binary files /dev/null and b/tmp/bin/main differ
diff --git a/views/capture/capture_form_templ.go b/views/capture/capture_form_templ.go
index cab5598..ff1ee37 100644
--- a/views/capture/capture_form_templ.go
+++ b/views/capture/capture_form_templ.go
@@ -38,7 +38,7 @@ func CaptureForm(formValues CaptureFormValues, errors map[string]string) templ.C
templ_7745c5c3_Buffer = templ.GetBuffer()
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 4)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/views/capture/capture_form_templ.txt b/views/capture/capture_form_templ.txt
new file mode 100644
index 0000000..fdb5d1a
--- /dev/null
+++ b/views/capture/capture_form_templ.txt
@@ -0,0 +1,4 @@
+
diff --git a/views/capture/capture_templ.go b/views/capture/capture_templ.go
index 812e5ec..9896812 100644
--- a/views/capture/capture_templ.go
+++ b/views/capture/capture_templ.go
@@ -33,7 +33,7 @@ func Capture(capture *models.Capture) templ.Component {
templ_7745c5c3_Buffer = templ.GetBuffer()
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 1)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -46,7 +46,7 @@ func Capture(capture *models.Capture) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 2)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -59,7 +59,7 @@ func Capture(capture *models.Capture) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(":")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 3)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -72,7 +72,7 @@ func Capture(capture *models.Capture) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 4)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -80,7 +80,7 @@ func Capture(capture *models.Capture) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 5)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/views/capture/capture_templ.txt b/views/capture/capture_templ.txt
new file mode 100644
index 0000000..e526476
--- /dev/null
+++ b/views/capture/capture_templ.txt
@@ -0,0 +1,5 @@
+
diff --git a/views/components/capture_card.templ b/views/components/capture_card.templ
index 2fada88..0a3a576 100644
--- a/views/components/capture_card.templ
+++ b/views/components/capture_card.templ
@@ -5,9 +5,11 @@ import "github.com/mergestat/timediff"
import "fmt"
templ CaptureCard(capture models.Capture) {
-
- { capture.Name }
+
}
diff --git a/views/components/capture_card_templ.go b/views/components/capture_card_templ.go
index d3ec73a..c0dff7a 100644
--- a/views/components/capture_card_templ.go
+++ b/views/components/capture_card_templ.go
@@ -27,7 +27,7 @@ func CaptureCard(capture models.Capture) templ.Component {
templ_7745c5c3_Var1 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 2)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var3 string
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(capture.Name)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views/components/capture_card.templ`, Line: 9, Col: 97}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views/components/capture_card.templ`, Line: 10, Col: 98}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 3)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var4 string
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(timediff.TimeDiff(capture.Start))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views/components/capture_card.templ`, Line: 10, Col: 92}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views/components/capture_card.templ`, Line: 12, Col: 92}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 4)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var5 string
+ templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("/captures/%d", capture.ID))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views/components/capture_card.templ`, Line: 13, Col: 75}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 5)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/views/components/capture_card_templ.txt b/views/components/capture_card_templ.txt
new file mode 100644
index 0000000..9b91382
--- /dev/null
+++ b/views/components/capture_card_templ.txt
@@ -0,0 +1,5 @@
+
diff --git a/views/components/capture_table_templ.go b/views/components/capture_table_templ.go
index 01c525a..4a3f53e 100644
--- a/views/components/capture_table_templ.go
+++ b/views/components/capture_table_templ.go
@@ -26,12 +26,12 @@ func CaptureTable(table models.ResultTable) templ.Component {
templ_7745c5c3_Var1 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 1)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
for _, header := range table.Header {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 2)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -44,7 +44,7 @@ func CaptureTable(table models.ResultTable) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 3)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -57,17 +57,17 @@ func CaptureTable(table models.ResultTable) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" | ")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 4)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 5)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
for _, row := range table.Rows {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 6)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -80,7 +80,7 @@ func CaptureTable(table models.ResultTable) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" | ")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 7)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -93,12 +93,12 @@ func CaptureTable(table models.ResultTable) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" | ")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 8)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
for _, score := range row.Individual {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 9)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -111,17 +111,17 @@ func CaptureTable(table models.ResultTable) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" | ")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 10)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 11)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 12)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/views/components/capture_table_templ.txt b/views/components/capture_table_templ.txt
new file mode 100644
index 0000000..ce1dfa0
--- /dev/null
+++ b/views/components/capture_table_templ.txt
@@ -0,0 +1,12 @@
+
diff --git a/views/components/input_templ.go b/views/components/input_templ.go
index 199e951..8ab0d22 100644
--- a/views/components/input_templ.go
+++ b/views/components/input_templ.go
@@ -30,7 +30,7 @@ func Input(props InputProps) templ.Component {
templ_7745c5c3_Var1 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 5)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
if props.Error != "" {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 6)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -100,7 +100,7 @@ func Input(props InputProps) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 7)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/views/components/input_templ.txt b/views/components/input_templ.txt
new file mode 100644
index 0000000..4cd2fdd
--- /dev/null
+++ b/views/components/input_templ.txt
@@ -0,0 +1,7 @@
+
+
+
diff --git a/views/components/navbar_templ.go b/views/components/navbar_templ.go
index 24b0250..b5b8350 100644
--- a/views/components/navbar_templ.go
+++ b/views/components/navbar_templ.go
@@ -23,7 +23,7 @@ func Nagivation() templ.Component {
templ_7745c5c3_Var1 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 1)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/views/components/navbar_templ.txt b/views/components/navbar_templ.txt
new file mode 100644
index 0000000..cd25273
--- /dev/null
+++ b/views/components/navbar_templ.txt
@@ -0,0 +1 @@
+
diff --git a/views/layouts/base_templ.go b/views/layouts/base_templ.go
index 0ba53c9..a405cff 100644
--- a/views/layouts/base_templ.go
+++ b/views/layouts/base_templ.go
@@ -25,7 +25,7 @@ func Base() templ.Component {
templ_7745c5c3_Var1 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("CoD 4 Turnier-Tracker")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 1)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -33,7 +33,7 @@ func Base() templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 2)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -41,7 +41,7 @@ func Base() templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ templ_7745c5c3_Err = templ.WriteWatchModeString(templ_7745c5c3_Buffer, 3)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/views/layouts/base_templ.txt b/views/layouts/base_templ.txt
new file mode 100644
index 0000000..42256bd
--- /dev/null
+++ b/views/layouts/base_templ.txt
@@ -0,0 +1,3 @@
+CoD 4 Turnier-Tracker
+
+