package fr.openwide.core.wicket.more.common; import org.apache.wicket.Component; import org.apache.wicket.ajax.attributes.AjaxCallListener; import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.wicketstuff.wiquery.core.javascript.JsStatement; import fr.openwide.core.wicket.markup.html.panel.InvisiblePanel; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component.AbstractModalPopupPanel; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component.DelegatedMarkupPanel; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.statement.BootstrapModal; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.statement.BootstrapModalBackdrop; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.statement.BootstrapModalManagerStatement; public class WorkInProgressPopup extends AbstractModalPopupPanel<String> { private static final long serialVersionUID = 187656092203183255L; public WorkInProgressPopup(String id, IModel<String> messageModel) { super(id, messageModel); BootstrapModal options = BootstrapModal.modal(); options.setKeyboard(false); options.setBackdrop(BootstrapModalBackdrop.STATIC); setBootstrapModal(options); } private static CharSequence doIfNotRedirecting(JsStatement statement) { return new StringBuilder() .append("if (typeof(jqXHR) !== 'undefined' && jqXHR !== null) {") .append(new JsStatement().append("var redirectUrl = jqXHR.getResponseHeader('Ajax-Location')").render()) .append("if (!(typeof(redirectUrl) !== 'undefined' && redirectUrl !== null && redirectUrl !== '')) {") .append(statement.render()) .append("}") .append("} else {") .append(statement.render()) .append("}"); } public void updateAjaxAttributes(AjaxRequestAttributes attributes) { CharSequence hideIfNotRedirecting = doIfNotRedirecting(BootstrapModalManagerStatement.hide(getContainer())); AjaxCallListener listener = new AjaxCallListener() .onBeforeSend(BootstrapModalManagerStatement.show(getContainer(), getBootstrapModal()).render()) .onComplete(hideIfNotRedirecting); attributes.getAjaxCallListeners().add(listener); } @Override protected Component createHeader(String wicketId) { return new Label(wicketId, getModel()); } @Override protected Component createBody(String wicketId) { return new DelegatedMarkupPanel(wicketId, WorkInProgressPopup.class); } @Override protected final Component createFooter(String wicketId) { return new InvisiblePanel(wicketId); } @Override protected IModel<String> getCssClassNamesModel() { return Model.of("modal-work-in-progress"); } }