ILIAS  release_7 Revision v7.30-3-g800a261c036
Renderer.php
Go to the documentation of this file.
1<?php
2
4
7use ILIAS\UI\Renderer as RendererInterface;
9
17{
18
22 public function render(Component\Component $popover, RendererInterface $default_renderer)
23 {
24 $this->checkComponent($popover);
25 $tpl = $this->getTemplate('tpl.popover.html', true, true);
26 $tpl->setVariable('FORCE_RENDERING', '');
29 $replacement = array(
30 '"' => '\"',
31 "\n" => "",
32 "\t" => "",
33 "\r" => "",
34 );
35
36 $options = array(
37 'title' => $this->escape($popover->getTitle()),
38 'placement' => $popover->getPosition(),
39 'multi' => true,
40 'template' => str_replace(array_keys($replacement), array_values($replacement), $tpl->get()),
41 );
42
43 if ($popover->isFixedPosition()) {
44 $options['style'] = "fixed";
45 }
46
47 $is_async = $popover->getAsyncContentUrl();
48 if ($is_async) {
49 $options['type'] = 'async';
50 $options['url'] = $popover->getAsyncContentUrl();
51 }
52
53 $show = $popover->getShowSignal();
54 $replace = $popover->getReplaceContentSignal();
55
56 $popover = $popover->withAdditionalOnLoadCode(function ($id) use ($options, $show, $replace, $is_async) {
57 if (!$is_async) {
58 $options["url"] = "#{$id}";
59 }
60 $options = json_encode($options);
61
62 return
63 "$(document).on('{$show}', function(event, signalData) {
64 il.UI.popover.showFromSignal(signalData, JSON.parse('{$options}'));
65 });" .
66 "$(document).on('{$replace}', function(event, signalData) {
67 il.UI.popover.replaceContentFromSignal('{$show}', signalData);
68 });";
69 });
70
71 $id = $this->bindJavaScript($popover);
72
73 if ($popover->getAsyncContentUrl()) {
74 return '';
75 }
76
77 if ($popover instanceof Component\Popover\Standard) {
78 return $this->renderStandardPopover($popover, $default_renderer, $id);
79 } elseif ($popover instanceof Component\Popover\Listing) {
80 return $this->renderListingPopover($popover, $default_renderer, $id);
81 }
82
83 return '';
84 }
85
86
90 public function registerResources(ResourceRegistry $registry)
91 {
92 parent::registerResources($registry);
93 $registry->register('./libs/bower/bower_components/webui-popover/dist/jquery.webui-popover.js');
94 $registry->register('./src/UI/templates/js/Popover/popover.js');
95 }
96
97
105 protected function renderStandardPopover(Component\Popover\Standard $popover, RendererInterface $default_renderer, $id)
106 {
107 $tpl = $this->getTemplate('tpl.standard-popover-content.html', true, true);
108 $tpl->setVariable('ID', $id);
109 $tpl->setVariable('CONTENT', $default_renderer->render($popover->getContent()));
110
111 return $tpl->get();
112 }
113
114
122 protected function renderListingPopover(Component\Popover\Listing $popover, RendererInterface $default_renderer, $id)
123 {
124 $tpl = $this->getTemplate('tpl.listing-popover-content.html', true, true);
125 $tpl->setVariable('ID', $id);
126 foreach ($popover->getItems() as $item) {
127 $tpl->setCurrentBlock('item');
128 $tpl->setVariable('ITEM', $default_renderer->render($item));
129 $tpl->parseCurrentBlock();
130 }
131
132 return $tpl->get();
133 }
134
135
141 protected function escape($str)
142 {
143 return strip_tags(htmlentities($str, ENT_QUOTES, 'UTF-8'));
144 }
145
146
150 protected function getComponentInterfaceName()
151 {
152 return array( Component\Popover\Standard::class, Component\Popover\Listing::class );
153 }
154}
An exception for terminatinating execution or to throw for unit testing.
renderListingPopover(Component\Popover\Listing $popover, RendererInterface $default_renderer, $id)
Definition: Renderer.php:122
renderStandardPopover(Component\Popover\Standard $popover, RendererInterface $default_renderer, $id)
Definition: Renderer.php:105
getComponentInterfaceName()
Get the name of the component-interface this renderer is supposed to render.ATTENTION: Fully qualifie...
Definition: Renderer.php:150
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.null
Definition: Renderer.php:90
getTemplate($name, $purge_unfilled_vars, $purge_unused_blocks)
Get template of component this renderer is made for.
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.
A component is the most general form of an entity in the UI.
Definition: Component.php:14
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.
An entity that renders components to a string output.
Definition: Renderer.php:15
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
Definition: latex.php:41