First steps in rewritting the global reference to classloader based code classloader
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 17 Jun 2013 11:26:51 +0200
branchclassloader
changeset 118e2b99e2f3e4d
parent 117 605c51d32380
child 119 8c851674ba1b
First steps in rewritting the global reference to classloader based code
ko-fx/pom.xml
ko-fx/src/main/java/org/apidesign/html/kofx/Console.java
ko-fx/src/main/java/org/apidesign/html/kofx/Knockout.java
ko-fx/src/main/java/org/apidesign/html/kofx/LoadJSON.java
     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      }