From 3c12370ea90d72dd0cc57e79a5a94566240404fb Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Mon, 21 Dec 2015 18:18:12 +0100 Subject: [PATCH 1/4] outsource required, autofocus attribute params into mixins These attributes can be set on more than just input fields (textarea, select). --- tw2/forms/calendars.py | 6 +++--- tw2/forms/widgets.py | 34 +++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/tw2/forms/calendars.py b/tw2/forms/calendars.py index 35b22e5..aa6f8e7 100644 --- a/tw2/forms/calendars.py +++ b/tw2/forms/calendars.py @@ -37,7 +37,7 @@ import logging import tw2.core as twc -from .widgets import FormField +from .widgets import RequiredAttrMixin, FormField __all__ = [ @@ -129,7 +129,8 @@ def strftime_before1900(dt, fmt): ) -class CalendarDatePicker(FormField, CalendarBase): +class CalendarDatePicker( + RequiredAttrMixin, FormField, CalendarBase): """ Uses a javascript calendar system to allow picking of calendar dates. The date_format is in yyyy-mm-dd unless otherwise specified @@ -137,7 +138,6 @@ class CalendarDatePicker(FormField, CalendarBase): template = "tw2.forms.templates.calendar" calendar_lang = twc.Param("Default Language to use in the Calendar", default='en') - required = twc.Param(default=False) button_text = twc.Param("Text to display on Button", default="Choose") date_format = twc.Param("Date Display Format", default="%Y-%m-%d") picker_shows_time = twc.Param('Picker Shows Time', default=False) diff --git a/tw2/forms/widgets.py b/tw2/forms/widgets.py index 84f1161..432598d 100755 --- a/tw2/forms/widgets.py +++ b/tw2/forms/widgets.py @@ -24,6 +24,26 @@ def required(self): ) +class RequiredAttrMixin(twc.Widget): + + required = twc.Param('Form field is required', + attribute=True, default=None) + + def prepare(self): + super(RequiredAttrMixin, self).prepare() + self.safe_modify('attrs') + self.attrs['required'] = 'required' if self.required in [ + True, 'required'] else None + # Needed because self.required would otherwise overwrite + # self.attrs['required'] again + self.required = None + + +class AutofocusAttrMixin(twc.Widget): + autofocus = twc.Param('Autofocus form field (HTML5 only)', + attribute=True, default=None) + + class TextFieldMixin(twc.Widget): '''Misc mixin class with attributes for textual input fields''' maxlength = twc.Param('Maximum length of field', @@ -32,27 +52,15 @@ class TextFieldMixin(twc.Widget): attribute=True, default=None) -class InputField(FormField): +class InputField(RequiredAttrMixin, AutofocusAttrMixin, FormField): type = twc.Variable('Type of input field', default=twc.Required, attribute=True) value = twc.Param(attribute=True) - required = twc.Param('Input field is required', - attribute=True, default=None) - - autofocus = twc.Param('Autofocus form field (HTML5 only)', - attribute=True, default=None) - template = "tw2.forms.templates.input_field" - def prepare(self): - super(InputField, self).prepare() - self.safe_modify('attrs') - self.attrs['required'] = 'required' if self.required in [True, 'required'] else None - self.required = None # Needed because self.required would otherwise overwrite self.attrs['required'] again - class PostlabeledInputField(InputField): """ Inherits InputField, but with a text From 5d65e2ddf6472a1e5cf14b849f7924ce4cb6fc4a Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Mon, 21 Dec 2015 18:20:48 +0100 Subject: [PATCH 2/4] TextMixin is not only used for input fields --- tw2/forms/widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tw2/forms/widgets.py b/tw2/forms/widgets.py index 432598d..962521f 100755 --- a/tw2/forms/widgets.py +++ b/tw2/forms/widgets.py @@ -45,7 +45,7 @@ class AutofocusAttrMixin(twc.Widget): class TextFieldMixin(twc.Widget): - '''Misc mixin class with attributes for textual input fields''' + '''Misc mixin class with attributes for textual form fields''' maxlength = twc.Param('Maximum length of field', attribute=True, default=None) placeholder = twc.Param('Placeholder text (HTML5 only)', From e056b0b80753306b7d187cad3732cec8ed972bd6 Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Mon, 21 Dec 2015 18:21:44 +0100 Subject: [PATCH 3/4] add required, autofocus attributes to TextArea, SelectionField --- tw2/forms/widgets.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tw2/forms/widgets.py b/tw2/forms/widgets.py index 962521f..11f1655 100755 --- a/tw2/forms/widgets.py +++ b/tw2/forms/widgets.py @@ -76,7 +76,8 @@ class TextField(TextFieldMixin, InputField): type = 'text' -class TextArea(TextFieldMixin, FormField): +class TextArea( + TextFieldMixin, RequiredAttrMixin, AutofocusAttrMixin, FormField): rows = twc.Param('Number of rows', default=None, attribute=True) cols = twc.Param('Number of columns', default=None, attribute=True) template = "tw2.forms.templates.textarea" @@ -372,7 +373,7 @@ class ColorField(TextField): #-- # Selection fields #-- -class SelectionField(FormField): +class SelectionField(RequiredAttrMixin, AutofocusAttrMixin, FormField): """ Base class for single and multiple selection fields. From 4a7a099af6e381ec2a15e80d9e5c21963a3f7452 Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Mon, 21 Dec 2015 18:24:26 +0100 Subject: [PATCH 4/4] make calendars autofocusable --- tw2/forms/calendars.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tw2/forms/calendars.py b/tw2/forms/calendars.py index aa6f8e7..28fb01b 100644 --- a/tw2/forms/calendars.py +++ b/tw2/forms/calendars.py @@ -37,7 +37,7 @@ import logging import tw2.core as twc -from .widgets import RequiredAttrMixin, FormField +from .widgets import RequiredAttrMixin, AutofocusAttrMixin, FormField __all__ = [ @@ -130,7 +130,7 @@ def strftime_before1900(dt, fmt): class CalendarDatePicker( - RequiredAttrMixin, FormField, CalendarBase): + RequiredAttrMixin, AutofocusAttrMixin, FormField, CalendarBase): """ Uses a javascript calendar system to allow picking of calendar dates. The date_format is in yyyy-mm-dd unless otherwise specified