Commit e78e6e1d authored by Paul Brown's avatar Paul Brown

move 'data-date-format' to form_widget_args and allow overriding hardcoded kwargs

parent ed7a1351
......@@ -7,6 +7,10 @@ from flask.ext.admin._compat import text_type, as_unicode
from . import widgets as admin_widgets
"""
An understanding of WTForms's Custom Widgets is helpful for understanding this code: http://wtforms.simplecodes.com/docs/0.6.2/widgets.html#custom-widgets
"""
__all__ = ['DateTimeField', 'TimeField', 'Select2Field', 'Select2TagsField']
class DateTimeField(fields.DateTimeField):
......@@ -14,7 +18,7 @@ class DateTimeField(fields.DateTimeField):
Allows modifying the datetime format of a DateTimeField using form_args.
"""
widget = admin_widgets.DateTimePickerWidget()
def __init__(self, label=None, validators=None, format=None, widget_format=None, **kwargs):
def __init__(self, label=None, validators=None, format=None, **kwargs):
"""
Constructor
......@@ -33,8 +37,6 @@ class DateTimeField(fields.DateTimeField):
self.format = format or '%Y-%m-%d %H:%M:%S'
self.widget_format = widget_format or 'yyyy-mm-dd hh:ii:ss'
class TimeField(fields.Field):
"""
A text field which stores a `datetime.time` object.
......@@ -67,7 +69,6 @@ class TimeField(fields.Field):
'%I:%M:%S %p', '%I:%M %p')
self.default_format = default_format or '%H:%M:%S'
self.widget_format = widget_format or 'hh:ii:ss'
def _value(self):
if self.raw_data:
......
......@@ -3,9 +3,7 @@ from flask.globals import _request_ctx_stack
from flask.ext.admin.babel import gettext, ngettext
from flask.ext.admin import helpers as h
__all__ = ['Select2Widget', 'DatePickerWidget', 'DateTimePickerWidget', 'RenderTemplateWidget',
'Select2TagsWidget', ]
__all__ = ['Select2Widget', 'DatePickerWidget', 'DateTimePickerWidget', 'RenderTemplateWidget', 'Select2TagsWidget', ]
class Select2Widget(widgets.Select):
"""
......@@ -15,10 +13,9 @@ class Select2Widget(widgets.Select):
work.
"""
def __call__(self, field, **kwargs):
allow_blank = getattr(field, 'allow_blank', False)
kwargs['data-role'] = u'select2'
kwargs.setdefault('data-role', u'select2')
allow_blank = getattr(field, 'allow_blank', False)
if allow_blank and not self.multiple:
kwargs['data-allow-blank'] = u'1'
......@@ -30,8 +27,8 @@ class Select2TagsWidget(widgets.TextInput):
You must include select2.js, form.js and select2 stylesheet for it to work.
"""
def __call__(self, field, **kwargs):
kwargs['data-role'] = u'select2'
kwargs['data-tags'] = u'1'
kwargs.setdefault('data-role', u'select2')
kwargs.setdefault('data-tags', u'1')
return super(Select2TagsWidget, self).__call__(field, **kwargs)
......@@ -43,9 +40,10 @@ class DatePickerWidget(widgets.TextInput):
You must include bootstrap-datepicker.js and form.js for styling to work.
"""
def __call__(self, field, **kwargs):
kwargs['data-role'] = u'datepicker'
kwargs['data-date-format'] = u'yyyy-mm-dd'
kwargs['data-date-autoclose'] = u'true'
kwargs.setdefault('data-role', u'datepicker')
kwargs.setdefault('data-date-format', u'yyyy-mm-dd')
kwargs.setdefault('data-date-autoclose', u'true')
self.date_format = kwargs['data-date-format']
return super(DatePickerWidget, self).__call__(field, **kwargs)
......@@ -56,11 +54,11 @@ class DateTimePickerWidget(widgets.TextInput):
You must include bootstrap-datepicker.js and form.js for styling to work.
"""
def __call__(self, field, **kwargs):
kwargs['data-role'] = u'datetimepicker'
kwargs['data-date-format'] = field.widget_format or u'yyyy-mm-dd hh:ii:ss'
kwargs['data-date-autoclose'] = u'true'
kwargs['data-date-today-btn'] = u'linked'
kwargs['data-date-today-highlight'] = u'true'
kwargs.setdefault('data-role', u'datetimepicker')
kwargs.setdefault('data-date-format', u'yyyy-mm-dd hh:ii:ss')
kwargs.setdefault('data-date-autoclose', u'true')
kwargs.setdefault('data-date-today-btn', u'linked')
kwargs.setdefault('data-date-today-highlight', u'true')
return super(DateTimePickerWidget, self).__call__(field, **kwargs)
......@@ -71,9 +69,9 @@ class TimePickerWidget(widgets.TextInput):
You must include bootstrap-datepicker.js and form.js for styling to work.
"""
def __call__(self, field, **kwargs):
kwargs['data-role'] = u'timepicker'
kwargs['data-date-format'] = field.widget_format or 'hh:ii:ss'
kwargs['data-date-autoclose'] = u'true'
kwargs.setdefault('data-role', u'timepicker')
kwargs.setdefault('data-date-format', u'hh:ii:ss')
kwargs.setdefault('data-date-autoclose', u'true')
return super(TimePickerWidget, self).__call__(field, **kwargs)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment