1.1 --- a/ko-fx/pom.xml Wed May 29 19:36:31 2013 +0200
1.2 +++ b/ko-fx/pom.xml Mon Jun 17 11:26:51 2013 +0200
1.3 @@ -68,5 +68,11 @@
1.4 <version>${bck2brwsr.launcher.version}</version>
1.5 <scope>test</scope>
1.6 </dependency>
1.7 + <dependency>
1.8 + <groupId>org.apidesign.bck2brwsr</groupId>
1.9 + <artifactId>core</artifactId>
1.10 + <version>0.7.2</version>
1.11 + <type>jar</type>
1.12 + </dependency>
1.13 </dependencies>
1.14 </project>
2.1 --- a/ko-fx/src/main/java/org/apidesign/html/kofx/Console.java Wed May 29 19:36:31 2013 +0200
2.2 +++ b/ko-fx/src/main/java/org/apidesign/html/kofx/Console.java Mon Jun 17 11:26:51 2013 +0200
2.3 @@ -23,6 +23,7 @@
2.4 import java.util.logging.Logger;
2.5 import javafx.scene.web.WebEngine;
2.6 import netscape.javascript.JSObject;
2.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.8
2.9 /** This is an implementation package - just
2.10 * include its JAR on classpath and use official {@link Context} API
3.1 --- a/ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java Wed May 29 19:36:31 2013 +0200
3.2 +++ b/ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java Mon Jun 17 11:26:51 2013 +0200
3.3 @@ -29,6 +29,7 @@
3.4 import javafx.scene.web.WebEngine;
3.5 import net.java.html.json.Model;
3.6 import netscape.javascript.JSObject;
3.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
3.8 import org.apidesign.html.json.spi.FunctionBinding;
3.9 import org.apidesign.html.json.spi.PropertyBinding;
3.10
3.11 @@ -82,14 +83,9 @@
3.12 static void bind(
3.13 Object bindings, Object model, PropertyBinding pb, boolean primitive, boolean array
3.14 ) {
3.15 - WebEngine e = web();
3.16 - if (e == null) {
3.17 - return;
3.18 - }
3.19 -
3.20 final String prop = pb.getPropertyName();
3.21 try {
3.22 - InvokeJS.KObject.call("bind", bindings, pb, prop, "getValue", pb.isReadOnly() ? null : "setValue", primitive, array);
3.23 + InvokeJS.bind(bindings, pb, prop, "getValue", pb.isReadOnly() ? null : "setValue", primitive, array);
3.24
3.25 ((JSObject)bindings).setMember("ko-fx.model", model);
3.26 LOG.log(Level.FINE, "binding defined for {0}: {1}", new Object[]{prop, ((JSObject)bindings).getMember(prop)});
3.27 @@ -98,13 +94,9 @@
3.28 }
3.29 }
3.30 static void expose(Object bindings, FunctionBinding f) {
3.31 - WebEngine e = web();
3.32 - if (e == null) {
3.33 - return;
3.34 - }
3.35 final String prop = f.getFunctionName();
3.36 try {
3.37 - InvokeJS.KObject.call("expose", bindings, f, prop, "call");
3.38 + InvokeJS.expose(bindings, f, prop, "call");
3.39 } catch (Throwable ex) {
3.40 LOG.log(Level.SEVERE, "Cannot define binding for " + prop + " in model " + f, ex);
3.41 }
3.42 @@ -121,7 +113,6 @@
3.43 return (WebEngine) System.getProperties().get("webEngine");
3.44 }
3.45
3.46 -
3.47 private static final class InvokeJS {
3.48 static final JSObject KObject;
3.49
3.50 @@ -159,14 +150,20 @@
3.51 + " scope.KObject.array= function() {"
3.52 + " return Array.prototype.slice.call(arguments);"
3.53 + " };"
3.54 - + " scope.KObject.expose = function(bindings, model, prop, sig) {"
3.55 - + " bindings[prop] = function(data, ev) {"
3.56 - // + " console.log(\" callback on prop: \" + prop);"
3.57 - + " model[sig](data, ev);"
3.58 - + " };"
3.59 - + " };"
3.60 - + " scope.KObject.bind = function(bindings, model, prop, getter, setter, primitive, array) {"
3.61 - + " var bnd = {"
3.62 + + "})(window); window.KObject");
3.63 + }
3.64 +
3.65 + @JavaScriptBody(args = { "bindings", "model", "prop", "sig" }, body =
3.66 + " bindings[prop] = function(data, ev) {"
3.67 + // + " console.log(\" callback on prop: \" + prop);"
3.68 + + " model[sig](data, ev);"
3.69 + + " };"
3.70 + )
3.71 + static native Object expose(Object bindings, Object model, String prop, String sig);
3.72 +
3.73 +
3.74 + @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter", "primitive", "array" }, body =
3.75 + " var bnd = {"
3.76 + " read: function() {"
3.77 + " try {"
3.78 + " var v = model[getter]();"
3.79 @@ -194,9 +191,7 @@
3.80 + " };"
3.81 + " };"
3.82 + " bindings[prop] = ko.computed(bnd);"
3.83 - + " };"
3.84 - + "})(window); window.KObject");
3.85 - }
3.86 -
3.87 + )
3.88 + static native void bind(Object binding, Object model, String prop, String getter, String setter, boolean primitive, boolean array);
3.89 }
3.90 }
4.1 --- a/ko-fx/src/main/java/org/apidesign/html/kofx/LoadJSON.java Wed May 29 19:36:31 2013 +0200
4.2 +++ b/ko-fx/src/main/java/org/apidesign/html/kofx/LoadJSON.java Mon Jun 17 11:26:51 2013 +0200
4.3 @@ -38,6 +38,7 @@
4.4 import javafx.application.Platform;
4.5 import javafx.scene.web.WebEngine;
4.6 import netscape.javascript.JSObject;
4.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
4.8 import org.apidesign.html.json.spi.JSONCall;
4.9 import org.json.JSONArray;
4.10 import org.json.JSONException;
4.11 @@ -216,18 +217,17 @@
4.12 throw new IOException(ex);
4.13 }
4.14 }
4.15 +
4.16 + @JavaScriptBody(args = { }, body =
4.17 + "var h;"
4.18 + + "if (!!window && !!window.location && !!window.location.href)\n"
4.19 + + " h = window.location.href;\n"
4.20 + + "else "
4.21 + + " h = null;"
4.22 + + "return h;\n"
4.23 + )
4.24 + private static native String findBaseURL();
4.25
4.26 - private static String findBaseURL() {
4.27 - WebEngine eng = (WebEngine) System.getProperties().get("webEngine");
4.28 - return (String) eng.executeScript(
4.29 - "var h;"
4.30 - + "if (!!window && !!window.location && !!window.location.href)\n"
4.31 - + " h = window.location.href;\n"
4.32 - + "else "
4.33 - + " h = null;"
4.34 - + "h\n");
4.35 - }
4.36 -
4.37 private static boolean isDefined(Object val) {
4.38 return !"undefined".equals(val);
4.39 }