36 if ($component instanceof
MainBar) {
39 if ($component instanceof
MetaBar) {
42 if ($component instanceof
Footer) {
43 return $this->
renderFooter($component, $default_renderer);
45 if ($component instanceof
ModeInfo) {
52 if (!$slate instanceof
Slate && !$slate instanceof
MainBar) {
56 ->withMainBarTreePosition($pos)
58 function ($num, $slate, $is_tool =
false) use ($pos) {
72 UITemplateWrapper
$tpl,
73 RendererInterface $default_renderer
75 $hidden = $component->getInitiallyHiddenToolIds();
78 $is_removeable = array_key_exists($entry_id, $close_buttons);
79 $is_hidden = in_array($entry_id, $hidden);
82 $trigger_signal = $component->getTriggerSignal($mb_id, $component::ENTRY_ACTION_REMOVE);
83 $this->trigger_signals[] = $trigger_signal;
84 $btn_removetool = $close_buttons[$entry_id]
85 ->withAdditionalOnloadCode(
86 function ($id) use ($mb_id) {
87 return "il.UI.maincontrols.mainbar.addPartIdAndEntry('{$mb_id}', 'remover', '{$id}', true);";
90 ->withOnClick($trigger_signal);
92 $tpl->setCurrentBlock(
"tool_removal");
93 $tpl->setVariable(
"REMOVE_TOOL", $default_renderer->render($btn_removetool));
94 $tpl->parseCurrentBlock();
97 $is_removeable = $is_removeable ?
'true':
'false';
98 $is_hidden = $is_hidden ?
'true':
'false';
99 return "il.UI.maincontrols.mainbar.addToolEntry('{$mb_id}', {$is_removeable}, {$is_hidden}, '{$entry_id}');";
106 UITemplateWrapper
$tpl,
107 RendererInterface $default_renderer
109 $f = $this->getUIFactory();
110 foreach ($entries as $k => $entry) {
115 if ($entry instanceof
Slate) {
118 $is_tool = $block === static::BLOCK_MAINBAR_TOOLS;
120 $js = $this->renderToolEntry($entry, $k, $mb_id, $component,
$tpl, $default_renderer);
123 $trigger_signal = $component->getTriggerSignal($mb_id, $component::ENTRY_ACTION_TRIGGER);
124 $this->trigger_signals[] = $trigger_signal;
126 ->withAriaRole(IBulky::MENUITEM)
127 ->withOnClick($trigger_signal);
130 $pos = array_search($k, array_keys($entries));
131 $mb_id =
'0:' . $pos;
135 $button = $button->withAdditionalOnLoadCode(
136 function ($id) use ($js, $mb_id, $k, $is_tool) {
137 $add_as_tool = $is_tool ?
'true':
'false';
139 il.UI.maincontrols.mainbar.addPartIdAndEntry('{$mb_id}', 'triggerer', '{$id}', {$add_as_tool});
140 il.UI.maincontrols.mainbar.addMapping('{$k}','{$mb_id}');
145 $tpl->setCurrentBlock($block);
146 $tpl->setVariable(
"BUTTON", $default_renderer->render($button));
147 $tpl->parseCurrentBlock();
150 $entry = $entry->withAriaRole(ISlate::MENU);
152 $tpl->setCurrentBlock(
"slate_item");
153 $tpl->setVariable(
"SLATE", $default_renderer->render($entry));
154 $tpl->parseCurrentBlock();
161 $f = $this->getUIFactory();
162 $tpl = $this->getTemplate(
"tpl.mainbar.html",
true,
true);
164 $tpl->setVariable(
"ARIA_LABEL", $this->txt(
'mainbar_aria_label'));
167 $more_slate =
$f->maincontrols()->slate()->combined(
169 $f->symbol()->glyph()->more()
170 )->withAriaRole(ISlate::MENU);
176 $component = $this->calculateMainBarTreePosition(
"0", $component);
179 static::BLOCK_MAINBAR_ENTRIES => $component->
getEntries(),
183 foreach ($mb_entries as $block => $entries) {
184 $this->renderMainbarEntry(
197 ->withAriaRole(IBulky::MENUITEM);
199 $tpl->setCurrentBlock(
"tools_trigger");
200 $tpl->setVariable(
"BUTTON", $default_renderer->render($btn_tools));
201 $tpl->parseCurrentBlock();
205 $btn_disengage =
$f->button()->bulky(
$f->symbol()->glyph()->back(
"#"),
"close",
"#")
207 $tpl->setVariable(
"CLOSE_SLATES", $default_renderer->render($btn_disengage));
210 $id = $this->bindMainbarJS($component);
211 $tpl->setVariable(
'ID', $id);
218 $f = $this->getUIFactory();
219 $tpl = $this->getTemplate(
"tpl.metabar.html",
true,
true);
227 $more_label =
'more';
228 $more_symbol =
$f->symbol()->glyph()->disclosure()
229 ->withCounter(
$f->counter()->novelty(0))
230 ->withCounter(
$f->counter()->status(0));
231 $more_slate =
$f->maincontrols()->slate()->combined($more_label, $more_symbol,
$f->legacy(
''))
232 ->withAriaRole(ISlate::MENU);
233 $entries[] = $more_slate;
235 $this->renderTriggerButtonsAndSlates(
239 static::BLOCK_METABAR_ENTRIES,
245 function ($id) use ($signals) {
246 $entry_signal = $signals[
'entry'];
247 $close_slates_signal = $signals[
'close_slates'];
249 il.UI.maincontrols.metabar.registerSignals(
252 '{$close_slates_signal}',
254 il.UI.maincontrols.metabar.init();
255 $(window).resize(il.UI.maincontrols.metabar.init);
259 $tpl->setVariable(
'ARIA_LABEL', $this->txt(
'metabar_aria_label'));
261 $id = $this->bindJavaScript($component);
262 $tpl->setVariable(
'ID', $id);
268 $tpl = $this->getTemplate(
"tpl.mode_info.html",
true,
true);
272 $action = $base_URI .
'?' .
$query;
273 $close = $this->getUIFactory()->symbol()->glyph()->close($action);
274 $tpl->setVariable(
'CLOSE_GLYPH', $default_renderer->render($close));
281 UITemplateWrapper
$tpl,
282 RendererInterface $default_renderer,
286 string $active =
null,
287 array $initially_hidden_ids = [],
288 array $close_buttons = [],
289 Signal $tool_removal_signal =
null
291 foreach ($entries as $id => $entry) {
293 $engaged = (string) $id === $active;
295 if ($entry instanceof
Slate) {
296 $f = $this->getUIFactory();
299 ->withOnClick($entry_signal)
300 ->appendOnClick($secondary_signal)
302 ->withAriaRole(IBulky::MENUITEM);
310 $button_html = $default_renderer->render($button);
312 $tpl->setCurrentBlock($use_block);
313 $tpl->setVariable(
"BUTTON", $button_html);
314 $tpl->parseCurrentBlock();
317 $slate = $slate->withAriaRole(ISlate::MENU);
319 $tpl->setCurrentBlock(
"slate_item");
320 $tpl->setVariable(
"SLATE", $default_renderer->render($slate));
321 $tpl->parseCurrentBlock();
328 $trigger_signals = $this->trigger_signals;
330 $inititally_active = $component->
getActive();
333 function ($id) use ($component, $trigger_signals, $inititally_active) {
337 $js =
"il.UI.maincontrols.mainbar.addTriggerSignal('{$disengage_all_signal}');";
338 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$tools_toggle_signal}');";
340 foreach ($trigger_signals as $signal) {
341 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$signal}');";
345 $signal = $component->getEngageToolSignal($k);
346 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$signal}');";
350 $(window).resize(il.UI.maincontrols.mainbar.adjustToScreenSize);
351 il.UI.maincontrols.mainbar.init('{$inititally_active}');
357 $id = $this->bindJavaScript($component);
363 $tpl = $this->getTemplate(
"tpl.footer.html",
true,
true);
366 $link_list = $this->getUIFactory()->listing()->unordered($links);
367 $tpl->setVariable(
'LINKS', $default_renderer->render($link_list));
373 if ($perm_url instanceof
URI) {
375 $uri = $perm_url->getBaseURI();
376 $query = $perm_url->getQuery();
380 $fragment = $perm_url->getFragment();
382 $uri .=
'#' . $fragment;
385 $tpl->setVariable(
'PERMA_LINK_LABEL', $this->txt(
'perma_link'));
386 $tpl->setVariable(
'PERMANENT_URL', $uri);
396 parent::registerResources($registry);
397 $registry->register(
'./src/UI/templates/js/MainControls/mainbar.js');
398 $registry->register(
'./src/UI/templates/js/MainControls/metabar.js');
399 $registry->register(
'./src/GlobalScreen/Client/dist/GS.js');
400 $registry->register(
'./src/UI/templates/js/MainControls/footer.js');
An exception for terminatinating execution or to throw for unit testing.
The scope of this class is split ilias-conform URI's into components.
getComponentInterfaceName()
Get the name of the component-interface this renderer is supposed to render.ATTENTION: Fully qualifie...
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)
registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry)
renderFooter(Footer $component, RendererInterface $default_renderer)
const BLOCK_METABAR_ENTRIES
renderModeInfo(ModeInfo $component, RendererInterface $default_renderer)
renderMetabar(MetaBar $component, RendererInterface $default_renderer)
const BLOCK_MAINBAR_TOOLS
bindMainbarJS(MainBar $component)
calculateMainBarTreePosition($pos, $slate)
renderMainbarEntry(array $entries, string $block, MainBar $component, UITemplateWrapper $tpl, RendererInterface $default_renderer)
renderMainbar(MainBar $component, RendererInterface $default_renderer)
render(Component\Component $component, RendererInterface $default_renderer)
renderToolEntry(Slate $entry, string $entry_id, string $mb_id, MainBar $component, UITemplateWrapper $tpl, RendererInterface $default_renderer)
const BLOCK_MAINBAR_ENTRIES
Base class for all component renderers.
checkComponent(Component $component)
Check if a given component fits this renderer and throw \LogicError if that is not the case.
A component is the most general form of an entity in the UI.
withOnLoadCode(\Closure $binder)
This describes the Footer.
This describes the MainBar.
getCloseButtons()
Buttons to close tools; maybe configure with callback.
getToolsButton()
Returns the button of the tools-trigger.
withAdditionalEntry(string $id, $entry)
Append an entry.
getToggleToolsSignal()
Signal to toggle the tools-section.
getMoreButton()
Returns the button for further entries.
getDisengageAllSignal()
This signal disengages all slates when triggered.
This describes the MetaBar.
getDisengageAllSignal()
This signal disengages all slates when triggered.
getEntryClickSignal()
The Signal is triggered when any Entry is being clicked.
getSymbol()
Get the Symbol of the slate.
getToggleSignal()
Signal that toggles the slate when triggered.
getName()
Get the name of this slate.
Interface to templating as it is used in the UI framework.
An entity that renders components to a string output.
Class ChatMainBarProvider \MainMenu\Provider.
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl