diff options
| author | Nicolas Lupien <46227124+betaflag@users.noreply.github.com> | 2023-12-30 02:03:13 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-30 08:03:13 +0100 |
| commit | 561e16d6a7f07d8cadbdb6c72c68934dcd087d18 (patch) | |
| tree | f8ed15208ebeaf7f4480027e370dbaa17475121c | |
| parent | e16d0c176e9b89628cdec5e58c418378c4a2436a (diff) | |
Fixed #34670 -- Improved loading of theme in admin.
Thanks Sarah Abderemane for the review.
| -rw-r--r-- | django/contrib/admin/static/admin/js/theme.js | 83 | ||||
| -rw-r--r-- | django/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 setupTheme() { - // Attach event handlers for toggling themes - const buttons = document.getElementsByClassName("theme-toggle"); - Array.from(buttons).forEach((btn) => { - btn.addEventListener("click", cycleTheme); - }); - initTheme(); - } + 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"); + } - 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 @@ <link rel="stylesheet" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}"> {% block dark-mode-vars %} <link rel="stylesheet" href="{% static "admin/css/dark_mode.css" %}"> - <script src="{% static "admin/js/theme.js" %}" defer></script> + <script src="{% static "admin/js/theme.js" %}"></script> {% endblock %} {% if not is_popup and is_nav_sidebar_enabled %} <link rel="stylesheet" href="{% static "admin/css/nav_sidebar.css" %}"> |
