<!--
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-account-link/gr-account-link.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.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">
      td.revision {
        width: 27em;
      }
      td.message,
      td.tagger {
        max-width: 15em;
      }
      .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;
      }
      .hideItem {
        display: none;
      }
      .tagger.hide {
        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="revision topHeader">Revision</th>
          <th class$="message topHeader [[_hideIfBranch(detailType)]]">
            Message</th>
          <th class$="tagger topHeader [[_hideIfBranch(detailType)]]">
            Tagger</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$="revision [[_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$="message [[_hideIfBranch(detailType)]]">
                [[item.message]]
              </td>
              <td class$="tagger [[_hideIfBranch(detailType)]]">
                <div class$="tagger [[_computeHideTagger(item.tagger)]]">
                  <gr-account-link
                      account="[[item.tagger]]">
                  </gr-account-link>
                  (<gr-date-formatter
                      has-tooltip
                      date-str="[[item.tagger.date]]">
                  </gr-date-formatter>)
                </div>
              </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" slot="header">
          Create [[_computeItemName(detailType)]]
        </div>
        <div class="main" slot="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>
