diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 9a87bcc10db..f35d1c5c3e1 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -883,7 +883,9 @@ themePicker.onblur = handleThemeButtonsBlur;
v.push_str(&minify_replacer(
&format!("{}\n{}", variables.join(""), all_indexes.join("\n")),
options.enable_minification));
- v.push_str("initSearch(searchIndex);addSearchOptions(searchIndex);");
+ // "addSearchOptions" has to be called first so the crate filtering can be set before the
+ // search might start (if it's set into the URL for example).
+ v.push_str("addSearchOptions(searchIndex);initSearch(searchIndex);");
cx.shared.fs.write(&dst, &v)?;
}
if options.enable_index_page {
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 752b93f2ac5..38fe545bec6 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -512,21 +512,6 @@ function getSearchElement() {
var OUTPUT_DATA = 1;
var params = getQueryStringParams();
- // Set the crate filter from saved storage, if the current page has the saved crate filter.
- //
- // If not, ignore the crate filter -- we want to support filtering for crates on sites like
- // doc.rust-lang.org where the crates may differ from page to page while on the same domain.
- var savedCrate = getCurrentValue("rustdoc-saved-filter-crate");
- if (savedCrate !== null) {
- onEachLazy(document.getElementById("crate-search").getElementsByTagName("option"),
- function(e) {
- if (e.value === savedCrate) {
- document.getElementById("crate-search").value = e.value;
- return true;
- }
- });
- }
-
// Populate search bar with query string search term when provided,
// but only if the input bar is empty. This avoid the obnoxious issue
// where you start trying to do a search, and the index loads, and
@@ -2620,11 +2605,21 @@ function getSearchElement() {
}
return 0;
});
+ var savedCrate = getCurrentValue("rustdoc-saved-filter-crate");
for (var i = 0; i < crates_text.length; ++i) {
var option = document.createElement("option");
option.value = crates_text[i];
option.innerText = crates_text[i];
elem.appendChild(option);
+ // Set the crate filter from saved storage, if the current page has the saved crate
+ // filter.
+ //
+ // If not, ignore the crate filter -- we want to support filtering for crates on sites
+ // like doc.rust-lang.org where the crates may differ from page to page while on the
+ // same domain.
+ if (crates_text[i] === savedCrate) {
+ elem.value = savedCrate;
+ }
}
}