Merge "Implement PatchSetSelectBox2"
This commit is contained in:
@@ -102,6 +102,11 @@ public class Dispatcher {
|
|||||||
return toPatch("", diffBase, id);
|
return toPatch("", diffBase, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String toPatchSideBySide2(PatchSet.Id diffBase,
|
||||||
|
PatchSet.Id revision, String fileName) {
|
||||||
|
return toPatch("cm", diffBase, revision, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
public static String toPatchUnified(final Patch.Key id) {
|
public static String toPatchUnified(final Patch.Key id) {
|
||||||
return toPatch("unified", null, id);
|
return toPatch("unified", null, id);
|
||||||
}
|
}
|
||||||
@@ -111,14 +116,18 @@ public class Dispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String toPatch(String type, PatchSet.Id diffBase, Patch.Key id) {
|
private static String toPatch(String type, PatchSet.Id diffBase, Patch.Key id) {
|
||||||
PatchSet.Id ps = id.getParentKey();
|
return toPatch(type, diffBase, id.getParentKey(), id.get());
|
||||||
Change.Id c = ps.getParentKey();
|
}
|
||||||
|
|
||||||
|
private static String toPatch(String type, PatchSet.Id diffBase,
|
||||||
|
PatchSet.Id revision, String fileName) {
|
||||||
|
Change.Id c = revision.getParentKey();
|
||||||
StringBuilder p = new StringBuilder();
|
StringBuilder p = new StringBuilder();
|
||||||
p.append("/c/").append(c).append("/");
|
p.append("/c/").append(c).append("/");
|
||||||
if (diffBase != null) {
|
if (diffBase != null) {
|
||||||
p.append(diffBase.get()).append("..");
|
p.append(diffBase.get()).append("..");
|
||||||
}
|
}
|
||||||
p.append(ps.get()).append("/").append(KeyUtil.encode(id.get()));
|
p.append(revision.get()).append("/").append(KeyUtil.encode(fileName));
|
||||||
if (type != null && !type.isEmpty()) {
|
if (type != null && !type.isEmpty()) {
|
||||||
p.append(",").append(type);
|
p.append(",").append(type);
|
||||||
}
|
}
|
||||||
|
@@ -84,8 +84,6 @@ import com.google.gwtorm.client.KeyUtil;
|
|||||||
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -645,12 +643,7 @@ public class ChangeScreen2 extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JsArray<RevisionInfo> list = info.revisions().values();
|
JsArray<RevisionInfo> list = info.revisions().values();
|
||||||
Collections.sort(Natives.asList(list), new Comparator<RevisionInfo>() {
|
RevisionInfo.sortRevisionInfoByNumber(list);
|
||||||
@Override
|
|
||||||
public int compare(RevisionInfo a, RevisionInfo b) {
|
|
||||||
return a._number() - b._number();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
int selected = -1;
|
int selected = -1;
|
||||||
for (int i = 0; i < list.length(); i++) {
|
for (int i = 0; i < list.length(); i++) {
|
||||||
|
@@ -29,6 +29,8 @@ import com.google.gwt.core.client.JsArrayString;
|
|||||||
import com.google.gwtjsonrpc.client.impl.ser.JavaSqlTimestamp_JsonSerializer;
|
import com.google.gwtjsonrpc.client.impl.ser.JavaSqlTimestamp_JsonSerializer;
|
||||||
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
@@ -209,12 +211,22 @@ public class ChangeInfo extends JavaScriptObject {
|
|||||||
public final native boolean has_actions() /*-{ return this.hasOwnProperty('actions') }-*/;
|
public final native boolean has_actions() /*-{ return this.hasOwnProperty('actions') }-*/;
|
||||||
public final native NativeMap<ActionInfo> actions() /*-{ return this.actions; }-*/;
|
public final native NativeMap<ActionInfo> actions() /*-{ return this.actions; }-*/;
|
||||||
|
|
||||||
|
public static void sortRevisionInfoByNumber(JsArray<RevisionInfo> list) {
|
||||||
|
Collections.sort(Natives.asList(list), new Comparator<RevisionInfo>() {
|
||||||
|
@Override
|
||||||
|
public int compare(RevisionInfo a, RevisionInfo b) {
|
||||||
|
return a._number() - b._number();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
protected RevisionInfo () {
|
protected RevisionInfo () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CommitInfo extends JavaScriptObject {
|
public static class CommitInfo extends JavaScriptObject {
|
||||||
public final native String commit() /*-{ return this.commit; }-*/;
|
public final native String commit() /*-{ return this.commit; }-*/;
|
||||||
|
public final native JsArray<CommitInfo> parents() /*-{ return this.parents; }-*/;
|
||||||
public final native GitPerson author() /*-{ return this.author; }-*/;
|
public final native GitPerson author() /*-{ return this.author; }-*/;
|
||||||
public final native GitPerson committer() /*-{ return this.committer; }-*/;
|
public final native GitPerson committer() /*-{ return this.committer; }-*/;
|
||||||
public final native String subject() /*-{ return this.subject; }-*/;
|
public final native String subject() /*-{ return this.subject; }-*/;
|
||||||
|
@@ -14,8 +14,11 @@
|
|||||||
|
|
||||||
package com.google.gerrit.client.diff;
|
package com.google.gerrit.client.diff;
|
||||||
|
|
||||||
|
import com.google.gerrit.client.changes.ChangeInfo.RevisionInfo;
|
||||||
import com.google.gerrit.client.diff.SideBySide2.DisplaySide;
|
import com.google.gerrit.client.diff.SideBySide2.DisplaySide;
|
||||||
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.core.client.JsArray;
|
||||||
import com.google.gwt.dom.client.Element;
|
import com.google.gwt.dom.client.Element;
|
||||||
import com.google.gwt.resources.client.CssResource;
|
import com.google.gwt.resources.client.CssResource;
|
||||||
import com.google.gwt.uibinder.client.UiBinder;
|
import com.google.gwt.uibinder.client.UiBinder;
|
||||||
@@ -55,19 +58,19 @@ class DiffTable extends Composite {
|
|||||||
SidePanel sidePanel;
|
SidePanel sidePanel;
|
||||||
|
|
||||||
@UiField
|
@UiField
|
||||||
Element patchsetNavRow;
|
Element patchSetNavRow;
|
||||||
|
|
||||||
@UiField
|
@UiField
|
||||||
Element patchsetNavCellA;
|
Element patchSetNavCellA;
|
||||||
|
|
||||||
@UiField
|
@UiField
|
||||||
Element patchsetNavCellB;
|
Element patchSetNavCellB;
|
||||||
|
|
||||||
@UiField(provided = true)
|
@UiField(provided = true)
|
||||||
PatchSelectBox2 patchSelectBoxA;
|
PatchSetSelectBox2 patchSetSelectBoxA;
|
||||||
|
|
||||||
@UiField(provided = true)
|
@UiField(provided = true)
|
||||||
PatchSelectBox2 patchSelectBoxB;
|
PatchSetSelectBox2 patchSetSelectBoxB;
|
||||||
|
|
||||||
@UiField
|
@UiField
|
||||||
Element fileCommentRow;
|
Element fileCommentRow;
|
||||||
@@ -89,9 +92,12 @@ class DiffTable extends Composite {
|
|||||||
|
|
||||||
private SideBySide2 host;
|
private SideBySide2 host;
|
||||||
|
|
||||||
DiffTable(SideBySide2 host, String path) {
|
DiffTable(SideBySide2 host, PatchSet.Id base, PatchSet.Id revision, String path) {
|
||||||
patchSelectBoxA = new PatchSelectBox2(this, DisplaySide.A);
|
patchSetSelectBoxA = new PatchSetSelectBox2(
|
||||||
patchSelectBoxB = new PatchSelectBox2(this, DisplaySide.B);
|
this, DisplaySide.A, revision.getParentKey(), base, path);
|
||||||
|
patchSetSelectBoxB = new PatchSetSelectBox2(
|
||||||
|
this, DisplaySide.B, revision.getParentKey(), revision, path);
|
||||||
|
PatchSetSelectBox2.link(patchSetSelectBoxA, patchSetSelectBoxB);
|
||||||
fileCommentPanelA = new FileCommentPanel(host, this, path, DisplaySide.A);
|
fileCommentPanelA = new FileCommentPanel(host, this, path, DisplaySide.A);
|
||||||
fileCommentPanelB = new FileCommentPanel(host, this, path, DisplaySide.B);
|
fileCommentPanelB = new FileCommentPanel(host, this, path, DisplaySide.B);
|
||||||
initWidget(uiBinder.createAndBindUi(this));
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
@@ -104,7 +110,7 @@ class DiffTable extends Composite {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void updateFileCommentVisibility(boolean forceHide) {
|
void updateFileCommentVisibility(boolean forceHide) {
|
||||||
UIObject.setVisible(patchsetNavRow, !forceHide);
|
UIObject.setVisible(patchSetNavRow, !forceHide);
|
||||||
if (forceHide || (fileCommentPanelA.getBoxCount() == 0 &&
|
if (forceHide || (fileCommentPanelA.getBoxCount() == 0 &&
|
||||||
fileCommentPanelB.getBoxCount() == 0)) {
|
fileCommentPanelB.getBoxCount() == 0)) {
|
||||||
UIObject.setVisible(fileCommentRow, false);
|
UIObject.setVisible(fileCommentRow, false);
|
||||||
@@ -132,7 +138,12 @@ class DiffTable extends Composite {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getHeaderHeight() {
|
int getHeaderHeight() {
|
||||||
return fileCommentRow.getOffsetHeight() + patchSelectBoxA.getOffsetHeight();
|
return fileCommentRow.getOffsetHeight() + patchSetSelectBoxA.getOffsetHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setUpPatchSetNav(JsArray<RevisionInfo> list) {
|
||||||
|
patchSetSelectBoxA.setUpPatchSetNav(list);
|
||||||
|
patchSetSelectBoxB.setUpPatchSetNav(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add(Widget widget) {
|
void add(Widget widget) {
|
||||||
|
@@ -118,12 +118,12 @@ limitations under the License.
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<table class='{style.table}'>
|
<table class='{style.table}'>
|
||||||
<tr ui:field='patchsetNavRow' class='{style.padding}'>
|
<tr ui:field='patchSetNavRow' class='{style.padding}'>
|
||||||
<td ui:field='patchsetNavCellA'>
|
<td ui:field='patchSetNavCellA'>
|
||||||
<d:PatchSelectBox2 ui:field='patchSelectBoxA' />
|
<d:PatchSetSelectBox2 ui:field='patchSetSelectBoxA' />
|
||||||
</td>
|
</td>
|
||||||
<td ui:field='patchsetNavCellB'>
|
<td ui:field='patchSetNavCellB'>
|
||||||
<d:PatchSelectBox2 ui:field='patchSelectBoxB' />
|
<d:PatchSetSelectBox2 ui:field='patchSetSelectBoxB' />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr ui:field='fileCommentRow' class='{style.fileCommentRow}'>
|
<tr ui:field='fileCommentRow' class='{style.fileCommentRow}'>
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
package com.google.gerrit.client.diff;
|
package com.google.gerrit.client.diff;
|
||||||
|
|
||||||
|
import com.google.gerrit.client.changes.Util;
|
||||||
import com.google.gerrit.client.rpc.Natives;
|
import com.google.gerrit.client.rpc.Natives;
|
||||||
import com.google.gerrit.reviewdb.client.Patch;
|
import com.google.gerrit.reviewdb.client.Patch;
|
||||||
import com.google.gwt.core.client.JavaScriptObject;
|
import com.google.gwt.core.client.JavaScriptObject;
|
||||||
@@ -46,6 +47,14 @@ public class FileInfo extends JavaScriptObject {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getFileName(String path) {
|
||||||
|
String fileName = Patch.COMMIT_MSG.equals(path)
|
||||||
|
? Util.C.commitMessage()
|
||||||
|
: path;
|
||||||
|
int s = fileName.lastIndexOf('/');
|
||||||
|
return s >= 0 ? fileName.substring(s + 1) : fileName;
|
||||||
|
}
|
||||||
|
|
||||||
protected FileInfo() {
|
protected FileInfo() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -169,7 +169,7 @@ class Header extends Composite {
|
|||||||
if (info != null) {
|
if (info != null) {
|
||||||
final String url = url(info);
|
final String url = url(info);
|
||||||
link.setTargetHistoryToken(url);
|
link.setTargetHistoryToken(url);
|
||||||
link.setTitle(getFileName(info.path()));
|
link.setTitle(FileInfo.getFileName(info.path()));
|
||||||
keys.add(new KeyCommand(0, key, help) {
|
keys.add(new KeyCommand(0, key, help) {
|
||||||
@Override
|
@Override
|
||||||
public void onKeyPress(KeyPressEvent event) {
|
public void onKeyPress(KeyPressEvent event) {
|
||||||
@@ -187,14 +187,6 @@ class Header extends Composite {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getFileName(String path) {
|
|
||||||
String fileName = Patch.COMMIT_MSG.equals(path)
|
|
||||||
? Util.C.commitMessage()
|
|
||||||
: path;
|
|
||||||
int s = fileName.lastIndexOf('/');
|
|
||||||
return s >= 0 ? fileName.substring(s + 1) : fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean hasPrev() {
|
boolean hasPrev() {
|
||||||
return hasPrev;
|
return hasPrev;
|
||||||
}
|
}
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
<?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'>
|
|
||||||
<ui:with field='res' type='com.google.gerrit.client.GerritResources'/>
|
|
||||||
<g:HTMLPanel>
|
|
||||||
<g:Image ui:field='icon' resource='{res.addFileComment}'/>
|
|
||||||
</g:HTMLPanel>
|
|
||||||
</ui:UiBinder>
|
|
@@ -0,0 +1,118 @@
|
|||||||
|
//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.diff;
|
||||||
|
|
||||||
|
import com.google.gerrit.client.Dispatcher;
|
||||||
|
import com.google.gerrit.client.Gerrit;
|
||||||
|
import com.google.gerrit.client.changes.ChangeInfo.RevisionInfo;
|
||||||
|
import com.google.gerrit.client.diff.SideBySide2.DisplaySide;
|
||||||
|
import com.google.gerrit.client.patches.PatchUtil;
|
||||||
|
import com.google.gerrit.client.ui.InlineHyperlink;
|
||||||
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.core.client.JsArray;
|
||||||
|
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.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.HTMLPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HTMLPanel to select among patch sets
|
||||||
|
* TODO: Implement download link.
|
||||||
|
*/
|
||||||
|
class PatchSetSelectBox2 extends Composite {
|
||||||
|
interface Binder extends UiBinder<HTMLPanel, PatchSetSelectBox2> {}
|
||||||
|
private static final Binder uiBinder = GWT.create(Binder.class);
|
||||||
|
|
||||||
|
interface BoxStyle extends CssResource {
|
||||||
|
String selected();
|
||||||
|
}
|
||||||
|
|
||||||
|
@UiField Image icon;
|
||||||
|
@UiField HTMLPanel linkPanel;
|
||||||
|
@UiField BoxStyle style;
|
||||||
|
|
||||||
|
private DiffTable table;
|
||||||
|
private DisplaySide side;
|
||||||
|
private boolean sideA;
|
||||||
|
private String path;
|
||||||
|
private Change.Id changeId;
|
||||||
|
private PatchSet.Id revision;
|
||||||
|
private PatchSet.Id idActive;
|
||||||
|
private PatchSetSelectBox2 other;
|
||||||
|
|
||||||
|
PatchSetSelectBox2(DiffTable table, final DisplaySide side,
|
||||||
|
final Change.Id changeId, final PatchSet.Id revision, String path) {
|
||||||
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
|
icon.setTitle(PatchUtil.C.addFileCommentToolTip());
|
||||||
|
icon.addStyleName(Gerrit.RESOURCES.css().link());
|
||||||
|
this.table = table;
|
||||||
|
this.side = side;
|
||||||
|
this.sideA = side == DisplaySide.A;
|
||||||
|
this.changeId = changeId;
|
||||||
|
this.revision = revision;
|
||||||
|
this.idActive = (sideA && revision == null) ? null : revision;
|
||||||
|
this.path = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setUpPatchSetNav(JsArray<RevisionInfo> list) {
|
||||||
|
InlineHyperlink baseLink = null;
|
||||||
|
InlineHyperlink selectedLink = null;
|
||||||
|
if (sideA) {
|
||||||
|
baseLink = createLink(PatchUtil.C.patchBase(), null);
|
||||||
|
linkPanel.add(baseLink);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < list.length(); i++) {
|
||||||
|
RevisionInfo r = list.get(i);
|
||||||
|
InlineHyperlink link = createLink(
|
||||||
|
String.valueOf(r._number()), new PatchSet.Id(changeId, r._number()));
|
||||||
|
linkPanel.add(link);
|
||||||
|
if (revision != null && r._number() == revision.get()) {
|
||||||
|
selectedLink = link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (selectedLink != null) {
|
||||||
|
selectedLink.setStyleName(style.selected());
|
||||||
|
} else if (sideA) {
|
||||||
|
baseLink.setStyleName(style.selected());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void link(PatchSetSelectBox2 a, PatchSetSelectBox2 b) {
|
||||||
|
a.other = b;
|
||||||
|
b.other = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
private InlineHyperlink createLink(String label, PatchSet.Id id) {
|
||||||
|
assert other != null;
|
||||||
|
if (sideA) {
|
||||||
|
assert other.idActive != null;
|
||||||
|
}
|
||||||
|
return new InlineHyperlink(label, Dispatcher.toPatchSideBySide2(
|
||||||
|
sideA ? id : other.idActive,
|
||||||
|
sideA ? other.idActive : id,
|
||||||
|
path));
|
||||||
|
}
|
||||||
|
|
||||||
|
@UiHandler("icon")
|
||||||
|
void onIconClick(ClickEvent e) {
|
||||||
|
table.createOrEditFileComment(side);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,73 @@
|
|||||||
|
<?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'>
|
||||||
|
<ui:with field='res' type='com.google.gerrit.client.GerritResources'/>
|
||||||
|
<ui:with field='patchConstants'
|
||||||
|
type='com.google.gerrit.client.patches.PatchConstants'/>
|
||||||
|
<ui:style type='com.google.gerrit.client.diff.PatchSetSelectBox2.BoxStyle'>
|
||||||
|
@eval selectionColor com.google.gerrit.client.Gerrit.getTheme().selectionColor;
|
||||||
|
.table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.linkCell {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 12px;
|
||||||
|
white-space: normal;
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.linkCell div {
|
||||||
|
padding-left: 3px;
|
||||||
|
padding-right: 3px;
|
||||||
|
vertical-align: middle;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.linkCell a {
|
||||||
|
padding-left: 3px;
|
||||||
|
padding-right: 3px;
|
||||||
|
text-decoration: none;
|
||||||
|
vertical-align: middle;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.selected {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: selectionColor;
|
||||||
|
}
|
||||||
|
.hidden {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.iconCell {
|
||||||
|
width: 16px;
|
||||||
|
}
|
||||||
|
</ui:style>
|
||||||
|
<g:HTMLPanel>
|
||||||
|
<table class='{style.table}'>
|
||||||
|
<td class='{style.iconCell}'>
|
||||||
|
<g:Image ui:field='icon' resource='{res.addFileComment}'/>
|
||||||
|
</td>
|
||||||
|
<td class='{style.linkCell}'>
|
||||||
|
<g:HTMLPanel ui:field='linkPanel'>
|
||||||
|
<g:Label>
|
||||||
|
<ui:text from='{patchConstants.patchSet}'/>
|
||||||
|
</g:Label>
|
||||||
|
</g:HTMLPanel>
|
||||||
|
</td>
|
||||||
|
</table>
|
||||||
|
</g:HTMLPanel>
|
||||||
|
</ui:UiBinder>
|
@@ -16,6 +16,10 @@ package com.google.gerrit.client.diff;
|
|||||||
|
|
||||||
import com.google.gerrit.client.Gerrit;
|
import com.google.gerrit.client.Gerrit;
|
||||||
import com.google.gerrit.client.change.ChangeScreen2;
|
import com.google.gerrit.client.change.ChangeScreen2;
|
||||||
|
import com.google.gerrit.client.changes.ChangeApi;
|
||||||
|
import com.google.gerrit.client.changes.ChangeInfo;
|
||||||
|
import com.google.gerrit.client.changes.ChangeInfo.RevisionInfo;
|
||||||
|
import com.google.gerrit.client.changes.ChangeList;
|
||||||
import com.google.gerrit.client.changes.CommentApi;
|
import com.google.gerrit.client.changes.CommentApi;
|
||||||
import com.google.gerrit.client.changes.CommentInfo;
|
import com.google.gerrit.client.changes.CommentInfo;
|
||||||
import com.google.gerrit.client.diff.DiffInfo.Region;
|
import com.google.gerrit.client.diff.DiffInfo.Region;
|
||||||
@@ -29,10 +33,12 @@ import com.google.gerrit.client.projects.ConfigInfoCache;
|
|||||||
import com.google.gerrit.client.rpc.CallbackGroup;
|
import com.google.gerrit.client.rpc.CallbackGroup;
|
||||||
import com.google.gerrit.client.rpc.GerritCallback;
|
import com.google.gerrit.client.rpc.GerritCallback;
|
||||||
import com.google.gerrit.client.rpc.NativeMap;
|
import com.google.gerrit.client.rpc.NativeMap;
|
||||||
|
import com.google.gerrit.client.rpc.RestApi;
|
||||||
import com.google.gerrit.client.rpc.ScreenLoadCallback;
|
import com.google.gerrit.client.rpc.ScreenLoadCallback;
|
||||||
import com.google.gerrit.client.ui.CommentLinkProcessor;
|
import com.google.gerrit.client.ui.CommentLinkProcessor;
|
||||||
import com.google.gerrit.client.ui.Screen;
|
import com.google.gerrit.client.ui.Screen;
|
||||||
import com.google.gerrit.common.PageLinks;
|
import com.google.gerrit.common.PageLinks;
|
||||||
|
import com.google.gerrit.common.changes.ListChangesOption;
|
||||||
import com.google.gerrit.common.changes.Side;
|
import com.google.gerrit.common.changes.Side;
|
||||||
import com.google.gerrit.reviewdb.client.AccountDiffPreference;
|
import com.google.gerrit.reviewdb.client.AccountDiffPreference;
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
@@ -85,6 +91,7 @@ import net.codemirror.lib.TextMarker.FromTo;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -106,6 +113,7 @@ public class SideBySide2 extends Screen {
|
|||||||
@UiField(provided = true)
|
@UiField(provided = true)
|
||||||
DiffTable diffTable;
|
DiffTable diffTable;
|
||||||
|
|
||||||
|
private final Change.Id changeId;
|
||||||
private final PatchSet.Id base;
|
private final PatchSet.Id base;
|
||||||
private final PatchSet.Id revision;
|
private final PatchSet.Id revision;
|
||||||
private final String path;
|
private final String path;
|
||||||
@@ -145,6 +153,7 @@ public class SideBySide2 extends Screen {
|
|||||||
String path) {
|
String path) {
|
||||||
this.base = base;
|
this.base = base;
|
||||||
this.revision = revision;
|
this.revision = revision;
|
||||||
|
this.changeId = revision.getParentKey();
|
||||||
this.path = path;
|
this.path = path;
|
||||||
|
|
||||||
pref = Gerrit.getAccountDiffPreference();
|
pref = Gerrit.getAccountDiffPreference();
|
||||||
@@ -158,7 +167,7 @@ public class SideBySide2 extends Screen {
|
|||||||
addDomHandler(GlobalKey.STOP_PROPAGATION, KeyPressEvent.getType());
|
addDomHandler(GlobalKey.STOP_PROPAGATION, KeyPressEvent.getType());
|
||||||
keysNavigation = new KeyCommandSet(Gerrit.C.sectionNavigation());
|
keysNavigation = new KeyCommandSet(Gerrit.C.sectionNavigation());
|
||||||
add(header = new Header(keysNavigation, revision, path));
|
add(header = new Header(keysNavigation, revision, path));
|
||||||
add(diffTable = new DiffTable(this, path));
|
add(diffTable = new DiffTable(this, base, revision, path));
|
||||||
add(uiBinder.createAndBindUi(this));
|
add(uiBinder.createAndBindUi(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +215,7 @@ public class SideBySide2 extends Screen {
|
|||||||
CommentApi.drafts(revision, group.add(getCommentCallback(DisplaySide.B, true)));
|
CommentApi.drafts(revision, group.add(getCommentCallback(DisplaySide.B, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigInfoCache.get(revision.getParentKey(), group.addFinal(
|
ConfigInfoCache.get(changeId, group.addFinal(
|
||||||
new ScreenLoadCallback<ConfigInfoCache.Entry>(SideBySide2.this) {
|
new ScreenLoadCallback<ConfigInfoCache.Entry>(SideBySide2.this) {
|
||||||
@Override
|
@Override
|
||||||
protected void preDisplay(ConfigInfoCache.Entry result) {
|
protected void preDisplay(ConfigInfoCache.Entry result) {
|
||||||
@@ -218,6 +227,18 @@ public class SideBySide2 extends Screen {
|
|||||||
display(diffInfo);
|
display(diffInfo);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
RestApi call = ChangeApi.detail(changeId.get());
|
||||||
|
ChangeList.addOptions(call, EnumSet.of(
|
||||||
|
ListChangesOption.ALL_REVISIONS));
|
||||||
|
call.get(new GerritCallback<ChangeInfo>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(ChangeInfo info) {
|
||||||
|
info.revisions().copyKeysIntoChildren("name");
|
||||||
|
JsArray<RevisionInfo> list = info.revisions().values();
|
||||||
|
RevisionInfo.sortRevisionInfoByNumber(list);
|
||||||
|
diffTable.setUpPatchSetNav(list);
|
||||||
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -297,8 +318,8 @@ public class SideBySide2 extends Screen {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
cm.addKeyMap(KeyMap.create()
|
cm.addKeyMap(KeyMap.create()
|
||||||
.on("'a'", openReplyBox())
|
.on("'a'", upToChange(true))
|
||||||
.on("'u'", upToChange())
|
.on("'u'", upToChange(false))
|
||||||
.on("'r'", toggleReviewed())
|
.on("'r'", toggleReviewed())
|
||||||
.on("'o'", toggleOpenBox(cm))
|
.on("'o'", toggleOpenBox(cm))
|
||||||
.on("Enter", toggleOpenBox(cm))
|
.on("Enter", toggleOpenBox(cm))
|
||||||
@@ -354,7 +375,7 @@ public class SideBySide2 extends Screen {
|
|||||||
keysAction.add(new KeyCommand(0, 'a', PatchUtil.C.openReply()) {
|
keysAction.add(new KeyCommand(0, 'a', PatchUtil.C.openReply()) {
|
||||||
@Override
|
@Override
|
||||||
public void onKeyPress(KeyPressEvent event) {
|
public void onKeyPress(KeyPressEvent event) {
|
||||||
openReplyBox().run();
|
upToChange(true).run();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1074,14 +1095,13 @@ public class SideBySide2 extends Screen {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private Runnable openReplyBox() {
|
private Runnable upToChange(final boolean openReplyBox) {
|
||||||
return new Runnable() {
|
return new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
Change.Id id = revision.getParentKey();
|
|
||||||
String rev = String.valueOf(revision.get());
|
String rev = String.valueOf(revision.get());
|
||||||
Gerrit.display(
|
Gerrit.display(
|
||||||
PageLinks.toChange2(id, rev),
|
PageLinks.toChange2(changeId, rev),
|
||||||
new ChangeScreen2(id, rev, true));
|
new ChangeScreen2(changeId, rev, openReplyBox));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1111,16 +1131,6 @@ public class SideBySide2 extends Screen {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private Runnable upToChange() {
|
|
||||||
return new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
Gerrit.display(PageLinks.toChange2(
|
|
||||||
revision.getParentKey(),
|
|
||||||
String.valueOf(revision.get())));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private Runnable toggleReviewed() {
|
private Runnable toggleReviewed() {
|
||||||
return new Runnable() {
|
return new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Reference in New Issue
Block a user