diff --git a/external_libraries.py b/external_libraries.py
index febf9abb1..7e071424c 100644
--- a/external_libraries.py
+++ b/external_libraries.py
@@ -18,9 +18,9 @@ EXTERNAL_JS = [
]
EXTERNAL_CSS = [
- 'netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.css',
+ 'netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css',
'netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.no-icons.min.css',
- 'fonts.googleapis.com/css?family=Droid+Sans:400,700',
+ 'fonts.googleapis.com/css?family=Source+Sans+Pro:400,700',
]
EXTERNAL_FONTS = [
diff --git a/static/css/quay.css b/static/css/quay.css
index 4df625503..e57d7f872 100644
--- a/static/css/quay.css
+++ b/static/css/quay.css
@@ -1,5 +1,5 @@
* {
- font-family: 'Droid Sans', sans-serif;
+ font-family: 'Source Sans Pro', sans-serif;
margin: 0;
}
@@ -116,6 +116,88 @@
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4);
}
+.co-fx-text-shadow {
+ text-shadow: rgba(0, 0, 0, 1) 1px 1px 2px;
+}
+
+.co-nav-title {
+ height: 70px;
+ margin-top: -22px;
+}
+
+.co-nav-title .co-nav-title-content {
+ color: white;
+ text-align: center;
+}
+
+.co-tab-container {
+ padding: 0px;
+}
+
+.co-tabs {
+ margin: 0px;
+ padding: 0px;
+ width: 82px;
+ background-color: #e8f1f6;
+ border-right: 1px solid #DDE7ED;
+
+ display: table-cell;
+ float: none;
+ vertical-align: top;
+}
+
+.co-tab-content {
+ width: 100%;
+ display: table-cell;
+ float: none;
+ padding: 10px;
+}
+
+.co-tabs li {
+ list-style: none;
+ display: block;
+ border-bottom: 1px solid #DDE7ED;
+}
+
+
+.co-tabs li.active {
+ background-color: white;
+ border-right: 1px solid white;
+ margin-right: -1px;
+}
+
+.co-tabs li a {
+ display: block;
+ width: 82px;
+ height: 82px;
+ line-height: 82px;
+ text-align: center;
+ font-size: 36px;
+ color: gray;
+}
+
+.co-tabs li.active a {
+ color: black;
+}
+
+
+.co-main-content-panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ padding: 10px;
+
+ -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4);
+ -ms-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4);
+ -o-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4);
+ box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4);
+}
+
+.co-tab-panel {
+ padding: 0px;
+}
+
.main-panel {
margin-bottom: 20px;
background-color: #fff;
diff --git a/static/directives/cor-tab-content.html b/static/directives/cor-tab-content.html
new file mode 100644
index 000000000..997ae5af1
--- /dev/null
+++ b/static/directives/cor-tab-content.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/directives/cor-tab-panel.html b/static/directives/cor-tab-panel.html
new file mode 100644
index 000000000..57f9dfa1c
--- /dev/null
+++ b/static/directives/cor-tab-panel.html
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/static/directives/cor-tab.html b/static/directives/cor-tab.html
new file mode 100644
index 000000000..f22d3bdac
--- /dev/null
+++ b/static/directives/cor-tab.html
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/static/directives/cor-tabs.html b/static/directives/cor-tabs.html
new file mode 100644
index 000000000..1a965932e
--- /dev/null
+++ b/static/directives/cor-tabs.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/directives/cor-title-content.html b/static/directives/cor-title-content.html
new file mode 100644
index 000000000..6acbe47b3
--- /dev/null
+++ b/static/directives/cor-title-content.html
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/static/directives/cor-title-link.html b/static/directives/cor-title-link.html
new file mode 100644
index 000000000..396a1f447
--- /dev/null
+++ b/static/directives/cor-title-link.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/directives/cor-title.html b/static/directives/cor-title.html
new file mode 100644
index 000000000..63cfd322c
--- /dev/null
+++ b/static/directives/cor-title.html
@@ -0,0 +1,2 @@
+
+
diff --git a/static/js/app.js b/static/js/app.js
index 43fa2f5d4..0c0c173e7 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -126,7 +126,7 @@ function getMarkedDown(string) {
quayDependencies = ['ngRoute', 'chieffancypants.loadingBar', 'angular-tour', 'restangular', 'angularMoment',
'mgcrea.ngStrap', 'ngCookies', 'ngSanitize', 'angular-md5', 'pasvaz.bindonce', 'ansiToHtml',
- 'ngAnimate'];
+ 'ngAnimate', 'core-ui'];
if (window.__config && window.__config.MIXPANEL_KEY) {
quayDependencies.push('angulartics');
@@ -2226,7 +2226,7 @@ quayApp = angular.module('quay', quayDependencies, function($provide, cfpLoading
when('/user/', {title: 'Account Settings', description:'Account settings for ' + title, templateUrl: '/static/partials/user-admin.html',
reloadOnSearch: false, controller: UserAdminCtrl}).
when('/superuser/', {title: 'Superuser Admin Panel', description:'Admin panel for ' + title, templateUrl: '/static/partials/super-user.html',
- reloadOnSearch: false, controller: SuperUserAdminCtrl}).
+ reloadOnSearch: false, controller: SuperUserAdminCtrl, newLayout: true}).
when('/guide/', {title: 'Guide', description:'Guide to using private docker repositories on ' + title,
templateUrl: '/static/partials/guide.html',
controller: GuideCtrl}).
@@ -6690,6 +6690,7 @@ quayApp.directive('ngBlur', function() {
};
});
+
quayApp.directive("filePresent", [function () {
return {
restrict: 'A',
@@ -6763,7 +6764,6 @@ quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanServi
var changeTab = function(activeTab, opt_timeout) {
var checkCount = 0;
-
$timeout(function() {
if (checkCount > 5) { return; }
checkCount++;
@@ -6827,6 +6827,8 @@ quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanServi
$rootScope.pageClass = current.$$route.pageClass;
}
+ $rootScope.newLayout = !!current.$$route.newLayout;
+
if (current.$$route.description) {
$rootScope.description = current.$$route.description;
} else {
@@ -6842,26 +6844,28 @@ quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanServi
// Setup deep linking of tabs. This will change the search field of the URL whenever a tab
// is changed in the UI.
- $('a[data-toggle="tab"]').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;
- }
+ $timeout(function() {
+ $('a[data-toggle="tab"]').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);
+ $location.search(newSearch);
+ });
+
+ e.preventDefault();
});
- e.preventDefault();
- });
-
- if (activeTab) {
- changeTab(activeTab);
- }
+ if (activeTab) {
+ changeTab(activeTab);
+ }
+ }, 100); // 100ms to make sure angular has rendered.
});
var initallyChecked = false;
diff --git a/static/js/controllers.js b/static/js/controllers.js
index 9bea2ebdb..b8f6ccb11 100644
--- a/static/js/controllers.js
+++ b/static/js/controllers.js
@@ -2831,7 +2831,7 @@ function SuperUserAdminCtrl($scope, ApiService, Features, UserService) {
}, ApiService.errorDisplay('Cannot load system usage. Please contact support.'))
}
- $scope.loadLogs = function() {
+ $scope.loadUsageLogs = function() {
$scope.logsCounter++;
};
diff --git a/static/js/core-ui.js b/static/js/core-ui.js
new file mode 100644
index 000000000..64ffc6f68
--- /dev/null
+++ b/static/js/core-ui.js
@@ -0,0 +1,104 @@
+angular.module("core-ui", [])
+
+ .directive('corTitle', function() {
+ var directiveDefinitionObject = {
+ priority: 1,
+ templateUrl: '/static/directives/cor-title.html',
+ replace: true,
+ transclude: true,
+ restrict: 'C',
+ scope: {},
+ controller: function($rootScope, $scope, $element) {
+ }
+ };
+ return directiveDefinitionObject;
+ })
+
+ .directive('corTitleContent', function() {
+ var directiveDefinitionObject = {
+ priority: 1,
+ templateUrl: '/static/directives/cor-title-content.html',
+ replace: true,
+ transclude: true,
+ restrict: 'C',
+ scope: {},
+ controller: function($rootScope, $scope, $element) {
+ }
+ };
+ return directiveDefinitionObject;
+ })
+
+ .directive('corTitleLink', function() {
+ var directiveDefinitionObject = {
+ priority: 1,
+ templateUrl: '/static/directives/cor-title-link.html',
+ replace: true,
+ transclude: true,
+ restrict: 'C',
+ scope: {},
+ controller: function($rootScope, $scope, $element) {
+ }
+ };
+ return directiveDefinitionObject;
+ })
+
+ .directive('corTabPanel', function() {
+ var directiveDefinitionObject = {
+ priority: 1,
+ templateUrl: '/static/directives/cor-tab-panel.html',
+ replace: true,
+ transclude: true,
+ restrict: 'C',
+ scope: {},
+ controller: function($rootScope, $scope, $element) {
+ }
+ };
+ return directiveDefinitionObject;
+ })
+
+ .directive('corTabContent', function() {
+ var directiveDefinitionObject = {
+ priority: 2,
+ templateUrl: '/static/directives/cor-tab-content.html',
+ replace: true,
+ transclude: true,
+ restrict: 'C',
+ scope: {},
+ controller: function($rootScope, $scope, $element) {
+ }
+ };
+ return directiveDefinitionObject;
+ })
+
+ .directive('corTabs', function() {
+ var directiveDefinitionObject = {
+ priority: 3,
+ templateUrl: '/static/directives/cor-tabs.html',
+ replace: true,
+ transclude: true,
+ restrict: 'C',
+ scope: {},
+ controller: function($rootScope, $scope, $element) {
+ }
+ };
+ return directiveDefinitionObject;
+ })
+
+ .directive('corTab', function() {
+ var directiveDefinitionObject = {
+ priority: 4,
+ templateUrl: '/static/directives/cor-tab.html',
+ replace: true,
+ transclude: true,
+ restrict: 'C',
+ scope: {
+ 'tabActive': '@tabActive',
+ 'tabTitle': '@tabTitle',
+ 'tabTarget': '@tabTarget',
+ 'tabInit': '&tabInit'
+ },
+ controller: function($rootScope, $scope, $element) {
+ }
+ };
+ return directiveDefinitionObject;
+ });
\ No newline at end of file
diff --git a/static/partials/super-user.html b/static/partials/super-user.html
index 9b34cf159..6a49e6eed 100644
--- a/static/partials/super-user.html
+++ b/static/partials/super-user.html
@@ -1,157 +1,120 @@
-
-
- This panel provides administrator access to
super users of this installation of the registry. Super users can be managed in the configuration for this installation.
+
+
+
+ Enterprise Registry Setup
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ You have deployed more repositories than your plan allows. Please
+ upgrade your subscription by contacting
CoreOS Sales.
-
-
-
-
-
-
-
- You have deployed more repositories than your plan allows. Please
- upgrade your subscription by contacting
CoreOS Sales.
-
-
-
- You are at your current plan's number of allowed repositories. It might be time to think about
- upgrading your subscription by contacting
CoreOS Sales.
-
-
-
- You are nearing the number of allowed deployed repositories. It might be time to think about
- upgrading your subscription by contacting
CoreOS Sales.
-
+
+ You are at your current plan's number of allowed repositories. It might be time to think about
+ upgrading your subscription by contacting
CoreOS Sales.
-
-
+
+
+
@@ -176,7 +139,7 @@
-
+
+
+
diff --git a/templates/base.html b/templates/base.html
index 9c4b0fed0..fe4d5f110 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -96,10 +96,9 @@ mixpanel.init("{{ mixpanel_key }}", { track_pageview : false, debug: {{ is_debug