60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
|
/**
|
||
|
* Helper service which fires off events when the document's visibility changes, as well as allowing
|
||
|
* other Angular code to query the state of the document's visibility directly.
|
||
|
*/
|
||
|
angular.module('quay').constant('CORE_EVENT', {
|
||
|
DOC_VISIBILITY_CHANGE: 'core.event.doc_visibility_change'
|
||
|
});
|
||
|
|
||
|
angular.module('quay').factory('DocumentVisibilityService', ['$rootScope', '$document', 'CORE_EVENT',
|
||
|
function($rootScope, $document, CORE_EVENT) {
|
||
|
var document = $document[0],
|
||
|
features,
|
||
|
detectedFeature;
|
||
|
|
||
|
function broadcastChangeEvent() {
|
||
|
$rootScope.$broadcast(CORE_EVENT.DOC_VISIBILITY_CHANGE,
|
||
|
document[detectedFeature.propertyName]);
|
||
|
}
|
||
|
|
||
|
features = {
|
||
|
standard: {
|
||
|
eventName: 'visibilitychange',
|
||
|
propertyName: 'hidden'
|
||
|
},
|
||
|
moz: {
|
||
|
eventName: 'mozvisibilitychange',
|
||
|
propertyName: 'mozHidden'
|
||
|
},
|
||
|
ms: {
|
||
|
eventName: 'msvisibilitychange',
|
||
|
propertyName: 'msHidden'
|
||
|
},
|
||
|
webkit: {
|
||
|
eventName: 'webkitvisibilitychange',
|
||
|
propertyName: 'webkitHidden'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Object.keys(features).some(function(feature) {
|
||
|
if (document[features[feature].propertyName] !== undefined) {
|
||
|
detectedFeature = features[feature];
|
||
|
return true;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (detectedFeature) {
|
||
|
$document.on(detectedFeature.eventName, broadcastChangeEvent);
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
/**
|
||
|
* Is the window currently hidden or not.
|
||
|
*/
|
||
|
isHidden: function() {
|
||
|
if (detectedFeature) {
|
||
|
return document[detectedFeature.propertyName];
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}]);
|