<!--
Copyright (C) 2015 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-input/iron-input.html">
<link rel="import" href="../../shared/gr-account-chip/gr-account-chip.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-autocomplete/gr-autocomplete.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">

<dom-module id="gr-reviewer-list">
  <template>
    <style>
      :host {
        display: block;
      }
      :host([disabled]) {
        opacity: .8;
        pointer-events: none;
      }
      .autocompleteContainer {
        position: relative;
      }
      .inputContainer {
        display: flex;
        margin-top: .25em;
      }
      .inputContainer input {
        flex: 1;
        font: inherit;
      }
      gr-account-chip {
        margin-top: .3em;
      }
      .remove,
      .cancel {
        color: #999;
      }
      .remove {
        font-size: .9em;
      }
      .cancel {
        font-size: 2em;
        line-height: 1;
        padding: 0 .15em;
        text-decoration: none;
      }
      @media screen and (max-width: 50em), screen and (min-width: 75em) {
        gr-account-chip:first-of-type {
          margin-top: 0;
        }
      }
    </style>
    <template is="dom-repeat" items="[[_reviewers]]" as="reviewer">
      <gr-account-chip class="reviewer" account="[[reviewer]]"
          on-remove="_handleRemove"
          data-account-id$="[[reviewer._account_id]]"
          removable="[[_computeCanRemoveReviewer(reviewer, mutable)]]">
      </gr-account-chip>
    </template>
    <div class="controlsContainer" hidden$="[[!mutable]]">
      <div class="autocompleteContainer" hidden$="[[!_showInput]]">
        <div class="inputContainer">
          <gr-autocomplete
              id="input"
              threshold="3"
              clear-on-commit
              query="[[_query]]"
              disabled="[[disabled]]"
              on-commit="_sendAddRequest"
              on-cancel="_handleCancelTap"></gr-autocomplete>
          <gr-button
              link
              class="cancel"
              on-tap="_handleCancelTap">×</gr-button>
        </div>
      </div>
      <gr-button
          link
          id="addReviewer"
          class="addReviewer"
          on-tap="_handleAddTap"
          hidden$="[[_showInput]]">Add reviewer</gr-button>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-reviewer-list.js"></script>
</dom-module>
