htmx.org 4.0.0-alpha1 → 4.0.0-alpha2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/editors/jetbrains/htmx.svg +46 -0
- package/dist/editors/jetbrains/htmx_dark.svg +46 -0
- package/dist/ext/hx-live.js +624 -0
- package/dist/ext/hx-live.min.js +1 -0
- package/dist/ext/hx-live.min.js.map +1 -0
- package/dist/ext/hx-optimistic.js +81 -0
- package/dist/ext/hx-optimistic.min.js +1 -0
- package/dist/ext/hx-optimistic.min.js.map +1 -0
- package/dist/ext/hx-preload.js +83 -0
- package/dist/ext/hx-preload.min.js +1 -0
- package/dist/ext/hx-preload.min.js.map +1 -0
- package/dist/htmx.esm.js +268 -154
- package/dist/htmx.esm.min.js +1 -1
- package/dist/htmx.esm.min.js.map +1 -0
- package/dist/htmx.js +262 -149
- package/dist/htmx.min.js +1 -1
- package/dist/htmx.min.js.map +1 -0
- package/package.json +17 -8
- package/dist/htmx.esm.js.br +0 -0
- package/dist/htmx.esm.min.js.br +0 -0
- package/dist/htmx.js.br +0 -0
- package/dist/htmx.min.js.br +0 -0
- /package/{src → dist}/editors/jetbrains/htmx.web-types.json +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
(() =>{
|
|
2
|
+
|
|
3
|
+
// TODO - this needs to be updated to use the new internal API
|
|
4
|
+
|
|
5
|
+
function normalizeSwapStyle(style) {
|
|
6
|
+
return style === 'before' ? 'beforebegin' :
|
|
7
|
+
style === 'after' ? 'afterend' :
|
|
8
|
+
style === 'prepend' ? 'afterbegin' :
|
|
9
|
+
style === 'append' ? 'beforeend' : style;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function insertOptimisticContent(ctx) {
|
|
13
|
+
// TODO - handle htmx.config.prefix
|
|
14
|
+
ctx.optimistic = ctx.sourceElement.getAttribute("hx-optimistic");
|
|
15
|
+
if (!ctx.optimistic) {
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// TODO - handle inheritance?
|
|
20
|
+
let sourceElt = document.querySelector(ctx.optimistic);
|
|
21
|
+
if (!sourceElt) return;
|
|
22
|
+
|
|
23
|
+
let target = ctx.target;
|
|
24
|
+
if (!target) return;
|
|
25
|
+
|
|
26
|
+
if (typeof target === 'string') {
|
|
27
|
+
target = document.querySelector(target);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Create optimistic div with reset styling
|
|
31
|
+
let optimisticDiv = document.createElement('div');
|
|
32
|
+
optimisticDiv.style.cssText = 'all: initial';
|
|
33
|
+
optimisticDiv.innerHTML = sourceElt.innerHTML;
|
|
34
|
+
|
|
35
|
+
let swapStyle = normalizeSwapStyle(ctx.swap);
|
|
36
|
+
ctx.optHidden = [];
|
|
37
|
+
|
|
38
|
+
if (swapStyle === 'innerHTML') {
|
|
39
|
+
// Hide children of target
|
|
40
|
+
for (let child of target.children) {
|
|
41
|
+
child.style.display = 'none';
|
|
42
|
+
ctx.optHidden.push(child)
|
|
43
|
+
}
|
|
44
|
+
target.appendChild(optimisticDiv);
|
|
45
|
+
ctx.optimisticDiv = optimisticDiv;
|
|
46
|
+
} else if (['beforebegin', 'afterbegin', 'beforeend', 'afterend'].includes(swapStyle)) {
|
|
47
|
+
target.insertAdjacentElement(swapStyle, optimisticDiv);
|
|
48
|
+
ctx.optimisticDiv = optimisticDiv;
|
|
49
|
+
} else {
|
|
50
|
+
// Assume outerHTML-like behavior, Hide target and insert div after it
|
|
51
|
+
target.style.display = 'none';
|
|
52
|
+
ctx.optHidden.push(target)
|
|
53
|
+
target.after(optimisticDiv)
|
|
54
|
+
ctx.optimisticDiv = optimisticDiv;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function removeOptimisticContent(ctx) {
|
|
59
|
+
if (!ctx.optimisticDiv) return;
|
|
60
|
+
|
|
61
|
+
// Remove optimistic div
|
|
62
|
+
ctx.optimisticDiv.remove();
|
|
63
|
+
|
|
64
|
+
// Unhide any hidden elements
|
|
65
|
+
for (let elt of ctx.optHidden) {
|
|
66
|
+
elt.style.display = '';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
htmx.defineExtension('hx-optimistic', {
|
|
71
|
+
htmx_before_request : (elt, detail) => {
|
|
72
|
+
insertOptimisticContent(detail.ctx);
|
|
73
|
+
},
|
|
74
|
+
htmx_error : (elt, detail) => {
|
|
75
|
+
removeOptimisticContent(detail.ctx)
|
|
76
|
+
},
|
|
77
|
+
htmx_before_swap : (elt, detail) => {
|
|
78
|
+
removeOptimisticContent(detail.ctx)
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{function e(e){if(e.optimisticDiv){e.optimisticDiv.remove();for(let t of e.optHidden)t.style.display=""}}htmx.defineExtension("hx-optimistic",{htmx_before_request:(e,t)=>{!function(e){if(e.optimistic=e.sourceElement.getAttribute("hx-optimistic"),!e.optimistic)return;let t=document.querySelector(e.optimistic);if(!t)return;let i=e.target;if(!i)return;"string"==typeof i&&(i=document.querySelector(i));let n=document.createElement("div");n.style.cssText="all: initial",n.innerHTML=t.innerHTML;let r="before"===(o=e.swap)?"beforebegin":"after"===o?"afterend":"prepend"===o?"afterbegin":"append"===o?"beforeend":o;var o;if(e.optHidden=[],"innerHTML"===r){for(let t of i.children)t.style.display="none",e.optHidden.push(t);i.appendChild(n),e.optimisticDiv=n}else["beforebegin","afterbegin","beforeend","afterend"].includes(r)?(i.insertAdjacentElement(r,n),e.optimisticDiv=n):(i.style.display="none",e.optHidden.push(i),i.after(n),e.optimisticDiv=n)}(t.ctx)},htmx_error:(t,i)=>{e(i.ctx)},htmx_before_swap:(t,i)=>{e(i.ctx)}})})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["removeOptimisticContent","ctx","optimisticDiv","remove","elt","optHidden","style","display","htmx","defineExtension","htmx_before_request","detail","optimistic","sourceElement","getAttribute","sourceElt","document","querySelector","target","createElement","cssText","innerHTML","swapStyle","swap","child","children","push","appendChild","includes","insertAdjacentElement","after","insertOptimisticContent","htmx_error","htmx_before_swap"],"sources":["dist/ext/hx-optimistic.js"],"mappings":"AAAA,MAyDI,SAASA,EAAwBC,GAC7B,GAAKA,EAAIC,cAAT,CAGAD,EAAIC,cAAcC,SAGlB,IAAK,IAAIC,KAAOH,EAAII,UAChBD,EAAIE,MAAMC,QAAU,EAPM,CASlC,CAEAC,KAAKC,gBAAgB,gBAAiB,CAClCC,oBAAsB,CAACN,EAAKO,MA3DhC,SAAiCV,GAG7B,GADAA,EAAIW,WAAaX,EAAIY,cAAcC,aAAa,kBAC3Cb,EAAIW,WACL,OAIJ,IAAIG,EAAYC,SAASC,cAAchB,EAAIW,YAC3C,IAAKG,EAAW,OAEhB,IAAIG,EAASjB,EAAIiB,OACjB,IAAKA,EAAQ,OAES,iBAAXA,IACPA,EAASF,SAASC,cAAcC,IAIpC,IAAIhB,EAAgBc,SAASG,cAAc,OAC3CjB,EAAcI,MAAMc,QAAU,eAC9BlB,EAAcmB,UAAYN,EAAUM,UAEpC,IAAIC,EA7Ba,YADOhB,EA8BWL,EAAIsB,MA7BX,cACd,UAAVjB,EAAoB,WACN,YAAVA,EAAsB,aACR,WAAVA,EAAqB,YAAcA,EAJnD,IAA4BA,EAiCxB,GAFAL,EAAII,UAAY,GAEE,cAAdiB,EAA2B,CAE3B,IAAK,IAAIE,KAASN,EAAOO,SACrBD,EAAMlB,MAAMC,QAAU,OACtBN,EAAII,UAAUqB,KAAKF,GAEvBN,EAAOS,YAAYzB,GACnBD,EAAIC,cAAgBA,CACxB,KAAW,CAAC,cAAe,aAAc,YAAa,YAAY0B,SAASN,IACvEJ,EAAOW,sBAAsBP,EAAWpB,GACxCD,EAAIC,cAAgBA,IAGpBgB,EAAOZ,MAAMC,QAAU,OACvBN,EAAII,UAAUqB,KAAKR,GACnBA,EAAOY,MAAM5B,GACbD,EAAIC,cAAgBA,EAE5B,CAgBQ6B,CAAwBpB,EAAOV,MAEnC+B,WAAa,CAAC5B,EAAKO,KACfX,EAAwBW,EAAOV,MAEnCgC,iBAAmB,CAAC7B,EAAKO,KACrBX,EAAwBW,EAAOV,OAG1C,EAhFD","ignoreList":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
(()=>{
|
|
2
|
+
let api;
|
|
3
|
+
|
|
4
|
+
function initializePreload(elt) {
|
|
5
|
+
let preloadSpec = api.attributeValue(elt, "hx-preload");
|
|
6
|
+
if (!preloadSpec && !elt._htmx?.boosted) return;
|
|
7
|
+
|
|
8
|
+
let eventName;
|
|
9
|
+
let timeout;
|
|
10
|
+
if (preloadSpec) {
|
|
11
|
+
let specs = api.parseTriggerSpecs(preloadSpec);
|
|
12
|
+
if (specs.length === 0) return;
|
|
13
|
+
let spec = specs[0];
|
|
14
|
+
eventName = spec.name;
|
|
15
|
+
timeout = spec.timeout ? htmx.parseInterval(spec.timeout) : 5000;
|
|
16
|
+
} else {
|
|
17
|
+
eventName = htmx.config?.preload?.boostEvent || "mousedown"
|
|
18
|
+
timeout = htmx.config?.preload?.boostTimeout ? htmx.parseInterval(htmx.config?.preload?.boostTimeout) : 5000;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let preloadListener = async (evt) => {
|
|
22
|
+
let {method} = api.determineMethodAndAction(elt, evt);
|
|
23
|
+
if (method !== 'GET') return;
|
|
24
|
+
|
|
25
|
+
if (elt._htmx?.preload) return;
|
|
26
|
+
|
|
27
|
+
let ctx = api.createRequestContext(elt, evt);
|
|
28
|
+
let form = elt.form || elt.closest("form");
|
|
29
|
+
let body = api.collectFormData(elt, form, evt.submitter);
|
|
30
|
+
api.handleHxVals(elt, body);
|
|
31
|
+
|
|
32
|
+
let action = ctx.request.action.replace?.(/#.*$/, '');
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
let params = new URLSearchParams(body);
|
|
36
|
+
if (params.size) action += (/\?/.test(action) ? "&" : "?") + params;
|
|
37
|
+
|
|
38
|
+
elt._htmx.preload = {
|
|
39
|
+
prefetch: fetch(action, ctx.request),
|
|
40
|
+
action: action,
|
|
41
|
+
expiresAt: Date.now() + timeout
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
await elt._htmx.preload.prefetch;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
delete elt._htmx.preload;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
elt.addEventListener(eventName, preloadListener);
|
|
51
|
+
elt._htmx.preloadListener = preloadListener;
|
|
52
|
+
elt._htmx.preloadEvent = eventName;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
htmx.defineExtension('preload', {
|
|
56
|
+
init: (internalAPI) => {
|
|
57
|
+
api = internalAPI;
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
htmx_after_init: (elt) => {
|
|
61
|
+
initializePreload(elt);
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
htmx_before_request: (elt, detail) => {
|
|
65
|
+
let {ctx} = detail;
|
|
66
|
+
if (elt._htmx?.preload &&
|
|
67
|
+
elt._htmx.preload.action === ctx.request.action &&
|
|
68
|
+
Date.now() < elt._htmx.preload.expiresAt) {
|
|
69
|
+
let prefetch = elt._htmx.preload.prefetch;
|
|
70
|
+
ctx.fetch = () => prefetch;
|
|
71
|
+
delete elt._htmx.preload;
|
|
72
|
+
} else {
|
|
73
|
+
if (elt._htmx) delete elt._htmx.preload;
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
htmx_before_cleanup: (elt) => {
|
|
78
|
+
if (elt._htmx?.preloadListener) {
|
|
79
|
+
elt.removeEventListener(elt._htmx.preloadEvent, elt._htmx.preloadListener);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
})()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{let e;htmx.defineExtension("preload",{init:t=>{e=t},htmx_after_init:t=>{!function(t){let r,o,a=e.attributeValue(t,"hx-preload");if(!a&&!t._htmx?.boosted)return;if(a){let t=e.parseTriggerSpecs(a);if(0===t.length)return;let l=t[0];r=l.name,o=l.timeout?htmx.parseInterval(l.timeout):5e3}else r=htmx.config?.preload?.boostEvent||"mousedown",o=htmx.config?.preload?.boostTimeout?htmx.parseInterval(htmx.config?.preload?.boostTimeout):5e3;let l=async r=>{let{method:a}=e.determineMethodAndAction(t,r);if("GET"!==a)return;if(t._htmx?.preload)return;let l=e.createRequestContext(t,r),n=t.form||t.closest("form"),m=e.collectFormData(t,n,r.submitter);e.handleHxVals(t,m);let h=l.request.action.replace?.(/#.*$/,""),i=new URLSearchParams(m);i.size&&(h+=(/\?/.test(h)?"&":"?")+i),t._htmx.preload={prefetch:fetch(h,l.request),action:h,expiresAt:Date.now()+o};try{await t._htmx.preload.prefetch}catch(e){delete t._htmx.preload}};t.addEventListener(r,l),t._htmx.preloadListener=l,t._htmx.preloadEvent=r}(t)},htmx_before_request:(e,t)=>{let{ctx:r}=t;if(e._htmx?.preload&&e._htmx.preload.action===r.request.action&&Date.now()<e._htmx.preload.expiresAt){let t=e._htmx.preload.prefetch;r.fetch=()=>t,delete e._htmx.preload}else e._htmx&&delete e._htmx.preload},htmx_before_cleanup:e=>{e._htmx?.preloadListener&&e.removeEventListener(e._htmx.preloadEvent,e._htmx.preloadListener)}})})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["api","htmx","defineExtension","init","internalAPI","htmx_after_init","elt","eventName","timeout","preloadSpec","attributeValue","_htmx","boosted","specs","parseTriggerSpecs","length","spec","name","parseInterval","config","preload","boostEvent","boostTimeout","preloadListener","async","evt","method","determineMethodAndAction","ctx","createRequestContext","form","closest","body","collectFormData","submitter","handleHxVals","action","request","replace","params","URLSearchParams","size","test","prefetch","fetch","expiresAt","Date","now","error","addEventListener","preloadEvent","initializePreload","htmx_before_request","detail","htmx_before_cleanup","removeEventListener"],"sources":["dist/ext/hx-preload.js"],"mappings":"AAAA,MACI,IAAIA,EAqDJC,KAAKC,gBAAgB,UAAW,CAC5BC,KAAOC,IACHJ,EAAMI,GAGVC,gBAAkBC,KAxDtB,SAA2BA,GACvB,IAGIC,EACAC,EAJAC,EAAcT,EAAIU,eAAeJ,EAAK,cAC1C,IAAKG,IAAgBH,EAAIK,OAAOC,QAAS,OAIzC,GAAIH,EAAa,CACb,IAAII,EAAQb,EAAIc,kBAAkBL,GAClC,GAAqB,IAAjBI,EAAME,OAAc,OACxB,IAAIC,EAAOH,EAAM,GACjBN,EAAYS,EAAKC,KACjBT,EAAUQ,EAAKR,QAAUP,KAAKiB,cAAcF,EAAKR,SAAW,GAChE,MACID,EAAYN,KAAKkB,QAAQC,SAASC,YAAc,YAChDb,EAAUP,KAAKkB,QAAQC,SAASE,aAAerB,KAAKiB,cAAcjB,KAAKkB,QAAQC,SAASE,cAAgB,IAG5G,IAAIC,EAAkBC,MAAOC,IACzB,IAAIC,OAACA,GAAU1B,EAAI2B,yBAAyBrB,EAAKmB,GACjD,GAAe,QAAXC,EAAkB,OAEtB,GAAIpB,EAAIK,OAAOS,QAAS,OAExB,IAAIQ,EAAM5B,EAAI6B,qBAAqBvB,EAAKmB,GACpCK,EAAOxB,EAAIwB,MAAQxB,EAAIyB,QAAQ,QAC/BC,EAAOhC,EAAIiC,gBAAgB3B,EAAKwB,EAAML,EAAIS,WAC9ClC,EAAImC,aAAa7B,EAAK0B,GAEtB,IAAII,EAASR,EAAIS,QAAQD,OAAOE,UAAU,OAAQ,IAG9CC,EAAS,IAAIC,gBAAgBR,GAC7BO,EAAOE,OAAML,IAAW,KAAKM,KAAKN,GAAU,IAAM,KAAOG,GAE7DjC,EAAIK,MAAMS,QAAU,CAChBuB,SAAUC,MAAMR,EAAQR,EAAIS,SAC5BD,OAAQA,EACRS,UAAWC,KAAKC,MAAQvC,GAG5B,UACUF,EAAIK,MAAMS,QAAQuB,QAC5B,CAAE,MAAOK,UACE1C,EAAIK,MAAMS,OACrB,GAEJd,EAAI2C,iBAAiB1C,EAAWgB,GAChCjB,EAAIK,MAAMY,gBAAkBA,EAC5BjB,EAAIK,MAAMuC,aAAe3C,CAC7B,CAQQ4C,CAAkB7C,IAGtB8C,oBAAqB,CAAC9C,EAAK+C,KACvB,IAAIzB,IAACA,GAAOyB,EACZ,GAAI/C,EAAIK,OAAOS,SACXd,EAAIK,MAAMS,QAAQgB,SAAWR,EAAIS,QAAQD,QACzCU,KAAKC,MAAQzC,EAAIK,MAAMS,QAAQyB,UAAW,CAC1C,IAAIF,EAAWrC,EAAIK,MAAMS,QAAQuB,SACjCf,EAAIgB,MAAQ,IAAMD,SACXrC,EAAIK,MAAMS,OACrB,MACQd,EAAIK,cAAcL,EAAIK,MAAMS,SAIxCkC,oBAAsBhD,IACdA,EAAIK,OAAOY,iBACXjB,EAAIiD,oBAAoBjD,EAAIK,MAAMuC,aAAc5C,EAAIK,MAAMY,mBAIzE,EAlFD","ignoreList":[]}
|