Implement Web Assets' theme system and selection, and add 'light' theme #118

Merged
Márton Lente merged 97 commits from martonlente/extensions-website:ui/theme-light into main 2024-05-08 14:20:07 +02:00
3 changed files with 35 additions and 2 deletions
Showing only changes of commit 4c5c0bf0bc - Show all commits

View File

@ -1,5 +1,7 @@
{% load common %}
{% spaceless %}
{% with type=field.field.widget.input_type %}
{% with type=field.field.widget.input_type classes=classes|default:"" placeholder=placeholder|default:"" %}
{% with field=field|remove_cols_rows|add_classes:classes|set_placeholder:placeholder %}
{% firstof label field.label as label %}
{% comment %} Checkboxes {% endcomment %}
@ -43,4 +45,5 @@
<div class="invalid-feedback">{{ field.errors }}</div>
{% endif %}
{% endwith %}
{% endwith %}
{% endspaceless %}

View File

@ -2,6 +2,7 @@ from urllib.parse import urlparse
import json
import logging
from django.forms.boundfield import BoundField
from django.template import Library, loader
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
@ -166,3 +167,32 @@ def replace(value, old_char_new_char):
@register.filter(name='unread_notification_count')
def unread_notification_count(user):
return Notification.objects.filter(recipient=user, read_at__isnull=True).count()
@register.filter(name='add_classes')
def add_classes(bound_field: BoundField, classes: str):
"""Add classes to the `class` attribute of the given form field's widget.
Expects a string of space-separated classes.
"""
class_value = bound_field.field.widget.attrs.get('class', '')
bound_field.field.widget.attrs['class'] = class_value + f' {classes}'
return bound_field
@register.filter(name='set_placeholder')
def set_placeholder(bound_field: BoundField, placeholder: str):
"""Set `placeholder` attribute of the given form field's widget."""
bound_field.field.widget.attrs['placeholder'] = placeholder
return bound_field
@register.filter(name='remove_cols_rows')
def remove_cols_rows(bound_field: BoundField):
"""Removes cols and rows attributes from the form field's widget.
We'd rather go the CSS route when it comes to styling textareas.
"""
bound_field.field.widget.attrs.pop('cols', None)
bound_field.field.widget.attrs.pop('rows', None)
return bound_field

View File

@ -30,7 +30,7 @@
<section class="card p-3">
<div>
{% include "common/components/field.html" with field=form.description label="Description" %}
{% include "common/components/field.html" with field=form.description label="Description" classes="one two three" placeholder="Describe this extension" %}
</div>
<div>