# HG changeset patch # User Jaroslav Tulach # Date 1358335550 -3600 # Node ID d6b1f996c0d86b3d008f5b009f23577bd5f301b1 # Parent 443eb0f21a0a0824a2ecf9568420dda71275fd44 Serve byte code as JSON. Initialize the fields in JavaScript. diff -r 443eb0f21a0a -r d6b1f996c0d8 launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java --- a/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java Wed Jan 16 11:36:19 2013 +0100 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java Wed Jan 16 12:25:50 2013 +0100 @@ -5,10 +5,13 @@ package org.apidesign.bck2brwsr.dew; import java.io.ByteArrayInputStream; +import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.util.List; import java.util.logging.Logger; import javax.tools.Diagnostic; @@ -26,33 +29,7 @@ * @author phrebejk */ public class Dew extends HttpHandler { - private String html = "\n" - + " \n" - + "
\n" - + "\n" - + "\n" - + "\n" - + " \n" - + " \n" - + "\n"; - private String java = "package bck2brwsr.demo;\n" - + "import org.apidesign.bck2brwsr.htmlpage.api.*;\n" - + "@Page(xhtml=\"index.html\", className=\"Index\")\n" - + "class X {\n" - + " @OnClick(id=\"btn\") static void clcs() {\n" - + " Index.BTN.setDisabled(true);\n" - + " }\n" - + "}\n"; + private String html = ""; private Compile data; @Override @@ -62,13 +39,14 @@ InputStream is = request.getInputStream(); JSONTokener tok = new JSONTokener(new InputStreamReader(is)); JSONObject obj = new JSONObject(tok); - html = obj.getString("html"); - java = obj.getString("java"); + String tmpHtml = obj.getString("html"); + String tmpJava = obj.getString("java"); - Compile res = Compile.create(html, java); + Compile res = Compile.create(tmpHtml, tmpJava); List> err = res.getErrors(); if (err.isEmpty()) { data = res; + html = tmpHtml; response.getOutputStream().write("[]".getBytes()); response.setStatus(HttpStatus.OK_200); } else { @@ -94,16 +72,34 @@ r = r.substring(1); } if (r.startsWith("classes/")) { - if (data == null) { - //data = Compile.create(html, java); + r = r.substring(8); + byte[] arr = data == null ? null : data.get(r); + if (arr == null) { + response.setError(); + response.setDetailMessage("No data for " + r + " yet!"); + return; } - r = r.substring(8); - byte[] is = data == null ? null : data.get(r); - if (is == null) { - is = new byte[0]; + try (Writer w = response.getWriter()) { + response.setContentType("text/javascript"); + w.append("["); + for (int i = 0; i < arr.length; i++) { + int b = arr[i]; + if (b == -1) { + break; + } + if (i > 0) { + w.append(", "); + } + if (i % 20 == 0) { + w.write("\n"); + } + if (b > 127) { + b = b - 256; + } + w.append(Integer.toString(b)); + } + w.append("\n]"); } - OutputStream os = response.getOutputStream(); - copyStream(new ByteArrayInputStream(is), os, request.getRequestURL().toString() ); return; } diff -r 443eb0f21a0a -r d6b1f996c0d8 launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Wed Jan 16 11:36:19 2013 +0100 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Wed Jan 16 12:25:50 2013 +0100 @@ -140,7 +140,6 @@ "org/apidesign/bck2brwsr/launcher/console.xhtml", "org.apidesign.bck2brwsr.launcher.Console", "welcome", "false" ), "/console"); - conf.addHttpHandler(new Dew(), "/dew/"); conf.addHttpHandler(new VM(resources), "/bck2brwsr.js"); conf.addHttpHandler(new VMInit(), "/vm.js"); conf.addHttpHandler(new Classes(resources), "/classes/"); diff -r 443eb0f21a0a -r d6b1f996c0d8 launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js Wed Jan 16 11:36:19 2013 +0100 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js Wed Jan 16 12:25:50 2013 +0100 @@ -71,6 +71,51 @@ }]); function DevCtrl( $scope, $http ) { + var templateHtml = "\n" + + " \n" + + "
\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + "\n"; + var templateJava = "package bck2brwsr.demo;\n" + + "import org.apidesign.bck2brwsr.htmlpage.api.*;\n" + + "@Page(xhtml=\"index.html\", className=\"Index\")\n" + + "class YourFirstHTML5PageInRealLanguage {\n" + + " @OnClick(id=\"btn\") static void clcs() {\n" + + " Index.BTN.setDisabled(true);\n" + + " }\n" + + "}\n"; + $scope.reload= function() { var frame = document.getElementById("result"); @@ -88,14 +133,14 @@ }; $scope.tab = "html"; - $scope.html= ""; - $scope.java = ""; + $scope.html= templateHtml; + $scope.java = templateJava; $scope.tabActive = function( tab ) { return tab === $scope.tab ? "active" : ""; }; // $scope.$watch( "html", htmlChange ); - + $scope.post(); }