3declare(strict_types=1);
44 return $this->
renderMode($component, $default_renderer);
53 return $this->renderPagination($component, $default_renderer);
55 throw new LogicException(
"Component '{$component->getCanonicalName()}' isn't supported by this renderer.");
64 $activate_first_item =
false;
65 $active = $component->getActive();
67 $activate_first_item =
true;
70 foreach ($component->getLabelledActions() as $label => $action) {
71 $tpl->setVariable(
"ARIA", $this->
txt($component->getAriaLabel()));
72 $tpl->setVariable(
"ROLE", self::MODE_ROLE);
74 $tpl->setCurrentBlock(
"view_control");
78 $button =
$f->button()->standard($label, $action)->withAriaLabel($label);
79 if ($activate_first_item) {
80 $button = $button->withEngagedState(
true);
81 $activate_first_item =
false;
82 } elseif ($active == $label) {
83 $button = $button->withEngagedState(
true);
85 $button = $button->withEngagedState(
false);
87 $tpl->setVariable(
"BUTTON", $default_renderer->render($button));
88 $tpl->parseCurrentBlock();
96 RendererInterface $default_renderer
101 $tpl->setVariable(
"BUTTON", $default_renderer->render($component->getSelectorButton()));
114 $uptype = strtoupper(
$type);
116 $action = $component->getAction();
117 $tpl->setVariable($uptype .
"_ACTION", $action);
118 $label = (
$type ==
"next")
120 : $this->txt(
"previous");
121 $tpl->setVariable($uptype .
"_LABEL", $label);
122 if ($component->isActive()) {
123 $tpl->setCurrentBlock(
$type .
"_with_href");
124 $tpl->setVariable($uptype .
"_HREF", $action);
125 $tpl->parseCurrentBlock();
129 $this->renderId($component,
$tpl,
$type .
"_with_id", $uptype .
"_ID");
134 RendererInterface $default_renderer
136 $f = $this->getUIFactory();
138 $tpl = $this->getTemplate(
"tpl.sortation.html",
true,
true);
140 $component = $component->withResetSignals();
141 $triggeredSignals = $component->getTriggeredSignals();
142 if ($triggeredSignals) {
143 $internal_signal = $component->getSelectSignal();
144 $signal = $triggeredSignals[0]->getSignal();
146 $component = $component->withAdditionalOnLoadCode(fn (
$id) =>
"$(document).on('$internal_signal', function(event, signalData) {
147 il.UI.viewcontrol.sortation.onInternalSelect(event, signalData, '$signal', '$id');
152 $this->renderId($component,
$tpl,
"id",
"ID");
155 $options = $component->getOptions();
156 $init_label = $component->getLabel();
158 foreach ($options as $val => $label) {
159 if ($triggeredSignals) {
160 $shy =
$f->button()->shy($label, $val)->withOnClick($internal_signal);
162 $url = $component->getTargetURL() ??
'';
163 $url .= (strpos(
$url,
'?') ===
false) ?
'?' :
'&';
164 $url .= $component->getParameterName() .
'=' . $val;
165 $shy =
$f->button()->shy($label,
$url);
170 $dd =
$f->dropdown()->standard($items)
171 ->withLabel($init_label);
173 $tpl->setVariable(
'SORTATION_DROPDOWN', $default_renderer->render($dd));
177 protected function renderPagination(
178 Component\ViewControl\Pagination $component,
179 RendererInterface $default_renderer
181 $tpl = $this->getTemplate(
"tpl.pagination.html",
true,
true);
186 $component = $component->withResetSignals();
187 $triggeredSignals = $component->getTriggeredSignals();
188 if ($triggeredSignals) {
189 $internal_signal = $component->getInternalSignal();
190 $signal = $triggeredSignals[0]->getSignal();
191 $component = $component->withOnLoadCode(fn (
$id) =>
"$(document).on('$internal_signal', function(event, signalData) {
192 il.UI.viewcontrol.pagination.onInternalSelect(event, signalData, '$signal', '$id');
196 $id = $this->bindJavaScript($component);
200 $range = $this->getPaginationRange($component);
201 $chunk_options = array();
202 foreach ($range as $entry) {
203 $shy = $this->getPaginationShyButton($entry, $component);
204 if ($entry === $component->getCurrentPage()) {
205 $shy = $shy->withEngagedState(
true);
207 $chunk_options[] = $shy;
210 if ($component->getDropdownAt() ==
null ||
211 $component->getDropdownAt() > $component->getNumberOfPages()) {
212 foreach ($chunk_options as $entry) {
213 $tpl->setCurrentBlock(
"entry");
214 $tpl->setVariable(
'BUTTON', $default_renderer->render($entry));
215 $tpl->parseCurrentBlock();
219 $f = $this->getUIFactory();
221 $dd_label_template = $component->getDropdownLabel();
222 if ($dd_label_template === $component->getDefaultDropdownLabel()) {
223 $dd_label_template = $this->txt($dd_label_template);
227 $component->getCurrentPage() + 1,
228 $component->getNumberOfPages()
231 $dd =
$f->dropdown()->standard($chunk_options)->withLabel($dd_label);
232 $tpl->setCurrentBlock(
"entry");
233 $tpl->setVariable(
'BUTTON', $default_renderer->render($dd));
234 $tpl->parseCurrentBlock();
237 if ($component->getMaxPaginationButtons()) {
238 $this->setPaginationFirstLast($component, $range, $default_renderer,
$tpl);
241 $this->setPaginationBrowseControls($component, $default_renderer,
$tpl);
252 if (!$component->getMaxPaginationButtons()) {
254 $stop = max($component->getNumberOfPages() - 1, 0);
257 $start = (
int) ($component->getCurrentPage() - floor($component->getMaxPaginationButtons() / 2));
258 $start = max($start, 0);
260 $stop = $start + $component->getMaxPaginationButtons() - 1;
262 if ($stop > $component->getNumberOfPages() - 1) {
263 $stop = max($component->getNumberOfPages() - 1, 0);
264 $start = $stop - $component->getMaxPaginationButtons();
265 $start = max($start, 0);
268 return range($start, $stop);
276 $f = $this->getUIFactory();
279 $label = (string) ($val + 1);
282 if ($component->getTriggeredSignals()) {
283 $shy =
$f->button()->shy($label, (
string) $val)->withOnClick($component->getInternalSignal());
285 $url = $component->getTargetURL() ??
'';
286 if (strpos(
$url,
'?') ===
false) {
287 $url .=
'?' . $component->getParameterName() .
'=' . $val;
292 $params[$component->getParameterName()] = $val;
295 $shy =
$f->button()->shy($label,
$url);
305 RendererInterface $default_renderer,
308 $prev = max(0, $component->getCurrentPage() - 1);
309 $next = $component->getCurrentPage() + 1;
311 $f = $this->getUIFactory();
313 if ($component->getTriggeredSignals()) {
314 $back =
$f->symbol()->glyph()->back(
'')->withOnClick($component->getInternalSignal());
315 $forward =
$f->symbol()->glyph()->next(
'')->withOnClick($component->getInternalSignal());
317 $url = $component->getTargetURL() ??
'';
318 if (strpos(
$url,
'?') ===
false) {
319 $url_prev =
$url .
'?' . $component->getParameterName() .
'=' . $prev;
320 $url_next =
$url .
'?' . $component->getParameterName() .
'=' . $next;
326 $params[$component->getParameterName()] = $prev;
328 $params[$component->getParameterName()] = $next;
332 $back =
$f->symbol()->glyph()->back($url_prev);
333 $forward =
$f->symbol()->glyph()->next($url_next);
336 if ($component->getCurrentPage() === 0) {
337 $back = $back->withUnavailableAction();
339 if ($component->getCurrentPage() >= $component->getNumberOfPages() - 1) {
340 $forward = $forward->withUnavailableAction();
343 $tpl->setVariable(
'PREVIOUS', $default_renderer->render($back));
344 $tpl->setVariable(
'NEXT', $default_renderer->render($forward));
355 RendererInterface $default_renderer,
358 if (!in_array(0, $range)) {
359 $shy = $this->getPaginationShyButton(0, $component);
360 $tpl->setVariable(
'FIRST', $default_renderer->render($shy));
362 $last = max($component->getNumberOfPages() - 1, 0);
363 if (!in_array($last, $range)) {
364 $shy = $this->getPaginationShyButton($component->getNumberOfPages() - 1, $component);
365 $tpl->setVariable(
'LAST', $default_renderer->render($shy));
374 parent::registerResources($registry);
375 $registry->
register(
'./src/UI/templates/js/ViewControl/sortation.js');
376 $registry->
register(
'./src/UI/templates/js/ViewControl/pagination.js');
385 $id = $this->bindJavaScript($component);
387 $id = $this->createId();
389 $tpl->setCurrentBlock($block);
390 $tpl->setVariable($template_var,
$id);
391 $tpl->parseCurrentBlock();
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
renderMode(Component\ViewControl\Mode $component, RendererInterface $default_renderer)
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
setPaginationBrowseControls(Component\ViewControl\Pagination $component, RendererInterface $default_renderer, Template $tpl)
Add back/next-glyphs to the template for left/right browsing in pagination.
getComponentInterfaceName()
Get the name of the component-interface this renderer is supposed to render.ATTENTION: Fully qualifie...
renderSortation(Component\ViewControl\Sortation $component, RendererInterface $default_renderer)
getPaginationRange(Component\ViewControl\Pagination $component)
Get the range of pagination-buttons to show.
renderSectionButton(Component\Button\Button $component, Template $tpl, string $type)
renderSection(Component\ViewControl\Section $component, RendererInterface $default_renderer)
getPaginationShyButton(int $val, Component\ViewControl\Pagination $component, string $label='')
setPaginationFirstLast(Component\ViewControl\Pagination $component, array $range, RendererInterface $default_renderer, Template $tpl)
Add quick-access to first/last pages in pagination.
renderId(Component\JavaScriptBindable $component, Template $tpl, string $block, string $template_var)
render(Component\Component $component, RendererInterface $default_renderer)
Base class for all component renderers.
txt(string $id)
Get a text from the language file.
checkComponent(Component $component)
Check if a given component fits this renderer and throw \LogicError if that is not the case.
getUIFactory()
Get a UI factory.
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
if(!file_exists(getcwd() . '/ilias.ini.php'))
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
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.
An entity that renders components to a string output.
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
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...