<!--
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-input/iron-input.html">
<link rel="import" href="../../../behaviors/rest-client-behavior.html">

<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-js-api-interface/gr-js-api-interface.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-confirm-abandon-dialog/gr-confirm-abandon-dialog.html">
<link rel="import" href="../gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.html">
<link rel="import" href="../gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.html">
<link rel="import" href="../gr-confirm-revert-dialog/gr-confirm-revert-dialog.html">

<dom-module id="gr-change-actions">
  <template>
    <style>
      :host {
        display: inline-block;
        font-family: var(--font-family);
      }
      section {
        display: inline-block;
      }
      gr-button {
        margin-left: .5em;
      }
      gr-button:before {
        content: attr(data-label);
      }
      gr-button[loading]:before {
        content: attr(data-loading-label);
      }
      @media screen and (max-width: 50em) {
        :host,
        section,
        gr-button {
          display: block;
        }
        gr-button {
          margin-bottom: .5em;
          margin-left: 0;
        }
        .confirmDialog {
          width: 90vw;
        }
      }
    </style>
    <div>
      <section hidden$="[[!_actionCount(actions.*, _additionalActions.*)]]">
        <template is="dom-repeat" items="[[_changeActionValues]]" as="action">
          <gr-button title$="[[action.title]]"
              hidden$="[[_computeActionHidden(action.__key, _hiddenChangeActions.*)]]"
              primary$="[[action.__primary]]"
              hidden$="[[!action.enabled]]"
              data-action-key$="[[action.__key]]"
              data-action-type$="[[action.__type]]"
              data-label$="[[action.label]]"
              data-loading-label$="[[_computeLoadingLabel(action.__key)]]"
              on-tap="_handleActionTap"></gr-button>
        </template>
      </section>
      <section hidden$="[[!_actionCount(revisionActions.*, _additionalActions.*)]]">
        <template is="dom-repeat" items="[[_revisionActionValues]]" as="action">
          <gr-button title$="[[action.title]]"
              hidden$="[[_computeActionHidden(action.__key, _hiddenRevisionActions.*)]]"
              primary$="[[action.__primary]]"
              disabled$="[[!action.enabled]]"
              data-action-key$="[[action.__key]]"
              data-action-type$="[[action.__type]]"
              data-label$="[[action.label]]"
              data-loading-label$="[[_computeLoadingLabel(action.__key)]]"
              on-tap="_handleActionTap"></gr-button>
        </template>
      </section>
    </div>
    <gr-overlay id="overlay" with-backdrop>
      <gr-confirm-rebase-dialog id="confirmRebase"
          rebase-on-current="[[rebaseOnCurrent]]"
          class="confirmDialog"
          on-confirm="_handleRebaseConfirm"
          on-cancel="_handleConfirmDialogCancel"
          hidden></gr-confirm-rebase-dialog>
      <gr-confirm-cherrypick-dialog id="confirmCherrypick"
          class="confirmDialog"
          change-status="[[changeStatus]]"
          commit-message="[[commitMessage]]"
          commit-num="[[commitNum]]"
          on-confirm="_handleCherrypickConfirm"
          on-cancel="_handleConfirmDialogCancel"
          hidden></gr-confirm-cherrypick-dialog>
      <gr-confirm-revert-dialog id="confirmRevertDialog"
          class="confirmDialog"
          on-confirm="_handleRevertDialogConfirm"
          on-cancel="_handleConfirmDialogCancel"
          hidden></gr-confirm-revert-dialog>
      <gr-confirm-abandon-dialog id="confirmAbandonDialog"
          class="confirmDialog"
          on-confirm="_handleAbandonDialogConfirm"
          on-cancel="_handleConfirmDialogCancel"
          hidden></gr-confirm-abandon-dialog>
      <gr-confirm-dialog
          id="confirmDeleteDialog"
          class="confirmDialog"
          confirm-label="Delete"
          on-cancel="_handleConfirmDialogCancel"
          on-confirm="_handleDeleteConfirm">
        <div class="header">
          Delete Change
        </div>
        <div class="main">
          Do you really want to delete the change?
        </div>
      </gr-confirm-dialog>
    </gr-overlay>
    <gr-js-api-interface id="jsAPI"></gr-js-api-interface>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-change-actions.js"></script>
</dom-module>
