Bug 1575237 - Initial implementation of search for top level documents in the inspector; r=pbro

Differential Revision: https://phabricator.services.mozilla.com/D42662

--HG--
extra : moz-landing-system : lando
This commit is contained in:
yulia 2019-08-26 18:38:01 +00:00
Родитель 49511b6da8
Коммит ed8443d555
1 изменённых файлов: 45 добавлений и 31 удалений

Просмотреть файл

@ -481,7 +481,7 @@ SelectorAutocompleter.prototype = {
* Suggests classes,ids and tags based on the user input as user types in the * Suggests classes,ids and tags based on the user input as user types in the
* searchbox. * searchbox.
*/ */
showSuggestions: function() { showSuggestions: async function() {
let query = this.searchBox.value; let query = this.searchBox.value;
const state = this.state; const state = this.state;
let firstPart = ""; let firstPart = "";
@ -514,37 +514,51 @@ SelectorAutocompleter.prototype = {
query += "*"; query += "*";
} }
const suggestionsPromise = this.walker.getSuggestionsForQuery( const inspectorFront = this.inspector.inspectorFront;
query, const remoteInspectors = await inspectorFront.getChildInspectors();
firstPart, const inspectors = [inspectorFront, ...remoteInspectors];
state
);
this._lastQuery = suggestionsPromise.then(result => {
this.emit("processing-done");
if (result.query !== query) {
// This means that this response is for a previous request and the user
// as since typed something extra leading to a new request.
return promise.resolve(null);
}
if (state === this.States.CLASS) { const suggestionsPromises = inspectors.map(async inspector => {
firstPart = "." + firstPart; const walker = inspector.walker;
} else if (state === this.States.ID) { return walker.getSuggestionsForQuery(query, firstPart, state);
firstPart = "#" + firstPart;
}
// If there is a single tag match and it's what the user typed, then
// don't need to show a popup.
if (
result.suggestions.length === 1 &&
result.suggestions[0][0] === firstPart
) {
result.suggestions = [];
}
// Wait for the autocomplete-popup to fire its popup-opened event, to make sure
// the autoSelect item has been selected.
return this._showPopup(result.suggestions, state);
}); });
this._lastQuery = Promise.all(suggestionsPromises)
.then(suggestions => {
// Merge all the results
const result = { query: "", suggestions: [] };
for (const r of suggestions) {
result.query = r.query;
result.suggestions = result.suggestions.concat(r.suggestions);
}
return result;
})
.then(result => {
this.emit("processing-done");
if (result.query !== query) {
// This means that this response is for a previous request and the user
// as since typed something extra leading to a new request.
return promise.resolve(null);
}
if (state === this.States.CLASS) {
firstPart = "." + firstPart;
} else if (state === this.States.ID) {
firstPart = "#" + firstPart;
}
// If there is a single tag match and it's what the user typed, then
// don't need to show a popup.
if (
result.suggestions.length === 1 &&
result.suggestions[0][0] === firstPart
) {
result.suggestions = [];
}
// Wait for the autocomplete-popup to fire its popup-opened event, to make sure
// the autoSelect item has been selected.
return this._showPopup(result.suggestions, state);
});
}, },
}; };