{% macro render_question(question, form) %}
{{ question.number }}.
{% if question.answer.help %}
{{ question.answer.help }}
{% endif %}
{{render_dependency(question, form)}} {% if question.type == 'input' %} {{ render_input_line() }} {% elif question.type == 'text' %} {{ render_textarea() }} {% elif question.type == 'number' %} {{ render_number(question) }} {% elif question.type == 'option' %} {{ render_radio_options(question) }} {% elif question.type == 'multiple_option' %} {{ render_checkbox_options(question) }} {% elif question.type == 'date' %} {{ render_date_boxes() }} {% elif question.type == 'cascade' %} {{ render_cascade(question) }} {% elif question.type == 'geo' %} {{ render_geolocation() }} {% elif question.type == 'image' %} {{ render_image_placeholder() }} {% elif question.type == 'signature' %} {{ render_signature() }} {% else %} {{ render_input_line() }} {% endif %} {{ render_jump_forward_hint(question, form) }}
{% endmacro %} {# === Sub-Macros === #} {% macro render_input_line() %}
{% endmacro %} {% macro render_textarea() %}
{% for _ in range(2) %}
{% endfor %}
{% endmacro %} {% macro render_number(question) %}
{{ render_number_boxes(question.answer.numberBox) }} {% if question.answer.minValue and question.answer.maxValue %}
Enter a number between {{question.answer.minValue}} and {{question.answer.maxValue}}
{% elif question.answer.minValue %}
Min: {{question.answer.minValue}}
{% elif question.answer.maxValue %}
Max: {{question.answer.maxValue}}
{% endif %}
{% endmacro %} {% macro render_number_boxes(count) %}
{% for _ in range(count) %} {% endfor %}
{% endmacro %} {% macro render_radio_options(question) %}
{% for option in question.answer.options %} {% endfor %} {% if question.answer.allowOther %} {% endif %}
{% endmacro %} {% macro render_checkbox_options(question) %}
{% for option in question.answer.options %} {% endfor %} {% if question.answer.allowOther %} {% endif %}
{% endmacro %} {% macro render_date_boxes() %}
{% for i in range(2) %}{% endfor %} / {% for i in range(2) %}{% endfor %} / {% for i in range(4) %}{% endfor %}
Fill in the date using structure DD/MM/YYYY
{% endmacro %} {% macro render_cascade(question) %} {% for level in question.answer.options %}
{{ level }}:
{% endfor %} {% endmacro %} {% macro render_geolocation() %}
{{ render_number_boxes(10) }} {{ render_number_boxes(10) }}
{% endmacro %} {% macro render_image_placeholder() %}
{% endmacro %} {% macro render_signature() %}
{% endmacro %} {% macro render_dependency(question, form) %} {% if question.dependencies %}
Answer only if {% for dep in question.dependencies %} {% set info = form.question_id_to_info.get(dep.depends_on_question_id | string) %} {% if info %} "{{ dep.expected_answer }}" selected for question {{ info[0] }}: "{{ info[1] }}" {% else %} "{{ dep.expected_answer }}" selected for question {{ dep.depends_on_question_id }} {% endif %} {%- if not loop.last %} AND {% endif %} {% endfor %}.
{% endif %} {% endmacro %} {% macro render_jump_forward_hint(question, form) %} {% set next_questions = form.question_reverse_dependency_map.get(question.id|string) %} {% if next_questions %} {% for q_code, q in next_questions %} {% for dep in q.dependencies %} {% if dep.depends_on_question_id == question.id %}
If "{{ dep.expected_answer }}": go to question {{ q_code }}.
{% endif %} {% endfor %} {% endfor %} {% endif %} {% endmacro %}