<!--
Copyright (C) 2017 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="../../../bower_components/polymer/polymer.html">

<link rel="import" href="../../../bower_components/iron-dropdown/iron-dropdown.html">
<link rel="import" href="../../../bower_components/paper-item/paper-item.html">
<link rel="import" href="../../../bower_components/paper-listbox/paper-listbox.html">

<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
<link rel="import" href="../../shared/gr-select/gr-select.html">


<dom-module id="gr-dropdown-list">
  <template>
    <style include="shared-styles">
      :host {
        display: inline-block;
      }
      #trigger {
        -moz-user-select: text;
        -ms-user-select: text;
        -webkit-user-select: text;
        user-select: text;
      }
      .dropdown-trigger {
        cursor: pointer;
        padding: 0;
      }
      .dropdown-content {
        background-color: #fff;
        box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
        max-height: 70vh;
        margin-top: 1.5em;
        min-width: 266px;
        max-width: 300px;
      }
      paper-listbox {
        --paper-listbox: {
          padding: 0;
        }
      }
      paper-item {
        cursor: pointer;
        flex-direction: column;
        font-size: 1em;
        --paper-item: {
          min-height: 0;
          padding: 10px 16px;
        }
        --paper-item-selected: {
          background-color: rgba(161,194,250,.12);
        }
        --paper-item-focused-before: {
          background-color: #f2f2f2;
        }
        --paper-item-focused: {
          background-color: #f2f2f2;
        }
      }
      gr-button {
        --gr-button-arrow-color: var(--color-link);
        --gr-button-arrow-hover-color: var(--color-link-hover);
      }
      paper-item:not(:last-of-type) {
        border-bottom: 1px solid #ddd;
      }
      #trigger {
        padding: .3em 0;
      }
      .bottomContent {
        color: rgba(0,0,0,.54);
        font-size: .9em;
        line-height: 16px;
      }
      .bottomContent,
      .topContent {
        display: flex;
        line-height: 16px;
        justify-content: space-between;
        flex-direction: row;
        width: 100%;
      }
      gr-date-formatter {
        color: rgba(0,0,0,.54);
        margin-left: 2em;
      }
      gr-select {
        display: none;
      }
      /* Because the iron dropdown 'area' includes the trigger, and the entire
       width of the dropdown, we want to treat tapping the area above the
       dropdown content as if it is tapping whatever content is underneath it.
       The next two styles allow this to happen. */
      iron-dropdown {
        pointer-events: none;
      }
      paper-listbox {
        pointer-events: auto;
      }
      @media only screen and (max-width: 50em) {
        gr-select {
          display: inline;
        }
        gr-button,
        iron-dropdown {
          display: none;
        }
        select {
          max-width: 5.25em;
        }
      }
    </style>
    <gr-button
        down-arrow
        link
        id="trigger"
        class="dropdown-trigger"
        on-tap="_showDropdownTapHandler"
        slot="dropdown-trigger">
      <span>[[text]]</span>
    </gr-button>
    <iron-dropdown
        id="dropdown"
        vertical-align="top"
        allow-outside-scroll="true"
        on-tap="_handleDropdownTap">
      <paper-listbox
          class="dropdown-content"
          slot="dropdown-content"
          attr-for-selected="value"
          selected="{{value}}"
          on-tap="_handleDropdownTap">
        <template is="dom-repeat" items="[[items]]">
            <paper-item
                disabled="[[item.disabled]]"
                value="[[item.value]]">
              <div class="topContent">
                <div>[[item.text]]</div>
                <template is="dom-if" if="[[item.date]]">
                    <gr-date-formatter
                        date-str="[[item.date]]"></gr-date-formatter>
                </template>
              </div>
              <template is="dom-if" if="[[item.bottomText]]">
                <div class="bottomContent">
                  <div>[[item.bottomText]]</div>
                </div>
              </template>
          </paper-item>
          </template>
      </paper-listbox>
    </iron-dropdown>
    <gr-select bind-value="{{value}}">
      <select>
        <template is="dom-repeat" items="[[items]]">
          <option
              disabled$="[[item.disabled]]"
              value="[[item.value]]">
            [[_computeMobileText(item)]]
          </option>
        </template>
      </select>
    </gr-select>
  </template>
  <script src="gr-dropdown-list.js"></script>
</dom-module>
