rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
branchclosure
changeset 1590 8eeb682738f0
parent 1589 b66d6e7756bb
child 1591 6a5237f059d5
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Fri May 23 11:44:38 2014 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Fri May 23 12:39:26 2014 +0200
     1.3 @@ -490,6 +490,15 @@
     1.4                  + "  global.bck2brwsr = function() {\n"
     1.5                  + "    var args = Array.prototype.slice.apply(arguments);\n"
     1.6                  + "    var resources = {};\n"
     1.7 +                + "    function loadExtension(url) {\n"
     1.8 +                + "      var xhr = new XMLHttpRequest();\n"
     1.9 +                + "      xhr.open('GET', url, false);\n"
    1.10 +                + "      xhr.send();\n"
    1.11 +                + "      var script = document.createElement('script');\n"
    1.12 +                + "      script.type = 'text/javascript';\n"
    1.13 +                + "      script.text = xhr.responseText;\n"
    1.14 +                + "      document.getElementsByTagName('head')[0].appendChild(script);\n"
    1.15 +                + "    }\n"
    1.16                  + "    function registerResource(n, a64) {\n"
    1.17                  + "      var str = atob(a64);\n"
    1.18                  + "      var arr = [];\n"
    1.19 @@ -525,14 +534,17 @@
    1.20                  + "      for (var i = 0; i < args.length; i++) {\n"
    1.21                  + "        var at = args[i];\n"
    1.22                  + "        var ret;\n"
    1.23 -                + "        if (typeof at === 'function') ret = at(name, skip);\n"
    1.24 +                + "        if (typeof at === 'string' && at.substring(at.length - 3) === '.js') {\n"
    1.25 +                + "          loadExtension(at);\n"
    1.26 +                + "          args[i] = null;\n"
    1.27 +                + "        } else if (typeof at === 'function') ret = at(name, skip);\n"
    1.28                  + "        else {\n"
    1.29                  + "          var cp = vm['org_apidesign_vm4brwsr_ClassPath'];\n"
    1.30                  + "          if (!cp) throw 'Core Java library not registered. Cannot load from ' + at;\n"
    1.31                  + "          ret = cp(false).\n"
    1.32                  + "            loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2II(name, args, i, skip);\n"
    1.33                  + "        }\n"
    1.34 -                + "        if (ret !== null) return ret;\n"
    1.35 +                + "        if (ret) return ret;\n"
    1.36                  + "      }\n"
    1.37                  + "      while (knownExtensions < extensions.length) {\n"
    1.38                  + "        vm['registerResource'] = registerResource;\n"