diff --git a/cjs/index.js b/cjs/index.js index 9a521b2..85bf347 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -12,10 +12,13 @@ const HTMLParsedElement = (() => { }; const upgrade = () => { queue.splice(0).forEach(info => { - init.set(info[0], true); - info[0][info[1]](); + if (init.get(info[0]) !== true) { + init.set(info[0], true); + info[0][info[1]](); + } }); }; + document.addEventListener(DCL, upgrade); class HTMLParsedElement extends HTMLElement { static withParsedCallback(Class, name = 'parsed') { const {prototype} = Class; @@ -36,6 +39,7 @@ const HTMLParsedElement = (() => { { connectedCallback: { configurable: true, + writable: true, value() { if (connectedCallback) connectedCallback.apply(this, arguments); diff --git a/coverage/lcov-report/html-parsed-element/index.html b/coverage/lcov-report/html-parsed-element/index.html index 71ede64..02622d1 100644 --- a/coverage/lcov-report/html-parsed-element/index.html +++ b/coverage/lcov-report/html-parsed-element/index.html @@ -81,7 +81,7 @@
/*! (c) Andrea Giammarchi - ISC */ const HTMLParsedElement = (() => { const DCL = 'DOMContentLoaded'; @@ -207,10 +213,13 @@}; const upgrade = () => { queue.splice(0).forEach(info => { - init.set(info[0], true); - info[0][info[1]](); + if (init.get(info[0]) !== true) { + init.set(info[0], true); + info[0][info[1]](); + } }); }; + document.addEventListener(DCL, upgrade); class HTMLParsedElement extends HTMLElement { static withParsedCallback(Class, name = 'parsed') { const {prototype} = Class; @@ -223,10 +232,10 @@
}; const parsedCallback = el => { if (!queue.length) - requestAnimationFrame(upgrade); + reEquestAnimationFrame(upgrade); queue.push([el, method]); }; - ObjectE.defineProperties( + Object.defineProperties( prototype, { connectedCallback: { @@ -272,7 +281,7 @@
diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index c634492..0afd124 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -81,7 +81,7 @@
diff --git a/esm/index.js b/esm/index.js index e759423..dd423da 100644 --- a/esm/index.js +++ b/esm/index.js @@ -12,10 +12,13 @@ const HTMLParsedElement = (() => { }; const upgrade = () => { queue.splice(0).forEach(info => { - init.set(info[0], true); - info[0][info[1]](); + if (init.get(info[0]) !== true) { + init.set(info[0], true); + info[0][info[1]](); + } }); }; + document.addEventListener(DCL, upgrade); class HTMLParsedElement extends HTMLElement { static withParsedCallback(Class, name = 'parsed') { const {prototype} = Class; @@ -36,6 +39,7 @@ const HTMLParsedElement = (() => { { connectedCallback: { configurable: true, + writable: true, value() { if (connectedCallback) connectedCallback.apply(this, arguments); diff --git a/index.js b/index.js index ec30d93..7482e0b 100644 --- a/index.js +++ b/index.js @@ -39,6 +39,7 @@ const HTMLParsedElement = (() => { { connectedCallback: { configurable: true, + writable: true, value() { if (connectedCallback) connectedCallback.apply(this, arguments); diff --git a/min.js b/min.js index 12097a9..a8e90fb 100644 --- a/min.js +++ b/min.js @@ -1,2 +1,2 @@ /*! (c) Andrea Giammarchi - ISC */ -const HTMLParsedElement=(()=>{const e="DOMContentLoaded",t=new WeakMap,n=[],s=e=>{do{if(e.nextSibling)return!0}while(e=e.parentNode);return!1},a=()=>{n.splice(0).forEach(e=>{t.set(e[0],!0),e[0][e[1]]()})};class r extends HTMLElement{static withParsedCallback(r,i="parsed"){const{prototype:c}=r,{connectedCallback:o}=c,l=i+"Callback",d=(t,n,s,a)=>{n.disconnect(),s.removeEventListener(e,a),h(t)},h=e=>{n.length||requestAnimationFrame(a),n.push([e,l])};return Object.defineProperties(c,{connectedCallback:{configurable:!0,value(){if(o&&o.apply(this,arguments),l in this&&!t.has(this)){const n=this,{ownerDocument:a}=n;if(t.set(n,!1),"complete"===a.readyState||s(n))h(n);else{const t=()=>d(n,r,a,t);a.addEventListener(e,t);const r=new MutationObserver(()=>{s(n)&&d(n,r,a,t)});r.observe(n.parentNode,{childList:!0,subtree:!0})}}}},[i]:{configurable:!0,get(){return!0===t.get(this)}}}),r}}return r.withParsedCallback(r)})(); \ No newline at end of file +const HTMLParsedElement=(()=>{const e="DOMContentLoaded",t=new WeakMap,n=[],a=e=>{do{if(e.nextSibling)return!0}while(e=e.parentNode);return!1},r=()=>{n.splice(0).forEach(e=>{!0!==t.get(e[0])&&(t.set(e[0],!0),e[0][e[1]]())})};document.addEventListener(e,r);class s extends HTMLElement{static withParsedCallback(s,i="parsed"){const{prototype:c}=s,{connectedCallback:o}=c,l=i+"Callback",d=(t,n,a,r)=>{n.disconnect(),a.removeEventListener(e,r),u(t)},u=e=>{n.length||requestAnimationFrame(r),n.push([e,l])};return Object.defineProperties(c,{connectedCallback:{configurable:!0,writable:!0,value(){if(o&&o.apply(this,arguments),l in this&&!t.has(this)){const n=this,{ownerDocument:r}=n;if(t.set(n,!1),"complete"===r.readyState||a(n))u(n);else{const t=()=>d(n,s,r,t);r.addEventListener(e,t);const s=new MutationObserver(()=>{a(n)&&d(n,s,r,t)});s.observe(n.parentNode,{childList:!0,subtree:!0})}}}},[i]:{configurable:!0,get(){return!0===t.get(this)}}}),s}}return s.withParsedCallback(s)})(); \ No newline at end of file diff --git a/package.json b/package.json index 15b6caf..1b72f11 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "html-parsed-element", - "version": "0.3.2", + "version": "0.4.1", "description": "A base custom element class with a reliable `parsedCallback` method", "main": "cjs/index.js", "module": "esm/index.js", @@ -17,7 +17,7 @@ "test": "npm run server & (sleep 1 && npm run nightmare && npm run report && npm run kill)", "nightmare": "node test || (npm run kill && exit 1)", "report": "istanbul report --include=test/coverage.json text-summary", - "server": "node -e 'require(`fs`).writeFileSync(`pid`,require(`child_process`).spawn(`http-server`,[`test`,`-s`]).pid);'", + "server": "node -e 'require(`fs`).writeFileSync(`pid`,require(`child_process`).spawn(`http-server`,[`test`,`-s`]).pid.toString());'", "kill": "kill -9 $(cat pid) && rm -f pid" }, "repository": {