From 561e16d6a7f07d8cadbdb6c72c68934dcd087d18 Mon Sep 17 00:00:00 2001
From: Nicolas Lupien <46227124+betaflag@users.noreply.github.com>
Date: Sat, 30 Dec 2023 02:03:13 -0500
Subject: [PATCH] Fixed #34670 -- Improved loading of theme in admin.
Thanks Sarah Abderemane for the review.
---
django/contrib/admin/static/admin/js/theme.js | 83 +++++++++----------
.../contrib/admin/templates/admin/base.html | 2 +-
2 files changed, 40 insertions(+), 45 deletions(-)
diff --git a/django/contrib/admin/static/admin/js/theme.js b/django/contrib/admin/static/admin/js/theme.js
index 794cd15f70..e79d375c55 100644
--- a/django/contrib/admin/static/admin/js/theme.js
+++ b/django/contrib/admin/static/admin/js/theme.js
@@ -1,56 +1,51 @@
'use strict';
{
- window.addEventListener('load', function(e) {
-
- function setTheme(mode) {
- if (mode !== "light" && mode !== "dark" && mode !== "auto") {
- console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);
- mode = "auto";
- }
- document.documentElement.dataset.theme = mode;
- localStorage.setItem("theme", mode);
+ function setTheme(mode) {
+ if (mode !== "light" && mode !== "dark" && mode !== "auto") {
+ console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);
+ mode = "auto";
}
+ document.documentElement.dataset.theme = mode;
+ localStorage.setItem("theme", mode);
+ }
- function cycleTheme() {
- const currentTheme = localStorage.getItem("theme") || "auto";
- const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
+ function cycleTheme() {
+ const currentTheme = localStorage.getItem("theme") || "auto";
+ const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
- if (prefersDark) {
- // Auto (dark) -> Light -> Dark
- if (currentTheme === "auto") {
- setTheme("light");
- } else if (currentTheme === "light") {
- setTheme("dark");
- } else {
- setTheme("auto");
- }
+ if (prefersDark) {
+ // Auto (dark) -> Light -> Dark
+ if (currentTheme === "auto") {
+ setTheme("light");
+ } else if (currentTheme === "light") {
+ setTheme("dark");
} else {
- // Auto (light) -> Dark -> Light
- if (currentTheme === "auto") {
- setTheme("dark");
- } else if (currentTheme === "dark") {
- setTheme("light");
- } else {
- setTheme("auto");
- }
+ setTheme("auto");
+ }
+ } else {
+ // Auto (light) -> Dark -> Light
+ if (currentTheme === "auto") {
+ setTheme("dark");
+ } else if (currentTheme === "dark") {
+ setTheme("light");
+ } else {
+ setTheme("auto");
}
}
+ }
- function initTheme() {
- // set theme defined in localStorage if there is one, or fallback to auto mode
- const currentTheme = localStorage.getItem("theme");
- currentTheme ? setTheme(currentTheme) : setTheme("auto");
- }
+ function initTheme() {
+ // set theme defined in localStorage if there is one, or fallback to auto mode
+ const currentTheme = localStorage.getItem("theme");
+ currentTheme ? setTheme(currentTheme) : setTheme("auto");
+ }
- function setupTheme() {
- // Attach event handlers for toggling themes
- const buttons = document.getElementsByClassName("theme-toggle");
- Array.from(buttons).forEach((btn) => {
- btn.addEventListener("click", cycleTheme);
- });
- initTheme();
- }
-
- setupTheme();
+ window.addEventListener('load', function(_) {
+ const buttons = document.getElementsByClassName("theme-toggle");
+ Array.from(buttons).forEach((btn) => {
+ btn.addEventListener("click", cycleTheme);
+ });
});
+
+ initTheme();
}
diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html
index 9549418729..1ca50e508d 100644
--- a/django/contrib/admin/templates/admin/base.html
+++ b/django/contrib/admin/templates/admin/base.html
@@ -6,7 +6,7 @@
{% block dark-mode-vars %}
-
+
{% endblock %}
{% if not is_popup and is_nav_sidebar_enabled %}