@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/window/WindowBase.ts
CHANGED
|
@@ -1,40 +1,79 @@
|
|
|
1
|
-
import {Window, Location, History, Navigator} from './Window';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
// import { Window, Location, History, Navigator } from './Window';
|
|
2
|
+
// import { CustomElementRegistry } from './CustomElementRegistry';
|
|
3
|
+
// import { Document } from '../node/Document';
|
|
4
|
+
import { DocumentBase } from '../node/DocumentBase';
|
|
5
|
+
import { NodeBase } from '../node/NodeBase';
|
|
6
|
+
import { ElementBase } from '../node/elements/ElementBase';
|
|
6
7
|
|
|
7
8
|
// Import all element classes
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
9
|
+
import {
|
|
10
|
+
HTMLElement,
|
|
11
|
+
HTMLElementBase,
|
|
12
|
+
HTMLAnchorElement,
|
|
13
|
+
HTMLAreaElement,
|
|
14
|
+
HTMLAudioElement,
|
|
15
|
+
HTMLBaseElement,
|
|
16
|
+
HTMLBodyElement,
|
|
17
|
+
HTMLButtonElement,
|
|
18
|
+
HTMLCanvasElement,
|
|
19
|
+
HTMLCaptionElement,
|
|
20
|
+
HTMLDataElement,
|
|
21
|
+
HTMLDataListElement,
|
|
22
|
+
HTMLDetailsElement,
|
|
23
|
+
HTMLDialogElement,
|
|
24
|
+
HTMLDivElement,
|
|
25
|
+
HTMLDListElement,
|
|
26
|
+
HTMLEmbedElement,
|
|
27
|
+
HTMLFieldSetElement,
|
|
28
|
+
HTMLFormElement,
|
|
29
|
+
HTMLH1Element,
|
|
30
|
+
HTMLHeadElement,
|
|
31
|
+
HTMLHRElement,
|
|
32
|
+
HTMLHtmlElement,
|
|
33
|
+
HTMLIFrameElement,
|
|
34
|
+
HTMLImgElement,
|
|
35
|
+
HTMLInputElement,
|
|
36
|
+
HTMLLabelElement,
|
|
37
|
+
HTMLLegendElement,
|
|
38
|
+
HTMLLIElement,
|
|
39
|
+
HTMLLinkElement,
|
|
40
|
+
HTMLMapElement,
|
|
41
|
+
HTMLMetaElement,
|
|
42
|
+
HTMLMeterElement,
|
|
43
|
+
HTMLModElement,
|
|
44
|
+
HTMLObjectElement,
|
|
45
|
+
HTMLOListElement,
|
|
46
|
+
HTMLOptGroupElement,
|
|
47
|
+
HTMLOptionElement,
|
|
48
|
+
HTMLOutputElement,
|
|
49
|
+
HTMLPElement,
|
|
50
|
+
HTMLParamElement,
|
|
51
|
+
HTMLPictureElement,
|
|
52
|
+
HTMLPreElement,
|
|
53
|
+
HTMLProgressElement,
|
|
54
|
+
HTMLQuoteElement,
|
|
55
|
+
HTMLScriptElement,
|
|
56
|
+
HTMLSelectElement,
|
|
57
|
+
HTMLSlotElement,
|
|
58
|
+
HTMLSourceElement,
|
|
59
|
+
HTMLSpanElement,
|
|
60
|
+
HTMLStyleElement,
|
|
61
|
+
HTMLTableElement,
|
|
62
|
+
HTMLTbodyElement,
|
|
63
|
+
HTMLTdElement,
|
|
64
|
+
HTMLTemplateElement,
|
|
65
|
+
HTMLTextAreaElement,
|
|
66
|
+
HTMLTfootElement,
|
|
67
|
+
HTMLTheadElement,
|
|
68
|
+
HTMLThElement,
|
|
69
|
+
HTMLTimeElement,
|
|
70
|
+
HTMLTitleElement,
|
|
71
|
+
HTMLTrackElement,
|
|
72
|
+
HTMLTrElement,
|
|
73
|
+
HTMLUListElement,
|
|
74
|
+
HTMLVideoElement
|
|
75
|
+
} from '../node/elements';
|
|
76
|
+
import { CustomElementRegistryImp } from './CustomElementRegistryImp';
|
|
38
77
|
|
|
39
78
|
class LocationBase implements Location {
|
|
40
79
|
private _href: string = 'about:blank';
|
|
@@ -53,6 +92,8 @@ class LocationBase implements Location {
|
|
|
53
92
|
this.parseUrl(initialUrl);
|
|
54
93
|
}
|
|
55
94
|
|
|
95
|
+
ancestorOrigins: DOMStringList;
|
|
96
|
+
|
|
56
97
|
get href(): string {
|
|
57
98
|
return this._href;
|
|
58
99
|
}
|
|
@@ -61,7 +102,6 @@ class LocationBase implements Location {
|
|
|
61
102
|
const oldHref = this._href;
|
|
62
103
|
this.parseUrl(url);
|
|
63
104
|
|
|
64
|
-
// Call URL change callback if URL actually changed
|
|
65
105
|
if (this._href !== oldHref && this.urlChangeCallback) {
|
|
66
106
|
this.urlChangeCallback(this._href);
|
|
67
107
|
}
|
|
@@ -70,11 +110,8 @@ class LocationBase implements Location {
|
|
|
70
110
|
get protocol(): string {
|
|
71
111
|
return this._protocol;
|
|
72
112
|
}
|
|
73
|
-
|
|
74
113
|
set protocol(value: string) {
|
|
75
|
-
if (!value.endsWith(':'))
|
|
76
|
-
value += ':';
|
|
77
|
-
}
|
|
114
|
+
if (!value.endsWith(':')) value += ':';
|
|
78
115
|
this._protocol = value;
|
|
79
116
|
this.reconstructUrl();
|
|
80
117
|
}
|
|
@@ -82,13 +119,10 @@ class LocationBase implements Location {
|
|
|
82
119
|
get host(): string {
|
|
83
120
|
return this._host;
|
|
84
121
|
}
|
|
85
|
-
|
|
86
122
|
set host(value: string) {
|
|
87
123
|
this._host = value;
|
|
88
|
-
// Parse hostname and port from host
|
|
89
124
|
const colonIndex = value.lastIndexOf(':');
|
|
90
125
|
if (colonIndex !== -1 && colonIndex > value.lastIndexOf(']')) {
|
|
91
|
-
// IPv6 addresses are enclosed in brackets, so check if colon is after the closing bracket
|
|
92
126
|
this._hostname = value.substring(0, colonIndex);
|
|
93
127
|
this._port = value.substring(colonIndex + 1);
|
|
94
128
|
} else {
|
|
@@ -101,7 +135,6 @@ class LocationBase implements Location {
|
|
|
101
135
|
get hostname(): string {
|
|
102
136
|
return this._hostname;
|
|
103
137
|
}
|
|
104
|
-
|
|
105
138
|
set hostname(value: string) {
|
|
106
139
|
this._hostname = value;
|
|
107
140
|
this._host = this._port ? `${value}:${this._port}` : value;
|
|
@@ -111,7 +144,6 @@ class LocationBase implements Location {
|
|
|
111
144
|
get port(): string {
|
|
112
145
|
return this._port;
|
|
113
146
|
}
|
|
114
|
-
|
|
115
147
|
set port(value: string) {
|
|
116
148
|
this._port = value;
|
|
117
149
|
this._host = value ? `${this._hostname}:${value}` : this._hostname;
|
|
@@ -121,11 +153,8 @@ class LocationBase implements Location {
|
|
|
121
153
|
get pathname(): string {
|
|
122
154
|
return this._pathname;
|
|
123
155
|
}
|
|
124
|
-
|
|
125
156
|
set pathname(value: string) {
|
|
126
|
-
if (!value.startsWith('/'))
|
|
127
|
-
value = '/' + value;
|
|
128
|
-
}
|
|
157
|
+
if (!value.startsWith('/')) value = '/' + value;
|
|
129
158
|
this._pathname = value;
|
|
130
159
|
this.reconstructUrl();
|
|
131
160
|
}
|
|
@@ -133,11 +162,8 @@ class LocationBase implements Location {
|
|
|
133
162
|
get search(): string {
|
|
134
163
|
return this._search;
|
|
135
164
|
}
|
|
136
|
-
|
|
137
165
|
set search(value: string) {
|
|
138
|
-
if (value && !value.startsWith('?'))
|
|
139
|
-
value = '?' + value;
|
|
140
|
-
}
|
|
166
|
+
if (value && !value.startsWith('?')) value = '?' + value;
|
|
141
167
|
this._search = value;
|
|
142
168
|
this.reconstructUrl();
|
|
143
169
|
}
|
|
@@ -145,11 +171,8 @@ class LocationBase implements Location {
|
|
|
145
171
|
get hash(): string {
|
|
146
172
|
return this._hash;
|
|
147
173
|
}
|
|
148
|
-
|
|
149
174
|
set hash(value: string) {
|
|
150
|
-
if (value && !value.startsWith('#'))
|
|
151
|
-
value = '#' + value;
|
|
152
|
-
}
|
|
175
|
+
if (value && !value.startsWith('#')) value = '#' + value;
|
|
153
176
|
this._hash = value;
|
|
154
177
|
this.reconstructUrl();
|
|
155
178
|
}
|
|
@@ -161,27 +184,16 @@ class LocationBase implements Location {
|
|
|
161
184
|
assign(url: string): void {
|
|
162
185
|
const oldHref = this._href;
|
|
163
186
|
this.parseUrl(url);
|
|
164
|
-
|
|
165
|
-
// Call URL change callback if URL actually changed
|
|
166
187
|
if (this._href !== oldHref && this.urlChangeCallback) {
|
|
167
188
|
this.urlChangeCallback(this._href);
|
|
168
189
|
}
|
|
169
190
|
}
|
|
170
191
|
|
|
171
192
|
replace(url: string): void {
|
|
172
|
-
|
|
173
|
-
this.parseUrl(url);
|
|
174
|
-
|
|
175
|
-
// Call URL change callback if URL actually changed
|
|
176
|
-
if (this._href !== oldHref && this.urlChangeCallback) {
|
|
177
|
-
this.urlChangeCallback(this._href);
|
|
178
|
-
}
|
|
193
|
+
this.assign(url);
|
|
179
194
|
}
|
|
180
195
|
|
|
181
|
-
reload(
|
|
182
|
-
// No-op in server-side environment
|
|
183
|
-
// In a real browser, this would reload the page
|
|
184
|
-
}
|
|
196
|
+
reload(_forcedReload?: boolean): void {}
|
|
185
197
|
|
|
186
198
|
toString(): string {
|
|
187
199
|
return this._href;
|
|
@@ -189,24 +201,17 @@ class LocationBase implements Location {
|
|
|
189
201
|
|
|
190
202
|
private parseUrl(url: string): void {
|
|
191
203
|
try {
|
|
192
|
-
// Handle relative URLs by creating a base URL
|
|
193
204
|
let parsedUrl: URL;
|
|
194
|
-
|
|
195
205
|
if (url.startsWith('//')) {
|
|
196
|
-
// Protocol-relative URL
|
|
197
206
|
parsedUrl = new URL(this._protocol + url);
|
|
198
207
|
} else if (url.startsWith('/')) {
|
|
199
|
-
// Absolute path
|
|
200
208
|
parsedUrl = new URL(url, `${this._protocol}//${this._host}`);
|
|
201
209
|
} else if (url.includes('://')) {
|
|
202
|
-
// Absolute URL
|
|
203
210
|
parsedUrl = new URL(url);
|
|
204
211
|
} else {
|
|
205
|
-
// Relative URL
|
|
206
212
|
const base = `${this._protocol}//${this._host}${this._pathname}`;
|
|
207
213
|
parsedUrl = new URL(url, base);
|
|
208
214
|
}
|
|
209
|
-
|
|
210
215
|
this._href = parsedUrl.href;
|
|
211
216
|
this._protocol = parsedUrl.protocol;
|
|
212
217
|
this._host = parsedUrl.host;
|
|
@@ -217,7 +222,6 @@ class LocationBase implements Location {
|
|
|
217
222
|
this._hash = parsedUrl.hash;
|
|
218
223
|
this._origin = parsedUrl.origin;
|
|
219
224
|
} catch (e) {
|
|
220
|
-
// Invalid URL, handle special cases
|
|
221
225
|
if (url === 'about:blank') {
|
|
222
226
|
this._href = 'about:blank';
|
|
223
227
|
this._protocol = 'about:';
|
|
@@ -229,33 +233,23 @@ class LocationBase implements Location {
|
|
|
229
233
|
this._hash = '';
|
|
230
234
|
this._origin = 'null';
|
|
231
235
|
}
|
|
232
|
-
// For other invalid URLs, keep current values
|
|
233
236
|
}
|
|
234
237
|
}
|
|
235
238
|
|
|
236
239
|
private reconstructUrl(): void {
|
|
237
240
|
try {
|
|
238
|
-
// Reconstruct the URL from components
|
|
239
241
|
let url = this._protocol;
|
|
240
|
-
|
|
241
242
|
if (this._protocol !== 'about:' && this._protocol !== 'data:') {
|
|
242
243
|
url += '//';
|
|
243
|
-
if (this._host)
|
|
244
|
-
url += this._host;
|
|
245
|
-
}
|
|
244
|
+
if (this._host) url += this._host;
|
|
246
245
|
}
|
|
247
|
-
|
|
248
246
|
url += this._pathname;
|
|
249
247
|
url += this._search;
|
|
250
248
|
url += this._hash;
|
|
251
|
-
|
|
252
|
-
// Validate the reconstructed URL
|
|
253
249
|
const testUrl = new URL(url);
|
|
254
250
|
this._href = testUrl.href;
|
|
255
251
|
this._origin = testUrl.origin;
|
|
256
|
-
} catch (e) {
|
|
257
|
-
// If reconstruction fails, keep the current href
|
|
258
|
-
}
|
|
252
|
+
} catch (e) {}
|
|
259
253
|
}
|
|
260
254
|
}
|
|
261
255
|
|
|
@@ -270,89 +264,126 @@ class HistoryBase implements History {
|
|
|
270
264
|
this.window = window;
|
|
271
265
|
}
|
|
272
266
|
|
|
267
|
+
scrollRestoration: ScrollRestoration;
|
|
268
|
+
|
|
273
269
|
back(): void {
|
|
274
270
|
this.go(-1);
|
|
275
271
|
}
|
|
276
|
-
|
|
277
272
|
forward(): void {
|
|
278
273
|
this.go(1);
|
|
279
274
|
}
|
|
280
|
-
|
|
281
275
|
go(delta?: number): void {
|
|
282
276
|
if (!delta || this.historyStack.length === 0) return;
|
|
283
|
-
|
|
284
277
|
const newIndex = this.currentIndex + delta;
|
|
285
278
|
if (newIndex >= 0 && newIndex < this.historyStack.length) {
|
|
286
279
|
this.currentIndex = newIndex;
|
|
287
280
|
const entry = this.historyStack[this.currentIndex];
|
|
288
281
|
this.state = entry.state;
|
|
289
|
-
|
|
290
|
-
// Update location if URL is provided
|
|
291
282
|
if (entry.url && this.window.location) {
|
|
292
283
|
(this.window.location as any)._href = entry.url;
|
|
293
284
|
(this.window.location as any).parseUrl(entry.url);
|
|
294
285
|
}
|
|
295
|
-
|
|
296
|
-
// Dispatch popstate event
|
|
297
286
|
(this.window as any).dispatchPopStateEvent(entry.state, entry.url);
|
|
298
287
|
}
|
|
299
288
|
}
|
|
300
289
|
|
|
301
290
|
pushState(data: any, title: string, url?: string): void {
|
|
302
|
-
// Remove any forward history when pushing new state
|
|
303
291
|
this.historyStack = this.historyStack.slice(0, this.currentIndex + 1);
|
|
304
|
-
|
|
305
|
-
// Add new state
|
|
306
|
-
this.historyStack.push({state: data, title, url});
|
|
292
|
+
this.historyStack.push({ state: data, title, url });
|
|
307
293
|
this.currentIndex = this.historyStack.length - 1;
|
|
308
294
|
this.state = data;
|
|
309
295
|
this.length = this.historyStack.length;
|
|
310
|
-
|
|
311
|
-
// Update location if URL is provided
|
|
312
296
|
if (url && this.window.location) {
|
|
313
297
|
const oldHref = (this.window.location as any)._href;
|
|
314
298
|
(this.window.location as any)._href = url;
|
|
315
299
|
(this.window.location as any).parseUrl(url);
|
|
316
|
-
|
|
317
|
-
// Trigger URL change callback for dynamic HTML loading
|
|
318
300
|
if (url !== oldHref && (this.window.location as any).urlChangeCallback) {
|
|
319
301
|
(this.window.location as any).urlChangeCallback(url);
|
|
320
302
|
}
|
|
321
303
|
}
|
|
322
|
-
|
|
323
|
-
// Note: pushState does NOT dispatch popstate event (per HTML spec)
|
|
324
304
|
}
|
|
325
305
|
|
|
326
306
|
replaceState(data: any, title: string, url?: string): void {
|
|
327
307
|
if (this.currentIndex >= 0 && this.currentIndex < this.historyStack.length) {
|
|
328
|
-
|
|
329
|
-
this.historyStack[this.currentIndex] = {state: data, title, url};
|
|
308
|
+
this.historyStack[this.currentIndex] = { state: data, title, url };
|
|
330
309
|
} else {
|
|
331
|
-
|
|
332
|
-
this.historyStack = [{state: data, title, url}];
|
|
310
|
+
this.historyStack = [{ state: data, title, url }];
|
|
333
311
|
this.currentIndex = 0;
|
|
334
312
|
this.length = 1;
|
|
335
313
|
}
|
|
336
|
-
|
|
337
314
|
this.state = data;
|
|
338
|
-
|
|
339
|
-
// Update location if URL is provided
|
|
340
315
|
if (url && this.window.location) {
|
|
341
316
|
const oldHref = (this.window.location as any)._href;
|
|
342
317
|
(this.window.location as any)._href = url;
|
|
343
318
|
(this.window.location as any).parseUrl(url);
|
|
344
|
-
|
|
345
|
-
// Trigger URL change callback for dynamic HTML loading
|
|
346
319
|
if (url !== oldHref && (this.window.location as any).urlChangeCallback) {
|
|
347
320
|
(this.window.location as any).urlChangeCallback(url);
|
|
348
321
|
}
|
|
349
322
|
}
|
|
350
|
-
|
|
351
|
-
// Note: replaceState does NOT dispatch popstate event (per HTML spec)
|
|
352
323
|
}
|
|
353
324
|
}
|
|
354
325
|
|
|
355
326
|
class NavigatorBase implements Navigator {
|
|
327
|
+
clipboard: Clipboard;
|
|
328
|
+
credentials: CredentialsContainer;
|
|
329
|
+
doNotTrack: string;
|
|
330
|
+
geolocation: Geolocation;
|
|
331
|
+
login: NavigatorLogin;
|
|
332
|
+
maxTouchPoints: number;
|
|
333
|
+
mediaCapabilities: MediaCapabilities;
|
|
334
|
+
mediaDevices: MediaDevices;
|
|
335
|
+
mediaSession: MediaSession;
|
|
336
|
+
permissions: Permissions;
|
|
337
|
+
serviceWorker: ServiceWorkerContainer;
|
|
338
|
+
userActivation: UserActivation;
|
|
339
|
+
wakeLock: WakeLock;
|
|
340
|
+
canShare(data?: ShareData): boolean {
|
|
341
|
+
throw new Error('Method not implemented.');
|
|
342
|
+
}
|
|
343
|
+
getGamepads(): (Gamepad | null)[] {
|
|
344
|
+
throw new Error('Method not implemented.');
|
|
345
|
+
}
|
|
346
|
+
requestMIDIAccess(options?: MIDIOptions): Promise<MIDIAccess> {
|
|
347
|
+
throw new Error('Method not implemented.');
|
|
348
|
+
}
|
|
349
|
+
requestMediaKeySystemAccess(keySystem: unknown, supportedConfigurations: unknown): Promise<MediaKeySystemAccess> {
|
|
350
|
+
throw new Error('Method not implemented.');
|
|
351
|
+
}
|
|
352
|
+
sendBeacon(url: string | URL, data?: BodyInit | null): boolean {
|
|
353
|
+
throw new Error('Method not implemented.');
|
|
354
|
+
}
|
|
355
|
+
share(data?: ShareData): Promise<void> {
|
|
356
|
+
throw new Error('Method not implemented.');
|
|
357
|
+
}
|
|
358
|
+
vibrate(pattern: unknown): boolean {
|
|
359
|
+
throw new Error('Method not implemented.');
|
|
360
|
+
}
|
|
361
|
+
webdriver: boolean;
|
|
362
|
+
clearAppBadge(): Promise<void> {
|
|
363
|
+
throw new Error('Method not implemented.');
|
|
364
|
+
}
|
|
365
|
+
setAppBadge(contents?: number): Promise<void> {
|
|
366
|
+
throw new Error('Method not implemented.');
|
|
367
|
+
}
|
|
368
|
+
hardwareConcurrency: number;
|
|
369
|
+
registerProtocolHandler(scheme: string, url: string | URL): void {
|
|
370
|
+
throw new Error('Method not implemented.');
|
|
371
|
+
}
|
|
372
|
+
appCodeName: string;
|
|
373
|
+
appName: string;
|
|
374
|
+
appVersion: string;
|
|
375
|
+
product: string;
|
|
376
|
+
productSub: string;
|
|
377
|
+
vendor: string;
|
|
378
|
+
vendorSub: string;
|
|
379
|
+
locks: LockManager;
|
|
380
|
+
mimeTypes: MimeTypeArray;
|
|
381
|
+
pdfViewerEnabled: boolean;
|
|
382
|
+
plugins: PluginArray;
|
|
383
|
+
javaEnabled(): boolean {
|
|
384
|
+
throw new Error('Method not implemented.');
|
|
385
|
+
}
|
|
386
|
+
storage: StorageManager;
|
|
356
387
|
userAgent: string = 'Mozilla/5.0 (Server-Side Rendering)';
|
|
357
388
|
language: string = 'en-US';
|
|
358
389
|
languages: readonly string[] = ['en-US', 'en'];
|
|
@@ -361,30 +392,18 @@ class NavigatorBase implements Navigator {
|
|
|
361
392
|
onLine: boolean = true;
|
|
362
393
|
}
|
|
363
394
|
|
|
364
|
-
|
|
365
|
-
interface EventListener {
|
|
395
|
+
interface WindowEventListener {
|
|
366
396
|
type: string;
|
|
367
397
|
listener: (event: any) => void;
|
|
368
|
-
options?:
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
interface PopStateEvent {
|
|
372
|
-
type: 'popstate';
|
|
373
|
-
state: any;
|
|
374
|
-
url?: string;
|
|
398
|
+
options?: any;
|
|
375
399
|
}
|
|
376
400
|
|
|
377
|
-
export class WindowBase {
|
|
378
|
-
// Suppress type errors for complex event handler types
|
|
401
|
+
export class WindowBase implements Window {
|
|
379
402
|
[key: string]: any;
|
|
380
|
-
|
|
381
|
-
// Event system
|
|
382
|
-
private _eventListeners: EventListener[] = [];
|
|
383
|
-
// Timers and intervals tracking
|
|
403
|
+
private _eventListeners: WindowEventListener[] = [];
|
|
384
404
|
private _timers: Set<number> = new Set();
|
|
385
405
|
private _intervals: Set<number> = new Set();
|
|
386
406
|
private _animationFrames: Set<number> = new Set();
|
|
387
|
-
// Properties
|
|
388
407
|
readonly clientInformation: Navigator;
|
|
389
408
|
private _closed: boolean = false;
|
|
390
409
|
|
|
@@ -392,836 +411,452 @@ export class WindowBase {
|
|
|
392
411
|
return this._closed;
|
|
393
412
|
}
|
|
394
413
|
|
|
395
|
-
readonly cookieStore:
|
|
396
|
-
readonly customElements: CustomElementRegistry
|
|
414
|
+
readonly cookieStore: any = {};
|
|
415
|
+
readonly customElements: CustomElementRegistry;
|
|
397
416
|
readonly devicePixelRatio: number = 1;
|
|
398
417
|
readonly document: Document;
|
|
399
|
-
readonly event: Event | undefined = undefined;
|
|
400
|
-
readonly external: External = {} as External;
|
|
401
|
-
readonly frameElement: Element | null = null;
|
|
402
|
-
readonly frames: WindowProxy = {} as WindowProxy;
|
|
403
418
|
readonly history: History;
|
|
404
|
-
readonly innerHeight: number = 768;
|
|
405
|
-
readonly innerWidth: number = 1024;
|
|
406
|
-
readonly length: number = 0;
|
|
407
|
-
readonly locationbar: BarProp = {} as BarProp;
|
|
408
|
-
readonly menubar: BarProp = {} as BarProp;
|
|
409
|
-
name: string = '';
|
|
410
419
|
readonly navigator: Navigator;
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
ondeviceorientationabsolute: ((this: Window, ev: DeviceOrientationEvent) => any) | null = null;
|
|
414
|
-
onorientationchange: ((this: Window, ev: Event) => any) | null = null;
|
|
415
|
-
opener: any = null;
|
|
416
|
-
readonly orientation: number = 0;
|
|
417
|
-
readonly originAgentCluster: boolean = false;
|
|
418
|
-
readonly outerHeight: number = 768;
|
|
419
|
-
readonly outerWidth: number = 1024;
|
|
420
|
-
readonly pageXOffset: number = 0;
|
|
421
|
-
readonly pageYOffset: number = 0;
|
|
422
|
-
readonly parent: WindowProxy = {} as WindowProxy;
|
|
423
|
-
readonly personalbar: BarProp = {} as BarProp;
|
|
424
|
-
readonly screen: Screen = {} as Screen;
|
|
425
|
-
readonly screenLeft: number = 0;
|
|
426
|
-
readonly screenTop: number = 0;
|
|
427
|
-
readonly screenX: number = 0;
|
|
428
|
-
readonly screenY: number = 0;
|
|
429
|
-
readonly scrollX: number = 0;
|
|
430
|
-
readonly scrollY: number = 0;
|
|
431
|
-
readonly scrollbars: BarProp = {} as BarProp;
|
|
432
|
-
readonly self: Window & typeof globalThis = this as any;
|
|
433
|
-
readonly speechSynthesis: SpeechSynthesis = {} as SpeechSynthesis;
|
|
434
|
-
status: string = '';
|
|
435
|
-
readonly statusbar: BarProp = {} as BarProp;
|
|
436
|
-
readonly toolbar: BarProp = {} as BarProp;
|
|
437
|
-
readonly top: WindowProxy | null = null;
|
|
438
|
-
readonly visualViewport: VisualViewport | null = null;
|
|
439
|
-
readonly window: Window & typeof globalThis = this as any;
|
|
420
|
+
readonly self: any = this;
|
|
421
|
+
readonly window: any = this;
|
|
440
422
|
|
|
441
|
-
// Location property with getter/setter
|
|
442
423
|
private _location: Location;
|
|
443
424
|
get location(): Location {
|
|
444
425
|
return this._location;
|
|
445
426
|
}
|
|
446
|
-
|
|
447
427
|
set location(href: string | Location) {
|
|
448
|
-
if (typeof href === 'string')
|
|
449
|
-
|
|
450
|
-
} else {
|
|
451
|
-
this._location.href = href.href;
|
|
452
|
-
}
|
|
428
|
+
if (typeof href === 'string') this._location.href = href;
|
|
429
|
+
else this._location.href = href.href;
|
|
453
430
|
}
|
|
454
431
|
|
|
455
432
|
// Global constructors
|
|
456
|
-
Node = NodeBase;
|
|
457
|
-
Element = ElementBase;
|
|
458
|
-
HTMLElement = ElementBase;
|
|
459
433
|
Event = class Event {
|
|
434
|
+
constructor(public type: string) {}
|
|
460
435
|
};
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
};
|
|
469
|
-
HTMLMetaElement = HTMLMetaElement;
|
|
470
|
-
HTMLCanvasElement = HTMLCanvasElement;
|
|
471
|
-
CanvasRenderingContext2D = class CanvasRenderingContext2D {
|
|
472
|
-
};
|
|
473
|
-
CanvasPattern = class CanvasPattern {
|
|
474
|
-
};
|
|
475
|
-
CanvasGradient = class CanvasGradient {
|
|
476
|
-
};
|
|
477
|
-
Path2D = class Path2D {
|
|
478
|
-
};
|
|
479
|
-
ImageData = class ImageData {
|
|
436
|
+
CustomEvent = class CustomEvent extends this.Event {
|
|
437
|
+
constructor(
|
|
438
|
+
type: string,
|
|
439
|
+
public detail: any
|
|
440
|
+
) {
|
|
441
|
+
super(type);
|
|
442
|
+
}
|
|
480
443
|
};
|
|
481
444
|
|
|
482
|
-
// HTML element constructors
|
|
445
|
+
// All HTML element constructors
|
|
446
|
+
Node = NodeBase;
|
|
447
|
+
Element = ElementBase;
|
|
448
|
+
HTMLElement = HTMLElement;
|
|
483
449
|
HTMLAnchorElement = HTMLAnchorElement;
|
|
450
|
+
HTMLAreaElement = HTMLAreaElement;
|
|
451
|
+
HTMLAudioElement = HTMLAudioElement;
|
|
452
|
+
HTMLBaseElement = HTMLBaseElement;
|
|
484
453
|
HTMLBodyElement = HTMLBodyElement;
|
|
485
454
|
HTMLButtonElement = HTMLButtonElement;
|
|
455
|
+
HTMLCanvasElement = HTMLCanvasElement;
|
|
456
|
+
HTMLCaptionElement = HTMLCaptionElement;
|
|
457
|
+
HTMLDataElement = HTMLDataElement;
|
|
458
|
+
HTMLDataListElement = HTMLDataListElement;
|
|
459
|
+
HTMLDetailsElement = HTMLDetailsElement;
|
|
460
|
+
HTMLDialogElement = HTMLDialogElement;
|
|
486
461
|
HTMLDivElement = HTMLDivElement;
|
|
462
|
+
HTMLDListElement = HTMLDListElement;
|
|
463
|
+
HTMLEmbedElement = HTMLEmbedElement;
|
|
464
|
+
HTMLFieldSetElement = HTMLFieldSetElement;
|
|
465
|
+
HTMLFormElement = HTMLFormElement;
|
|
487
466
|
HTMLH1Element = HTMLH1Element;
|
|
488
467
|
HTMLHeadElement = HTMLHeadElement;
|
|
468
|
+
HTMLHRElement = HTMLHRElement;
|
|
489
469
|
HTMLHtmlElement = HTMLHtmlElement;
|
|
470
|
+
HTMLIFrameElement = HTMLIFrameElement;
|
|
490
471
|
HTMLImgElement = HTMLImgElement;
|
|
491
472
|
HTMLInputElement = HTMLInputElement;
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
473
|
+
HTMLLabelElement = HTMLLabelElement;
|
|
474
|
+
HTMLLegendElement = HTMLLegendElement;
|
|
475
|
+
HTMLLIElement = HTMLLIElement;
|
|
495
476
|
HTMLLinkElement = HTMLLinkElement;
|
|
477
|
+
HTMLMapElement = HTMLMapElement;
|
|
478
|
+
HTMLMetaElement = HTMLMetaElement;
|
|
479
|
+
HTMLMeterElement = HTMLMeterElement;
|
|
480
|
+
HTMLModElement = HTMLModElement;
|
|
481
|
+
HTMLObjectElement = HTMLObjectElement;
|
|
482
|
+
HTMLOListElement = HTMLOListElement;
|
|
483
|
+
HTMLOptGroupElement = HTMLOptGroupElement;
|
|
484
|
+
HTMLOptionElement = HTMLOptionElement;
|
|
485
|
+
HTMLOutputElement = HTMLOutputElement;
|
|
486
|
+
HTMLPElement = HTMLPElement;
|
|
487
|
+
HTMLParamElement = HTMLParamElement;
|
|
488
|
+
HTMLPictureElement = HTMLPictureElement;
|
|
489
|
+
HTMLPreElement = HTMLPreElement;
|
|
490
|
+
HTMLProgressElement = HTMLProgressElement;
|
|
491
|
+
HTMLQuoteElement = HTMLQuoteElement;
|
|
496
492
|
HTMLScriptElement = HTMLScriptElement;
|
|
493
|
+
HTMLSelectElement = HTMLSelectElement;
|
|
494
|
+
HTMLSlotElement = HTMLSlotElement;
|
|
495
|
+
HTMLSourceElement = HTMLSourceElement;
|
|
496
|
+
HTMLSpanElement = HTMLSpanElement;
|
|
497
497
|
HTMLStyleElement = HTMLStyleElement;
|
|
498
|
-
HTMLFormElement = HTMLFormElement;
|
|
499
498
|
HTMLTableElement = HTMLTableElement;
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
HTMLLIElement = HTMLLIElement;
|
|
499
|
+
HTMLTbodyElement = HTMLTbodyElement;
|
|
500
|
+
HTMLTdElement = HTMLTdElement;
|
|
503
501
|
HTMLTemplateElement = HTMLTemplateElement;
|
|
504
|
-
|
|
502
|
+
HTMLTextAreaElement = HTMLTextAreaElement;
|
|
505
503
|
HTMLTfootElement = HTMLTfootElement;
|
|
506
|
-
|
|
507
|
-
HTMLTdElement = HTMLTdElement;
|
|
504
|
+
HTMLTheadElement = HTMLTheadElement;
|
|
508
505
|
HTMLThElement = HTMLThElement;
|
|
509
|
-
|
|
510
|
-
|
|
506
|
+
HTMLTimeElement = HTMLTimeElement;
|
|
507
|
+
HTMLTitleElement = HTMLTitleElement;
|
|
508
|
+
HTMLTrackElement = HTMLTrackElement;
|
|
509
|
+
HTMLTrElement = HTMLTrElement;
|
|
510
|
+
HTMLUListElement = HTMLUListElement;
|
|
511
|
+
HTMLVideoElement = HTMLVideoElement;
|
|
512
|
+
|
|
513
|
+
// Type Aliases
|
|
514
|
+
HTMLImageElement = HTMLImgElement;
|
|
515
|
+
HTMLParagraphElement = HTMLPElement;
|
|
516
|
+
HTMLHeadingElement = HTMLH1Element;
|
|
517
|
+
HTMLTableSectionElement = HTMLTbodyElement;
|
|
518
|
+
HTMLTableCellElement = HTMLTdElement;
|
|
519
|
+
HTMLTableRowElement = HTMLTrElement;
|
|
511
520
|
|
|
512
521
|
constructor(config?: { initialUrl?: string }) {
|
|
513
522
|
const documentBase = new DocumentBase();
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
if (this.document && (this.document as any).setWindow) {
|
|
517
|
-
(this.document as any).setWindow(this);
|
|
523
|
+
if (documentBase && (documentBase as any).setWindow) {
|
|
524
|
+
(documentBase as any).setWindow(this);
|
|
518
525
|
}
|
|
519
|
-
|
|
520
526
|
this._location = new LocationBase(config?.initialUrl);
|
|
521
527
|
documentBase.setLocation(this._location);
|
|
522
|
-
this.document = documentBase;
|
|
528
|
+
this.document = documentBase as unknown as Document;
|
|
529
|
+
const customElementRegistryImp = new CustomElementRegistryImp();
|
|
530
|
+
customElementRegistryImp.setWindow(this);
|
|
531
|
+
this.customElements = customElementRegistryImp as unknown as CustomElementRegistry;
|
|
523
532
|
this.history = new HistoryBase(this);
|
|
524
533
|
this.navigator = new NavigatorBase();
|
|
525
534
|
this.clientInformation = this.navigator;
|
|
526
|
-
|
|
527
|
-
// Return a Proxy to handle the [index: number]: Window signature
|
|
528
|
-
return new Proxy(this, {
|
|
529
|
-
get(target: WindowBase, prop: string | symbol): any {
|
|
530
|
-
// Handle numeric indices - return the window itself
|
|
531
|
-
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
532
|
-
return target;
|
|
533
|
-
}
|
|
534
|
-
// Return the actual property
|
|
535
|
-
return (target as any)[prop];
|
|
536
|
-
},
|
|
537
|
-
|
|
538
|
-
set(target: WindowBase, prop: string | symbol, value: any): boolean {
|
|
539
|
-
// Handle numeric indices - ignore setting
|
|
540
|
-
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
541
|
-
return true;
|
|
542
|
-
}
|
|
543
|
-
// Set the actual property
|
|
544
|
-
(target as any)[prop] = value;
|
|
545
|
-
return true;
|
|
546
|
-
},
|
|
547
|
-
|
|
548
|
-
has(target: WindowBase, prop: string | symbol): boolean {
|
|
549
|
-
// Handle numeric indices
|
|
550
|
-
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
551
|
-
return true;
|
|
552
|
-
}
|
|
553
|
-
// Check if property exists
|
|
554
|
-
return prop in target;
|
|
555
|
-
},
|
|
556
|
-
|
|
557
|
-
ownKeys(target: WindowBase): ArrayLike<string | symbol> {
|
|
558
|
-
// Get all own keys plus numeric indices for length
|
|
559
|
-
const keys = Object.getOwnPropertyNames(target);
|
|
560
|
-
// Add numeric indices based on length property
|
|
561
|
-
for (let i = 0; i < target.length; i++) {
|
|
562
|
-
keys.push(i.toString());
|
|
563
|
-
}
|
|
564
|
-
return keys;
|
|
565
|
-
},
|
|
566
|
-
|
|
567
|
-
getOwnPropertyDescriptor(target: WindowBase, prop: string | symbol): PropertyDescriptor | undefined {
|
|
568
|
-
// Handle numeric indices
|
|
569
|
-
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
570
|
-
return {
|
|
571
|
-
enumerable: true,
|
|
572
|
-
configurable: true,
|
|
573
|
-
value: target
|
|
574
|
-
};
|
|
575
|
-
}
|
|
576
|
-
// Return actual property descriptor
|
|
577
|
-
return Object.getOwnPropertyDescriptor(target, prop);
|
|
578
|
-
}
|
|
579
|
-
});
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
// Window methods - all with empty implementations for server-side
|
|
583
|
-
alert(message?: any): void {
|
|
584
535
|
}
|
|
585
536
|
|
|
537
|
+
[index: number]: Window;
|
|
538
|
+
event: Event;
|
|
539
|
+
external: External;
|
|
540
|
+
frameElement: Element;
|
|
541
|
+
frames: Window;
|
|
542
|
+
innerHeight: number;
|
|
543
|
+
innerWidth: number;
|
|
544
|
+
length: number;
|
|
545
|
+
locationbar: BarProp;
|
|
546
|
+
menubar: BarProp;
|
|
547
|
+
name: string;
|
|
548
|
+
ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any;
|
|
549
|
+
ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any;
|
|
550
|
+
ondeviceorientationabsolute: (this: Window, ev: DeviceOrientationEvent) => any;
|
|
551
|
+
onorientationchange: (this: Window, ev: Event) => any;
|
|
552
|
+
opener: any;
|
|
553
|
+
orientation: number;
|
|
554
|
+
originAgentCluster: boolean;
|
|
555
|
+
outerHeight: number;
|
|
556
|
+
outerWidth: number;
|
|
557
|
+
pageXOffset: number;
|
|
558
|
+
pageYOffset: number;
|
|
559
|
+
parent: Window;
|
|
560
|
+
personalbar: BarProp;
|
|
561
|
+
screen: Screen;
|
|
562
|
+
screenLeft: number;
|
|
563
|
+
screenTop: number;
|
|
564
|
+
screenX: number;
|
|
565
|
+
screenY: number;
|
|
566
|
+
scrollX: number;
|
|
567
|
+
scrollY: number;
|
|
568
|
+
scrollbars: BarProp;
|
|
569
|
+
speechSynthesis: SpeechSynthesis;
|
|
570
|
+
status: string;
|
|
571
|
+
statusbar: BarProp;
|
|
572
|
+
toolbar: BarProp;
|
|
573
|
+
top: Window;
|
|
574
|
+
visualViewport: VisualViewport;
|
|
586
575
|
blur(): void {
|
|
576
|
+
throw new Error('Method not implemented.');
|
|
587
577
|
}
|
|
588
|
-
|
|
589
578
|
cancelIdleCallback(handle: number): void {
|
|
579
|
+
throw new Error('Method not implemented.');
|
|
590
580
|
}
|
|
591
|
-
|
|
592
581
|
captureEvents(): void {
|
|
582
|
+
throw new Error('Method not implemented.');
|
|
593
583
|
}
|
|
594
|
-
|
|
595
|
-
close(): void {
|
|
596
|
-
if (this._closed) return;
|
|
597
|
-
|
|
598
|
-
this._closed = true;
|
|
599
|
-
|
|
600
|
-
// Clear all timers
|
|
601
|
-
this._timers.forEach(id => clearTimeout(id));
|
|
602
|
-
this._timers.clear();
|
|
603
|
-
|
|
604
|
-
// Clear all intervals
|
|
605
|
-
this._intervals.forEach(id => clearInterval(id));
|
|
606
|
-
this._intervals.clear();
|
|
607
|
-
|
|
608
|
-
// Clear all animation frames
|
|
609
|
-
this._animationFrames.forEach(id => clearTimeout(id));
|
|
610
|
-
this._animationFrames.clear();
|
|
611
|
-
|
|
612
|
-
// Remove all event listeners (clear references to prevent memory leaks)
|
|
613
|
-
this._eventListeners.forEach(listener => {
|
|
614
|
-
// Explicitly null out the listener function reference
|
|
615
|
-
(listener as any).listener = null;
|
|
616
|
-
});
|
|
617
|
-
this._eventListeners.length = 0;
|
|
618
|
-
|
|
619
|
-
// Clear all on* event handler properties
|
|
620
|
-
this.onload = null;
|
|
621
|
-
this.onunload = null;
|
|
622
|
-
this.onbeforeunload = null;
|
|
623
|
-
this.onpopstate = null;
|
|
624
|
-
this.onerror = null;
|
|
625
|
-
this.onmessage = null;
|
|
626
|
-
this.onhashchange = null;
|
|
627
|
-
|
|
628
|
-
// Clear document references
|
|
629
|
-
if (this.document) {
|
|
630
|
-
const doc = this.document as any;
|
|
631
|
-
|
|
632
|
-
// Clear document content recursively
|
|
633
|
-
if (doc.body) {
|
|
634
|
-
this.clearNodeRecursively(doc.body);
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
if (doc.head) {
|
|
638
|
-
this.clearNodeRecursively(doc.head);
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
if (doc.documentElement) {
|
|
642
|
-
this.clearNodeRecursively(doc.documentElement);
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
// Break circular references
|
|
646
|
-
if (doc.setWindow) {
|
|
647
|
-
doc.setWindow(null);
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
// Clear document event listeners
|
|
651
|
-
if (doc._eventListeners) {
|
|
652
|
-
doc._eventListeners.forEach((listener: any) => {
|
|
653
|
-
listener.listener = null;
|
|
654
|
-
});
|
|
655
|
-
doc._eventListeners.length = 0;
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
// Clear history
|
|
660
|
-
if (this.history) {
|
|
661
|
-
const hist = this.history as any;
|
|
662
|
-
if (hist.historyStack) {
|
|
663
|
-
hist.historyStack.forEach((entry: any) => {
|
|
664
|
-
entry.state = null;
|
|
665
|
-
});
|
|
666
|
-
hist.historyStack.length = 0;
|
|
667
|
-
}
|
|
668
|
-
hist.state = null;
|
|
669
|
-
hist.window = null;
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
// Clear location callback
|
|
673
|
-
if (this._location) {
|
|
674
|
-
(this._location as any).urlChangeCallback = null;
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
/**
|
|
679
|
-
* Recursively clear a node and its children to prevent memory leaks
|
|
680
|
-
*/
|
|
681
|
-
private clearNodeRecursively(node: any): void {
|
|
682
|
-
if (!node) return;
|
|
683
|
-
|
|
684
|
-
// Clear children first
|
|
685
|
-
while (node.firstChild) {
|
|
686
|
-
const child = node.firstChild;
|
|
687
|
-
node.removeChild(child);
|
|
688
|
-
this.clearNodeRecursively(child);
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
// Clear event listeners on the node
|
|
692
|
-
if (node._eventListeners) {
|
|
693
|
-
node._eventListeners.forEach((listener: any) => {
|
|
694
|
-
listener.listener = null;
|
|
695
|
-
});
|
|
696
|
-
node._eventListeners.length = 0;
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
// Clear node properties that might hold references (safely)
|
|
700
|
-
try {
|
|
701
|
-
if (node.parentNode) {
|
|
702
|
-
node.parentNode = null;
|
|
703
|
-
}
|
|
704
|
-
} catch (e) {
|
|
705
|
-
// parentNode might be read-only
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
try {
|
|
709
|
-
if (node.ownerDocument) {
|
|
710
|
-
node.ownerDocument = null;
|
|
711
|
-
}
|
|
712
|
-
} catch (e) {
|
|
713
|
-
// ownerDocument might be read-only (getter-only)
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
// Clear other potential circular references
|
|
717
|
-
if (node._childNodes) {
|
|
718
|
-
if (Array.isArray(node._childNodes)) {
|
|
719
|
-
node._childNodes = [];
|
|
720
|
-
} else if (node._childNodes instanceof Map) {
|
|
721
|
-
node._childNodes.clear();
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
if (node._attributes) {
|
|
725
|
-
if (Array.isArray(node._attributes)) {
|
|
726
|
-
node._attributes = [];
|
|
727
|
-
} else if (node._attributes instanceof Map) {
|
|
728
|
-
node._attributes.clear();
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
|
|
733
584
|
confirm(message?: string): boolean {
|
|
734
|
-
|
|
585
|
+
throw new Error('Method not implemented.');
|
|
735
586
|
}
|
|
736
|
-
|
|
737
587
|
focus(): void {
|
|
588
|
+
throw new Error('Method not implemented.');
|
|
738
589
|
}
|
|
739
|
-
|
|
740
590
|
getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration {
|
|
741
|
-
|
|
591
|
+
throw new Error('Method not implemented.');
|
|
742
592
|
}
|
|
743
|
-
|
|
744
593
|
getSelection(): Selection | null {
|
|
745
|
-
|
|
594
|
+
throw new Error('Method not implemented.');
|
|
746
595
|
}
|
|
747
|
-
|
|
748
596
|
matchMedia(query: string): MediaQueryList {
|
|
749
|
-
|
|
597
|
+
throw new Error('Method not implemented.');
|
|
750
598
|
}
|
|
751
|
-
|
|
752
599
|
moveBy(x: number, y: number): void {
|
|
600
|
+
throw new Error('Method not implemented.');
|
|
753
601
|
}
|
|
754
|
-
|
|
755
602
|
moveTo(x: number, y: number): void {
|
|
603
|
+
throw new Error('Method not implemented.');
|
|
756
604
|
}
|
|
757
|
-
|
|
758
605
|
open(url?: string | URL, target?: string, features?: string): WindowProxy | null {
|
|
759
|
-
|
|
606
|
+
throw new Error('Method not implemented.');
|
|
760
607
|
}
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
postMessage(message: any, options?: WindowPostMessageOptions): void;
|
|
764
|
-
postMessage(message: any, targetOriginOrOptions?: string | WindowPostMessageOptions, transfer?: Transferable[]): void {
|
|
608
|
+
postMessage(message: unknown, targetOrigin?: unknown, transfer?: unknown): void {
|
|
609
|
+
throw new Error('Method not implemented.');
|
|
765
610
|
}
|
|
766
|
-
|
|
767
611
|
print(): void {
|
|
612
|
+
throw new Error('Method not implemented.');
|
|
768
613
|
}
|
|
769
|
-
|
|
770
614
|
prompt(message?: string, _default?: string): string | null {
|
|
771
|
-
|
|
615
|
+
throw new Error('Method not implemented.');
|
|
772
616
|
}
|
|
773
|
-
|
|
774
617
|
releaseEvents(): void {
|
|
618
|
+
throw new Error('Method not implemented.');
|
|
775
619
|
}
|
|
776
|
-
|
|
777
620
|
requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number {
|
|
778
|
-
|
|
621
|
+
throw new Error('Method not implemented.');
|
|
779
622
|
}
|
|
780
|
-
|
|
781
623
|
resizeBy(x: number, y: number): void {
|
|
624
|
+
throw new Error('Method not implemented.');
|
|
782
625
|
}
|
|
783
|
-
|
|
784
626
|
resizeTo(width: number, height: number): void {
|
|
627
|
+
throw new Error('Method not implemented.');
|
|
785
628
|
}
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
scroll(x: number, y: number): void;
|
|
789
|
-
scroll(optionsOrX?: ScrollToOptions | number, y?: number): void {
|
|
629
|
+
scroll(x?: unknown, y?: unknown): void {
|
|
630
|
+
throw new Error('Method not implemented.');
|
|
790
631
|
}
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
scrollBy(x: number, y: number): void;
|
|
794
|
-
scrollBy(optionsOrX?: ScrollToOptions | number, y?: number): void {
|
|
632
|
+
scrollBy(x?: unknown, y?: unknown): void {
|
|
633
|
+
throw new Error('Method not implemented.');
|
|
795
634
|
}
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
scrollTo(x: number, y: number): void;
|
|
799
|
-
scrollTo(optionsOrX?: ScrollToOptions | number, y?: number): void {
|
|
635
|
+
scrollTo(x?: unknown, y?: unknown): void {
|
|
636
|
+
throw new Error('Method not implemented.');
|
|
800
637
|
}
|
|
801
|
-
|
|
802
638
|
stop(): void {
|
|
639
|
+
throw new Error('Method not implemented.');
|
|
640
|
+
}
|
|
641
|
+
cancelAnimationFrame(handle: number): void {
|
|
642
|
+
throw new Error('Method not implemented.');
|
|
643
|
+
}
|
|
644
|
+
requestAnimationFrame(callback: FrameRequestCallback): number {
|
|
645
|
+
throw new Error('Method not implemented.');
|
|
646
|
+
}
|
|
647
|
+
onabort: (this: GlobalEventHandlers, ev: UIEvent) => any;
|
|
648
|
+
onanimationcancel: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
|
|
649
|
+
onanimationend: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
|
|
650
|
+
onanimationiteration: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
|
|
651
|
+
onanimationstart: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
|
|
652
|
+
onauxclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
653
|
+
onbeforeinput: (this: GlobalEventHandlers, ev: InputEvent) => any;
|
|
654
|
+
onbeforematch: (this: GlobalEventHandlers, ev: Event) => any;
|
|
655
|
+
onbeforetoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;
|
|
656
|
+
onblur: (this: GlobalEventHandlers, ev: FocusEvent) => any;
|
|
657
|
+
oncancel: (this: GlobalEventHandlers, ev: Event) => any;
|
|
658
|
+
oncanplay: (this: GlobalEventHandlers, ev: Event) => any;
|
|
659
|
+
oncanplaythrough: (this: GlobalEventHandlers, ev: Event) => any;
|
|
660
|
+
onchange: (this: GlobalEventHandlers, ev: Event) => any;
|
|
661
|
+
onclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
662
|
+
onclose: (this: GlobalEventHandlers, ev: Event) => any;
|
|
663
|
+
oncontextlost: (this: GlobalEventHandlers, ev: Event) => any;
|
|
664
|
+
oncontextmenu: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
665
|
+
oncontextrestored: (this: GlobalEventHandlers, ev: Event) => any;
|
|
666
|
+
oncopy: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;
|
|
667
|
+
oncuechange: (this: GlobalEventHandlers, ev: Event) => any;
|
|
668
|
+
oncut: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;
|
|
669
|
+
ondblclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
670
|
+
ondrag: (this: GlobalEventHandlers, ev: DragEvent) => any;
|
|
671
|
+
ondragend: (this: GlobalEventHandlers, ev: DragEvent) => any;
|
|
672
|
+
ondragenter: (this: GlobalEventHandlers, ev: DragEvent) => any;
|
|
673
|
+
ondragleave: (this: GlobalEventHandlers, ev: DragEvent) => any;
|
|
674
|
+
ondragover: (this: GlobalEventHandlers, ev: DragEvent) => any;
|
|
675
|
+
ondragstart: (this: GlobalEventHandlers, ev: DragEvent) => any;
|
|
676
|
+
ondrop: (this: GlobalEventHandlers, ev: DragEvent) => any;
|
|
677
|
+
ondurationchange: (this: GlobalEventHandlers, ev: Event) => any;
|
|
678
|
+
onemptied: (this: GlobalEventHandlers, ev: Event) => any;
|
|
679
|
+
onended: (this: GlobalEventHandlers, ev: Event) => any;
|
|
680
|
+
onerror: OnErrorEventHandlerNonNull;
|
|
681
|
+
onfocus: (this: GlobalEventHandlers, ev: FocusEvent) => any;
|
|
682
|
+
onformdata: (this: GlobalEventHandlers, ev: FormDataEvent) => any;
|
|
683
|
+
ongotpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
684
|
+
oninput: (this: GlobalEventHandlers, ev: Event) => any;
|
|
685
|
+
oninvalid: (this: GlobalEventHandlers, ev: Event) => any;
|
|
686
|
+
onkeydown: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
|
|
687
|
+
onkeypress: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
|
|
688
|
+
onkeyup: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
|
|
689
|
+
onload: (this: GlobalEventHandlers, ev: Event) => any;
|
|
690
|
+
onloadeddata: (this: GlobalEventHandlers, ev: Event) => any;
|
|
691
|
+
onloadedmetadata: (this: GlobalEventHandlers, ev: Event) => any;
|
|
692
|
+
onloadstart: (this: GlobalEventHandlers, ev: Event) => any;
|
|
693
|
+
onlostpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
694
|
+
onmousedown: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
695
|
+
onmouseenter: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
696
|
+
onmouseleave: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
697
|
+
onmousemove: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
698
|
+
onmouseout: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
699
|
+
onmouseover: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
700
|
+
onmouseup: (this: GlobalEventHandlers, ev: MouseEvent) => any;
|
|
701
|
+
onpaste: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;
|
|
702
|
+
onpause: (this: GlobalEventHandlers, ev: Event) => any;
|
|
703
|
+
onplay: (this: GlobalEventHandlers, ev: Event) => any;
|
|
704
|
+
onplaying: (this: GlobalEventHandlers, ev: Event) => any;
|
|
705
|
+
onpointercancel: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
706
|
+
onpointerdown: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
707
|
+
onpointerenter: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
708
|
+
onpointerleave: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
709
|
+
onpointermove: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
710
|
+
onpointerout: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
711
|
+
onpointerover: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
712
|
+
onpointerrawupdate: (this: GlobalEventHandlers, ev: Event) => any;
|
|
713
|
+
onpointerup: (this: GlobalEventHandlers, ev: PointerEvent) => any;
|
|
714
|
+
onprogress: (this: GlobalEventHandlers, ev: ProgressEvent) => any;
|
|
715
|
+
onratechange: (this: GlobalEventHandlers, ev: Event) => any;
|
|
716
|
+
onreset: (this: GlobalEventHandlers, ev: Event) => any;
|
|
717
|
+
onresize: (this: GlobalEventHandlers, ev: UIEvent) => any;
|
|
718
|
+
onscroll: (this: GlobalEventHandlers, ev: Event) => any;
|
|
719
|
+
onscrollend: (this: GlobalEventHandlers, ev: Event) => any;
|
|
720
|
+
onsecuritypolicyviolation: (this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any;
|
|
721
|
+
onseeked: (this: GlobalEventHandlers, ev: Event) => any;
|
|
722
|
+
onseeking: (this: GlobalEventHandlers, ev: Event) => any;
|
|
723
|
+
onselect: (this: GlobalEventHandlers, ev: Event) => any;
|
|
724
|
+
onselectionchange: (this: GlobalEventHandlers, ev: Event) => any;
|
|
725
|
+
onselectstart: (this: GlobalEventHandlers, ev: Event) => any;
|
|
726
|
+
onslotchange: (this: GlobalEventHandlers, ev: Event) => any;
|
|
727
|
+
onstalled: (this: GlobalEventHandlers, ev: Event) => any;
|
|
728
|
+
onsubmit: (this: GlobalEventHandlers, ev: SubmitEvent) => any;
|
|
729
|
+
onsuspend: (this: GlobalEventHandlers, ev: Event) => any;
|
|
730
|
+
ontimeupdate: (this: GlobalEventHandlers, ev: Event) => any;
|
|
731
|
+
ontoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;
|
|
732
|
+
ontouchcancel?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
|
|
733
|
+
ontouchend?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
|
|
734
|
+
ontouchmove?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
|
|
735
|
+
ontouchstart?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
|
|
736
|
+
ontransitioncancel: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
|
|
737
|
+
ontransitionend: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
|
|
738
|
+
ontransitionrun: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
|
|
739
|
+
ontransitionstart: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
|
|
740
|
+
onvolumechange: (this: GlobalEventHandlers, ev: Event) => any;
|
|
741
|
+
onwaiting: (this: GlobalEventHandlers, ev: Event) => any;
|
|
742
|
+
onwebkitanimationend: (this: GlobalEventHandlers, ev: Event) => any;
|
|
743
|
+
onwebkitanimationiteration: (this: GlobalEventHandlers, ev: Event) => any;
|
|
744
|
+
onwebkitanimationstart: (this: GlobalEventHandlers, ev: Event) => any;
|
|
745
|
+
onwebkittransitionend: (this: GlobalEventHandlers, ev: Event) => any;
|
|
746
|
+
onwheel: (this: GlobalEventHandlers, ev: WheelEvent) => any;
|
|
747
|
+
onafterprint: (this: WindowEventHandlers, ev: Event) => any;
|
|
748
|
+
onbeforeprint: (this: WindowEventHandlers, ev: Event) => any;
|
|
749
|
+
onbeforeunload: (this: WindowEventHandlers, ev: BeforeUnloadEvent) => any;
|
|
750
|
+
ongamepadconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;
|
|
751
|
+
ongamepaddisconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;
|
|
752
|
+
onhashchange: (this: WindowEventHandlers, ev: HashChangeEvent) => any;
|
|
753
|
+
onlanguagechange: (this: WindowEventHandlers, ev: Event) => any;
|
|
754
|
+
onmessage: (this: WindowEventHandlers, ev: MessageEvent) => any;
|
|
755
|
+
onmessageerror: (this: WindowEventHandlers, ev: MessageEvent) => any;
|
|
756
|
+
onoffline: (this: WindowEventHandlers, ev: Event) => any;
|
|
757
|
+
ononline: (this: WindowEventHandlers, ev: Event) => any;
|
|
758
|
+
onpagehide: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;
|
|
759
|
+
onpagereveal: (this: WindowEventHandlers, ev: PageRevealEvent) => any;
|
|
760
|
+
onpageshow: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;
|
|
761
|
+
onpageswap: (this: WindowEventHandlers, ev: PageSwapEvent) => any;
|
|
762
|
+
onpopstate: (this: WindowEventHandlers, ev: PopStateEvent) => any;
|
|
763
|
+
onrejectionhandled: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;
|
|
764
|
+
onstorage: (this: WindowEventHandlers, ev: StorageEvent) => any;
|
|
765
|
+
onunhandledrejection: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;
|
|
766
|
+
onunload: (this: WindowEventHandlers, ev: Event) => any;
|
|
767
|
+
localStorage: Storage;
|
|
768
|
+
caches: CacheStorage;
|
|
769
|
+
crossOriginIsolated: boolean;
|
|
770
|
+
crypto: Crypto;
|
|
771
|
+
indexedDB: IDBFactory;
|
|
772
|
+
isSecureContext: boolean;
|
|
773
|
+
origin: string;
|
|
774
|
+
performance: Performance;
|
|
775
|
+
atob(data: string): string {
|
|
776
|
+
throw new Error('Method not implemented.');
|
|
777
|
+
}
|
|
778
|
+
btoa(data: string): string {
|
|
779
|
+
throw new Error('Method not implemented.');
|
|
780
|
+
}
|
|
781
|
+
createImageBitmap(image: unknown, sx?: unknown, sy?: unknown, sw?: unknown, sh?: unknown, options?: unknown): Promise<ImageBitmap> {
|
|
782
|
+
throw new Error('Method not implemented.');
|
|
783
|
+
}
|
|
784
|
+
fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
|
|
785
|
+
throw new Error('Method not implemented.');
|
|
786
|
+
}
|
|
787
|
+
queueMicrotask(callback: VoidFunction): void {
|
|
788
|
+
throw new Error('Method not implemented.');
|
|
803
789
|
}
|
|
790
|
+
reportError(e: any): void {
|
|
791
|
+
throw new Error('Method not implemented.');
|
|
792
|
+
}
|
|
793
|
+
structuredClone<T = any>(value: T, options?: StructuredSerializeOptions): T {
|
|
794
|
+
throw new Error('Method not implemented.');
|
|
795
|
+
}
|
|
796
|
+
sessionStorage: Storage;
|
|
804
797
|
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
if (this._closed) return
|
|
798
|
+
alert(_message?: any): void {}
|
|
799
|
+
close(): void {
|
|
800
|
+
if (this._closed) return;
|
|
801
|
+
this._closed = true;
|
|
802
|
+
this._timers.forEach(id => clearTimeout(id));
|
|
803
|
+
this._intervals.forEach(id => clearInterval(id));
|
|
804
|
+
this._eventListeners.length = 0;
|
|
805
|
+
}
|
|
808
806
|
|
|
807
|
+
setTimeout(callback: Function, delay?: number, ...args: any[]): number {
|
|
809
808
|
const id = setTimeout(() => {
|
|
810
|
-
this._timers.delete(id);
|
|
809
|
+
this._timers.delete(id as any);
|
|
811
810
|
callback(...args);
|
|
812
811
|
}, delay) as any;
|
|
813
|
-
|
|
814
812
|
this._timers.add(id);
|
|
815
813
|
return id;
|
|
816
814
|
}
|
|
817
|
-
|
|
818
815
|
clearTimeout(id: number): void {
|
|
819
816
|
clearTimeout(id);
|
|
820
817
|
this._timers.delete(id);
|
|
821
818
|
}
|
|
822
|
-
|
|
823
819
|
setInterval(callback: Function, delay?: number, ...args: any[]): number {
|
|
824
|
-
if (this._closed) return 0;
|
|
825
|
-
|
|
826
820
|
const id = setInterval(callback, delay, ...args) as any;
|
|
827
821
|
this._intervals.add(id);
|
|
828
822
|
return id;
|
|
829
823
|
}
|
|
830
|
-
|
|
831
824
|
clearInterval(id: number): void {
|
|
832
825
|
clearInterval(id);
|
|
833
826
|
this._intervals.delete(id);
|
|
834
827
|
}
|
|
835
828
|
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
cancelAnimationFrame(id: number): void {
|
|
846
|
-
this.clearTimeout(id);
|
|
847
|
-
this._animationFrames.delete(id);
|
|
848
|
-
}
|
|
849
|
-
|
|
850
|
-
// Event methods
|
|
851
|
-
addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
852
|
-
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
853
|
-
addEventListener(type: any, listener: any, options?: any): void {
|
|
854
|
-
// Support popstate, load, unload, and beforeunload events
|
|
855
|
-
if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {
|
|
856
|
-
this._eventListeners.push({
|
|
857
|
-
type,
|
|
858
|
-
listener: typeof listener === 'function' ? listener : listener.handleEvent,
|
|
859
|
-
options
|
|
860
|
-
});
|
|
861
|
-
}
|
|
829
|
+
addEventListener(type: string, listener: any, options?: any): void {
|
|
830
|
+
// Basic support for major window events
|
|
831
|
+
this._eventListeners.push({
|
|
832
|
+
type,
|
|
833
|
+
listener: typeof listener === 'function' ? listener : listener?.handleEvent,
|
|
834
|
+
options
|
|
835
|
+
});
|
|
862
836
|
}
|
|
863
837
|
|
|
864
|
-
removeEventListener
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {
|
|
868
|
-
const targetListener = typeof listener === 'function' ? listener : listener.handleEvent;
|
|
869
|
-
this._eventListeners = this._eventListeners.filter(
|
|
870
|
-
eventListener => !(eventListener.type === type && eventListener.listener === targetListener)
|
|
871
|
-
);
|
|
872
|
-
}
|
|
838
|
+
removeEventListener(type: string, listener: any): void {
|
|
839
|
+
const targetListener = typeof listener === 'function' ? listener : listener?.handleEvent;
|
|
840
|
+
this._eventListeners = this._eventListeners.filter(l => !(l.type === type && l.listener === targetListener));
|
|
873
841
|
}
|
|
874
|
-
|
|
875
842
|
dispatchEvent(event: any): boolean {
|
|
876
|
-
const
|
|
843
|
+
const type = typeof event === 'string' ? event : event.type;
|
|
844
|
+
const listeners = [...this._eventListeners.filter(l => l.type === type)];
|
|
877
845
|
|
|
878
|
-
for (const
|
|
846
|
+
for (const l of listeners) {
|
|
879
847
|
try {
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
if (eventListener.options && typeof eventListener.options === 'object' && eventListener.options.once) {
|
|
884
|
-
this.removeEventListener(event.type, eventListener.listener);
|
|
848
|
+
l.listener.call(this, event);
|
|
849
|
+
if (l.options?.once) {
|
|
850
|
+
this.removeEventListener(type, l.listener);
|
|
885
851
|
}
|
|
886
|
-
} catch (
|
|
887
|
-
console.error(
|
|
852
|
+
} catch (e) {
|
|
853
|
+
console.error(`Error in Window event listener for ${type}:`, e);
|
|
888
854
|
}
|
|
889
855
|
}
|
|
890
|
-
|
|
891
856
|
return true;
|
|
892
857
|
}
|
|
893
858
|
|
|
894
|
-
/**
|
|
895
|
-
* Dispatch a popstate event to registered listeners
|
|
896
|
-
*/
|
|
897
859
|
private dispatchPopStateEvent(state: any, url?: string): void {
|
|
898
|
-
|
|
899
|
-
type: 'popstate',
|
|
900
|
-
state,
|
|
901
|
-
url
|
|
902
|
-
};
|
|
903
|
-
|
|
904
|
-
this.dispatchEvent(popStateEvent);
|
|
860
|
+
this.dispatchEvent({ type: 'popstate', state, url });
|
|
905
861
|
}
|
|
906
|
-
|
|
907
|
-
// EventTarget methods (inherited)
|
|
908
|
-
// These are already covered by addEventListener/removeEventListener/dispatchEvent
|
|
909
|
-
|
|
910
|
-
// GlobalEventHandlers - empty implementations
|
|
911
|
-
onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;
|
|
912
|
-
onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
|
|
913
|
-
onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
|
|
914
|
-
onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
|
|
915
|
-
onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;
|
|
916
|
-
onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
917
|
-
onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null = null;
|
|
918
|
-
onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;
|
|
919
|
-
oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
920
|
-
oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
921
|
-
oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
922
|
-
onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
923
|
-
onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
924
|
-
onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
925
|
-
oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
926
|
-
oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;
|
|
927
|
-
oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
928
|
-
oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;
|
|
929
|
-
ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
930
|
-
ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
|
|
931
|
-
ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
|
|
932
|
-
ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
|
|
933
|
-
ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
|
|
934
|
-
ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
|
|
935
|
-
ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
|
|
936
|
-
ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;
|
|
937
|
-
ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
938
|
-
onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
939
|
-
onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
940
|
-
onerror: OnErrorEventHandler = null;
|
|
941
|
-
onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;
|
|
942
|
-
onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null = null;
|
|
943
|
-
ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
944
|
-
oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
945
|
-
oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
946
|
-
onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;
|
|
947
|
-
onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;
|
|
948
|
-
onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;
|
|
949
|
-
onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
950
|
-
onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
951
|
-
onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
952
|
-
onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
953
|
-
onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
954
|
-
onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
955
|
-
onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
956
|
-
onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
957
|
-
onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
958
|
-
onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
959
|
-
onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
960
|
-
onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;
|
|
961
|
-
onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;
|
|
962
|
-
onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
963
|
-
onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
964
|
-
onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
965
|
-
onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
966
|
-
onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
967
|
-
onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
968
|
-
onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
969
|
-
onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
970
|
-
onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
971
|
-
onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
972
|
-
onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;
|
|
973
|
-
onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent<EventTarget>) => any) | null = null;
|
|
974
|
-
onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
975
|
-
onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
976
|
-
onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;
|
|
977
|
-
onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
978
|
-
onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
979
|
-
onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null = null;
|
|
980
|
-
onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
981
|
-
onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
982
|
-
onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
983
|
-
onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
984
|
-
onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
985
|
-
onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
986
|
-
onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
987
|
-
onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null = null;
|
|
988
|
-
onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
989
|
-
ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
990
|
-
ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
991
|
-
ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
|
|
992
|
-
ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
|
|
993
|
-
ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
|
|
994
|
-
ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;
|
|
995
|
-
ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
|
|
996
|
-
ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
|
|
997
|
-
ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
|
|
998
|
-
ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;
|
|
999
|
-
onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
1000
|
-
onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
1001
|
-
onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
1002
|
-
onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
1003
|
-
onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
1004
|
-
onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;
|
|
1005
|
-
onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null;
|
|
1006
|
-
|
|
1007
|
-
// WindowEventHandlers - empty implementations
|
|
1008
|
-
onafterprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
|
|
1009
|
-
onbeforeprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
|
|
1010
|
-
onbeforeunload: ((this: WindowEventHandlers, ev: BeforeUnloadEvent) => any) | null = null;
|
|
1011
|
-
onhashchange: ((this: WindowEventHandlers, ev: HashChangeEvent) => any) | null = null;
|
|
1012
|
-
onlanguagechange: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
|
|
1013
|
-
onmessage: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;
|
|
1014
|
-
onmessageerror: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;
|
|
1015
|
-
onoffline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
|
|
1016
|
-
ononline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
|
|
1017
|
-
onpagehide: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;
|
|
1018
|
-
onpageshow: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;
|
|
1019
|
-
onpopstate: ((this: WindowEventHandlers, ev: PopStateEvent) => any) | null = null;
|
|
1020
|
-
onrejectionhandled: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;
|
|
1021
|
-
onstorage: ((this: WindowEventHandlers, ev: StorageEvent) => any) | null = null;
|
|
1022
|
-
onunhandledrejection: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;
|
|
1023
|
-
onunload: ((this: WindowEventHandlers, ev: Event) => any) | null = null;
|
|
1024
|
-
|
|
1025
|
-
// WindowLocalStorage
|
|
1026
|
-
readonly localStorage: Storage = {} as Storage;
|
|
1027
|
-
|
|
1028
|
-
// WindowOrWorkerGlobalScope - empty implementations
|
|
1029
|
-
readonly caches: CacheStorage = {} as CacheStorage;
|
|
1030
|
-
readonly crossOriginIsolated: boolean = false;
|
|
1031
|
-
readonly crypto: Crypto = {} as Crypto;
|
|
1032
|
-
readonly indexedDB: IDBFactory = {} as IDBFactory;
|
|
1033
|
-
readonly isSecureContext: boolean = false;
|
|
1034
|
-
readonly origin: string = 'null';
|
|
1035
|
-
readonly performance: Performance = {} as Performance;
|
|
1036
|
-
|
|
1037
|
-
atob(data: string): string {
|
|
1038
|
-
return '';
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
btoa(data: string): string {
|
|
1042
|
-
return '';
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;
|
|
1046
|
-
createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;
|
|
1047
|
-
createImageBitmap(...args: any[]): Promise<ImageBitmap> {
|
|
1048
|
-
return Promise.resolve({} as ImageBitmap);
|
|
1049
|
-
}
|
|
1050
|
-
|
|
1051
|
-
fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
|
|
1052
|
-
return Promise.resolve({} as Response);
|
|
1053
|
-
}
|
|
1054
|
-
|
|
1055
|
-
queueMicrotask(callback: VoidFunction): void {
|
|
1056
|
-
}
|
|
1057
|
-
|
|
1058
|
-
reportError(e: any): void {
|
|
1059
|
-
}
|
|
1060
|
-
|
|
1061
|
-
structuredClone(value: any, options?: StructuredSerializeOptions): any {
|
|
1062
|
-
return value;
|
|
1063
|
-
}
|
|
1064
|
-
|
|
1065
|
-
// WindowSessionStorage
|
|
1066
|
-
readonly sessionStorage: Storage = {} as Storage;
|
|
1067
|
-
|
|
1068
|
-
// AnimationFrameProvider - already implemented above
|
|
1069
|
-
|
|
1070
|
-
// Index signature - getter implementation
|
|
1071
|
-
[index: number]: Window;
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
/**
|
|
1075
|
-
* Recursive HTML parsing
|
|
1076
|
-
*/
|
|
1077
|
-
private parseHTMLRecursive(html: string, parent: any): void {
|
|
1078
|
-
let position = 0;
|
|
1079
|
-
|
|
1080
|
-
while (position < html.length) {
|
|
1081
|
-
const tagStart = html.indexOf('<', position);
|
|
1082
|
-
|
|
1083
|
-
if (tagStart === -1) {
|
|
1084
|
-
const remainingText = html.substring(position).trim();
|
|
1085
|
-
if (remainingText) {
|
|
1086
|
-
const textNode = this.document.createTextNode(remainingText);
|
|
1087
|
-
parent.appendChild(textNode);
|
|
1088
|
-
}
|
|
1089
|
-
break;
|
|
1090
|
-
}
|
|
1091
|
-
|
|
1092
|
-
if (tagStart > position) {
|
|
1093
|
-
const textContent = html.substring(position, tagStart).trim();
|
|
1094
|
-
if (textContent) {
|
|
1095
|
-
const textNode = this.document.createTextNode(textContent);
|
|
1096
|
-
parent.appendChild(textNode);
|
|
1097
|
-
}
|
|
1098
|
-
}
|
|
1099
|
-
|
|
1100
|
-
const tagEnd = html.indexOf('>', tagStart);
|
|
1101
|
-
if (tagEnd === -1) break;
|
|
1102
|
-
|
|
1103
|
-
const tagContent = html.substring(tagStart + 1, tagEnd);
|
|
1104
|
-
|
|
1105
|
-
if (tagContent.startsWith('/')) {
|
|
1106
|
-
position = tagEnd + 1;
|
|
1107
|
-
break;
|
|
1108
|
-
}
|
|
1109
|
-
|
|
1110
|
-
const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\s+/)[0]);
|
|
1111
|
-
const spaceIndex = tagContent.indexOf(' ');
|
|
1112
|
-
const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);
|
|
1113
|
-
const attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1).replace('/', '');
|
|
1114
|
-
|
|
1115
|
-
const element = this.document.createElement(tagName.toLowerCase());
|
|
1116
|
-
|
|
1117
|
-
if (attributes.trim()) {
|
|
1118
|
-
this.parseAttributes(attributes, element);
|
|
1119
|
-
}
|
|
1120
|
-
|
|
1121
|
-
// Handle special HTML structure tags
|
|
1122
|
-
if (tagName.toLowerCase() === 'html') {
|
|
1123
|
-
// Replace documentElement
|
|
1124
|
-
(this.document as any).documentElement = element;
|
|
1125
|
-
this.document.appendChild(element);
|
|
1126
|
-
} else if (tagName.toLowerCase() === 'head') {
|
|
1127
|
-
(this.document as any).head = element;
|
|
1128
|
-
if (this.document.documentElement) {
|
|
1129
|
-
this.document.documentElement.appendChild(element);
|
|
1130
|
-
} else {
|
|
1131
|
-
parent.appendChild(element);
|
|
1132
|
-
}
|
|
1133
|
-
} else if (tagName.toLowerCase() === 'body') {
|
|
1134
|
-
(this.document as any).body = element;
|
|
1135
|
-
if (this.document.documentElement) {
|
|
1136
|
-
this.document.documentElement.appendChild(element);
|
|
1137
|
-
} else {
|
|
1138
|
-
parent.appendChild(element);
|
|
1139
|
-
}
|
|
1140
|
-
} else {
|
|
1141
|
-
parent.appendChild(element);
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
if (isSelfClosing) {
|
|
1145
|
-
position = tagEnd + 1;
|
|
1146
|
-
} else {
|
|
1147
|
-
const closingTag = `</${tagName}>`;
|
|
1148
|
-
const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);
|
|
1149
|
-
|
|
1150
|
-
if (closingTagIndex !== -1) {
|
|
1151
|
-
const innerContent = html.substring(tagEnd + 1, closingTagIndex);
|
|
1152
|
-
if (innerContent.trim()) {
|
|
1153
|
-
this.parseHTMLRecursive(innerContent, element);
|
|
1154
|
-
}
|
|
1155
|
-
position = closingTagIndex + closingTag.length;
|
|
1156
|
-
} else {
|
|
1157
|
-
position = tagEnd + 1;
|
|
1158
|
-
}
|
|
1159
|
-
}
|
|
1160
|
-
}
|
|
1161
|
-
}
|
|
1162
|
-
|
|
1163
|
-
private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {
|
|
1164
|
-
const openTag = `<${tagName}`;
|
|
1165
|
-
const closeTag = `</${tagName}>`;
|
|
1166
|
-
let depth = 1;
|
|
1167
|
-
let pos = startPos;
|
|
1168
|
-
|
|
1169
|
-
while (pos < html.length && depth > 0) {
|
|
1170
|
-
const nextOpen = html.indexOf(openTag, pos);
|
|
1171
|
-
const nextClose = html.indexOf(closeTag, pos);
|
|
1172
|
-
|
|
1173
|
-
if (nextClose === -1) return -1;
|
|
1174
|
-
|
|
1175
|
-
if (nextOpen !== -1 && nextOpen < nextClose) {
|
|
1176
|
-
depth++;
|
|
1177
|
-
pos = nextOpen + openTag.length;
|
|
1178
|
-
} else {
|
|
1179
|
-
depth--;
|
|
1180
|
-
if (depth === 0) return nextClose;
|
|
1181
|
-
pos = nextClose + closeTag.length;
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
|
|
1185
|
-
return -1;
|
|
1186
|
-
}
|
|
1187
|
-
|
|
1188
|
-
private parseAttributes(attributeString: string, element: any): void {
|
|
1189
|
-
// Updated regex to handle hyphenated attribute names like dr-for-of, data-bind, etc.
|
|
1190
|
-
const attrRegex = /([\w:-]+)(?:\s*=\s*(['"])(.*?)\2)?/g;
|
|
1191
|
-
let match;
|
|
1192
|
-
|
|
1193
|
-
while ((match = attrRegex.exec(attributeString)) !== null) {
|
|
1194
|
-
const name = match[1];
|
|
1195
|
-
let value = match[3] || ''; // match[3] is the content between quotes
|
|
1196
|
-
element.setAttribute(name, value);
|
|
1197
|
-
}
|
|
1198
|
-
}
|
|
1199
|
-
|
|
1200
|
-
private isSelfClosingTag(tagName: string): boolean {
|
|
1201
|
-
const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
|
|
1202
|
-
return selfClosingTags.includes(tagName.toLowerCase());
|
|
1203
|
-
}
|
|
1204
|
-
|
|
1205
|
-
/**
|
|
1206
|
-
* Clear current document content
|
|
1207
|
-
*/
|
|
1208
|
-
private clearDocumentContent(): void {
|
|
1209
|
-
const doc = this.document as any;
|
|
1210
|
-
|
|
1211
|
-
// Clear head content
|
|
1212
|
-
if (doc.head) {
|
|
1213
|
-
while (doc.head.firstChild) {
|
|
1214
|
-
doc.head.removeChild(doc.head.firstChild);
|
|
1215
|
-
}
|
|
1216
|
-
}
|
|
1217
|
-
|
|
1218
|
-
// Clear body content
|
|
1219
|
-
if (doc.body) {
|
|
1220
|
-
while (doc.body.firstChild) {
|
|
1221
|
-
doc.body.removeChild(doc.body.firstChild);
|
|
1222
|
-
}
|
|
1223
|
-
}
|
|
1224
|
-
}
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
}
|
|
862
|
+
}
|