<!--
Copyright (C) 2016 The Android Open Source Project

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

<link rel="import" href="../../../behaviors/base-url-behavior/base-url-behavior.html">
<link rel="import" href="../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../bower_components/iron-dropdown/iron-dropdown.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-cursor-manager/gr-cursor-manager.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-dropdown">
  <template>
    <style include="shared-styles">
      :host {
        display: inline-block;
      }
      .dropdown-trigger {
        text-decoration: none;
        width: 100%;
      }
      .dropdown-content {
        background-color: #fff;
        box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
      }
      button {
        background: none;
        border: none;
        font: inherit;
        padding: .3em 0;
      }
      gr-avatar {
        height: 2em;
        width: 2em;
        vertical-align: middle;
      }
      gr-button[link] {
        padding: 0.5em;
      }
      gr-button[link]:focus {
        outline: 5px auto -webkit-focus-ring-color;
      }
      ul {
        list-style: none;
      }
      ul .accountName {
        font-family: var(--font-family-bold);
      }
      li .accountInfo,
      li .itemAction {
        cursor: pointer;
        display: block;
        padding: .85em 1em;
      }
      li .itemAction.disabled {
        color: #ccc;
        cursor: default;
      }
      li .itemAction:link,
      li .itemAction:visited {
        text-decoration: none;
      }
      li .itemAction:not(.disabled):hover {
        background-color: #6B82D6;
        color: #fff;
      }
      li:focus,
      li.selected {
        background-color: #EBF5FB;
        outline: none;
      }
      .topContent {
        display: block;
        padding: .85em 1em;
      }
      .bold-text {
        font-family: var(--font-family-bold);
      }
    </style>
    <gr-button
        link="[[link]]"
        class="dropdown-trigger" id="trigger"
        down-arrow="[[downArrow]]"
        on-tap="_showDropdownTapHandler">
      <content></content>
    </gr-button>
    <iron-dropdown id="dropdown"
        vertical-align="top"
        vertical-offset="[[verticalOffset]]"
        allow-outside-scroll="true"
        horizontal-align="[[horizontalAlign]]"
        on-tap="_handleDropdownTap">
      <div class="dropdown-content" slot="dropdown-content">
        <ul>
          <template is="dom-if" if="[[topContent]]">
            <div class="topContent">
              <template
                  is="dom-repeat"
                  items="[[topContent]]"
                  as="item"
                  initial-count="75">
                <div
                    class$="[[_getClassIfBold(item.bold)]] top-item"
                    tabindex="-1">
                  [[item.text]]
                </div>
              </template>
            </div>
          </template>
          <template
              is="dom-repeat"
              items="[[items]]"
              as="link"
              initial-count="75">
            <li tabindex="-1">
              <span
                  class$="itemAction [[_computeDisabledClass(link.id, disabledIds.*)]]"
                  data-id$="[[link.id]]"
                  on-tap="_handleItemTap"
                  hidden$="[[link.url]]"
                  tabindex="-1">[[link.name]]</span>
              <a
                  class="itemAction"
                  href$="[[_computeLinkURL(link)]]"
                  rel$="[[_computeLinkRel(link)]]"
                  target$="[[link.target]]"
                  hidden$="[[!link.url]]"
                  tabindex="-1">[[link.name]]</a>
            </li>
          </template>
        </ul>
      </div>
    </iron-dropdown>
    <gr-cursor-manager
        id="cursor"
        cursor-target-class="selected"
        scroll-behavior="never"
        focus-on-move
        stops="[[_listElements]]"></gr-cursor-manager>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-dropdown.js"></script>
</dom-module>
