ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
Renderer.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24use ILIAS\UI\Renderer as RendererInterface;
29
31{
32 private const PARENT_CLASS = 'c-drilldown__branch';
33 private const LEAF_CLASS = 'c-drilldown__leaf';
34 private const NO_ITEMS_LABEL = 'drilldown_no_items';
35
39 public function render(Component\Component $component, RendererInterface $default_renderer): string
40 {
41 if ($component instanceof Menu\Drilldown) {
42 return $this->renderDrilldownMenu($component, $default_renderer);
43 }
44 if ($component instanceof Menu\Menu) {
45 return $this->renderStandardMenu($component, $default_renderer);
46 }
47
48 $this->cannotHandleComponent($component);
49 }
50
54 protected function renderStandardMenu(
55 Menu\Menu $component,
56 RendererInterface $default_renderer
57 ): string {
58 $tpl_menu = $this->getTemplate('tpl.menu.html', true, true);
59
60 $label = $component->getLabel();
61 if (!is_string($label)) {
62 $label = $default_renderer->render($label);
63 }
64 $tpl_menu->setVariable('LABEL', $label);
65 $tpl_menu->setVariable('ITEMS', $this->renderMenuItems($component, $default_renderer));
66 return $tpl_menu->get();
67 }
68
69 protected function renderDrilldownMenu(
70 Menu\Drilldown $component,
71 RendererInterface $default_renderer
72 ): string {
73 $items_html = $this->renderMenuItems($component, $default_renderer);
74 $ui_factory = $this->getUIFactory();
75 $back_signal = $component->getBacklinkSignal();
76 $persistence_id = $component->getPersistenceId();
77 $glyph = $ui_factory->symbol()->glyph()->collapsehorizontal();
78 $btn = $ui_factory->button()->bulky($glyph, '', '#')
79 ->withOnClick($back_signal)
80 ->withAriaLabel($this->txt('back'));
81 $back_button_html = $default_renderer->render($btn);
82
83 $component = $component->withAdditionalOnLoadCode(
84 function ($id) use ($back_signal, $persistence_id) {
85 $params = "'$id', '$back_signal'";
86 if (is_null($persistence_id)) {
87 $params .= ", null";
88 } else {
89 $params .= ", '$persistence_id'";
90 }
91 return "il.UI.menu.drilldown.init($params);";
92 }
93 );
94 $id_drilldown = $this->bindJavaScript($component);
95
96 $tpl_name = "tpl.drilldown.html";
97 $tpl = $this->getTemplate($tpl_name, true, true);
98 $tpl->setVariable("ID", $id_drilldown);
99 $tpl->setVariable('ARIA_LABEL', $component->getLabel());
100 $tpl->setVariable('BACKNAV', $back_button_html);
101 $tpl->setVariable('DRILLDOWN', $items_html);
102 $tpl->setVariable('NO_ITEMS_TEXT', $this->txt(self::NO_ITEMS_LABEL));
103 $this->addMenuFilter($component, $tpl, $default_renderer);
104
105 return $tpl->get();
106 }
107
108 protected function renderMenuItems(
109 Menu\Menu $component,
110 RendererInterface $default_renderer
111 ): string {
112 $html = '';
113 foreach ($component->getItems() as $item) {
114 $tpl_item = $this->getTemplate('tpl.menuitem.html', true, true);
115 if ($item instanceof Menu\Sub) {
116 $tpl_item->setVariable('CLASS', self::PARENT_CLASS);
117 } else {
118 $tpl_item->setVariable('CLASS', self::LEAF_CLASS);
119 }
120 $tpl_item->setVariable('ITEM', $default_renderer->render($item));
121 $html .= $tpl_item->get();
122 }
123 return $html;
124 }
125
126 protected function addMenuFilter(
127 Menu\Menu $component,
128 Template $template,
129 RendererInterface $default_renderer,
130 ): void {
131 $template->setCurrentBlock('with_filter');
132 $template->setVariable('LABEL', sprintf($this->txt('filter_nodes_in'), $component->getLabel()));
133 $template->setVariable('ID_FILTER', $this->createId());
134 $template->parseCurrentBlock();
135 }
136
140 public function registerResources(ResourceRegistry $registry): void
141 {
142 parent::registerResources($registry);
143 $registry->register('assets/js/drilldown.min.js');
144 }
145}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
Definition: Renderer.php:140
renderStandardMenu(Menu\Menu $component, RendererInterface $default_renderer)
Render a Menu.
Definition: Renderer.php:54
renderMenuItems(Menu\Menu $component, RendererInterface $default_renderer)
Definition: Renderer.php:108
renderDrilldownMenu(Menu\Drilldown $component, RendererInterface $default_renderer)
Definition: Renderer.php:69
addMenuFilter(Menu\Menu $component, Template $template, RendererInterface $default_renderer,)
Definition: Renderer.php:126
render(Component\Component $component, RendererInterface $default_renderer)
Definition: Renderer.php:39
Level of Drilldown Control.
Definition: Sub.php:29
cannotHandleComponent(Component $component)
This method MUST be called by derived component renderers, if.
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
return true
Registry for resources required by rendered output like Javascript or CSS.
register(string $name)
Add a dependency.
Interface to templating as it is used in the UI framework.
Definition: Template.php:29
setVariable(string $name, $value)
Set a variable in the current block.
parseCurrentBlock()
Parse the block that is currently worked on.
An entity that renders components to a string output.
Definition: Renderer.php:31
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:31