talkdom 0.1.3 → 0.1.5

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 CHANGED
@@ -45,6 +45,7 @@ args: ["/partial", "inner"]
45
45
  - Lifecycle events (`talkdom:done`, `talkdom:error`) on receiver elements
46
46
  - Programmatic API via `talkDOM.send` (returns a promise)
47
47
  - Extensible methods via `talkDOM.methods`
48
+ - Configurable max pollers via `talkDOM.maxPollers`
48
49
 
49
50
  ## Usage
50
51
 
@@ -103,7 +104,11 @@ Receivers poll by adding `poll:` as the last keyword with an interval (`s` or `m
103
104
  <div receiver="feed get:apply: /updates inner poll: 10s"></div>
104
105
  ```
105
106
 
106
- Polling stops automatically when the element is removed from the DOM.
107
+ Polling stops automatically when the element is removed from the DOM. A maximum of 64 concurrent pollers is enforced by default. Adjust via:
108
+
109
+ ```js
110
+ talkDOM.maxPollers = 128;
111
+ ```
107
112
 
108
113
  ## Persist
109
114
 
@@ -1 +1 @@
1
- !function(){function e(e){for(var t=e.trim(),r=t.split(/\s+/),n=r[0],o=t.substring(n.length).trim(),i=r.slice(1),c=[],u=[],s=[],a=0;a<i.length;a++){var l=i[a];l.endsWith(":")?(c.length>0&&s.length>0?(u.push(s.join(" ")),s=[]):c.length>0&&u.push(""),c.push(l)):s.push(l)}return c.length>0&&u.push(s.join(" ")),{receiver:n,selector:c.join(""),keywords:c,args:u,body:o}}function t(e){return e.getAttribute("receiver").trim().split(/\s+/)[0]}function r(e){return document.querySelectorAll('[receiver~="'+e+'"]')}function n(e,r,n){if(function(e,t){var r=e.getAttribute("accepts");return!r||-1!==r.split(/\s+/).indexOf(t)}(e,r)){switch(r){case"inner":e.innerHTML=n;break;case"text":e.textContent=n;break;case"append":e.insertAdjacentHTML("beforeend",n);break;case"outer":e.outerHTML=n}return function(e,r){if(e.hasAttribute("receiver")&&e.hasAttribute("persist")){var n="talkDOM:"+t(e);"outer"===r?localStorage.setItem(n,JSON.stringify({op:r,content:e.outerHTML})):localStorage.setItem(n,JSON.stringify({op:r,content:e.innerHTML}))}}(e,r),n}console.error(t(e)+" does not accept "+r)}function o(e,t,r){var n,o={"X-TalkDOM-Request":"true","X-TalkDOM-Current-URL":location.href};if(r&&(o["X-TalkDOM-Receiver"]=r),"GET"!==e){var i=(n=document.querySelector('meta[name="csrf-token"]'))?n.getAttribute("content"):"";i?o["X-CSRF-Token"]=i:console.warn("talkDOM: no CSRF token found for "+e+" "+t)}return fetch(t,{method:e,headers:o}).then(function(r){if(!r.ok)return console.error("talkDOM: "+e+" "+t+" "+r.status),Promise.reject(r.status);var n=r.headers.get("X-TalkDOM-Trigger");return r.text().then(function(e){return n&&f(n),e})},function(r){return console.error("talkDOM: "+e+" "+t+" failed",r),Promise.reject(r)})}function i(e){return e.hasAttribute("receiver")?t(e):""}const c={"get:":function(e,t){return o("GET",t,i(e))},"post:":function(e,t){return o("POST",t,i(e))},"put:":function(e,t){return o("PUT",t,i(e))},"delete:":function(e,t){return o("DELETE",t,i(e))},"confirm:":function(e,t){if(!confirm(t))return Promise.reject("cancelled")},"apply:":function(e,t,r){return n(e,r,t)},"get:apply:":function(e,t,r){return o("GET",t,i(e)).then(function(t){return n(e,r,t)})},"post:apply:":function(e,t,r){return o("POST",t,i(e)).then(function(t){return n(e,r,t)})},"put:apply:":function(e,t,r){return o("PUT",t,i(e)).then(function(t){return n(e,r,t)})},"delete:apply:":function(e,t,r){return o("DELETE",t,i(e)).then(function(t){return n(e,r,t)})}};var u=!1;function s(e){e&&e.sender&&(u=!0,f(e.sender),u=!1)}function a(e,t){var n=r(e.receiver);if(0!==n.length){var o=c[e.selector];if(o){var i,u=void 0!==t?[t].concat(e.args):e.args;return n.forEach(function(t){var n={receiver:e.receiver,selector:e.selector,args:e.args},c=t.parentNode,s=t.nextElementSibling;function a(){return t.isConnected?t:(s&&s.isConnected?s.previousElementSibling:c&&c.isConnected?c.lastElementChild:null)||r(e.receiver)[0]}if((i=o(t,...u))&&"function"==typeof i.then)i.then(function(){var e=a();e&&e.dispatchEvent(new CustomEvent("talkdom:done",{bubbles:!0,detail:n}))},function(e){n.error=e;var t=a();t&&t.dispatchEvent(new CustomEvent("talkdom:error",{bubbles:!0,detail:n}))});else{var l=a();l&&l.dispatchEvent(new CustomEvent("talkdom:done",{bubbles:!0,detail:n}))}}),i}console.error(e.receiver+" does not understand "+e.selector)}else console.error(e.receiver+" not found")}function l(t){var r=t.split(";").map(function(t){var r=t.trim();if(!r)return Promise.resolve();var n=r.split("|").map(function(e){return e.trim()}).filter(Boolean);return 1===n.length?Promise.resolve(a(e(n[0]))):n.reduce(function(t,r){var n=e(r);return Promise.resolve(t).then(function(e){return a(n,e)})},void 0)});return Promise.all(r)}function f(e){l(e).catch(function(e){console.warn("talkDOM:",e)})}function d(t){var r=t.getAttribute("sender");f(r),u||function(t,r){if(t.hasAttribute("push-url")){var n=t.getAttribute("push-url");n||(n=e(r.split(";")[0].split("|")[0].trim()).args[0]||""),n&&location.pathname+location.search!==n&&history.pushState({sender:r},"",n)}}(t,r)}window.addEventListener("popstate",function(e){s(e.state)}),document.addEventListener("click",function(e){const t=e.target.closest("[sender]");t&&(e.preventDefault(),d(t))}),document.querySelectorAll("[persist]").forEach(function(e){if(e.hasAttribute("receiver")){var r=t(e),n=localStorage.getItem("talkDOM:"+r);if(n){var o;try{o=JSON.parse(n)}catch(e){return void localStorage.removeItem("talkDOM:"+r)}"outer"===o.op?e.outerHTML=o.content:e.innerHTML=o.content}}}),s(history.state),document.querySelectorAll("[receiver]").forEach(function(t){var n=e(t.getAttribute("receiver"));if("poll:"===n.keywords[n.keywords.length-1]){var o=function(e){var t=e.match(/^(\d+)(s|ms)$/);if(!t)return null;var r=parseInt(t[1],10);return"s"===t[2]?1e3*r:r}(n.args[n.args.length-1]);if(o)var i=n.keywords.slice(0,-1).join(""),u=n.args.slice(0,-1),s=n.receiver,a=r(s),l=setInterval(function(){if(t.isConnected){if(0!==a.length&&a[0].isConnected||(a=r(s)),0!==a.length){var e=c[i];e?a.forEach(function(t){e(t,...u)}):console.error(s+" does not understand "+i)}}else clearInterval(l)},o);else console.error("poll: invalid interval for "+n.receiver)}}),window.talkDOM={methods:c,send:l}}();
1
+ !function(){function e(e){for(var t=e.trim(),r=t.split(/\s+/),n=r[0],o=t.substring(n.length).trim(),i=r.slice(1),c=[],u=[],s=[],a=0;a<i.length;a++){var l=i[a];l.endsWith(":")?(c.length>0&&s.length>0?(u.push(s.join(" ")),s=[]):c.length>0&&u.push(""),c.push(l)):s.push(l)}return c.length>0&&u.push(s.join(" ")),{receiver:n,selector:c.join(""),keywords:c,args:u,body:o}}function t(e){return e.getAttribute("receiver").trim().split(/\s+/)[0]}var r={},n=!1;function o(e){if(n||(r={},n=!0),r[e])return r[e];var t=document.querySelectorAll('[receiver~="'+e+'"]');return r[e]=t,t}function i(e,r,n){if(function(e,t){var r=e.getAttribute("accepts");return!r||-1!==r.split(/\s+/).indexOf(t)}(e,r)){switch(r){case"inner":e.innerHTML=n;break;case"text":e.textContent=n;break;case"append":e.insertAdjacentHTML("beforeend",n);break;case"outer":e.outerHTML=n}return function(e,r){if(e.hasAttribute("receiver")&&e.hasAttribute("persist")){var n="talkDOM:"+t(e);"outer"===r?localStorage.setItem(n,JSON.stringify({op:r,content:e.outerHTML})):localStorage.setItem(n,JSON.stringify({op:r,content:e.innerHTML}))}}(e,r),n}console.error(t(e)+" does not accept "+r)}function c(e,t,r){var n,o={"X-TalkDOM-Request":"true","X-TalkDOM-Current-URL":location.href};if(r&&(o["X-TalkDOM-Receiver"]=r),"GET"!==e){var i=(n=document.querySelector('meta[name="csrf-token"]'))?n.getAttribute("content"):"";i?o["X-CSRF-Token"]=i:console.warn("talkDOM: no CSRF token found for "+e+" "+t)}return fetch(t,{method:e,headers:o}).then(function(r){if(!r.ok)return console.error("talkDOM: "+e+" "+t+" "+r.status),Promise.reject(r.status);var n=r.headers.get("X-TalkDOM-Trigger");return r.text().then(function(e){return n&&d(n),e})},function(r){return console.error("talkDOM: "+e+" "+t+" failed",r),Promise.reject(r)})}function u(e){return e.hasAttribute("receiver")?t(e):""}new MutationObserver(function(){n=!1}).observe(document,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["receiver"]});const s={"get:":function(e,t){return c("GET",t,u(e))},"post:":function(e,t){return c("POST",t,u(e))},"put:":function(e,t){return c("PUT",t,u(e))},"delete:":function(e,t){return c("DELETE",t,u(e))},"confirm:":function(e,t){if(!confirm(t))return Promise.reject("cancelled")},"apply:":function(e,t,r){return i(e,r,t)},"get:apply:":function(e,t,r){return c("GET",t,u(e)).then(function(t){return i(e,r,t)})},"post:apply:":function(e,t,r){return c("POST",t,u(e)).then(function(t){return i(e,r,t)})},"put:apply:":function(e,t,r){return c("PUT",t,u(e)).then(function(t){return i(e,r,t)})},"delete:apply:":function(e,t,r){return c("DELETE",t,u(e)).then(function(t){return i(e,r,t)})}};var a=!1;function l(e){e&&e.sender&&(a=!0,d(e.sender),a=!1)}function f(e,t){var r=o(e.receiver);if(0!==r.length){var n=s[e.selector];if(n){var i,c=void 0!==t?[t].concat(e.args):e.args;return r.forEach(function(t){var r={receiver:e.receiver,selector:e.selector,args:e.args},u=t.parentNode,s=t.nextElementSibling;function a(){return t.isConnected?t:(s&&s.isConnected?s.previousElementSibling:u&&u.isConnected?u.lastElementChild:null)||o(e.receiver)[0]}if((i=n(t,...c))&&"function"==typeof i.then)i.then(function(){var e=a();e&&e.dispatchEvent(new CustomEvent("talkdom:done",{bubbles:!0,detail:r}))},function(e){r.error=e;var t=a();t&&t.dispatchEvent(new CustomEvent("talkdom:error",{bubbles:!0,detail:r}))});else{var l=a();l&&l.dispatchEvent(new CustomEvent("talkdom:done",{bubbles:!0,detail:r}))}}),i}console.error(e.receiver+" does not understand "+e.selector)}else console.error(e.receiver+" not found")}function v(t){var r=t.split(";").map(function(t){var r=t.trim();if(!r)return Promise.resolve();var n=r.split("|").map(function(e){return e.trim()}).filter(Boolean);return 1===n.length?Promise.resolve(f(e(n[0]))):n.reduce(function(t,r){var n=e(r);return Promise.resolve(t).then(function(e){return f(n,e)})},void 0)});return Promise.all(r)}function d(e){v(e).catch(function(e){console.warn("talkDOM:",e)})}function h(t){var r=t.getAttribute("sender");d(r),a||function(t,r){if(t.hasAttribute("push-url")){var n=t.getAttribute("push-url");n||(n=e(r.split(";")[0].split("|")[0].trim()).args[0]||""),n&&location.pathname+location.search!==n&&history.pushState({sender:r},"",n)}}(t,r)}window.addEventListener("popstate",function(e){l(e.state)});var p=0,m=64;document.addEventListener("click",function(e){const t=e.target.closest("[sender]");t&&(e.preventDefault(),h(t))}),document.querySelectorAll("[persist]").forEach(function(e){if(e.hasAttribute("receiver")){var r=t(e),n=localStorage.getItem("talkDOM:"+r);if(n){var o;try{o=JSON.parse(n)}catch(e){return void localStorage.removeItem("talkDOM:"+r)}"outer"===o.op?e.outerHTML=o.content:e.innerHTML=o.content}}}),l(history.state),document.querySelectorAll("[receiver]").forEach(function(t){var r=e(t.getAttribute("receiver"));if("poll:"===r.keywords[r.keywords.length-1])if(p>=m)console.warn("talkDOM: max pollers ("+m+") reached, ignoring "+r.receiver);else{var n=function(e){var t=e.match(/^(\d+)(s|ms)$/);if(!t)return null;var r=parseInt(t[1],10);return"s"===t[2]?1e3*r:r}(r.args[r.args.length-1]);if(n){var i=r.keywords.slice(0,-1).join(""),c=r.args.slice(0,-1),u=r.receiver,a=o(u);p++;var l=setInterval(function(){if(!t.isConnected)return clearInterval(l),void p--;if(0!==a.length&&a[0].isConnected||(a=o(u)),0!==a.length){var e=s[i];e?a.forEach(function(t){e(t,...c)}):console.error(u+" does not understand "+i)}},n)}else console.error("poll: invalid interval for "+r.receiver)}}),window.talkDOM={methods:s,send:v,get maxPollers(){return m},set maxPollers(e){m=e}}}();
@@ -1 +1 @@
1
- {"version":3,"names":["parseMessage","str","trimmed","trim","tokens","split","receiver","body","substring","length","rest","slice","keywords","args","currentArg","i","token","endsWith","push","join","selector","receiverName","el","getAttribute","findReceivers","name","document","querySelectorAll","apply","op","content","attr","indexOf","accepts","innerHTML","textContent","insertAdjacentHTML","outerHTML","hasAttribute","key","localStorage","setItem","JSON","stringify","persist","console","error","request","method","url","meta","headers","location","href","querySelector","warn","fetch","then","r","ok","status","Promise","reject","trigger","get","text","dispatchRaw","err","recName","methods","message","confirm","t","pushing","replayState","state","sender","send","msg","piped","els","result","undefined","concat","forEach","detail","parent","parentNode","next","nextElementSibling","resolveTarget","isConnected","previousElementSibling","lastElementChild","target","dispatchEvent","CustomEvent","bubbles","run","raw","chains","map","chain","resolve","steps","s","filter","Boolean","reduce","prev","step","all","catch","dispatch","senderEl","pathname","search","history","pushState","pushUrl","window","addEventListener","e","closest","preventDefault","getItem","parse","removeItem","interval","match","n","parseInt","parseInterval","cachedTargets","id","setInterval","clearInterval","talkDOM"],"sources":["index.js"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["parseMessage","str","trimmed","trim","tokens","split","receiver","body","substring","length","rest","slice","keywords","args","currentArg","i","token","endsWith","push","join","selector","receiverName","el","getAttribute","receiverCache","cacheValid","findReceivers","name","result","document","querySelectorAll","apply","op","content","attr","indexOf","accepts","innerHTML","textContent","insertAdjacentHTML","outerHTML","hasAttribute","key","localStorage","setItem","JSON","stringify","persist","console","error","request","method","url","meta","headers","location","href","querySelector","warn","fetch","then","r","ok","status","Promise","reject","trigger","get","text","dispatchRaw","err","recName","MutationObserver","observe","childList","subtree","attributes","attributeFilter","methods","message","confirm","t","pushing","replayState","state","sender","send","msg","piped","els","undefined","concat","forEach","detail","parent","parentNode","next","nextElementSibling","resolveTarget","isConnected","previousElementSibling","lastElementChild","target","dispatchEvent","CustomEvent","bubbles","run","raw","chains","map","chain","resolve","steps","s","filter","Boolean","reduce","prev","step","all","catch","dispatch","senderEl","pathname","search","history","pushState","pushUrl","window","addEventListener","e","activePollers","maxPollers","closest","preventDefault","getItem","parse","removeItem","interval","match","n","parseInt","parseInterval","cachedTargets","id","setInterval","clearInterval","talkDOM"],"sources":["index.js"],"mappings":"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","ignoreList":[]}
package/index.js CHANGED
@@ -38,9 +38,20 @@
38
38
  return el.getAttribute("receiver").trim().split(/\s+/)[0];
39
39
  }
40
40
 
41
+ // Receiver cache: maps name -> NodeList, invalidated by DOM mutations.
42
+ var receiverCache = {};
43
+ var cacheValid = false;
44
+
45
+ new MutationObserver(function () { cacheValid = false; })
46
+ .observe(document, { childList: true, subtree: true, attributes: true, attributeFilter: ["receiver"] });
47
+
41
48
  // Find all elements whose receiver attribute contains the given name.
42
49
  function findReceivers(name) {
43
- return document.querySelectorAll('[receiver~="' + name + '"]');
50
+ if (!cacheValid) { receiverCache = {}; cacheValid = true; }
51
+ if (receiverCache[name]) return receiverCache[name];
52
+ var result = document.querySelectorAll('[receiver~="' + name + '"]');
53
+ receiverCache[name] = result;
54
+ return result;
44
55
  }
45
56
 
46
57
  // Check if a receiver allows a given apply operation (inner, text, append, outer).
@@ -71,7 +82,7 @@
71
82
  var raw = localStorage.getItem("talkDOM:" + name);
72
83
  if (!raw) return;
73
84
  var state;
74
- try { state = JSON.parse(raw); } catch (e) { localStorage.removeItem("talkDOM:" + name); return; }
85
+ try { state = JSON.parse(raw); } catch (e) { void e; localStorage.removeItem("talkDOM:" + name); return; }
75
86
  if (state.op === "outer") {
76
87
  el.outerHTML = state.content;
77
88
  } else {
@@ -262,10 +273,17 @@
262
273
 
263
274
  // Set up a repeating interval for receivers with a poll: keyword.
264
275
  // Stops automatically when the element is removed from the DOM.
276
+ var activePollers = 0;
277
+ var maxPollers = 64;
278
+
265
279
  function startPolling(el) {
266
280
  var attr = el.getAttribute("receiver");
267
281
  var msg = parseMessage(attr);
268
282
  if (msg.keywords[msg.keywords.length - 1] !== "poll:") return;
283
+ if (activePollers >= maxPollers) {
284
+ console.warn("talkDOM: max pollers (" + maxPollers + ") reached, ignoring " + msg.receiver);
285
+ return;
286
+ }
269
287
  var interval = parseInterval(msg.args[msg.args.length - 1]);
270
288
  if (!interval) {
271
289
  console.error("poll: invalid interval for " + msg.receiver);
@@ -275,8 +293,9 @@
275
293
  var args = msg.args.slice(0, -1);
276
294
  var name = msg.receiver;
277
295
  var cachedTargets = findReceivers(name);
296
+ activePollers++;
278
297
  var id = setInterval(function () {
279
- if (!el.isConnected) { clearInterval(id); return; }
298
+ if (!el.isConnected) { clearInterval(id); activePollers--; return; }
280
299
  if (cachedTargets.length === 0 || !cachedTargets[0].isConnected) {
281
300
  cachedTargets = findReceivers(name);
282
301
  }
@@ -303,6 +322,11 @@
303
322
  replayState(history.state);
304
323
  document.querySelectorAll("[receiver]").forEach(startPolling);
305
324
 
306
- window.talkDOM = { methods: methods, send: run };
325
+ window.talkDOM = {
326
+ methods: methods,
327
+ send: run,
328
+ get maxPollers() { return maxPollers; },
329
+ set maxPollers(n) { maxPollers = n; },
330
+ };
307
331
 
308
332
  }());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "talkdom",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Smalltalk-inspired message passing for the DOM",
5
5
  "main": "index.js",
6
6
  "jsdelivr": "dist/talkdom.min.js",