{% macro render_field(form, fields, scope, context = {}) %}
  {% import _self as self %}

  {% for index, field in fields %}
    {%- set show_field = attribute(field, "input@") ?? field.store ?? true %}
    {% if field.fields %}
      {%- set new_scope = field.nest_id ? scope ~ field.name ~ '.' : scope -%}
      {{- self.render_field(form, field.fields, new_scope, context) }}
    {% else %}
      {% if show_field %}
        {%- set value = form.value(scope ~ (field.name ?? index)) -%}
        {% if value %}
          {# Restore caller variables without replacing the current field's data.
             Merge the named locals rather than _context: _context also carries
             Twig's internal _parent/_seq/loop keys, and merging those into the
             `with` scope clobbers the enclosing for loop's bookkeeping on the
             Twig 1.x that Grav 1.7 ships. #}
          {% with context|merge({
               form: form, fields: fields, scope: scope, index: index,
               field: field, show_field: show_field, value: value
             }) %}
          {% block field %}
            <div>
              {% block field_label %}
                <strong>
                  {%- if field.markdown -%}
                    {{ field.data_label ? field.data_label|t|e|markdown(false) : field.label|t|e|markdown(false) }}
                  {%- else -%}
                    {{ field.data_label ? field.data_label|t|e : field.label|t|e }}
                  {%- endif -%}
                </strong>:
              {% endblock %}

              {% block field_value %}
                {% if field.type == 'checkboxes' %}
                  <ul>
                    {% set use_keys = field.use is defined and field.use == 'keys' %}
                    {% for key,value in form.value(scope ~ field.name) %}
                      {% set index = (use_keys ? key : value) %}
                      <li>{{ field.options[index]|t|e }}</li>
                    {% endfor %}
                  </ul>
                {% elseif field.type == 'radio' %}
                  {% set value = form.value(scope ~ field.name) %}
                  {{ field.options[value]|t|e }}
                {% elseif field.type == 'checkbox' %}
                  {{ (form.value(scope ~ field.name) == 1) ? "GRAV.YES"|t|e : "GRAV.NO"|t|e }}
                {% elseif field.type == 'select' %}
                  {% set value = form.value(scope ~ field.name) %}
                  {% if value is iterable %}
                    <ul>
                      {% set use_keys = field.use is defined and field.use == 'keys' %}
                      {% for key, val in value %}
                        {% set index = (use_keys ? key : val) %}
                        <li>{{ field.options[index]|t|e }}</li>
                      {% endfor %}
                    </ul>
                  {% else %}
                    {{ field.options[value]|t|e }}
                  {% endif %}
                {% else %}
                  {% set value = form.value(scope ~ field.name) %}
                  {% if value is iterable %}
                    <ul>
                      {% for val in value %}
                        {% if val is iterable %}
                          <ul>
                            {% for v in val %}
                              <li>{{ string(v)|e }}</li>
                            {% endfor %}
                          </ul>
                        {% else %}
                          <li>{{ string(val)|e }}</li>
                        {% endif %}
                      {% endfor %}
                    </ul>
                  {% else %}
                    {{ string(value)|e|nl2br }}
                  {% endif %}
                {% endif %}
              {% endblock %}
            </div>
          {% endblock %}
          {% endwith %}
        {% endif %}
      {% endif %}
    {% endif %}
  {% endfor %}
{% endmacro %}

{% import _self as macro %}

{{ macro.render_field(form, form.fields, '', _context) }}
