Index: third_party/WebKit/Source/devtools/front_end/network/FilterSuggestionBuilder.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/network/FilterSuggestionBuilder.js b/third_party/WebKit/Source/devtools/front_end/network/FilterSuggestionBuilder.js |
index 2f85e3680fb4d9085c0376ba29a7457f03dee7b7..cd347abd401e836aa9d02d9a1378dc945ac855a5 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/network/FilterSuggestionBuilder.js |
+++ b/third_party/WebKit/Source/devtools/front_end/network/FilterSuggestionBuilder.js |
@@ -27,175 +27,169 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
- * @constructor |
* @implements {WebInspector.TextFilterUI.SuggestionBuilder} |
- * @param {!Array.<string>} keys |
+ * @unrestricted |
*/ |
-WebInspector.FilterSuggestionBuilder = function(keys) |
-{ |
+WebInspector.FilterSuggestionBuilder = class { |
+ /** |
+ * @param {!Array.<string>} keys |
+ */ |
+ constructor(keys) { |
this._keys = keys; |
this._valueSets = {}; |
this._valueLists = {}; |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!HTMLInputElement} input |
+ * @return {?Array.<string>} |
+ */ |
+ buildSuggestions(input) { |
+ var text = input.value; |
+ var end = input.selectionEnd; |
+ if (end !== text.length) |
+ return null; |
+ |
+ var start = input.selectionStart; |
+ text = text.substring(0, start); |
+ var prefixIndex = text.lastIndexOf(' ') + 1; |
+ |
+ var prefix = text.substring(prefixIndex); |
+ if (!prefix) |
+ return []; |
+ |
+ var negative = prefix.startsWith('-'); |
+ if (negative) |
+ prefix = prefix.substring(1); |
+ var modifier = negative ? '-' : ''; |
+ var valueDelimiterIndex = prefix.indexOf(':'); |
+ |
+ var suggestions = []; |
+ if (valueDelimiterIndex === -1) { |
+ var matcher = new RegExp('^' + prefix.escapeForRegExp(), 'i'); |
+ for (var j = 0; j < this._keys.length; ++j) { |
+ if (this._keys[j].match(matcher)) |
+ suggestions.push(modifier + this._keys[j] + ':'); |
+ } |
+ } else { |
+ var key = prefix.substring(0, valueDelimiterIndex).toLowerCase(); |
+ var value = prefix.substring(valueDelimiterIndex + 1); |
+ var matcher = new RegExp('^' + value.escapeForRegExp(), 'i'); |
+ var items = this._values(key); |
+ for (var i = 0; i < items.length; ++i) { |
+ if (items[i].match(matcher) && (items[i] !== value)) |
+ suggestions.push(modifier + key + ':' + items[i]); |
+ } |
+ } |
+ return suggestions; |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!HTMLInputElement} input |
+ * @param {string} suggestion |
+ * @param {boolean} isIntermediate |
+ */ |
+ applySuggestion(input, suggestion, isIntermediate) { |
+ var text = input.value; |
+ |
+ var start = input.selectionStart; |
+ text = text.substring(0, start); |
+ var prefixIndex = text.lastIndexOf(' ') + 1; |
+ |
+ if (isIntermediate) { |
+ text = text + suggestion.substring(text.length - prefixIndex); |
+ input.value = text; |
+ } else { |
+ text = text.substring(0, prefixIndex) + suggestion; |
+ input.value = text; |
+ start = text.length; |
+ } |
+ input.setSelectionRange(start, text.length); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!HTMLInputElement} input |
+ */ |
+ unapplySuggestion(input) { |
+ var start = input.selectionStart; |
+ var end = input.selectionEnd; |
+ var text = input.value; |
+ if (start !== end && end === text.length) |
+ input.value = text.substring(0, start); |
+ } |
+ |
+ /** |
+ * @param {string} key |
+ * @return {!Array.<string>} |
+ */ |
+ _values(key) { |
+ var result = this._valueLists[key]; |
+ if (!result) |
+ return []; |
+ |
+ result.sort(); |
+ return result; |
+ } |
+ |
+ /** |
+ * @param {string} key |
+ * @param {?string=} value |
+ */ |
+ addItem(key, value) { |
+ if (!value) |
+ return; |
+ |
+ var set = this._valueSets[key]; |
+ var list = this._valueLists[key]; |
+ if (!set) { |
+ set = {}; |
+ this._valueSets[key] = set; |
+ list = []; |
+ this._valueLists[key] = list; |
+ } |
+ |
+ if (set[value]) |
+ return; |
+ |
+ set[value] = true; |
+ list.push(value); |
+ } |
+ |
+ /** |
+ * @param {string} query |
+ * @return {{text: !Array.<string>, filters: !Array.<!WebInspector.FilterSuggestionBuilder.Filter>}} |
+ */ |
+ parseQuery(query) { |
+ var filters = []; |
+ var text = []; |
+ var parts = query.split(/\s+/); |
+ for (var i = 0; i < parts.length; ++i) { |
+ var part = parts[i]; |
+ if (!part) |
+ continue; |
+ var colonIndex = part.indexOf(':'); |
+ if (colonIndex === -1) { |
+ text.push(part); |
+ continue; |
+ } |
+ var key = part.substring(0, colonIndex); |
+ var negative = key.startsWith('-'); |
+ if (negative) |
+ key = key.substring(1); |
+ if (this._keys.indexOf(key) === -1) { |
+ text.push(part); |
+ continue; |
+ } |
+ var value = part.substring(colonIndex + 1); |
+ filters.push({type: key, data: value, negative: negative}); |
+ } |
+ return {text: text, filters: filters}; |
+ } |
}; |
/** @typedef {{type: string, data: string, negative: boolean}} */ |
WebInspector.FilterSuggestionBuilder.Filter; |
- |
-WebInspector.FilterSuggestionBuilder.prototype = { |
- /** |
- * @override |
- * @param {!HTMLInputElement} input |
- * @return {?Array.<string>} |
- */ |
- buildSuggestions: function(input) |
- { |
- var text = input.value; |
- var end = input.selectionEnd; |
- if (end !== text.length) |
- return null; |
- |
- var start = input.selectionStart; |
- text = text.substring(0, start); |
- var prefixIndex = text.lastIndexOf(" ") + 1; |
- |
- var prefix = text.substring(prefixIndex); |
- if (!prefix) |
- return []; |
- |
- var negative = prefix.startsWith("-"); |
- if (negative) |
- prefix = prefix.substring(1); |
- var modifier = negative ? "-" : ""; |
- var valueDelimiterIndex = prefix.indexOf(":"); |
- |
- var suggestions = []; |
- if (valueDelimiterIndex === -1) { |
- var matcher = new RegExp("^" + prefix.escapeForRegExp(), "i"); |
- for (var j = 0; j < this._keys.length; ++j) { |
- if (this._keys[j].match(matcher)) |
- suggestions.push(modifier + this._keys[j] + ":"); |
- } |
- } else { |
- var key = prefix.substring(0, valueDelimiterIndex).toLowerCase(); |
- var value = prefix.substring(valueDelimiterIndex + 1); |
- var matcher = new RegExp("^" + value.escapeForRegExp(), "i"); |
- var items = this._values(key); |
- for (var i = 0; i < items.length; ++i) { |
- if (items[i].match(matcher) && (items[i] !== value)) |
- suggestions.push(modifier + key + ":" + items[i]); |
- } |
- } |
- return suggestions; |
- }, |
- |
- /** |
- * @override |
- * @param {!HTMLInputElement} input |
- * @param {string} suggestion |
- * @param {boolean} isIntermediate |
- */ |
- applySuggestion: function(input, suggestion, isIntermediate) |
- { |
- var text = input.value; |
- |
- var start = input.selectionStart; |
- text = text.substring(0, start); |
- var prefixIndex = text.lastIndexOf(" ") + 1; |
- |
- if (isIntermediate) { |
- text = text + suggestion.substring(text.length - prefixIndex); |
- input.value = text; |
- } else { |
- text = text.substring(0, prefixIndex) + suggestion; |
- input.value = text; |
- start = text.length; |
- } |
- input.setSelectionRange(start, text.length); |
- }, |
- |
- /** |
- * @override |
- * @param {!HTMLInputElement} input |
- */ |
- unapplySuggestion: function(input) |
- { |
- var start = input.selectionStart; |
- var end = input.selectionEnd; |
- var text = input.value; |
- if (start !== end && end === text.length) |
- input.value = text.substring(0, start); |
- }, |
- |
- /** |
- * @param {string} key |
- * @return {!Array.<string>} |
- */ |
- _values: function(key) |
- { |
- var result = this._valueLists[key]; |
- if (!result) |
- return []; |
- |
- result.sort(); |
- return result; |
- }, |
- |
- /** |
- * @param {string} key |
- * @param {?string=} value |
- */ |
- addItem: function(key, value) |
- { |
- if (!value) |
- return; |
- |
- var set = this._valueSets[key]; |
- var list = this._valueLists[key]; |
- if (!set) { |
- set = {}; |
- this._valueSets[key] = set; |
- list = []; |
- this._valueLists[key] = list; |
- } |
- |
- if (set[value]) |
- return; |
- |
- set[value] = true; |
- list.push(value); |
- }, |
- |
- /** |
- * @param {string} query |
- * @return {{text: !Array.<string>, filters: !Array.<!WebInspector.FilterSuggestionBuilder.Filter>}} |
- */ |
- parseQuery: function(query) |
- { |
- var filters = []; |
- var text = []; |
- var parts = query.split(/\s+/); |
- for (var i = 0; i < parts.length; ++i) { |
- var part = parts[i]; |
- if (!part) |
- continue; |
- var colonIndex = part.indexOf(":"); |
- if (colonIndex === -1) { |
- text.push(part); |
- continue; |
- } |
- var key = part.substring(0, colonIndex); |
- var negative = key.startsWith("-"); |
- if (negative) |
- key = key.substring(1); |
- if (this._keys.indexOf(key) === -1) { |
- text.push(part); |
- continue; |
- } |
- var value = part.substring(colonIndex + 1); |
- filters.push({type: key, data: value, negative: negative}); |
- } |
- return {text: text, filters: filters}; |
- } |
-}; |