Errors courtesy Jarda.
1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java Wed Jan 16 12:44:54 2013 +0100
1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java Mon Jan 21 22:10:08 2013 +0100
1.3 @@ -24,6 +24,8 @@
1.4 import java.io.OutputStream;
1.5 import java.io.Writer;
1.6 import java.util.List;
1.7 +import java.util.Locale;
1.8 +import java.util.Locale;
1.9 import java.util.logging.Logger;
1.10 import javax.tools.Diagnostic;
1.11 import javax.tools.JavaFileObject;
1.12 @@ -33,7 +35,9 @@
1.13 import org.glassfish.grizzly.http.server.Request;
1.14 import org.glassfish.grizzly.http.server.Response;
1.15 import org.glassfish.grizzly.http.util.HttpStatus;
1.16 +import org.json.JSONArray;
1.17 import org.json.JSONObject;
1.18 +import org.json.JSONStringer;
1.19 import org.json.JSONTokener;
1.20
1.21 /**
1.22 @@ -62,7 +66,19 @@
1.23 response.getOutputStream().write("[]".getBytes());
1.24 response.setStatus(HttpStatus.OK_200);
1.25 } else {
1.26 - response.getOutputStream().write(("[errors:'" + err + "']").getBytes());
1.27 +
1.28 + JSONArray errors = new JSONArray();
1.29 +
1.30 + for (Diagnostic<? extends JavaFileObject> d : err) {
1.31 + JSONObject e = new JSONObject();
1.32 + e.put("col", d.getColumnNumber());
1.33 + e.put("line", d.getLineNumber());
1.34 + e.put("kind", d.getKind().toString());
1.35 + e.put("msg", d.getMessage(Locale.ENGLISH));
1.36 + errors.put(e);
1.37 + }
1.38 +
1.39 + errors.write(response.getWriter());
1.40 response.setStatus(HttpStatus.PRECONDITION_FAILED_412);
1.41 }
1.42
2.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/css/app.css Wed Jan 16 12:44:54 2013 +0100
2.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/css/app.css Mon Jan 21 22:10:08 2013 +0100
2.3 @@ -15,6 +15,11 @@
2.4 overflow-x: auto;
2.5 }
2.6
2.7 +.error-hover:hover {
2.8 + text-decoration: underline;
2.9 + cursor: pointer;
2.10 +}
2.11 +
2.12 .ic-html5 {
2.13 display: inline-block;
2.14 height: 20px;
3.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/index.html Wed Jan 16 12:44:54 2013 +0100
3.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/index.html Mon Jan 21 22:10:08 2013 +0100
3.3 @@ -14,33 +14,69 @@
3.4 <link rel="stylesheet" href="css/app.css"/>
3.5 </head>
3.6 <body>
3.7 - <div class="container">
3.8 - <div class="breadcrumb"><h4 class="text-info">Java and HTML5 <small>- Together at Last!</small></h4></div>
3.9 +
3.10 + <div class="navbar navbar-fixed-top" style="width: 100%">
3.11 + <div class="navbar-inner" style="padding-left: 12px; padding-right: 12px;">
3.12 + <!-- a class="brand" style="font-size: 100%"><span class="text-info"><b>Java and HTML5</b></span><small>- Together at Last!</small></a-->
3.13 + <form class="navbar-form pull-right">
3.14 + <!-- select class="span2"></select -->
3.15 + <button ng-click="post()" class="btn btn-warning">Rebuild</button>
3.16 + </form>
3.17 + <!-- ul class="nav">
3.18 + <li><select class="btn-small" type="text"></select></li>
3.19 + </ul -->
3.20 + <!-- form class="form form-horizontal pull-right">
3.21 + <button class="btn btn-warning btn-small pull-right top" ng-click="post()">Rebuild</button>
3.22 + </form -->
3.23 + <!-- ul class="nav pull-right">
3.24 +
3.25 + </ul-->
3.26 + </div>
3.27 + </div>
3.28 +
3.29 + <div class="container-fluid">
3.30 +
3.31 + <div style="height: 4em;"> </div>
3.32
3.33 - <ul class="nav nav-tabs">
3.34 - <li ng-class="tabActive('html')" ng-click="tab='html'"><a href="#"><i class="ic-html5"></i> HTML5</a></li>
3.35 - <li ng-class="tabActive('java')" ng-click="tab='java'"><a href="#"><i class="ic-java"></i> Java</a></li>
3.36 - </ul>
3.37 + <div class="row-fluid">
3.38 + <div class="span6" style="margin-bottom: 10px;">
3.39 + <table class="table table-condensed" style="margin-bottom: 2px">
3.40 + <tr><td><i class="ic-html5"></i> HTML5</td></tr>
3.41 + </table>
3.42 + <div>
3.43 + <textarea ui-codemirror='{ lineNumbers : true, mode : "xml", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="html"></textarea>
3.44 + <div class="alert alert-error" ng-show="doc.modelError">
3.45 + <small>{{doc.modelError.toString()}}</small>
3.46 + </div>
3.47 + </div>
3.48 + </div>
3.49 +
3.50 + <div class="span6">
3.51 + <table class="table table-condensed" style="margin-bottom: 2px">
3.52 + <tr><td><i class="ic-java"></i> Java</td></tr>
3.53 + </table>
3.54 + <div>
3.55 + <textarea id="editorJava" ui-codemirror='{ lineNumbers : true, mode : "text/x-java", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="java"></textarea>
3.56 + <div class="alert alert-error" ng-show="doc.modelError">
3.57 + <small>{{doc.modelError.toString()}}</small>
3.58 + </div>
3.59 + </div>
3.60 + </div>
3.61
3.62 -
3.63 - <div ng-switch on="tab">
3.64 - <div ng-switch-when="html">
3.65 - <textarea ui-codemirror='{ lineNumbers : true, mode : "xml", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="$parent.html"></textarea>
3.66 - <div class="alert alert-error" ng-show="doc.modelError">
3.67 - <small>{{doc.modelError.toString()}}</small>
3.68 - </div>
3.69 </div>
3.70 - <div ng-switch-when="java">
3.71 - <textarea ui-codemirror='{ lineNumbers : true, mode : "text/x-java", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="$parent.java"></textarea>
3.72 - <div class="alert alert-error" ng-show="doc.modelError">
3.73 - <small>{{doc.modelError.toString()}}</small>
3.74 - </div>
3.75 - </div>
3.76 - </div>
3.77 +
3.78 + <table class="table table-condensed">
3.79 + <tr ng-click="gotoError(e.line, e.col)" ng-repeat="e in errors" ng-class="errorClass(e.kind)">
3.80 + <td style="text-align: right">{{e.line}}</td>
3.81 + <td>:</td>
3.82 + <td style="text-align: left">{{e.col}}</td>
3.83 + <td width="100%" class="text-error error-hover">{{e.msg}} <i class="icon-play"/></td>
3.84 + </tr>
3.85 + </table>
3.86 +
3.87
3.88 <div> </div>
3.89
3.90 - <button class="btn btn-warning pull-right" ng-click="post()">Rebuild</button>
3.91 <ul class="nav nav-tabs">
3.92 <li ng-class="'active'"><a href="#">Result</a></li>
3.93 </ul>
4.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js Wed Jan 16 12:44:54 2013 +0100
4.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js Mon Jan 21 22:10:08 2013 +0100
4.3 @@ -29,6 +29,7 @@
4.4
4.5 deferCodeMirror = function() {
4.6 codeMirror = CodeMirror.fromTextArea(elm[0], opts);
4.7 + elm[0].codeMirror = codeMirror;
4.8 // codeMirror.on("change", onChange(opts.onChange));
4.9 codeMirror.on("change", onChange);
4.10
4.11 @@ -119,19 +120,39 @@
4.12 + "}\n";
4.13
4.14
4.15 - $scope.reload= function() {
4.16 + $scope.reload = function() {
4.17 + $scope.errors = null;
4.18 var frame = document.getElementById("result");
4.19 frame.src = "result.html";
4.20 frame.contentDocument.location.reload(true);
4.21 frame.contentWindow.location.reload();
4.22 };
4.23
4.24 + $scope.fail = function( data ) {
4.25 + $scope.errors = eval( data );
4.26 + };
4.27 +
4.28 $scope.post = function(html, java) {
4.29 return $http({url: ".",
4.30 method: "POST",
4.31 //headers: this.headers,
4.32 data: { html : $scope.html, java : $scope.java}
4.33 - }).success( $scope.reload );
4.34 + }).success( $scope.reload ).error( $scope.fail );
4.35 + };
4.36 +
4.37 + $scope.errorClass = function( kind ) {
4.38 + switch( kind ) {
4.39 + case "ERROR" :
4.40 + return "error";
4.41 + default :
4.42 + return "warning";
4.43 + }
4.44 + };
4.45 +
4.46 + $scope.gotoError = function( line, col ) {
4.47 + var editor = document.getElementById("editorJava").codeMirror;
4.48 + editor.setCursor({ line: line - 1, ch : col });
4.49 + editor.focus();
4.50 };
4.51
4.52 $scope.tab = "html";