<!--
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="../../../bower_components/iron-dropdown/iron-dropdown.html">
<link rel="import" href="../../../behaviors/keyboard-shortcut-behavior.html">
<link rel="import" href="../../shared/gr-button/gr-button.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-diff/gr-diff.html">
<link rel="import" href="../gr-diff-preferences/gr-diff-preferences.html">
<link rel="import" href="../gr-patch-range-select/gr-patch-range-select.html">

<dom-module id="gr-diff-view">
  <template>
    <style>
      :host {
        background-color: var(--view-background-color);
        display: block;
      }
      h3 {
        padding: .75em var(--default-horizontal-margin);
      }
      .reviewed {
        display: inline-block;
        margin: 0 .25em;
        vertical-align: .15em;
      }
      .jumpToFileContainer {
        display: inline-block;
      }
      .mobileJumpToFileContainer {
        display: none;
      }
      .downArrow {
        display: inline-block;
        font-size: .6em;
        vertical-align: middle;
      }
      .dropdown-trigger {
        color: #00e;
        cursor: pointer;
        padding: 0;
      }
      .dropdown-content {
        background-color: #fff;
        box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
      }
      .dropdown-content a {
        cursor: pointer;
        display: block;
        font-weight: normal;
        padding: .3em .5em;
      }
      .dropdown-content a:before {
        color: #ccc;
        content: attr(data-key-nav);
        display: inline-block;
        margin-right: .5em;
        width: .3em;
      }
      .dropdown-content a:hover {
        background-color: #00e;
        color: #fff;
      }
      .dropdown-content a[selected] {
        color: #000;
        font-weight: bold;
        pointer-events: none;
        text-decoration: none;
      }
      .dropdown-content a[selected]:hover {
        background-color: #fff;
        color: #000;
      }
      gr-button {
        font: inherit;
        padding: .3em 0;
        text-decoration: none;
      }
      .loading {
        padding: 0 var(--default-horizontal-margin) 1em;
        color: #666;
      }
      .header {
        display: flex;
        justify-content: space-between;
        margin: 0 var(--default-horizontal-margin) .75em;
      }
      .prefsButton {
        text-align: right;
      }
      #modeSelect {
        margin-left: .5em;
      }
      @media screen and (max-width: 50em) {
        .dash {
          display: none;
        }
        .reviewed {
          vertical-align: -.1em;
        }
        .jumpToFileContainer {
          display: none;
        }
        .mobileJumpToFileContainer {
          display: block;
          width: 100%;
        }
      }
    </style>
    <h3>
      <a href$="[[_computeChangePath(_changeNum, _patchRange.patchNum, _change.revisions)]]">
        [[_changeNum]]</a><span>:</span>
      <span>[[_change.subject]]</span>
      <span class="dash">—</span>
      <input id="reviewed"
          class="reviewed"
          type="checkbox"
          on-change="_handleReviewedChange"
          hidden$="[[!_loggedIn]]" hidden>
      <div class="jumpToFileContainer">
        <gr-button link class="dropdown-trigger" id="trigger" on-tap="_showDropdownTapHandler">
          <span>[[_computeFileDisplayName(_path)]]</span>
          <span class="downArrow">&#9660;</span>
        </gr-button>
        <iron-dropdown id="dropdown" vertical-align="top" vertical-offset="25">
          <div class="dropdown-content">
            <template is="dom-repeat" items="[[_fileList]]" as="path">
              <a href$="[[_computeDiffURL(_changeNum, _patchRange, path)]]"
                 selected$="[[_computeFileSelected(path, _path)]]"
                 data-key-nav$="[[_computeKeyNav(path, _path, _fileList)]]"
                 on-tap="_handleFileTap">
                 [[_computeFileDisplayName(path)]]
              </a>
            </template>
          </div>
        </iron-dropdown>
      </div>
      <div class="mobileJumpToFileContainer">
        <select on-change="_handleMobileSelectChange">
          <template is="dom-repeat" items="[[_fileList]]" as="path">
            <option
                value$="[[path]]"
                selected$="[[_computeFileSelected(path, _path)]]">
              [[_computeFileDisplayName(path)]]
            </option>
          </template>
        </select>
      </div>
    </h3>
    <div class="loading" hidden$="[[!_loading]]">Loading...</div>
    <div hidden$="[[_loading]]" hidden>
      <div class="header">
        <gr-patch-range-select
            path="[[_path]]"
            change-num="[[_changeNum]]"
            patch-range="[[_patchRange]]"
            available-patches="[[_computeAvailablePatches(_change.revisions)]]">
        </gr-patch-range-select>
        <div>
          <gr-button link
              class="prefsButton"
              on-tap="_handlePrefsTap"
              hidden$="[[_computePrefsButtonHidden(_prefs, _loggedIn)]]"
              hidden>Diff View Preferences</gr-button>
          <select id="modeSelect" on-change="_handleModeChange">
            <option value="SIDE_BY_SIDE">Side By Side</option>
            <option value="UNIFIED_DIFF">Unified</option>
          </select>
        </div>
      </div>
      <gr-overlay id="prefsOverlay" with-backdrop>
        <gr-diff-preferences
            prefs="{{_prefs}}"
            on-save="_handlePrefsSave"
            on-cancel="_handlePrefsCancel"></gr-diff-preferences>
      </gr-overlay>
      <gr-diff id="diff"
          change-num="[[_changeNum]]"
          patch-range="[[_patchRange]]"
          path="[[_path]]"
          prefs="[[_prefs]]"
          project-config="[[_projectConfig]]"
          view-mode="[[_diffMode]]"
          on-render="_handleDiffRender">
      </gr-diff>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-diff-view.js"></script>
</dom-module>
