about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustdoc/html/layout.rs3
-rw-r--r--src/librustdoc/html/render/write_shared.rs6
-rw-r--r--src/librustdoc/html/static/main.js2
-rw-r--r--src/librustdoc/html/static/search.js10
4 files changed, 12 insertions, 9 deletions
diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
index 68d70f27c8c..2ab10d5e6aa 100644
--- a/src/librustdoc/html/layout.rs
+++ b/src/librustdoc/html/layout.rs
@@ -113,7 +113,8 @@ crate fn render<T: Print, S: Print>(
     <section class=\"footer\"></section>\
     {after_content}\
     <div id=\"rustdoc-vars\" data-root-path=\"{root_path}\" data-current-crate=\"{krate}\" \
-       data-search-js=\"{root_path}search-index{suffix}.js\"></div>
+       data-search-index-js=\"{root_path}search-index{suffix}.js\" \
+       data-search-js=\"{root_path}search{suffix}.js\"></div>
     <script src=\"{static_root_path}main{suffix}.js\"></script>\
     {extra_scripts}\
 </body>\
diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs
index 4240c986f57..7a9d337d963 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 80d6997751a..0162a615587 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 b8afbd175c5..538c811c710 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);
 })();