{# kennis's own configuration (12b), the section htmx redraws whole. Choosing a backend redraws the section with the form's values, so the engine's `questions_for` decides which rows apply - one rule, as `config init` walks it. A key's field is left out of that redraw, which would otherwise put a typed key into an address. Without a script the rows are what applies to what is saved, and saving a new backend draws its questions next. #} {% from "tip.html" import tip %}

{{ kennis_settings_heading }}

{{ kennis_note }}

{% if unknown_settings %}

{{ icon("triangle-alert") }}{{ unknown_settings }}

{% endif %} {% if outcome %}

{{ outcome }}

{% endif %} {% if rebuild %}

{{ rebuild_heading }}

{% if indexes %}

{{ rebuild_note }}

{% else %}

{{ rebuild_none }}

{% endif %}
{% if indexes %}
{% endif %}
{% for key, value in previous.items() %}{% endfor %}
{{ rebuild_later }}
{% endif %}
{% for group, group_heading in kennis_groups %}

{{ group_heading }}

{% for setting in kennis_settings if setting.group == group %}
{{ tip("setting-" ~ setting.key, setting.name, setting.tip) }}
{% if setting.kind == "choice" %} {% elif setting.kind == "secret" %} {% elif setting.kind == "integer" or setting.kind == "number" %} {% elif setting.kind == "boolean" %} {# An unticked box sends nothing, and nothing means "keep": the hidden `false` comes first, so a ticked box's `true` is the later value and the one the server reads. #} {% else %} {% endif %} {% if setting.problem %}

{{ setting.problem }}

{% endif %}
{% if setting.overridden_by %}

{{ icon("info") }}{{ overridden_by(setting.overridden_by) }}

{% endif %} {% if setting.credential %}

{{ setting.credential.variable }} {{ credential_set if setting.credential.is_set else credential_unset }}

{% endif %} {% if setting.install_hint %}

{{ converter_missing }} {{ setting.install_hint }}

{% endif %} {% if setting.leaves_machine %}

{{ setting.leaves_machine }}

{% endif %}
{% endfor %}
{% endfor %}