<!--
@license
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="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../behaviors/async-foreach-behavior/async-foreach-behavior.html">
<link rel="import" href="../../../behaviors/dom-util-behavior/dom-util-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="../../../styles/shared-styles.html">
<link rel="import" href="../../core/gr-navigation/gr-navigation.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="../../edit/gr-edit-file-controls/gr-edit-file-controls.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-icons/gr-icons.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-count-string-formatter/gr-count-string-formatter.html">
<link rel="import" href="../../shared/gr-tooltip-content/gr-tooltip-content.html">
<link rel="import" href="../gr-file-list-constants.html">

<dom-module id="gr-file-list">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
      }
      .row {
        align-items: center;
        border-top: 1px solid var(--border-color);
        display: flex;
        min-height: 2.25em;
        padding: .2em var(--default-horizontal-margin) .2em calc(var(--default-horizontal-margin) - .35rem);
      }
      :host(.loading) .row {
        opacity: .5;
      };
      :host(.editMode) .hideOnEdit {
        display: none;
      }
      .showOnEdit {
        display: none;
      }
      :host(.editMode) .showOnEdit {
        display: initial;
      }
      .invisible {
        visibility: hidden;
      }
      .controlRow {
        align-items: center;
        display: flex;
        height: 2.25em;
        justify-content: center;
      }
      .controlRow.invisible,
      .show-hide.invisible {
        display: none;
      }
      .reviewed,
      .status {
        align-items: center;
        display: inline-flex;
      }
      .reviewed,
      .status {
        display: inline-block;
        text-align: left;
        width: 1.5em;
      }
      .file-row {
        cursor: pointer;
      }
      .file-row.expanded {
        border-bottom: 1px solid var(--border-color);
        position: -webkit-sticky;
        position: sticky;
        top: 0;
        /* Has to visible above the diff view, and by default has a lower
         z-index. setting to 1 places it directly above. */
        z-index: 1;
      }
      .file-row:hover {
        background-color: var(--hover-background-color);
      }
      .file-row.selected {
        background-color: var(--selection-background-color);
      }
      .file-row.expanded,
      .file-row.expanded:hover {
        background-color: var(--expanded-background-color);
      }
      .path {
        cursor: pointer;
        flex: 1;
        text-decoration: none;
        white-space: nowrap;
      }
      .path:hover :first-child {
        text-decoration: underline;
      }
      .path,
      .path div {
        overflow: hidden;
        text-overflow: ellipsis;
      }
      .oldPath {
        color: var(--deemphasized-text-color);
      }
      .comments,
      .stats {
        text-align: right;
      }
      .comments {
        padding-left: 2em;
      }
      .stats {
        min-width: 7em;
      }
      .row:not(.header) .stats,
      .total-stats {
        font-family: var(--monospace-font-family);
      }
      .sizeBars {
        margin-left: .5em;
      }
      .sizeBars.hide {
        display: none;
      }
      .added,
      .removed {
        display: inline-block;
        min-width: 3.5em;
      }
      .added {
        color: var(--vote-text-color-recommended);
      }
      .removed {
        color: var(--vote-text-color-disliked);
        text-align: left;
      }
      .drafts {
        color: #C62828;
        font-family: var(--font-family-bold);
      }
      .show-hide {
        margin-left: .35em;
        width: 1.9em;
      }
      .fileListButton {
        margin: .5em;
      }
      .totalChanges {
        justify-content: flex-end;
        text-align: right;
      }
      .warning {
        color: var(--deemphasized-text-color);
      }
      input.show-hide {
        display: none;
      }
      label.show-hide {
        cursor: pointer;
        display: block;
        min-width: 2em;
      }
      gr-diff {
        display: block;
        overflow-x: auto;
      }
      .truncatedFileName {
        display: none;
      }
      .expanded .fullFileName {
        white-space: normal;
        word-wrap: break-word;
      }
      .mobile {
        display: none;
      }
      .reviewed {
        margin-left: 2em;
        width: 15em;
      }
      .reviewed label {
        color: var(--link-color);
        opacity: 0;
        justify-content: flex-end;
        width: 100%;
      }
      .reviewed label:hover {
        cursor: pointer;
        opacity: 100;
      }
      .row:focus {
        outline: none;
      }
      .row:hover .reviewed label,
      .row:focus .reviewed label,
      .row.expanded .reviewed label {
        opacity: 100;
      }
      .reviewed input {
        display: none;
      }
      .reviewedLabel {
        color: var(--deemphasized-text-color);
        margin-right: 1em;
        opacity: 0;
      }
      .reviewedLabel.isReviewed {
        display: initial;
        opacity: 100;
      }
      .editFileControls {
        width: 7em;
      }
      .markReviewed,
      .pathLink {
        display: inline-block;
        margin: -.2em 0;
        padding: .4em 0;
      }
      @media screen and (max-width: 50em) {
        .desktop {
          display: none;
        }
        .mobile {
          display: block;
        }
        .row.selected {
          background-color: var(--view-background-color);
        }
        .stats {
          display: none;
        }
        .reviewed,
        .status {
          justify-content: flex-start;
        }
        .reviewed {
          display: none;
        }
        .comments {
          min-width: initial;
        }
        .expanded .fullFileName,
        .truncatedFileName {
          display: block;
        }
        .expanded .truncatedFileName,
        .fullFileName {
          display: none;
        }
      }
    </style>
    <div
        id="container"
        on-tap="_handleFileListTap">
      <template is="dom-repeat"
          items="[[_shownFiles]]"
          id="files"
          as="file"
          initial-count="[[fileListIncrement]]"
          target-framerate="1">
        [[_reportRenderedRow(index)]]
        <div class="stickyArea">
          <div class$="file-row row [[_computePathClass(file.__path, _expandedFilePaths.*)]]"
              data-path$="[[file.__path]]" tabindex="-1">
              <div class$="[[_computeClass('status', file.__path)]]"
                  tabindex="0"
                  aria-label$="[[_computeFileStatusLabel(file.status)]]">
              [[_computeFileStatus(file.status)]]
            </div>
            <span
                data-url="[[_computeDiffURL(change, patchRange.patchNum, patchRange.basePatchNum, file.__path, editMode)]]"
                class="path">
              <a class="pathLink" href$="[[_computeDiffURL(change, patchRange.patchNum, patchRange.basePatchNum, file.__path, editMode)]]">
                <span title$="[[computeDisplayPath(file.__path)]]"
                    class="fullFileName">
                  [[computeDisplayPath(file.__path)]]
                </span>
                <span title$="[[computeDisplayPath(file.__path)]]"
                    class="truncatedFileName">
                  [[computeTruncatedPath(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(changeComments, patchRange, file.__path)]]
              </span>
              [[_computeCommentsString(changeComments, patchRange, file.__path)]]
            </div>
            <div class="comments mobile">
              <span class="drafts">
                [[_computeDraftsStringMobile(changeComments, patchRange,
                    file.__path)]]
              </span>
              [[_computeCommentsStringMobile(changeComments, patchRange,
                  file.__path)]]
            </div>
            <div class$="[[_computeSizeBarsClass(_showSizeBars, file.__path)]]">
              <svg width="61" height="8">
                <rect
                    x$="[[_computeBarAdditionX(file, _sizeBarLayout)]]"
                    y="0"
                    height="8"
                    fill="#388E3C"
                    width$="[[_computeBarAdditionWidth(file, _sizeBarLayout)]]" />
                <rect
                    x$="[[_computeBarDeletionX(_sizeBarLayout)]]"
                    y="0"
                    height="8"
                    fill="#D32F2F"
                    width$="[[_computeBarDeletionWidth(file, _sizeBarLayout)]]" />
              </svg>
            </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="reviewed hideOnEdit" hidden$="[[!_loggedIn]]" hidden>
              <span class$="reviewedLabel [[_computeReviewedClass(file.isReviewed)]]">Reviewed</span>
              <label>
                <input class="reviewed" type="checkbox" checked="[[file.isReviewed]]">
                <span class="markReviewed" title="Mark as reviewed (shortcut: r)">[[_computeReviewedText(file.isReviewed)]]</span>
              </label>
            </div>
            <div class="editFileControls showOnEdit">
              <template is="dom-if" if="[[editMode]]">
                <gr-edit-file-controls
                    class$="[[_computeClass('', file.__path)]]"
                    file-path="[[file.__path]]"></gr-edit-file-controls>
              </template>
            </div>
            <div class="show-hide">
              <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>
                  <iron-icon
                      id="icon"
                      icon="[[_computeShowHideIcon(file.__path, _expandedFilePaths.*)]]">
                  </iron-icon>
              </label>
            </div>
          </div>
          <template is="dom-if"
              if="[[_isFileExpanded(file.__path, _expandedFilePaths.*)]]">
            <gr-diff
                no-auto-render
                display-line="[[_displayLine]]"
                inline-index=[[index]]
                hidden="[[!_isFileExpanded(file.__path, _expandedFilePaths.*)]]"
                change-num="[[changeNum]]"
                patch-range="[[patchRange]]"
                path="[[file.__path]]"
                prefs="[[diffPrefs]]"
                project-name="[[change.project]]"
                project-config="[[projectConfig]]"
                on-line-selected="_onLineSelected"
                no-render-on-prefs-change
                view-mode="[[diffViewMode]]"></gr-diff>
          </template>
        </div>
      </template>
    </div>
    <div
        class="row totalChanges"
        hidden$="[[_hideChangeTotals]]">
      <div class="total-stats">
        <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>
      <!-- Empty div here exists to keep spacing in sync with file rows. -->
      <div class="reviewed hideOnEdit" hidden$="[[!_loggedIn]]" hidden></div>
      <div class="editFileControls showOnEdit"></div>
      <div class="show-hide"></div>
    </div>
    <div
        class="row totalChanges"
        hidden$="[[_hideBinaryChangeTotals]]">
      <div class="total-stats">
        <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>
    <div class$="row controlRow [[_computeFileListControlClass(numFilesShown, _files)]]">
      <gr-button
          class="fileListButton"
          id="incrementButton"
          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"
            link on-tap="_showAllFiles">
          [[_computeShowAllText(_files)]]
        </gr-button><!--
  --></gr-tooltip-content>
    </div>
    <gr-diff-preferences
        id="diffPreferences"
        prefs="{{diffPrefs}}"
        local-prefs="{{_localPrefs}}"></gr-diff-preferences>
    <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"
        focus-on-move
        cursor-target-class="selected"></gr-cursor-manager>
    <gr-reporting id="reporting"></gr-reporting>
  </template>
  <script src="gr-file-list.js"></script>
</dom-module>
