Update navigation to accordian-style menu

- New navigation provides intuitive structure for showing relationship
between sections and pages
- Menu keeps an open state, which allows easy clicking to sibling pages
- Ability to preview all page sections w/o hover over blocking page content
- Allows user to see where they are within navigation at all times

Tested: Opened each page and confirmed new navigation worked, clicked through
to all pages successfully.

Change-Id: Ie10dc95d8e15ee9bf89a3bec9ff231c0a7065ed9
Signed-off-by: Kathy Pine <kathryn.elainex.pine@intel.com>
diff --git a/app/common/directives/app-navigation.html b/app/common/directives/app-navigation.html
index 435980a..41441e2 100644
--- a/app/common/directives/app-navigation.html
+++ b/app/common/directives/app-navigation.html
@@ -1,97 +1,119 @@
 <nav class="nav__wrapper">
   <ul id="nav__top-level" ng-style="navStyle">
     <li>
-      <a class="btn-overview" ng-class="{opened: firstLevel == 'overview'}" href="#/overview/server" ng-click="change('overview')">
+      <button ng-click="change('overview')">
         <icon class="nav-icon" file="icon-overview.svg" aria-hidden="true"></icon>
-        Server overview
-      </a>
-    </li>
-    <li>
-      <button class="btn-health" ng-class="{opened: firstLevel == 'server-health'}" ng-click="change('server-health')">
-        <icon class="nav-icon" file="icon-health.svg" aria-hidden="true"></icon>
-        Server health
+        <span class="nav-link">Overview</span>
       </button>
-      <ul class="nav__second-level btn-health" ng-style="navStyle" ng-class="{opened: (showSubMenu && firstLevel == 'server-health')}">
-        <li ng-class="{'active': (path == '/server-health/event-log')}">
-          <a href="#/server-health/event-log" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-health') ? 0 : -1}}">Event log</a>
+    </li>
+    <li ng-class="{opened: showHealthMenu}">
+      <button class="btn-health" ng-click="change('server-health')">
+        <icon class="nav-icon" file="icon-health.svg" aria-hidden="true"></icon>
+        <span class="nav-link">Health</span>
+      </button>
+      <ul class="nav__second-level btn-health" ng-style="navStyle" ng-class="{opened: (showHealthMenu)}">
+        <li ng-class="{'active': (path == '/server-health/sys-log')}">
+          <a href="#/server-health/sys-log" tabindex="{{(showHealthMenu) ? 0 : -1}}">
+            <span>Event log</span>
+          </a>
         </li>
         <li ng-class="{'active': (path == '/server-health/inventory-overview' || path == '/server-health/inventory')}">
-          <a href="#/server-health/inventory-overview" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-health') ? 0 : -1}}">Hardware status</a>
+          <a href="#/server-health/inventory-overview" tabindex="{{(showHealthMenu) ? 0 : -1}}">
+            <span>Hardware status</span>
+          </a>
         </li>
         <li ng-class="{'active': (path == '/server-health/sensors-overview' || path == '/server-health/sensors')}">
-          <a href="#/server-health/sensors-overview" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-health') ? 0 : -1}}">Sensors</a>
-        </li>
-        <li ng-class="{'active': (path == '/server-health/sys-log')}" ng-show="!dataService.configJson.redfishEventLogDisabled">
-          <a href="#/server-health/sys-log" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-health') ? 0 : -1}}">System logs</a>
+          <a href="#/server-health/sensors-overview" tabindex="{{(showHealthMenu) ? 0 : -1}}">
+            <span>Sensors</span>
+          </a>
         </li>
       </ul>
     </li>
-    <li>
-      <button class="btn-control" ng-class="{opened: firstLevel == 'server-control'}" ng-click="change('server-control')">
-        <icon class="nav-icon  nav-icon__control" file="icon-control.svg" aria-hidden="true"></icon>
-        Server control
+    <li ng-class="{opened: showControlMenu}">
+      <button ng-click="change('server-control')">
+        <icon class="nav-icon" file="icon-control.svg" aria-hidden="true"></icon>
+        <span class="nav-link">Control</span>
       </button>
-      <ul class="nav__second-level btn-control" ng-style="navStyle" ng-class="{opened: (showSubMenu && firstLevel == 'server-control')}">
+      <ul class="nav__second-level btn-control" ng-class="{opened: (showControlMenu)}">
         <li ng-class="{'active': (path == '/server-control' || path == '/server-control/power-operations')}">
-          <a href="#/server-control/power-operations" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-control') ? 0 : -1}}">Server power operations</a>
+          <a href="#/server-control/power-operations" tabindex="{{(showControlMenu) ? 0 : -1}}">
+            <span>Server power operations</span>
+          </a>
         </li>
         <li ng-class="{'active': (path == '/server-control/power-usage')}">
-          <a href="#/server-control/power-usage" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-control') ? 0 : -1}}">Manage power usage</a>
+          <a href="#/server-control/power-usage" tabindex="{{(showControlMenu) ? 0 : -1}}">
+            <span>Manage power usage</span>
+          </a>
         </li>
         <li ng-class="{'active': (path == '/server-control/server-led')}">
-          <a href="#/server-control/server-led" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-control') ? 0 : -1}}">Server LED</a>
+          <a href="#/server-control/server-led" tabindex="{{(showControlMenu) ? 0 : -1}}">
+            <span>Server LED</span>
+          </a>
         </li>
         <li ng-class="{'active': (path == '/server-control/bmc-reboot')}">
-          <a href="#/server-control/bmc-reboot" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-control') ? 0 : -1}}">Reboot BMC</a>
+          <a href="#/server-control/bmc-reboot" tabindex="{{(showControlMenu) ? 0 : -1}}">
+            <span>Reboot BMC</span>
+          </a>
         </li>
         <li ng-class="{'active': (path == '/server-control/remote-console')}">
-          <a href="#/server-control/remote-console" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-control') ? 0 : -1}}">Serial over LAN console</a>
+          <a href="#/server-control/remote-console" tabindex="{{(showControlMenu) ? 0 : -1}}">
+            <span>Serial over LAN console</span>
+          </a>
         </li>
         <li ng-class="{'active': (path == '/server-control/kvm')}">
-          <a href="#/server-control/kvm" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'server-control') ? 0 : -1}}">KVM</a>
+          <a href="#/server-control/kvm" tabindex="{{(showControlMenu) ? 0 : -1}}">
+            <span>KVM</span>
+          </a>
         </li>
-        <li ng-class="{'active': (path == '/server-control/virtual-media')}">
-          <a href="#/server-control/virtual-media" ng-click="closeSubnav()"
-            tabindex="{{(showSubMenu && firstLevel == 'server-control') ? 0 : -1}}">Virtual Media</a>
+        <li ng-class="{'active': (path == '/configuration' || path == '/configuration/virtual-media')}">
+          <a href="#/server-control/virtual-media" tabindex="{{(showControlMenu) ? 0 : -1}}">
+            <span>Virtual Media</span>
+          </a>
         </li>
       </ul>
     </li>
-    <li>
-      <button class="btn-config" ng-class="{opened: firstLevel == 'configuration'}" ng-click="change('configuration')">
+    <li ng-class="{opened: showConfigMenu}">
+      <button ng-click="change('configuration')">
         <icon class="nav-icon" file="icon-config.svg" aria-hidden="true"></icon>
-        Server configuration
+        <span class="nav-link">Configuration</span>
       </button>
-      <ul class="nav__second-level btn-firmware" ng-style="navStyle" ng-class="{opened: (showSubMenu && firstLevel == 'configuration')}">
+      <ul class="nav__second-level btn-firmware" ng-class="{opened: (showConfigMenu)}">
         <li ng-class="{'active': (path == '/configuration' || path == '/configuration/network')}">
-          <a href="#/configuration/network" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'configuration') ? 0 : -1}}">Network settings</a>
+          <a href="#/configuration/network" tabindex="{{(showConfigMenu) ? 0 : -1}}"><span>Network
+              settings</span></a>
         </li>
         <li ng-class="{'active': (path == '/configuration' || path == '/configuration/snmp')}">
-          <a href="#/configuration/snmp" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'configuration') ? 0 : -1}}">SNMP settings</a>
+          <a href="#/configuration/snmp" tabindex="{{(showConfigMenu) ? 0 : -1}}"><span>SNMP
+              settings</span></a>
         </li>
         <li ng-class="{'active': (path == '/configuration' || path == '/configuration/firmware')}">
-          <a href="#/configuration/firmware" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'configuration') ? 0 : -1}}">Firmware</a>
+          <a href="#/configuration/firmware" tabindex="{{(showConfigMenu) ? 0 : -1}}"><span>Firmware</span></a>
         </li>
         <li ng-class="{'active': (path == '/configuration' || path == '/configuration/date-time')}">
-          <a href="#/configuration/date-time" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'configuration') ? 0 : -1}}">Date and time settings</a>
+          <a href="#/configuration/date-time" tabindex="{{(showConfigMenu) ? 0 : -1}}"><span>Date and
+              time
+              settings</span></a>
         </li>
       </ul>
     </li>
-    <li>
-      <button class="btn-access-control" ng-class="{opened: firstLevel == 'access-control'}" ng-click="change('access-control')">
-          <icon class="nav-icon nav-icon__key" file="icon-key.svg" aria-hidden="true"></icon>
-          Access control
+    <li ng-class="{opened: showAccessMenu}">
+      <button ng-click="change('access-control')">
+        <icon class="nav-icon" file="icon-user.svg" aria-hidden="true"></icon>
+        <span class="nav-link">Access</span>
       </button>
-      <ul class="nav__second-level btn-access-control" ng-style="navStyle" ng-class="{opened: (showSubMenu && firstLevel == 'access-control')}">
+      <ul class="nav__second-level btn-users" ng-style="navStyle" ng-class="{opened: (showAccessMenu)}">
         <li ng-class="{'active': (path == '/access-control' || path == '/access-control/ldap')}">
-          <a href="#/access-control/ldap" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'configuration') ? 0 : -1}}">LDAP</a>
+          <a href="#/access-control/ldap" tabindex="{{ (showAccessMenu) ? 0 : -1}}"><span>LDAP</span></a>
         </li>
         <li ng-class="{'active': (path == '/access-control' || path == '/access-control/local-users')}">
-          <a href="#/access-control/local-users" ng-click="closeSubnav()" tabindex="{{ (showSubMenu && firstLevel == 'access-control') ? 0 : -1}}">Local users</a>
+          <a href="#/access-control/local-users" tabindex="{{ (showAccessMenu) ? 0 : -1}}"><span>Local
+              users</span></a>
         </li>
         <li ng-class="{'active': (path == '/access-control' || path == '/access-control/ssl-certificates')}">
-          <a href="#/access-control/ssl-certificates" ng-click="closeSubnav()" tabindex="{{(showSubMenu && firstLevel == 'configuration') ? 0 : -1}}">SSL certificates</a>
+          <a href="#/access-control/ssl-certificates" tabindex="{{ (showAccessMenu) ? 0 : -1}}"><span>SSL
+              certificates</span></a>
         </li>
       </ul>
     </li>
   </ul>
-</nav>
+</nav>
\ No newline at end of file
diff --git a/app/common/directives/app-navigation.js b/app/common/directives/app-navigation.js
index baa8c8b..a2ced03 100644
--- a/app/common/directives/app-navigation.js
+++ b/app/common/directives/app-navigation.js
@@ -10,18 +10,30 @@
           'controller': [
             '$scope', '$location', 'dataService',
             function($scope, $location, dataService) {
+              $scope.showHealthMenu = false;
+              $scope.showControlMenu = false;
+              $scope.showConfigMenu = false;
+              $scope.showAccessMenu = false;
               $scope.dataService = dataService;
-              $scope.showSubMenu = false;
+
               $scope.change = function(firstLevel) {
-                if (firstLevel != $scope.firstLevel) {
-                  $scope.firstLevel = firstLevel;
-                  $scope.showSubMenu = true;
-                } else {
-                  $scope.showSubMenu = !$scope.showSubMenu;
-                }
-              };
-              $scope.closeSubnav = function() {
-                $scope.showSubMenu = false;
+                switch (firstLevel) {
+                  case 'server-health':
+                    $scope.showHealthMenu = !$scope.showHealthMenu;
+                    break;
+                  case 'server-control':
+                    $scope.showControlMenu = !$scope.showControlMenu;
+                    break;
+                  case 'configuration':
+                    $scope.showConfigMenu = !$scope.showConfigMenu;
+                    break;
+                  case 'access-control':
+                    $scope.showAccessMenu = !$scope.showAccessMenu;
+                    break;
+                  case 'overview':
+                    $location.url('/overview/server');
+                    break;
+                };
               };
               $scope.$watch('path', function() {
                 var urlRoot = $location.path().split('/')[1];
@@ -30,22 +42,15 @@
                 } else {
                   $scope.firstLevel = 'overview';
                 }
-                $scope.showSubMenu = false;
+                $scope.showSubMenu = true;
               });
               $scope.$watch('showNavigation', function() {
-                var paddingTop = 0;
                 var urlRoot = $location.path().split('/')[1];
                 if (urlRoot != '') {
                   $scope.firstLevel = urlRoot;
                 } else {
                   $scope.firstLevel = 'overview';
                 }
-
-                if ($scope.showNavigation) {
-                  paddingTop = document.getElementById('header').offsetHeight;
-                }
-                dataService.bodyStyle = {'padding-top': paddingTop + 'px'};
-                $scope.navStyle = {'top': paddingTop + 'px'};
               });
             }
           ],
@@ -56,11 +61,11 @@
 
               if (scope.showSubMenu) {
                 scope.$apply(function() {
-                  scope.showSubMenu = false;
+                  scope.showSubMenu = true;
                 });
               }
             });
           }
         };
       });
-})(window.angular);
+})(window.angular);
\ No newline at end of file