diff -r 023cda5b8b0b -r 859804c78010 rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Wed Mar 13 16:20:03 2013 +0100 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Thu Mar 14 09:22:28 2013 +0100 @@ -91,6 +91,10 @@ public void addClassLoader(ClassLoader url) { this.loaders.add(url); } + + ClassLoader[] loaders() { + return loaders.toArray(new ClassLoader[loaders.size()]); + } public void showURL(String startpage) throws IOException { if (!startpage.startsWith("/")) { @@ -144,7 +148,7 @@ final ServerConfiguration conf = s.getServerConfiguration(); if (addClasses) { - conf.addHttpHandler(new VM(resources), "/bck2brwsr.js"); + conf.addHttpHandler(new VM(this, resources), "/bck2brwsr.js"); conf.addHttpHandler(new Classes(resources), "/classes/"); } return s; @@ -436,6 +440,27 @@ } } + void generateBck2BrwsrJS(StringBuilder sb, Bck2Brwsr.Resources loader) throws IOException { + Bck2Brwsr.generate(sb, loader); + sb.append( + "(function WrapperVM(global) {" + + " function ldCls(res) {\n" + + " var request = new XMLHttpRequest();\n" + + " request.open('GET', '/classes/' + res, false);\n" + + " request.send();\n" + + " if (request.status !== 200) return null;\n" + + " var arr = eval('(' + request.responseText + ')');\n" + + " return arr;\n" + + " }\n" + + " var prevvm = global.bck2brwsr;\n" + + " global.bck2brwsr = function() {\n" + + " var args = Array.prototype.slice.apply(arguments);\n" + + " args.unshift(ldCls);\n" + + " return prevvm.apply(null, args);\n" + + " };\n" + + "})(this);\n"); + } + private class Res implements Bck2Brwsr.Resources { @Override public InputStream get(String resource) throws IOException { @@ -498,27 +523,10 @@ private static class VM extends HttpHandler { private final String bck2brwsr; - public VM(Res loader) throws IOException { + public VM(Bck2BrwsrLauncher l, Res loader) throws IOException { StringBuilder sb = new StringBuilder(); - Bck2Brwsr.generate(sb, loader); - sb.append( - "(function WrapperVM(global) {" - + " function ldCls(res) {\n" - + " var request = new XMLHttpRequest();\n" - + " request.open('GET', '/classes/' + res, false);\n" - + " request.send();\n" - + " if (request.status !== 200) return null;\n" - + " var arr = eval('(' + request.responseText + ')');\n" - + " return arr;\n" - + " }\n" - + " var prevvm = global.bck2brwsr;\n" - + " global.bck2brwsr = function() {\n" - + " var args = Array.prototype.slice.apply(arguments);\n" - + " args.unshift(ldCls);\n" - + " return prevvm.apply(null, args);\n" - + " };\n" - + "})(this);\n" - ); + l.generateBck2BrwsrJS( + sb, loader); this.bck2brwsr = sb.toString(); }