package de.flower.common.ui.ajax.markup.html; import org.apache.wicket.ajax.IAjaxCallDecorator; import org.apache.wicket.ajax.calldecorator.AjaxPreprocessingCallDecorator; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.model.IModel; import org.apache.wicket.util.string.JavaScriptUtils; /** * {@code AjaxLink} with a JavaScript confirmation message before the AJAX submit. * * @param <T> type of model object */ public abstract class AjaxLinkWithConfirmation<T> extends AjaxLink<T> { private final IModel<String> confirmationQuestion; public AjaxLinkWithConfirmation(final String id, final IModel<String> confirmationQuestion) { super(id); this.confirmationQuestion = confirmationQuestion; } @Override protected final IAjaxCallDecorator getAjaxCallDecorator() { return new AjaxPreprocessingCallDecorator(super.getAjaxCallDecorator()) { @Override public CharSequence preDecorateScript(final CharSequence script) { return decorateScriptWithConfirmationMessage(script, confirmationQuestion.getObject()); } }; } /** * Decorate script with confirmation message. * * @param script the script * @param confirmationMessage the confirmation message * @return the string */ public static String decorateScriptWithConfirmationMessage(final CharSequence script, final String confirmationMessage) { final String myScript = "var r=confirm('" + JavaScriptUtils.escapeQuotes(confirmationMessage) + "'); if (r!=true) { return false; } " + script; return myScript; } }