<!--
@license
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="../../shared/gr-tooltip-content/gr-tooltip-content.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: var(--dropdown-background-color);
        box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
      }
      gr-button {
        @apply --gr-button;
      }
      gr-avatar {
        height: 2em;
        width: 2em;
        vertical-align: middle;
      }
      gr-button[link]:focus {
        outline: 5px auto -webkit-focus-ring-color;
      }
      ul {
        list-style: none;
      }
      .topContent,
      li {
        border-bottom: 1px solid var(--border-color);
      }
      li:last-of-type {
        border: none;
      }
      li .itemAction {
        cursor: pointer;
        display: block;
        padding: .85em 1em;
      }
      li .itemAction {
        @apply --gr-dropdown-item;
      }
      li .itemAction.disabled {
        color: var(--deemphasized-text-color);
        cursor: default;
      }
      li .itemAction:link,
      li .itemAction:visited {
        text-decoration: none;
      }
      li .itemAction:not(.disabled):hover {
        background-color: var(--hover-background-color);
      }
      li:focus,
      li.selected {
        background-color: var(--selection-background-color);
        outline: none;
      }
      li:focus .itemAction,
      li.selected .itemAction {
        background-color: transparent;
      }
      .topContent {
        display: block;
        padding: .85em 1em;
        @apply --gr-dropdown-item;
      }
      .bold-text {
        font-family: var(--font-family-bold);
      }
    </style>
    <gr-button
        link="[[link]]"
        class="dropdown-trigger" id="trigger"
        down-arrow="[[downArrow]]"
        on-tap="_dropdownTriggerTapHandler">
      <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">
              <gr-tooltip-content
                  has-tooltip="[[_computeHasTooltip(link.tooltip)]]"
                  title$="[[link.tooltip]]">
                <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>
              </gr-tooltip-content>
            </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>
