PageSourceSearch

https://www.thedollarbusiness.com/assets/home/js/ifvisible.js

js thedollarbusiness.com collected 2026-09-24 19:19:30 UTC 9,419 bytes, 304 lines download raw bytes

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.