Index: Source/devtools/front_end/components/FilterSuggestionBuilder.js |
diff --git a/Source/devtools/front_end/components/FilterSuggestionBuilder.js b/Source/devtools/front_end/components/FilterSuggestionBuilder.js |
index 81075b461dfab5fedd27909a26e6c82f926b6faa..42dd81542802edbc377fa294089cd2e2d0b277b1 100644 |
--- a/Source/devtools/front_end/components/FilterSuggestionBuilder.js |
+++ b/Source/devtools/front_end/components/FilterSuggestionBuilder.js |
@@ -40,6 +40,9 @@ WebInspector.FilterSuggestionBuilder = function(keys) |
this._valueLists = {}; |
} |
+/** @typedef {{type: string, data: string, negative: boolean}} */ |
+WebInspector.FilterSuggestionBuilder.Filter; |
+ |
WebInspector.FilterSuggestionBuilder.prototype = { |
/** |
* @param {!HTMLInputElement} input |
@@ -60,6 +63,10 @@ WebInspector.FilterSuggestionBuilder.prototype = { |
if (!prefix) |
return []; |
+ var negative = prefix.startsWith("-"); |
+ if (negative) |
+ prefix = prefix.substring(1); |
+ var modifier = negative ? "-" : ""; |
var valueDelimiterIndex = prefix.indexOf(":"); |
var suggestions = []; |
@@ -67,7 +74,7 @@ WebInspector.FilterSuggestionBuilder.prototype = { |
var matcher = new RegExp("^" + prefix.escapeForRegExp(), "i"); |
for (var j = 0; j < this._keys.length; ++j) { |
if (this._keys[j].match(matcher)) |
- suggestions.push(this._keys[j] + ":"); |
+ suggestions.push(modifier + this._keys[j] + ":"); |
} |
} else { |
var key = prefix.substring(0, valueDelimiterIndex); |
@@ -76,7 +83,7 @@ WebInspector.FilterSuggestionBuilder.prototype = { |
var items = this._values(key); |
for (var i = 0; i < items.length; ++i) { |
if (items[i].match(matcher) && (items[i] !== value)) |
- suggestions.push(key + ":" + items[i]); |
+ suggestions.push(modifier + key + ":" + items[i]); |
} |
} |
return suggestions; |
@@ -155,11 +162,11 @@ WebInspector.FilterSuggestionBuilder.prototype = { |
/** |
* @param {string} query |
- * @return {{text: !Array.<string>, filters: !Object.<string, string>}} |
+ * @return {{text: !Array.<string>, filters: !Array.<!WebInspector.FilterSuggestionBuilder.Filter>}} |
*/ |
parseQuery: function(query) |
{ |
- var filters = {}; |
+ var filters = []; |
var text = []; |
var i = 0; |
var j = 0; |
@@ -174,6 +181,9 @@ WebInspector.FilterSuggestionBuilder.prototype = { |
} |
var spaceIndex = query.lastIndexOf(" ", colonIndex); |
var key = query.substring(spaceIndex + 1, colonIndex); |
+ var negative = key.startsWith("-"); |
+ if (negative) |
+ key = key.substring(1); |
if (this._keys.indexOf(key) == -1) { |
i = colonIndex + 1; |
continue; |
@@ -183,10 +193,10 @@ WebInspector.FilterSuggestionBuilder.prototype = { |
text.push(part); |
var nextSpace = query.indexOf(" ", colonIndex + 1); |
if (nextSpace == -1) { |
- filters[key] = query.substring(colonIndex + 1); |
+ filters.push({type: key, data: query.substring(colonIndex + 1), negative: negative}); |
break; |
} |
- filters[key] = query.substring(colonIndex + 1, nextSpace); |
+ filters.push({type: key, data: query.substring(colonIndex + 1, nextSpace), negative: negative}); |
i = nextSpace + 1; |
j = i; |
} |