File 6421-ct-Add-dark-mode-support-to-coverage-pages.patch of Package erlang

From e54538fb6c8971b42c41798fcf8ccac379cbe281 Mon Sep 17 00:00:00 2001
From: Johannes Christ <jc@jchri.st>
Date: Mon, 6 Nov 2023 17:17:46 +0100
Subject: [PATCH] ct: Add dark mode support to coverage pages

When common test is tasked with generating coverage via `-cover`,
invert the colours of the webpage when the user prefers a dark color
scheme. Similar support was added to the other CT-generated pages in
commit bbe14c9ff74d7f87d74622f7918e6a8d53963a4d.
---
 lib/common_test/src/test_server_ctrl.erl | 29 ++++++++++++++++++++----
 lib/tools/priv/styles.css                | 14 ++++++++++++
 2 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/lib/common_test/src/test_server_ctrl.erl b/lib/common_test/src/test_server_ctrl.erl
index 664e0b96a0..dab512e641 100644
--- a/lib/common_test/src/test_server_ctrl.erl
+++ b/lib/common_test/src/test_server_ctrl.erl
@@ -101,6 +101,25 @@
 -define(last_link, "last_link").
 -define(last_test, "last_test").
 -define(html_ext, ".html").
+-define(cover_html_stylesheet,
+        "<style>\n"
+        "  @media (prefers-color-scheme: dark) {\n"
+	"    body {"
+        "       filter: invert(100%) hue-rotate(180deg) brightness(105%) contrast(95%);\n"
+	"       /* Workaround for Microsoft Edge, set the background color so it knows\n"
+	"          which original color to rotate from, otherwise the background stays white. */\n"
+	"       background-color: #000000;\n"
+        "    }\n"
+	"    /* Match light theme with links on all browsers */\n"
+	"    a:link {\n"
+	"      color: #2B507D;\n"
+	"    }\n"
+	"    a:visited, a:active {\n"
+	"      /* Match light theme */\n"
+	"      color: #85ABD5;\n"
+	"    }\n"
+	"  }"
+        "</style>\n").
 -define(now, os:timestamp()).
 
 -define(void_fun, fun() -> ok end).
@@ -5614,7 +5633,8 @@ analyse_modules(_Dir, [], _DetailsFun, Acc) ->
 
 %% Support functions for writing the cover logs (both cross and normal)
 write_coverlog_header(CoverLog) ->
-    case catch io:put_chars(CoverLog,html_header("Coverage results")) of
+    Style = [?cover_html_stylesheet],
+    case catch io:put_chars(CoverLog,html_header("Coverage results", Style)) of
 	{'EXIT',Reason} ->
 	    io:format("\n\nERROR: Could not write normal heading in coverlog.\n"
 		      "CoverLog: ~tw\n"
@@ -5664,7 +5684,8 @@ pc(Cov,NotCov) ->
 
 
 write_not_covered(CoverOut,M,Lines) ->
-    io:put_chars(CoverOut,html_header("Coverage results for "++atom_to_list(M))),
+    Style = [?cover_html_stylesheet],
+    io:put_chars(CoverOut,html_header("Coverage results for "++atom_to_list(M), Style)),
     io:fwrite(CoverOut,
 	      "The following lines in module ~w are not covered:\n"
 	      "<table border=3 cellpadding=5>\n"
@@ -5741,12 +5762,12 @@ html_header(Title) ->
      "<body bgcolor=\"white\" text=\"black\" "
      "link=\"blue\" vlink=\"purple\" alink=\"red\">\n"].
 
-html_header(Title, Meta) ->
+html_header(Title, Extra) ->
     ["<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n"
      "<!-- autogenerated by '", atom_to_list(?MODULE), "'. -->\n"
      "<html>\n"
      "<head>\n"
-     "<title>", Title, "</title>\n"] ++ Meta ++ ["</head>\n"].
+     "<title>", Title, "</title>\n"] ++ Extra ++ ["</head>\n"].
 
 open_html_file(File) ->
     open_utf8_file(File).
diff --git a/lib/tools/priv/styles.css b/lib/tools/priv/styles.css
index 84f00be9fd..80fb608fbc 100644
--- a/lib/tools/priv/styles.css
+++ b/lib/tools/priv/styles.css
@@ -94,3 +94,17 @@ td.source {
   white-space: pre;
   font: 12px monospace;
 }
+
+
+@media (prefers-color-scheme: dark) {
+  body {
+    filter: invert(100%) hue-rotate(180deg) brightness(105%) contrast(95%);
+    background-color: #000000;
+  }
+  a:link {
+    color: #2B507D;
+  }
+  a:visited, a:active {
+    color: #85ABD5;
+  }
+}
-- 
2.35.3

openSUSE Build Service is sponsored by