mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2025-10-29 17:25:32 +00:00
2 lines
8.5 KiB
JavaScript
2 lines
8.5 KiB
JavaScript
(()=>{var g={headers:{},mergeStrategy:"replace",transitions:!1,mapDelimiter:":"},$=()=>{console.error(`You can't use the "morph" merge without first installing the Alpine "morph" plugin here: https://alpinejs.dev/plugins/morph`)};function j(e){e.morph&&($=e.morph),e.addInitSelector(()=>`[${e.prefixed("target")}]`),e.addInitSelector(()=>`[${e.prefixed("target\\.push")}]`),e.addInitSelector(()=>`[${e.prefixed("target\\.replace")}]`),e.directive("target",(a,{value:n,modifiers:i,expression:s},{evaluateLater:r,effect:l})=>{let o=c=>{a._ajax_target=a._ajax_target||{};let w={ids:P(a,c),sync:!0,focus:!i.includes("nofocus"),history:i.includes("push")?"push":i.includes("replace")?"replace":!1},h=i.filter(f=>["back","away","error"].includes(f)||parseInt(f));h=h.length?h:["xxx"],h.forEach(f=>{f.charAt(0)==="3"&&(f="3xx"),a._ajax_target[f]=w})};if(n==="dynamic"){let c=r(s);l(()=>c(o))}else o(s)}),e.directive("headers",(a,{expression:n},{evaluateLater:i,effect:s})=>{let r=i(n||"{}");s(()=>{r(l=>{a._ajax_headers=l})})}),e.addInitSelector(()=>`[${e.prefixed("merge")}]`),e.directive("merge",(a,{value:n,modifiers:i,expression:s},{evaluateLater:r,effect:l})=>{let o=c=>{a._ajax_strategy=c,a._ajax_transition=g.transitions||i.includes("transition")};if(n==="dynamic"){let c=r(s);l(()=>c(o))}else o(s)}),e.magic("ajax",a=>async(n,i={})=>{let s={el:a,target:{xxx:{ids:P(a,i.targets||i.target),sync:!!i.sync,history:"history"in i?i.history:!1,focus:"focus"in i?i.focus:!0}},headers:i.headers||{}},r=i.method?i.method.toUpperCase():"GET",l=i.body;return v(s,n,r,l)});let t=!1;e.ajax={start(){t||(document.addEventListener("submit",R),document.addEventListener("click",D),window.addEventListener("popstate",T),t=!0)},configure:j.configure,stop(){document.removeEventListener("submit",R),document.removeEventListener("click",D),window.removeEventListener("popstate",T),t=!1}},e.ajax.start()}j.configure=e=>(g=Object.assign(g,e),j);var A=j;function T(e){!e.state||!e.state.__ajax||window.location.reload(!0)}async function D(e){if(e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e?.target.closest("a[href]:not([download]):not([noajax])");if(!t||!t._ajax_target||t.isContentEditable||t.origin!==window.location.origin||t.getAttribute("href").startsWith("#")||t.hash&&M(t,new URL(document.baseURI)))return;e.preventDefault(),e.stopImmediatePropagation();let a={el:t,target:t._ajax_target,headers:t._ajax_headers||{}},n=t.getAttribute("href");try{return await v(a,n)}catch(i){if(i.name==="RenderError"){console.warn(i.message),window.location.href=t.href;return}throw i}}async function R(e){if(e.defaultPrevented)return;let t=e.target,a=e.submitter,n=(a?.getAttribute("formmethod")||t.getAttribute("method")||"GET").toUpperCase();if(!t||!t._ajax_target||n==="DIALOG"||a?.hasAttribute("formnoajax")||a?.hasAttribute("formtarget")||t.hasAttribute("noajax")||t.hasAttribute("target"))return;e.preventDefault(),e.stopImmediatePropagation();let i={el:t,target:t._ajax_target,headers:t._ajax_headers||{}},s=new FormData(t),r=t.getAttribute("enctype"),l=t.getAttribute("action");a&&(r=a.getAttribute("formenctype")||r,l=a.getAttribute("formaction")||l,a.name&&s.append(a.name,a.value));try{return await G(a,()=>v(i,l,n,s,r))}catch(o){if(o.name==="RenderError"){console.warn(o.message),t.setAttribute("noajax","true"),t.requestSubmit(a);return}throw o}}async function G(e,t){if(!e)return await t();let a=i=>i.preventDefault();e.setAttribute("aria-disabled","true"),e.addEventListener("click",a);let n;try{n=await t()}finally{e.removeAttribute("aria-disabled"),e.removeEventListener("click",a)}return n}var m={store:new Map,plan(e,t){if(e.ids.forEach(a=>{let n=a[0],i=["_self","_top","_none"].includes(n)?document.documentElement:document.getElementById(n);if(!i)return console.warn(`Target [#${n}] was not found in current document.`);i._ajax_id=a[1],this.set(i,t)}),e.sync){let a=e.ids.flat();document.querySelectorAll("[x-sync]").forEach(n=>{let i=n.getAttribute("id");if(!i)throw new b(n);a.includes(i)||(n._ajax_id=i,n._ajax_sync=!0,this.set(n,t))})}},purge(e){this.store.forEach((t,a)=>e===t&&this.delete(a))},get(e){let t=[];return this.store.forEach((a,n)=>e===a&&t.push(n)),t},set(e,t){e.querySelectorAll("[aria-busy]").forEach(a=>{this.delete(a)}),e.setAttribute("aria-busy","true"),this.store.set(e,t)},delete(e){e.removeAttribute("aria-busy"),this.store.delete(e)}},x=new Map;async function v(e,t="",a="GET",n=null,i="application/x-www-form-urlencoded"){if(!d(e.el,"ajax:before"))return;let s=e.target.xxx,r={ok:!1,redirected:!1,url:"",status:"",html:"",raw:""};m.plan(s,r);let l=new URL(e.el.closest("[data-source]")?.dataset.source||"",document.baseURI);t=new URL(t||l,document.baseURI),n&&(n=N(n),a==="GET"?(t.search=U(n).toString(),n=null):i!=="multipart/form-data"&&(n=U(n)));let o={action:t.toString(),method:a,body:n,enctype:i,referrer:l.toString(),headers:Object.assign({"X-Alpine-Request":!0,"X-Alpine-Target":m.get(r).map(u=>u._ajax_id).join(" ")},g.headers,e.headers)};d(e.el,"ajax:send",o);let c;if(o.method==="GET"&&x.has(o.action)?c=x.get(o.action):(c=fetch(o.action,o).then(async u=>{let p=await u.text(),_=document.createRange().createContextualFragment("<template>"+p+"</template>");return u.html=_.firstElementChild.content,u.raw=p,u}),x.set(o.action,c)),await c.then(u=>{r.ok=u.ok,r.redirected=u.redirected,r.url=u.url,r.status=u.status,r.html=u.html,r.raw=u.raw}),r.ok?(r.redirected&&(d(e.el,"ajax:redirect",r),x.set(r.url,c),setTimeout(()=>{x.delete(r.url)},5)),d(e.el,"ajax:success",r)):d(e.el,"ajax:error",r),d(e.el,"ajax:sent",r),x.delete(o.action),!r.html){m.purge(r);return}let w=r.redirected?"3xx":r.status.toString(),h=M(new URL(r.url),new URL(o.referrer,document.baseURI)),f=[r.redirected?h?"back":"away":null,w,w.charAt(0)+"xx",r.ok?"xxx":"error","xxx"].find(u=>u in e.target);f!=="xxx"&&(s=e.target[f],(!r.redirected||!h||!s.ids.flat().includes("_self"))&&(m.purge(r),m.plan(s,r))),s.history&&H(s.history,r.url);let y=!s.focus,q=m.get(r).map(async u=>{if(!u.isConnected||u._ajax_id==="_none")return;u===document.documentElement&&(window.location.href=r.url);let p=r.html.getElementById(u._ajax_id);if(!p){if(u._ajax_sync||!d(e.el,"ajax:missing",{target:u,response:r}))return;if(r.ok)return u.remove();throw new E(u,r.status)}let _=u._ajax_strategy||g.mergeStrategy,I=async()=>{if(u=await B(_,u,p),u){u.dataset.source=r.url,m.delete(u);let L=["[x-autofocus]","[autofocus]"];for(;!y&&L.length;){let k=L.shift();u.matches(k)&&(y=C(u)),y=y||Array.from(u.querySelectorAll(k)).some(O=>C(O))}}return d(u,"ajax:merged"),u};if(d(u,"ajax:merge",{strategy:_,content:p,merge:I}))return I()}),S=await Promise.all(q);return d(e.el,"ajax:after",{response:r,render:S}),S}function N(e){if(e instanceof FormData)return e;if(e instanceof HTMLFormElement)return new FormData(e);let t=new FormData;for(let a in e)typeof e[a]=="object"?t.append(a,JSON.stringify(e[a])):t.append(a,e[a]);return t}function U(e){let t=Array.from(e.entries()).filter(([a,n])=>!(n instanceof File));return new URLSearchParams(t)}async function B(e,t,a){let n={before(s,r){return s.before(...r.childNodes),s},replace(s,r){return s.replaceWith(r),r},update(s,r){return s.replaceChildren(...r.childNodes),s},prepend(s,r){return s.prepend(...r.childNodes),s},append(s,r){return s.append(...r.childNodes),s},after(s,r){return s.after(...r.childNodes),s},morph(s,r){return $(s,r),document.getElementById(r.getAttribute("id"))}};return!t._ajax_transition||!document.startViewTransition?n[e](t,a):(await document.startViewTransition(()=>(t=n[e](t,a),Promise.resolve())).updateCallbackDone,t)}function C(e){return!e||!e.getClientRects().length?!1:(setTimeout(()=>{e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.focus()},0),!0)}function H(e,t){return{push:()=>window.history.pushState({__ajax:!0},"",t),replace:()=>window.history.replaceState({__ajax:!0},"",t)}[e]()}function P(e,t=null){let a=e.getAttribute("id"),n=[a];if(t&&(n=Array.isArray(t)?t:t.split(" ")),n=n.filter(i=>i).map(i=>{let s=i.split(g.mapDelimiter).map(r=>r||a);return s[1]=s[1]||s[0],s}),n.length===0)throw new b(e);return n}function d(e,t,a){return e.dispatchEvent(new CustomEvent(t,{detail:a,bubbles:!0,composed:!0,cancelable:!0}))}function M(e,t){return F(e.pathname)===F(t.pathname)}function F(e){return e.replace(/\/$/,"")}var b=class extends DOMException{constructor(t){let a=(t.outerHTML.match(/<[^>]+>/)??[])[0]??"[Element]";super(`${a} is missing an ID to target.`,"IDError")}},E=class extends DOMException{constructor(t,a){let n=t.getAttribute("id");super(`Target [#${n}] was not found in response with status [${a}].`,"RenderError")}};document.addEventListener("alpine:initializing",()=>{A.configure(window.alpineAJAX||{}),A(window.Alpine)});})();
|