ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
Renderer.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
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 }
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
Definition: Renderer.php:140
Registry for resources required by rendered output like Javascript or CSS.
render(Component\Component $component, RendererInterface $default_renderer)
Definition: Renderer.php:39
renderDrilldownMenu(Menu\Drilldown $component, RendererInterface $default_renderer)
Definition: Renderer.php:69
renderMenuItems(Menu\Menu $component, RendererInterface $default_renderer)
Definition: Renderer.php:108
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:31
addMenuFilter(Menu\Menu $component, Template $template, RendererInterface $default_renderer,)
Definition: Renderer.php:126
Level of Drilldown Control.
Definition: Sub.php:28
txt(string $id)
Get a text from the language file.
setCurrentBlock(string $name)
Set the block to work on.
setVariable(string $name, $value)
Set a variable in the current block.
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
cannotHandleComponent(Component $component)
This method MUST be called by derived component renderers, if.
register(string $name)
Add a dependency.
parseCurrentBlock()
Parse the block that is currently worked on.
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
renderStandardMenu(Menu\Menu $component, RendererInterface $default_renderer)
Render a Menu.
Definition: Renderer.php:54
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.