- 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
1615 lines
59 KiB
JavaScript
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
|