1(function () { 2 'use strict'; 3 4 var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {}; 5 var isCommonjs = typeof module !== 'undefined' && module.exports; 6 7 var fn = (function () { 8 var val; 9 10 var fnMap = [ 11 [ 12 'requestFullscreen', 13 'exitFullscreen', 14 'fullscreenElement', 15 'fullscreenEnabled', 16 'fullscreenchange', 17 'fullscreenerror' 18 ], 19 // New WebKit 20 [ 21 'webkitRequestFullscreen', 22 'webkitExitFullscreen', 23 'webkitFullscreenElement', 24 'webkitFullscreenEnabled', 25 'webkitfullscreenchange', 26 'webkitfullscreenerror' 27 28 ], 29 // Old WebKit 30 [ 31 'webkitRequestFullScreen', 32 'webkitCancelFullScreen', 33 'webkitCurrentFullScreenElement', 34 'webkitCancelFullScreen', 35 'webkitfullscreenchange', 36 'webkitfullscreenerror' 37 38 ], 39 [ 40 'mozRequestFullScreen', 41 'mozCancelFullScreen', 42 'mozFullScreenElement', 43 'mozFullScreenEnabled', 44 'mozfullscreenchange', 45 'mozfullscreenerror' 46 ], 47 [ 48 'msRequestFullscreen', 49 'msExitFullscreen', 50 'msFullscreenElement', 51 'msFullscreenEnabled', 52 'MSFullscreenChange', 53 'MSFullscreenError' 54 ] 55 ]; 56 57 var i = 0; 58 var l = fnMap.length; 59 var ret = {}; 60 61 for (; i < l; i++) { 62 val = fnMap[i]; 63 if (val && val[1] in document) { 64 for (i = 0; i < val.length; i++) { 65 ret[fnMap[0][i]] = val[i]; 66 } 67 return ret; 68 } 69 } 70 71 return false; 72 })(); 73 74 var eventNameMap = { 75 change: fn.fullscreenchange, 76 error: fn.fullscreenerror 77 }; 78 79 var screenfull = { 80 request: function (element, options) { 81 return new Promise(function (resolve, reject) { 82 var onFullScreenEntered = function () { 83 this.off('change', onFullScreenEntered); 84 resolve(); 85 }.bind(this); 86 87 this.on('change', onFullScreenEntered); 88 89 element = element || document.documentElement; 90 91 var returnPromise = element[fn.requestFullscreen](options); 92 93 if (returnPromise instanceof Promise) { 94 returnPromise.then(onFullScreenEntered).catch(reject); 95 } 96 }.bind(this)); 97 }, 98 exit: function () { 99 return new Promise(function (resolve, reject) { 100 if (!this.isFullscreen) { 101 resolve(); 102 return; 103 } 104 105 var onFullScreenExit = function () { 106 this.off('change', onFullScreenExit); 107 resolve(); 108 }.bind(this); 109 110 this.on('change', onFullScreenExit); 111 112 var returnPromise = document[fn.exitFullscreen](); 113 114 if (returnPromise instanceof Promise) { 115 returnPromise.then(onFullScreenExit).catch(reject); 116 } 117 }.bind(this)); 118 }, 119 toggle: function (element, options) { 120 return this.isFullscreen ? this.exit() : this.request(element, options); 121 }, 122 onchange: function (callback) { 123 this.on('change', callback); 124 }, 125 onerror: function (callback) { 126 this.on('error', callback); 127 }, 128 on: function (event, callback) { 129 var eventName = eventNameMap[event]; 130 if (eventName) { 131 document.addEventListener(eventName, callback, false); 132 } 133 }, 134 off: function (event, callback) { 135 var eventName = eventNameMap[event]; 136 if (eventName) { 137 document.removeEventListener(eventName, callback, false); 138 } 139 }, 140 raw: fn 141 }; 142 143 if (!fn) { 144 if (isCommonjs) { 145 module.exports = {isEnabled: false}; 146 } else { 147 window.screenfull = {isEnabled: false}; 148 } 149 150 return; 151 } 152 153 Object.defineProperties(screenfull, { 154 isFullscreen: { 155 get: function () { 156 return Boolean(document[fn.fullscreenElement]); 157 } 158 }, 159 element: { 160 enumerable: true, 161 get: function () { 162 return document[fn.fullscreenElement]; 163 } 164 }, 165 isEnabled: { 166 enumerable: true, 167 get: function () { 168 // Coerce to boolean in case of old WebKit 169 return Boolean(document[fn.fullscreenEnabled]); 170 } 171 } 172 }); 173 174 if (isCommonjs) { 175 module.exports = screenfull; 176 } else { 177 window.screenfull = screenfull; 178 } 179})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.