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
JavaScript
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
;