|
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