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) {
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}');";
110 foreach ($entries as $k => $entry) {
115 if ($entry instanceof
Slate) {
117 $mb_id = $entry->getMainBarTreePosition();
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;
125 $button =
$f->button()->bulky($entry->getSymbol(), $entry->getName(),
'#')
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();
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);
179 static::BLOCK_MAINBAR_ENTRIES => $component->
getEntries(),
183 foreach ($mb_entries as $block => $entries) {
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));
211 $tpl->setVariable(
'ID', $id);
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;
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'));
262 $tpl->setVariable(
'ID', $id);
272 $action = $base_URI .
'?' .
$query;
273 $close = $this->
getUIFactory()->symbol()->glyph()->close($action);
274 $tpl->setVariable(
'CLOSE_GLYPH', $default_renderer->render($close));
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) {
297 $secondary_signal = $entry->getToggleSignal();
298 $button =
$f->button()->bulky($entry->getSymbol(), $entry->getName(),
'#')
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();
330 $inititally_active = $component->
getActive();
337 $js =
"il.UI.maincontrols.mainbar.addTriggerSignal('{$disengage_all_signal}');";
338 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$tools_toggle_signal}');";
341 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$signal}');";
346 $js .=
"il.UI.maincontrols.mainbar.addTriggerSignal('{$signal}');";
350 $(window).resize(il.UI.maincontrols.mainbar.adjustToScreenSize); 351 il.UI.maincontrols.mainbar.init('{$inititally_active}'); 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');
renderMetabar(MetaBar $component, RendererInterface $default_renderer)
withOnLoadCode(\Closure $binder)
This describes the MainBar.
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl
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
renderMainbar(MainBar $component, RendererInterface $default_renderer)
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.
renderModeInfo(ModeInfo $component, RendererInterface $default_renderer)
The scope of this class is split ilias-conform URI's into components.
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.
getMoreButton()
Returns the button for further entries.
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.
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.