Left: | ||
Right: |
OLD | NEW |
---|---|
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
60 */ | 60 */ |
61 type: null, | 61 type: null, |
62 | 62 |
63 /** | 63 /** |
64 * Filter text contained in the filter subscription. | 64 * Filter text contained in the filter subscription. |
65 * @type {Array.<string>} | 65 * @type {Array.<string>} |
66 * @private | 66 * @private |
67 */ | 67 */ |
68 _filterText: null, | 68 _filterText: null, |
69 | 69 |
70 /** | |
71 * A searchable index of filter text in the filter subscription. | |
Manish Jethani
2019/02/26 12:29:57
We might be able to find a better way to do this t
| |
72 * @type {?Set.<string>} | |
73 * @private | |
74 */ | |
75 _filterTextIndex: null, | |
76 | |
70 _title: null, | 77 _title: null, |
71 _fixedTitle: false, | 78 _fixedTitle: false, |
72 _disabled: false, | 79 _disabled: false, |
73 | 80 |
74 /** | 81 /** |
75 * Title of the filter subscription | 82 * Title of the filter subscription |
76 * @type {string} | 83 * @type {string} |
77 */ | 84 */ |
78 get title() | 85 get title() |
79 { | 86 { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
140 /** | 147 /** |
141 * Yields the text for each filter in the subscription. | 148 * Yields the text for each filter in the subscription. |
142 * @yields {string} | 149 * @yields {string} |
143 */ | 150 */ |
144 *filterText() | 151 *filterText() |
145 { | 152 { |
146 yield* this._filterText; | 153 yield* this._filterText; |
147 }, | 154 }, |
148 | 155 |
149 /** | 156 /** |
157 * Checks whether the subscription has the given filter text. | |
158 * @param {string} filterText | |
159 * @returns {boolean} | |
160 * @package | |
161 */ | |
162 hasFilterText(filterText) | |
163 { | |
164 if (!this._filterTextIndex) | |
Manish Jethani
2019/02/26 12:29:57
We build the index on first call. Unfortunately we
| |
165 this._filterTextIndex = new Set(this._filterText); | |
166 | |
167 return this._filterTextIndex.has(filterText); | |
168 }, | |
169 | |
170 /** | |
150 * Returns the filter text at the given 0-based index. | 171 * Returns the filter text at the given 0-based index. |
151 * @param {number} index | 172 * @param {number} index |
152 * @returns {?Filter} | 173 * @returns {?Filter} |
153 */ | 174 */ |
154 filterTextAt(index) | 175 filterTextAt(index) |
155 { | 176 { |
156 return this._filterText[index] || null; | 177 return this._filterText[index] || null; |
157 }, | 178 }, |
158 | 179 |
159 /** | 180 /** |
160 * Returns the 0-based index of the given filter. | 181 * Returns the 0-based index of the given filter. |
161 * @param {Filter} filter | 182 * @param {Filter} filter |
162 * @param {number} [fromIndex] The index from which to start the search. | 183 * @param {number} [fromIndex] The index from which to start the search. |
163 * @return {number} | 184 * @return {number} |
164 */ | 185 */ |
165 searchFilter(filter, fromIndex = 0) | 186 findFilterIndex(filter, fromIndex = 0) |
Manish Jethani
2019/02/26 12:29:57
While we're at it, let's rename this function to s
| |
166 { | 187 { |
167 return this._filterText.indexOf(filter.text, fromIndex); | 188 return this._filterText.indexOf(filter.text, fromIndex); |
168 }, | 189 }, |
169 | 190 |
170 /** | 191 /** |
171 * Removes all filters from the subscription. | 192 * Removes all filters from the subscription. |
172 */ | 193 */ |
173 clearFilters() | 194 clearFilters() |
174 { | 195 { |
175 this._filterText = []; | 196 this._filterText = []; |
197 this._filterTextIndex = null; | |
176 }, | 198 }, |
177 | 199 |
178 /** | 200 /** |
179 * Adds a filter to the subscription. | 201 * Adds a filter to the subscription. |
180 * @param {Filter} filter | 202 * @param {Filter} filter |
181 */ | 203 */ |
182 addFilter(filter) | 204 addFilter(filter) |
183 { | 205 { |
184 this._filterText.push(filter.text); | 206 this._filterText.push(filter.text); |
207 this._filterTextIndex = null; | |
hub
2019/03/08 21:36:19
Shouldn't it be more efficiant that we add the `fi
Manish Jethani
2019/03/30 20:50:35
Adding it right away would mean more memory usage
| |
185 }, | 208 }, |
186 | 209 |
187 /** | 210 /** |
188 * Adds a filter to the subscription. | 211 * Adds a filter to the subscription. |
189 * @param {string} filterText | 212 * @param {string} filterText |
190 */ | 213 */ |
191 addFilterText(filterText) | 214 addFilterText(filterText) |
192 { | 215 { |
193 this._filterText.push(filterText); | 216 this._filterText.push(filterText); |
217 this._filterTextIndex = null; | |
194 }, | 218 }, |
195 | 219 |
196 /** | 220 /** |
197 * Inserts a filter into the subscription. | 221 * Inserts a filter into the subscription. |
198 * @param {Filter} filter | 222 * @param {Filter} filter |
199 * @param {number} index The index at which to insert the filter. | 223 * @param {number} index The index at which to insert the filter. |
200 */ | 224 */ |
201 insertFilterAt(filter, index) | 225 insertFilterAt(filter, index) |
202 { | 226 { |
203 this._filterText.splice(index, 0, filter.text); | 227 this._filterText.splice(index, 0, filter.text); |
228 this._filterTextIndex = null; | |
204 }, | 229 }, |
205 | 230 |
206 /** | 231 /** |
207 * Deletes a filter from the subscription. | 232 * Deletes a filter from the subscription. |
208 * @param {number} index The index at which to delete the filter. | 233 * @param {number} index The index at which to delete the filter. |
209 */ | 234 */ |
210 deleteFilterAt(index) | 235 deleteFilterAt(index) |
211 { | 236 { |
212 // Ignore index if out of bounds on the negative side, for consistency. | 237 // Ignore index if out of bounds on the negative side, for consistency. |
213 if (index < 0) | 238 if (index < 0) |
214 return; | 239 return; |
215 | 240 |
216 this._filterText.splice(index, 1); | 241 this._filterText.splice(index, 1); |
242 this._filterTextIndex = null; | |
217 }, | 243 }, |
218 | 244 |
219 /** | 245 /** |
220 * Serializes the subscription for writing out on disk. | 246 * Serializes the subscription for writing out on disk. |
221 * @yields {string} | 247 * @yields {string} |
222 */ | 248 */ |
223 *serialize() | 249 *serialize() |
224 { | 250 { |
225 let {url, type, _title, _fixedTitle, _disabled} = this; | 251 let {url, type, _title, _fixedTitle, _disabled} = this; |
226 | 252 |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
674 if (errors) | 700 if (errors) |
675 yield "errors=" + errors; | 701 yield "errors=" + errors; |
676 if (version) | 702 if (version) |
677 yield "version=" + version; | 703 yield "version=" + version; |
678 if (requiredVersion) | 704 if (requiredVersion) |
679 yield "requiredVersion=" + requiredVersion; | 705 yield "requiredVersion=" + requiredVersion; |
680 if (downloadCount) | 706 if (downloadCount) |
681 yield "downloadCount=" + downloadCount; | 707 yield "downloadCount=" + downloadCount; |
682 } | 708 } |
683 }); | 709 }); |
OLD | NEW |