@aidenlx/player
Version:
Headless web components that make integrating media on the a web a breeze.
71 lines (70 loc) • 2.17 kB
JavaScript
import "../../../chunks/chunk.S6UZ27SZ.js";
import {
DisposalBin,
isFunction,
isNil,
listen,
LogDispatcher,
noop,
redispatchEvent,
vdsEvent
} from "@vidstack/foundation";
class VideoPresentationController {
constructor(_host) {
this._host = _host;
this._logger = true ? new LogDispatcher(this._host) : void 0;
this._listenerDisposal = new DisposalBin();
const firstUpdated = _host.firstUpdated;
_host.firstUpdated = (changedProperties) => {
firstUpdated?.call(_host, changedProperties);
this._listenerDisposal.add(this._addPresentationModeChangeEventListener());
};
_host.addController({
hostDisconnected: this._handleHostDisconnected.bind(this)
});
}
_handleHostDisconnected() {
this.setPresentationMode("inline");
this._listenerDisposal.empty();
}
get presentationMode() {
return this._host.videoElement?.webkitPresentationMode;
}
get isInlineMode() {
return this.presentationMode === "inline";
}
get isPictureInPictureMode() {
return this.presentationMode === "inline";
}
get isFullscreenMode() {
return this.presentationMode === "fullscreen";
}
get isSupported() {
return isFunction(this._host.videoElement?.webkitSetPresentationMode);
}
setPresentationMode(mode) {
this._host.videoElement?.webkitSetPresentationMode?.(mode);
}
_addPresentationModeChangeEventListener() {
if (!this.isSupported || isNil(this._host.videoElement))
return noop;
if (true) {
this._logger?.debug("adding `webkitpresentationmodechanged` listener");
}
return listen(this._host.videoElement, "webkitpresentationmodechanged", this._handlePresentationModeChange.bind(this));
}
_handlePresentationModeChange(event) {
if (true) {
this._logger?.infoGroup("presentation mode change").labelledLog("Event", event).dispatch();
}
redispatchEvent(this._host, event);
this._host.dispatchEvent(vdsEvent("vds-video-presentation-change", {
detail: this.presentationMode,
triggerEvent: event
}));
}
}
export {
VideoPresentationController
};
//# sourceMappingURL=VideoPresentationController.js.map