From 4a2f1f49c38b76e6a9d0ddfda6ba2377923b1821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=B6hlbrugge?= Date: Wed, 1 Oct 2025 19:46:07 +0100 Subject: [PATCH 1/3] Add dark mode support following system preference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add comprehensive dark mode support to the Maintenance Tasks UI that automatically follows the user's system/browser preference (prefers-color-scheme): - Switch from bulma-no-dark-mode.min.css to bulma.min.css to enable Bulma's built-in dark mode support - Implement CSS custom properties for syntax highlighting colors with dark mode variants - Use CSS color-scheme property to automatically apply correct theme based on system preference - Update CSP hashes for modified inline styles - Update Bulma CDN integrity hash for the full version The implementation provides a seamless dark mode experience that automatically adapts to the user's system settings, similar to Mission Control Jobs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../application_controller.rb | 2 +- .../maintenance_tasks/_navbar.html.erb | 2 +- .../maintenance_tasks/application.html.erb | 51 +++++++++++++++---- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/app/controllers/maintenance_tasks/application_controller.rb b/app/controllers/maintenance_tasks/application_controller.rb index 7cad80eaa..5c0a54b28 100644 --- a/app/controllers/maintenance_tasks/application_controller.rb +++ b/app/controllers/maintenance_tasks/application_controller.rb @@ -11,7 +11,7 @@ class ApplicationController < MaintenanceTasks.parent_controller.constantize policy.style_src_elem( BULMA_CDN, # From 5f99e8f585a3ce5ddeabef32c5681367fed22838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Barri=C3=A9?= Date: Mon, 1 Dec 2025 15:24:56 +0100 Subject: [PATCH 2/3] Add Rake task to compute CSP integrity hashes --- Rakefile | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Rakefile b/Rakefile index b0f9f43f2..d88b7ced0 100644 --- a/Rakefile +++ b/Rakefile @@ -28,3 +28,21 @@ end task(test: "app:test") task("test:system" => "app:test:system") task(default: ["db:test:prepare", "test", "test:system", "rubocop"]) + +task("integrity-hashes") do + require "net/http" + require "uri" + doc = Nokogiri::HTML5.parse(Net::HTTP.get(URI("http://localhost:3000/maintenance_tasks"))) + puts "app/controllers/maintenance_tasks/application_controller.rb:" + print(" style_src_elem: ") + puts "'sha256-#{Digest::SHA256.base64digest(doc.css("html>head>style").sole.text)}'" + print(" script_src_elem: ") + puts "'sha256-#{Digest::SHA256.base64digest(doc.css("html>head>script").sole.text)}'" + puts "app/views/layouts/maintenance_tasks/application.html.erb:" + print(" Bulma integrity: ") + bulma = Net::HTTP.get(URI(doc.css("html>head>link[rel=stylesheet]").sole[:href])) + puts "'sha256-#{Digest::SHA256.base64digest(bulma)}'" +rescue SystemCallError + puts "Could not compute CSP integrity hashes: start development server and try again." + exit(1) +end From fc80240863ce5b13faf0b4835c0487963af34d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Barri=C3=A9?= Date: Mon, 1 Dec 2025 15:43:55 +0100 Subject: [PATCH 3/3] Bump Bulma to 1.0.4 --- app/views/layouts/maintenance_tasks/application.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/maintenance_tasks/application.html.erb b/app/views/layouts/maintenance_tasks/application.html.erb index 282f19464..72ed4193d 100644 --- a/app/views/layouts/maintenance_tasks/application.html.erb +++ b/app/views/layouts/maintenance_tasks/application.html.erb @@ -16,9 +16,9 @@ <%= csrf_meta_tags %> <%= - stylesheet_link_tag(URI.join(controller.class::BULMA_CDN, "npm/bulma@1.0.3/css/bulma.min.css"), + stylesheet_link_tag(URI.join(controller.class::BULMA_CDN, "npm/bulma@1.0.4/css/bulma.min.css"), media: :all, - integrity: "sha256-RwYNyYLkMTjyYn8FRzVzQFtHXuHg9dpfkPCuf6j2XDM=", + integrity: "sha256-Z/om3xyp6V2PKtx8BPobFfo9JCV0cOvBDMaLmquRS+4=", crossorigin: "anonymous") unless request.xhr? %>