|
137 | 137 | val = valLower,
|
138 | 138 | typeFilter = query.type,
|
139 | 139 | results = [],
|
140 |
| - aa = 0, |
141 |
| - bb = 0, |
142 | 140 | split = valLower.split("::");
|
143 | 141 |
|
144 | 142 | //remove empty keywords
|
|
150 | 148 | }
|
151 | 149 |
|
152 | 150 | // quoted values mean literal search
|
153 |
| - bb = searchWords.length; |
| 151 | + var nSearchWords = searchWords.length; |
154 | 152 | if ((val.charAt(0) === "\"" || val.charAt(0) === "'") &&
|
155 | 153 | val.charAt(val.length - 1) === val.charAt(0))
|
156 | 154 | {
|
157 | 155 | val = val.substr(1, val.length - 2);
|
158 |
| - for (aa = 0; aa < bb; aa += 1) { |
159 |
| - if (searchWords[aa] === val) { |
| 156 | + for (var i = 0; i < nSearchWords; i += 1) { |
| 157 | + if (searchWords[i] === val) { |
160 | 158 | // filter type: ... queries
|
161 |
| - if (!typeFilter || typeFilter === searchIndex[aa].ty) { |
162 |
| - results.push([aa, -1]); |
| 159 | + if (!typeFilter || typeFilter === searchIndex[i].ty) { |
| 160 | + results.push({id: i, index: -1}); |
163 | 161 | }
|
164 | 162 | }
|
165 | 163 | if (results.length === max) {
|
|
170 | 168 | // gather matching search results up to a certain maximum
|
171 | 169 | val = val.replace(/\_/g, "");
|
172 | 170 | for (var i = 0; i < split.length; i++) {
|
173 |
| - for (aa = 0; aa < bb; aa += 1) { |
174 |
| - if (searchWords[aa].indexOf(split[i]) > -1 || |
175 |
| - searchWords[aa].indexOf(val) > -1 || |
176 |
| - searchWords[aa].replace(/_/g, "").indexOf(val) > -1) |
| 171 | + for (var j = 0; j < nSearchWords; j += 1) { |
| 172 | + if (searchWords[j].indexOf(split[i]) > -1 || |
| 173 | + searchWords[j].indexOf(val) > -1 || |
| 174 | + searchWords[j].replace(/_/g, "").indexOf(val) > -1) |
177 | 175 | {
|
178 | 176 | // filter type: ... queries
|
179 |
| - if (!typeFilter || typeFilter === searchIndex[aa].ty) { |
180 |
| - results.push([aa, searchWords[aa].replace(/_/g, "").indexOf(val)]); |
| 177 | + if (!typeFilter || typeFilter === searchIndex[j].ty) { |
| 178 | + results.push({id: j, index: searchWords[j].replace(/_/g, "").indexOf(val)}); |
181 | 179 | }
|
182 | 180 | }
|
183 | 181 | if (results.length === max) {
|
|
187 | 185 | }
|
188 | 186 | }
|
189 | 187 |
|
190 |
| - bb = results.length; |
191 |
| - for (aa = 0; aa < bb; aa += 1) { |
192 |
| - results[aa].push(searchIndex[results[aa][0]].ty); |
193 |
| - results[aa].push(searchIndex[results[aa][0]].path); |
194 |
| - results[aa].push(searchIndex[results[aa][0]].name); |
195 |
| - results[aa].push(searchIndex[results[aa][0]].parent); |
196 |
| - results[aa].push(searchIndex[results[aa][0]].crate); |
| 188 | + var nresults = results.length; |
| 189 | + for (var i = 0; i < nresults; i += 1) { |
| 190 | + results[i].word = searchWords[results[i].id]; |
| 191 | + results[i].item = searchIndex[results[i].id] || {}; |
| 192 | + results[i].ty = results[i].item.ty; |
| 193 | + results[i].path = results[i].item.path; |
197 | 194 | }
|
198 | 195 | // if there are no results then return to default and fail
|
199 | 196 | if (results.length === 0) {
|
|
202 | 199 |
|
203 | 200 | // sort by exact match
|
204 | 201 | results.sort(function search_complete_sort0(aaa, bbb) {
|
205 |
| - if (searchWords[aaa[0]] === valLower && |
206 |
| - searchWords[bbb[0]] !== valLower) { |
| 202 | + if (aaa.word === valLower && |
| 203 | + bbb.word !== valLower) { |
207 | 204 | return 1;
|
208 | 205 | }
|
209 | 206 | });
|
210 | 207 | // first sorting attempt
|
211 | 208 | // sort by item name length
|
212 | 209 | results.sort(function search_complete_sort1(aaa, bbb) {
|
213 |
| - if (searchWords[aaa[0]].length > searchWords[bbb[0]].length) { |
| 210 | + if (aaa.word.length > bbb.word.length) { |
214 | 211 | return 1;
|
215 | 212 | }
|
216 | 213 | });
|
217 | 214 | // second sorting attempt
|
218 | 215 | // sort by item name
|
219 | 216 | results.sort(function search_complete_sort1(aaa, bbb) {
|
220 |
| - if (searchWords[aaa[0]].length === searchWords[bbb[0]].length && |
221 |
| - searchWords[aaa[0]] > searchWords[bbb[0]]) { |
| 217 | + if (aaa.word.length === bbb.word.length && |
| 218 | + aaa.word > bbb.word) { |
222 | 219 | return 1;
|
223 | 220 | }
|
224 | 221 | });
|
225 | 222 | // third sorting attempt
|
226 | 223 | // sort by index of keyword in item name
|
227 |
| - if (results[0][1] !== -1) { |
| 224 | + if (results[0].index !== -1) { |
228 | 225 | results.sort(function search_complete_sort1(aaa, bbb) {
|
229 |
| - if (aaa[1] > bbb[1] && bbb[1] === 0) { |
| 226 | + if (aaa.index > bbb.index && bbb.index === 0) { |
230 | 227 | return 1;
|
231 | 228 | }
|
232 | 229 | });
|
233 | 230 | }
|
234 | 231 | // fourth sorting attempt
|
235 | 232 | // sort by type
|
236 | 233 | results.sort(function search_complete_sort3(aaa, bbb) {
|
237 |
| - if (searchWords[aaa[0]] === searchWords[bbb[0]] && |
238 |
| - aaa[2] > bbb[2]) { |
| 234 | + if (aaa.word === bbb.word && |
| 235 | + aaa.ty > bbb.ty) { |
239 | 236 | return 1;
|
240 | 237 | }
|
241 | 238 | });
|
242 | 239 | // fifth sorting attempt
|
243 | 240 | // sort by path
|
244 | 241 | results.sort(function search_complete_sort4(aaa, bbb) {
|
245 |
| - if (searchWords[aaa[0]] === searchWords[bbb[0]] && |
246 |
| - aaa[2] === bbb[2] && aaa[3] > bbb[3]) { |
| 242 | + if (aaa.word === bbb.word && |
| 243 | + aaa.ty === bbb.ty && aaa.path > bbb.path) { |
247 | 244 | return 1;
|
248 | 245 | }
|
249 | 246 | });
|
250 | 247 | // sixth sorting attempt
|
251 | 248 | // remove duplicates, according to the data provided
|
252 |
| - for (aa = results.length - 1; aa > 0; aa -= 1) { |
253 |
| - if (searchWords[results[aa][0]] === searchWords[results[aa - 1][0]] && |
254 |
| - results[aa][2] === results[aa - 1][2] && |
255 |
| - results[aa][3] === results[aa - 1][3]) |
| 249 | + for (var i = results.length - 1; i > 0; i -= 1) { |
| 250 | + if (results[i].word === results[i - 1].word && |
| 251 | + results[i].ty === results[i - 1].ty && |
| 252 | + results[i].path === results[i - 1].path) |
256 | 253 | {
|
257 |
| - results[aa][0] = -1; |
| 254 | + results[i].id = -1; |
258 | 255 | }
|
259 | 256 | }
|
260 | 257 | for (var i = 0; i < results.length; i++) {
|
261 | 258 | var result = results[i],
|
262 |
| - name = result[4].toLowerCase(), |
263 |
| - path = result[3].toLowerCase(), |
264 |
| - parent = allPaths[result[6]][result[5]]; |
| 259 | + name = result.item.name.toLowerCase(), |
| 260 | + path = result.item.path.toLowerCase(), |
| 261 | + parent = allPaths[result.item.crate][result.item.parent]; |
265 | 262 |
|
266 | 263 | var valid = validateResult(name, path, split, parent);
|
267 | 264 | if (!valid) {
|
268 |
| - result[0] = -1; |
| 265 | + result.id = -1; |
269 | 266 | }
|
270 | 267 | }
|
271 | 268 | return results;
|
|
495 | 492 | resultIndex = execQuery(query, 20000, index);
|
496 | 493 | len = resultIndex.length;
|
497 | 494 | for (i = 0; i < len; i += 1) {
|
498 |
| - if (resultIndex[i][0] > -1) { |
499 |
| - obj = searchIndex[resultIndex[i][0]]; |
| 495 | + if (resultIndex[i].id > -1) { |
| 496 | + obj = searchIndex[resultIndex[i].id]; |
500 | 497 | filterdata.push([obj.name, obj.ty, obj.path, obj.desc]);
|
501 | 498 | results.push(obj);
|
502 | 499 | }
|
|
580 | 577 |
|
581 | 578 | // Draw a convenient sidebar of known crates if we have a listing
|
582 | 579 | if (rootPath == '../') {
|
583 |
| - console.log('here'); |
584 | 580 | var sidebar = $('.sidebar');
|
585 | 581 | var div = $('<div>').attr('class', 'block crate');
|
586 | 582 | div.append($('<h2>').text('Crates'));
|
|
0 commit comments