diff --git a/assets/html/js/search.js b/assets/html/js/search.js
index 5e0b840a72..79521bae4a 100644
--- a/assets/html/js/search.js
+++ b/assets/html/js/search.js
@@ -65,12 +65,12 @@ update_search
/////// SEARCH WORKER ///////
-function worker_function(documenterSearchIndex, documenterBaseURL, filters) {
+function worker_function(Index, documenterBaseURL, filters) {
importScripts(
"https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js"
);
- let data = documenterSearchIndex.map((x, key) => {
+ let data = Index.map((x, key) => {
x["id"] = key; // minisearch requires a unique for each object
return x;
});
@@ -360,13 +360,13 @@ function worker_function(documenterSearchIndex, documenterBaseURL, filters) {
// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript!
const filters = [
- ...new Set(documenterSearchIndex["docs"].map((x) => x.category)),
+ ...new Set(documenterSearchIndex.map((x) => x.category)),
];
const worker_str =
"(" +
worker_function.toString() +
")(" +
- JSON.stringify(documenterSearchIndex["docs"]) +
+ JSON.stringify(documenterSearchIndex) +
"," +
JSON.stringify(documenterBaseURL) +
"," +
diff --git a/docs/src/man/guide.md b/docs/src/man/guide.md
index 5af5c04929..43132ba7cf 100644
--- a/docs/src/man/guide.md
+++ b/docs/src/man/guide.md
@@ -144,7 +144,7 @@ build/
├── index.html
├── search
│ └── index.html
-└── search_index.js
+└── search_index.json
```
!!! note
diff --git a/src/html/HTMLWriter.jl b/src/html/HTMLWriter.jl
index bd15fffb53..4e700f2b14 100644
--- a/src/html/HTMLWriter.jl
+++ b/src/html/HTMLWriter.jl
@@ -740,7 +740,7 @@ function render(doc::Documenter.Document, settings::HTML=HTML())
end
ctx = HTMLContext(doc, settings)
- ctx.search_index_js = "search_index.js"
+ ctx.search_index_js = "search_index.json"
ctx.themeswap_js = copy_asset("themeswap.js", doc)
ctx.warner_js = copy_asset("warner.js", doc)
@@ -807,9 +807,8 @@ function render(doc::Documenter.Document, settings::HTML=HTML())
all(size_limit_successes) || throw(HTMLSizeThresholdError())
open(joinpath(doc.user.build, ctx.search_index_js), "w") do io
- println(io, "var documenterSearchIndex = {\"docs\":")
# convert Vector{SearchRecord} to a JSON string + do additional JS escaping
- println(io, JSDependencies.json_jsescape(ctx.search_index), "\n}")
+ println(io, JSDependencies.json_jsescape(ctx.search_index))
end
write_inventory(doc, ctx)
@@ -959,6 +958,17 @@ function render_head(ctx, navnode)
RD.katex_css,
]
+ fetchstring = """
+ fetch("$(relhref(src, ctx.search_index_js))")
+ .then(result => result.json())
+ .then(json =>
+ {
+ documenterSearchIndex = json;
+ }
+ );
+ """
+ minifiedfetchstring = replace(fetchstring, r"\s+" => "") #minified string
+
head(
meta[:charset=>"UTF-8"],
meta[:name => "viewport", :content => "width=device-width, initial-scale=1.0"],
@@ -994,7 +1004,7 @@ function render_head(ctx, navnode)
:src => RD.requirejs_cdn,
Symbol("data-main") => relhref(src, ctx.documenter_js)
],
- script[:src => relhref(src, ctx.search_index_js)],
+ script(minifiedfetchstring), # loads search index into js variable documenterSearchIndex
script[:src => relhref(src, "siteinfo.js")],
script[:src => relhref(src, "../versions.js")],