Merge doc and change searches.

This CL puts a dropdown in the SearchPanel, to choose from changes
search (default) or documentation search.

I mostly copied the css for the search button to the dropdown, with
some minor changes.

If docs are not available (e.g. built without docs), the whole dropdown
will be gone and it should be the same as before.

Screenshot: https://i.imgur.com/Qyg2VZg.png

Change-Id: I04e15327f43fc9c8002cba364b44d77f52075234
This commit is contained in:
Yuxuan 'fishy' Wang
2015-11-09 16:32:45 -08:00
parent 573f8bad2d
commit ed1596b9df
10 changed files with 73 additions and 8 deletions

View File

@@ -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()

View File

@@ -126,4 +126,7 @@ public interface GerritConstants extends Constants {
String stringListPanelDelete();
String stringListPanelUp();
String stringListPanelDown();
String searchDropdownChanges();
String searchDropdownDoc();
}

View File

@@ -109,3 +109,6 @@ stringListPanelAdd = Add
stringListPanelDelete = Delete
stringListPanelUp = Up
stringListPanelDown = Down
searchDropdownChanges = Changes
searchDropdownDoc = Documentation

View File

@@ -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 (query.matches("^[1-9][0-9]*$")) {
Gerrit.display(PageLinks.toChange(Change.Id.parse(query)));
if (dropdown != null
&& dropdown.getSelectedValue().equals(Gerrit.C.searchDropdownDoc())) {
// doc
Gerrit.display(PageLinks.toDocumentationQuery(query));
} else {
Gerrit.display(PageLinks.toChangeQuery(query), QueryScreen.forQuery(query));
// 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));
}
}
}
private static class MySuggestionDisplay extends SuggestBox.DefaultSuggestionDisplay {
private static class MySuggestionDisplay
extends SuggestBox.DefaultSuggestionDisplay {
private boolean isSuggestionSelected;
private MySuggestionDisplay() {

View File

@@ -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;