mirror of
https://github.com/bigskysoftware/htmx.git
synced 2026-04-20 23:47:03 +00:00
1 line
32 KiB
JavaScript
1 line
32 KiB
JavaScript
var htmx=(()=>{class e{#e=null;#t=[];issue(e,t){return this.#e?"replace"===t?(this.#t.map(e=>e.status="dropped"),this.#t=[],this.#e&&this.#e.abort(),!0):("queue all"===t?(this.#t.push(e),e.status="queued"):"drop"===t?e.status="dropped":"queue last"===t?(this.#t.map(e=>e.status="dropped"),this.#t=[e],e.status="queued"):0===this.#t.length?(this.#t.push(e),e.status="queued"):e.status="dropped",!1):(this.#e=e,!0)}finish(){this.#e=null}next(){return this.#t.shift()}abort(){this.#e?.abort?.()}more(){return this.#t?.length}}return new class{#i=new Map;#r="";#s=new Set;#n;#a;#o="a,form";#l=["get","post","put","patch","delete"];#h;#u;#c;constructor(){this.#d(),this.#f(),this.#a=`[${this.#p("hx-action")}],[${this.#p("hx-get")}],[${this.#p("hx-post")}],[${this.#p("hx-put")}],[${this.#p("hx-patch")}],[${this.#p("hx-delete")}]`,this.#h=(new XPathEvaluator).createExpression(`.//*[@*[ starts-with(name(), "${this.#p("hx-on")}")]]`),this.#n={attributeValue:this.#m.bind(this),parseTriggerSpecs:this.#g.bind(this),determineMethodAndAction:this.#x.bind(this),createRequestContext:this.#b.bind(this),collectFormData:this.#y.bind(this),handleHxVals:this.#v.bind(this)},document.addEventListener("DOMContentLoaded",()=>{this.#S(),this.process(document.body)})}#d(){this.config={version:"4.0.0-alpha2",logAll:!1,prefix:"",transitions:!0,history:!0,historyReload:!1,mode:"same-origin",defaultSwap:"innerHTML",indicatorClass:"htmx-indicator",requestClass:"htmx-request",includeIndicatorCSS:!0,defaultTimeout:6e4,extensions:"",streams:{mode:"once",maxRetries:1/0,initialDelay:500,maxDelay:3e4,pauseHidden:!1},morphIgnore:["data-htmx-powered"],noSwap:[204,304],implicitInheritance:!1};let e=document.querySelector('meta[name="htmx:config"]');if(e){let t=JSON.parse(e.content);for(let e in t){let i=t[e];i&&"object"==typeof i&&!Array.isArray(i)&&this.config[e]?Object.assign(this.config[e],i):this.config[e]=i}}this.#r=this.config.extensions}#f(){if(!1!==this.config.includeIndicatorCSS){let e="";this.config.inlineStyleNonce&&(e=` nonce="${this.config.inlineStyleNonce}"`);let t=this.config.indicatorClass,i=this.config.requestClass;document.head.insertAdjacentHTML("beforeend",`<style${e}>.${t}{opacity:0;visibility: hidden} .${i} .${t}, .${i}.${t}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}</style>`)}}defineExtension(e,t){return!(this.#r&&!this.#r.split(/,\s*/).includes(e))&&(!this.#s.has(e)&&(this.#s.add(e),t.init&&t.init(this.#n),void Object.entries(t).forEach(([e,t])=>{this.#i.get(e)?.push(t)||this.#i.set(e,[t])})))}#E(e){return!e.closest||null!=e.closest(`[${this.#p("hx-ignore")}]`)}#p(e){return this.config.prefix?e.replace("hx-",this.config.prefix):e}#w(e,t){let i=[...e.querySelectorAll(t)];return e.matches?.(t)&&i.unshift(e),i}#A(e){return"before"===e?"beforebegin":"after"===e?"afterend":"prepend"===e?"afterbegin":"append"===e?"beforeend":e}#m(e,t,i,r){let s=(t=this.#p(t))+this.#q(":append"),n=t+(this.config.implicitInheritance?"":this.#q(":inherited")),a=t+this.#q(":inherited:append");if(e.hasAttribute(t))return r?e:e.getAttribute(t);if(e.hasAttribute(n))return r?e:e.getAttribute(n);if(e.hasAttribute(s)||e.hasAttribute(a)){let i=e.getAttribute(s)||e.getAttribute(a),o=e.parentNode?.closest?.(`[${CSS.escape(n)}],[${CSS.escape(a)}]`);if(o){let e=this.#m(o,t,void 0,r);return r?e:e?e+","+i:i}return r?e:i}let o=e.parentNode?.closest?.(`[${CSS.escape(n)}],[${CSS.escape(a)}]`);if(o){let i=this.#m(o,t,void 0,r);return!r&&i&&this.config.implicitInheritance&&this.#C(e,"htmx:after:implicitInheritance",{elt:e,parent:o}),i}return r?e:i}#T(e){let t=[],i=0;for(;i<e.length;){let r=e[i];if('"'===r||"'"===r){let s=r,n=r;for(i++;i<e.length;)if(r=e[i],n+=r,i++,"\\"===r&&i<e.length)n+=e[i],i++;else if(r===s)break;t.push(n)}else if(/\s/.test(r))for(;i<e.length&&/\s/.test(e[i]);)i++;else if(":"===r||","===r)t.push(r),i++;else{let r="";for(;i<e.length&&!/[\s"':,]/.test(e[i]);)r+=e[i++];t.push(r)}}return t}#g(e){let t=[],i=null,r=this.#T(e);for(let e=0;e<r.length;e++){let s=r[e];if(","===s)i=null;else if(i)":"===r[e+1]?i[s]=r[e+=2]:i[s]=!0;else{for(;s.includes("[")&&!s.includes("]")&&e+1<r.length;)s+=r[++e];if(s.includes("[")&&!s.includes("]"))throw"unterminated:"+s;i={name:s},t.push(i)}}return t}#x(e,t){if(this.#N(e))return this.#M(e,t);{let t=this.#m(e,"hx-method")||"GET",i=this.#m(e,"hx-action");if(!i)for(let r of this.#l){let s=this.#m(e,"hx-"+r);if(s){i=s,t=r;break}}return t=t.toUpperCase(),{action:i,method:t}}}#M(e,t){if(e.matches("a"))return{action:e.getAttribute("href"),method:"GET"};return{action:t.submitter?.getAttribute?.("formAction")||e.getAttribute("action"),method:t.submitter?.getAttribute?.("formMethod")||e.getAttribute("method")||"GET"}}#H(e){this.#I(e)&&this.#O(e,"htmx:before:init",{},!0)&&(e._htmx={eventHandler:this.#k(e)},e.setAttribute("data-htmx-powered","true"),this.#L(e),this.#V(e),this.#R(e),this.#O(e,"htmx:after:init",{},!0),this.#O(e,"load",{},!1))}#k(e){return async t=>{try{let i=this.#b(e,t);await this.#D(i)}catch(e){console.error(e)}}}#b(e,t){let{action:i,method:r}=this.#x(e,t),s={sourceElement:e,sourceEvent:t,status:"created",select:this.#m(e,"hx-select"),selectOOB:this.#m(e,"hx-select-oob"),target:this.#m(e,"hx-target"),swap:this.#m(e,"hx-swap",this.config.defaultSwap),push:this.#m(e,"hx-push-url"),replace:this.#m(e,"hx-replace-url"),transition:this.config.transitions,request:{validate:"true"===this.#m(e,"hx-validate",e.matches("form")?"true":"false"),action:i,method:r,headers:this.#_(e)}},n=this.#m(e,"hx-config");if(n){let t=JSON.parse(n),i=s.request;for(let e in t)if(e.startsWith("+")){let r=e.substring(1);i[r]&&"object"==typeof i[r]?Object.assign(i[r],t[e]):i[r]=t[e]}else i[e]=t[e];i.etag&&(e._htmx||={},e._htmx.etag||=i.etag)}return e._htmx?.etag&&(s.request.headers["If-none-match"]=e._htmx.etag),s}#_(e){let t={"HX-Request":"true",Accept:"text/html, text/event-stream"};this.#N(e)&&(t["HX-Boosted"]="true");let i=this.#m(e,"hx-headers");return i&&Object.assign(t,JSON.parse(i)),t}#j(e,t){return t instanceof Element?t:"this"===t?this.#m(e,"hx-target",void 0,!0):null!=t?this.find(e,t):this.#N(e)?document.body:e}#N(e){return e?._htmx?.boosted}async#D(e){let t=e.sourceElement,i=e.sourceEvent;if(!t.isConnected)return;if(this.#B(i))return;this.#z(i)&&i.preventDefault(),e.target=this.#j(t,e.target);let r=t.form||t.closest("form"),s=this.#y(t,r,i.submitter);if(this.#v(t,s),e.values)for(let t in e.values)s.delete(t),s.append(t,e.values[t]);let n=new AbortController,a=e.request.action.replace?.(/#.*$/,"");if(Object.assign(e.request,{originalAction:e.request.action,action:a,form:r,submitter:i.submitter,abort:n.abort.bind(n),body:s,credentials:"same-origin",signal:n.signal,mode:this.config.mode}),!this.#O(t,"htmx:config:request",{ctx:e}))return;if(!this.#l.includes(e.request.method.toLowerCase()))return;if(e.request.validate&&e.request.form&&!e.request.form.reportValidity())return;let o=this.#$(e.request.action);if(o){let t=Object.fromEntries(e.request.body);return void await this.#P(e.sourceElement,t,o,!1)}if(/GET|DELETE/.test(e.request.method)){let t=new URLSearchParams(e.request.body);t.size&&(e.request.action+=(/\?/.test(e.request.action)?"&":"?")+t),e.request.body=null}else"multipart/form-data"!==this.#m(t,"hx-encoding")&&(e.request.body=new URLSearchParams(e.request.body));await this.#F(e)}async#F(e){let t=e.sourceElement,i=this.#W(t),r=this.#Q(t);if(!r.issue(e,i))return;e.status="issuing",this.#U(e);let s=this.#m(t,"hx-indicator"),n=this.#J(t,s),a=this.#m(t,"hx-disable"),o=this.#G(t,a);try{let i=this.#m(t,"hx-confirm");if(i){let e=this.#$(i);if(e){if(!await this.#P(t,{},e,!0))return}else if(!window.confirm(i))return}if(e.fetch||=window.fetch.bind(window),!this.#O(t,"htmx:before:request",{ctx:e}))return;let r=await e.fetch(e.request.action,e.request);if(e.response={raw:r,status:r.status,headers:r.headers},this.#K(e),e.isSSE=r.headers.get("Content-Type")?.includes("text/event-stream"),e.isSSE||(e.text=await r.text()),!this.#O(t,"htmx:after:request",{ctx:e}))return;if(this.#X(e))return;let s=r.headers.get("Content-Type")?.includes("text/event-stream");s?await this.#Y(e,t,r):"issuing"===e.status&&(e.hx.retarget&&(e.target=this.#j(t,e.hx.retarget)),e.hx.reswap&&(e.swap=e.hx.reswap),e.hx.reselect&&(e.select=e.hx.reselect),e.status="response received",this.#Z(e),await this.swap(e),e.status="swapped")}catch(i){e.status="error: "+i,this.#O(t,"htmx:error",{ctx:e,error:i})}finally{this.#ee(n),this.#te(o),this.#O(t,"htmx:finally:request",{ctx:e}),r.finish(),r.more()&&this.#F(r.next())}}#K(e){e.hx={};for(let[t,i]of e.response.raw.headers)t.toLowerCase().startsWith("hx-")&&(e.hx[t.slice(3).toLowerCase().replace(/-/g,"")]=i)}#X(e){if(e.hx.trigger&&this.#ie(e.hx.trigger,e.sourceElement),"true"===e.hx.refresh)return location.reload(),!0;if(e.hx.redirect)return location.href=e.hx.redirect,!0;if(e.hx.location){let t=e.hx.location,i={};return"{"===t[0]&&(i=JSON.parse(t),t=i.path,delete i.path),i.push=i.push||"true",this.ajax("GET",t,i),!0}e.response?.headers?.get?.("Etag")&&(e.sourceElement._htmx||={},e.sourceElement._htmx.etag=e.response.headers.get("Etag"))}async#Y(e,t,i){let r=t._htmx?.streamConfig||{...this.config.streams},s=()=>new Promise(e=>{let t=()=>!document.hidden&&(document.removeEventListener("visibilitychange",t),e());document.addEventListener("visibilitychange",t)}),n=null,a=0,o=i;for(;t.isConnected;){if(a>0){if("continuous"!==r.mode||a>r.maxRetries)break;if(r.pauseHidden&&document.hidden&&(await s(),!t.isConnected))break;let i={attempt:a,delay:Math.min(r.initialDelay*Math.pow(2,a-1),r.maxDelay),lastEventId:n,cancelled:!1};if(e.status="reconnecting to stream",!this.#O(t,"htmx:before:sse:reconnect",{ctx:e,reconnect:i})||i.cancelled)break;if(await new Promise(e=>setTimeout(e,i.delay)),!t.isConnected)break;try{n&&((e.request.headers=e.request.headers||{})["Last-Event-ID"]=n),o=await fetch(e.request.action,e.request)}catch(i){e.status="stream error",this.#O(t,"htmx:error",{ctx:e,error:i}),a++;continue}}if(!this.#O(t,"htmx:before:sse:stream",{ctx:e}))break;e.status="streaming",a=0;try{for await(const i of this.#re(o)){if(!t.isConnected)break;if(r.pauseHidden&&document.hidden&&(await s(),!t.isConnected))break;let a={data:i.data,event:i.event,id:i.id,cancelled:!1};this.#O(t,"htmx:before:sse:message",{ctx:e,message:a})&&!a.cancelled&&(i.id&&(n=i.id),i.event?(this.#O(t,i.event,{data:i.data,id:i.id}),this.#O(t,"htmx:after:sse:message",{ctx:e,message:a})):(e.text=i.data,e.status="stream message received",e.response.cancelled||(await this.swap(e),e.status="swapped"),this.#O(t,"htmx:after:sse:message",{ctx:e,message:a})))}}catch(i){e.status="stream error",this.#O(t,"htmx:error",{ctx:e,error:i})}if(!t.isConnected)break;this.#O(t,"htmx:after:sse:stream",{ctx:e}),a++}}async*#re(e){let t=e.body.getReader(),i=new TextDecoder,r="",s={data:"",event:"",id:"",retry:null};try{for(;;){let{done:e,value:n}=await t.read();if(e)break;r+=i.decode(n,{stream:!0});let a=r.split("\n");r=a.pop()||"";for(let e of a){if(!e||"\r"===e){s.data&&(yield s,s={data:"",event:"",id:"",retry:null});continue}let t=e.indexOf(":");if(t<=0)continue;let i=e.slice(0,t),r=e.slice(t+1).trimStart();if("data"===i)s.data+=(s.data?"\n":"")+r;else if("event"===i)s.event=r;else if("id"===i)s.id=r;else if("retry"===i){let e=parseInt(r,10);isNaN(e)||(s.retry=e)}}}}finally{t.releaseLock()}}#U(e){let t;t=e.request.timeout?"string"==typeof e.request.timeout?this.parseInterval(e.request.timeout):e.request.timeout:this.config.defaultTimeout,e.requestTimeout=setTimeout(()=>e.abort?.(),t)}#W(e){let t=this.#m(e,"hx-sync");return t?.split(":")[1]||"queue first"}#Q(t){let i=this.#m(t,"hx-sync"),r=t;if(i&&i.includes(":")){let e=i.split(":")[0];r=this.#se(e)}return r._htmxRequestQueue||=new e}#B(e){return"click"===e.type&&(e.ctrlKey||e.metaKey||e.shiftKey)}#z(e){let t=e.currentTarget;if("submit"===e.type&&"FORM"===t?.tagName)return!0;if(!("click"===e.type&&0===e.button))return!1;let i=t?.closest?.('button, input[type="submit"], input[type="image"]'),r=i?.form||i?.closest("form");if(i&&!i.disabled&&r&&("submit"===i.type||"image"===i.type||!i.type&&"BUTTON"===i.tagName))return!0;let s=t?.closest?.("a");if(!s||!s.href)return!1;let n=s.getAttribute("href");return!(n&&n.startsWith("#")&&n.length>1)}#L(e,t=e._htmx.eventHandler){let i=this.#m(e,"hx-trigger");i||(i=e.matches("form")?"submit":e.matches("input:not([type=button]),select,textarea")?"change":"click"),e._htmx.triggerSpecs=this.#g(i),e._htmx.listeners=[];for(let i of e._htmx.triggerSpecs){i.handler=t,i.listeners=[],i.values={};let[r,s]=this.#ne(i.name);if(i.once){let e=i.handler;i.handler=t=>{e(t);for(let e of i.listeners)e.fromElt.removeEventListener(e.eventName,e.handler)}}if("intersect"===r||"revealed"===r){let t={};i.opts?.root&&(t.root=this.#se(e,i.opts.root)),i.opts?.threshold&&(t.threshold=parseFloat(i.opts.threshold));let s="revealed"===r;i.observer=new IntersectionObserver(t=>{for(let r=0;r<t.length;r++){if(t[r].isIntersecting){this.trigger(e,"intersect",{},!1),s&&i.observer.disconnect();break}}},t),r="intersect",i.observer.observe(e)}if(i.delay){let e=i.handler;i.handler=t=>{clearTimeout(i.timeout),i.timeout=setTimeout(()=>e(t),this.parseInterval(i.delay))}}if(i.throttle){let e=i.handler;i.handler=t=>{i.throttled?i.throttledEvent=t:(i.throttled=!0,e(t),i.throttleTimeout=setTimeout(()=>{if(i.throttled=!1,i.throttledEvent){let e=i.throttledEvent;i.throttledEvent=null,i.handler(e)}},this.parseInterval(i.throttle)))}}if(i.target){let e=i.handler;i.handler=t=>{t.target?.matches?.(i.target)&&e(t)}}if("every"===r){let t=Object.keys(i).find(e=>"name"!==e);i.interval=setInterval(()=>{e.isConnected?this.#O(e,"every",{},!1):clearInterval(i.interval)},this.parseInterval(t))}if(s){let t=i.handler;i.handler=i=>{this.#z(i)&&i.preventDefault(),this.#ae(e,i,s)&&t(i)}}let n=[e];if(i.from&&(n=this.#oe(e,i.from)),i.consume){let e=i.handler;i.handler=t=>{t.stopPropagation(),e(t)}}if(i.changed){let e=i.handler;i.handler=t=>{let r=!1;for(let e of n)i.values[e]!==e.value&&(r=!0,i.values[e]=e.value);r&&e(t)}}for(let t of n){let s={fromElt:t,eventName:r,handler:i.handler};e._htmx.listeners.push(s),i.listeners.push(s),t.addEventListener(r,i.handler)}}}#V(e){let t=this.#m(e,"hx-stream");if(!t)return;let i={...this.config.streams},r=this.#T(t);for(let e=0;e<r.length;e++){let t=r[e];if("once"===t||"continuous"===t)i.mode=t;else if("pauseHidden"===t)i.pauseHidden=!0;else if(":"===r[e+1]){let s=t,n=r[e+2];"mode"===s?i.mode=n:"maxRetries"===s?i.maxRetries=parseInt(n):"initialDelay"===s?i.initialDelay=this.parseInterval(n):"maxDelay"===s?i.maxDelay=this.parseInterval(n):"pauseHidden"===s&&(i.pauseHidden="true"===n),e+=2}}e._htmx||(e._htmx={}),e._htmx.streamConfig=i}#ne(e){let t=e.match(/^([^\[]*)\[([^\]]*)]/);return t?[t[1],t[2]]:[e,null]}#ie(e,t){if("{"===e[0]){let i=JSON.parse(e);for(let e in i){let r=i[e];r?.target&&(t=this.find(r.target)||t),this.trigger(t,e,"object"==typeof r?r:{value:r})}}else e.split(",").forEach(e=>this.trigger(t,e.trim(),{}))}#le(e){let t={},i=Object.getPrototypeOf(this);for(let r of Object.getOwnPropertyNames(i))"constructor"!==r&&"function"==typeof this[r]&&(["find","findAll"].includes(r)?t[r]=(t,i)=>void 0===i?this[r](e,t):this[r](t,i):t[r]=this[r].bind(this));return t}async#P(e,t,i,r=!0){let s={};Object.assign(s,this.#le(e)),Object.assign(s,t);let n=Object.keys(s),a=Object.values(s),o=new(0,Object.getPrototypeOf(async function(){}).constructor)(...n,r?`return (${i})`:i);return await o.call(e,...a)}#ae(e,t,i){let r={};Object.assign(r,this.#le(e));for(let e in t)r[e]=t[e];let s=Object.keys(r),n=Object.values(r);return new Function(...s,`return (${i})`).call(e,...n)}process(e){if(!e||this.#E(e))return;if(!this.#O(e,"htmx:before:process"))return;for(let t of this.#w(e,this.#a))this.#H(t);for(let t of this.#w(e,this.#o))this.#he(t);this.#ue(e);let t=this.#h.evaluate(e),i=null;for(;i=t.iterateNext();)this.#ue(i);this.#O(e,"htmx:after:process")}#he(e){"true"===this.#m(e,"hx-boost")&&this.#ce(e)&&(e._htmx={eventHandler:this.#k(e),requests:[],boosted:!0},e.setAttribute("data-htmx-powered","true"),e.matches("a")&&!e.hasAttribute("target")?e.addEventListener("click",t=>{e._htmx.eventHandler(t)}):e.addEventListener("submit",t=>{e._htmx.eventHandler(t)}),this.#O(e,"htmx:after:init",{},!0))}#ce(e){if(this.#I(e))if("A"===e.tagName){if(""===e.target||"_self"===e.target)return!e.getAttribute("href")?.startsWith?.("#")&&this.#de(e.href)}else if("FORM"===e.tagName)return"dialog"!==e.method&&this.#de(e.action)}#de(e){try{return new URL(e,window.location.href).origin===window.location.origin}catch(e){return!1}}#I(e){return!e._htmx&&!this.#E(e)}#fe(e){if(e._htmx){this.#O(e,"htmx:before:cleanup"),e._htmx.interval&&clearInterval(e._htmx.interval);for(let t of e._htmx.triggerSpecs||[])t.interval&&clearInterval(t.interval),t.timeout&&clearTimeout(t.timeout);for(let t of e._htmx.listeners||[])t.fromElt.removeEventListener(t.eventName,t.handler);this.#O(e,"htmx:after:cleanup")}for(let t of e.querySelectorAll("[data-htmx-powered]"))this.#fe(t)}#pe(e){let t=document.createElement("div");t.style.display="none",document.body.appendChild(t);let i=e.querySelectorAll?.(`[${this.#p("hx-preserve")}]`)||[];for(let e of i){let i=document.getElementById(e.id);t.moveBefore?t.moveBefore(i,null):t.appendChild(i)}return t}#me(e){for(let t of e.children){let e=document.getElementById(t.id);e.parentNode.moveBefore?e.parentNode.moveBefore(t,e):e.replaceWith(t),this.#fe(e),e.remove()}e.remove()}#ge(e){return Document.parseHTMLUnsafe?.(e)||(new DOMParser).parseFromString(e,"text/html")}#xe(e){let t=e.replace(/<hx-partial(\s+|>)/gi,"<template partial$1").replace(/<\/hx-partial>/gi,"</template>"),i="";t=t.replace(/<title[^>]*>[\s\S]*?<\/title>/i,e=>(i=this.#ge(e).title,""));let r,s,n=t.replace(/<head(\s[^>]*)?>[\s\S]*?<\/head>/i,""),a=n.match(/<([a-z][^\/>\x20\t\r\n\f]*)/i)?.[1]?.toLowerCase();return"html"===a?(r=this.#ge(t),s=r.body):"body"===a?(r=this.#ge(n),s=r.body):(r=this.#ge(`<template>${n}</template>`),s=r.querySelector("template").content),this.#be(s),{fragment:s,title:i}}#ye(e,t,i,r){let s=t.id?"#"+CSS.escape(t.id):null;"true"!==i&&i&&!i.includes(" ")&&([i,s=s]=i.split(/:(.*)/)),"true"!==i&&i||(i="outerHTML");let n=this.#ve(i);if(s=n.target||s,n.strip??=!n.style.startsWith("outer"),!s)return;let a=document.createDocumentFragment();a.append(t),e.push({type:"oob",fragment:a,target:s,swapSpec:n,sourceElement:r})}#Se(e,t,i){let r=[];if(i)for(let s of i.split(",")){let[i,n="true"]=s.split(/:(.*)/);for(let s of e.querySelectorAll(i))this.#ye(r,s,n,t)}for(let i of e.querySelectorAll(`[${this.#p("hx-swap-oob")}]`)){let e=i.getAttribute(this.#p("hx-swap-oob"));i.removeAttribute(this.#p("hx-swap-oob")),this.#ye(r,i,e,t)}return r}#Ee(e,t,i){t?t.before(...i.childNodes):e.append(...i.childNodes)}#ve(e){let t=this.#T(e),i={style:":"===t[1]?this.config.defaultSwap:t[0]||this.config.defaultSwap};i.style=this.#A(i.style);for(let e=":"===t[1]?0:1;e<t.length;e++)if(":"===t[e+1]){let r=t[e],s=t[e+=2];if("swap"===r)i.swapDelay=this.parseInterval(s);else if("transition"===r||"ignoreTitle"===r||"strip"===r)i[r]="true"===s;else if("focus-scroll"===r)i.focusScroll="true"===s;else if("scroll"===r||"show"===r){let n=[s];for(;":"===t[e+1];)n.push(t[e+2]),e+=2;i[r]=1===n.length?n[0]:n.pop(),n.length>1&&(i[r+"Target"]=n.join(":"))}else if("target"===r){let n=[s];for(;e+1<t.length&&":"!==t[e+1]&&":"!==t[e+2];)n.push(t[e+1]),e++;i[r]=n.join(" ")}}return i}#we(e,t){let i=[];for(let r of e.querySelectorAll("template[partial]")){let e=this.#ve(r.getAttribute(this.#p("hx-swap"))||this.config.defaultSwap);i.push({type:"partial",fragment:r.content.cloneNode(!0),target:r.getAttribute(this.#p("hx-target")),swapSpec:e,sourceElement:t}),r.remove()}return i}#Ae(e){let t=this.find(e,"[autofocus]");t?.focus?.()}#qe(e){if(e.swapSpec.scroll){let t,[i,r]=e.swapSpec.scroll.split(":");r?t=this.#se(i):(t=e.target,r=i),"top"===r?t.scrollTop=0:"bottom"===r&&(t.scrollTop=t.scrollHeight)}if(e.swapSpec.show){let t,[i,r]=e.swapSpec.show.split(":");r?t=this.#se(i):(t=e.target,r=i),t.scrollIntoView("top"===r)}}#Ce(e){let t=e.request?.originalAction?.split("#")[1];t&&document.getElementById(t)?.scrollIntoView({block:"start",behavior:"auto"})}#be(e){let t=this.#w(e,"script");for(let e of t){let t=document.createElement("script");for(let i of e.attributes)t.setAttribute(i.name,i.value);this.config.inlineScriptNonce&&(t.nonce=this.config.inlineScriptNonce),t.textContent=e.textContent,e.replaceWith(t)}}async swap(e){this.#Te(e);let{fragment:t,title:i}=this.#xe(e.text);e.title=i;let r=[],s=this.#Se(t,e.sourceElement,e.selectOOB),n=this.#we(t,e.sourceElement);r.push(...s,...n);let a=this.#Ne(e,t,n);if(a&&r.push(a),0===r.length)return;let o=r.filter(e=>e.transition),l=r.filter(e=>!e.transition);if(this.#O(document,"htmx:before:swap",{ctx:e,tasks:r})){for(let e of l)e.swapSpec?.swapDelay?setTimeout(()=>this.#Me(e),e.swapSpec.swapDelay):this.#Me(e);if(o.length>0){let e=()=>{for(let e of o)this.#Me(e)};await this.#He(e)}this.#O(document,"htmx:after:swap",{ctx:e}),e.title&&!a?.swapSpec?.ignoreTitle&&(document.title=e.title),await this.timeout(1);for(let e of r)for(let t of e.restoreTasks||[])t();this.#O(document,"htmx:after:restore",{ctx:e}),this.#Ce(e)}}#Ne(e,t,i){let r=this.#ve(e.swap||this.config.defaultSwap);if("delete"===r.style||/\S/.test(t.innerHTML||"")||!i.length){if(e.select){let i=t.querySelectorAll(e.select);(t=document.createDocumentFragment()).append(...i)}return this.#N(e.sourceElement)&&(r.show||="top"),{type:"main",fragment:t,target:r.target||e.target,swapSpec:r,sourceElement:e.sourceElement,transition:!1!==e.transition&&!1!==r.transition}}}#Me(e){let{target:t,swapSpec:i,fragment:r}=e;if("string"==typeof t&&(t=document.querySelector(t)),!t)return;i.strip&&r.firstElementChild&&(e.unstripped=r,r=document.createDocumentFragment(),r.append(...(e.fragment.firstElementChild.content||e.fragment.firstElementChild).childNodes));let s=this.#pe(r),n=t.parentNode,a=[...r.childNodes];if("innerHTML"===i.style){this.#Ie(e,t);for(const e of t.children)this.#fe(e);t.replaceChildren(...r.childNodes)}else if("outerHTML"===i.style)n&&(this.#Ie(e,n),this.#Ee(n,t,r),this.#fe(t),n.removeChild(t));else if("innerMorph"===i.style)this.#Oe(t,r,!0);else if("outerMorph"===i.style)this.#Oe(t,r,!1);else if("beforebegin"===i.style)n&&this.#Ee(n,t,r);else if("afterbegin"===i.style)this.#Ee(t,t.firstChild,r);else if("beforeend"===i.style)this.#Ee(t,null,r);else{if("afterend"!==i.style){if("delete"===i.style)return void(n&&(this.#fe(t),n.removeChild(t)));if("none"===i.style)return;if(e.target=t,e.fragment=r,!this.#C(t,"htmx:handle:swap",e))return;throw new Error(`Unknown swap style: ${i.style}`)}n&&this.#Ee(n,t.nextSibling,r)}this.#me(s);for(const e of a)this.process(e),this.#Ae(e);this.#qe(e)}#O(e,t,i={},r=!0){return this.config.logAll&&console.log(t,i,e),e=this.#ke(e),this.#C(e,this.#q(t),i),this.trigger(e,t,i,r)}#C(e,t,i={}){let r=this.#i.get(t.replace(/:/g,"_"));if(r){i.cancelled=!1;for(const t of r)if(!1===t(e,i)||i.cancelled)return i.cancelled=!0,!1}return!0}timeout(e){if("string"==typeof e&&(e=this.parseInterval(e)),e>0)return new Promise(t=>setTimeout(t,e))}forEvent(e,t,i=document){return new Promise((r,s)=>{let n=e=>{clearTimeout(a),r(e)},a=t&&setTimeout(()=>{i.removeEventListener(e,n),r(null)},t);i.addEventListener(e,n,{once:!0})})}onLoad(e){this.on("htmx:after:init",t=>{e(t.target)})}takeClass(e,t,i=e.parentElement){for(let e of this.findAll(this.#ke(i),"."+t))e.classList.remove(t);e.classList.add(t)}on(e,t,i){let r,s=document;return void 0===i?(r=e,i=t):(s=this.#ke(e),r=t),s.addEventListener(r,i),i}find(e,t){return this.#se(e,t)}findAll(e,t){return this.#oe(e,t)}parseInterval(e){let[,t,i]=e?.match(/^([\d.]+)(ms|s|m)?$/)||[],r=parseFloat(t)*({ms:1,s:1e3,m:6e4}[i]||1);return isNaN(r)?void 0:r}trigger(e,t,i={},r=!0){e=this.#ke(e);let s=new CustomEvent(t,{detail:i,cancelable:!0,bubbles:r,composed:!0,originalTarget:e}),n=e.isConnected?e:document;return!i.cancelled&&n.dispatchEvent(s)}ajax(e,t,i){(!i||i instanceof Element||"string"==typeof i)&&(i={target:i});let r="string"==typeof i.source?document.querySelector(i.source):i.source,s=i.target?this.#j(r||document.body,i.target):r;if(!s)return Promise.reject(new Error("Target not found"));r||=s||document.body;let n=this.#b(r,i.event||{});return Object.assign(n,i,{target:s}),Object.assign(n.request,{action:t,method:e.toUpperCase()}),i.headers&&Object.assign(n.request.headers,i.headers),this.#D(n)}#S(){this.config.history&&(history.state||history.replaceState({htmx:!0},"",location.pathname+location.search),window.addEventListener("popstate",e=>{e.state&&e.state.htmx&&this.#Le()}))}#Ve(e){this.config.history&&(history.pushState({htmx:!0},"",e),this.#O(document,"htmx:after:push:into:history",{path:e}))}#Re(e){this.config.history&&(history.replaceState({htmx:!0},"",e),this.#O(document,"htmx:after:replace:into:history",{path:e}))}#Le(e){if(e=e||location.pathname+location.search,this.#O(document,"htmx:before:restore:history",{path:e,cacheMiss:!0}))this.config.historyReload?location.reload():this.ajax("GET",e,{target:"body",request:{headers:{"HX-History-Restore-Request":"true"}}});else if("FORM"===elt.tagName)return"dialog"!==elt.method&&this.#de(elt.action)}#Te(e){let{sourceElement:t,push:i,replace:r,hx:s,response:n}=e;(s?.push||s?.pushurl||s?.replaceurl)&&(i=s.push||s.pushurl,r=s.replaceurl),i||r||!this.#N(t)||(i="true");let a=i||r;if(!a||"false"===a)return;"true"===a&&(a=e.request.originalAction);let o=i?"push":"replace",l={history:{type:o,path:a},sourceElement:t,response:n};this.#O(document,"htmx:before:history:update",l)&&("push"===o?this.#Ve(a):this.#Re(a),this.#O(document,"htmx:after:history:update",l))}#ue(e){for(let i of e.getAttributeNames()){var t=this.#q(this.#p("hx-on:"));if(i.startsWith(t)){let r=i.substring(t.length),s=e.getAttribute(i);e.addEventListener(r,async t=>{try{await this.#P(e,{event:t},s,!1)}catch(e){console.log(e)}})}}}#J(e,t){let i=[];if(t){i=[e,...this.#w(e,t)];for(const e of i)e._htmxReqCount||=0,e._htmxReqCount++,e.classList.add(this.config.requestClass)}return i}#ee(e){for(let t of e)t._htmxReqCount&&(t._htmxReqCount--,t._htmxReqCount<=0&&(t.classList.remove(this.config.requestClass),delete t._htmxReqCount))}#G(e,t){let i=[];if(t){i=this.#w(e,t);for(let e of i)e._htmxDisableCount||=0,e._htmxDisableCount++,e.disabled=!0}return i}#te(e){for(const t of e)t._htmxDisableCount&&(t._htmxDisableCount--,t._htmxDisableCount<=0&&(t.disabled=!1,delete t._htmxDisableCount))}#y(e,t,i){let r=new FormData,s=new Set;t?this.#De(t,s,r):e.name&&(r.append(e.name,e.value),s.add(e)),i&&i.name&&(r.append(i.name,i.value),s.add(i));let n=this.#m(e,"hx-include");if(n){let t=this.#oe(e,n);for(let e of t)this.#De(e,s,r)}return r}#De(e,t,i){let r=this.#w(e,"input:not([disabled]), select:not([disabled]), textarea:not([disabled])");for(let e of r)if(e.name&&!t.has(e))if(t.add(e),e.matches("input[type=checkbox], input[type=radio]"))e.checked&&i.append(e.name,e.value);else if(e.matches("input[type=file]"))for(let t of e.files)i.append(e.name,t);else if(e.matches("select[multiple]"))for(let t of e.selectedOptions)i.append(e.name,t.value);else e.matches("select, textarea, input")&&i.append(e.name,e.value)}#v(e,t){let i=this.#m(e,"hx-vals");if(i){i.includes("{")||(i=`{${i}}`);let e=JSON.parse(i);for(let i in e)t.append(i,e[i])}}#_e(e){let t=e.trim();return t.startsWith("<")&&t.endsWith("/>")?t.slice(1,-2):t}#oe(e,t,i){let[r,s]=this.#je(e,t);if(s.startsWith("global "))return this.#oe(r,s.slice(7),!0);let n=this.#Be(s),a=[],o=[];for(const e of n){let t,s=this.#_e(e);s.startsWith("closest ")?t=r.closest(s.slice(8)):s.startsWith("find ")?t=document.querySelector(r,s.slice(5)):"next"===s||"nextElementSibling"===s?t=r.nextElementSibling:s.startsWith("next ")?t=this.#ze(r,s.slice(5),!!i):"previous"===s||"previousElementSibling"===s?t=r.previousElementSibling:s.startsWith("previous ")?t=this.#$e(r,s.slice(9),!!i):"document"===s?t=document:"window"===s?t=window:"body"===s?t=document.body:"root"===s?t=this.#Pe(r,!!i):"host"===s?t=r.getRootNode().host:o.push(s),t&&a.push(t)}if(o.length>0){let e=o.join(","),t=this.#Pe(r,!!i);a.push(...t.querySelectorAll(e))}return a}#je(e,t){return void 0===t?[document,e]:[this.#ke(e),t]}#Be(e){let t=[],i=0,r=0;for(let s=0;s<=e.length;s++){let n=e[s];"<"===n?i++:"/"===n&&">"===e[s+1]?i--:(","===n&&!i||s===e.length)&&(s>r&&t.push(e.substring(r,s)),r=s+1)}return t}#ze(e,t,i){return this.#Fe(this.#Pe(e,i).querySelectorAll(t),e,Node.DOCUMENT_POSITION_PRECEDING)}#$e(e,t,i){let r=[...this.#Pe(e,i).querySelectorAll(t)].reverse();return this.#Fe(r,e,Node.DOCUMENT_POSITION_FOLLOWING)}#Fe(e,t,i){for(const r of e)if(r.compareDocumentPosition(t)===i)return r}#Pe(e,t){return e.isConnected&&e.getRootNode?e.getRootNode?.({composed:t}):document}#se(e,t){return this.#oe(e,t)[0]}#$(e){if(null!=e){if(e.startsWith("js:"))return e.substring(3);if(e.startsWith("javascript:"))return e.substring(11)}}#R(e){e.addEventListener("htmx:abort",()=>{this.#Q(e).abort()})}#Oe(e,t,i){let{persistentIds:r,idMap:s}=this.#We(e,t),n=document.createElement("div");n.hidden=!0,document.body.after(n);let a={target:e,idMap:s,persistentIds:r,pantry:n};i?this.#Qe(a,e,t):this.#Qe(a,e.parentNode,t,e,e.nextSibling),this.#fe(n),n.remove()}#Qe(e,t,i,r=null,s=null){t instanceof HTMLTemplateElement&&i instanceof HTMLTemplateElement&&(t=t.content,i=i.content),r||=t.firstChild;for(const n of i.childNodes){if(r&&r!=s){let t=this.#Ue(e,n,r,s);if(t){if(t!==r){let i=r;for(;i&&i!==t;){let t=i;i=i.nextSibling,this.#Je(e,t)}}this.#Ge(t,n,e),r=t.nextSibling;continue}}if(n instanceof Element&&e.persistentIds.has(n.id)){let i=e.target.id===n.id&&e.target||e.target.querySelector(`[id="${n.id}"]`)||e.pantry.querySelector(`[id="${n.id}"]`),s=i.id,a=i;for(;a=a.parentNode;){let t=e.idMap.get(a);t&&(t.delete(s),t.size||e.idMap.delete(a))}this.#Ke(t,i,r),this.#Ge(i,n,e),r=i.nextSibling;continue}let i;e.idMap.has(n)?(i=document.createElement(n.tagName),t.insertBefore(i,r),this.#Ge(i,n,e)):(i=document.importNode(n,!0),t.insertBefore(i,r)),r=i.nextSibling}for(;r&&r!=s;){let t=r;r=r.nextSibling,this.#Je(e,t)}}#Ue(e,t,i,r){let s=null,n=t.nextSibling,a=0,o=0,l=e.idMap.get(t),h=l?.size||0,u=i;for(;u&&u!=r;){let i=e.idMap.get(u);if(this.#Xe(u,t)){if(i&&l&&[...i].some(e=>l.has(e)))return u;if(null===s&&!i){if(!h)return u;s=u}}if(o+=i?.size||0,o>h)break;if(null===s&&n&&this.#Xe(u,n)&&(a++,n=n.nextSibling,a>=2&&(s=void 0)),u.contains(document.activeElement))break;u=u.nextSibling}return s||null}#Xe(e,t){return e.nodeType===t.nodeType&&e.tagName===t.tagName&&(!e.id||e.id===t.id)}#Je(e,t){e.idMap.has(t)?this.#Ke(e.pantry,t,null):(this.#fe(t),t.remove())}#Ke(e,t,i){if(e.moveBefore)try{return void e.moveBefore(t,i)}catch(e){}e.insertBefore(t,i)}#Ge(e,t,i){let r=t.nodeType;if(1===r){let i=this.config.morphIgnore||[];this.#Ye(e,t,i),e instanceof HTMLTextAreaElement&&e.defaultValue!=t.defaultValue&&(e.value=t.value)}8!==r&&3!==r||e.nodeValue===t.nodeValue||(e.nodeValue=t.nodeValue),e.isEqualNode(t)||this.#Qe(i,e,t)}#Ye(e,t,i=[]){for(const r of t.attributes)i.includes(r.name)||e.getAttribute(r.name)===r.value||(e.setAttribute(r.name,r.value),"value"===r.name&&e instanceof HTMLInputElement&&"file"!==e.type&&(e.value=r.value));for(let r=e.attributes.length-1;r>=0;r--){let s=e.attributes[r];!s||t.hasAttribute(s.name)||i.includes(s.name)||e.removeAttribute(s.name)}}#Ze(e,t,i,r){for(const s of r)if(t.has(s.id)){let t=s;for(;t&&t!==i;){let i=e.get(t);null==i&&(i=new Set,e.set(t,i)),i.add(s.id),t=t.parentElement}}}#We(e,t){let i=this.#w(e,"[id]"),r=t.querySelectorAll("[id]"),s=this.#et(i,r),n=new Map;return this.#Ze(n,s,e.parentElement,i),this.#Ze(n,s,t,r),{persistentIds:s,idMap:n}}#et(e,t){let i=new Set,r=new Map;for(const{id:t,tagName:s}of e)r.has(t)?i.add(t):r.set(t,s);let s=new Set;for(const{id:e,tagName:n}of t)s.has(e)?i.add(e):r.get(e)===n&&s.add(e);for(const e of i)s.delete(e);return s}#Z(e){let t=e.response.raw.status,i=this.config.noSwap.map(e=>e+""),r=t+"";for(let t of[r,r.slice(0,2)+"x",r[0]+"xx"]){let r=this.#m(e.sourceElement,"hx-status:"+t);if(i.includes(t))return void(e.swap="none");if(r)return void(e.swap=r)}}#He(e){return new Promise(t=>{this.#u||=[],this.#u.push({task:e,resolve:t}),this.#c||this.#tt()})}async#tt(){if(0===this.#u.length||this.#c)return;this.#c=!0;let{task:e,resolve:t}=this.#u.shift();try{document.startViewTransition?(this.#O(document,"htmx:before:viewTransition",{task:e}),await document.startViewTransition(e).finished,this.#O(document,"htmx:after:viewTransition",{task:e})):e()}catch(e){}finally{this.#c=!1,t(),this.#tt()}}#Ie(e,t){let i=t.querySelectorAll("[id]"),r=Object.fromEntries([...i].map(e=>[e.id,e])),s=e.fragment.querySelectorAll("[id]");e.restoreTasks=[];for(let t of s){let i=r[t.id];if(i?.tagName===t.tagName){let r=t.cloneNode(!1);this.#Ye(t,i,this.config.morphIgnore),e.restoreTasks.push(()=>{this.#Ye(t,r,this.config.morphIgnore)})}}}#ke(e){return"string"==typeof e?this.find(e):e}#q(e){return this.config.metaCharacter?e.replace(/:/g,this.config.metaCharacter):e}}})();export default htmx; |