Merge "Layout commit message on left of ChangeScreen2"
This commit is contained in:
@@ -55,7 +55,6 @@ import com.google.gerrit.reviewdb.client.Project.SubmitType;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.core.client.JsArray;
|
||||
import com.google.gwt.core.client.JsArrayString;
|
||||
import com.google.gwt.dom.client.AnchorElement;
|
||||
import com.google.gwt.dom.client.Element;
|
||||
import com.google.gwt.dom.client.NativeEvent;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
@@ -70,15 +69,16 @@ import com.google.gwt.uibinder.client.UiHandler;
|
||||
import com.google.gwt.user.client.DOM;
|
||||
import com.google.gwt.user.client.EventListener;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Anchor;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||
import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.ToggleButton;
|
||||
import com.google.gwtexpui.clippy.client.CopyableLabel;
|
||||
import com.google.gwtexpui.globalkey.client.GlobalKey;
|
||||
import com.google.gwtexpui.globalkey.client.KeyCommand;
|
||||
import com.google.gwtexpui.globalkey.client.KeyCommandSet;
|
||||
import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
|
||||
import com.google.gwtorm.client.KeyUtil;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
@@ -128,13 +128,12 @@ public class ChangeScreen2 extends Screen {
|
||||
|
||||
@UiField HTMLPanel headerLine;
|
||||
@UiField Style style;
|
||||
@UiField Element commitSubjectText;
|
||||
@UiField ToggleButton star;
|
||||
@UiField Reload reload;
|
||||
@UiField AnchorElement permalink;
|
||||
@UiField Anchor permalink;
|
||||
|
||||
@UiField Element reviewersText;
|
||||
@UiField Reviewers reviewers;
|
||||
@UiField Element changeIdText;
|
||||
@UiField Element ownerText;
|
||||
@UiField Element statusText;
|
||||
@UiField Image projectQuery;
|
||||
@@ -142,7 +141,6 @@ public class ChangeScreen2 extends Screen {
|
||||
@UiField InlineHyperlink branchLink;
|
||||
@UiField Element submitActionText;
|
||||
@UiField Element notMergeable;
|
||||
@UiField CopyableLabel idText;
|
||||
@UiField Topic topic;
|
||||
@UiField Element actionText;
|
||||
@UiField Element actionDate;
|
||||
@@ -236,7 +234,7 @@ public class ChangeScreen2 extends Screen {
|
||||
keysNavigation.add(new KeyCommand(0, 'R', Util.C.keyReloadChange()) {
|
||||
@Override
|
||||
public void onKeyPress(final KeyPressEvent event) {
|
||||
reload.reload();
|
||||
Gerrit.display(PageLinks.toChange(changeId));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -412,6 +410,12 @@ public class ChangeScreen2 extends Screen {
|
||||
onReply();
|
||||
}
|
||||
|
||||
@UiHandler("permalink")
|
||||
void onReload(ClickEvent e) {
|
||||
e.preventDefault();
|
||||
Gerrit.display(PageLinks.toChange(changeId));
|
||||
}
|
||||
|
||||
private void onReply() {
|
||||
if (Gerrit.isSignedIn()) {
|
||||
replyAction.onReply();
|
||||
@@ -650,6 +654,7 @@ public class ChangeScreen2 extends Screen {
|
||||
statusText.setInnerText(Util.toLongString(info.status()));
|
||||
}
|
||||
|
||||
renderCommitSubject(info);
|
||||
renderOwner(info);
|
||||
renderActionTextDate(info);
|
||||
renderHistory(info);
|
||||
@@ -662,10 +667,7 @@ public class ChangeScreen2 extends Screen {
|
||||
|
||||
star.setValue(info.starred());
|
||||
permalink.setHref(ChangeLink.permalink(changeId));
|
||||
changeIdText.setInnerText(String.valueOf(info.legacy_id()));
|
||||
idText.setText("Change-Id: " + info.change_id());
|
||||
idText.setPreviewText(info.change_id());
|
||||
reload.set(info);
|
||||
permalink.setText(String.valueOf(info.legacy_id()));
|
||||
topic.set(info, revision);
|
||||
commit.set(commentLinkProcessor, info, revision);
|
||||
related.set(info, revision);
|
||||
@@ -697,6 +699,13 @@ public class ChangeScreen2 extends Screen {
|
||||
setWindowTitle(sb.toString());
|
||||
}
|
||||
|
||||
private void renderCommitSubject(ChangeInfo info) {
|
||||
RevisionInfo rev = info.revision(revision);
|
||||
String sub = rev.commit().subject();
|
||||
commitSubjectText.setInnerSafeHtml(commentLinkProcessor.apply(
|
||||
new SafeHtmlBuilder().append(sub).linkify()));
|
||||
}
|
||||
|
||||
private void renderOwner(ChangeInfo info) {
|
||||
// TODO info card hover
|
||||
String name = info.owner().name() != null
|
||||
@@ -755,7 +764,7 @@ public class ChangeScreen2 extends Screen {
|
||||
updateAvailable = new UpdateAvailableBar() {
|
||||
@Override
|
||||
void onShow() {
|
||||
reload.reload();
|
||||
Gerrit.display(PageLinks.toChange(changeId));
|
||||
}
|
||||
|
||||
void onIgnore(Timestamp newTime) {
|
||||
|
@@ -18,15 +18,14 @@ limitations under the License.
|
||||
xmlns:ui='urn:ui:com.google.gwt.uibinder'
|
||||
xmlns:c='urn:import:com.google.gerrit.client.change'
|
||||
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'>
|
||||
xmlns:x='urn:import:com.google.gerrit.client.ui'>
|
||||
<ui:with field='ico' type='com.google.gerrit.client.GerritResources'/>
|
||||
<ui:with field='res' type='com.google.gerrit.client.change.Resources'/>
|
||||
<ui:style type='com.google.gerrit.client.change.ChangeScreen2.Style'>
|
||||
@eval textColor com.google.gerrit.client.Gerrit.getTheme().textColor;
|
||||
@eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;
|
||||
|
||||
@def INFO_WIDTH 450px;
|
||||
@def COMMIT_WIDTH 560px;
|
||||
@def HEADER_HEIGHT 29px;
|
||||
|
||||
.headerLine {
|
||||
@@ -35,60 +34,74 @@ limitations under the License.
|
||||
height: HEADER_HEIGHT;
|
||||
}
|
||||
|
||||
.idBlock {
|
||||
.subjectLine {
|
||||
position: relative;
|
||||
width: INFO_WIDTH;
|
||||
width: COMMIT_WIDTH;
|
||||
height: HEADER_HEIGHT;
|
||||
background-color: trimColor;
|
||||
color: textColor;
|
||||
font-family: sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
.star {
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
position: absolute;
|
||||
left: 5px;
|
||||
top: 5px;
|
||||
}
|
||||
.idLine, .idStatus {
|
||||
.subjectText {
|
||||
width: 460px;
|
||||
height: HEADER_HEIGHT;
|
||||
line-height: HEADER_HEIGHT;
|
||||
}
|
||||
.idLine {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 29px;
|
||||
width: 245px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.idStatus {
|
||||
.subjectButtons {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 26px;
|
||||
right: 3px;
|
||||
}
|
||||
.reload {
|
||||
|
||||
.infoLine {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: COMMIT_WIDTH;
|
||||
height: HEADER_HEIGHT;
|
||||
padding-left: 25px;
|
||||
}
|
||||
|
||||
.statusRight {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
height: HEADER_HEIGHT;
|
||||
}
|
||||
.starChangeStatus {
|
||||
display: inline-block;
|
||||
width: 325px;
|
||||
}
|
||||
.star {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 0;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
}
|
||||
.changeId {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 7px;
|
||||
right: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.headerButtons {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: INFO_WIDTH;
|
||||
height: HEADER_HEIGHT;
|
||||
padding-left: 5px;
|
||||
left: 22px;
|
||||
width: 300px;
|
||||
white-space: nowrap;
|
||||
line-height: HEADER_HEIGHT;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.statusText {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.popdown {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 0;
|
||||
div.popdown {
|
||||
display: inline-block;
|
||||
margin-top: 2px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.popdown button {
|
||||
cursor: pointer;
|
||||
height: 25px;
|
||||
@@ -110,18 +123,22 @@ limitations under the License.
|
||||
.popdown button.selected {
|
||||
font-weight: bold;
|
||||
}
|
||||
.headerLine button:disabled,
|
||||
.headerTable button:disabled,
|
||||
.popdown button:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.headerButtons button:disabled,
|
||||
#change_infoTable button:disabled,
|
||||
.popdown button:disabled {
|
||||
background-color: #999;
|
||||
background-image: -webkit-linear-gradient(top, #999, #999);
|
||||
}
|
||||
|
||||
.headerTable {
|
||||
.infoTable {
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
.headerTable th {
|
||||
.infoTable th {
|
||||
width: 60px;
|
||||
color: #444;
|
||||
font-weight: normal;
|
||||
@@ -130,10 +147,6 @@ limitations under the License.
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.clippy div {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.queryProject {
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
@@ -141,7 +154,8 @@ limitations under the License.
|
||||
|
||||
.infoColumn {
|
||||
width: 440px;
|
||||
padding-right: 10px;
|
||||
padding-left: 17px;
|
||||
padding-right: 17px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
@@ -158,12 +172,16 @@ limitations under the License.
|
||||
color: red;
|
||||
}
|
||||
|
||||
.commitColumn, .related {
|
||||
.commitColumn, .relatedColumn {
|
||||
padding: 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
.commitColumn {
|
||||
width: 600px;
|
||||
.commitColumn { width: COMMIT_WIDTH; }
|
||||
.relatedColumn { width: 375px; }
|
||||
|
||||
.commitSubjectText {
|
||||
font-family: monospace;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.labels {
|
||||
@@ -246,9 +264,12 @@ limitations under the License.
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.sectionHeader .headerButtons {
|
||||
position: absolute;
|
||||
left: 300px;
|
||||
top: 2px;
|
||||
height: 18px;
|
||||
border-left: 1px inset #fff;
|
||||
padding-left: 5px;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
@@ -261,57 +282,69 @@ limitations under the License.
|
||||
|
||||
<g:HTMLPanel>
|
||||
<g:HTMLPanel styleName='{style.headerLine}' ui:field='headerLine'>
|
||||
<div class='{style.idBlock}'>
|
||||
<c:StarIcon ui:field='star' styleName='{style.star}'/>
|
||||
<div class='{style.idLine}'>
|
||||
<ui:msg>Change <span ui:field='changeIdText'/> by <span ui:field='ownerText'/></ui:msg>
|
||||
</div>
|
||||
<div ui:field='statusText' class='{style.idStatus}'/>
|
||||
<a ui:field='permalink' class='{style.reload}'>
|
||||
<c:Reload ui:field='reload'
|
||||
title='Reload the change (Shortcut: R)'>
|
||||
<div class='{style.subjectLine}'>
|
||||
<div class='{style.subjectText}' ui:field='commitSubjectText'/>
|
||||
<div class='{style.subjectButtons} {style.headerButtons}'>
|
||||
<g:Button ui:field='editMessage'
|
||||
styleName=''
|
||||
visible='false'
|
||||
title='Edit commit message (Shortcut: e)'>
|
||||
<ui:attribute name='title'/>
|
||||
</c:Reload>
|
||||
</a>
|
||||
</div>
|
||||
<div class='{style.headerButtons}'>
|
||||
<g:Button ui:field='reply'
|
||||
styleName=''
|
||||
title='Reply and score (Shortcut: a)'>
|
||||
<ui:attribute name='title'/>
|
||||
<div><ui:msg>Reply…</ui:msg></div>
|
||||
</g:Button>
|
||||
<c:QuickApprove ui:field='quickApprove'
|
||||
styleName='{style.quickApprove}'
|
||||
title='Apply score with one click'>
|
||||
<ui:attribute name='title'/>
|
||||
</c:QuickApprove>
|
||||
<g:Button ui:field='editMessage'
|
||||
styleName=''
|
||||
visible='false'
|
||||
title='Edit commit message (Shortcut: e)'>
|
||||
<ui:attribute name='title'/>
|
||||
<div><ui:msg>Edit Message</ui:msg></div>
|
||||
</g:Button>
|
||||
<div><ui:msg>Edit Message</ui:msg></div>
|
||||
</g:Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<g:FlowPanel styleName='{style.popdown}'>
|
||||
<g:Button ui:field='includedIn' styleName='' visible="false">
|
||||
<div><ui:msg>Included in</ui:msg></div>
|
||||
</g:Button>
|
||||
<g:Button ui:field='revisions' styleName=''>
|
||||
<div><ui:msg>Revisions</ui:msg></div>
|
||||
</g:Button>
|
||||
<g:Button ui:field='download' styleName=''>
|
||||
<div><ui:msg>Download</ui:msg></div>
|
||||
</g:Button>
|
||||
</g:FlowPanel>
|
||||
<div class='{style.infoLine}'>
|
||||
<div class='{style.headerButtons}'>
|
||||
<g:Button ui:field='reply'
|
||||
styleName=''
|
||||
title='Reply and score (Shortcut: a)'>
|
||||
<ui:attribute name='title'/>
|
||||
<div><ui:msg>Reply…</ui:msg></div>
|
||||
</g:Button>
|
||||
<c:QuickApprove ui:field='quickApprove'
|
||||
styleName='{style.quickApprove}'
|
||||
title='Apply score with one click'>
|
||||
<ui:attribute name='title'/>
|
||||
</c:QuickApprove>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='{style.statusRight}'>
|
||||
<div class='{style.starChangeStatus}'>
|
||||
<c:StarIcon ui:field='star' styleName='{style.star}'/>
|
||||
<span class='{style.changeId}'>
|
||||
<ui:msg>Change <g:Anchor ui:field='permalink' title='Reload the change (Shortcut: R)'>
|
||||
<ui:attribute name='title'/>
|
||||
</g:Anchor> - <span ui:field='statusText' class='{style.statusText}'/></ui:msg>
|
||||
</span>
|
||||
</div>
|
||||
<g:FlowPanel styleName='{style.popdown}'>
|
||||
<g:Button ui:field='includedIn' styleName='' visible="false">
|
||||
<div><ui:msg>Included in</ui:msg></div>
|
||||
</g:Button>
|
||||
<g:Button ui:field='revisions' styleName=''>
|
||||
<div><ui:msg>Revisions</ui:msg></div>
|
||||
</g:Button>
|
||||
<g:Button ui:field='download' styleName=''>
|
||||
<div><ui:msg>Download</ui:msg></div>
|
||||
</g:Button>
|
||||
</g:FlowPanel>
|
||||
</div>
|
||||
</g:HTMLPanel>
|
||||
|
||||
<table class='{style.headerTable}'>
|
||||
<table class='{style.infoTable}'>
|
||||
<tr>
|
||||
<td class='{style.commitColumn}'>
|
||||
<c:CommitBox ui:field='commit'/>
|
||||
</td>
|
||||
<td class='{style.infoColumn}'>
|
||||
<table id='change_infoTable'>
|
||||
<tr>
|
||||
<th><ui:msg>Owner</ui:msg></th>
|
||||
<td ui:field='ownerText'/>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Reviewers</ui:msg></th>
|
||||
<td ui:field='reviewersText'/>
|
||||
@@ -345,6 +378,10 @@ limitations under the License.
|
||||
</x:InlineHyperlink>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Topic</ui:msg></th>
|
||||
<td><c:Topic ui:field='topic'/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Strategy</ui:msg></th>
|
||||
<td>
|
||||
@@ -357,29 +394,16 @@ limitations under the License.
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td colspan='2'><c:Actions ui:field='actions'/></td></tr>
|
||||
<tr>
|
||||
<th ui:field='actionText'/>
|
||||
<td ui:field='actionDate'/>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Change-Id</ui:msg></th>
|
||||
<td><clippy:CopyableLabel styleName='{style.clippy}' ui:field='idText'/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Topic</ui:msg></th>
|
||||
<td><c:Topic ui:field='topic'/></td>
|
||||
</tr>
|
||||
<tr><td colspan='2'><c:Actions ui:field='actions'/></td></tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<c:Labels ui:field='labels' styleName='{style.labels}'/>
|
||||
</td>
|
||||
|
||||
<td class='{style.commitColumn}'>
|
||||
<c:CommitBox ui:field='commit'/>
|
||||
</td>
|
||||
|
||||
<td class='{style.related}'>
|
||||
<td class='{style.relatedColumn}'>
|
||||
<c:RelatedChanges ui:field='related'/>
|
||||
</td>
|
||||
</tr>
|
||||
|
@@ -28,27 +28,61 @@ import com.google.gerrit.reviewdb.client.Change.Status;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.AnchorElement;
|
||||
import com.google.gwt.dom.client.Element;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.resources.client.CssResource;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.uibinder.client.UiHandler;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.HTML;
|
||||
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||
import com.google.gwt.user.client.ui.UIObject;
|
||||
import com.google.gwtexpui.clippy.client.CopyableLabel;
|
||||
import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
|
||||
|
||||
class CommitBox extends Composite {
|
||||
interface Binder extends UiBinder<HTMLPanel, CommitBox> {}
|
||||
private static final Binder uiBinder = GWT.create(Binder.class);
|
||||
|
||||
interface Style extends CssResource {
|
||||
String collapsed();
|
||||
String expanded();
|
||||
}
|
||||
|
||||
@UiField Style style;
|
||||
@UiField Element commitName;
|
||||
@UiField AnchorElement browserLink;
|
||||
@UiField InlineHyperlink authorNameEmail;
|
||||
@UiField Element authorDate;
|
||||
@UiField InlineHyperlink committerNameEmail;
|
||||
@UiField Element committerDate;
|
||||
@UiField Element commitMessageText;
|
||||
@UiField CopyableLabel idText;
|
||||
@UiField HTML text;
|
||||
@UiField ScrollPanel scroll;
|
||||
@UiField Button more;
|
||||
private boolean expanded;
|
||||
|
||||
CommitBox() {
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
addStyleName(style.collapsed());
|
||||
}
|
||||
|
||||
void onShowView() {
|
||||
more.setVisible(scroll.getMaximumVerticalScrollPosition() > 0);
|
||||
}
|
||||
|
||||
@UiHandler("more")
|
||||
void onMore(ClickEvent e) {
|
||||
if (expanded) {
|
||||
removeStyleName(style.expanded());
|
||||
addStyleName(style.collapsed());
|
||||
} else {
|
||||
removeStyleName(style.collapsed());
|
||||
addStyleName(style.expanded());
|
||||
}
|
||||
expanded = !expanded;
|
||||
}
|
||||
|
||||
void set(CommentLinkProcessor commentLinkProcessor,
|
||||
@@ -56,14 +90,24 @@ class CommitBox extends Composite {
|
||||
String revision) {
|
||||
RevisionInfo revInfo = change.revision(revision);
|
||||
CommitInfo commit = revInfo.commit();
|
||||
String sub = commit.subject();
|
||||
String msg = commit.message();
|
||||
if (msg.startsWith(sub)) {
|
||||
msg = msg.substring(sub.length());
|
||||
if (msg.length() > 0 && msg.charAt(0) == '\n') {
|
||||
msg = msg.substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
commitName.setInnerText(revision);
|
||||
idText.setText("Change-Id: " + change.change_id());
|
||||
idText.setPreviewText(change.change_id());
|
||||
formatLink(commit.author(), authorNameEmail,
|
||||
authorDate, change.status());
|
||||
formatLink(commit.committer(), committerNameEmail,
|
||||
committerDate, change.status());
|
||||
commitMessageText.setInnerSafeHtml(commentLinkProcessor.apply(
|
||||
new SafeHtmlBuilder().append(commit.message()).linkify()));
|
||||
text.setHTML(commentLinkProcessor.apply(
|
||||
new SafeHtmlBuilder().append(msg).linkify()));
|
||||
|
||||
GitwebLink gw = Gerrit.getGitwebLink();
|
||||
if (gw != null && gw.canLink(revInfo)) {
|
||||
@@ -86,7 +130,7 @@ class CommitBox extends Composite {
|
||||
return person.name() + " <" + person.email() + ">";
|
||||
}
|
||||
|
||||
public static String owner(GitPerson person) {
|
||||
private static String owner(GitPerson person) {
|
||||
if (person.email() != null) {
|
||||
return person.email();
|
||||
} else if (person.name() != null) {
|
||||
|
@@ -17,34 +17,82 @@ 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'>
|
||||
<ui:style>
|
||||
.commitHeader {
|
||||
border-spacing: 0;
|
||||
padding: 0;
|
||||
width: 564px;
|
||||
xmlns:x='urn:import:com.google.gerrit.client.ui'
|
||||
xmlns:clippy='urn:import:com.google.gwtexpui.clippy.client'>
|
||||
<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;
|
||||
}
|
||||
|
||||
.commitHeader th { width: 70px; }
|
||||
.commitHeader td { white-space: pre; }
|
||||
|
||||
.commitMessageBox { margin: 2px; }
|
||||
.commitMessage {
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||
border: 1px solid white;
|
||||
background-color: white;
|
||||
.text {
|
||||
font-family: monospace;
|
||||
white-space: pre;
|
||||
width: 47em;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
</ui:style>
|
||||
<g:HTMLPanel>
|
||||
<table class='{style.commitHeader}'>
|
||||
<tr>
|
||||
<th><ui:msg>Commit</ui:msg></th>
|
||||
<td ui:field='commitName'/>
|
||||
<td><a ui:field='browserLink' href=""/></td>
|
||||
</tr>
|
||||
<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'
|
||||
@@ -52,7 +100,7 @@ limitations under the License.
|
||||
<ui:attribute name='title'/>
|
||||
</x:InlineHyperlink>
|
||||
</td>
|
||||
<td ui:field='authorDate'/>
|
||||
<td ui:field='authorDate' class='{style.date}'/>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Committer</ui:msg></th>
|
||||
@@ -61,12 +109,17 @@ limitations under the License.
|
||||
<ui:attribute name='title'/>
|
||||
</x:InlineHyperlink>
|
||||
</td>
|
||||
<td ui:field='committerDate'/>
|
||||
<td ui:field='committerDate' class='{style.date}'/>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Commit</ui:msg></th>
|
||||
<td ui:field='commitName'/>
|
||||
<td><a ui:field='browserLink' href=""/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Change-Id</ui:msg></th>
|
||||
<td><clippy:CopyableLabel styleName='{style.clippy}' ui:field='idText'/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class='{style.commitMessageBox}'>
|
||||
<div class='{style.commitMessage}' ui:field='commitMessageText'/>
|
||||
</div>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
|
@@ -30,7 +30,7 @@ limitations under the License.
|
||||
<div class='{res.style.section}'>
|
||||
<c:NpTextArea
|
||||
visibleLines='30'
|
||||
characterWidth='72'
|
||||
characterWidth='78'
|
||||
styleName='{style.commitMessage}'
|
||||
ui:field='message'/>
|
||||
</div>
|
||||
|
@@ -1,77 +0,0 @@
|
||||
// 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.
|
||||
|
||||
package com.google.gerrit.client.change;
|
||||
|
||||
import com.google.gerrit.client.Gerrit;
|
||||
import com.google.gerrit.client.changes.ChangeInfo;
|
||||
import com.google.gerrit.common.PageLinks;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.event.dom.client.MouseOutEvent;
|
||||
import com.google.gwt.event.dom.client.MouseOutHandler;
|
||||
import com.google.gwt.event.dom.client.MouseOverEvent;
|
||||
import com.google.gwt.event.dom.client.MouseOverHandler;
|
||||
import com.google.gwt.user.client.Event;
|
||||
import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.impl.HyperlinkImpl;
|
||||
|
||||
class Reload extends Image implements ClickHandler,
|
||||
MouseOverHandler, MouseOutHandler {
|
||||
private static final HyperlinkImpl link = GWT.create(HyperlinkImpl.class);
|
||||
private Change.Id changeId;
|
||||
private boolean in;
|
||||
|
||||
Reload() {
|
||||
setResource(Resources.I.reload_black());
|
||||
addClickHandler(this);
|
||||
addMouseOverHandler(this);
|
||||
addMouseOutHandler(this);
|
||||
}
|
||||
|
||||
void set(ChangeInfo info) {
|
||||
changeId = info.legacy_id();
|
||||
}
|
||||
|
||||
void reload() {
|
||||
Gerrit.display(PageLinks.toChange(changeId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseOver(MouseOverEvent event) {
|
||||
if (!in) {
|
||||
in = true;
|
||||
setResource(Resources.I.reload_white());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseOut(MouseOutEvent event) {
|
||||
if (in) {
|
||||
in = false;
|
||||
setResource(Resources.I.reload_black());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(ClickEvent e) {
|
||||
if (link.handleAsClick(e.getNativeEvent().<Event> cast())) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
reload();
|
||||
}
|
||||
}
|
||||
}
|
@@ -25,8 +25,6 @@ public interface Resources extends ClientBundle {
|
||||
|
||||
@Source("star_open.png") ImageResource star_open();
|
||||
@Source("star_filled.png") ImageResource star_filled();
|
||||
@Source("reload_black.png") ImageResource reload_black();
|
||||
@Source("reload_white.png") ImageResource reload_white();
|
||||
@Source("remove_reviewer.png") ImageResource remove_reviewer();
|
||||
@Source("common.css") Style style();
|
||||
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 235 B |
Binary file not shown.
Before Width: | Height: | Size: 273 B |
Binary file not shown.
Before Width: | Height: | Size: 279 B |
Reference in New Issue
Block a user