|
259 | 259 | //
|
260 | 260 | // So I guess you could say things are getting pretty interoperable.
|
261 | 261 | function getVirtualKey(ev) {
|
262 |
| - if ("key" in ev && typeof ev.key != "undefined") |
| 262 | + if ("key" in ev && typeof ev.key != "undefined") { |
263 | 263 | return ev.key;
|
| 264 | + } |
264 | 265 |
|
265 | 266 | var c = ev.charCode || ev.keyCode;
|
266 |
| - if (c == 27) |
| 267 | + if (c == 27) { |
267 | 268 | return "Escape";
|
| 269 | + } |
268 | 270 | return String.fromCharCode(c);
|
269 | 271 | }
|
270 | 272 |
|
|
472 | 474 |
|
473 | 475 | /**
|
474 | 476 | * Executes the query and builds an index of results
|
475 |
| - * @param {[Object]} query [The user query] |
476 |
| - * @param {[type]} searchWords [The list of search words to query |
477 |
| - * against] |
478 |
| - * @return {[type]} [A search index of results] |
| 477 | + * @param {[Object]} query [The user query] |
| 478 | + * @param {[type]} searchWords [The list of search words to query |
| 479 | + * against] |
| 480 | + * @param {[type]} filterCrates [Crate to search in if defined] |
| 481 | + * @return {[type]} [A search index of results] |
479 | 482 | */
|
480 |
| - function execQuery(query, searchWords) { |
| 483 | + function execQuery(query, searchWords, filterCrates) { |
481 | 484 | function itemTypeFromName(typename) {
|
482 | 485 | for (var i = 0; i < itemTypes.length; ++i) {
|
483 | 486 | if (itemTypes[i] === typename) {
|
|
853 | 856 | {
|
854 | 857 | val = extractGenerics(val.substr(1, val.length - 2));
|
855 | 858 | for (var i = 0; i < nSearchWords; ++i) {
|
| 859 | + if (filterCrates !== undefined && searchIndex[i].crate !== filterCrates) { |
| 860 | + continue; |
| 861 | + } |
856 | 862 | var in_args = findArg(searchIndex[i], val, true);
|
857 | 863 | var returned = checkReturned(searchIndex[i], val, true);
|
858 | 864 | var ty = searchIndex[i];
|
|
907 | 913 | var output = extractGenerics(parts[1]);
|
908 | 914 |
|
909 | 915 | for (var i = 0; i < nSearchWords; ++i) {
|
| 916 | + if (filterCrates !== undefined && searchIndex[i].crate !== filterCrates) { |
| 917 | + continue; |
| 918 | + } |
910 | 919 | var type = searchIndex[i].type;
|
911 | 920 | var ty = searchIndex[i];
|
912 | 921 | if (!type) {
|
|
978 | 987 | var contains = paths.slice(0, paths.length > 1 ? paths.length - 1 : 1);
|
979 | 988 |
|
980 | 989 | for (j = 0; j < nSearchWords; ++j) {
|
981 |
| - var lev_distance; |
982 | 990 | var ty = searchIndex[j];
|
983 |
| - if (!ty) { |
| 991 | + if (!ty || (filterCrates !== undefined && ty.crate !== filterCrates)) { |
984 | 992 | continue;
|
985 | 993 | }
|
| 994 | + var lev_distance; |
986 | 995 | var lev_add = 0;
|
987 | 996 | if (paths.length > 1) {
|
988 | 997 | var lev = checkPath(contains, paths[paths.length - 1], ty);
|
|
1358 | 1367 | return '<div>' + text + ' <div class="count">(' + nbElems + ')</div></div>';
|
1359 | 1368 | }
|
1360 | 1369 |
|
1361 |
| - function showResults(results) { |
| 1370 | + function showResults(results, filterCrates) { |
1362 | 1371 | if (results['others'].length === 1 &&
|
1363 | 1372 | getCurrentValue('rustdoc-go-to-only-result') === "true") {
|
1364 | 1373 | var elem = document.createElement('a');
|
|
1376 | 1385 | var ret_in_args = addTab(results['in_args'], query, false);
|
1377 | 1386 | var ret_returned = addTab(results['returned'], query, false);
|
1378 | 1387 |
|
| 1388 | + var filter = ""; |
| 1389 | + if (filterCrates !== undefined) { |
| 1390 | + filter = " (in <b>" + filterCrates + "</b> crate)"; |
| 1391 | + } |
| 1392 | + |
1379 | 1393 | var output = '<h1>Results for ' + escape(query.query) +
|
1380 |
| - (query.type ? ' (type: ' + escape(query.type) + ')' : '') + '</h1>' + |
| 1394 | + (query.type ? ' (type: ' + escape(query.type) + ')' : '') + filter + '</h1>' + |
1381 | 1395 | '<div id="titles">' +
|
1382 | 1396 | makeTabHeader(0, "In Names", ret_others[1]) +
|
1383 | 1397 | makeTabHeader(1, "In Parameters", ret_in_args[1]) +
|
|
1406 | 1420 | printTab(currentTab);
|
1407 | 1421 | }
|
1408 | 1422 |
|
1409 |
| - function execSearch(query, searchWords) { |
| 1423 | + function execSearch(query, searchWords, filterCrates) { |
1410 | 1424 | var queries = query.raw.split(",");
|
1411 | 1425 | var results = {
|
1412 | 1426 | 'in_args': [],
|
|
1417 | 1431 | for (var i = 0; i < queries.length; ++i) {
|
1418 | 1432 | var query = queries[i].trim();
|
1419 | 1433 | if (query.length !== 0) {
|
1420 |
| - var tmp = execQuery(getQuery(query), searchWords); |
| 1434 | + var tmp = execQuery(getQuery(query), searchWords, filterCrates); |
1421 | 1435 |
|
1422 | 1436 | results['in_args'].push(tmp['in_args']);
|
1423 | 1437 | results['returned'].push(tmp['returned']);
|
|
1479 | 1493 | }
|
1480 | 1494 | }
|
1481 | 1495 |
|
1482 |
| - function search(e) { |
| 1496 | + function getFilterCrates() { |
| 1497 | + var elem = document.getElementById("crate-search"); |
| 1498 | + |
| 1499 | + if (elem && elem.value !== "All crates" && rawSearchIndex.hasOwnProperty(elem.value)) { |
| 1500 | + return elem.value; |
| 1501 | + } |
| 1502 | + return undefined; |
| 1503 | + } |
| 1504 | + |
| 1505 | + function search(e, forced) { |
1483 | 1506 | var params = getQueryStringParams();
|
1484 | 1507 | var query = getQuery(search_input.value.trim());
|
1485 | 1508 |
|
1486 | 1509 | if (e) {
|
1487 | 1510 | e.preventDefault();
|
1488 | 1511 | }
|
1489 | 1512 |
|
1490 |
| - if (query.query.length === 0 || query.id === currentResults) { |
| 1513 | + if (query.query.length === 0) { |
| 1514 | + return; |
| 1515 | + } |
| 1516 | + if (forced !== true && query.id === currentResults) { |
1491 | 1517 | if (query.query.length > 0) {
|
1492 | 1518 | putBackSearch(search_input);
|
1493 | 1519 | }
|
|
1507 | 1533 | }
|
1508 | 1534 | }
|
1509 | 1535 |
|
1510 |
| - showResults(execSearch(query, index)); |
| 1536 | + var filterCrates = getFilterCrates(); |
| 1537 | + showResults(execSearch(query, index, filterCrates), filterCrates); |
1511 | 1538 | }
|
1512 | 1539 |
|
1513 | 1540 | function buildIndex(rawSearchIndex) {
|
|
1607 | 1634 | };
|
1608 | 1635 | search_input.onpaste = search_input.onchange;
|
1609 | 1636 |
|
| 1637 | + var selectCrate = document.getElementById('crate-search'); |
| 1638 | + if (selectCrate) { |
| 1639 | + selectCrate.onchange = function() { |
| 1640 | + search(undefined, true); |
| 1641 | + }; |
| 1642 | + } |
| 1643 | + |
1610 | 1644 | // Push and pop states are used to add search results to the browser
|
1611 | 1645 | // history.
|
1612 | 1646 | if (browserSupportsHistoryApi()) {
|
|
2283 | 2317 | if (window.location.hash && window.location.hash.length > 0) {
|
2284 | 2318 | expandSection(window.location.hash.replace(/^#/, ''));
|
2285 | 2319 | }
|
| 2320 | + |
| 2321 | + function addSearchOptions(crates) { |
| 2322 | + var elem = document.getElementById('crate-search'); |
| 2323 | + |
| 2324 | + if (!elem) { |
| 2325 | + return; |
| 2326 | + } |
| 2327 | + var crates_text = []; |
| 2328 | + for (var crate in crates) { |
| 2329 | + if (crates.hasOwnProperty(crate)) { |
| 2330 | + crates_text.push(crate); |
| 2331 | + } |
| 2332 | + } |
| 2333 | + crates_text.sort(function(a, b) { |
| 2334 | + var lower_a = a.toLowerCase(); |
| 2335 | + var lower_b = b.toLowerCase(); |
| 2336 | + |
| 2337 | + if (lower_a < lower_b) { |
| 2338 | + return -1; |
| 2339 | + } else if (lower_a > lower_b) { |
| 2340 | + return 1; |
| 2341 | + } |
| 2342 | + return 0; |
| 2343 | + }); |
| 2344 | + for (var i = 0; i < crates_text.length; ++i) { |
| 2345 | + var option = document.createElement("option"); |
| 2346 | + option.value = crates_text[i]; |
| 2347 | + option.innerText = crates_text[i]; |
| 2348 | + elem.appendChild(option); |
| 2349 | + } |
| 2350 | + } |
| 2351 | + |
| 2352 | + window.addSearchOptions = addSearchOptions; |
2286 | 2353 | }());
|
2287 | 2354 |
|
2288 | 2355 | // Sets the focus on the search bar at the top of the page
|
|
0 commit comments