{#-
       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.
-#}
{% set hide_left_bar = True %}
{% extends g.theme.master %}

{% block content %}
{% if menu %}
  <ul id="account-nav-menu" class="b-hornav droppy">
      {% for item in menu -%}
      <li id="{{ item.tabid }}">
      <a href="{{ item.target }}">
          {{ item.title }}
          <div class="marker{% if current_menu_item|default == item.target or item.target.rstrip('/') == request.path.rstrip('/') %} current{% endif %}"></div>
      </a>
      </li>
      {%- endfor %}
  </ul>
{% endif %}
{% endblock %}
