Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions tw2/forms/calendars.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
import logging

import tw2.core as twc
from .widgets import FormField
from .widgets import RequiredAttrMixin, AutofocusAttrMixin, FormField


__all__ = [
Expand Down Expand Up @@ -129,15 +129,15 @@ def strftime_before1900(dt, fmt):
)


class CalendarDatePicker(FormField, CalendarBase):
class CalendarDatePicker(
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
"""
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)
Expand Down
41 changes: 25 additions & 16 deletions tw2/forms/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,35 +24,43 @@ 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'''
'''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)',
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
Expand All @@ -68,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"
Expand Down Expand Up @@ -364,7 +373,7 @@ class ColorField(TextField):
#--
# Selection fields
#--
class SelectionField(FormField):
class SelectionField(RequiredAttrMixin, AutofocusAttrMixin, FormField):
"""
Base class for single and multiple selection fields.

Expand Down