19 declare(strict_types=1);
    42             return $this->
renderMode($component, $default_renderer);
    60         $tpl = $this->
getTemplate(
"tpl.mode.html", 
true, 
true);
    62         $activate_first_item = 
false;
    63         $active = $component->getActive();
    65             $activate_first_item = 
true;
    68         $tpl->setVariable(
"ARIA", $this->
txt($component->getAriaLabel()));
    69         $tpl->setVariable(
"ROLE", self::MODE_ROLE);
    70         foreach ($component->getLabelledActions() as $label => $action) {
    71             $tpl->setCurrentBlock(
"view_control");
    73             $button = 
$f->button()->standard($label, $action);
    74             if ($activate_first_item) {
    75                 $button = $button->withEngagedState(
true);
    76                 $activate_first_item = 
false;
    77             } elseif ($active == $label) {
    78                 $button = $button->withEngagedState(
true);
    80                 $button = $button->withEngagedState(
false);
    82             $tpl->setVariable(
"BUTTON", $default_renderer->render($button));
    83             $tpl->parseCurrentBlock();
    93         $tpl = $this->
getTemplate(
"tpl.section.html", 
true, 
true);
    96         $tpl->setVariable(
"BUTTON", $default_renderer->render($component->getSelectorButton()));
   109         $uptype = strtoupper($type);
   111         $action = $component->getAction();
   113         $label = ($type == 
"next")
   115             : $this->
txt(
"previous");
   117         if ($component->isActive()) {
   124         $this->
renderId($component, $tpl, $type . 
"_with_id", $uptype . 
"_ID");
   133         $tpl = $this->
getTemplate(
"tpl.sortation.html", 
true, 
true);
   134         $label_prefix = $component->getLabelPrefix() ?? $this->
txt(
'vc_sort');
   136         $component = $component->withResetSignals();
   137         $triggeredSignals = $component->getTriggeredSignals();
   138         if ($triggeredSignals) {
   139             $internal_signal = $component->getSelectSignal();
   140             $internal_signal->addOption(
'label_prefix', $label_prefix);
   141             $signal = $triggeredSignals[0]->getSignal();
   142             $component = $component
   143                 ->withAdditionalOnLoadCode(
   144                     fn(
$id) => 
"$(document).on('$internal_signal', function(event, signalData) {   145                         il.UI.viewcontrol.sortation.get('$id').onInternalSelect(event, signalData, '$signal');   151         $component = $component
   152             ->withAdditionalOnLoadCode(
   153                 fn(
$id) => 
"il.UI.viewcontrol.sortation.init('$id');"   155             ->withAdditionalOnLoadCode(
   157                 "il.UI.dropdown.init(document.getElementById('{$id}'));"   161         $tpl->setVariable(
"ID", 
$id);
   162         $tpl->setVariable(
"ID_MENU", 
$id . 
'_ctrl');
   164         $options = $component->getOptions();
   167         $selected = $component->getSelected();
   168         foreach ($options as $val => $label) {
   169             $tpl->setCurrentBlock(
'option');
   171             if ($val === $selected) {
   172                 $tpl->touchBlock(
'selected');
   173                 $tpl->setCurrentBlock(
'option');
   176             if ($triggeredSignals) {
   177                 $shy = 
$f->button()->shy($label, $val)->withOnClick($internal_signal);
   179                 $url = $component->getTargetURL() ?? 
'';
   180                 $url .= (strpos(
$url, 
'?') === 
false) ? 
'?' : 
'&';
   181                 $url .= $component->getParameterName() . 
'=' . $val;
   182                 $shy = 
$f->button()->shy($label, 
$url);
   185             $tpl->setVariable(
'OPTION', $default_renderer->render($shy));
   186             $tpl->parseCurrentBlock();
   189         $tpl->setVariable(
'LABEL', $label_prefix . 
' ' . $options[$selected] . 
' ');
   190         $tpl->setVariable(
"ARIA_LABEL", $this->
txt(
"sortation"));
   200         if ($component->getNumberOfPages() < 2) {
   204         $tpl = $this->
getTemplate(
"tpl.pagination.html", 
true, 
true);
   205         $component = $component->withResetSignals();
   206         $triggeredSignals = $component->getTriggeredSignals();
   207         if ($triggeredSignals) {
   208             $internal_signal = $component->getInternalSignal();
   209             $signal = $triggeredSignals[0]->getSignal();
   210             $component = $component
   211                 ->withAdditionalOnLoadCode(
   212                     fn(
$id) => 
"il.UI.viewcontrol.pagination.init('$id');"   214                 ->withAdditionalOnLoadCode(
   215                     fn(
$id) => 
"$(document).on('$internal_signal', function(event, signalData) {   216                         il.UI.viewcontrol.pagination.get('$id').onInternalSelect(event, signalData, '$signal');   221             $tpl->setVariable(
'ID', 
$id);
   224         $chunk_options = array();
   225         foreach (
$range as $entry) {
   227             if ($entry === $component->getCurrentPage()) {
   228                 $shy = $shy->withEngagedState(
true);
   230             $chunk_options[] = $shy;
   233         if ($component->getDropdownAt() == null ||
   234             $component->getDropdownAt() > $component->getNumberOfPages()) {
   235             foreach ($chunk_options as $entry) {
   236                 $tpl->setCurrentBlock(
"entry");
   237                 $tpl->setVariable(
'BUTTON', $default_renderer->render($entry));
   238                 $tpl->parseCurrentBlock();
   244             $dd_label_template = $component->getDropdownLabel();
   245             if ($dd_label_template === $component->getDefaultDropdownLabel()) {
   246                 $dd_label_template = $this->
txt($dd_label_template);
   250                 $component->getCurrentPage() + 1,
   251                 $component->getNumberOfPages()
   254             $dd = 
$f->dropdown()->standard($chunk_options)->withLabel($dd_label);
   255             $tpl->setCurrentBlock(
"entry");
   256             $tpl->setVariable(
'BUTTON', $default_renderer->render($dd));
   257             $tpl->parseCurrentBlock();
   260         if ($component->getMaxPaginationButtons()) {
   275         if (!$component->getMaxPaginationButtons()) {
   277             $stop = max($component->getNumberOfPages() - 1, 0);
   280             $start = (
int) ($component->getCurrentPage() - floor($component->getMaxPaginationButtons() / 2));
   281             $start = max($start, 0); 
   283             $stop = $start + $component->getMaxPaginationButtons() - 1;
   285             if ($stop > $component->getNumberOfPages() - 1) {
   286                 $stop = max($component->getNumberOfPages() - 1, 0); 
   287                 $start = $stop - $component->getMaxPaginationButtons();
   288                 $start = max($start, 0); 
   291         return range($start, $stop);
   302             $label = (string) ($val + 1);
   305         if ($component->getTriggeredSignals()) {
   306             $shy = 
$f->button()->shy($label, (
string) $val)->withOnClick($component->getInternalSignal());
   308             $url = $component->getTargetURL() ?? 
'';
   309             if (strpos(
$url, 
'?') === 
false) {
   310                 $url .= 
'?' . $component->getParameterName() . 
'=' . $val;
   312                 $base = substr(
$url, 0, strpos(
$url, 
'?') + 1);
   313                 $query = parse_url(
$url, PHP_URL_QUERY);
   315                 $params[$component->getParameterName()] = $val;
   318             $shy = 
$f->button()->shy($label, 
$url);
   331         $prev = max(0, $component->getCurrentPage() - 1);
   332         $next = $component->getCurrentPage() + 1;
   336         $back_btn = 
$f->button()->standard(
"", 
"");
   337         $forward_btn = 
$f->button()->standard(
"", 
"");
   339         if ($component->getTriggeredSignals()) {
   340             $back_btn = $back_btn->withOnClick($component->getInternalSignal());
   341             $forward_btn = $forward_btn->withOnClick($component->getInternalSignal());
   343             $url = $component->getTargetURL() ?? 
'';
   344             if (strpos(
$url, 
'?') === 
false) {
   345                 $url_prev = 
$url . 
'?' . $component->getParameterName() . 
'=' . $prev;
   346                 $url_next = 
$url . 
'?' . $component->getParameterName() . 
'=' . $next;
   348                 $base = substr(
$url, 0, strpos(
$url, 
'?') + 1);
   349                 $query = parse_url(
$url, PHP_URL_QUERY);
   352                 $params[$component->getParameterName()] = $prev;
   353                 $url_prev = $base . http_build_query(
$params);
   354                 $params[$component->getParameterName()] = $next;
   355                 $url_next = $base . http_build_query(
$params);
   358             $back_btn = 
$f->button()->standard(
"", $url_prev);
   359             $forward_btn = 
$f->button()->standard(
"", $url_next);
   362         if ($component->getCurrentPage() === 0) {
   363             $back_btn = $back_btn->withUnavailableAction();
   365         if ($component->getCurrentPage() >= $component->getNumberOfPages() - 1) {
   366             $forward_btn = $forward_btn->withUnavailableAction();
   369         $back_glyph = 
$f->symbol()->glyph()->back();
   370         $forward_glyph = 
$f->symbol()->glyph()->next();
   372         $back_btn = $back_btn->withSymbol($back_glyph);
   373         $forward_btn = $forward_btn->withSymbol($forward_glyph);
   375         $tpl->
setVariable(
'PREVIOUS', $default_renderer->render($back_btn));
   376         $tpl->
setVariable(
'NEXT', $default_renderer->render($forward_btn));
   390         if (!in_array(0, $range)) {
   392             $tpl->
setVariable(
'FIRST', $default_renderer->render($shy));
   394         $last = max($component->getNumberOfPages() - 1, 0);
   395         if (!in_array($last, $range)) {
   397             $tpl->
setVariable(
'LAST', $default_renderer->render($shy));
   406         parent::registerResources($registry);
   407         $registry->
register(
'assets/js/viewcontrols.min.js');
   408         $registry->
register(
'assets/js/dropdown.js');
 renderSection(Component\ViewControl\Section $component, RendererInterface $default_renderer)
 
Registry for resources required by rendered output like Javascript or CSS. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
renderSortation(Component\ViewControl\Sortation $component, RendererInterface $default_renderer)
 
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...
 
txt(string $id)
Get a text from the language file. 
 
renderId(Component\JavaScriptBindable $component, Template $tpl, string $block, string $template_var)
 
setPaginationBrowseControls(Component\ViewControl\Pagination $component, RendererInterface $default_renderer, Template $tpl)
Add back/next-glyphs to the template for left/right browsing in pagination. 
 
setCurrentBlock(string $name)
Set the block to work on. 
 
getPaginationShyButton(int $val, Component\ViewControl\Pagination $component, string $label='')
 
createId()
Get a fresh unique id. 
 
setVariable(string $name, $value)
Set a variable in the current block. 
 
getPaginationRange(Component\ViewControl\Pagination $component)
Get the range of pagination-buttons to show. 
 
renderMode(Component\ViewControl\Mode $component, RendererInterface $default_renderer)
 
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for. 
 
cannotHandleComponent(Component $component)
This method MUST be called by derived component renderers, if. 
 
render(Component\Component $component, RendererInterface $default_renderer)
 
register(string $name)
Add a dependency. 
 
setPaginationFirstLast(Component\ViewControl\Pagination $component, array $range, RendererInterface $default_renderer, Template $tpl)
Add quick-access to first/last pages in pagination. 
 
parseCurrentBlock()
Parse the block that is currently worked on. 
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
renderPagination(Component\ViewControl\Pagination $component, RendererInterface $default_renderer)
 
touchBlock(string $name)
Touch a block without working further on it. 
 
getUIFactory()
Get a UI factory. 
 
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires. 
 
renderSectionButton(Component\Button\Button $component, Template $tpl, string $type)
 
Base class for all component renderers. 
 
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.