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; });