<?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="more_less.png"/>
  <ui:style 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: 70px; }
    .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 -->
    .parentWebLink {
      margin-left:16px;
      display: block;
    }

    .commit {
      margin-right: 3px;
      float: left;
    }
  </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><x:InlineHyperlink ui:field='authorNameEmail'
              title='Search for changes by this user'>
              <ui:attribute name='title'/>
            </x:InlineHyperlink>
        </td>
        <td ui:field='authorDate' class='{style.date}' colspan="2"/>
      </tr>
      <tr>
        <th><ui:msg>Committer</ui:msg></th>
        <td><x:InlineHyperlink ui:field='committerNameEmail'
              title='Search for changes by this user'>
              <ui:attribute name='title'/>
            </x:InlineHyperlink>
        </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><a style="margin-left:16px;" ui:field='browserLink' href=""/></td>
      </tr>
      <tr ui:field='parents' style='display: none'>
        <th><ui:msg>Parent(s)</ui:msg></th>
        <td>
          <g:FlowPanel ui:field='parentCommits'/>
        </td>
        <td>
          <g:FlowPanel ui:field='parentWebLinks'/>
        </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>
