Change style of commit message box display and use UiBinder.

Put a box around the commit message with a title and emphasis on the
commit summary. The <pre> element for the body is hidden if only the
summary is submitted.

Changed CommitMessageBlock widget to use UiBinder.

Change-Id: I1a8642c99e1b2e57cfe04f26e6e359b9ad0476fe
This commit is contained in:
Keunhong Park
2012-06-14 14:37:17 -06:00
parent b95012f270
commit 8ab61558d9
2 changed files with 118 additions and 13 deletions

View File

@@ -14,29 +14,57 @@
package com.google.gerrit.client.changes;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.ui.CommentLinkProcessor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.PreElement;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwtexpui.safehtml.client.SafeHtml;
import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
public class CommitMessageBlock extends Composite {
private final HTML description;
interface Binder extends UiBinder<HTMLPanel, CommitMessageBlock> {
}
private static Binder uiBinder = GWT.create(Binder.class);
@UiField
PreElement commitSummaryPre;
@UiField
PreElement commitBodyPre;
public CommitMessageBlock() {
description = new HTML();
description.setStyleName(Gerrit.RESOURCES.css().changeScreenDescription());
initWidget(description);
initWidget(uiBinder.createAndBindUi(this));
}
public void display(final String commitMessage) {
SafeHtml msg = new SafeHtmlBuilder().append(commitMessage);
msg = msg.linkify();
msg = CommentLinkProcessor.apply(msg);
msg = new SafeHtmlBuilder().openElement("p").append(msg).closeElement("p");
msg = msg.replaceAll("\n\n", "</p><p>");
msg = msg.replaceAll("\n", "<br />");
SafeHtml.set(description, msg);
String[] splitCommitMessage = commitMessage.split("\n", 2);
String commitSummary = splitCommitMessage[0];
String commitBody = "";
if (splitCommitMessage.length > 1) {
commitBody = splitCommitMessage[1];
}
// Linkify commit summary
SafeHtml commitSummaryLinkified = new SafeHtmlBuilder().append(commitSummary);
commitSummaryLinkified = commitSummaryLinkified.linkify();
commitSummaryLinkified = CommentLinkProcessor.apply(commitSummaryLinkified);
commitSummaryPre.setInnerHTML(commitSummaryLinkified.asString());
// Hide commit body if there is no body
if (commitBody.trim().isEmpty()) {
commitBodyPre.getStyle().setDisplay(Display.NONE);
} else {
// Linkify commit body
SafeHtml commitBodyLinkified = new SafeHtmlBuilder().append(commitBody);
commitBodyLinkified = commitBodyLinkified.linkify();
commitBodyLinkified = CommentLinkProcessor.apply(commitBodyLinkified);
commitBodyPre.setInnerHTML(commitBodyLinkified.asString());
}
}
}

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2012 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'>
<ui:with field='res' type='com.google.gerrit.client.GerritResources'/>
<ui:style>
@eval selectionColor com.google.gerrit.client.Gerrit.getTheme().selectionColor;
@eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;
@eval backgroundColor com.google.gerrit.client.Gerrit.getTheme().backgroundColor;
.commitMessageTable {
border-collapse: separate;
border-spacing: 0;
margin-bottom: 10px;
}
.header {
background-color: trimColor;
white-space: nowrap;
color: textColor;
font-size: 10pt;
font-style: italic;
padding: 2px 6px 1px;
}
.contents {
border-bottom: 1px solid trimColor;
border-left: 1px solid trimColor;
border-right: 1px solid trimColor;
padding: 5px;
}
.contents span {
font-weight: bold;
}
.contents pre {
margin: 0;
}
.commitSummary {
font-weight: bold;
}
.commitBody {
margin-top: 10px;
}
</ui:style>
<g:HTMLPanel>
<table class='{style.commitMessageTable}'>
<tr><td class='{style.header}'>Commit Message</td></tr>
<tr><td class='{style.contents}'>
<pre class='{style.commitSummary} {res.css.changeScreenDescription}' ui:field='commitSummaryPre'/>
<pre class='{style.commitBody} {res.css.changeScreenDescription}' ui:field='commitBodyPre'/>
</td></tr>
</table>
</g:HTMLPanel>
</ui:UiBinder>