Add density parameter to user profile

pull/11869/head
Thibaud Colas 2024-04-18 10:24:53 +01:00
rodzic b57a9a94a0
commit fe148c01e5
6 zmienionych plików z 68 dodań i 8 usunięć

Wyświetl plik

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

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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(

Wyświetl plik

@ -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",
),
),
]

Wyświetl plik

@ -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,
)