Changeset 116244 in webkit


Ignore:
Timestamp:
May 6, 2012 3:19:45 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: "Goto Function" filtering should be less restrictive.
https://bugs.webkit.org/show_bug.cgi?id=85586

Patch by Eugene Klyuchnikov <eustas.bug@gmail.com> on 2012-05-06
Reviewed by Pavel Feldman.

Added tests for generated regex.

Changes:
1) Avoid asterisks in filtering queue.
2) Optimization: do not create regexp for each item.

  • inspector/front-end/FilteredItemSelectionDialog.js:

(WebInspector.FilteredItemSelectionDialog.prototype.get _itemsLoaded):
Applied new filtering workflow.
(WebInspector.FilteredItemSelectionDialog.prototype._checkItemAt):
Removed.
(WebInspector.FilteredItemSelectionDialog.prototype._createSearchRegExp):
Removed unused "suffix" logic; changed the way regexp is composed from query.
(WebInspector.FilteredItemSelectionDialog.prototype._filterItems):
Applied new filtering workflow.
(WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown):
Removed unused var.

Location:
trunk
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r116243 r116244  
     12012-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
    1262012-05-06  Kent Tamura  <tkent@chromium.org>
    227
  • trunk/Source/WebCore/inspector/front-end/FilteredItemSelectionDialog.js

    r116216 r116244  
    124124        var fragment = document.createDocumentFragment();
    125125        var candidateItem = this._selectedElement;
     126        var regex = this._createSearchRegExp(this._promptElement.value);
    126127        for (var i = index; i < index + chunkLength; ++i) {
    127128            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))) {
    129130                if (!candidateItem)
    130131                    candidateItem = itemElement;
     
    188189
    189190    /**
    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
    203192     * @param {boolean=} isGlobal
    204193     */
    205194    _createSearchRegExp: function(query, isGlobal)
    206195    {
     196        if (!query || !query.trim())
     197            return new RegExp(".*");
     198
    207199        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" : ""));
    213216    },
    214217
     
    221224        this._previousInputLength = query.length;
    222225        query = query.trim();
     226        var regex = this._createSearchRegExp(query);
    223227
    224228        var firstElement;
     
    227231           
    228232            if (this._itemElementVisible(itemElement)) {
    229                 if (!this._checkItemAt(i, query))
     233                if (!regex.test(this._delegate.itemKeyAt(i)))
    230234                    this._hideItemElement(itemElement);
    231             } else if (!charsAdded && this._checkItemAt(i, query))
     235            } else if (!charsAdded && regex.test(this._delegate.itemKeyAt(i)))
    232236                this._showItemElement(itemElement);
    233237           
     
    270274        }
    271275
    272         var isPageScroll = false;
    273 
    274276        if (this._selectedElement) {
    275277            var candidate;
     
    355357
    356358    /**
    357      * @param {string=} query
     359     * @param {!string} query
    358360     */
    359361    _highlightItems: function(query)
Note: See TracChangeset for help on using the changeset viewer.