<!--
@license
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: var(--deemphasized-text-color);
        display: inline-block;
        font-weight: var(--font-weight-bold);
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        @apply --label-style;
      }
      label.editable {
        color: var(--link-color);
        cursor: pointer;
      }
      #dropdown {
        box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
      }
      .inputContainer {
        background-color: var(--dialog-background-color);
        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);
        }
        --paper-input-container-focus-color: var(--link-color);
      }
    </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>
