File 1213-Add-search-options-for-new-ex_doc.patch of Package erlang

From d92002842eb3f1dd0c42e7d77d46f8b027d14122 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20W=C4=85sowski?= <michal@erlang.org>
Date: Tue, 16 Dec 2025 12:33:23 +0100
Subject: [PATCH 3/4] Add search options for new ex_doc

---
 make/ex_doc.exs        | 195 +++++++++++++++++++++++------------------
 make/ex_doc_wrapper.in |   4 +
 2 files changed, 115 insertions(+), 84 deletions(-)

diff --git a/make/ex_doc.exs b/make/ex_doc.exs
index ca49433d1f..3800cbdd64 100644
--- a/make/ex_doc.exs
+++ b/make/ex_doc.exs
@@ -179,92 +179,119 @@ annotations = Access.get(local_config, :annotations_for_docs, fn _ -> [] end)
 
 current_datetime = System.os_time() |> DateTime.from_unix!(:native)
 
-config = [
-  proglang: :erlang,
-  source_url_pattern: source_url_pattern,
-  assets: %{Path.join(cwd, "/assets") => "assets"},
-  logo: Path.join(:code.root_dir(), "system/doc/assets/erlang-logo.png"),
-  before_closing_head_tag: fn _ -> "<style>.dark img { background-color: white; }</style>" end,
-  before_closing_footer_tag: fn _ ->
-    ~s'<p>Copyright © 1996-#{current_datetime.year} <a href="https://www.ericsson.com">Ericsson AB</a></p>'
-  end,
-  annotations_for_docs: fn md ->
-    if Map.has_key?(md, :exported) && not md.exported do
-      ["not exported"] ++ annotations.(md)
-    else
-      annotations.(md)
-    end
-  end,
-  groups_for_extras:
-    (Access.get(local_config, :groups_for_extras, []) ++
-       [
-         "User's Guides": ~r/guides/,
-         "Command Line Tools": ~r|references/.*_cmd.md$|,
-         References: ~r|references|,
-         "Internal Docs": ~r/internal_doc/
-       ])
-    |> Enum.uniq(),
-  extras: extras,
-  skip_undefined_reference_warnings_on: ["notes.md"],
-  groups_for_docs:
-    (Access.get(local_config, :groups_for_docs, []) ++ groups_for_docs) |> Enum.uniq(),
-  deps:
-    deps ++
-      [
-        general_info: Path.join([link_libdir, "..", "doc"]),
-        erts: Path.join([link_libdir, "..", "erts", "doc", "html"]),
-        system: Path.join([link_libdir, "..", "system", "doc", "html"])
-      ],
-  before_closing_body_tag: fn
-    :html ->
-      """
-        <script defer src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script>
-        <script>
-        let initialized = false;
-
-        window.addEventListener("exdoc:loaded", () => {
-            if (!initialized) {
-            mermaid.initialize({
-                startOnLoad: false,
-                theme: document.body.className.includes("dark") ? "dark" : "default"
-            });
-            initialized = true;
-            }
-
-            let id = 0;
-            for (const codeEl of document.querySelectorAll("pre code.mermaid")) {
-            const preEl = codeEl.parentElement;
-            const graphDefinition = codeEl.textContent;
-            const graphEl = document.createElement("div");
-            const graphId = "mermaid-graph-" + id++;
-            mermaid.render(graphId, graphDefinition).then(({svg, bindFunctions}) => {
-                graphEl.innerHTML = svg;
-                bindFunctions?.(graphEl);
-                preEl.insertAdjacentElement("afterend", graphEl);
-                preEl.remove();
-            });
-            }
-        });
-        </script>
-      """
-
-    _ ->
-      ""
-  end,
-  before_closing_head_tag: fn
-    :epub ->
-      """
-      <style type="text/css">
-        .content-inner pre code.mermaid {
-          display: none;
-        }
-      </style>
-      """
+## Check ExDoc version
+version_str =
+  case System.get_env("EX_DOC_VERSION") do
+    value when value in [nil, ""] -> raise "EX_DOC_VERSION environment variable is required"
+    value -> value
+  end
 
-    _ ->
-      ""
+version =
+  Regex.run(~r/v(\d+\.\d+\.\d+)/, version_str, capture: :all_but_first)
+  |> List.first()
+  |> Version.parse!()
+
+search_config =
+  if Version.compare(version, "0.39.0") in [:gt, :eq] do
+    [
+      search: [
+        %{
+          name: "Search erlang documentation",
+          help: "Search erlang documentation"
+        }
+      ]
+    ]
+  else
+    []
   end
-]
+
+config =
+  [
+    proglang: :erlang,
+    source_url_pattern: source_url_pattern,
+    assets: %{Path.join(cwd, "/assets") => "assets"},
+    logo: Path.join(:code.root_dir(), "system/doc/assets/erlang-logo.png"),
+    before_closing_head_tag: fn _ -> "<style>.dark img { background-color: white; }</style>" end,
+    before_closing_footer_tag: fn _ ->
+      ~s'<p>Copyright © 1996-#{current_datetime.year} <a href="https://www.ericsson.com">Ericsson AB</a></p>'
+    end,
+    annotations_for_docs: fn md ->
+      if Map.has_key?(md, :exported) && not md.exported do
+        ["not exported"] ++ annotations.(md)
+      else
+        annotations.(md)
+      end
+    end,
+    groups_for_extras:
+      (Access.get(local_config, :groups_for_extras, []) ++
+         [
+           "User's Guides": ~r/guides/,
+           "Command Line Tools": ~r|references/.*_cmd.md$|,
+           References: ~r|references|,
+           "Internal Docs": ~r/internal_doc/
+         ])
+      |> Enum.uniq(),
+    extras: extras,
+    skip_undefined_reference_warnings_on: ["notes.md"],
+    groups_for_docs:
+      (Access.get(local_config, :groups_for_docs, []) ++ groups_for_docs) |> Enum.uniq(),
+    deps:
+      deps ++
+        [
+          general_info: Path.join([link_libdir, "..", "doc"]),
+          erts: Path.join([link_libdir, "..", "erts", "doc", "html"]),
+          system: Path.join([link_libdir, "..", "system", "doc", "html"])
+        ],
+    before_closing_body_tag: fn
+      :html ->
+        """
+          <script defer src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script>
+          <script>
+          let initialized = false;
+
+          window.addEventListener("exdoc:loaded", () => {
+              if (!initialized) {
+              mermaid.initialize({
+                  startOnLoad: false,
+                  theme: document.body.className.includes("dark") ? "dark" : "default"
+              });
+              initialized = true;
+              }
+
+              let id = 0;
+              for (const codeEl of document.querySelectorAll("pre code.mermaid")) {
+              const preEl = codeEl.parentElement;
+              const graphDefinition = codeEl.textContent;
+              const graphEl = document.createElement("div");
+              const graphId = "mermaid-graph-" + id++;
+              mermaid.render(graphId, graphDefinition).then(({svg, bindFunctions}) => {
+                  graphEl.innerHTML = svg;
+                  bindFunctions?.(graphEl);
+                  preEl.insertAdjacentElement("afterend", graphEl);
+                  preEl.remove();
+              });
+              }
+          });
+          </script>
+        """
+
+      _ ->
+        ""
+    end,
+    before_closing_head_tag: fn
+      :epub ->
+        """
+        <style type="text/css">
+          .content-inner pre code.mermaid {
+            display: none;
+          }
+        </style>
+        """
+
+      _ ->
+        ""
+    end
+  ] ++ search_config
 
 Keyword.merge(
   config,
diff --git a/make/ex_doc_wrapper.in b/make/ex_doc_wrapper.in
index ab2981be3f..7b3238f252 100755
--- a/make/ex_doc_wrapper.in
+++ b/make/ex_doc_wrapper.in
@@ -47,4 +47,8 @@ if [ -z "${EX_DOC}" ]; then
     fi
 fi
 
+## Detect ex_doc version and store it in a variable
+## This is currently used to handle search engine changes in v0.39.0
+export EX_DOC_VERSION=$(escript@EXEEXT@ $EX_DOC --version)
+
 escript@EXEEXT@ "${EX_DOC}" "${ARGS[@]}"
-- 
2.51.0

openSUSE Build Service is sponsored by