happy-dom 10.5.2 → 10.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

Files changed (290) hide show
  1. package/cjs/css/declaration/AbstractCSSStyleDeclaration.cjs +20 -18
  2. package/cjs/css/declaration/AbstractCSSStyleDeclaration.cjs.map +1 -1
  3. package/cjs/css/declaration/AbstractCSSStyleDeclaration.d.ts.map +1 -1
  4. package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.cjs +4 -3
  5. package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.cjs.map +1 -1
  6. package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.d.ts.map +1 -1
  7. package/cjs/named-node-map/INamedNodeMap.d.ts +26 -26
  8. package/cjs/named-node-map/INamedNodeMap.d.ts.map +1 -1
  9. package/cjs/named-node-map/NamedNodeMap.cjs +121 -81
  10. package/cjs/named-node-map/NamedNodeMap.cjs.map +1 -1
  11. package/cjs/named-node-map/NamedNodeMap.d.ts +57 -40
  12. package/cjs/named-node-map/NamedNodeMap.d.ts.map +1 -1
  13. package/cjs/nodes/element/Dataset.cjs +16 -17
  14. package/cjs/nodes/element/Dataset.cjs.map +1 -1
  15. package/cjs/nodes/element/Dataset.d.ts.map +1 -1
  16. package/cjs/nodes/element/Element.cjs +22 -133
  17. package/cjs/nodes/element/Element.cjs.map +1 -1
  18. package/cjs/nodes/element/Element.d.ts +9 -16
  19. package/cjs/nodes/element/Element.d.ts.map +1 -1
  20. package/cjs/nodes/element/ElementNamedNodeMap.cjs +152 -0
  21. package/cjs/nodes/element/ElementNamedNodeMap.cjs.map +1 -0
  22. package/cjs/nodes/element/ElementNamedNodeMap.d.ts +45 -0
  23. package/cjs/nodes/element/ElementNamedNodeMap.d.ts.map +1 -0
  24. package/cjs/nodes/element/ElementUtility.cjs +20 -15
  25. package/cjs/nodes/element/ElementUtility.cjs.map +1 -1
  26. package/cjs/nodes/element/ElementUtility.d.ts.map +1 -1
  27. package/cjs/nodes/element/IElement.d.ts +5 -5
  28. package/cjs/nodes/element/IElement.d.ts.map +1 -1
  29. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +2 -26
  30. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
  31. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts +7 -11
  32. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  33. package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.cjs +44 -0
  34. package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.cjs.map +1 -0
  35. package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts +20 -0
  36. package/cjs/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts.map +1 -0
  37. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +2 -26
  38. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  39. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts +2 -9
  40. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  41. package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.cjs +41 -0
  42. package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.cjs.map +1 -0
  43. package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts +20 -0
  44. package/cjs/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts.map +1 -0
  45. package/cjs/nodes/html-element/HTMLElement.cjs +2 -20
  46. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  47. package/cjs/nodes/html-element/HTMLElement.d.ts +3 -10
  48. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  49. package/cjs/nodes/html-element/HTMLElementNamedNodeMap.cjs +35 -0
  50. package/cjs/nodes/html-element/HTMLElementNamedNodeMap.cjs.map +1 -0
  51. package/cjs/nodes/html-element/HTMLElementNamedNodeMap.d.ts +20 -0
  52. package/cjs/nodes/html-element/HTMLElementNamedNodeMap.d.ts.map +1 -0
  53. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +2 -12
  54. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  55. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts +2 -5
  56. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  57. package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.cjs +26 -0
  58. package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.cjs.map +1 -0
  59. package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts +16 -0
  60. package/cjs/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts.map +1 -0
  61. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +2 -26
  62. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  63. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts +2 -9
  64. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  65. package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.cjs +42 -0
  66. package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.cjs.map +1 -0
  67. package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts +20 -0
  68. package/cjs/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts.map +1 -0
  69. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs +2 -23
  70. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs.map +1 -1
  71. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts +4 -10
  72. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  73. package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.cjs +39 -0
  74. package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.cjs.map +1 -0
  75. package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts +20 -0
  76. package/cjs/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts.map +1 -0
  77. package/cjs/nodes/html-option-element/HTMLOptionElement.cjs +2 -30
  78. package/cjs/nodes/html-option-element/HTMLOptionElement.cjs.map +1 -1
  79. package/cjs/nodes/html-option-element/HTMLOptionElement.d.ts +2 -9
  80. package/cjs/nodes/html-option-element/HTMLOptionElement.d.ts.map +1 -1
  81. package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.cjs +45 -0
  82. package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.cjs.map +1 -0
  83. package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts +20 -0
  84. package/cjs/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts.map +1 -0
  85. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +2 -14
  86. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  87. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts +2 -9
  88. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  89. package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.cjs +26 -0
  90. package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.cjs.map +1 -0
  91. package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts +16 -0
  92. package/cjs/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts.map +1 -0
  93. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +2 -26
  94. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  95. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts +2 -9
  96. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  97. package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.cjs +42 -0
  98. package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.cjs.map +1 -0
  99. package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts +20 -0
  100. package/cjs/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts.map +1 -0
  101. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +2 -26
  102. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  103. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +2 -9
  104. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  105. package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.cjs +42 -0
  106. package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.cjs.map +1 -0
  107. package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts +20 -0
  108. package/cjs/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts.map +1 -0
  109. package/cjs/nodes/html-unknown-element/HTMLUnknownElement.cjs +5 -2
  110. package/cjs/nodes/html-unknown-element/HTMLUnknownElement.cjs.map +1 -1
  111. package/cjs/nodes/html-unknown-element/HTMLUnknownElement.d.ts.map +1 -1
  112. package/cjs/nodes/node/NodeUtility.cjs +4 -15
  113. package/cjs/nodes/node/NodeUtility.cjs.map +1 -1
  114. package/cjs/nodes/node/NodeUtility.d.ts.map +1 -1
  115. package/cjs/nodes/svg-element/SVGElement.cjs +2 -20
  116. package/cjs/nodes/svg-element/SVGElement.cjs.map +1 -1
  117. package/cjs/nodes/svg-element/SVGElement.d.ts +3 -10
  118. package/cjs/nodes/svg-element/SVGElement.d.ts.map +1 -1
  119. package/cjs/nodes/svg-element/SVGElementNamedNodeMap.cjs +35 -0
  120. package/cjs/nodes/svg-element/SVGElementNamedNodeMap.cjs.map +1 -0
  121. package/cjs/nodes/svg-element/SVGElementNamedNodeMap.d.ts +20 -0
  122. package/cjs/nodes/svg-element/SVGElementNamedNodeMap.d.ts.map +1 -0
  123. package/cjs/query-selector/SelectorItem.cjs +1 -1
  124. package/cjs/query-selector/SelectorItem.cjs.map +1 -1
  125. package/cjs/xml-serializer/XMLSerializer.cjs +3 -2
  126. package/cjs/xml-serializer/XMLSerializer.cjs.map +1 -1
  127. package/cjs/xml-serializer/XMLSerializer.d.ts.map +1 -1
  128. package/lib/css/declaration/AbstractCSSStyleDeclaration.d.ts.map +1 -1
  129. package/lib/css/declaration/AbstractCSSStyleDeclaration.js +20 -18
  130. package/lib/css/declaration/AbstractCSSStyleDeclaration.js.map +1 -1
  131. package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.d.ts.map +1 -1
  132. package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.js +4 -3
  133. package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.js.map +1 -1
  134. package/lib/named-node-map/INamedNodeMap.d.ts +26 -26
  135. package/lib/named-node-map/INamedNodeMap.d.ts.map +1 -1
  136. package/lib/named-node-map/NamedNodeMap.d.ts +57 -40
  137. package/lib/named-node-map/NamedNodeMap.d.ts.map +1 -1
  138. package/lib/named-node-map/NamedNodeMap.js +121 -81
  139. package/lib/named-node-map/NamedNodeMap.js.map +1 -1
  140. package/lib/nodes/element/Dataset.d.ts.map +1 -1
  141. package/lib/nodes/element/Dataset.js +16 -17
  142. package/lib/nodes/element/Dataset.js.map +1 -1
  143. package/lib/nodes/element/Element.d.ts +9 -16
  144. package/lib/nodes/element/Element.d.ts.map +1 -1
  145. package/lib/nodes/element/Element.js +22 -133
  146. package/lib/nodes/element/Element.js.map +1 -1
  147. package/lib/nodes/element/ElementNamedNodeMap.d.ts +45 -0
  148. package/lib/nodes/element/ElementNamedNodeMap.d.ts.map +1 -0
  149. package/lib/nodes/element/ElementNamedNodeMap.js +146 -0
  150. package/lib/nodes/element/ElementNamedNodeMap.js.map +1 -0
  151. package/lib/nodes/element/ElementUtility.d.ts.map +1 -1
  152. package/lib/nodes/element/ElementUtility.js +20 -15
  153. package/lib/nodes/element/ElementUtility.js.map +1 -1
  154. package/lib/nodes/element/IElement.d.ts +5 -5
  155. package/lib/nodes/element/IElement.d.ts.map +1 -1
  156. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts +7 -11
  157. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  158. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +2 -26
  159. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
  160. package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts +20 -0
  161. package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.d.ts.map +1 -0
  162. package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.js +38 -0
  163. package/lib/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.js.map +1 -0
  164. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts +2 -9
  165. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  166. package/lib/nodes/html-button-element/HTMLButtonElement.js +2 -26
  167. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  168. package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts +20 -0
  169. package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.d.ts.map +1 -0
  170. package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.js +35 -0
  171. package/lib/nodes/html-button-element/HTMLButtonElementNamedNodeMap.js.map +1 -0
  172. package/lib/nodes/html-element/HTMLElement.d.ts +3 -10
  173. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  174. package/lib/nodes/html-element/HTMLElement.js +2 -20
  175. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  176. package/lib/nodes/html-element/HTMLElementNamedNodeMap.d.ts +20 -0
  177. package/lib/nodes/html-element/HTMLElementNamedNodeMap.d.ts.map +1 -0
  178. package/lib/nodes/html-element/HTMLElementNamedNodeMap.js +29 -0
  179. package/lib/nodes/html-element/HTMLElementNamedNodeMap.js.map +1 -0
  180. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts +2 -5
  181. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  182. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +2 -12
  183. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  184. package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts +16 -0
  185. package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.d.ts.map +1 -0
  186. package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.js +20 -0
  187. package/lib/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.js.map +1 -0
  188. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +2 -9
  189. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  190. package/lib/nodes/html-input-element/HTMLInputElement.js +2 -26
  191. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  192. package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts +20 -0
  193. package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.d.ts.map +1 -0
  194. package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.js +36 -0
  195. package/lib/nodes/html-input-element/HTMLInputElementNamedNodeMap.js.map +1 -0
  196. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts +4 -10
  197. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  198. package/lib/nodes/html-link-element/HTMLLinkElement.js +2 -23
  199. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  200. package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts +20 -0
  201. package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.d.ts.map +1 -0
  202. package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.js +33 -0
  203. package/lib/nodes/html-link-element/HTMLLinkElementNamedNodeMap.js.map +1 -0
  204. package/lib/nodes/html-option-element/HTMLOptionElement.d.ts +2 -9
  205. package/lib/nodes/html-option-element/HTMLOptionElement.d.ts.map +1 -1
  206. package/lib/nodes/html-option-element/HTMLOptionElement.js +2 -30
  207. package/lib/nodes/html-option-element/HTMLOptionElement.js.map +1 -1
  208. package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts +20 -0
  209. package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.d.ts.map +1 -0
  210. package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.js +39 -0
  211. package/lib/nodes/html-option-element/HTMLOptionElementNamedNodeMap.js.map +1 -0
  212. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +2 -9
  213. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  214. package/lib/nodes/html-script-element/HTMLScriptElement.js +2 -14
  215. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  216. package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts +16 -0
  217. package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.d.ts.map +1 -0
  218. package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.js +20 -0
  219. package/lib/nodes/html-script-element/HTMLScriptElementNamedNodeMap.js.map +1 -0
  220. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts +2 -9
  221. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  222. package/lib/nodes/html-select-element/HTMLSelectElement.js +2 -26
  223. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  224. package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts +20 -0
  225. package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.d.ts.map +1 -0
  226. package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.js +36 -0
  227. package/lib/nodes/html-select-element/HTMLSelectElementNamedNodeMap.js.map +1 -0
  228. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +2 -9
  229. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  230. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +2 -26
  231. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  232. package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts +20 -0
  233. package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.d.ts.map +1 -0
  234. package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.js +36 -0
  235. package/lib/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.js.map +1 -0
  236. package/lib/nodes/html-unknown-element/HTMLUnknownElement.d.ts.map +1 -1
  237. package/lib/nodes/html-unknown-element/HTMLUnknownElement.js +5 -2
  238. package/lib/nodes/html-unknown-element/HTMLUnknownElement.js.map +1 -1
  239. package/lib/nodes/node/NodeUtility.d.ts.map +1 -1
  240. package/lib/nodes/node/NodeUtility.js +4 -15
  241. package/lib/nodes/node/NodeUtility.js.map +1 -1
  242. package/lib/nodes/svg-element/SVGElement.d.ts +3 -10
  243. package/lib/nodes/svg-element/SVGElement.d.ts.map +1 -1
  244. package/lib/nodes/svg-element/SVGElement.js +2 -20
  245. package/lib/nodes/svg-element/SVGElement.js.map +1 -1
  246. package/lib/nodes/svg-element/SVGElementNamedNodeMap.d.ts +20 -0
  247. package/lib/nodes/svg-element/SVGElementNamedNodeMap.d.ts.map +1 -0
  248. package/lib/nodes/svg-element/SVGElementNamedNodeMap.js +29 -0
  249. package/lib/nodes/svg-element/SVGElementNamedNodeMap.js.map +1 -0
  250. package/lib/query-selector/SelectorItem.js +1 -1
  251. package/lib/query-selector/SelectorItem.js.map +1 -1
  252. package/lib/xml-serializer/XMLSerializer.d.ts.map +1 -1
  253. package/lib/xml-serializer/XMLSerializer.js +3 -2
  254. package/lib/xml-serializer/XMLSerializer.js.map +1 -1
  255. package/package.json +1 -1
  256. package/src/css/declaration/AbstractCSSStyleDeclaration.ts +32 -20
  257. package/src/css/declaration/element-style/CSSStyleDeclarationElementStyle.ts +4 -3
  258. package/src/named-node-map/INamedNodeMap.ts +26 -26
  259. package/src/named-node-map/NamedNodeMap.ts +135 -73
  260. package/src/nodes/element/Dataset.ts +19 -17
  261. package/src/nodes/element/Element.ts +27 -176
  262. package/src/nodes/element/ElementNamedNodeMap.ts +194 -0
  263. package/src/nodes/element/ElementUtility.ts +20 -18
  264. package/src/nodes/element/IElement.ts +5 -5
  265. package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +5 -33
  266. package/src/nodes/html-anchor-element/HTMLAnchorElementNamedNodeMap.ts +48 -0
  267. package/src/nodes/html-button-element/HTMLButtonElement.ts +3 -33
  268. package/src/nodes/html-button-element/HTMLButtonElementNamedNodeMap.ts +56 -0
  269. package/src/nodes/html-element/HTMLElement.ts +4 -28
  270. package/src/nodes/html-element/HTMLElementNamedNodeMap.ts +38 -0
  271. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +4 -18
  272. package/src/nodes/html-iframe-element/HTMLIFrameElementNamedNodeMap.ts +26 -0
  273. package/src/nodes/html-input-element/HTMLInputElement.ts +4 -33
  274. package/src/nodes/html-input-element/HTMLInputElementNamedNodeMap.ts +57 -0
  275. package/src/nodes/html-link-element/HTMLLinkElement.ts +4 -32
  276. package/src/nodes/html-link-element/HTMLLinkElementNamedNodeMap.ts +43 -0
  277. package/src/nodes/html-option-element/HTMLOptionElement.ts +3 -43
  278. package/src/nodes/html-option-element/HTMLOptionElementNamedNodeMap.ts +55 -0
  279. package/src/nodes/html-script-element/HTMLScriptElement.ts +3 -18
  280. package/src/nodes/html-script-element/HTMLScriptElementNamedNodeMap.ts +26 -0
  281. package/src/nodes/html-select-element/HTMLSelectElement.ts +4 -33
  282. package/src/nodes/html-select-element/HTMLSelectElementNamedNodeMap.ts +57 -0
  283. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +3 -33
  284. package/src/nodes/html-text-area-element/HTMLTextAreaElementNamedNodeMap.ts +57 -0
  285. package/src/nodes/html-unknown-element/HTMLUnknownElement.ts +6 -2
  286. package/src/nodes/node/NodeUtility.ts +7 -24
  287. package/src/nodes/svg-element/SVGElement.ts +5 -28
  288. package/src/nodes/svg-element/SVGElementNamedNodeMap.ts +38 -0
  289. package/src/query-selector/SelectorItem.ts +1 -1
  290. package/src/xml-serializer/XMLSerializer.ts +4 -2
@@ -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 _attributes: { [k: string]: IAttr } = {};
90
+ public readonly attributes: INamedNodeMap = new ElementNamedNodeMap(this);
93
91
 
94
- private _classList: DOMTokenList = null;
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 (const key of Object.keys(this._attributes)) {
368
- const attr = Object.assign(new Attr(), this._attributes[key]);
369
- (<IElement>attr.ownerElement) = clone;
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
- return Object.keys(this._attributes);
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
- for (const name of Object.keys(this._attributes)) {
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 Object.keys(this._attributes).length > 0;
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
- const attribute = this._attributes[this._getAttributeName(name)];
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
- for (const name of Object.keys(this._attributes)) {
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
- const name = this._getAttributeName(attribute.name);
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.setAttributeNode(attribute);
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._attributes[this._getAttributeName(name)] || null;
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 name Name.
832
+ * @param localName Name.
915
833
  * @returns Replaced attribute.
916
834
  */
917
- public getAttributeNodeNS(namespace: string | null, name: string): IAttr {
918
- const attributeName = this._getAttributeName(name);
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
- const removedAttribute = this._attributes[attribute.name];
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.removeAttributeNode(attribute);
855
+ public removeAttributeNodeNS(attribute: IAttr): IAttr | null {
856
+ return this.attributes.removeNamedItemNS(attribute.namespaceURI, attribute.localName);
1006
857
  }
1007
858
 
1008
859
  /**
@@ -0,0 +1,194 @@
1
+ import NamespaceURI from '../../config/NamespaceURI.js';
2
+ import MutationRecord from '../../mutation-observer/MutationRecord.js';
3
+ import MutationTypeEnum from '../../mutation-observer/MutationTypeEnum.js';
4
+ import NamedNodeMap from '../../named-node-map/NamedNodeMap.js';
5
+ import IAttr from '../attr/IAttr.js';
6
+ import IDocument from '../document/IDocument.js';
7
+ import Element from './Element.js';
8
+ import HTMLCollection from './HTMLCollection.js';
9
+ import IElement from './IElement.js';
10
+
11
+ /**
12
+ * Named Node Map.
13
+ *
14
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
15
+ */
16
+ export default class ElementNamedNodeMap extends NamedNodeMap {
17
+ protected _ownerElement: Element;
18
+
19
+ /**
20
+ * Constructor.
21
+ *
22
+ * @param ownerElement Owner element.
23
+ */
24
+ constructor(ownerElement: Element) {
25
+ super();
26
+ this._ownerElement = ownerElement;
27
+ }
28
+
29
+ /**
30
+ * @override
31
+ */
32
+ public override getNamedItem(name: string): IAttr | null {
33
+ return this._namedItems[this._getAttributeName(name)] || null;
34
+ }
35
+
36
+ /**
37
+ * @override
38
+ */
39
+ public override getNamedItemNS(namespace: string, localName: string): IAttr | null {
40
+ return super.getNamedItemNS(namespace, this._getAttributeName(localName));
41
+ }
42
+
43
+ /**
44
+ * @override
45
+ */
46
+ public override setNamedItem(item: IAttr): IAttr | null {
47
+ if (!item.name) {
48
+ return null;
49
+ }
50
+
51
+ item.name = this._getAttributeName(item.name);
52
+ (<IElement>item.ownerElement) = this._ownerElement;
53
+ (<IDocument>item.ownerDocument) = this._ownerElement.ownerDocument;
54
+
55
+ const replacedItem = super.setNamedItem(item);
56
+ const oldValue = replacedItem ? replacedItem.value : null;
57
+
58
+ if (this._ownerElement.isConnected) {
59
+ this._ownerElement.ownerDocument['_cacheID']++;
60
+ }
61
+
62
+ if (item.name === 'class' && this._ownerElement._classList) {
63
+ this._ownerElement._classList._updateIndices();
64
+ }
65
+
66
+ if (item.name === 'id' || item.name === 'name') {
67
+ if (
68
+ this._ownerElement.parentNode &&
69
+ (<IElement>this._ownerElement.parentNode).children &&
70
+ item.value !== oldValue
71
+ ) {
72
+ if (oldValue) {
73
+ (<HTMLCollection<IElement>>(
74
+ (<IElement>this._ownerElement.parentNode).children
75
+ ))._removeNamedItem(this._ownerElement, oldValue);
76
+ }
77
+ if (item.value) {
78
+ (<HTMLCollection<IElement>>(
79
+ (<IElement>this._ownerElement.parentNode).children
80
+ ))._appendNamedItem(this._ownerElement, item.value);
81
+ }
82
+ }
83
+ }
84
+
85
+ if (
86
+ this._ownerElement.attributeChangedCallback &&
87
+ (<typeof Element>this._ownerElement.constructor)._observedAttributes &&
88
+ (<typeof Element>this._ownerElement.constructor)._observedAttributes.includes(item.name)
89
+ ) {
90
+ this._ownerElement.attributeChangedCallback(item.name, oldValue, item.value);
91
+ }
92
+
93
+ // MutationObserver
94
+ if (this._ownerElement._observers.length > 0) {
95
+ for (const observer of this._ownerElement._observers) {
96
+ if (
97
+ observer.options.attributes &&
98
+ (!observer.options.attributeFilter ||
99
+ observer.options.attributeFilter.includes(item.name))
100
+ ) {
101
+ const record = new MutationRecord();
102
+ record.target = this._ownerElement;
103
+ record.type = MutationTypeEnum.attributes;
104
+ record.attributeName = item.name;
105
+ record.oldValue = observer.options.attributeOldValue ? oldValue : null;
106
+ observer.callback([record]);
107
+ }
108
+ }
109
+ }
110
+
111
+ return replacedItem || null;
112
+ }
113
+
114
+ /**
115
+ * @override
116
+ */
117
+ public override removeNamedItem(name: string): IAttr | null {
118
+ const removedItem = super.removeNamedItem(this._getAttributeName(name));
119
+
120
+ if (!removedItem) {
121
+ return null;
122
+ }
123
+
124
+ if (this._ownerElement.isConnected) {
125
+ this._ownerElement.ownerDocument['_cacheID']++;
126
+ }
127
+
128
+ if (removedItem.name === 'class' && this._ownerElement._classList) {
129
+ this._ownerElement._classList._updateIndices();
130
+ }
131
+
132
+ if (removedItem.name === 'id' || removedItem.name === 'name') {
133
+ if (
134
+ this._ownerElement.parentNode &&
135
+ (<IElement>this._ownerElement.parentNode).children &&
136
+ removedItem.value
137
+ ) {
138
+ (<HTMLCollection<IElement>>(
139
+ (<IElement>this._ownerElement.parentNode).children
140
+ ))._removeNamedItem(this._ownerElement, removedItem.value);
141
+ }
142
+ }
143
+
144
+ if (
145
+ this._ownerElement.attributeChangedCallback &&
146
+ (<typeof Element>this._ownerElement.constructor)._observedAttributes &&
147
+ (<typeof Element>this._ownerElement.constructor)._observedAttributes.includes(
148
+ removedItem.name
149
+ )
150
+ ) {
151
+ this._ownerElement.attributeChangedCallback(removedItem.name, removedItem.value, null);
152
+ }
153
+
154
+ // MutationObserver
155
+ if (this._ownerElement._observers.length > 0) {
156
+ for (const observer of this._ownerElement._observers) {
157
+ if (
158
+ observer.options.attributes &&
159
+ (!observer.options.attributeFilter ||
160
+ observer.options.attributeFilter.includes(removedItem.name))
161
+ ) {
162
+ const record = new MutationRecord();
163
+ record.target = this._ownerElement;
164
+ record.type = MutationTypeEnum.attributes;
165
+ record.attributeName = removedItem.name;
166
+ record.oldValue = observer.options.attributeOldValue ? removedItem.value : null;
167
+ observer.callback([record]);
168
+ }
169
+ }
170
+ }
171
+
172
+ return removedItem;
173
+ }
174
+
175
+ /**
176
+ * @override
177
+ */
178
+ public override removeNamedItemNS(namespace: string, localName: string): IAttr | null {
179
+ return super.removeNamedItemNS(namespace, this._getAttributeName(localName));
180
+ }
181
+
182
+ /**
183
+ * Returns attribute name.
184
+ *
185
+ * @param name Name.
186
+ * @returns Attribute name based on namespace.
187
+ */
188
+ protected _getAttributeName(name): string {
189
+ if (this._ownerElement.namespaceURI === NamespaceURI.svg) {
190
+ return name;
191
+ }
192
+ return name.toLowerCase();
193
+ }
194
+ }
@@ -44,11 +44,12 @@ export default class ElementUtility {
44
44
  if (node.parentNode && (<IHTMLElement>node.parentNode).children) {
45
45
  const index = (<IHTMLElement>node.parentNode).children.indexOf(<IHTMLElement>node);
46
46
  if (index !== -1) {
47
- for (const attribute of NAMED_ITEM_ATTRIBUTES) {
48
- if ((<Element>node)._attributes[attribute]) {
47
+ for (const attributeName of NAMED_ITEM_ATTRIBUTES) {
48
+ const attribute = (<Element>node).attributes.getNamedItem(attributeName);
49
+ if (attribute) {
49
50
  (<HTMLCollection<IHTMLElement>>(<IElement>node.parentNode).children)._removeNamedItem(
50
51
  <IHTMLElement>node,
51
- (<Element>node)._attributes[attribute].value
52
+ attribute.value
52
53
  );
53
54
  }
54
55
  }
@@ -56,11 +57,12 @@ export default class ElementUtility {
56
57
  }
57
58
  }
58
59
 
59
- for (const attribute of NAMED_ITEM_ATTRIBUTES) {
60
- if ((<Element>node)._attributes[attribute]) {
60
+ for (const attributeName of NAMED_ITEM_ATTRIBUTES) {
61
+ const attribute = (<Element>node).attributes.getNamedItem(attributeName);
62
+ if (attribute) {
61
63
  (<HTMLCollection<IHTMLElement>>ancestorNode.children)._appendNamedItem(
62
64
  <IHTMLElement>node,
63
- (<Element>node)._attributes[attribute].value
65
+ attribute.value
64
66
  );
65
67
  }
66
68
  }
@@ -89,11 +91,12 @@ export default class ElementUtility {
89
91
  if (node.nodeType === NodeTypeEnum.elementNode) {
90
92
  const index = ancestorNode.children.indexOf(<IElement>node);
91
93
  if (index !== -1) {
92
- for (const attribute of NAMED_ITEM_ATTRIBUTES) {
93
- if ((<Element>node)._attributes[attribute]) {
94
+ for (const attributeName of NAMED_ITEM_ATTRIBUTES) {
95
+ const attribute = (<Element>node).attributes.getNamedItem(attributeName);
96
+ if (attribute) {
94
97
  (<HTMLCollection<IHTMLElement>>ancestorNode.children)._removeNamedItem(
95
98
  <IHTMLElement>node,
96
- (<Element>node)._attributes[attribute].value
99
+ attribute.value
97
100
  );
98
101
  }
99
102
  }
@@ -138,14 +141,12 @@ export default class ElementUtility {
138
141
  if (newNode.parentNode && (<IHTMLElement>newNode.parentNode).children) {
139
142
  const index = (<IHTMLElement>newNode.parentNode).children.indexOf(<IHTMLElement>newNode);
140
143
  if (index !== -1) {
141
- for (const attribute of NAMED_ITEM_ATTRIBUTES) {
142
- if ((<Element>newNode)._attributes[attribute]) {
144
+ for (const attributeName of NAMED_ITEM_ATTRIBUTES) {
145
+ const attribute = (<Element>newNode).attributes.getNamedItem(attributeName);
146
+ if (attribute) {
143
147
  (<HTMLCollection<IHTMLElement>>(
144
148
  (<IElement>newNode.parentNode).children
145
- ))._removeNamedItem(
146
- <IHTMLElement>newNode,
147
- (<Element>newNode)._attributes[attribute].value
148
- );
149
+ ))._removeNamedItem(<IHTMLElement>newNode, attribute.value);
149
150
  }
150
151
  }
151
152
 
@@ -171,11 +172,12 @@ export default class ElementUtility {
171
172
  }
172
173
  }
173
174
 
174
- for (const attribute of NAMED_ITEM_ATTRIBUTES) {
175
- if ((<Element>newNode)._attributes[attribute]) {
175
+ for (const attributeName of NAMED_ITEM_ATTRIBUTES) {
176
+ const attribute = (<Element>newNode).attributes.getNamedItem(attributeName);
177
+ if (attribute) {
176
178
  (<HTMLCollection<IHTMLElement>>ancestorNode.children)._appendNamedItem(
177
179
  <IHTMLElement>newNode,
178
- (<Element>newNode)._attributes[attribute].value
180
+ attribute.value
179
181
  );
180
182
  }
181
183
  }
@@ -238,7 +238,7 @@ export default interface IElement extends IChildNode, INonDocumentTypeChildNode,
238
238
  * @param attribute Attribute.
239
239
  * @returns Replaced attribute.
240
240
  */
241
- setAttributeNode(attribute: IAttr): IAttr;
241
+ setAttributeNode(attribute: IAttr): IAttr | null;
242
242
 
243
243
  /**
244
244
  * The setAttributeNodeNS() method adds a new Attr node to the specified element.
@@ -246,7 +246,7 @@ export default interface IElement extends IChildNode, INonDocumentTypeChildNode,
246
246
  * @param attribute Attribute.
247
247
  * @returns Replaced attribute.
248
248
  */
249
- setAttributeNodeNS(attribute: IAttr): IAttr;
249
+ setAttributeNodeNS(attribute: IAttr): IAttr | null;
250
250
 
251
251
  /**
252
252
  * Returns an Attr node.
@@ -254,7 +254,7 @@ export default interface IElement extends IChildNode, INonDocumentTypeChildNode,
254
254
  * @param name Name.
255
255
  * @returns Replaced attribute.
256
256
  */
257
- getAttributeNode(name: string): IAttr;
257
+ getAttributeNode(name: string): IAttr | null;
258
258
 
259
259
  /**
260
260
  * Returns a namespaced Attr node.
@@ -263,7 +263,7 @@ export default interface IElement extends IChildNode, INonDocumentTypeChildNode,
263
263
  * @param nodeName Node name.
264
264
  * @returns Replaced attribute.
265
265
  */
266
- getAttributeNodeNS(namespace: string | null, nodeName: string): IAttr;
266
+ getAttributeNodeNS(namespace: string | null, nodeName: string): IAttr | null;
267
267
 
268
268
  /**
269
269
  * Removes an Attr node.
@@ -279,7 +279,7 @@ export default interface IElement extends IChildNode, INonDocumentTypeChildNode,
279
279
  * @param attribute Attribute.
280
280
  * @returns Removed attribute.
281
281
  */
282
- removeAttributeNodeNS(attribute: IAttr): IAttr;
282
+ removeAttributeNodeNS(attribute: IAttr): IAttr | null;
283
283
 
284
284
  /**
285
285
  * Clones a node.
@@ -3,8 +3,9 @@ import DOMTokenList from '../../dom-token-list/DOMTokenList.js';
3
3
  import IDOMTokenList from '../../dom-token-list/IDOMTokenList.js';
4
4
  import IHTMLAnchorElement from './IHTMLAnchorElement.js';
5
5
  import { URL } from 'url';
6
- import IAttr from '../attr/IAttr.js';
7
6
  import HTMLAnchorElementUtility from './HTMLAnchorElementUtility.js';
7
+ import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
8
+ import HTMLAnchorElementNamedNodeMap from './HTMLAnchorElementNamedNodeMap.js';
8
9
 
9
10
  /**
10
11
  * HTML Anchor Element.
@@ -13,8 +14,9 @@ import HTMLAnchorElementUtility from './HTMLAnchorElementUtility.js';
13
14
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.
14
15
  */
15
16
  export default class HTMLAnchorElement extends HTMLElement implements IHTMLAnchorElement {
16
- private _relList: DOMTokenList = null;
17
- private _url: URL | null = null;
17
+ public override readonly attributes: INamedNodeMap = new HTMLAnchorElementNamedNodeMap(this);
18
+ public _relList: DOMTokenList = null;
19
+ public _url: URL | null = null;
18
20
 
19
21
  /**
20
22
  * Returns download.
@@ -413,34 +415,4 @@ export default class HTMLAnchorElement extends HTMLElement implements IHTMLAncho
413
415
  public override toString(): string {
414
416
  return this.href;
415
417
  }
416
-
417
- /**
418
- * @override
419
- */
420
- public override setAttributeNode(attribute: IAttr): IAttr | null {
421
- const replacedAttribute = super.setAttributeNode(attribute);
422
-
423
- if (attribute.name === 'rel' && this._relList) {
424
- this._relList._updateIndices();
425
- } else if (attribute.name === 'href') {
426
- this._url = HTMLAnchorElementUtility.getUrl(this.ownerDocument, attribute.value);
427
- }
428
-
429
- return replacedAttribute;
430
- }
431
-
432
- /**
433
- * @override
434
- */
435
- public override removeAttributeNode(attribute: IAttr): IAttr {
436
- super.removeAttributeNode(attribute);
437
-
438
- if (attribute.name === 'rel' && this._relList) {
439
- this._relList._updateIndices();
440
- } else if (attribute.name === 'href') {
441
- this._url = null;
442
- }
443
-
444
- return attribute;
445
- }
446
418
  }