瀏覽代碼

Add density parameter to user profile

Thibaud Colas 11 月之前
父節點
當前提交
fe148c01e5

+ 1 - 1
wagtail/admin/forms/account.py

@@ -140,4 +140,4 @@ class AvatarPreferencesForm(forms.ModelForm):
 class ThemePreferencesForm(forms.ModelForm):
     class Meta:
         model = UserProfile
-        fields = ["theme"]
+        fields = ["theme", "density"]

+ 6 - 1
wagtail/admin/templatetags/wagtailadmin_tags.py

@@ -666,7 +666,12 @@ def admin_theme_classname(context):
         if hasattr(user, "wagtail_userprofile")
         else "system"
     )
-    return f"w-theme-{theme_name}"
+    density_name = (
+        user.wagtail_userprofile.density
+        if hasattr(user, "wagtail_userprofile")
+        else "default"
+    )
+    return f"w-theme-{theme_name} w-density-{density_name}"
 
 
 @register.simple_tag

+ 20 - 1
wagtail/admin/tests/test_account_management.py

@@ -231,6 +231,7 @@ class TestAccountSectionUtilsMixin:
             "locale-preferred_language": "es",
             "locale-current_time_zone": "Europe/London",
             "theme-theme": "dark",
+            "theme-density": "default",
         }
         post_data.update(extra_post_data)
         return self.client.post(reverse("wagtailadmin_account"), post_data)
@@ -476,7 +477,10 @@ class TestAccountSection(WagtailTestUtils, TestCase, TestAccountSectionUtilsMixi
 
         # check that the updated language preference is now indicated in HTML header
         response = self.client.get(reverse("wagtailadmin_home"))
-        self.assertContains(response, '<html lang="es" dir="ltr" class="w-theme-dark">')
+        self.assertContains(
+            response,
+            '<html lang="es" dir="ltr" class="w-theme-dark w-density-default">',
+        )
 
     def test_unset_language_preferences(self):
         profile = UserProfile.get_for_user(self.user)
@@ -602,6 +606,21 @@ class TestAccountSection(WagtailTestUtils, TestCase, TestAccountSectionUtilsMixi
 
         self.assertEqual(profile.theme, "light")
 
+    def test_change_density_post(self):
+        response = self.post_form(
+            {
+                "theme-density": "snug",
+            }
+        )
+
+        # Check that the user was redirected to the account page
+        self.assertRedirects(response, reverse("wagtailadmin_account"))
+
+        profile = UserProfile.get_for_user(self.user)
+        profile.refresh_from_db()
+
+        self.assertEqual(profile.density, "snug")
+
     def test_sensitive_post_parameters(self):
         request = RequestFactory().post("wagtailadmin_account", data={})
         request.user = self.user

+ 4 - 2
wagtail/admin/tests/test_views.py

@@ -80,14 +80,16 @@ class TestLoginView(WagtailTestUtils, TestCase):
     def test_language_code(self):
         response = self.client.get(reverse("wagtailadmin_login"))
         self.assertContains(
-            response, '<html lang="de" dir="ltr" class="w-theme-system">'
+            response,
+            '<html lang="de" dir="ltr" class="w-theme-system w-density-default">',
         )
 
     @override_settings(LANGUAGE_CODE="he")
     def test_bidi_language_changes_dir_attribute(self):
         response = self.client.get(reverse("wagtailadmin_login"))
         self.assertContains(
-            response, '<html lang="he" dir="rtl" class="w-theme-system">'
+            response,
+            '<html lang="he" dir="rtl" class="w-theme-system w-density-default">',
         )
 
     @override_settings(

+ 23 - 0
wagtail/users/migrations/0013_userprofile_density.py

@@ -0,0 +1,23 @@
+# Generated by Django 4.2.9 on 2024-04-11 08:38
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("wagtailusers", "0012_userprofile_theme"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="userprofile",
+            name="density",
+            field=models.CharField(
+                choices=[("default", "Default"), ("snug", "Snug")],
+                default="default",
+                max_length=40,
+                verbose_name="density",
+            ),
+        ),
+    ]

+ 14 - 3
wagtail/users/models.py

@@ -72,15 +72,26 @@ class UserProfile(models.Model):
 
     dismissibles = models.JSONField(default=dict, blank=True)
 
-    class AdminThemes(models.TextChoices):
+    class AdminColorThemes(models.TextChoices):
         SYSTEM = "system", _("System default")
         LIGHT = "light", _("Light")
         DARK = "dark", _("Dark")
 
     theme = models.CharField(
         verbose_name=_("admin theme"),
-        choices=AdminThemes.choices,
-        default=AdminThemes.SYSTEM,
+        choices=AdminColorThemes.choices,
+        default=AdminColorThemes.SYSTEM,
+        max_length=40,
+    )
+
+    class AdminDensityThemes(models.TextChoices):
+        DEFAULT = "default", _("Default")
+        SNUG = "snug", _("Snug")
+
+    density = models.CharField(
+        verbose_name=_("density"),
+        choices=AdminDensityThemes.choices,
+        default=AdminDensityThemes.DEFAULT,
         max_length=40,
     )