<!--
Copyright (C) 2015 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/base-url-behavior/base-url-behavior.html">
<link rel="import" href="../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html">
<link rel="import" href="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html">
<link rel="import" href="../../../behaviors/gr-url-encoding-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
<link rel="import" href="../../diff/gr-diff/gr-diff.html">
<link rel="import" href="../../diff/gr-diff-cursor/gr-diff-cursor.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-cursor-manager/gr-cursor-manager.html">
<link rel="import" href="../../shared/gr-linked-text/gr-linked-text.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../shared/gr-select/gr-select.html">
<link rel="import" href="../../shared/gr-tooltip-content/gr-tooltip-content.html">

<dom-module id="gr-file-list">
  <template>
    <style>
      :host {
        display: block;
      }
      .row {
        display: flex;
        padding: .1em .25em;
      }
      header {
        display: flex;
        font-weight: bold;
        justify-content: space-between;
        margin-bottom: .5em;
      }
      .rightControls {
        display: flex;
        flex-wrap: wrap;
        font-weight: normal;
        justify-content: flex-end;
      }
      .separator {
        margin: 0 .25em;
      }
      .reviewed,
      .status {
        align-items: center;
        display: inline-flex;
      }
      .reviewed,
      .status {
        display: inline-block;
        text-align: center;
        width: 1.5em;
      }
      .file-row:hover {
        background-color: #f5fafd;
      }
      .row.selected {
        background-color: #ebf5fb;
      }
      .path {
        cursor: pointer;
        flex: 1;
        padding-left: .35em;
        text-decoration: none;
        white-space: nowrap;
      }
      .path:hover :first-child {
        text-decoration: underline;
      }
      .path,
      .path div {
        overflow: hidden;
        text-overflow: ellipsis;
      }
      .oldPath {
        color: #999;
      }
      .comments,
      .stats {
        text-align: right;
      }
      .comments {
        min-width: 10em;
      }
      .stats {
        min-width: 7em;
      }
      .invisible {
        visibility: hidden;
      }
      .row:not(.header) .stats,
      .total-stats {
        font-family: var(--monospace-font-family);
      }
      .added {
        color: #388E3C;
      }
      .removed {
        color: #D32F2F;
      }
      .drafts {
        color: #C62828;
        font-weight: bold;
      }
      .show-hide {
        margin-left: .4em;
      }
      .fileListButton {
        margin: .5em;
      }
      .totalChanges {
        justify-content: flex-end;
        padding-right: 2.6em;
        text-align: right;
      }
      .expandInline {
        padding-right: .25em;
      }
      .warning {
        color: #666;
      }
      input.show-hide {
        display: none;
      }
      label.show-hide {
        color: #00f;
        cursor: pointer;
        display: block;
        font-size: .8em;
        min-width: 2em;
        margin-top: .1em;
      }
      gr-diff {
        box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
        display: block;
        margin: .25em 0 1em;
      }
      .patchSetSelect {
        max-width: 8em;
      }
      .truncatedFileName {
        display: none;
      }
      .expanded .fullFileName {
        white-space: normal;
        word-wrap: break-word;
      }
      .mobile {
        display: none;
      }
      @media screen and (max-width: 50em) {
        .desktop {
          display: none;
        }
        .mobile {
          display: block;
        }
        .row.selected {
          background-color: transparent;
        }
        .stats {
          display: none;
        }
        .reviewed,
        .status {
          justify-content: flex-start;
        }
        .comments {
          min-width: initial;
        }
        .expanded .fullFileName,
        .truncatedFileName {
          display: block;
        }
        .expanded .truncatedFileName,
        .fullFileName {
          display: none;
        }
      }
    </style>
    <header>
      <div>Files</div>
      <div class="rightControls">
        <template is="dom-if"
            if="[[_fileListActionsVisible(_shownFiles.*, _maxFilesForBulkActions)]]">
          <gr-button link on-tap="_expandAllDiffs">Show diffs</gr-button>
          <span class="separator">/</span>
          <gr-button link on-tap="_collapseAllDiffs">Hide diffs</gr-button>
        </template>
        <template is="dom-if"
            if="[[!_fileListActionsVisible(_shownFiles.*, _maxFilesForBulkActions)]]">
          <div class="warning">
            Bulk actions disabled because there are too many files.
          </div>
        </template>
        <span class="separator">/</span>
        <select
            id="modeSelect"
            is="gr-select"
            bind-value="{{diffViewMode}}">
          <option value="SIDE_BY_SIDE">Side By Side</option>
          <option value="UNIFIED_DIFF">Unified</option>
        </select>
        <span class="separator">/</span>
        <label>
          Diff against
          <select id="patchChange" bind-value="{{_diffAgainst}}" is="gr-select"
              class="patchSetSelect" on-change="_handlePatchChange">
            <option value="PARENT">Base</option>
            <template
                is="dom-repeat"
                items="[[_computePatchSets(revisions.*, patchRange.*)]]"
                as="patchNum">
              <option value$="[[patchNum.num]]"
                  disabled$="[[_computePatchSetDisabled(patchNum.num, patchRange.patchNum)]]">
                [[patchNum.num]]
                [[patchNum.desc]]
              </option>
            </template>
          </select>
        </label>
      </div>
    </header>
    <div on-tap="_handleFileListTap">
      <template is="dom-repeat"
          items="[[_shownFiles]]"
          id="files"
          as="file"
          initial-count="[[_fileListIncrement]]"
          target-framerate="1">
        <div class="file-row row" data-path$="[[file.__path]]">
          <div class="reviewed" hidden$="[[!_loggedIn]]" hidden>
            <input type="checkbox" checked="[[file.isReviewed]]"
                class="reviewed" aria-label="Reviewed checkbox">
          </div>
          <div class$="[[_computeClass('status', file.__path)]]"
              tabindex="0"
              aria-label$="[[_computeFileStatusLabel(file.status)]]">
            [[_computeFileStatus(file.status)]]
          </div>
          <span
              data-url="[[_computeDiffURL(changeNum, patchRange, file.__path)]]"
              class$="[[_computePathClass(file.__path, _expandedFilePaths.*)]]">
            <a href$="[[_computeDiffURL(changeNum, patchRange, file.__path)]]">
              <span title$="[[_computeFileDisplayName(file.__path)]]"
                  class="fullFileName">
                [[_computeFileDisplayName(file.__path)]]
              </span>
              <span title$="[[_computeFileDisplayName(file.__path)]]"
                  class="truncatedFileName">
                [[_computeTruncatedFileDisplayName(file.__path)]]
              </span>
            </a>
            <div class="oldPath" hidden$="[[!file.old_path]]" hidden
                title$="[[file.old_path]]">
              [[file.old_path]]
            </div>
          </span>
          <div class="comments desktop">
            <span class="drafts">
              [[_computeDraftsString(drafts, patchRange.patchNum, file.__path)]]
            </span>
            [[_computeCommentsString(comments, patchRange.patchNum, file.__path)]]
            [[_computeUnresolvedString(comments, drafts, patchRange.patchNum, file.__path)]]
          </div>
          <div class="comments mobile">
            <span class="drafts">
              [[_computeDraftsStringMobile(drafts, patchRange.patchNum,
                  file.__path)]]
            </span>
            [[_computeCommentsStringMobile(comments, patchRange.patchNum,
                file.__path)]]
          </div>
          <div class$="[[_computeClass('stats', file.__path)]]">
            <span
                class="added"
                tabindex="0"
                aria-label$="[[file.lines_inserted]] lines added"
                hidden$=[[file.binary]]>
              +[[file.lines_inserted]]
            </span>
            <span
                class="removed"
                tabindex="0"
                aria-label$="[[file.lines_deleted]] lines removed"
                hidden$=[[file.binary]]>
              -[[file.lines_deleted]]
            </span>
            <span class$="[[_computeBinaryClass(file.size_delta)]]"
                hidden$=[[!file.binary]]>
              [[_formatBytes(file.size_delta)]]
              [[_formatPercentage(file.size, file.size_delta)]]
            </span>
          </div>
          <div class="show-hide" hidden$="[[_userPrefs.expand_inline_diffs]]">
            <label class="show-hide" data-path$="[[file.__path]]"
                data-expand=true>
              <input type="checkbox" class="show-hide"
                  checked$="[[_isFileExpanded(file.__path, _expandedFilePaths.*)]]"
                  data-path$="[[file.__path]]" data-expand=true>
              [[_computeShowHideText(file.__path, _expandedFilePaths.*)]]
            </label>
          </div>
        </div>
        <template is="dom-if"
            if="[[_isFileExpanded(file.__path, _expandedFilePaths.*)]]">
          <gr-diff
              no-auto-render
              inline-index=[[index]]
              hidden="[[!_isFileExpanded(file.__path, _expandedFilePaths.*)]]"
              project="[[change.project]]"
              commit="[[change.current_revision]]"
              change-num="[[changeNum]]"
              patch-range="[[patchRange]]"
              path="[[file.__path]]"
              prefs="[[_diffPrefs]]"
              project-config="[[projectConfig]]"
              on-line-selected="_onLineSelected"
              view-mode="[[_getDiffViewMode(diffViewMode, _userPrefs)]]"></gr-diff>
        </template>
      </template>
    </div>
    <div class$="row totalChanges [[_computeExpandInlineClass(_userPrefs)]]">
      <div class="total-stats" hidden$="[[_hideChangeTotals]]">
        <span
            class="added"
            tabindex="0"
            aria-label$="[[_patchChange.inserted]] lines added">
          +[[_patchChange.inserted]]
        </span>
        <span
            class="removed"
            tabindex="0"
            aria-label$="[[_patchChange.deleted]] lines removed">
          -[[_patchChange.deleted]]
        </span>
      </div>
    </div>
    <div class$="row totalChanges [[_computeExpandInlineClass(_userPrefs)]]">
      <div class="total-stats" hidden$="[[_hideBinaryChangeTotals]]">
        <span class="added" aria-label="Total lines added">
          [[_formatBytes(_patchChange.size_delta_inserted)]]
          [[_formatPercentage(_patchChange.total_size,
              _patchChange.size_delta_inserted)]]
        </span>
        <span class="removed" aria-label="Total lines removed">
          [[_formatBytes(_patchChange.size_delta_deleted)]]
          [[_formatPercentage(_patchChange.total_size,
              _patchChange.size_delta_deleted)]]
        </span>
      </div>
    </div>
    <gr-button
        class="fileListButton"
        id="incrementButton"
        hidden$="[[_computeFileListButtonHidden(numFilesShown, _files)]]"
        link on-tap="_incrementNumFilesShown">
      [[_computeIncrementText(numFilesShown, _files)]]
    </gr-button>
    <gr-tooltip-content
        has-tooltip="[[_computeWarnShowAll(_files)]]"
        show-icon="[[_computeWarnShowAll(_files)]]"
        title$="[[_computeShowAllWarning(_files)]]">
      <gr-button
          class="fileListButton"
          id="showAllButton"
          hidden$="[[_computeFileListButtonHidden(numFilesShown, _files)]]"
          link on-tap="_showAllFiles">
        [[_computeShowAllText(_files)]]
      </gr-button><!--
 --></gr-tooltip-content>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
    <gr-storage id="storage"></gr-storage>
    <gr-diff-cursor id="diffCursor"></gr-diff-cursor>
    <gr-cursor-manager
        id="fileCursor"
        scroll-behavior="keep-visible"
        cursor-target-class="selected"></gr-cursor-manager>
    <gr-reporting id="reporting"></gr-reporting>
  </template>
  <script src="gr-file-list.js"></script>
</dom-module>
