<!--
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/shared-styles.html">

<dom-module id="gr-label-score-row">
  <template>
    <style include="shared-styles">
      .labelContainer {
        margin-bottom: .5em;
      }
      .labelContainer:last-child {
        margin-bottom: 0;
      }
      .labelName {
        display: inline-block;
        margin-right: .5em;
        min-width: 7em;
        text-align: right;
        white-space: nowrap;
        width: 25%;
      }
      .labelMessage {
        color: #666;
      }
      .placeholder::before {
        content: ' ';
      }
      .selectedValueText {
        color: #666;
        font-style: italic;
        margin-bottom: .5em;
        margin-left: calc(25% + .5em);
      }
      .selectedValueText.hidden {
        display: none;
      }
      gr-button {
        min-width: 40px;
        --gr-button: {
          border: 1px solid #d1d2d3;
          border-radius: 12px;
          box-shadow: none;
          padding: .2em .85em;
        }
        --gr-button-background: #f5f5f5;
        --gr-button-color: black;
        --gr-button-hover-color: black;

      }
      iron-selector > gr-button.iron-selected {
        --gr-button-background:#ddd;
        --gr-button-color: black;
        --gr-button-hover-background-color: #ddd;
        --gr-button-hover-color: black;
      }
      .placeholder {
        display: inline-block;
        width: 40px;
      }
      @media only screen and (max-width: 25em) {
        .labelName {
          margin: 0;
          text-align: center;
          width: 100%;
        }
        .selectedValueText {
          display: none;
        }
      }
    </style>
    <div class="labelContainer">
      <span class="labelName">[[label.name]]</span>
      <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="[[_computePermittedLabelValues(permittedLabels, label.name)]]"
            as="value">
          <gr-button has-tooltip 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 class$="selectedValueText [[_computeHiddenClass(permittedLabels, label.name)]]">
        <span id="selectedValueLabel">[[_selectedValueText]]</span>
      </div>
    </div>
  </template>
  <script src="gr-label-score-row.js"></script>
</dom-module>
