36 if ($component instanceof
MainBar) {
37 return $this->renderMainbar($component, $default_renderer);
39 if ($component instanceof
MetaBar) {
40 return $this->renderMetabar($component, $default_renderer);
42 if ($component instanceof
Footer) {
43 return $this->
renderFooter($component, $default_renderer);
45 if ($component instanceof
ModeInfo) {
55 if (!$slate instanceof
Slate && !$slate instanceof
MainBar) {
59 ->withMainBarTreePosition($pos)
61 function ($num, $slate, $is_tool =
false) use ($pos) {
81 $is_removeable = array_key_exists($entry_id, $close_buttons);
82 $is_hidden = in_array($entry_id, $hidden);
85 $trigger_signal = $component->getTriggerSignal($mb_id, $component::ENTRY_ACTION_REMOVE);
86 $this->trigger_signals[] = $trigger_signal;
87 $btn_removetool = $close_buttons[$entry_id]
88 ->withAdditionalOnloadCode(
89 function ($id) use ($mb_id) {
90 return "il.UI.maincontrols.mainbar.addPartIdAndEntry('{$mb_id}', 'remover', '{$id}', true);";
93 ->withOnClick($trigger_signal);
95 $tpl->setCurrentBlock(
"tool_removal");
96 $tpl->setVariable(
"REMOVE_TOOL", $default_renderer->render($btn_removetool));
97 $tpl->parseCurrentBlock();
100 $is_removeable = $is_removeable ?
'true':
'false';
101 $is_hidden = $is_hidden ?
'true':
'false';
102 return "il.UI.maincontrols.mainbar.addToolEntry('{$mb_id}', {$is_removeable}, {$is_hidden}, '{$entry_id}');";
113 foreach ($entries as $k => $entry) {
118 if ($entry instanceof
Slate) {
120 $mb_id = $entry->getMainBarTreePosition();
121 $is_tool = $block === static::BLOCK_MAINBAR_TOOLS;
123 $js = $this->
renderToolEntry($entry, $k, $mb_id, $component, $tpl, $default_renderer);
126 $trigger_signal = $component->getTriggerSignal($mb_id, $component::ENTRY_ACTION_TRIGGER);
127 $this->trigger_signals[] = $trigger_signal;
128 $button =
$f->button()->bulky($entry->getSymbol(), $entry->getName(),
'#')
129 ->withOnClick($trigger_signal);
132 $pos = array_search($k, array_keys($entries));
133 $mb_id =
'0:' . $pos;
137 $button = $button->withAdditionalOnLoadCode(
138 function ($id) use ($js, $mb_id, $k, $is_tool) {
139 $add_as_tool = $is_tool ?
'true':
'false';
141 il.UI.maincontrols.mainbar.addPartIdAndEntry('{$mb_id}', 'triggerer', '{$id}', {$add_as_tool}); 142 il.UI.maincontrols.mainbar.addMapping('{$k}','{$mb_id}'); 146 )->withAriaRole(IBulky::MENUITEM);
148 $tpl->setCurrentBlock($block);
149 $tpl->setVariable(
"BUTTON", $default_renderer->render($button));
150 $tpl->parseCurrentBlock();
153 $entry = $entry->withAriaRole(ISlate::MENU);
155 $tpl->setCurrentBlock(
"slate_item");
156 $tpl->setVariable(
"SLATE", $default_renderer->render($entry));
157 $tpl->parseCurrentBlock();
167 $tpl->setVariable(
"ARIA_LABEL", $this->
txt(
'mainbar_aria_label'));
168 $more_btn_label = $this->
txt(
'mainbar_more_label');
172 $more_slate =
$f->mainControls()->slate()->combined(
174 $f->symbol()->glyph()->more()
176 $more_slate = $more_slate->withAriaRole(ISlate::MENU);
184 static::BLOCK_MAINBAR_ENTRIES => $component->
getEntries(),
188 foreach ($mb_entries as $block => $entries) {
203 $tpl->setCurrentBlock(
"tools_trigger");
204 $tpl->setVariable(
"BUTTON", $default_renderer->render($btn_tools));
205 $tpl->parseCurrentBlock();
209 $btn_disengage =
$f->button()->bulky(
$f->symbol()->glyph()->back(
"#"),
"close",
"#")
211 $tpl->setVariable(
"CLOSE_SLATES", $default_renderer->render($btn_disengage));
215 $tpl->setVariable(
'ID', $id);
231 $more_label =
'more';
232 $more_symbol =
$f->symbol()->glyph()->disclosure()
233 ->withCounter(
$f->counter()->novelty(0))
234 ->withCounter(
$f->counter()->status(0));
238 $more_slate =
$f->mainControls()->slate()->combined($more_label, $more_symbol);
239 $more_slate = $more_slate->withAriaRole(ISlate::MENU);
240 $entries[] = $more_slate;
246 static::BLOCK_METABAR_ENTRIES,
252 function ($id) use ($signals) {
253 $entry_signal = $signals[
'entry'];
254 $close_slates_signal = $signals[
'close_slates'];
256 il.UI.maincontrols.metabar.registerSignals( 259 '{$close_slates_signal}', 261 il.UI.maincontrols.metabar.init(); 262 $(window).resize(il.UI.maincontrols.metabar.init); 266 $tpl->setVariable(
'ARIA_LABEL', $this->
txt(
'metabar_aria_label'));
269 $tpl->setVariable(
'ID', $id);
279 $action = $base_URI .
'?' .
$query;
280 $close = $this->
getUIFactory()->symbol()->glyph()->close($action);
281 $tpl->setVariable(
'CLOSE_GLYPH', $default_renderer->render($close));
289 $tpl->setVariable(
'HEADLINE', $component->getHeadLine());
290 $tpl->setVariable(
'BODY', $component->getInformationText());
291 $tpl->setVariable(
'DENOTATION', $component->getDenotation());
292 switch ($component->getDenotation()) {
295 $tpl->setVariable(
'LIVE',
'aria-live="polite"');
298 $tpl->setVariable(
'ROLE',
'role="alert"');
301 if ($component->isDismissable()) {
302 $close = $this->
getUIFactory()->symbol()->glyph()->close(
"#");
303 $signal = $component->getCloseSignal();
304 $close = $close->withOnClick($signal);
305 $tpl->setVariable(
'CLOSE_BUTTON', $default_renderer->render($close));
306 $tpl->setVariable(
'CLOSE_URI', (
string) $component->getDismissAction());
307 $component = $component->withAdditionalOnLoadCode(
function ($id) use ($signal) {
308 return "$(document).on('{$signal}', function() { il.UI.maincontrols.system_info.close('{$id}'); });";
312 $more = $this->
getUIFactory()->symbol()->glyph()->more(
"#");
313 $tpl->setVariable(
'MORE_BUTTON', $default_renderer->render($more));
315 $component = $component->withAdditionalOnLoadCode(
function ($id) {
316 return "il.UI.maincontrols.system_info.init('{$id}')";
321 $tpl->setVariable(
'ID', $id);
334 string $active = null,
335 array $initially_hidden_ids = [],
336 array $close_buttons = [],
337 Signal $tool_removal_signal = null
339 foreach ($entries as $id => $entry) {
341 $engaged = (string) $id === $active;
343 if ($entry instanceof
Slate) {
345 $secondary_signal = $entry->getToggleSignal();
347 $clickable =
$f->button()->bulky($entry->getSymbol(), $entry->getName(),
'#')
349 ->withOnClick($entry_signal)
350 ->appendOnClick($secondary_signal)
352 ->withAriaRole(IBulky::MENUITEM);
355 } elseif ($entry instanceof
IBulky) {
357 $clickable = $clickable->withAriaRole(IBulky::MENUITEM);
363 $clickable_html = $default_renderer->render($clickable);
366 $tpl->setCurrentBlock(
"slate_item");
367 $tpl->setVariable(
"SLATE", $default_renderer->render($slate));
368 $tpl->parseCurrentBlock();
371 $tpl->setCurrentBlock($use_block);
372 $tpl->setVariable(
"BUTTON", $clickable_html);
373 $tpl->parseCurrentBlock();
381 $inititally_active = $component->
getActive();
388 $js =
"il.UI.maincontrols.mainbar.addTriggerSignal('{$disengage_all_signal}');";
389 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$tools_toggle_signal}');";
392 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$signal}');";
397 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$signal}');";
401 window.addEventListener('resize', il.UI.maincontrols.mainbar.adjustToScreenSize); 402 il.UI.maincontrols.mainbar.init('{$inititally_active}'); 416 $modalsWithTriggers = $component->
getModals();
417 $links = array_merge($links, array_column($modalsWithTriggers, 1));
420 $link_list = $this->
getUIFactory()->listing()->unordered($links);
421 $tpl->setVariable(
'LINKS', $default_renderer->render($link_list));
424 if ($modalsWithTriggers !== []) {
425 $tpl->setVariable(
'MODALS', $default_renderer->render(
426 array_column($modalsWithTriggers, 0)
433 if ($perm_url instanceof
URI) {
434 $url = $perm_url->__toString();
435 $tpl->setVariable(
'PERMA_LINK_LABEL', $this->
txt(
'perma_link'));
436 $tpl->setVariable(
'PERMANENT_URL',
$url);
446 parent::registerResources($registry);
447 $registry->register(
'./src/UI/templates/js/MainControls/dist/mainbar.js');
448 $registry->register(
'./src/UI/templates/js/MainControls/metabar.js');
449 $registry->register(
'./src/GlobalScreen/Client/dist/GS.js');
450 $registry->register(
'./src/UI/templates/js/MainControls/footer.js');
451 $registry->register(
'./src/UI/templates/js/MainControls/system_info.js');
withOnLoadCode(\Closure $binder)
This describes the MainBar.
const DENOTATION_IMPORTANT
checkComponent(Component $component)
Check if a given component fits this renderer and throw if that is not the case. ...
getDisengageAllSignal()
This signal disengages all slates when triggered.
getInitiallyHiddenToolIds()
There are tools that are rendered invisible before first activation.
calculateMainBarTreePosition($pos, $slate)
Class ChatMainBarProvider .
getComponentInterfaceName()
const BLOCK_METABAR_ENTRIES
txt($id)
Get a text from the language file.
renderToolEntry(Slate $entry, string $entry_id, string $mb_id, MainBar $component, UITemplateWrapper $tpl, RendererInterface $default_renderer)
getEntryClickSignal()
The Signal is triggered when any Entry is being clicked.
renderFooter(Footer $component, RendererInterface $default_renderer)
const BLOCK_MAINBAR_ENTRIES
getDisengageAllSignal()
This signal disengages all slates when triggered.
renderSystemInfo(Component\MainControls\SystemInfo $component, RendererInterface $default_renderer)
renderModeInfo(ModeInfo $component, RendererInterface $default_renderer)
The scope of this class is split ilias-conform URI's into components.
const DENOTATION_BREAKING
registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry)
const BLOCK_MAINBAR_TOOLS
withAdditionalEntry(string $id, $entry)
Append an entry.
bindMainbarJS(MainBar $component)
getToolsButton()
Returns the button of the tools-trigger.
renderTriggerButtonsAndSlates(UITemplateWrapper $tpl, RendererInterface $default_renderer, Signal $entry_signal, string $block, array $entries, string $active=null, array $initially_hidden_ids=[], array $close_buttons=[], Signal $tool_removal_signal=null)
This describes the MetaBar.
renderMainbarEntry(array $entries, string $block, MainBar $component, UITemplateWrapper $tpl, RendererInterface $default_renderer)
getUIFactory()
Get a UI factory.
render(Component\Component $component, RendererInterface $default_renderer)
getToggleToolsSignal()
Signal to toggle the tools-section.
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.
getEngageToolSignal(string $tool_id)
Signal to engage a tool from outside the mainbar.
getCloseButtons()
Buttons to close tools; maybe configure with callback.
Base class for all component renderers.
This describes the Footer.
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.