--- /dev/null
+/* \r
+@ITMillApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.itmill.toolkit.demo.featurebrowser;\r
+\r
+import java.util.Date;\r
+\r
+import com.itmill.toolkit.terminal.PaintException;\r
+import com.itmill.toolkit.terminal.PaintTarget;\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.CustomComponent;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.OrderedLayout;\r
+import com.itmill.toolkit.ui.RichTextArea;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+\r
+/**\r
+ * An example using a RichTextArea to edit a Label in XHTML-mode.\r
+ * \r
+ */\r
+public class JavaScriptAPIExample extends CustomComponent {\r
+\r
+ public static final String txt = "<A href=\"javascript:itmill.forceSync();\">javascript:itmill.forceSync();</A>";\r
+\r
+ private final OrderedLayout main;\r
+ private final Label l;\r
+ private final RichTextArea editor = new RichTextArea();\r
+\r
+ public JavaScriptAPIExample() {\r
+ // main layout\r
+ main = new OrderedLayout();\r
+ main.setMargin(true);\r
+ setCompositionRoot(main);\r
+ // Add the label\r
+ l = new Label(txt);\r
+ l.setContentMode(Label.CONTENT_XHTML);\r
+ main.addComponent(l);\r
+ // Edit button with inline click-listener\r
+ Button b = new Button("Edit", new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ // swap Label <-> RichTextArea\r
+ if (main.getComponentIterator().next() == l) {\r
+ editor.setValue(l.getValue());\r
+ main.replaceComponent(l, editor);\r
+ event.getButton().setCaption("Save");\r
+ } else {\r
+ l.setValue(editor.getValue());\r
+ main.replaceComponent(editor, l);\r
+ event.getButton().setCaption("Edit");\r
+ }\r
+ }\r
+ });\r
+ main.addComponent(b);\r
+ main.setComponentAlignment(b, OrderedLayout.ALIGNMENT_RIGHT,\r
+ OrderedLayout.ALIGNMENT_VERTICAL_CENTER);\r
+\r
+ // \r
+ Label l = new Label(\r
+ "This label will update it's value AFTER it's rendered to the client. "\r
+ + "The client will be synchronized on reload, when you click a button, "\r
+ + "or when itmill.forceSync() is called.") {\r
+\r
+ public void paintContent(PaintTarget target) throws PaintException {\r
+\r
+ super.paintContent(target);\r
+ Delay d = new Delay(this);\r
+ d.start();\r
+ }\r
+\r
+ };\r
+ main.addComponent(l);\r
+\r
+ }\r
+\r
+ private class Delay extends Thread {\r
+ Label label;\r
+\r
+ public Delay(Label l) {\r
+ label = l;\r
+ }\r
+\r
+ public void run() {\r
+ try {\r
+ Thread.sleep(500);\r
+ label.setValue(new Date().toString());\r
+ join();\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ }\r
+}\r
initializeTestingTools(getTestServerUri(), this);
}
+ initializeClientHooks();
+
makeUidlRequest("repaintAll=1");
applicationRunning = true;
$wnd.itmill.startTT(testServerUri, client);
}-*/;
+ /**
+ * Publishes functions for use from javascript.
+ * <ul>
+ * <li><code>itmill.forceSync()</code> sends pending variable changes, in
+ * effect synchronizing the server and client state.</li>
+ * </ul>
+ */
+ private native void initializeClientHooks()
+ /*-{
+ var app = this;
+ $wnd.itmill.forceSync = function() {
+ app.@com.itmill.toolkit.terminal.gwt.client.ApplicationConnection::sendPendingVariableChanges()();
+ }
+ }-*/;
+
public static Console getConsole() {
return console;
}