<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2013 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.
-->
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'
    xmlns:d='urn:import:com.google.gerrit.client.diff'>
  <ui:style gss='false' type='com.google.gerrit.client.diff.DiffTable.DiffTableStyle'>
    @external .CodeMirror, .CodeMirror-selectedtext;
    @external .CodeMirror-linenumber;
    @external .CodeMirror-overlayscroll-vertical, .CodeMirror-scroll;
    @external .CodeMirror-dialog-bottom;
    @external .CodeMirror-cursor;

    .fullscreen {
      background-color: #f7f7f7;
      border-bottom: 1px solid #ddd;
    }

    .difftable .patchSetNav,
    .difftable .CodeMirror {
      -webkit-touch-callout: none;
      -webkit-user-select: none;
      -khtml-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
    }

    .difftable .CodeMirror pre {
      overflow: hidden;
      border-right: 0;
      width: auto;
    }

    /* Preserve space for underscores. If this changes
     * see ChunkManager.addPadding() and adjust there.
     */
    .difftable .CodeMirror pre,
    .difftable .CodeMirror pre span {
      padding-bottom: 1px;
    }

    .hideA .psNavA,
    .hideA .a {
      display: none;
    }

    .hideB .psNavB,
    .hideB .b {
      display: none;
    }

    .table {
      width: 100%;
      table-layout: fixed;
      border-spacing: 0;
    }
    .table td { padding: 0 }
    .a, .b { width: 50% }
    .hideA .psNavB, .hideA .b { width: 100% }
    .hideB .psNavA, .hideB .a { width: 100% }

    /* Hide scrollbars on A, B controls both views. */
    .a .CodeMirror-scroll { margin-right: -36px; }
    .a .CodeMirror-overlayscroll-vertical { display: none !important; }

    .showLineNumbers .b { border-left: none; }
    .b { border-left: 1px solid #ddd; }

    .a .diff { background-color: #faa; }
    /* Set min-width for lineWrapping to make sure it gets enough width
       before lineWrapping and to make sure it dosent do a ugly line wrap */
    .b .diff { background-color: #9f9; min-width: 60em; }
    .a .intralineBg { background-color: #fee; }
    .b .intralineBg { background-color: #dfd; }
    .noIntraline .a .intralineBg { background-color: #faa; }
    .noIntraline .b .intralineBg { background-color: #9f9; }

    .dark .a .diff { background-color: #400; }
    .dark .b .diff { background-color: #444; }

    .dark .a .intralineBg { background-color: #888; }
    .dark .b .intralineBg { background-color: #bbb; }
    .dark .noIntraline .a .intralineBg { background-color: #400; }
    .dark .noIntraline .b .intralineBg { background-color: #444; }

    .patchSetNav, .diff_header {
      background-color: #f7f7f7;
      line-height: 1;
    }
    .fileCommentCell {
      overflow-x: auto;
    }

    .range {
      background-color: #ffd500 !important;
    }
    .rangeHighlight {
      background-color: #ffff00 !important;
    }
    .difftable .CodeMirror-selectedtext {
      background-color: inherit !important;
    }
    .difftable .CodeMirror-linenumber {
      height: 1.11em;
      cursor: pointer;
    }
    .difftable .CodeMirror div.CodeMirror-cursor {
      border-left: 2px solid black;
    }
    .difftable .CodeMirror-dialog-bottom {
      border-top: 0;
      border-left: 1px solid #000;
      border-bottom: 1px solid #000;
      background-color: #f7f7f7;
      top: 0;
      right: 0;
      bottom: auto;
      left: auto;
    }
    .showLineNumbers .padding {
      margin-left: 21px;
      border-left: 2px solid #d64040;
    }

    .diff_header {
      font-size: 12px;
      font-weight: bold;
      color: #5252ad;
    }
    .diff_header pre {
      margin: 0 0 3px 0;
    }
  </ui:style>
  <g:HTMLPanel styleName='{style.difftable}'>
    <table class='{style.table}'>
      <tr ui:field='patchSetNavRow' class='{style.patchSetNav}'>
        <td ui:field='patchSetNavCellA' class='{style.psNavA}'>
          <d:PatchSetSelectBox ui:field='patchSetSelectBoxA' />
        </td>
        <td ui:field='patchSetNavCellB' class='{style.psNavB}'>
          <d:PatchSetSelectBox ui:field='patchSetSelectBoxB' />
        </td>
      </tr>
      <tr ui:field='diffHeaderRow' class='{style.diff_header}'>
        <td colspan='2'><pre ui:field='diffHeaderText' /></td>
      </tr>
      <tr>
        <td ui:field='cmA' class='{style.a}' />
        <td ui:field='cmB' class='{style.b}' />
      </tr>
    </table>
    <g:FlowPanel ui:field='widgets' visible='false'/>
  </g:HTMLPanel>
</ui:UiBinder>
