happy-dom 13.6.1 → 13.7.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.

Files changed (351) hide show
  1. package/cjs/browser/BrowserFrame.cjs +12 -2
  2. package/cjs/browser/BrowserFrame.cjs.map +1 -1
  3. package/cjs/browser/BrowserFrame.d.ts.map +1 -1
  4. package/cjs/browser/detached-browser/DetachedBrowserFrame.cjs +12 -2
  5. package/cjs/browser/detached-browser/DetachedBrowserFrame.cjs.map +1 -1
  6. package/cjs/browser/detached-browser/DetachedBrowserFrame.d.ts.map +1 -1
  7. package/cjs/browser/utilities/BrowserFrameFactory.cjs +5 -0
  8. package/cjs/browser/utilities/BrowserFrameFactory.cjs.map +1 -1
  9. package/cjs/browser/utilities/BrowserFrameFactory.d.ts.map +1 -1
  10. package/cjs/browser/utilities/BrowserFrameNavigator.cjs +20 -13
  11. package/cjs/browser/utilities/BrowserFrameNavigator.cjs.map +1 -1
  12. package/cjs/browser/utilities/BrowserFrameNavigator.d.ts +21 -10
  13. package/cjs/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  14. package/cjs/browser/utilities/BrowserFrameURL.cjs +2 -2
  15. package/cjs/browser/utilities/BrowserFrameURL.cjs.map +1 -1
  16. package/cjs/browser/utilities/BrowserFrameURL.d.ts.map +1 -1
  17. package/cjs/config/IHTMLElementTagNameMap.cjs +3 -0
  18. package/cjs/config/IHTMLElementTagNameMap.cjs.map +1 -0
  19. package/cjs/config/IHTMLElementTagNameMap.d.ts +146 -0
  20. package/cjs/config/IHTMLElementTagNameMap.d.ts.map +1 -0
  21. package/cjs/config/ISVGElementTagNameMap.cjs +3 -0
  22. package/cjs/config/ISVGElementTagNameMap.cjs.map +1 -0
  23. package/cjs/config/ISVGElementTagNameMap.d.ts +67 -0
  24. package/cjs/config/ISVGElementTagNameMap.d.ts.map +1 -0
  25. package/cjs/event/EventTarget.cjs +1 -1
  26. package/cjs/event/EventTarget.cjs.map +1 -1
  27. package/cjs/event/events/HashChangeEvent.cjs +26 -0
  28. package/cjs/event/events/HashChangeEvent.cjs.map +1 -0
  29. package/cjs/event/events/HashChangeEvent.d.ts +19 -0
  30. package/cjs/event/events/HashChangeEvent.d.ts.map +1 -0
  31. package/cjs/event/events/IHashChangeEventInit.cjs +3 -0
  32. package/cjs/event/events/IHashChangeEventInit.cjs.map +1 -0
  33. package/cjs/event/events/IHashChangeEventInit.d.ts +6 -0
  34. package/cjs/event/events/IHashChangeEventInit.d.ts.map +1 -0
  35. package/cjs/fetch/Fetch.cjs +3 -3
  36. package/cjs/fetch/Fetch.cjs.map +1 -1
  37. package/cjs/fetch/Request.cjs +2 -2
  38. package/cjs/fetch/Request.cjs.map +1 -1
  39. package/cjs/fetch/SyncFetch.cjs +3 -3
  40. package/cjs/fetch/SyncFetch.cjs.map +1 -1
  41. package/cjs/fetch/utilities/FetchRequestHeaderUtility.cjs +5 -3
  42. package/cjs/fetch/utilities/FetchRequestHeaderUtility.cjs.map +1 -1
  43. package/cjs/fetch/utilities/FetchRequestHeaderUtility.d.ts.map +1 -1
  44. package/cjs/fetch/utilities/FetchRequestReferrerUtility.cjs +1 -1
  45. package/cjs/fetch/utilities/FetchRequestReferrerUtility.cjs.map +1 -1
  46. package/cjs/fetch/utilities/FetchRequestReferrerUtility.d.ts.map +1 -1
  47. package/cjs/form-data/FormData.cjs +1 -1
  48. package/cjs/form-data/FormData.cjs.map +1 -1
  49. package/cjs/form-data/FormData.d.ts +1 -1
  50. package/cjs/form-data/FormData.d.ts.map +1 -1
  51. package/cjs/index.cjs +7 -3
  52. package/cjs/index.cjs.map +1 -1
  53. package/cjs/index.d.ts +7 -3
  54. package/cjs/index.d.ts.map +1 -1
  55. package/cjs/location/Location.cjs +270 -0
  56. package/cjs/location/Location.cjs.map +1 -0
  57. package/cjs/location/Location.d.ts +144 -0
  58. package/cjs/location/Location.d.ts.map +1 -0
  59. package/cjs/named-node-map/NamedNodeMap.cjs +2 -1
  60. package/cjs/named-node-map/NamedNodeMap.cjs.map +1 -1
  61. package/cjs/named-node-map/NamedNodeMap.d.ts.map +1 -1
  62. package/cjs/nodes/document/Document.cjs +4 -4
  63. package/cjs/nodes/document/Document.cjs.map +1 -1
  64. package/cjs/nodes/document/Document.d.ts +114 -6
  65. package/cjs/nodes/document/Document.d.ts.map +1 -1
  66. package/cjs/nodes/document/IDocument.d.ts +28 -12
  67. package/cjs/nodes/document/IDocument.d.ts.map +1 -1
  68. package/cjs/nodes/document-fragment/DocumentFragment.cjs +2 -2
  69. package/cjs/nodes/document-fragment/DocumentFragment.cjs.map +1 -1
  70. package/cjs/nodes/document-fragment/DocumentFragment.d.ts +31 -1
  71. package/cjs/nodes/document-fragment/DocumentFragment.d.ts.map +1 -1
  72. package/cjs/nodes/document-fragment/IDocumentFragment.d.ts +6 -0
  73. package/cjs/nodes/document-fragment/IDocumentFragment.d.ts.map +1 -1
  74. package/cjs/nodes/element/Element.cjs +1 -1
  75. package/cjs/nodes/element/Element.cjs.map +1 -1
  76. package/cjs/nodes/element/Element.d.ts +61 -1
  77. package/cjs/nodes/element/Element.d.ts.map +1 -1
  78. package/cjs/nodes/element/HTMLCollection.cjs +2 -1
  79. package/cjs/nodes/element/HTMLCollection.cjs.map +1 -1
  80. package/cjs/nodes/element/HTMLCollection.d.ts.map +1 -1
  81. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +2 -0
  82. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
  83. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  84. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +93 -4
  85. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  86. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts +49 -1
  87. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  88. package/cjs/nodes/html-button-element/IHTMLButtonElement.d.ts +5 -1
  89. package/cjs/nodes/html-button-element/IHTMLButtonElement.d.ts.map +1 -1
  90. package/cjs/nodes/html-form-element/HTMLFormControlsCollection.cjs +2 -1
  91. package/cjs/nodes/html-form-element/HTMLFormControlsCollection.cjs.map +1 -1
  92. package/cjs/nodes/html-form-element/HTMLFormControlsCollection.d.ts.map +1 -1
  93. package/cjs/nodes/html-form-element/HTMLFormElement.cjs +104 -9
  94. package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
  95. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts +8 -2
  96. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  97. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +14 -0
  98. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  99. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts +10 -0
  100. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  101. package/cjs/nodes/html-iframe-element/HTMLIFrameElementPageLoader.cjs +4 -1
  102. package/cjs/nodes/html-iframe-element/HTMLIFrameElementPageLoader.cjs.map +1 -1
  103. package/cjs/nodes/html-iframe-element/HTMLIFrameElementPageLoader.d.ts.map +1 -1
  104. package/cjs/nodes/html-iframe-element/IHTMLIFrameElement.d.ts +1 -0
  105. package/cjs/nodes/html-iframe-element/IHTMLIFrameElement.d.ts.map +1 -1
  106. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +100 -52
  107. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  108. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts +49 -23
  109. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  110. package/cjs/nodes/html-input-element/IHTMLInputElement.d.ts +2 -0
  111. package/cjs/nodes/html-input-element/IHTMLInputElement.d.ts.map +1 -1
  112. package/cjs/nodes/html-label-element/HTMLLabelElement.cjs +1 -0
  113. package/cjs/nodes/html-label-element/HTMLLabelElement.cjs.map +1 -1
  114. package/cjs/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
  115. package/cjs/nodes/html-link-element/HTMLLinkElementStyleSheetLoader.cjs +1 -1
  116. package/cjs/nodes/html-link-element/HTMLLinkElementStyleSheetLoader.cjs.map +1 -1
  117. package/cjs/nodes/html-script-element/HTMLScriptElementScriptLoader.cjs +1 -1
  118. package/cjs/nodes/html-script-element/HTMLScriptElementScriptLoader.cjs.map +1 -1
  119. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  120. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  121. package/cjs/nodes/node/Node.cjs.map +1 -1
  122. package/cjs/nodes/node/Node.d.ts.map +1 -1
  123. package/cjs/nodes/parent-node/IParentNode.d.ts +17 -0
  124. package/cjs/nodes/parent-node/IParentNode.d.ts.map +1 -1
  125. package/cjs/nodes/parent-node/ParentNodeUtility.cjs.map +1 -1
  126. package/cjs/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  127. package/cjs/query-selector/QuerySelector.cjs.map +1 -1
  128. package/cjs/query-selector/QuerySelector.d.ts +34 -0
  129. package/cjs/query-selector/QuerySelector.d.ts.map +1 -1
  130. package/cjs/query-selector/SelectorItem.cjs +6 -0
  131. package/cjs/query-selector/SelectorItem.cjs.map +1 -1
  132. package/cjs/query-selector/SelectorItem.d.ts.map +1 -1
  133. package/cjs/version.cjs +1 -1
  134. package/cjs/window/BrowserWindow.cjs +9 -3
  135. package/cjs/window/BrowserWindow.cjs.map +1 -1
  136. package/cjs/window/BrowserWindow.d.ts +5 -4
  137. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  138. package/cjs/window/CrossOriginBrowserWindow.d.ts +1 -1
  139. package/cjs/window/CrossOriginBrowserWindow.d.ts.map +1 -1
  140. package/cjs/window/IBrowserWindow.d.ts +3 -2
  141. package/cjs/window/IBrowserWindow.d.ts.map +1 -1
  142. package/cjs/window/ICrossOriginBrowserWindow.d.ts +1 -1
  143. package/cjs/window/ICrossOriginBrowserWindow.d.ts.map +1 -1
  144. package/cjs/window/WindowPageOpenUtility.cjs +4 -2
  145. package/cjs/window/WindowPageOpenUtility.cjs.map +1 -1
  146. package/cjs/window/WindowPageOpenUtility.d.ts.map +1 -1
  147. package/lib/browser/BrowserFrame.d.ts.map +1 -1
  148. package/lib/browser/BrowserFrame.js +12 -2
  149. package/lib/browser/BrowserFrame.js.map +1 -1
  150. package/lib/browser/detached-browser/DetachedBrowserFrame.d.ts.map +1 -1
  151. package/lib/browser/detached-browser/DetachedBrowserFrame.js +12 -2
  152. package/lib/browser/detached-browser/DetachedBrowserFrame.js.map +1 -1
  153. package/lib/browser/utilities/BrowserFrameFactory.d.ts.map +1 -1
  154. package/lib/browser/utilities/BrowserFrameFactory.js +5 -0
  155. package/lib/browser/utilities/BrowserFrameFactory.js.map +1 -1
  156. package/lib/browser/utilities/BrowserFrameNavigator.d.ts +21 -10
  157. package/lib/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  158. package/lib/browser/utilities/BrowserFrameNavigator.js +20 -13
  159. package/lib/browser/utilities/BrowserFrameNavigator.js.map +1 -1
  160. package/lib/browser/utilities/BrowserFrameURL.d.ts.map +1 -1
  161. package/lib/browser/utilities/BrowserFrameURL.js +2 -2
  162. package/lib/browser/utilities/BrowserFrameURL.js.map +1 -1
  163. package/lib/config/IHTMLElementTagNameMap.d.ts +146 -0
  164. package/lib/config/IHTMLElementTagNameMap.d.ts.map +1 -0
  165. package/lib/config/IHTMLElementTagNameMap.js +2 -0
  166. package/lib/config/IHTMLElementTagNameMap.js.map +1 -0
  167. package/lib/config/ISVGElementTagNameMap.d.ts +67 -0
  168. package/lib/config/ISVGElementTagNameMap.d.ts.map +1 -0
  169. package/lib/config/ISVGElementTagNameMap.js +2 -0
  170. package/lib/config/ISVGElementTagNameMap.js.map +1 -0
  171. package/lib/event/EventTarget.js +1 -1
  172. package/lib/event/EventTarget.js.map +1 -1
  173. package/lib/event/events/HashChangeEvent.d.ts +19 -0
  174. package/lib/event/events/HashChangeEvent.d.ts.map +1 -0
  175. package/lib/event/events/HashChangeEvent.js +20 -0
  176. package/lib/event/events/HashChangeEvent.js.map +1 -0
  177. package/lib/event/events/IHashChangeEventInit.d.ts +6 -0
  178. package/lib/event/events/IHashChangeEventInit.d.ts.map +1 -0
  179. package/lib/event/events/IHashChangeEventInit.js +2 -0
  180. package/lib/event/events/IHashChangeEventInit.js.map +1 -0
  181. package/lib/fetch/Fetch.js +3 -3
  182. package/lib/fetch/Fetch.js.map +1 -1
  183. package/lib/fetch/Request.js +2 -2
  184. package/lib/fetch/Request.js.map +1 -1
  185. package/lib/fetch/SyncFetch.js +3 -3
  186. package/lib/fetch/SyncFetch.js.map +1 -1
  187. package/lib/fetch/utilities/FetchRequestHeaderUtility.d.ts.map +1 -1
  188. package/lib/fetch/utilities/FetchRequestHeaderUtility.js +4 -2
  189. package/lib/fetch/utilities/FetchRequestHeaderUtility.js.map +1 -1
  190. package/lib/fetch/utilities/FetchRequestReferrerUtility.d.ts.map +1 -1
  191. package/lib/fetch/utilities/FetchRequestReferrerUtility.js +1 -1
  192. package/lib/fetch/utilities/FetchRequestReferrerUtility.js.map +1 -1
  193. package/lib/form-data/FormData.d.ts +1 -1
  194. package/lib/form-data/FormData.d.ts.map +1 -1
  195. package/lib/form-data/FormData.js +1 -1
  196. package/lib/form-data/FormData.js.map +1 -1
  197. package/lib/index.d.ts +7 -3
  198. package/lib/index.d.ts.map +1 -1
  199. package/lib/index.js +4 -2
  200. package/lib/index.js.map +1 -1
  201. package/lib/location/Location.d.ts +144 -0
  202. package/lib/location/Location.d.ts.map +1 -0
  203. package/lib/location/Location.js +241 -0
  204. package/lib/location/Location.js.map +1 -0
  205. package/lib/named-node-map/NamedNodeMap.d.ts.map +1 -1
  206. package/lib/named-node-map/NamedNodeMap.js +2 -1
  207. package/lib/named-node-map/NamedNodeMap.js.map +1 -1
  208. package/lib/nodes/document/Document.d.ts +114 -6
  209. package/lib/nodes/document/Document.d.ts.map +1 -1
  210. package/lib/nodes/document/Document.js +4 -4
  211. package/lib/nodes/document/Document.js.map +1 -1
  212. package/lib/nodes/document/IDocument.d.ts +28 -12
  213. package/lib/nodes/document/IDocument.d.ts.map +1 -1
  214. package/lib/nodes/document-fragment/DocumentFragment.d.ts +31 -1
  215. package/lib/nodes/document-fragment/DocumentFragment.d.ts.map +1 -1
  216. package/lib/nodes/document-fragment/DocumentFragment.js +2 -2
  217. package/lib/nodes/document-fragment/DocumentFragment.js.map +1 -1
  218. package/lib/nodes/document-fragment/IDocumentFragment.d.ts +6 -0
  219. package/lib/nodes/document-fragment/IDocumentFragment.d.ts.map +1 -1
  220. package/lib/nodes/element/Element.d.ts +61 -1
  221. package/lib/nodes/element/Element.d.ts.map +1 -1
  222. package/lib/nodes/element/Element.js +1 -1
  223. package/lib/nodes/element/Element.js.map +1 -1
  224. package/lib/nodes/element/HTMLCollection.d.ts.map +1 -1
  225. package/lib/nodes/element/HTMLCollection.js +2 -1
  226. package/lib/nodes/element/HTMLCollection.js.map +1 -1
  227. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  228. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +2 -0
  229. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
  230. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts +49 -1
  231. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  232. package/lib/nodes/html-button-element/HTMLButtonElement.js +93 -4
  233. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  234. package/lib/nodes/html-button-element/IHTMLButtonElement.d.ts +5 -1
  235. package/lib/nodes/html-button-element/IHTMLButtonElement.d.ts.map +1 -1
  236. package/lib/nodes/html-form-element/HTMLFormControlsCollection.d.ts.map +1 -1
  237. package/lib/nodes/html-form-element/HTMLFormControlsCollection.js +2 -1
  238. package/lib/nodes/html-form-element/HTMLFormControlsCollection.js.map +1 -1
  239. package/lib/nodes/html-form-element/HTMLFormElement.d.ts +8 -2
  240. package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  241. package/lib/nodes/html-form-element/HTMLFormElement.js +106 -10
  242. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  243. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts +10 -0
  244. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  245. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +14 -0
  246. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  247. package/lib/nodes/html-iframe-element/HTMLIFrameElementPageLoader.d.ts.map +1 -1
  248. package/lib/nodes/html-iframe-element/HTMLIFrameElementPageLoader.js +4 -1
  249. package/lib/nodes/html-iframe-element/HTMLIFrameElementPageLoader.js.map +1 -1
  250. package/lib/nodes/html-iframe-element/IHTMLIFrameElement.d.ts +1 -0
  251. package/lib/nodes/html-iframe-element/IHTMLIFrameElement.d.ts.map +1 -1
  252. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +49 -23
  253. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  254. package/lib/nodes/html-input-element/HTMLInputElement.js +100 -52
  255. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  256. package/lib/nodes/html-input-element/IHTMLInputElement.d.ts +2 -0
  257. package/lib/nodes/html-input-element/IHTMLInputElement.d.ts.map +1 -1
  258. package/lib/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
  259. package/lib/nodes/html-label-element/HTMLLabelElement.js +1 -0
  260. package/lib/nodes/html-label-element/HTMLLabelElement.js.map +1 -1
  261. package/lib/nodes/html-link-element/HTMLLinkElementStyleSheetLoader.js +1 -1
  262. package/lib/nodes/html-link-element/HTMLLinkElementStyleSheetLoader.js.map +1 -1
  263. package/lib/nodes/html-script-element/HTMLScriptElementScriptLoader.js +1 -1
  264. package/lib/nodes/html-script-element/HTMLScriptElementScriptLoader.js.map +1 -1
  265. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  266. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  267. package/lib/nodes/node/Node.d.ts.map +1 -1
  268. package/lib/nodes/node/Node.js.map +1 -1
  269. package/lib/nodes/parent-node/IParentNode.d.ts +17 -0
  270. package/lib/nodes/parent-node/IParentNode.d.ts.map +1 -1
  271. package/lib/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  272. package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
  273. package/lib/query-selector/QuerySelector.d.ts +34 -0
  274. package/lib/query-selector/QuerySelector.d.ts.map +1 -1
  275. package/lib/query-selector/QuerySelector.js.map +1 -1
  276. package/lib/query-selector/SelectorItem.d.ts.map +1 -1
  277. package/lib/query-selector/SelectorItem.js +6 -0
  278. package/lib/query-selector/SelectorItem.js.map +1 -1
  279. package/lib/version.js +1 -1
  280. package/lib/window/BrowserWindow.d.ts +5 -4
  281. package/lib/window/BrowserWindow.d.ts.map +1 -1
  282. package/lib/window/BrowserWindow.js +10 -4
  283. package/lib/window/BrowserWindow.js.map +1 -1
  284. package/lib/window/CrossOriginBrowserWindow.d.ts +1 -1
  285. package/lib/window/CrossOriginBrowserWindow.d.ts.map +1 -1
  286. package/lib/window/IBrowserWindow.d.ts +3 -2
  287. package/lib/window/IBrowserWindow.d.ts.map +1 -1
  288. package/lib/window/ICrossOriginBrowserWindow.d.ts +1 -1
  289. package/lib/window/ICrossOriginBrowserWindow.d.ts.map +1 -1
  290. package/lib/window/WindowPageOpenUtility.d.ts.map +1 -1
  291. package/lib/window/WindowPageOpenUtility.js +4 -2
  292. package/lib/window/WindowPageOpenUtility.js.map +1 -1
  293. package/package.json +1 -1
  294. package/src/browser/BrowserFrame.ts +12 -2
  295. package/src/browser/detached-browser/DetachedBrowserFrame.ts +12 -7
  296. package/src/browser/utilities/BrowserFrameFactory.ts +7 -0
  297. package/src/browser/utilities/BrowserFrameNavigator.ts +28 -18
  298. package/src/browser/utilities/BrowserFrameURL.ts +2 -2
  299. package/src/config/IHTMLElementTagNameMap.ts +148 -0
  300. package/src/config/ISVGElementTagNameMap.ts +67 -0
  301. package/src/event/EventTarget.ts +1 -1
  302. package/src/event/events/HashChangeEvent.ts +25 -0
  303. package/src/event/events/IHashChangeEventInit.ts +6 -0
  304. package/src/fetch/Fetch.ts +3 -3
  305. package/src/fetch/Request.ts +2 -2
  306. package/src/fetch/SyncFetch.ts +3 -3
  307. package/src/fetch/utilities/FetchRequestHeaderUtility.ts +4 -5
  308. package/src/fetch/utilities/FetchRequestReferrerUtility.ts +2 -1
  309. package/src/form-data/FormData.ts +2 -2
  310. package/src/index.ts +9 -1
  311. package/src/location/Location.ts +257 -0
  312. package/src/named-node-map/NamedNodeMap.ts +1 -0
  313. package/src/nodes/document/Document.ts +224 -17
  314. package/src/nodes/document/IDocument.ts +33 -11
  315. package/src/nodes/document-fragment/DocumentFragment.ts +59 -1
  316. package/src/nodes/document-fragment/IDocumentFragment.ts +14 -0
  317. package/src/nodes/element/Element.ts +120 -1
  318. package/src/nodes/element/HTMLCollection.ts +1 -0
  319. package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +2 -0
  320. package/src/nodes/html-button-element/HTMLButtonElement.ts +107 -5
  321. package/src/nodes/html-button-element/IHTMLButtonElement.ts +5 -1
  322. package/src/nodes/html-form-element/HTMLFormControlsCollection.ts +1 -0
  323. package/src/nodes/html-form-element/HTMLFormElement.ts +111 -5
  324. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +16 -0
  325. package/src/nodes/html-iframe-element/HTMLIFrameElementPageLoader.ts +5 -1
  326. package/src/nodes/html-iframe-element/IHTMLIFrameElement.ts +1 -0
  327. package/src/nodes/html-input-element/HTMLInputElement.ts +111 -57
  328. package/src/nodes/html-input-element/IHTMLInputElement.ts +2 -0
  329. package/src/nodes/html-label-element/HTMLLabelElement.ts +1 -0
  330. package/src/nodes/html-link-element/HTMLLinkElementStyleSheetLoader.ts +1 -1
  331. package/src/nodes/html-script-element/HTMLScriptElementScriptLoader.ts +1 -1
  332. package/src/nodes/html-select-element/HTMLSelectElement.ts +1 -2
  333. package/src/nodes/node/Node.ts +1 -2
  334. package/src/nodes/parent-node/IParentNode.ts +36 -0
  335. package/src/nodes/parent-node/ParentNodeUtility.ts +1 -0
  336. package/src/query-selector/QuerySelector.ts +76 -2
  337. package/src/query-selector/SelectorItem.ts +6 -0
  338. package/src/window/BrowserWindow.ts +11 -4
  339. package/src/window/CrossOriginBrowserWindow.ts +1 -1
  340. package/src/window/IBrowserWindow.ts +3 -2
  341. package/src/window/ICrossOriginBrowserWindow.ts +1 -1
  342. package/src/window/WindowPageOpenUtility.ts +4 -2
  343. package/cjs/url/Location.cjs +0 -111
  344. package/cjs/url/Location.cjs.map +0 -1
  345. package/cjs/url/Location.d.ts +0 -48
  346. package/cjs/url/Location.d.ts.map +0 -1
  347. package/lib/url/Location.d.ts +0 -48
  348. package/lib/url/Location.d.ts.map +0 -1
  349. package/lib/url/Location.js +0 -82
  350. package/lib/url/Location.js.map +0 -1
  351. package/src/url/Location.ts +0 -79
@@ -23,6 +23,7 @@ import HTMLInputElementDateUtility from './HTMLInputElementDateUtility.js';
23
23
  import HTMLLabelElementUtility from '../html-label-element/HTMLLabelElementUtility.js';
24
24
  import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
25
25
  import HTMLInputElementNamedNodeMap from './HTMLInputElementNamedNodeMap.js';
26
+ import PointerEvent from '../../event/events/PointerEvent.js';
26
27
  import { URL } from 'url';
27
28
 
28
29
  /**
@@ -98,48 +99,124 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
98
99
  /**
99
100
  * Returns form action.
100
101
  *
101
- * @returns URL.
102
+ * @returns Form action.
102
103
  */
103
104
  public get formAction(): string {
104
- return (
105
- this.getAttribute('formaction') ||
106
- (<IHTMLFormElement>this[PropertySymbol.formNode])?.action ||
107
- this[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow].location.href
108
- );
105
+ if (!this.hasAttribute('formaction')) {
106
+ return this[PropertySymbol.ownerDocument].location.href;
107
+ }
108
+
109
+ try {
110
+ return new URL(
111
+ this.getAttribute('formaction') || '',
112
+ this[PropertySymbol.ownerDocument].location.href
113
+ ).href;
114
+ } catch (e) {
115
+ return '';
116
+ }
109
117
  }
110
118
 
111
119
  /**
112
120
  * Sets form action.
113
121
  *
114
- * @param url URL.
122
+ * @param formAction Form action.
115
123
  */
116
- public set formAction(url: string) {
117
- try {
118
- new URL(url);
119
- } catch (error) {
120
- return;
121
- }
122
- this.setAttribute('formaction', url);
124
+ public set formAction(formAction: string) {
125
+ this.setAttribute('formaction', formAction);
126
+ }
127
+
128
+ /**
129
+ * Returns form enctype.
130
+ *
131
+ * @returns Form enctype.
132
+ */
133
+ public get formEnctype(): string {
134
+ return this.getAttribute('formenctype') || '';
135
+ }
136
+
137
+ /**
138
+ * Sets form enctype.
139
+ *
140
+ * @param formEnctype Form enctype.
141
+ */
142
+ public set formEnctype(formEnctype: string) {
143
+ this.setAttribute('formenctype', formEnctype);
123
144
  }
124
145
 
125
146
  /**
126
147
  * Returns form method.
148
+ *
149
+ * @returns Form method.
127
150
  */
128
151
  public get formMethod(): string {
129
- return (
130
- this.getAttribute('formmethod') ||
131
- (<IHTMLFormElement>this[PropertySymbol.formNode])?.method ||
132
- ''
133
- );
152
+ return this.getAttribute('formmethod') || '';
134
153
  }
135
154
 
136
155
  /**
137
156
  * Sets form method.
138
157
  *
139
- * @param method Method.
158
+ * @param formMethod Form method.
159
+ */
160
+ public set formMethod(formMethod: string) {
161
+ this.setAttribute('formmethod', formMethod);
162
+ }
163
+
164
+ /**
165
+ * Returns no validate.
166
+ *
167
+ * @returns No validate.
168
+ */
169
+ public get formNoValidate(): boolean {
170
+ return this.getAttribute('formnovalidate') !== null;
171
+ }
172
+
173
+ /**
174
+ * Sets no validate.
175
+ *
176
+ * @param formNoValidate No validate.
177
+ */
178
+ public set formNoValidate(formNoValidate: boolean) {
179
+ if (!formNoValidate) {
180
+ this.removeAttribute('formnovalidate');
181
+ } else {
182
+ this.setAttribute('formnovalidate', '');
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Returns form target.
188
+ *
189
+ * @returns Form target.
140
190
  */
141
- public set formMethod(method: string) {
142
- this.setAttribute('formmethod', method);
191
+ public get formTarget(): string {
192
+ return this.getAttribute('formtarget') || '';
193
+ }
194
+
195
+ /**
196
+ * Sets form target.
197
+ *
198
+ * @param formTarget Form target.
199
+ */
200
+ public set formTarget(formTarget: string) {
201
+ this.setAttribute('formtarget', formTarget);
202
+ }
203
+
204
+ /**
205
+ * Returns the parent form element.
206
+ *
207
+ * @returns Form.
208
+ */
209
+ public get form(): IHTMLFormElement | null {
210
+ if (this[PropertySymbol.formNode]) {
211
+ return <IHTMLFormElement>this[PropertySymbol.formNode];
212
+ }
213
+ if (!this.isConnected) {
214
+ return null;
215
+ }
216
+ const formID = this.getAttribute('form');
217
+ return formID
218
+ ? <IHTMLFormElement>this[PropertySymbol.ownerDocument].getElementById(formID)
219
+ : null;
143
220
  }
144
221
 
145
222
  /**
@@ -834,37 +911,6 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
834
911
  this.setSelectionRange(this.#selectionStart, this.#selectionEnd, direction);
835
912
  }
836
913
 
837
- /**
838
- * Returns no validate.
839
- *
840
- * @returns No validate.
841
- */
842
- public get formNoValidate(): boolean {
843
- return this.getAttribute('formnovalidate') !== null;
844
- }
845
-
846
- /**
847
- * Sets no validate.
848
- *
849
- * @param formNoValidate No validate.
850
- */
851
- public set formNoValidate(formNoValidate: boolean) {
852
- if (!formNoValidate) {
853
- this.removeAttribute('formnovalidate');
854
- } else {
855
- this.setAttribute('formnovalidate', '');
856
- }
857
- }
858
-
859
- /**
860
- * Returns the parent form element.
861
- *
862
- * @returns Form.
863
- */
864
- public get form(): IHTMLFormElement {
865
- return <IHTMLFormElement>this[PropertySymbol.formNode];
866
- }
867
-
868
914
  /**
869
915
  * Returns "true" if it will validate.
870
916
  *
@@ -1263,7 +1309,12 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
1263
1309
  */
1264
1310
  public override dispatchEvent(event: Event): boolean {
1265
1311
  // Do nothing if the input element is disabled and the event is a click event.
1266
- if (event.type === 'click' && event.eventPhase === EventPhaseEnum.none && this.disabled) {
1312
+ if (
1313
+ event.type === 'click' &&
1314
+ event instanceof PointerEvent &&
1315
+ event.eventPhase === EventPhaseEnum.none &&
1316
+ this.disabled
1317
+ ) {
1267
1318
  return false;
1268
1319
  }
1269
1320
 
@@ -1274,7 +1325,8 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
1274
1325
  if (
1275
1326
  (event.eventPhase === EventPhaseEnum.atTarget ||
1276
1327
  event.eventPhase === EventPhaseEnum.bubbling) &&
1277
- event.type === 'click'
1328
+ event.type === 'click' &&
1329
+ event instanceof PointerEvent
1278
1330
  ) {
1279
1331
  const inputType = this.type;
1280
1332
  if (inputType === 'checkbox' || inputType === 'radio') {
@@ -1290,6 +1342,7 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
1290
1342
  (event.eventPhase === EventPhaseEnum.atTarget ||
1291
1343
  event.eventPhase === EventPhaseEnum.bubbling) &&
1292
1344
  event.type === 'click' &&
1345
+ event instanceof PointerEvent &&
1293
1346
  this[PropertySymbol.isConnected]
1294
1347
  ) {
1295
1348
  const inputType = this.type;
@@ -1298,12 +1351,12 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
1298
1351
  this.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
1299
1352
  this.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
1300
1353
  } else if (inputType === 'submit') {
1301
- const form = <IHTMLFormElement>this[PropertySymbol.formNode];
1354
+ const form = this.form;
1302
1355
  if (form) {
1303
1356
  form.requestSubmit(this);
1304
1357
  }
1305
1358
  } else if (inputType === 'reset' && this[PropertySymbol.isConnected]) {
1306
- const form = <IHTMLFormElement>this[PropertySymbol.formNode];
1359
+ const form = this.form;
1307
1360
  if (form) {
1308
1361
  form.reset();
1309
1362
  }
@@ -1317,6 +1370,7 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
1317
1370
  (event.eventPhase === EventPhaseEnum.atTarget ||
1318
1371
  event.eventPhase === EventPhaseEnum.bubbling) &&
1319
1372
  event.type === 'click' &&
1373
+ event instanceof PointerEvent &&
1320
1374
  previousCheckedValue !== null
1321
1375
  ) {
1322
1376
  const inputType = this.type;
@@ -19,8 +19,10 @@ export default interface IHTMLInputElement extends IHTMLElement {
19
19
  readonly labels: INodeList<IHTMLLabelElement>;
20
20
  readonly validity: ValidityState;
21
21
  formAction: string;
22
+ formEnctype: string;
22
23
  formMethod: string;
23
24
  formNoValidate: boolean;
25
+ formTarget: string;
24
26
  defaultChecked: boolean;
25
27
  files: IFileList<File>;
26
28
  defaultValue: string;
@@ -80,6 +80,7 @@ export default class HTMLLabelElement extends HTMLElement implements IHTMLLabelE
80
80
 
81
81
  if (
82
82
  event.type === 'click' &&
83
+ event instanceof PointerEvent &&
83
84
  (event.eventPhase === EventPhaseEnum.atTarget || event.eventPhase === EventPhaseEnum.bubbling)
84
85
  ) {
85
86
  const control = this.control;
@@ -52,7 +52,7 @@ export default class HTMLLinkElementStyleSheetLoader {
52
52
  try {
53
53
  absoluteURL = new URL(
54
54
  url,
55
- element[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow].location
55
+ element[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow].location.href
56
56
  ).href;
57
57
  } catch (error) {
58
58
  this.#loadedStyleSheetURL = null;
@@ -47,7 +47,7 @@ export default class HTMLScriptElementScriptLoader {
47
47
  try {
48
48
  absoluteURL = new URL(
49
49
  url,
50
- element[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow].location
50
+ element[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow].location.href
51
51
  ).href;
52
52
  } catch (error) {
53
53
  this.#loadedScriptURL = null;
@@ -14,7 +14,6 @@ import IHTMLOptionsCollection from './IHTMLOptionsCollection.js';
14
14
  import INode from '../node/INode.js';
15
15
  import NodeTypeEnum from '../node/NodeTypeEnum.js';
16
16
  import HTMLFormElement from '../html-form-element/HTMLFormElement.js';
17
- import IHTMLCollection from '../element/IHTMLCollection.js';
18
17
  import HTMLLabelElementUtility from '../html-label-element/HTMLLabelElementUtility.js';
19
18
  import INamedNodeMap from '../../named-node-map/INamedNodeMap.js';
20
19
  import HTMLSelectElementNamedNodeMap from './HTMLSelectElementNamedNodeMap.js';
@@ -363,7 +362,7 @@ export default class HTMLSelectElement extends HTMLElement implements IHTMLSelec
363
362
  * @param [selectedOption] Selected option.
364
363
  */
365
364
  public [PropertySymbol.updateOptionItems](selectedOption?: IHTMLOptionElement): void {
366
- const optionElements = <IHTMLCollection<IHTMLOptionElement>>this.getElementsByTagName('option');
365
+ const optionElements = this.getElementsByTagName('option');
367
366
 
368
367
  if (optionElements.length < this[PropertySymbol.options].length) {
369
368
  this[PropertySymbol.options].splice(
@@ -4,7 +4,6 @@ import MutationListener from '../../mutation-observer/MutationListener.js';
4
4
  import INode from './INode.js';
5
5
  import IDocument from '../document/IDocument.js';
6
6
  import IElement from '../element/IElement.js';
7
- import IHTMLBaseElement from '../html-base-element/IHTMLBaseElement.js';
8
7
  import NodeTypeEnum from './NodeTypeEnum.js';
9
8
  import NodeDocumentPositionEnum from './NodeDocumentPositionEnum.js';
10
9
  import NodeUtility from './NodeUtility.js';
@@ -266,7 +265,7 @@ export default class Node extends EventTarget implements INode {
266
265
  * @returns Base URI.
267
266
  */
268
267
  public get baseURI(): string {
269
- const base = <IHTMLBaseElement>this[PropertySymbol.ownerDocument].querySelector('base');
268
+ const base = this[PropertySymbol.ownerDocument].querySelector('base');
270
269
  if (base) {
271
270
  return base.href;
272
271
  }
@@ -2,6 +2,8 @@ import IHTMLCollection from '../element/IHTMLCollection.js';
2
2
  import IElement from '../element/IElement.js';
3
3
  import INode from '../node/INode.js';
4
4
  import INodeList from '../node/INodeList.js';
5
+ import IHTMLElementTagNameMap from '../../config/IHTMLElementTagNameMap.js';
6
+ import ISVGElementTagNameMap from '../../config/ISVGElementTagNameMap.js';
5
7
 
6
8
  export default interface IParentNode extends INode {
7
9
  readonly childElementCount: number;
@@ -29,8 +31,28 @@ export default interface IParentNode extends INode {
29
31
  * @param selector CSS selector.
30
32
  * @returns Matching element.
31
33
  */
34
+ querySelector<K extends keyof IHTMLElementTagNameMap>(
35
+ selector: K
36
+ ): IHTMLElementTagNameMap[K] | null;
37
+ querySelector<K extends keyof ISVGElementTagNameMap>(
38
+ selector: K
39
+ ): ISVGElementTagNameMap[K] | null;
32
40
  querySelector(selector: string): IElement | null;
33
41
 
42
+ /**
43
+ * Query CSS selector to find matching nodes.
44
+ *
45
+ * @param selector CSS selector.
46
+ * @returns Matching elements.
47
+ */
48
+ querySelectorAll<K extends keyof IHTMLElementTagNameMap>(
49
+ selector: K
50
+ ): INodeList<IHTMLElementTagNameMap[K]>;
51
+ querySelectorAll<K extends keyof ISVGElementTagNameMap>(
52
+ selector: K
53
+ ): INodeList<ISVGElementTagNameMap[K]>;
54
+ querySelectorAll(selector: string): INodeList<IElement>;
55
+
34
56
  /**
35
57
  * Query CSS selector to find matching nodes.
36
58
  *
@@ -53,6 +75,12 @@ export default interface IParentNode extends INode {
53
75
  * @param tagName Tag name.
54
76
  * @returns Matching element.
55
77
  */
78
+ getElementsByTagName<K extends keyof IHTMLElementTagNameMap>(
79
+ tagName: K
80
+ ): IHTMLCollection<IHTMLElementTagNameMap[K]>;
81
+ getElementsByTagName<K extends keyof ISVGElementTagNameMap>(
82
+ tagName: K
83
+ ): IHTMLCollection<ISVGElementTagNameMap[K]>;
56
84
  getElementsByTagName(tagName: string): IHTMLCollection<IElement>;
57
85
 
58
86
  /**
@@ -62,6 +90,14 @@ export default interface IParentNode extends INode {
62
90
  * @param tagName Tag name.
63
91
  * @returns Matching element.
64
92
  */
93
+ getElementsByTagNameNS<K extends keyof IHTMLElementTagNameMap>(
94
+ namespaceURI: 'http://www.w3.org/1999/xhtml',
95
+ tagName: K
96
+ ): IHTMLCollection<IHTMLElementTagNameMap[K]>;
97
+ getElementsByTagNameNS<K extends keyof ISVGElementTagNameMap>(
98
+ namespaceURI: 'http://www.w3.org/2000/svg',
99
+ tagName: K
100
+ ): IHTMLCollection<ISVGElementTagNameMap[K]>;
65
101
  getElementsByTagNameNS(namespaceURI: string, tagName: string): IHTMLCollection<IElement>;
66
102
 
67
103
  /**
@@ -75,6 +75,7 @@ export default class ParentNodeUtility {
75
75
 
76
76
  this.append(parentNode, ...nodes);
77
77
  }
78
+
78
79
  /**
79
80
  * Returns an elements by class name.
80
81
  *
@@ -1,7 +1,7 @@
1
1
  import IElement from '../nodes/element/IElement.js';
2
2
  import * as PropertySymbol from '../PropertySymbol.js';
3
- import INodeList from '../nodes/node/INodeList.js';
4
3
  import SelectorItem from './SelectorItem.js';
4
+ import INodeList from '../nodes/node/INodeList.js';
5
5
  import NodeList from '../nodes/node/NodeList.js';
6
6
  import NodeTypeEnum from '../nodes/node/NodeTypeEnum.js';
7
7
  import SelectorCombinatorEnum from './SelectorCombinatorEnum.js';
@@ -10,6 +10,8 @@ import IDocumentFragment from '../nodes/document-fragment/IDocumentFragment.js';
10
10
  import SelectorParser from './SelectorParser.js';
11
11
  import ISelectorMatch from './ISelectorMatch.js';
12
12
  import Element from '../nodes/element/Element.js';
13
+ import IHTMLElementTagNameMap from '../config/IHTMLElementTagNameMap.js';
14
+ import ISVGElementTagNameMap from '../config/ISVGElementTagNameMap.js';
13
15
 
14
16
  type IDocumentPositionAndElement = {
15
17
  documentPosition: string;
@@ -27,6 +29,42 @@ const INVALID_SELECTOR_REGEXP = /^[.#\[]?\d|[.#]$/;
27
29
  * @class QuerySelector
28
30
  */
29
31
  export default class QuerySelector {
32
+ /**
33
+ * Finds elements based on a query selector.
34
+ *
35
+ * @param node Node to search in.
36
+ * @param selector Selector.
37
+ * @returns HTML elements.
38
+ */
39
+ public static querySelectorAll<K extends keyof IHTMLElementTagNameMap>(
40
+ node: IElement | IDocument | IDocumentFragment,
41
+ selector: K
42
+ ): INodeList<IHTMLElementTagNameMap[K]>;
43
+
44
+ /**
45
+ * Finds elements based on a query selector.
46
+ *
47
+ * @param node Node to search in.
48
+ * @param selector Selector.
49
+ * @returns HTML elements.
50
+ */
51
+ public static querySelectorAll<K extends keyof ISVGElementTagNameMap>(
52
+ node: IElement | IDocument | IDocumentFragment,
53
+ selector: K
54
+ ): INodeList<ISVGElementTagNameMap[K]>;
55
+
56
+ /**
57
+ * Finds elements based on a query selector.
58
+ *
59
+ * @param node Node to search in.
60
+ * @param selector Selector.
61
+ * @returns HTML elements.
62
+ */
63
+ public static querySelectorAll(
64
+ node: IElement | IDocument | IDocumentFragment,
65
+ selector: string
66
+ ): INodeList<IElement>;
67
+
30
68
  /**
31
69
  * Finds elements based on a query selector.
32
70
  *
@@ -38,7 +76,7 @@ export default class QuerySelector {
38
76
  node: IElement | IDocument | IDocumentFragment,
39
77
  selector: string
40
78
  ): INodeList<IElement> {
41
- if (selector === '') {
79
+ if (<string>selector === '') {
42
80
  throw new Error(
43
81
  `Failed to execute 'querySelectorAll' on '${node.constructor.name}': The provided selector is empty.`
44
82
  );
@@ -80,6 +118,42 @@ export default class QuerySelector {
80
118
  return nodeList;
81
119
  }
82
120
 
121
+ /**
122
+ * Finds an element based on a query selector.
123
+ *
124
+ * @param node Node to search in.
125
+ * @param selector Selector.
126
+ * @returns HTML element.
127
+ */
128
+ public static querySelector<K extends keyof IHTMLElementTagNameMap>(
129
+ node: IElement | IDocument | IDocumentFragment,
130
+ selector: K
131
+ ): IHTMLElementTagNameMap[K] | null;
132
+
133
+ /**
134
+ * Finds an element based on a query selector.
135
+ *
136
+ * @param node Node to search in.
137
+ * @param selector Selector.
138
+ * @returns HTML element.
139
+ */
140
+ public static querySelector<K extends keyof ISVGElementTagNameMap>(
141
+ node: IElement | IDocument | IDocumentFragment,
142
+ selector: K
143
+ ): ISVGElementTagNameMap[K] | null;
144
+
145
+ /**
146
+ * Finds an element based on a query selector.
147
+ *
148
+ * @param node Node to search in.
149
+ * @param selector Selector.
150
+ * @returns HTML element.
151
+ */
152
+ public static querySelector(
153
+ node: IElement | IDocument | IDocumentFragment,
154
+ selector: string
155
+ ): IElement | null;
156
+
83
157
  /**
84
158
  * Finds an element based on a query selector.
85
159
  *
@@ -222,6 +222,12 @@ export default class SelectorItem {
222
222
  .reverse()
223
223
  .indexOf(element);
224
224
  return nthLastOfTypeIndex !== -1 && psuedo.nthFunction(nthLastOfTypeIndex + 1);
225
+ case 'target':
226
+ const hash = element[PropertySymbol.ownerDocument].location.hash;
227
+ if (!hash) {
228
+ return false;
229
+ }
230
+ return element.isConnected && element.id === hash.slice(1);
225
231
  }
226
232
  }
227
233
 
@@ -11,7 +11,7 @@ import Comment from '../nodes/comment/Comment.js';
11
11
  import ShadowRoot from '../nodes/shadow-root/ShadowRoot.js';
12
12
  import Element from '../nodes/element/Element.js';
13
13
  import HTMLTemplateElement from '../nodes/html-template-element/HTMLTemplateElement.js';
14
- import HTMLFormElement from '../nodes/html-form-element/HTMLFormElement.js';
14
+ import HTMLFormElementImplementation from '../nodes/html-form-element/HTMLFormElement.js';
15
15
  import HTMLElement from '../nodes/html-element/HTMLElement.js';
16
16
  import HTMLUnknownElement from '../nodes/html-unknown-element/HTMLUnknownElement.js';
17
17
  import HTMLInputElement from '../nodes/html-input-element/HTMLInputElement.js';
@@ -44,13 +44,14 @@ import KeyboardEvent from '../event/events/KeyboardEvent.js';
44
44
  import MessageEvent from '../event/events/MessageEvent.js';
45
45
  import ProgressEvent from '../event/events/ProgressEvent.js';
46
46
  import MediaQueryListEvent from '../event/events/MediaQueryListEvent.js';
47
+ import HashChangeEvent from '../event/events/HashChangeEvent.js';
47
48
  import TouchEvent from '../event/events/TouchEvent.js';
48
49
  import Touch from '../event/Touch.js';
49
50
  import EventTarget from '../event/EventTarget.js';
50
51
  import MessagePort from '../event/MessagePort.js';
51
52
  import { URLSearchParams } from 'url';
52
53
  import URL from '../url/URL.js';
53
- import Location from '../url/Location.js';
54
+ import Location from '../location/Location.js';
54
55
  import MutationObserver from '../mutation-observer/MutationObserver.js';
55
56
  import MutationRecord from '../mutation-observer/MutationRecord.js';
56
57
  import XMLSerializer from '../xml-serializer/XMLSerializer.js';
@@ -196,7 +197,6 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
196
197
  public readonly HTMLElement: typeof HTMLElement = HTMLElement;
197
198
  public readonly HTMLUnknownElement: typeof HTMLUnknownElement = HTMLUnknownElement;
198
199
  public readonly HTMLTemplateElement: typeof HTMLTemplateElement = HTMLTemplateElement;
199
- public readonly HTMLFormElement: typeof HTMLFormElement = HTMLFormElement;
200
200
  public readonly HTMLInputElement: typeof HTMLInputElement = HTMLInputElement;
201
201
  public readonly HTMLSelectElement: typeof HTMLSelectElement = HTMLSelectElement;
202
202
  public readonly HTMLTextAreaElement: typeof HTMLTextAreaElement = HTMLTextAreaElement;
@@ -213,6 +213,7 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
213
213
  public readonly HTMLScriptElement: typeof HTMLScriptElementImplementation;
214
214
  public readonly HTMLLinkElement: typeof HTMLLinkElementImplementation;
215
215
  public readonly HTMLIFrameElement: typeof HTMLIFrameElementImplementation;
216
+ public readonly HTMLFormElement: typeof HTMLFormElementImplementation;
216
217
 
217
218
  // Non-implemented element classes
218
219
  public readonly HTMLHeadElement: typeof HTMLElement = HTMLElement;
@@ -280,6 +281,7 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
280
281
  public readonly SubmitEvent = SubmitEvent;
281
282
  public readonly ProgressEvent = ProgressEvent;
282
283
  public readonly MediaQueryListEvent = MediaQueryListEvent;
284
+ public readonly HashChangeEvent = HashChangeEvent;
283
285
  public readonly ClipboardEvent = ClipboardEvent;
284
286
  public readonly TouchEvent = TouchEvent;
285
287
  public readonly Touch = Touch;
@@ -301,7 +303,6 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
301
303
  public readonly EditingBeforeInputEvent = Event;
302
304
  public readonly FetchEvent = Event;
303
305
  public readonly GamepadEvent = Event;
304
- public readonly HashChangeEvent = Event;
305
306
  public readonly IDBVersionChangeEvent = Event;
306
307
  public readonly MediaStreamEvent = Event;
307
308
  public readonly MutationEvent = Event;
@@ -601,6 +602,11 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
601
602
  super(browserFrame);
602
603
  }
603
604
  }
605
+ class HTMLFormElement extends HTMLFormElementImplementation {
606
+ constructor() {
607
+ super(browserFrame);
608
+ }
609
+ }
604
610
  class Document extends DocumentImplementation {
605
611
  constructor() {
606
612
  super({ window, browserFrame });
@@ -640,6 +646,7 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
640
646
  this.HTMLScriptElement = HTMLScriptElement;
641
647
  this.HTMLLinkElement = HTMLLinkElement;
642
648
  this.HTMLIFrameElement = HTMLIFrameElement;
649
+ this.HTMLFormElement = HTMLFormElement;
643
650
  this.Document = Document;
644
651
  this.HTMLDocument = HTMLDocument;
645
652
  this.XMLDocument = XMLDocument;
@@ -2,7 +2,7 @@ import EventTarget from '../event/EventTarget.js';
2
2
  import IBrowserWindow from './IBrowserWindow.js';
3
3
  import DOMException from '../exception/DOMException.js';
4
4
  import DOMExceptionNameEnum from '../exception/DOMExceptionNameEnum.js';
5
- import Location from '../url/Location.js';
5
+ import Location from '../location/Location.js';
6
6
  import ICrossOriginBrowserWindow from './ICrossOriginBrowserWindow.js';
7
7
 
8
8
  /**
@@ -45,12 +45,13 @@ import AnimationEvent from '../event/events/AnimationEvent.js';
45
45
  import KeyboardEvent from '../event/events/KeyboardEvent.js';
46
46
  import ProgressEvent from '../event/events/ProgressEvent.js';
47
47
  import MediaQueryListEvent from '../event/events/MediaQueryListEvent.js';
48
+ import HashChangeEvent from '../event/events/HashChangeEvent.js';
48
49
  import TouchEvent from '../event/events/TouchEvent.js';
49
50
  import Touch from '../event/Touch.js';
50
51
  import EventTarget from '../event/EventTarget.js';
51
52
  import { URLSearchParams } from 'url';
52
53
  import URL from '../url/URL.js';
53
- import Location from '../url/Location.js';
54
+ import Location from '../location/Location.js';
54
55
  import MutationObserver from '../mutation-observer/MutationObserver.js';
55
56
  import MutationRecord from '../mutation-observer/MutationRecord.js';
56
57
  import DOMParser from '../dom-parser/DOMParser.js';
@@ -259,6 +260,7 @@ export default interface IBrowserWindow extends IEventTarget, INodeJSGlobal {
259
260
  readonly MessagePort: typeof MessagePort;
260
261
  readonly ProgressEvent: typeof ProgressEvent;
261
262
  readonly MediaQueryListEvent: typeof MediaQueryListEvent;
263
+ readonly HashChangeEvent: typeof HashChangeEvent;
262
264
  readonly ClipboardEvent: typeof ClipboardEvent;
263
265
  readonly TouchEvent: typeof TouchEvent;
264
266
  readonly Touch: typeof Touch;
@@ -282,7 +284,6 @@ export default interface IBrowserWindow extends IEventTarget, INodeJSGlobal {
282
284
  readonly EditingBeforeInputEvent: typeof Event;
283
285
  readonly FetchEvent: typeof Event;
284
286
  readonly GamepadEvent: typeof Event;
285
- readonly HashChangeEvent: typeof Event;
286
287
  readonly IDBVersionChangeEvent: typeof Event;
287
288
  readonly MediaStreamEvent: typeof Event;
288
289
  readonly MutationEvent: typeof Event;
@@ -1,5 +1,5 @@
1
1
  import IBrowserWindow from './IBrowserWindow.js';
2
- import Location from '../url/Location.js';
2
+ import Location from '../location/Location.js';
3
3
  import IEventTarget from '../event/IEventTarget.js';
4
4
 
5
5
  /**
@@ -4,6 +4,7 @@ import IBrowserFrame from '../browser/types/IBrowserFrame.js';
4
4
  import FetchCORSUtility from '../fetch/utilities/FetchCORSUtility.js';
5
5
  import ICrossOriginBrowserWindow from './ICrossOriginBrowserWindow.js';
6
6
  import BrowserFrameURL from '../browser/utilities/BrowserFrameURL.js';
7
+ import { URL } from 'url';
7
8
  import * as PropertySymbol from '../PropertySymbol.js';
8
9
 
9
10
  /**
@@ -29,7 +30,7 @@ export default class WindowPageOpenUtility {
29
30
  ): IBrowserWindow | ICrossOriginBrowserWindow | null {
30
31
  const features = this.getWindowFeatures(options?.features || '');
31
32
  const target = options?.target !== undefined ? String(options.target) : null;
32
- const originURL = browserFrame.window.location;
33
+ const originURL = new URL(browserFrame.window.location.href);
33
34
  const targetURL = BrowserFrameURL.getRelativeURL(browserFrame, options.url);
34
35
  const oldWindow = browserFrame.window;
35
36
  let targetFrame: IBrowserFrame;
@@ -54,7 +55,8 @@ export default class WindowPageOpenUtility {
54
55
 
55
56
  targetFrame
56
57
  .goto(targetURL.href, {
57
- referrer: features.noreferrer ? 'no-referrer' : undefined
58
+ referrer: features.noreferrer ? undefined : browserFrame.window.location.origin,
59
+ referrerPolicy: features.noreferrer ? 'no-referrer' : undefined
58
60
  })
59
61
  .catch((error) => targetFrame.page.console.error(error));
60
62