You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
3.8 KiB
185 lines
3.8 KiB
4 years ago
|
/*!
|
||
|
* screenfull
|
||
|
* v5.0.2 - 2020-02-13
|
||
|
* (c) Sindre Sorhus; MIT License
|
||
|
*/
|
||
|
(function () {
|
||
|
'use strict';
|
||
|
|
||
|
var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};
|
||
|
var isCommonjs = typeof module !== 'undefined' && module.exports;
|
||
|
|
||
|
var fn = (function () {
|
||
|
var val;
|
||
|
|
||
|
var fnMap = [
|
||
|
[
|
||
|
'requestFullscreen',
|
||
|
'exitFullscreen',
|
||
|
'fullscreenElement',
|
||
|
'fullscreenEnabled',
|
||
|
'fullscreenchange',
|
||
|
'fullscreenerror'
|
||
|
],
|
||
|
// New WebKit
|
||
|
[
|
||
|
'webkitRequestFullscreen',
|
||
|
'webkitExitFullscreen',
|
||
|
'webkitFullscreenElement',
|
||
|
'webkitFullscreenEnabled',
|
||
|
'webkitfullscreenchange',
|
||
|
'webkitfullscreenerror'
|
||
|
|
||
|
],
|
||
|
// Old WebKit
|
||
|
[
|
||
|
'webkitRequestFullScreen',
|
||
|
'webkitCancelFullScreen',
|
||
|
'webkitCurrentFullScreenElement',
|
||
|
'webkitCancelFullScreen',
|
||
|
'webkitfullscreenchange',
|
||
|
'webkitfullscreenerror'
|
||
|
|
||
|
],
|
||
|
[
|
||
|
'mozRequestFullScreen',
|
||
|
'mozCancelFullScreen',
|
||
|
'mozFullScreenElement',
|
||
|
'mozFullScreenEnabled',
|
||
|
'mozfullscreenchange',
|
||
|
'mozfullscreenerror'
|
||
|
],
|
||
|
[
|
||
|
'msRequestFullscreen',
|
||
|
'msExitFullscreen',
|
||
|
'msFullscreenElement',
|
||
|
'msFullscreenEnabled',
|
||
|
'MSFullscreenChange',
|
||
|
'MSFullscreenError'
|
||
|
]
|
||
|
];
|
||
|
|
||
|
var i = 0;
|
||
|
var l = fnMap.length;
|
||
|
var ret = {};
|
||
|
|
||
|
for (; i < l; i++) {
|
||
|
val = fnMap[i];
|
||
|
if (val && val[1] in document) {
|
||
|
for (i = 0; i < val.length; i++) {
|
||
|
ret[fnMap[0][i]] = val[i];
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
})();
|
||
|
|
||
|
var eventNameMap = {
|
||
|
change: fn.fullscreenchange,
|
||
|
error: fn.fullscreenerror
|
||
|
};
|
||
|
|
||
|
var screenfull = {
|
||
|
request: function (element) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
var onFullScreenEntered = function () {
|
||
|
this.off('change', onFullScreenEntered);
|
||
|
resolve();
|
||
|
}.bind(this);
|
||
|
|
||
|
this.on('change', onFullScreenEntered);
|
||
|
|
||
|
element = element || document.documentElement;
|
||
|
|
||
|
var returnPromise = element[fn.requestFullscreen]();
|
||
|
|
||
|
if (returnPromise instanceof Promise) {
|
||
|
returnPromise.then(onFullScreenEntered).catch(reject);
|
||
|
}
|
||
|
}.bind(this));
|
||
|
},
|
||
|
exit: function () {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
if (!this.isFullscreen) {
|
||
|
resolve();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var onFullScreenExit = function () {
|
||
|
this.off('change', onFullScreenExit);
|
||
|
resolve();
|
||
|
}.bind(this);
|
||
|
|
||
|
this.on('change', onFullScreenExit);
|
||
|
|
||
|
var returnPromise = document[fn.exitFullscreen]();
|
||
|
|
||
|
if (returnPromise instanceof Promise) {
|
||
|
returnPromise.then(onFullScreenExit).catch(reject);
|
||
|
}
|
||
|
}.bind(this));
|
||
|
},
|
||
|
toggle: function (element) {
|
||
|
return this.isFullscreen ? this.exit() : this.request(element);
|
||
|
},
|
||
|
onchange: function (callback) {
|
||
|
this.on('change', callback);
|
||
|
},
|
||
|
onerror: function (callback) {
|
||
|
this.on('error', callback);
|
||
|
},
|
||
|
on: function (event, callback) {
|
||
|
var eventName = eventNameMap[event];
|
||
|
if (eventName) {
|
||
|
document.addEventListener(eventName, callback, false);
|
||
|
}
|
||
|
},
|
||
|
off: function (event, callback) {
|
||
|
var eventName = eventNameMap[event];
|
||
|
if (eventName) {
|
||
|
document.removeEventListener(eventName, callback, false);
|
||
|
}
|
||
|
},
|
||
|
raw: fn
|
||
|
};
|
||
|
|
||
|
if (!fn) {
|
||
|
if (isCommonjs) {
|
||
|
module.exports = {isEnabled: false};
|
||
|
} else {
|
||
|
window.screenfull = {isEnabled: false};
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Object.defineProperties(screenfull, {
|
||
|
isFullscreen: {
|
||
|
get: function () {
|
||
|
return Boolean(document[fn.fullscreenElement]);
|
||
|
}
|
||
|
},
|
||
|
element: {
|
||
|
enumerable: true,
|
||
|
get: function () {
|
||
|
return document[fn.fullscreenElement];
|
||
|
}
|
||
|
},
|
||
|
isEnabled: {
|
||
|
enumerable: true,
|
||
|
get: function () {
|
||
|
// Coerce to boolean in case of old WebKit
|
||
|
return Boolean(document[fn.fullscreenEnabled]);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (isCommonjs) {
|
||
|
module.exports = screenfull;
|
||
|
} else {
|
||
|
window.screenfull = screenfull;
|
||
|
}
|
||
|
})();
|