package fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.confirm.component; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.model.IModel; import org.wicketstuff.wiquery.core.events.Event; import org.wicketstuff.wiquery.core.javascript.JsScope; import org.wicketstuff.wiquery.core.javascript.JsScopeEvent; import org.wicketstuff.wiquery.core.javascript.JsStatement; import org.wicketstuff.wiquery.core.javascript.JsUtils; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.confirm.behavior.ConfirmContentBehavior; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.confirm.fluid.IConfirmLinkBuilderStepStart; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.confirm.statement.BootstrapConfirmEvent; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.confirm.statement.BootstrapConfirmStatement; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.BootstrapModalJavaScriptResourceReference; /** * Comme un {@link Link} standard, sauf que l'exécution du {@link Link#onClick()} est soumis à confirmation préalable. */ public abstract class ConfirmLink<O> extends Link<O> { private static final long serialVersionUID = -4124927130129944090L; public static <O> IConfirmLinkBuilderStepStart<ConfirmLink<O>, O> build() { return new ConfirmLinkBuilder<O>(); } protected ConfirmLink(String id, IModel<O> model, IModel<String> titleModel, IModel<String> textModel, IModel<String> yesLabelModel, IModel<String> noLabelModel, IModel<String> yesIconModel, IModel<String> noIconModel, IModel<String> yesButtonModel, IModel<String> noButtonModel, IModel<String> cssClassNamesModel, boolean textNoEscape) { super(id, model); setOutputMarkupId(true); add(new ConfirmContentBehavior(titleModel, textModel, yesLabelModel, noLabelModel, yesIconModel, noIconModel, yesButtonModel, noButtonModel, cssClassNamesModel, textNoEscape)); } @Override protected CharSequence getOnClickScript(CharSequence url) { return BootstrapConfirmStatement.confirm(ConfirmLink.this).append("return false;").render(); } @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); response.render(JavaScriptHeaderItem.forReference(BootstrapModalJavaScriptResourceReference.get())); Event confirmEvent = new Event(BootstrapConfirmEvent.CONFIRM) { private static final long serialVersionUID = 6466300052232971891L; @Override public JsScope callback() { return JsScopeEvent.quickScope( new JsStatement() .append("window.location = " + JsUtils.quotes(getURL(), true)).append(";") .append("event.preventDefault();") ); } }; response.render(OnDomReadyHeaderItem.forScript(new JsStatement().$(this).chain(confirmEvent).render(true))); } }