happy-dom 10.5.2 → 10.6.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.
Potentially problematic release.
This version of happy-dom might be problematic. Click here for more details.
- package/cjs/css/declaration/AbstractCSSStyleDeclaration.cjs +20 -18
- package/cjs/css/declaration/AbstractCSSStyleDeclaration.cjs.map +1 -1
- package/cjs/css/declaration/AbstractCSSStyleDeclaration.d.ts.map +1 -1
- package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.cjs +4 -3
- package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.cjs.map +1 -1
- package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.d.ts.map +1 -1
- package/cjs/named-node-map/INamedNodeMap.d.ts +26 -26
- package/cjs/named-node-map/INamedNodeMap.d.ts.map +1 -1
- package/cjs/named-node-map/NamedNodeMap.cjs +121 -81
- package/cjs/named-node-map/NamedNodeMap.cjs.map +1 -1
- package/cjs/named-node-map/NamedNodeMap.d.ts +57 -40
- package/cjs/named-node-map/NamedNodeMap.d.ts.map +1 -1
- package/cjs/nodes/element/Dataset.cjs +16 -17
- package/cjs/nodes/element/Dataset.cjs.map +1 -1
- package/cjs/nodes/element/Dataset.d.ts.map +1 -1
- package/cjs/nodes/element/Element.cjs +22 -133
- package/cjs/nodes/element/Element.cjs.map +1 -1
- package/cjs/nodes/element/Element.d.ts +9 -16
- package/cjs/nodes/element/Element.d.ts.map +1 -1
- package/cjs/nodes/element/ElementNamedNodeMap.cjs +152 -0
- package/cjs/nodes/element/ElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/element/ElementNamedNodeMap.d.ts +45 -0
- package/cjs/nodes/element/ElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/element/ElementUtility.cjs +20 -15
- package/cjs/nodes/element/ElementUtility.cjs.map +1 -1
- package/cjs/nodes/element/ElementUtility.d.ts.map +1 -1
- package/cjs/nodes/element/IElement.d.ts +5 -5
- package/cjs/nodes/element/IElement.d.ts.map +1 -1
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +2 -26
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts +7 -11
- package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
- package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.cjs +44 -0
- package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +2 -26
- package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
- package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts +2 -9
- package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
- package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.cjs +41 -0
- package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-element/HTMLElement.cjs +2 -20
- package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
- package/cjs/nodes/html-element/HTMLElement.d.ts +3 -10
- package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
- package/cjs/nodes/html-element/HTMLElementNamedNodeMap.cjs +35 -0
- package/cjs/nodes/html-element/HTMLElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-element/HTMLElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-element/HTMLElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +2 -12
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts +2 -5
- package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
- package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.cjs +26 -0
- package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts +16 -0
- package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-input-element/HTMLInputElement.cjs +2 -26
- package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
- package/cjs/nodes/html-input-element/HTMLInputElement.d.ts +2 -9
- package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
- package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.cjs +42 -0
- package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-label-element/HTMLLabelElement.cjs +1 -6
- package/cjs/nodes/html-label-element/HTMLLabelElement.cjs.map +1 -1
- package/cjs/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
- package/cjs/nodes/html-link-element/HTMLLinkElement.cjs +2 -23
- package/cjs/nodes/html-link-element/HTMLLinkElement.cjs.map +1 -1
- package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts +4 -10
- package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
- package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.cjs +39 -0
- package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-option-element/HTMLOptionElement.cjs +2 -30
- package/cjs/nodes/html-option-element/HTMLOptionElement.cjs.map +1 -1
- package/cjs/nodes/html-option-element/HTMLOptionElement.d.ts +2 -9
- package/cjs/nodes/html-option-element/HTMLOptionElement.d.ts.map +1 -1
- package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.cjs +45 -0
- package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +2 -14
- package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
- package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts +2 -9
- package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
- package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.cjs +26 -0
- package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts +16 -0
- package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +2 -26
- package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
- package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts +2 -9
- package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
- package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.cjs +42 -0
- package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +2 -26
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +2 -9
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.cjs +42 -0
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/nodes/html-unknown-element/HTMLUnknownElement.cjs +5 -2
- package/cjs/nodes/html-unknown-element/HTMLUnknownElement.cjs.map +1 -1
- package/cjs/nodes/html-unknown-element/HTMLUnknownElement.d.ts.map +1 -1
- package/cjs/nodes/node/NodeUtility.cjs +4 -15
- package/cjs/nodes/node/NodeUtility.cjs.map +1 -1
- package/cjs/nodes/node/NodeUtility.d.ts.map +1 -1
- package/cjs/nodes/svg-element/SVGElement.cjs +2 -20
- package/cjs/nodes/svg-element/SVGElement.cjs.map +1 -1
- package/cjs/nodes/svg-element/SVGElement.d.ts +3 -10
- package/cjs/nodes/svg-element/SVGElement.d.ts.map +1 -1
- package/cjs/nodes/svg-element/SVGElementNamedNodeMap.cjs +35 -0
- package/cjs/nodes/svg-element/SVGElementNamedNodeMap.cjs.map +1 -0
- package/cjs/nodes/svg-element/SVGElementNamedNodeMap.d.ts +20 -0
- package/cjs/nodes/svg-element/SVGElementNamedNodeMap.d.ts.map +1 -0
- package/cjs/query-selector/SelectorItem.cjs +1 -1
- package/cjs/query-selector/SelectorItem.cjs.map +1 -1
- package/cjs/xml-serializer/XMLSerializer.cjs +3 -2
- package/cjs/xml-serializer/XMLSerializer.cjs.map +1 -1
- package/cjs/xml-serializer/XMLSerializer.d.ts.map +1 -1
- package/lib/css/declaration/AbstractCSSStyleDeclaration.d.ts.map +1 -1
- package/lib/css/declaration/AbstractCSSStyleDeclaration.js +20 -18
- package/lib/css/declaration/AbstractCSSStyleDeclaration.js.map +1 -1
- package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.d.ts.map +1 -1
- package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.js +4 -3
- package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.js.map +1 -1
- package/lib/named-node-map/INamedNodeMap.d.ts +26 -26
- package/lib/named-node-map/INamedNodeMap.d.ts.map +1 -1
- package/lib/named-node-map/NamedNodeMap.d.ts +57 -40
- package/lib/named-node-map/NamedNodeMap.d.ts.map +1 -1
- package/lib/named-node-map/NamedNodeMap.js +121 -81
- package/lib/named-node-map/NamedNodeMap.js.map +1 -1
- package/lib/nodes/element/Dataset.d.ts.map +1 -1
- package/lib/nodes/element/Dataset.js +16 -17
- package/lib/nodes/element/Dataset.js.map +1 -1
- package/lib/nodes/element/Element.d.ts +9 -16
- package/lib/nodes/element/Element.d.ts.map +1 -1
- package/lib/nodes/element/Element.js +22 -133
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/nodes/element/ElementNamedNodeMap.d.ts +45 -0
- package/lib/nodes/element/ElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/element/ElementNamedNodeMap.js +146 -0
- package/lib/nodes/element/ElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/element/ElementUtility.d.ts.map +1 -1
- package/lib/nodes/element/ElementUtility.js +20 -15
- package/lib/nodes/element/ElementUtility.js.map +1 -1
- package/lib/nodes/element/IElement.d.ts +5 -5
- package/lib/nodes/element/IElement.d.ts.map +1 -1
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts +7 -11
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +2 -26
- package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
- package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.js +38 -0
- package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-button-element/HTMLButtonElement.d.ts +2 -9
- package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
- package/lib/nodes/html-button-element/HTMLButtonElement.js +2 -26
- package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
- package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.js +35 -0
- package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-element/HTMLElement.d.ts +3 -10
- package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
- package/lib/nodes/html-element/HTMLElement.js +2 -20
- package/lib/nodes/html-element/HTMLElement.js.map +1 -1
- package/lib/nodes/html-element/HTMLElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-element/HTMLElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-element/HTMLElementNamedNodeMap.js +29 -0
- package/lib/nodes/html-element/HTMLElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts +2 -5
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +2 -12
- package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
- package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts +16 -0
- package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.js +20 -0
- package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-input-element/HTMLInputElement.d.ts +2 -9
- package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElement.js +2 -26
- package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.js +36 -0
- package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
- package/lib/nodes/html-label-element/HTMLLabelElement.js +1 -6
- package/lib/nodes/html-label-element/HTMLLabelElement.js.map +1 -1
- package/lib/nodes/html-link-element/HTMLLinkElement.d.ts +4 -10
- package/lib/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
- package/lib/nodes/html-link-element/HTMLLinkElement.js +2 -23
- package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
- package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.js +33 -0
- package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-option-element/HTMLOptionElement.d.ts +2 -9
- package/lib/nodes/html-option-element/HTMLOptionElement.d.ts.map +1 -1
- package/lib/nodes/html-option-element/HTMLOptionElement.js +2 -30
- package/lib/nodes/html-option-element/HTMLOptionElement.js.map +1 -1
- package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.js +39 -0
- package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +2 -9
- package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
- package/lib/nodes/html-script-element/HTMLScriptElement.js +2 -14
- package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
- package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts +16 -0
- package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.js +20 -0
- package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-select-element/HTMLSelectElement.d.ts +2 -9
- package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
- package/lib/nodes/html-select-element/HTMLSelectElement.js +2 -26
- package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
- package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.js +36 -0
- package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +2 -9
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +2 -26
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
- package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.js +36 -0
- package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.js.map +1 -0
- package/lib/nodes/html-unknown-element/HTMLUnknownElement.d.ts.map +1 -1
- package/lib/nodes/html-unknown-element/HTMLUnknownElement.js +5 -2
- package/lib/nodes/html-unknown-element/HTMLUnknownElement.js.map +1 -1
- package/lib/nodes/node/NodeUtility.d.ts.map +1 -1
- package/lib/nodes/node/NodeUtility.js +4 -15
- package/lib/nodes/node/NodeUtility.js.map +1 -1
- package/lib/nodes/svg-element/SVGElement.d.ts +3 -10
- package/lib/nodes/svg-element/SVGElement.d.ts.map +1 -1
- package/lib/nodes/svg-element/SVGElement.js +2 -20
- package/lib/nodes/svg-element/SVGElement.js.map +1 -1
- package/lib/nodes/svg-element/SVGElementNamedNodeMap.d.ts +20 -0
- package/lib/nodes/svg-element/SVGElementNamedNodeMap.d.ts.map +1 -0
- package/lib/nodes/svg-element/SVGElementNamedNodeMap.js +29 -0
- package/lib/nodes/svg-element/SVGElementNamedNodeMap.js.map +1 -0
- package/lib/query-selector/SelectorItem.js +1 -1
- package/lib/query-selector/SelectorItem.js.map +1 -1
- package/lib/xml-serializer/XMLSerializer.d.ts.map +1 -1
- package/lib/xml-serializer/XMLSerializer.js +3 -2
- package/lib/xml-serializer/XMLSerializer.js.map +1 -1
- package/package.json +1 -1
- package/src/css/declaration/AbstractCSSStyleDeclaration.ts +32 -20
- package/src/css/declaration/element-style/CSSStyleDeclarationElementStyle.ts +4 -3
- package/src/named-node-map/INamedNodeMap.ts +26 -26
- package/src/named-node-map/NamedNodeMap.ts +135 -73
- package/src/nodes/element/Dataset.ts +19 -17
- package/src/nodes/element/Element.ts +27 -176
- package/src/nodes/element/ElementNamedNodeMap.ts +194 -0
- package/src/nodes/element/ElementUtility.ts +20 -18
- package/src/nodes/element/IElement.ts +5 -5
- package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +5 -33
- package/src/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.ts +48 -0
- package/src/nodes/html-button-element/HTMLButtonElement.ts +3 -33
- package/src/nodes/html-button-element/HTMLButtonElementNamedNodeMap.ts +56 -0
- package/src/nodes/html-element/HTMLElement.ts +4 -28
- package/src/nodes/html-element/HTMLElementNamedNodeMap.ts +38 -0
- package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +4 -18
- package/src/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.ts +26 -0
- package/src/nodes/html-input-element/HTMLInputElement.ts +4 -33
- package/src/nodes/html-input-element/HTMLInputElementNamedNodeMap.ts +57 -0
- package/src/nodes/html-label-element/HTMLLabelElement.ts +3 -6
- package/src/nodes/html-link-element/HTMLLinkElement.ts +4 -32
- package/src/nodes/html-link-element/HTMLLinkElementNamedNodeMap.ts +43 -0
- package/src/nodes/html-option-element/HTMLOptionElement.ts +3 -43
- package/src/nodes/html-option-element/HTMLOptionElementNamedNodeMap.ts +55 -0
- package/src/nodes/html-script-element/HTMLScriptElement.ts +3 -18
- package/src/nodes/html-script-element/HTMLScriptElementNamedNodeMap.ts +26 -0
- package/src/nodes/html-select-element/HTMLSelectElement.ts +4 -33
- package/src/nodes/html-select-element/HTMLSelectElementNamedNodeMap.ts +57 -0
- package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +3 -33
- package/src/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.ts +57 -0
- package/src/nodes/html-unknown-element/HTMLUnknownElement.ts +6 -2
- package/src/nodes/node/NodeUtility.ts +7 -24
- package/src/nodes/svg-element/SVGElement.ts +5 -28
- package/src/nodes/svg-element/SVGElementNamedNodeMap.ts +38 -0
- package/src/query-selector/SelectorItem.ts +1 -1
- package/src/xml-serializer/XMLSerializer.ts +4 -2
@@ -1,145 +1,207 @@
|
|
1
|
-
import type Element from '../nodes/element/Element.js';
|
2
|
-
import IAttr from '../nodes/attr/IAttr.js';
|
3
1
|
import INamedNodeMap from './INamedNodeMap.js';
|
2
|
+
import IAttr from '../nodes/attr/IAttr.js';
|
4
3
|
|
5
4
|
/**
|
6
|
-
*
|
5
|
+
* Named Node Map.
|
7
6
|
*
|
8
|
-
*
|
9
|
-
* https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.
|
7
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
|
10
8
|
*/
|
11
9
|
export default class NamedNodeMap implements INamedNodeMap {
|
12
10
|
[index: number]: IAttr;
|
11
|
+
public length = 0;
|
12
|
+
protected _namedItems: { [k: string]: IAttr } = {};
|
13
13
|
|
14
14
|
/**
|
15
|
-
*
|
15
|
+
* Returns string.
|
16
|
+
*
|
17
|
+
* @returns string.
|
16
18
|
*/
|
17
|
-
|
19
|
+
public get [Symbol.toStringTag](): string {
|
20
|
+
return 'NamedNodeMap';
|
21
|
+
}
|
18
22
|
|
19
23
|
/**
|
20
|
-
*
|
24
|
+
* Iterator.
|
21
25
|
*
|
22
|
-
* @
|
26
|
+
* @returns Iterator.
|
23
27
|
*/
|
24
|
-
|
25
|
-
|
28
|
+
public *[Symbol.iterator](): IterableIterator<IAttr> {
|
29
|
+
for (let i = 0, max = this.length; i < max; i++) {
|
30
|
+
yield this[i];
|
31
|
+
}
|
26
32
|
}
|
27
33
|
|
28
34
|
/**
|
29
|
-
* Returns
|
35
|
+
* Returns item by index.
|
30
36
|
*
|
31
|
-
* @
|
37
|
+
* @param index Index.
|
32
38
|
*/
|
33
|
-
public
|
34
|
-
return this
|
39
|
+
public item(index: number): IAttr | null {
|
40
|
+
return index >= 0 && this[index] ? this[index] : null;
|
35
41
|
}
|
36
42
|
|
37
43
|
/**
|
38
|
-
*
|
44
|
+
* Returns named item.
|
39
45
|
*
|
40
|
-
* @
|
46
|
+
* @param name Name.
|
47
|
+
* @returns Itme.
|
41
48
|
*/
|
42
|
-
public
|
43
|
-
return
|
49
|
+
public getNamedItem(name: string): IAttr | null {
|
50
|
+
return this._namedItems[name] || null;
|
44
51
|
}
|
45
52
|
|
46
53
|
/**
|
47
|
-
* Returns
|
54
|
+
* Returns item by name and namespace.
|
48
55
|
*
|
49
|
-
* @param
|
56
|
+
* @param namespace Namespace.
|
57
|
+
* @param localName Local name of the attribute.
|
58
|
+
* @returns Item.
|
50
59
|
*/
|
51
|
-
public
|
52
|
-
|
53
|
-
|
60
|
+
public getNamedItemNS(namespace: string, localName: string): IAttr | null {
|
61
|
+
const attribute = this.getNamedItem(localName);
|
62
|
+
|
63
|
+
if (attribute && attribute.namespaceURI === namespace && attribute.localName === localName) {
|
64
|
+
return attribute;
|
65
|
+
}
|
66
|
+
|
67
|
+
for (let i = 0, max = this.length; i < max; i++) {
|
68
|
+
if (this[i].namespaceURI === namespace && this[i].localName === localName) {
|
69
|
+
return this[i];
|
70
|
+
}
|
54
71
|
}
|
55
|
-
|
56
|
-
return
|
72
|
+
|
73
|
+
return null;
|
57
74
|
}
|
58
75
|
|
59
76
|
/**
|
60
|
-
*
|
77
|
+
* Sets named item.
|
61
78
|
*
|
62
|
-
* @param
|
63
|
-
* @returns
|
79
|
+
* @param item Item.
|
80
|
+
* @returns Replaced item.
|
64
81
|
*/
|
65
|
-
public
|
66
|
-
return this
|
82
|
+
public setNamedItem(item: IAttr): IAttr | null {
|
83
|
+
return this._setNamedItemWithoutConsequences(item);
|
67
84
|
}
|
68
85
|
|
69
86
|
/**
|
70
|
-
*
|
87
|
+
* Adds a new namespaced item.
|
71
88
|
*
|
72
|
-
* @
|
73
|
-
* @param
|
74
|
-
* @returns
|
89
|
+
* @alias setNamedItem()
|
90
|
+
* @param item Item.
|
91
|
+
* @returns Replaced item.
|
75
92
|
*/
|
76
|
-
public
|
77
|
-
return this
|
93
|
+
public setNamedItemNS(item: IAttr): IAttr | null {
|
94
|
+
return this.setNamedItem(item);
|
78
95
|
}
|
79
96
|
|
80
97
|
/**
|
81
|
-
*
|
98
|
+
* Removes an item.
|
82
99
|
*
|
83
|
-
* @param
|
84
|
-
* @returns
|
100
|
+
* @param name Name of item.
|
101
|
+
* @returns Removed item.
|
85
102
|
*/
|
86
|
-
public
|
87
|
-
return this
|
103
|
+
public removeNamedItem(name: string): IAttr | null {
|
104
|
+
return this._removeNamedItemWithoutConsequences(name);
|
88
105
|
}
|
89
106
|
|
90
107
|
/**
|
91
|
-
*
|
108
|
+
* Removes a namespaced item.
|
92
109
|
*
|
93
|
-
* @param
|
94
|
-
* @
|
110
|
+
* @param namespace Namespace.
|
111
|
+
* @param localName Local name of the item.
|
112
|
+
* @returns Removed item.
|
95
113
|
*/
|
96
|
-
public
|
97
|
-
|
114
|
+
public removeNamedItemNS(namespace: string, localName: string): IAttr | null {
|
115
|
+
const attribute = this.getNamedItemNS(namespace, localName);
|
116
|
+
if (attribute) {
|
117
|
+
return this.removeNamedItem(attribute.name);
|
118
|
+
}
|
119
|
+
return null;
|
98
120
|
}
|
99
121
|
|
100
122
|
/**
|
101
|
-
*
|
123
|
+
* Sets named item without calling listeners for certain attributes.
|
102
124
|
*
|
103
|
-
* @param
|
104
|
-
* @returns
|
125
|
+
* @param item Item.
|
126
|
+
* @returns Replaced item.
|
105
127
|
*/
|
106
|
-
public
|
107
|
-
|
128
|
+
public _setNamedItemWithoutConsequences(item: IAttr): IAttr | null {
|
129
|
+
if (item.name) {
|
130
|
+
const replacedItem = this._namedItems[item.name] || null;
|
131
|
+
|
132
|
+
this._namedItems[item.name] = item;
|
133
|
+
|
134
|
+
if (replacedItem) {
|
135
|
+
this._removeNamedItemIndex(replacedItem);
|
136
|
+
}
|
108
137
|
|
109
|
-
|
110
|
-
this
|
138
|
+
this[this.length] = item;
|
139
|
+
this.length++;
|
140
|
+
|
141
|
+
if (this._isValidPropertyName(item.name)) {
|
142
|
+
this[item.name] = item;
|
143
|
+
}
|
144
|
+
|
145
|
+
return replacedItem;
|
111
146
|
}
|
112
|
-
return
|
147
|
+
return null;
|
113
148
|
}
|
114
149
|
|
115
150
|
/**
|
116
|
-
* Removes
|
151
|
+
* Removes an item without calling listeners for certain attributes.
|
117
152
|
*
|
118
|
-
* @param
|
119
|
-
* @
|
120
|
-
* @returns Removed attribute.
|
153
|
+
* @param name Name of item.
|
154
|
+
* @returns Removed item.
|
121
155
|
*/
|
122
|
-
public
|
123
|
-
const
|
156
|
+
public _removeNamedItemWithoutConsequences(name: string): IAttr | null {
|
157
|
+
const removedItem = this._namedItems[name] || null;
|
124
158
|
|
125
|
-
if (
|
126
|
-
|
159
|
+
if (!removedItem) {
|
160
|
+
return null;
|
127
161
|
}
|
128
|
-
|
162
|
+
|
163
|
+
this._removeNamedItemIndex(removedItem);
|
164
|
+
|
165
|
+
if (this[name] === removedItem) {
|
166
|
+
delete this[name];
|
167
|
+
}
|
168
|
+
|
169
|
+
delete this._namedItems[name];
|
170
|
+
|
171
|
+
return removedItem;
|
129
172
|
}
|
130
173
|
|
131
174
|
/**
|
132
|
-
*
|
175
|
+
* Removes an item from index.
|
133
176
|
*
|
134
|
-
* @
|
177
|
+
* @param item Item.
|
135
178
|
*/
|
136
|
-
|
137
|
-
let
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
179
|
+
protected _removeNamedItemIndex(item: IAttr): void {
|
180
|
+
for (let i = 0; i < this.length; i++) {
|
181
|
+
if (this[i] === item) {
|
182
|
+
for (let b = i; b < this.length; b++) {
|
183
|
+
if (b < this.length - 1) {
|
184
|
+
this[b] = this[b + 1];
|
185
|
+
} else {
|
186
|
+
delete this[b];
|
187
|
+
}
|
188
|
+
}
|
189
|
+
this.length--;
|
190
|
+
break;
|
142
191
|
}
|
143
|
-
}
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
195
|
+
/**
|
196
|
+
* Returns "true" if the property name is valid.
|
197
|
+
*
|
198
|
+
* @param name Name.
|
199
|
+
* @returns True if the property name is valid.
|
200
|
+
*/
|
201
|
+
protected _isValidPropertyName(name: string): boolean {
|
202
|
+
return (
|
203
|
+
!this.constructor.prototype.hasOwnProperty(name) &&
|
204
|
+
(isNaN(Number(name)) || name.includes('.'))
|
205
|
+
);
|
144
206
|
}
|
145
207
|
}
|
@@ -20,11 +20,12 @@ export default class Dataset {
|
|
20
20
|
constructor(element: Element) {
|
21
21
|
// Build the initial dataset record from all data attributes.
|
22
22
|
const dataset: DatasetRecord = {};
|
23
|
-
|
24
|
-
for (
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
|
24
|
+
for (let i = 0, max = element.attributes.length; i < max; i++) {
|
25
|
+
const attribute = element.attributes[i];
|
26
|
+
if (attribute.name.startsWith('data-')) {
|
27
|
+
const key = Dataset.kebabToCamelCase(attribute.name.replace('data-', ''));
|
28
|
+
dataset[key] = attribute.value;
|
28
29
|
}
|
29
30
|
}
|
30
31
|
|
@@ -32,9 +33,9 @@ export default class Dataset {
|
|
32
33
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
|
33
34
|
this.proxy = new Proxy(dataset, {
|
34
35
|
get(dataset: DatasetRecord, key: string): string {
|
35
|
-
const
|
36
|
-
if (
|
37
|
-
return (dataset[key] =
|
36
|
+
const attribute = element.attributes.getNamedItem('data-' + Dataset.camelCaseToKebab(key));
|
37
|
+
if (attribute) {
|
38
|
+
return (dataset[key] = attribute.value);
|
38
39
|
}
|
39
40
|
delete dataset[key];
|
40
41
|
return undefined;
|
@@ -45,10 +46,10 @@ export default class Dataset {
|
|
45
46
|
return true;
|
46
47
|
},
|
47
48
|
deleteProperty(dataset: DatasetRecord, key: string): boolean {
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
return (
|
50
|
+
!!element.attributes.removeNamedItem('data-' + Dataset.camelCaseToKebab(key)) &&
|
51
|
+
delete dataset[key]
|
52
|
+
);
|
52
53
|
},
|
53
54
|
ownKeys(dataset: DatasetRecord): string[] {
|
54
55
|
// According to Mozilla we have to update the dataset object (target) to contain the same keys as what we return:
|
@@ -56,11 +57,12 @@ export default class Dataset {
|
|
56
57
|
// "The result List must contain the keys of all non-configurable own properties of the target object."
|
57
58
|
const keys = [];
|
58
59
|
const deleteKeys = [];
|
59
|
-
for (
|
60
|
-
|
61
|
-
|
60
|
+
for (let i = 0, max = element.attributes.length; i < max; i++) {
|
61
|
+
const attribute = element.attributes[i];
|
62
|
+
if (attribute.name.startsWith('data-')) {
|
63
|
+
const key = Dataset.kebabToCamelCase(attribute.name.replace('data-', ''));
|
62
64
|
keys.push(key);
|
63
|
-
dataset[key] =
|
65
|
+
dataset[key] = attribute.value;
|
64
66
|
if (!dataset[key]) {
|
65
67
|
deleteKeys.push(key);
|
66
68
|
}
|
@@ -72,7 +74,7 @@ export default class Dataset {
|
|
72
74
|
return keys;
|
73
75
|
},
|
74
76
|
has(_dataset: DatasetRecord, key: string): boolean {
|
75
|
-
return !!attributes
|
77
|
+
return !!element.attributes.getNamedItem('data-' + Dataset.camelCaseToKebab(key));
|
76
78
|
}
|
77
79
|
});
|
78
80
|
}
|
@@ -1,13 +1,10 @@
|
|
1
1
|
import Node from '../node/Node.js';
|
2
2
|
import ShadowRoot from '../shadow-root/ShadowRoot.js';
|
3
3
|
import Attr from '../attr/Attr.js';
|
4
|
-
import NamedNodeMap from '../../named-node-map/NamedNodeMap.js';
|
5
4
|
import DOMRect from './DOMRect.js';
|
6
5
|
import DOMTokenList from '../../dom-token-list/DOMTokenList.js';
|
7
6
|
import IDOMTokenList from '../../dom-token-list/IDOMTokenList.js';
|
8
7
|
import QuerySelector from '../../query-selector/QuerySelector.js';
|
9
|
-
import MutationRecord from '../../mutation-observer/MutationRecord.js';
|
10
|
-
import MutationTypeEnum from '../../mutation-observer/MutationTypeEnum.js';
|
11
8
|
import NamespaceURI from '../../config/NamespaceURI.js';
|
12
9
|
import XMLParser from '../../xml-parser/XMLParser.js';
|
13
10
|
import XMLSerializer from '../../xml-serializer/XMLSerializer.js';
|
@@ -32,6 +29,7 @@ import ElementUtility from './ElementUtility.js';
|
|
32
29
|
import HTMLCollection from './HTMLCollection.js';
|
33
30
|
import EventPhaseEnum from '../../event/EventPhaseEnum.js';
|
34
31
|
import CSSStyleDeclaration from '../../css/declaration/CSSStyleDeclaration.js';
|
32
|
+
import ElementNamedNodeMap from './ElementNamedNodeMap.js';
|
35
33
|
|
36
34
|
/**
|
37
35
|
* Element.
|
@@ -89,9 +87,9 @@ export default class Element extends Node implements IElement {
|
|
89
87
|
|
90
88
|
// Used for being able to access closed shadow roots
|
91
89
|
public _shadowRoot: IShadowRoot = null;
|
92
|
-
public
|
90
|
+
public readonly attributes: INamedNodeMap = new ElementNamedNodeMap(this);
|
93
91
|
|
94
|
-
|
92
|
+
public _classList: DOMTokenList = null;
|
95
93
|
public _isValue?: string | null = null;
|
96
94
|
public _computedStyle: CSSStyleDeclaration | null = null;
|
97
95
|
|
@@ -266,15 +264,6 @@ export default class Element extends Node implements IElement {
|
|
266
264
|
this.replaceWith(html);
|
267
265
|
}
|
268
266
|
|
269
|
-
/**
|
270
|
-
* Returns attributes.
|
271
|
-
*
|
272
|
-
* @returns Attributes.
|
273
|
-
*/
|
274
|
-
public get attributes(): INamedNodeMap {
|
275
|
-
return Object.assign(new NamedNodeMap(this), Object.values(this._attributes), this._attributes);
|
276
|
-
}
|
277
|
-
|
278
267
|
/**
|
279
268
|
* First element child.
|
280
269
|
*
|
@@ -364,10 +353,9 @@ export default class Element extends Node implements IElement {
|
|
364
353
|
|
365
354
|
Attr._ownerDocument = this.ownerDocument;
|
366
355
|
|
367
|
-
for (
|
368
|
-
const
|
369
|
-
(
|
370
|
-
(<Element>clone)._attributes[key] = attr;
|
356
|
+
for (let i = 0, max = this.attributes.length; i < max; i++) {
|
357
|
+
const attribute = this.attributes[i];
|
358
|
+
clone.attributes.setNamedItem(Object.assign(new Attr(), attribute));
|
371
359
|
}
|
372
360
|
|
373
361
|
if (deep) {
|
@@ -563,7 +551,11 @@ export default class Element extends Node implements IElement {
|
|
563
551
|
* @returns Attribute names.
|
564
552
|
*/
|
565
553
|
public getAttributeNames(): string[] {
|
566
|
-
|
554
|
+
const attributeNames = [];
|
555
|
+
for (let i = 0, max = this.attributes.length; i < max; i++) {
|
556
|
+
attributeNames.push(this.attributes[i].name);
|
557
|
+
}
|
558
|
+
return attributeNames;
|
567
559
|
}
|
568
560
|
|
569
561
|
/**
|
@@ -635,13 +627,7 @@ export default class Element extends Node implements IElement {
|
|
635
627
|
* @returns True if attribute exists, false otherwise.
|
636
628
|
*/
|
637
629
|
public hasAttributeNS(namespace: string | null, localName: string): boolean {
|
638
|
-
|
639
|
-
const attribute = this._attributes[name];
|
640
|
-
if (attribute.namespaceURI === namespace && attribute.localName === localName) {
|
641
|
-
return true;
|
642
|
-
}
|
643
|
-
}
|
644
|
-
return false;
|
630
|
+
return this.attributes.getNamedItemNS(namespace, localName) !== null;
|
645
631
|
}
|
646
632
|
|
647
633
|
/**
|
@@ -650,7 +636,7 @@ export default class Element extends Node implements IElement {
|
|
650
636
|
* @returns "true" if the element has attributes.
|
651
637
|
*/
|
652
638
|
public hasAttributes(): boolean {
|
653
|
-
return
|
639
|
+
return this.attributes.length > 0;
|
654
640
|
}
|
655
641
|
|
656
642
|
/**
|
@@ -659,10 +645,7 @@ export default class Element extends Node implements IElement {
|
|
659
645
|
* @param name Name.
|
660
646
|
*/
|
661
647
|
public removeAttribute(name: string): void {
|
662
|
-
|
663
|
-
if (attribute) {
|
664
|
-
this.removeAttributeNode(attribute);
|
665
|
-
}
|
648
|
+
this.attributes.removeNamedItem(name);
|
666
649
|
}
|
667
650
|
|
668
651
|
/**
|
@@ -672,12 +655,7 @@ export default class Element extends Node implements IElement {
|
|
672
655
|
* @param localName Local name.
|
673
656
|
*/
|
674
657
|
public removeAttributeNS(namespace: string | null, localName: string): void {
|
675
|
-
|
676
|
-
const attribute = this._attributes[name];
|
677
|
-
if (attribute.namespaceURI === namespace && attribute.localName === localName) {
|
678
|
-
this.removeAttribute(attribute.name);
|
679
|
-
}
|
680
|
-
}
|
658
|
+
this.attributes.removeNamedItemNS(namespace, localName);
|
681
659
|
}
|
682
660
|
|
683
661
|
/**
|
@@ -824,67 +802,7 @@ export default class Element extends Node implements IElement {
|
|
824
802
|
* @returns Replaced attribute.
|
825
803
|
*/
|
826
804
|
public setAttributeNode(attribute: IAttr): IAttr | null {
|
827
|
-
|
828
|
-
const replacedAttribute = this._attributes[name];
|
829
|
-
const oldValue = replacedAttribute ? replacedAttribute.value : null;
|
830
|
-
|
831
|
-
attribute.name = name;
|
832
|
-
(<IElement>attribute.ownerElement) = <IElement>this;
|
833
|
-
(<IDocument>attribute.ownerDocument) = this.ownerDocument;
|
834
|
-
|
835
|
-
if (this.isConnected) {
|
836
|
-
this.ownerDocument['_cacheID']++;
|
837
|
-
}
|
838
|
-
|
839
|
-
this._attributes[name] = attribute;
|
840
|
-
|
841
|
-
if (attribute.name === 'class' && this._classList) {
|
842
|
-
this._classList._updateIndices();
|
843
|
-
}
|
844
|
-
|
845
|
-
if (attribute.name === 'id' || attribute.name === 'name') {
|
846
|
-
if (this.parentNode && (<IElement>this.parentNode).children && attribute.value !== oldValue) {
|
847
|
-
if (oldValue) {
|
848
|
-
(<HTMLCollection<IElement>>(<IElement>this.parentNode).children)._removeNamedItem(
|
849
|
-
this,
|
850
|
-
oldValue
|
851
|
-
);
|
852
|
-
}
|
853
|
-
if (attribute.value) {
|
854
|
-
(<HTMLCollection<IElement>>(<IElement>this.parentNode).children)._appendNamedItem(
|
855
|
-
this,
|
856
|
-
attribute.value
|
857
|
-
);
|
858
|
-
}
|
859
|
-
}
|
860
|
-
}
|
861
|
-
|
862
|
-
if (
|
863
|
-
this.attributeChangedCallback &&
|
864
|
-
(<typeof Element>this.constructor)._observedAttributes &&
|
865
|
-
(<typeof Element>this.constructor)._observedAttributes.includes(name)
|
866
|
-
) {
|
867
|
-
this.attributeChangedCallback(name, oldValue, attribute.value);
|
868
|
-
}
|
869
|
-
|
870
|
-
// MutationObserver
|
871
|
-
if (this._observers.length > 0) {
|
872
|
-
for (const observer of this._observers) {
|
873
|
-
if (
|
874
|
-
observer.options.attributes &&
|
875
|
-
(!observer.options.attributeFilter || observer.options.attributeFilter.includes(name))
|
876
|
-
) {
|
877
|
-
const record = new MutationRecord();
|
878
|
-
record.target = this;
|
879
|
-
record.type = MutationTypeEnum.attributes;
|
880
|
-
record.attributeName = name;
|
881
|
-
record.oldValue = observer.options.attributeOldValue ? oldValue : null;
|
882
|
-
observer.callback([record]);
|
883
|
-
}
|
884
|
-
}
|
885
|
-
}
|
886
|
-
|
887
|
-
return replacedAttribute || null;
|
805
|
+
return this.attributes.setNamedItem(attribute);
|
888
806
|
}
|
889
807
|
|
890
808
|
/**
|
@@ -893,8 +811,8 @@ export default class Element extends Node implements IElement {
|
|
893
811
|
* @param attribute Attribute.
|
894
812
|
* @returns Replaced attribute.
|
895
813
|
*/
|
896
|
-
public setAttributeNodeNS(attribute: IAttr): IAttr {
|
897
|
-
return this.
|
814
|
+
public setAttributeNodeNS(attribute: IAttr): IAttr | null {
|
815
|
+
return this.attributes.setNamedItemNS(attribute);
|
898
816
|
}
|
899
817
|
|
900
818
|
/**
|
@@ -903,33 +821,19 @@ export default class Element extends Node implements IElement {
|
|
903
821
|
* @param name Name.
|
904
822
|
* @returns Replaced attribute.
|
905
823
|
*/
|
906
|
-
public getAttributeNode(name: string): IAttr {
|
907
|
-
return this.
|
824
|
+
public getAttributeNode(name: string): IAttr | null {
|
825
|
+
return this.attributes.getNamedItem(name);
|
908
826
|
}
|
909
827
|
|
910
828
|
/**
|
911
829
|
* Returns a namespaced Attr node.
|
912
830
|
*
|
913
831
|
* @param namespace Namespace.
|
914
|
-
* @param
|
832
|
+
* @param localName Name.
|
915
833
|
* @returns Replaced attribute.
|
916
834
|
*/
|
917
|
-
public getAttributeNodeNS(namespace: string | null,
|
918
|
-
|
919
|
-
if (
|
920
|
-
this._attributes[attributeName] &&
|
921
|
-
this._attributes[attributeName].namespaceURI === namespace &&
|
922
|
-
this._attributes[attributeName].localName === attributeName
|
923
|
-
) {
|
924
|
-
return this._attributes[attributeName];
|
925
|
-
}
|
926
|
-
for (const name of Object.keys(this._attributes)) {
|
927
|
-
const attribute = this._attributes[name];
|
928
|
-
if (attribute.namespaceURI === namespace && attribute.localName === attributeName) {
|
929
|
-
return attribute;
|
930
|
-
}
|
931
|
-
}
|
932
|
-
return null;
|
835
|
+
public getAttributeNodeNS(namespace: string | null, localName: string): IAttr | null {
|
836
|
+
return this.attributes.getNamedItemNS(namespace, localName);
|
933
837
|
}
|
934
838
|
|
935
839
|
/**
|
@@ -938,61 +842,8 @@ export default class Element extends Node implements IElement {
|
|
938
842
|
* @param attribute Attribute.
|
939
843
|
* @returns Removed attribute.
|
940
844
|
*/
|
941
|
-
public removeAttributeNode(attribute: IAttr): IAttr {
|
942
|
-
|
943
|
-
|
944
|
-
if (removedAttribute !== attribute) {
|
945
|
-
throw new DOMException(
|
946
|
-
`Failed to execute 'removeAttributeNode' on 'Element': The node provided is owned by another element.`
|
947
|
-
);
|
948
|
-
}
|
949
|
-
|
950
|
-
delete this._attributes[attribute.name];
|
951
|
-
|
952
|
-
if (this.isConnected) {
|
953
|
-
this.ownerDocument['_cacheID']++;
|
954
|
-
}
|
955
|
-
|
956
|
-
if (attribute.name === 'class' && this._classList) {
|
957
|
-
this._classList._updateIndices();
|
958
|
-
}
|
959
|
-
|
960
|
-
if (attribute.name === 'id' || attribute.name === 'name') {
|
961
|
-
if (this.parentNode && (<IElement>this.parentNode).children && attribute.value) {
|
962
|
-
(<HTMLCollection<IElement>>(<IElement>this.parentNode).children)._removeNamedItem(
|
963
|
-
this,
|
964
|
-
attribute.value
|
965
|
-
);
|
966
|
-
}
|
967
|
-
}
|
968
|
-
|
969
|
-
if (
|
970
|
-
this.attributeChangedCallback &&
|
971
|
-
(<typeof Element>this.constructor)._observedAttributes &&
|
972
|
-
(<typeof Element>this.constructor)._observedAttributes.includes(attribute.name)
|
973
|
-
) {
|
974
|
-
this.attributeChangedCallback(attribute.name, attribute.value, null);
|
975
|
-
}
|
976
|
-
|
977
|
-
// MutationObserver
|
978
|
-
if (this._observers.length > 0) {
|
979
|
-
for (const observer of this._observers) {
|
980
|
-
if (
|
981
|
-
observer.options.attributes &&
|
982
|
-
(!observer.options.attributeFilter ||
|
983
|
-
observer.options.attributeFilter.includes(attribute.name))
|
984
|
-
) {
|
985
|
-
const record = new MutationRecord();
|
986
|
-
record.target = this;
|
987
|
-
record.type = MutationTypeEnum.attributes;
|
988
|
-
record.attributeName = attribute.name;
|
989
|
-
record.oldValue = observer.options.attributeOldValue ? attribute.value : null;
|
990
|
-
observer.callback([record]);
|
991
|
-
}
|
992
|
-
}
|
993
|
-
}
|
994
|
-
|
995
|
-
return attribute;
|
845
|
+
public removeAttributeNode(attribute: IAttr): IAttr | null {
|
846
|
+
return this.attributes.removeNamedItem(attribute.name);
|
996
847
|
}
|
997
848
|
|
998
849
|
/**
|
@@ -1001,8 +852,8 @@ export default class Element extends Node implements IElement {
|
|
1001
852
|
* @param attribute Attribute.
|
1002
853
|
* @returns Removed attribute.
|
1003
854
|
*/
|
1004
|
-
public removeAttributeNodeNS(attribute: IAttr): IAttr {
|
1005
|
-
return this.
|
855
|
+
public removeAttributeNodeNS(attribute: IAttr): IAttr | null {
|
856
|
+
return this.attributes.removeNamedItemNS(attribute.namespaceURI, attribute.localName);
|
1006
857
|
}
|
1007
858
|
|
1008
859
|
/**
|