<!--
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="../../../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-rest-api-interface/gr-rest-api-interface.html">

<dom-module id="gr-dropdown">
  <template>
    <style>
      :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;
      }
      :host[down-arrow] .dropdown-trigger {
        padding-right: 1.4em;
      }
      gr-avatar {
        height: 2em;
        width: 2em;
        vertical-align: middle;
      }
      gr-button[link] {
        padding: 1em 0;
      }
      ul {
        list-style: none;
      }
      ul .accountName {
        font-weight: 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 {
        color: #00e;
        text-decoration: none;
      }
      li .itemAction:not(.disabled):hover {
        background-color: #6B82D6;
        color: #fff;
      }
      .topContent {
        display: block;
        padding: .85em 1em;
      }
      .bold-text {
        font-weight: bold;
      }
      :host:not([down-arrow]) .downArrow { display: none; }
      :host[down-arrow] .downArrow {
        border-left: .36em solid transparent;
        border-right: .36em solid transparent;
        border-top: .36em solid #ccc;
        height: 0;
        position: absolute;
        right: .3em;
        top: calc(50% - .05em);
        transition: border-top-color 200ms;
        width: 0;
      }
      .dropdown-trigger:hover .downArrow {
        border-top-color: #666;
      }
    </style>
    <gr-button link="[[link]]" class="dropdown-trigger" id="trigger"
        on-tap="_showDropdownTapHandler">
      <content></content>
       <i class="downArrow"></i>
    </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">
        <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">
                  [[item.text]]
                </div>
              </template>
            </div>
          </template>
          <template
              is="dom-repeat"
              items="[[items]]"
              as="link"
              initial-count="75">
            <li>
              <span
                  class$="itemAction [[_computeDisabledClass(link.id, disabledIds.*)]]"
                  data-id$="[[link.id]]"
                  on-tap="_handleItemTap"
                  hidden$="[[link.url]]">[[link.name]]</span>
              <a
                  class="itemAction"
                  href$="[[_computeLinkURL(link)]]"
                  rel$="[[_computeLinkRel(link)]]"
                  target$="[[link.target]]"
                  hidden$="[[!link.url]]">[[link.name]]</a>
            </li>
          </template>
        </ul>
      </div>
    </iron-dropdown>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-dropdown.js"></script>
</dom-module>
