EmbyCrackedClient/web/native/interop/fullscreenmanager.js
2025-06-25 11:46:04 +08:00

123 lines
No EOL
3.6 KiB
JavaScript

define(['events', 'dom'], function (events, dom) {
'use strict';
let appHost;
require(['apphost'], function (result) {
appHost = result;
});
function fullscreenManager() {
}
fullscreenManager.prototype.requestFullscreen = function (element) {
if (appHost.supports('windowstate')) {
appHost.setWindowState('Fullscreen');
return Promise.resolve();
}
element = element || document.documentElement;
if (element.requestFullscreen) {
element.requestFullscreen({
navigationUI: 'hide'
});
return Promise.resolve();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
return Promise.resolve();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
return Promise.resolve();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
return Promise.resolve();
}
// Hack - This is only available for video elements in ios safari
if (element.tagName !== 'VIDEO') {
element = document.querySelector('video') || element;
}
if (element.webkitEnterFullscreen) {
element.webkitEnterFullscreen();
}
return Promise.resolve();
};
fullscreenManager.prototype.exitFullscreen = function () {
if (appHost.supports('windowstate')) {
appHost.setWindowState('Normal');
} else if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.webkitCancelFullscreen) {
document.webkitCancelFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
return Promise.resolve();
};
fullscreenManager.prototype.isFullScreen = function () {
if (appHost.supports('windowstate')) {
let windowState = appHost.getWindowState();
return windowState === 'Fullscreen';
}
return document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement ? true : false;
};
fullscreenManager.prototype.isMaximized = function () {
if (appHost.supports('windowstate')) {
let windowState = appHost.getWindowState();
return windowState === 'Maximized';
}
return false;
};
fullscreenManager.prototype.triggerFullScreenChange = function () {
onFullScreenChange();
};
let manager = new fullscreenManager();
function onFullScreenChange() {
if (manager.isFullScreen()) {
document.documentElement.classList.add('isFullScreen');
} else {
document.documentElement.classList.remove('isFullScreen');
}
if (manager.isMaximized()) {
document.documentElement.classList.add('isMaximized');
} else {
document.documentElement.classList.remove('isMaximized');
}
events.trigger(manager, 'fullscreenchange');
}
dom.addEventListener(document, 'fullscreenchange', onFullScreenChange, {
passive: true
});
if (('onwebkitfullscreenchange' in document)) {
dom.addEventListener(document, 'webkitfullscreenchange', onFullScreenChange, {
passive: true
});
}
return manager;
});