c788d02a57
Quay pages that normally poll (repo view, build logs, etc) will skip the API call(s) when the tab is hidden.
60 lines
No EOL
1.5 KiB
JavaScript
60 lines
No EOL
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];
|
|
}
|
|
}
|
|
};
|
|
}]); |