This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/static/js/services/meta-service.js

77 lines
1.9 KiB
JavaScript
Raw Normal View History

/**
* Service which helps set the contents of the <meta> tags (and the <title> of a page).
*/
angular.module('quay').factory('MetaService', ['$interpolate', 'Config', '$rootScope', '$interval',
function($interpolate, Config, $rootScope, $interval) {
var metaService = {};
2015-02-27 22:22:47 +00:00
var intervals = [];
var interpolate = function(page, expr, callback) {
2015-02-27 22:22:47 +00:00
var previous = '';
var currentInterval = $interval(function() {
var inter = $interpolate(expr, true, null, true);
2015-02-27 22:22:47 +00:00
var result = inter(page.scope)
2015-03-06 19:23:33 +00:00
if (previous && result != previous) {
2015-02-27 22:22:47 +00:00
$interval.cancel(currentInterval);
}
previous = result;
callback(result);
}, 500);
intervals.push(currentInterval);
};
var initial = function(value, default_value, callback) {
2015-02-27 22:22:47 +00:00
for (var i = 0; i < intervals.length; ++i) {
$interval.cancel(intervals[i]);
}
intervals = [];
if (!value) {
callback(default_value);
return;
}
if (value.indexOf('{{') < 0) {
callback(default_value);
return;
}
callback('Loading...');
};
metaService.getInitialTitle = function(page, callback) {
var route = page.$$route;
initial(route && route.title, Config.REGISTRY_TITLE_SHORT, callback);
};
metaService.getInitialDescription = function(page, callback) {
var route = page.$$route;
initial(route && route.description, Config.REGISTRY_TITLE_SHORT, callback);
};
metaService.getTitle = function(page, callback) {
var route = page.$$route;
if (!route || !route.title || route.title.indexOf('{{') < 0) {
return;
}
interpolate(page, route.title, callback);
};
metaService.getDescription = function(page, callback) {
var route = page.$$route;
if (!route || !route.description || route.description.indexOf('{{') < 0) {
return;
}
interpolate(page, route.description, callback);
};
return metaService;
}]);