2019-02-27 22:48:30 +00:00
|
|
|
define(['events', 'dom', 'apphost', 'browser'], function (events, dom, appHost, browser) {
|
2019-01-10 15:39:37 +03:00
|
|
|
'use strict';
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-01-10 15:39:37 +03:00
|
|
|
function fullscreenManager() {
|
2018-10-23 01:05:09 +03:00
|
|
|
|
|
|
|
}
|
2019-01-10 15:39:37 +03:00
|
|
|
|
|
|
|
fullscreenManager.prototype.requestFullscreen = function (element) {
|
|
|
|
|
|
|
|
element = element || document.documentElement;
|
|
|
|
|
|
|
|
if (element.requestFullscreen) {
|
|
|
|
element.requestFullscreen();
|
|
|
|
return;
|
|
|
|
} else if (element.mozRequestFullScreen) {
|
|
|
|
element.mozRequestFullScreen();
|
|
|
|
return;
|
|
|
|
} else if (element.webkitRequestFullscreen) {
|
|
|
|
element.webkitRequestFullscreen();
|
|
|
|
return;
|
|
|
|
} else if (element.msRequestFullscreen) {
|
|
|
|
element.msRequestFullscreen();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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();
|
2019-02-17 23:29:31 +01:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
};
|
2019-01-10 15:39:37 +03:00
|
|
|
|
|
|
|
fullscreenManager.prototype.exitFullscreen = function () {
|
|
|
|
|
2019-02-17 23:29:31 +01:00
|
|
|
if (!this.isFullScreen()) {
|
|
|
|
return;
|
|
|
|
}
|
2019-01-10 15:39:37 +03:00
|
|
|
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();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2019-02-17 23:29:31 +01:00
|
|
|
// TODO: use screenfull.js
|
2019-01-10 15:39:37 +03:00
|
|
|
fullscreenManager.prototype.isFullScreen = function () {
|
2019-02-17 23:29:31 +01:00
|
|
|
return document.fullscreen ||
|
|
|
|
document.mozFullScreen ||
|
|
|
|
document.webkitIsFullScreen ||
|
|
|
|
document.msFullscreenElement || /* IE/Edge syntax */
|
|
|
|
document.fullscreenElement || /* Standard syntax */
|
|
|
|
document.webkitFullscreenElement || /* Chrome, Safari and Opera syntax */
|
|
|
|
document.mozFullScreenElement; /* Firefox syntax */
|
2019-01-10 15:39:37 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
var manager = new fullscreenManager();
|
|
|
|
|
|
|
|
function onFullScreenChange() {
|
|
|
|
events.trigger(manager, 'fullscreenchange');
|
|
|
|
}
|
|
|
|
|
|
|
|
dom.addEventListener(document, 'fullscreenchange', onFullScreenChange, {
|
|
|
|
passive: true
|
|
|
|
});
|
|
|
|
|
|
|
|
dom.addEventListener(document, 'webkitfullscreenchange', onFullScreenChange, {
|
|
|
|
passive: true
|
|
|
|
});
|
|
|
|
|
|
|
|
dom.addEventListener(document, 'mozfullscreenchange', onFullScreenChange, {
|
|
|
|
passive: true
|
|
|
|
});
|
|
|
|
|
2019-02-27 22:48:30 +00:00
|
|
|
if (appHost.supports("fullscreenchange") && (browser.edgeUwp || -1 !== navigator.userAgent.toLowerCase().indexOf("electron"))) {
|
|
|
|
function isTargetValid(target) {
|
2019-03-25 23:43:03 +00:00
|
|
|
return !dom.parentWithTag(target, ['BUTTON', 'INPUT', 'TEXTAREA']);
|
2019-02-27 22:48:30 +00:00
|
|
|
}
|
2019-03-25 23:43:03 +00:00
|
|
|
|
2019-02-27 22:48:30 +00:00
|
|
|
dom.addEventListener(window, 'dblclick', function (e) {
|
2019-03-25 23:43:03 +00:00
|
|
|
|
2019-02-27 22:48:30 +00:00
|
|
|
if (isTargetValid(e.target)) {
|
|
|
|
if (manager.isFullScreen()) {
|
|
|
|
manager.exitFullscreen();
|
|
|
|
} else {
|
|
|
|
manager.requestFullscreen();
|
|
|
|
}
|
|
|
|
}
|
2019-03-25 23:43:03 +00:00
|
|
|
|
2019-02-27 22:48:30 +00:00
|
|
|
}, {
|
|
|
|
passive: true
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-01-10 15:39:37 +03:00
|
|
|
return manager;
|
2019-02-17 23:29:31 +01:00
|
|
|
});
|