diff --git a/static/js/quay-run.ts b/static/js/quay-run.ts index 3c2eb3499..c0815ef68 100644 --- a/static/js/quay-run.ts +++ b/static/js/quay-run.ts @@ -103,9 +103,10 @@ export function provideRun($rootScope: QuayRunScope, // Listen for route changes and update the title and description accordingly. $rootScope.$on('$routeChangeSuccess', async(event, current, previous) => { - $rootScope.title = metaService.getTitle(current) || defaultTitle; - + const title = await metaService.getTitle(current); const description = await metaService.getDescription(current); + + $rootScope.title = title || defaultTitle; if ($rootScope.description != description) { $rootScope.description = description; } diff --git a/static/js/services/meta-service.js b/static/js/services/meta-service.js index cc7b33d35..c57663fc2 100644 --- a/static/js/services/meta-service.js +++ b/static/js/services/meta-service.js @@ -17,27 +17,32 @@ angular.module('quay').factory('MetaService', ['$interpolate', '$timeout', funct return inter(page.scope); }; - metaService.getTitle = function(page) { - if (!page || !page.$$route) { - return null; - } - - var route = page.$$route; - return interpolate(page, route && route.title); - }; - - metaService.getDescription = function(page) { + var interpolationPromise = function(page, fieldGetter) { return new Promise(function(resolve, reject) { if (!page || !page.$$route) { resolve(null); - } else { - // Timeout needed because page.scope is undefined - $timeout(function() { - resolve(interpolate(page, page.$$route.description)); - }, 10); + return; } + + if (page.scope) { + resolve(interpolate(page, fieldGetter())); + return; + } + + // Timeout needed because page.scope is initially undefined. + $timeout(function() { + resolve(interpolationPromise(page, fieldGetter)); + }, 10); }); }; + metaService.getTitle = function(page) { + return interpolationPromise(page, () => page.$$route.title); + }; + + metaService.getDescription = function(page) { + return interpolationPromise(page, () => page.$$route.description); + }; + return metaService; }]);