UNPKG

@ktt45678/vidstack

Version:

UI component library for building high-quality, accessible video and audio experiences on the web.

58 lines (55 loc) 1.91 kB
import { signal, listenEvent, effect, peek, isString } from './vidstack-fG_Sx3Q9.js'; import { appendParamsToURL } from './vidstack-BnCZ4oyK.js'; class EmbedProvider { constructor(_iframe) { this._iframe = _iframe; this._src = signal(""); /** * Defines which referrer is sent when fetching the resource. * * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy} */ this.referrerPolicy = null; _iframe.setAttribute("frameBorder", "0"); _iframe.setAttribute("aria-hidden", "true"); _iframe.setAttribute( "allow", "autoplay; fullscreen; encrypted-media; picture-in-picture; accelerometer; gyroscope" ); if (this.referrerPolicy !== null) { _iframe.setAttribute("referrerpolicy", this.referrerPolicy); } } get iframe() { return this._iframe; } setup() { listenEvent(window, "message", this._onWindowMessage.bind(this)); listenEvent(this._iframe, "load", this._onLoad.bind(this)); effect(this._watchSrc.bind(this)); } _watchSrc() { const src = this._src(); if (!src.length) { this._iframe.setAttribute("src", ""); return; } const params = peek(() => this._buildParams()); this._iframe.setAttribute("src", appendParamsToURL(src, params)); } _postMessage(message, target) { this._iframe.contentWindow?.postMessage(JSON.stringify(message), target ?? "*"); } _onWindowMessage(event) { const origin = this._getOrigin(), isOriginMatch = (event.source === null || event.source === this._iframe?.contentWindow) && (!isString(origin) || origin === event.origin); if (!isOriginMatch) return; try { const message = JSON.parse(event.data); if (message) this._onMessage(message, event); return; } catch (e) { } if (event.data) this._onMessage(event.data, event); } } export { EmbedProvider };