<?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:x='urn:import:com.google.gerrit.client.ui'
    xmlns:clippy='urn:import:com.google.gwtexpui.clippy.client'>
  <ui:with field='ico' type='com.google.gerrit.client.GerritResources'/>
  <ui:image field="toggle" src="moreLess.png"/>
  <ui:style gss='false' type='com.google.gerrit.client.change.CommitBox.Style'>
    @eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;

    .collapsed .scroll { height: 250px }
    .scroll, .more { width: 560px }
    .scroll {
      border-right: 1px solid trimColor;
      border-bottom: 1px solid trimColor;
    }

    .text {
      font-family: monospace;
      white-space: pre;
    }

    .more {
      height: 8px;
      line-height: 8px;
      text-align: center;
    }
    .moreButton {
      padding: 0 5px 0 5px;
      margin: 0;
      border: none;
      height: 8px;
      background-color: #F7F7F7;
    }
    .moreButton:focus {
      outline: none;
    }

    @sprite .toggle {
      gwt-image: "toggle";
      width: 13px;
      height: 8px;
      padding: 0;
    }
    .collapsed .toggle { background-position: -13px -8px }
    .expanded .toggle { background-position: 0px -8px }
    .collapsed button:hover .toggle { background-position: -13px 0px }
    .expanded button:hover .toggle { background-position: 0px 0px }

    .header {
      border-spacing: 0;
      padding: 0;
      width: 560px;
    }
    .header th { width: 72px; }
    .header td { white-space: nowrap; }
    .date { width: 132px; }

    .clippy {
      position: relative;
    }
    .clippy div {
      position: absolute;
      top: 0px;
      right: -16px;
    }
    <!-- To make room for the copyableLabel from the adjacent column -->
    .webLinkPanel a:first-child {
      margin-left:16px;
    }
    .webLinkPanel>a {
      margin-left:2px;
    }

    .commit {
      margin-right: 3px;
      float: left;
    }

    .userPanel img {
      margin: 0 2px 0 0;
      width: 16px;
      height: 16px !important;
      vertical-align: bottom;
    }

    .parent {
      margin-right: 3px;
      float: left;
    }
    .parentNotCurrent {
      color: #FFA62F;   <!-- orange -->
      font-weight: bold;
    }

  </ui:style>
  <g:HTMLPanel>
    <g:ScrollPanel styleName='{style.scroll}' ui:field='scroll'>
      <g:HTML styleName='{style.text}' ui:field='text'/>
    </g:ScrollPanel>
    <div class='{style.more}'>
      <g:Button ui:field='more'
          styleName='{style.moreButton}'
          title='Expand/Collapse'>
        <ui:attribute name='title'/>
        <div class='{style.toggle}'/>
      </g:Button>
    </div>
    <table class='{style.header}'>
      <tr>
        <th><ui:msg>Author</ui:msg></th>
        <td>
          <g:FlowPanel ui:field='authorPanel' styleName='{style.userPanel}'>
            <x:InlineHyperlink ui:field='authorNameEmail'
              title='Search for changes by this user'>
              <ui:attribute name='title'/>
            </x:InlineHyperlink>
          </g:FlowPanel>
        </td>
        <td ui:field='authorDate' class='{style.date}' colspan="2"/>
      </tr>
      <tr>
        <th><ui:msg>Committer</ui:msg></th>
        <td>
          <g:FlowPanel ui:field='committerPanel' styleName='{style.userPanel}'>
            <x:InlineHyperlink ui:field='committerNameEmail'
              title='Search for changes by this user'>
              <ui:attribute name='title'/>
            </x:InlineHyperlink>
          </g:FlowPanel>
        </td>
        <td ui:field='committerDate' class='{style.date}' colspan="2"/>
      </tr>
      <tr>
        <th>
          <div class='{style.commit}'>
            <ui:msg>Commit</ui:msg>
          </div>
          <g:Image
              ui:field='mergeCommit'
              resource='{ico.merge}'
              visible='false'
              title='Merge Commit'>
            <ui:attribute name='title'/>
          </g:Image>
        </th>
        <td><clippy:CopyableLabel styleName='{style.clippy}' ui:field='commitName'/></td>
        <td>
            <g:FlowPanel ui:field='webLinkPanel' styleName='{style.webLinkPanel}'/>
        </td>
      </tr>
      <tr ui:field='firstParent' style='display: none'>
        <th>
          <div class='{style.parent}'>
            <ui:msg>Parent(s)</ui:msg>
          </div>
          <div ui:field='parentNotCurrentText'
              title='Not current - rebase possible'
              class='{style.parentNotCurrent}'
              style='display: none' aria-hidden='true'/>
        </th>
        <td>
          <g:FlowPanel ui:field='parentCommits'/>
        </td>
      </tr>
      <tr>
        <th><ui:msg>Change-Id</ui:msg></th>
        <td><clippy:CopyableLabel styleName='{style.clippy}' ui:field='idText'/></td>
      </tr>
    </table>
  </g:HTMLPanel>
</ui:UiBinder>
