19declare(strict_types=1);
66 RendererInterface $default_renderer
69 $tpl->setVariable(
"TITLE", $component->getTitle());
70 $expcollapsebtns = [];
71 if ($sig_ta = $component->getExpandCollapseAllSignal()) {
72 $sig_ta_expand = clone $sig_ta;
73 $sig_ta_expand->addOption(
'expand',
true);
75 ->standard($this->
txt(
'presentation_table_expand'),
'')
76 ->withOnClick($sig_ta_expand);
77 $sig_ta_collapse = clone $sig_ta;
78 $sig_ta_collapse->addOption(
'expand',
false);
80 ->standard($this->
txt(
'presentation_table_collapse'),
'')
81 ->withOnClick($sig_ta_collapse);
82 $component = $component->withAdditionalOnLoadCode(
84 il.UI.table.presentation.init('{$id}');
85 $(document).on('$sig_ta', function(event, signal_data) { il.UI.table.presentation.get('$id').expandAll(signal_data); return false; });
90 $tpl->setVariable(
"EXPANDCOLLAPSEALL", $default_renderer->render($expcollapsebtns));
92 $vcs = $component->getViewControls();
94 $tpl->setVariable(
"VC", $default_renderer->render($vcs));
98 $tpl->setVariable(
"ID",
$id);
100 $row_mapping = $component->getRowMapping();
101 $data = $component->getData();
105 $this->renderEmptyPresentationRow($tpl, $default_renderer, $this->
txt(
'ui_table_no_records'));
109 foreach (
$data as $record) {
111 new PresentationRow($component->getSignalGenerator(), $component_id),
113 $this->getUIFactory(),
114 $component->getEnvironment()
117 $tpl->setCurrentBlock(
"row");
118 $tpl->setVariable(
"ROW", $default_renderer->render($row));
119 $tpl->parseCurrentBlock();
127 RendererInterface $default_renderer
129 $f = $this->getUIFactory();
130 $tpl = $this->getTemplate(
"tpl.presentationrow.html",
true,
true);
132 $component = $this->registerSignals($component->withResetSignals());
133 $sig_show = $component->getShowSignal();
134 $sig_hide = $component->getCloseSignal();
135 $sig_toggle = $component->getToggleSignal();
136 $id = $this->bindJavaScript($component);
138 $expander =
$f->button()->shy(
'',
'')->withSymbol(
$f->symbol()->glyph()->expand())
139 ->withOnClick($sig_show);
140 $collapser =
$f->button()->shy(
'',
'')->withSymbol(
$f->symbol()->glyph()->collapse())
141 ->withOnClick($sig_hide);
142 $shy_expander =
$f->button()->shy($this->txt(
"presentation_table_more"),
"")
143 ->withOnClick($sig_show);
145 $tpl->setVariable(
"ID",
$id);
146 $tpl->setVariable(
"EXPANDER", $default_renderer->render($expander));
147 $tpl->setVariable(
"COLLAPSER", $default_renderer->render($collapser));
148 $tpl->setVariable(
"SHY_EXPANDER", $default_renderer->render($shy_expander));
150 if ($symbol = $component->getLeadingSymbol()) {
151 $tpl->setVariable(
"SYMBOL", $default_renderer->render($symbol));
153 $tpl->setVariable(
"HEADLINE", $component->getHeadline());
154 $tpl->setVariable(
"TOGGLE_SIGNAL", $sig_toggle);
155 $subheadline = $component->getSubheadline();
157 $tpl->setVariable(
"SUBHEADLINE", $subheadline);
160 foreach ($component->getImportantFields() as $label => $value) {
161 $tpl->setCurrentBlock(
"important_field");
162 if (is_string($label)) {
163 $tpl->setVariable(
"IMPORTANT_FIELD_LABEL", $label);
165 $tpl->setVariable(
"IMPORTANT_FIELD_VALUE", $value);
166 $tpl->parseCurrentBlock();
169 $tpl->setVariable(
"DESCLIST", $default_renderer->render($component->getContent()));
171 $further_fields_headline = $component->getFurtherFieldsHeadline();
172 $further_fields = $component->getFurtherFields();
174 if (count($further_fields) > 0) {
175 $tpl->touchBlock(
"has_further_fields");
177 if ($further_fields_headline) {
178 $tpl->setVariable(
"FURTHER_FIELDS_HEADLINE", $further_fields_headline);
181 foreach ($further_fields as $label => $value) {
182 $tpl->setCurrentBlock(
"further_field");
183 if (is_string($label)) {
184 $tpl->setVariable(
"FIELD_LABEL", $label);
186 $tpl->setVariable(
"FIELD_VALUE", $value);
187 $tpl->parseCurrentBlock();
191 $action = $component->getAction();
192 if (!is_null($action)) {
193 $tpl->setCurrentBlock(
"button");
194 $tpl->setVariable(
"BUTTON", $default_renderer->render($action));
195 $tpl->parseCurrentBlock();
203 $tpl = $this->getTemplate(
"tpl.datatable.html",
true,
true);
204 $component = $this->registerActions($component);
206 [$component, $view_controls] = $component->applyViewControls(
207 $component->getFilter(),
208 $component->getAdditionalParameters()
211 $rows = $component->getDataRetrieval()->getRows(
212 $component->getRowBuilder(),
213 array_keys($component->getVisibleColumns()),
214 $component->getRange(),
215 $component->getOrder(),
216 $component->getAdditionalViewControlData(),
217 $component->getFilter(),
218 $component->getAdditionalParameters()
222 $compensate_col_index = 1;
223 if ($component->hasMultiActions()) {
224 $compensate_col_index += 1;
226 $compensate_col_count = 0;
227 if ($component->hasMultiActions()) {
228 $compensate_col_count += 1;
230 if ($component->hasSingleActions()) {
231 $compensate_col_count += 1;
234 $id = $this->bindJavaScript($component);
235 $tpl->setVariable(
'ID',
$id);
236 $tpl->setVariable(
'TITLE', $component->getTitle());
237 $tpl->setVariable(
'COL_COUNT', (
string) $component->getColumnCount() + $compensate_col_count);
238 $tpl->setVariable(
'VIEW_CONTROLS', $default_renderer->render($view_controls));
240 $sortation_signal =
null;
242 if (!$rows->valid()) {
243 $this->renderFullWidthDataCell($component, $tpl, $this->txt(
'ui_table_no_records'));
245 $this->renderActionsHeader($default_renderer, $component, $tpl, $compensate_col_count);
246 $this->appendTableRows($tpl, $rows, $default_renderer);
248 if ($component->hasMultiActions()) {
249 $multi_actions = $component->getMultiActions();
250 $modal = $this->buildMultiActionsAllObjectsModal($multi_actions,
$id);
251 $multi_actions_dropdown = $this->buildMultiActionsDropdown(
253 $component->getMultiActionSignal(),
254 $modal->getShowSignal()
256 $multi_action_col_span = count($component->getVisibleColumns()) + $compensate_col_count;
257 $tpl->setVariable(
'MULTI_ACTION_SPAN', (
string) $multi_action_col_span);
258 $tpl->setVariable(
'MULTI_ACTION_TRIGGERER', $default_renderer->render($multi_actions_dropdown));
259 $tpl->setVariable(
'MULTI_ACTION_ALL_MODAL', $default_renderer->render($modal));
260 $tpl->setVariable(
'MULTI_ACTION_WARNING', $default_renderer->render($this->getUrlTooLongWarning()));
261 $tpl->setVariable(
'MULTI_ACTION_WARNING_BUTTON_CLOSE_LABEL', $this->txt(
'datatable_close_warning'));
264 $sortation_view_control = array_filter(
265 $view_controls->getInputs(),
268 if ($sortation_view_control) {
269 $sortation_signal = array_shift($sortation_view_control)->getInternalSignal();
270 $sortation_signal->addOption(
'parent_container',
$id);
274 $this->renderTableHeader($default_renderer, $component, $tpl, $sortation_signal, $compensate_col_index);
279 RendererInterface $default_renderer,
283 int $compensate_col_index,
286 $glyph_factory = $this->getUIFactory()->symbol()->glyph();
287 $sort_col = key($order->get());
288 $sort_direction = current($order->get());
289 $columns = $component->getVisibleColumns();
291 foreach ($columns as $col_id => $col) {
292 $param_sort_direction = Order::ASC;
293 $col_title = $col->getTitle();
294 if ($col_id === $sort_col) {
295 if ($sort_direction === Order::ASC) {
296 $sortation =
"ascending";
297 $param_sort_direction = Order::DESC;
299 if ($sort_direction === Order::DESC) {
300 $sortation =
"descending";
301 $param_sort_direction = Order::ASC;
307 $tpl->
setVariable(
'COL_INDEX', (
string) $col->getIndex() + $compensate_col_index);
309 if ($col->isSortable() && !is_null($sortation_signal)) {
310 $sort_signal = clone $sortation_signal;
311 $sort_signal->addOption(
'value',
"$col_id:$param_sort_direction");
312 $col_title = $default_renderer->render(
313 $this->getUIFactory()->
button()->shy($col_title, $sort_signal)
316 if ($col_id === $sort_col) {
317 $sortation_glyph = $this->getUIFactory()->button()->shy(
'',
'')
319 $sort_direction === Order::ASC ?
320 $glyph_factory->sortAscending() :
321 $glyph_factory->sortDescending()
323 ->withOnClick($sort_signal);
325 $tpl->
setVariable(
'COL_SORTATION_GLYPH', $default_renderer->render($sortation_glyph));
330 $tpl->
setVariable(
'COL_TYPE', strtolower($col->getType()));
336 RendererInterface $default_renderer,
339 int $compensate_col_count,
341 if ($component->hasSingleActions()) {
342 $tpl->
setVariable(
'COL_INDEX_ACTION', (
string) $component->getColumnCount() + $compensate_col_count);
343 $tpl->
setVariable(
'COL_TITLE_ACTION', $this->txt(
'actions'));
346 if ($component->hasMultiActions()) {
347 $f = $this->getUIFactory();
348 $glyph_factory =
$f->symbol()->glyph();
349 $signal = $component->getSelectionSignal();
350 $sig_all = clone $signal;
351 $sig_all->addOption(
'select',
true);
352 $select_all =
$f->button()->shy(
'',
'')
353 ->withSymbol($glyph_factory->add())
354 ->withOnClick($sig_all);
355 $signal->addOption(
'select',
false);
356 $select_none =
$f->button()->shy(
'',
'')
357 ->withSymbol($glyph_factory->close())
358 ->withOnClick($signal);
359 $tpl->
setVariable(
'SELECTION_CONTROL_SELECT', $default_renderer->render($select_all));
360 $tpl->
setVariable(
'SELECTION_CONTROL_DESELECT', $default_renderer->render($select_none));
364 if (!$component->isOrderingDisabled() && !$component->hasMultiActions()) {
376 $cell_tpl = $this->getTemplate(
'tpl.datacell.html',
true,
true);
377 $cell_tpl->setCurrentBlock(
'cell');
378 $cell_tpl->setVariable(
'CELL_CONTENT', $content);
379 $cell_tpl->setVariable(
'COL_SPAN', count($component->getVisibleColumns()));
380 $cell_tpl->setVariable(
'COL_TYPE',
'full-width');
381 $cell_tpl->setVariable(
'COL_INDEX',
'1');
382 $cell_tpl->parseCurrentBlock();
392 $opt_action_id = Action::OPT_ACTIONID;
393 $opt_row_id = Action::OPT_ROWID;
395 if ($component->hasMultiActions()) {
396 $component = $component->withAdditionalOnLoadCode(
397 static fn(
$id):
string =>
"il.UI.table.data.get('{$id}').selectAll(false);"
402 foreach ($component->getAllActions() as $action_id => $action) {
403 $component = $component->withAdditionalOnLoadCode($this->getActionRegistration((
string) $action_id, $action));
404 if ($action->isAsync()) {
405 $signal = clone $component->getAsyncActionSignal();
406 $signal->addOption(Action::OPT_ACTIONID, $action_id);
407 $action = $action->withSignalTarget($signal);
409 $actions[$action_id] = $action;
411 $component = $component->withActions($actions);
413 $component = $component
414 ->withAdditionalOnLoadCode(
415 static fn(
$id):
string =>
416 "il.UI.table.data.init('{$id}','{$opt_action_id}','{$opt_row_id}');"
418 ->withAdditionalOnLoadCode($this->getAsyncActionHandler($component->getAsyncActionSignal()))
419 ->withAdditionalOnLoadCode($this->getMultiActionHandler($component->getMultiActionSignal()))
420 ->withAdditionalOnLoadCode($this->getSelectionHandler($component->getSelectionSignal()));
427 \Generator|array $rows,
428 RendererInterface $default_renderer
431 foreach ($rows as $row) {
432 $row_contents = $default_renderer->render($row);
433 $alternate = ($alternate ===
'odd') ?
'even' :
'odd';
443 $row_tpl = $this->getTemplate(
'tpl.presentationrow_empty.html',
true,
true);
444 $row_tpl->setVariable(
'CONTENT', $content);
455 $f = $this->getUIFactory();
457 $msg =
$f->messageBox()->confirmation($this->txt(
'datatable_multiactionmodal_msg'));
459 $select =
$f->input()->field()->select(
460 $this->txt(
'datatable_multiactionmodal_actionlabel'),
462 static fn($action):
string => $action->getLabel(),
466 )->withRequired(
true);
467 $submit =
$f->button()->primary($this->txt(
'datatable_multiactionmodal_apply'),
'')
469 static fn(
$id):
string =>
"$('#{$id}').click(function() { il.UI.table.data.get('{$table_id}').doActionForAll(this); return false; });"
472 ->roundtrip($this->txt(
'datatable_multiactionmodal_title'), [$msg, $select])
473 ->withActionButtons([$submit]);
479 $f = $this->getUIFactory();
480 return $f->messageBox()->failure($this->txt(
'warning_url_too_long_msg'));
491 if ($actions === []) {
494 $f = $this->getUIFactory();
495 $glyph =
$f->symbol()->glyph()->bulletlist();
497 $all_obj_buttons = [];
498 foreach ($actions as $action_id => $act) {
499 $signal = clone $action_signal;
500 $signal->addOption(Action::OPT_ACTIONID, $action_id);
501 $buttons[] =
$f->button()->shy($act->getLabel(), $signal);
504 $buttons[] =
$f->divider()->horizontal();
505 $buttons[] =
$f->button()->shy($this->txt(
'datatable_multiactionmodal_listentry'),
'#')->withOnClick($modal_signal);
507 return $f->dropdown()->standard($buttons)->withLabel($this->txt(
'datatable_multiaction_label'));
512 return static function (
$id) use ($action_signal):
string {
514 $(document).on('{$action_signal}', function(event, signal_data) {
515 il.UI.table.data.get('{$id}').doSingleAction(signal_data);
522 return static function (
$id) use ($action_signal):
string {
524 $(document).on('{$action_signal}', function(event, signal_data) {
525 il.UI.table.data.get('{$id}').doMultiAction(signal_data);
533 return static function (
$id) use ($selection_signal):
string {
535 $(document).on('{$selection_signal}', function(event, signal_data) {
536 il.UI.table.data.get('{$id}').selectAll(signal_data.options.select);
547 $async = $action->isAsync() ?
'true' :
'false';
548 $url_builder_js = $action->getURLBuilderJS();
549 $tokens_js = $action->getURLBuilderTokensJS();
551 return static function (
$id) use ($action_id, $async, $url_builder_js, $tokens_js):
string {
553 il.UI.table.data.get('{$id}').registerAction('{$action_id}', {$async}, {$url_builder_js}, {$tokens_js});
560 $cell_tpl = $this->getTemplate(
"tpl.datacell.html",
true,
true);
561 $this->fillCells($component, $cell_tpl, $default_renderer);
564 return $cell_tpl->get();
569 $cell_tpl = $this->getTemplate(
"tpl.orderingcell.html",
true,
true);
570 $this->fillCells($component, $cell_tpl, $default_renderer);
573 if ($component->isOrderingDisabled()) {
574 return $cell_tpl->get();
577 $namesource =
new class () implements
NameSource {
578 public function getNewName():
string
582 public function getNewDedicatedName(
string $dedicated_name):
string
584 return $dedicated_name;
588 $numeric_label = $this->txt(
"ui_table_order");
589 $input = $this->getUIFactory()->input()->field()->numeric($numeric_label)
590 ->withDedicatedName($component->getId())
591 ->withNameFrom($namesource)
592 ->withValue($component->getPosition() * 10);
593 $cell_tpl->setVariable(
'ORDER_INPUT', $default_renderer->render($input));
595 return $cell_tpl->get();
602 RendererInterface $default_renderer
604 $cols = $row->getColumns();
605 foreach ($cols as $col_id => $column) {
606 if ($column->isHighlighted()) {
610 $cell_tpl->
setVariable(
'COL_TYPE', strtolower($column->getType()));
611 $cell_content = $row->getCellContent($col_id);
613 $cell_content = $default_renderer->render($cell_content);
615 $cell_tpl->
setVariable(
'CELL_CONTENT', $cell_content);
616 $cell_tpl->
setVariable(
'CELL_COL_TITLE', $row->getColumns()[$col_id]->getTitle());
620 if ($row->tableHasMultiActions()) {
623 if ($row->tableHasSingleActions()) {
624 $row_actions_dropdown = $this->getSingleActionsForRow(
628 $cell_tpl->
setVariable(
'ACTION_CONTENT', $default_renderer->render($row_actions_dropdown));
632 if (!$row->isOrderingDisabled()) {
633 $drag_handle = $this->getUIFactory()->symbol()->glyph()->dragHandle();
634 $drag_handle = $default_renderer->render($drag_handle);
635 $cell_tpl->
setVariable(
'DRAG_HANDLE', $drag_handle);
645 $f = $this->getUIFactory();
647 foreach ($actions as $act) {
648 $act = $act->withRowId($row_id);
649 $target = $act->getTarget();
650 if ($target instanceof
URI) {
651 $target = (string) $target;
653 $buttons[] =
$f->button()->shy($act->getLabel(), $target);
655 return $f->dropdown()->standard($buttons);
661 $tpl = $this->getTemplate(
"tpl.orderingtable.html",
true,
true);
662 $component = $this->registerActions($component);
664 [$component, $view_controls] = $component->applyViewControls();
666 $rows = $component->getDataBinding()->getRows(
667 $component->getRowBuilder(),
668 array_keys($component->getVisibleColumns()),
672 if (!$component->isOrderingDisabled()) {
673 $component = $component->withAdditionalOnLoadCode(
674 static fn(
$id):
string =>
"il.UI.table.ordering.init('{$id}');"
679 $compensate_col_index = 1;
681 if ($component->hasMultiActions() || !$component->isOrderingDisabled()) {
682 $compensate_col_index += 1;
684 if (!$component->isOrderingDisabled()) {
685 $compensate_col_index += 1;
688 $compensate_col_count = 0;
689 if ($component->hasMultiActions() || !$component->isOrderingDisabled()) {
690 $compensate_col_count += 1;
692 if (!$component->isOrderingDisabled()) {
693 $compensate_col_count += 1;
695 if ($component->hasSingleActions()) {
696 $compensate_col_count += 1;
699 $tableid = $this->bindJavaScript($component) ?? $this->createId();
701 if (!$component->isOrderingDisabled()) {
702 $submit = $this->getUIFactory()->button()->standard($this->txt(
'sorting_save'),
"")
703 ->withOnLoadCode(
static fn(
$id) =>
"document.getElementById('$id').addEventListener('click',
704 function() {document.querySelector('#$tableid form.c-table-ordering__form').submit();return false;});");
706 $tpl->
setVariable(
'FORM_BUTTONS', $default_renderer->render($submit));
707 $tpl->
setVariable(
'POS_INPUT_TITLE', $this->txt(
'table_posinput_col_title'));
712 $tpl->
setVariable(
'TARGET_URL', $component->getTargetURL() ? $component->getTargetURL()->__toString() :
'#');
713 $tpl->
setVariable(
'TITLE', $component->getTitle());
714 $tpl->
setVariable(
'COL_COUNT', (
string) $component->getColumnCount() + $compensate_col_count);
715 $tpl->
setVariable(
'VIEW_CONTROLS', $default_renderer->render($view_controls));
717 $columns = $component->getVisibleColumns();
718 foreach ($columns as $col_id => $col) {
719 $col_title = $col->getTitle();
721 $tpl->
setVariable(
'COL_INDEX', (
string) $col->getIndex() + $compensate_col_index);
723 $tpl->
setVariable(
'COL_TYPE', strtolower($col->getType()));
727 $rows = iterator_to_array($rows);
729 foreach ($rows as $idx => $row) {
731 ->withPosition($idx + 1)
732 ->withOrderingDisabled($component->isOrderingDisabled());
735 $this->renderActionsHeader($default_renderer, $component, $tpl, $compensate_col_count);
736 $this->appendTableRows($tpl, $r, $default_renderer);
738 if ($component->hasMultiActions()) {
739 $multi_actions = $component->getMultiActions();
740 $modal = $this->buildMultiActionsAllObjectsModal($multi_actions, $tableid);
741 $multi_actions_dropdown = $this->buildMultiActionsDropdown(
743 $component->getMultiActionSignal(),
744 $modal->getShowSignal()
747 $tpl->
setVariable(
'MULTI_ACTION_TRIGGERER', $default_renderer->render($multi_actions_dropdown));
748 $tpl->
setVariable(
'MULTI_ACTION_ALL_MODAL', $default_renderer->render($modal));
749 $tpl->
setVariable(
'MULTI_ACTION_WARNING', $default_renderer->render($this->getUrlTooLongWarning()));
750 $tpl->
setVariable(
'MULTI_ACTION_WARNING_BUTTON_CLOSE_LABEL', $this->txt(
'datatable_close_warning'));
752 if ($component->hasMultiActions() || !$component->isOrderingDisabled()) {
753 $multi_action_col_span = count($component->getVisibleColumns()) + $compensate_col_count;
754 $tpl->
setVariable(
'MULTI_ACTION_SPAN', (
string) $multi_action_col_span);
765 parent::registerResources($registry);
766 $registry->
register(
'assets/js/table.min.js');
767 $registry->
register(
'assets/js/modal.min.js');
772 $show = $component->getShowSignal();
773 $close = $component->getCloseSignal();
774 $toggle = $component->getToggleSignal();
775 $table_id = $component->getTableId();
777 static fn(
$id):
string =>
778 "$(document).on('$show', function() { il.UI.table.presentation.get('$table_id').expandRow('$id'); return false; });" .
779 "$(document).on('$close', function() { il.UI.table.presentation.get('$table_id').collapseRow('$id'); return false; });" .
780 "$(document).on('$toggle', function() { il.UI.table.presentation.get('$table_id').toggleRow('$id'); return false; });"
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Both the subject and the direction need to be specified when expressing an order.
The scope of this class is split ilias-conform URI's into components.
registerSignals(Component\Table\PresentationRow $component)
fillCells(Component\Table\DataRow $row, Template $cell_tpl, RendererInterface $default_renderer)
registerActions(Component\Table\Table $component)
renderDataRow(Component\Table\DataRow $component, RendererInterface $default_renderer)
getAsyncActionHandler(Component\Signal $action_signal)
getMultiActionHandler(Component\Signal $action_signal)
renderOrderingTable(Component\Table\Ordering $component, RendererInterface $default_renderer)
getActionRegistration(string $action_id, Action $action)
buildMultiActionsAllObjectsModal(array $actions, string $table_id)
renderPresentationRow(Component\Table\PresentationRow $component, RendererInterface $default_renderer)
buildMultiActionsDropdown(array $actions, Component\Signal $action_signal, Component\Signal $modal_signal,)
renderPresentationTable(Component\Table\Presentation $component, RendererInterface $default_renderer)
renderFullWidthDataCell(Component\Table\Data $component, Template $tpl, string $content)
Renders a full-width cell with a single message within, indication there is no data to display.
getSingleActionsForRow(string $row_id, array $actions)
renderActionsHeader(RendererInterface $default_renderer, Component\Table\Table $component, Template $tpl, int $compensate_col_count,)
render(Component\Component $component, RendererInterface $default_renderer)
renderEmptyPresentationRow(Template $tpl, RendererInterface $default_renderer, string $content)
renderTableHeader(RendererInterface $default_renderer, Component\Table\Data $component, Template $tpl, ?Component\Signal $sortation_signal, int $compensate_col_index,)
getSelectionHandler(Component\Signal $selection_signal)
renderOrderingRow(Component\Table\OrderingRow $component, RendererInterface $default_renderer)
appendTableRows(Template $tpl, \Generator|array $rows, RendererInterface $default_renderer)
renderDataTable(Component\Table\Data $component, RendererInterface $default_renderer)
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
Base class for all component renderers.
cannotHandleComponent(Component $component)
This method MUST be called by derived component renderers, if.
txt(string $id)
Get a text from the language file.
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.
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.
This describes commonalities between all types of Dropdowns.
Interface to be extended by components that have the possibility to bind to Javascript.
withAdditionalOnLoadCode(Closure $binder)
Add some onload-code to the component instead of replacing the existing one.
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.
setVariable(string $name, $value)
Set a variable in the current block.
get(?string $block=null)
Get the rendered template or a specific block.
setCurrentBlock(string $name)
Set the block to work on.
touchBlock(string $name)
Touch a block without working further on it.
parseCurrentBlock()
Parse the block that is currently worked on.
An entity that renders components to a string output.
button(string $caption, string $cmd)
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
if(!file_exists('../ilias.ini.php'))