<!--
Licensed 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.
-->

<a class="dropdown-toggle icon <%=icon%>" data-toggle="dropdown" href="#" data-bypass="true"></a>
<ul class="dropdown-menu arrow" role="menu" aria-labelledby="dLabel">
  <% _.each(links, function (linkSection) { %>
    <% if (linkSection.title) { %>
    <li class="header-label"> <%- linkSection.title %> </li>
    <% } %>
    <% _.each(linkSection.links, function (link) { %>
      <li>
        <a
          <% if (link.trigger) { %> data-bypass="true" triggerEvent="<%-link.trigger%>" <%}%>
          <% if (link.icon) { %>
          class="icon <%- link.icon %>"
          <% } %>
          href="<%- link.url %>"
          <% if (link.external) { %> data-bypass="true" target="_blank" <% } %> >
          <%- link.title %>
        </a>
      </li>
    <%});%>
  <%});%>
 </ul>

