| Index: Source/devtools/front_end/components/SearchableView.js
|
| diff --git a/Source/devtools/front_end/components/SearchableView.js b/Source/devtools/front_end/components/SearchableView.js
|
| index dd4021a9d8d9b32fd6410a1ff5d68b2fe85cb7b0..bcf2b05e77df95c6fee2e95921aa35db06ee573a 100644
|
| --- a/Source/devtools/front_end/components/SearchableView.js
|
| +++ b/Source/devtools/front_end/components/SearchableView.js
|
| @@ -33,10 +33,12 @@
|
| * @constructor
|
| * @extends {WebInspector.VBox}
|
| * @param {!WebInspector.Searchable} searchable
|
| + * @param {?boolean=} supportRegex
|
| */
|
| -WebInspector.SearchableView = function(searchable)
|
| +WebInspector.SearchableView = function(searchable, supportRegex)
|
| {
|
| WebInspector.VBox.call(this);
|
| + this.registerRequiredCSS("searchable.css");
|
|
|
| this._searchProvider = searchable;
|
| this.element.addEventListener("keydown", this._onKeyDown.bind(this), false);
|
| @@ -102,17 +104,20 @@ WebInspector.SearchableView = function(searchable)
|
|
|
| // Column 4
|
| this._replaceElement = this._firstRowElement.createChild("td").createChild("span");
|
| -
|
| - this._replaceCheckboxElement = this._replaceElement.createChild("input");
|
| - this._replaceCheckboxElement.type = "checkbox";
|
| this._uniqueId = ++WebInspector.SearchableView._lastUniqueId;
|
| - var replaceCheckboxId = "search-replace-trigger" + this._uniqueId;
|
| - this._replaceCheckboxElement.id = replaceCheckboxId;
|
| - this._replaceCheckboxElement.addEventListener("change", this._updateSecondRowVisibility.bind(this), false);
|
| -
|
| - this._replaceLabelElement = this._replaceElement.createChild("label");
|
| - this._replaceLabelElement.textContent = WebInspector.UIString("Replace");
|
| - this._replaceLabelElement.setAttribute("for", replaceCheckboxId);
|
| + var replaceChildElements = this._createCheckbox(this._replaceElement, "search-replace",
|
| + this._updateSecondRowVisibility, "Replace");
|
| + this._replaceCheckboxElement = replaceChildElements[0];
|
| + this._replaceLabelElement = replaceChildElements[1];
|
| +
|
| + if (supportRegex) {
|
| + this.enableRegex = false;
|
| + this._regexElement = this._firstRowElement.createChild("td").createChild("span");
|
| + var regexChildElements = this._createCheckbox(this._regexElement, "search-regex", this._onRegexToggle,
|
| + "Regex");
|
| + this._regexCheckboxElement = regexChildElements[0];
|
| + this._regexLabelElement = regexChildElements[1];
|
| + }
|
|
|
| // Column 5
|
| var cancelButtonElement = this._firstRowElement.createChild("td").createChild("button");
|
| @@ -485,6 +490,7 @@ WebInspector.SearchableView.prototype = {
|
| this._searchProvider.searchCanceled();
|
| }
|
| this._updateSearchMatchesCountAndCurrentMatchIndex(0, -1);
|
| + this.setQueryInvalid(false);
|
| },
|
|
|
| /**
|
| @@ -500,9 +506,14 @@ WebInspector.SearchableView.prototype = {
|
| return;
|
| }
|
|
|
| + this.setQueryInvalid(false);
|
| this._currentQuery = query;
|
| this._searchProvider.currentQuery = query;
|
| - this._searchProvider.performSearch(query, shouldJump, jumpBackwards);
|
| + if (!this.enableRegex) {
|
| + this._searchProvider.performSearch(query, shouldJump, jumpBackwards);
|
| + } else {
|
| + this._searchProvider.performRegexSearch(query, shouldJump, jumpBackwards);
|
| + }
|
| },
|
|
|
| _updateSecondRowVisibility: function()
|
| @@ -544,6 +555,37 @@ WebInspector.SearchableView.prototype = {
|
| this._performSearch(false, true);
|
| },
|
|
|
| + _onRegexToggle: function (event)
|
| + {
|
| + this._searchProvider.searchCanceled();
|
| + this.enableRegex = event.target.checked;
|
| + this._performSearch(true, true, true);
|
| + },
|
| +
|
| + setQueryInvalid: function (invalid) {
|
| + var cls = "search-query-invalid";
|
| + if (invalid) {
|
| + this._searchInputElement.classList.add(cls);
|
| + } else {
|
| + this._searchInputElement.classList.remove(cls);
|
| + }
|
| + },
|
| +
|
| + _createCheckbox: function(parentElement, idPrefix, toggleCallback, label)
|
| + {
|
| + var checkboxElement = parentElement.createChild("input");
|
| + checkboxElement.type = "checkbox";
|
| + var checkboxId = idPrefix + "-trigger" + this._uniqueId;
|
| + checkboxElement.id = checkboxId;
|
| + checkboxElement.addEventListener("change", toggleCallback.bind(this), false);
|
| +
|
| + var labelElement = parentElement.createChild("label");
|
| + labelElement.textContent = WebInspector.UIString(label);
|
| + labelElement.setAttribute("for", checkboxId);
|
| +
|
| + return [checkboxElement, labelElement];
|
| + },
|
| +
|
| __proto__: WebInspector.VBox.prototype
|
| }
|
|
|
| @@ -564,6 +606,8 @@ WebInspector.Searchable.prototype = {
|
| */
|
| performSearch: function(query, shouldJump, jumpBackwards) { },
|
|
|
| + performRegexSearch: function(query, shouldJump, jumpBackwards) { },
|
| +
|
| jumpToNextSearchResult: function() { },
|
|
|
| jumpToPreviousSearchResult: function() { }
|
|
|