<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<div data-ng-controller="HeaderController" class="row">
    <div class="navbar-header">
        <button class="navbar-toggle" type="button" data-ng-click="isCollapsed = !isCollapsed">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
 <a data-ui-sref="search()" data-ui-sref-active="active" class="mainLogo">
   <!--  <img src="../img/ApacheAtlasLogo.png" /> -->
   Apache <b>Atlas</b>
 </a>
    </div>
    <nav class="collapse navbar-collapse" data-collapse="isCollapsed" data-role="navigation">
        <ul class="navbar-nav nav pull-right menuBar" data-ng-if="isLoggedIn()">
            <li data-ui-sref-active="active">
                 <a data-ui-sref="search()" class="menulink">Search</a>
            </li>
            <li data-ng-repeat="item in menu" data-ui-sref-active="active">
                <a data-ui-sref="{{item.state}}">{{item.title}}</a>
            </li>
            <li data-ui-sref-active="active">
              <a  ng-if="!username" class="menulink" href="https://cwiki.apache.org/confluence/display/ATLAS/Atlas+Home" target="_blank">Help</a>
            </li>
            <li data-ui-sref-active="active">
                <a  ng-if="!username" class="menulink" href="javascript:void(0)" ng-click="ShowAbout()">About</a>
            </li>
        </ul>
    </nav>
</div>