<!--
Copyright (C) 2016 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="../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html">
<link rel="import" href="../../../bower_components/iron-dropdown/iron-dropdown.html">
<link rel="import" href="../../../bower_components/paper-input/paper-input.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-editable-label">
  <template>
    <style include="shared-styles">
      :host {
        align-items: center;
        display: inline-flex;
      }
      :host([uppercase]) label {
        text-transform: uppercase;
      }
      input,
      label {
        width: 100%;
      }
      input {
        font: inherit;
      }
      label {
        color: #777;
        display: inline-block;
        font-family: var(--font-family-bold);
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        @apply --label-style;
      }
      label.editable {
        color: var(--color-link);
        cursor: pointer;
      }
      #dropdown {
        box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
      }
      .inputContainer {
        background-color: #fff;
        padding: .8em;
        @apply --input-style;
      }
      .buttons {
        display: flex;
        justify-content: flex-end;
        padding-top: 1.2em;
        width: 100%;
      }
      .buttons gr-button {
        margin-left: .5em;
      }
      paper-input {
        --paper-input-container: {
          padding: 0;
          min-width: 15em;
        }
        --paper-input-container-input: {
          font-size: var(--font-size-normal);
        }
      }
    </style>
      <label
          class$="[[_computeLabelClass(readOnly, value, placeholder)]]"
          title$="[[_computeLabel(value, placeholder)]]"
          on-tap="_showDropdown">[[_computeLabel(value, placeholder)]]</label>
      <iron-dropdown id="dropdown"
          vertical-align="auto"
          horizontal-align="auto"
          vertical-offset="[[_verticalOffset]]"
          allow-outside-scroll="true"
          on-iron-overlay-canceled="_cancel">
        <div class="dropdown-content" slot="dropdown-content">
          <div class="inputContainer">
            <paper-input
                id="input"
                label="[[labelText]]"
                maxlength="[[maxLength]]"
                value="{{_inputText}}"></paper-input>
            <div class="buttons">
              <gr-button link id="cancelBtn" on-tap="_cancel">cancel</gr-button>
              <gr-button link id="saveBtn" on-tap="_save">save</gr-button>
            </div>
          </div>
        </div>
    </iron-dropdown>
  </template>
  <script src="gr-editable-label.js"></script>
</dom-module>
