]> source.dussan.org Git - gwtquery.git/commitdiff
Utility method to export a function
authorManolo Carrasco <manolo@apache.org>
Wed, 14 Jan 2015 22:54:43 +0000 (23:54 +0100)
committerManolo Carrasco <manolo@apache.org>
Wed, 14 Jan 2015 22:54:43 +0000 (23:54 +0100)
gwtquery-core/src/main/java/com/google/gwt/query/client/js/JsUtils.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTestGwt.java

index e1c0842b2ad2f657426833c7967df548ff5a19cf..1012a8dc930fba285e15a5e92b9f219347b0e309 100644 (file)
@@ -228,6 +228,20 @@ public class JsUtils {
     }
   }
 
+  /**
+   * Assign a function to a property of the window object.
+   */
+  public static void export(String name, Function f) {
+    export(GQuery.window, name, f);
+  }
+
+  /**
+   * Export a function as a property of a javascript object.
+   */
+  public static void export(JavaScriptObject o, String name, Function f) {
+    prop(o, name, (Object)(f != null ? wrapFunction(f) : null));
+  }
+
   /**
    * Camelize style property names.
    * for instance: font-name -> fontName
@@ -573,7 +587,7 @@ public class JsUtils {
   }
 
   private static native <T> T runJavascriptFunctionImpl(JavaScriptObject o, String meth, JsArrayMixed args) /*-{
-    var f = o || window, p = meth.split('.');
+    var f = o || $wnd, p = meth.split('.');
     for (var i in p) {
       o = f;
       f = f[p[i]];
index 4df6b85c4d9ac5a035437051133ae73cf7e6d180..541816210ecdb865968cd5500dcbb2b56e062c9b 100644 (file)
@@ -20,6 +20,14 @@ import static com.google.gwt.query.client.GQuery.$$;
 import static com.google.gwt.query.client.GQuery.document;
 import static com.google.gwt.query.client.GQuery.window;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import junit.framework.Assert;
+
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.InputElement;
@@ -41,6 +49,7 @@ import com.google.gwt.query.client.js.JsNodeArray;
 import com.google.gwt.query.client.js.JsUtils;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.Label;
@@ -48,14 +57,6 @@ import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.Widget;
 
-import junit.framework.Assert;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
 /**
  * Test class for testing gwtquery-core api.
  */
@@ -1046,6 +1047,18 @@ public class GQueryCoreTestGwt extends GWTTestCase {
     assertNull(e);
   }
 
+  public void testUtilsJsniExport() {
+    JsUtils.export("foo", new Function() {
+      public Object f(Object... args) {
+        assertEquals("bar", (String)args[0]);
+        assertEquals(3.5, (Double)args[1]);
+        return "OK";
+      }
+    });
+    assertTrue(JsUtils.hasProperty(window, "foo"));
+    assertEquals("OK", JsUtils.jsni("foo", "bar", 3.5));
+  }
+
   public void testVal_issue98() {
     $(e).html(""
       +"<input type='text' id='inputText' name='inputText' value='original' />"