<!--
@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-selector/iron-selector.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../../styles/gr-voting-styles.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-label-score-row">
  <template>
    <style include="gr-voting-styles"></style>
    <style include="shared-styles">
      .labelContainer {
        align-items: center;
        display: flex;
        margin-bottom: .5em;
      }
      .labelName {
        display: inline-block;
        flex: 0 0 auto;
        margin-right: .5em;
        min-width: 7em;
        text-align: left;
        width: 20%;
      }
      .labelMessage {
        color: var(--deemphasized-text-color);
      }
      .placeholder::before {
        content: ' ';
      }
      .selectedValueText {
        color: var(--deemphasized-text-color);
        font-style: italic;
        margin: 0 .5em 0 .5em;
      }
      .selectedValueText.hidden {
        display: none;
      }
      .buttonWrapper {
        flex: none;
      }
      gr-button {
        min-width: 40px;
        --gr-button: {
          background-color: var(--button-background-color, var(--table-header-background-color));
          color: var(--primary-text-color);
          padding: .2em .85em;
          @apply(--vote-chip-styles);
        }
      }
      gr-button.iron-selected.max {
        --button-background-color: var(--vote-color-approved);
      }
      gr-button.iron-selected.positive {
        --button-background-color: var(--vote-color-recommended);
      }
      gr-button.iron-selected.min {
        --button-background-color: var(--vote-color-rejected);
      }
      gr-button.iron-selected.negative {
        --button-background-color: var(--vote-color-disliked);
      }
      gr-button.iron-selected.neutral {
        --button-background-color: var(--vote-color-neutral);
      }
      .placeholder {
        display: inline-block;
        width: 40px;
      }
      @media only screen and (max-width: 50em) {
        .selectedValueText {
          display: none;
        }
      }
      @media only screen and (max-width: 25em) {
        .labelName {
          margin: 0;
          text-align: center;
          width: 100%;
        }
        .labelContainer {
          display: block;
        }
      }
    </style>
    <div class="labelContainer">
      <span class="labelName">[[label.name]]</span>
      <div class="buttonWrapper">
        <template is="dom-repeat"
            items="[[_computeBlankItems(permittedLabels, label.name, 'start')]]"
            as="value">
          <span class="placeholder" data-label$="[[label.name]]"></span>
        </template>
        <iron-selector
            attr-for-selected="value"
            selected="[[_computeLabelValue(labels, permittedLabels, label)]]"
            hidden$="[[!_computeAnyPermittedLabelValues(permittedLabels, label.name)]]"
            on-selected-item-changed="_setSelectedValueText">
          <template is="dom-repeat"
              items="[[_items]]"
              as="value">
            <gr-button
                class$="[[_computeButtonClass(value, index, _items.length)]]"
                has-tooltip
                name="[[label.name]]"
                value$="[[value]]"
                title$="[[_computeLabelValueTitle(labels, label.name, value)]]">
              [[value]]</gr-button>
          </template>
        </iron-selector>
        <template is="dom-repeat"
            items="[[_computeBlankItems(permittedLabels, label.name, 'end')]]"
            as="value">
          <span class="placeholder" data-label$="[[label.name]]"></span>
        </template>
        <span class="labelMessage"
            hidden$="[[_computeAnyPermittedLabelValues(permittedLabels, label.name)]]">
          You don't have permission to edit this label.
        </span>
      </div>
      <div class$="selectedValueText [[_computeHiddenClass(permittedLabels, label.name)]]">
        <span id="selectedValueLabel">[[_selectedValueText]]</span>
      </div>
    </div>
  </template>
  <script src="gr-label-score-row.js"></script>
</dom-module>
