Index: Source/devtools/front_end/source_frame/SourceFrame.js |
diff --git a/Source/devtools/front_end/source_frame/SourceFrame.js b/Source/devtools/front_end/source_frame/SourceFrame.js |
index d8e5afee3294723e6aec722bd4916442747d0a8a..2e21badb1e2c495a46e18eebe46b612a67404525 100644 |
--- a/Source/devtools/front_end/source_frame/SourceFrame.js |
+++ b/Source/devtools/front_end/source_frame/SourceFrame.js |
@@ -82,9 +82,9 @@ WebInspector.SourceFrame.createSearchRegex = function(query, modifiers) |
// Silent catch. |
} |
- // Otherwise just do case-insensitive search. |
+ // Otherwise just do a plain text search. |
if (!regex) |
- regex = createPlainTextSearchRegex(query, "i" + modifiers); |
+ regex = createPlainTextSearchRegex(query, modifiers); |
return regex; |
} |
@@ -396,46 +396,45 @@ WebInspector.SourceFrame.prototype = { |
this._textEditor.endUpdates(); |
}, |
+ _doFindSearchMatches: function(searchConfig, shouldJump, jumpBackwards, searchFinishedCallback) |
+ { |
+ this._currentSearchResultIndex = -1; |
+ this._searchResults = []; |
+ |
+ var modifiers = searchConfig.caseSensitive ? "" : "i"; |
+ var query = searchConfig.isRegex ? "/" + searchConfig.query + "/" : searchConfig.query; |
+ var regex = WebInspector.SourceFrame.createSearchRegex(query, modifiers); |
+ this._searchRegex = regex; |
+ this._searchResults = this._collectRegexMatches(regex); |
+ if (!this._searchResults.length) |
+ this._textEditor.cancelSearchResultsHighlight(); |
+ else if (shouldJump && jumpBackwards) |
+ this.jumpToPreviousSearchResult(); |
+ else if (shouldJump) |
+ this.jumpToNextSearchResult(); |
+ else |
+ this._textEditor.highlightSearchResults(regex, null); |
+ searchFinishedCallback(this, this._searchResults.length); |
+ }, |
+ |
/** |
- * @param {string} query |
+ * @param {!WebInspector.SearchableView.SearchConfig} searchConfig |
* @param {boolean} shouldJump |
* @param {boolean} jumpBackwards |
- * @param {function(!WebInspector.View, number)} callback |
+ * @param {function(!WebInspector.View, number)} searchFinishedCallback |
* @param {function(number)} currentMatchChangedCallback |
* @param {function()} searchResultsChangedCallback |
*/ |
- performSearch: function(query, shouldJump, jumpBackwards, callback, currentMatchChangedCallback, searchResultsChangedCallback) |
- { |
- /** |
- * @param {string} query |
- * @this {WebInspector.SourceFrame} |
- */ |
- function doFindSearchMatches(query) |
- { |
- this._currentSearchResultIndex = -1; |
- this._searchResults = []; |
- |
- var regex = WebInspector.SourceFrame.createSearchRegex(query); |
- this._searchRegex = regex; |
- this._searchResults = this._collectRegexMatches(regex); |
- if (!this._searchResults.length) |
- this._textEditor.cancelSearchResultsHighlight(); |
- else if (shouldJump && jumpBackwards) |
- this.jumpToPreviousSearchResult(); |
- else if (shouldJump) |
- this.jumpToNextSearchResult(); |
- else |
- this._textEditor.highlightSearchResults(regex, null); |
- callback(this, this._searchResults.length); |
- } |
- |
+ performSearch: function(searchConfig, shouldJump, jumpBackwards, searchFinishedCallback, currentMatchChangedCallback, searchResultsChangedCallback) |
+ { |
this._resetSearch(); |
this._currentSearchMatchChangedCallback = currentMatchChangedCallback; |
this._searchResultsChangedCallback = searchResultsChangedCallback; |
+ var searchFunction = this._doFindSearchMatches.bind(this, searchConfig, shouldJump, jumpBackwards, searchFinishedCallback); |
if (this.loaded) |
- doFindSearchMatches.call(this, query); |
+ searchFunction.call(this); |
else |
- this._delayedFindSearchMatches = doFindSearchMatches.bind(this, query); |
+ this._delayedFindSearchMatches = searchFunction; |
this._ensureContentLoaded(); |
}, |
@@ -547,29 +546,32 @@ WebInspector.SourceFrame.prototype = { |
}, |
/** |
- * @param {string} text |
+ * @param {string} replacement |
*/ |
- replaceSelectionWith: function(text) |
+ replaceSelectionWith: function(replacement) |
{ |
var range = this._searchResults[this._currentSearchResultIndex]; |
if (!range) |
return; |
this._textEditor.highlightSearchResults(this._searchRegex, null); |
- var newRange = this._textEditor.editRange(range, text); |
+ var newRange = this._textEditor.editRange(range, replacement); |
this._textEditor.setSelection(newRange.collapseToEnd()); |
}, |
/** |
- * @param {string} query |
+ * @param {!WebInspector.SearchableView.SearchConfig} searchConfig |
* @param {string} replacement |
*/ |
- replaceAllWith: function(query, replacement) |
+ replaceAllWith: function(searchConfig, replacement) |
{ |
this._resetCurrentSearchResultIndex(); |
var text = this._textEditor.text(); |
var range = this._textEditor.range(); |
- var regex = WebInspector.SourceFrame.createSearchRegex(query, "g"); |
+ |
+ var modifiers = searchConfig.caseSensitive ? "" : "i"; |
+ var query = searchConfig.isRegex ? "/" + searchConfig.query + "/" : searchConfig.query; |
+ var regex = WebInspector.SourceFrame.createSearchRegex(query, "g" + modifiers); |
if (regex.__fromRegExpQuery) |
text = text.replace(regex, replacement); |
else |
@@ -604,10 +606,11 @@ WebInspector.SourceFrame.prototype = { |
do { |
var match = regexObject.exec(line); |
if (match) { |
+ var matchEndIndex = match.index + Math.max(match[0].length, 1); |
if (match[0].length) |
- ranges.push(new WebInspector.TextRange(i, offset + match.index, i, offset + match.index + match[0].length)); |
- offset += match.index + 1; |
- line = line.substring(match.index + 1); |
+ ranges.push(new WebInspector.TextRange(i, offset + match.index, i, offset + matchEndIndex)); |
+ offset += matchEndIndex; |
+ line = line.substring(matchEndIndex); |
} |
} while (match && line); |
} |