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")],