+{% endif %}
+{{caller()}}
+
+{% if form_type == "horizontal" %}
+ {% if add_group %}
{% endif %}
+
+{% endif %}
+{% endmacro %}
+
+{% macro form_field(field,
+ form_type="basic",
+ horizontal_columns=('lg', 2, 10),
+ button_map={}) %}
+
+{# this is a workaround hack for the more straightforward-code of just passing required=required parameter. older versions of wtforms do not have
+the necessary fix for required=False attributes, but will also not set the required flag in the first place. we skirt the issue using the code below #}
+{% if field.flags.required and not required in kwargs %}
+{% set kwargs = dict(required=True, **kwargs) %}
+{% endif %}
+
+{% if field.widget.input_type == 'checkbox' %}
+ {% call _hz_form_wrap(horizontal_columns, form_type, True, required=required) %}
+
+
+
+ {% endcall %}
+{%- elif field.type == 'RadioField' -%}
+ {# note: A cleaner solution would be rendering depending on the widget,
+ this is just a hack for now, until I can think of something better #}
+ {% call _hz_form_wrap(horizontal_columns, form_type, True, required=required) %}
+ {% for item in field -%}
+
+
+
+ {% endfor %}
+ {% endcall %}
+{%- elif field.type == 'SubmitField' -%}
+ {# deal with jinja scoping issues? #}
+ {% set field_kwargs = kwargs %}
+
+ {# note: same issue as above - should check widget, not field type #}
+ {% call _hz_form_wrap(horizontal_columns, form_type, True, required=required) %}
+ {{field(class='btn btn-%s' % button_map.get(field.name, 'default'),
+ **field_kwargs)}}
+ {% endcall %}
+{%- elif field.type == 'FormField' -%}
+{# note: FormFields are tricky to get right and complex setups requiring
+ these are probably beyond the scope of what this macro tries to do.
+ the code below ensures that things don't break horribly if we run into
+ one, but does not try too hard to get things pretty. #}
+
+{% else -%}
+
+{% endif %}
+{% endmacro %}
+
+{# valid form types are "basic", "inline" and "horizontal" #}
+{% macro quick_form(form,
+ action="",
+ method="post",
+ extra_classes=None,
+ role="form",
+ form_type="basic",
+ horizontal_columns=('lg', 2, 10),
+ enctype=None,
+ button_map={},
+ id="",
+ novalidate=False) %}
+{#-
+action="" is what we want, from http://www.ietf.org/rfc/rfc2396.txt:
+
+4.2. Same-document References
+
+ A URI reference that does not contain a URI is a reference to the
+ current document. In other words, an empty URI reference within a
+ document is interpreted as a reference to the start of that document,
+ and a reference containing only a fragment identifier is a reference
+ to the identified fragment of that document. Traversal of such a
+ reference should not result in an additional retrieval action.
+ However, if the URI reference occurs in a context that is always
+ intended to result in a new request, as in the case of HTML's FORM
+ element, then an empty URI reference represents the base URI of the
+ current document and should be replaced by that URI when transformed
+ into a request.
+
+ -#}
+{#- if any file fields are inside the form and enctype is automatic, adjust
+ if file fields are found. could really use the equalto test of jinja2
+ here, but latter is not available until 2.8
+
+ warning: the code below is guaranteed to make you cry =(
+#}
+{%- set _enctype = [] %}
+{%- if enctype is none -%}
+ {%- for field in form %}
+ {%- if field.type == 'FileField' %}
+ {#- for loops come with a fairly watertight scope, so this list-hack is
+ used to be able to set values outside of it #}
+ {%- set _ = _enctype.append('multipart/form-data') -%}
+ {%- endif %}
+ {%- endfor %}
+{%- else %}
+ {% set _ = _enctype.append(enctype) %}
+{%- endif %}
+
+{%- endmacro %}
diff --git a/templates/login.html b/templates/login.html
index 8c8b652..30b08b7 100644
--- a/templates/login.html
+++ b/templates/login.html
@@ -18,22 +18,51 @@