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
@@ -0,0 +1,48 @@
1
+ import IAttr from '../attr/IAttr.js';
2
+ import HTMLElementNamedNodeMap from '../html-element/HTMLElementNamedNodeMap.js';
3
+ import HTMLAnchorElement from './HTMLAnchorElement.js';
4
+ import HTMLAnchorElementUtility from './HTMLAnchorElementUtility.js';
5
+
6
+ /**
7
+ * Named Node Map.
8
+ *
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
10
+ */
11
+ export default class HTMLAnchorElementNamedNodeMap extends HTMLElementNamedNodeMap {
12
+ protected _ownerElement: HTMLAnchorElement;
13
+
14
+ /**
15
+ * @override
16
+ */
17
+ public override setNamedItem(item: IAttr): IAttr | null {
18
+ const replacedItem = super.setNamedItem(item);
19
+
20
+ if (item.name === 'rel' && this._ownerElement._relList) {
21
+ this._ownerElement._relList._updateIndices();
22
+ } else if (item.name === 'href') {
23
+ this._ownerElement._url = HTMLAnchorElementUtility.getUrl(
24
+ this._ownerElement.ownerDocument,
25
+ item.value
26
+ );
27
+ }
28
+
29
+ return replacedItem || null;
30
+ }
31
+
32
+ /**
33
+ * @override
34
+ */
35
+ public override removeNamedItem(name: string): IAttr | null {
36
+ const removedItem = super.removeNamedItem(name);
37
+
38
+ if (removedItem) {
39
+ if (removedItem.name === 'rel' && this._ownerElement._relList) {
40
+ this._ownerElement._relList._updateIndices();
41
+ } else if (removedItem.name === 'href') {
42
+ this._ownerElement._url = null;
43
+ }
44
+ }
45
+
46
+ return removedItem;
47
+ }
48
+ }
@@ -1,7 +1,7 @@
1
1
  import Event from '../../event/Event.js';
2
2
  import EventPhaseEnum from '../../event/EventPhaseEnum.js';
3
+ import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
3
4
  import ValidityState from '../../validity-state/ValidityState.js';
4
- import IAttr from '../attr/IAttr.js';
5
5
  import IDocument from '../document/IDocument.js';
6
6
  import HTMLElement from '../html-element/HTMLElement.js';
7
7
  import HTMLFormElement from '../html-form-element/HTMLFormElement.js';
@@ -11,6 +11,7 @@ import INode from '../node/INode.js';
11
11
  import INodeList from '../node/INodeList.js';
12
12
  import NodeList from '../node/NodeList.js';
13
13
  import IShadowRoot from '../shadow-root/IShadowRoot.js';
14
+ import HTMLButtonElementNamedNodeMap from './HTMLButtonElementNamedNodeMap.js';
14
15
  import IHTMLButtonElement from './IHTMLButtonElement.js';
15
16
 
16
17
  const BUTTON_TYPES = ['submit', 'reset', 'button', 'menu'];
@@ -22,6 +23,7 @@ const BUTTON_TYPES = ['submit', 'reset', 'button', 'menu'];
22
23
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.
23
24
  */
24
25
  export default class HTMLButtonElement extends HTMLElement implements IHTMLButtonElement {
26
+ public override readonly attributes: INamedNodeMap = new HTMLButtonElementNamedNodeMap(this);
25
27
  public readonly validationMessage = '';
26
28
  public readonly validity = new ValidityState(this);
27
29
 
@@ -238,38 +240,6 @@ export default class HTMLButtonElement extends HTMLElement implements IHTMLButto
238
240
  return returnValue;
239
241
  }
240
242
 
241
- /**
242
- * @override
243
- */
244
- public override setAttributeNode(attribute: IAttr): IAttr | null {
245
- const replacedAttribute = super.setAttributeNode(attribute);
246
- const oldValue = replacedAttribute ? replacedAttribute.value : null;
247
-
248
- if ((attribute.name === 'id' || attribute.name === 'name') && this._formNode) {
249
- if (oldValue) {
250
- (<HTMLFormElement>this._formNode)._removeFormControlItem(this, oldValue);
251
- }
252
- if (attribute.value) {
253
- (<HTMLFormElement>this._formNode)._appendFormControlItem(this, attribute.value);
254
- }
255
- }
256
-
257
- return replacedAttribute;
258
- }
259
-
260
- /**
261
- * @override
262
- */
263
- public override removeAttributeNode(attribute: IAttr): IAttr {
264
- super.removeAttributeNode(attribute);
265
-
266
- if ((attribute.name === 'id' || attribute.name === 'name') && this._formNode) {
267
- (<HTMLFormElement>this._formNode)._removeFormControlItem(this, attribute.value);
268
- }
269
-
270
- return attribute;
271
- }
272
-
273
243
  /**
274
244
  * @override
275
245
  */
@@ -0,0 +1,56 @@
1
+ import IAttr from '../attr/IAttr.js';
2
+ import HTMLElementNamedNodeMap from '../html-element/HTMLElementNamedNodeMap.js';
3
+ import HTMLFormElement from '../html-form-element/HTMLFormElement.js';
4
+ import HTMLButtonElement from './HTMLButtonElement.js';
5
+
6
+ /**
7
+ * Named Node Map.
8
+ *
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
10
+ */
11
+ export default class HTMLButtonElementNamedNodeMap extends HTMLElementNamedNodeMap {
12
+ protected _ownerElement: HTMLButtonElement;
13
+
14
+ /**
15
+ * @override
16
+ */
17
+ public override setNamedItem(item: IAttr): IAttr | null {
18
+ const replacedItem = super.setNamedItem(item);
19
+
20
+ if ((item.name === 'id' || item.name === 'name') && this._ownerElement._formNode) {
21
+ if (replacedItem?.value) {
22
+ (<HTMLFormElement>this._ownerElement._formNode)._removeFormControlItem(
23
+ this._ownerElement,
24
+ replacedItem.value
25
+ );
26
+ }
27
+ if (item.value) {
28
+ (<HTMLFormElement>this._ownerElement._formNode)._appendFormControlItem(
29
+ this._ownerElement,
30
+ item.value
31
+ );
32
+ }
33
+ }
34
+
35
+ return replacedItem || null;
36
+ }
37
+
38
+ /**
39
+ * @override
40
+ */
41
+ public override removeNamedItem(name: string): IAttr | null {
42
+ const removedItem = super.removeNamedItem(name);
43
+
44
+ if (
45
+ (removedItem.name === 'id' || removedItem.name === 'name') &&
46
+ this._ownerElement._formNode
47
+ ) {
48
+ (<HTMLFormElement>this._ownerElement._formNode)._removeFormControlItem(
49
+ this._ownerElement,
50
+ removedItem.value
51
+ );
52
+ }
53
+
54
+ return removedItem;
55
+ }
56
+ }
@@ -1,13 +1,14 @@
1
1
  import Element from '../element/Element.js';
2
2
  import IHTMLElement from './IHTMLElement.js';
3
3
  import CSSStyleDeclaration from '../../css/declaration/CSSStyleDeclaration.js';
4
- import IAttr from '../attr/IAttr.js';
5
4
  import PointerEvent from '../../event/events/PointerEvent.js';
6
5
  import Dataset from '../element/Dataset.js';
7
6
  import NodeTypeEnum from '../node/NodeTypeEnum.js';
8
7
  import DOMException from '../../exception/DOMException.js';
9
8
  import Event from '../../event/Event.js';
10
9
  import HTMLElementUtility from './HTMLElementUtility.js';
10
+ import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
11
+ import HTMLElementNamedNodeMap from './HTMLElementNamedNodeMap.js';
11
12
 
12
13
  /**
13
14
  * HTML Element.
@@ -16,6 +17,7 @@ import HTMLElementUtility from './HTMLElementUtility.js';
16
17
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.
17
18
  */
18
19
  export default class HTMLElement extends Element implements IHTMLElement {
20
+ public override readonly attributes: INamedNodeMap = new HTMLElementNamedNodeMap(this);
19
21
  public readonly accessKey = '';
20
22
  public readonly accessKeyLabel = '';
21
23
  public readonly contentEditable = 'inherit';
@@ -27,7 +29,7 @@ export default class HTMLElement extends Element implements IHTMLElement {
27
29
  public readonly clientHeight = 0;
28
30
  public readonly clientWidth = 0;
29
31
 
30
- private _style: CSSStyleDeclaration = null;
32
+ public _style: CSSStyleDeclaration = null;
31
33
  private _dataset: Dataset = null;
32
34
 
33
35
  // Events
@@ -322,32 +324,6 @@ export default class HTMLElement extends Element implements IHTMLElement {
322
324
  HTMLElementUtility.focus(this);
323
325
  }
324
326
 
325
- /**
326
- * @override
327
- */
328
- public setAttributeNode(attribute: IAttr): IAttr | null {
329
- const replacedAttribute = super.setAttributeNode(attribute);
330
-
331
- if (attribute.name === 'style' && this._style) {
332
- this._style.cssText = attribute.value;
333
- }
334
-
335
- return replacedAttribute;
336
- }
337
-
338
- /**
339
- * @override
340
- */
341
- public removeAttributeNode(attribute: IAttr): IAttr {
342
- super.removeAttributeNode(attribute);
343
-
344
- if (attribute.name === 'style' && this._style) {
345
- this._style.cssText = '';
346
- }
347
-
348
- return attribute;
349
- }
350
-
351
327
  /**
352
328
  * @override
353
329
  */
@@ -0,0 +1,38 @@
1
+ import IAttr from '../attr/IAttr.js';
2
+ import ElementNamedNodeMap from '../element/ElementNamedNodeMap.js';
3
+ import HTMLElement from './HTMLElement.js';
4
+
5
+ /**
6
+ * Named Node Map.
7
+ *
8
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
9
+ */
10
+ export default class HTMLElementNamedNodeMap extends ElementNamedNodeMap {
11
+ protected _ownerElement: HTMLElement;
12
+
13
+ /**
14
+ * @override
15
+ */
16
+ public override setNamedItem(item: IAttr): IAttr | null {
17
+ const replacedItem = super.setNamedItem(item);
18
+
19
+ if (item.name === 'style' && this._ownerElement._style) {
20
+ this._ownerElement._style.cssText = item.value;
21
+ }
22
+
23
+ return replacedItem || null;
24
+ }
25
+
26
+ /**
27
+ * @override
28
+ */
29
+ public override removeNamedItem(name: string): IAttr | null {
30
+ const removedItem = super.removeNamedItem(name);
31
+
32
+ if (removedItem && removedItem.name === 'style' && this._ownerElement._style) {
33
+ this._ownerElement._style.cssText = '';
34
+ }
35
+
36
+ return removedItem;
37
+ }
38
+ }
@@ -6,7 +6,8 @@ import INode from '../node/INode.js';
6
6
  import IFrameCrossOriginWindow from './IFrameCrossOriginWindow.js';
7
7
  import IHTMLIFrameElement from './IHTMLIFrameElement.js';
8
8
  import HTMLIFrameUtility from './HTMLIFrameUtility.js';
9
- import IAttr from '../attr/IAttr.js';
9
+ import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
10
+ import HTMLIFrameElementNamedNodeMap from './HTMLIFrameElementNamedNodeMap.js';
10
11
 
11
12
  /**
12
13
  * HTML Iframe Element.
@@ -15,6 +16,8 @@ import IAttr from '../attr/IAttr.js';
15
16
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.
16
17
  */
17
18
  export default class HTMLIFrameElement extends HTMLElement implements IHTMLIFrameElement {
19
+ public override readonly attributes: INamedNodeMap = new HTMLIFrameElementNamedNodeMap(this);
20
+
18
21
  // Events
19
22
  public onload: (event: Event) => void | null = null;
20
23
  public onerror: (event: Event) => void | null = null;
@@ -180,23 +183,6 @@ export default class HTMLIFrameElement extends HTMLElement implements IHTMLIFram
180
183
  }
181
184
  }
182
185
 
183
- /**
184
- * @override
185
- */
186
- public override setAttributeNode(attribute: IAttr): IAttr | null {
187
- const replacedAttribute = super.setAttributeNode(attribute);
188
-
189
- if (
190
- attribute.name === 'src' &&
191
- attribute.value &&
192
- attribute.value !== replacedAttribute?.value
193
- ) {
194
- HTMLIFrameUtility.loadPage(this);
195
- }
196
-
197
- return replacedAttribute;
198
- }
199
-
200
186
  /**
201
187
  * Clones a node.
202
188
  *
@@ -0,0 +1,26 @@
1
+ import IAttr from '../attr/IAttr.js';
2
+ import HTMLElementNamedNodeMap from '../html-element/HTMLElementNamedNodeMap.js';
3
+ import HTMLIFrameElement from './HTMLIFrameElement.js';
4
+ import HTMLIFrameUtility from './HTMLIFrameUtility.js';
5
+
6
+ /**
7
+ * Named Node Map.
8
+ *
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
10
+ */
11
+ export default class HTMLIFrameElementNamedNodeMap extends HTMLElementNamedNodeMap {
12
+ protected _ownerElement: HTMLIFrameElement;
13
+
14
+ /**
15
+ * @override
16
+ */
17
+ public override setNamedItem(item: IAttr): IAttr | null {
18
+ const replacedAttribute = super.setNamedItem(item);
19
+
20
+ if (item.name === 'src' && item.value && item.value !== replacedAttribute?.value) {
21
+ HTMLIFrameUtility.loadPage(this._ownerElement);
22
+ }
23
+
24
+ return replacedAttribute || null;
25
+ }
26
+ }
@@ -13,7 +13,6 @@ import HTMLInputElementValueStepping from './HTMLInputElementValueStepping.js';
13
13
  import FileList from './FileList.js';
14
14
  import File from '../../file/File.js';
15
15
  import IFileList from './IFileList.js';
16
- import IAttr from '../attr/IAttr.js';
17
16
  import INode from '../node/INode.js';
18
17
  import HTMLFormElement from '../html-form-element/HTMLFormElement.js';
19
18
  import INodeList from '../node/INodeList.js';
@@ -23,6 +22,8 @@ import IShadowRoot from '../shadow-root/IShadowRoot.js';
23
22
  import NodeList from '../node/NodeList.js';
24
23
  import EventPhaseEnum from '../../event/EventPhaseEnum.js';
25
24
  import { dateIsoWeek, isoWeekDate } from './HTMLInputDateUtility.js';
25
+ import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
26
+ import HTMLInputElementNamedNodeMap from './HTMLInputElementNamedNodeMap.js';
26
27
 
27
28
  /**
28
29
  * HTML Input Element.
@@ -34,6 +35,8 @@ import { dateIsoWeek, isoWeekDate } from './HTMLInputDateUtility.js';
34
35
  * https://github.com/jsdom/jsdom/blob/master/lib/jsdom/living/nodes/nodes/HTMLInputElement-impl.js (MIT licensed).
35
36
  */
36
37
  export default class HTMLInputElement extends HTMLElement implements IHTMLInputElement {
38
+ public override readonly attributes: INamedNodeMap = new HTMLInputElementNamedNodeMap(this);
39
+
37
40
  // Related to parent form.
38
41
  public formAction = '';
39
42
  public formMethod = '';
@@ -1224,38 +1227,6 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
1224
1227
  return returnValue;
1225
1228
  }
1226
1229
 
1227
- /**
1228
- * @override
1229
- */
1230
- public override setAttributeNode(attribute: IAttr): IAttr | null {
1231
- const replacedAttribute = super.setAttributeNode(attribute);
1232
- const oldValue = replacedAttribute ? replacedAttribute.value : null;
1233
-
1234
- if ((attribute.name === 'id' || attribute.name === 'name') && this._formNode) {
1235
- if (oldValue) {
1236
- (<HTMLFormElement>this._formNode)._removeFormControlItem(this, oldValue);
1237
- }
1238
- if (attribute.value) {
1239
- (<HTMLFormElement>this._formNode)._appendFormControlItem(this, attribute.value);
1240
- }
1241
- }
1242
-
1243
- return replacedAttribute;
1244
- }
1245
-
1246
- /**
1247
- * @override
1248
- */
1249
- public override removeAttributeNode(attribute: IAttr): IAttr {
1250
- super.removeAttributeNode(attribute);
1251
-
1252
- if ((attribute.name === 'id' || attribute.name === 'name') && this._formNode) {
1253
- (<HTMLFormElement>this._formNode)._removeFormControlItem(this, attribute.value);
1254
- }
1255
-
1256
- return attribute;
1257
- }
1258
-
1259
1230
  /**
1260
1231
  * @override
1261
1232
  */
@@ -0,0 +1,57 @@
1
+ import IAttr from '../attr/IAttr.js';
2
+ import HTMLElementNamedNodeMap from '../html-element/HTMLElementNamedNodeMap.js';
3
+ import HTMLFormElement from '../html-form-element/HTMLFormElement.js';
4
+ import HTMLInputElement from './HTMLInputElement.js';
5
+
6
+ /**
7
+ * Named Node Map.
8
+ *
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
10
+ */
11
+ export default class HTMLInputElementNamedNodeMap extends HTMLElementNamedNodeMap {
12
+ protected _ownerElement: HTMLInputElement;
13
+
14
+ /**
15
+ * @override
16
+ */
17
+ public override setNamedItem(item: IAttr): IAttr | null {
18
+ const replacedItem = super.setNamedItem(item);
19
+
20
+ if ((item.name === 'id' || item.name === 'name') && this._ownerElement._formNode) {
21
+ if (replacedItem && replacedItem.value) {
22
+ (<HTMLFormElement>this._ownerElement._formNode)._removeFormControlItem(
23
+ this._ownerElement,
24
+ replacedItem.value
25
+ );
26
+ }
27
+ if (item.value) {
28
+ (<HTMLFormElement>this._ownerElement._formNode)._appendFormControlItem(
29
+ this._ownerElement,
30
+ item.value
31
+ );
32
+ }
33
+ }
34
+
35
+ return replacedItem || null;
36
+ }
37
+
38
+ /**
39
+ * @override
40
+ */
41
+ public override removeNamedItem(name: string): IAttr | null {
42
+ const removedItem = super.removeNamedItem(name);
43
+
44
+ if (
45
+ removedItem &&
46
+ (removedItem.name === 'id' || removedItem.name === 'name') &&
47
+ this._ownerElement._formNode
48
+ ) {
49
+ (<HTMLFormElement>this._ownerElement._formNode)._removeFormControlItem(
50
+ this._ownerElement,
51
+ removedItem.value
52
+ );
53
+ }
54
+
55
+ return removedItem;
56
+ }
57
+ }
@@ -1,4 +1,3 @@
1
- import IAttr from '../attr/IAttr.js';
2
1
  import CSSStyleSheet from '../../css/CSSStyleSheet.js';
3
2
  import HTMLElement from '../html-element/HTMLElement.js';
4
3
  import IHTMLLinkElement from './IHTMLLinkElement.js';
@@ -8,6 +7,8 @@ import INode from '../../nodes/node/INode.js';
8
7
  import DOMTokenList from '../../dom-token-list/DOMTokenList.js';
9
8
  import IDOMTokenList from '../../dom-token-list/IDOMTokenList.js';
10
9
  import HTMLLinkElementUtility from './HTMLLinkElementUtility.js';
10
+ import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
11
+ import HTMLLinkElementNamedNodeMap from './HTMLLinkElementNamedNodeMap.js';
11
12
 
12
13
  /**
13
14
  * HTML Link Element.
@@ -16,11 +17,12 @@ import HTMLLinkElementUtility from './HTMLLinkElementUtility.js';
16
17
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.
17
18
  */
18
19
  export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkElement {
20
+ public override readonly attributes: INamedNodeMap = new HTMLLinkElementNamedNodeMap(this);
19
21
  public onerror: (event: ErrorEvent) => void = null;
20
22
  public onload: (event: Event) => void = null;
21
23
  public readonly sheet: CSSStyleSheet = null;
22
24
  public _evaluateCSS = true;
23
- private _relList: DOMTokenList = null;
25
+ public _relList: DOMTokenList = null;
24
26
 
25
27
  /**
26
28
  * Returns rel list.
@@ -178,36 +180,6 @@ export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkEle
178
180
  this.setAttribute('type', type);
179
181
  }
180
182
 
181
- /**
182
- * @override
183
- */
184
- public override setAttributeNode(attribute: IAttr): IAttr | null {
185
- const replacedAttribute = super.setAttributeNode(attribute);
186
-
187
- if (attribute.name === 'rel' && this._relList) {
188
- this._relList._updateIndices();
189
- }
190
-
191
- if (attribute.name === 'rel' || attribute.name === 'href') {
192
- HTMLLinkElementUtility.loadExternalStylesheet(this);
193
- }
194
-
195
- return replacedAttribute;
196
- }
197
-
198
- /**
199
- * @override
200
- */
201
- public override removeAttributeNode(attribute: IAttr): IAttr {
202
- super.removeAttributeNode(attribute);
203
-
204
- if (attribute.name === 'rel' && this._relList) {
205
- this._relList._updateIndices();
206
- }
207
-
208
- return attribute;
209
- }
210
-
211
183
  /**
212
184
  * @override
213
185
  */
@@ -0,0 +1,43 @@
1
+ import IAttr from '../attr/IAttr.js';
2
+ import HTMLElementNamedNodeMap from '../html-element/HTMLElementNamedNodeMap.js';
3
+ import HTMLLinkElement from './HTMLLinkElement.js';
4
+ import HTMLLinkElementUtility from './HTMLLinkElementUtility.js';
5
+
6
+ /**
7
+ * Named Node Map.
8
+ *
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap
10
+ */
11
+ export default class HTMLLinkElementNamedNodeMap extends HTMLElementNamedNodeMap {
12
+ protected _ownerElement: HTMLLinkElement;
13
+
14
+ /**
15
+ * @override
16
+ */
17
+ public override setNamedItem(item: IAttr): IAttr | null {
18
+ const replacedItem = super.setNamedItem(item);
19
+
20
+ if (item.name === 'rel' && this._ownerElement._relList) {
21
+ this._ownerElement._relList._updateIndices();
22
+ }
23
+
24
+ if (item.name === 'rel' || item.name === 'href') {
25
+ HTMLLinkElementUtility.loadExternalStylesheet(this._ownerElement);
26
+ }
27
+
28
+ return replacedItem || null;
29
+ }
30
+
31
+ /**
32
+ * @override
33
+ */
34
+ public override removeNamedItem(name: string): IAttr | null {
35
+ const removedItem = super.removeNamedItem(name);
36
+
37
+ if (removedItem && removedItem.name === 'rel' && this._ownerElement._relList) {
38
+ this._ownerElement._relList._updateIndices();
39
+ }
40
+
41
+ return removedItem;
42
+ }
43
+ }
@@ -1,8 +1,9 @@
1
- import IAttr from '../attr/IAttr.js';
1
+ import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
2
2
  import HTMLElement from '../html-element/HTMLElement.js';
3
3
  import IHTMLFormElement from '../html-form-element/IHTMLFormElement.js';
4
4
  import HTMLSelectElement from '../html-select-element/HTMLSelectElement.js';
5
5
  import INode from '../node/INode.js';
6
+ import HTMLOptionElementNamedNodeMap from './HTMLOptionElementNamedNodeMap.js';
6
7
  import IHTMLOptionElement from './IHTMLOptionElement.js';
7
8
 
8
9
  /**
@@ -12,6 +13,7 @@ import IHTMLOptionElement from './IHTMLOptionElement.js';
12
13
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.
13
14
  */
14
15
  export default class HTMLOptionElement extends HTMLElement implements IHTMLOptionElement {
16
+ public override readonly attributes: INamedNodeMap = new HTMLOptionElementNamedNodeMap(this);
15
17
  public _index: number;
16
18
  public _selectedness = false;
17
19
  public _dirtyness = false;
@@ -117,48 +119,6 @@ export default class HTMLOptionElement extends HTMLElement implements IHTMLOptio
117
119
  this.setAttribute('value', value);
118
120
  }
119
121
 
120
- /**
121
- * @override
122
- */
123
- public setAttributeNode(attribute: IAttr): IAttr | null {
124
- const replacedAttribute = super.setAttributeNode(attribute);
125
-
126
- if (
127
- !this._dirtyness &&
128
- attribute.name === 'selected' &&
129
- replacedAttribute?.value !== attribute.value
130
- ) {
131
- const selectNode = <HTMLSelectElement>this._selectNode;
132
-
133
- this._selectedness = true;
134
-
135
- if (selectNode) {
136
- selectNode._updateOptionItems(this);
137
- }
138
- }
139
-
140
- return replacedAttribute;
141
- }
142
-
143
- /**
144
- * @override
145
- */
146
- public removeAttributeNode(attribute: IAttr): IAttr {
147
- super.removeAttributeNode(attribute);
148
-
149
- if (!this._dirtyness && attribute.name === 'selected') {
150
- const selectNode = <HTMLSelectElement>this._selectNode;
151
-
152
- this._selectedness = false;
153
-
154
- if (selectNode) {
155
- selectNode._updateOptionItems();
156
- }
157
- }
158
-
159
- return attribute;
160
- }
161
-
162
122
  /**
163
123
  * @override
164
124
  */