19declare(strict_types=1);
29use ILIAS\UI\Implementation\Component\Input\Container\Form\FormWithoutSubmitButton;
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>";
130 RendererInterface $default_renderer
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'));
178 RendererInterface $default_renderer
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;
191 protected function renderRoundTrip(
Component\Modal\RoundTrip $modal, RendererInterface $default_renderer): string
193 $tpl = $this->getTemplate(
'tpl.roundtrip.html',
true,
true);
195 $modal = $this->registerSignals($modal);
196 $id = $this->bindJavaScript($modal);
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();
220 $submit = $this->getUIFactory()->button()->standard(
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);
236 $modal = $this->registerSignals($modal);
237 $id = $this->bindJavaScript($modal);
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());
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
render(Component\Component $component, RendererInterface $default_renderer)
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.
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,...
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.