From b849770230f08f5fb52fc3d2730c7bbb68ec62ca Mon Sep 17 00:00:00 2001 From: Fabian Helfer Date: Fri, 30 Jan 2026 14:36:16 +0100 Subject: [PATCH 1/2] [Fix] 0047059 UI: Use role="navigation" for LegacySlate in MainBar (ARIA) --- .../src/Implementation/Component/MainControls/Renderer.php | 6 +++++- .../Implementation/Component/MainControls/Slate/Slate.php | 4 +++- .../ILIAS/UI/tests/Component/MainControls/MainBarTest.php | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php index 76d1623ca97f..66d3bf5e7f44 100755 --- a/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php @@ -24,6 +24,7 @@ use ILIAS\UI\Component\MainControls\Footer; use ILIAS\UI\Component\MainControls\MainBar; use ILIAS\UI\Component\MainControls\MetaBar; +use ILIAS\UI\Component\MainControls\Slate\Legacy as LegacySlate; use ILIAS\UI\Component\MainControls\Slate\Slate; use ILIAS\UI\Component\Signal; use ILIAS\UI\Implementation\Component\Button\Bulky as IBulky; @@ -166,7 +167,10 @@ function ($id) use ($js, $mb_id, $k, $is_tool): string { $tpl->parseCurrentBlock(); if ($slate) { - $entry = $entry->withAriaRole(ISlate::MENU); + // Legacy slates (e.g. with Tree content) must not use role="menu" because + // ARIA forbids role="tree"/"treeitem" inside role="menu". Use role="navigation" instead. + $aria_role = ($entry instanceof LegacySlate) ? ISlate::NAVIGATION : ISlate::MENU; + $entry = $entry->withAriaRole($aria_role); $tpl->setCurrentBlock("slate_item"); $tpl->setVariable("SLATE", $default_renderer->render($entry)); diff --git a/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Slate.php b/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Slate.php index 2bc23e8ae1ea..4b3734dc9971 100755 --- a/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Slate.php +++ b/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Slate.php @@ -40,12 +40,14 @@ abstract class Slate implements ISlate\Slate // allowed ARIA roles public const MENU = 'menu'; + public const NAVIGATION = 'navigation'; /** * @var string[] */ protected static array $allowed_aria_roles = array( - self::MENU + self::MENU, + self::NAVIGATION ); protected string $name; diff --git a/components/ILIAS/UI/tests/Component/MainControls/MainBarTest.php b/components/ILIAS/UI/tests/Component/MainControls/MainBarTest.php index df1a8e0fac5e..9a6f2aba5b4d 100755 --- a/components/ILIAS/UI/tests/Component/MainControls/MainBarTest.php +++ b/components/ILIAS/UI/tests/Component/MainControls/MainBarTest.php @@ -324,7 +324,7 @@ public function testRendering(): void -