Merge "Merge doc and change searches."
This commit is contained in:
commit
9a90351e8d
@ -115,6 +115,7 @@ As result a link:#server-info[ServerInfo] entity is returned.
|
||||
"gerrit": {
|
||||
"all_projects": "All-Projects",
|
||||
"all_users": "All-Users"
|
||||
"doc_search": true
|
||||
},
|
||||
"sshd": {},
|
||||
"suggest": {
|
||||
@ -1189,6 +1190,8 @@ Name of the link:config-gerrit.html#gerrit.allProjects[root project].
|
||||
|`all_users_name` ||
|
||||
Name of the link:config-gerrit.html#gerrit.allUsers[project in which
|
||||
meta data of all users is stored].
|
||||
|`doc_search` ||
|
||||
Whether documentation search is available.
|
||||
|`doc_url` |optional|
|
||||
Custom base URL where Gerrit server documentation is located.
|
||||
(Documentation may still be available at /Documentation relative to the
|
||||
|
@ -49,6 +49,7 @@ public class PageLinks {
|
||||
public static final String ADMIN_CREATE_PROJECT = "/admin/create-project/";
|
||||
public static final String ADMIN_PLUGINS = "/admin/plugins/";
|
||||
public static final String MY_GROUPS = "/groups/self";
|
||||
public static final String DOCUMENTATION = "/Documentation/";
|
||||
|
||||
public static String toChange(final ChangeInfo c) {
|
||||
return toChange(c.getId());
|
||||
@ -140,6 +141,10 @@ public class PageLinks {
|
||||
return SETTINGS_EXTENSION + pluginName + "/" + path;
|
||||
}
|
||||
|
||||
public static String toDocumentationQuery(String query) {
|
||||
return DOCUMENTATION + KeyUtil.encode(query);
|
||||
}
|
||||
|
||||
private static String status(Status status) {
|
||||
switch (status) {
|
||||
case ABANDONED:
|
||||
|
@ -36,6 +36,7 @@ public class GerritInfo extends JavaScriptObject {
|
||||
|
||||
public final native String allProjects() /*-{ return this.all_projects; }-*/;
|
||||
public final native String allUsers() /*-{ return this.all_users; }-*/;
|
||||
public final native boolean docSearch() /*-{ return this.doc_search; }-*/;
|
||||
public final native String docUrl() /*-{ return this.doc_url; }-*/;
|
||||
public final native boolean editGpgKeys() /*-{ return this.edit_gpg_keys || false; }-*/;
|
||||
public final native String reportBugUrl() /*-{ return this.report_bug_url; }-*/;
|
||||
|
@ -118,6 +118,7 @@ public class Gerrit implements EntryPoint {
|
||||
private static AccountPreferencesInfo myPrefs;
|
||||
private static UrlAliasMatcher urlAliasMatcher;
|
||||
private static boolean hasDocumentation;
|
||||
private static boolean docSearch;
|
||||
private static String docUrl;
|
||||
private static HostPageData.Theme myTheme;
|
||||
private static String defaultScreenToken;
|
||||
@ -487,6 +488,7 @@ public class Gerrit implements EntryPoint {
|
||||
hasDocumentation = true;
|
||||
docUrl = du;
|
||||
}
|
||||
docSearch = info.gerrit().docSearch();
|
||||
}
|
||||
}));
|
||||
HostPageDataService hpd = GWT.create(HostPageDataService.class);
|
||||
@ -918,6 +920,10 @@ public class Gerrit implements EntryPoint {
|
||||
urlAliasMatcher.updateUserAliases(myPrefs.urlAliases());
|
||||
}
|
||||
|
||||
public static boolean hasDocSearch() {
|
||||
return docSearch;
|
||||
}
|
||||
|
||||
private static void getDocIndex(final AsyncCallback<DocInfo> cb) {
|
||||
RequestBuilder req =
|
||||
new RequestBuilder(RequestBuilder.HEAD, GWT.getHostPageBaseURL()
|
||||
|
@ -126,4 +126,7 @@ public interface GerritConstants extends Constants {
|
||||
String stringListPanelDelete();
|
||||
String stringListPanelUp();
|
||||
String stringListPanelDown();
|
||||
|
||||
String searchDropdownChanges();
|
||||
String searchDropdownDoc();
|
||||
}
|
||||
|
@ -109,3 +109,6 @@ stringListPanelAdd = Add
|
||||
stringListPanelDelete = Delete
|
||||
stringListPanelUp = Up
|
||||
stringListPanelDown = Down
|
||||
|
||||
searchDropdownChanges = Changes
|
||||
searchDropdownDoc = Documentation
|
||||
|
@ -27,6 +27,7 @@ import com.google.gwt.event.shared.HandlerRegistration;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.SuggestBox;
|
||||
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
|
||||
import com.google.gwtexpui.globalkey.client.GlobalKey;
|
||||
@ -34,6 +35,7 @@ import com.google.gwtexpui.globalkey.client.KeyCommand;
|
||||
|
||||
class SearchPanel extends Composite {
|
||||
private final HintTextBox searchBox;
|
||||
private final ListBox dropdown;
|
||||
private HandlerRegistration regFocus;
|
||||
|
||||
SearchPanel() {
|
||||
@ -54,6 +56,18 @@ class SearchPanel extends Composite {
|
||||
}
|
||||
});
|
||||
|
||||
if (Gerrit.hasDocSearch()) {
|
||||
dropdown = new ListBox();
|
||||
dropdown.setStyleName("searchDropdown");
|
||||
dropdown.addItem(Gerrit.C.searchDropdownChanges());
|
||||
dropdown.addItem(Gerrit.C.searchDropdownDoc());
|
||||
dropdown.setVisibleItemCount(1);
|
||||
dropdown.setSelectedIndex(0);
|
||||
} else {
|
||||
// Doc search is NOT available.
|
||||
dropdown = null;
|
||||
}
|
||||
|
||||
final SuggestBox suggestBox =
|
||||
new SuggestBox(new SearchSuggestOracle(), searchBox, suggestionDisplay);
|
||||
searchBox.setStyleName("searchTextBox");
|
||||
@ -70,6 +84,9 @@ class SearchPanel extends Composite {
|
||||
});
|
||||
|
||||
body.add(suggestBox);
|
||||
if (dropdown != null) {
|
||||
body.add(dropdown);
|
||||
}
|
||||
body.add(searchButton);
|
||||
}
|
||||
|
||||
@ -110,14 +127,23 @@ class SearchPanel extends Composite {
|
||||
|
||||
searchBox.setFocus(false);
|
||||
|
||||
if (dropdown != null
|
||||
&& dropdown.getSelectedValue().equals(Gerrit.C.searchDropdownDoc())) {
|
||||
// doc
|
||||
Gerrit.display(PageLinks.toDocumentationQuery(query));
|
||||
} else {
|
||||
// changes
|
||||
if (query.matches("^[1-9][0-9]*$")) {
|
||||
Gerrit.display(PageLinks.toChange(Change.Id.parse(query)));
|
||||
} else {
|
||||
Gerrit.display(PageLinks.toChangeQuery(query), QueryScreen.forQuery(query));
|
||||
Gerrit.display(
|
||||
PageLinks.toChangeQuery(query), QueryScreen.forQuery(query));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class MySuggestionDisplay extends SuggestBox.DefaultSuggestionDisplay {
|
||||
private static class MySuggestionDisplay
|
||||
extends SuggestBox.DefaultSuggestionDisplay {
|
||||
private boolean isSuggestionSelected;
|
||||
|
||||
private MySuggestionDisplay() {
|
||||
|
@ -307,7 +307,15 @@ a:hover {
|
||||
}
|
||||
.searchPanel .searchTextBox {
|
||||
font-size: 9pt;
|
||||
margin: 5.286px 3px 0 0;
|
||||
margin: 8.286px 3px 0 0;
|
||||
}
|
||||
.searchPanel .searchDropdown {
|
||||
font-size: 8pt;
|
||||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.15);
|
||||
height: 16px;
|
||||
border-radius: 2px;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.searchPanel .searchButton {
|
||||
text-align: center;
|
||||
|
@ -35,6 +35,7 @@ import com.google.gerrit.server.avatar.AvatarProvider;
|
||||
import com.google.gerrit.server.change.ArchiveFormat;
|
||||
import com.google.gerrit.server.change.GetArchive;
|
||||
import com.google.gerrit.server.change.Submit;
|
||||
import com.google.gerrit.server.documentation.QueryDocumentationExecutor;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
@ -64,6 +65,7 @@ public class GetServerInfo implements RestReadView<ConfigResource> {
|
||||
private final GitwebConfig gitwebConfig;
|
||||
private final DynamicItem<AvatarProvider> avatar;
|
||||
private final boolean enableSignedPush;
|
||||
private final QueryDocumentationExecutor docSearcher;
|
||||
|
||||
@Inject
|
||||
public GetServerInfo(
|
||||
@ -79,7 +81,8 @@ public class GetServerInfo implements RestReadView<ConfigResource> {
|
||||
@AnonymousCowardName String anonymousCowardName,
|
||||
GitwebConfig gitwebConfig,
|
||||
DynamicItem<AvatarProvider> avatar,
|
||||
@EnableSignedPush boolean enableSignedPush) {
|
||||
@EnableSignedPush boolean enableSignedPush,
|
||||
QueryDocumentationExecutor docSearcher) {
|
||||
this.config = config;
|
||||
this.authConfig = authConfig;
|
||||
this.realm = realm;
|
||||
@ -93,6 +96,7 @@ public class GetServerInfo implements RestReadView<ConfigResource> {
|
||||
this.gitwebConfig = gitwebConfig;
|
||||
this.avatar = avatar;
|
||||
this.enableSignedPush = enableSignedPush;
|
||||
this.docSearcher = docSearcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -238,6 +242,7 @@ public class GetServerInfo implements RestReadView<ConfigResource> {
|
||||
info.reportBugUrl = cfg.getString("gerrit", null, "reportBugUrl");
|
||||
info.reportBugText = cfg.getString("gerrit", null, "reportBugText");
|
||||
info.docUrl = getDocUrl(cfg);
|
||||
info.docSearch = docSearcher.isAvailable();
|
||||
info.editGpgKeys = toBoolean(enableSignedPush
|
||||
&& cfg.getBoolean("gerrit", null, "editGpgKeys", true));
|
||||
return info;
|
||||
@ -366,10 +371,11 @@ public class GetServerInfo implements RestReadView<ConfigResource> {
|
||||
public static class GerritInfo {
|
||||
public String allProjects;
|
||||
public String allUsers;
|
||||
public Boolean docSearch;
|
||||
public String docUrl;
|
||||
public Boolean editGpgKeys;
|
||||
public String reportBugUrl;
|
||||
public String reportBugText;
|
||||
public Boolean editGpgKeys;
|
||||
}
|
||||
|
||||
public static class GitwebInfo {
|
||||
|
@ -74,7 +74,7 @@ public class QueryDocumentationExecutor {
|
||||
}
|
||||
|
||||
public List<DocResult> doQuery(String q) throws DocQueryException {
|
||||
if (parser == null || searcher == null) {
|
||||
if (!isAvailable()) {
|
||||
throw new DocQueryException("Documentation search not available");
|
||||
}
|
||||
try {
|
||||
@ -123,6 +123,10 @@ public class QueryDocumentationExecutor {
|
||||
return dir;
|
||||
}
|
||||
|
||||
public boolean isAvailable() {
|
||||
return parser != null && searcher != null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class DocQueryException extends Exception {
|
||||
DocQueryException() {
|
||||
|
Loading…
Reference in New Issue
Block a user