ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
Renderer.php
Go to the documentation of this file.
1 <?php
2 
4 
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 }
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. ...
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
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.null
Definition: Renderer.php:90
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
Definition: latex.php:41
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.