UNPKG

uconnect

Version:

An essential connected/disconnected DOM helper

1 lines 1.08 kB
self.uconnect=function(e){"use strict";function n(e){this.observe(e,{subtree:!0,childList:!0})}function t(e){e.type in this&&this[e.type](e)}return e.observe=function(e,c,o,a){var d=new WeakMap,i=new WeakMap,r=new WeakMap,s=function(e){return d.has(e)},u=function(e){s(e)&&(l(e,e.removeEventListener,d.get(e)),d.delete(e))},l=function(e,n,t){n.call(e,"disconnected",t),n.call(e,"connected",t)},h=function(e,n,t,c){for(var o=e.length,a=0;a<o;a++)v(e[a],n,t,c)},v=function(e,n,t,a){s(e)&&!t.has(e)&&(a.delete(e),t.set(e,0),e.dispatchEvent(new(o||CustomEvent)(n))),h(e[c||"children"]||[],n,t,a)},f=new(a||MutationObserver)((function(e){for(var n=e.length,t=0;t<n;t++){var c=e[t],o=c.removedNodes,a=c.addedNodes;h(o,"disconnected",r,i),h(a,"connected",i,r)}}));f.add=n,f.add(e||document);var p=Element.prototype.attachShadow;return p&&(Element.prototype.attachShadow=function(e){var n=p.call(this,e);return f.add(n),n}),{has:s,connect:function(e,n){u(e),(n||(n={})).handleEvent||(n.handleEvent=t),l(e,e.addEventListener,n),d.set(e,n)},disconnect:u,kill:function(){f.disconnect()}}},e}({});