happy-dom 15.11.7 → 16.0.0
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/custom-element/CustomElementReactionStack.cjs +100 -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 +105 -121
- 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 +52 -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 +9 -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/custom-element/CustomElementReactionStack.d.ts +27 -0
- package/lib/custom-element/CustomElementReactionStack.d.ts.map +1 -0
- package/lib/custom-element/CustomElementReactionStack.js +71 -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 +106 -122
- 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 +52 -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 +9 -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/custom-element/CustomElementReactionStack.ts +81 -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 +118 -137
- 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 +107 -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 +18 -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
|
|
@@ -65,7 +65,7 @@ export default class Document extends Node {
|
|
65
65
|
public [PropertySymbol.isFirstWrite] = true;
|
66
66
|
public [PropertySymbol.isFirstWriteAfterOpen] = false;
|
67
67
|
public [PropertySymbol.nodeType] = NodeTypeEnum.documentNode;
|
68
|
-
public [PropertySymbol.isConnected] =
|
68
|
+
public [PropertySymbol.isConnected] = false;
|
69
69
|
public [PropertySymbol.adoptedStyleSheets]: CSSStyleSheet[] = [];
|
70
70
|
public [PropertySymbol.implementation] = new DOMImplementation(this);
|
71
71
|
public [PropertySymbol.readyState] = DocumentReadyStateEnum.interactive;
|
@@ -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
|
}
|