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
139 $value = $modal->getFormAction();
146 $modal->getAffectedItems(),
149 if ($standard_items) {
156 $modal->getAffectedItems(),
159 if ($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);
204 foreach ($modal->getContent() as $content) {
209 foreach ($modal->getActionButtons() as $button) {
216 if (!empty($modal->getInputs())) {
219 $tpl->
setVariable(
'FORM', $default_renderer->render($modal->getForm()));
224 $modal->getSubmitLabel() ?? $this->txt(
'save'),
226 )->withOnClick($modal->getForm()->getSubmitSignal());
228 $tpl->
setVariable(
'SUBMIT_BUTTON', $default_renderer->render($submit));
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);
242 $id_carousel =
"{$id}_carousel";
243 $pages = $modal->getPages();
249 if (count($pages) > 1) {
251 foreach ($pages as $index =>
$page) {
260 foreach ($pages as
$page) {
261 $this->renderPage(
$page, $first,
$tpl, $default_renderer);
264 if (count($pages) > 1) {
281 $page->getComponent()->getSections(),
282 $page->getComponent()->getHiddenSections()
$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.
setVariable(string $variable, $value='')
Sets the given variable to the given value.
touchBlock(string $block)
overwrites ITX::touchBlock.
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block.
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block.
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
Interface to be extended by components that have the possibility to bind to Javascript.
Interface InterruptiveItem.
Interface LightboxDescriptionEnabledPage.
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.
An entity that renders components to a string output.
readonly ilGlobalTemplateInterface $tpl