Files
headroom/frontend/node_modules/happy-dom/cjs/nodes/document/Document.cjs
Santhosh Janardhanan de2d83092e feat: Reinitialize frontend with SvelteKit and TypeScript
- Delete old Vite+Svelte frontend
- Initialize new SvelteKit project with TypeScript
- Configure Tailwind CSS v4 + DaisyUI
- Implement JWT authentication with auto-refresh
- Create login page with form validation (Zod)
- Add protected route guards
- Update Docker configuration for single-stage build
- Add E2E tests with Playwright (6/11 passing)
- Fix Svelte 5 reactivity with $state() runes

Known issues:
- 5 E2E tests failing (timing/async issues)
- Token refresh implementation needs debugging
- Validation error display timing
2026-02-17 16:19:59 -05:00

1615 lines
59 KiB
JavaScript

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Element_js_1 = __importDefault(require("../element/Element.cjs"));
const PropertySymbol = __importStar(require("../../PropertySymbol.cjs"));
const Node_js_1 = __importDefault(require("../node/Node.cjs"));
const NodeIterator_js_1 = __importDefault(require("../../tree-walker/NodeIterator.cjs"));
const TreeWalker_js_1 = __importDefault(require("../../tree-walker/TreeWalker.cjs"));
const Event_js_1 = __importDefault(require("../../event/Event.cjs"));
const DOMImplementation_js_1 = __importDefault(require("../../dom-implementation/DOMImplementation.cjs"));
const NamespaceURI_js_1 = __importDefault(require("../../config/NamespaceURI.cjs"));
const DocumentType_js_1 = __importDefault(require("../document-type/DocumentType.cjs"));
const ParentNodeUtility_js_1 = __importDefault(require("../parent-node/ParentNodeUtility.cjs"));
const QuerySelector_js_1 = __importDefault(require("../../query-selector/QuerySelector.cjs"));
const HTMLCollection_js_1 = __importDefault(require("../element/HTMLCollection.cjs"));
const DocumentReadyStateEnum_js_1 = __importDefault(require("./DocumentReadyStateEnum.cjs"));
const Selection_js_1 = __importDefault(require("../../selection/Selection.cjs"));
const VisibilityStateEnum_js_1 = __importDefault(require("./VisibilityStateEnum.cjs"));
const NodeTypeEnum_js_1 = __importDefault(require("../node/NodeTypeEnum.cjs"));
const CookieStringUtility_js_1 = __importDefault(require("../../cookie/urilities/CookieStringUtility.cjs"));
const url_1 = require("url");
const HTMLElementConfig_js_1 = __importDefault(require("../../config/HTMLElementConfig.cjs"));
const WindowBrowserContext_js_1 = __importDefault(require("../../window/WindowBrowserContext.cjs"));
const NodeFactory_js_1 = __importDefault(require("../NodeFactory.cjs"));
const SVGElementConfig_js_1 = __importDefault(require("../../config/SVGElementConfig.cjs"));
const StringUtility_js_1 = __importDefault(require("../../utilities/StringUtility.cjs"));
const HTMLParser_js_1 = __importDefault(require("../../html-parser/HTMLParser.cjs"));
const DOMExceptionNameEnum_js_1 = __importDefault(require("../../exception/DOMExceptionNameEnum.cjs"));
const PROCESSING_INSTRUCTION_TARGET_REGEXP = /^[a-z][a-z0-9-]+$/;
/**
* Document.
*/
class Document extends Node_js_1.default {
// Internal properties
[PropertySymbol.children] = null;
[PropertySymbol.activeElement] = null;
[PropertySymbol.nextActiveElement] = null;
[PropertySymbol.currentScript] = null;
[PropertySymbol.rootNode] = this;
[PropertySymbol.isFirstWrite] = true;
[PropertySymbol.isFirstWriteAfterOpen] = false;
[PropertySymbol.nodeType] = NodeTypeEnum_js_1.default.documentNode;
[PropertySymbol.isConnected] = true;
[PropertySymbol.adoptedStyleSheets] = [];
[PropertySymbol.implementation] = new DOMImplementation_js_1.default(this);
[PropertySymbol.readyState] = DocumentReadyStateEnum_js_1.default.interactive;
[PropertySymbol.referrer] = '';
[PropertySymbol.defaultView] = null;
[PropertySymbol.forms] = null;
[PropertySymbol.affectsComputedStyleCache] = [];
[PropertySymbol.ownerDocument] = null;
[PropertySymbol.elementIdMap] = new Map();
[PropertySymbol.contentType] = 'text/html';
[PropertySymbol.xmlProcessingInstruction] = null;
[PropertySymbol.preloads] = new Map();
[PropertySymbol.propertyEventListeners] = new Map();
// Private properties
#selection = null;
// Events
/* eslint-disable jsdoc/require-jsdoc */
get onreadystatechange() {
return this[PropertySymbol.propertyEventListeners].get('onreadystatechange') ?? null;
}
set onreadystatechange(value) {
this[PropertySymbol.propertyEventListeners].set('onreadystatechange', value);
}
get onpointerlockchange() {
return this[PropertySymbol.propertyEventListeners].get('onpointerlockchange') ?? null;
}
set onpointerlockchange(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerlockchange', value);
}
get onpointerlockerror() {
return this[PropertySymbol.propertyEventListeners].get('onpointerlockerror') ?? null;
}
set onpointerlockerror(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerlockerror', value);
}
get onbeforecopy() {
return this[PropertySymbol.propertyEventListeners].get('onbeforecopy') ?? null;
}
set onbeforecopy(value) {
this[PropertySymbol.propertyEventListeners].set('onbeforecopy', value);
}
get onbeforecut() {
return this[PropertySymbol.propertyEventListeners].get('onbeforecut') ?? null;
}
set onbeforecut(value) {
this[PropertySymbol.propertyEventListeners].set('onbeforecut', value);
}
get onbeforepaste() {
return this[PropertySymbol.propertyEventListeners].get('onbeforepaste') ?? null;
}
set onbeforepaste(value) {
this[PropertySymbol.propertyEventListeners].set('onbeforepaste', value);
}
get onfreeze() {
return this[PropertySymbol.propertyEventListeners].get('onfreeze') ?? null;
}
set onfreeze(value) {
this[PropertySymbol.propertyEventListeners].set('onfreeze', value);
}
get onprerenderingchange() {
return this[PropertySymbol.propertyEventListeners].get('onprerenderingchange') ?? null;
}
set onprerenderingchange(value) {
this[PropertySymbol.propertyEventListeners].set('onprerenderingchange', value);
}
get onresume() {
return this[PropertySymbol.propertyEventListeners].get('onresume') ?? null;
}
set onresume(value) {
this[PropertySymbol.propertyEventListeners].set('onresume', value);
}
get onsearch() {
return this[PropertySymbol.propertyEventListeners].get('onsearch') ?? null;
}
set onsearch(value) {
this[PropertySymbol.propertyEventListeners].set('onsearch', value);
}
get onvisibilitychange() {
return this[PropertySymbol.propertyEventListeners].get('onvisibilitychange') ?? null;
}
set onvisibilitychange(value) {
this[PropertySymbol.propertyEventListeners].set('onvisibilitychange', value);
}
get onfullscreenchange() {
return this[PropertySymbol.propertyEventListeners].get('onfullscreenchange') ?? null;
}
set onfullscreenchange(value) {
this[PropertySymbol.propertyEventListeners].set('onfullscreenchange', value);
}
get onfullscreenerror() {
return this[PropertySymbol.propertyEventListeners].get('onfullscreenerror') ?? null;
}
set onfullscreenerror(value) {
this[PropertySymbol.propertyEventListeners].set('onfullscreenerror', value);
}
get onwebkitfullscreenchange() {
return this[PropertySymbol.propertyEventListeners].get('onwebkitfullscreenchange') ?? null;
}
set onwebkitfullscreenchange(value) {
this[PropertySymbol.propertyEventListeners].set('onwebkitfullscreenchange', value);
}
get onwebkitfullscreenerror() {
return this[PropertySymbol.propertyEventListeners].get('onwebkitfullscreenerror') ?? null;
}
set onwebkitfullscreenerror(value) {
this[PropertySymbol.propertyEventListeners].set('onwebkitfullscreenerror', value);
}
get onbeforexrselect() {
return this[PropertySymbol.propertyEventListeners].get('onbeforexrselect') ?? null;
}
set onbeforexrselect(value) {
this[PropertySymbol.propertyEventListeners].set('onbeforexrselect', value);
}
get onabort() {
return this[PropertySymbol.propertyEventListeners].get('onabort') ?? null;
}
set onabort(value) {
this[PropertySymbol.propertyEventListeners].set('onabort', value);
}
get onbeforeinput() {
return this[PropertySymbol.propertyEventListeners].get('onbeforeinput') ?? null;
}
set onbeforeinput(value) {
this[PropertySymbol.propertyEventListeners].set('onbeforeinput', value);
}
get onbeforematch() {
return this[PropertySymbol.propertyEventListeners].get('onbeforematch') ?? null;
}
set onbeforematch(value) {
this[PropertySymbol.propertyEventListeners].set('onbeforematch', value);
}
get onbeforetoggle() {
return this[PropertySymbol.propertyEventListeners].get('onbeforetoggle') ?? null;
}
set onbeforetoggle(value) {
this[PropertySymbol.propertyEventListeners].set('onbeforetoggle', value);
}
get onblur() {
return this[PropertySymbol.propertyEventListeners].get('onblur') ?? null;
}
set onblur(value) {
this[PropertySymbol.propertyEventListeners].set('onblur', value);
}
get oncancel() {
return this[PropertySymbol.propertyEventListeners].get('oncancel') ?? null;
}
set oncancel(value) {
this[PropertySymbol.propertyEventListeners].set('oncancel', value);
}
get oncanplay() {
return this[PropertySymbol.propertyEventListeners].get('oncanplay') ?? null;
}
set oncanplay(value) {
this[PropertySymbol.propertyEventListeners].set('oncanplay', value);
}
get oncanplaythrough() {
return this[PropertySymbol.propertyEventListeners].get('oncanplaythrough') ?? null;
}
set oncanplaythrough(value) {
this[PropertySymbol.propertyEventListeners].set('oncanplaythrough', value);
}
get onchange() {
return this[PropertySymbol.propertyEventListeners].get('onchange') ?? null;
}
set onchange(value) {
this[PropertySymbol.propertyEventListeners].set('onchange', value);
}
get onclick() {
return this[PropertySymbol.propertyEventListeners].get('onclick') ?? null;
}
set onclick(value) {
this[PropertySymbol.propertyEventListeners].set('onclick', value);
}
get onclose() {
return this[PropertySymbol.propertyEventListeners].get('onclose') ?? null;
}
set onclose(value) {
this[PropertySymbol.propertyEventListeners].set('onclose', value);
}
get oncontentvisibilityautostatechange() {
return (this[PropertySymbol.propertyEventListeners].get('oncontentvisibilityautostatechange') ?? null);
}
set oncontentvisibilityautostatechange(value) {
this[PropertySymbol.propertyEventListeners].set('oncontentvisibilityautostatechange', value);
}
get oncontextlost() {
return this[PropertySymbol.propertyEventListeners].get('oncontextlost') ?? null;
}
set oncontextlost(value) {
this[PropertySymbol.propertyEventListeners].set('oncontextlost', value);
}
get oncontextmenu() {
return this[PropertySymbol.propertyEventListeners].get('oncontextmenu') ?? null;
}
set oncontextmenu(value) {
this[PropertySymbol.propertyEventListeners].set('oncontextmenu', value);
}
get oncontextrestored() {
return this[PropertySymbol.propertyEventListeners].get('oncontextrestored') ?? null;
}
set oncontextrestored(value) {
this[PropertySymbol.propertyEventListeners].set('oncontextrestored', value);
}
get oncuechange() {
return this[PropertySymbol.propertyEventListeners].get('oncuechange') ?? null;
}
set oncuechange(value) {
this[PropertySymbol.propertyEventListeners].set('oncuechange', value);
}
get ondblclick() {
return this[PropertySymbol.propertyEventListeners].get('ondblclick') ?? null;
}
set ondblclick(value) {
this[PropertySymbol.propertyEventListeners].set('ondblclick', value);
}
get ondrag() {
return this[PropertySymbol.propertyEventListeners].get('ondrag') ?? null;
}
set ondrag(value) {
this[PropertySymbol.propertyEventListeners].set('ondrag', value);
}
get ondragend() {
return this[PropertySymbol.propertyEventListeners].get('ondragend') ?? null;
}
set ondragend(value) {
this[PropertySymbol.propertyEventListeners].set('ondragend', value);
}
get ondragenter() {
return this[PropertySymbol.propertyEventListeners].get('ondragenter') ?? null;
}
set ondragenter(value) {
this[PropertySymbol.propertyEventListeners].set('ondragenter', value);
}
get ondragleave() {
return this[PropertySymbol.propertyEventListeners].get('ondragleave') ?? null;
}
set ondragleave(value) {
this[PropertySymbol.propertyEventListeners].set('ondragleave', value);
}
get ondragover() {
return this[PropertySymbol.propertyEventListeners].get('ondragover') ?? null;
}
set ondragover(value) {
this[PropertySymbol.propertyEventListeners].set('ondragover', value);
}
get ondragstart() {
return this[PropertySymbol.propertyEventListeners].get('ondragstart') ?? null;
}
set ondragstart(value) {
this[PropertySymbol.propertyEventListeners].set('ondragstart', value);
}
get ondrop() {
return this[PropertySymbol.propertyEventListeners].get('ondrop') ?? null;
}
set ondrop(value) {
this[PropertySymbol.propertyEventListeners].set('ondrop', value);
}
get ondurationchange() {
return this[PropertySymbol.propertyEventListeners].get('ondurationchange') ?? null;
}
set ondurationchange(value) {
this[PropertySymbol.propertyEventListeners].set('ondurationchange', value);
}
get onemptied() {
return this[PropertySymbol.propertyEventListeners].get('onemptied') ?? null;
}
set onemptied(value) {
this[PropertySymbol.propertyEventListeners].set('onemptied', value);
}
get onended() {
return this[PropertySymbol.propertyEventListeners].get('onended') ?? null;
}
set onended(value) {
this[PropertySymbol.propertyEventListeners].set('onended', value);
}
get onerror() {
return this[PropertySymbol.propertyEventListeners].get('onerror') ?? null;
}
set onerror(value) {
this[PropertySymbol.propertyEventListeners].set('onerror', value);
}
get onfocus() {
return this[PropertySymbol.propertyEventListeners].get('onfocus') ?? null;
}
set onfocus(value) {
this[PropertySymbol.propertyEventListeners].set('onfocus', value);
}
get onformdata() {
return this[PropertySymbol.propertyEventListeners].get('onformdata') ?? null;
}
set onformdata(value) {
this[PropertySymbol.propertyEventListeners].set('onformdata', value);
}
get oninput() {
return this[PropertySymbol.propertyEventListeners].get('oninput') ?? null;
}
set oninput(value) {
this[PropertySymbol.propertyEventListeners].set('oninput', value);
}
get oninvalid() {
return this[PropertySymbol.propertyEventListeners].get('oninvalid') ?? null;
}
set oninvalid(value) {
this[PropertySymbol.propertyEventListeners].set('oninvalid', value);
}
get onkeydown() {
return this[PropertySymbol.propertyEventListeners].get('onkeydown') ?? null;
}
set onkeydown(value) {
this[PropertySymbol.propertyEventListeners].set('onkeydown', value);
}
get onkeypress() {
return this[PropertySymbol.propertyEventListeners].get('onkeypress') ?? null;
}
set onkeypress(value) {
this[PropertySymbol.propertyEventListeners].set('onkeypress', value);
}
get onkeyup() {
return this[PropertySymbol.propertyEventListeners].get('onkeyup') ?? null;
}
set onkeyup(value) {
this[PropertySymbol.propertyEventListeners].set('onkeyup', value);
}
get onload() {
return this[PropertySymbol.propertyEventListeners].get('onload') ?? null;
}
set onload(value) {
this[PropertySymbol.propertyEventListeners].set('onload', value);
}
get onloadeddata() {
return this[PropertySymbol.propertyEventListeners].get('onloadeddata') ?? null;
}
set onloadeddata(value) {
this[PropertySymbol.propertyEventListeners].set('onloadeddata', value);
}
get onloadedmetadata() {
return this[PropertySymbol.propertyEventListeners].get('onloadedmetadata') ?? null;
}
set onloadedmetadata(value) {
this[PropertySymbol.propertyEventListeners].set('onloadedmetadata', value);
}
get onloadstart() {
return this[PropertySymbol.propertyEventListeners].get('onloadstart') ?? null;
}
set onloadstart(value) {
this[PropertySymbol.propertyEventListeners].set('onloadstart', value);
}
get onmousedown() {
return this[PropertySymbol.propertyEventListeners].get('onmousedown') ?? null;
}
set onmousedown(value) {
this[PropertySymbol.propertyEventListeners].set('onmousedown', value);
}
get onmouseenter() {
return this[PropertySymbol.propertyEventListeners].get('onmouseenter') ?? null;
}
set onmouseenter(value) {
this[PropertySymbol.propertyEventListeners].set('onmouseenter', value);
}
get onmouseleave() {
return this[PropertySymbol.propertyEventListeners].get('onmouseleave') ?? null;
}
set onmouseleave(value) {
this[PropertySymbol.propertyEventListeners].set('onmouseleave', value);
}
get onmousemove() {
return this[PropertySymbol.propertyEventListeners].get('onmousemove') ?? null;
}
set onmousemove(value) {
this[PropertySymbol.propertyEventListeners].set('onmousemove', value);
}
get onmouseout() {
return this[PropertySymbol.propertyEventListeners].get('onmouseout') ?? null;
}
set onmouseout(value) {
this[PropertySymbol.propertyEventListeners].set('onmouseout', value);
}
get onmouseover() {
return this[PropertySymbol.propertyEventListeners].get('onmouseover') ?? null;
}
set onmouseover(value) {
this[PropertySymbol.propertyEventListeners].set('onmouseover', value);
}
get onmouseup() {
return this[PropertySymbol.propertyEventListeners].get('onmouseup') ?? null;
}
set onmouseup(value) {
this[PropertySymbol.propertyEventListeners].set('onmouseup', value);
}
get onmousewheel() {
return this[PropertySymbol.propertyEventListeners].get('onmousewheel') ?? null;
}
set onmousewheel(value) {
this[PropertySymbol.propertyEventListeners].set('onmousewheel', value);
}
get onpause() {
return this[PropertySymbol.propertyEventListeners].get('onpause') ?? null;
}
set onpause(value) {
this[PropertySymbol.propertyEventListeners].set('onpause', value);
}
get onplay() {
return this[PropertySymbol.propertyEventListeners].get('onplay') ?? null;
}
set onplay(value) {
this[PropertySymbol.propertyEventListeners].set('onplay', value);
}
get onplaying() {
return this[PropertySymbol.propertyEventListeners].get('onplaying') ?? null;
}
set onplaying(value) {
this[PropertySymbol.propertyEventListeners].set('onplaying', value);
}
get onprogress() {
return this[PropertySymbol.propertyEventListeners].get('onprogress') ?? null;
}
set onprogress(value) {
this[PropertySymbol.propertyEventListeners].set('onprogress', value);
}
get onratechange() {
return this[PropertySymbol.propertyEventListeners].get('onratechange') ?? null;
}
set onratechange(value) {
this[PropertySymbol.propertyEventListeners].set('onratechange', value);
}
get onreset() {
return this[PropertySymbol.propertyEventListeners].get('onreset') ?? null;
}
set onreset(value) {
this[PropertySymbol.propertyEventListeners].set('onreset', value);
}
get onresize() {
return this[PropertySymbol.propertyEventListeners].get('onresize') ?? null;
}
set onresize(value) {
this[PropertySymbol.propertyEventListeners].set('onresize', value);
}
get onscroll() {
return this[PropertySymbol.propertyEventListeners].get('onscroll') ?? null;
}
set onscroll(value) {
this[PropertySymbol.propertyEventListeners].set('onscroll', value);
}
get onsecuritypolicyviolation() {
return this[PropertySymbol.propertyEventListeners].get('onsecuritypolicyviolation') ?? null;
}
set onsecuritypolicyviolation(value) {
this[PropertySymbol.propertyEventListeners].set('onsecuritypolicyviolation', value);
}
get onseeked() {
return this[PropertySymbol.propertyEventListeners].get('onseeked') ?? null;
}
set onseeked(value) {
this[PropertySymbol.propertyEventListeners].set('onseeked', value);
}
get onseeking() {
return this[PropertySymbol.propertyEventListeners].get('onseeking') ?? null;
}
set onseeking(value) {
this[PropertySymbol.propertyEventListeners].set('onseeking', value);
}
get onselect() {
return this[PropertySymbol.propertyEventListeners].get('onselect') ?? null;
}
set onselect(value) {
this[PropertySymbol.propertyEventListeners].set('onselect', value);
}
get onslotchange() {
return this[PropertySymbol.propertyEventListeners].get('onslotchange') ?? null;
}
set onslotchange(value) {
this[PropertySymbol.propertyEventListeners].set('onslotchange', value);
}
get onstalled() {
return this[PropertySymbol.propertyEventListeners].get('onstalled') ?? null;
}
set onstalled(value) {
this[PropertySymbol.propertyEventListeners].set('onstalled', value);
}
get onsubmit() {
return this[PropertySymbol.propertyEventListeners].get('onsubmit') ?? null;
}
set onsubmit(value) {
this[PropertySymbol.propertyEventListeners].set('onsubmit', value);
}
get onsuspend() {
return this[PropertySymbol.propertyEventListeners].get('onsuspend') ?? null;
}
set onsuspend(value) {
this[PropertySymbol.propertyEventListeners].set('onsuspend', value);
}
get ontimeupdate() {
return this[PropertySymbol.propertyEventListeners].get('ontimeupdate') ?? null;
}
set ontimeupdate(value) {
this[PropertySymbol.propertyEventListeners].set('ontimeupdate', value);
}
get ontoggle() {
return this[PropertySymbol.propertyEventListeners].get('ontoggle') ?? null;
}
set ontoggle(value) {
this[PropertySymbol.propertyEventListeners].set('ontoggle', value);
}
get onvolumechange() {
return this[PropertySymbol.propertyEventListeners].get('onvolumechange') ?? null;
}
set onvolumechange(value) {
this[PropertySymbol.propertyEventListeners].set('onvolumechange', value);
}
get onwaiting() {
return this[PropertySymbol.propertyEventListeners].get('onwaiting') ?? null;
}
set onwaiting(value) {
this[PropertySymbol.propertyEventListeners].set('onwaiting', value);
}
get onwebkitanimationend() {
return this[PropertySymbol.propertyEventListeners].get('onwebkitanimationend') ?? null;
}
set onwebkitanimationend(value) {
this[PropertySymbol.propertyEventListeners].set('onwebkitanimationend', value);
}
get onwebkitanimationiteration() {
return this[PropertySymbol.propertyEventListeners].get('onwebkitanimationiteration') ?? null;
}
set onwebkitanimationiteration(value) {
this[PropertySymbol.propertyEventListeners].set('onwebkitanimationiteration', value);
}
get onwebkitanimationstart() {
return this[PropertySymbol.propertyEventListeners].get('onwebkitanimationstart') ?? null;
}
set onwebkitanimationstart(value) {
this[PropertySymbol.propertyEventListeners].set('onwebkitanimationstart', value);
}
get onwebkittransitionend() {
return this[PropertySymbol.propertyEventListeners].get('onwebkittransitionend') ?? null;
}
set onwebkittransitionend(value) {
this[PropertySymbol.propertyEventListeners].set('onwebkittransitionend', value);
}
get onwheel() {
return this[PropertySymbol.propertyEventListeners].get('onwheel') ?? null;
}
set onwheel(value) {
this[PropertySymbol.propertyEventListeners].set('onwheel', value);
}
get onauxclick() {
return this[PropertySymbol.propertyEventListeners].get('onauxclick') ?? null;
}
set onauxclick(value) {
this[PropertySymbol.propertyEventListeners].set('onauxclick', value);
}
get ongotpointercapture() {
return this[PropertySymbol.propertyEventListeners].get('ongotpointercapture') ?? null;
}
set ongotpointercapture(value) {
this[PropertySymbol.propertyEventListeners].set('ongotpointercapture', value);
}
get onlostpointercapture() {
return this[PropertySymbol.propertyEventListeners].get('onlostpointercapture') ?? null;
}
set onlostpointercapture(value) {
this[PropertySymbol.propertyEventListeners].set('onlostpointercapture', value);
}
get onpointerdown() {
return this[PropertySymbol.propertyEventListeners].get('onpointerdown') ?? null;
}
set onpointerdown(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerdown', value);
}
get onpointermove() {
return this[PropertySymbol.propertyEventListeners].get('onpointermove') ?? null;
}
set onpointermove(value) {
this[PropertySymbol.propertyEventListeners].set('onpointermove', value);
}
get onpointerrawupdate() {
return this[PropertySymbol.propertyEventListeners].get('onpointerrawupdate') ?? null;
}
set onpointerrawupdate(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerrawupdate', value);
}
get onpointerup() {
return this[PropertySymbol.propertyEventListeners].get('onpointerup') ?? null;
}
set onpointerup(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerup', value);
}
get onpointercancel() {
return this[PropertySymbol.propertyEventListeners].get('onpointercancel') ?? null;
}
set onpointercancel(value) {
this[PropertySymbol.propertyEventListeners].set('onpointercancel', value);
}
get onpointerover() {
return this[PropertySymbol.propertyEventListeners].get('onpointerover') ?? null;
}
set onpointerover(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerover', value);
}
get onpointerout() {
return this[PropertySymbol.propertyEventListeners].get('onpointerout') ?? null;
}
set onpointerout(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerout', value);
}
get onpointerenter() {
return this[PropertySymbol.propertyEventListeners].get('onpointerenter') ?? null;
}
set onpointerenter(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerenter', value);
}
get onpointerleave() {
return this[PropertySymbol.propertyEventListeners].get('onpointerleave') ?? null;
}
set onpointerleave(value) {
this[PropertySymbol.propertyEventListeners].set('onpointerleave', value);
}
get onselectstart() {
return this[PropertySymbol.propertyEventListeners].get('onselectstart') ?? null;
}
set onselectstart(value) {
this[PropertySymbol.propertyEventListeners].set('onselectstart', value);
}
get onselectionchange() {
return this[PropertySymbol.propertyEventListeners].get('onselectionchange') ?? null;
}
set onselectionchange(value) {
this[PropertySymbol.propertyEventListeners].set('onselectionchange', value);
}
get onanimationend() {
return this[PropertySymbol.propertyEventListeners].get('onanimationend') ?? null;
}
set onanimationend(value) {
this[PropertySymbol.propertyEventListeners].set('onanimationend', value);
}
get onanimationiteration() {
return this[PropertySymbol.propertyEventListeners].get('onanimationiteration') ?? null;
}
set onanimationiteration(value) {
this[PropertySymbol.propertyEventListeners].set('onanimationiteration', value);
}
get onanimationstart() {
return this[PropertySymbol.propertyEventListeners].get('onanimationstart') ?? null;
}
set onanimationstart(value) {
this[PropertySymbol.propertyEventListeners].set('onanimationstart', value);
}
get ontransitionrun() {
return this[PropertySymbol.propertyEventListeners].get('ontransitionrun') ?? null;
}
set ontransitionrun(value) {
this[PropertySymbol.propertyEventListeners].set('ontransitionrun', value);
}
get ontransitionstart() {
return this[PropertySymbol.propertyEventListeners].get('ontransitionstart') ?? null;
}
set ontransitionstart(value) {
this[PropertySymbol.propertyEventListeners].set('ontransitionstart', value);
}
get ontransitionend() {
return this[PropertySymbol.propertyEventListeners].get('ontransitionend') ?? null;
}
set ontransitionend(value) {
this[PropertySymbol.propertyEventListeners].set('ontransitionend', value);
}
get ontransitioncancel() {
return this[PropertySymbol.propertyEventListeners].get('ontransitioncancel') ?? null;
}
set ontransitioncancel(value) {
this[PropertySymbol.propertyEventListeners].set('ontransitioncancel', value);
}
get oncopy() {
return this[PropertySymbol.propertyEventListeners].get('oncopy') ?? null;
}
set oncopy(value) {
this[PropertySymbol.propertyEventListeners].set('oncopy', value);
}
get oncut() {
return this[PropertySymbol.propertyEventListeners].get('oncut') ?? null;
}
set oncut(value) {
this[PropertySymbol.propertyEventListeners].set('oncut', value);
}
get onpaste() {
return this[PropertySymbol.propertyEventListeners].get('onpaste') ?? null;
}
set onpaste(value) {
this[PropertySymbol.propertyEventListeners].set('onpaste', value);
}
get onscrollend() {
return this[PropertySymbol.propertyEventListeners].get('onscrollend') ?? null;
}
set onscrollend(value) {
this[PropertySymbol.propertyEventListeners].set('onscrollend', value);
}
get onscrollsnapchange() {
return this[PropertySymbol.propertyEventListeners].get('onscrollsnapchange') ?? null;
}
set onscrollsnapchange(value) {
this[PropertySymbol.propertyEventListeners].set('onscrollsnapchange', value);
}
get onscrollsnapchanging() {
return this[PropertySymbol.propertyEventListeners].get('onscrollsnapchanging') ?? null;
}
set onscrollsnapchanging(value) {
this[PropertySymbol.propertyEventListeners].set('onscrollsnapchanging', value);
}
/* eslint-enable jsdoc/require-jsdoc */
/**
* Returns adopted style sheets.
*
* @returns Adopted style sheets.
*/
get adoptedStyleSheets() {
return this[PropertySymbol.adoptedStyleSheets];
}
/**
* Sets adopted style sheets.
*
* @param value Adopted style sheets.
*/
set adoptedStyleSheets(value) {
this[PropertySymbol.adoptedStyleSheets] = value;
}
/**
* Returns DOM implementation.
*
* @returns DOM implementation.
*/
get implementation() {
return this[PropertySymbol.implementation];
}
/**
* Returns document ready state.
*
* @returns Document ready state.
*/
get readyState() {
return this[PropertySymbol.readyState];
}
/**
* Returns referrer.
*
* @returns Referrer.
*/
get referrer() {
return this[PropertySymbol.referrer];
}
/**
* Returns default view.
*
* @returns Default view.
*/
get defaultView() {
return this[PropertySymbol.defaultView];
}
/**
* Returns document children.
*/
get children() {
if (!this[PropertySymbol.children]) {
const elements = this[PropertySymbol.elementArray];
this[PropertySymbol.children] = new HTMLCollection_js_1.default(PropertySymbol.illegalConstructor, () => elements);
}
return this[PropertySymbol.children];
}
/**
* Returns character set.
*
* @deprecated
* @returns Character set.
*/
get charset() {
return this.characterSet;
}
/**
* Returns character set.
*
* @returns Character set.
*/
get characterSet() {
const charset = QuerySelector_js_1.default.querySelector(this, 'meta[charset]')?.getAttributeNS(null, 'charset');
return charset ? charset : 'UTF-8';
}
/**
* Returns title.
*
* @returns Title.
*/
get title() {
const element = ParentNodeUtility_js_1.default.getElementByTagName(this, 'title');
if (element) {
return element.text.trim();
}
return '';
}
/**
* Returns set title.
*
*/
set title(title) {
const element = ParentNodeUtility_js_1.default.getElementByTagName(this, 'title');
if (element) {
element.textContent = title;
}
else {
const newElement = this.createElement('title');
newElement.textContent = title;
this.head.appendChild(newElement);
}
}
/**
* Returns a collection of all area elements and a elements in a document with a value for the href attribute.
*/
get links() {
return QuerySelector_js_1.default.querySelectorAll(this, 'a[href],area[href]');
}
/**
* Returns a collection of all form elements in a document.
*/
get forms() {
if (!this[PropertySymbol.forms]) {
this[PropertySymbol.forms] = (ParentNodeUtility_js_1.default.getElementsByTagName(this, 'form'));
}
return this[PropertySymbol.forms];
}
/**
* Last element child.
*
* @returns Element.
*/
get childElementCount() {
return this[PropertySymbol.elementArray].length;
}
/**
* First element child.
*
* @returns Element.
*/
get firstElementChild() {
return this[PropertySymbol.elementArray][0] ?? null;
}
/**
* Last element child.
*
* @returns Element.
*/
get lastElementChild() {
const children = this[PropertySymbol.elementArray];
return children[children.length - 1] ?? null;
}
/**
* Returns cookie string.
*
* @returns Cookie.
*/
get cookie() {
const browserFrame = new WindowBrowserContext_js_1.default(this[PropertySymbol.window]).getBrowserFrame();
if (!browserFrame) {
return '';
}
return CookieStringUtility_js_1.default.cookiesToString(browserFrame.page.context.cookieContainer.getCookies(new url_1.URL(this[PropertySymbol.window].location.href), true));
}
/**
* Sets a cookie string.
*
* @param cookie Cookie string.
*/
set cookie(cookie) {
const browserFrame = new WindowBrowserContext_js_1.default(this[PropertySymbol.window]).getBrowserFrame();
if (!browserFrame) {
return;
}
browserFrame.page.context.cookieContainer.addCookies([
CookieStringUtility_js_1.default.stringToCookie(new url_1.URL(this[PropertySymbol.window].location.href), cookie)
]);
}
/**
* Node name.
*
* @returns Node name.
*/
get nodeName() {
return '#document';
}
/**
* Returns <html> element.
*
* @returns Element.
*/
get documentElement() {
return this[PropertySymbol.elementArray][0] ?? null;
}
/**
* Returns document type element.
*
* @returns Document type.
*/
get doctype() {
for (const node of this[PropertySymbol.nodeArray]) {
if (node instanceof DocumentType_js_1.default) {
return node;
}
}
return null;
}
/**
* Returns <body> element.
*
* @returns Element.
*/
get body() {
const documentElement = this.documentElement;
return documentElement
? ParentNodeUtility_js_1.default.getElementByTagName(documentElement, 'body')
: null;
}
/**
* Returns <head> element.
*
* @returns Element.
*/
get head() {
const documentElement = this.documentElement;
return documentElement
? ParentNodeUtility_js_1.default.getElementByTagName(documentElement, 'head')
: null;
}
/**
* Returns CSS style sheets.
*
* @returns CSS style sheets.
*/
get styleSheets() {
const styles = (QuerySelector_js_1.default.querySelectorAll(this, 'link[rel="stylesheet"][href],style'));
const styleSheets = [];
for (const style of styles) {
const sheet = style.sheet;
if (sheet) {
styleSheets.push(sheet);
}
}
return styleSheets;
}
/**
* Returns active element.
*
* @returns Active element.
*/
get activeElement() {
if (this[PropertySymbol.activeElement] &&
!this[PropertySymbol.activeElement][PropertySymbol.isConnected]) {
this[PropertySymbol.activeElement] = null;
}
if (this[PropertySymbol.activeElement] &&
this[PropertySymbol.activeElement] instanceof Element_js_1.default) {
let rootNode = (this[PropertySymbol.activeElement].getRootNode());
let activeElement = this[PropertySymbol.activeElement];
while (rootNode !== this) {
activeElement = rootNode.host;
rootNode = activeElement ? activeElement.getRootNode() : this;
}
return activeElement;
}
return this[PropertySymbol.activeElement] || this.body || this.documentElement || null;
}
/**
* Returns scrolling element.
*
* @returns Scrolling element.
*/
get scrollingElement() {
return this.documentElement;
}
/**
* Returns location.
*
* @returns Location.
*/
get location() {
return this[PropertySymbol.window].location;
}
/**
* Returns scripts.
*
* @returns Scripts.
*/
get scripts() {
return this.getElementsByTagName('script');
}
/**
* Returns base URI.
*
* @override
* @returns Base URI.
*/
get baseURI() {
const element = ParentNodeUtility_js_1.default.getElementByTagName(this, 'base');
if (element) {
return element.href;
}
return this[PropertySymbol.window].location.href;
}
/**
* Returns URL.
*
* @returns URL of the current document.
* */
get URL() {
return this[PropertySymbol.window].location.href;
}
/**
* Returns document URI.
*
* @returns URL of the current document.
* */
get documentURI() {
return this.URL;
}
/**
* Returns domain.
*
* @returns Domain.
* */
get domain() {
return this[PropertySymbol.window].location.hostname;
}
/**
* Returns document visibility state.
*
* @returns the visibility state of the current document.
* */
get visibilityState() {
if (this.defaultView) {
return VisibilityStateEnum_js_1.default.visible;
}
return VisibilityStateEnum_js_1.default.hidden;
}
/**
* Returns document hidden state.
*
* @returns the hidden state of the current document.
* */
get hidden() {
if (this.defaultView) {
return false;
}
return true;
}
/**
* Gets the currently executing script element.
*
* @returns the currently executing script element.
*/
get currentScript() {
return this[PropertySymbol.currentScript];
}
/**
* Returns content type.
*
* @returns Content type.
*/
get contentType() {
return this[PropertySymbol.contentType];
}
/**
* Inserts a set of Node objects or DOMString objects after the last child of the ParentNode. DOMString objects are inserted as equivalent Text nodes.
*
* @param nodes List of Node or DOMString.
*/
append(...nodes) {
ParentNodeUtility_js_1.default.append(this, ...nodes);
}
/**
* Inserts a set of Node objects or DOMString objects before the first child of the ParentNode. DOMString objects are inserted as equivalent Text nodes.
*
* @param nodes List of Node or DOMString.
*/
prepend(...nodes) {
ParentNodeUtility_js_1.default.prepend(this, ...nodes);
}
/**
* Replaces the existing children of a node with a specified new set of children.
*
* @param nodes List of Node or DOMString.
*/
replaceChildren(...nodes) {
ParentNodeUtility_js_1.default.replaceChildren(this, ...nodes);
}
/**
* Query CSS selector to find matching elments.
*
* @param selector CSS selector.
* @returns Matching elements.
*/
querySelectorAll(selector) {
return QuerySelector_js_1.default.querySelectorAll(this, selector);
}
/**
* Query CSS Selector to find matching node.
*
* @param selector CSS selector.
* @returns Matching element.
*/
querySelector(selector) {
return QuerySelector_js_1.default.querySelector(this, selector);
}
/**
* Returns true if the command is supported.
* @deprecated
* @param _ Command.
* @returns True if the command is supported, false otherwise.
*/
queryCommandSupported(_) {
if (!arguments.length) {
throw new this[PropertySymbol.window].TypeError("Failed to execute 'queryCommandSupported' on 'Document': 1 argument required, but only 0 present.");
}
return true;
}
/**
* Returns an elements by class name.
*
* @param className Tag name.
* @returns Matching element.
*/
getElementsByClassName(className) {
return ParentNodeUtility_js_1.default.getElementsByClassName(this, className);
}
/**
* Returns an elements by tag name.
*
* @param tagName Tag name.
* @returns Matching element.
*/
getElementsByTagName(tagName) {
return ParentNodeUtility_js_1.default.getElementsByTagName(this, tagName);
}
/**
* Returns an elements by tag name and namespace.
*
* @param namespaceURI Namespace URI.
* @param tagName Tag name.
* @returns Matching element.
*/
getElementsByTagNameNS(namespaceURI, tagName) {
return ParentNodeUtility_js_1.default.getElementsByTagNameNS(this, namespaceURI, tagName);
}
/**
* Returns an element by ID.
*
* @param id ID.
* @returns Matching element.
*/
getElementById(id) {
return ParentNodeUtility_js_1.default.getElementById(this, id);
}
/**
* Returns an element by Name.
*
* @returns Matching element.
* @param name
*/
getElementsByName(name) {
return QuerySelector_js_1.default.querySelectorAll(this, `[name="${name}"]`);
}
/**
* Replaces the document HTML with new HTML.
*
* @param html HTML.
*/
write(html) {
if (this[PropertySymbol.isFirstWrite] || this[PropertySymbol.isFirstWriteAfterOpen]) {
if (this[PropertySymbol.isFirstWrite]) {
if (!this[PropertySymbol.isFirstWriteAfterOpen]) {
this.open();
}
this[PropertySymbol.isFirstWrite] = false;
}
const { documentElement, head, body } = this;
if (!documentElement || !head || !body) {
this.open();
}
this[PropertySymbol.isFirstWrite] = false;
this[PropertySymbol.isFirstWriteAfterOpen] = false;
new HTMLParser_js_1.default(this[PropertySymbol.window], {
evaluateScripts: true
}).parse(html, this);
}
else {
new HTMLParser_js_1.default(this[PropertySymbol.window], {
evaluateScripts: true
}).parse(html, this.body);
}
}
/**
* Opens the document.
*
* @returns Document.
*/
open() {
this[PropertySymbol.isFirstWriteAfterOpen] = true;
for (const eventType of this[PropertySymbol.listeners].bubbling.keys()) {
const listeners = this[PropertySymbol.listeners].bubbling.get(eventType);
if (listeners) {
for (const listener of listeners) {
this.removeEventListener(eventType, listener);
}
}
}
for (const eventType of this[PropertySymbol.listeners].capturing.keys()) {
const listeners = this[PropertySymbol.listeners].capturing.get(eventType);
if (listeners) {
for (const listener of listeners) {
this.removeEventListener(eventType, listener);
}
}
}
const childNodes = this[PropertySymbol.nodeArray];
while (childNodes.length) {
this.removeChild(childNodes[0]);
}
// Default document elements
const doctype = this[PropertySymbol.implementation].createDocumentType('html', '', '');
const documentElement = this.createElement('html');
const bodyElement = this.createElement('body');
const headElement = this.createElement('head');
this.appendChild(doctype);
this.appendChild(documentElement);
documentElement.appendChild(headElement);
documentElement.appendChild(bodyElement);
return this;
}
/**
* Closes the document.
*/
close() { }
/**
* Creates an element.
*
* @param qualifiedName Tag name.
* @param [options] Options.
* @param [options.is] Tag name of a custom element previously defined via customElements.define().
* @returns Element.
*/
createElement(qualifiedName, options) {
return (this.createElementNS(NamespaceURI_js_1.default.html, StringUtility_js_1.default.asciiLowerCase(String(qualifiedName)), options));
}
/**
* Creates an element with the specified namespace URI and qualified name.
*
* @param namespaceURI Namespace URI.
* @param qualifiedName Tag name.
* @param [options] Options.
* @param [options.is] Tag name of a custom element previously defined via customElements.define().
* @returns Element.
*/
createElementNS(namespaceURI, qualifiedName, options) {
const window = this[PropertySymbol.window];
qualifiedName = String(qualifiedName);
if (!qualifiedName) {
throw new window.DOMException("Failed to execute 'createElementNS' on 'Document': The qualified name provided is empty.");
}
const parts = qualifiedName.split(':');
const localName = parts[1] ?? parts[0];
const prefix = parts[1] ? parts[0] : null;
switch (namespaceURI) {
case NamespaceURI_js_1.default.svg:
const config = SVGElementConfig_js_1.default[qualifiedName.toLowerCase()];
const svgElementClass = config && config.localName === qualifiedName
? window[config.className]
: window.SVGElement;
const svgElement = NodeFactory_js_1.default.createNode(this, svgElementClass);
svgElement[PropertySymbol.tagName] = qualifiedName;
svgElement[PropertySymbol.localName] = localName;
svgElement[PropertySymbol.prefix] = prefix;
svgElement[PropertySymbol.namespaceURI] = namespaceURI;
svgElement[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
return svgElement;
case NamespaceURI_js_1.default.html:
// Custom HTML element
// If a polyfill is used, [PropertySymbol.registry] may be undefined
const customElementDefinition = window.customElements[PropertySymbol.registry]?.get(options && options.is ? String(options.is) : qualifiedName);
if (customElementDefinition) {
const element = new customElementDefinition.elementClass();
element[PropertySymbol.tagName] = StringUtility_js_1.default.asciiUpperCase(qualifiedName);
element[PropertySymbol.localName] = localName;
element[PropertySymbol.prefix] = prefix;
element[PropertySymbol.namespaceURI] = namespaceURI;
element[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
return element;
}
const elementClass = HTMLElementConfig_js_1.default[qualifiedName]
? window[HTMLElementConfig_js_1.default[qualifiedName].className]
: null;
// Known HTML element
if (elementClass) {
const element = NodeFactory_js_1.default.createNode(this, elementClass);
element[PropertySymbol.tagName] = StringUtility_js_1.default.asciiUpperCase(qualifiedName);
element[PropertySymbol.localName] = localName;
element[PropertySymbol.prefix] = prefix;
element[PropertySymbol.namespaceURI] = namespaceURI;
element[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
return element;
}
// Unknown HTML element (if it has an hyphen in the name, it is a custom element that hasn't been defined yet)
const unknownElementClass = qualifiedName.includes('-')
? window.HTMLElement
: window.HTMLUnknownElement;
const unknownElement = NodeFactory_js_1.default.createNode(this, unknownElementClass);
unknownElement[PropertySymbol.tagName] = StringUtility_js_1.default.asciiUpperCase(qualifiedName);
unknownElement[PropertySymbol.localName] = localName;
unknownElement[PropertySymbol.prefix] = prefix;
unknownElement[PropertySymbol.namespaceURI] = namespaceURI;
unknownElement[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
return unknownElement;
default:
const element = NodeFactory_js_1.default.createNode(this, Element_js_1.default);
element[PropertySymbol.tagName] = qualifiedName;
element[PropertySymbol.localName] = localName;
element[PropertySymbol.prefix] = prefix;
element[PropertySymbol.namespaceURI] = namespaceURI;
element[PropertySymbol.isValue] = options && options.is ? String(options.is) : null;
return element;
}
}
/* eslint-enable jsdoc/valid-types */
/**
* Creates a text node.
*
* @param [data] Text data.
* @returns Text node.
*/
createTextNode(data) {
if (arguments.length < 1) {
throw new this[PropertySymbol.window].TypeError(`Failed to execute 'createTextNode' on 'Document': 1 argument required, but only ${arguments.length} present.`);
}
// We should use the NodeFactory and not the class constructor, so that owner document will be this document
return NodeFactory_js_1.default.createNode(this, this[PropertySymbol.window].Text, String(data));
}
/**
* Creates a comment node.
*
* @param [data] Text data.
* @returns Text node.
*/
createComment(data) {
if (arguments.length < 1) {
throw new this[PropertySymbol.window].TypeError(`Failed to execute 'createComment' on 'Document': 1 argument required, but only ${arguments.length} present.`);
}
// We should use the NodeFactory and not the class constructor, so that owner document will be this document
return NodeFactory_js_1.default.createNode(this, this[PropertySymbol.window].Comment, String(data));
}
/**
* Creates a document fragment.
*
* @returns Document fragment.
*/
createDocumentFragment() {
// We should use the NodeFactory and not the class constructor, so that owner document will be this document
return NodeFactory_js_1.default.createNode(this, this[PropertySymbol.window].DocumentFragment);
}
/**
* Creates a node iterator.
*
* @param root Root.
* @param [whatToShow] What to show.
* @param [filter] Filter.
*/
createNodeIterator(root, whatToShow = -1, filter = null) {
return new NodeIterator_js_1.default(root, whatToShow, filter);
}
/**
* Creates a Tree Walker.
*
* @param root Root.
* @param [whatToShow] What to show.
* @param [filter] Filter.
*/
createTreeWalker(root, whatToShow = -1, filter = null) {
return new TreeWalker_js_1.default(root, whatToShow, filter);
}
/**
* Creates an event.
*
* @deprecated
* @param type Type.
* @returns Event.
*/
createEvent(type) {
if (typeof this[PropertySymbol.window][type] === 'function') {
return new this[PropertySymbol.window][type]('init');
}
return new Event_js_1.default('init');
}
/**
* Creates an Attr node.
*
* @param qualifiedName Name.
* @returns Attribute.
*/
createAttribute(qualifiedName) {
// We should use the NodeFactory and not the class constructor, so that owner document will be this document
const attribute = NodeFactory_js_1.default.createNode(this, this[PropertySymbol.window].Attr);
const name = StringUtility_js_1.default.asciiLowerCase(qualifiedName);
const parts = name.split(':');
attribute[PropertySymbol.name] = name;
attribute[PropertySymbol.localName] = parts[1] ?? name;
attribute[PropertySymbol.prefix] = parts[1] ? parts[0] : null;
return attribute;
}
/**
* Creates a namespaced Attr node.
*
* @param namespaceURI Namespace URI.
* @param qualifiedName Qualified name.
* @returns Element.
*/
createAttributeNS(namespaceURI, qualifiedName) {
// We should use the NodeFactory and not the class constructor, so that owner document will be this document
const attribute = NodeFactory_js_1.default.createNode(this, this[PropertySymbol.window].Attr);
const parts = qualifiedName.split(':');
attribute[PropertySymbol.namespaceURI] = namespaceURI;
attribute[PropertySymbol.name] = qualifiedName;
attribute[PropertySymbol.localName] = parts[1] ?? qualifiedName;
attribute[PropertySymbol.prefix] = parts[1] ? parts[0] : null;
if (!namespaceURI && attribute[PropertySymbol.prefix]) {
throw new this[PropertySymbol.window].DOMException(`Failed to execute 'createAttributeNS' on 'Document': The namespace URI provided ('${namespaceURI || ''}') is not valid for the qualified name provided ('${qualifiedName}').`, DOMExceptionNameEnum_js_1.default.namespaceError);
}
return attribute;
}
/**
* Imports a node.
*
* @param node Node to import.
* @param [deep=false] Set to "true" if the clone should be deep.
*/
importNode(node, deep = false) {
if (!(node instanceof Node_js_1.default)) {
throw new this[PropertySymbol.window].DOMException('Parameter 1 was not of type Node.');
}
const clone = node.cloneNode(deep);
this.#importNode(clone);
return clone;
}
/**
* Creates a range.
*
* @returns Range.
*/
createRange() {
return new this[PropertySymbol.window].Range();
}
/**
* Adopts a node.
*
* @param node Node to adopt.
* @returns Adopted node.
*/
adoptNode(node) {
if (!(node instanceof Node_js_1.default)) {
throw new this[PropertySymbol.window].DOMException('Parameter 1 was not of type Node.');
}
const adopted = node[PropertySymbol.parentNode]
? node[PropertySymbol.parentNode].removeChild(node)
: node;
const document = this;
Object.defineProperty(adopted, 'ownerDocument', { value: document });
return adopted;
}
/**
* Returns selection.
*
* @returns Selection.
*/
getSelection() {
if (!this.#selection) {
this.#selection = new Selection_js_1.default(this);
}
return this.#selection;
}
/**
* Returns a boolean value indicating whether the document or any element inside the document has focus.
*
* @returns "true" if the document has focus.
*/
hasFocus() {
return !!this.activeElement;
}
/**
* Creates a Processing Instruction node.
*
* @param target Target.
* @param data Data.
* @returns ProcessingInstruction.
*/
createProcessingInstruction(target, data) {
if (arguments.length < 2) {
throw new this[PropertySymbol.window].TypeError(`Failed to execute 'createProcessingInstruction' on 'Document': 2 arguments required, but only ${arguments.length} present.`);
}
target = String(target);
data = String(data);
if (!target || !PROCESSING_INSTRUCTION_TARGET_REGEXP.test(target)) {
throw new this[PropertySymbol.window].DOMException(`Failed to execute 'createProcessingInstruction' on 'Document': The target provided ('${target}') is not a valid name.`);
}
if (data.includes('?>')) {
throw new this[PropertySymbol.window].DOMException(`Failed to execute 'createProcessingInstruction' on 'Document': The data provided ('?>') contains '?>'`);
}
// We should use the NodeFactory and not the class constructor, so that owner document will be this document
const element = NodeFactory_js_1.default.createNode(this, this[PropertySymbol.window].ProcessingInstruction);
element[PropertySymbol.data] = data;
element[PropertySymbol.target] = target;
return element;
}
/**
* Get element at a given point.
*
* @param _x horizontal coordinate
* @param _y vertical coordinate
* @returns Always returns null since Happy DOM does not render elements.
*/
elementFromPoint(_x, _y) {
return null;
}
/**
* Imports a node.
*
* @param node Node.
*/
#importNode(node) {
node[PropertySymbol.ownerDocument] = this;
for (const child of node[PropertySymbol.nodeArray]) {
this.#importNode(child);
}
}
}
exports.default = Document;
//# sourceMappingURL=Document.cjs.map