<!--
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-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-diff-builder/gr-diff-builder.html">
<link rel="import" href="../gr-diff-comment-thread/gr-diff-comment-thread.html">
<link rel="import" href="../gr-diff-highlight/gr-diff-highlight.html">
<link rel="import" href="../gr-diff-selection/gr-diff-selection.html">
<link rel="import" href="../gr-syntax-themes/gr-theme-default.html">

<dom-module id="gr-diff">
  <template>
    <style>
      :host {
        --light-remove-highlight-color: #fee;
        --dark-remove-highlight-color: rgba(255, 0, 0, 0.15);
        --light-add-highlight-color: #efe;
        --dark-add-highlight-color: rgba(0, 255, 0, 0.15);

      }
      :host.no-left .sideBySide ::content .left,
      :host.no-left .sideBySide ::content .left + td,
      :host.no-left .sideBySide ::content .right:not([data-value]),
      :host.no-left .sideBySide ::content .right:not([data-value]) + td {
        display: none;
      }
      .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;
        table-layout: fixed;

        /* Hint GPU acceleration */
        -webkit-transform: translateZ(0);
        -moz-transform: translateZ(0);
        -ms-transform: translateZ(0);
        -o-transform: translateZ(0);
        transform: translateZ(0);
      }
      .lineNum {
        background-color: #eee;
      }
      .image-diff .gr-diff {
        text-align: center;
      }
      .image-diff img {
        max-width: 50em;
        outline: 1px solid #ccc;
      }
      .image-diff label {
        font-family: var(--font-family);
        font-style: italic;
      }
      .diff-row.target-row.target-side-left .lineNum.left,
      .diff-row.target-row.target-side-right .lineNum.right,
      .diff-row.target-row.unified .lineNum {
        background-color: #BBDEFB;
      }
      .diff-row.target-row.target-side-left .lineNum.left:before,
      .diff-row.target-row.target-side-right .lineNum.right:before,
      .diff-row.target-row.unified .lineNum:before {
        color: #000;
      }
      .blank,
      .content {
        background-color: #fff;
      }
      .full-width {
        width: 100%;
      }
      .full-width .contentText {
        white-space: pre-wrap;
        word-wrap: break-word;
      }
      .lineNum,
      .content {
        /* Set font size based the user's diff preference. */
        font-size: var(--font-size, 12px);
        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="FILE"]:before {
        content: 'File';
      }
      .content {
        overflow: hidden;
        /* Set max and min width since setting width on table cells still
           allows them to shrink. */
        max-width: var(--content-width, 80ch);
        min-width: var(--content-width, 80ch);
        width: var(--content-width, 80ch);
      }
      .content.add .intraline,
      .delta.total .content.add {
        background-color: var(--dark-add-highlight-color);
      }
      .content.add {
        background-color: var(--light-add-highlight-color);
      }
      .content.remove .intraline,
      .delta.total .content.remove {
        background-color: var(--dark-remove-highlight-color);
      }
      .content.remove {
        background-color: var(--light-remove-highlight-color);
      }
      .content .contentText:after {
        /* Newline, to ensure all lines are one line-height tall. */
        content: '\A';
      }
      .contextControl {
        background-color: #fef;
        color: #849;
      }
      .contextControl gr-button {
        display: inline-block;
        font-family: var(--monospace-font-family);
        text-decoration: none;
      }
      .contextControl td:not(.lineNum) {
        text-align: center;
      }
      .displayLine .diff-row.target-row {
        border-bottom: 1px solid #bbb;
      }
      .br:after {
        /* Line feed */
        content: '\A';
      }
      .tab {
        display: inline-block;
      }
      .tab-indicator:before {
        color: #C62828;
        /* >> character */
        content: '\00BB';
      }
      .trailing-whitespace {
        border-radius: .4em;
        background-color: #FF9AD2;
      }
    </style>
    <style include="gr-theme-default"></style>
    <div class$="[[_computeContainerClass(_loggedIn, viewMode, displayLine)]]"
        on-tap="_handleTap">
      <gr-diff-selection diff="[[_diff]]">
        <gr-diff-highlight
            id="highlights"
            logged-in="[[_loggedIn]]"
            comments="{{_comments}}">
          <gr-diff-builder
              id="diffBuilder"
              comments="[[_comments]]"
              diff="[[_diff]]"
              view-mode="[[viewMode]]"
              line-wrapping="[[lineWrapping]]"
              is-image-diff="[[isImageDiff]]"
              base-image="[[_baseImage]]"
              revision-image="[[_revisionImage]]">
            <table id="diffTable" class$="[[_diffTableClass]]"></table>
          </gr-diff-builder>
        </gr-diff-highlight>
      </gr-diff-selection>
    </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.js"></script>
</dom-module>
