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