ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
Renderer.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
25use ILIAS\UI\Renderer as RendererInterface;
29
31{
35 public function render(Component\Component $component, RendererInterface $default_renderer): string
36 {
37 if ($component instanceof Component\Triggerer) {
38 $component = $this->addTriggererOnLoadCode($component);
39 }
40 if ($component instanceof Component\Dropdown\Dropdown) {
41 return $this->renderDropdown($component, $default_renderer);
42 }
43
44 $this->cannotHandleComponent($component);
45 }
46
47 protected function renderDropdown(Dropdown $component, RendererInterface $default_renderer): string
48 {
49 // get template
50 $tpl_name = "tpl.standard.html";
51 $tpl = $this->getTemplate($tpl_name, true, true);
52
53 // render items
54 $items = $component->getItems();
55 if (is_array($items) && count($items) == 0) {
56 return "";
57 }
58 $this->renderItems($items, $tpl, $default_renderer);
59
60 // render trigger button
61 $label = $component->getLabel();
62 if ($label !== null) {
63 $tpl->setVariable("LABEL", $component->getLabel());
64 } else {
65 $tpl->setVariable("LABEL", "");
66 }
67
68 // ensure that a) a separate aria label may be provided and
69 // b) that an empty label and empty aria-label will use the "actions" fallback
70 if ($component->getLabel() == "" || $component->getAriaLabel() != "") {
71 $aria_label = ($component->getAriaLabel() != "")
72 ? $component->getAriaLabel()
73 : $this->txt("actions");
74 $tpl->setCurrentBlock("aria_label");
75 $tpl->setVariable("ARIA_LABEL", $aria_label);
76 $tpl->parseCurrentBlock();
77 }
78
79 $component = $component->withAdditionalOnLoadCode(
80 fn($id) =>
81 "il.UI.dropdown.init(document.getElementById(\"$id\"));"
82 );
83
84 $this->renderId($component, $tpl);
85
86 return $tpl->get();
87 }
88
89 protected function renderItems(array $items, Template $tpl, RendererInterface $default_renderer): void
90 {
91 foreach ($items as $item) {
92 $tpl->setCurrentBlock("item");
93 $tpl->setVariable("ITEM", $default_renderer->render($item));
94 $tpl->parseCurrentBlock();
95 }
96 }
97
98
99 protected function renderId(
100 JavaScriptBindable $component,
101 Template $tpl
102 ): void {
103 $id = $this->bindJavaScript($component);
104 if ($id === null) {
105 $id = $this->createId();
106 }
107 $tpl->setVariable("ID", $id);
108 $tpl->setVariable("ID_MENU", $id . "_menu");
109
110 }
111
115 public function registerResources(ResourceRegistry $registry): void
116 {
117 parent::registerResources($registry);
118 $registry->register('assets/js/dropdown.js');
119 }
120}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
This implements commonalities between different types of Dropdowns.
Definition: Dropdown.php:36
renderItems(array $items, Template $tpl, RendererInterface $default_renderer)
Definition: Renderer.php:89
renderId(JavaScriptBindable $component, Template $tpl)
Definition: Renderer.php:99
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
Definition: Renderer.php:115
renderDropdown(Dropdown $component, RendererInterface $default_renderer)
Definition: Renderer.php:47
render(Component\Component $component, RendererInterface $default_renderer)
Definition: Renderer.php:35
cannotHandleComponent(Component $component)
This method MUST be called by derived component renderers, if.
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.
addTriggererOnLoadCode(Triggerer $triggerer)
Add onload-code for triggerer.
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
Interface to be extended by components that have the possibility to bind to Javascript.
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.
setCurrentBlock(string $name)
Set the block to work on.
parseCurrentBlock()
Parse the block that is currently worked on.
An entity that renders components to a string output.
Definition: Renderer.php:31
trait JavaScriptBindable
Trait for components implementing JavaScriptBindable providing standard implementation.