UNPKG

happy-dom

Version:

Happy DOM is a JavaScript implementation of a web browser without its graphical user interface. It includes many web standards from WHATWG DOM and HTML.

132 lines 6.69 kB
"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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _HTMLIFrameElementNamedNodeMap_instances, _HTMLIFrameElementNamedNodeMap_pageLoader, _HTMLIFrameElementNamedNodeMap_validateSandboxFlags; Object.defineProperty(exports, "__esModule", { value: true }); const HTMLElementNamedNodeMap_js_1 = __importDefault(require("../html-element/HTMLElementNamedNodeMap.cjs")); const PropertySymbol = __importStar(require("../../PropertySymbol.cjs")); const DOMTokenList_js_1 = __importDefault(require("../../dom-token-list/DOMTokenList.cjs")); const SANDBOX_FLAGS = [ 'allow-downloads', 'allow-forms', 'allow-modals', 'allow-orientation-lock', 'allow-pointer-lock', 'allow-popups', 'allow-popups-to-escape-sandbox', 'allow-presentation', 'allow-same-origin', 'allow-scripts', 'allow-top-navigation', 'allow-top-navigation-by-user-activation', 'allow-top-navigation-to-custom-protocols' ]; /** * Named Node Map. * * @see https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap */ class HTMLIFrameElementNamedNodeMap extends HTMLElementNamedNodeMap_js_1.default { /** * Constructor. * * @param ownerElement Owner element. * @param pageLoader */ constructor(ownerElement, pageLoader) { super(ownerElement); _HTMLIFrameElementNamedNodeMap_instances.add(this); _HTMLIFrameElementNamedNodeMap_pageLoader.set(this, void 0); __classPrivateFieldSet(this, _HTMLIFrameElementNamedNodeMap_pageLoader, pageLoader, "f"); } /** * @override */ setNamedItem(item) { const replacedAttribute = super.setNamedItem(item); if (item[PropertySymbol.name] === 'srcdoc') { __classPrivateFieldGet(this, _HTMLIFrameElementNamedNodeMap_pageLoader, "f").loadPage(); } // If the src attribute and the srcdoc attribute are both specified together, the srcdoc attribute takes priority. if (item[PropertySymbol.name] === 'src' && this[PropertySymbol.ownerElement][PropertySymbol.attributes]['srcdoc']?.value === undefined && item[PropertySymbol.value] && item[PropertySymbol.value] !== replacedAttribute?.[PropertySymbol.value]) { __classPrivateFieldGet(this, _HTMLIFrameElementNamedNodeMap_pageLoader, "f").loadPage(); } if (item[PropertySymbol.name] === 'sandbox') { if (!this[PropertySymbol.ownerElement][PropertySymbol.sandbox]) { this[PropertySymbol.ownerElement][PropertySymbol.sandbox] = new DOMTokenList_js_1.default(this[PropertySymbol.ownerElement], 'sandbox'); } else { this[PropertySymbol.ownerElement][PropertySymbol.sandbox][PropertySymbol.updateIndices](); } __classPrivateFieldGet(this, _HTMLIFrameElementNamedNodeMap_instances, "m", _HTMLIFrameElementNamedNodeMap_validateSandboxFlags).call(this); } return replacedAttribute || null; } /** * @override */ [(_HTMLIFrameElementNamedNodeMap_pageLoader = new WeakMap(), _HTMLIFrameElementNamedNodeMap_instances = new WeakSet(), PropertySymbol.removeNamedItem)](name) { const removedItem = super[PropertySymbol.removeNamedItem](name); if (removedItem && (removedItem[PropertySymbol.name] === 'srcdoc' || removedItem[PropertySymbol.name] === 'src')) { __classPrivateFieldGet(this, _HTMLIFrameElementNamedNodeMap_pageLoader, "f").loadPage(); } return removedItem; } } _HTMLIFrameElementNamedNodeMap_validateSandboxFlags = function _HTMLIFrameElementNamedNodeMap_validateSandboxFlags() { const window = this[PropertySymbol.ownerElement][PropertySymbol.ownerDocument][PropertySymbol.ownerWindow]; const values = this[PropertySymbol.ownerElement][PropertySymbol.sandbox].values(); const invalidFlags = []; for (const token of values) { if (!SANDBOX_FLAGS.includes(token)) { invalidFlags.push(token); } } if (invalidFlags.length === 1) { window.console.error(`Error while parsing the 'sandbox' attribute: '${invalidFlags[0]}' is an invalid sandbox flag.`); } else if (invalidFlags.length > 1) { window.console.error(`Error while parsing the 'sandbox' attribute: '${invalidFlags.join(`', '`)}' are invalid sandbox flags.`); } }; exports.default = HTMLIFrameElementNamedNodeMap; //# sourceMappingURL=HTMLIFrameElementNamedNodeMap.cjs.map