<!--
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="../../../behaviors/gr-list-view-behavior/gr-list-view-behavior.html">
<link rel="import" href="../../../behaviors/gr-url-encoding-behavior.html">
<link rel="import" href="../../../bower_components/iron-input/iron-input.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../styles/gr-table-styles.html">
<link rel="import" href="../../../styles/gr-form-styles.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-list-view/gr-list-view.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-create-pointer-dialog/gr-create-pointer-dialog.html">
<link rel="import" href="../gr-confirm-delete-item-dialog/gr-confirm-delete-item-dialog.html">

<dom-module id="gr-project-detail-list">
  <template>
    <style include="gr-form-styles"></style>
    <style include="shared-styles">
      .editing .editItem {
        display: inherit;
      }
      .editItem,
      .editing .editBtn,
      .canEdit .revisionNoEditing,
      .editing .revisionWithEditing,
      .revisionEdit {
        display: none;
      }
      .revisionEdit gr-button {
        margin-left: .6em;
      }
      .editBtn {
        margin-left: 1em;
      }
      .canEdit .revisionEdit{
        align-items: center;
        display: flex;
        line-height: 1em;
      }
      .deleteButton:not(.show) {
        display: none;
      }
    </style>
    <style include="gr-table-styles"></style>
    <gr-list-view
        create-new="[[_loggedIn]]"
        filter="[[_filter]]"
        items-per-page="[[_itemsPerPage]]"
        items="[[_items]]"
        loading="[[_loading]]"
        offset="[[_offset]]"
        on-create-clicked="_handleCreateClicked"
        path="[[_getPath(_project, detailType)]]">
      <table id="list" class="genericList gr-form-styles">
        <tr class="headerRow">
          <th class="name topHeader">Name</th>
          <th class="description topHeader">Revision</th>
          <th class="repositoryBrowser topHeader">
            Repository Browser</th>
          <th class="delete topHeader"></th>
        </tr>
        <tr id="loading" class$="loadingMsg [[computeLoadingClass(_loading)]]">
          <td>Loading...</td>
        </tr>
        <tbody class$="[[computeLoadingClass(_loading)]]">
          <template is="dom-repeat" items="[[_shownItems]]">
            <tr class="table">
              <td class="name">[[_stripRefs(item.ref, detailType)]]</td>
              <td class$="description [[_computeCanEditClass(item.ref, detailType, _isOwner)]]">
                <span class="revisionNoEditing">
                  [[item.revision]]
                </span>
                <span class$="revisionEdit [[_computeEditingClass(_isEditing)]]">
                  <span class="revisionWithEditing">
                    [[item.revision]]
                  </span>
                  <gr-button
                      link
                      on-tap="_handleEditRevision"
                      class="editBtn">
                    edit
                  </gr-button>
                  <input
                      is=iron-input
                      bind-value="{{_revisedRef}}"
                      class="editItem">
                  <gr-button
                      link
                      on-tap="_handleCancelRevision"
                      class="cancelBtn editItem">
                    Cancel
                  </gr-button>
                  <gr-button
                      link
                      on-tap="_handleSaveRevision"
                      class="saveBtn editItem"
                      disabled="[[!_revisedRef]]">
                    Save
                  </gr-button>
                </span>
              </td>
              <td class="repositoryBrowser">
                <template is="dom-repeat"
                    items="[[_computeWeblink(item)]]" as="link">
                  <a href$="[[link.url]]"
                      class="webLink"
                      rel="noopener"
                      target="_blank">
                    ([[link.name]])
                  </a>
                </template>
              </td>
              <td class="delete">
                <gr-button
                    link
                    class$="deleteButton [[_computeHideDeleteClass(_isOwner, item.can_delete)]]"
                    on-tap="_handleDeleteItem">
                  Delete
                </gr-button>
              </td>
            </tr>
          </template>
        </tbody>
      </table>
      <gr-overlay id="overlay" with-backdrop>
        <gr-confirm-delete-item-dialog
            class="confirmDialog"
            on-confirm="_handleDeleteItemConfirm"
            on-cancel="_handleConfirmDialogCancel"
            item="[[_refName]]"
            item-type="[[detailType]]"></gr-confirm-delete-item-dialog>
      </gr-overlay>
    </gr-list-view>
    <gr-overlay id="createOverlay" with-backdrop>
      <gr-confirm-dialog
          id="createDialog"
          disabled="[[!_hasNewItemName]]"
          confirm-label="Create"
          on-confirm="_handleCreateItem"
          on-cancel="_handleCloseCreate">
        <div class="header">
          Create [[_computeItemName(detailType)]]
        </div>
        <div class="main">
          <gr-create-pointer-dialog
              id="createNewModal"
              detail-type="[[_computeItemName(detailType)]]"
              has-new-item-name="{{_hasNewItemName}}"
              item-detail="[[detailType]]"
              project-name="[[_project]]"></gr-create-pointer-dialog>
        </div>
      </gr-confirm-dialog>
    </gr-overlay>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-project-detail-list.js"></script>
</dom-module>
