ChangeScreen2: Auto-focus to submit button
After scoring a change with a maximum value in a radio group focus to the submit button if it is enabled. This allows committers to submit a change with just Return/Enter/Space after posting Code-Review+2. Change-Id: Ide28d62c24cfe7fd7e044d8b3b74ac5d246b8739
This commit is contained in:
@@ -491,7 +491,7 @@ public class Dispatcher {
|
|||||||
if (rest.isEmpty()) {
|
if (rest.isEmpty()) {
|
||||||
Gerrit.display(token, panel== null
|
Gerrit.display(token, panel== null
|
||||||
? (isChangeScreen2()
|
? (isChangeScreen2()
|
||||||
? new ChangeScreen2(id, null, null, false)
|
? new ChangeScreen2(id, null, null, false, false)
|
||||||
: new ChangeScreen(id))
|
: new ChangeScreen(id))
|
||||||
: new NotFoundScreen());
|
: new NotFoundScreen());
|
||||||
return;
|
return;
|
||||||
@@ -528,7 +528,7 @@ public class Dispatcher {
|
|||||||
base != null
|
base != null
|
||||||
? String.valueOf(base.get())
|
? String.valueOf(base.get())
|
||||||
: null,
|
: null,
|
||||||
String.valueOf(ps.get()), false)
|
String.valueOf(ps.get()), false, false)
|
||||||
: new ChangeScreen(id));
|
: new ChangeScreen(id));
|
||||||
} else if ("publish".equals(panel)) {
|
} else if ("publish".equals(panel)) {
|
||||||
publish(ps);
|
publish(ps);
|
||||||
|
@@ -129,6 +129,7 @@ public class ChangeScreen2 extends Screen {
|
|||||||
private Timestamp lastDisplayedUpdate;
|
private Timestamp lastDisplayedUpdate;
|
||||||
private UpdateAvailableBar updateAvailable;
|
private UpdateAvailableBar updateAvailable;
|
||||||
private boolean openReplyBox;
|
private boolean openReplyBox;
|
||||||
|
private boolean focusSubmit;
|
||||||
private boolean loaded;
|
private boolean loaded;
|
||||||
|
|
||||||
@UiField HTMLPanel headerLine;
|
@UiField HTMLPanel headerLine;
|
||||||
@@ -175,11 +176,14 @@ public class ChangeScreen2 extends Screen {
|
|||||||
private PatchSetsAction patchSetsAction;
|
private PatchSetsAction patchSetsAction;
|
||||||
private DownloadAction downloadAction;
|
private DownloadAction downloadAction;
|
||||||
|
|
||||||
public ChangeScreen2(Change.Id changeId, String base, String revision, boolean openReplyBox) {
|
public ChangeScreen2(Change.Id changeId,
|
||||||
|
String base, String revision,
|
||||||
|
boolean openReplyBox, boolean focusSubmit) {
|
||||||
this.changeId = changeId;
|
this.changeId = changeId;
|
||||||
this.base = normalize(base);
|
this.base = normalize(base);
|
||||||
this.revision = normalize(revision);
|
this.revision = normalize(revision);
|
||||||
this.openReplyBox = openReplyBox;
|
this.openReplyBox = openReplyBox;
|
||||||
|
this.focusSubmit = focusSubmit;
|
||||||
add(uiBinder.createAndBindUi(this));
|
add(uiBinder.createAndBindUi(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,6 +422,8 @@ public class ChangeScreen2 extends Screen {
|
|||||||
|
|
||||||
if (openReplyBox) {
|
if (openReplyBox) {
|
||||||
onReply();
|
onReply();
|
||||||
|
} else if (focusSubmit && actions.isSubmitEnabled()) {
|
||||||
|
actions.submit.setFocus(true);
|
||||||
} else {
|
} else {
|
||||||
String prior = Gerrit.getPriorView();
|
String prior = Gerrit.getPriorView();
|
||||||
if (prior != null && prior.startsWith("/c/")) {
|
if (prior != null && prior.startsWith("/c/")) {
|
||||||
|
@@ -112,7 +112,9 @@ class QuickApprove extends Button implements ClickHandler {
|
|||||||
.post(input, new GerritCallback<ReviewInput>() {
|
.post(input, new GerritCallback<ReviewInput>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(ReviewInput result) {
|
public void onSuccess(ReviewInput result) {
|
||||||
Gerrit.display(PageLinks.toChange(changeId));
|
Gerrit.display(
|
||||||
|
PageLinks.toChange(changeId),
|
||||||
|
new ChangeScreen2(changeId, null, null, false, true));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -31,6 +31,7 @@ import com.google.gerrit.client.rpc.Natives;
|
|||||||
import com.google.gerrit.client.ui.CommentLinkProcessor;
|
import com.google.gerrit.client.ui.CommentLinkProcessor;
|
||||||
import com.google.gerrit.common.PageLinks;
|
import com.google.gerrit.common.PageLinks;
|
||||||
import com.google.gerrit.common.data.LabelValue;
|
import com.google.gerrit.common.data.LabelValue;
|
||||||
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.reviewdb.client.Patch;
|
import com.google.gerrit.reviewdb.client.Patch;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
@@ -84,6 +85,7 @@ class ReplyBox extends Composite {
|
|||||||
private final CommentLinkProcessor clp;
|
private final CommentLinkProcessor clp;
|
||||||
private final PatchSet.Id psId;
|
private final PatchSet.Id psId;
|
||||||
private final String revision;
|
private final String revision;
|
||||||
|
private final NativeMap<LabelInfo> labels;
|
||||||
private ReviewInput in = ReviewInput.create();
|
private ReviewInput in = ReviewInput.create();
|
||||||
private Runnable lgtm;
|
private Runnable lgtm;
|
||||||
|
|
||||||
@@ -106,6 +108,7 @@ class ReplyBox extends Composite {
|
|||||||
this.clp = clp;
|
this.clp = clp;
|
||||||
this.psId = psId;
|
this.psId = psId;
|
||||||
this.revision = revision;
|
this.revision = revision;
|
||||||
|
this.labels = all;
|
||||||
initWidget(uiBinder.createAndBindUi(this));
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
|
|
||||||
List<String> names = new ArrayList<String>(permitted.keySet());
|
List<String> names = new ArrayList<String>(permitted.keySet());
|
||||||
@@ -193,14 +196,28 @@ class ReplyBox extends Composite {
|
|||||||
void onPost(ClickEvent e) {
|
void onPost(ClickEvent e) {
|
||||||
in.message(message.getText().trim());
|
in.message(message.getText().trim());
|
||||||
in.prePost();
|
in.prePost();
|
||||||
|
|
||||||
|
boolean s = false;
|
||||||
|
for (String name : labels.keySet()) {
|
||||||
|
if (in.label(name) != 0) {
|
||||||
|
if (in.label(name) == labels.get(name).value_set().last()) {
|
||||||
|
s = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final boolean submit = s;
|
||||||
|
|
||||||
ChangeApi.revision(psId.getParentKey().get(), revision)
|
ChangeApi.revision(psId.getParentKey().get(), revision)
|
||||||
.view("review")
|
.view("review")
|
||||||
.post(in, new GerritCallback<ReviewInput>() {
|
.post(in, new GerritCallback<ReviewInput>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(ReviewInput result) {
|
public void onSuccess(ReviewInput result) {
|
||||||
Gerrit.display(PageLinks.toChange(
|
Change.Id changeId = psId.getParentKey();
|
||||||
psId.getParentKey(),
|
String rev = String.valueOf(psId.get());
|
||||||
String.valueOf(psId.get())));
|
Gerrit.display(
|
||||||
|
PageLinks.toChange(changeId, rev),
|
||||||
|
new ChangeScreen2(changeId, null, rev, false, submit));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
hide();
|
hide();
|
||||||
|
@@ -36,6 +36,7 @@ public class ReviewInput extends JavaScriptObject {
|
|||||||
|
|
||||||
public final native void message(String m) /*-{ if(m)this.message=m; }-*/;
|
public final native void message(String m) /*-{ if(m)this.message=m; }-*/;
|
||||||
public final native void label(String n, short v) /*-{ this.labels[n]=v; }-*/;
|
public final native void label(String n, short v) /*-{ this.labels[n]=v; }-*/;
|
||||||
|
public final native short label(String n) /*-{ return this.labels[n]||0 }-*/;
|
||||||
public final native void comments(NativeMap<JsArray<CommentInfo>> m)
|
public final native void comments(NativeMap<JsArray<CommentInfo>> m)
|
||||||
/*-{ this.comments=m }-*/;
|
/*-{ this.comments=m }-*/;
|
||||||
|
|
||||||
|
@@ -1291,7 +1291,7 @@ public class SideBySide2 extends Screen {
|
|||||||
String rev = String.valueOf(revision.get());
|
String rev = String.valueOf(revision.get());
|
||||||
Gerrit.display(
|
Gerrit.display(
|
||||||
PageLinks.toChange(changeId, rev),
|
PageLinks.toChange(changeId, rev),
|
||||||
new ChangeScreen2(changeId, b, rev, openReplyBox));
|
new ChangeScreen2(changeId, b, rev, openReplyBox, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Runnable openClosePublished(final CodeMirror cm) {
|
private Runnable openClosePublished(final CodeMirror cm) {
|
||||||
|
Reference in New Issue
Block a user