diff options
author | Leif Åstrand <leif@vaadin.com> | 2012-06-14 17:29:49 +0300 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2012-06-14 17:29:49 +0300 |
commit | d44e06fc50415d3dcdc93ad8c711a2c4f2664e6e (patch) | |
tree | f87b0664fc3d6ccd3cf604b73b4bdcd1164a4658 /src/com/vaadin/ui | |
parent | 0c06e5ac6e854ff428290db0697c11ebde97adb0 (diff) | |
download | vaadin-framework-d44e06fc50415d3dcdc93ad8c711a2c4f2664e6e.tar.gz vaadin-framework-d44e06fc50415d3dcdc93ad8c711a2c4f2664e6e.zip |
JavascriptManager -> JavaScript and changes based on review (#6730)
Diffstat (limited to 'src/com/vaadin/ui')
-rw-r--r-- | src/com/vaadin/ui/JavaScript.java (renamed from src/com/vaadin/ui/JavascriptManager.java) | 34 | ||||
-rw-r--r-- | src/com/vaadin/ui/Root.java | 39 |
2 files changed, 40 insertions, 33 deletions
diff --git a/src/com/vaadin/ui/JavascriptManager.java b/src/com/vaadin/ui/JavaScript.java index 72295dce2b..dcd8540947 100644 --- a/src/com/vaadin/ui/JavascriptManager.java +++ b/src/com/vaadin/ui/JavaScript.java @@ -10,10 +10,12 @@ import java.util.Map; import com.vaadin.external.json.JSONArray; import com.vaadin.external.json.JSONException; import com.vaadin.terminal.AbstractExtension; +import com.vaadin.terminal.Extension; import com.vaadin.terminal.gwt.client.communication.ServerRpc; +import com.vaadin.terminal.gwt.client.extensions.javascriptmanager.ExecuteJavaScriptRpc; import com.vaadin.terminal.gwt.client.extensions.javascriptmanager.JavascriptManagerState; -public class JavascriptManager extends AbstractExtension { +public class JavaScript extends AbstractExtension { private Map<String, JavascriptCallback> callbacks = new HashMap<String, JavascriptCallback>(); // Can not be defined in client package as this JSONArray is not available @@ -22,7 +24,7 @@ public class JavascriptManager extends AbstractExtension { public void call(String name, JSONArray arguments); } - public JavascriptManager() { + public JavaScript() { registerRpc(new JavascriptCallbackRpc() { public void call(String name, JSONArray arguments) { JavascriptCallback callback = callbacks.get(name); @@ -41,8 +43,8 @@ public class JavascriptManager extends AbstractExtension { return (JavascriptManagerState) super.getState(); } - public void addCallback(String name, JavascriptCallback javascriptCallback) { - callbacks.put(name, javascriptCallback); + public void addCallback(String name, JavascriptCallback callback) { + callbacks.put(name, callback); if (getState().getNames().add(name)) { requestRepaint(); } @@ -55,4 +57,28 @@ public class JavascriptManager extends AbstractExtension { } } + public void execute(String script) { + getRpcProxy(ExecuteJavaScriptRpc.class).executeJavaScript(script); + } + + public static JavaScript getCurrent() { + return Root.getCurrentRoot().getJavaScript(); + } + + private static JavaScript getJavascript(Root root) { + // TODO Add caching to avoid iterating collection every time + // Caching should use weak references to avoid memory leaks -> cache + // should be transient to avoid serialization problems + for (Extension extension : root.getExtensions()) { + if (extension instanceof JavaScript) { + return (JavaScript) extension; + } + } + + // Extend root if it isn't yet done + JavaScript javascript = new JavaScript(); + javascript.extend(root); + return javascript; + } + } diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java index 9814084cbc..60408fe1dc 100644 --- a/src/com/vaadin/ui/Root.java +++ b/src/com/vaadin/ui/Root.java @@ -357,12 +357,6 @@ public abstract class Root extends AbstractComponentContainer implements private List<Notification> notifications; /** - * A list of javascript commands that are waiting to be sent to the client. - * Cleared (set to null) when the commands have been sent. - */ - private List<String> jsExecQueue = null; - - /** * List of windows in this root. */ private final LinkedHashSet<Window> windows = new LinkedHashSet<Window>(); @@ -408,7 +402,7 @@ public abstract class Root extends AbstractComponentContainer implements private DirtyConnectorTracker dirtyConnectorTracker = new DirtyConnectorTracker( this); - private JavascriptManager javascriptManager; + private JavaScript javaScript; private RootServerRpc rpc = new RootServerRpc() { public void click(MouseEventDetails mouseDetails) { @@ -557,16 +551,6 @@ public abstract class Root extends AbstractComponentContainer implements notifications = null; } - // Add executable javascripts if needed - if (jsExecQueue != null) { - for (String script : jsExecQueue) { - target.startTag("execJS"); - target.addAttribute("script", script); - target.endTag("execJS"); - } - jsExecQueue = null; - } - if (scrollIntoView != null) { target.addAttribute("scrollTo", scrollIntoView); scrollIntoView = null; @@ -1000,15 +984,12 @@ public abstract class Root extends AbstractComponentContainer implements * * @param script * JavaScript snippet that will be executed. + * + * @deprecated as of 7.0, use getJavaScript().execute(String) instead */ + @Deprecated public void executeJavaScript(String script) { - if (jsExecQueue == null) { - jsExecQueue = new ArrayList<String>(); - } - - jsExecQueue.add(script); - - requestRepaint(); + getJavaScript().execute(script); } /** @@ -1592,14 +1573,14 @@ public abstract class Root extends AbstractComponentContainer implements return dirtyConnectorTracker; } - public JavascriptManager getJavascriptManager() { - if (javascriptManager == null) { + public JavaScript getJavaScript() { + if (javaScript == null) { // Create and attach on first use - javascriptManager = new JavascriptManager(); - addExtension(javascriptManager); + javaScript = new JavaScript(); + addExtension(javaScript); } - return javascriptManager; + return javaScript; } } |