From 5acd554a5cbf4568e91f877f3e9869d6f714e6a4 Mon Sep 17 00:00:00 2001 From: carson Date: Sun, 15 Nov 2020 17:54:54 -0700 Subject: [PATCH] Two-fer: * Implement `hx-vals` which is a JSON-only (and therefore safer) version of `hx-vars` * Port all internal evals to use `Function` instead May fix https://github.com/bigskysoftware/htmx/issues/213 --- dist/htmx.js | 99 +++++++++++++++++++++++++++++-------- dist/htmx.min.js | 2 +- dist/htmx.min.js.gz | Bin 8963 -> 9242 bytes src/htmx.js | 35 ++++++++++--- test/attributes/hx-vals.js | 87 ++++++++++++++++++++++++++++++++ test/attributes/hx-vars.js | 2 +- test/index.html | 1 + 7 files changed, 197 insertions(+), 29 deletions(-) create mode 100644 test/attributes/hx-vals.js diff --git a/dist/htmx.js b/dist/htmx.js index 50f2ab42..e4c290d0 100644 --- a/dist/htmx.js +++ b/dist/htmx.js @@ -161,6 +161,8 @@ return (function () { case "td": case "th": return parseHTML("" + resp + "
", 3); + case "script": + return parseHTML("
" + resp + "
", 1); default: return parseHTML(resp, 0); } @@ -610,7 +612,19 @@ return (function () { } } + var TITLE_FINDER = /([\s\S]+?)<\/title>/im; + function findTitle(content) { + var result = TITLE_FINDER.exec(content); + if (result) { + return result[1]; + } + } + function selectAndSwap(swapStyle, target, elt, responseText, settleInfo) { + var title = findTitle(responseText); + if(title) { + window.document.title = title; + } var fragment = makeFragment(responseText); if (fragment) { handleOutOfBandSwaps(fragment, settleInfo); @@ -686,7 +700,7 @@ return (function () { if (tokens[0] === '[') { tokens.shift(); var bracketCount = 1; - var conditionalSource = "(function(" + paramName + "){ return ("; + var conditionalSource = " return (function(" + paramName + "){ return ("; var last = null; while (tokens.length > 0) { var token = tokens[0]; @@ -699,7 +713,7 @@ return (function () { tokens.shift(); conditionalSource += ")})"; try { - var conditionFunction = eval(conditionalSource); + var conditionFunction = Function(conditionalSource)(); conditionFunction.source = conditionalSource; return conditionFunction; } catch (e) { @@ -993,9 +1007,11 @@ return (function () { elt.addEventListener(getTriggerSpecs(elt)[0].trigger, function (evt) { var headers = getHeaders(elt, webSocketSourceElt, null, elt); var results = getInputValues(elt, 'post'); - var rawParameters = results.values; var errors = results.errors; - var filteredParameters = filterValues(rawParameters, elt); + var rawParameters = results.values; + var expressionVars = getHXVarsForElement(elt); + var allParameters = mergeObjects(rawParameters, expressionVars); + var filteredParameters = filterValues(allParameters, elt); filteredParameters['HEADERS'] = headers; if (errors && errors.length > 0) { triggerEvent(elt, 'htmx:validation:halted', errors); @@ -1165,9 +1181,14 @@ return (function () { }); } + function isBoosted() { + return document.querySelector("[hx-boost], [data-hx-boost]"); + } + function findElementsToProcess(elt) { if (elt.querySelectorAll) { - var results = elt.querySelectorAll(VERB_SELECTOR + ", a, form, [hx-sse], [data-hx-sse], [hx-ws]," + + var boostedElts = isBoosted() ? ", a, form" : ""; + var results = elt.querySelectorAll(VERB_SELECTOR + boostedElts + ", [hx-sse], [data-hx-sse], [hx-ws]," + " [data-hx-ws]"); return results; } else { @@ -1698,22 +1719,41 @@ return (function () { } } - function addExpressionVars(elt, rawParameters) { - if (elt == null) { - return; + function getValuesForElement(elt, attr, strToValues, expressionVars) { + if (expressionVars == null) { + expressionVars = {}; } - var attributeValue = getAttributeValue(elt, "hx-vars"); + if (elt == null) { + return expressionVars; + } + var attributeValue = getAttributeValue(elt, attr); if (attributeValue) { - var varsValues = eval("({" + attributeValue + "})"); + var str = attributeValue.trim(); + if (str.indexOf('{') !== 0) { + str = "{" + str + "}"; + } + var varsValues = strToValues(str); for (var key in varsValues) { if (varsValues.hasOwnProperty(key)) { - if (rawParameters[key] == null) { - rawParameters[key] = varsValues[key]; + if (expressionVars[key] == null) { + expressionVars[key] = varsValues[key]; } } } } - addExpressionVars(parentElt(elt), rawParameters); + return getValuesForElement(parentElt(elt), attr, strToValues, expressionVars); + } + + function getHXVarsForElement(elt, expressionVars) { + return getValuesForElement(elt, "hx-vars", function(valueStr){ + return Function("return (" + valueStr + ")")() + }, expressionVars); + } + + function getHXValsForElement(elt, expressionVars) { + return getValuesForElement(elt, "hx-vars", function(valueStr){ + return JSON.parse(expressionVars); + }, expressionVars); } function safelySetHeaderValue(xhr, header, headerValue) { @@ -1745,6 +1785,10 @@ return (function () { } function issueAjaxRequest(elt, verb, path, eventTarget, triggeringEvent) { + if (!bodyContains(elt)) { + console.log("Body does not contain", elt); + return; // do not issue requests for elements removed from the DOM + } var target = getTarget(elt); if (target == null) { triggerErrorEvent(elt, 'htmx:targetError', {target: getAttributeValue(elt, "hx-target")}); @@ -1783,10 +1827,11 @@ return (function () { var headers = getHeaders(elt, target, promptResponse, eventTarget); var results = getInputValues(elt, verb); - var rawParameters = results.values; var errors = results.errors; - addExpressionVars(elt, rawParameters); - var filteredParameters = filterValues(rawParameters, elt); + var rawParameters = results.values; + var expressionVars = getHXVarsForElement(elt); + var allParameters = mergeObjects(rawParameters, expressionVars); + var filteredParameters = filterValues(allParameters, elt); if (verb !== 'get' && getClosestAttributeValue(elt, "hx-encoding") == null) { headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; @@ -1799,7 +1844,7 @@ return (function () { var requestConfig = { parameters: filteredParameters, - unfilteredParameters:rawParameters, + unfilteredParameters: allParameters, headers:headers, target:target, verb:verb, @@ -1863,7 +1908,19 @@ return (function () { } if (hasHeader(xhr,/HX-Push:/i)) { - var pushedUrl = this.getResponseHeader("HX-Push"); + var pushedUrl = xhr.getResponseHeader("HX-Push"); + } + + if (hasHeader(xhr, /HX-Redirect:/i)) { + window.location.href = xhr.getResponseHeader("HX-Redirect"); + return; + } + + if (hasHeader(xhr,/HX-Refresh:/i)) { + if ("true" === xhr.getResponseHeader("HX-Refresh")) { + location.reload(); + return; + } } var shouldSaveHistory = shouldPush(elt) || pushedUrl; @@ -1876,9 +1933,9 @@ return (function () { if (this.status !== 204) { if (!triggerEvent(target, 'htmx:beforeSwap', eventDetail)) return; - var resp = this.response; + var serverResponse = this.response; withExtensions(elt, function(extension){ - resp = extension.transformResponse(resp, xhr, elt); + serverResponse = extension.transformResponse(serverResponse, xhr, elt); }); // Save current page @@ -1900,7 +1957,7 @@ return (function () { }; var settleInfo = makeSettleInfo(target); - selectAndSwap(swapSpec.swapStyle, target, elt, resp, settleInfo); + selectAndSwap(swapSpec.swapStyle, target, elt, serverResponse, settleInfo); if (selectionInfo.elt && !bodyContains(selectionInfo.elt) && diff --git a/dist/htmx.min.js b/dist/htmx.min.js index cedac8ee..2f532960 100644 --- a/dist/htmx.min.js +++ b/dist/htmx.min.js @@ -1 +1 @@ -(function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else{e.htmx=t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var L={onLoad:x,process:We,on:F,off:P,trigger:Ke,find:w,findAll:S,closest:I,remove:E,addClass:C,removeClass:A,toggleClass:M,takeClass:D,defineExtension:Dt,removeExtension:It,logAll:b,logger:null,config:{historyEnabled:true,historyCacheSize:10,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:100,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",attributesToSettle:["class","style","width","height"]},parseInterval:f,_:e,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){return new WebSocket(e,[])}};var t=["get","post","put","delete","patch"];var r=t.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function f(e){if(e==null||e==="null"||e==="false"||e===""){return null}else if(e.lastIndexOf("ms")===e.length-2){return parseFloat(e.substr(0,e.length-2))}else if(e.lastIndexOf("s")===e.length-1){return parseFloat(e.substr(0,e.length-1))*1e3}else{return parseFloat(e)}}function l(e,t){return e.getAttribute&&e.getAttribute(t)}function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function T(e,t){return l(e,t)||l(e,"data-"+t)}function a(e){return e.parentElement}function O(){return document}function c(e,t){if(t(e)){return e}else if(a(e)){return c(a(e),t)}else{return null}}function q(e,t){var r=null;c(e,function(e){return r=T(e,t)});return r}function h(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function n(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function i(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=O().createDocumentFragment()}return i}function u(e){var t=n(e);switch(t){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return i("<table>"+e+"</table>",1);case"col":return i("<table><colgroup>"+e+"</colgroup></table>",2);case"tr":return i("<table><tbody>"+e+"</tbody></table>",2);case"td":case"th":return i("<table><tbody><tr>"+e+"</tr></tbody></table>",3);default:return i(e,0)}}function s(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function v(e){return s(e,"Function")}function d(e){return s(e,"Object")}function R(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function g(e){var t=[];if(e){for(var r=0;r<e.length;r++){t.push(e[r])}}return t}function N(e,t){if(e){for(var r=0;r<e.length;r++){t(e[r])}}}function m(e){var t=e.getBoundingClientRect();var r=t.top;var n=t.bottom;return r<window.innerHeight&&n>=0}function H(e){return O().body.contains(e)}function p(e){return e.trim().split(/\s+/)}function k(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function y(e){try{return JSON.parse(e)}catch(e){Ye(e);return null}}function e(e){return eval(e)}function x(t){var e=L.on("htmx:load",function(e){t(e.detail.elt)});return e}function b(){L.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function w(e,t){if(t){return e.querySelector(t)}else{return O().body.querySelector(e)}}function S(e,t){if(t){return e.querySelectorAll(t)}else{return O().body.querySelectorAll(e)}}function E(e,t){if(t){setTimeout(function(){E(e)},t)}else{e.parentElement.removeChild(e)}}function C(e,t,r){if(r){setTimeout(function(){C(e,t)},r)}else{e.classList.add(t)}}function A(e,t,r){if(r){setTimeout(function(){A(e,t)},r)}else{e.classList.remove(t)}}function M(e,t){e.classList.toggle(t)}function D(e,t){N(e.parentElement.children,function(e){A(e,t)});C(e,t)}function I(e,t){do{if(e==null||h(e,t))return e}while(e=e&&a(e))}function X(e,t,r){if(v(t)){return{target:O().body,event:e,listener:t}}else{return{target:e,event:t,listener:r}}}function F(t,r,n){Ft(function(){var e=X(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=v(r);return e?r:n}function P(t,r,n){Ft(function(){var e=X(t,r,n);e.target.removeEventListener(e.event,e.listener)});return v(r)?r:n}function U(e){var t=c(e,function(e){return T(e,"hx-target")!==null});if(t){var r=T(t,"hx-target");if(r==="this"){return t}else if(r.indexOf("closest ")===0){return I(e,r.substr(8))}else if(r.indexOf("find ")===0){return w(e,r.substr(5))}else{return O().querySelector(r)}}else{var n=R(e);if(n.boosted){return O().body}else{return e}}}function z(e){var t=L.config.attributesToSettle;for(var r=0;r<t.length;r++){if(e===t[r]){return true}}return false}function V(t,r){N(t.attributes,function(e){if(!r.hasAttribute(e.name)&&z(e.name)){t.removeAttribute(e.name)}});N(r.attributes,function(e){if(z(e.name)){t.setAttribute(e.name,e.value)}})}function _(e,t){var r=Xt(t);for(var n=0;n<r.length;n++){var i=r[n];try{if(i.isInlineSwap(e)){return true}}catch(e){Ye(e)}}return e==="outerHTML"}function j(e,t,r){if(e==="true"){e="outerHTML"}var n=O().getElementById(t.id);if(n){var i;i=O().createDocumentFragment();i.appendChild(t);if(!_(e,n)){i=t}ie(e,n,n,i,r)}else{t.parentNode.removeChild(t);Je(O().body,"htmx:oobErrorNoTarget",{content:t})}return e}function W(e,r){N(g(e.children),function(e){var t=T(e,"hx-swap-oob");if(t!=null){j(t,e,r)}})}function B(n,e,i){N(e.querySelectorAll("[id]"),function(e){if(e.id&&e.id.length>0){var t=n.querySelector(e.tagName+"[id='"+e.id+"']");if(t&&t!==n){var r=e.cloneNode();V(e,t);i.tasks.push(function(){V(e,r)})}}})}function $(e){return function(){We(e);Ve(e);J(e);Ke(e,"htmx:load")}}function J(e){var t="[autofocus]";var r=h(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function Z(e,t,r,n){B(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push($(i))}}}function G(e){var t=R(e);if(t.webSocket){t.webSocket.close()}if(t.sseEventSource){t.sseEventSource.close()}if(e.children){N(e.children,function(e){G(e)})}}function Y(e,t,r){if(e.tagName==="BODY"){return re(e,t)}else{var n=e.previousSibling;Z(a(e),e,t,r);if(n==null){var i=a(e).firstChild}else{var i=n.nextSibling}R(e).replacedWith=i;while(i&&i!==e){if(i.nodeType===Node.ELEMENT_NODE){r.elts.push(i)}i=i.nextElementSibling}G(e);a(e).removeChild(e)}}function K(e,t,r){return Z(e,e.firstChild,t,r)}function Q(e,t,r){return Z(a(e),e,t,r)}function ee(e,t,r){return Z(e,null,t,r)}function te(e,t,r){return Z(a(e),e.nextSibling,t,r)}function re(e,t,r){var n=e.firstChild;Z(e,n,t,r);if(n){while(n.nextSibling){G(n.nextSibling);e.removeChild(n.nextSibling)}G(n);e.removeChild(n)}}function ne(e,t){var r=q(e,"hx-select");if(r){var n=O().createDocumentFragment();N(t.querySelectorAll(r),function(e){n.appendChild(e)});t=n}return t}function ie(e,t,r,n,i){switch(e){case"none":return;case"outerHTML":Y(r,n,i);return;case"afterbegin":K(r,n,i);return;case"beforebegin":Q(r,n,i);return;case"beforeend":ee(r,n,i);return;case"afterend":te(r,n,i);return;default:var a=Xt(t);for(var o=0;o<a.length;o++){var s=a[o];try{var l=s.handleSwap(e,r,n,i);if(l){if(typeof l.length!=="undefined"){for(var u=0;u<l.length;u++){var f=l[u];if(f.nodeType!==Node.TEXT_NODE&&f.nodeType!==Node.COMMENT_NODE){i.tasks.push($(f))}}}return}}catch(e){Ye(e)}}re(r,n,i)}}function ae(e,t,r,n,i){var a=u(n);if(a){W(a,i);a=ne(r,a);return ie(e,r,t,a,i)}}function oe(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=y(n);for(var a in i){if(i.hasOwnProperty(a)){var o=i[a];if(!d(o)){o={value:o}}Ke(r,a,o)}}}else{Ke(r,n,[])}}var se=/\s/;var le=/[_$a-zA-Z]/;var ue=/[_$a-zA-Z0-9]/;var fe=['"',"'","/"];var ce=/[^\s]/;function he(e){var t=[];var r=0;while(r<e.length){if(le.exec(e.charAt(r))){var n=r;r++;while(ue.exec(e.charAt(r+1))){r++}t.push(e.substr(n,r-n+1))}else if(fe.indexOf(e.charAt(r))!==-1){var i=e.charAt(r);var n=r;r++;while(r<e.length&&e.charAt(r)!==i){if(e.charAt(r)==="\\"){r++}r++}t.push(e.substr(n,r-n+1))}else{var a=e.charAt(r);t.push(a)}r++}return t}function ve(e,t,r){return le.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==r&&t!=="."}function de(e,t){if(e[0]==="["){e.shift();var r=1;var n="(function("+t+"){ return (";var i=null;while(e.length>0){var a=e[0];if(a==="]"){r--;if(r===0){if(i===null){n=n+"true"}e.shift();n+=")})";try{var o=eval(n);o.source=n;return o}catch(e){Je(O().body,"htmx:syntax:error",{error:e,source:n});return null}}}else if(a==="["){r++}if(ve(a,i,t)){n+="(("+t+"."+a+") ? ("+t+"."+a+") : (window."+a+"))"}else{n=n+a}i=e.shift()}}}function ge(e,t){var r="";while(e.length>0&&!e[0].match(t)){r+=e.shift()}return r}function me(e){var t=T(e,"hx-trigger");var r=[];if(t){var n=he(t);do{ge(n,ce);var i=n.length;var a=ge(n,/[,\[\s]/);if(a!==""){if(a==="every"){var o={trigger:"every"};ge(n,ce);o.pollInterval=f(ge(n,se));r.push(o)}else if(a.indexOf("sse:")===0){r.push({trigger:"sse",sseEvent:a.substr(4)})}else{var s={trigger:a};var l=de(n,"event");if(l){s.eventFilter=l}while(n.length>0&&n[0]!==","){ge(n,ce);var u=n.shift();if(u==="changed"){s.changed=true}else if(u==="once"){s.once=true}else if(u==="delay"&&n[0]===":"){n.shift();s.delay=f(ge(n,se))}else if(u==="throttle"&&n[0]===":"){n.shift();s.throttle=f(ge(n,se))}else{Je(e,"htmx:syntax:error",{token:n.shift()})}}r.push(s)}}if(n.length===i){Je(e,"htmx:syntax:error",{token:n.shift()})}ge(n,ce)}while(n[0]===","&&n.shift())}if(r.length>0){return r}else if(h(e,"form")){return[{trigger:"submit"}]}else if(h(e,"input, textarea, select")){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function pe(e){R(e).cancelled=true}function ye(e,t,r,n){var i=R(e);i.timeout=setTimeout(function(){if(H(e)&&i.cancelled!==true){Ht(e,t,r);ye(e,t,T(e,"hx-"+t),n)}},n)}function xe(e){return location.hostname===e.hostname&&l(e,"href")&&l(e,"href").indexOf("#")!==0}function be(t,r,e){if(t.tagName==="A"&&xe(t)||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=l(t,"href")}else{var a=l(t,"method");n=a?a.toLowerCase():"get";i=l(t,"action")}e.forEach(function(e){Ce(t,n,i,r,e,true)})}}function we(e){return e.tagName==="FORM"||h(e,'input[type="submit"], button')&&I(e,"form")!==null||e.tagName==="A"&&e.href&&e.href.indexOf("#")!==0}function Se(e,t){return R(e).boosted&&e.tagName==="A"&&t.type==="click"&&t.ctrlKey}function Ee(e,t){var r=e.eventFilter;if(r){try{return r(t)!==true}catch(e){Je(O().body,"htmx:eventFilter:error",{error:e,source:r.source});return true}}return false}function Ce(n,i,a,e,o,s){var t=function(e){if(Ee(o,e)){return}if(Se(n,e)){return}if(s||we(n)){e.preventDefault()}var t=R(e);var r=R(n);if(!t.handled){t.handled=true;if(o.once){if(r.triggeredOnce){return}else{r.triggeredOnce=true}}if(o.changed){if(r.lastValue===n.value){return}else{r.lastValue=n.value}}if(r.delayed){clearTimeout(r.delayed)}if(r.throttle){return}if(o.throttle){r.throttle=setTimeout(function(){Ht(n,i,a,e.target,e);r.throttle=null},o.throttle)}else if(o.delay){r.delayed=setTimeout(function(){Ht(n,i,a,e.target,e)},o.delay)}else{Ht(n,i,a,e.target,e)}}};e.trigger=o.trigger;e.eventListener=t;n.addEventListener(o.trigger,t)}var Ae=false;var Le=null;function Te(){if(!Le){Le=function(){Ae=true};window.addEventListener("scroll",Le);setInterval(function(){if(Ae){Ae=false;N(O().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){Oe(e)})}},200)}}function Oe(e){var t=R(e);if(!t.revealed&&m(e)){t.revealed=true;Ht(e,t.verb,t.path)}}function qe(e,t,r){var n=p(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){Re(e,a[1])}if(a[0]==="send"){He(e)}}}function Re(s,e){if(e.indexOf("ws:")!==0&&e.indexOf("wss:")!==0){e="wss:"+e}var t=L.createWebSocket(e);t.onerror=function(e){Je(s,"htmx:wsError",{error:e,socket:t});Ne(s)};R(s).webSocket=t;t.addEventListener("message",function(e){if(Ne(s)){return}var t=e.data;Ge(s,function(e){t=e.transformResponse(t,null,s)});var r=Lt(s);var n=u(t);var i=g(n.children);for(var a=0;a<i.length;a++){var o=i[a];j(T(o,"hx-swap-oob")||"true",o,r)}ot(r.tasks)})}function Ne(e){if(!H(e)){R(e).webSocket.close();return true}}function He(o){var s=c(o,function(e){return R(e).webSocket!=null});if(s){var l=R(s).webSocket;o.addEventListener(me(o)[0].trigger,function(e){var t=St(o,s,null,o);var r=yt(o,"post");var n=r.values;var i=r.errors;var a=Et(n,o);a["HEADERS"]=t;if(i&&i.length>0){Ke(o,"htmx:validation:halted",i);return}l.send(JSON.stringify(a));if(we(o)){e.preventDefault()}})}else{Je(o,"htmx:noWebSocketSourceError")}}function ke(e,t,r){var n=p(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){Me(e,a[1])}if(a[0]==="swap"){De(e,a[1])}}}function Me(t,e){var r=L.createEventSource(e);r.onerror=function(e){Je(t,"htmx:sseError",{error:e,source:r});Xe(t)};R(t).sseEventSource=r}function De(a,o){var s=c(a,Fe);if(s){var l=R(s).sseEventSource;var u=function(e){if(Xe(s)){l.removeEventListener(o,u);return}var t=e.data;Ge(a,function(e){t=e.transformResponse(t,null,a)});var r=Ct(a);var n=U(a);var i=Lt(a);ae(r.swapStyle,a,n,t,i);Ke(a,"htmx:sseMessage",e)};R(a).sseListener=u;l.addEventListener(o,u)}else{Je(a,"htmx:noSSESourceError")}}function Ie(e,t,r,n){var i=c(e,Fe);if(i){var a=R(i).sseEventSource;var o=function(){if(!Xe(i)){if(H(e)){Ht(e,t,r)}else{a.removeEventListener(n,o)}}};R(e).sseListener=o;a.addEventListener(n,o)}else{Je(e,"htmx:noSSESourceError")}}function Xe(e){if(!H(e)){R(e).sseEventSource.close();return true}}function Fe(e){return R(e).sseEventSource!=null}function Pe(e,t,r,n,i){var a=function(){if(!n.loaded){n.loaded=true;Ht(e,t,r)}};if(i){setTimeout(a,i)}else{a()}}function Ue(n,i,e){var a=false;N(t,function(t){if(o(n,"hx-"+t)){var r=T(n,"hx-"+t);a=true;i.path=r;i.verb=t;e.forEach(function(e){if(e.sseEvent){Ie(n,t,r,e.sseEvent)}else if(e.trigger==="revealed"){Te();Oe(n)}else if(e.trigger==="load"){Pe(n,t,r,i,e.delay)}else if(e.pollInterval){i.polling=true;ye(n,t,r,e.pollInterval)}else{Ce(n,t,r,i,e)}})}});return a}function ze(e){if(e.type==="text/javascript"||e.type===""){try{eval(e.innerText)}catch(e){Ye(e)}}}function Ve(e){if(h(e,"script")){ze(e)}N(S(e,"script"),function(e){ze(e)})}function _e(e){if(e.querySelectorAll){var t=e.querySelectorAll(r+", a, form, [hx-sse], [data-hx-sse], [hx-ws],"+" [data-hx-ws]");return t}else{return[]}}function je(e){var t=R(e);if(!t.initialized){t.initialized=true;if(e.value){t.lastValue=e.value}var r=me(e);var n=Ue(e,t,r);if(!n&&q(e,"hx-boost")==="true"){be(e,t,r)}var i=T(e,"hx-sse");if(i){ke(e,t,i)}var a=T(e,"hx-ws");if(a){qe(e,t,a)}Ke(e,"htmx:processedNode")}}function We(e){je(e);N(_e(e),function(e){je(e)})}function Be(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function $e(e,t){var r;if(window.CustomEvent&&typeof window.CustomEvent==="function"){r=new CustomEvent(e,{bubbles:true,cancelable:true,detail:t})}else{r=O().createEvent("CustomEvent");r.initCustomEvent(e,true,true,t)}return r}function Je(e,t,r){Ke(e,t,k({error:t},r))}function Ze(e){return e==="htmx:processedNode"}function Ge(e,t){N(Xt(e),function(e){try{t(e)}catch(e){Ye(e)}})}function Ye(e){if(console.error){console.error(e)}else if(console.log){console.log("ERROR: ",e)}}function Ke(e,t,r){if(r==null){r={}}r["elt"]=e;var n=$e(t,r);if(L.logger&&!Ze(t)){L.logger(e,t,r)}if(r.error){Ye(r.error);Ke(e,"htmx:error",{errorInfo:r})}var i=e.dispatchEvent(n);var a=Be(t);if(i&&a!==t){var o=$e(a,n.detail);i=i&&e.dispatchEvent(o)}Ge(e,function(e){i=i&&e.onEvent(t,n)!==false});return i}var Qe=null;function et(){var e=O().querySelector("[hx-history-elt],[data-hx-history-elt]");return e||O().body}function tt(e,t,r,n){var i=y(localStorage.getItem("htmx-history-cache"))||[];for(var a=0;a<i.length;a++){if(i[a].url===e){i=i.slice(a,1);break}}i.push({url:e,content:t,title:r,scroll:n});while(i.length>L.config.historyCacheSize){i.shift()}try{localStorage.setItem("htmx-history-cache",JSON.stringify(i))}catch(e){Je(O().body,"htmx:historyCacheError",{cause:e})}}function rt(e){var t=y(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r<t.length;r++){if(t[r].url===e){return t[r]}}return null}function nt(e){var t=L.config.requestClass;var r=e.cloneNode(true);N(S(r,"."+t),function(e){A(e,t)});return r.innerHTML}function it(){var e=et();var t=Qe||location.pathname+location.search;Ke(O().body,"htmx:beforeHistorySave",{path:t,historyElt:e});if(L.config.historyEnabled)history.replaceState({htmx:true},O().title,window.location.href);tt(t,nt(e),O().title,window.scrollY)}function at(e){if(L.config.historyEnabled)history.pushState({htmx:true},"",e);Qe=e}function ot(e){N(e,function(e){e.call()})}function st(n){var e=new XMLHttpRequest;var i={path:n,xhr:e};Ke(O().body,"htmx:historyCacheMiss",i);e.open("GET",n,true);e.onload=function(){if(this.status>=200&&this.status<400){Ke(O().body,"htmx:historyCacheMissLoad",i);var e=u(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=et();var r=Lt(t);re(t,e,r);ot(r.tasks);Qe=n}else{Je(O().body,"htmx:historyCacheMissLoadError",i)}};e.send()}function lt(e){it(Qe);e=e||location.pathname+location.search;Ke(O().body,"htmx:historyRestore",{path:e});var t=rt(e);if(t){var r=u(t.content);var n=et();var i=Lt(n);re(n,r,i);ot(i.tasks);document.title=t.title;window.scrollTo(0,t.scroll);Qe=e}else{st(e)}}function ut(e){var t=q(e,"hx-push-url");return t&&t!=="false"||e.tagName==="A"&&R(e).boosted}function ft(e){var t=q(e,"hx-push-url");return t==="true"||t==="false"?null:t}function ct(e){vt(e,"add")}function ht(e){vt(e,"remove")}function vt(e,t){var r=q(e,"hx-indicator");if(r){var n=O().querySelectorAll(r)}else{n=[e]}N(n,function(e){e.classList[t].call(e.classList,L.config.requestClass)})}function dt(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(n.isSameNode(t)){return true}}return false}function gt(e){if(e.name===""||e.name==null||e.disabled){return false}if(e.type==="button"||e.type==="submit"||e.tagName==="image"||e.tagName==="reset"||e.tagName==="file"){return false}if(e.type==="checkbox"||e.type==="radio"){return e.checked}return true}function mt(t,r,n,e){if(e==null||dt(t,e)){return}else{t.push(e)}if(gt(e)){var i=l(e,"name");var a=e.value;if(!!l(e,"multiple")){a=g(e.querySelectorAll("option:checked")).map(function(e){return e.value})}if(e.files){a=g(e.files)}if(i!=null&&a!=null){var o=r[i];if(o){if(Array.isArray(o)){if(Array.isArray(a)){r[i]=o.concat(a)}else{o.push(a)}}else{if(Array.isArray(a)){r[i]=[o].concat(a)}else{r[i]=[o,a]}}}else{r[i]=a}}pt(e,n)}if(h(e,"form")){var s=e.elements;N(s,function(e){mt(t,r,n,e)})}}function pt(e,t){if(e.willValidate){Ke(e,"htmx:validation:validate");if(!e.checkValidity()){t.push({elt:e,message:e.validationMessage,validity:e.validity});Ke(e,"htmx:validation:failed",{message:e.validationMessage,validity:e.validity})}}}function yt(e,t){var r=[];var n={};var i=[];if(t!=="get"){mt(r,n,i,I(e,"form"))}mt(r,n,i,e);var a=q(e,"hx-include");if(a){var o=O().querySelectorAll(a);N(o,function(e){mt(r,n,i,e)})}return{errors:i,values:n}}function xt(e,t,r){if(e!==""){e+="&"}e+=encodeURIComponent(t)+"="+encodeURIComponent(r);return e}function bt(e){var t="";for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){N(n,function(e){t=xt(t,r,e)})}else{t=xt(t,r,n)}}}return t}function wt(e){var t=new FormData;for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){N(n,function(e){t.append(r,e)})}else{t.append(r,n)}}}return t}function St(e,t,r,n){var i={"HX-Request":"true","HX-Trigger":l(e,"id"),"HX-Trigger-Name":l(e,"name"),"HX-Target":T(t,"id"),"HX-Current-URL":O().location.href};if(r!==undefined){i["HX-Prompt"]=r}if(n){i["HX-Event-Target"]=l(n,"id")}if(O().activeElement){i["HX-Active-Element"]=l(O().activeElement,"id");i["HX-Active-Element-Name"]=l(O().activeElement,"name");if(O().activeElement.value){i["HX-Active-Element-Value"]=l(O().activeElement,"value")}}return i}function Et(t,e){var r=q(e,"hx-params");if(r){if(r==="none"){return{}}else if(r==="*"){return t}else if(r.indexOf("not ")===0){N(r.substr(4).split(","),function(e){e=e.trim();delete t[e]});return t}else{var n={};N(r.split(","),function(e){e=e.trim();n[e]=t[e]});return n}}else{return t}}function Ct(e){var t=q(e,"hx-swap");var r={swapStyle:L.config.defaultSwapStyle,swapDelay:L.config.defaultSwapDelay,settleDelay:L.config.defaultSettleDelay};if(t){var n=p(t);if(n.length>0){r["swapStyle"]=n[0];for(var i=1;i<n.length;i++){var a=n[i];if(a.indexOf("swap:")===0){r["swapDelay"]=f(a.substr(5))}if(a.indexOf("settle:")===0){r["settleDelay"]=f(a.substr(7))}if(a.indexOf("scroll:")===0){r["scroll"]=a.substr(7)}if(a.indexOf("show:")===0){r["show"]=a.substr(5)}}}}return r}function At(t,r,n){var i=null;Ge(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(q(r,"hx-encoding")==="multipart/form-data"){return wt(n)}else{return bt(n)}}}function Lt(e){return{tasks:[],elts:[e]}}function Tt(e,t,r){if(r.scroll){if(r.scroll==="top"){e.scrollTop=0}if(r.scroll==="bottom"){e.scrollTop=e.scrollHeight}}if(r.show){if(r.show==="top"){e.scrollIntoView(true)}if(r.show==="bottom"){e.scrollIntoView(false)}}}function Ot(e,t){if(e==null){return}var r=T(e,"hx-vars");if(r){var n=eval("({"+r+"})");for(var i in n){if(n.hasOwnProperty(i)){if(t[i]==null){t[i]=n[i]}}}}Ot(a(e),t)}function qt(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function Rt(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){Je(O().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function Nt(e,t){return e.getAllResponseHeaders().match(t)}function Ht(u,e,f,t,r){var c=U(u);if(c==null){Je(u,"htmx:targetError",{target:T(u,"hx-target")});return}var n=R(u);if(n.requestInFlight){n.queuedRequest=function(){Ht(u,e,f,t,r)};return}else{n.requestInFlight=true}var i=function(){n.requestInFlight=false;var e=n.queuedRequest;n.queuedRequest=null;if(e){e()}};var a=q(u,"hx-prompt");if(a){var o=prompt(a);if(o===null||!Ke(u,"htmx:prompt",{prompt:o,target:c}))return i()}var s=q(u,"hx-confirm");if(s){if(!confirm(s))return i()}var h=new XMLHttpRequest;var l=St(u,c,o,t);var v=yt(u,e);var d=v.values;var g=v.errors;Ot(u,d);var m=Et(d,u);if(e!=="get"&&q(u,"hx-encoding")==null){l["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"}if(f==null||f===""){f=O().location.href}var p={parameters:m,unfilteredParameters:d,headers:l,target:c,verb:e,errors:g,path:f,triggeringEvent:r};if(!Ke(u,"htmx:configRequest",p))return i();f=p.path;e=p.verb;l=p.headers;m=p.parameters;g=p.errors;if(g&&g.length>0){Ke(u,"htmx:validation:halted",p);return i()}var y=f.split("#");var x=y[0];var b=y[1];if(e==="get"){var w=x;var S=Object.keys(m).length!==0;if(S){if(w.indexOf("?")<0){w+="?"}else{w+="&"}w+=bt(m);if(b){w+="#"+b}}h.open("GET",w,true)}else{h.open(e.toUpperCase(),f,true)}h.overrideMimeType("text/html");for(var E in l){if(l.hasOwnProperty(E)){var C=l[E];qt(h,E,C)}}var A={xhr:h,target:c,requestConfig:p};h.onload=function(){try{if(!Ke(u,"htmx:beforeOnLoad",A))return;if(Nt(h,/HX-Trigger:/i)){oe(h,"HX-Trigger",u)}if(Nt(h,/HX-Push:/i)){var a=this.getResponseHeader("HX-Push")}var o=ut(u)||a;if(this.status>=200&&this.status<400){if(this.status===286){pe(u)}if(this.status!==204){if(!Ke(c,"htmx:beforeSwap",A))return;var s=this.response;Ge(u,function(e){s=e.transformResponse(s,h,u)});if(o){it()}var l=Ct(u);c.classList.add(L.config.swappingClass);var e=function(){try{var e=document.activeElement;var t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null};var r=Lt(c);ae(l.swapStyle,c,u,s,r);if(t.elt&&!H(t.elt)&&t.elt.id){var n=document.getElementById(t.elt.id);if(n){if(t.start&&n.setSelectionRange){n.setSelectionRange(t.start,t.end)}n.focus()}}c.classList.remove(L.config.swappingClass);N(r.elts,function(e){if(e.classList){e.classList.add(L.config.settlingClass)}Ke(e,"htmx:afterSwap",A)});if(b){location.hash=b}if(Nt(h,/HX-Trigger-After-Swap:/i)){oe(h,"HX-Trigger-After-Swap",u)}var i=function(){N(r.tasks,function(e){e.call()});N(r.elts,function(e){if(e.classList){e.classList.remove(L.config.settlingClass)}Ke(e,"htmx:afterSettle",A)});if(o){var e=a||ft(u)||Rt(h)||w||f;at(e);Ke(O().body,"htmx:pushedIntoHistory",{path:e})}Tt(c,r.elts,l);if(Nt(h,/HX-Trigger-After-Settle:/i)){oe(h,"HX-Trigger-After-Settle",u)}};if(l.settleDelay>0){setTimeout(i,l.settleDelay)}else{i()}}catch(e){Je(u,"htmx:swapError",A);throw e}};if(l.swapDelay>0){setTimeout(e,l.swapDelay)}else{e()}}}else{Je(u,"htmx:responseError",k({error:"Response Status Error Code "+this.status+" from "+f},A))}}catch(e){Je(u,"htmx:onLoadError",k({error:e},A));throw e}finally{ht(u);var t=R(u).replacedWith||u;Ke(t,"htmx:afterRequest",A);Ke(t,"htmx:afterOnLoad",A);i()}};h.onerror=function(){ht(u);Je(u,"htmx:afterRequest",A);Je(u,"htmx:sendError",A);i()};if(!Ke(u,"htmx:beforeRequest",A))return i();ct(u);N(["loadstart","loadend","progress","abort"],function(t){h.addEventListener(t,function(e){Ke(u,"htmx:xhr:"+t,k({},e.detail))})});h.send(e==="get"?null:At(h,u,m))}var kt={};function Mt(){return{onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function Dt(e,t){kt[e]=k(Mt(),t)}function It(e){delete kt[e]}function Xt(e,r){if(e==null){return r}if(r==null){r=[]}var t=T(e,"hx-ext");if(t){N(t.split(","),function(e){e=e.replace(/ /g,"");var t=kt[e];if(t&&r.indexOf(t)<0){r.push(t)}})}return Xt(a(e),r)}function Ft(e){if(O().readyState!=="loading"){e()}else{O().addEventListener("DOMContentLoaded",e)}}function Pt(){if(L.config.includeIndicatorStyles!==false){O().head.insertAdjacentHTML("beforeend","<style> ."+L.config.indicatorClass+"{opacity:0;transition: opacity 200ms ease-in;} ."+L.config.requestClass+" ."+L.config.indicatorClass+"{opacity:1} ."+L.config.requestClass+"."+L.config.indicatorClass+"{opacity:1} </style>")}}function Ut(){var e=O().querySelector('meta[name="htmx-config"]');if(e){return y(e.content)}else{return null}}function zt(){var e=Ut();if(e){L.config=k(L.config,e)}}Ft(function(){zt();Pt();var e=O().body;We(e);Ke(e,"htmx:load",{});window.onpopstate=function(e){if(e.state&&e.state.htmx){lt()}}});return L}()}); \ No newline at end of file +(function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else{e.htmx=t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var O={onLoad:x,process:$e,on:F,off:P,trigger:tt,find:w,findAll:S,closest:I,remove:E,addClass:C,removeClass:A,toggleClass:L,takeClass:T,defineExtension:Ut,removeExtension:zt,logAll:b,logger:null,config:{historyEnabled:true,historyCacheSize:10,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:100,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",attributesToSettle:["class","style","width","height"]},parseInterval:f,_:e,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){return new WebSocket(e,[])}};var t=["get","post","put","delete","patch"];var n=t.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function f(e){if(e==null||e==="null"||e==="false"||e===""){return null}else if(e.lastIndexOf("ms")===e.length-2){return parseFloat(e.substr(0,e.length-2))}else if(e.lastIndexOf("s")===e.length-1){return parseFloat(e.substr(0,e.length-1))*1e3}else{return parseFloat(e)}}function u(e,t){return e.getAttribute&&e.getAttribute(t)}function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function R(e,t){return u(e,t)||u(e,"data-"+t)}function l(e){return e.parentElement}function q(){return document}function c(e,t){if(t(e)){return e}else if(l(e)){return c(l(e),t)}else{return null}}function H(e,t){var r=null;c(e,function(e){return r=R(e,t)});return r}function v(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function r(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function i(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=q().createDocumentFragment()}return i}function h(e){var t=r(e);switch(t){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return i("<table>"+e+"</table>",1);case"col":return i("<table><colgroup>"+e+"</colgroup></table>",2);case"tr":return i("<table><tbody>"+e+"</tbody></table>",2);case"td":case"th":return i("<table><tbody><tr>"+e+"</tr></tbody></table>",3);case"script":return i("<div>"+e+"</div>",1);default:return i(e,0)}}function a(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function s(e){return a(e,"Function")}function d(e){return a(e,"Object")}function N(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function g(e){var t=[];if(e){for(var r=0;r<e.length;r++){t.push(e[r])}}return t}function k(e,t){if(e){for(var r=0;r<e.length;r++){t(e[r])}}}function m(e){var t=e.getBoundingClientRect();var r=t.top;var n=t.bottom;return r<window.innerHeight&&n>=0}function M(e){return q().body.contains(e)}function p(e){return e.trim().split(/\s+/)}function D(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function y(e){try{return JSON.parse(e)}catch(e){et(e);return null}}function e(e){return eval(e)}function x(t){var e=O.on("htmx:load",function(e){t(e.detail.elt)});return e}function b(){O.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function w(e,t){if(t){return e.querySelector(t)}else{return q().body.querySelector(e)}}function S(e,t){if(t){return e.querySelectorAll(t)}else{return q().body.querySelectorAll(e)}}function E(e,t){if(t){setTimeout(function(){E(e)},t)}else{e.parentElement.removeChild(e)}}function C(e,t,r){if(r){setTimeout(function(){C(e,t)},r)}else{e.classList.add(t)}}function A(e,t,r){if(r){setTimeout(function(){A(e,t)},r)}else{e.classList.remove(t)}}function L(e,t){e.classList.toggle(t)}function T(e,t){k(e.parentElement.children,function(e){A(e,t)});C(e,t)}function I(e,t){do{if(e==null||v(e,t))return e}while(e=e&&l(e))}function X(e,t,r){if(s(t)){return{target:q().body,event:e,listener:t}}else{return{target:e,event:t,listener:r}}}function F(t,r,n){_t(function(){var e=X(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=s(r);return e?r:n}function P(t,r,n){_t(function(){var e=X(t,r,n);e.target.removeEventListener(e.event,e.listener)});return s(r)?r:n}function U(e){var t=c(e,function(e){return R(e,"hx-target")!==null});if(t){var r=R(t,"hx-target");if(r==="this"){return t}else if(r.indexOf("closest ")===0){return I(e,r.substr(8))}else if(r.indexOf("find ")===0){return w(e,r.substr(5))}else{return q().querySelector(r)}}else{var n=N(e);if(n.boosted){return q().body}else{return e}}}function z(e){var t=O.config.attributesToSettle;for(var r=0;r<t.length;r++){if(e===t[r]){return true}}return false}function V(t,r){k(t.attributes,function(e){if(!r.hasAttribute(e.name)&&z(e.name)){t.removeAttribute(e.name)}});k(r.attributes,function(e){if(z(e.name)){t.setAttribute(e.name,e.value)}})}function _(e,t){var r=Vt(t);for(var n=0;n<r.length;n++){var i=r[n];try{if(i.isInlineSwap(e)){return true}}catch(e){et(e)}}return e==="outerHTML"}function j(e,t,r){if(e==="true"){e="outerHTML"}var n=q().getElementById(t.id);if(n){var i;i=q().createDocumentFragment();i.appendChild(t);if(!_(e,n)){i=t}ie(e,n,n,i,r)}else{t.parentNode.removeChild(t);Ye(q().body,"htmx:oobErrorNoTarget",{content:t})}return e}function B(e,r){k(g(e.children),function(e){var t=R(e,"hx-swap-oob");if(t!=null){j(t,e,r)}})}function W(n,e,i){k(e.querySelectorAll("[id]"),function(e){if(e.id&&e.id.length>0){var t=n.querySelector(e.tagName+"[id='"+e.id+"']");if(t&&t!==n){var r=e.cloneNode();V(e,t);i.tasks.push(function(){V(e,r)})}}})}function J(e){return function(){$e(e);je(e);$(e);tt(e,"htmx:load")}}function $(e){var t="[autofocus]";var r=v(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function Z(e,t,r,n){W(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(J(i))}}}function G(e){var t=N(e);if(t.webSocket){t.webSocket.close()}if(t.sseEventSource){t.sseEventSource.close()}if(e.children){k(e.children,function(e){G(e)})}}function Y(e,t,r){if(e.tagName==="BODY"){return re(e,t)}else{var n=e.previousSibling;Z(l(e),e,t,r);if(n==null){var i=l(e).firstChild}else{var i=n.nextSibling}N(e).replacedWith=i;while(i&&i!==e){if(i.nodeType===Node.ELEMENT_NODE){r.elts.push(i)}i=i.nextElementSibling}G(e);l(e).removeChild(e)}}function K(e,t,r){return Z(e,e.firstChild,t,r)}function Q(e,t,r){return Z(l(e),e,t,r)}function ee(e,t,r){return Z(e,null,t,r)}function te(e,t,r){return Z(l(e),e.nextSibling,t,r)}function re(e,t,r){var n=e.firstChild;Z(e,n,t,r);if(n){while(n.nextSibling){G(n.nextSibling);e.removeChild(n.nextSibling)}G(n);e.removeChild(n)}}function ne(e,t){var r=H(e,"hx-select");if(r){var n=q().createDocumentFragment();k(t.querySelectorAll(r),function(e){n.appendChild(e)});t=n}return t}function ie(e,t,r,n,i){switch(e){case"none":return;case"outerHTML":Y(r,n,i);return;case"afterbegin":K(r,n,i);return;case"beforebegin":Q(r,n,i);return;case"beforeend":ee(r,n,i);return;case"afterend":te(r,n,i);return;default:var a=Vt(t);for(var o=0;o<a.length;o++){var s=a[o];try{var u=s.handleSwap(e,r,n,i);if(u){if(typeof u.length!=="undefined"){for(var l=0;l<u.length;l++){var f=u[l];if(f.nodeType!==Node.TEXT_NODE&&f.nodeType!==Node.COMMENT_NODE){i.tasks.push(J(f))}}}return}}catch(e){et(e)}}re(r,n,i)}}var ae=/<title>([\s\S]+?)<\/title>/im;function oe(e){var t=ae.exec(e);if(t){return t[1]}}function se(e,t,r,n,i){var a=oe(n);if(a){window.document.title=a}var o=h(n);if(o){B(o,i);o=ne(r,o);return ie(e,r,t,o,i)}}function ue(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=y(n);for(var a in i){if(i.hasOwnProperty(a)){var o=i[a];if(!d(o)){o={value:o}}tt(r,a,o)}}}else{tt(r,n,[])}}var le=/\s/;var fe=/[_$a-zA-Z]/;var ce=/[_$a-zA-Z0-9]/;var ve=['"',"'","/"];var he=/[^\s]/;function de(e){var t=[];var r=0;while(r<e.length){if(fe.exec(e.charAt(r))){var n=r;r++;while(ce.exec(e.charAt(r+1))){r++}t.push(e.substr(n,r-n+1))}else if(ve.indexOf(e.charAt(r))!==-1){var i=e.charAt(r);var n=r;r++;while(r<e.length&&e.charAt(r)!==i){if(e.charAt(r)==="\\"){r++}r++}t.push(e.substr(n,r-n+1))}else{var a=e.charAt(r);t.push(a)}r++}return t}function ge(e,t,r){return fe.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==r&&t!=="."}function me(e,t){if(e[0]==="["){e.shift();var r=1;var n=" return (function("+t+"){ return (";var i=null;while(e.length>0){var a=e[0];if(a==="]"){r--;if(r===0){if(i===null){n=n+"true"}e.shift();n+=")})";try{var o=Function(n)();o.source=n;return o}catch(e){Ye(q().body,"htmx:syntax:error",{error:e,source:n});return null}}}else if(a==="["){r++}if(ge(a,i,t)){n+="(("+t+"."+a+") ? ("+t+"."+a+") : (window."+a+"))"}else{n=n+a}i=e.shift()}}}function pe(e,t){var r="";while(e.length>0&&!e[0].match(t)){r+=e.shift()}return r}function ye(e){var t=R(e,"hx-trigger");var r=[];if(t){var n=de(t);do{pe(n,he);var i=n.length;var a=pe(n,/[,\[\s]/);if(a!==""){if(a==="every"){var o={trigger:"every"};pe(n,he);o.pollInterval=f(pe(n,le));r.push(o)}else if(a.indexOf("sse:")===0){r.push({trigger:"sse",sseEvent:a.substr(4)})}else{var s={trigger:a};var u=me(n,"event");if(u){s.eventFilter=u}while(n.length>0&&n[0]!==","){pe(n,he);var l=n.shift();if(l==="changed"){s.changed=true}else if(l==="once"){s.once=true}else if(l==="delay"&&n[0]===":"){n.shift();s.delay=f(pe(n,le))}else if(l==="throttle"&&n[0]===":"){n.shift();s.throttle=f(pe(n,le))}else{Ye(e,"htmx:syntax:error",{token:n.shift()})}}r.push(s)}}if(n.length===i){Ye(e,"htmx:syntax:error",{token:n.shift()})}pe(n,he)}while(n[0]===","&&n.shift())}if(r.length>0){return r}else if(v(e,"form")){return[{trigger:"submit"}]}else if(v(e,"input, textarea, select")){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function xe(e){N(e).cancelled=true}function be(e,t,r,n){var i=N(e);i.timeout=setTimeout(function(){if(M(e)&&i.cancelled!==true){Xt(e,t,r);be(e,t,R(e,"hx-"+t),n)}},n)}function we(e){return location.hostname===e.hostname&&u(e,"href")&&u(e,"href").indexOf("#")!==0}function Se(t,r,e){if(t.tagName==="A"&&we(t)||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=u(t,"href")}else{var a=u(t,"method");n=a?a.toLowerCase():"get";i=u(t,"action")}e.forEach(function(e){Le(t,n,i,r,e,true)})}}function Ee(e){return e.tagName==="FORM"||v(e,'input[type="submit"], button')&&I(e,"form")!==null||e.tagName==="A"&&e.href&&e.href.indexOf("#")!==0}function Ce(e,t){return N(e).boosted&&e.tagName==="A"&&t.type==="click"&&t.ctrlKey}function Ae(e,t){var r=e.eventFilter;if(r){try{return r(t)!==true}catch(e){Ye(q().body,"htmx:eventFilter:error",{error:e,source:r.source});return true}}return false}function Le(n,i,a,e,o,s){var t=function(e){if(Ae(o,e)){return}if(Ce(n,e)){return}if(s||Ee(n)){e.preventDefault()}var t=N(e);var r=N(n);if(!t.handled){t.handled=true;if(o.once){if(r.triggeredOnce){return}else{r.triggeredOnce=true}}if(o.changed){if(r.lastValue===n.value){return}else{r.lastValue=n.value}}if(r.delayed){clearTimeout(r.delayed)}if(r.throttle){return}if(o.throttle){r.throttle=setTimeout(function(){Xt(n,i,a,e.target,e);r.throttle=null},o.throttle)}else if(o.delay){r.delayed=setTimeout(function(){Xt(n,i,a,e.target,e)},o.delay)}else{Xt(n,i,a,e.target,e)}}};e.trigger=o.trigger;e.eventListener=t;n.addEventListener(o.trigger,t)}var Te=false;var Oe=null;function Re(){if(!Oe){Oe=function(){Te=true};window.addEventListener("scroll",Oe);setInterval(function(){if(Te){Te=false;k(q().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){qe(e)})}},200)}}function qe(e){var t=N(e);if(!t.revealed&&m(e)){t.revealed=true;Xt(e,t.verb,t.path)}}function He(e,t,r){var n=p(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){Ne(e,a[1])}if(a[0]==="send"){Me(e)}}}function Ne(s,e){if(e.indexOf("ws:")!==0&&e.indexOf("wss:")!==0){e="wss:"+e}var t=O.createWebSocket(e);t.onerror=function(e){Ye(s,"htmx:wsError",{error:e,socket:t});ke(s)};N(s).webSocket=t;t.addEventListener("message",function(e){if(ke(s)){return}var t=e.data;Qe(s,function(e){t=e.transformResponse(t,null,s)});var r=Rt(s);var n=h(t);var i=g(n.children);for(var a=0;a<i.length;a++){var o=i[a];j(R(o,"hx-swap-oob")||"true",o,r)}lt(r.tasks)})}function ke(e){if(!M(e)){N(e).webSocket.close();return true}}function Me(u){var l=c(u,function(e){return N(e).webSocket!=null});if(l){var f=N(l).webSocket;u.addEventListener(ye(u)[0].trigger,function(e){var t=At(u,l,null,u);var r=wt(u,"post");var n=r.errors;var i=r.values;var a=Nt(u);var o=D(i,a);var s=Lt(o,u);s["HEADERS"]=t;if(n&&n.length>0){tt(u,"htmx:validation:halted",n);return}f.send(JSON.stringify(s));if(Ee(u)){e.preventDefault()}})}else{Ye(u,"htmx:noWebSocketSourceError")}}function De(e,t,r){var n=p(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){Ie(e,a[1])}if(a[0]==="swap"){Xe(e,a[1])}}}function Ie(t,e){var r=O.createEventSource(e);r.onerror=function(e){Ye(t,"htmx:sseError",{error:e,source:r});Pe(t)};N(t).sseEventSource=r}function Xe(a,o){var s=c(a,Ue);if(s){var u=N(s).sseEventSource;var l=function(e){if(Pe(s)){u.removeEventListener(o,l);return}var t=e.data;Qe(a,function(e){t=e.transformResponse(t,null,a)});var r=Tt(a);var n=U(a);var i=Rt(a);se(r.swapStyle,a,n,t,i);tt(a,"htmx:sseMessage",e)};N(a).sseListener=l;u.addEventListener(o,l)}else{Ye(a,"htmx:noSSESourceError")}}function Fe(e,t,r,n){var i=c(e,Ue);if(i){var a=N(i).sseEventSource;var o=function(){if(!Pe(i)){if(M(e)){Xt(e,t,r)}else{a.removeEventListener(n,o)}}};N(e).sseListener=o;a.addEventListener(n,o)}else{Ye(e,"htmx:noSSESourceError")}}function Pe(e){if(!M(e)){N(e).sseEventSource.close();return true}}function Ue(e){return N(e).sseEventSource!=null}function ze(e,t,r,n,i){var a=function(){if(!n.loaded){n.loaded=true;Xt(e,t,r)}};if(i){setTimeout(a,i)}else{a()}}function Ve(n,i,e){var a=false;k(t,function(t){if(o(n,"hx-"+t)){var r=R(n,"hx-"+t);a=true;i.path=r;i.verb=t;e.forEach(function(e){if(e.sseEvent){Fe(n,t,r,e.sseEvent)}else if(e.trigger==="revealed"){Re();qe(n)}else if(e.trigger==="load"){ze(n,t,r,i,e.delay)}else if(e.pollInterval){i.polling=true;be(n,t,r,e.pollInterval)}else{Le(n,t,r,i,e)}})}});return a}function _e(e){if(e.type==="text/javascript"||e.type===""){try{eval(e.innerText)}catch(e){et(e)}}}function je(e){if(v(e,"script")){_e(e)}k(S(e,"script"),function(e){_e(e)})}function Be(){return document.querySelector("[hx-boost], [data-hx-boost]")}function We(e){if(e.querySelectorAll){var t=Be()?", a, form":"";var r=e.querySelectorAll(n+t+", [hx-sse], [data-hx-sse], [hx-ws],"+" [data-hx-ws]");return r}else{return[]}}function Je(e){var t=N(e);if(!t.initialized){t.initialized=true;if(e.value){t.lastValue=e.value}var r=ye(e);var n=Ve(e,t,r);if(!n&&H(e,"hx-boost")==="true"){Se(e,t,r)}var i=R(e,"hx-sse");if(i){De(e,t,i)}var a=R(e,"hx-ws");if(a){He(e,t,a)}tt(e,"htmx:processedNode")}}function $e(e){Je(e);k(We(e),function(e){Je(e)})}function Ze(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Ge(e,t){var r;if(window.CustomEvent&&typeof window.CustomEvent==="function"){r=new CustomEvent(e,{bubbles:true,cancelable:true,detail:t})}else{r=q().createEvent("CustomEvent");r.initCustomEvent(e,true,true,t)}return r}function Ye(e,t,r){tt(e,t,D({error:t},r))}function Ke(e){return e==="htmx:processedNode"}function Qe(e,t){k(Vt(e),function(e){try{t(e)}catch(e){et(e)}})}function et(e){if(console.error){console.error(e)}else if(console.log){console.log("ERROR: ",e)}}function tt(e,t,r){if(r==null){r={}}r["elt"]=e;var n=Ge(t,r);if(O.logger&&!Ke(t)){O.logger(e,t,r)}if(r.error){et(r.error);tt(e,"htmx:error",{errorInfo:r})}var i=e.dispatchEvent(n);var a=Ze(t);if(i&&a!==t){var o=Ge(a,n.detail);i=i&&e.dispatchEvent(o)}Qe(e,function(e){i=i&&e.onEvent(t,n)!==false});return i}var rt=null;function nt(){var e=q().querySelector("[hx-history-elt],[data-hx-history-elt]");return e||q().body}function it(e,t,r,n){var i=y(localStorage.getItem("htmx-history-cache"))||[];for(var a=0;a<i.length;a++){if(i[a].url===e){i=i.slice(a,1);break}}i.push({url:e,content:t,title:r,scroll:n});while(i.length>O.config.historyCacheSize){i.shift()}try{localStorage.setItem("htmx-history-cache",JSON.stringify(i))}catch(e){Ye(q().body,"htmx:historyCacheError",{cause:e})}}function at(e){var t=y(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r<t.length;r++){if(t[r].url===e){return t[r]}}return null}function ot(e){var t=O.config.requestClass;var r=e.cloneNode(true);k(S(r,"."+t),function(e){A(e,t)});return r.innerHTML}function st(){var e=nt();var t=rt||location.pathname+location.search;tt(q().body,"htmx:beforeHistorySave",{path:t,historyElt:e});if(O.config.historyEnabled)history.replaceState({htmx:true},q().title,window.location.href);it(t,ot(e),q().title,window.scrollY)}function ut(e){if(O.config.historyEnabled)history.pushState({htmx:true},"",e);rt=e}function lt(e){k(e,function(e){e.call()})}function ft(n){var e=new XMLHttpRequest;var i={path:n,xhr:e};tt(q().body,"htmx:historyCacheMiss",i);e.open("GET",n,true);e.onload=function(){if(this.status>=200&&this.status<400){tt(q().body,"htmx:historyCacheMissLoad",i);var e=h(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=nt();var r=Rt(t);re(t,e,r);lt(r.tasks);rt=n}else{Ye(q().body,"htmx:historyCacheMissLoadError",i)}};e.send()}function ct(e){st(rt);e=e||location.pathname+location.search;tt(q().body,"htmx:historyRestore",{path:e});var t=at(e);if(t){var r=h(t.content);var n=nt();var i=Rt(n);re(n,r,i);lt(i.tasks);document.title=t.title;window.scrollTo(0,t.scroll);rt=e}else{ft(e)}}function vt(e){var t=H(e,"hx-push-url");return t&&t!=="false"||e.tagName==="A"&&N(e).boosted}function ht(e){var t=H(e,"hx-push-url");return t==="true"||t==="false"?null:t}function dt(e){mt(e,"add")}function gt(e){mt(e,"remove")}function mt(e,t){var r=H(e,"hx-indicator");if(r){var n=q().querySelectorAll(r)}else{n=[e]}k(n,function(e){e.classList[t].call(e.classList,O.config.requestClass)})}function pt(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(n.isSameNode(t)){return true}}return false}function yt(e){if(e.name===""||e.name==null||e.disabled){return false}if(e.type==="button"||e.type==="submit"||e.tagName==="image"||e.tagName==="reset"||e.tagName==="file"){return false}if(e.type==="checkbox"||e.type==="radio"){return e.checked}return true}function xt(t,r,n,e){if(e==null||pt(t,e)){return}else{t.push(e)}if(yt(e)){var i=u(e,"name");var a=e.value;if(!!u(e,"multiple")){a=g(e.querySelectorAll("option:checked")).map(function(e){return e.value})}if(e.files){a=g(e.files)}if(i!=null&&a!=null){var o=r[i];if(o){if(Array.isArray(o)){if(Array.isArray(a)){r[i]=o.concat(a)}else{o.push(a)}}else{if(Array.isArray(a)){r[i]=[o].concat(a)}else{r[i]=[o,a]}}}else{r[i]=a}}bt(e,n)}if(v(e,"form")){var s=e.elements;k(s,function(e){xt(t,r,n,e)})}}function bt(e,t){if(e.willValidate){tt(e,"htmx:validation:validate");if(!e.checkValidity()){t.push({elt:e,message:e.validationMessage,validity:e.validity});tt(e,"htmx:validation:failed",{message:e.validationMessage,validity:e.validity})}}}function wt(e,t){var r=[];var n={};var i=[];if(t!=="get"){xt(r,n,i,I(e,"form"))}xt(r,n,i,e);var a=H(e,"hx-include");if(a){var o=q().querySelectorAll(a);k(o,function(e){xt(r,n,i,e)})}return{errors:i,values:n}}function St(e,t,r){if(e!==""){e+="&"}e+=encodeURIComponent(t)+"="+encodeURIComponent(r);return e}function Et(e){var t="";for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){k(n,function(e){t=St(t,r,e)})}else{t=St(t,r,n)}}}return t}function Ct(e){var t=new FormData;for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){k(n,function(e){t.append(r,e)})}else{t.append(r,n)}}}return t}function At(e,t,r,n){var i={"HX-Request":"true","HX-Trigger":u(e,"id"),"HX-Trigger-Name":u(e,"name"),"HX-Target":R(t,"id"),"HX-Current-URL":q().location.href};if(r!==undefined){i["HX-Prompt"]=r}if(n){i["HX-Event-Target"]=u(n,"id")}if(q().activeElement){i["HX-Active-Element"]=u(q().activeElement,"id");i["HX-Active-Element-Name"]=u(q().activeElement,"name");if(q().activeElement.value){i["HX-Active-Element-Value"]=u(q().activeElement,"value")}}return i}function Lt(t,e){var r=H(e,"hx-params");if(r){if(r==="none"){return{}}else if(r==="*"){return t}else if(r.indexOf("not ")===0){k(r.substr(4).split(","),function(e){e=e.trim();delete t[e]});return t}else{var n={};k(r.split(","),function(e){e=e.trim();n[e]=t[e]});return n}}else{return t}}function Tt(e){var t=H(e,"hx-swap");var r={swapStyle:O.config.defaultSwapStyle,swapDelay:O.config.defaultSwapDelay,settleDelay:O.config.defaultSettleDelay};if(t){var n=p(t);if(n.length>0){r["swapStyle"]=n[0];for(var i=1;i<n.length;i++){var a=n[i];if(a.indexOf("swap:")===0){r["swapDelay"]=f(a.substr(5))}if(a.indexOf("settle:")===0){r["settleDelay"]=f(a.substr(7))}if(a.indexOf("scroll:")===0){r["scroll"]=a.substr(7)}if(a.indexOf("show:")===0){r["show"]=a.substr(5)}}}}return r}function Ot(t,r,n){var i=null;Qe(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(H(r,"hx-encoding")==="multipart/form-data"){return Ct(n)}else{return Et(n)}}}function Rt(e){return{tasks:[],elts:[e]}}function qt(e,t,r){if(r.scroll){if(r.scroll==="top"){e.scrollTop=0}if(r.scroll==="bottom"){e.scrollTop=e.scrollHeight}}if(r.show){if(r.show==="top"){e.scrollIntoView(true)}if(r.show==="bottom"){e.scrollIntoView(false)}}}function Ht(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=R(e,t);if(i){var a=i.trim();if(a.indexOf("{")!==0){a="{"+a+"}"}var o=r(a);for(var s in o){if(o.hasOwnProperty(s)){if(n[s]==null){n[s]=o[s]}}}}return Ht(l(e),t,r,n)}function Nt(e,t){return Ht(e,"hx-vars",function(e){return Function("return ("+e+")")()},t)}function kt(e,t){return Ht(e,"hx-vars",function(e){return JSON.parse(t)},t)}function Mt(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function Dt(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){Ye(q().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function It(e,t){return e.getAllResponseHeaders().match(t)}function Xt(l,e,f,t,r){if(!M(l)){console.log("Body does not contain",l);return}var c=U(l);if(c==null){Ye(l,"htmx:targetError",{target:R(l,"hx-target")});return}var n=N(l);if(n.requestInFlight){n.queuedRequest=function(){Xt(l,e,f,t,r)};return}else{n.requestInFlight=true}var i=function(){n.requestInFlight=false;var e=n.queuedRequest;n.queuedRequest=null;if(e){e()}};var a=H(l,"hx-prompt");if(a){var o=prompt(a);if(o===null||!tt(l,"htmx:prompt",{prompt:o,target:c}))return i()}var s=H(l,"hx-confirm");if(s){if(!confirm(s))return i()}var v=new XMLHttpRequest;var u=At(l,c,o,t);var h=wt(l,e);var d=h.errors;var g=h.values;var m=Nt(l);var p=D(g,m);var y=Lt(p,l);if(e!=="get"&&H(l,"hx-encoding")==null){u["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"}if(f==null||f===""){f=q().location.href}var x={parameters:y,unfilteredParameters:p,headers:u,target:c,verb:e,errors:d,path:f,triggeringEvent:r};if(!tt(l,"htmx:configRequest",x))return i();f=x.path;e=x.verb;u=x.headers;y=x.parameters;d=x.errors;if(d&&d.length>0){tt(l,"htmx:validation:halted",x);return i()}var b=f.split("#");var w=b[0];var S=b[1];if(e==="get"){var E=w;var C=Object.keys(y).length!==0;if(C){if(E.indexOf("?")<0){E+="?"}else{E+="&"}E+=Et(y);if(S){E+="#"+S}}v.open("GET",E,true)}else{v.open(e.toUpperCase(),f,true)}v.overrideMimeType("text/html");for(var A in u){if(u.hasOwnProperty(A)){var L=u[A];Mt(v,A,L)}}var T={xhr:v,target:c,requestConfig:x};v.onload=function(){try{if(!tt(l,"htmx:beforeOnLoad",T))return;if(It(v,/HX-Trigger:/i)){ue(v,"HX-Trigger",l)}if(It(v,/HX-Push:/i)){var a=v.getResponseHeader("HX-Push")}if(It(v,/HX-Redirect:/i)){window.location.href=v.getResponseHeader("HX-Redirect");return}if(It(v,/HX-Refresh:/i)){if("true"===v.getResponseHeader("HX-Refresh")){location.reload();return}}var o=vt(l)||a;if(this.status>=200&&this.status<400){if(this.status===286){xe(l)}if(this.status!==204){if(!tt(c,"htmx:beforeSwap",T))return;var s=this.response;Qe(l,function(e){s=e.transformResponse(s,v,l)});if(o){st()}var u=Tt(l);c.classList.add(O.config.swappingClass);var e=function(){try{var e=document.activeElement;var t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null};var r=Rt(c);se(u.swapStyle,c,l,s,r);if(t.elt&&!M(t.elt)&&t.elt.id){var n=document.getElementById(t.elt.id);if(n){if(t.start&&n.setSelectionRange){n.setSelectionRange(t.start,t.end)}n.focus()}}c.classList.remove(O.config.swappingClass);k(r.elts,function(e){if(e.classList){e.classList.add(O.config.settlingClass)}tt(e,"htmx:afterSwap",T)});if(S){location.hash=S}if(It(v,/HX-Trigger-After-Swap:/i)){ue(v,"HX-Trigger-After-Swap",l)}var i=function(){k(r.tasks,function(e){e.call()});k(r.elts,function(e){if(e.classList){e.classList.remove(O.config.settlingClass)}tt(e,"htmx:afterSettle",T)});if(o){var e=a||ht(l)||Dt(v)||E||f;ut(e);tt(q().body,"htmx:pushedIntoHistory",{path:e})}qt(c,r.elts,u);if(It(v,/HX-Trigger-After-Settle:/i)){ue(v,"HX-Trigger-After-Settle",l)}};if(u.settleDelay>0){setTimeout(i,u.settleDelay)}else{i()}}catch(e){Ye(l,"htmx:swapError",T);throw e}};if(u.swapDelay>0){setTimeout(e,u.swapDelay)}else{e()}}}else{Ye(l,"htmx:responseError",D({error:"Response Status Error Code "+this.status+" from "+f},T))}}catch(e){Ye(l,"htmx:onLoadError",D({error:e},T));throw e}finally{gt(l);var t=N(l).replacedWith||l;tt(t,"htmx:afterRequest",T);tt(t,"htmx:afterOnLoad",T);i()}};v.onerror=function(){gt(l);Ye(l,"htmx:afterRequest",T);Ye(l,"htmx:sendError",T);i()};if(!tt(l,"htmx:beforeRequest",T))return i();dt(l);k(["loadstart","loadend","progress","abort"],function(t){v.addEventListener(t,function(e){tt(l,"htmx:xhr:"+t,D({},e.detail))})});v.send(e==="get"?null:Ot(v,l,y))}var Ft={};function Pt(){return{onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function Ut(e,t){Ft[e]=D(Pt(),t)}function zt(e){delete Ft[e]}function Vt(e,r){if(e==null){return r}if(r==null){r=[]}var t=R(e,"hx-ext");if(t){k(t.split(","),function(e){e=e.replace(/ /g,"");var t=Ft[e];if(t&&r.indexOf(t)<0){r.push(t)}})}return Vt(l(e),r)}function _t(e){if(q().readyState!=="loading"){e()}else{q().addEventListener("DOMContentLoaded",e)}}function jt(){if(O.config.includeIndicatorStyles!==false){q().head.insertAdjacentHTML("beforeend","<style> ."+O.config.indicatorClass+"{opacity:0;transition: opacity 200ms ease-in;} ."+O.config.requestClass+" ."+O.config.indicatorClass+"{opacity:1} ."+O.config.requestClass+"."+O.config.indicatorClass+"{opacity:1} </style>")}}function Bt(){var e=q().querySelector('meta[name="htmx-config"]');if(e){return y(e.content)}else{return null}}function Wt(){var e=Bt();if(e){O.config=D(O.config,e)}}_t(function(){Wt();jt();var e=q().body;$e(e);tt(e,"htmx:load",{});window.onpopstate=function(e){if(e.state&&e.state.htmx){ct()}}});return O}()}); \ No newline at end of file diff --git a/dist/htmx.min.js.gz b/dist/htmx.min.js.gz index 76b620875a4a601dd601858854c6c003b39d23a5..3b498f13247310b63d5cf260629df3f10d5d46d4 100644 GIT binary patch literal 9242 zcmV+#B<0&5iwFp%!LeTe188(@crI;eZZ2wb0JJ*|Q`^Xre+6_YM|ubW`|hglER+-h zXE(b9vcP7OHGZkV9%BWe@k(PpV*KB)dwM=?lihb!S5#qXrl)77r>DOak7xBzmZFY% zDwBCRj^*Q&i}A*YkIR}DMG+Z@sMDdwjNOisIX%by0gPMls^xQ@P2}xEA>(ARNDQ8q zSL02<GOKC8D0+=eT{$V+)J~qv8!l%}z2UV)vzBkPvMGl$%I{dSaaznpeJt3h`;bl> zG30IAeZf;vci*OBJnnu-0r>iwH(e=Hm}}I%S3d_;)jdy#m1ub@yYJG5--<il?WJrq zI;<FAIn-_Rc92SOeO>9d<5aR6{d|$qCVCH&*DWlw`<v85UDG$2R^l2by}}1vPd%%u zbSUa^dEK4E#-(T;do{bN_^2zJ8BcZFAsbHkdHIcZ_jYkAHml_MJ)54($BK8OvaWga z)5ZJa$nQMj6?^PDcrIndsc~<2H!bU7H5>7F^{5;&m_*@fY1+~>()J=ezirzX!Pfqq z0nPkg-4vxQ&QsRcey3@JURc<4xmUMEDU)zgS2M}m3qkAc_M;(!MrqXI0^#?*9LWj% zPI!4ek<nn0PFd5!MkH_USk)b;U%EUUHk?V`yW_Py7qe!_yN;tRSJnJ}!vg_cpWl~q za@g<@G?uI)dMuKK#`inFIv2wmE}z3@0RUHj01U4<R2Kc{ngem7sc6;D4F8XK#U*ZO z%H(ho4HRr$$n2I)<JAeG{^Vgh+TvT$Al>MXm}J|wAzCEaS5ek+lx{>xZU%3RaX8#w zxUtA=PfzOV;$x(r$FNIoULv;{08!U>14n0Y1`=3>Kb(%^=(dd#fQD9HU(3n%4|bF~ ziMN$tu>Y)`UBNYtcT*2Ac@F0i%DumfaxY2#vB&>Ol4i{iI08$I83{8D#WOgP1H*Bh zPWT>!^s)oR(!dF8y@7Gq03(5#VN;||E83EYhxIJLN{f4X!e0mOpev8lcm`Vp4((O^ z7JeMipH5<q#BdgN4xKCqTn?E%lFDx$s#hz-eYS8Ye<GB~w~b=394A?GH=2TWyGU}= z;;`KLSU7M$+y>qv5%uFaT$CY59@W&oU(+bQt!cgIS2v|x(;=4H?3y~ACL6M<qP5xu zHn<bI$UFOSpKX5|^#66abGiHK^5KWwOL^H`)|cbKKa!m?r(MX5KX9N$k^@~EM~431 zAd}))-1Fv;wLA`}8$}*z%Yd{XT8>WNe?Z1=w3uiz;`2t_o&%rN*T^`MKgb=Bsuc(U z1S^X=yAq?v{C-kaz?!dileyg9&dZ|A#$^LC9NI?<SY$~O0{Ei<F3L#W9cd<d+puf= zh4t#4ly0RHM;#<o-hvDrPT(5Mhp@#+PB<GyU3$i~nCGz&Qa=wxb=`>B)V#8(vMjo0 zvN+n8s1{!-X}7<lU(&rKH{;g;?;Escn0<E`e$W_Xvkrk;ubouAtQl%|H+de%zHBU> z=G7{)e`;jyuqmf9z%wfE%uw}+yVgqGf$?<L7j-O<EvHvsfzLBAj-){Q3s{g?Ml(B# z-l#7W)CPzhrBE!c*1N}uH+pL<Kktf+mVszaALPXGiLod^W!J3QMsXMEo5TBZfR|<y zZ;g5@=8MIu(71Nk`f32Yjztp_mfgJBH##D3wzh!lv+1k_R_!;amNh<4I^J06_*aMw z4mbAJtwm{(Hv-IBW#yD`Y0iKSabg976jQ6{uY{E1){39~doZ%ZeMSbIvTr(_`c<*( zrh4zu8Sg2wQ3fWYWMz#9<shel!hqwx1@LxSl``JBY`1ni&?DNr-StKZq#;d#dhGPR z{?LdiZ{#D$vSg0?FC_f4bmR`#BTg%uM>F-$=cgwmsc>~e6ubz57LwHkOIn5dD+iM< z*w#a=r6Mm*Gte=LmAatpM^T`7&|DaCAWN0;%2zzzTCYG|o@Qi>7rw`nHfr}k*H%=3 zOg|uKEK?5M{_)>C#p+QU?BV9oXqb3OkJ_UPp#pQ|{IAi1H}Ur{AE;~YA@BLf!9Kqz zZ@HLBXLcs@9**$5xWMMfv}c6sBgA~@5wLj<_aSLmB&5c!%=}~UcQSCla8nNB!Qa7n z@Ewe_))4725x@r{_b#yfE(i*Q!_xMLxN&F*c<#X1IEPCH#5+PW5`isFc28pYl5{jL zz@}8Dm>d7eqd*G_H2g4^tO0q`HHV&Z^k%^QsbD|6MwfTtbBBTF8c;gG#^>m_z~xO^ zC-W}>jp^Eb(w#X-6@?B@Ou13V8W~Va;YTxFHz8GMcnfD}@8WB4g59(q{=I3nhy6EZ z*3;qC;f%jI$^DGwigs%ReiqFcC7X153uW0^1MLhJ=R+y8549@BGn`i?t*zaFkk_t{ zjzDZE4`|oIBF{9&<N0sTbMl5_7-M<dy+7{1l2z#tiX0SW3W9XfiMCnMYy@AGk5;rz zfRFoJ^UV?SG^4Oaw(8R7p>maha;58`l#3%8y5L6BD0kIO`7u`4;sz9zn<+R(WlDtJ z7|&{U%acy$n|Va@fVgP|Y5^yG12lggeSoF)eMo8tUIZmJQ>fg^zxek3M+vNC2~z`M z>ixzLrbfb$G2is-L5|854fd>T-_=!FbBy-*t{V|7RJBf3BUgg#)Da`Mps${cQ9y_W zSeFOjv_9ko;Bzeu-#oqpiJg@r;vBu${QHhXUS@1M<@JbEh*V=Ykt%h9PKaET7?7#q zue3s4YAJjoMm*3!F#I!*tr#SuK!~ee(}?CoT+p>lQISg}_!h|;+vN>j9pol3F0F)5 zg7YT!HbMbISKBZRU3j^vU8t|tNbnB)_qc|}l9b7ca*q1tXb>gKyv2d47@8<Ynj6r8 zqczmawgZU8>l5I&EyPv41eXDZZAC8!dUc(SMB(KeZ4f*)M^eIRd{pcRhay>f(~_<1 ziQtclG7B_&ye<9g$w?3R1sZVqSM~n|{*zMC%NlCF9)96@1${P?VhpU(4vafMI`TE| zt{PNI#u}10nHm@SsQ)02MuqY_t{;^L>DY!&7x&&S5f(0)=NW^t0lOM3-!~j?Cy&dN z<}I@t#$JFg1teA6c+vZG@#W<7sMqPNb{?L-f8RTy{$yVJME*H0lfat%(GkQ5V~L>* ziYuawu`iiY9k6Ew)3$!RQwgJ>#fSFTTk+#sa|Tzk@Co|a7ZHZtP*l7*J^JjlT*Jxy z@ze^KPYu5-#jHIquP_vx|3UF3La5}12|&;(V6Pvdu*fi^QS%3>5iO8NAPc4y8}iZb zrJNL{KIIaQ0#1N#k~@?_A4>1I=N(FeZh}6O5@=MEY8EZx%w$NCyrLPOv44LtMAFni zF67=$RHp;~bp_m`i{}&ZHE31-AcT{vaD>mN+0vNCjxmSjT>v$YJEUYzv<=PxStV@9 zL-8DT0u}2O2%m&C_m$&MM%b#WADNJv(?rjz7&Hr3ByAH4**Z`|$nZJH)-?fwk{fY? zLR<&AxDImFAW2Qoh5|WGXLdiwG${A`*%<n-_;p!F-Cx!LTq%j8A%1-x0@faNfjyp^ zL-ot$eiJ}KDzYW}LxBAu_L;Figt0%`g7pR2ANV>eTCl6?QKbzKO&UC&nV&M8X+&YV z&xIQ*n6BD4P<dsh8yB;Fr9wO7?@8O$&QRKxp|l+<X-iaCXC!GlEtI9hc(JoDOR!pB z#r@0n@_exMI@!P6p{AYk)@51*cXFF?Km6;wciG<?cx>JV97QJqXlgZz!A+xRkcs4H zYSw}+=!_;BP$cs=u|UF$qQ>P5>+dL*ZD0zacH|NvD;FNDqch%41?ak;I2&=JUu)-U z%#EKxLiiD<H%G`YVpM85yA&~E2@MfN*=H2m8^NNJxhUq!F7ArO0xX0kWw7*x_C{1g zO*u5hBybX!?T)ev#_-(#@`7!DJJ|kXKy5?6ZFl>Bbn_iA`Y)rGY4kEmqaB@Mn;`7J zE?a<c@k{Uc`h(o~C)!-FAwadou{mB)o2)sI7!)(4Y|xL<!-gwxTYCrz5DOEIG>%%G zHrq9JTQ~2HTiW{*0h42Pj1Ix;$XDlg%SIE@LIQ?Tt8m+fO8oLNqP6|?`ZTlp)9V2& zQNvfo=k>B;TA|`@0xlU|V)8unGvy~u2YS==+>kjNWu6Oj%Uuw+zdKM-ZS-KWc2bUA z40cb`D%#LXah9$MekXI=5t%Fs=C*WvX31a#GQeEw%Ho6rBqC;5C;+fam!dGnO<mMm zw7-R0R=rh#O`Jqlw2H#S*x{A|fXG^9!WFf-+QNyhRmZ1&tR;Ksa&&&c=~2I3o)V63 zy;usoT9#vmVt9n`4rj(vG<jj&u*8_ilSNw$h_vx~BYf{}#9CreLlP0M;Fj3}nN{!C zw|1w2s*j=-B6m8QNMA|?Qs`^TL$#V1c;u^onl1o|3<prgK$=TC!k}M15_4EholdyR zooSs!=d5~n`srmKWd}*=P0E@Z;_*AMHX<YN=BDsOw=Z%#fykz!s!Y*BF^*MF1zvpK z&`lCf6fh@+!KClnfDZw>S)emYjnUs_=I;I{TJiSUwr*LB$`fYAElwV($XR3*cuSGA zw`B!uEM^O1_ql_q;aqV4DQq~PTm_Ufyp4Hfqzqj0`daDzHq+0A3RKwavkFYqL#{yZ zVNL%C>sKP08sC8yb2nF;seYfD;cz)=1jeAggTa8TAi;aa*IzIxZg}0bSkPzEXVb!? zQlmt*LW$mg2a%zxA-`UAiaRi1%A;#Mv1BiW)g?F~DC^tEMv3|!+sv+ROBpQ&A$(a+ zXENQulrjSgJKZn__!<;+q6Wp9{;C|_V7HgZQTJ4NZ$k#BT~&r7Tz-Z-51wu$dBk7| zsrY}fJ{15Pz%&^;;ubUTDdJA%pQP49xyEi}1eRN*=!W1wm)r4^QI!Cp3$58iw6Z4O zm)n<4N7Zgj8a|Ga;Kg0v|4;#BFQ0eLRal$rY@6p(AHWgcQ#DD@{`U0jJ&I@(pjG=K zjh2@ADi+i^s`@A|i<t^jt2Oz0Ts7ZvIT3I_^SWTKSy-je4G=Js{RKx+G(9$)1l3B% zxFr>}LoXJI9t073L3(dxXOtFsshF>i9z<dIbC7Oa&7>6dOQ7yM$I+X%wrQDsa5k`4 z^ZT7sIOIXTTrs64FOFV93k0Sxf@W)M8Oo;mg+F>pt3a`FUzlnK)=QG2xve?$dwSi& z@tksRw58y5{P)7=$0%J&FuXaq2(8hYOEE~;iAY^|8HLRujtiUGr>7qJE@*CHtOr(l zL_Q|SF)y4&^f=MZ%cj&W<Ot(c`jI#qT^pqaDDRhPS;9xBs!h*K;wJ1QIxZ9ft!gw5 zEIIp#J_p)kIx4?}$$@Bq1xZ(>SrE~%;;b=J$F&ob(H=f!gx~7)%X--b;z^%~&T^%g zCU>Kh#g=*~t;`m*6r4k^>ED<FQPOat!&;cdBIkzEg)mRK=53RLD`Z};W&|xb1_qG_ zE<nQ~Gg1jJZOpl2XPo5t<|z;jdcEae==06BvAHr8*3f`$6{V+GjKrlevX)fD1y{Ie z5jXKlW{jfp&Uh?dB3Cou&zFPLmS3*vT#DlV$#obt{b4t#(fQLeR86FJ6Z24nsMEQP zO=gN(=w6Tl%fO(#N--Y-PN`p!x8&MS(Kj=0dI=tFxo@r7(nMNVQTNM%DGuqz*;b;> zTWxL(MO`b^KR-eItiLx<3~%~d3^FD2_iC%&Y5=-TZ6?Er-}|;p0$61>T&rnTIVbhH z#TPc87#85Fv;v3+CH?}5^%>_Rd3oRVR-~k=-j$ft<7l1bC-C1z)PZ@|q_aUcwk-qu zW;s2haM-(UDu9qT@?UWoK|xA^mxt9YYAq9NK~0H4+}7mBo8n9YPVJ$h!=rtXYcL{h z%-#iF;6&MeX-<@x6V<_%ukjhk?l4pJ^hEwANc<*QR4Bt#fGqJdJ2%|qPTwmgR2p$5 z?+~gOSEIzye;`L-7|+&a)kA!nUP`?(!M_uDbRhX`^;jNp9`p^3Xjx6v9Y~nJA{x&O zh3~PEO0jL&BvTyH<|YNCM1QLtzY`chkfJz>K`hcsTO3OuFLbs2=%?PnQSa<L8UPES z#gF#6v&f~IQZXf9E=S6Y>`oY{@==6&Da}IT46jnGil$msqF0U|k;f2c5BIxPzb>4M zVy3Buy(^Udp{wA_ilhH$S@CYYtN>1g&QGq>Thcqc5!_f!=GF%_`lt?{x%bj|RV`n= z_+%adlYLMnK5+46vXmh!yfDHijC}|b_#VQ`ZzQ6%nKUbu<OmUH?{`T`d>|<?TU)Rq z(#oFxvH)R!Uw|+tKrUp=3}63d9!r!f4D})0_ttzn0ty~;JEcm|GDp4lM&5BnD5myl z6@0bsGU7fg6Ee$$=jXlW*zfI%cZVf7n#wjHegco{s4R+5oo@n_%fvc=o})*rVr!{i zQ^+}2^2pz#$l2;174&i};JbVLuuhJyPs=_dOn>9cVly1BWv45`S(8*)q7+<e!A5Ay znkV0~P<0FX2s{IlVG4mL86??1k_*A@T-u(Jj&~^{D=@^Q{cKk@<=S$l?S5s`6yPN( z8wbScdN)(q6owYb{4K6SxzeuD``E<TX&``%IR!!p&CL8ybX(SgQnkYTo52nH^vz^~ z_XByDZo+pE+_al3x2yn;NO|lbR#M!#ZOkhb;r@l<vGU)deg_2SC;)qN4UmQ*=Q zwZs<yzFd6ki`}ng1{L_xIN_Ak%!`}&+;0wq(id&rx*8h3`VGob>4vhZm3!@f$V3f( z!T9fP-^-S{(eF6h>nPn|>4pjhbR%0wzG}_a7_EjG(Hv^IKev8`r~7u0Mq82Vf`-WZ zXvGh2`O&PO*BkR?UE+6S<u`J0y;tkxn(8p<cD|=>T+m)rNLx$vk49;$8Nkdi>2XCr z6&f~`TjvIJp*4U>q_;dWLRQ-VCBZNYbKgcL4XIrU&@f&dkN(h-s~VcHphr<c(F4SQ zI>UfteqQF7Kf-{JF6D@K)Q2{h%1h!tCi;?{>oj_?xBcRWC|UZ5#ud-_Q5Rglb`lR~ ztrWLPDs(zJFTL6oeAbGeAK-U4UO#>ycs0AavL8xPco9G0pm!=bSJh?2C|-R6VTe3* z$XALb!YLFc`nN8>@!48!lH~PKtgRf0)z2O=ehCPRn_F{qUL^`Q#m*n)@}Z$Xk*fv# zK{c3a@yh1Oq;|#g>NWNv7G70-SYjXb&dyHHx*N*=@M>F(ewtHqO;>)Y??d_#uOt}X zIucs^sN$-Mg-wNjr?dGBR~aPJVy=e@-RRYFX`lVNwIJN~t{w|CB^M?OJ1SfC4JRF8 zooK(|53bYbWv7FgB59nnAJIgr_4f%0evO5$aEJv=4Rs=c&Lcok6A0LT=rB`I&t?5d zYRILK3RcAEQtH(zU?r0E*T&mGNiV|Tw>nA4pPp<%uq%;~%NE^Zj4|`-958@AiDd@w zB)_GPHZ0~Le%=h~=IN<F_^xM*lmxdnn>CotA$nwORSuDydr5u;7wu-TD0N;8!0=08 zQ}UUr`iX9nQhZ3|L3N>+@ziYD^74n*sMk$W2Jb?!tM)s)N|#(YEcW|Ogx8<fxG+OD zYk8LkL3H(Lt5!GvcN#xafsNJIj>fij#rxhTG&zO07)wF_8*!_WUB#)&3*=~7G%03~ zWwQQD3M2nA`;og>KjS#MHrahyH1g@mCTh@>#N5o5ZD~3C-`cLdH*GA7e-+}9I(TB* zw3^u+;d-hxrJG2JIvbMitPoleFu|>3Gscjx#NU0->%MH0w7c5;5zO^{Kh8am-#HZ1 z1s?6%)H9mul;>+W*}&TEusCcS<(i+CxC~5F+>Ih$`@Vctm)Nib!r$Fd{lwP?*eLD8 zK&~HSQ!3&))QzW_CbXHA_w7F|lDk$U_qqPyfoOKd^GLf4f~DnWOjUlZ5uTVm1)Y0) zUMj42Oc&)J7w4yCxxD0s7paq{Fbf_QAca>g({Athiv&IW6T}AQ%Q)+Le;ZtRD5273 zLAr+wc}<)_Ob8sXNx5GA7QHz-g8SX1y#4uzwJ*=KdQSdhiSkidaIJ+1+0b^KpZs=; z39Py7%*;SgE(vf~!~zr#Ej1jjN2aCBZ|Jws2}F2>G3$@4RhrUz!ci$o8peNjIHcXn z7(evMh%0sIh#ol}F))QMh4d=cRga&P5v24&ToFz?j6YH1ui@R~GjtBYRo*=cO8FvN zn5JxA^ZDOcv`KNwco=#>-^^_$*mx5Rp>FcCErOQk^S4#5S@Orn(u7=iheWh*A*5zh z+a2*7liAFcgl?@@tj4h4QhEa}YvOe@5wk6zScTOY#bXfovij*)PI9AiEKb8FEodeB z4y{<0H5bzs$6CQ6!aXC%!_^R0fNzVsb4$B9bF0W9JKm5mjEl)%l#v+NEGCXSrxr)P zW<#?hR*Mz7wmFhJ)RWZ`fo{Z&oO9qbyr<fPBR&0klRr4E7L!?$dzN@axnL98(_t_b zB|FI}n~NIsvLv;tYwJ`HKjMG4920_1CqWl*(mch<iabg(=K;OGTc>5R#3A{+Np#!l z(~^@Le_y%`Irl_1=_qkmd=qf0R;pV5LLmxR*G0UvaTUm;Vw8*p35(|HqL^%9^Ux;& zO&f^_NyS1@jvE&a3Bnd>PI8T6<nQ~7j`DH6u%ri*u|ly@%A~4pO7d%}>QEe3E`w;q zUIr^*h+LzQwV)3FcT*aq<IDRbO+T|$Ar`5yVQP>^5&REiA5p2K+;)BKAis-|%L&Bd z)u)w_N<=FhY^0QW36GT{ELrW&LBK&1$L_l;bUdsb3O7=ba(0zmCxYig5>D=yIB%o@ z4J@39U+L6X?Q26UDH@X2dGN++C6yCoTl4xVsd}|v8B2<*eiE=L3B(Nx^<zu2v0w<} z!^nH#RqzpKQ=od+muDyW9WWpy>iLIW<Q=xWDcU^S2iDExd7<OkuSjHzXTM8=-JOrn zj{3z=M#EC@OG@RTlQM&|w{gHHR?m=Y{0M9F0qq_Cw?2x4N7w14N!-)V<AyA|^G^Th z33u!D#fXY&SAs6>6Jbn%(Amj7ya41K(^P)TE{T2e9M)w{)&=@E_O36_J@V>y#Dhv) z-XiTr0n;?Xaxg=8OVoc96?^G$GN}nvQ)8g(8MlR*uy#apZDR3pQiYBwu_viitdW<i z3EK+rc=wc&OQo%Or3P)SleD7yDy4#+adEX`)0~&KJyG*$lVWnW(tMFXwb_YByVe_6 zG`;-k887ZEHy+&RFRZb*Vk$+HtjknIDk?|Ffxtk-2HwlCjkf<BP&%sg*{U+ABXTRs zoDcv|uNB^)g@I-JtjH-lZ7S?*Ca)fVj)J;zV7azD^oGO2#d~s@ca?+7UTQBC3)?#K zbe~{DARyMVS-*b5W*yd$)KH6oQgf};2dEV@S|0SZf*hI7E@}qg7XE9qFzcS|!i-h| zKEaf#7h2@^P7(NS7x)E9Sc|IolcL1RaS|1Re@7ponjy^!{shbj-7&x88G&6{tO(6X z&di}<!t`NCG^2EisvOurR378`ku8Gx#7R-U!dsX_{pi9cr82##lmVq!TlBIteBzEI z#Qta;ps!{hcew?pa<s!rG_=2v9F{NHBSgf=Wpq^4vT#tIS}yg>QF#Oti0hzQfX8P2 zXIYtlPU3r3cU4Z#Ml(7y$p+3OoLZMrV!6s9VW<qFZ=&~E7N63!rzeV1xLa(epjVR! zp3#4!^2E`sK$b@xu@&CV%xLHJ+j+&jb~aj#bqDb|hkw=vg~4!WIc5?JSgdqFxTmEM zBxrW!wSkDVkBq0?budhp@A+L0Tw~x&-&?g6wWzGsb)gRxj`cu|lq@8u3KkAQ+~{bC zTH)K8p@pXdJ|=9-d*}gYaMn9sm-&E70cS1NK6|@-D7z|rlTu*;L!k{{@Lc!BRE|fi z$%71TQNv;yrBN)}qNmi^H<OtHs$3T-NCBvlcWQR|{4;l*I3#15x~_?<uCKj;EW8fv zsvr*LngkqNbW^`(S9%X!>&)_a)xqmp!e)6j1kN<N?xu7;rfP9vWT^~^;jl_KFY$CP z>9q;}QaKf7gk|H4Of)2C*~b(K2|_R+VI9w8rETS=Go&iCW%ou!jEUt_Z&lIEXF#`c zRBJn|_l53@gd(D$m9^4B6OVSuOs6X|aUzloBoUF)Kpd2%o<b=X?D(Od2QrP*N=HLV z1U0_Wtr5?Fa-4v$aET=iDNn83W}ixWjhMhRm<D+uipd260#hXu&Z32l1-yl?78dXh zv4AP(Tt*+dx4|8M*&-Hj8Spa4N)ScseA>7ac~7lJ-U;hRd+59j_qhi$Nt!Uf|LUQ4 ze}CVjI};8K(}-EvL0?Ir3(@t}$KJ0V(*C)c;<<o7=225{z%D+ZGG1Nk{cW&@xkFci zcxLYU{xVqbA?vU8ssxC`!I)7j(ar)={?1icWf&DZoD~(L9?VKJpQmJ|;K5#|a2`Dn zH3?&Qz$U^qJV^85mfos<g){gn%K~l8Uc8vO=*qOIdQj-f2V)tP&2baW6)XLNu)6or z4RVtBIE2U798xgS3I%*Ii0&!FNhARkzsB2Dck3Jf_9HBHLVI&y?$&pn{}y^V0Qvr% z_(Tp^)`t&Zc($}@hMeOE?{HXE8`}Uf5HA{*2lx%faJ&W)RuB+KBq$HOhN&!)S$vV) zkym`z2@0z2@ngKl*-d|4zsHY7%07?QqvLT17v3f~4$j3B`zqR@F=u18htm3TAnOMp z6D^h+iCSdu4z{>`%GmgFr8Wmn#u>Kx$_UZ@SBULf$B=4E+=w}}bN{|xEjTMvs!fYy zyC?ZPx9DX&OA1(2F5YIG+gqC|s#X5Aisx|ONw?qy-`B9S_E$#*P(P^KFJhce4HB$` zHQOLDdVHLO-)0AMb3qs0{Q4Jv_W+k0hmbMvU@yNp`q@`2Hg#4Er8;}Pm`*zuGn6t? zhp}3<qE}bJ2G>vpGFT~Rp*5mdftXHfaRIgH=mZj1X1m&U<3w#va<m3ww-Rk947z~N zcgWMArVr{EQW9Zn<80=>8$be?z>PI;O3>Q11+AS1X|NIqN{PW`Uc3O7gr0o#7=up? znWbEiRWBQ1wIp9CdL4@NgMA|h(6}6`PF<p-6Zx{%6IF=-D$8bmm6=#c(`J;!eN&A3 z2Nb)SA*ys0ej|>fsmu-w?;y!2NQv4~l_G`a<V{wKXjrw-gx)ch>|xP%@?d2kO3~ns zzAB^Z9$WYKkGV02&kUOs2WH^8vZqfT9~XSKftTOF#{lm4aLsNn4eKl_?&BHCj{;w? z47Amsczk6TYrl=Ss(E6)#*<Si{Y?cTynbn^KJX^C0K-Y(yp`)Kp<QQ54C*q#-6mZ1 z6^wCF<o6g|P+C#CnOYlhV7*g;Kf5}Jh*iBJOwxqL%z26wb%sRvI+USv0^AlxLN*lf z(Cf^BU4_JXg|x4I6#PRJ^+sYUp$7#*7i_TY?pCvsC40NrQLG*xQ(WoN-Y%Mvy7C+E z%rzP&%&RxOBz$So>Tsi8dr5#=m?gnl>--(x2Uc;Lznf88U%MlMQ4<9MX_Wxy8Op7| z{olf};BPxjZt?;hd~L}1ris5VUB$lX2QnnES~%lXpyK}esO^XOWk`hP<=F223C}<p zY<(sRA4^oR8rXiRLCiY=+gZQ(U`eQqqiNi0PG&3S3FNhdHn#nW1RI6}6IiKM7b+gy ztaW|ezQ!fkhw&^BVf!Phi$RvbK|7j`f0OD>l+%>Ug8i2qE3rlSL?#Feo;ezeV~fHT z13T&|un30edP1wM!N45^|9a}QP-mzHjM%Rj?ULARiM&t}I90mzSyWDT)U$snumBR% z0@$xD0i+HD_D{0fPDkh`vqQr#@WZDIk>SqCkD>-x{Ze*abXNP1t|$nnPpzN;BtZv{ zXJ26OS&6W>t`+Vp@ZQp|q5Rfq{d?&hS}oc?<#Ool^5tZTrq-j7c5OnUQb$rdz&GBl zIx)x;y(9~(=j*o-A3!3%sp;3>UGM);?b}y8RSrh|{Zm-jAK@5HMuZt*3?(=0jeqn- z86vxCi+q4UoSyoXjDMKc-b+Xn^lFv?!O2sPw0qpx$5=M}qJUG}UHU->4zgK~tQqVO w)XKt3o-OkwUS1Ysto>#%8KK1VKtIsr@1`7^M~lm!Dq@2E181AQ{|ssX0LdKZ8vp<R literal 8963 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 diff --git a/src/htmx.js b/src/htmx.js index 1e2d6f67..a337a907 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -700,7 +700,7 @@ return (function () { if (tokens[0] === '[') { tokens.shift(); var bracketCount = 1; - var conditionalSource = "(function(" + paramName + "){ return ("; + var conditionalSource = " return (function(" + paramName + "){ return ("; var last = null; while (tokens.length > 0) { var token = tokens[0]; @@ -713,7 +713,7 @@ return (function () { tokens.shift(); conditionalSource += ")})"; try { - var conditionFunction = eval(conditionalSource); + var conditionFunction = Function(conditionalSource)(); conditionFunction.source = conditionalSource; return conditionFunction; } catch (e) { @@ -1719,13 +1719,20 @@ return (function () { } } - function getExpressionVars(elt, expressionVars = []) { + function getValuesForElement(elt, attr, strToValues, expressionVars) { + if (expressionVars == null) { + expressionVars = {}; + } if (elt == null) { return expressionVars; } - var attributeValue = getAttributeValue(elt, "hx-vars"); + var attributeValue = getAttributeValue(elt, attr); if (attributeValue) { - var varsValues = eval("({" + attributeValue + "})"); + var str = attributeValue.trim(); + if (str.indexOf('{') !== 0) { + str = "{" + str + "}"; + } + var varsValues = strToValues(str); for (var key in varsValues) { if (varsValues.hasOwnProperty(key)) { if (expressionVars[key] == null) { @@ -1734,7 +1741,23 @@ return (function () { } } } - return getExpressionVars(parentElt(elt), expressionVars); + return getValuesForElement(parentElt(elt), attr, strToValues, expressionVars); + } + + function getHXVarsForElement(elt, expressionVars) { + return getValuesForElement(elt, "hx-vars", function(valueStr){ + return Function("return (" + valueStr + ")")() + }, expressionVars); + } + + function getHXValsForElement(elt, expressionVars) { + return getValuesForElement(elt, "hx-vals", function(valueStr){ + return JSON.parse(valueStr); + }, expressionVars); + } + + function getExpressionVars(elt) { + return mergeObjects(getHXVarsForElement(elt), getHXValsForElement(elt)); } function safelySetHeaderValue(xhr, header, headerValue) { diff --git a/test/attributes/hx-vals.js b/test/attributes/hx-vals.js new file mode 100644 index 00000000..1cdc1482 --- /dev/null +++ b/test/attributes/hx-vals.js @@ -0,0 +1,87 @@ +describe("hx-vals attribute", function() { + beforeEach(function () { + this.server = makeServer(); + clearWorkArea(); + }); + afterEach(function () { + this.server.restore(); + clearWorkArea(); + }); + + it('basic hx-vals works', function () { + this.server.respondWith("POST", "/vars", function (xhr) { + var params = getParameters(xhr); + params['i1'].should.equal("test"); + xhr.respond(200, {}, "Clicked!") + }); + var div = make("<div hx-post='/vars' hx-vals='\"i1\":\"test\"'></div>") + div.click(); + this.server.respond(); + div.innerHTML.should.equal("Clicked!"); + }); + + it('multiple hx-vals works', function () { + this.server.respondWith("POST", "/vars", function (xhr) { + var params = getParameters(xhr); + params['v1'].should.equal("test"); + params['v2'].should.equal("42"); + xhr.respond(200, {}, "Clicked!") + }); + var div = make("<div hx-post='/vars' hx-vals='\"v1\":\"test\", \"v2\":42'></div>") + div.click(); + this.server.respond(); + div.innerHTML.should.equal("Clicked!"); + }); + + it('hx-vals can be on parents', function () { + this.server.respondWith("POST", "/vars", function (xhr) { + var params = getParameters(xhr); + params['i1'].should.equal("test"); + xhr.respond(200, {}, "Clicked!") + }); + make("<div hx-vals='\"i1\":\"test\"'><div id='d1' hx-post='/vars'></div></div>"); + var div = byId("d1"); + div.click(); + this.server.respond(); + div.innerHTML.should.equal("Clicked!"); + }); + + it('hx-vals can override parents', function () { + this.server.respondWith("POST", "/vars", function (xhr) { + var params = getParameters(xhr); + params['i1'].should.equal("best"); + xhr.respond(200, {}, "Clicked!") + }); + make("<div hx-vals='\"i1\":\"test\"'><div id='d1' hx-vals='\"i1\":\"best\"' hx-post='/vars'></div></div>"); + var div = byId("d1"); + div.click(); + this.server.respond(); + div.innerHTML.should.equal("Clicked!"); + }); + + it('hx-vals overrides inputs', function () { + this.server.respondWith("POST", "/include", function (xhr) { + var params = getParameters(xhr); + params['i1'].should.equal("best"); + xhr.respond(200, {}, "Clicked!") + }); + var div = make("<div hx-target='this'><input hx-post='/include' hx-vals='\"i1\":\"best\"' hx-trigger='click' id='i1' name='i1' value='test'/></div>") + var input = byId("i1") + input.click(); + this.server.respond(); + div.innerHTML.should.equal("Clicked!"); + }); + + it('hx-vals overrides hx-vars', function () { + this.server.respondWith("POST", "/vars", function (xhr) { + var params = getParameters(xhr); + params['i1'].should.equal("test"); + xhr.respond(200, {}, "Clicked!") + }); + var div = make("<div hx-post='/vars' hx-vals='\"i1\":\"test\"' hx-vars='\"i1\":\"best\"'></div>") + div.click(); + this.server.respond(); + div.innerHTML.should.equal("Clicked!"); + }); + +}); \ No newline at end of file diff --git a/test/attributes/hx-vars.js b/test/attributes/hx-vars.js index 37c4de2b..dbb6b609 100644 --- a/test/attributes/hx-vars.js +++ b/test/attributes/hx-vars.js @@ -59,7 +59,7 @@ describe("hx-vars attribute", function() { div.innerHTML.should.equal("Clicked!"); }); - it('hx-vars override inputs', function () { + it('hx-vars overrides inputs', function () { this.server.respondWith("POST", "/include", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("best"); diff --git a/test/index.html b/test/index.html index 053eff8a..9aa54739 100644 --- a/test/index.html +++ b/test/index.html @@ -97,6 +97,7 @@ <script src="attributes/hx-swap.js"></script> <script src="attributes/hx-target.js"></script> <script src="attributes/hx-trigger.js"></script> +<script src="attributes/hx-vals.js"></script> <script src="attributes/hx-vars.js"></script> <script src="attributes/hx-ws.js"></script>