@dooboostore/dom-parser 1.0.2 → 1.0.3
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/dist/cjs/DomParser.js +10 -1
- package/dist/cjs/DomParser.js.map +2 -2
- package/dist/cjs/factory/ElementFactory.js +27 -6
- package/dist/cjs/factory/ElementFactory.js.map +2 -2
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/node/CharacterData.js.map +1 -1
- package/dist/cjs/node/ChildNode.js +0 -15
- package/dist/cjs/node/ChildNode.js.map +3 -3
- package/dist/cjs/node/ChildNodeBase.js +20 -0
- package/dist/cjs/node/ChildNodeBase.js.map +2 -2
- package/dist/cjs/node/Comment.js.map +2 -2
- package/dist/cjs/node/Document.js +0 -27
- package/dist/cjs/node/Document.js.map +4 -4
- package/dist/cjs/node/DocumentBase.js +168 -205
- package/dist/cjs/node/DocumentBase.js.map +2 -2
- package/dist/cjs/node/DocumentFragment.js +0 -15
- package/dist/cjs/node/DocumentFragment.js.map +3 -3
- package/dist/cjs/node/DocumentFragmentBase.js.map +2 -2
- package/dist/cjs/node/Node.js.map +1 -1
- package/dist/cjs/node/NodeBase.js +44 -2
- package/dist/cjs/node/NodeBase.js.map +2 -2
- package/dist/cjs/node/NodeFilter.js +43 -0
- package/dist/cjs/node/NodeFilter.js.map +7 -0
- package/dist/cjs/node/NodeIterator.js +1 -28
- package/dist/cjs/node/NodeIterator.js.map +2 -2
- package/dist/cjs/node/ParentNode.js +0 -15
- package/dist/cjs/node/ParentNode.js.map +3 -3
- package/dist/cjs/node/ParentNodeBase.js +10 -10
- package/dist/cjs/node/ParentNodeBase.js.map +3 -3
- package/dist/cjs/node/ShadowRootBase.js +79 -0
- package/dist/cjs/node/ShadowRootBase.js.map +7 -0
- package/dist/cjs/node/Text.js +0 -15
- package/dist/cjs/node/Text.js.map +3 -3
- package/dist/cjs/node/TextBase.js +0 -3
- package/dist/cjs/node/TextBase.js.map +2 -2
- package/dist/cjs/node/TreeWalker.js +272 -0
- package/dist/cjs/node/TreeWalker.js.map +7 -0
- package/dist/cjs/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +7 -6
- package/dist/cjs/node/collection/HTMLCollectionImp.js.map +7 -0
- package/dist/cjs/node/collection/HTMLCollectionOfImp.js +26 -0
- package/dist/cjs/node/collection/HTMLCollectionOfImp.js.map +7 -0
- package/dist/cjs/node/collection/NodeList.js.map +1 -1
- package/dist/cjs/node/collection/{NodeListOf.js → NodeListOfImp.js} +6 -6
- package/dist/cjs/node/collection/NodeListOfImp.js.map +7 -0
- package/dist/cjs/node/collection/StylePropertyMapImpl.js +65 -0
- package/dist/cjs/node/collection/StylePropertyMapImpl.js.map +7 -0
- package/dist/cjs/node/collection/index.js +6 -6
- package/dist/cjs/node/collection/index.js.map +2 -2
- package/dist/cjs/node/elements/Element.js +0 -15
- package/dist/cjs/node/elements/Element.js.map +3 -3
- package/dist/cjs/node/elements/ElementBase.js +163 -331
- package/dist/cjs/node/elements/ElementBase.js.map +3 -3
- package/dist/cjs/node/elements/HTMLAreaElement.js.map +2 -2
- package/dist/cjs/node/{collection/HTMLCollectionOf.js → elements/HTMLAudioElement.js} +9 -16
- package/dist/cjs/node/elements/HTMLAudioElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLButtonElement.js +1 -1
- package/dist/cjs/node/elements/HTMLButtonElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLDListElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDListElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDataElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDataElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDataListElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDataListElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDetailsElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDetailsElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLDialogElement.js +29 -0
- package/dist/cjs/node/elements/HTMLDialogElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLElement.js +10 -0
- package/dist/cjs/node/elements/HTMLElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLElementBase.js +41 -43
- package/dist/cjs/node/elements/HTMLElementBase.js.map +2 -2
- package/dist/cjs/node/elements/HTMLEmbedElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLFieldSetElement.js +29 -0
- package/dist/cjs/node/elements/HTMLFieldSetElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLHRElement.js +29 -0
- package/dist/cjs/node/elements/HTMLHRElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLIFrameElement.js +29 -0
- package/dist/cjs/node/elements/HTMLIFrameElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLLabelElement.js +29 -0
- package/dist/cjs/node/elements/HTMLLabelElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLLegendElement.js +29 -0
- package/dist/cjs/node/elements/HTMLLegendElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLMapElement.js +29 -0
- package/dist/cjs/node/elements/HTMLMapElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLMeterElement.js +29 -0
- package/dist/cjs/node/elements/HTMLMeterElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLModElement.js +29 -0
- package/dist/cjs/node/elements/HTMLModElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLObjectElement.js +29 -0
- package/dist/cjs/node/elements/HTMLObjectElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLOptGroupElement.js +29 -0
- package/dist/cjs/node/elements/HTMLOptGroupElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLOptionElement.js +29 -0
- package/dist/cjs/node/elements/HTMLOptionElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLOutputElement.js +29 -0
- package/dist/cjs/node/elements/HTMLOutputElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLParamElement.js +29 -0
- package/dist/cjs/node/elements/HTMLParamElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLPictureElement.js +29 -0
- package/dist/cjs/node/elements/HTMLPictureElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLPreElement.js +29 -0
- package/dist/cjs/node/elements/HTMLPreElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLProgressElement.js +29 -0
- package/dist/cjs/node/elements/HTMLProgressElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLQuoteElement.js +29 -0
- package/dist/cjs/node/elements/HTMLQuoteElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLSelectElement.js +29 -0
- package/dist/cjs/node/elements/HTMLSelectElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLSlotElement.js +29 -0
- package/dist/cjs/node/elements/HTMLSlotElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLSourceElement.js +29 -0
- package/dist/cjs/node/elements/HTMLSourceElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLTableElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTbodyElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTdElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTemplateElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTextAreaElement.js +29 -0
- package/dist/cjs/node/elements/HTMLTextAreaElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLTfootElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTheadElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTimeElement.js +29 -0
- package/dist/cjs/node/elements/HTMLTimeElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLTrElement.js.map +2 -2
- package/dist/cjs/node/elements/HTMLTrackElement.js +29 -0
- package/dist/cjs/node/elements/HTMLTrackElement.js.map +7 -0
- package/dist/cjs/node/elements/HTMLVideoElement.js +29 -0
- package/dist/cjs/node/elements/HTMLVideoElement.js.map +7 -0
- package/dist/cjs/node/elements/index.js +181 -92
- package/dist/cjs/node/elements/index.js.map +2 -2
- package/dist/cjs/node/index.js +6 -16
- package/dist/cjs/node/index.js.map +2 -2
- package/dist/cjs/utils/CSSSelector.js.map +2 -2
- package/dist/cjs/window/CustomElementRegistryImp.js +105 -0
- package/dist/cjs/window/CustomElementRegistryImp.js.map +7 -0
- package/dist/cjs/window/Window.js +0 -15
- package/dist/cjs/window/Window.js.map +3 -3
- package/dist/cjs/window/WindowBase.js +210 -613
- package/dist/cjs/window/WindowBase.js.map +2 -2
- package/dist/cjs/window/index.js +0 -5
- package/dist/cjs/window/index.js.map +2 -2
- package/dist/esm/DomParser.js +10 -1
- package/dist/esm/DomParser.js.map +2 -2
- package/dist/esm/factory/ElementFactory.js +27 -6
- package/dist/esm/factory/ElementFactory.js.map +2 -2
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/node/ChildNodeBase.js +20 -0
- package/dist/esm/node/ChildNodeBase.js.map +2 -2
- package/dist/esm/node/Comment.js.map +2 -2
- package/dist/esm/node/Document.js +0 -8
- package/dist/esm/node/Document.js.map +4 -4
- package/dist/esm/node/DocumentBase.js +165 -202
- package/dist/esm/node/DocumentBase.js.map +2 -2
- package/dist/esm/node/DocumentFragmentBase.js.map +2 -2
- package/dist/esm/node/Node.js.map +1 -1
- package/dist/esm/node/NodeBase.js +45 -22
- package/dist/esm/node/NodeBase.js.map +2 -2
- package/dist/esm/node/NodeFilter.js +24 -0
- package/dist/esm/node/NodeFilter.js.map +7 -0
- package/dist/esm/node/NodeIterator.js +1 -28
- package/dist/esm/node/NodeIterator.js.map +2 -2
- package/dist/esm/node/ParentNodeBase.js +4 -4
- package/dist/esm/node/ParentNodeBase.js.map +2 -2
- package/dist/esm/node/ShadowRootBase.js +60 -0
- package/dist/esm/node/ShadowRootBase.js.map +7 -0
- package/dist/esm/node/TextBase.js +0 -3
- package/dist/esm/node/TextBase.js.map +2 -2
- package/dist/esm/node/TreeWalker.js +253 -0
- package/dist/esm/node/TreeWalker.js.map +7 -0
- package/dist/esm/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +4 -3
- package/dist/esm/node/collection/HTMLCollectionImp.js.map +7 -0
- package/dist/esm/node/collection/HTMLCollectionOfImp.js +7 -0
- package/dist/esm/node/collection/HTMLCollectionOfImp.js.map +7 -0
- package/dist/esm/node/collection/NodeList.js.map +1 -1
- package/dist/esm/node/collection/{NodeListOf.js → NodeListOfImp.js} +3 -3
- package/dist/esm/node/collection/NodeListOfImp.js.map +7 -0
- package/dist/esm/node/collection/StylePropertyMapImpl.js +46 -0
- package/dist/esm/node/collection/StylePropertyMapImpl.js.map +7 -0
- package/dist/esm/node/collection/index.js +6 -6
- package/dist/esm/node/collection/index.js.map +2 -2
- package/dist/esm/node/elements/ElementBase.js +163 -331
- package/dist/esm/node/elements/ElementBase.js.map +3 -3
- package/dist/esm/node/elements/HTMLAreaElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLAudioElement.js +10 -0
- package/dist/esm/node/elements/HTMLAudioElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLButtonElement.js +1 -1
- package/dist/esm/node/elements/HTMLButtonElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLDListElement.js +10 -0
- package/dist/esm/node/elements/HTMLDListElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDataElement.js +10 -0
- package/dist/esm/node/elements/HTMLDataElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDataListElement.js +10 -0
- package/dist/esm/node/elements/HTMLDataListElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDetailsElement.js +10 -0
- package/dist/esm/node/elements/HTMLDetailsElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLDialogElement.js +10 -0
- package/dist/esm/node/elements/HTMLDialogElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLElement.js +6 -0
- package/dist/esm/node/elements/HTMLElement.js.map +3 -3
- package/dist/esm/node/elements/HTMLElementBase.js +40 -42
- package/dist/esm/node/elements/HTMLElementBase.js.map +2 -2
- package/dist/esm/node/elements/HTMLEmbedElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLFieldSetElement.js +10 -0
- package/dist/esm/node/elements/HTMLFieldSetElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLHRElement.js +10 -0
- package/dist/esm/node/elements/HTMLHRElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLIFrameElement.js +10 -0
- package/dist/esm/node/elements/HTMLIFrameElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLLabelElement.js +10 -0
- package/dist/esm/node/elements/HTMLLabelElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLLegendElement.js +10 -0
- package/dist/esm/node/elements/HTMLLegendElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLMapElement.js +10 -0
- package/dist/esm/node/elements/HTMLMapElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLMeterElement.js +10 -0
- package/dist/esm/node/elements/HTMLMeterElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLModElement.js +10 -0
- package/dist/esm/node/elements/HTMLModElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLObjectElement.js +10 -0
- package/dist/esm/node/elements/HTMLObjectElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLOptGroupElement.js +10 -0
- package/dist/esm/node/elements/HTMLOptGroupElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLOptionElement.js +10 -0
- package/dist/esm/node/elements/HTMLOptionElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLOutputElement.js +10 -0
- package/dist/esm/node/elements/HTMLOutputElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLParamElement.js +10 -0
- package/dist/esm/node/elements/HTMLParamElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLPictureElement.js +10 -0
- package/dist/esm/node/elements/HTMLPictureElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLPreElement.js +10 -0
- package/dist/esm/node/elements/HTMLPreElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLProgressElement.js +10 -0
- package/dist/esm/node/elements/HTMLProgressElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLQuoteElement.js +10 -0
- package/dist/esm/node/elements/HTMLQuoteElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLSelectElement.js +10 -0
- package/dist/esm/node/elements/HTMLSelectElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLSlotElement.js +10 -0
- package/dist/esm/node/elements/HTMLSlotElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLSourceElement.js +10 -0
- package/dist/esm/node/elements/HTMLSourceElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLTableElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTbodyElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTdElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTemplateElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTextAreaElement.js +10 -0
- package/dist/esm/node/elements/HTMLTextAreaElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLTfootElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTheadElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTimeElement.js +10 -0
- package/dist/esm/node/elements/HTMLTimeElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLTrElement.js.map +2 -2
- package/dist/esm/node/elements/HTMLTrackElement.js +10 -0
- package/dist/esm/node/elements/HTMLTrackElement.js.map +7 -0
- package/dist/esm/node/elements/HTMLVideoElement.js +10 -0
- package/dist/esm/node/elements/HTMLVideoElement.js.map +7 -0
- package/dist/esm/node/elements/index.js +182 -93
- package/dist/esm/node/elements/index.js.map +2 -2
- package/dist/esm/node/index.js +7 -17
- package/dist/esm/node/index.js.map +2 -2
- package/dist/esm/utils/CSSSelector.js.map +2 -2
- package/dist/esm/window/CustomElementRegistryImp.js +86 -0
- package/dist/esm/window/CustomElementRegistryImp.js.map +7 -0
- package/dist/esm/window/WindowBase.js +259 -597
- package/dist/esm/window/WindowBase.js.map +2 -2
- package/dist/esm/window/index.js +0 -5
- package/dist/esm/window/index.js.map +2 -2
- package/dist/esm-bundle/dooboostore-dom-parser.esm.js +3449 -3551
- package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +4 -4
- package/dist/types/DomParser.d.ts.map +1 -1
- package/dist/types/factory/ElementFactory.d.ts +1 -1
- package/dist/types/factory/ElementFactory.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/node/CharacterData.d.ts +0 -2
- package/dist/types/node/CharacterData.d.ts.map +1 -1
- package/dist/types/node/ChildNode.d.ts +0 -38
- package/dist/types/node/ChildNode.d.ts.map +1 -1
- package/dist/types/node/ChildNodeBase.d.ts +6 -4
- package/dist/types/node/ChildNodeBase.d.ts.map +1 -1
- package/dist/types/node/Comment.d.ts +1 -1
- package/dist/types/node/Comment.d.ts.map +1 -1
- package/dist/types/node/Document.d.ts +0 -856
- package/dist/types/node/Document.d.ts.map +1 -1
- package/dist/types/node/DocumentBase.d.ts +68 -110
- package/dist/types/node/DocumentBase.d.ts.map +1 -1
- package/dist/types/node/DocumentFragment.d.ts +0 -38
- package/dist/types/node/DocumentFragment.d.ts.map +1 -1
- package/dist/types/node/DocumentFragmentBase.d.ts +1 -8
- package/dist/types/node/DocumentFragmentBase.d.ts.map +1 -1
- package/dist/types/node/Node.d.ts +0 -213
- package/dist/types/node/Node.d.ts.map +1 -1
- package/dist/types/node/NodeBase.d.ts +11 -8
- package/dist/types/node/NodeBase.d.ts.map +1 -1
- package/dist/types/node/NodeFilter.d.ts +25 -0
- package/dist/types/node/NodeFilter.d.ts.map +1 -0
- package/dist/types/node/NodeIterator.d.ts +0 -34
- package/dist/types/node/NodeIterator.d.ts.map +1 -1
- package/dist/types/node/ParentNode.d.ts +0 -84
- package/dist/types/node/ParentNode.d.ts.map +1 -1
- package/dist/types/node/ParentNodeBase.d.ts +0 -5
- package/dist/types/node/ParentNodeBase.d.ts.map +1 -1
- package/dist/types/node/ShadowRootBase.d.ts +36 -0
- package/dist/types/node/ShadowRootBase.d.ts.map +1 -0
- package/dist/types/node/Text.d.ts +0 -24
- package/dist/types/node/Text.d.ts.map +1 -1
- package/dist/types/node/TextBase.d.ts +2 -3
- package/dist/types/node/TextBase.d.ts.map +1 -1
- package/dist/types/node/TreeWalker.d.ts +48 -0
- package/dist/types/node/TreeWalker.d.ts.map +1 -0
- package/dist/types/node/collection/{HTMLCollection.d.ts → HTMLCollectionImp.d.ts} +2 -3
- package/dist/types/node/collection/HTMLCollectionImp.d.ts.map +1 -0
- package/dist/types/node/collection/HTMLCollectionOfImp.d.ts +9 -0
- package/dist/types/node/collection/HTMLCollectionOfImp.d.ts.map +1 -0
- package/dist/types/node/collection/NodeList.d.ts +0 -1
- package/dist/types/node/collection/NodeList.d.ts.map +1 -1
- package/dist/types/node/collection/{NodeListOf.d.ts → NodeListOfImp.d.ts} +3 -4
- package/dist/types/node/collection/NodeListOfImp.d.ts.map +1 -0
- package/dist/types/node/collection/StylePropertyMapImpl.d.ts +20 -0
- package/dist/types/node/collection/StylePropertyMapImpl.d.ts.map +1 -0
- package/dist/types/node/collection/index.d.ts +3 -3
- package/dist/types/node/collection/index.d.ts.map +1 -1
- package/dist/types/node/elements/Element.d.ts +0 -687
- package/dist/types/node/elements/Element.d.ts.map +1 -1
- package/dist/types/node/elements/ElementBase.d.ts +98 -74
- package/dist/types/node/elements/ElementBase.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLAreaElement.d.ts +0 -1
- package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLAudioElement.d.ts +8 -0
- package/dist/types/node/elements/HTMLAudioElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLButtonElement.d.ts +1 -1
- package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLDListElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDListElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDataElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDataElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDataListElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDataListElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDetailsElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDetailsElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLDialogElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLDialogElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLElement.d.ts +2 -119
- package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLElementBase.d.ts +126 -5
- package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLEmbedElement.d.ts +0 -1
- package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLFieldSetElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLFieldSetElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLHRElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLHRElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLIFrameElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLIFrameElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLLabelElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLLabelElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLLegendElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLLegendElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLMapElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLMapElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLMeterElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLMeterElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLModElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLModElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLObjectElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLObjectElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLOptGroupElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLOptGroupElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLOptionElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLOptionElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLOutputElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLOutputElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLParamElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLParamElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLPictureElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLPictureElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLPreElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLPreElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLProgressElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLProgressElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLQuoteElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLQuoteElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLSelectElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLSelectElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLSlotElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLSlotElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLSourceElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLSourceElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLTableElement.d.ts +3 -4
- package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTbodyElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTemplateElement.d.ts +0 -1
- package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTextAreaElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLTextAreaElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLTfootElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTheadElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTimeElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLTimeElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLTrElement.d.ts +2 -3
- package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -1
- package/dist/types/node/elements/HTMLTrackElement.d.ts +5 -0
- package/dist/types/node/elements/HTMLTrackElement.d.ts.map +1 -0
- package/dist/types/node/elements/HTMLVideoElement.d.ts +8 -0
- package/dist/types/node/elements/HTMLVideoElement.d.ts.map +1 -0
- package/dist/types/node/elements/index.d.ts +106 -52
- package/dist/types/node/elements/index.d.ts.map +1 -1
- package/dist/types/node/index.d.ts +4 -7
- package/dist/types/node/index.d.ts.map +1 -1
- package/dist/types/utils/CSSSelector.d.ts +0 -1
- package/dist/types/utils/CSSSelector.d.ts.map +1 -1
- package/dist/types/window/CustomElementRegistryImp.d.ts +18 -0
- package/dist/types/window/CustomElementRegistryImp.d.ts.map +1 -0
- package/dist/types/window/Window.d.ts +0 -619
- package/dist/types/window/Window.d.ts.map +1 -1
- package/dist/types/window/WindowBase.d.ts +253 -286
- package/dist/types/window/WindowBase.d.ts.map +1 -1
- package/dist/types/window/index.d.ts +0 -1
- package/dist/types/window/index.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-dom-parser.umd.js +3460 -3562
- package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +4 -4
- package/package.json +1 -1
- package/src/DomParser.ts +28 -20
- package/src/factory/ElementFactory.ts +79 -53
- package/src/index.ts +11 -10
- package/src/node/CharacterData.ts +0 -2
- package/src/node/ChildNode.ts +42 -42
- package/src/node/ChildNodeBase.ts +60 -39
- package/src/node/Comment.ts +60 -60
- package/src/node/Document.ts +129 -882
- package/src/node/DocumentBase.ts +371 -467
- package/src/node/DocumentFragment.ts +38 -44
- package/src/node/DocumentFragmentBase.ts +4 -9
- package/src/node/Node.ts +231 -224
- package/src/node/NodeBase.ts +469 -443
- package/src/node/NodeFilter.ts +50 -0
- package/src/node/NodeIterator.ts +117 -172
- package/src/node/ParentNode.ts +93 -93
- package/src/node/ParentNodeBase.ts +7 -10
- package/src/node/ShadowRootBase.ts +87 -0
- package/src/node/Text.ts +30 -30
- package/src/node/TextBase.ts +92 -94
- package/src/node/TreeWalker.ts +280 -0
- package/src/node/collection/{HTMLCollection.ts → HTMLCollectionImp.ts} +3 -2
- package/src/node/collection/HTMLCollectionOfImp.ts +12 -0
- package/src/node/collection/NodeList.ts +1 -1
- package/src/node/collection/{NodeListOf.ts → NodeListOfImp.ts} +3 -3
- package/src/node/collection/StylePropertyMapImpl.ts +60 -0
- package/src/node/collection/index.ts +3 -3
- package/src/node/elements/Element.ts +212 -772
- package/src/node/elements/ElementBase.ts +840 -1204
- package/src/node/elements/HTMLAreaElement.ts +0 -1
- package/src/node/elements/HTMLAudioElement.ts +10 -0
- package/src/node/elements/HTMLButtonElement.ts +63 -63
- package/src/node/elements/HTMLDListElement.ts +2 -0
- package/src/node/elements/HTMLDataElement.ts +6 -0
- package/src/node/elements/HTMLDataListElement.ts +2 -0
- package/src/node/elements/HTMLDetailsElement.ts +2 -0
- package/src/node/elements/HTMLDialogElement.ts +2 -0
- package/src/node/elements/HTMLElement.ts +2 -137
- package/src/node/elements/HTMLElementBase.ts +466 -355
- package/src/node/elements/HTMLEmbedElement.ts +0 -1
- package/src/node/elements/HTMLFieldSetElement.ts +2 -0
- package/src/node/elements/HTMLHRElement.ts +2 -0
- package/src/node/elements/HTMLIFrameElement.ts +2 -0
- package/src/node/elements/HTMLLabelElement.ts +2 -0
- package/src/node/elements/HTMLLegendElement.ts +2 -0
- package/src/node/elements/HTMLMapElement.ts +2 -0
- package/src/node/elements/HTMLMeterElement.ts +2 -0
- package/src/node/elements/HTMLModElement.ts +2 -0
- package/src/node/elements/HTMLObjectElement.ts +2 -0
- package/src/node/elements/HTMLOptGroupElement.ts +2 -0
- package/src/node/elements/HTMLOptionElement.ts +2 -0
- package/src/node/elements/HTMLOutputElement.ts +2 -0
- package/src/node/elements/HTMLParamElement.ts +2 -0
- package/src/node/elements/HTMLPictureElement.ts +2 -0
- package/src/node/elements/HTMLPreElement.ts +2 -0
- package/src/node/elements/HTMLProgressElement.ts +2 -0
- package/src/node/elements/HTMLQuoteElement.ts +2 -0
- package/src/node/elements/HTMLSelectElement.ts +2 -0
- package/src/node/elements/HTMLSlotElement.ts +2 -0
- package/src/node/elements/HTMLSourceElement.ts +2 -0
- package/src/node/elements/HTMLTableElement.ts +3 -7
- package/src/node/elements/HTMLTbodyElement.ts +2 -3
- package/src/node/elements/HTMLTdElement.ts +1 -1
- package/src/node/elements/HTMLTemplateElement.ts +3 -6
- package/src/node/elements/HTMLTextAreaElement.ts +2 -0
- package/src/node/elements/HTMLTfootElement.ts +2 -3
- package/src/node/elements/HTMLTheadElement.ts +2 -3
- package/src/node/elements/HTMLTimeElement.ts +2 -0
- package/src/node/elements/HTMLTrElement.ts +3 -4
- package/src/node/elements/HTMLTrackElement.ts +2 -0
- package/src/node/elements/HTMLVideoElement.ts +10 -0
- package/src/node/elements/index.ts +226 -149
- package/src/node/index.ts +8 -8
- package/src/utils/CSSSelector.ts +0 -1
- package/src/window/CustomElementRegistryImp.ts +120 -0
- package/src/window/Window.ts +716 -715
- package/src/window/WindowBase.ts +482 -847
- package/src/window/index.ts +0 -1
- package/tsconfig.json +1 -0
- package/dist/cjs/node/collection/HTMLCollection.js.map +0 -7
- package/dist/cjs/node/collection/HTMLCollectionOf.js.map +0 -7
- package/dist/cjs/node/collection/NodeListOf.js.map +0 -7
- package/dist/esm/node/collection/HTMLCollection.js.map +0 -7
- package/dist/esm/node/collection/HTMLCollectionOf.js +0 -17
- package/dist/esm/node/collection/HTMLCollectionOf.js.map +0 -7
- package/dist/esm/node/collection/NodeListOf.js.map +0 -7
- package/dist/types/node/collection/HTMLCollection.d.ts.map +0 -1
- package/dist/types/node/collection/HTMLCollectionOf.d.ts +0 -14
- package/dist/types/node/collection/HTMLCollectionOf.d.ts.map +0 -1
- package/dist/types/node/collection/NodeListOf.d.ts.map +0 -1
- package/src/node/collection/HTMLCollectionOf.ts +0 -26
package/src/node/NodeBase.ts
CHANGED
|
@@ -1,506 +1,532 @@
|
|
|
1
|
-
import { Node
|
|
2
|
-
|
|
3
|
-
ATTRIBUTE_NODE ,
|
|
4
|
-
TEXT_NODE ,
|
|
5
|
-
CDATA_SECTION_NODE ,
|
|
6
|
-
ENTITY_REFERENCE_NODE ,
|
|
7
|
-
ENTITY_NODE ,
|
|
8
|
-
PROCESSING_INSTRUCTION_NODE ,
|
|
9
|
-
COMMENT_NODE ,
|
|
10
|
-
DOCUMENT_NODE ,
|
|
11
|
-
DOCUMENT_TYPE_NODE ,
|
|
12
|
-
DOCUMENT_FRAGMENT_NODE ,
|
|
13
|
-
NOTATION_NODE ,
|
|
14
|
-
DOCUMENT_POSITION_DISCONNECTED ,
|
|
15
|
-
DOCUMENT_POSITION_PRECEDING ,
|
|
16
|
-
DOCUMENT_POSITION_FOLLOWING ,
|
|
17
|
-
DOCUMENT_POSITION_CONTAINS ,
|
|
18
|
-
DOCUMENT_POSITION_CONTAINED_BY ,
|
|
19
|
-
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
|
|
20
|
-
} from './Node';
|
|
21
|
-
import { ChildNode } from './ChildNode';
|
|
22
|
-
import { ParentNode } from './ParentNode';
|
|
23
|
-
import { NodeListOf } from './collection/NodeListOf';
|
|
1
|
+
import { ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, CDATA_SECTION_NODE, ENTITY_REFERENCE_NODE, ENTITY_NODE, PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, DOCUMENT_FRAGMENT_NODE, NOTATION_NODE, DOCUMENT_POSITION_DISCONNECTED, DOCUMENT_POSITION_PRECEDING, DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_CONTAINED_BY, DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC } from './Node';
|
|
2
|
+
import { NodeListOfImp } from './collection/NodeListOfImp';
|
|
24
3
|
import { GetRootNodeOptions } from './GetRootNodeOptions';
|
|
25
|
-
import { HTMLElement } from './elements/HTMLElement';
|
|
26
|
-
import { Document } from './Document';
|
|
27
|
-
import { Text } from './Text';
|
|
28
4
|
|
|
29
5
|
/**
|
|
30
6
|
* Base implementation of the Node interface
|
|
31
7
|
*/
|
|
32
8
|
export abstract class NodeBase implements Node {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
9
|
+
// Node constants as instance properties
|
|
10
|
+
static readonly ELEMENT_NODE = ELEMENT_NODE;
|
|
11
|
+
static readonly ATTRIBUTE_NODE = ATTRIBUTE_NODE;
|
|
12
|
+
static readonly TEXT_NODE = TEXT_NODE;
|
|
13
|
+
static readonly CDATA_SECTION_NODE = CDATA_SECTION_NODE;
|
|
14
|
+
static readonly ENTITY_REFERENCE_NODE = ENTITY_REFERENCE_NODE;
|
|
15
|
+
static readonly ENTITY_NODE = ENTITY_NODE;
|
|
16
|
+
static readonly PROCESSING_INSTRUCTION_NODE = PROCESSING_INSTRUCTION_NODE;
|
|
17
|
+
static readonly COMMENT_NODE = COMMENT_NODE;
|
|
18
|
+
static readonly DOCUMENT_NODE = DOCUMENT_NODE;
|
|
19
|
+
static readonly DOCUMENT_TYPE_NODE = DOCUMENT_TYPE_NODE;
|
|
20
|
+
static readonly DOCUMENT_FRAGMENT_NODE = DOCUMENT_FRAGMENT_NODE;
|
|
21
|
+
static readonly NOTATION_NODE = NOTATION_NODE;
|
|
22
|
+
static readonly DOCUMENT_POSITION_DISCONNECTED = DOCUMENT_POSITION_DISCONNECTED;
|
|
23
|
+
static readonly DOCUMENT_POSITION_PRECEDING = DOCUMENT_POSITION_PRECEDING;
|
|
24
|
+
static readonly DOCUMENT_POSITION_FOLLOWING = DOCUMENT_POSITION_FOLLOWING;
|
|
25
|
+
static readonly DOCUMENT_POSITION_CONTAINS = DOCUMENT_POSITION_CONTAINS;
|
|
26
|
+
static readonly DOCUMENT_POSITION_CONTAINED_BY = DOCUMENT_POSITION_CONTAINED_BY;
|
|
27
|
+
static readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
|
|
28
|
+
|
|
29
|
+
ELEMENT_NODE: typeof ELEMENT_NODE;
|
|
30
|
+
ATTRIBUTE_NODE: typeof ATTRIBUTE_NODE;
|
|
31
|
+
TEXT_NODE: typeof TEXT_NODE;
|
|
32
|
+
CDATA_SECTION_NODE: typeof CDATA_SECTION_NODE;
|
|
33
|
+
ENTITY_REFERENCE_NODE: typeof ENTITY_REFERENCE_NODE;
|
|
34
|
+
ENTITY_NODE: typeof ENTITY_NODE;
|
|
35
|
+
PROCESSING_INSTRUCTION_NODE: typeof PROCESSING_INSTRUCTION_NODE;
|
|
36
|
+
COMMENT_NODE: typeof COMMENT_NODE;
|
|
37
|
+
DOCUMENT_NODE: typeof DOCUMENT_NODE;
|
|
38
|
+
DOCUMENT_TYPE_NODE: typeof DOCUMENT_TYPE_NODE;
|
|
39
|
+
DOCUMENT_FRAGMENT_NODE: typeof DOCUMENT_FRAGMENT_NODE;
|
|
40
|
+
NOTATION_NODE: typeof NOTATION_NODE;
|
|
41
|
+
DOCUMENT_POSITION_DISCONNECTED: typeof DOCUMENT_POSITION_DISCONNECTED;
|
|
42
|
+
DOCUMENT_POSITION_PRECEDING: typeof DOCUMENT_POSITION_PRECEDING;
|
|
43
|
+
DOCUMENT_POSITION_FOLLOWING: typeof DOCUMENT_POSITION_FOLLOWING;
|
|
44
|
+
DOCUMENT_POSITION_CONTAINS: typeof DOCUMENT_POSITION_CONTAINS;
|
|
45
|
+
DOCUMENT_POSITION_CONTAINED_BY: typeof DOCUMENT_POSITION_CONTAINED_BY;
|
|
46
|
+
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: typeof DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
|
|
47
|
+
// Internal properties (for Base class implementations)
|
|
48
|
+
protected _childNodesInternal: NodeBase[] = [];
|
|
49
|
+
public _parentNodeInternal: NodeBase | null = null; // Internal parent reference
|
|
50
|
+
public _ownerDocument: Document | null = null; // Made public for ChildNodeBase access
|
|
51
|
+
protected _nodeValue: string | null = null;
|
|
52
|
+
protected _textContent: string | null = null;
|
|
53
|
+
protected _eventListeners: Array<{ type: string; listener: any; options?: any }> = [];
|
|
54
|
+
|
|
55
|
+
constructor(
|
|
56
|
+
public nodeType: number,
|
|
57
|
+
public nodeName: string,
|
|
58
|
+
ownerDocument?: Document | null
|
|
59
|
+
) {
|
|
60
|
+
this._ownerDocument = ownerDocument || null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
addEventListener(type: string, listener: any, options?: any): void {
|
|
64
|
+
this._eventListeners.push({
|
|
65
|
+
type,
|
|
66
|
+
listener: typeof listener === 'function' ? listener : listener?.handleEvent,
|
|
67
|
+
options
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
removeEventListener(type: string, listener: any, _options?: any): void {
|
|
72
|
+
const targetListener = typeof listener === 'function' ? listener : listener?.handleEvent;
|
|
73
|
+
this._eventListeners = this._eventListeners.filter(l => !(l.type === type && l.listener === targetListener));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
dispatchEvent(event: any): boolean {
|
|
77
|
+
// Simple implementation: only trigger listeners on this node (no bubbling for now)
|
|
78
|
+
const type = typeof event === 'string' ? event : event.type;
|
|
79
|
+
const listeners = this._eventListeners.filter(l => l.type === type);
|
|
80
|
+
for (const l of listeners) {
|
|
81
|
+
try {
|
|
82
|
+
if (typeof l.listener === 'function') {
|
|
83
|
+
l.listener.call(this, event);
|
|
84
|
+
} else if (l.listener && typeof l.listener.handleEvent === 'function') {
|
|
85
|
+
l.listener.handleEvent(event);
|
|
86
|
+
}
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
if (l.options?.once) {
|
|
89
|
+
this.removeEventListener(type, l.listener, l.options);
|
|
90
|
+
}
|
|
91
|
+
} catch (e) {
|
|
92
|
+
console.error(`Error in event listener for ${type}:`, e);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Node interface implementation
|
|
99
|
+
get baseURI(): string {
|
|
100
|
+
return this._ownerDocument?.URL || '';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// External interface - returns proper Node interface types
|
|
104
|
+
get childNodes(): NodeListOf<ChildNode> {
|
|
105
|
+
return new NodeListOfImp<ChildNode>(this._childNodesInternal as unknown as ChildNode[]) as unknown as NodeListOf<ChildNode>;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
get firstChild(): ChildNode | null {
|
|
109
|
+
return this._childNodesInternal.length > 0 ? (this._childNodesInternal[0] as unknown as ChildNode) : null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
get lastChild(): ChildNode | null {
|
|
113
|
+
const length = this._childNodesInternal.length;
|
|
114
|
+
return length > 0 ? (this._childNodesInternal[length - 1] as unknown as ChildNode) : null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
get nextSibling(): ChildNode | null {
|
|
118
|
+
if (!this._parentNodeInternal) return null;
|
|
119
|
+
const siblings = this._parentNodeInternal._childNodesInternal;
|
|
120
|
+
const index = this._findIndexInParent();
|
|
121
|
+
return index !== -1 && index < siblings.length - 1 ? (siblings[index + 1] as unknown as ChildNode) : null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
get previousSibling(): ChildNode | null {
|
|
125
|
+
if (!this._parentNodeInternal) return null;
|
|
126
|
+
const siblings = this._parentNodeInternal._childNodesInternal;
|
|
127
|
+
const index = this._findIndexInParent();
|
|
128
|
+
return index > 0 ? (siblings[index - 1] as unknown as ChildNode) : null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
get parentNode(): ParentNode | null {
|
|
132
|
+
return this._parentNodeInternal as unknown as ParentNode | null;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
get parentElement(): HTMLElement | null {
|
|
136
|
+
return this._parentNodeInternal && this._parentNodeInternal.nodeType === ELEMENT_NODE ? (this._parentNodeInternal as unknown as HTMLElement) : null;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
get ownerDocument(): Document | null {
|
|
140
|
+
return this._ownerDocument;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
get isConnected(): boolean {
|
|
144
|
+
let node: Node | null = this;
|
|
145
|
+
while (node) {
|
|
146
|
+
if (node.nodeType === DOCUMENT_NODE) return true;
|
|
147
|
+
node = node.parentNode;
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
get nodeValue(): string | null {
|
|
153
|
+
return this._nodeValue;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
set nodeValue(value: string | null) {
|
|
157
|
+
this._nodeValue = value;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
get textContent(): string | null {
|
|
161
|
+
if (this.nodeType === TEXT_NODE || this.nodeType === COMMENT_NODE) {
|
|
162
|
+
// For text nodes, decode HTML entities to return original text
|
|
163
|
+
return this._nodeValue ? this.decodeHTMLEntities(this._nodeValue) : this._nodeValue;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// For elements, return the stored original text content if available
|
|
167
|
+
if (this._textContent !== undefined && this._textContent !== null) {
|
|
168
|
+
return this._textContent;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Fallback: collect from children (for HTML parsed content)
|
|
172
|
+
let text = '';
|
|
173
|
+
for (const child of this._childNodesInternal) {
|
|
174
|
+
const childText = child.textContent;
|
|
175
|
+
if (childText !== null && childText !== undefined) {
|
|
176
|
+
text += childText;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return text.length > 0 ? text : null;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
set textContent(value: string | null) {
|
|
183
|
+
// Convert to string (including null and undefined)
|
|
184
|
+
const stringValue = String(value);
|
|
185
|
+
// Store original text content
|
|
186
|
+
this._textContent = stringValue;
|
|
187
|
+
// Clear all children and add a single text node
|
|
188
|
+
this._childNodesInternal = [];
|
|
189
|
+
if (stringValue) {
|
|
190
|
+
// Create text node implementation with escaped value for innerHTML
|
|
191
|
+
const escapedValue = this.escapeHTMLEntities(stringValue);
|
|
192
|
+
const { TextBase } = require('./TextBase');
|
|
193
|
+
const textNode = new TextBase(escapedValue, this._ownerDocument);
|
|
194
|
+
this._childNodesInternal.push(textNode);
|
|
195
|
+
textNode._parentNodeInternal = this;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Escape HTML entities in a string to prevent XSS
|
|
201
|
+
*/
|
|
202
|
+
protected escapeHTMLEntities(str: string): string {
|
|
203
|
+
const entityMap: { [key: string]: string } = {
|
|
204
|
+
'&': '&',
|
|
205
|
+
'<': '<',
|
|
206
|
+
'>': '>',
|
|
207
|
+
'"': '"',
|
|
208
|
+
"'": '''
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
return str.replace(/[&<>"']/g, char => {
|
|
212
|
+
return entityMap[char] || char;
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Decode HTML entities in a string
|
|
218
|
+
*/
|
|
219
|
+
protected decodeHTMLEntities(str: string): string {
|
|
220
|
+
const entityMap: { [key: string]: string } = {
|
|
221
|
+
'&': '&',
|
|
222
|
+
'<': '<',
|
|
223
|
+
'>': '>',
|
|
224
|
+
'"': '"',
|
|
225
|
+
''': "'",
|
|
226
|
+
'"': '"',
|
|
227
|
+
''': "'",
|
|
228
|
+
'©': '©',
|
|
229
|
+
'®': '®',
|
|
230
|
+
'™': '™',
|
|
231
|
+
' ': ' ',
|
|
232
|
+
'…': '…',
|
|
233
|
+
'—': '—',
|
|
234
|
+
'–': '–',
|
|
235
|
+
'‘': '\u2018',
|
|
236
|
+
'’': '\u2019',
|
|
237
|
+
'“': '"',
|
|
238
|
+
'”': '"'
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
return str.replace(/&[a-zA-Z0-9#]+;/g, entity => {
|
|
242
|
+
// Handle named entities
|
|
243
|
+
if (entityMap[entity]) {
|
|
244
|
+
return entityMap[entity];
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Handle numeric entities like ' "
|
|
248
|
+
if (entity.startsWith('&#') && entity.endsWith(';')) {
|
|
249
|
+
const numStr = entity.slice(2, -1);
|
|
250
|
+
const num = parseInt(numStr, 10);
|
|
251
|
+
if (!isNaN(num)) {
|
|
252
|
+
return String.fromCharCode(num);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Handle hex entities like '
|
|
257
|
+
if (entity.startsWith('&#x') && entity.endsWith(';')) {
|
|
258
|
+
const hexStr = entity.slice(3, -1);
|
|
259
|
+
const num = parseInt(hexStr, 16);
|
|
260
|
+
if (!isNaN(num)) {
|
|
261
|
+
return String.fromCharCode(num);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Return original if not recognized
|
|
266
|
+
return entity;
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Node methods - external interface uses Node types, internal uses NodeBase
|
|
271
|
+
appendChild<T extends Node>(node: T): T {
|
|
272
|
+
const nodeBase = node as any as NodeBase; // Internal cast
|
|
273
|
+
|
|
274
|
+
// Special handling for DocumentFragment
|
|
275
|
+
if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {
|
|
276
|
+
// When appending a DocumentFragment, move its children instead
|
|
277
|
+
const fragment = nodeBase;
|
|
278
|
+
|
|
279
|
+
// Move all children from fragment to this node
|
|
280
|
+
while (fragment._childNodesInternal.length > 0) {
|
|
281
|
+
const child = fragment._childNodesInternal[0];
|
|
282
|
+
if (child) {
|
|
283
|
+
fragment.removeChild(child);
|
|
284
|
+
this.appendChild(child);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
92
287
|
|
|
93
|
-
|
|
94
|
-
get childNodes(): NodeListOf<ChildNode> {
|
|
95
|
-
return new NodeListOf<ChildNode>(this._childNodesInternal as unknown as ChildNode[]);
|
|
288
|
+
return node;
|
|
96
289
|
}
|
|
97
290
|
|
|
98
|
-
|
|
99
|
-
|
|
291
|
+
if (nodeBase._parentNodeInternal) {
|
|
292
|
+
nodeBase._parentNodeInternal.removeChild(nodeBase);
|
|
100
293
|
}
|
|
101
294
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
295
|
+
this._childNodesInternal.push(nodeBase);
|
|
296
|
+
nodeBase._parentNodeInternal = this;
|
|
297
|
+
nodeBase._ownerDocument = this._ownerDocument;
|
|
106
298
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
return index !== -1 && index < siblings.length - 1 ? siblings[index + 1] as unknown as ChildNode : null;
|
|
299
|
+
// Trigger connectedCallback if it's a custom element and connected to document
|
|
300
|
+
if (this.isConnected && (nodeBase as any).connectedCallback) {
|
|
301
|
+
console.log(`[NodeBase] Calling connectedCallback for <${nodeBase.nodeName}>`);
|
|
302
|
+
(nodeBase as any).connectedCallback();
|
|
112
303
|
}
|
|
113
304
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const siblings = this._parentNodeInternal._childNodesInternal;
|
|
117
|
-
const index = this._findIndexInParent();
|
|
118
|
-
return index > 0 ? siblings[index - 1] as unknown as ChildNode : null;
|
|
119
|
-
}
|
|
305
|
+
return node;
|
|
306
|
+
}
|
|
120
307
|
|
|
121
|
-
|
|
122
|
-
|
|
308
|
+
removeChild<T extends Node>(child: T): T {
|
|
309
|
+
const childBase = child as any as NodeBase; // Internal cast
|
|
310
|
+
const index = this._findChildIndex(childBase);
|
|
311
|
+
if (index === -1) {
|
|
312
|
+
throw new Error('Node not found');
|
|
123
313
|
}
|
|
124
314
|
|
|
125
|
-
|
|
126
|
-
return this._parentNodeInternal && this._parentNodeInternal.nodeType === ELEMENT_NODE
|
|
127
|
-
? this._parentNodeInternal as unknown as HTMLElement
|
|
128
|
-
: null;
|
|
129
|
-
}
|
|
315
|
+
const wasConnected = childBase.isConnected;
|
|
130
316
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
317
|
+
this._childNodesInternal.splice(index, 1);
|
|
318
|
+
childBase._parentNodeInternal = null;
|
|
134
319
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (node.nodeType === DOCUMENT_NODE) return true;
|
|
139
|
-
node = node.parentNode;
|
|
140
|
-
}
|
|
141
|
-
return false;
|
|
320
|
+
// Trigger disconnectedCallback if it was connected
|
|
321
|
+
if (wasConnected && (childBase as any).disconnectedCallback) {
|
|
322
|
+
(childBase as any).disconnectedCallback();
|
|
142
323
|
}
|
|
143
324
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
325
|
+
return child;
|
|
326
|
+
}
|
|
147
327
|
|
|
148
|
-
|
|
149
|
-
|
|
328
|
+
insertBefore<T extends Node>(node: T, child: Node | null): T {
|
|
329
|
+
if (child === null) {
|
|
330
|
+
return this.appendChild(node);
|
|
150
331
|
}
|
|
151
332
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
// For elements, return the stored original text content if available
|
|
159
|
-
if (this._textContent !== undefined && this._textContent !== null) {
|
|
160
|
-
return this._textContent;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// Fallback: collect from children (for HTML parsed content)
|
|
164
|
-
let text = '';
|
|
165
|
-
for (const child of this._childNodesInternal) {
|
|
166
|
-
const childText = child.textContent;
|
|
167
|
-
if (childText !== null && childText !== undefined) {
|
|
168
|
-
text += childText;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return text.length > 0 ? text : null;
|
|
333
|
+
const nodeBase = node as any as NodeBase; // Internal cast
|
|
334
|
+
const childBase = child as any as NodeBase; // Internal cast
|
|
335
|
+
const index = this._findChildIndex(childBase);
|
|
336
|
+
if (index === -1) {
|
|
337
|
+
throw new Error('Reference node not found');
|
|
172
338
|
}
|
|
173
339
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this._textContent = stringValue;
|
|
179
|
-
// Clear all children and add a single text node
|
|
180
|
-
this._childNodesInternal = [];
|
|
181
|
-
if (stringValue) {
|
|
182
|
-
// Create text node implementation with escaped value for innerHTML
|
|
183
|
-
const escapedValue = this.escapeHTMLEntities(stringValue);
|
|
184
|
-
const { TextBase } = require('./TextBase');
|
|
185
|
-
const textNode = new TextBase(escapedValue, this._ownerDocument);
|
|
186
|
-
this._childNodesInternal.push(textNode);
|
|
187
|
-
textNode._parentNodeInternal = this;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
340
|
+
// Handle DocumentFragment - move all its children
|
|
341
|
+
if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {
|
|
342
|
+
const fragment = nodeBase as any;
|
|
343
|
+
const children = [...fragment._childNodesInternal]; // Copy array to avoid modification during iteration
|
|
190
344
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
return str.replace(/[&<>"']/g, (char) => {
|
|
204
|
-
return entityMap[char] || char;
|
|
205
|
-
});
|
|
206
|
-
}
|
|
345
|
+
let insertIndex = index;
|
|
346
|
+
for (const fragmentChild of children) {
|
|
347
|
+
// Remove from fragment
|
|
348
|
+
fragment.removeChild(fragmentChild);
|
|
349
|
+
// Insert at the current insert position
|
|
350
|
+
this._childNodesInternal.splice(insertIndex, 0, fragmentChild);
|
|
351
|
+
fragmentChild._parentNodeInternal = this;
|
|
352
|
+
fragmentChild._ownerDocument = this._ownerDocument;
|
|
353
|
+
// Increment insert index for next child to maintain order
|
|
354
|
+
insertIndex++;
|
|
355
|
+
}
|
|
207
356
|
|
|
208
|
-
|
|
209
|
-
* Decode HTML entities in a string
|
|
210
|
-
*/
|
|
211
|
-
protected decodeHTMLEntities(str: string): string {
|
|
212
|
-
const entityMap: { [key: string]: string } = {
|
|
213
|
-
'&': '&',
|
|
214
|
-
'<': '<',
|
|
215
|
-
'>': '>',
|
|
216
|
-
'"': '"',
|
|
217
|
-
''': "'",
|
|
218
|
-
'"': '"',
|
|
219
|
-
''': "'",
|
|
220
|
-
'©': '©',
|
|
221
|
-
'®': '®',
|
|
222
|
-
'™': '™',
|
|
223
|
-
' ': ' ',
|
|
224
|
-
'…': '…',
|
|
225
|
-
'—': '—',
|
|
226
|
-
'–': '–',
|
|
227
|
-
'‘': '\u2018',
|
|
228
|
-
'’': '\u2019',
|
|
229
|
-
'“': '"',
|
|
230
|
-
'”': '"'
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
return str.replace(/&[a-zA-Z0-9#]+;/g, (entity) => {
|
|
234
|
-
// Handle named entities
|
|
235
|
-
if (entityMap[entity]) {
|
|
236
|
-
return entityMap[entity];
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Handle numeric entities like ' "
|
|
240
|
-
if (entity.startsWith('&#') && entity.endsWith(';')) {
|
|
241
|
-
const numStr = entity.slice(2, -1);
|
|
242
|
-
const num = parseInt(numStr, 10);
|
|
243
|
-
if (!isNaN(num)) {
|
|
244
|
-
return String.fromCharCode(num);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// Handle hex entities like '
|
|
249
|
-
if (entity.startsWith('&#x') && entity.endsWith(';')) {
|
|
250
|
-
const hexStr = entity.slice(3, -1);
|
|
251
|
-
const num = parseInt(hexStr, 16);
|
|
252
|
-
if (!isNaN(num)) {
|
|
253
|
-
return String.fromCharCode(num);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// Return original if not recognized
|
|
258
|
-
return entity;
|
|
259
|
-
});
|
|
357
|
+
return node;
|
|
260
358
|
}
|
|
261
359
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
const nodeBase = node as any as NodeBase; // Internal cast
|
|
265
|
-
|
|
266
|
-
// Special handling for DocumentFragment
|
|
267
|
-
if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {
|
|
268
|
-
// When appending a DocumentFragment, move its children instead
|
|
269
|
-
const fragment = nodeBase;
|
|
270
|
-
|
|
271
|
-
// Move all children from fragment to this node
|
|
272
|
-
while (fragment._childNodesInternal.length > 0) {
|
|
273
|
-
const child = fragment._childNodesInternal[0];
|
|
274
|
-
if (child) {
|
|
275
|
-
fragment.removeChild(child);
|
|
276
|
-
this.appendChild(child);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
return node;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
if (nodeBase._parentNodeInternal) {
|
|
284
|
-
nodeBase._parentNodeInternal.removeChild(nodeBase);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
this._childNodesInternal.push(nodeBase);
|
|
288
|
-
nodeBase._parentNodeInternal = this;
|
|
289
|
-
nodeBase._ownerDocument = this._ownerDocument;
|
|
290
|
-
|
|
291
|
-
return node;
|
|
360
|
+
if (nodeBase._parentNodeInternal) {
|
|
361
|
+
nodeBase._parentNodeInternal.removeChild(nodeBase);
|
|
292
362
|
}
|
|
293
363
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
if (index === -1) {
|
|
298
|
-
throw new Error('Node not found');
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
this._childNodesInternal.splice(index, 1);
|
|
302
|
-
childBase._parentNodeInternal = null;
|
|
364
|
+
this._childNodesInternal.splice(index, 0, nodeBase);
|
|
365
|
+
nodeBase._parentNodeInternal = this;
|
|
366
|
+
nodeBase._ownerDocument = this._ownerDocument;
|
|
303
367
|
|
|
304
|
-
|
|
368
|
+
// Trigger connectedCallback if it's a custom element and connected to document
|
|
369
|
+
if (this.isConnected && (nodeBase as any).connectedCallback) {
|
|
370
|
+
(nodeBase as any).connectedCallback();
|
|
305
371
|
}
|
|
306
372
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return this.appendChild(node);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
const nodeBase = node as any as NodeBase; // Internal cast
|
|
313
|
-
const childBase = child as any as NodeBase; // Internal cast
|
|
314
|
-
const index = this._findChildIndex(childBase);
|
|
315
|
-
if (index === -1) {
|
|
316
|
-
throw new Error('Reference node not found');
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Handle DocumentFragment - move all its children
|
|
320
|
-
if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {
|
|
321
|
-
const fragment = nodeBase as any;
|
|
322
|
-
const children = [...fragment._childNodesInternal]; // Copy array to avoid modification during iteration
|
|
323
|
-
|
|
324
|
-
let insertIndex = index;
|
|
325
|
-
for (const fragmentChild of children) {
|
|
326
|
-
// Remove from fragment
|
|
327
|
-
fragment.removeChild(fragmentChild);
|
|
328
|
-
// Insert at the current insert position
|
|
329
|
-
this._childNodesInternal.splice(insertIndex, 0, fragmentChild);
|
|
330
|
-
fragmentChild._parentNodeInternal = this;
|
|
331
|
-
fragmentChild._ownerDocument = this._ownerDocument;
|
|
332
|
-
// Increment insert index for next child to maintain order
|
|
333
|
-
insertIndex++;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
return node;
|
|
337
|
-
}
|
|
373
|
+
return node;
|
|
374
|
+
}
|
|
338
375
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
376
|
+
replaceChild<T extends Node>(node: Node, child: T): T {
|
|
377
|
+
this.insertBefore(node, child);
|
|
378
|
+
this.removeChild(child);
|
|
379
|
+
return child;
|
|
380
|
+
}
|
|
342
381
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
382
|
+
cloneNode(deep?: boolean): Node {
|
|
383
|
+
// Basic clone implementation - would need to be overridden by specific node types
|
|
384
|
+
throw new Error('cloneNode must be implemented by subclasses');
|
|
385
|
+
}
|
|
346
386
|
|
|
347
|
-
|
|
348
|
-
|
|
387
|
+
hasChildNodes(): boolean {
|
|
388
|
+
return this._childNodesInternal.length > 0;
|
|
389
|
+
}
|
|
349
390
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
this.removeChild(child);
|
|
353
|
-
return child;
|
|
354
|
-
}
|
|
391
|
+
contains(other: Node | null): boolean {
|
|
392
|
+
if (!other || other === this) return other === this;
|
|
355
393
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
394
|
+
let node: Node | null = other;
|
|
395
|
+
while (node) {
|
|
396
|
+
if (node.parentNode === (this as unknown as ParentNode)) return true;
|
|
397
|
+
node = node.parentNode;
|
|
359
398
|
}
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
360
401
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
}
|
|
402
|
+
compareDocumentPosition(other: Node): number {
|
|
403
|
+
if (this === other) return 0;
|
|
364
404
|
|
|
365
|
-
|
|
366
|
-
if (!other || other === this) return other === this;
|
|
405
|
+
const otherBase = other as any as NodeBase;
|
|
367
406
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
return false;
|
|
407
|
+
// Check if nodes are disconnected (not in same tree)
|
|
408
|
+
const thisRoot = this.getRootNode();
|
|
409
|
+
const otherRoot = otherBase.getRootNode();
|
|
410
|
+
if (thisRoot !== otherRoot) {
|
|
411
|
+
return DOCUMENT_POSITION_DISCONNECTED;
|
|
374
412
|
}
|
|
375
413
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
const otherBase = other as any as NodeBase;
|
|
380
|
-
|
|
381
|
-
// Check if nodes are disconnected (not in same tree)
|
|
382
|
-
const thisRoot = this.getRootNode();
|
|
383
|
-
const otherRoot = otherBase.getRootNode();
|
|
384
|
-
if (thisRoot !== otherRoot) {
|
|
385
|
-
return DOCUMENT_POSITION_DISCONNECTED;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
// Check containment relationships
|
|
389
|
-
if (this.contains(other)) return DOCUMENT_POSITION_CONTAINED_BY;
|
|
390
|
-
if (other.contains(this)) return DOCUMENT_POSITION_CONTAINS;
|
|
391
|
-
|
|
392
|
-
// Find document order by traversing up to common ancestor
|
|
393
|
-
const thisAncestors = this._getAncestors();
|
|
394
|
-
const otherAncestors = otherBase._getAncestors();
|
|
395
|
-
|
|
396
|
-
// Find common ancestor
|
|
397
|
-
let commonAncestor: NodeBase | null = null;
|
|
398
|
-
for (let i = 0; i < thisAncestors.length; i++) {
|
|
399
|
-
if (otherAncestors.includes(thisAncestors[i])) {
|
|
400
|
-
commonAncestor = thisAncestors[i];
|
|
401
|
-
break;
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
if (!commonAncestor) {
|
|
406
|
-
return DOCUMENT_POSITION_DISCONNECTED;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// Compare positions within common ancestor
|
|
410
|
-
const thisChild = this._getChildInAncestor(commonAncestor);
|
|
411
|
-
const otherChild = otherBase._getChildInAncestor(commonAncestor);
|
|
412
|
-
|
|
413
|
-
if (thisChild && otherChild && commonAncestor._childNodesInternal) {
|
|
414
|
-
const thisIndex = commonAncestor._childNodesInternal.indexOf(thisChild);
|
|
415
|
-
const otherIndex = commonAncestor._childNodesInternal.indexOf(otherChild);
|
|
416
|
-
|
|
417
|
-
if (thisIndex < otherIndex) {
|
|
418
|
-
return DOCUMENT_POSITION_FOLLOWING;
|
|
419
|
-
} else if (thisIndex > otherIndex) {
|
|
420
|
-
return DOCUMENT_POSITION_PRECEDING;
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
return DOCUMENT_POSITION_DISCONNECTED;
|
|
425
|
-
}
|
|
414
|
+
// Check containment relationships
|
|
415
|
+
if (this.contains(other)) return DOCUMENT_POSITION_CONTAINED_BY;
|
|
416
|
+
if (other.contains(this)) return DOCUMENT_POSITION_CONTAINS;
|
|
426
417
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
root = root.parentNode;
|
|
431
|
-
}
|
|
432
|
-
return root;
|
|
433
|
-
}
|
|
418
|
+
// Find document order by traversing up to common ancestor
|
|
419
|
+
const thisAncestors = this._getAncestors();
|
|
420
|
+
const otherAncestors = otherBase._getAncestors();
|
|
434
421
|
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
422
|
+
// Find common ancestor
|
|
423
|
+
let commonAncestor: NodeBase | null = null;
|
|
424
|
+
for (let i = 0; i < thisAncestors.length; i++) {
|
|
425
|
+
if (otherAncestors.includes(thisAncestors[i])) {
|
|
426
|
+
commonAncestor = thisAncestors[i];
|
|
427
|
+
break;
|
|
428
|
+
}
|
|
441
429
|
}
|
|
442
430
|
|
|
443
|
-
|
|
444
|
-
|
|
431
|
+
if (!commonAncestor) {
|
|
432
|
+
return DOCUMENT_POSITION_DISCONNECTED;
|
|
445
433
|
}
|
|
446
434
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
435
|
+
// Compare positions within common ancestor
|
|
436
|
+
const thisChild = this._getChildInAncestor(commonAncestor);
|
|
437
|
+
const otherChild = otherBase._getChildInAncestor(commonAncestor);
|
|
451
438
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
return 'http://www.w3.org/1999/xhtml';
|
|
456
|
-
}
|
|
457
|
-
return null;
|
|
458
|
-
}
|
|
439
|
+
if (thisChild && otherChild && commonAncestor._childNodesInternal) {
|
|
440
|
+
const thisIndex = commonAncestor._childNodesInternal.indexOf(thisChild);
|
|
441
|
+
const otherIndex = commonAncestor._childNodesInternal.indexOf(otherChild);
|
|
459
442
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
443
|
+
if (thisIndex < otherIndex) {
|
|
444
|
+
return DOCUMENT_POSITION_FOLLOWING;
|
|
445
|
+
} else if (thisIndex > otherIndex) {
|
|
446
|
+
return DOCUMENT_POSITION_PRECEDING;
|
|
447
|
+
}
|
|
463
448
|
}
|
|
464
449
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
for (let i = this._childNodesInternal.length - 1; i >= 0; i--) {
|
|
468
|
-
const child = this._childNodesInternal[i];
|
|
469
|
-
if (child && child.nodeType === TEXT_NODE) {
|
|
470
|
-
const nextSibling = child.nextSibling;
|
|
471
|
-
if (nextSibling && nextSibling.nodeType === TEXT_NODE) {
|
|
472
|
-
child.nodeValue = (child.nodeValue || '') + (nextSibling.nodeValue || '');
|
|
473
|
-
this.removeChild(nextSibling);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
}
|
|
450
|
+
return DOCUMENT_POSITION_DISCONNECTED;
|
|
451
|
+
}
|
|
478
452
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
453
|
+
getRootNode(options?: GetRootNodeOptions): Node {
|
|
454
|
+
let root: Node = this;
|
|
455
|
+
while (root.parentNode) {
|
|
456
|
+
root = root.parentNode;
|
|
483
457
|
}
|
|
458
|
+
return root;
|
|
459
|
+
}
|
|
484
460
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
461
|
+
isEqualNode(otherNode: Node | null): boolean {
|
|
462
|
+
if (!otherNode) return false;
|
|
463
|
+
if (this === otherNode) return true;
|
|
464
|
+
if (this.nodeType !== otherNode.nodeType) return false;
|
|
465
|
+
if (this.nodeName !== otherNode.nodeName) return false;
|
|
466
|
+
return true; // Simplified comparison
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
isSameNode(otherNode: Node | null): boolean {
|
|
470
|
+
return this === otherNode;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
isDefaultNamespace(namespace: string | null): boolean {
|
|
474
|
+
// Simplified implementation
|
|
475
|
+
return namespace === null || namespace === 'http://www.w3.org/1999/xhtml';
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
lookupNamespaceURI(prefix: string | null): string | null {
|
|
479
|
+
// Simplified implementation
|
|
480
|
+
if (prefix === null || prefix === '') {
|
|
481
|
+
return 'http://www.w3.org/1999/xhtml';
|
|
482
|
+
}
|
|
483
|
+
return null;
|
|
484
|
+
}
|
|
488
485
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
ancestors.push(current);
|
|
494
|
-
current = current._parentNodeInternal;
|
|
495
|
-
}
|
|
496
|
-
return ancestors;
|
|
497
|
-
}
|
|
486
|
+
lookupPrefix(namespace: string | null): string | null {
|
|
487
|
+
// Simplified implementation
|
|
488
|
+
return null;
|
|
489
|
+
}
|
|
498
490
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
491
|
+
normalize(): void {
|
|
492
|
+
// Merge adjacent text nodes
|
|
493
|
+
for (let i = this._childNodesInternal.length - 1; i >= 0; i--) {
|
|
494
|
+
const child = this._childNodesInternal[i];
|
|
495
|
+
if (child && child.nodeType === TEXT_NODE) {
|
|
496
|
+
const nextSibling = child.nextSibling;
|
|
497
|
+
if (nextSibling && nextSibling.nodeType === TEXT_NODE) {
|
|
498
|
+
child.nodeValue = (child.nodeValue || '') + (nextSibling.nodeValue || '');
|
|
499
|
+
this.removeChild(nextSibling);
|
|
503
500
|
}
|
|
504
|
-
|
|
505
|
-
}
|
|
506
|
-
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Helper methods
|
|
506
|
+
private _findIndexInParent(): number {
|
|
507
|
+
if (!this._parentNodeInternal) return -1;
|
|
508
|
+
return this._parentNodeInternal._childNodesInternal.indexOf(this);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
private _findChildIndex(child: NodeBase): number {
|
|
512
|
+
return this._childNodesInternal.indexOf(child);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
private _getAncestors(): NodeBase[] {
|
|
516
|
+
const ancestors: NodeBase[] = [];
|
|
517
|
+
let current: NodeBase | null = this._parentNodeInternal;
|
|
518
|
+
while (current) {
|
|
519
|
+
ancestors.push(current);
|
|
520
|
+
current = current._parentNodeInternal;
|
|
521
|
+
}
|
|
522
|
+
return ancestors;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
private _getChildInAncestor(ancestor: NodeBase): NodeBase | null {
|
|
526
|
+
let current: NodeBase = this;
|
|
527
|
+
while (current._parentNodeInternal && current._parentNodeInternal !== ancestor) {
|
|
528
|
+
current = current._parentNodeInternal;
|
|
529
|
+
}
|
|
530
|
+
return current._parentNodeInternal === ancestor ? current : null;
|
|
531
|
+
}
|
|
532
|
+
}
|