From 1d21b5b96e74d7de174c2610b759f98506ec8448 Mon Sep 17 00:00:00 2001 From: Pea Tyczynska Date: Wed, 22 Jul 2020 16:29:11 +0100 Subject: [PATCH] Refactor gov uk textbox field classes to avoid repetition --- app/main/forms.py | 80 +++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/app/main/forms.py b/app/main/forms.py index 00fd25f74..968d6b886 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -190,6 +190,37 @@ def password(label='Password'): ) +def govuk_field_widget(self, field, type=None, param_extensions=None, **kwargs): + # error messages + error_message = None + if field.errors: + error_message = {"text": " ".join(field.errors).strip()} + + # convert to parameters that govuk understands + params = { + "classes": "govuk-!-width-two-thirds", + "errorMessage": error_message, + "id": field.id, + "label": {"text": field.label.text}, + "name": field.name, + "value": field.data + } + + if type: + params["type"] = type + + # extend default params with any sent in + if self.param_extensions: + params.update(self.param_extensions) + + # add any sent in though use in templates + if param_extensions: + params.update(param_extensions) + + return Markup( + render_template('vendor/govuk-frontend/components/input/template.njk', params=params)) + + class GovukTextInputField(StringField): def __init__(self, label='', validators=None, param_extensions=None, **kwargs): super(GovukTextInputField, self).__init__(label, validators, **kwargs) @@ -200,27 +231,7 @@ class GovukTextInputField(StringField): # 2. calls field.widget # this bypasses that by making self.widget a method with the same interface as widget.__call__ def widget(self, field, **kwargs): - # error messages - error_message = None - if field.errors: - error_message = {"text": " ".join(field.errors).strip()} - - # convert to parameters that govuk understands - params = { - "name": field.name, - "id": field.id, - "label": {"text": field.label.text}, - "value": field.data, - "classes": "govuk-!-width-two-thirds", - "errorMessage": error_message, - } - - # extend default params with any sent in - if self.param_extensions: - params.update(self.param_extensions) - - return Markup( - render_template('vendor/govuk-frontend/components/input/template.njk', params=params)) + return govuk_field_widget(self, field, **kwargs) class GovukPasswordField(PasswordField): @@ -233,32 +244,7 @@ class GovukPasswordField(PasswordField): # 2. calls field.widget # this bypasses that by making self.widget a method with the same interface as widget.__call__ def widget(self, field, param_extensions=None, **kwargs): - # error messages - error_message = None - if field.errors: - error_message = {"text": " ".join(field.errors).strip()} - - # convert to parameters that govuk understands - params = { - "classes": "govuk-!-width-two-thirds", - "errorMessage": error_message, - "id": field.id, - "label": {"text": field.label.text}, - "name": field.name, - "type": "password", - "value": field.data - } - - # extend default params with any sent in - if self.param_extensions: - params.update(self.param_extensions) - - # add any sent in though use in templates - if param_extensions: - params.update(param_extensions) - - return Markup( - render_template('vendor/govuk-frontend/components/input/template.njk', params=params)) + return govuk_field_widget(self, field, type="password", param_extensions=param_extensions, **kwargs) class SMSCode(StringField):