<?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 type='com.google.gerrit.client.diff.DiffTable.DiffTableStyle'>
    @external .CodeMirror, .CodeMirror-lines, .CodeMirror-selectedtext;
    @external .CodeMirror-linenumber, .CodeMirror-vscrollbar .CodeMirror-scroll;
    @external .CodeMirror-dialog-bottom;
    @external .cm-keymap-fat-cursor, CodeMirror-cursor;
    @external .cm-searching, .cm-trailingspace, .cm-tab;

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

    .difftable {
      -webkit-touch-callout: none;
      -webkit-user-select: none;
      -khtml-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
    }
    .difftable .CodeMirror-lines { padding: 0; }
    .difftable .CodeMirror pre {
      padding: 0;
      overflow: hidden;
      border-right: 0;
      width: auto;
      line-height: normal;
    }

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

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

    .overview {
      width: 10px;
      vertical-align: top;
    }

    /* Hide scrollbars, OverviewBar controls both views. */
    .difftable .CodeMirror-scroll { padding-right: 0; }
    .difftable .CodeMirror-vscrollbar { display: none !important; }

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

    .a .diff { background-color: #faa; }
    .b .diff { background-color: #9f9; }
    .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 {
      background-color: #f7f7f7;
      line-height: 1;
    }
    .fileCommentCell {
      overflow-x: auto;
    }

    .activeLine .CodeMirror-linenumber {
      background-color: #bcf !important;
      color: #000;
    }

    .range {
      background-color: #ffd500 !important;
    }
    .rangeHighlight {
      background-color: #ffff00 !important;
    }
    .cm-searching {
      background-color: #ffa !important;
    }
    .cm-trailingspace {
      background-color: red !important;
    }
    .difftable .CodeMirror-selectedtext {
      background-color: inherit !important;
    }
    .difftable .CodeMirror-linenumber {
      height: 1.11em;
      cursor: pointer;
    }
    .difftable .CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
      background: transparent;
      text-decoration: underline;
      z-index: 2;
    }
    .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;
    }
    .showTabs .cm-tab:before {
      position: absolute;
      content: "\00bb";
      color: #f00;
    }
    .showLineNumbers .padding {
      margin-left: 21px;
      border-left: 2px solid #d64040;
    }
    .columnMargin {
      position: absolute;
      top: 0;
      bottom: 0;
      width: 0;
      border-right: 1px dashed #ffa500;
      z-index: 2;
      cursor: text;
    }
  </ui:style>
  <g:HTMLPanel styleName='{style.difftable}'>
    <table class='{style.table}'>
      <tr ui:field='patchSetNavRow' class='{style.patchSetNav}'>
        <td ui:field='patchSetNavCellA'>
          <d:PatchSetSelectBox2 ui:field='patchSetSelectBoxA' />
        </td>
        <td ui:field='patchSetNavCellB'>
          <d:PatchSetSelectBox2 ui:field='patchSetSelectBoxB' />
        </td>
        <td class='{style.overview}' />
      </tr>
      <tr>
        <td ui:field='cmA' class='{style.a}' />
        <td ui:field='cmB' class='{style.b}' />
        <td class='{style.overview}'><d:OverviewBar ui:field='overview'/></td>
      </tr>
    </table>
    <g:FlowPanel ui:field='widgets' visible='false'/>
  </g:HTMLPanel>
</ui:UiBinder>
