28 return $this->
renderMode($component, $default_renderer);
37 return $this->renderPagination($component, $default_renderer);
47 $active = $component->getActive();
49 $activate_first_item =
true;
52 foreach ($component->getLabelledActions() as $label => $action) {
53 $tpl->setVariable(
"ARIA", $this->
txt($component->getAriaLabel()));
54 $tpl->setVariable(
"ROLE", self::MODE_ROLE);
56 $tpl->setCurrentBlock(
"view_control");
59 $button =
$f->button()->standard($label, $action)->withAriaLabel($label);
60 if ($activate_first_item) {
61 $button = $button->withEngagedState(
true);
62 $activate_first_item =
false;
63 } elseif ($active == $label) {
64 $button = $button->withEngagedState(
true);
66 $button = $button->withEngagedState(
false);
68 $tpl->setVariable(
"BUTTON", $default_renderer->render($button));
69 $tpl->parseCurrentBlock();
80 $tpl->setVariable(
"BUTTON", $default_renderer->render($component->getSelectorButton()));
98 $uptype = strtoupper(
$type);
100 $action = $component->getAction();
101 $tpl->setVariable($uptype .
"_ACTION", $action);
102 $label = (
$type ==
"next")
104 : $this->
txt(
"previous");
105 $tpl->setVariable($uptype .
"_LABEL", $label);
106 if ($component->isActive()) {
107 $tpl->setCurrentBlock(
$type .
"_with_href");
108 $tpl->setVariable($uptype .
"_HREF", $action);
109 $tpl->parseCurrentBlock();
123 $component = $component->withResetSignals();
124 $triggeredSignals = $component->getTriggeredSignals();
125 if ($triggeredSignals) {
126 $internal_signal = $component->getSelectSignal();
127 $signal = $triggeredSignals[0]->getSignal();
129 $component = $component->withAdditionalOnLoadCode(
function ($id) use ($internal_signal, $signal) {
130 return "$(document).on('{$internal_signal}', function(event, signalData) { 131 il.UI.viewcontrol.sortation.onInternalSelect(event, signalData, '{$signal}', '{$id}'); 140 $options = $component->getOptions();
141 $init_label = $component->getLabel();
143 foreach ($options as $val => $label) {
144 if ($triggeredSignals) {
145 $shy =
$f->button()->shy($label, $val)->withOnClick($internal_signal);
147 $url = $component->getTargetURL();
148 $url .= (strpos(
$url,
'?') ===
false) ?
'?' :
'&';
149 $url .= $component->getParameterName() .
'=' . $val;
150 $shy =
$f->button()->shy($label,
$url);
155 $dd =
$f->dropdown()->standard($items)
156 ->withLabel($init_label);
158 $tpl->setVariable(
'SORTATION_DROPDOWN', $default_renderer->render($dd));
171 $component = $component->withResetSignals();
172 $triggeredSignals = $component->getTriggeredSignals();
173 if ($triggeredSignals) {
174 $internal_signal = $component->getInternalSignal();
175 $signal = $triggeredSignals[0]->getSignal();
176 $component = $component->withOnLoadCode(
function ($id) use ($internal_signal, $signal) {
177 return "$(document).on('{$internal_signal}', function(event, signalData) { 178 il.UI.viewcontrol.pagination.onInternalSelect(event, signalData, '{$signal}', '{$id}'); 184 $tpl->setVariable(
'ID', $id);
188 $chunk_options = array();
189 foreach ($range as $entry) {
191 if ((
int) $entry === $component->getCurrentPage()) {
192 $shy = $shy->withEngagedState(
true);
194 $chunk_options[] = $shy;
197 if ($component->getDropdownAt() == null ||
198 $component->getDropdownAt() > $component->getNumberOfPages()) {
199 foreach ($chunk_options as $entry) {
200 $tpl->setCurrentBlock(
"entry");
201 $tpl->setVariable(
'BUTTON', $default_renderer->render($entry));
202 $tpl->parseCurrentBlock();
208 $dd_label_template = $component->getDropdownLabel();
209 if ($dd_label_template === $component->getDefaultDropdownLabel()) {
210 $dd_label_template = $this->
txt($dd_label_template);
214 $component->getCurrentPage() + 1,
215 $component->getNumberOfPages()
218 $dd =
$f->dropdown()->standard($chunk_options)->withLabel($dd_label);
219 $tpl->setCurrentBlock(
"entry");
220 $tpl->setVariable(
'BUTTON', $default_renderer->render($dd));
221 $tpl->parseCurrentBlock();
224 if ($component->getMaxPaginationButtons()) {
241 if (!$component->getMaxPaginationButtons()) {
243 $stop = max($component->getNumberOfPages() - 1, 0);
246 $start = (int) ($component->getCurrentPage() - floor($component->getMaxPaginationButtons() / 2));
247 $start = max($start, 0);
249 $stop = $start + $component->getMaxPaginationButtons() - 1;
251 if ($stop > $component->getNumberOfPages() - 1) {
252 $stop = max($component->getNumberOfPages() - 1, 0);
253 $start = $stop - $component->getMaxPaginationButtons();
254 $start = max($start, 0);
257 return range($start, $stop);
273 $label = (string) ((
int) $val + 1);
276 if ($component->getTriggeredSignals()) {
277 $shy =
$f->button()->shy($label, (
string) $val)->withOnClick($component->getInternalSignal());
279 $url = $component->getTargetURL();
280 if (strpos(
$url,
'?') ===
false) {
281 $url .=
'?' . $component->getParameterName() .
'=' . $val;
285 parse_str(
$query, $params);
286 $params[$component->getParameterName()] = $val;
287 $url =
$base . http_build_query($params);
289 $shy =
$f->button()->shy($label,
$url);
305 $prev = max(0, $component->getCurrentPage() - 1);
306 $next = $component->getCurrentPage() + 1;
310 if ($component->getTriggeredSignals()) {
311 $back =
$f->symbol()->glyph()->back(
'')->withOnClick($component->getInternalSignal());
312 $forward =
$f->symbol()->glyph()->next(
'')->withOnClick($component->getInternalSignal());
314 $url = $component->getTargetURL();
315 if (strpos(
$url,
'?') ===
false) {
316 $url_prev =
$url .
'?' . $component->getParameterName() .
'=' . $prev;
317 $url_next =
$url .
'?' . $component->getParameterName() .
'=' . $next;
321 parse_str(
$query, $params);
323 $params[$component->getParameterName()] = $prev;
324 $url_prev =
$base . http_build_query($params);
325 $params[$component->getParameterName()] = $next;
326 $url_next =
$base . http_build_query($params);
329 $back =
$f->symbol()->glyph()->back($url_prev);
330 $forward =
$f->symbol()->glyph()->next($url_next);
333 if ($component->getCurrentPage() === 0) {
334 $back = $back->withUnavailableAction();
336 if ($component->getCurrentPage() >= $component->getNumberOfPages() - 1) {
337 $forward = $forward->withUnavailableAction();
340 $tpl->setVariable(
'PREVIOUS', $default_renderer->render($back));
341 $tpl->setVariable(
'NEXT', $default_renderer->render($forward));
356 if (!in_array(0, $range)) {
358 $tpl->setVariable(
'FIRST', $default_renderer->render($shy));
360 $last = max($component->getNumberOfPages() - 1, 0);
361 if (!in_array($last, $range)) {
363 $tpl->setVariable(
'LAST', $default_renderer->render($shy));
373 parent::registerResources($registry);
374 $registry->register(
'./src/UI/templates/js/ViewControl/sortation.js');
375 $registry->register(
'./src/UI/templates/js/ViewControl/pagination.js');
385 $tpl->setCurrentBlock($block);
386 $tpl->setVariable($template_var, $id);
387 $tpl->parseCurrentBlock();
renderSection(Component\ViewControl\Section $component, RendererInterface $default_renderer)
setPaginationBrowseControls(Component\ViewControl\Pagination $component, RendererInterface $default_renderer, $tpl)
Add back/next-glyphs to the template for left/right browsing in pagination.
setPaginationFirstLast(Component\ViewControl\Pagination $component, $range, RendererInterface $default_renderer, $tpl)
Add quick-access to first/last pages in pagination.
renderSortation(Component\ViewControl\Sortation $component, RendererInterface $default_renderer)
checkComponent(Component $component)
Check if a given component fits this renderer and throw if that is not the case. ...
renderId(Component\JavaScriptBindable $component, $tpl, $block, $template_var)
Class ChatMainBarProvider .
trait JavaScriptBindable
Trait for components implementing JavaScriptBindable providing standard implementation.
render(Component\Component $component, RendererInterface $default_renderer)
getComponentInterfaceName()
getPaginationShyButton($val, Component\ViewControl\Pagination $component, $label='')
createId()
Get a fresh unique id.
renderSectionButton(Component\Button\Button $component, $tpl, $type)
txt($id)
Get a text from the language file.
getPaginationRange(Component\ViewControl\Pagination $component)
Get the range of pagination-buttons to show.
registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry)
renderMode(Component\ViewControl\Mode $component, RendererInterface $default_renderer)
getUIFactory()
Get a UI factory.
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
getTemplate($name, $purge_unfilled_vars, $purge_unused_blocks)
Get template of component this renderer is made for.
Base class for all component renderers.
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.