76 lines
1.9 KiB
JavaScript
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;
|
|
}]);
|