<!--
@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="/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html">
<link rel="import" href="../../../behaviors/fire-behavior/fire-behavior.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../gr-storage/gr-storage.html">

<dom-module id="gr-editable-content">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
      }
      :host([disabled]) iron-autogrow-textarea {
        opacity: .5;
      }
      .viewer {
        background-color: var(--view-background-color);
        border: 1px solid var(--border-color);
        border-radius: var(--border-radius);
        padding: var(--spacing-m);
      }
      .editor iron-autogrow-textarea {
        background-color: var(--view-background-color);
        width: 100%;

        --iron-autogrow-textarea: {
          padding: var(--spacing-m);
          box-sizing: border-box;
          overflow-y: hidden;
          white-space: pre;
        };
      }
      .editButtons {
        display: flex;
        justify-content: space-between;
      }
    </style>
    <div class="viewer" hidden$="[[editing]]">
      <slot></slot>
    </div>
    <div class="editor" hidden$="[[!editing]]">
      <iron-autogrow-textarea
          autocomplete="on"
          bind-value="{{_newContent}}"
          disabled="[[disabled]]"></iron-autogrow-textarea>
      <div class="editButtons">
        <gr-button primary
            on-click="_handleSave"
            disabled="[[_saveDisabled]]">Save</gr-button>
        <gr-button
            on-click="_handleCancel"
            disabled="[[disabled]]">Cancel</gr-button>
      </div>
    </div>
    <gr-storage id="storage"></gr-storage>
  </template>
  <script src="gr-editable-content.js"></script>
</dom-module>
