Fix CPU issues by removing constant digesting. We do so by:
- Fixing the title and description (meta) to only respond to a rootScope watch, rather than using a timer - Change the tabs listening code to be completely self contained
This commit is contained in:
parent
d4b593cada
commit
31389b9974
5 changed files with 151 additions and 169 deletions
107
static/js/app.js
107
static/js/app.js
|
@ -232,10 +232,10 @@ if (window.__config && window.__config.SENTRY_PUBLIC_DSN) {
|
|||
}
|
||||
|
||||
// Run the application.
|
||||
quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanService', '$http', '$timeout', 'CookieService', 'Features', '$anchorScroll', 'UtilService', 'MetaService',
|
||||
function($location, $rootScope, Restangular, UserService, PlanService, $http, $timeout, CookieService, Features, $anchorScroll, UtilService, MetaService) {
|
||||
quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanService', '$http', '$timeout', 'CookieService', 'Features', '$anchorScroll', 'UtilService', 'MetaService', 'UIService',
|
||||
function($location, $rootScope, Restangular, UserService, PlanService, $http, $timeout, CookieService, Features, $anchorScroll, UtilService, MetaService, UIService) {
|
||||
|
||||
var title = window.__config['REGISTRY_TITLE'] || 'Quay.io';
|
||||
var defaultTitle = window.__config['REGISTRY_TITLE'] || 'Quay.io';
|
||||
|
||||
// Handle session security.
|
||||
Restangular.setDefaultRequestParams(['post', 'put', 'remove', 'delete'], {'_csrf_token': window.__token || ''});
|
||||
|
@ -273,38 +273,6 @@ quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanServi
|
|||
return;
|
||||
}
|
||||
|
||||
var changeTab = function(activeTab, opt_timeout) {
|
||||
var checkCount = 0;
|
||||
$timeout(function() {
|
||||
if (checkCount > 5) { return; }
|
||||
checkCount++;
|
||||
|
||||
$('a[data-toggle="tab"]').each(function(index) {
|
||||
var tabName = this.getAttribute('data-target').substr(1);
|
||||
if (tabName != activeTab) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.clientWidth == 0) {
|
||||
changeTab(activeTab, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
UtilService.clickElement(this);
|
||||
});
|
||||
}, opt_timeout);
|
||||
};
|
||||
|
||||
var resetDefaultTab = function() {
|
||||
$timeout(function() {
|
||||
$('a[data-toggle="tab"]').each(function(index) {
|
||||
if (index == 0) {
|
||||
UtilService.clickElement(this);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$rootScope.$watch('description', function(description) {
|
||||
if (!description) {
|
||||
description = 'Hosted private docker repositories. Includes full user management and history. Free for public repositories.';
|
||||
|
@ -316,11 +284,16 @@ quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanServi
|
|||
$('#descriptionTag').attr('content', description);
|
||||
});
|
||||
|
||||
$rootScope.$on('$routeUpdate', function(){
|
||||
if ($location.search()['tab']) {
|
||||
changeTab($location.search()['tab']);
|
||||
} else {
|
||||
resetDefaultTab();
|
||||
// Listen for scope changes and update the title and description accordingly.
|
||||
$rootScope.$watch(function() {
|
||||
var title = MetaService.getTitle($rootScope.currentPage) || defaultTitle;
|
||||
if ($rootScope.title != title) {
|
||||
$rootScope.title = title;
|
||||
}
|
||||
|
||||
var description = MetaService.getDescription($rootScope.currentPage) || '';
|
||||
if ($rootScope.description != description) {
|
||||
$rootScope.description = description;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -336,63 +309,9 @@ quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanServi
|
|||
$rootScope.newLayout = !!current.$$route.newLayout;
|
||||
$rootScope.fixFooter = !!current.$$route.fixFooter;
|
||||
|
||||
MetaService.getInitialTitle(current, function(title) {
|
||||
$rootScope.title = title;
|
||||
});
|
||||
|
||||
MetaService.getInitialDescription(current, function(description) {
|
||||
$rootScope.description = description
|
||||
});
|
||||
|
||||
$anchorScroll();
|
||||
});
|
||||
|
||||
$rootScope.$on('$viewContentLoaded', function(event) {
|
||||
var current = $rootScope.currentPage;
|
||||
|
||||
MetaService.getTitle(current, function(title) {
|
||||
$rootScope.title = title;
|
||||
});
|
||||
|
||||
MetaService.getDescription(current, function(description) {
|
||||
$rootScope.description = description;
|
||||
});
|
||||
|
||||
var activeTab = $location.search()['tab'];
|
||||
var checkTabs = function() {
|
||||
var tabs = $('a[data-toggle="tab"]');
|
||||
if (tabs.length == 0) {
|
||||
$timeout(checkTabs, 50);
|
||||
return;
|
||||
}
|
||||
|
||||
tabs.on('shown.bs.tab', function (e) {
|
||||
var tabName = e.target.getAttribute('data-target').substr(1);
|
||||
$rootScope.$apply(function() {
|
||||
var isDefaultTab = $('a[data-toggle="tab"]')[0] == e.target;
|
||||
var newSearch = $.extend($location.search(), {});
|
||||
if (isDefaultTab) {
|
||||
delete newSearch['tab'];
|
||||
} else {
|
||||
newSearch['tab'] = tabName;
|
||||
}
|
||||
|
||||
$location.search(newSearch);
|
||||
});
|
||||
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
if (activeTab) {
|
||||
changeTab(activeTab);
|
||||
}
|
||||
};
|
||||
|
||||
// Setup deep linking of tabs. This will change the search field of the URL whenever a tab
|
||||
// is changed in the UI.
|
||||
$timeout(checkTabs, 50);
|
||||
});
|
||||
|
||||
var initallyChecked = false;
|
||||
window.__isLoading = function() {
|
||||
if (!initallyChecked) {
|
||||
|
|
Reference in a new issue