19declare(strict_types=1);
29use ILIAS\UI\Implementation\Component\Input\Container\Form\FormWithoutSubmitButton;
52 if ($component->getAsyncRenderUrl()) {
59 return $this->renderRoundTrip($component, $default_renderer);
71 parent::registerResources($registry);
72 $registry->
register(
'assets/js/modal.min.js');
77 $show = $modal->getShowSignal();
78 $close = $modal->getCloseSignal();
82 $replace = $modal->getReplaceSignal();
86 'ajaxRenderUrl' => $modal->getAsyncRenderUrl(),
87 'keyboard' => $modal->getCloseWithKeyboard()
105 return $modal->withAdditionalOnLoadCode(
function (
$id) use ($show, $close,
$options, $replace):
string {
109 "$(document).on('$show', function(event, signalData) {
110 let modal = document.getElementById('$id');
111 il.UI.modal.showModal(modal, $options, signalData, '$close');
114 if ($replace !=
"") {
115 $code .=
"$(document).on('$replace', function(event, signalData) {
116 const id = event.target.closest('.c-modal').id;
117 il.UI.core.replaceContent(id, signalData.options.url, 'component');
128 return "<span id='$id'></span>";
133 RendererInterface $default_renderer
138 $tpl->setVariable(
'ID',
$id);
139 $value = $modal->getFormAction();
140 $tpl->setVariable(
'FORM_ACTION', $value);
141 $tpl->setVariable(
'TITLE', $modal->getTitle());
142 $tpl->setVariable(
'MESSAGE', $modal->getMessage());
146 $modal->getAffectedItems(),
149 if ($standard_items) {
150 $tpl->setCurrentBlock(
'with_standard_items');
151 $tpl->setVariable(
'STANDARD_ITEMS', $standard_items);
156 $modal->getAffectedItems(),
159 if ($key_value_items) {
160 $tpl->setCurrentBlock(
'with_key_value_items');
161 $tpl->setVariable(
'KEY_VALUE_ITEMS', $key_value_items);
164 $tpl->setVariable(
'ACTION_BUTTON_LABEL', $modal->getActionButtonLabel() ?? $this->txt(
'delete'));
165 $tpl->setVariable(
'CANCEL_BUTTON_LABEL', $modal->getCancelButtonLabel() ?? $this->txt(
'cancel'));
166 $tpl->setVariable(
'CLOSE_LABEL', $modal->getCancelButtonLabel() ?? $this->txt(
'cancel'));
181 RendererInterface $default_renderer
183 $items_of_class = array_filter(
185 fn($i) => $i instanceof $class_name
187 $rendered_items =
'';
188 foreach ($items_of_class as $item) {
189 $rendered_items .= $default_renderer->render($item);
191 return $rendered_items;
194 protected function renderRoundTrip(
Component\Modal\RoundTrip $modal, RendererInterface $default_renderer): string
196 $tpl = $this->getTemplate(
'tpl.roundtrip.html',
true,
true);
198 $modal = $this->registerSignals($modal);
199 $id = $this->bindJavaScript($modal);
200 $tpl->setVariable(
'ID',
$id);
201 $tpl->setVariable(
'TITLE', $modal->getTitle());
202 $tpl->setVariable(
'CLOSE_LABEL', $this->txt(
'close'));
204 foreach ($modal->getContent() as $content) {
205 $tpl->setCurrentBlock(
'with_content');
206 $tpl->setVariable(
'CONTENT', $default_renderer->render($content));
207 $tpl->parseCurrentBlock();
209 foreach ($modal->getActionButtons() as $button) {
210 $tpl->setCurrentBlock(
'with_buttons');
211 $tpl->setVariable(
'BUTTON', $default_renderer->render($button));
212 $tpl->parseCurrentBlock();
216 if (!empty($modal->getInputs())) {
218 $tpl->setCurrentBlock(
'with_form');
219 $tpl->setVariable(
'FORM', $default_renderer->render($modal->getForm()));
220 $tpl->parseCurrentBlock();
223 $submit = $this->getUIFactory()->button()->standard(
224 $modal->getSubmitLabel() ?? $this->txt(
'save'),
226 )->withOnClick($modal->getForm()->getSubmitSignal());
227 $tpl->setCurrentBlock(
'with_submit');
228 $tpl->setVariable(
'SUBMIT_BUTTON', $default_renderer->render($submit));
229 $tpl->parseCurrentBlock();
232 $tpl->setVariable(
'CANCEL_BUTTON_LABEL', $modal->getCancelButtonLabel() ?? $this->txt(
'cancel'));
238 $tpl = $this->getTemplate(
'tpl.lightbox.html',
true,
true);
239 $modal = $this->registerSignals($modal);
240 $id = $this->bindJavaScript($modal);
241 $tpl->setVariable(
'ID',
$id);
242 $id_carousel =
"{$id}_carousel";
243 $pages = $modal->getPages();
244 $tpl->setVariable(
'TITLE', $pages[0]->
getTitle());
245 $tpl->setVariable(
'ID_CAROUSEL', $id_carousel);
246 $tpl->setVariable(
'CLOSE_LABEL', $this->txt(
'close'));
247 $tpl->setVariable(
'COLOR_SCHEME', $modal->getScheme());
249 if (count($pages) > 1) {
250 $tpl->setCurrentBlock(
'has_indicators');
251 foreach ($pages as $index => $page) {
252 $tpl->setCurrentBlock(
'indicators');
253 $tpl->setVariable(
'INDEX', $index);
254 $tpl->setVariable(
'CLASS_ACTIVE', ($index == 0) ?
'active' :
'');
255 $tpl->setVariable(
'ID_CAROUSEL2', $id_carousel);
256 $tpl->parseCurrentBlock();
260 foreach ($pages as $page) {
261 $this->renderPage($page, $first, $tpl, $default_renderer);
264 if (count($pages) > 1) {
265 $tpl->setCurrentBlock(
'controls');
266 $tpl->setVariable(
'ID_CAROUSEL3', $id_carousel);
267 $tpl->parseCurrentBlock();
269 $tpl->setVariable(
'ID_CAROUSEL4', $id_carousel);
289 $tpl->
setVariable(
'CLASS_ACTIVE', $first ?
'active' :
'');
290 $tpl->
setVariable(
'ORIENTATION', $vertical ?
'item-vertical' :
'');
294 $tpl->
setVariable(
'DESCRIPTION', $page->getDescription());
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
renderPage(LightboxPage $page, bool $first, Template $tpl, RendererInterface $default_renderer)
renderInterruptiveItemsByClass(string $class_name, array $items, RendererInterface $default_renderer)
Filters items by provided class, and renders only those.
renderInterruptive(Component\Modal\Interruptive $modal, RendererInterface $default_renderer)
registerSignals(Component\Modal\Modal $modal)
renderAsync(Component\Modal\Modal $modal)
renderLightbox(Component\Modal\Lightbox $modal, 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.
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.
addTriggererOnLoadCode(Triggerer $triggerer)
Add onload-code for triggerer.
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
Interface to be extended by components that have the possibility to bind to Javascript.
Interface InterruptiveItem.
Interface LightboxDescriptionEnabledPage.
getTitle()
Get the title of this page, displayed as title in the lightbox modal.
getComponent()
Get the component representing the media item to be displayed in the modals content section,...
render(Component $component, Renderer $default_renderer)
Render the component if possible and delegate additional rendering to the default_renderer.
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.
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.