Schema v25: a button takes an optional icon (any name from the shared set or "none") and an icon position (start or end). Without a choice it keeps the diagonal arrow behind the text, still with the button-arrow class, so stored pages and their own CSS look exactly as before. Thirteen everyday icons join the set (arrow down, chevron, calendar, message, send, download, document, play, search, heart, info, plus, person). Button, icon and icon card choose from a tile picker with a drawing per icon, grouped, keyboard navigable, instead of a select with English keys. icons.js holds the paths for the editor; a test keeps them equal to the Twig drawings and the validator list. ADR 108. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37 lines
2.0 KiB
Twig
37 lines
2.0 KiB
Twig
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<meta name="admin-base" content="{{ path('admin_pages') }}">
|
|
<title>{% block title %}Verwaltung{% endblock %} · KantSites</title>
|
|
{% include 'favicon.html.twig' %}
|
|
<link rel="stylesheet" href="/assets/admin.css?v={{ kant_version() }}">
|
|
{# Die Fassungskennung fuer die Module untereinander.
|
|
|
|
Die Einstiegsdatei bekommt ihr `?v=` aus der Vorlage, ein `import './editor-model.js'`
|
|
darin nicht - und `public/.htaccess` laesst jede .js-Datei ein Jahr lang als `immutable`
|
|
zwischenspeichern. Nach einem Update lud der Browser damit das neue `editor.js`, behielt
|
|
aber das alte `editor-model.js` und brach mit "does not provide an export named ..." ab.
|
|
Die Importkarte haengt die Fassung an die aufgeloeste Adresse, ohne dass eine einzige
|
|
Importzeile sie kennen muss. Sie steht vor jedem Modul-Skript; spaeter geladen wirkt sie
|
|
nicht mehr. #}
|
|
<script type="importmap" nonce="{{ csp_nonce() }}">{"imports":{
|
|
{%- for modul in ['editor-model', 'media', 'design-panel', 'button-design', 'color-control', 'rich-text', 'canvas-overlay', 'library-previews', 'preview-containers', 'page-picker', 'motion', 'slider', 'live-search', 'icons'] %}
|
|
"/assets/{{ modul }}.js": "/assets/{{ modul }}.js?v={{ kant_version() }}"{{ loop.last ? '' : ',' }}
|
|
{%- endfor %}
|
|
}}</script>
|
|
<script src="/assets/color-field.js?v={{ kant_version() }}" defer></script>
|
|
{% block styles %}{% endblock %}
|
|
{% block scripts %}{% endblock %}
|
|
{# Eigener Block, nicht Teil von `scripts`: Bildschirme wie die Mediathek ersetzen `scripts`
|
|
vollstaendig, und der Takt der Verwaltung darf davon nicht abhaengen. #}
|
|
{% block worker %}{% endblock %}
|
|
</head>
|
|
<body class="{% block body_class %}{% endblock %}">
|
|
<a class="skip-link" href="#admin-main">Zum Inhalt springen</a>
|
|
{% block body %}{% endblock %}
|
|
</body>
|
|
</html>
|