Changeset 116244 in webkit
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r116243 r116244 1 2012-05-06 Eugene Klyuchnikov <eustas.bug@gmail.com> 2 3 Web Inspector: "Goto Function" filtering should be less restrictive. 4 https://bugs.webkit.org/show_bug.cgi?id=85586 5 6 Reviewed by Pavel Feldman. 7 8 Added tests for generated regex. 9 10 Changes: 11 1) Avoid asterisks in filtering queue. 12 2) Optimization: do not create regexp for each item. 13 14 * inspector/front-end/FilteredItemSelectionDialog.js: 15 (WebInspector.FilteredItemSelectionDialog.prototype.get _itemsLoaded): 16 Applied new filtering workflow. 17 (WebInspector.FilteredItemSelectionDialog.prototype._checkItemAt): 18 Removed. 19 (WebInspector.FilteredItemSelectionDialog.prototype._createSearchRegExp): 20 Removed unused "suffix" logic; changed the way regexp is composed from query. 21 (WebInspector.FilteredItemSelectionDialog.prototype._filterItems): 22 Applied new filtering workflow. 23 (WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown): 24 Removed unused var. 25 1 26 2012-05-06 Kent Tamura <tkent@chromium.org> 2 27 -
trunk/Source/WebCore/inspector/front-end/FilteredItemSelectionDialog.js
r116216 r116244 124 124 var fragment = document.createDocumentFragment(); 125 125 var candidateItem = this._selectedElement; 126 var regex = this._createSearchRegExp(this._promptElement.value); 126 127 for (var i = index; i < index + chunkLength; ++i) { 127 128 var itemElement = this._createItemElement(i, this._delegate.itemTitleAt(i)); 128 if ( this._checkItemAt(i, this._promptElement.value)) {129 if (regex.test(this._delegate.itemKeyAt(i))) { 129 130 if (!candidateItem) 130 131 candidateItem = itemElement; … … 188 189 189 190 /** 190 * @param {number} index 191 */ 192 _checkItemAt: function(index, query) 193 { 194 if (!query) 195 return true; 196 var regExp = this._createSearchRegExp(query); 197 var key = this._delegate.itemKeyAt(index); 198 return regExp.test(key); 199 }, 200 201 /** 202 * @param {string=} query 191 * @param {?string} query 203 192 * @param {boolean=} isGlobal 204 193 */ 205 194 _createSearchRegExp: function(query, isGlobal) 206 195 { 196 if (!query || !query.trim()) 197 return new RegExp(".*"); 198 207 199 var trimmedQuery = query.trim(); 208 var regExpString = trimmedQuery.escapeForRegExp().replace(/\\\*/g, ".*").replace(/(?!^)([A-Z])/g, "[^A-Z]*$1"); 209 var isSuffix = (query.charAt(query.length - 1) === " "); 210 if (isSuffix) 211 regExpString += "$"; 212 return new RegExp(regExpString, (trimmedQuery === trimmedQuery.toLowerCase() ? "i" : "") + (isGlobal ? "g" : "")); 200 201 var ignoreCase = (trimmedQuery === trimmedQuery.toLowerCase()); 202 203 const toEscape = "^[]{}()\\.$*+?|"; 204 205 var regExpString = ""; 206 for (var i = 0; i < trimmedQuery.length; ++i) { 207 var c = trimmedQuery.charAt(i); 208 if (toEscape.indexOf(c) !== -1) 209 c = "\\" + c; 210 if (i) 211 regExpString += "[^" + c + "]*"; 212 regExpString += c; 213 } 214 215 return new RegExp(regExpString, (ignoreCase ? "i" : "") + (isGlobal ? "g" : "")); 213 216 }, 214 217 … … 221 224 this._previousInputLength = query.length; 222 225 query = query.trim(); 226 var regex = this._createSearchRegExp(query); 223 227 224 228 var firstElement; … … 227 231 228 232 if (this._itemElementVisible(itemElement)) { 229 if (! this._checkItemAt(i, query))233 if (!regex.test(this._delegate.itemKeyAt(i))) 230 234 this._hideItemElement(itemElement); 231 } else if (!charsAdded && this._checkItemAt(i, query))235 } else if (!charsAdded && regex.test(this._delegate.itemKeyAt(i))) 232 236 this._showItemElement(itemElement); 233 237 … … 270 274 } 271 275 272 var isPageScroll = false;273 274 276 if (this._selectedElement) { 275 277 var candidate; … … 355 357 356 358 /** 357 * @param { string=} query359 * @param {!string} query 358 360 */ 359 361 _highlightItems: function(query)
Note: See TracChangeset
for help on using the changeset viewer.