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.

224 lines (200 loc) 4.1 kB
import BrowserWindow from '../../window/BrowserWindow.js'; import Document from '../document/Document.js'; import HTMLElement from '../html-element/HTMLElement.js'; import * as PropertySymbol from '../../PropertySymbol.js'; import HTMLFormElement from '../html-form-element/HTMLFormElement.js'; import ValidityState from '../../validity-state/ValidityState.js'; /** * HTMLObjectElement * * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement */ export default class HTMLObjectElement extends HTMLElement { public [PropertySymbol.formNode]: HTMLFormElement | null = null; public [PropertySymbol.validationMessage] = ''; public [PropertySymbol.validity] = new ValidityState(this); /** * Returns the content document. * * @returns Document */ public get contentDocument(): Document | null { return null; } /** * Returns the content window. * * @returns Window */ public get contentWindow(): BrowserWindow | null { return null; } /** * Returns source. * * @returns Source. */ public get data(): string { if (!this.hasAttribute('data')) { return ''; } try { return new URL(this.getAttribute('data'), this[PropertySymbol.ownerDocument].location.href) .href; } catch (e) { return this.getAttribute('data'); } } /** * Sets source. * * @param data Source. */ public set data(data: string) { this.setAttribute('data', data); } /** * Returns the parent form element. * * @returns Form. */ public get form(): HTMLFormElement { if (this[PropertySymbol.formNode]) { return this[PropertySymbol.formNode]; } const id = this.getAttribute('form'); if (!id || !this[PropertySymbol.isConnected]) { return null; } return <HTMLFormElement>this[PropertySymbol.ownerDocument].getElementById(id); } /** * Returns height. * * @returns Height. */ public get height(): string { return this.getAttribute('height') || ''; } /** * Sets height. * * @param height Height. */ public set height(height: string) { this.setAttribute('height', height); } /** * Returns width. * * @returns Width. */ public get width(): string { return this.getAttribute('width') || ''; } /** * Sets width. * * @param width Width. */ public set width(width: string) { this.setAttribute('width', width); } /** * Returns name. * * @returns Name. */ public get name(): string { return this.getAttribute('name') || ''; } /** * Sets name. * * @param name Name. */ public set name(name: string) { this.setAttribute('name', name); } /** * Returns type. * * @returns Type. */ public get type(): string { return this.getAttribute('type') || ''; } /** * Sets type. * * @param type Type. */ public set type(type: string) { this.setAttribute('type', type); } /** * Returns validation message. * * @returns Validation message. */ public get validationMessage(): string { return this[PropertySymbol.validationMessage]; } /** * Returns validity. * * @returns Validity. */ public get validity(): ValidityState { return this[PropertySymbol.validity]; } /** * Returns "true" if it will validate. * * @returns "true" if it will validate. */ public get willValidate(): boolean { return false; } /** * @override */ public override get tabIndex(): number { const tabIndex = this.getAttribute('tabindex'); if (tabIndex !== null) { const parsed = Number(tabIndex); return isNaN(parsed) ? 0 : parsed; } return 0; } /** * @override */ public override set tabIndex(tabIndex: number) { super.tabIndex = tabIndex; } /** * Checks validity. * * @returns "true" if the field is valid. */ public checkValidity(): boolean { return true; } /** * Reports validity. * * @returns Validity. */ public reportValidity(): boolean { return this.checkValidity(); } /** * Sets validation message. * * @param message Message. */ public setCustomValidity(message: string): void { this[PropertySymbol.validationMessage] = String(message); } }