<!--
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/iron-autogrow-textarea/iron-autogrow-textarea.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../shared/gr-autocomplete/gr-autocomplete.html">
<link rel="import" href="../../shared/gr-confirm-dialog/gr-confirm-dialog.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">

<dom-module id="gr-confirm-move-dialog">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
        width: 30em;
      }
      :host([disabled]) {
        opacity: .5;
        pointer-events: none;
      }
      label {
        cursor: pointer;
      }
      iron-autogrow-textarea {
        padding: 0;
      }
      .main {
        display: flex;
        flex-direction: column;
        width: 100%;
      }
      .main label,
      .main input[type="text"] {
        display: block;
        font: inherit;
        width: 100%;
      }
      .main .message {
        border: groove;
        width: 100%;
      }
      .warning {
        color: red;
      }
    </style>
    <gr-confirm-dialog
        confirm-label="Move Change"
        on-confirm="_handleConfirmTap"
        on-cancel="_handleCancelTap">
      <div class="header" slot="header">Move Change to Another Branch</div>
      <div class="main" slot="main">
        <p class="warning">
          Warning: moving a change will not change its parents.
        </p>
        <label for="branchInput">
          Move change to branch
        </label>
        <gr-autocomplete
            id="branchInput"
            text="{{branch}}"
            query="[[_query]]"
            placeholder="Destination branch">
        </gr-autocomplete>
        <label for="messageInput">
          Move Change Message
        </label>
        <iron-autogrow-textarea
            id="messageInput"
            class="message"
            autocomplete="on"
            rows="4"
            max-rows="15"
            bind-value="{{message}}"></iron-autogrow-textarea>
      </div>
    </gr-confirm-dialog>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-confirm-move-dialog.js"></script>
</dom-module>
