playable
Version:
Video player based on HTML5Video
135 lines • 4.17 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var fnMap = [
[
'requestFullscreen',
'exitFullscreen',
'fullscreenElement',
'fullscreenEnabled',
'fullscreenchange',
'fullscreenerror',
],
// new WebKit
[
'webkitRequestFullscreen',
'webkitExitFullscreen',
'webkitFullscreenElement',
'webkitFullscreenEnabled',
'webkitfullscreenchange',
'webkitfullscreenerror',
],
// old WebKit (Safari 5.1)
[
'webkitRequestFullScreen',
'webkitCancelFullScreen',
'webkitCurrentFullScreenElement',
'webkitCancelFullScreen',
'webkitfullscreenchange',
'webkitfullscreenerror',
],
[
'mozRequestFullScreen',
'mozCancelFullScreen',
'mozFullScreenElement',
'mozFullScreenEnabled',
'mozfullscreenchange',
'mozfullscreenerror',
],
[
'msRequestFullscreen',
'msExitFullscreen',
'msFullscreenElement',
'msFullscreenEnabled',
'MSFullscreenChange',
'MSFullscreenError',
],
];
/* ignore coverage */
function getFullScreenFn() {
var ret = {};
for (var i = 0; i < fnMap.length; i += 1) {
if (fnMap[i][1] in document) {
for (var j = 0; j < fnMap[i].length; j += 1) {
ret[fnMap[0][j]] = fnMap[i][j];
}
return ret;
}
}
return false;
}
var DesktopFullScreen = /** @class */ (function () {
function DesktopFullScreen(elem, callback) {
this._$elem = elem;
this._callback = callback;
this._fullscreenFn = getFullScreenFn();
this._bindEvents();
}
Object.defineProperty(DesktopFullScreen.prototype, "isAPIExist", {
get: function () {
return Boolean(this._fullscreenFn);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DesktopFullScreen.prototype, "isInFullScreen", {
get: function () {
if (typeof this._fullscreenFn === 'boolean') {
return false;
}
return Boolean(document[this._fullscreenFn.fullscreenElement]);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DesktopFullScreen.prototype, "isEnabled", {
get: function () {
if (typeof this._fullscreenFn === 'boolean') {
return false;
}
return (this.isAPIExist && document[this._fullscreenFn.fullscreenEnabled]);
},
enumerable: false,
configurable: true
});
DesktopFullScreen.prototype._bindEvents = function () {
if (typeof this._fullscreenFn === 'boolean') {
return false;
}
document.addEventListener(this._fullscreenFn.fullscreenchange, this._callback);
};
DesktopFullScreen.prototype._unbindEvents = function () {
if (typeof this._fullscreenFn === 'boolean') {
return false;
}
document.removeEventListener(this._fullscreenFn.fullscreenchange, this._callback);
};
DesktopFullScreen.prototype.request = function () {
if (!this.isEnabled) {
return;
}
var request = this._fullscreenFn.requestFullscreen;
// Work around Safari 5.1 bug: reports support for
// keyboard in fullscreen even though it doesn't.
// Browser sniffing, since the alternative with
// setTimeout is even worse.
if (/5\.1[.\d]* Safari/.test(navigator.userAgent)) {
this._$elem[request]();
}
else {
this._$elem[request](Element.ALLOW_KEYBOARD_INPUT);
}
};
DesktopFullScreen.prototype.exit = function () {
if (!this.isEnabled) {
return;
}
document[this._fullscreenFn.exitFullscreen]();
};
DesktopFullScreen.prototype.destroy = function () {
this._unbindEvents();
this._$elem = null;
};
return DesktopFullScreen;
}());
exports.default = DesktopFullScreen;
//# sourceMappingURL=desktop.js.map