enhancement
major
minor
defect
critical
major
minor
minor
#30044
TL-Ansichten: Ein Seitenleisten-Trennzeichen bleibt sichtbar, wenn alle darauf folgenden Elemente ausgeblendet sind; in der anonymen Sitzung wird das System-Trennzeichen angezeigt, unter dem sich nichts befindet.
Problem
The engine's application shell (tl-layout-view, WEB-INF/views/app.view.xml) closes the application's sidebar items with <separator id="system-separator"/>. The only item after it is administration, which carries <access-control operation="Administration"/>. A session without that right, the anonymous one in particular, gets the item hidden but still sees the separator, as a line with nothing below it.
Seen in the TL Development app on snapshot build 59, which overlays the engine shell, in the anonymous session.
Expected
A sidebar separator is shown only between two visible entries. A separator with no visible item before or after it, or directly next to another shown separator, is not displayed. The rule is generic, not tied to the system separator, so the same holds for any application separator next to items hidden by access control.
Test
A sidebar with items A, a separator and B, where B carries an access control the session lacks: the sidebar shows A and no separator.
Lösung
Die Ursache ist strukturell: Ein <separator> beschreibt eine Linie, gemeint ist aber eine Gliederung der Seitenleiste in Abschnitte. Die Linie und die Überschrift eines Abschnitts ergeben sich daraus, welche Abschnitte gerade etwas anzeigen.
- Neues Seitenleisten-Element <section id="…"> mit optionalem label (Überschrift) und icon: fasst Einträge zu einem Abschnitt zusammen, ohne Aufklappen; die Einträge erscheinen wie auf der Ebene des Abschnitts. Ein Abschnitt kann wie eine Gruppe eine <access-control> tragen und lässt sich in Gruppen und Abschnitten schachteln.
- Zwischen zwei benachbarten angezeigten Einträgen, von denen mindestens einer ein Abschnitt ist, steht eine Trennlinie - nie am Anfang oder Ende einer Liste. Ein Abschnitt, dessen Einträge alle ausgeblendet oder durch die Zugriffsprüfung zurückgehalten sind, entfällt samt Überschrift und Trennlinie, auch wenn sich das zur Laufzeit ändert. Das entspricht den Gruppen eines Menüs (<menu>).
- Im Ausklappmenü einer Gruppe bei eingeklappter Seitenleiste erscheinen Abschnitte und geschachtelte Gruppen unter ihrer Überschrift zwischen Trennlinien; bisher fehlten geschachtelte Gruppen dort ganz.
- <separator> und <header-item> entfallen: eine Überschrift gibt es nur noch als Beschriftung eines Abschnitts, sie verschwindet mit ihm.
- Die Shell gliedert ihre Seitenleiste in <section id="application"/> (leer, wird von der Anwendung gefüllt) und <section id="system"> mit der Administration. In einer Sitzung ohne Administrationsrecht entfällt der Systemabschnitt samt Trennlinie.
- Angepasst sind die Overlays von tl-demo-react, tl-ai-demo, tl-factory-app, der Archetyp sowie die Entwicklerartikel view-layer/app-shell, view-layer/overlays und view-layer/access-control.
Migration
Ein Overlay der Shell (WEB-INF/views/app.view.xml einer Anwendung), das noch config:reference="system-separator" nennt oder <separator> bzw. <header-item> verwendet, lässt sich nicht mehr laden (die Anwendung antwortet unter /view/ mit HTTP 500). Anpassung:
- Einträge, die mit config:position="before" config:reference="system-separator" vor den Systemabschnitt gestellt wurden, ohne diese beiden Attribute in den Anwendungsabschnitt schreiben:
{{{#!xml <sidebar config:ref="sidebar">
<items>
<section id="application">
<nav-item id="home">...</nav-item>
</section>
</items>
</sidebar> }}}
- Ein <separator/> zwischen eigenen Einträgen: die Einträge davor und danach in je eine <section id="…"> fassen.
- Ein <header-item id="x"> mit Beschriftung: durch <section id="x"> mit derselben Beschriftung ersetzen und die Einträge, die es überschrieb, in den Abschnitt verschieben. Die IDs der Einträge bleiben unverändert.