<?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 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 -->
    .webLinkPanel a:first-child {
      margin-left:16px;
    }
    .webLinkPanel>a {
      margin-left:2px;
    }

    .parentWebLink a:first-child {
      margin-left:16px;
    }
    .parentWebLink>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;
    }
  </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='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' styleName='{style.parentWebLink}'/>
        </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>
