angular-visibility-change
Version:
Detect window visibility changes in Angular.
7 lines • 1.31 kB
JavaScript
/**
* Detect window visibility changes in Angular.
* @version v0.1.0 - 2015-02-05
* @link https://github.com/stephenkubovic/angular-visibility-change
* @author Stephen Kubovic <stephen@skbvc.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/!function(){"use strict";var a=angular.module("visibilityChange",[]);a.service("VisibilityChange",["$document","$rootScope","$timeout",function(a,b,c){var d,e="pageBecameVisible",f="pageBecameHidden",g=!1,h="hidden",i=[],j=[],k=[],l=a[0];if(this.configure=function(a){if("object"!=typeof a)throw new Error(a+" is not a valid configuration object");a.broadcast===!0?g=!0:"object"==typeof a.broadcast&&(g=!0,e=a.broadcast.visible||e,f=a.broadcast.hidden||f)},this.onChange=function(a){i.push(a)},this.onVisible=function(a){j.push(a)},this.onHidden=function(a){k.push(a)},h in l)d="visibilitychange";else if((h="webkitHidden")in l)d="webkitvisibilitychange";else if((h="mozHidden")in l)d="mozvisibilitychange";else{if(!((h="msHidden")in l))return;d="msvisibilitychange"}var m=function(){c(function(){a[0][h]?o():p()},100)},n=function(){for(var a=Array.prototype.slice.call(arguments),b=a.shift(),c=0;c<b.length;c++)b[c].apply(null,a)},o=function(){g&&b.$broadcast(f),n(i,!1),n(k)},p=function(){g&&b.$broadcast(e),n(i,!0),n(j)};a.on(d,m)}])}();