<!--
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;
      }
      gr-button {
        margin-left: .3em;
      }
      .editBtn {
        margin-left: 1em;
      }
      .canEdit .revisionEdit{
        align-items: baseline;
        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
                      on-tap="_handleEditRevision"
                      class="editBtn">
                    edit
                  </gr-button>
                  <input
                      is=iron-input
                      bind-value="{{_revisedRef}}"
                      class="editItem">
                  <gr-button
                      on-tap="_handleSaveRevision"
                      class="saveBtn editItem"
                      disabled="[[!_revisedRef]]">
                    Save
                  </gr-button>
                  <gr-button
                      on-tap="_handleCancelRevision"
                      class="cancelBtn editItem">
                    Cancel
                  </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
                    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>
