|
254 | 254 | //
|
255 | 255 | // So I guess you could say things are getting pretty interoperable.
|
256 | 256 | function getVirtualKey(ev) {
|
257 |
| - if ("key" in ev && typeof ev.key != "undefined") |
| 257 | + if ("key" in ev && typeof ev.key != "undefined") { |
258 | 258 | return ev.key;
|
| 259 | + } |
259 | 260 |
|
260 | 261 | var c = ev.charCode || ev.keyCode;
|
261 |
| - if (c == 27) |
| 262 | + if (c == 27) { |
262 | 263 | return "Escape";
|
| 264 | + } |
263 | 265 | return String.fromCharCode(c);
|
264 | 266 | }
|
265 | 267 |
|
|
467 | 469 |
|
468 | 470 | /**
|
469 | 471 | * Executes the query and builds an index of results
|
470 |
| - * @param {[Object]} query [The user query] |
471 |
| - * @param {[type]} searchWords [The list of search words to query |
472 |
| - * against] |
473 |
| - * @return {[type]} [A search index of results] |
| 472 | + * @param {[Object]} query [The user query] |
| 473 | + * @param {[type]} searchWords [The list of search words to query |
| 474 | + * against] |
| 475 | + * @param {[type]} filterCrates [Crate to search in if defined] |
| 476 | + * @return {[type]} [A search index of results] |
474 | 477 | */
|
475 |
| - function execQuery(query, searchWords) { |
| 478 | + function execQuery(query, searchWords, filterCrates) { |
476 | 479 | function itemTypeFromName(typename) {
|
477 | 480 | for (var i = 0; i < itemTypes.length; ++i) {
|
478 | 481 | if (itemTypes[i] === typename) {
|
|
848 | 851 | {
|
849 | 852 | val = extractGenerics(val.substr(1, val.length - 2));
|
850 | 853 | for (var i = 0; i < nSearchWords; ++i) {
|
| 854 | + if (filterCrates !== undefined && searchIndex[i].crate !== filterCrates) { |
| 855 | + continue; |
| 856 | + } |
851 | 857 | var in_args = findArg(searchIndex[i], val, true);
|
852 | 858 | var returned = checkReturned(searchIndex[i], val, true);
|
853 | 859 | var ty = searchIndex[i];
|
|
902 | 908 | var output = extractGenerics(parts[1]);
|
903 | 909 |
|
904 | 910 | for (var i = 0; i < nSearchWords; ++i) {
|
| 911 | + if (filterCrates !== undefined && searchIndex[i].crate !== filterCrates) { |
| 912 | + continue; |
| 913 | + } |
905 | 914 | var type = searchIndex[i].type;
|
906 | 915 | var ty = searchIndex[i];
|
907 | 916 | if (!type) {
|
|
973 | 982 | var contains = paths.slice(0, paths.length > 1 ? paths.length - 1 : 1);
|
974 | 983 |
|
975 | 984 | for (j = 0; j < nSearchWords; ++j) {
|
976 |
| - var lev_distance; |
977 | 985 | var ty = searchIndex[j];
|
978 |
| - if (!ty) { |
| 986 | + if (!ty || (filterCrates !== undefined && ty.crate !== filterCrates)) { |
979 | 987 | continue;
|
980 | 988 | }
|
| 989 | + var lev_distance; |
981 | 990 | var lev_add = 0;
|
982 | 991 | if (paths.length > 1) {
|
983 | 992 | var lev = checkPath(contains, paths[paths.length - 1], ty);
|
|
1353 | 1362 | return '<div>' + text + ' <div class="count">(' + nbElems + ')</div></div>';
|
1354 | 1363 | }
|
1355 | 1364 |
|
1356 |
| - function showResults(results) { |
| 1365 | + function showResults(results, filterCrates) { |
1357 | 1366 | if (results['others'].length === 1 &&
|
1358 | 1367 | getCurrentValue('rustdoc-go-to-only-result') === "true") {
|
1359 | 1368 | var elem = document.createElement('a');
|
|
1371 | 1380 | var ret_in_args = addTab(results['in_args'], query, false);
|
1372 | 1381 | var ret_returned = addTab(results['returned'], query, false);
|
1373 | 1382 |
|
| 1383 | + var filter = ""; |
| 1384 | + if (filterCrates !== undefined) { |
| 1385 | + filter = " (in <b>" + filterCrates + "</b> crate)"; |
| 1386 | + } |
| 1387 | + |
1374 | 1388 | var output = '<h1>Results for ' + escape(query.query) +
|
1375 |
| - (query.type ? ' (type: ' + escape(query.type) + ')' : '') + '</h1>' + |
| 1389 | + (query.type ? ' (type: ' + escape(query.type) + ')' : '') + filter + '</h1>' + |
1376 | 1390 | '<div id="titles">' +
|
1377 | 1391 | makeTabHeader(0, "In Names", ret_others[1]) +
|
1378 | 1392 | makeTabHeader(1, "In Parameters", ret_in_args[1]) +
|
|
1401 | 1415 | printTab(currentTab);
|
1402 | 1416 | }
|
1403 | 1417 |
|
1404 |
| - function execSearch(query, searchWords) { |
| 1418 | + function execSearch(query, searchWords, filterCrates) { |
1405 | 1419 | var queries = query.raw.split(",");
|
1406 | 1420 | var results = {
|
1407 | 1421 | 'in_args': [],
|
|
1412 | 1426 | for (var i = 0; i < queries.length; ++i) {
|
1413 | 1427 | var query = queries[i].trim();
|
1414 | 1428 | if (query.length !== 0) {
|
1415 |
| - var tmp = execQuery(getQuery(query), searchWords); |
| 1429 | + var tmp = execQuery(getQuery(query), searchWords, filterCrates); |
1416 | 1430 |
|
1417 | 1431 | results['in_args'].push(tmp['in_args']);
|
1418 | 1432 | results['returned'].push(tmp['returned']);
|
|
1474 | 1488 | }
|
1475 | 1489 | }
|
1476 | 1490 |
|
1477 |
| - function search(e) { |
| 1491 | + function getFilterCrates() { |
| 1492 | + var elem = document.getElementById("crate-search"); |
| 1493 | + |
| 1494 | + if (elem && elem.value !== "All crates" && rawSearchIndex.hasOwnProperty(elem.value)) { |
| 1495 | + return elem.value; |
| 1496 | + } |
| 1497 | + return undefined; |
| 1498 | + } |
| 1499 | + |
| 1500 | + function search(e, forced) { |
1478 | 1501 | var params = getQueryStringParams();
|
1479 | 1502 | var query = getQuery(search_input.value.trim());
|
1480 | 1503 |
|
1481 | 1504 | if (e) {
|
1482 | 1505 | e.preventDefault();
|
1483 | 1506 | }
|
1484 | 1507 |
|
1485 |
| - if (query.query.length === 0 || query.id === currentResults) { |
| 1508 | + if (query.query.length === 0) { |
| 1509 | + return; |
| 1510 | + } |
| 1511 | + if (forced !== true && query.id === currentResults) { |
1486 | 1512 | if (query.query.length > 0) {
|
1487 | 1513 | putBackSearch(search_input);
|
1488 | 1514 | }
|
|
1502 | 1528 | }
|
1503 | 1529 | }
|
1504 | 1530 |
|
1505 |
| - showResults(execSearch(query, index)); |
| 1531 | + var filterCrates = getFilterCrates(); |
| 1532 | + showResults(execSearch(query, index, filterCrates), filterCrates); |
1506 | 1533 | }
|
1507 | 1534 |
|
1508 | 1535 | function buildIndex(rawSearchIndex) {
|
|
1602 | 1629 | };
|
1603 | 1630 | search_input.onpaste = search_input.onchange;
|
1604 | 1631 |
|
| 1632 | + var selectCrate = document.getElementById('crate-search'); |
| 1633 | + if (selectCrate) { |
| 1634 | + selectCrate.onchange = function() { |
| 1635 | + search(undefined, true); |
| 1636 | + }; |
| 1637 | + } |
| 1638 | + |
1605 | 1639 | // Push and pop states are used to add search results to the browser
|
1606 | 1640 | // history.
|
1607 | 1641 | if (browserSupportsHistoryApi()) {
|
|
2350 | 2384 | if (window.location.hash && window.location.hash.length > 0) {
|
2351 | 2385 | expandSection(window.location.hash.replace(/^#/, ''));
|
2352 | 2386 | }
|
| 2387 | + |
| 2388 | + function addSearchOptions(crates) { |
| 2389 | + var elem = document.getElementById('crate-search'); |
| 2390 | + |
| 2391 | + if (!elem) { |
| 2392 | + return; |
| 2393 | + } |
| 2394 | + var crates_text = []; |
| 2395 | + for (var crate in crates) { |
| 2396 | + if (crates.hasOwnProperty(crate)) { |
| 2397 | + crates_text.push(crate); |
| 2398 | + } |
| 2399 | + } |
| 2400 | + crates_text.sort(function(a, b) { |
| 2401 | + var lower_a = a.toLowerCase(); |
| 2402 | + var lower_b = b.toLowerCase(); |
| 2403 | + |
| 2404 | + if (lower_a < lower_b) { |
| 2405 | + return -1; |
| 2406 | + } else if (lower_a > lower_b) { |
| 2407 | + return 1; |
| 2408 | + } |
| 2409 | + return 0; |
| 2410 | + }); |
| 2411 | + for (var i = 0; i < crates_text.length; ++i) { |
| 2412 | + var option = document.createElement("option"); |
| 2413 | + option.value = crates_text[i]; |
| 2414 | + option.innerText = crates_text[i]; |
| 2415 | + elem.appendChild(option); |
| 2416 | + } |
| 2417 | + } |
| 2418 | + |
| 2419 | + window.addSearchOptions = addSearchOptions; |
2353 | 2420 | }());
|
2354 | 2421 |
|
2355 | 2422 | // Sets the focus on the search bar at the top of the page
|
|
0 commit comments