diff --git a/ts/domtools.classes.elementinstrumenter.ts b/ts/domtools.classes.elementinstrumenter.ts index 1a5d6c6..873f704 100644 --- a/ts/domtools.classes.elementinstrumenter.ts +++ b/ts/domtools.classes.elementinstrumenter.ts @@ -5,23 +5,20 @@ export class ElementInstrumenter { connectedElements = new plugins.lik.ObjectMap(); public instrumentElement(elementArg: LitElement) { - const originalConnectedCallback = elementArg.connectedCallback; - const originalDisconnectedCallback = elementArg.disconnectedCallback; - - if (!elementArg.parentElement) { - elementArg.connectedCallback = () => { - this.connectedElements.add(elementArg); - originalConnectedCallback.apply(elementArg); - }; - } else { + const addToConnectedElementsFunc = (eventArg: CustomEvent) => { this.connectedElements.add(elementArg); - } - - elementArg.disconnectedCallback = () => { - this.connectedElements.remove(elementArg); - originalDisconnectedCallback.apply(elementArg); }; + const removeFromConnectedElementsFunc = eventArg => { + this.connectedElements.remove(elementArg); + elementArg.removeEventListener('domtools-connected', addToConnectedElementsFunc); + elementArg.removeEventListener('domtools-disconnected', removeFromConnectedElementsFunc); + }; + elementArg.addEventListener('domtools-connected', addToConnectedElementsFunc); + elementArg.addEventListener('domtools-disconnected', removeFromConnectedElementsFunc); + if (!elementArg.parentElement) { + this.connectedElements.add(elementArg); + } } public async forEachelement(eachFuncArg: (elementArg: LitElement) => Promise) {