<!--
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="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
<link rel="import" href="../../shared/gr-request/gr-request.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">

<link rel="import" href="../gr-diff-comment-thread/gr-diff-comment-thread.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">
  <template>
    <style>
      :host {
        --light-remove-highlight-color: #fee;
        --dark-remove-highlight-color: #ffd4d4;
        --light-add-highlight-color: #efe;
        --dark-add-highlight-color: #d4ffd4;
      }
      .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;
      }
      .diffContainer {
        border-bottom: 1px solid #eee;
        border-top: 1px solid #eee;
        display: flex;
        font: 12px var(--monospace-font-family);
        overflow-x: auto;
        will-change: transform;
      }
      table {
        border-collapse: collapse;
        border-right: 1px solid #ddd;
      }
      .section {
        background-color: #eee;
      }
      .blank,
      .content {
        background-color: #fff;
      }
      .lineNum,
      .content {
        vertical-align: top;
        white-space: pre;
      }
      .contextLineNum:before,
      .lineNum:before {
        display: inline-block;
        color: #666;
        content: attr(data-value);
        padding: 0 .75em;
        text-align: right;
        width: 100%;
      }
      .canComment .lineNum[data-value] {
        cursor: pointer;
      }
      .canComment .lineNum[data-value]:before {
        text-decoration: underline;
      }
      .canComment .lineNum[data-value]:hover:before {
        background-color: #ccc;
      }
      .canComment .lineNum[data-value="FILE"]:before {
        content: 'File';
      }
      .content {
        overflow: hidden;
        min-width: var(--content-width, 80ch);
      }
      .content.left {
        -webkit-user-select: var(--left-user-select, text);
        -moz-user-select: var(--left-user-select, text);
        -ms-user-select: var(--left-user-select, text);
        user-select: var(--left-user-select, text);
      }
      .content.right {
        -webkit-user-select: var(--right-user-select, text);
        -moz-user-select: var(--right-user-select, text);
        -ms-user-select: var(--right-user-select, text);
        user-select: var(--right-user-select, text);
      }
      .content.add hl,
      .content.add.darkHighlight {
        background-color: var(--dark-add-highlight-color);
      }
      .content.add.lightHighlight {
        background-color: var(--light-add-highlight-color);
      }
      .content.remove hl,
      .content.remove.darkHighlight {
        background-color: var(--dark-remove-highlight-color);
      }
      .content.remove.lightHighlight {
        background-color: var(--light-remove-highlight-color);
      }
      .contextControl {
        color: #849;
        background-color: #fef;
      }
      .contextControl gr-button {
        display: block;
        font-family: var(--monospace-font-family);
        text-decoration: none;
      }
      .contextControl td:not(.lineNum) {
        text-align: center;
      }
      .br:after {
        /* Line feed */
        content: '\A';
      }
      .tab {
        display: inline-block;
      }
      .tab.withIndicator:before {
        color: #C62828;
        /* >> character */
        content: '\00BB';
      }
    </style>
    <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="[[availablePatches]]"></gr-patch-range-select>
        <gr-button link
           class="prefsButton"
           on-tap="_handlePrefsTap"
           hidden$="[[_computePrefsButtonHidden(_prefs, _loggedIn)]]"
           hidden>Diff View Preferences</gr-button>
      </div>
      <gr-overlay id="prefsOverlay" with-backdrop>
        <gr-diff-preferences
            prefs="{{_prefs}}"
            on-save="_handlePrefsSave"
            on-cancel="_handlePrefsCancel"></gr-diff-preferences>
      </gr-overlay>

      <div class$="[[_computeContainerClass(_loggedIn, _viewMode)]]"
          on-tap="_handleTap"
          on-mousedown="_handleMouseDown"
          on-copy="_handleCopy">
        <table id="diffTable"></table>
      </div>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-diff-line.js"></script>
  <script src="gr-diff-group.js"></script>
  <script src="gr-diff-builder.js"></script>
  <script src="gr-diff-builder-side-by-side.js"></script>
  <script src="gr-diff-builder-unified.js"></script>
  <script src="gr-diff.js"></script>
</dom-module>
