visibly..js

From disqus.com, 5 Days ago, written in JavaScript, viewed 3 times. This paste is a reply to page.js from disqus.com - view diff
URL https://pastebin.freepbx.org/view/442cffd4 Embed
Download Paste or View Raw
  1. /*!
  2.  * visibly - v0.7 Page Visibility API Polyfill
  3.  * http://github.com/addyosmani
  4.  * Copyright (c) 2011-2014 Addy Osmani
  5.  * Dual licensed under the MIT and GPL licenses.
  6.  *
  7.  * Methods supported:
  8.  * visibly.onVisible(callback)
  9.  * visibly.onHidden(callback)
  10.  * visibly.hidden()
  11.  * visibly.visibilityState()
  12.  * visibly.visibilitychange(callback(state));
  13.  */
  14.  
  15. // Packaged for AMD by charles@disqus.com
  16. define('core/engagement/vendor/visibly',[], function () {
  17.  
  18.     var exports = {
  19.         q: document,
  20.         p: undefined,
  21.         prefixes: ['webkit', 'ms','o','moz','khtml'],
  22.         props: ['VisibilityState', 'visibilitychange', 'Hidden'],
  23.         m: ['focus', 'blur'],
  24.         visibleCallbacks: [],
  25.         hiddenCallbacks: [],
  26.         genericCallbacks:[],
  27.         _callbacks: [],
  28.         cachedPrefix:"",
  29.         fn:null,
  30.  
  31.         onVisible: function (_callback) {
  32.             if(typeof _callback == 'function' ){
  33.                 this.visibleCallbacks.push(_callback);
  34.             }
  35.         },
  36.         onHidden: function (_callback) {
  37.             if(typeof _callback == 'function' ){
  38.                 this.hiddenCallbacks.push(_callback);
  39.             }
  40.         },
  41.         getPrefix:function(){
  42.             if(!this.cachedPrefix){
  43.                 for(var l=0;b=this.prefixes[l++];){
  44.                     if(b + this.props[2] in this.q){
  45.                         this.cachedPrefix =  b;
  46.                         return this.cachedPrefix;
  47.                     }
  48.                 }
  49.              }
  50.         },
  51.  
  52.         visibilityState:function(){
  53.             return  this._getProp(0);
  54.         },
  55.         hidden:function(){
  56.             return this._getProp(2);
  57.         },
  58.         visibilitychange:function(fn){
  59.             if(typeof fn == 'function' ){
  60.                 this.genericCallbacks.push(fn);
  61.             }
  62.  
  63.             var n =  this.genericCallbacks.length;
  64.             if(n){
  65.                 if(this.cachedPrefix){
  66.                      while(n--){
  67.                         this.genericCallbacks[n].call(this, this.visibilityState());
  68.                     }
  69.                 }else{
  70.                     while(n--){
  71.                         this.genericCallbacks[n].call(this, arguments[0]);
  72.                     }
  73.                 }
  74.             }
  75.  
  76.         },
  77.         isSupported: function (index) {
  78.             return ((this._getPropName(2)) in this.q);
  79.         },
  80.         _getPropName:function(index) {
  81.             return (this.cachedPrefix == "" ? this.props[index].substring(0, 1).toLowerCase() + this.props[index].substring(1) : this.cachedPrefix + this.props[index]);
  82.         },
  83.         _getProp:function(index){
  84.             return this.q[this._getPropName(index)];
  85.         },
  86.         _execute: function (index) {
  87.             if (index) {
  88.                 this._callbacks = (index == 1) ? this.visibleCallbacks : this.hiddenCallbacks;
  89.                 var n =  this._callbacks.length;
  90.                 while(n--){
  91.                     this._callbacks[n]();
  92.                 }
  93.             }
  94.         },
  95.         _visible: function () {
  96.             exports._execute(1);
  97.             exports.visibilitychange.call(exports, 'visible');
  98.         },
  99.         _hidden: function () {
  100.             exports._execute(2);
  101.             exports.visibilitychange.call(exports, 'hidden');
  102.         },
  103.         _nativeSwitch: function () {
  104.             this[this._getProp(2) ? '_hidden' : '_visible']();
  105.         },
  106.         _listen: function () {
  107.             try { /*if no native page visibility support found..*/
  108.                 if (!(this.isSupported())) {
  109.                     if (this.q.addEventListener) { /*for browsers without focusin/out support eg. firefox, opera use focus/blur*/
  110.                         window.addEventListener(this.m[0], this._visible, 1);
  111.                         window.addEventListener(this.m[1], this._hidden, 1);
  112.                     } else { /*IE <10s most reliable focus events are onfocusin/onfocusout*/
  113.                         if (this.q.attachEvent) {
  114.                             this.q.attachEvent('onfocusin', this._visible);
  115.                             this.q.attachEvent('onfocusout', this._hidden);
  116.                         }
  117.                     }
  118.                 } else { /*switch support based on prefix detected earlier*/
  119.                     this.q.addEventListener(this._getPropName(1), function () {
  120.                         exports._nativeSwitch.apply(exports, arguments);
  121.                     }, 1);
  122.                 }
  123.             } catch (e) {}
  124.         },
  125.         init: function () {
  126.             this.getPrefix();
  127.             this._listen();
  128.         }
  129.     };
  130.  
  131.     exports.init();
  132.     return exports;
  133. });
  134.  
  135. // https://c.disquscdn.com/next/next-core/core/engagement/vendor/visibly.js

Reply to "visibly..js"

Here you can reply to the paste above