<!--
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="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html">
<link rel="import" href="../../../behaviors/rest-client-behavior/rest-client-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.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-button/gr-button.html">
<link rel="import" href="../../shared/gr-dropdown/gr-dropdown.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-move-dialog/gr-confirm-move-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">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-change-actions">
  <template>
    <style include="shared-styles">
      :host {
        display: flex;
        font-family: var(--font-family);
      }
      #actionLoadingMessage,
      #mainContent,
      section {
        display: flex;
      }
      #actionLoadingMessage,
      gr-button,
      gr-dropdown {
        /* px because don't have the same font size */
        margin-left: 12px;
      }
      #actionLoadingMessage {
        align-items: center;
        color: #777;
      }
      @media screen and (max-width: 50em) {
        #mainContent,
        section,
        gr-button,
        gr-dropdown {
          display: block;
          flex: 1;
        }
        gr-button,
        gr-dropdown {
          /* px because don't have the same font size */
          margin: 0 0 6px 0;
        }
        .confirmDialog {
          width: 90vw;
        }
        #actionLoadingMessage {
          display: block;
          margin: .5em;
          text-align: center;
        }
        #mainContent.mobileOverlayOpened {
          display: none;
        }
      }
    </style>
    <div id="mainContent">
      <span
          id="actionLoadingMessage"
          hidden$="[[!_actionLoadingMessage]]">
        [[_actionLoadingMessage]]</span>
        <section id="primaryActions"
            hidden$="[[_shouldHideActions(_topLevelActions.*, _loading)]]">
          <template
              is="dom-repeat"
              items="[[_topLevelPrimaryActions]]"
              as="action">
            <gr-button title$="[[action.title]]"
                primary$="[[action.__primary]]"
                data-action-key$="[[action.__key]]"
                data-action-type$="[[action.__type]]"
                data-label$="[[action.label]]"
                disabled$="[[_calculateDisabled(action, _hasKnownChainState)]]"
                on-tap="_handleActionTap">[[action.label]]</gr-button>
          </template>
        </section>
        <gr-button
            class="reply"
            secondary
            disabled="[[replyDisabled]]"
            on-tap="_handleReplyTap">[[replyButtonLabel]]</gr-button>
        <section id="secondaryActions"
            hidden$="[[_shouldHideActions(_topLevelActions.*, _loading)]]">
          <template
              is="dom-repeat"
              items="[[_topLevelSecondaryActions]]"
              as="action">
            <gr-button title$="[[action.title]]"
                primary$="[[action.__primary]]"
                data-action-key$="[[action.__key]]"
                data-action-type$="[[action.__type]]"
                data-label$="[[action.label]]"
                disabled$="[[_calculateDisabled(action, _hasKnownChainState)]]"
                on-tap="_handleActionTap">[[action.label]]</gr-button>
          </template>
        </section>
      <gr-button hidden$="[[!_loading]]" disabled>Loading actions...</gr-button>
      <gr-dropdown
          id="moreActions"
          tabindex="0"
          down-arrow
          vertical-offset="32"
          horizontal-align="right"
          on-tap-item="_handleOveflowItemTap"
          hidden$="[[_shouldHideActions(_menuActions.*, _loading)]]"
          disabled-ids="[[_disabledMenuActions]]"
          items="[[_menuActions]]">More</gr-dropdown>
    </div>
    <gr-overlay id="overlay" with-backdrop>
      <gr-confirm-rebase-dialog id="confirmRebase"
          class="confirmDialog"
          on-confirm="_handleRebaseConfirm"
          on-cancel="_handleConfirmDialogCancel"
          branch="[[change.branch]]"
          has-parent="[[hasParent]]"
          rebase-on-current="[[revisionActions.rebase.rebaseOnCurrent]]"
          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"
          project="[[change.project]]"
          hidden></gr-confirm-cherrypick-dialog>
      <gr-confirm-move-dialog id="confirmMove"
          class="confirmDialog"
          on-confirm="_handleMoveConfirm"
          on-cancel="_handleConfirmDialogCancel"
          project="[[change.project]]"
          hidden></gr-confirm-move-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" slot="header">
          Delete Change
        </div>
        <div class="main" slot="main">
          Do you really want to delete the change?
        </div>
      </gr-confirm-dialog>
      <gr-confirm-dialog
          id="confirmDeleteEditDialog"
          class="confirmDialog"
          confirm-label="Delete"
          on-cancel="_handleConfirmDialogCancel"
          on-confirm="_handleDeleteEditConfirm">
        <div class="header" slot="header">
          Delete Change Edit
        </div>
        <div class="main" slot="main">
          Do you really want to delete the edit?
        </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>
