Mercurial > hg > thermostat-ng > web-client
changeset 218:de738e948f0a
Add vertical navigation drawer
Reviewed-by: jkang
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-September/025113.html
author | Andrew Azores <aazores@redhat.com> |
---|---|
date | Tue, 19 Sep 2017 17:56:55 -0400 |
parents | d37a36efafa3 |
children | baa2100c95bb |
files | src/app/app.controller.js src/app/app.controller.spec.js src/app/app.module.js src/app/components/landing/landing.html src/app/en.locale.yaml src/app/index.html |
diffstat | 6 files changed, 155 insertions(+), 74 deletions(-) [+] |
line wrap: on
line diff
--- a/src/app/app.controller.js Mon Sep 18 16:54:31 2017 -0400 +++ b/src/app/app.controller.js Tue Sep 19 17:56:55 2017 -0400 @@ -28,10 +28,11 @@ import authModule from 'components/auth/auth.module.js'; class AppController { - constructor ($scope, environment, authService) { + constructor ($scope, environment, authService, $translate) { 'ngInject'; this.env = environment; this._authService = authService; + this._translate = $translate; $scope.$on('userLoginChanged', () => this._updateUsernameLabel()); } @@ -43,6 +44,24 @@ } this._updateUsernameLabel(); + + this._translate([ + 'navbar.states.JVM_LISTING', + 'navbar.states.MULTICHARTS' + ]).then(translations => { + this.navigationItems = [ + { + title: translations['navbar.states.JVM_LISTING'], + iconClass: 'fa pficon-domain', + uiSref: 'jvmList' + }, + { + title: translations['navbar.states.MULTICHARTS'], + iconClass: 'fa pficon-trend-up', + uiSref: 'multichart' + } + ]; + }); } get loginStatus () {
--- a/src/app/app.controller.spec.js Mon Sep 18 16:54:31 2017 -0400 +++ b/src/app/app.controller.spec.js Tue Sep 19 17:56:55 2017 -0400 @@ -45,7 +45,7 @@ ['testing', 'development', 'production'].forEach(env => { describe(env, () => { - let ctrl, scope, authService; + let ctrl, scope, authService, translate; beforeEach(inject($controller => { 'ngInject'; @@ -55,11 +55,20 @@ login: sinon.spy(), logout: sinon.spy() }; + translate = sinon.stub().returns({ + then: sinon.stub().yields( + { + 'navbar.states.JVM_LISTING': 'JVM Listing', + 'navbar.states.MULTICHARTS': 'Multicharts' + } + ) + }); ctrl = $controller('AppController', { environment: env, $scope: scope, - authService: authService + authService: authService, + $translate: translate }); ctrl.$onInit(); })); @@ -72,7 +81,7 @@ }); describe('logout()', () => { - let ctrl, scope, authService; + let ctrl, scope, authService, translate; beforeEach(inject($controller => { 'ngInject'; @@ -82,11 +91,20 @@ login: sinon.spy(), logout: sinon.spy() }; + translate = sinon.stub().returns({ + then: sinon.stub().yields( + { + 'navbar.states.JVM_LISTING': 'JVM Listing', + 'navbar.states.MULTICHARTS': 'Multicharts' + } + ) + }); ctrl = $controller('AppController', { environment: 'testing', $scope: scope, - authService: authService + authService: authService, + $translate: translate }); ctrl.$onInit(); })); @@ -99,7 +117,7 @@ }); describe('username', () => { - let rootScope, scope, ctrl, authService; + let rootScope, scope, ctrl, authService, translate; beforeEach(inject(($controller, $rootScope) => { 'ngInject'; @@ -111,11 +129,20 @@ logout: sinon.spy(), username: 'fake-username' }; + translate = sinon.stub().returns({ + then: sinon.stub().yields( + { + 'navbar.states.JVM_LISTING': 'JVM Listing', + 'navbar.states.MULTICHARTS': 'Multicharts' + } + ) + }); ctrl = $controller('AppController', { $scope: scope, environment: 'testing', - authService: authService + authService: authService, + $translate: translate }); ctrl.$onInit(); }));
--- a/src/app/app.module.js Mon Sep 18 16:54:31 2017 -0400 +++ b/src/app/app.module.js Tue Sep 19 17:56:55 2017 -0400 @@ -48,6 +48,8 @@ .module('appModule', [ 'ui.router', 'ui.bootstrap', + 'patternfly', + 'patternfly.navigation', angularTranslate, authModule, // non-core modules
--- a/src/app/components/landing/landing.html Mon Sep 18 16:54:31 2017 -0400 +++ b/src/app/components/landing/landing.html Tue Sep 19 17:56:55 2017 -0400 @@ -10,30 +10,3 @@ <h3 translate>landing.APP_TITLE</h3> </div> </div> - -<div class="container-fluid container-cards-pf"> - <div class="row row-cards-pf"> - <div class="col-xs-12 col-md-4"> - <div class="card-pf"> - - <div class="card-pf-heading"> - <div class="card-pf-title" translate>landing.NAVIGATION</div> - </div> - - <div class="card-pf-body"> - <div class="card-pf-subtitle"> - <ul> - <li> - <a ui-sref="jvmList" translate>landing.nav.JVM_LISTING</a> - </li> - <li> - <a ui-sref="multichart" translate>landing.nav.MULTICHARTS</a> - </li> - </ul> - </div> - </div> - - </div> - </div> - </div><!-- /row --> -</div><!-- /container -->
--- a/src/app/en.locale.yaml Mon Sep 18 16:54:31 2017 -0400 +++ b/src/app/en.locale.yaml Tue Sep 19 17:56:55 2017 -0400 @@ -12,3 +12,7 @@ LOGOUT: Log Out USER_PREFS: Preferences + + states: + JVM_LISTING: JVM Listing + MULTICHARTS: Multicharts
--- a/src/app/index.html Mon Sep 18 16:54:31 2017 -0400 +++ b/src/app/index.html Tue Sep 19 17:56:55 2017 -0400 @@ -1,6 +1,6 @@ <!doctype html> <html ng-strict-di class="layout-pf layout-pf-fixed transitions"> -<head> + <head> <meta charset="utf-8"/> <title>Thermostat</title> @@ -8,49 +8,105 @@ <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta name="description" content=""/> <meta name="viewport" content="width=device-width"/> -</head> -<body id="pf-app" class="pf-body apf-body ng-cloak"> - <div ng-controller="AppController as $ctrl"> - <nav class="navbar navbar-pf-vertical"> - <div class="navbar-header"> - <a ui-sref="landing" class="navbar-brand"> - <img id="brandLogoImg" class="navbar-brand-icon" src="~images/thermostat_logo_white_600px.png" height="57" alt="Thermostat"/> - </a> - <p hidden id="envHeader" class="navbar-text label label-info infotip">{{$ctrl.env}}</p> - </div> - <nav class="collapse navbar-collapse"> - <ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility"> - <li class="dropdown"> - <a class="dropdown-toggle nav-item-iconic" id="infoDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> - <span translate-attr="{title: 'navbar.HELP'}" class="fa pficon-help"></span> - <span class="caret"></span> + </head> + <body id="pf-app" class="pf-body apf-body ng-cloak"> + + <div class="" ng-controller="AppController as $ctrl"> + + <div ng-if="!$ctrl.loginStatus"> + + <nav class="navbar navbar-pf-vertical"> + + <div class="navbar-header"> + <a ui-sref="landing" class="navbar-brand"> + <img class="navbar-brand-icon" src="~images/thermostat_logo_white_600px.png" height="57" alt="Thermostat"/> </a> - <ul class="dropdown-menu" aria-labelledby="infoDropdown"> - <li><a translate-attr="{href: 'navbar.HELP_URL'}" translate>navbar.HELP</a></li> - <li><a ui-sref="about" translate>navbar.ABOUT</a></li> + <p hidden class="navbar-text label label-info infotip">{{$ctrl.env}}</p> + </div> + + <nav class="collapse navbar-collapse"> + <ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility"> + <li class="dropdown"> + <a class="dropdown-toggle nav-item-iconic" id="infoDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> + <span translate-attr="{title: 'navbar.HELP'}" class="fa pficon-help"></span> + <span class="caret"></span> + </a> + <ul class="dropdown-menu" aria-labelledby="infoDropdown"> + <li><a translate-attr="{href: 'navbar.HELP_URL'}" translate>navbar.HELP</a></li> + <li><a ui-sref="about" translate>navbar.ABOUT</a></li> + </ul> + </li> </ul> - </li> + </nav> + + </nav> + + <div class="container-pf-nav-pf-vertical-with-tertiary"> + <div class="pf-framework-content"> + <main ui-view class="main pf-framework-view"> + </main> + </div> + </div> + + </div><!--!$ctrl.loginStatus--> - <li id="userMenu" hidden ng-show="$ctrl.loginStatus" class="dropdown"> - <a class="dropdown-toggle nav-item-iconic" id="userDropwdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> - <span translate-attr="{title: 'navbar.USERNAME'}" class="fa pficon-user"></span> {{$ctrl.username}} <span class="caret"></span> - </a> - <ul class="dropdown-menu" aria-labelledby="userDropwdown"> - <li><a ui-sref="user-prefs" translate>navbar.USER_PREFS</a></li> - <li><a id="logoutButton" ng-click="$ctrl.logout()" style="cursor: pointer; cursor: hand" translate>navbar.LOGOUT</a></li> - </ul> - </li> - </ul> - </nav> - </nav> - </div> + <div ng-if="$ctrl.loginStatus"> + <div class="layout-pf layout-pf-fixed faux-layout"> + <pf-vertical-navigation + items="$ctrl.navigationItems" + show-badges="true" + pinnable-menus="true" + update-active-items-on-click="true" + > + <div class="navbar-header"> + <a ui-sref="landing" class="navbar-brand"> + <img id="brandLogoImg" class="navbar-brand-icon" src="~images/thermostat_logo_white_600px.png" height="57" alt="Thermostat"/> + </a> + <p hidden id="envHeader" class="navbar-text label label-info infotip">{{$ctrl.env}}</p> + </div> + + <div> + <ul class="nav navbar-nav navbar-right navbar-iconic"> - <div id="centralPanel" class="container-pf-nav-pf-vertical-with-tertiary"> - <div class="pf-framework-content"> - <main ui-view class="main pf-framework-view"> - </main> + <li class="dropdown"> + </li> + <li class="dropdown"> + <a class="dropdown-toggle nav-item-iconic" id="helpMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> + <span title="Help" class="fa pficon-help"></span> + <span class="caret"></span> + </a> + <ul class="dropdown-menu" aria-labelledby="helpMenu"> + <li><a translate-attr="{href: 'navbar.HELP_URL'}" translate>navbar.HELP</a></li> + <li><a ui-sref="about" translate>navbar.ABOUT</a></li> + </ul> + </li> + + <li ng-if="$ctrl.loginStatus" class="dropdown"> + <a class="dropdown-toggle nav-item-iconic" id="userMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> + <span translate-attr="{title: 'navbar.USERNAME'}" class="fa pficon-user"></span> + {{$ctrl.username}} + <span class="caret"></span> + </a> + <ul class="dropdown-menu" aria-labelledby="userMenu"> + <li><a ui-sref="user-prefs" translate>navbar.USER_PREFS</a></li> + <li><a id="logoutButton" ng-click="$ctrl.logout()" style="cursor: pointer; cursor: hand" translate>navbar.LOGOUT</a></li> + </ul> + </li> + + </ul> + </div> + + </pf-vertical-navigation> + <div class="container-fluid container-cards-pf container-pf-nav-pf-vertical"> + <div class="pf-framework-content"> + <main ui-view class="main pf-framework-view"> + </main> + </div> + </div> + </div> + </div><!--$ctrl.loginStatus--> + </div> - </div> -</body> + </body> </html>