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));
164 protected function renderPagination(
Component\ViewControl\
Pagination $component, RendererInterface $default_renderer)
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();
An exception for terminatinating execution or to throw for unit testing.
renderMode(Component\ViewControl\Mode $component, RendererInterface $default_renderer)
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)
setPaginationBrowseControls(Component\ViewControl\Pagination $component, RendererInterface $default_renderer, $tpl)
Add back/next-glyphs to the template for left/right browsing in pagination.
renderSectionButton(Component\Button\Button $component, $tpl, $type)
getPaginationShyButton($val, Component\ViewControl\Pagination $component, $label='')
renderId(Component\JavaScriptBindable $component, $tpl, $block, $template_var)
getPaginationRange(Component\ViewControl\Pagination $component)
Get the range of pagination-buttons to show.
registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry)
renderSection(Component\ViewControl\Section $component, RendererInterface $default_renderer)
render(Component\Component $component, RendererInterface $default_renderer)
setPaginationFirstLast(Component\ViewControl\Pagination $component, $range, RendererInterface $default_renderer, $tpl)
Add quick-access to first/last pages in pagination.
Base class for all component renderers.
txt($id)
Get a text from the language file.
getTemplate($name, $purge_unfilled_vars, $purge_unused_blocks)
Get template of component this renderer is made for.
createId()
Get a fresh unique id.
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.
getUIFactory()
Get a UI factory.
A component is the most general form of an entity in the UI.
Interface to be extended by components that have the possibility to bind to Javascript.
An entity that renders components to a string output.
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
trait JavaScriptBindable
Trait for components implementing JavaScriptBindable providing standard implementation.
Class ChatMainBarProvider \MainMenu\Provider.