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.
168 lines
3.4 KiB
168 lines
3.4 KiB
/*! |
|
* screenfull |
|
* v3.3.3 - 2018-09-04 |
|
* (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 keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element; |
|
|
|
var fn = (function () { |
|
var val; |
|
|
|
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' |
|
] |
|
]; |
|
|
|
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 (elem) { |
|
var request = fn.requestFullscreen; |
|
|
|
elem = elem || document.documentElement; |
|
|
|
// 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 (/ Version\/5\.1(?:\.\d+)? Safari\//.test(navigator.userAgent)) { |
|
elem[request](); |
|
} else { |
|
elem[request](keyboardAllowed ? Element.ALLOW_KEYBOARD_INPUT : {}); |
|
} |
|
}, |
|
exit: function () { |
|
document[fn.exitFullscreen](); |
|
}, |
|
toggle: function (elem) { |
|
if (this.isFullscreen) { |
|
this.exit(); |
|
} else { |
|
this.request(elem); |
|
} |
|
}, |
|
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 = false; |
|
} else { |
|
window.screenfull = false; |
|
} |
|
|
|
return; |
|
} |
|
|
|
Object.defineProperties(screenfull, { |
|
isFullscreen: { |
|
get: function () { |
|
return Boolean(document[fn.fullscreenElement]); |
|
} |
|
}, |
|
element: { |
|
enumerable: true, |
|
get: function () { |
|
return document[fn.fullscreenElement]; |
|
} |
|
}, |
|
enabled: { |
|
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; |
|
} |
|
})();
|
|
|