|
1 /*! |
|
2 * screenfull |
|
3 * v2.0.0 - 2014-12-22 |
|
4 * (c) Sindre Sorhus; MIT License |
|
5 */ |
|
6 (function () { |
|
7 'use strict'; |
|
8 |
|
9 var isCommonjs = typeof module !== 'undefined' && module.exports; |
|
10 var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element; |
|
11 |
|
12 var fn = (function () { |
|
13 var val; |
|
14 var valLength; |
|
15 |
|
16 var fnMap = [ |
|
17 [ |
|
18 'requestFullscreen', |
|
19 'exitFullscreen', |
|
20 'fullscreenElement', |
|
21 'fullscreenEnabled', |
|
22 'fullscreenchange', |
|
23 'fullscreenerror' |
|
24 ], |
|
25 // new WebKit |
|
26 [ |
|
27 'webkitRequestFullscreen', |
|
28 'webkitExitFullscreen', |
|
29 'webkitFullscreenElement', |
|
30 'webkitFullscreenEnabled', |
|
31 'webkitfullscreenchange', |
|
32 'webkitfullscreenerror' |
|
33 |
|
34 ], |
|
35 // old WebKit (Safari 5.1) |
|
36 [ |
|
37 'webkitRequestFullScreen', |
|
38 'webkitCancelFullScreen', |
|
39 'webkitCurrentFullScreenElement', |
|
40 'webkitCancelFullScreen', |
|
41 'webkitfullscreenchange', |
|
42 'webkitfullscreenerror' |
|
43 |
|
44 ], |
|
45 [ |
|
46 'mozRequestFullScreen', |
|
47 'mozCancelFullScreen', |
|
48 'mozFullScreenElement', |
|
49 'mozFullScreenEnabled', |
|
50 'mozfullscreenchange', |
|
51 'mozfullscreenerror' |
|
52 ], |
|
53 [ |
|
54 'msRequestFullscreen', |
|
55 'msExitFullscreen', |
|
56 'msFullscreenElement', |
|
57 'msFullscreenEnabled', |
|
58 'MSFullscreenChange', |
|
59 'MSFullscreenError' |
|
60 ] |
|
61 ]; |
|
62 |
|
63 var i = 0; |
|
64 var l = fnMap.length; |
|
65 var ret = {}; |
|
66 |
|
67 for (; i < l; i++) { |
|
68 val = fnMap[i]; |
|
69 if (val && val[1] in document) { |
|
70 for (i = 0, valLength = val.length; i < valLength; i++) { |
|
71 ret[fnMap[0][i]] = val[i]; |
|
72 } |
|
73 return ret; |
|
74 } |
|
75 } |
|
76 |
|
77 return false; |
|
78 })(); |
|
79 |
|
80 var screenfull = { |
|
81 request: function (elem) { |
|
82 var request = fn.requestFullscreen; |
|
83 |
|
84 elem = elem || document.documentElement; |
|
85 |
|
86 // Work around Safari 5.1 bug: reports support for |
|
87 // keyboard in fullscreen even though it doesn't. |
|
88 // Browser sniffing, since the alternative with |
|
89 // setTimeout is even worse. |
|
90 if (/5\.1[\.\d]* Safari/.test(navigator.userAgent)) { |
|
91 elem[request](); |
|
92 } else { |
|
93 elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); |
|
94 } |
|
95 }, |
|
96 exit: function () { |
|
97 document[fn.exitFullscreen](); |
|
98 }, |
|
99 toggle: function (elem) { |
|
100 if (this.isFullscreen) { |
|
101 this.exit(); |
|
102 } else { |
|
103 this.request(elem); |
|
104 } |
|
105 }, |
|
106 raw: fn |
|
107 }; |
|
108 |
|
109 if (!fn) { |
|
110 if (isCommonjs) { |
|
111 module.exports = false; |
|
112 } else { |
|
113 window.screenfull = false; |
|
114 } |
|
115 |
|
116 return; |
|
117 } |
|
118 |
|
119 Object.defineProperties(screenfull, { |
|
120 isFullscreen: { |
|
121 get: function () { |
|
122 return !!document[fn.fullscreenElement]; |
|
123 } |
|
124 }, |
|
125 element: { |
|
126 enumerable: true, |
|
127 get: function () { |
|
128 return document[fn.fullscreenElement]; |
|
129 } |
|
130 }, |
|
131 enabled: { |
|
132 enumerable: true, |
|
133 get: function () { |
|
134 // Coerce to boolean in case of old WebKit |
|
135 return !!document[fn.fullscreenEnabled]; |
|
136 } |
|
137 } |
|
138 }); |
|
139 |
|
140 if (isCommonjs) { |
|
141 module.exports = screenfull; |
|
142 } else { |
|
143 window.screenfull = screenfull; |
|
144 } |
|
145 })(); |