package au.com.vaadinutils.fields; import java.util.HashMap; import java.util.Map; import org.vaadin.openesignforms.ckeditor.CKEditorConfig; import org.vaadin.openesignforms.ckeditor.CKEditorTextField; /** * This implementation needs to be completed as we need to turn it into a full * blown widget for it to actually work. */ public class CKEditorEmailField extends CKEditorTextField { private static final long serialVersionUID = 1L; public CKEditorEmailField(boolean readonly) { super(getConfig(readonly, null)); setSizeFull(); } public interface ConfigModifier { Map<String, String> modifyToolbarOptions(Map<String, String> defaultConfig); CKEditorConfig modifyConfig(CKEditorConfig config); } public CKEditorEmailField(boolean readonly, ConfigModifier configModifier) { super(); Map<String, String> options = configModifier.modifyToolbarOptions(getDefaultConfig()); CKEditorConfig localconfig = configModifier.modifyConfig(getConfig(readonly, options)); setConfig(localconfig); setSizeFull(); } static public Map<String, String> getDefaultConfig() { Map<String, String> configMap = new HashMap<String, String>(); // configMap // .put("source", // "{ name: 'document', items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] }"); // // configMap // .put("paragraph", // "{ name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] }"); // configMap // .put("clipboard", // "{ name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] }"); // configMap.put("editing", // "{ name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] }"); // configMap.put("document", // "{ name: 'links', items : [ 'Link','Unlink','Anchor' ] }"); // // configMap // .put("basicstyles", // "{ name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] }"); // configMap.put("colors", // "{ name: 'colors', items : [ 'TextColor','BGColor' ] }"); // // configMap.put("styles", // "{ name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] }"); // // configMap.put("tools", // "{ name: 'tools', items : [ 'Maximize', 'ShowBlocks','-','About' ] }"); configMap .put("style", "{ items: ['Styles','Format','Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat'] }"); configMap.put("colour", "{ items: ['TextColor','BGColor'] }"); configMap.put("size", "{ items: ['Font','FontSize'] }"); configMap.put("justify", "{ items: ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'] }"); configMap.put("paste", "{ items: ['Cut','Copy','Paste','PasteText','PasteFromWord'] }"); configMap.put("find", "{ items: ['Find','Replace'] }"); configMap.put("undo", "{ items: ['Undo','Redo'] }"); configMap.put("bullets", "{ items: ['NumberedList','BulletedList'] }"); configMap.put("indent", "{ items: ['Outdent','Indent','CreateDiv'] }"); configMap.put("table", "{ items: ['Table','HorizontalRule','PageBreak','SpecialChar'] }"); configMap.put("image", "{ items: ['Image','Link','Unlink'] }"); configMap.put("source", "{ items: ['Source','ShowBlocks','Maximize'] }"); return configMap; } static CKEditorConfig getConfig(boolean readonly, Map<String, String> configMap) { if (configMap == null) { configMap = getDefaultConfig(); configMap.remove("tools"); configMap.remove("document"); } String toolbarLineJs = buildToolbarJs(configMap); CKEditorConfig config = new CKEditorConfig(); config.useCompactTags(); config.disableElementsPath(); config.setResizeEnabled(false); config.setToolbarCanCollapse(false); config.disableResizeEditor(); if (readonly) config.addCustomToolbarLine(""); else config.addCustomToolbarLine(toolbarLineJs); return config; } private static String buildToolbarJs(Map<String, String> configMap) { String js = ""; for (String entry : configMap.values()) { js += entry + ","; } if (js.endsWith(",")) { js = js.substring(0, js.length() - 1); } return js; } }