htmx.org 4.0.0-alpha4 → 4.0.0-alpha5

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.
@@ -10,7 +10,7 @@
10
10
  }
11
11
  }
12
12
 
13
- htmx.defineExtension('compat', {
13
+ htmx.registerExtension('compat', {
14
14
  init: (internalAPI) => {
15
15
  api = internalAPI;
16
16
 
@@ -24,14 +24,68 @@
24
24
  htmx.config.noSwap.push("4xx", "5xx");
25
25
  }
26
26
  },
27
- htmx_after_implicitInheritance : function(elt, detail) {
28
- // TODO - how should we alert users? collect a report? just log?
29
- // TODO - needs a config option to enable
27
+ // Re-delegate new events to old event names for backwards compatibility
28
+ htmx_after_implicitInheritance: function (elt, detail) {
29
+ if (!htmx.config.compat?.suppressInheritanceLogs) {
30
+ console.log("IMPLICIT INHERITANCE DETECTED, attribute: " + detail.name + ", elt: ", elt, ", inherited from: ", detail.parent)
31
+ let evt = new CustomEvent("htmxImplicitInheritace", {
32
+ detail,
33
+ cancelable: true,
34
+ bubbles : true,
35
+ composed: true,
36
+ });
37
+ elt.dispatchEvent(evt)
38
+ }
30
39
  },
31
- // TODO - catch all new events and redelegate to old event names as best we can
32
- // this can probably be done as a map... See www/content/migration-guide-htmx-4.md:94
33
40
  htmx_after_init: function (elt, detail) {
34
41
  maybeRetriggerEvent(elt, "htmx:afterOnLoad", detail);
42
+ maybeRetriggerEvent(elt, "htmx:afterProcessNode", detail);
43
+ maybeRetriggerEvent(elt, "htmx:load", detail);
44
+ },
45
+ htmx_after_request: function (elt, detail) {
46
+ maybeRetriggerEvent(elt, "htmx:afterRequest", detail);
47
+ },
48
+ htmx_after_swap: function (elt, detail) {
49
+ maybeRetriggerEvent(elt, "htmx:afterSettle", detail);
50
+ maybeRetriggerEvent(elt, "htmx:afterSwap", detail);
51
+ },
52
+ htmx_before_cleanup: function (elt, detail) {
53
+ maybeRetriggerEvent(elt, "htmx:beforeCleanupElement", detail);
54
+ },
55
+ htmx_before_history_update: function (elt, detail) {
56
+ maybeRetriggerEvent(elt, "htmx:beforeHistoryUpdate", detail);
57
+ maybeRetriggerEvent(elt, "htmx:beforeHistorySave", detail);
58
+ },
59
+ htmx_before_init: function (elt, detail) {
60
+ maybeRetriggerEvent(elt, "htmx:beforeOnLoad", detail);
61
+ },
62
+ htmx_before_process: function (elt, detail) {
63
+ maybeRetriggerEvent(elt, "htmx:beforeProcessNode", detail);
64
+ },
65
+ htmx_before_request: function (elt, detail) {
66
+ maybeRetriggerEvent(elt, "htmx:beforeRequest", detail);
67
+ maybeRetriggerEvent(elt, "htmx:beforeSend", detail);
68
+ },
69
+ htmx_before_swap: function (elt, detail) {
70
+ maybeRetriggerEvent(elt, "htmx:beforeSwap", detail);
71
+ },
72
+ htmx_before_viewTransition: function (elt, detail) {
73
+ maybeRetriggerEvent(elt, "htmx:beforeTransition", detail);
74
+ },
75
+ htmx_config_request: function (elt, detail) {
76
+ maybeRetriggerEvent(elt, "htmx:configRequest", detail);
77
+ },
78
+ htmx_before_restore_history: function (elt, detail) {
79
+ maybeRetriggerEvent(elt, "htmx:historyRestore", detail);
80
+ },
81
+ htmx_after_push_into_history: function (elt, detail) {
82
+ maybeRetriggerEvent(elt, "htmx:pushedIntoHistory", detail);
83
+ },
84
+ htmx_after_replace_into_history: function (elt, detail) {
85
+ maybeRetriggerEvent(elt, "htmx:replacedInHistory", detail);
86
+ },
87
+ htmx_error: function (elt, detail) {
88
+ maybeRetriggerEvent(elt, "htmx:targetError", detail);
35
89
  },
36
90
  });
37
91
  })()
@@ -1 +1 @@
1
- (()=>{let t;htmx.defineExtension("compat",{init:i=>{t=i,htmx.config.compat?.useExplicitInheritace||(htmx.config.implicitInheritance=!0),htmx.config.compat?.swapErrorResponseCodes||htmx.config.noSwap.push("4xx","5xx")},htmx_after_implicitInheritance:function(t,i){},htmx_after_init:function(t,i){!function(t,i,n){htmx.config.compat?.doNotTriggerOldEvents||htmx.trigger(t,i,n)}(t,"htmx:afterOnLoad",i)}})})();
1
+ (()=>{let t;function e(t,e,o){htmx.config.compat?.doNotTriggerOldEvents||htmx.trigger(t,e,o)}htmx.registerExtension("compat",{init:e=>{t=e,htmx.config.compat?.useExplicitInheritace||(htmx.config.implicitInheritance=!0),htmx.config.compat?.swapErrorResponseCodes||htmx.config.noSwap.push("4xx","5xx")},htmx_after_implicitInheritance:function(t,e){if(!htmx.config.compat?.suppressInheritanceLogs){console.log("IMPLICIT INHERITANCE DETECTED, attribute: "+e.name+", elt: ",t,", inherited from: ",e.parent);let o=new CustomEvent("htmxImplicitInheritace",{detail:e,cancelable:!0,bubbles:!0,composed:!0});t.dispatchEvent(o)}},htmx_after_init:function(t,o){e(t,"htmx:afterOnLoad",o),e(t,"htmx:afterProcessNode",o),e(t,"htmx:load",o)},htmx_after_request:function(t,o){e(t,"htmx:afterRequest",o)},htmx_after_swap:function(t,o){e(t,"htmx:afterSettle",o),e(t,"htmx:afterSwap",o)},htmx_before_cleanup:function(t,o){e(t,"htmx:beforeCleanupElement",o)},htmx_before_history_update:function(t,o){e(t,"htmx:beforeHistoryUpdate",o),e(t,"htmx:beforeHistorySave",o)},htmx_before_init:function(t,o){e(t,"htmx:beforeOnLoad",o)},htmx_before_process:function(t,o){e(t,"htmx:beforeProcessNode",o)},htmx_before_request:function(t,o){e(t,"htmx:beforeRequest",o),e(t,"htmx:beforeSend",o)},htmx_before_swap:function(t,o){e(t,"htmx:beforeSwap",o)},htmx_before_viewTransition:function(t,o){e(t,"htmx:beforeTransition",o)},htmx_config_request:function(t,o){e(t,"htmx:configRequest",o)},htmx_before_restore_history:function(t,o){e(t,"htmx:historyRestore",o)},htmx_after_push_into_history:function(t,o){e(t,"htmx:pushedIntoHistory",o)},htmx_after_replace_into_history:function(t,o){e(t,"htmx:replacedInHistory",o)},htmx_error:function(t,o){e(t,"htmx:targetError",o)}})})();
@@ -1 +1 @@
1
- {"version":3,"names":["api","htmx","defineExtension","init","internalAPI","config","compat","useExplicitInheritace","implicitInheritance","swapErrorResponseCodes","noSwap","push","htmx_after_implicitInheritance","elt","detail","htmx_after_init","evtName","doNotTriggerOldEvents","trigger","maybeRetriggerEvent"],"sources":["dist/ext/hx-compat.js"],"mappings":"AAAA,MAII,IAAIA,EAQJC,KAAKC,gBAAgB,SAAU,CAC3BC,KAAOC,IACHJ,EAAMI,EAGDH,KAAKI,OAAOC,QAAQC,wBACrBN,KAAKI,OAAOG,qBAAsB,GAIjCP,KAAKI,OAAOC,QAAQG,wBACrBR,KAAKI,OAAOK,OAAOC,KAAK,MAAO,QAGvCC,+BAAiC,SAASC,EAAKC,GAG/C,EAGAC,gBAAiB,SAAUF,EAAKC,IA1BpC,SAA6BD,EAAKG,EAASF,GAClCb,KAAKI,OAAOC,QAAQW,uBACrBhB,KAAKiB,QAAQL,EAAKG,EAASF,EAEnC,CAuBQK,CAAoBN,EAAK,mBAAoBC,EACjD,GAEP,EApCD","ignoreList":[]}
1
+ {"version":3,"names":["api","maybeRetriggerEvent","elt","evtName","detail","htmx","config","compat","doNotTriggerOldEvents","trigger","registerExtension","init","internalAPI","useExplicitInheritace","implicitInheritance","swapErrorResponseCodes","noSwap","push","htmx_after_implicitInheritance","suppressInheritanceLogs","console","log","name","parent","evt","CustomEvent","cancelable","bubbles","composed","dispatchEvent","htmx_after_init","htmx_after_request","htmx_after_swap","htmx_before_cleanup","htmx_before_history_update","htmx_before_init","htmx_before_process","htmx_before_request","htmx_before_swap","htmx_before_viewTransition","htmx_config_request","htmx_before_restore_history","htmx_after_push_into_history","htmx_after_replace_into_history","htmx_error"],"sources":["dist/ext/hx-compat.js"],"mappings":"AAAA,MAII,IAAIA,EAEJ,SAASC,EAAoBC,EAAKC,EAASC,GAClCC,KAAKC,OAAOC,QAAQC,uBACrBH,KAAKI,QAAQP,EAAKC,EAASC,EAEnC,CAEAC,KAAKK,kBAAkB,SAAU,CAC7BC,KAAOC,IACHZ,EAAMY,EAGDP,KAAKC,OAAOC,QAAQM,wBACrBR,KAAKC,OAAOQ,qBAAsB,GAIjCT,KAAKC,OAAOC,QAAQQ,wBACrBV,KAAKC,OAAOU,OAAOC,KAAK,MAAO,QAIvCC,+BAAgC,SAAUhB,EAAKE,GAC3C,IAAKC,KAAKC,OAAOC,QAAQY,wBAAyB,CAC9CC,QAAQC,IAAI,6CAA+CjB,EAAOkB,KAAO,UAAWpB,EAAK,qBAAsBE,EAAOmB,QACtH,IAAIC,EAAM,IAAIC,YAAY,yBAA0B,CAChDrB,SACAsB,YAAY,EACZC,SAAU,EACVC,UAAU,IAEd1B,EAAI2B,cAAcL,EACtB,CACJ,EACAM,gBAAiB,SAAU5B,EAAKE,GAC5BH,EAAoBC,EAAK,mBAAoBE,GAC7CH,EAAoBC,EAAK,wBAAyBE,GAClDH,EAAoBC,EAAK,YAAaE,EAC1C,EACA2B,mBAAoB,SAAU7B,EAAKE,GAC/BH,EAAoBC,EAAK,oBAAqBE,EAClD,EACA4B,gBAAiB,SAAU9B,EAAKE,GAC5BH,EAAoBC,EAAK,mBAAoBE,GAC7CH,EAAoBC,EAAK,iBAAkBE,EAC/C,EACA6B,oBAAqB,SAAU/B,EAAKE,GAChCH,EAAoBC,EAAK,4BAA6BE,EAC1D,EACA8B,2BAA4B,SAAUhC,EAAKE,GACvCH,EAAoBC,EAAK,2BAA4BE,GACrDH,EAAoBC,EAAK,yBAA0BE,EACvD,EACA+B,iBAAkB,SAAUjC,EAAKE,GAC7BH,EAAoBC,EAAK,oBAAqBE,EAClD,EACAgC,oBAAqB,SAAUlC,EAAKE,GAChCH,EAAoBC,EAAK,yBAA0BE,EACvD,EACAiC,oBAAqB,SAAUnC,EAAKE,GAChCH,EAAoBC,EAAK,qBAAsBE,GAC/CH,EAAoBC,EAAK,kBAAmBE,EAChD,EACAkC,iBAAkB,SAAUpC,EAAKE,GAC7BH,EAAoBC,EAAK,kBAAmBE,EAChD,EACAmC,2BAA4B,SAAUrC,EAAKE,GACvCH,EAAoBC,EAAK,wBAAyBE,EACtD,EACAoC,oBAAqB,SAAUtC,EAAKE,GAChCH,EAAoBC,EAAK,qBAAsBE,EACnD,EACAqC,4BAA6B,SAAUvC,EAAKE,GACxCH,EAAoBC,EAAK,sBAAuBE,EACpD,EACAsC,6BAA8B,SAAUxC,EAAKE,GACzCH,EAAoBC,EAAK,yBAA0BE,EACvD,EACAuC,gCAAiC,SAAUzC,EAAKE,GAC5CH,EAAoBC,EAAK,yBAA0BE,EACvD,EACAwC,WAAY,SAAU1C,EAAKE,GACvBH,EAAoBC,EAAK,mBAAoBE,EACjD,GAEP,EA1FD","ignoreList":[]}
@@ -0,0 +1,129 @@
1
+ //==========================================================
2
+ // head-support.js
3
+ //
4
+ // An extension to add head tag merging.
5
+ //==========================================================
6
+ (function () {
7
+
8
+ let api
9
+
10
+ function log() {
11
+ //console.log(arguments)
12
+ }
13
+
14
+ function mergeHead(newContent, defaultMergeStrategy) {
15
+
16
+ if (newContent && newContent.indexOf('<head') > -1) {
17
+ const htmlDoc = document.createElement("html")
18
+ // remove svgs to avoid conflicts
19
+ let contentWithSvgsRemoved = newContent.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim, '')
20
+ // extract head tag
21
+ let headTag = contentWithSvgsRemoved.match(/(<head(\s[^>]*>|>)([\s\S]*?)<\/head>)/im)
22
+
23
+ // if the head tag exists...
24
+ if (headTag) {
25
+
26
+ let added = []
27
+ let removed = []
28
+ let preserved = []
29
+ let nodesToAppend = []
30
+
31
+ htmlDoc.innerHTML = headTag
32
+ let newHeadTag = htmlDoc.querySelector("head")
33
+ let currentHead = document.head
34
+
35
+ if (newHeadTag == null) {
36
+ return
37
+ }
38
+
39
+ // put all new head elements into a Map, by their outerHTML
40
+ let srcToNewHeadNodes = new Map()
41
+ for (const newHeadChild of newHeadTag.children) {
42
+ srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild)
43
+ }
44
+
45
+ // determine merge strategy
46
+ let mergeStrategy = api.attributeValue(newHeadTag, "hx-head") || defaultMergeStrategy
47
+
48
+ // get the current head
49
+ for (const currentHeadElt of currentHead.children) {
50
+
51
+ // If the current head element is in the map
52
+ let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML)
53
+ let isReAppended = currentHeadElt.getAttribute("hx-head") === "re-eval"
54
+ let isPreserved = api.attributeValue(currentHeadElt, "hx-preserve") === "true"
55
+ if (inNewContent || isPreserved) {
56
+ if (isReAppended) {
57
+ // remove the current version and let the new version replace it and re-execute
58
+ removed.push(currentHeadElt)
59
+ } else {
60
+ // this element already exists and should not be re-appended, so remove it from
61
+ // the new content map, preserving it in the DOM
62
+ srcToNewHeadNodes.delete(currentHeadElt.outerHTML)
63
+ preserved.push(currentHeadElt)
64
+ }
65
+ } else {
66
+ if (mergeStrategy === "append") {
67
+ // we are appending and this existing element is not new content
68
+ // so if and only if it is marked for re-append do we do anything
69
+ if (isReAppended) {
70
+ removed.push(currentHeadElt)
71
+ nodesToAppend.push(currentHeadElt)
72
+ }
73
+ } else {
74
+ // if this is a merge, we remove this content since it is not in the new head
75
+ if (htmx.trigger(document.body, "htmx:before:head:remove", {headElement: currentHeadElt}) !== false) {
76
+ removed.push(currentHeadElt)
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ // Push the remaining new head elements in the Map into the
83
+ // nodes to append to the head tag
84
+ nodesToAppend.push(...srcToNewHeadNodes.values())
85
+ log("to append: ", nodesToAppend)
86
+
87
+ for (const newNode of nodesToAppend) {
88
+ log("adding: ", newNode)
89
+ let newElt = document.createRange().createContextualFragment(newNode.outerHTML)
90
+ log(newElt)
91
+ if (htmx.trigger(document.body, "htmx:before:head:add", {headElement: newElt}) !== false) {
92
+ currentHead.appendChild(newElt)
93
+ added.push(newElt)
94
+ }
95
+ }
96
+
97
+ // remove all removed elements, after we have appended the new elements to avoid
98
+ // additional network requests for things like style sheets
99
+ for (const removedElement of removed) {
100
+ if (htmx.trigger(document.body, "htmx:before:head:remove", {headElement: removedElement}) !== false) {
101
+ currentHead.removeChild(removedElement)
102
+ }
103
+ }
104
+
105
+ htmx.trigger(document.body, "htmx:after:head:merge", {
106
+ added: added,
107
+ kept: preserved,
108
+ removed: removed
109
+ })
110
+ }
111
+ }
112
+ }
113
+
114
+ htmx.registerExtension("hx-head", {
115
+ init: (internalAPI) => {
116
+ api = internalAPI;
117
+ },
118
+ htmx_after_swap: (elt, detail) => {
119
+ let ctx = detail.ctx
120
+ let target = ctx.target
121
+ // TODO - is there a better way to handle this? it used to be based on if the element was boosted
122
+ let defaultMergeStrategy = target === document.body ? "merge" : "append";
123
+ if (htmx.trigger(document.body, "htmx:before:head:merge", detail)) {
124
+ mergeHead(ctx.text, defaultMergeStrategy)
125
+ }
126
+ }
127
+ })
128
+
129
+ })()
@@ -0,0 +1 @@
1
+ !function(){let e;function t(){}htmx.registerExtension("hx-head",{init:t=>{e=t},htmx_after_swap:(r,d)=>{let h=d.ctx,o=h.target===document.body?"merge":"append";htmx.trigger(document.body,"htmx:before:head:merge",d)&&function(r,d){if(r&&r.indexOf("<head")>-1){const h=document.createElement("html");let o=r.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"").match(/(<head(\s[^>]*>|>)([\s\S]*?)<\/head>)/im);if(o){let r=[],a=[],n=[],m=[];h.innerHTML=o;let u=h.querySelector("head"),l=document.head;if(null==u)return;let c=new Map;for(const e of u.children)c.set(e.outerHTML,e);let i=e.attributeValue(u,"hx-head")||d;for(const t of l.children){let r=c.has(t.outerHTML),d="re-eval"===t.getAttribute("hx-head"),h="true"===e.attributeValue(t,"hx-preserve");r||h?d?a.push(t):(c.delete(t.outerHTML),n.push(t)):"append"===i?d&&(a.push(t),m.push(t)):!1!==htmx.trigger(document.body,"htmx:before:head:remove",{headElement:t})&&a.push(t)}m.push(...c.values());for(const e of m){t();let d=document.createRange().createContextualFragment(e.outerHTML);t(),!1!==htmx.trigger(document.body,"htmx:before:head:add",{headElement:d})&&(l.appendChild(d),r.push(d))}for(const e of a)!1!==htmx.trigger(document.body,"htmx:before:head:remove",{headElement:e})&&l.removeChild(e);htmx.trigger(document.body,"htmx:after:head:merge",{added:r,kept:n,removed:a})}}}(h.text,o)}})}();
@@ -0,0 +1 @@
1
+ {"version":3,"names":["api","log","htmx","registerExtension","init","internalAPI","htmx_after_swap","elt","detail","ctx","defaultMergeStrategy","target","document","body","trigger","newContent","indexOf","htmlDoc","createElement","headTag","replace","match","added","removed","preserved","nodesToAppend","innerHTML","newHeadTag","querySelector","currentHead","head","srcToNewHeadNodes","Map","newHeadChild","children","set","outerHTML","mergeStrategy","attributeValue","currentHeadElt","inNewContent","has","isReAppended","getAttribute","isPreserved","push","delete","headElement","values","newNode","newElt","createRange","createContextualFragment","appendChild","removedElement","removeChild","kept","mergeHead","text"],"sources":["dist/ext/hx-head.js"],"mappings":"CAKA,WAEI,IAAIA,EAEJ,SAASC,IAET,CAsGAC,KAAKC,kBAAkB,UAAW,CAC9BC,KAAOC,IACHL,EAAMK,GAEVC,gBAAiB,CAACC,EAAKC,KACnB,IAAIC,EAAMD,EAAOC,IAGbC,EAFSD,EAAIE,SAEqBC,SAASC,KAAO,QAAU,SAC5DX,KAAKY,QAAQF,SAASC,KAAM,yBAA0BL,IA7GlE,SAAmBO,EAAYL,GAE3B,GAAIK,GAAcA,EAAWC,QAAQ,UAAY,EAAG,CAChD,MAAMC,EAAUL,SAASM,cAAc,QAEvC,IAEIC,EAFyBJ,EAAWK,QAAQ,uCAAwC,IAEnDC,MAAM,2CAG3C,GAAIF,EAAS,CAET,IAAIG,EAAQ,GACRC,EAAU,GACVC,EAAY,GACZC,EAAgB,GAEpBR,EAAQS,UAAYP,EACpB,IAAIQ,EAAaV,EAAQW,cAAc,QACnCC,EAAcjB,SAASkB,KAE3B,GAAkB,MAAdH,EACA,OAIJ,IAAII,EAAoB,IAAIC,IAC5B,IAAK,MAAMC,KAAgBN,EAAWO,SAClCH,EAAkBI,IAAIF,EAAaG,UAAWH,GAIlD,IAAII,EAAgBrC,EAAIsC,eAAeX,EAAY,YAAcjB,EAGjE,IAAK,MAAM6B,KAAkBV,EAAYK,SAAU,CAG/C,IAAIM,EAAeT,EAAkBU,IAAIF,EAAeH,WACpDM,EAA0D,YAA3CH,EAAeI,aAAa,WAC3CC,EAAoE,SAAtD5C,EAAIsC,eAAeC,EAAgB,eACjDC,GAAgBI,EACZF,EAEAnB,EAAQsB,KAAKN,IAIbR,EAAkBe,OAAOP,EAAeH,WACxCZ,EAAUqB,KAAKN,IAGG,WAAlBF,EAGIK,IACAnB,EAAQsB,KAAKN,GACbd,EAAcoB,KAAKN,KAIuE,IAA1FrC,KAAKY,QAAQF,SAASC,KAAM,0BAA2B,CAACkC,YAAaR,KACrEhB,EAAQsB,KAAKN,EAI7B,CAIAd,EAAcoB,QAAQd,EAAkBiB,UAGxC,IAAK,MAAMC,KAAWxB,EAAe,CACjCxB,IACA,IAAIiD,EAAStC,SAASuC,cAAcC,yBAAyBH,EAAQb,WACrEnC,KACmF,IAA/EC,KAAKY,QAAQF,SAASC,KAAM,uBAAwB,CAACkC,YAAaG,MAClErB,EAAYwB,YAAYH,GACxB5B,EAAMuB,KAAKK,GAEnB,CAIA,IAAK,MAAMI,KAAkB/B,GACqE,IAA1FrB,KAAKY,QAAQF,SAASC,KAAM,0BAA2B,CAACkC,YAAaO,KACrEzB,EAAY0B,YAAYD,GAIhCpD,KAAKY,QAAQF,SAASC,KAAM,wBAAyB,CACjDS,MAAOA,EACPkC,KAAMhC,EACND,QAASA,GAEjB,CACJ,CACJ,CAYYkC,CAAUhD,EAAIiD,KAAMhD,KAKnC,CA3HD","ignoreList":[]}
@@ -5,17 +5,26 @@
5
5
  let preloadSpec = api.attributeValue(elt, "hx-preload");
6
6
  if (!preloadSpec && !elt._htmx?.boosted) return;
7
7
 
8
- let eventName;
9
- let timeout;
8
+ let preloadEvents = []
9
+ let timeout = 5000;
10
10
  if (preloadSpec) {
11
11
  let specs = api.parseTriggerSpecs(preloadSpec);
12
12
  if (specs.length === 0) return;
13
- let spec = specs[0];
14
- eventName = spec.name;
15
- timeout = spec.timeout ? htmx.parseInterval(spec.timeout) : 5000;
13
+ for (const spec of specs) {
14
+ preloadEvents.push(spec.name)
15
+ if (spec.timeout) {
16
+ timeout = htmx.parseInterval(spec.timeout)
17
+ }
18
+ }
16
19
  } else {
17
- eventName = htmx.config?.preload?.boostEvent || "mousedown"
18
- timeout = htmx.config?.preload?.boostTimeout ? htmx.parseInterval(htmx.config?.preload?.boostTimeout) : 5000;
20
+ //only boosted links are supported
21
+ if (elt.tagName === "A") {
22
+ if(htmx.config?.preload?.boostTimeout) {
23
+ timeout = htmx.parseInterval(htmx.config.preload.boostTimeout)
24
+ }
25
+ preloadEvents.push(htmx.config?.preload?.boostEvent || "mousedown");
26
+ preloadEvents.push("touchstart");
27
+ }
19
28
  }
20
29
 
21
30
  let preloadListener = async (evt) => {
@@ -47,9 +56,11 @@
47
56
  delete elt._htmx.preload;
48
57
  }
49
58
  };
50
- elt.addEventListener(eventName, preloadListener);
59
+ for (let eventName of preloadEvents) {
60
+ elt.addEventListener(eventName, preloadListener);
61
+ }
51
62
  elt._htmx.preloadListener = preloadListener;
52
- elt._htmx.preloadEvent = eventName;
63
+ elt._htmx.preloadEvents = preloadEvents;
53
64
  }
54
65
 
55
66
  htmx.registerExtension('preload', {
@@ -76,7 +87,9 @@
76
87
 
77
88
  htmx_before_cleanup: (elt) => {
78
89
  if (elt._htmx?.preloadListener) {
79
- elt.removeEventListener(elt._htmx.preloadEvent, elt._htmx.preloadListener);
90
+ for (let eventName of elt._htmx.preloadEvents) {
91
+ elt.removeEventListener(eventName, elt._htmx.preloadListener);
92
+ }
80
93
  }
81
94
  }
82
95
  });
@@ -1 +1 @@
1
- (()=>{let e;htmx.registerExtension("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)}})})();
1
+ (()=>{let e;htmx.registerExtension("preload",{init:t=>{e=t},htmx_after_init:t=>{!function(t){let r=e.attributeValue(t,"hx-preload");if(!r&&!t._htmx?.boosted)return;let o=[],a=5e3;if(r){let t=e.parseTriggerSpecs(r);if(0===t.length)return;for(const e of t)o.push(e.name),e.timeout&&(a=htmx.parseInterval(e.timeout))}else"A"===t.tagName&&(htmx.config?.preload?.boostTimeout&&(a=htmx.parseInterval(htmx.config.preload.boostTimeout)),o.push(htmx.config?.preload?.boostEvent||"mousedown"),o.push("touchstart"));let l=async r=>{let{method:o}=e.determineMethodAndAction(t,r);if("GET"!==o)return;if(t._htmx?.preload)return;let l=e.createRequestContext(t,r),n=t.form||t.closest("form"),h=e.collectFormData(t,n,r.submitter);e.handleHxVals(t,h);let m=l.request.action.replace?.(/#.*$/,""),s=new URLSearchParams(h);s.size&&(m+=(/\?/.test(m)?"&":"?")+s),t._htmx.preload={prefetch:fetch(m,l.request),action:m,expiresAt:Date.now()+a};try{await t._htmx.preload.prefetch}catch(e){delete t._htmx.preload}};for(let e of o)t.addEventListener(e,l);t._htmx.preloadListener=l,t._htmx.preloadEvents=o}(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=>{if(e._htmx?.preloadListener)for(let t of e._htmx.preloadEvents)e.removeEventListener(t,e._htmx.preloadListener)}})})();
@@ -1 +1 @@
1
- {"version":3,"names":["api","htmx","registerExtension","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,kBAAkB,UAAW,CAC9BC,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":[]}
1
+ {"version":3,"names":["api","htmx","registerExtension","init","internalAPI","htmx_after_init","elt","preloadSpec","attributeValue","_htmx","boosted","preloadEvents","timeout","specs","parseTriggerSpecs","length","spec","push","name","parseInterval","tagName","config","preload","boostTimeout","boostEvent","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","eventName","addEventListener","initializePreload","htmx_before_request","detail","htmx_before_cleanup","removeEventListener"],"sources":["dist/ext/hx-preload.js"],"mappings":"AAAA,MACI,IAAIA,EAgEJC,KAAKC,kBAAkB,UAAW,CAC9BC,KAAOC,IACHJ,EAAMI,GAGVC,gBAAkBC,KAnEtB,SAA2BA,GACvB,IAAIC,EAAcP,EAAIQ,eAAeF,EAAK,cAC1C,IAAKC,IAAgBD,EAAIG,OAAOC,QAAS,OAEzC,IAAIC,EAAgB,GAChBC,EAAU,IACd,GAAIL,EAAa,CACb,IAAIM,EAAQb,EAAIc,kBAAkBP,GAClC,GAAqB,IAAjBM,EAAME,OAAc,OACxB,IAAK,MAAMC,KAAQH,EACfF,EAAcM,KAAKD,EAAKE,MACpBF,EAAKJ,UACLA,EAAUX,KAAKkB,cAAcH,EAAKJ,SAG9C,KAEwB,MAAhBN,EAAIc,UACDnB,KAAKoB,QAAQC,SAASC,eACrBX,EAAUX,KAAKkB,cAAclB,KAAKoB,OAAOC,QAAQC,eAErDZ,EAAcM,KAAKhB,KAAKoB,QAAQC,SAASE,YAAc,aACvDb,EAAcM,KAAK,eAI3B,IAAIQ,EAAkBC,MAAOC,IACzB,IAAIC,OAACA,GAAU5B,EAAI6B,yBAAyBvB,EAAKqB,GACjD,GAAe,QAAXC,EAAkB,OAEtB,GAAItB,EAAIG,OAAOa,QAAS,OAExB,IAAIQ,EAAM9B,EAAI+B,qBAAqBzB,EAAKqB,GACpCK,EAAO1B,EAAI0B,MAAQ1B,EAAI2B,QAAQ,QAC/BC,EAAOlC,EAAImC,gBAAgB7B,EAAK0B,EAAML,EAAIS,WAC9CpC,EAAIqC,aAAa/B,EAAK4B,GAEtB,IAAII,EAASR,EAAIS,QAAQD,OAAOE,UAAU,OAAQ,IAG9CC,EAAS,IAAIC,gBAAgBR,GAC7BO,EAAOE,OAAML,IAAW,KAAKM,KAAKN,GAAU,IAAM,KAAOG,GAE7DnC,EAAIG,MAAMa,QAAU,CAChBuB,SAAUC,MAAMR,EAAQR,EAAIS,SAC5BD,OAAQA,EACRS,UAAWC,KAAKC,MAAQrC,GAG5B,UACUN,EAAIG,MAAMa,QAAQuB,QAC5B,CAAE,MAAOK,UACE5C,EAAIG,MAAMa,OACrB,GAEJ,IAAK,IAAI6B,KAAaxC,EAClBL,EAAI8C,iBAAiBD,EAAW1B,GAEpCnB,EAAIG,MAAMgB,gBAAkBA,EAC5BnB,EAAIG,MAAME,cAAgBA,CAC9B,CAQQ0C,CAAkB/C,IAGtBgD,oBAAqB,CAAChD,EAAKiD,KACvB,IAAIzB,IAACA,GAAOyB,EACZ,GAAIjD,EAAIG,OAAOa,SACXhB,EAAIG,MAAMa,QAAQgB,SAAWR,EAAIS,QAAQD,QACzCU,KAAKC,MAAQ3C,EAAIG,MAAMa,QAAQyB,UAAW,CAC1C,IAAIF,EAAWvC,EAAIG,MAAMa,QAAQuB,SACjCf,EAAIgB,MAAQ,IAAMD,SACXvC,EAAIG,MAAMa,OACrB,MACQhB,EAAIG,cAAcH,EAAIG,MAAMa,SAIxCkC,oBAAsBlD,IAClB,GAAIA,EAAIG,OAAOgB,gBACX,IAAK,IAAI0B,KAAa7C,EAAIG,MAAME,cAC5BL,EAAImD,oBAAoBN,EAAW7C,EAAIG,MAAMgB,mBAKhE,EA/FD","ignoreList":[]}
package/dist/ext/hx-ws.js CHANGED
@@ -78,6 +78,23 @@
78
78
  }
79
79
  }
80
80
 
81
+ // Close and remove listeners from old socket
82
+ if (entry.socket) {
83
+ let oldSocket = entry.socket;
84
+ entry.socket = null;
85
+
86
+ oldSocket.onopen = null;
87
+ oldSocket.onmessage = null;
88
+ oldSocket.onclose = null;
89
+ oldSocket.onerror = null;
90
+
91
+ try {
92
+ if (oldSocket.readyState === WebSocket.OPEN || oldSocket.readyState === WebSocket.CONNECTING) {
93
+ oldSocket.close();
94
+ }
95
+ } catch (e) {}
96
+ }
97
+
81
98
  try {
82
99
  entry.socket = new WebSocket(url);
83
100
 
@@ -93,7 +110,10 @@
93
110
  handleMessage(entry, event);
94
111
  });
95
112
 
96
- entry.socket.addEventListener('close', () => {
113
+ entry.socket.addEventListener('close', (event) => {
114
+ // Check if this socket is still the active one
115
+ if (event.target !== entry.socket) return;
116
+
97
117
  if (firstElement) {
98
118
  triggerEvent(firstElement, 'htmx:ws:close', { url });
99
119
  }
@@ -305,9 +325,9 @@
305
325
 
306
326
  if (partials.length === 0) {
307
327
  // No partials, treat entire payload as content for element's target
308
- let target = resolveTarget(element);
328
+ let target = resolveTarget(element, envelope.target);
309
329
  if (target) {
310
- swapContent(target, envelope.payload, element);
330
+ swapContent(target, envelope.payload, element, envelope.swap);
311
331
  }
312
332
  return;
313
333
  }
@@ -323,7 +343,13 @@
323
343
  });
324
344
  }
325
345
 
326
- function resolveTarget(element) {
346
+ function resolveTarget(element, envelopeTarget) {
347
+ if (envelopeTarget) {
348
+ if (envelopeTarget === 'this') {
349
+ return element;
350
+ }
351
+ return document.querySelector(envelopeTarget);
352
+ }
327
353
  let targetSelector = api.attributeValue(element, 'hx-target');
328
354
  if (targetSelector) {
329
355
  if (targetSelector === 'this') {
@@ -334,8 +360,8 @@
334
360
  return element;
335
361
  }
336
362
 
337
- function swapContent(target, content, sourceElement) {
338
- let swapStyle = api.attributeValue(sourceElement, 'hx-swap') || htmx.config.defaultSwap;
363
+ function swapContent(target, content, sourceElement, envelopeSwap) {
364
+ let swapStyle = envelopeSwap || api.attributeValue(sourceElement, 'hx-swap') || htmx.config.defaultSwap;
339
365
 
340
366
  // Parse swap style (just get the main style, ignore modifiers for now)
341
367
  let style = swapStyle.split(' ')[0];
@@ -549,7 +575,7 @@
549
575
  processNode(element);
550
576
 
551
577
  // Process descendants
552
- element.querySelectorAll('[hx-ws\\:connect], [hx-ws-connect], [hx-ws\\:send], [hx-ws-send], [hx-ws], [ws-connect], [ws-send]').forEach(processNode);
578
+ element.querySelectorAll('[hx-ws\\:connect], [hx-ws-connect], [hx-ws\\:send], [hx-ws-send], [hx-ws], [ws-connect], [ws-send]').forEach(processNode);
553
579
  },
554
580
 
555
581
  htmx_before_cleanup: (element) => {
@@ -1 +1 @@
1
- (()=>{let e;function t(t,n){let r=e.attributeValue(t,"hx-ws:"+n);if(null!=r)return r;let s=e.attributeValue(t,"hx-ws-"+n);if(null!=s)return s;if("send"===n){let n=e.attributeValue(t,"hx-ws");if(null!=n)return n}return null}function n(e,n){let r=t(e,n);return null!=r}function r(){return{reconnect:!0,reconnectDelay:1e3,reconnectMaxDelay:3e4,reconnectJitter:!0,autoConnect:!1,pauseInBackground:!0,...htmx.config.websockets||{}}}const s=new Map;function o(e,t){if(s.has(e)){let n=s.get(e);return n.refCount++,n.elements.add(t),n}let n={socket:null,refCount:1,elements:new Set([t]),reconnectAttempts:0,reconnectTimer:null,pendingRequests:new Map};return s.set(e,n),c(e,n),n}function c(t,n){let o=n.elements.values().next().value;if(!o||i(o,"htmx:before:ws:connect",{url:t}))try{n.socket=new WebSocket(t),n.socket.addEventListener("open",()=>{o&&i(o,"htmx:after:ws:connect",{url:t,socket:n.socket})}),n.socket.addEventListener("message",t=>{!function(t,n){let r;try{r=JSON.parse(n.data)}catch(e){let r=t.elements.values().next().value;return void(r&&i(r,"htmx:wsUnknownMessage",{data:n.data}))}r.channel=r.channel||"ui",r.format=r.format||"html";let s=null;r.request_id&&t.pendingRequests.has(r.request_id)?(s=t.pendingRequests.get(r.request_id).element,t.pendingRequests.delete(r.request_id)):s=t.elements.values().next().value;if(!i(s,"htmx:before:ws:message",{envelope:r,element:s}))return;"ui"===r.channel&&"html"===r.format?function(t,n){let r=(new DOMParser).parseFromString(n.payload,"text/html"),s=r.querySelectorAll("hx-partial");if(0===s.length){let r=function(t){let n=e.attributeValue(t,"hx-target");if(n)return"this"===n?t:document.querySelector(n);return t}(t);return void(r&&l(r,n.payload,t))}s.forEach(e=>{let n=e.getAttribute("id");if(!n)return;let r=document.getElementById(n);r&&l(r,e.innerHTML,t)})}(s,r):!r.channel||"audio"!==r.channel&&"json"!==r.channel&&"binary"!==r.channel?i(s,"htmx:wsUnknownMessage",{...r,element:s}):i(s,"htmx:wsMessage",{...r,element:s});i(s,"htmx:after:ws:message",{envelope:r,element:s})}(n,t)}),n.socket.addEventListener("close",()=>{if(o&&i(o,"htmx:ws:close",{url:t}),!s.has(t))return;r().reconnect&&n.refCount>0?function(e,t){let n=r(),s=t.reconnectAttempts;t.reconnectAttempts++;let o=Math.min((n.reconnectDelay||1e3)*Math.pow(2,s),n.reconnectMaxDelay||3e4);n.reconnectJitter&&(o*=.75+.5*Math.random());t.reconnectTimer=setTimeout(()=>{if(t.refCount>0){let n=t.elements.values().next().value;n&&i(n,"htmx:ws:reconnect",{url:e,attempts:s}),c(e,t)}},o)}(t,n):s.delete(t)}),n.socket.addEventListener("error",e=>{o&&i(o,"htmx:ws:error",{url:t,error:e})})}catch(e){o&&i(o,"htmx:ws:error",{url:t,error:e})}}function a(n,r){let o=t(n,"send");if(!o){let e=htmx.config.prefix||"",r=n.closest("["+e+"hx-ws\\:connect],["+e+"hx-ws-connect]");r&&(o=t(r,"connect"))}if(!o)return void console.error("No WebSocket connection found for hx-ws:send element",n);let c=s.get(o);if(!c||!c.socket||c.socket.readyState!==WebSocket.OPEN)return void i(n,"htmx:wsSendError",{url:o,error:"Connection not open"});let a=n.form||n.closest("form"),l=e.collectFormData(n,a,r.submitter);e.handleHxVals(n,l);let u={};for(let[e,t]of l)u[e]=t;let x="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),m={type:"request",request_id:x,event:r.type,values:u,path:o};n.id&&(m.id=n.id);let h={message:m,element:n,url:o};if(i(n,"htmx:before:ws:send",h))try{c.socket.send(JSON.stringify(h.message)),c.pendingRequests.set(x,{element:n,timestamp:Date.now()}),i(n,"htmx:after:ws:send",{message:h.message,url:o})}catch(e){i(n,"htmx:wsSendError",{url:o,error:e})}}function l(t,n,r){let s=(e.attributeValue(r,"hx-swap")||htmx.config.defaultSwap).split(" ")[0];switch(s=function(e){return"before"===e?"beforebegin":"after"===e?"afterend":"prepend"===e?"afterbegin":"append"===e?"beforeend":e}(s),s){case"innerHTML":default:t.innerHTML=n;break;case"outerHTML":t.outerHTML=n;break;case"beforebegin":t.insertAdjacentHTML("beforebegin",n);break;case"afterbegin":t.insertAdjacentHTML("afterbegin",n);break;case"beforeend":t.insertAdjacentHTML("beforeend",n);break;case"afterend":t.insertAdjacentHTML("afterend",n);break;case"delete":t.remove();case"none":}htmx.process(t)}function i(e,t,n={}){return!e||htmx.trigger(e,t,n)}function u(e){e._htmx?.wsUrl&&function(e,t){if(!s.has(e))return;let n=s.get(e);n.elements.delete(t),n.refCount--,n.refCount<=0&&(n.reconnectTimer&&clearTimeout(n.reconnectTimer),n.socket&&n.socket.readyState===WebSocket.OPEN&&n.socket.close(),s.delete(e))}(e._htmx.wsUrl,e),e._htmx?.wsSendHandler&&e.removeEventListener(e._htmx.wsSendEvent,e._htmx.wsSendHandler)}htmx.registerExtension("ws",{init:t=>{e=t,htmx.config.websockets||(htmx.config.websockets={})},htmx_after_process:s=>{const c=s=>{!function(e){if(e.hasAttribute("ws-connect")||e.hasAttribute("ws-send")){if(console.warn("HTMX WebSocket: Legacy attributes ws-connect and ws-send are deprecated. Please use hx-ws:connect/hx-ws-connect and hx-ws:send/hx-ws-send instead."),e.hasAttribute("ws-connect")){let t=e.getAttribute("ws-connect");e.hasAttribute("hx-ws-connect")||e.setAttribute("hx-ws-connect",t)}e.hasAttribute("ws-send")&&(e.hasAttribute("hx-ws-send")||e.setAttribute("hx-ws-send",""))}}(s),n(s,"connect")&&function(n){if(n._htmx?.wsInitialized)return;let s=t(n,"connect");if(!s)return;n._htmx=n._htmx||{},n._htmx.wsInitialized=!0;let c=r(),a=e.attributeValue(n,"hx-trigger");if(a||!0!==c.autoConnect){if(a){let t=e.parseTriggerSpecs(a);if(t.length>0){let e=t[0];"load"===e.name?(o(s,n),n._htmx=n._htmx||{},n._htmx.wsUrl=s):n.addEventListener(e.name,()=>{n._htmx?.wsUrl||(o(s,n),n._htmx=n._htmx||{},n._htmx.wsUrl=s)},{once:!0})}}}else o(s,n),n._htmx=n._htmx||{},n._htmx.wsUrl=s}(s),n(s,"send")&&function(n){if(n._htmx?.wsSendInitialized)return;let r=t(n,"send"),s=e.attributeValue(n,"hx-trigger");s||(s=n.matches("form")?"submit":n.matches("input:not([type=button]),select,textarea")?"change":"click");let c=e.parseTriggerSpecs(s);if(c.length>0){let e=c[0],t=e=>{n.matches("form")&&"submit"===e.type&&e.preventDefault(),r&&(n._htmx?.wsUrl||(o(r,n),n._htmx=n._htmx||{},n._htmx.wsUrl=r)),a(n,e)};n.addEventListener(e.name,t),n._htmx=n._htmx||{},n._htmx.wsSendInitialized=!0,n._htmx.wsSendHandler=t,n._htmx.wsSendEvent=e.name}}(s)};c(s),s.querySelectorAll("[hx-ws\\:connect], [hx-ws-connect], [hx-ws\\:send], [hx-ws-send], [hx-ws], [ws-connect], [ws-send]").forEach(c)},htmx_before_cleanup:e=>{u(e)}}),"undefined"!=typeof window&&window.htmx&&(window.htmx.ext=window.htmx.ext||{},window.htmx.ext.ws={getRegistry:()=>({clear:()=>{let e=Array.from(s.values());s.clear(),e.forEach(e=>{e.refCount=0,e.reconnectTimer&&clearTimeout(e.reconnectTimer),e.socket&&e.socket.close(),e.elements.clear(),e.pendingRequests.clear()})},get:e=>s.get(e),has:e=>s.has(e),size:s.size})})})();
1
+ (()=>{let e;function t(t,n){let r=e.attributeValue(t,"hx-ws:"+n);if(null!=r)return r;let s=e.attributeValue(t,"hx-ws-"+n);if(null!=s)return s;if("send"===n){let n=e.attributeValue(t,"hx-ws");if(null!=n)return n}return null}function n(e,n){let r=t(e,n);return null!=r}function r(){return{reconnect:!0,reconnectDelay:1e3,reconnectMaxDelay:3e4,reconnectJitter:!0,autoConnect:!1,pauseInBackground:!0,...htmx.config.websockets||{}}}const s=new Map;function o(e,t){if(s.has(e)){let n=s.get(e);return n.refCount++,n.elements.add(t),n}let n={socket:null,refCount:1,elements:new Set([t]),reconnectAttempts:0,reconnectTimer:null,pendingRequests:new Map};return s.set(e,n),c(e,n),n}function c(t,n){let o=n.elements.values().next().value;if(!o||i(o,"htmx:before:ws:connect",{url:t})){if(n.socket){let e=n.socket;n.socket=null,e.onopen=null,e.onmessage=null,e.onclose=null,e.onerror=null;try{e.readyState!==WebSocket.OPEN&&e.readyState!==WebSocket.CONNECTING||e.close()}catch(e){}}try{n.socket=new WebSocket(t),n.socket.addEventListener("open",()=>{o&&i(o,"htmx:after:ws:connect",{url:t,socket:n.socket})}),n.socket.addEventListener("message",t=>{!function(t,n){let r;try{r=JSON.parse(n.data)}catch(e){let r=t.elements.values().next().value;return void(r&&i(r,"htmx:wsUnknownMessage",{data:n.data}))}r.channel=r.channel||"ui",r.format=r.format||"html";let s=null;r.request_id&&t.pendingRequests.has(r.request_id)?(s=t.pendingRequests.get(r.request_id).element,t.pendingRequests.delete(r.request_id)):s=t.elements.values().next().value;if(!i(s,"htmx:before:ws:message",{envelope:r,element:s}))return;"ui"===r.channel&&"html"===r.format?function(t,n){let r=(new DOMParser).parseFromString(n.payload,"text/html"),s=r.querySelectorAll("hx-partial");if(0===s.length){let r=function(t,n){if(n)return"this"===n?t:document.querySelector(n);let r=e.attributeValue(t,"hx-target");if(r)return"this"===r?t:document.querySelector(r);return t}(t,n.target);return void(r&&l(r,n.payload,t,n.swap))}s.forEach(e=>{let n=e.getAttribute("id");if(!n)return;let r=document.getElementById(n);r&&l(r,e.innerHTML,t)})}(s,r):!r.channel||"audio"!==r.channel&&"json"!==r.channel&&"binary"!==r.channel?i(s,"htmx:wsUnknownMessage",{...r,element:s}):i(s,"htmx:wsMessage",{...r,element:s});i(s,"htmx:after:ws:message",{envelope:r,element:s})}(n,t)}),n.socket.addEventListener("close",e=>{if(e.target!==n.socket)return;if(o&&i(o,"htmx:ws:close",{url:t}),!s.has(t))return;r().reconnect&&n.refCount>0?function(e,t){let n=r(),s=t.reconnectAttempts;t.reconnectAttempts++;let o=Math.min((n.reconnectDelay||1e3)*Math.pow(2,s),n.reconnectMaxDelay||3e4);n.reconnectJitter&&(o*=.75+.5*Math.random());t.reconnectTimer=setTimeout(()=>{if(t.refCount>0){let n=t.elements.values().next().value;n&&i(n,"htmx:ws:reconnect",{url:e,attempts:s}),c(e,t)}},o)}(t,n):s.delete(t)}),n.socket.addEventListener("error",e=>{o&&i(o,"htmx:ws:error",{url:t,error:e})})}catch(e){o&&i(o,"htmx:ws:error",{url:t,error:e})}}}function a(n,r){let o=t(n,"send");if(!o){let e=htmx.config.prefix||"",r=n.closest("["+e+"hx-ws\\:connect],["+e+"hx-ws-connect]");r&&(o=t(r,"connect"))}if(!o)return void console.error("No WebSocket connection found for hx-ws:send element",n);let c=s.get(o);if(!c||!c.socket||c.socket.readyState!==WebSocket.OPEN)return void i(n,"htmx:wsSendError",{url:o,error:"Connection not open"});let a=n.form||n.closest("form"),l=e.collectFormData(n,a,r.submitter);e.handleHxVals(n,l);let u={};for(let[e,t]of l)u[e]=t;let m="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),x={type:"request",request_id:m,event:r.type,values:u,path:o};n.id&&(x.id=n.id);let h={message:x,element:n,url:o};if(i(n,"htmx:before:ws:send",h))try{c.socket.send(JSON.stringify(h.message)),c.pendingRequests.set(m,{element:n,timestamp:Date.now()}),i(n,"htmx:after:ws:send",{message:h.message,url:o})}catch(e){i(n,"htmx:wsSendError",{url:o,error:e})}}function l(t,n,r,s){let o=(s||e.attributeValue(r,"hx-swap")||htmx.config.defaultSwap).split(" ")[0];switch(o=function(e){return"before"===e?"beforebegin":"after"===e?"afterend":"prepend"===e?"afterbegin":"append"===e?"beforeend":e}(o),o){case"innerHTML":default:t.innerHTML=n;break;case"outerHTML":t.outerHTML=n;break;case"beforebegin":t.insertAdjacentHTML("beforebegin",n);break;case"afterbegin":t.insertAdjacentHTML("afterbegin",n);break;case"beforeend":t.insertAdjacentHTML("beforeend",n);break;case"afterend":t.insertAdjacentHTML("afterend",n);break;case"delete":t.remove();case"none":}htmx.process(t)}function i(e,t,n={}){return!e||htmx.trigger(e,t,n)}function u(e){e._htmx?.wsUrl&&function(e,t){if(!s.has(e))return;let n=s.get(e);n.elements.delete(t),n.refCount--,n.refCount<=0&&(n.reconnectTimer&&clearTimeout(n.reconnectTimer),n.socket&&n.socket.readyState===WebSocket.OPEN&&n.socket.close(),s.delete(e))}(e._htmx.wsUrl,e),e._htmx?.wsSendHandler&&e.removeEventListener(e._htmx.wsSendEvent,e._htmx.wsSendHandler)}htmx.registerExtension("ws",{init:t=>{e=t,htmx.config.websockets||(htmx.config.websockets={})},htmx_after_process:s=>{const c=s=>{!function(e){if(e.hasAttribute("ws-connect")||e.hasAttribute("ws-send")){if(console.warn("HTMX WebSocket: Legacy attributes ws-connect and ws-send are deprecated. Please use hx-ws:connect/hx-ws-connect and hx-ws:send/hx-ws-send instead."),e.hasAttribute("ws-connect")){let t=e.getAttribute("ws-connect");e.hasAttribute("hx-ws-connect")||e.setAttribute("hx-ws-connect",t)}e.hasAttribute("ws-send")&&(e.hasAttribute("hx-ws-send")||e.setAttribute("hx-ws-send",""))}}(s),n(s,"connect")&&function(n){if(n._htmx?.wsInitialized)return;let s=t(n,"connect");if(!s)return;n._htmx=n._htmx||{},n._htmx.wsInitialized=!0;let c=r(),a=e.attributeValue(n,"hx-trigger");if(a||!0!==c.autoConnect){if(a){let t=e.parseTriggerSpecs(a);if(t.length>0){let e=t[0];"load"===e.name?(o(s,n),n._htmx=n._htmx||{},n._htmx.wsUrl=s):n.addEventListener(e.name,()=>{n._htmx?.wsUrl||(o(s,n),n._htmx=n._htmx||{},n._htmx.wsUrl=s)},{once:!0})}}}else o(s,n),n._htmx=n._htmx||{},n._htmx.wsUrl=s}(s),n(s,"send")&&function(n){if(n._htmx?.wsSendInitialized)return;let r=t(n,"send"),s=e.attributeValue(n,"hx-trigger");s||(s=n.matches("form")?"submit":n.matches("input:not([type=button]),select,textarea")?"change":"click");let c=e.parseTriggerSpecs(s);if(c.length>0){let e=c[0],t=e=>{n.matches("form")&&"submit"===e.type&&e.preventDefault(),r&&(n._htmx?.wsUrl||(o(r,n),n._htmx=n._htmx||{},n._htmx.wsUrl=r)),a(n,e)};n.addEventListener(e.name,t),n._htmx=n._htmx||{},n._htmx.wsSendInitialized=!0,n._htmx.wsSendHandler=t,n._htmx.wsSendEvent=e.name}}(s)};c(s),s.querySelectorAll("[hx-ws\\:connect], [hx-ws-connect], [hx-ws\\:send], [hx-ws-send], [hx-ws], [ws-connect], [ws-send]").forEach(c)},htmx_before_cleanup:e=>{u(e)}}),"undefined"!=typeof window&&window.htmx&&(window.htmx.ext=window.htmx.ext||{},window.htmx.ext.ws={getRegistry:()=>({clear:()=>{let e=Array.from(s.values());s.clear(),e.forEach(e=>{e.refCount=0,e.reconnectTimer&&clearTimeout(e.reconnectTimer),e.socket&&e.socket.close(),e.elements.clear(),e.pendingRequests.clear()})},get:e=>s.get(e),has:e=>s.has(e),size:s.size})})})();
@@ -1 +1 @@
1
- {"version":3,"names":["api","getWsAttribute","element","attrName","colonValue","attributeValue","hyphenValue","plainValue","hasWsAttribute","value","getConfig","reconnect","reconnectDelay","reconnectMaxDelay","reconnectJitter","autoConnect","pauseInBackground","htmx","config","websockets","connectionRegistry","Map","getOrCreateConnection","url","has","entry","get","refCount","elements","add","socket","Set","reconnectAttempts","reconnectTimer","pendingRequests","set","createWebSocket","firstElement","values","next","triggerEvent","WebSocket","addEventListener","event","envelope","JSON","parse","data","e","channel","format","targetElement","request_id","delete","doc","DOMParser","parseFromString","payload","partials","querySelectorAll","length","target","targetSelector","document","querySelector","resolveTarget","swapContent","forEach","partial","targetId","getAttribute","getElementById","innerHTML","handleHtmlMessage","handleMessage","attempts","delay","Math","min","pow","random","setTimeout","scheduleReconnect","error","sendMessage","prefix","ancestor","closest","console","readyState","OPEN","form","body","collectFormData","submitter","handleHxVals","key","requestId","replace","c","r","toString","message","type","path","id","detail","send","stringify","timestamp","Date","now","content","sourceElement","style","defaultSwap","split","normalizeSwapStyle","outerHTML","insertAdjacentHTML","remove","process","eventName","trigger","cleanupElement","_htmx","wsUrl","clearTimeout","close","decrementRef","wsSendHandler","removeEventListener","wsSendEvent","registerExtension","init","internalAPI","htmx_after_process","processNode","node","hasAttribute","warn","setAttribute","checkLegacyAttributes","wsInitialized","connectUrl","triggerSpec","specs","parseTriggerSpecs","spec","name","once","initializeElement","wsSendInitialized","sendUrl","matches","handler","evt","preventDefault","initializeSendElement","htmx_before_cleanup","window","ext","ws","getRegistry","clear","entries","Array","from","size"],"sources":["dist/ext/hx-ws.js"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["api","getWsAttribute","element","attrName","colonValue","attributeValue","hyphenValue","plainValue","hasWsAttribute","value","getConfig","reconnect","reconnectDelay","reconnectMaxDelay","reconnectJitter","autoConnect","pauseInBackground","htmx","config","websockets","connectionRegistry","Map","getOrCreateConnection","url","has","entry","get","refCount","elements","add","socket","Set","reconnectAttempts","reconnectTimer","pendingRequests","set","createWebSocket","firstElement","values","next","triggerEvent","oldSocket","onopen","onmessage","onclose","onerror","readyState","WebSocket","OPEN","CONNECTING","close","e","addEventListener","event","envelope","JSON","parse","data","channel","format","targetElement","request_id","delete","doc","DOMParser","parseFromString","payload","partials","querySelectorAll","length","target","envelopeTarget","document","querySelector","targetSelector","resolveTarget","swapContent","swap","forEach","partial","targetId","getAttribute","getElementById","innerHTML","handleHtmlMessage","handleMessage","attempts","delay","Math","min","pow","random","setTimeout","scheduleReconnect","error","sendMessage","prefix","ancestor","closest","console","form","body","collectFormData","submitter","handleHxVals","key","requestId","replace","c","r","toString","message","type","path","id","detail","send","stringify","timestamp","Date","now","content","sourceElement","envelopeSwap","style","defaultSwap","split","normalizeSwapStyle","outerHTML","insertAdjacentHTML","remove","process","eventName","trigger","cleanupElement","_htmx","wsUrl","clearTimeout","decrementRef","wsSendHandler","removeEventListener","wsSendEvent","registerExtension","init","internalAPI","htmx_after_process","processNode","node","hasAttribute","warn","setAttribute","checkLegacyAttributes","wsInitialized","connectUrl","triggerSpec","specs","parseTriggerSpecs","spec","name","once","initializeElement","wsSendInitialized","sendUrl","matches","handler","evt","preventDefault","initializeSendElement","htmx_before_cleanup","window","ext","ws","getRegistry","clear","entries","Array","from","size"],"sources":["dist/ext/hx-ws.js"],"mappings":"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","ignoreList":[]}