{% extends "base.html" %} {% from "model/_widgets.html" import checkbox_control, color_control, file_control, generic_control, geometry_control, keyvalue_control, nullboolean_control, password_control, range_control, readonly_control, relations_control, richtext_control, select_control, tags_control, textarea_control %} {% block content %}

{{ heading }}

{% if subheading %}

{{ subheading }}

{% endif %}
{{ ff_icon("arrow-left", size=15) }} {{ _("Back to {name}", name=model_title|lower) }} {% if delete_url %} {# Red, because it is the one action on this page that cannot be undone. Ghost rather than solid: it is not what the page is for, and a slab of red beside "Save changes" competes with it. #} {{ ff_icon("trash", size=15) }} {{ _("Delete") }} {% endif %}
{% if form.non_field_errors %} {% elif form.error_count %} {% endif %}
{% if version_token %} {# Carries the row's state at load time, so a save that would silently overwrite someone else's edit can be detected instead. #} {% endif %}
{% for field in form.fields %} {# The geometry kind decides width too -- a POLYGON's textarea earns the full row the way any other textarea does, but a POINT with no map configured is still a short text box next to nothing. Mirrors `geometry_control`'s own default: a missing `GeometrySpec` reads as POINT, which is what a `formfield_overrides = {"col": "point"}` on a plain column looks like once its name resolves to "geometry". #} {% set geometry_kind = (field.spec.geometry.kind if field.spec.geometry else "POINT") if field.widget == "geometry" else "" %} {# Long controls span both columns: a textarea squeezed into half a page is worse than a taller form. #} {% set wide = field.widget in ("textarea", "json", "relations", "keyvalue", "range") or (field.widget == "geometry" and (settings.ui.map_tile_url or geometry_kind != "POINT")) %}
{% if field.widget == "readonly" %} {{ readonly_control(field) }} {% elif field.widget == "textarea" or field.widget == "json" %} {{ textarea_control(field) }} {% elif field.widget == "geometry" %} {{ geometry_control(field, settings.ui.map_tile_url, settings.ui.map_center, settings.ui.map_attribution, settings.ui.map_max_zoom) }} {% elif field.widget in ("file", "image") %} {{ file_control(field, media_url, settings.media.upload_limit, _) }} {% elif field.widget == "color" %} {{ color_control(field) }} {% elif field.widget == "richtext" %} {{ richtext_control(field) }} {% elif field.widget == "nullboolean" %} {{ nullboolean_control(field, _) }} {% elif field.widget == "checkbox" %} {{ checkbox_control(field, _) }} {% elif field.widget == "password" %} {{ password_control(field, _) }} {% elif field.widget == "select" or field.widget == "relation" %} {{ select_control(field, autocomplete_url, relation_links, _) }} {% elif field.widget == "relations" %} {{ relations_control(field, autocomplete_url, relation_links, _) }} {% elif field.widget == "tags" %} {{ tags_control(field) }} {% elif field.widget == "keyvalue" %} {{ keyvalue_control(field) }} {% elif field.widget == "range" %} {{ range_control(field, input_types, _) }} {% else %} {{ generic_control(field, input_types) }} {% endif %} {% if field.help_text and field.widget != "checkbox" %} {{ field.help_text }} {% endif %} {% for message in field.errors %} {{ message }} {% endfor %}
{% endfor %}
{{ _("Cancel") }}
{% endblock %}