package fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.emailobfuscator; import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.ComponentTag; 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.model.IModel; import org.wicketstuff.wiquery.core.javascript.JsStatement; import org.wicketstuff.wiquery.core.javascript.JsUtils; import fr.openwide.core.spring.util.StringUtils; public class ObfuscatedEmailLink extends MarkupContainer { private static final long serialVersionUID = 3120329766081035111L; private boolean generateLabel; private final IModel<String> ccModel; private final IModel<String> subjectModel; private final IModel<String> bodyModel; public ObfuscatedEmailLink(String id, IModel<String> emailModel) { this(id, emailModel, false); } public ObfuscatedEmailLink(String id, IModel<String> emailModel, boolean generateLabel) { this(id, emailModel, null, generateLabel); } public ObfuscatedEmailLink(String id, IModel<String> emailModel, IModel<String> subjectModel, boolean generateLabel) { this(id, emailModel, subjectModel, null, generateLabel); } public ObfuscatedEmailLink(String id, IModel<String> emailModel, IModel<String> subjectModel, IModel<String> bodyModel, boolean generateLabel) { this(id, emailModel, null, subjectModel, bodyModel, generateLabel); } public ObfuscatedEmailLink(String id, IModel<String> emailModel, IModel<String> ccModel, IModel<String> subjectModel, IModel<String> bodyModel, boolean generateLabel) { super(id, emailModel); this.ccModel = ccModel; this.generateLabel = generateLabel; this.subjectModel = wrap(subjectModel); this.bodyModel = wrap(bodyModel); } @Override protected void onDetach() { super.onDetach(); if (ccModel != null) { ccModel.detach(); } if (subjectModel != null) { subjectModel.detach(); } if (bodyModel != null) { bodyModel.detach(); } } @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); checkComponentTag(tag, "a"); } public JsStatement statement() { String[] emailParts = StringUtils.split(getDefaultModelObjectAsString(), "@"); String cc; String subject; String body; if (ccModel != null && ccModel.getObject() != null) { cc = ccModel.getObject().replaceAll("@","ยต"); } else { cc = ""; } if (subjectModel != null && subjectModel.getObject() != null) { subject = subjectModel.getObject(); } else { subject = ""; } if (bodyModel != null && bodyModel.getObject() != null) { body = bodyModel.getObject(); } else { body = ""; } if (emailParts != null) { return new JsStatement().$(this).chain("obfuscateEmail", JsUtils.quotes(emailParts[0], true), JsUtils.quotes(emailParts[1], true), JsUtils.quotes(cc, true), JsUtils.quotes(subject, true), JsUtils.quotes(body, true), Boolean.valueOf(generateLabel).toString() // generateLabel with email ? ); } return null; } @Override public void renderHead(IHeaderResponse response) { response.render(JavaScriptHeaderItem.forReference(EmailObfuscatorJavascriptResourceReference.get())); response.render(OnDomReadyHeaderItem.forScript(statement().render())); } }