19 declare(strict_types=1);
49 if ($component->getAsyncRenderUrl()) {
56 return $this->renderRoundTrip($component, $default_renderer);
68 parent::registerResources($registry);
69 $registry->
register(
'assets/js/modal.min.js');
74 $show = $modal->getShowSignal();
75 $close = $modal->getCloseSignal();
79 $replace = $modal->getReplaceSignal();
83 'ajaxRenderUrl' => $modal->getAsyncRenderUrl(),
84 'keyboard' => $modal->getCloseWithKeyboard()
102 return $modal->withAdditionalOnLoadCode(
function (
$id) use ($show, $close, $options, $replace):
string {
103 $options[
"url"] =
"#$id";
104 $options = json_encode($options);
106 "$(document).on('$show', function(event, signalData) { 107 let modal = document.getElementById('$id'); 108 il.UI.modal.showModal(modal, $options, signalData, '$close'); 111 if ($replace !=
"") {
112 $code .=
"$(document).on('$replace', function(event, signalData) { 113 const id = event.target.closest('.c-modal').id; 114 il.UI.core.replaceContent(id, signalData.options.url, 'component'); 125 return "<span id='$id'></span>";
132 $tpl = $this->
getTemplate(
'tpl.interruptive.html',
true,
true);
135 $tpl->setVariable(
'ID',
$id);
136 $value = $modal->getFormAction();
137 $tpl->setVariable(
'FORM_ACTION', $value);
138 $tpl->setVariable(
'TITLE', $modal->getTitle());
139 $tpl->setVariable(
'MESSAGE', $modal->getMessage());
143 $modal->getAffectedItems(),
146 if ($standard_items) {
147 $tpl->setCurrentBlock(
'with_standard_items');
148 $tpl->setVariable(
'STANDARD_ITEMS', $standard_items);
153 $modal->getAffectedItems(),
156 if ($key_value_items) {
157 $tpl->setCurrentBlock(
'with_key_value_items');
158 $tpl->setVariable(
'KEY_VALUE_ITEMS', $key_value_items);
161 $tpl->setVariable(
'ACTION_BUTTON_LABEL', $modal->getActionButtonLabel() ?? $this->
txt(
'delete'));
162 $tpl->setVariable(
'CANCEL_BUTTON_LABEL', $modal->getCancelButtonLabel() ?? $this->
txt(
'cancel'));
163 $tpl->setVariable(
'CLOSE_LABEL', $modal->getCancelButtonLabel() ?? $this->
txt(
'cancel'));
180 $items_of_class = array_filter(
182 fn($i) => $i instanceof $class_name
184 $rendered_items =
'';
185 foreach ($items_of_class as $item) {
186 $rendered_items .= $default_renderer->render($item);
188 return $rendered_items;
193 $tpl = $this->
getTemplate(
'tpl.roundtrip.html',
true,
true);
197 $tpl->setVariable(
'ID',
$id);
198 $tpl->setVariable(
'TITLE', $modal->getTitle());
199 $tpl->setVariable(
'CLOSE_LABEL', $this->
txt(
'close'));
201 foreach ($modal->getContent() as $content) {
202 $tpl->setCurrentBlock(
'with_content');
203 $tpl->setVariable(
'CONTENT', $default_renderer->render($content));
204 $tpl->parseCurrentBlock();
206 foreach ($modal->getActionButtons() as $button) {
207 $tpl->setCurrentBlock(
'with_buttons');
208 $tpl->setVariable(
'BUTTON', $default_renderer->render($button));
209 $tpl->parseCurrentBlock();
213 if (!empty($modal->getInputs())) {
215 $tpl->setCurrentBlock(
'with_form');
216 $tpl->setVariable(
'FORM', $default_renderer->render($modal->getForm()));
217 $tpl->parseCurrentBlock();
221 $modal->getSubmitLabel() ?? $this->
txt(
'save'),
223 )->withOnClick($modal->getForm()->getSubmitSignal());
224 $tpl->setCurrentBlock(
'with_submit');
225 $tpl->setVariable(
'SUBMIT_BUTTON', $default_renderer->render($submit));
226 $tpl->parseCurrentBlock();
229 $tpl->setVariable(
'CANCEL_BUTTON_LABEL', $modal->getCancelButtonLabel() ?? $this->
txt(
'cancel'));
235 $tpl = $this->
getTemplate(
'tpl.lightbox.html',
true,
true);
238 $tpl->setVariable(
'ID',
$id);
239 $id_carousel =
"{$id}_carousel";
240 $pages = $modal->getPages();
241 $tpl->setVariable(
'TITLE', $pages[0]->
getTitle());
242 $tpl->setVariable(
'ID_CAROUSEL', $id_carousel);
243 $tpl->setVariable(
'CLOSE_LABEL', $this->
txt(
'close'));
244 $tpl->setVariable(
'COLOR_SCHEME', $modal->getScheme());
246 if (count($pages) > 1) {
247 $tpl->setCurrentBlock(
'has_indicators');
248 foreach ($pages as $index => $page) {
249 $tpl->setCurrentBlock(
'indicators');
250 $tpl->setVariable(
'INDEX', $index);
251 $tpl->setVariable(
'CLASS_ACTIVE', ($index == 0) ?
'active' :
'');
252 $tpl->setVariable(
'ID_CAROUSEL2', $id_carousel);
253 $tpl->parseCurrentBlock();
257 foreach ($pages as $page) {
258 $this->
renderPage($page, $first, $tpl, $default_renderer);
261 if (count($pages) > 1) {
262 $tpl->setCurrentBlock(
'controls');
263 $tpl->setVariable(
'ID_CAROUSEL3', $id_carousel);
264 $tpl->parseCurrentBlock();
266 $tpl->setVariable(
'ID_CAROUSEL4', $id_carousel);
286 $tpl->
setVariable(
'CLASS_ACTIVE', $first ?
'active' :
'');
287 $tpl->
setVariable(
'ORIENTATION', $vertical ?
'item-vertical' :
'');
291 $tpl->
setVariable(
'DESCRIPTION', $page->getDescription());
Registry for resources required by rendered output like Javascript or CSS.
Interface InterruptiveItem.
renderPage(LightboxPage $page, bool $first, Template $tpl, RendererInterface $default_renderer)
txt(string $id)
Get a text from the language file.
setCurrentBlock(string $name)
Set the block to work on.
getTitle()
Get the title of this page, displayed as title in the lightbox modal.
setVariable(string $name, $value)
Set a variable in the current block.
renderLightbox(Component\Modal\Lightbox $modal, RendererInterface $default_renderer)
registerResources(ResourceRegistry $registry)
Announce resources this renderer requires.
getTemplate(string $name, bool $purge_unfilled_vars, bool $purge_unused_blocks)
Get template of component this renderer is made for.
renderInterruptive(Component\Modal\Interruptive $modal, RendererInterface $default_renderer)
cannotHandleComponent(Component $component)
This method MUST be called by derived component renderers, if.
register(string $name)
Add a dependency.
getComponent()
Get the component representing the media item to be displayed in the modals content section...
parseCurrentBlock()
Parse the block that is currently worked on.
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Interface LightboxDescriptionEnabledPage.
renderAsync(Component\Modal\Modal $modal)
touchBlock(string $name)
Touch a block without working further on it.
getUIFactory()
Get a UI factory.
render(Component\Component $component, RendererInterface $default_renderer)
renderInterruptiveItemsByClass(string $class_name, array $items, RendererInterface $default_renderer)
Filters items by provided class, and renders only those.
Base class for all component renderers.
registerSignals(Component\Modal\Modal $modal)
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.