{% extends "base.html" %} {% from "_macros.html" import icon, model_avatar %} {% block title %}{{ t("Your settings") }} - {{ brand.name }}{% endblock %} {% block head %} {% endblock %} {% block body_attrs %} data-authenticated="true"{{ ' data-settings-embed' if settings_embed }}{% endblock %} {% block body %} {# The same page twice. As a page it has the shell -- the sidebar and the topbar -- and in the settings window (ui.js, desktop widths) it is the content of a frame inside a dialog that has its own title and close button, so the shell is left out and nothing else changes: every form, tab and redirect below is the one the page has always had. `settings_embed` is decided in pages.py; `data-settings-embed` on the body is what ui.js reads in the frame. #}
{% if not settings_embed %} {% include "partials/sidebar.html" %} {% endif %} {# `main--settings` is a size container: whether the tabs run down the side or across the top is decided by how wide *this* is, not the window -- the page beside a sidebar and the frame in a dialog are different widths at the same window width. See admin.css. #}
{% if not settings_embed %}
{% include "partials/_sidebar_toggle.html" %}

{{ t("Your settings") }}

{% endif %} {# Tabs are radio inputs plus sibling selectors: no JavaScript, and the chosen tab survives a re-render because the browser keeps the checked state. Each panel is a real fragment of the page, not a fetch. `tabs--side`: a vertical list on the left wherever there is room for one, the strip across the top where there is not. Same markup both ways, so the radios, the labels and the panel-by-position rule are untouched. #}
{# Deliberately no `role="tablist"`. It had one, and the children are `` and `
{% endblock %}