diff --git a/src/servala/frontend/forms/renderers.py b/src/servala/frontend/forms/renderers.py new file mode 100644 index 0000000..f8cdb5d --- /dev/null +++ b/src/servala/frontend/forms/renderers.py @@ -0,0 +1,28 @@ +from django.forms.renderers import TemplatesSetting + + +def inject_class(f, class_name): + def inner(*args, **kwargs): + result = f(*args, **kwargs) + class_list = result.get("class", "") + class_list = f"{class_list} {class_name}".strip() + result["class"] = class_list + return result + + return inner + + +class VerticalFormRenderer(TemplatesSetting): + form_template_name = "frontend/forms/form.html" + field_template_name = "frontend/forms/vertical_field.html" + + def render(self, template_name, context, request=None): + if field := context.get("field"): + if field.field.widget.input_type == "checkbox": + class_name = "form-check-input" + else: + class_name = "form-control" + field.build_widget_attrs = inject_class( + field.build_widget_attrs, class_name + ) + return super().render(template_name, context, request) diff --git a/src/servala/frontend/templates/account/login.html b/src/servala/frontend/templates/account/login.html index b0242b9..214b77d 100644 --- a/src/servala/frontend/templates/account/login.html +++ b/src/servala/frontend/templates/account/login.html @@ -37,7 +37,10 @@ {% translate "Log in with email and password instead" %} -