diff --git a/loaders/python/formLoader.py b/loaders/python/formLoader.py new file mode 100644 index 0000000..dd26a6b --- /dev/null +++ b/loaders/python/formLoader.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python + +__author__ = 'Linggar Primahastoko' + +import re +import json + +class formLoader: + + def __init__(self, form_json, form_action): + self.form_data = json.loads(form_json.replace('\\', '')) + self.action = form_action + + def render_form(self): + """ + Render Form + """ + if (not self.form_data or not self.action): + return False + + fields = '' + + for field in self.form_data['fields']: + + if field['type'] == 'element-single-line-text': + fields += self.element_single_line_text(field) + + if field['type'] == 'element-number': + fields += self.element_number(field) + + if field['type'] == 'element-paragraph-text': + fields += self.element_paragraph_text(field) + + if field['type'] == 'element-checkboxes': + fields += self.element_checkboxes(field) + + if field['type'] == 'element-multiple-choice': + fields += self.element_multiple_choice(field) + + if field['type'] == 'element-dropdown': + fields += self.element_dropdown(field) + + if field['type'] == 'element-section-break': + fields += self.element_section_break(field) + + form = self.open_form(fields) + + return form + + def open_form(self, fields): + """ + Render the form header + """ + html = '''
'''.format(self.action); + html += '''
''' + html += '''

{0}

{1}

'''.format(self.form_data['title'], self.form_data['description']) + html += fields + html += '''''' + html += '''
''' + + return html + + def encode_element_title(self, title): + """ + Encode Element Title + """ + clean_string = re.compile(r"[^a-zA-Z0-9.-_]") + + string = title.lower().replace(' ', '_') + string = re.sub(clean_string, '', string) + + return string + + def make_label(self, id, title, required): + """ + Get formatted label for form element + """ + if required: + html = ''''''.format(id, title) + else: + html = ''''''.format(id, title) + + return html + + def element_single_line_text(self, field): + """ + Render single line text + """ + id = self.encode_element_title(field['title']) + required = 'required' if field['required'] else False + + html = '''
''' + html += self.make_label(id, field['title'], required) + html += ''''''.format(id, required) + html += '''
''' + + return html + + def element_number(self, field): + """ + Render number + """ + id = self.encode_element_title(field['title']) + required = 'required' if field['required'] else False + + html = '''
''' + html += self.make_label(id, field['title'], required) + html += ''''''.format(id, required) + html += '''
''' + + return html + + def element_paragraph_text(self, field): + """ + Render paragraph text + """ + id = self.encode_element_title(field['title']) + required = 'required' if field['required'] else False + + html = '''
''' + html += self.make_label(id, field['title'], required) + html += ''''''.format(id, required) + html += '''
''' + + return html + + def element_checkboxes(self, field): + """ + Render checkboxes + """ + id = self.encode_element_title(field['title']) + required = 'required' if field['required'] else False + + html = '''
''' + html += self.make_label(id, field['title'], required) + + for i in xrange(len(field['choices'])): + checked = 'checked' if field['choices'][i]['checked'] else '' + + html += '''
''' + + html += '''
''' + + return html + + def element_multiple_choice(self, field): + """ + Render multiple choice + """ + id = self.encode_element_title(field['title']) + required = 'required' if field['required'] else False + + html = '''
''' + html += self.make_label(id, field['title'], required) + + for i in xrange(len(field['choices'])): + checked = 'checked' if field['choices'][i]['checked'] else '' + + html += '''
''' + + html += '''
''' + + return html + + def element_dropdown(self, field): + """ + Render dropdown + """ + id = self.encode_element_title(field['title']) + required = 'required' if field['required'] else False + + html = '''
''' + html += self.make_label(id, field['title'], required) + html += '''
' + + def element_section_break(self, field): + html = '''
''' + html += '''

{0}

{1}

'''.format(field['title'], field['string']) + html += '''
''' + + return html \ No newline at end of file