From f59f7d457cc535cfbe789058177aa38ca54746bd Mon Sep 17 00:00:00 2001 From: Joonas Lehtinen Date: Mon, 9 Nov 2009 08:23:10 +0000 Subject: [PATCH] #3589 : Fixed document and window references for the script executed with executeJavaScript(), better testcases, better API documentation examples svn changeset:9678/svn branch:6.2 --- .../vaadin/terminal/gwt/client/ui/VView.java | 2 +- src/com/vaadin/ui/Window.java | 24 ++++++++--- .../com/vaadin/tests/tickets/Ticket3589.java | 40 ++++++++++++++----- 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/VView.java b/src/com/vaadin/terminal/gwt/client/ui/VView.java index 9cb108acda..f6b22b4e1e 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VView.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VView.java @@ -162,7 +162,7 @@ public class VView extends SimplePanel implements Container, ResizeHandler, if (args != null) for (var i=1;i<= args.length;i++) script = script.replace("$"+i, "$wnd.vaadin.evalargs["+(i-1)+"]"); - eval(script); + eval("{ var document=$doc; var window=$wnd; " + script + "}"); delete $wnd.vaadin.evalargs; } catch (e) { } diff --git a/src/com/vaadin/ui/Window.java b/src/com/vaadin/ui/Window.java index 23666dc287..8de7a944f7 100644 --- a/src/com/vaadin/ui/Window.java +++ b/src/com/vaadin/ui/Window.java @@ -1684,18 +1684,30 @@ public class Window extends Panel implements URIHandler, ParameterHandler { *

* *

- * Use example 1: - mainWindow.executeJavaScript("alert(foo"); + * Use example 1: Show a alert box in the current window + mainWindow.executeJavaScript("alert('foo');"); * *

* *

- * Use example 2: + * Use example 2: Print current window + mainWindow.executeJavaScript("window.print()"); + * + *

+ * + *

+ * Use example 3: Change labels background to yellow Label label = new Label("Label"); - TextField textfield = new TextField("TestField"); mainWindow.addComponent(label); - mainWindow.addComponent(textfield); - mainWindow.executeJavaScript("$1.style.backgroundColor='yellow';$2.style.borderColor='red';",label,textfield); + mainWindow.executeJavaScript("$1.style.backgroundColor='yellow';",label); + * + *

+ * + *

+ * Use example 4: Print contents of a label + Label label = new Label("This label contains some report"); + mainWindow.addComponent(label); + mainWindow.executeJavaScript("var w = window.open(); w.document.write($1.outerHTML); w.print();",label); * *

* diff --git a/tests/src/com/vaadin/tests/tickets/Ticket3589.java b/tests/src/com/vaadin/tests/tickets/Ticket3589.java index 5b7182eb5e..f072f2dd90 100644 --- a/tests/src/com/vaadin/tests/tickets/Ticket3589.java +++ b/tests/src/com/vaadin/tests/tickets/Ticket3589.java @@ -3,6 +3,7 @@ package com.vaadin.tests.tickets; import com.vaadin.Application; import com.vaadin.ui.Button; import com.vaadin.ui.Label; +import com.vaadin.ui.Panel; import com.vaadin.ui.TextField; import com.vaadin.ui.Window; import com.vaadin.ui.Button.ClickEvent; @@ -14,26 +15,43 @@ public class Ticket3589 extends Application { final Window mainWindow = new Window("Test"); setMainWindow(mainWindow); - mainWindow.addComponent(new Button("alert('foo')", - new Button.ClickListener() { + for (final String script : new String[] { "alert('foo');", + "window.print()", "document.write('foo')" }) { + Panel p = new Panel("Example: " + script); + p.addComponent(new Button("Run javascript", + new Button.ClickListener() { - public void buttonClick(ClickEvent event) { - mainWindow.executeJavaScript("alert('foo');"); - } - })); + public void buttonClick(ClickEvent event) { + mainWindow.executeJavaScript(script); + } + })); + mainWindow.addComponent(p); + } + final String script = "$1.style.backgroundColor='yellow';$2.style.borderColor='red';"; + Panel p = new Panel("Example: " + script); final Label label = new Label("Label"); final TextField textfield = new TextField("TestField"); - mainWindow.addComponent(label); - mainWindow.addComponent(textfield); - - final String script = "$1.style.backgroundColor='yellow';$2.style.borderColor='red';"; - mainWindow.addComponent(new Button(script, new Button.ClickListener() { + p.addComponent(label); + p.addComponent(textfield); + p.addComponent(new Button("Run javascript", new Button.ClickListener() { public void buttonClick(ClickEvent event) { mainWindow.executeJavaScript(script, label, textfield); } })); + mainWindow.addComponent(p); + + final String script2 = "var w = window.open(); w.document.write($1.outerHTML); w.print();"; + final Panel p2 = new Panel("Example: " + script2); + p2.addComponent(new Label("Only this panel will be printed...")); + p2.addComponent(new Button("Run javascript", + new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + mainWindow.executeJavaScript(script2, p2); + } + })); + mainWindow.addComponent(p2); } } -- 2.39.5