maidstone-hackspace/website/widgets/form_simple.py

93 lines
3.2 KiB
Python

from scaffold.core.widget import base_widget
class control(base_widget):
method = 'post'
action = '/'
template = {
'text':'''
<div class="row">
<div class="input-field col s12">
%s
</div>
</div>''',
'radio': '''
<p>
%s
</p>'''}
def create(self, action, method='post', title=None):
self.inputs = []
self.action = action
self.method = method
return self
@staticmethod
def set_template(template):
if template:
control.template = template
def append(self, input_type, input_name, label,values="", input_id=None, classes='validate', placeholder='', disabled='', selected=None):
if input_type == 'select' and values:
if type(values) is not list or tuple:
form_control = """<select name="%s" id="%s">%s</select>""" % (
input_name,
input_name,
"\n".join(["""<option value="%s">%s</option>""" % (value, value) for value in values]))
self.apply_template(input_type, form_control)
return self
if len(values[0]) == 2:
form_control = """
<select name="%s" id="%s">%s</select>""" % (
input_name,
input_name,
"\n".join(["""<option value="%s">%s</option>""" % (value, item) for value, item in values]))
else:
form_control = """
<select name="%s" id="%s">%s</select>""" % (
input_name,
input_name,
"\n".join(["""<option value="%s">%s</option>""" % (item, item) for item in values]))
self.apply_template(input_type, form_control)
return self
form_control = """
<input type="%s" name="%s" id="%s" placeholder="%s" %s classes="%s" value="%s" %s/>
<label for="%s">%s</label>""" % (
input_type,
input_name,
input_id if input_id else '',
label,
'disabled="disabled" ' if disabled else '',
classes,
values,
'checked="checked"' if selected else '',
input_id if input_id else '',
label)
self.apply_template(input_type, form_control)
return self
def apply_template(self, input_type, form_control):
return self.inputs.append(
control.template.get(input_type, "<p>%s</p>") % form_control)
def render(self):
super(control, self).render()
# <i class="material-icons right">send</i>
return """
<div class="row">
<form class="col s12" method="%s" action="%s">
%s
<button class="btn waves-effect waves-light" type="submit" name="action">Submit
</button>
</form>
</div>""" % (
self.method,
self.action,
"\n".join([input_item for input_item in self.inputs])
)