1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.vaadin.gwt.client.richtext;
35
36
37 import static info.magnolia.ui.vaadin.gwt.client.ckeditor.VMagnoliaCKEditorTextEvents.*;
38
39 import info.magnolia.ui.vaadin.gwt.client.ckeditor.VMagnoliaCKEditorTextEvents;
40
41 import java.util.Arrays;
42 import java.util.List;
43
44 import org.vaadin.openesignforms.ckeditor.widgetset.client.ui.CKEditor;
45 import org.vaadin.openesignforms.ckeditor.widgetset.client.ui.VCKEditorTextField;
46
47 import com.google.gwt.user.client.Timer;
48 import com.vaadin.client.ApplicationConnection;
49 import com.vaadin.client.UIDL;
50 import com.vaadin.client.ValueMap;
51
52
53
54
55
56 public class VMagnoliaRichTextField extends VCKEditorTextField implements VMagnoliaCKEditorTextEvents.Listener {
57 private VMagnoliaRichTextEditor editor;
58 private List<String> pluginEvents;
59 private ValueMap customPlugins;
60 private boolean immediate;
61
62 @Override
63 public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
64
65
66 if (uidl.hasAttribute(VAR_SERVERPLUGINS)) {
67 customPlugins = uidl.getMapAttribute(VAR_SERVERPLUGINS);
68 }
69
70
71 if (uidl.hasAttribute(VAR_EVENTNAMES)) {
72 pluginEvents = Arrays.asList(uidl.getStringArrayAttribute(VAR_EVENTNAMES));
73 }
74
75 if (uidl.hasAttribute(ATTR_IMMEDIATE)) {
76 immediate = uidl.getBooleanAttribute(ATTR_IMMEDIATE);
77 }
78
79 super.updateFromUIDL(uidl, client);
80
81
82 if (uidl.hasAttribute(VAR_FIRE_PLUGIN_EVENT) && this.editor != null) {
83 this.editor.fire(
84 uidl.getStringAttribute(VAR_FIRE_PLUGIN_EVENT),
85 uidl.getStringAttribute(VAR_FIRE_PLUGIN_EVENT_VALUE)
86 );
87 }
88 }
89
90 @Override
91 protected void loadEditor() {
92 if (isAttached()) {
93 super.loadEditor();
94 }
95 }
96
97 @Override
98 protected CKEditor loadEditor(String inPageConfig) {
99
100 if (customPlugins != null && customPlugins.getKeySet() != null && !customPlugins.getKeySet().isEmpty()) {
101 for (String plugin : customPlugins.getKeySet()) {
102 addExternalPlugin(plugin, customPlugins.getString(plugin));
103 }
104 }
105
106
107 setVaadinDirUrl(clientToServer.getConfiguration().getVaadinDirUrl());
108
109
110 editor = (VMagnoliaRichTextEditor) super.loadEditor(inPageConfig);
111 return editor;
112 }
113
114 private native void setVaadinDirUrl(String vaadinDirUrl)
115
116 ;
117
118 private native void addExternalPlugin(String pluginName, String path)
119
120 ;
121
122
123
124
125 @Override
126 public void onInstanceReady() {
127 super.onInstanceReady();
128
129
130 if (pluginEvents != null && !pluginEvents.isEmpty()) {
131 for (String eventName : pluginEvents) {
132 editor.addPluginListener(eventName, this);
133 }
134 }
135 }
136
137 @Override
138 public void onPluginEvent(String eventName, String data) {
139 if (pluginEvents.contains(eventName)) {
140 clientToServer.updateVariable(paintableId, VAR_EVENT_PREFIX + eventName, data == null ? "" : data, true);
141 }
142 }
143
144
145
146
147 @Override
148 public void onChange() {
149 if (editor != null && !editor.isReadOnly()) {
150 clientToServer.updateVariable(paintableId, VAR_TEXT, editor.getData(), false);
151 if (immediate) {
152 valueUpdateTimer.schedule(200);
153 }
154 }
155 }
156
157 private Timer valueUpdateTimer = new Timer() {
158 @Override
159 public void run() {
160 clientToServer.sendPendingVariableChanges();
161 }
162 };
163
164 @Override
165 public void doResize() {
166 super.doResize();
167 }
168 }