<!--
@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="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html">
<link rel="import" href="../../../behaviors/gr-path-list-behavior/gr-path-list-behavior.html">
<link rel="import" href="/bower_components/iron-input/iron-input.html">
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
<link rel="import" href="../../shared/gr-autocomplete/gr-autocomplete.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-dialog/gr-dialog.html">
<link rel="import" href="../../shared/gr-dropdown/gr-dropdown.html">
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-edit-constants.html">

<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-edit-controls">
  <template>
    <style include="shared-styles">
      :host {
        align-items: center;
        display: flex;
        justify-content: flex-end;
      }
      .invisible {
        display: none;
      }
      gr-button {
        margin-left: var(--spacing-l);
        text-decoration: none;
      }
      gr-dialog {
        width: 50em;
      }
      gr-dialog .main {
        width: 100%;
      }
      gr-dialog .main > iron-input{
        width: 100%;
      }
      gr-autocomplete {
        --gr-autocomplete: {
          border: 1px solid var(--border-color);
          border-radius: 2px;
          height: 2em;
          padding: 0 var(--spacing-xs);
        }
      }
      input {
        border: 1px solid var(--border-color);
        border-radius: 2px;
        height: 2em;
        margin: var(--spacing-m) 0;
        padding: 0 var(--spacing-xs);
        width: 100%;
      }
      @media screen and (max-width: 50em) {
        gr-dialog {
          width: 100vw;
        }
      }
    </style>
    <template is="dom-repeat" items="[[_actions]]" as="action">
      <gr-button
          id$="[[action.id]]"
          class$="[[_computeIsInvisible(action.id, hiddenActions)]]"
          link
          on-click="_handleTap">[[action.label]]</gr-button>
    </template>
    <gr-overlay id="overlay" with-backdrop>
      <gr-dialog
          id="openDialog"
          class="invisible dialog"
          disabled$="[[!_isValidPath(_path)]]"
          confirm-label="Open"
          confirm-on-enter
          on-confirm="_handleOpenConfirm"
          on-cancel="_handleDialogCancel">
        <div class="header" slot="header">
          Open an existing or new file
        </div>
        <div class="main" slot="main">
          <gr-autocomplete
              placeholder="Enter an existing or new full file path."
              query="[[_query]]"
              text="{{_path}}"></gr-autocomplete>
        </div>
      </gr-dialog>
      <gr-dialog
          id="deleteDialog"
          class="invisible dialog"
          disabled$="[[!_isValidPath(_path)]]"
          confirm-label="Delete"
          confirm-on-enter
          on-confirm="_handleDeleteConfirm"
          on-cancel="_handleDialogCancel">
        <div class="header" slot="header">Delete a file from the repo</div>
        <div class="main" slot="main">
          <gr-autocomplete
              placeholder="Enter an existing full file path."
              query="[[_query]]"
              text="{{_path}}"></gr-autocomplete>
        </div>
      </gr-dialog>
      <gr-dialog
          id="renameDialog"
          class="invisible dialog"
          disabled$="[[!_computeRenameDisabled(_path, _newPath)]]"
          confirm-label="Rename"
          confirm-on-enter
          on-confirm="_handleRenameConfirm"
          on-cancel="_handleDialogCancel">
        <div class="header" slot="header">Rename a file in the repo</div>
        <div class="main" slot="main">
          <gr-autocomplete
              placeholder="Enter an existing full file path."
              query="[[_query]]"
              text="{{_path}}"></gr-autocomplete>
          <iron-input
              class="newPathIronInput"
              bind-value="{{_newPath}}"
              placeholder="Enter the new path.">
            <input
                class="newPathInput"
                is="iron-input"
                bind-value="{{_newPath}}"
                placeholder="Enter the new path.">
          </iron-input>
        </div>
      </gr-dialog>
      <gr-dialog
          id="restoreDialog"
          class="invisible dialog"
          confirm-label="Restore"
          confirm-on-enter
          on-confirm="_handleRestoreConfirm"
          on-cancel="_handleDialogCancel">
        <div class="header" slot="header">Restore this file?</div>
        <div class="main" slot="main">
          <iron-input
              disabled
              bind-value="{{_path}}">
            <input
                is="iron-input"
                disabled
                bind-value="{{_path}}">
          </iron-input>
        </div>
      </gr-dialog>
    </gr-overlay>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-edit-controls.js"></script>
</dom-module>
