<?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 .cm-keymap-fat-cursor, CodeMirror-cursor;
    @external .cm-searching, .cm-trailingspace, .cm-tab;

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

    .difftable { max-width: 1484px; }
    .difftable .CodeMirror-lines { padding: 0; }
    .difftable .CodeMirror pre {
      padding: 0;
      padding-bottom: 0.11em;
      overflow: hidden;
      border-right: 0;
      width: auto;
    }
    .difftable .CodeMirror pre span {
      padding-bottom: 0.11em;
    }
    .contentCell {
      padding: 0;
    }
    .sidePanelCell {
      padding: 0;
      width: 10px;
    }
    .table {
      width: 100%;
      table-layout: fixed;
      border-spacing: 0;
    }

    .a, .b {
      padding: 0;
      width: 50%;
    }

    /* Hide left side scrollbar, right side controls both views. */
    .a .CodeMirror-scroll { padding-right: 0; }
    .a .CodeMirror-vscrollbar { display: none !important; }

    .a .diff { background-color: #faa; }
    .b .diff { background-color: #9f9; }
    .a .intralineBg { background-color: #fee; }
    .b .intralineBg { background-color: #dfd; }

    .fileCommentRow {
      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;
    }
    .showtabs .cm-tab:before {
      content: "\00bb";
      color: #f00;
    }
  </ui:style>
  <g:HTMLPanel styleName='{style.difftable}'>
    <table class='{style.table}'>
      <tr>
        <td class='{style.contentCell}'>
          <table class='{style.table}'>
            <tr ui:field='patchSetNavRow' class='{style.fileCommentRow}'>
              <td ui:field='patchSetNavCellA'>
                <d:PatchSetSelectBox2 ui:field='patchSetSelectBoxA' />
              </td>
              <td ui:field='patchSetNavCellB'>
                <d:PatchSetSelectBox2 ui:field='patchSetSelectBoxB' />
              </td>
            </tr>
            <tr ui:field='fileCommentRow' class='{style.fileCommentRow}'>
              <td ui:field='fileCommentCellA' class='{style.fileCommentCell}'>
                <d:FileCommentPanel ui:field='fileCommentPanelA' />
              </td>
              <td ui:field='fileCommentCellB' class='{style.fileCommentCell}'>
                <d:FileCommentPanel ui:field='fileCommentPanelB' />
              </td>
            </tr>
            <tr>
              <td ui:field='cmA' class='{style.a}'></td>
              <td ui:field='cmB' class='{style.b}'></td>
            </tr>
          </table>
        </td>
        <td class='{style.sidePanelCell}'><d:SidePanel ui:field='sidePanel'/></td>
      </tr>
    </table>
  </g:HTMLPanel>
</ui:UiBinder>
