happy-dom 15.11.7 → 16.0.1
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/cjs/PropertySymbol.cjs +12 -9
- package/cjs/PropertySymbol.cjs.map +1 -1
- package/cjs/PropertySymbol.d.ts +4 -1
- package/cjs/PropertySymbol.d.ts.map +1 -1
- package/cjs/config/HTMLElementConfig.cjs +42 -16
- package/cjs/config/HTMLElementConfig.cjs.map +1 -1
- package/cjs/config/HTMLElementConfig.d.ts +7 -0
- package/cjs/config/HTMLElementConfig.d.ts.map +1 -1
- package/cjs/config/HTMLElementConfigContentModelEnum.cjs +3 -0
- package/cjs/config/HTMLElementConfigContentModelEnum.cjs.map +1 -1
- package/cjs/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
- package/cjs/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
- package/cjs/config/NamespaceURI.cjs +2 -0
- package/cjs/config/NamespaceURI.cjs.map +1 -1
- package/cjs/config/NamespaceURI.d.ts +2 -0
- package/cjs/config/NamespaceURI.d.ts.map +1 -1
- package/cjs/css/declaration/CSSStyleDeclaration.cjs +1 -1
- package/cjs/css/declaration/CSSStyleDeclaration.cjs.map +1 -1
- package/cjs/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
- package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs +2 -2
- package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs.map +1 -1
- package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
- package/cjs/css/rules/CSSStyleRule.cjs +1 -1
- package/cjs/css/rules/CSSStyleRule.cjs.map +1 -1
- package/cjs/css/rules/CSSStyleRule.d.ts +1 -1
- package/cjs/css/rules/CSSStyleRule.d.ts.map +1 -1
- package/cjs/custom-element/CustomElementReactionStack.cjs +104 -0
- package/cjs/custom-element/CustomElementReactionStack.cjs.map +1 -0
- package/cjs/custom-element/CustomElementReactionStack.d.ts +27 -0
- package/cjs/custom-element/CustomElementReactionStack.d.ts.map +1 -0
- package/cjs/custom-element/CustomElementRegistry.cjs +32 -45
- package/cjs/custom-element/CustomElementRegistry.cjs.map +1 -1
- package/cjs/custom-element/CustomElementRegistry.d.ts +2 -6
- package/cjs/custom-element/CustomElementRegistry.d.ts.map +1 -1
- package/cjs/custom-element/CustomElementUtility.cjs +35 -0
- package/cjs/custom-element/CustomElementUtility.cjs.map +1 -0
- package/cjs/custom-element/CustomElementUtility.d.ts +14 -0
- package/cjs/custom-element/CustomElementUtility.d.ts.map +1 -0
- package/cjs/custom-element/ICustomElementDefinition.cjs +3 -0
- package/cjs/custom-element/ICustomElementDefinition.cjs.map +1 -0
- package/cjs/custom-element/ICustomElementDefinition.d.ts +12 -0
- package/cjs/custom-element/ICustomElementDefinition.d.ts.map +1 -0
- package/cjs/dom/DOMStringMap.cjs +8 -8
- package/cjs/dom/DOMStringMap.cjs.map +1 -1
- package/cjs/dom/DOMStringMap.d.ts.map +1 -1
- package/cjs/dom/DOMTokenList.cjs +1 -1
- package/cjs/dom/DOMTokenList.cjs.map +1 -1
- package/cjs/dom-parser/DOMParser.cjs +5 -67
- package/cjs/dom-parser/DOMParser.cjs.map +1 -1
- package/cjs/dom-parser/DOMParser.d.ts +0 -1
- package/cjs/dom-parser/DOMParser.d.ts.map +1 -1
- package/cjs/exception/DOMExceptionNameEnum.cjs +1 -0
- package/cjs/exception/DOMExceptionNameEnum.cjs.map +1 -1
- package/cjs/exception/DOMExceptionNameEnum.d.ts +2 -1
- package/cjs/exception/DOMExceptionNameEnum.d.ts.map +1 -1
- package/cjs/history/History.cjs +6 -6
- package/cjs/history/History.cjs.map +1 -1
- package/cjs/html-parser/HTMLParser.cjs +726 -0
- package/cjs/html-parser/HTMLParser.cjs.map +1 -0
- package/cjs/html-parser/HTMLParser.d.ts +91 -0
- package/cjs/html-parser/HTMLParser.d.ts.map +1 -0
- package/cjs/html-serializer/HTMLSerializer.cjs +152 -0
- package/cjs/html-serializer/HTMLSerializer.cjs.map +1 -0
- package/cjs/html-serializer/HTMLSerializer.d.ts +36 -0
- package/cjs/html-serializer/HTMLSerializer.d.ts.map +1 -0
- package/cjs/nodes/document/Document.cjs +104 -120
- package/cjs/nodes/document/Document.cjs.map +1 -1
- package/cjs/nodes/document/Document.d.ts +8 -0
- package/cjs/nodes/document/Document.d.ts.map +1 -1
- package/cjs/nodes/element/Element.cjs +35 -53
- package/cjs/nodes/element/Element.cjs.map +1 -1
- package/cjs/nodes/element/Element.d.ts +2 -12
- package/cjs/nodes/element/Element.d.ts.map +1 -1
- package/cjs/nodes/element/HTMLCollection.cjs +5 -9
- package/cjs/nodes/element/HTMLCollection.cjs.map +1 -1
- package/cjs/nodes/element/HTMLCollection.d.ts.map +1 -1
- package/cjs/nodes/element/NamedNodeMap.cjs +39 -52
- package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
- package/cjs/nodes/element/NamedNodeMap.d.ts +1 -16
- package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
- package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs +12 -14
- package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs.map +1 -1
- package/cjs/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
- package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +1 -1
- package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
- package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
- package/cjs/nodes/html-document/HTMLDocument.cjs +33 -2
- package/cjs/nodes/html-document/HTMLDocument.cjs.map +1 -1
- package/cjs/nodes/html-document/HTMLDocument.d.ts +10 -0
- package/cjs/nodes/html-document/HTMLDocument.d.ts.map +1 -1
- package/cjs/nodes/html-element/HTMLElement.cjs +58 -22
- package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
- package/cjs/nodes/html-element/HTMLElement.d.ts +34 -0
- package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
- package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs +1 -1
- package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs.map +1 -1
- package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
- package/cjs/nodes/html-form-element/HTMLFormElement.cjs +5 -8
- package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
- package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +1 -1
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
- package/cjs/nodes/html-input-element/HTMLInputElement.cjs +1 -1
- package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
- package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
- package/cjs/nodes/html-media-element/TextTrackList.cjs +1 -1
- package/cjs/nodes/html-media-element/TextTrackList.cjs.map +1 -1
- package/cjs/nodes/html-object-element/HTMLObjectElement.cjs +1 -1
- package/cjs/nodes/html-object-element/HTMLObjectElement.cjs.map +1 -1
- package/cjs/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
- package/cjs/nodes/html-output-element/HTMLOutputElement.cjs +1 -1
- package/cjs/nodes/html-output-element/HTMLOutputElement.cjs.map +1 -1
- package/cjs/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
- package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +3 -1
- package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
- package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
- package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +2 -2
- package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
- package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
- package/cjs/nodes/html-table-element/HTMLTableElement.cjs +9 -1
- package/cjs/nodes/html-table-element/HTMLTableElement.cjs.map +1 -1
- package/cjs/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
- package/cjs/nodes/html-table-row-element/HTMLTableRowElement.cjs +1 -1
- package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs +15 -17
- package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs.map +1 -1
- package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
- package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +1 -1
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
- package/cjs/nodes/node/Node.cjs +44 -48
- package/cjs/nodes/node/Node.cjs.map +1 -1
- package/cjs/nodes/node/Node.d.ts +2 -10
- package/cjs/nodes/node/Node.d.ts.map +1 -1
- package/cjs/nodes/node/NodeList.cjs +1 -1
- package/cjs/nodes/node/NodeList.cjs.map +1 -1
- package/cjs/nodes/node/NodeUtility.cjs +4 -3
- package/cjs/nodes/node/NodeUtility.cjs.map +1 -1
- package/cjs/nodes/node/NodeUtility.d.ts.map +1 -1
- package/cjs/nodes/parent-node/ParentNodeUtility.cjs +5 -2
- package/cjs/nodes/parent-node/ParentNodeUtility.cjs.map +1 -1
- package/cjs/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
- package/cjs/nodes/shadow-root/ShadowRoot.cjs +8 -8
- package/cjs/nodes/shadow-root/ShadowRoot.cjs.map +1 -1
- package/cjs/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
- package/cjs/nodes/xml-document/XMLDocument.cjs +26 -0
- package/cjs/nodes/xml-document/XMLDocument.cjs.map +1 -1
- package/cjs/nodes/xml-document/XMLDocument.d.ts +2 -0
- package/cjs/nodes/xml-document/XMLDocument.d.ts.map +1 -1
- package/cjs/query-selector/SelectorItem.cjs +1 -2
- package/cjs/query-selector/SelectorItem.cjs.map +1 -1
- package/cjs/query-selector/SelectorItem.d.ts.map +1 -1
- package/cjs/range/Range.cjs +3 -3
- package/cjs/range/Range.cjs.map +1 -1
- package/cjs/range/Range.d.ts.map +1 -1
- package/cjs/storage/Storage.cjs +1 -1
- package/cjs/storage/Storage.cjs.map +1 -1
- package/cjs/svg/SVGLengthList.cjs +1 -1
- package/cjs/svg/SVGLengthList.cjs.map +1 -1
- package/cjs/svg/SVGNumberList.cjs +1 -1
- package/cjs/svg/SVGNumberList.cjs.map +1 -1
- package/cjs/svg/SVGPointList.cjs +1 -1
- package/cjs/svg/SVGPointList.cjs.map +1 -1
- package/cjs/svg/SVGStringList.cjs +1 -1
- package/cjs/svg/SVGStringList.cjs.map +1 -1
- package/cjs/svg/SVGTransformList.cjs +1 -1
- package/cjs/svg/SVGTransformList.cjs.map +1 -1
- package/cjs/tree-walker/NodeIterator.cjs +63 -6
- package/cjs/tree-walker/NodeIterator.cjs.map +1 -1
- package/cjs/tree-walker/NodeIterator.d.ts +18 -3
- package/cjs/tree-walker/NodeIterator.d.ts.map +1 -1
- package/cjs/tree-walker/TreeWalker.cjs +6 -6
- package/cjs/tree-walker/TreeWalker.cjs.map +1 -1
- package/cjs/tree-walker/TreeWalker.d.ts +2 -1
- package/cjs/tree-walker/TreeWalker.d.ts.map +1 -1
- package/cjs/utilities/ClassMethodBinder.cjs.map +1 -0
- package/cjs/utilities/ClassMethodBinder.d.ts.map +1 -0
- package/cjs/utilities/StringUtility.cjs.map +1 -0
- package/cjs/utilities/StringUtility.d.ts.map +1 -0
- package/cjs/utilities/XMLEncodeUtility.cjs +119 -0
- package/cjs/utilities/XMLEncodeUtility.cjs.map +1 -0
- package/cjs/utilities/XMLEncodeUtility.d.ts +48 -0
- package/cjs/utilities/XMLEncodeUtility.d.ts.map +1 -0
- package/cjs/window/BrowserWindow.cjs +5 -3
- package/cjs/window/BrowserWindow.cjs.map +1 -1
- package/cjs/window/BrowserWindow.d.ts +2 -0
- package/cjs/window/BrowserWindow.d.ts.map +1 -1
- package/cjs/window/WindowErrorUtility.cjs +1 -1
- package/cjs/window/WindowErrorUtility.cjs.map +1 -1
- package/cjs/xml-http-request/XMLHttpRequest.cjs +2 -1
- package/cjs/xml-http-request/XMLHttpRequest.cjs.map +1 -1
- package/cjs/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
- package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs +1 -1
- package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs.map +1 -1
- package/cjs/xml-parser/XMLParser.cjs +531 -242
- package/cjs/xml-parser/XMLParser.cjs.map +1 -1
- package/cjs/xml-parser/XMLParser.d.ts +89 -19
- package/cjs/xml-parser/XMLParser.d.ts.map +1 -1
- package/cjs/xml-serializer/XMLSerializer.cjs +136 -40
- package/cjs/xml-serializer/XMLSerializer.cjs.map +1 -1
- package/cjs/xml-serializer/XMLSerializer.d.ts +6 -17
- package/cjs/xml-serializer/XMLSerializer.d.ts.map +1 -1
- package/lib/PropertySymbol.d.ts +4 -1
- package/lib/PropertySymbol.d.ts.map +1 -1
- package/lib/PropertySymbol.js +4 -1
- package/lib/PropertySymbol.js.map +1 -1
- package/lib/config/HTMLElementConfig.d.ts +7 -0
- package/lib/config/HTMLElementConfig.d.ts.map +1 -1
- package/lib/config/HTMLElementConfig.js +42 -16
- package/lib/config/HTMLElementConfig.js.map +1 -1
- package/lib/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
- package/lib/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
- package/lib/config/HTMLElementConfigContentModelEnum.js +3 -0
- package/lib/config/HTMLElementConfigContentModelEnum.js.map +1 -1
- package/lib/config/NamespaceURI.d.ts +2 -0
- package/lib/config/NamespaceURI.d.ts.map +1 -1
- package/lib/config/NamespaceURI.js +2 -0
- package/lib/config/NamespaceURI.js.map +1 -1
- package/lib/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
- package/lib/css/declaration/CSSStyleDeclaration.js +1 -1
- package/lib/css/declaration/CSSStyleDeclaration.js.map +1 -1
- package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
- package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js +2 -2
- package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js.map +1 -1
- package/lib/css/rules/CSSStyleRule.d.ts +1 -1
- package/lib/css/rules/CSSStyleRule.d.ts.map +1 -1
- package/lib/css/rules/CSSStyleRule.js +1 -1
- package/lib/css/rules/CSSStyleRule.js.map +1 -1
- package/lib/custom-element/CustomElementReactionStack.d.ts +27 -0
- package/lib/custom-element/CustomElementReactionStack.d.ts.map +1 -0
- package/lib/custom-element/CustomElementReactionStack.js +75 -0
- package/lib/custom-element/CustomElementReactionStack.js.map +1 -0
- package/lib/custom-element/CustomElementRegistry.d.ts +2 -6
- package/lib/custom-element/CustomElementRegistry.d.ts.map +1 -1
- package/lib/custom-element/CustomElementRegistry.js +32 -45
- package/lib/custom-element/CustomElementRegistry.js.map +1 -1
- package/lib/custom-element/CustomElementUtility.d.ts +14 -0
- package/lib/custom-element/CustomElementUtility.d.ts.map +1 -0
- package/lib/custom-element/CustomElementUtility.js +32 -0
- package/lib/custom-element/CustomElementUtility.js.map +1 -0
- package/lib/custom-element/ICustomElementDefinition.d.ts +12 -0
- package/lib/custom-element/ICustomElementDefinition.d.ts.map +1 -0
- package/lib/custom-element/ICustomElementDefinition.js +2 -0
- package/lib/custom-element/ICustomElementDefinition.js.map +1 -0
- package/lib/dom/DOMStringMap.d.ts.map +1 -1
- package/lib/dom/DOMStringMap.js +8 -8
- package/lib/dom/DOMStringMap.js.map +1 -1
- package/lib/dom/DOMTokenList.js +1 -1
- package/lib/dom/DOMTokenList.js.map +1 -1
- package/lib/dom-parser/DOMParser.d.ts +0 -1
- package/lib/dom-parser/DOMParser.d.ts.map +1 -1
- package/lib/dom-parser/DOMParser.js +5 -67
- package/lib/dom-parser/DOMParser.js.map +1 -1
- package/lib/exception/DOMExceptionNameEnum.d.ts +2 -1
- package/lib/exception/DOMExceptionNameEnum.d.ts.map +1 -1
- package/lib/exception/DOMExceptionNameEnum.js +1 -0
- package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
- package/lib/history/History.js +6 -6
- package/lib/history/History.js.map +1 -1
- package/lib/html-parser/HTMLParser.d.ts +91 -0
- package/lib/html-parser/HTMLParser.d.ts.map +1 -0
- package/lib/html-parser/HTMLParser.js +697 -0
- package/lib/html-parser/HTMLParser.js.map +1 -0
- package/lib/html-serializer/HTMLSerializer.d.ts +36 -0
- package/lib/html-serializer/HTMLSerializer.d.ts.map +1 -0
- package/lib/html-serializer/HTMLSerializer.js +123 -0
- package/lib/html-serializer/HTMLSerializer.js.map +1 -0
- package/lib/nodes/document/Document.d.ts +8 -0
- package/lib/nodes/document/Document.d.ts.map +1 -1
- package/lib/nodes/document/Document.js +105 -121
- package/lib/nodes/document/Document.js.map +1 -1
- package/lib/nodes/element/Element.d.ts +2 -12
- package/lib/nodes/element/Element.d.ts.map +1 -1
- package/lib/nodes/element/Element.js +35 -53
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/nodes/element/HTMLCollection.d.ts.map +1 -1
- package/lib/nodes/element/HTMLCollection.js +5 -9
- package/lib/nodes/element/HTMLCollection.js.map +1 -1
- package/lib/nodes/element/NamedNodeMap.d.ts +1 -16
- package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
- package/lib/nodes/element/NamedNodeMap.js +39 -52
- package/lib/nodes/element/NamedNodeMap.js.map +1 -1
- package/lib/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
- package/lib/nodes/element/NamedNodeMapProxyFactory.js +12 -14
- package/lib/nodes/element/NamedNodeMapProxyFactory.js.map +1 -1
- package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
- package/lib/nodes/html-button-element/HTMLButtonElement.js +1 -1
- package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
- package/lib/nodes/html-document/HTMLDocument.d.ts +10 -0
- package/lib/nodes/html-document/HTMLDocument.d.ts.map +1 -1
- package/lib/nodes/html-document/HTMLDocument.js +33 -2
- package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
- package/lib/nodes/html-element/HTMLElement.d.ts +34 -0
- package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
- package/lib/nodes/html-element/HTMLElement.js +58 -22
- package/lib/nodes/html-element/HTMLElement.js.map +1 -1
- package/lib/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
- package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js +1 -1
- package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js.map +1 -1
- package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
- package/lib/nodes/html-form-element/HTMLFormElement.js +5 -8
- package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +1 -1
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElement.js +1 -1
- package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
- package/lib/nodes/html-media-element/TextTrackList.js +1 -1
- package/lib/nodes/html-media-element/TextTrackList.js.map +1 -1
- package/lib/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
- package/lib/nodes/html-object-element/HTMLObjectElement.js +1 -1
- package/lib/nodes/html-object-element/HTMLObjectElement.js.map +1 -1
- package/lib/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
- package/lib/nodes/html-output-element/HTMLOutputElement.js +1 -1
- package/lib/nodes/html-output-element/HTMLOutputElement.js.map +1 -1
- package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
- package/lib/nodes/html-script-element/HTMLScriptElement.js +3 -1
- package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
- package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
- package/lib/nodes/html-select-element/HTMLSelectElement.js +2 -2
- package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
- package/lib/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
- package/lib/nodes/html-table-element/HTMLTableElement.js +9 -1
- package/lib/nodes/html-table-element/HTMLTableElement.js.map +1 -1
- package/lib/nodes/html-table-row-element/HTMLTableRowElement.js +1 -1
- package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
- package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
- package/lib/nodes/html-template-element/HTMLTemplateElement.js +15 -17
- package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +1 -1
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
- package/lib/nodes/node/Node.d.ts +2 -10
- package/lib/nodes/node/Node.d.ts.map +1 -1
- package/lib/nodes/node/Node.js +44 -48
- package/lib/nodes/node/Node.js.map +1 -1
- package/lib/nodes/node/NodeList.js +1 -1
- package/lib/nodes/node/NodeList.js.map +1 -1
- package/lib/nodes/node/NodeUtility.d.ts.map +1 -1
- package/lib/nodes/node/NodeUtility.js +4 -3
- package/lib/nodes/node/NodeUtility.js.map +1 -1
- package/lib/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
- package/lib/nodes/parent-node/ParentNodeUtility.js +5 -2
- package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
- package/lib/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
- package/lib/nodes/shadow-root/ShadowRoot.js +8 -8
- package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
- package/lib/nodes/xml-document/XMLDocument.d.ts +2 -0
- package/lib/nodes/xml-document/XMLDocument.d.ts.map +1 -1
- package/lib/nodes/xml-document/XMLDocument.js +3 -0
- package/lib/nodes/xml-document/XMLDocument.js.map +1 -1
- package/lib/query-selector/SelectorItem.d.ts.map +1 -1
- package/lib/query-selector/SelectorItem.js +1 -2
- package/lib/query-selector/SelectorItem.js.map +1 -1
- package/lib/range/Range.d.ts.map +1 -1
- package/lib/range/Range.js +3 -3
- package/lib/range/Range.js.map +1 -1
- package/lib/storage/Storage.js +1 -1
- package/lib/storage/Storage.js.map +1 -1
- package/lib/svg/SVGLengthList.js +1 -1
- package/lib/svg/SVGLengthList.js.map +1 -1
- package/lib/svg/SVGNumberList.js +1 -1
- package/lib/svg/SVGNumberList.js.map +1 -1
- package/lib/svg/SVGPointList.js +1 -1
- package/lib/svg/SVGPointList.js.map +1 -1
- package/lib/svg/SVGStringList.js +1 -1
- package/lib/svg/SVGStringList.js.map +1 -1
- package/lib/svg/SVGTransformList.js +1 -1
- package/lib/svg/SVGTransformList.js.map +1 -1
- package/lib/tree-walker/NodeIterator.d.ts +18 -3
- package/lib/tree-walker/NodeIterator.d.ts.map +1 -1
- package/lib/tree-walker/NodeIterator.js +40 -6
- package/lib/tree-walker/NodeIterator.js.map +1 -1
- package/lib/tree-walker/TreeWalker.d.ts +2 -1
- package/lib/tree-walker/TreeWalker.d.ts.map +1 -1
- package/lib/tree-walker/TreeWalker.js +6 -6
- package/lib/tree-walker/TreeWalker.js.map +1 -1
- package/lib/utilities/ClassMethodBinder.d.ts.map +1 -0
- package/lib/utilities/ClassMethodBinder.js.map +1 -0
- package/lib/utilities/StringUtility.d.ts.map +1 -0
- package/lib/utilities/StringUtility.js.map +1 -0
- package/lib/utilities/XMLEncodeUtility.d.ts +48 -0
- package/lib/utilities/XMLEncodeUtility.d.ts.map +1 -0
- package/lib/utilities/XMLEncodeUtility.js +116 -0
- package/lib/utilities/XMLEncodeUtility.js.map +1 -0
- package/lib/window/BrowserWindow.d.ts +2 -0
- package/lib/window/BrowserWindow.d.ts.map +1 -1
- package/lib/window/BrowserWindow.js +5 -3
- package/lib/window/BrowserWindow.js.map +1 -1
- package/lib/window/WindowErrorUtility.js +1 -1
- package/lib/window/WindowErrorUtility.js.map +1 -1
- package/lib/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
- package/lib/xml-http-request/XMLHttpRequest.js +2 -1
- package/lib/xml-http-request/XMLHttpRequest.js.map +1 -1
- package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js +1 -1
- package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js.map +1 -1
- package/lib/xml-parser/XMLParser.d.ts +89 -19
- package/lib/xml-parser/XMLParser.d.ts.map +1 -1
- package/lib/xml-parser/XMLParser.js +531 -242
- package/lib/xml-parser/XMLParser.js.map +1 -1
- package/lib/xml-serializer/XMLSerializer.d.ts +6 -17
- package/lib/xml-serializer/XMLSerializer.d.ts.map +1 -1
- package/lib/xml-serializer/XMLSerializer.js +136 -40
- package/lib/xml-serializer/XMLSerializer.js.map +1 -1
- package/package.json +1 -2
- package/src/PropertySymbol.ts +4 -1
- package/src/config/HTMLElementConfig.ts +53 -17
- package/src/config/HTMLElementConfigContentModelEnum.ts +3 -0
- package/src/config/NamespaceURI.ts +2 -0
- package/src/css/declaration/CSSStyleDeclaration.ts +1 -4
- package/src/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.ts +2 -4
- package/src/css/rules/CSSStyleRule.ts +1 -1
- package/src/custom-element/CustomElementReactionStack.ts +86 -0
- package/src/custom-element/CustomElementRegistry.ts +35 -54
- package/src/custom-element/CustomElementUtility.ts +34 -0
- package/src/custom-element/ICustomElementDefinition.ts +16 -0
- package/src/dom/DOMStringMap.ts +12 -10
- package/src/dom/DOMTokenList.ts +1 -1
- package/src/dom-parser/DOMParser.ts +5 -75
- package/src/exception/DOMExceptionNameEnum.ts +2 -1
- package/src/history/History.ts +6 -6
- package/src/html-parser/HTMLParser.ts +864 -0
- package/src/html-serializer/HTMLSerializer.ts +162 -0
- package/src/nodes/document/Document.ts +117 -136
- package/src/nodes/element/Element.ts +48 -95
- package/src/nodes/element/HTMLCollection.ts +5 -30
- package/src/nodes/element/NamedNodeMap.ts +58 -72
- package/src/nodes/element/NamedNodeMapProxyFactory.ts +12 -15
- package/src/nodes/html-button-element/HTMLButtonElement.ts +1 -4
- package/src/nodes/html-document/HTMLDocument.ts +58 -2
- package/src/nodes/html-element/HTMLElement.ts +117 -25
- package/src/nodes/html-field-set-element/HTMLFieldSetElement.ts +1 -4
- package/src/nodes/html-form-element/HTMLFormElement.ts +5 -27
- package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +1 -1
- package/src/nodes/html-input-element/HTMLInputElement.ts +1 -4
- package/src/nodes/html-media-element/TextTrackList.ts +1 -1
- package/src/nodes/html-object-element/HTMLObjectElement.ts +1 -4
- package/src/nodes/html-output-element/HTMLOutputElement.ts +1 -4
- package/src/nodes/html-script-element/HTMLScriptElement.ts +4 -1
- package/src/nodes/html-select-element/HTMLSelectElement.ts +2 -5
- package/src/nodes/html-table-element/HTMLTableElement.ts +8 -1
- package/src/nodes/html-table-row-element/HTMLTableRowElement.ts +1 -1
- package/src/nodes/html-template-element/HTMLTemplateElement.ts +23 -17
- package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +1 -4
- package/src/nodes/node/Node.ts +57 -70
- package/src/nodes/node/NodeList.ts +1 -1
- package/src/nodes/node/NodeUtility.ts +4 -3
- package/src/nodes/parent-node/ParentNodeUtility.ts +6 -6
- package/src/nodes/shadow-root/ShadowRoot.ts +8 -8
- package/src/nodes/xml-document/XMLDocument.ts +5 -1
- package/src/query-selector/SelectorItem.ts +1 -2
- package/src/range/Range.ts +3 -3
- package/src/storage/Storage.ts +1 -1
- package/src/svg/SVGLengthList.ts +1 -1
- package/src/svg/SVGNumberList.ts +1 -1
- package/src/svg/SVGPointList.ts +1 -1
- package/src/svg/SVGStringList.ts +1 -1
- package/src/svg/SVGTransformList.ts +1 -1
- package/src/tree-walker/NodeIterator.ts +44 -8
- package/src/tree-walker/TreeWalker.ts +6 -6
- package/src/utilities/XMLEncodeUtility.ts +127 -0
- package/src/window/BrowserWindow.ts +7 -5
- package/src/window/WindowErrorUtility.ts +1 -1
- package/src/xml-http-request/XMLHttpRequest.ts +3 -1
- package/src/xml-http-request/XMLHttpRequestResponseDataParser.ts +1 -1
- package/src/xml-parser/XMLParser.ts +627 -313
- package/src/xml-serializer/XMLSerializer.ts +204 -58
- package/cjs/ClassMethodBinder.cjs.map +0 -1
- package/cjs/ClassMethodBinder.d.ts.map +0 -1
- package/cjs/StringUtility.cjs.map +0 -1
- package/cjs/StringUtility.d.ts.map +0 -1
- package/lib/ClassMethodBinder.d.ts.map +0 -1
- package/lib/ClassMethodBinder.js.map +0 -1
- package/lib/StringUtility.d.ts.map +0 -1
- package/lib/StringUtility.js.map +0 -1
- /package/cjs/{ClassMethodBinder.cjs → utilities/ClassMethodBinder.cjs} +0 -0
- /package/cjs/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
- /package/cjs/{StringUtility.cjs → utilities/StringUtility.cjs} +0 -0
- /package/cjs/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
- /package/lib/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
- /package/lib/{ClassMethodBinder.js → utilities/ClassMethodBinder.js} +0 -0
- /package/lib/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
- /package/lib/{StringUtility.js → utilities/StringUtility.js} +0 -0
- /package/src/{ClassMethodBinder.ts → utilities/ClassMethodBinder.ts} +0 -0
- /package/src/{StringUtility.ts → utilities/StringUtility.ts} +0 -0
@@ -0,0 +1,162 @@
|
|
1
|
+
import Element from '../nodes/element/Element.js';
|
2
|
+
import * as PropertySymbol from '../PropertySymbol.js';
|
3
|
+
import Node from '../nodes/node/Node.js';
|
4
|
+
import DocumentType from '../nodes/document-type/DocumentType.js';
|
5
|
+
import HTMLTemplateElement from '../nodes/html-template-element/HTMLTemplateElement.js';
|
6
|
+
import NodeTypeEnum from '../nodes/node/NodeTypeEnum.js';
|
7
|
+
import ProcessingInstruction from '../nodes/processing-instruction/ProcessingInstruction.js';
|
8
|
+
import DocumentFragment from '../nodes/document-fragment/DocumentFragment.js';
|
9
|
+
import ShadowRoot from '../nodes/shadow-root/ShadowRoot.js';
|
10
|
+
import HTMLElementConfig from '../config/HTMLElementConfig.js';
|
11
|
+
import HTMLElementConfigContentModelEnum from '../config/HTMLElementConfigContentModelEnum.js';
|
12
|
+
import XMLEncodeUtility from '../utilities/XMLEncodeUtility.js';
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Serializes a node into HTML.
|
16
|
+
*/
|
17
|
+
export default class HTMLSerializer {
|
18
|
+
private options: {
|
19
|
+
serializableShadowRoots: boolean;
|
20
|
+
shadowRoots: ShadowRoot[] | null;
|
21
|
+
allShadowRoots: boolean;
|
22
|
+
} = {
|
23
|
+
serializableShadowRoots: false,
|
24
|
+
shadowRoots: null,
|
25
|
+
allShadowRoots: false
|
26
|
+
};
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Constructor.
|
30
|
+
*
|
31
|
+
* @param [options] Options.
|
32
|
+
* @param [options.serializableShadowRoots] If shadow roots should be serialized.
|
33
|
+
* @param [options.shadowRoots] Shadow roots to serialize.
|
34
|
+
* @param [options.allShadowRoots] If all shadow roots should be serialized.
|
35
|
+
*/
|
36
|
+
constructor(options?: {
|
37
|
+
serializableShadowRoots?: boolean;
|
38
|
+
shadowRoots?: ShadowRoot[] | null;
|
39
|
+
allShadowRoots?: boolean;
|
40
|
+
}) {
|
41
|
+
if (options) {
|
42
|
+
if (options.serializableShadowRoots) {
|
43
|
+
this.options.serializableShadowRoots = options.serializableShadowRoots;
|
44
|
+
}
|
45
|
+
|
46
|
+
if (options.shadowRoots) {
|
47
|
+
this.options.shadowRoots = options.shadowRoots;
|
48
|
+
}
|
49
|
+
|
50
|
+
if (options.allShadowRoots) {
|
51
|
+
this.options.allShadowRoots = options.allShadowRoots;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Renders an element as HTML.
|
58
|
+
*
|
59
|
+
* @param root Root element.
|
60
|
+
* @returns Result.
|
61
|
+
*/
|
62
|
+
public serializeToString(root: Node): string {
|
63
|
+
switch (root[PropertySymbol.nodeType]) {
|
64
|
+
case NodeTypeEnum.elementNode:
|
65
|
+
const element = <Element>root;
|
66
|
+
const prefix = element[PropertySymbol.prefix];
|
67
|
+
const localName = element[PropertySymbol.localName];
|
68
|
+
const config = HTMLElementConfig[element[PropertySymbol.localName]];
|
69
|
+
const tagName = prefix ? `${prefix}:${localName}` : localName;
|
70
|
+
|
71
|
+
if (config?.contentModel === HTMLElementConfigContentModelEnum.noDescendants) {
|
72
|
+
return `<${tagName}${this.getAttributes(element)}>`;
|
73
|
+
}
|
74
|
+
|
75
|
+
let innerHTML = '';
|
76
|
+
|
77
|
+
// TODO: Should we include closed shadow roots? We are currently only including open shadow roots.
|
78
|
+
if (
|
79
|
+
element.shadowRoot &&
|
80
|
+
(this.options.allShadowRoots ||
|
81
|
+
(this.options.serializableShadowRoots &&
|
82
|
+
element.shadowRoot[PropertySymbol.serializable]) ||
|
83
|
+
this.options.shadowRoots?.includes(element.shadowRoot))
|
84
|
+
) {
|
85
|
+
innerHTML += `<template shadowrootmode="${element.shadowRoot[PropertySymbol.mode]}"${
|
86
|
+
element.shadowRoot[PropertySymbol.serializable] ? ' shadowrootserializable=""' : ''
|
87
|
+
}>`;
|
88
|
+
|
89
|
+
for (const node of (<ShadowRoot>element.shadowRoot)[PropertySymbol.nodeArray]) {
|
90
|
+
innerHTML += this.serializeToString(node);
|
91
|
+
}
|
92
|
+
|
93
|
+
innerHTML += '</template>';
|
94
|
+
}
|
95
|
+
|
96
|
+
const childNodes =
|
97
|
+
tagName === 'template'
|
98
|
+
? (<DocumentFragment>(<HTMLTemplateElement>root).content)[PropertySymbol.nodeArray]
|
99
|
+
: (<DocumentFragment>root)[PropertySymbol.nodeArray];
|
100
|
+
|
101
|
+
for (const node of childNodes) {
|
102
|
+
innerHTML += this.serializeToString(node);
|
103
|
+
}
|
104
|
+
|
105
|
+
return `<${tagName}${this.getAttributes(element)}>${innerHTML}</${tagName}>`;
|
106
|
+
case Node.DOCUMENT_FRAGMENT_NODE:
|
107
|
+
case Node.DOCUMENT_NODE:
|
108
|
+
let html = '';
|
109
|
+
for (const node of (<Node>root)[PropertySymbol.nodeArray]) {
|
110
|
+
html += this.serializeToString(node);
|
111
|
+
}
|
112
|
+
return html;
|
113
|
+
case NodeTypeEnum.commentNode:
|
114
|
+
return `<!--${root.textContent}-->`;
|
115
|
+
case NodeTypeEnum.processingInstructionNode:
|
116
|
+
return `<!--?${(<ProcessingInstruction>root).target} ${root.textContent}?-->`;
|
117
|
+
case NodeTypeEnum.textNode:
|
118
|
+
const parentElement = root.parentElement;
|
119
|
+
if (parentElement) {
|
120
|
+
const parentConfig = HTMLElementConfig[parentElement[PropertySymbol.localName]];
|
121
|
+
if (parentConfig?.contentModel === HTMLElementConfigContentModelEnum.rawText) {
|
122
|
+
return root.textContent;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
return XMLEncodeUtility.encodeTextContent(root.textContent);
|
126
|
+
case NodeTypeEnum.documentTypeNode:
|
127
|
+
const doctype = <DocumentType>root;
|
128
|
+
const identifier = doctype.publicId ? ' PUBLIC' : doctype.systemId ? ' SYSTEM' : '';
|
129
|
+
const publicId = doctype.publicId ? ` "${doctype.publicId}"` : '';
|
130
|
+
const systemId = doctype.systemId ? ` "${doctype.systemId}"` : '';
|
131
|
+
return `<!DOCTYPE ${doctype.name}${identifier}${publicId}${systemId}>`;
|
132
|
+
}
|
133
|
+
|
134
|
+
return '';
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Returns attributes as a string.
|
139
|
+
*
|
140
|
+
* @param element Element.
|
141
|
+
* @returns Attributes.
|
142
|
+
*/
|
143
|
+
private getAttributes(element: Element): string {
|
144
|
+
let attributeString = '';
|
145
|
+
|
146
|
+
const namedItems = (<Element>element)[PropertySymbol.attributes][PropertySymbol.namedItems];
|
147
|
+
|
148
|
+
if (!namedItems.has('is') && element[PropertySymbol.isValue]) {
|
149
|
+
attributeString +=
|
150
|
+
' is="' + XMLEncodeUtility.encodeAttributeValue(element[PropertySymbol.isValue]) + '"';
|
151
|
+
}
|
152
|
+
|
153
|
+
for (const attributes of namedItems.values()) {
|
154
|
+
const escapedValue = XMLEncodeUtility.encodeAttributeValue(
|
155
|
+
attributes[0][PropertySymbol.value]
|
156
|
+
);
|
157
|
+
attributeString += ' ' + attributes[0][PropertySymbol.name] + '="' + escapedValue + '"';
|
158
|
+
}
|
159
|
+
|
160
|
+
return attributeString;
|
161
|
+
}
|
162
|
+
}
|
@@ -5,7 +5,6 @@ import Node from '../node/Node.js';
|
|
5
5
|
import NodeIterator from '../../tree-walker/NodeIterator.js';
|
6
6
|
import TreeWalker from '../../tree-walker/TreeWalker.js';
|
7
7
|
import DocumentFragment from '../document-fragment/DocumentFragment.js';
|
8
|
-
import XMLParser from '../../xml-parser/XMLParser.js';
|
9
8
|
import Event from '../../event/Event.js';
|
10
9
|
import DOMImplementation from '../../dom-implementation/DOMImplementation.js';
|
11
10
|
import INodeFilter from '../../tree-walker/INodeFilter.js';
|
@@ -48,7 +47,8 @@ import HTMLTitleElement from '../html-title-element/HTMLTitleElement.js';
|
|
48
47
|
import WindowBrowserContext from '../../window/WindowBrowserContext.js';
|
49
48
|
import NodeFactory from '../NodeFactory.js';
|
50
49
|
import SVGElementConfig from '../../config/SVGElementConfig.js';
|
51
|
-
import StringUtility from '../../StringUtility.js';
|
50
|
+
import StringUtility from '../../utilities/StringUtility.js';
|
51
|
+
import HTMLParser from '../../html-parser/HTMLParser.js';
|
52
52
|
|
53
53
|
const PROCESSING_INSTRUCTION_TARGET_REGEXP = /^[a-z][a-z0-9-]+$/;
|
54
54
|
|
@@ -78,6 +78,8 @@ export default class Document extends Node {
|
|
78
78
|
string,
|
79
79
|
{ htmlCollection: HTMLCollection<Element> | null; elements: Element[] }
|
80
80
|
> = new Map();
|
81
|
+
public [PropertySymbol.contentType]: string = 'text/html';
|
82
|
+
public [PropertySymbol.xmlProcessingInstruction]: ProcessingInstruction | null = null;
|
81
83
|
public declare cloneNode: (deep?: boolean) => Document;
|
82
84
|
|
83
85
|
// Private properties
|
@@ -408,7 +410,7 @@ export default class Document extends Node {
|
|
408
410
|
* @returns Element.
|
409
411
|
*/
|
410
412
|
public get documentElement(): HTMLHtmlElement {
|
411
|
-
return <HTMLHtmlElement>
|
413
|
+
return <HTMLHtmlElement>this[PropertySymbol.elementArray][0] ?? null;
|
412
414
|
}
|
413
415
|
|
414
416
|
/**
|
@@ -431,7 +433,10 @@ export default class Document extends Node {
|
|
431
433
|
* @returns Element.
|
432
434
|
*/
|
433
435
|
public get body(): HTMLBodyElement {
|
434
|
-
|
436
|
+
const documentElement = this.documentElement;
|
437
|
+
return documentElement
|
438
|
+
? <HTMLBodyElement>ParentNodeUtility.getElementByTagName(documentElement, 'body')
|
439
|
+
: null;
|
435
440
|
}
|
436
441
|
|
437
442
|
/**
|
@@ -440,7 +445,10 @@ export default class Document extends Node {
|
|
440
445
|
* @returns Element.
|
441
446
|
*/
|
442
447
|
public get head(): HTMLHeadElement {
|
443
|
-
|
448
|
+
const documentElement = this.documentElement;
|
449
|
+
return documentElement
|
450
|
+
? <HTMLHeadElement>ParentNodeUtility.getElementByTagName(documentElement, 'head')
|
451
|
+
: null;
|
444
452
|
}
|
445
453
|
|
446
454
|
/**
|
@@ -595,6 +603,15 @@ export default class Document extends Node {
|
|
595
603
|
return this[PropertySymbol.currentScript];
|
596
604
|
}
|
597
605
|
|
606
|
+
/**
|
607
|
+
* Returns content type.
|
608
|
+
*
|
609
|
+
* @returns Content type.
|
610
|
+
*/
|
611
|
+
public get contentType(): string {
|
612
|
+
return this[PropertySymbol.contentType];
|
613
|
+
}
|
614
|
+
|
598
615
|
/**
|
599
616
|
* Inserts a set of Node objects or DOMString objects after the last child of the ParentNode. DOMString objects are inserted as equivalent Text nodes.
|
600
617
|
*
|
@@ -830,8 +847,6 @@ export default class Document extends Node {
|
|
830
847
|
* @param html HTML.
|
831
848
|
*/
|
832
849
|
public write(html: string): void {
|
833
|
-
const root = <DocumentFragment>XMLParser.parse(this, html, { evaluateScripts: true });
|
834
|
-
|
835
850
|
if (this[PropertySymbol.isFirstWrite] || this[PropertySymbol.isFirstWriteAfterOpen]) {
|
836
851
|
if (this[PropertySymbol.isFirstWrite]) {
|
837
852
|
if (!this[PropertySymbol.isFirstWriteAfterOpen]) {
|
@@ -841,88 +856,22 @@ export default class Document extends Node {
|
|
841
856
|
this[PropertySymbol.isFirstWrite] = false;
|
842
857
|
}
|
843
858
|
|
844
|
-
|
845
|
-
let documentElement = null;
|
846
|
-
let documentTypeNode = null;
|
847
|
-
|
848
|
-
for (const node of root[PropertySymbol.nodeArray]) {
|
849
|
-
if (node['tagName'] === 'HTML') {
|
850
|
-
documentElement = node;
|
851
|
-
} else if (node[PropertySymbol.nodeType] === NodeTypeEnum.documentTypeNode) {
|
852
|
-
documentTypeNode = node;
|
853
|
-
}
|
859
|
+
const { documentElement, head, body } = this;
|
854
860
|
|
855
|
-
|
856
|
-
|
857
|
-
}
|
861
|
+
if (!documentElement || !head || !body) {
|
862
|
+
this.open();
|
858
863
|
}
|
859
864
|
|
860
|
-
|
861
|
-
|
862
|
-
if (documentTypeNode) {
|
863
|
-
this.appendChild(documentTypeNode);
|
864
|
-
}
|
865
|
-
|
866
|
-
this.appendChild(documentElement);
|
867
|
-
|
868
|
-
const head = ParentNodeUtility.getElementByTagName(this, 'head');
|
869
|
-
let body = ParentNodeUtility.getElementByTagName(this, 'body');
|
870
|
-
|
871
|
-
if (!body) {
|
872
|
-
body = this.createElement('body');
|
873
|
-
documentElement.appendChild(this.createElement('body'));
|
874
|
-
}
|
875
|
-
|
876
|
-
if (!head) {
|
877
|
-
documentElement.insertBefore(this.createElement('head'), body);
|
878
|
-
}
|
879
|
-
} else {
|
880
|
-
const rootBody = ParentNodeUtility.getElementByTagName(root, 'body');
|
881
|
-
const body = ParentNodeUtility.getElementByTagName(this, 'body');
|
882
|
-
if (rootBody && body) {
|
883
|
-
const childNodes = rootBody[PropertySymbol.nodeArray];
|
884
|
-
while (childNodes.length) {
|
885
|
-
body.appendChild(childNodes[0]);
|
886
|
-
}
|
887
|
-
}
|
888
|
-
}
|
889
|
-
|
890
|
-
// Remaining nodes outside the <html> element are added to the <body> element.
|
891
|
-
const body = ParentNodeUtility.getElementByTagName(this, 'body');
|
892
|
-
if (body) {
|
893
|
-
const childNodes = root[PropertySymbol.nodeArray];
|
894
|
-
while (childNodes.length) {
|
895
|
-
const child = childNodes[0];
|
896
|
-
if (
|
897
|
-
child['tagName'] !== 'HTML' &&
|
898
|
-
child[PropertySymbol.nodeType] !== NodeTypeEnum.documentTypeNode
|
899
|
-
) {
|
900
|
-
body.appendChild(child);
|
901
|
-
}
|
902
|
-
}
|
903
|
-
}
|
904
|
-
} else {
|
905
|
-
const documentElement = this.createElement('html');
|
906
|
-
const bodyElement = this.createElement('body');
|
907
|
-
const headElement = this.createElement('head');
|
908
|
-
const childNodes = root[PropertySymbol.nodeArray];
|
909
|
-
|
910
|
-
while (childNodes.length) {
|
911
|
-
bodyElement.appendChild(childNodes[0]);
|
912
|
-
}
|
913
|
-
|
914
|
-
documentElement.appendChild(headElement);
|
915
|
-
documentElement.appendChild(bodyElement);
|
865
|
+
this[PropertySymbol.isFirstWrite] = false;
|
866
|
+
this[PropertySymbol.isFirstWriteAfterOpen] = false;
|
916
867
|
|
917
|
-
|
918
|
-
|
868
|
+
new HTMLParser(this[PropertySymbol.window], {
|
869
|
+
evaluateScripts: true
|
870
|
+
}).parse(html, this);
|
919
871
|
} else {
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
while (childNodes.length) {
|
924
|
-
body.appendChild(childNodes[0]);
|
925
|
-
}
|
872
|
+
new HTMLParser(this[PropertySymbol.window], {
|
873
|
+
evaluateScripts: true
|
874
|
+
}).parse(html, this.body);
|
926
875
|
}
|
927
876
|
}
|
928
877
|
|
@@ -957,6 +906,18 @@ export default class Document extends Node {
|
|
957
906
|
this.removeChild(childNodes[0]);
|
958
907
|
}
|
959
908
|
|
909
|
+
// Default document elements
|
910
|
+
const doctype = this[PropertySymbol.implementation].createDocumentType('html', '', '');
|
911
|
+
const documentElement = this.createElement('html');
|
912
|
+
const bodyElement = this.createElement('body');
|
913
|
+
const headElement = this.createElement('head');
|
914
|
+
|
915
|
+
this.appendChild(doctype);
|
916
|
+
this.appendChild(documentElement);
|
917
|
+
|
918
|
+
documentElement.appendChild(headElement);
|
919
|
+
documentElement.appendChild(bodyElement);
|
920
|
+
|
960
921
|
return this;
|
961
922
|
}
|
962
923
|
|
@@ -1090,66 +1051,86 @@ export default class Document extends Node {
|
|
1090
1051
|
);
|
1091
1052
|
}
|
1092
1053
|
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1054
|
+
const parts = qualifiedName.split(':');
|
1055
|
+
const localName = parts[1] ?? parts[0];
|
1056
|
+
const prefix = parts[1] ? parts[0] : null;
|
1057
|
+
|
1058
|
+
switch (namespaceURI) {
|
1059
|
+
case NamespaceURI.svg:
|
1060
|
+
const config = SVGElementConfig[qualifiedName.toLowerCase()];
|
1061
|
+
const svgElementClass =
|
1062
|
+
config && config.localName === qualifiedName
|
1063
|
+
? window[config.className]
|
1064
|
+
: window.SVGElement;
|
1065
|
+
|
1066
|
+
const svgElement = NodeFactory.createNode<SVGElement>(this, svgElementClass);
|
1067
|
+
|
1068
|
+
svgElement[PropertySymbol.tagName] = qualifiedName;
|
1069
|
+
svgElement[PropertySymbol.localName] = localName;
|
1070
|
+
svgElement[PropertySymbol.prefix] = prefix;
|
1071
|
+
svgElement[PropertySymbol.namespaceURI] = namespaceURI;
|
1072
|
+
svgElement[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
|
1073
|
+
|
1074
|
+
return svgElement;
|
1075
|
+
case NamespaceURI.html:
|
1076
|
+
// Custom HTML element
|
1077
|
+
// If a polyfill is used, [PropertySymbol.registry] may be undefined
|
1078
|
+
const customElementDefinition = window.customElements[PropertySymbol.registry]?.get(
|
1079
|
+
options && options.is ? String(options.is) : qualifiedName
|
1080
|
+
);
|
1081
|
+
|
1082
|
+
if (customElementDefinition) {
|
1083
|
+
const element = new customElementDefinition.elementClass();
|
1084
|
+
element[PropertySymbol.tagName] = StringUtility.asciiUpperCase(qualifiedName);
|
1085
|
+
element[PropertySymbol.localName] = localName;
|
1086
|
+
element[PropertySymbol.prefix] = prefix;
|
1087
|
+
element[PropertySymbol.namespaceURI] = namespaceURI;
|
1088
|
+
element[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
|
1089
|
+
return element;
|
1090
|
+
}
|
1105
1091
|
|
1106
|
-
|
1107
|
-
|
1092
|
+
const elementClass = HTMLElementConfig[qualifiedName]
|
1093
|
+
? window[HTMLElementConfig[qualifiedName].className]
|
1094
|
+
: null;
|
1108
1095
|
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
options && options.is ? String(options.is) : qualifiedName
|
1113
|
-
];
|
1114
|
-
|
1115
|
-
if (customElement) {
|
1116
|
-
const element = new customElement.elementClass();
|
1117
|
-
element[PropertySymbol.tagName] = qualifiedName.toUpperCase();
|
1118
|
-
element[PropertySymbol.localName] = qualifiedName;
|
1119
|
-
element[PropertySymbol.namespaceURI] = namespaceURI;
|
1120
|
-
element[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
|
1121
|
-
return element;
|
1122
|
-
}
|
1096
|
+
// Known HTML element
|
1097
|
+
if (elementClass) {
|
1098
|
+
const element = NodeFactory.createNode<Element>(this, elementClass);
|
1123
1099
|
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1100
|
+
element[PropertySymbol.tagName] = StringUtility.asciiUpperCase(qualifiedName);
|
1101
|
+
element[PropertySymbol.localName] = localName;
|
1102
|
+
element[PropertySymbol.prefix] = prefix;
|
1103
|
+
element[PropertySymbol.namespaceURI] = namespaceURI;
|
1104
|
+
element[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
|
1127
1105
|
|
1128
|
-
|
1129
|
-
|
1130
|
-
const element = NodeFactory.createNode<Element>(this, elementClass);
|
1106
|
+
return element;
|
1107
|
+
}
|
1131
1108
|
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1109
|
+
// Unknown HTML element (if it has an hyphen in the name, it is a custom element that hasn't been defined yet)
|
1110
|
+
const unknownElementClass = qualifiedName.includes('-')
|
1111
|
+
? window.HTMLElement
|
1112
|
+
: window.HTMLUnknownElement;
|
1136
1113
|
|
1137
|
-
|
1138
|
-
}
|
1114
|
+
const unknownElement = NodeFactory.createNode<Element>(this, unknownElementClass);
|
1139
1115
|
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1116
|
+
unknownElement[PropertySymbol.tagName] = StringUtility.asciiUpperCase(qualifiedName);
|
1117
|
+
unknownElement[PropertySymbol.localName] = localName;
|
1118
|
+
unknownElement[PropertySymbol.prefix] = prefix;
|
1119
|
+
unknownElement[PropertySymbol.namespaceURI] = namespaceURI;
|
1120
|
+
unknownElement[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
|
1144
1121
|
|
1145
|
-
|
1122
|
+
return unknownElement;
|
1123
|
+
default:
|
1124
|
+
const element = NodeFactory.createNode<Element>(this, Element);
|
1146
1125
|
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1126
|
+
element[PropertySymbol.tagName] = qualifiedName;
|
1127
|
+
element[PropertySymbol.localName] = localName;
|
1128
|
+
element[PropertySymbol.prefix] = prefix;
|
1129
|
+
element[PropertySymbol.namespaceURI] = namespaceURI;
|
1130
|
+
element[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
|
1151
1131
|
|
1152
|
-
|
1132
|
+
return element;
|
1133
|
+
}
|
1153
1134
|
}
|
1154
1135
|
|
1155
1136
|
/* eslint-enable jsdoc/valid-types */
|
@@ -1239,7 +1220,7 @@ export default class Document extends Node {
|
|
1239
1220
|
* @returns Attribute.
|
1240
1221
|
*/
|
1241
1222
|
public createAttribute(qualifiedName: string): Attr {
|
1242
|
-
return this.createAttributeNS(null,
|
1223
|
+
return this.createAttributeNS(null, StringUtility.asciiLowerCase(qualifiedName));
|
1243
1224
|
}
|
1244
1225
|
|
1245
1226
|
/**
|
@@ -1257,7 +1238,7 @@ export default class Document extends Node {
|
|
1257
1238
|
attribute[PropertySymbol.namespaceURI] = namespaceURI;
|
1258
1239
|
attribute[PropertySymbol.name] = qualifiedName;
|
1259
1240
|
attribute[PropertySymbol.localName] = parts[1] ?? qualifiedName;
|
1260
|
-
attribute[PropertySymbol.prefix] = parts[0]
|
1241
|
+
attribute[PropertySymbol.prefix] = parts[1] ? parts[0] : null;
|
1261
1242
|
|
1262
1243
|
return attribute;
|
1263
1244
|
}
|