ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
Renderer.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
22 
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 }
Registry for resources required by rendered output like Javascript or CSS.
checkComponent(Component $component)
Check if a given component fits this renderer and throw if that is not the case. ...
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
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
renderListingPopover(Component\Popover\Listing $popover, RendererInterface $default_renderer, string $id)
Definition: Renderer.php:125
renderStandardPopover(Component\Popover\Standard $popover, RendererInterface $default_renderer, string $id)
Definition: Renderer.php:113
register(string $name)
Add a dependency.
render(Component $component, Renderer $default_renderer)
Render the component if possible and delegate additional rendering to the default_renderer.
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
Definition: Renderer.php:106
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
Definition: latex.php:41
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.