diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs index 68d70f27c8c7..2ab10d5e6aa4 100644 --- a/src/librustdoc/html/layout.rs +++ b/src/librustdoc/html/layout.rs @@ -113,7 +113,8 @@ crate fn render(
\ {after_content}\
+ data-search-index-js=\"{root_path}search-index{suffix}.js\" \ + data-search-js=\"{root_path}search{suffix}.js\"> \ {extra_scripts}\ \ diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index 4240c986f577..7a9d337d9638 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -223,6 +223,7 @@ pub(super) fn write_shared( &format!(" = {}", serde_json::to_string(&themes).unwrap()), ), )?; + write_minify("search.js", static_files::SEARCH_JS)?; write_minify("settings.js", static_files::SETTINGS_JS)?; if cx.shared.include_sources { write_minify("source-script.js", static_files::sidebar::SOURCE_SCRIPT)?; @@ -408,8 +409,9 @@ pub(super) fn write_shared( // with rustdoc running in parallel. all_indexes.sort(); write_crate("search-index.js", &|| { - let v = static_files::SEARCH_JS - .replace(r#""SEARCH_INDEX_PLACEHOLDER": {}"#, &all_indexes.join(",\\\n")); + let mut v = String::from("var searchIndex = JSON.parse('{\\\n"); + v.push_str(&all_indexes.join(",\\\n")); + v.push_str("\\\n}');\nif (window.initSearch) {window.initSearch(searchIndex)};"); Ok(v.into_bytes()) })?; diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 80d6997751a5..0162a6155870 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -43,6 +43,7 @@ if (!DOMTokenList.prototype.remove) { window.rootPath = rustdocVars.attributes["data-root-path"].value; window.currentCrate = rustdocVars.attributes["data-current-crate"].value; window.searchJS = rustdocVars.attributes["data-search-js"].value; + window.searchIndexJS = rustdocVars.attributes["data-search-index-js"].value; } var sidebarVars = document.getElementById("sidebar-vars"); if (sidebarVars) { @@ -247,6 +248,7 @@ function hideThemeButtonState() { if (!searchLoaded) { searchLoaded = true; loadScript(window.searchJS); + loadScript(window.searchIndexJS); } } diff --git a/src/librustdoc/html/static/search.js b/src/librustdoc/html/static/search.js index b8afbd175c51..538c811c7109 100644 --- a/src/librustdoc/html/static/search.js +++ b/src/librustdoc/html/static/search.js @@ -1,8 +1,4 @@ (function() { -var searchIndex = JSON.parse('{\ -"SEARCH_INDEX_PLACEHOLDER": {}\ -}'); - // This mapping table should match the discriminants of // `rustdoc::html::item_type::ItemType` type in Rust. var itemTypes = ["mod", @@ -104,7 +100,7 @@ function levenshtein(s1, s2) { return s1_len + s2_len; } -function initSearch(rawSearchIndex) { +window.initSearch = function(rawSearchIndex) { var MAX_LEV_DISTANCE = 3; var MAX_RESULTS = 200; var GENERICS_DATA = 1; @@ -1509,6 +1505,8 @@ function initSearch(rawSearchIndex) { } }; +if (window.searchIndex !== undefined) { + initSearch(window.searchIndex); +} -initSearch(searchIndex); })();