Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Side by Side Diff: Source/devtools/front_end/FilterBar.js

Issue 18132024: Add enhanced filters to Network panel. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebaseline Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 isActive: function() { }, 157 isActive: function() { },
158 158
159 /** 159 /**
160 * @return {!Element} 160 * @return {!Element}
161 */ 161 */
162 element: function() { } 162 element: function() { }
163 } 163 }
164 164
165 /** 165 /**
166 * @constructor 166 * @constructor
167 * @extends {WebInspector.Object}
167 * @implements {WebInspector.FilterUI} 168 * @implements {WebInspector.FilterUI}
168 * @extends {WebInspector.Object} 169 * @implements {WebInspector.SuggestBoxDelegate}
169 * @param {boolean=} supportRegex 170 * @param {boolean=} supportRegex
170 */ 171 */
171 WebInspector.TextFilterUI = function(supportRegex) 172 WebInspector.TextFilterUI = function(supportRegex)
172 { 173 {
173 this._supportRegex = !!supportRegex; 174 this._supportRegex = !!supportRegex;
174 this._regex = null; 175 this._regex = null;
175 176
176 this._filterElement = document.createElement("div"); 177 this._filterElement = document.createElement("div");
177 this._filterElement.className = "filter-text-filter"; 178 this._filterElement.className = "filter-text-filter";
178 179
179 this._filterInputElement = this._filterElement.createChild("input", "search- replace toolbar-replace-control"); 180 this._filterInputElement = this._filterElement.createChild("input", "search- replace toolbar-replace-control");
180 this._filterInputElement.placeholder = WebInspector.UIString("Filter"); 181 this._filterInputElement.placeholder = WebInspector.UIString("Filter");
181 this._filterInputElement.id = "filter-input-field"; 182 this._filterInputElement.id = "filter-input-field";
182 this._filterInputElement.addEventListener("mousedown", this._onFilterFieldMa nualFocus.bind(this), false); // when the search field is manually selected 183 this._filterInputElement.addEventListener("mousedown", this._onFilterFieldMa nualFocus.bind(this), false); // when the search field is manually selected
183 this._filterInputElement.addEventListener("input", this._onInput.bind(this), false); 184 this._filterInputElement.addEventListener("input", this._onInput.bind(this), false);
184 this._filterInputElement.addEventListener("change", this._onInput.bind(this) , false); 185 this._filterInputElement.addEventListener("change", this._onInput.bind(this) , false);
186 this._filterInputElement.addEventListener("keydown", this._onInputKeyDown.bi nd(this), true);
187 this._filterInputElement.addEventListener("blur", this._onBlur.bind(this), t rue);
188
189 /** @type {?WebInspector.TextFilterUI.SuggestionBuilder} */
190 this._suggestionBuilder = null;
191
192 this._suggestBox = new WebInspector.SuggestBox(this, this._filterElement);
185 193
186 if (this._supportRegex) { 194 if (this._supportRegex) {
187 this._filterElement.classList.add("supports-regex"); 195 this._filterElement.classList.add("supports-regex");
188 this._regexCheckBox = this._filterElement.createChild("input"); 196 this._regexCheckBox = this._filterElement.createChild("input");
189 this._regexCheckBox.type = "checkbox"; 197 this._regexCheckBox.type = "checkbox";
190 this._regexCheckBox.id = "text-filter-regex"; 198 this._regexCheckBox.id = "text-filter-regex";
191 this._regexCheckBox.addEventListener("change", this._onInput.bind(this), false); 199 this._regexCheckBox.addEventListener("change", this._onInput.bind(this), false);
192 200
193 this._regexLabel = this._filterElement.createChild("label"); 201 this._regexLabel = this._filterElement.createChild("label");
194 this._regexLabel.htmlFor = "text-filter-regex"; 202 this._regexLabel.htmlFor = "text-filter-regex";
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 248
241 /** 249 /**
242 * @param {?Event} event 250 * @param {?Event} event
243 */ 251 */
244 _onFilterFieldManualFocus: function(event) 252 _onFilterFieldManualFocus: function(event)
245 { 253 {
246 WebInspector.setCurrentFocusElement(event.target); 254 WebInspector.setCurrentFocusElement(event.target);
247 }, 255 },
248 256
249 /** 257 /**
258 * @param {?Event} event
259 */
260 _onBlur: function(event)
261 {
262 this._suggestBox.hide();
263 },
264
265 /**
250 * @param {!WebInspector.Event} event 266 * @param {!WebInspector.Event} event
251 */ 267 */
252 _onInput: function(event) 268 _onInput: function(event)
253 { 269 {
254 this._valueChanged(); 270 this._valueChanged();
255 }, 271 },
256 272
257 _valueChanged: function() { 273 /**
274 * @param {?WebInspector.TextFilterUI.SuggestionBuilder} suggestionBuilder
275 */
276 setSuggestionBuilder: function(suggestionBuilder)
277 {
278 this._suggestionBuilder = suggestionBuilder;
279 if (document.activeElement === this._filterInputElement)
280 this._updateSuggestions();
281 },
282
283 _updateSuggestions: function()
284 {
285 if (!this._suggestionBuilder) {
286 this._suggestBox.hide();
287 return;
288 }
289 var suggestions = this._suggestionBuilder.buildSuggestions(this._filterI nputElement);
290 if (suggestions && suggestions.length)
291 this._suggestBox.updateSuggestions(null, suggestions, 0, true, "");
292 else
293 this._suggestBox.hide();
294 },
295
296 _valueChanged: function()
297 {
298 this._updateSuggestions();
258 var filterQuery = this.value(); 299 var filterQuery = this.value();
259 300
260 this._regex = null; 301 this._regex = null;
261 this._filterInputElement.classList.remove("filter-text-invalid"); 302 this._filterInputElement.classList.remove("filter-text-invalid");
262 if (filterQuery) { 303 if (filterQuery) {
263 if (this._supportRegex && this._regexCheckBox.checked) { 304 if (this._supportRegex && this._regexCheckBox.checked) {
264 try { 305 try {
265 this._regex = new RegExp(filterQuery, "i"); 306 this._regex = new RegExp(filterQuery, "i");
266 } catch (e) { 307 } catch (e) {
267 this._filterInputElement.classList.add("filter-text-invalid" ); 308 this._filterInputElement.classList.add("filter-text-invalid" );
268 } 309 }
269 } else { 310 } else {
270 this._regex = createPlainTextSearchRegex(filterQuery, "i"); 311 this._regex = createPlainTextSearchRegex(filterQuery, "i");
271 } 312 }
272 } 313 }
273 314
274 this.dispatchEventToListeners(WebInspector.FilterUI.Events.FilterChanged , null); 315 this.dispatchEventToListeners(WebInspector.FilterUI.Events.FilterChanged , null);
275 }, 316 },
276 317
318 /**
319 * @param {!KeyboardEvent} event
320 * @return {boolean}
321 */
322 _onInputKeyDown: function(event)
323 {
324 var handled = false;
325 if (this._suggestBox.visible()) {
326 if (event.keyIdentifier === "U+0009") // Tab
327 handled = this._suggestBox.enterKeyPressed();
328 else
329 handled = this._suggestBox.keyPressed(event);
330 }
331 if (handled)
332 event.consume(true);
333 return handled;
334 },
335
336 /**
337 * @override
338 * @param {string} suggestion
339 * @param {boolean=} isIntermediateSuggestion
340 */
341 applySuggestion: function(suggestion, isIntermediateSuggestion)
342 {
343 if (!this._suggestionBuilder || isIntermediateSuggestion)
344 return;
345 this._suggestionBuilder.applySuggestion(this._filterInputElement, sugges tion);
346 },
347
348 /** @override */
349 acceptSuggestion: function()
350 {
351 this._filterInputElement.scrollLeft = this._filterInputElement.scrollWid th;
352 this._valueChanged();
353 },
354
277 __proto__: WebInspector.Object.prototype 355 __proto__: WebInspector.Object.prototype
278 } 356 }
279 357
280 /** 358 /**
359 * @interface
360 */
361 WebInspector.TextFilterUI.SuggestionBuilder = function()
362 {
363 }
364
365 WebInspector.TextFilterUI.SuggestionBuilder.prototype = {
366 /**
367 * @param {!HTMLInputElement} input
368 * @return {?Array.<string>}
369 */
370 buildSuggestions: function(input) { },
371
372 /**
373 * @param {!HTMLInputElement} input
374 * @param {string} suggestion
375 */
376 applySuggestion: function(input, suggestion) { }
377 }
378
379 /**
281 * @constructor 380 * @constructor
282 * @implements {WebInspector.FilterUI} 381 * @implements {WebInspector.FilterUI}
283 * @extends {WebInspector.Object} 382 * @extends {WebInspector.Object}
284 */ 383 */
285 WebInspector.NamedBitSetFilterUI = function() 384 WebInspector.NamedBitSetFilterUI = function()
286 { 385 {
287 this._filtersElement = document.createElement("div"); 386 this._filtersElement = document.createElement("div");
288 this._filtersElement.className = "filter-bitset-filter status-bar-item"; 387 this._filtersElement.className = "filter-bitset-filter status-bar-item";
289 this._filtersElement.title = WebInspector.UIString("Use %s Click to select m ultiple types.", WebInspector.KeyboardShortcut.shortcutToString("", WebInspector .KeyboardShortcut.Modifiers.CtrlOrMeta)); 388 this._filtersElement.title = WebInspector.UIString("Use %s Click to select m ultiple types.", WebInspector.KeyboardShortcut.shortcutToString("", WebInspector .KeyboardShortcut.Modifiers.CtrlOrMeta));
290 389
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 var label = this._filterElement.createChild("label"); 675 var label = this._filterElement.createChild("label");
577 var checkBorder = label.createChild("div", "checkbox-filter-checkbox"); 676 var checkBorder = label.createChild("div", "checkbox-filter-checkbox");
578 this._checkElement = checkBorder.createChild("div", "checkbox-filter-che ckbox-check"); 677 this._checkElement = checkBorder.createChild("div", "checkbox-filter-che ckbox-check");
579 this._filterElement.addEventListener("click", this._onClick.bind(this), false); 678 this._filterElement.addEventListener("click", this._onClick.bind(this), false);
580 var typeElement = label.createChild("span", "type"); 679 var typeElement = label.createChild("span", "type");
581 typeElement.textContent = title; 680 typeElement.textContent = title;
582 }, 681 },
583 682
584 __proto__: WebInspector.Object.prototype 683 __proto__: WebInspector.Object.prototype
585 } 684 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698