| <!-- |
| @license |
| 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; |
| } |
| #triggerText { |
| -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: var(--dropdown-background-color); |
| box-shadow: 0 1px 5px rgba(0, 0, 0, .3); |
| max-height: 70vh; |
| margin-top: var(--spacing-xxl); |
| min-width: 266px; |
| @apply --dropdown-content-style; |
| } |
| paper-listbox { |
| --paper-listbox: { |
| padding: 0; |
| } |
| } |
| paper-item { |
| cursor: pointer; |
| flex-direction: column; |
| font-size: inherit; |
| --paper-item: { |
| min-height: 0; |
| padding: 10px 16px; |
| } |
| --paper-item-focused-before: { |
| background-color: var(--selection-background-color); |
| } |
| --paper-item-focused: { |
| background-color: var(--selection-background-color); |
| } |
| } |
| paper-item:hover { |
| background-color: var(--hover-background-color); |
| } |
| paper-item:not(:last-of-type) { |
| border-bottom: 1px solid var(--border-color); |
| } |
| .bottomContent { |
| color: var(--deemphasized-text-color); |
| } |
| .bottomContent, |
| .topContent { |
| display: flex; |
| justify-content: space-between; |
| flex-direction: row; |
| width: 100%; |
| } |
| gr-button { |
| --gr-button: { |
| @apply --trigger-style; |
| } |
| } |
| gr-date-formatter { |
| color: var(--deemphasized-text-color); |
| margin-left: var(--spacing-xxl); |
| white-space: nowrap; |
| } |
| 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 { |
| max-width: none; |
| pointer-events: none; |
| } |
| paper-listbox { |
| pointer-events: auto; |
| } |
| @media only screen and (max-width: 50em) { |
| gr-select { |
| display: inline; |
| @apply --gr-select-style; |
| } |
| gr-button, |
| iron-dropdown { |
| display: none; |
| } |
| select { |
| @apply --native-select-style; |
| } |
| } |
| </style> |
| <gr-button |
| disabled="[[disabled]]" |
| down-arrow |
| link |
| id="trigger" |
| class="dropdown-trigger" |
| on-click="_showDropdownTapHandler" |
| slot="dropdown-trigger"> |
| <span id="triggerText">[[text]]</span> |
| </gr-button> |
| <iron-dropdown |
| id="dropdown" |
| vertical-align="top" |
| allow-outside-scroll="true" |
| on-click="_handleDropdownClick"> |
| <paper-listbox |
| class="dropdown-content" |
| slot="dropdown-content" |
| attr-for-selected="value" |
| selected="{{value}}" |
| on-tap="_handleDropdownTap"> |
| <template is="dom-repeat" |
| items="[[items]]" |
| initial-count="[[initialCount]]"> |
| <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> |