Skip to content

Commit b22465b

Browse files
committed
improvement: Publish related_packages as part of the searchNodes var.
1 parent 655d6af commit b22465b

File tree

4 files changed

+43
-12
lines changed

4 files changed

+43
-12
lines changed

lib/ex_doc/config.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ defmodule ExDoc.Config do
4444
proglang: :elixir,
4545
project: nil,
4646
redirects: %{},
47+
related_packages: [],
4748
retriever: ExDoc.Retriever,
4849
skip_undefined_reference_warnings_on:
4950
&__MODULE__.skip_undefined_reference_warnings_on/1,
@@ -87,6 +88,7 @@ defmodule ExDoc.Config do
8788
package: :atom | nil,
8889
project: nil | String.t(),
8990
redirects: %{optional(String.t()) => String.t()} | [{String.t(), String.t()}],
91+
related_packages: [:atom | %{name: :atom, version: Version.t()}],
9092
retriever: atom(),
9193
skip_undefined_reference_warnings_on: (String.t() -> boolean),
9294
skip_code_autolink_to: (String.t() -> boolean),

lib/ex_doc/formatter/html.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ defmodule ExDoc.Formatter.HTML do
193193
end
194194

195195
defp generate_search_data(linked, extras, config) do
196-
content = SearchData.create(linked, extras, config.proglang)
196+
content = SearchData.create(linked, extras, config)
197197
path = "dist/search_data-#{digest(content)}.js"
198198
File.write!(Path.join(config.output, path), content)
199199
[path]

lib/ex_doc/formatter/html/search_data.ex

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,51 @@ defmodule ExDoc.Formatter.HTML.SearchData do
22
@moduledoc false
33
alias ExDoc.Utils
44

5-
def create(nodes, extras, proglang) do
5+
def create(nodes, extras, config) do
66
items = Enum.flat_map(nodes, &module/1) ++ Enum.flat_map(extras, &extra/1)
77

8-
data = %{
9-
items: items,
10-
content_type: "text/markdown",
11-
proglang: proglang,
12-
producer: %{
13-
name: "ex_doc",
14-
version: to_string(Application.spec(:ex_doc)[:vsn])
8+
search_data =
9+
%{
10+
items: items,
11+
content_type: "text/markdown",
12+
proglang: config.proglang,
13+
producer: %{
14+
name: "ex_doc",
15+
version: to_string(Application.spec(:ex_doc)[:vsn])
16+
}
1517
}
16-
}
1718

18-
["searchData=" | ExDoc.Utils.to_json(data)]
19+
search_nodes =
20+
[
21+
%{name: config.package, version: config.version}
22+
]
23+
|> maybe_append_related_packages(config.related_packages)
24+
25+
[
26+
"searchData=",
27+
ExDoc.Utils.to_json(search_data),
28+
"\nsearchNodes=",
29+
ExDoc.Utils.to_json(search_nodes)
30+
]
31+
end
32+
33+
defp maybe_append_related_packages(search_nodes, related_packages)
34+
when length(related_packages) > 0 do
35+
related_packages =
36+
related_packages
37+
|> Enum.map(fn
38+
%{name: name, version: version} ->
39+
%{name: name, version: to_string(version)}
40+
41+
name when is_atom(name) ->
42+
%{name: name, version: "*"}
43+
end)
44+
45+
Enum.concat(search_nodes, related_packages)
1946
end
2047

48+
defp maybe_append_related_packages(search_nodes, _related_packages), do: search_nodes
49+
2150
defp extra(map) do
2251
if custom_search_data = map[:search_data] do
2352
extra_search_data(map, custom_search_data)

lib/ex_doc/formatter/html/templates/head_template.eex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<link rel="canonical" href="<%= config.canonical %>" />
2222
<% end %>
2323
<script defer src="<%= Assets.rev config.output, "dist/sidebar_items-*.js" %>"></script>
24-
<script defer src="docs_config.js"></script>
24+
<script defer src="<%= Assets.rev config.output, "dist/search_data-*.js" %>"></script>
2525
<script defer src="dist/<%= Assets.js_filename() %>"></script>
2626
<%= before_closing_head_tag(config, :html) %>
2727
</head>

0 commit comments

Comments
 (0)