]> source.dussan.org Git - vaadin-framework.git/commitdiff
#3589 : Fixed document and window references for the script executed with executeJava...
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>
Mon, 9 Nov 2009 08:23:10 +0000 (08:23 +0000)
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>
Mon, 9 Nov 2009 08:23:10 +0000 (08:23 +0000)
svn changeset:9678/svn branch:6.2

src/com/vaadin/terminal/gwt/client/ui/VView.java
src/com/vaadin/ui/Window.java
tests/src/com/vaadin/tests/tickets/Ticket3589.java

index 9cb108acda509415837f922103ce96242c82483b..f6b22b4e1ed8fee2c14e02322031e173523792c3 100644 (file)
@@ -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) {
       }
index 23666dc28787f1841180fa70b2e8ce8d015383ec..8de7a944f703a8cc5fcafb4602ba6b9a6991a7a3 100644 (file)
@@ -1684,18 +1684,30 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
      * </p>
      * 
      * <p>
-     * Use example 1: <code>
-       mainWindow.executeJavaScript("alert(foo");
+     * Use example 1: Show a alert box in the current window<code>
+       mainWindow.executeJavaScript("alert('foo');");
      * </code>
      * </p>
      * 
      * <p>
-     * Use example 2: <code>
+     * Use example 2: Print current window<code>
+       mainWindow.executeJavaScript("window.print()");
+     * </code>
+     * </p>
+     * 
+     * <p>
+     * Use example 3: Change labels background to yellow<code>
         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);
+     * </code>
+     * </p>
+     * 
+     * <p>
+     * Use example 4: Print contents of a label<code>
+        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);
      * </code>
      * </p>
      * 
index 5b7182eb5e0678b873a9103286c76b3b9d87640a..f072f2dd90ab66205e9a87e6c6bc30bc29c4b241 100644 (file)
@@ -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);
 
     }
 }