about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--extras/autoindex.rb20
1 files changed, 18 insertions, 2 deletions
diff --git a/extras/autoindex.rb b/extras/autoindex.rb
index 45b80cf..9060c6c 100644
--- a/extras/autoindex.rb
+++ b/extras/autoindex.rb
@@ -14,6 +14,21 @@ class Autoindex
   FN = %{<a href="%s">%s</a>}
   TFMT = "%Y-%m-%d %H:%M"
 
+  # default to a dark, web-safe (216 color) palette for power-savings.
+  # Color-capable browsers can respect the prefers-color-scheme:light
+  # @media query (browser support a work-in-progress)
+  STYLE = <<''.gsub(/^\s*/m, '').delete!("\n")
+@media screen {
+  *{background:#000;color:#ccc}
+  a{color:#69f;text-decoration:none}
+  a:visited{color:#96f}
+}
+@media screen AND (prefers-color-scheme:light) {
+  *{background:#fff;color:#333}
+  a{color:#00f;text-decoration:none}
+  a:visited{color:#808}
+}
+
   def initialize(app, *args)
     app.respond_to?(:root) or raise ArgumentError,
        "wrapped app #{app.inspect} does not respond to #root"
@@ -139,8 +154,9 @@ class Autoindex
       path_info_html = path_info_ue.split(%r{/}, -1).map! do |part|
         Rack::Utils.escape_html(part)
       end.join("/")
-      body = "<html><head><title>Index of #{path_info_html}</title></head>" \
-             "<body><h1>Index of #{path_info_html}</h1><hr><pre>\n" \
+      body = "<html><head><title>Index of #{path_info_html}</title>" \
+             "<style>#{STYLE}</style>" \
+             "</head><body><h1>Index of #{path_info_html}</h1><hr><pre>\n" \
              "#{dirs.concat(files).join("\n")}" \
              "</pre><hr></body></html>\n"
       h = { "Content-Type" => "text/html", "Content-Length" => body.size.to_s }