OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | |
3 * | |
4 * Redistribution and use in source and binary forms, with or without | |
5 * modification, are permitted provided that the following conditions are | |
6 * met: | |
7 * | |
8 * 1. Redistributions of source code must retain the above copyright | |
9 * notice, this list of conditions and the following disclaimer. | |
10 * | |
11 * 2. Redistributions in binary form must reproduce the above | |
12 * copyright notice, this list of conditions and the following disclaimer | |
13 * in the documentation and/or other materials provided with the | |
14 * distribution. | |
15 * | |
16 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS | |
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. | |
20 * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
27 */ | |
28 | |
29 /** | |
30 * @constructor | |
31 * @implements {WebInspector.SearchScope} | |
32 * @param {WebInspector.Workspace} workspace | |
33 */ | |
34 WebInspector.ScriptsSearchScope = function(workspace) | |
35 { | |
36 // FIXME: Add title once it is used by search controller. | |
37 WebInspector.SearchScope.call(this) | |
38 this._searchId = 0; | |
39 this._workspace = workspace; | |
40 } | |
41 | |
42 WebInspector.ScriptsSearchScope.prototype = { | |
43 /** | |
44 * @param {WebInspector.Progress} progress | |
45 * @param {function(boolean)} indexingFinishedCallback | |
46 */ | |
47 performIndexing: function(progress, indexingFinishedCallback) | |
48 { | |
49 this.stopSearch(); | |
50 | |
51 function filterOutServiceProjects(project) | |
52 { | |
53 return !project.isServiceProject(); | |
54 } | |
55 | |
56 var projects = this._workspace.projects().filter(filterOutServiceProject
s); | |
57 var barrier = new CallbackBarrier(); | |
58 var compositeProgress = new WebInspector.CompositeProgress(progress); | |
59 progress.addEventListener(WebInspector.Progress.Events.Canceled, indexin
gCanceled.bind(this)); | |
60 for (var i = 0; i < projects.length; ++i) { | |
61 var project = projects[i]; | |
62 var projectProgress = compositeProgress.createSubProgress(project.ui
SourceCodes().length); | |
63 project.indexContent(projectProgress, barrier.createCallback()); | |
64 } | |
65 barrier.callWhenDone(indexingFinishedCallback.bind(this, true)); | |
66 | |
67 function indexingCanceled() | |
68 { | |
69 indexingFinishedCallback(false); | |
70 progress.done(); | |
71 } | |
72 }, | |
73 | |
74 /** | |
75 * @param {WebInspector.SearchConfig} searchConfig | |
76 * @param {WebInspector.Progress} progress | |
77 * @param {function(WebInspector.FileBasedSearchResultsPane.SearchResult)} s
earchResultCallback | |
78 * @param {function(boolean)} searchFinishedCallback | |
79 */ | |
80 performSearch: function(searchConfig, progress, searchResultCallback, search
FinishedCallback) | |
81 { | |
82 this.stopSearch(); | |
83 | |
84 /** | |
85 * @param {WebInspector.Project} project | |
86 */ | |
87 function filterOutServiceProjects(project) | |
88 { | |
89 return !project.isServiceProject(); | |
90 } | |
91 | |
92 var projects = this._workspace.projects().filter(filterOutServiceProject
s); | |
93 var barrier = new CallbackBarrier(); | |
94 var compositeProgress = new WebInspector.CompositeProgress(progress); | |
95 for (var i = 0; i < projects.length; ++i) { | |
96 var project = projects[i]; | |
97 var projectProgress = compositeProgress.createSubProgress(project.ui
SourceCodes().length); | |
98 var callback = barrier.createCallback(searchCallbackWrapper.bind(thi
s, this._searchId, project)); | |
99 project.searchInContent(searchConfig.query, !searchConfig.ignoreCase
, searchConfig.isRegex, projectProgress, callback); | |
100 } | |
101 barrier.callWhenDone(searchFinishedCallback.bind(this, true)); | |
102 | |
103 /** | |
104 * @param {number} searchId | |
105 * @param {WebInspector.Project} project | |
106 * @param {StringMap} searchMatches | |
107 */ | |
108 function searchCallbackWrapper(searchId, project, searchMatches) | |
109 { | |
110 if (searchId !== this._searchId) { | |
111 searchFinishedCallback(false); | |
112 return; | |
113 } | |
114 var paths = searchMatches.keys(); | |
115 for (var i = 0; i < paths.length; ++i) { | |
116 var uiSourceCode = project.uiSourceCode(paths[i]); | |
117 var searchResult = new WebInspector.FileBasedSearchResultsPane.S
earchResult(uiSourceCode, searchMatches.get(paths[i])); | |
118 searchResultCallback(searchResult); | |
119 } | |
120 } | |
121 }, | |
122 | |
123 stopSearch: function() | |
124 { | |
125 ++this._searchId; | |
126 }, | |
127 | |
128 /** | |
129 * @param {WebInspector.SearchConfig} searchConfig | |
130 */ | |
131 createSearchResultsPane: function(searchConfig) | |
132 { | |
133 return new WebInspector.FileBasedSearchResultsPane(searchConfig); | |
134 }, | |
135 | |
136 __proto__: WebInspector.SearchScope.prototype | |
137 } | |
OLD | NEW |