package fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.mask; import org.apache.wicket.model.IModel; import org.wicketstuff.wiquery.core.javascript.JsScope; import org.wicketstuff.wiquery.core.javascript.JsUtils; import org.wicketstuff.wiquery.core.options.IComplexOption; import org.wicketstuff.wiquery.core.options.Options; public class MaskOptions extends Options { private static final long serialVersionUID = 8361789161890761478L; private final Options translationOptions = new Options(); private static class MaskTranslationOptions implements IComplexOption { private static final long serialVersionUID = -7911528421294931614L; private final String pattern; private final boolean optional; private final boolean recursive; private final Character fallback; public MaskTranslationOptions(String pattern, boolean optional, boolean recursive, Character fallback) { super(); this.pattern = pattern; this.optional = optional; this.recursive = recursive; this.fallback = fallback; } @Override public CharSequence getJavascriptOption() { Options options = new Options() .put("pattern", pattern) // No quotes .put("optional", optional) .put("recursive", recursive); if (fallback != null) { options.put("fallback", JsUtils.quotes(String.valueOf(fallback))); } return options.getJavaScriptOptions(); } } @Override public void detach() { super.detach(); translationOptions.detach(); } @Override public CharSequence getJavaScriptOptions() { put("translation", translationOptions.getJavaScriptOptions().toString()); return super.getJavaScriptOptions(); } public MaskOptions setOnKeyPress(JsScope onKeyPress) { put("onKeyPress", onKeyPress); return this; } public MaskOptions setOnComplete(JsScope onComplete) { put("onComplete", onComplete); return this; } public MaskOptions setOnChange(JsScope onChange) { put("onChange", onChange); return this; } public MaskOptions addTranslation(char character, String pattern) { return addTranslation(character, new MaskTranslationOptions(pattern, false, false, null)); } public MaskOptions addTranslation(char character, String pattern, boolean optional, boolean recursive) { return addTranslation(character, new MaskTranslationOptions(pattern, optional, recursive, null)); } public MaskOptions addTranslation(char character, String pattern, char fallback) { return addTranslation(character, new MaskTranslationOptions(pattern, false, false, fallback)); } public MaskOptions addTranslation(char character, String pattern, boolean optional, boolean recursive, char fallback) { return addTranslation(character, new MaskTranslationOptions(pattern, optional, recursive, fallback)); } protected MaskOptions addTranslation(char character, MaskTranslationOptions options) { translationOptions.put(JsUtils.quotes(String.valueOf(character)), options); return this; } public MaskOptions setPlaceholder(IModel<String> placeholder) { putLiteral("placeholder", placeholder); return this; } }