diff --git a/flask_bootstrap/templates/bootstrap/wtf4.html b/flask_bootstrap/templates/bootstrap/wtf4.html new file mode 100644 index 00000000..87adc440 --- /dev/null +++ b/flask_bootstrap/templates/bootstrap/wtf4.html @@ -0,0 +1,311 @@ +{% set global={} %} +{%- macro get_form_class(type, extra=None) -%} + {%- if True %} class="form + {%- if extra %} {{ extra }}{% endif -%} + {%- if type == "horizontal" %} form-horizontal + {%- elif type == "inline" %} form-inline + {%- endif %}{%- if form.was_validated %} was-validated{% endif -%}" + {%- endif -%} +{%- endmacro -%} + +{%- macro get_field_div_class(default, type, extra=None) -%} + {%- if True %} class="{{- default -}} + {%- if type == "horizontal" %} row{% endif -%} + {%- if extra and extra[0] %} {{ extra[0] }}{% endif -%}" + {%- endif -%} +{%- endmacro -%} + +{%- macro get_field_input_class(default, type, extra=None) -%} + {%- if True %} class="{{- default -}} + {%- if extra and extra[1] %} {{ extra[1] }}{% endif -%} + {%- if form.form_type == "horizontal" and form.horizontal_columns %} + {{- " col-{0}-{1}".format(form.horizontal_columns[0], form.horizontal_columns[2]) -}} + {% elif form.form_type == "inline" %} mr-sm-2 + {%- endif -%}" + {%- endif -%} +{%- endmacro -%} + +{%- macro get_label(field) -%} + {%- if field.label.text %} + + {% elif form.form_type == "horizontal" and form.horizontal_columns %} +
+ {% endif -%} +{%- endmacro -%} + +{%- macro get_enctype(form) -%} +{# The enctype attribute specifies how the form-data should be encoded when submitting it to the server. #} + {%- if form.enctype %} enctype="{{ form.enctype }}"{% else -%} + {%- for field in form -%} + {% if field.type == 'FileField' %} enctype="multipart/form-data" + {%- set _ = global.update({'upload_file': True}) -%} + {%- break -%} + {% endif %} + {%- endfor -%} + {% endif -%} +{%- endmacro -%} + +{%- macro get_basic_info(item) -%} +{# Form field basic information #} + {%- if item.id %} id="{{ item.id }}"{% endif -%} + {%- if item.name %} name="{{ item.name }}"{% endif -%} + {%- if item.description %} aria-describedby="{{ item.name|safe + '_helper' }}"{% endif -%} + {%- if item.render_kw %}{{ item.render_kw|xmlattr }}{% endif -%} + {%- if item.data and item.type != 'PasswordField' %} value="{{- item.data -}}"{% endif -%} +{%- endmacro -%} + +{%- macro init_form_group(field) -%} +{# Initial form group layout -#} + {%- if form.form_type != "inline" -%} + + {{- get_label(field) -}} + {%- endif -%} + {{caller()}} + {%- if field.description and form.form_type != "inline" %} + {%- if form.form_type == "horizontal" and form.horizontal_columns %} +
+ {% endif %} + {{- field.description -}} + {%- endif %} + {%- if field.invalid_feedback %} +
{{- field.invalid_feedback -}}
+ {%- endif %} + {%- if form.form_type != "inline" %} + + {%- endif -%} +{%- endmacro -%} + +{%- macro generate_input_field(field, type) -%} +{# Generate the common input fields -#} + {%- call init_form_group(field) -%} + + {%- endcall -%} +{%- endmacro -%} + +{%- macro generate_textarea_field(field) -%} +{# Generate the common textarea fields -#} + {%- call init_form_group(field) -%} + + {%- endcall -%} +{%- endmacro -%} + +{%- macro generate_number_field(field, type, step) -%} +{# Generate the common number fields -#} + {%- call init_form_group(field) -%} + + {%- endcall -%} +{%- endmacro -%} + +{%- macro generate_select_field(field, mutiple=False) -%} +{# Generate the common select fields -#} + {%- call init_form_group(field) -%} + + {%- endcall -%} +{%- endmacro -%} + +{%- macro generate_file_field(field) -%} +{# Generate the common file fields -#} + {%- call init_form_group(field) -%} + + + + + {%- endcall -%} +{%- endmacro -%} + +{%- macro generate_checkbox_field(field) -%} +{# Generate the common checkbox fields -#} + {%- if form.form_type != "inline" and field.extra_classes and field.extra_classes[0] -%} +
+ {%- endif -%} + {% if form.form_type == "horizontal" and form.horizontal_columns %} +
+ {% endif -%} + {%- if form.form_type != "inline" -%} +
+ {% endif -%} + + {%- if field.description and form.form_type != "inline" %} + {{- field.description -}} + {%- endif %} + {%- if form.form_type != "inline" %} +
+ {%- endif -%} + {%- if field.invalid_feedback %} +
{{- field.invalid_feedback -}}
+ {%- endif %} + {%- if form.form_type != "inline" and field.extra_classes and field.extra_classes[0] -%} +
+ {%- endif -%} +{%- endmacro -%} + +{%- macro generate_radio_field(field) -%} +{# Generate the common radio fields -#} + {%- call init_form_group(field) -%} + + {%- for option in field.choices -%} + {%- if form.form_type != "inline" -%} +
+ {% endif %} + + {%- if form.form_type != "inline" %} +
+ {%- endif -%} + {%- endfor %} + + {%- endcall -%} +{%- endmacro -%} + +{%- macro generate_submit_field(field) -%} +{# Generate the common submit fields -#} + +{%- endmacro -%} + +{%- macro form_errors(form, hiddens=True) -%} +{# Form error message #} + {%- if form.errors %} + {%- for fieldname, errors in form.errors.items() %} + {%- if bootstrap_is_hidden_field(form[fieldname]) + and hiddens + or not bootstrap_is_hidden_field(form[fieldname]) + and hiddens != 'only' %} + {%- for error in errors %} +

{{ error }}

+ {%- endfor %} + {%- endif %} + {%- endfor %} + {%- endif %} +{%- endmacro -%} + +{%- macro form_field(field) -%} +{# Get form field #} + {%- if field.type in ['TextField', 'SearchField', 'PasswordField', + 'TelField', 'URLField', 'EmailField', 'TimeField', 'DateField', + 'DateTimeField', 'DateTimeLocalField', 'ColorField'] -%} + {{- generate_input_field(field, field.widget.input_type) -}} + {%- elif field.type == 'TextAreaField' -%} + {{- generate_textarea_field(field) -}} + {%- elif field.type in ['IntegerField', 'IntegerRangeField'] -%} + {{- generate_number_field(field, field.widget.input_type, '1') -}} + {%- elif field.type in ['DecimalField', 'DecimalRangeField'] -%} + {{- generate_number_field(field, field.widget.input_type, 'any') -}} + {%- elif field.type == 'SelectField' -%} + {{- generate_select_field(field) -}} + {%- elif field.type == 'SelectMultipleField' -%} + {{- generate_select_field(field, True) -}} + {%- elif field.type == 'RadioField' -%} + {{- generate_radio_field(field) -}} + {%- elif field.type == 'BooleanField' -%} + {{- generate_checkbox_field(field) -}} + {%- elif field.type == 'FileField' -%} + {{- generate_file_field(field) -}} + {%- elif field.type == 'SubmitField' -%} + {{- generate_submit_field(field) -}} + {% endif -%} +{%- endmacro -%} + +{%- block form %} + + +{{ form.hidden_tag() -}} +{{- form_errors(form, hiddens='only') -}} + {%- block form_content -%} + {%- for field in form -%} + {%- if not bootstrap_is_hidden_field(field) %} + {{ form_field(field) -}} + {%- endif -%} + {%- endfor -%} + {%- endblock form_content %} +{%- if form.novalidate %} + +{%- endif %} +{%- if global['upload_file'] %} + +{%- endif %} +{% endblock form %} \ No newline at end of file