ILIAS  release_8 Revision v8.24
Renderer.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
22
25use ILIAS\UI\Renderer as RendererInterface;
27
35{
39 public function render(Component\Component $popover, RendererInterface $default_renderer): string
40 {
41 $this->checkComponent($popover);
42 $tpl = $this->getTemplate('tpl.popover.html', true, true);
43 $tpl->setVariable('FORCE_RENDERING', '');
46 $replacement = array(
47 '"' => '\"',
48 "\n" => "",
49 "\t" => "",
50 "\r" => "",
51 );
52
53 $options = array(
54 'title' => $this->escape($popover->getTitle()),
55 'placement' => $popover->getPosition(),
56 'multi' => true,
57 'template' => str_replace(array_keys($replacement), array_values($replacement), $tpl->get()),
58 );
59
60 if ($popover->isFixedPosition()) {
61 $options['style'] = "fixed";
62 }
63
64 $is_async = $popover->getAsyncContentUrl();
65 if ($is_async) {
66 $options['type'] = 'async';
67 $options['url'] = $popover->getAsyncContentUrl();
68 }
69
70 $show = $popover->getShowSignal();
71 $replace = $popover->getReplaceContentSignal();
72
73 $popover = $popover->withAdditionalOnLoadCode(function ($id) use ($options, $show, $replace, $is_async) {
74 if (!$is_async) {
75 $options["url"] = "#$id";
76 }
77 $options = json_encode($options);
78
79 return
80 "$(document).on('$show', function(event, signalData) {
81 il.UI.popover.showFromSignal(signalData, JSON.parse('$options'));
82 });" .
83 "$(document).on('$replace', function(event, signalData) {
84 il.UI.popover.replaceContentFromSignal('$show', signalData);
85 });";
86 });
87
88 $id = $this->bindJavaScript($popover);
89
90 if ($popover->getAsyncContentUrl()) {
91 return '';
92 }
93
94 if ($popover instanceof Component\Popover\Standard) {
95 return $this->renderStandardPopover($popover, $default_renderer, $id);
96 } elseif ($popover instanceof Component\Popover\Listing) {
97 return $this->renderListingPopover($popover, $default_renderer, $id);
98 }
99
100 return '';
101 }
102
106 public function registerResources(ResourceRegistry $registry): void
107 {
108 parent::registerResources($registry);
109 $registry->register('./libs/bower/bower_components/webui-popover/dist/jquery.webui-popover.js');
110 $registry->register('./src/UI/templates/js/Popover/popover.js');
111 }
112
113 protected function renderStandardPopover(
114 Component\Popover\Standard $popover,
115 RendererInterface $default_renderer,
116 string $id
117 ): string {
118 $tpl = $this->getTemplate('tpl.standard-popover-content.html', true, true);
119 $tpl->setVariable('ID', $id);
120 $tpl->setVariable('CONTENT', $default_renderer->render($popover->getContent()));
121
122 return $tpl->get();
123 }
124
125 protected function renderListingPopover(
126 Component\Popover\Listing $popover,
127 RendererInterface $default_renderer,
128 string $id
129 ): string {
130 $tpl = $this->getTemplate('tpl.listing-popover-content.html', true, true);
131 $tpl->setVariable('ID', $id);
132 foreach ($popover->getItems() as $item) {
133 $tpl->setCurrentBlock('item');
134 $tpl->setVariable('ITEM', $default_renderer->render($item));
135 $tpl->parseCurrentBlock();
136 }
137
138 return $tpl->get();
139 }
140
141 protected function escape(string $str): string
142 {
143 return strip_tags(htmlentities($str, ENT_QUOTES, 'UTF-8'));
144 }
145
149 protected function getComponentInterfaceName(): array
150 {
151 return array( Component\Popover\Standard::class, Component\Popover\Listing::class );
152 }
153}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
getComponentInterfaceName()
Get the name of the component-interface this renderer is supposed to render.ATTENTION: Fully qualifie...
Definition: Renderer.php:149
renderStandardPopover(Component\Popover\Standard $popover, RendererInterface $default_renderer, string $id)
Definition: Renderer.php:113
renderListingPopover(Component\Popover\Listing $popover, RendererInterface $default_renderer, string $id)
Definition: Renderer.php:125
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
Definition: Renderer.php:106
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.
checkComponent(Component $component)
Check if a given component fits this renderer and throw \LogicError if that is not the case.
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
return true
render(Component $component, Renderer $default_renderer)
Render the component if possible and delegate additional rendering to the default_renderer.
Registry for resources required by rendered output like Javascript or CSS.
register(string $name)
Add a dependency.
An entity that renders components to a string output.
Definition: Renderer.php:31
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
Definition: latex.php:41
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Factory.php:21