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
2015-03-06 14:23:33 -05:00

76 lines
1.9 KiB
JavaScript

/**
* 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 = {};
var intervals = [];
var interpolate = function(page, expr, callback) {
var previous = '';
var currentInterval = $interval(function() {
var inter = $interpolate(expr, true, null, true);
var result = inter(page.scope)
if (previous && result != previous) {
$interval.cancel(currentInterval);
}
previous = result;
callback(result);
}, 500);
intervals.push(currentInterval);
};
var initial = function(value, default_value, callback) {
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;
}]);