Commit 9ba43b5a authored by Paul Brown's avatar Paul Brown

change editable list view widget for suggestions

parent e7d821ab
......@@ -86,87 +86,63 @@ class XEditableWidget(object):
kwargs['data-csrf'] = kwargs.pop("csrf", "")
# gets the first entry (subfield) from FieldList (field) and uses the
# subfield.type (`kwargs_` method) to determine kwargs
# subfield is the first entry (subfield) from FieldList (field)
subfield = field.entries[0]
try:
kwargs = getattr(self, 'kwargs_' + subfield.type)(subfield, kwargs)
except AttributeError:
raise Exception('Unsupported field type: %s' % (type(subfield),))
kwargs = self.get_kwargs(subfield, kwargs)
return HTMLString(
'<a %s>%s</a>' % (html_params(**kwargs), value)
)
"""
`kwargs_` methods are used to allow overriding XEditableWidget and
adding new kwargs_ methods for custom fields (without much code)
"""
def kwargs_StringField(self, subfield, kwargs):
kwargs['data-type'] = 'text'
return kwargs
def kwargs_TextAreaField(self, subfield, kwargs):
kwargs['data-type'] = 'textarea'
kwargs['data-rows'] = '5'
return kwargs
def kwargs_BooleanField(self, subfield, kwargs):
kwargs['data-type'] = 'select'
# data-source = dropdown options
kwargs['data-source'] = {'': 'False', '1': 'True'}
kwargs['data-role'] = 'x-editable-boolean'
return kwargs
def kwargs_Select2Field(self, subfield, kwargs):
kwargs['data-type'] = 'select'
kwargs['data-source'] = dict(subfield.choices)
return kwargs
def kwargs_DateField(self, subfield, kwargs):
kwargs['data-type'] = 'combodate'
kwargs['data-format'] = 'YYYY-MM-DD'
kwargs['data-template'] = 'YYYY-MM-DD'
return kwargs
def kwargs_DateTimeField(self, subfield, kwargs):
kwargs['data-type'] = 'combodate'
kwargs['data-format'] = 'YYYY-MM-DD HH:mm:ss'
kwargs['data-template'] = 'YYYY-MM-DD HH:mm:ss'
# x-editable-combodate uses 1 minute increments
kwargs['data-role'] = 'x-editable-combodate'
return kwargs
def kwargs_TimeField(self, subfield, kwargs):
kwargs['data-type'] = 'combodate'
kwargs['data-format'] = 'HH:mm:ss'
kwargs['data-template'] = 'HH:mm:ss'
kwargs['data-role'] = 'x-editable-combodate'
return kwargs
def kwargs_IntegerField(self, subfield, kwargs):
kwargs['data-type'] = 'number'
return kwargs
def kwargs_FloatField(self, subfield, kwargs):
kwargs['data-type'] = 'number'
kwargs['data-step'] = 'any'
return kwargs
def get_kwargs(self, subfield, kwargs):
"""
Return extra kwargs based on the subfield type.
"""
if subfield.type == 'StringField':
kwargs['data-type'] = 'text'
elif subfield.type == 'TextAreaField':
kwargs['data-type'] = 'textarea'
kwargs['data-rows'] = '5'
elif subfield.type == 'BooleanField':
kwargs['data-type'] = 'select'
# data-source = dropdown options
kwargs['data-source'] = {'': 'False', '1': 'True'}
kwargs['data-role'] = 'x-editable-boolean'
elif subfield.type == 'Select2Field':
kwargs['data-type'] = 'select'
kwargs['data-source'] = dict(subfield.choices)
elif subfield.type == 'DateField':
kwargs['data-type'] = 'combodate'
kwargs['data-format'] = 'YYYY-MM-DD'
kwargs['data-template'] = 'YYYY-MM-DD'
elif subfield.type == 'DateTimeField':
kwargs['data-type'] = 'combodate'
kwargs['data-format'] = 'YYYY-MM-DD HH:mm:ss'
kwargs['data-template'] = 'YYYY-MM-DD HH:mm:ss'
# x-editable-combodate uses 1 minute increments
kwargs['data-role'] = 'x-editable-combodate'
elif subfield.type == 'TimeField':
kwargs['data-type'] = 'combodate'
kwargs['data-format'] = 'HH:mm:ss'
kwargs['data-template'] = 'HH:mm:ss'
kwargs['data-role'] = 'x-editable-combodate'
elif subfield.type == 'IntegerField':
kwargs['data-type'] = 'number'
elif subfield.type in ['FloatField', 'DecimalField']:
kwargs['data-type'] = 'number'
kwargs['data-step'] = 'any'
elif subfield.type in ['QuerySelectField', 'ModelSelectField']:
kwargs['data-type'] = 'select'
choices = {}
for choice in subfield:
try:
choices[str(choice._value())] = str(choice.label.text)
except TypeError:
choices[str(choice._value())] = ""
kwargs['data-source'] = choices
else:
raise Exception('Unsupported field type: %s' % (type(subfield),))
def kwargs_DecimalField(self, subfield, kwargs):
return self.kwargs_FloatField(subfield, kwargs)
def kwargs_QuerySelectField(self, subfield, kwargs):
kwargs['data-type'] = 'select'
choices = {}
for choice in subfield:
try:
choices[str(choice._value())] = str(choice.label.text)
except TypeError:
choices[str(choice._value())] = ""
kwargs['data-source'] = choices
return kwargs
def kwargs_ModelSelectField(self, subfield, kwargs):
return self.kwargs_QuerySelectField(subfield, 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