diff --git a/test/config.yml b/test/config.yml
index d1270add4..bf3c154e9 100644
--- a/test/config.yml
+++ b/test/config.yml
@@ -5,3 +5,4 @@
:queues:
- [<%="very_"%>often, 2]
- [seldom, 1]
+:web_theme: dark
diff --git a/test/config_environment.yml b/test/config_environment.yml
index b53ab451f..052aca5cb 100644
--- a/test/config_environment.yml
+++ b/test/config_environment.yml
@@ -8,3 +8,4 @@ staging:
:queues:
- [<%="very_"%>often, 2]
- [seldom, 1]
+ :web_theme: "dark"
diff --git a/test/config_string.yml b/test/config_string.yml
index 9eb50306a..1d4418bc5 100644
--- a/test/config_string.yml
+++ b/test/config_string.yml
@@ -5,4 +5,5 @@ concurrency: 50
queues:
- [<%="very_"%>often, 2]
- [seldom, 1]
+web_theme: dark
diff --git a/test/test_cli.rb b/test/test_cli.rb
index 4cb5c544c..8ad19e55e 100644
--- a/test/test_cli.rb
+++ b/test/test_cli.rb
@@ -152,6 +152,7 @@ def logdev
assert_equal 50, Sidekiq.options[:concurrency]
assert_equal 2, Sidekiq.options[:queues].count { |q| q == 'very_often' }
assert_equal 1, Sidekiq.options[:queues].count { |q| q == 'seldom' }
+ assert_equal "dark", Sidekiq.options[:web_theme]
end
it 'accepts stringy keys' do
@@ -164,6 +165,7 @@ def logdev
assert_equal 50, Sidekiq.options[:concurrency]
assert_equal 2, Sidekiq.options[:queues].count { |q| q == 'very_often' }
assert_equal 1, Sidekiq.options[:queues].count { |q| q == 'seldom' }
+ assert_equal "dark", Sidekiq.options[:web_theme]
end
it 'accepts environment specific config' do
@@ -176,6 +178,7 @@ def logdev
assert_equal 50, Sidekiq.options[:concurrency]
assert_equal 2, Sidekiq.options[:queues].count { |q| q == 'very_often' }
assert_equal 1, Sidekiq.options[:queues].count { |q| q == 'seldom' }
+ assert_equal "dark", Sidekiq.options[:web_theme]
end
end
@@ -227,6 +230,7 @@ def logdev
assert_equal 100, Sidekiq.options[:concurrency]
assert_equal 7, Sidekiq.options[:queues].count { |q| q == 'often' }
assert_equal 3, Sidekiq.options[:queues].count { |q| q == 'seldom' }
+ assert_equal "dark", Sidekiq.options[:web_theme]
end
end
diff --git a/web/assets/stylesheets/application-dark.css b/web/assets/stylesheets/application-dark.css
index 33e0599b1..00d646ea4 100644
--- a/web/assets/stylesheets/application-dark.css
+++ b/web/assets/stylesheets/application-dark.css
@@ -1,125 +1 @@
-@media (prefers-color-scheme: dark) {
-
- body {
- background-color: #000;
- color: #ccc;
- }
-
- a,
- .title,
- .summary_bar ul .count,
- .navbar .navbar-brand {
- color: #af0014;
- }
-
- .navbar .navbar-brand:hover {
- color: #ccc;
- }
-
- .navbar .navbar-brand .status {
- color: #ccc;
- }
-
- .navbar-inverse {
- background-color: #000;
- border-color: #333;
- }
-
- table.table-white {
- background-color: #111;
- }
-
- .table-striped > tbody > tr:nth-of-type(odd) {
- background-color: #222;
- }
-
- .table-bordered,
- .table-bordered > tbody > tr > td,
- .table-bordered > tbody > tr > th,
- .table-bordered > tfoot > tr > td,
- .table-bordered > tfoot > tr > th,
- .table-bordered > thead > tr > td,
- .table-bordered > thead > tr > th {
- border: 1px solid #333;
- }
-
- .table-hover > tbody > tr:hover {
- background-color: #333;
- }
-
- .alert {
- border: none;
- color: #ccc;
- }
-
- .alert-success {
- background-color: #000;
- }
-
- a:link,
- a:active,
- a:hover,
- a:visited {
- color: #63798c;
- }
-
- a.btn {
- color: #000;
- }
-
- .summary_bar .summary {
- background-color: #000;
- border: 1px solid #333;
- }
-
- .navbar-default {
- background-color: #000;
- border-color: #3d3d3d;
- }
-
- .navbar-default .navbar-nav > .active > a,
- .navbar-default .navbar-nav > .active > a:focus,
- .navbar-default .navbar-nav > .active > a:hover {
- color: #ccc;
- background-color: #282828;
- }
-
- .navbar-default .navbar-nav > li > a:hover {
- color: #ccc;
- }
-
- .pagination > li > a,
- .pagination > li > a:hover,
- .pagination > li > span {
- color: #ccc;
- background-color: #282828;
- border-color: #353535;
- }
- .pagination > .disabled > a,
- .pagination > .disabled > a:focus,
- .pagination > .disabled > a:hover,
- .pagination > .disabled > span,
- .pagination > .disabled > span:focus,
- .pagination > .disabled > span:hover {
- color: #a5a5a5;
- background-color: #282828;
- border-color: #353535;
- }
-
- .stat {
- border: 1px solid rgba(255, 255, 255, 0.1);
- }
-
- #live-poll {
- color: #ccc;
- }
-
- .btn-warn {
- color: #333;
- }
-
- .rickshaw_graph .y_ticks.glow text {
- fill: #ccc;
- color: #ccc;
- }
-}
+@import "application-dark_base.css" (prefers-color-scheme: dark);
diff --git a/web/assets/stylesheets/application-dark_base.css b/web/assets/stylesheets/application-dark_base.css
new file mode 100644
index 000000000..ad4da7820
--- /dev/null
+++ b/web/assets/stylesheets/application-dark_base.css
@@ -0,0 +1,123 @@
+body {
+ background-color: #000;
+ color: #ccc;
+}
+
+a,
+.title,
+.summary_bar ul .count,
+.navbar .navbar-brand {
+ color: #af0014;
+}
+
+.navbar .navbar-brand:hover {
+ color: #ccc;
+}
+
+.navbar .navbar-brand .status {
+ color: #ccc;
+}
+
+.navbar-inverse {
+ background-color: #000;
+ border-color: #333;
+}
+
+table.table-white {
+ background-color: #111;
+}
+
+.table-striped > tbody > tr:nth-of-type(odd) {
+ background-color: #222;
+}
+
+.table-bordered,
+.table-bordered > tbody > tr > td,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > td,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > thead > tr > th {
+ border: 1px solid #333;
+}
+
+.table-hover > tbody > tr:hover {
+ background-color: #333;
+}
+
+.alert {
+ border: none;
+ color: #ccc;
+}
+
+.alert-success {
+ background-color: #000;
+}
+
+a:link,
+a:active,
+a:hover,
+a:visited {
+ color: #63798c;
+}
+
+a.btn {
+ color: #000;
+}
+
+.summary_bar .summary {
+ background-color: #000;
+ border: 1px solid #333;
+}
+
+.navbar-default {
+ background-color: #000;
+ border-color: #3d3d3d;
+}
+
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:focus,
+.navbar-default .navbar-nav > .active > a:hover {
+ color: #ccc;
+ background-color: #282828;
+}
+
+.navbar-default .navbar-nav > li > a:hover {
+ color: #ccc;
+}
+
+.pagination > li > a,
+.pagination > li > a:hover,
+.pagination > li > span {
+ color: #ccc;
+ background-color: #282828;
+ border-color: #353535;
+}
+
+.pagination > .disabled > a,
+.pagination > .disabled > a:focus,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > span,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > span:hover {
+ color: #a5a5a5;
+ background-color: #282828;
+ border-color: #353535;
+}
+
+.stat {
+ border: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+#live-poll {
+ color: #ccc;
+}
+
+.btn-warn {
+ color: #333;
+}
+
+.rickshaw_graph .y_ticks.glow text {
+ fill: #ccc;
+ color: #ccc;
+}
diff --git a/web/views/layout.erb b/web/views/layout.erb
index 8531de79e..b5b86bf26 100644
--- a/web/views/layout.erb
+++ b/web/views/layout.erb
@@ -10,8 +10,16 @@
<% end %>
-
-
+ <% if Sidekiq.options[:web_theme] %>>
+
+ <% if Sidekiq.options[:web_theme] == 'dark' %>>
+
+ <% end %>>
+ <% else %>>
+
+
+ <% end %>>
+
<% if rtl? %>
<% end %>