1(function() { 2 (function(root, factory) { 3 if (typeof define === 'function' && define.amd) { 4 return define(function() { 5 return factory(); 6 }); 7 } else if (typeof exports === 'object') { 8 return module.exports = factory(); 9 } else { 10 return root.ifvisible = factory(); 11 } 12 })(this, function() { 13 var addEvent, customEvent, doc, fireEvent, hidden, idleStartedTime, idleTime, ie, ifvisible, init, initialized, status, trackIdleStatus, visibilityChange; 14 ifvisible = {}; 15 doc = document; 16 initialized = false; 17 status = "active"; 18 idleTime = 60000; 19 idleStartedTime = false; 20 customEvent = (function() { 21 var S4, addCustomEvent, cgid, fireCustomEvent, guid, listeners, removeCustomEvent; 22 S4 = function() { 23 return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); 24 }; 25 guid = function() { 26 return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); 27 }; 28 listeners = {}; 29 cgid = '__ceGUID'; 30 addCustomEvent = function(obj, event, callback) { 31 obj[cgid] = undefined; 32 if (!obj[cgid]) { 33 obj[cgid] = "ifvisible.object.event.identifier"; 34 } 35 if (!listeners[obj[cgid]]) { 36 listeners[obj[cgid]] = {}; 37 } 38 if (!listeners[obj[cgid]][event]) { 39 listeners[obj[cgid]][event] = []; 40 } 41 return listeners[obj[cgid]][event].push(callback); 42 }; 43 fireCustomEvent = function(obj, event, memo) { 44 var ev, j, len, ref, results; 45 if (obj[cgid] && listeners[obj[cgid]] && listeners[obj[cgid]][event]) { 46 ref = listeners[obj[cgid]][event]; 47 results = []; 48 for (j = 0, len = ref.length; j < len; j++) { 49 ev = ref[j]; 50 results.push(ev(memo || {})); 51 } 52 return results; 53 } 54 }; 55 removeCustomEvent = function(obj, event, callback) { 56 var cl, i, j, len, ref; 57 if (callback) { 58 if (obj[cgid] && listeners[obj[cgid]] && listeners[obj[cgid]][event]) { 59 ref = listeners[obj[cgid]][event]; 60 for (i = j = 0, len = ref.length; j < len; i = ++j) { 61 cl = ref[i]; 62 if (cl === callback) { 63 listeners[obj[cgid]][event].splice(i, 1); 64 return cl; 65 } 66 } 67 } 68 } else { 69 if (obj[cgid] && listeners[obj[cgid]] && listeners[obj[cgid]][event]) { 70 return delete listeners[obj[cgid]][event]; 71 } 72 } 73 }; 74 return { 75 add: addCustomEvent, 76 remove: removeCustomEvent, 77 fire: fireCustomEvent 78 }; 79 })(); 80 addEvent = (function() { 81 var setListener; 82 setListener = false; 83 return function(el, ev, fn) { 84 if (!setListener) { 85 if (el.addEventListener) { 86 setListener = function(el, ev, fn) { 87 return el.addEventListener(ev, fn, false); 88 }; 89 } else if (el.attachEvent) { 90 setListener = function(el, ev, fn) { 91 return el.attachEvent('on' + ev, fn, false); 92 }; 93 } else { 94 setListener = function(el, ev, fn) { 95 return el['on' + ev] = fn; 96 }; 97 } 98 } 99 return setListener(el, ev, fn); 100 }; 101 })(); 102 fireEvent = function(element, event) { 103 var evt; 104 if (doc.createEventObject) { 105 return element.fireEvent('on' + event, evt); 106 } else { 107 evt = doc.createEvent('HTMLEvents'); 108 evt.initEvent(event, true, true); 109 return !element.dispatchEvent(evt); 110 } 111 }; 112 ie = (function() { 113 var all, check, div, undef, v; 114 undef = void 0; 115 v = 3; 116 div = doc.createElement("div"); 117 all = div.getElementsByTagName("i"); 118 check = function() { 119 return (div.innerHTML = "<!--[if gt IE " + (++v) + "]><i></i><![endif]-->", all[0]); 120 }; 121 while (check()) { 122 continue; 123 } 124 if (v > 4) { 125 return v; 126 } else { 127 return undef; 128 } 129 })(); 130 hidden = false; 131 visibilityChange = void 0; 132 if (typeof doc.hidden !== "undefined") { 133 hidden = "hidden"; 134 visibilityChange = "visibilitychange"; 135 } else if (typeof doc.mozHidden !== "undefined") { 136 hidden = "mozHidden"; 137 visibilityChange = "mozvisibilitychange"; 138 } else if (typeof doc.msHidden !== "undefined") { 139 hidden = "msHidden"; 140 visibilityChange = "msvisibilitychange"; 141 } else if (typeof doc.webkitHidden !== "undefined") { 142 hidden = "webkitHidden"; 143 visibilityChange = "webkitvisibilitychange"; 144 } 145 trackIdleStatus = function() { 146 var timer, wakeUp; 147 timer = false; 148 wakeUp = function() { 149 clearTimeout(timer); 150 if (status !== "active") { 151 ifvisible.wakeup(); 152 } 153 idleStartedTime = +(new Date()); 154 return timer = setTimeout(function() { 155 if (status === "active") { 156 return ifvisible.idle(); 157 } 158 }, idleTime); 159 }; 160 wakeUp(); 161 addEvent(doc, "mousemove", wakeUp); 162 addEvent(doc, "keyup", wakeUp); 163 addEvent(window, "scroll", wakeUp); 164 ifvisible.focus(wakeUp); 165 return ifvisible.wakeup(wakeUp); 166 }; 167 init = function() { 168 var blur; 169 if (initialized) { 170 return true; 171 } 172 if (hidden === false) { 173 blur = "blur"; 174 if (ie < 9) { 175 blur = "focusout"; 176 } 177 addEvent(window, blur, function() { 178 return ifvisible.blur(); 179 }); 180 addEvent(window, "focus", function() { 181 return ifvisible.focus(); 182 }); 183 } else { 184 addEvent(doc, visibilityChange, function() { 185 if (doc[hidden]) { 186 return ifvisible.blur(); 187 } else { 188 return ifvisible.focus(); 189 } 190 }, false); 191 } 192 initialized = true; 193 return trackIdleStatus();
194 }; 195 ifvisible = { 196 setIdleDuration: function(seconds) { 197 return idleTime = seconds * 1000; 198 }, 199 getIdleDuration: function() { 200 return idleTime; 201 }, 202 getIdleInfo: function() { 203 var now, res; 204 now = +(new Date()); 205 res = {}; 206 if (status === "idle") { 207 res.isIdle = true; 208 res.idleFor = now - idleStartedTime; 209 res.timeLeft = 0; 210 res.timeLeftPer = 100; 211 } else { 212 res.isIdle = false; 213 res.idleFor = now - idleStartedTime; 214 res.timeLeft = (idleStartedTime + idleTime) - now; 215 res.timeLeftPer = (100 - (res.timeLeft * 100 / idleTime)).toFixed(2); 216 } 217 return res; 218 }, 219 focus: function(callback) { 220 if (typeof callback === "function") { 221 return this.on("focus", callback); 222 } 223 status = "active"; 224 customEvent.fire(this, "focus"); 225 customEvent.fire(this, "wakeup"); 226 return customEvent.fire(this, "statusChanged", { 227 status: status 228 }); 229 }, 230 blur: function(callback) { 231 if (typeof callback === "function") { 232 return this.on("blur", callback); 233 } 234 status = "hidden"; 235 customEvent.fire(this, "blur"); 236 customEvent.fire(this, "idle"); 237 return customEvent.fire(this, "statusChanged", { 238 status: status 239 }); 240 }, 241 idle: function(callback) { 242 if (typeof callback === "function") { 243 return this.on("idle", callback); 244 } 245 status = "idle"; 246 customEvent.fire(this, "idle"); 247 return customEvent.fire(this, "statusChanged", { 248 status: status 249 }); 250 }, 251 wakeup: function(callback) { 252 if (typeof callback === "function") { 253 return this.on("wakeup", callback); 254 } 255 status = "active"; 256 customEvent.fire(this, "wakeup"); 257 return customEvent.fire(this, "statusChanged", { 258 status: status 259 }); 260 }, 261 on: function(name, callback) { 262 init(); 263 return customEvent.add(this, name, callback); 264 }, 265 off: function(name, callback) { 266 init(); 267 return customEvent.remove(this, name, callback); 268 }, 269 onEvery: function(seconds, callback) { 270 var paused, t; 271 init(); 272 paused = false; 273 if (callback) { 274 t = setInterval(function() { 275 if (status === "active" && paused === false) { 276 return callback(); 277 } 278 }, seconds * 1000); 279 } 280 return { 281 stop: function() { 282 return clearInterval(t); 283 }, 284 pause: function() { 285 return paused = true; 286 }, 287 resume: function() { 288 return paused = false; 289 }, 290 code: t, 291 callback: callback 292 }; 293 }, 294 now: function(check) { 295 init(); 296 return status === (check || "active"); 297 } 298 }; 299 return ifvisible; 300 }); 301 302}).call(this); 303 304//# sourceMappingURL=ifvisible.js.map
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.