<!--
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="gr-confirm-dialog.html">

<dom-module id="gr-confirm-rebase-dialog">
  <template>
    <style>
      :host {
        display: block;
        width: 30em;
      }
      :host([disabled]) {
        opacity: .5;
        pointer-events: none;
      }
      label {
        cursor: pointer;
      }
      .parentRevisionContainer label,
      .parentRevisionContainer input[type="text"] {
        display: block;
        font: inherit;
        width: 100%;
      }
      .parentRevisionContainer label {
        margin-bottom: .2em;
      }
      .clearParentContainer {
        margin: .5em 0;
      }
    </style>
    <gr-confirm-dialog
        confirm-label="Rebase"
        on-confirm="_handleConfirmTap"
        on-cancel="_handleCancelTap">
      <div class="header">Confirm rebase</div>
      <div class="main">
        <div class="parentRevisionContainer">
          <label for="parentInput">
            Parent revision (optional)
          </label>
          <input is="iron-input"
              type="text"
              id="parentInput"
              bind-value="{{base}}"
              placeholder="Change number">
        </div>
        <div class="clearParentContainer">
          <input id="clearParent"
              type="checkbox"
              on-tap="_handleClearParentTap">
          <label for="clearParent">
            Rebase on top of current branch (clear parent revision).
          </label>
        </div>
      </div>
    </gr-confirm-dialog>
  </template>
  <script>
  (function() {
    'use strict';

    Polymer({
      is: 'gr-confirm-rebase-dialog',

      /**
       * Fired when the confirm button is pressed.
       *
       * @event confirm
       */

      /**
       * Fired when the cancel button is pressed.
       *
       * @event cancel
       */

      properties: {
        base: String,
        clearParent: Boolean,
      },

      _handleConfirmTap: function(e) {
        e.preventDefault();
        this.fire('confirm', null, {bubbles: false});
      },

      _handleCancelTap: function(e) {
        e.preventDefault();
        this.fire('cancel', null, {bubbles: false});
      },

      _handleClearParentTap: function(e) {
        var clear = Polymer.dom(e).rootTarget.checked;
        if (clear) {
          this.base = '';
        }
        this.$.parentInput.disabled = clear;
        this.clearParent = clear;
      },
    });
  })();
  </script>
</dom-module>
