jaroslav@141
|
1 |
<?xml version="1.0" encoding="UTF-8"?>
|
jaroslav@141
|
2 |
<!--
|
jaroslav@142
|
3 |
|
jaroslav@142
|
4 |
Back 2 Browser Bytecode Translator
|
jaroslav@142
|
5 |
Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
|
jaroslav@142
|
6 |
|
jaroslav@142
|
7 |
This program is free software: you can redistribute it and/or modify
|
jaroslav@142
|
8 |
it under the terms of the GNU General Public License as published by
|
jaroslav@142
|
9 |
the Free Software Foundation, version 2 of the License.
|
jaroslav@142
|
10 |
|
jaroslav@142
|
11 |
This program is distributed in the hope that it will be useful,
|
jaroslav@142
|
12 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
jaroslav@142
|
13 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
jaroslav@142
|
14 |
GNU General Public License for more details.
|
jaroslav@142
|
15 |
|
jaroslav@142
|
16 |
You should have received a copy of the GNU General Public License
|
jaroslav@142
|
17 |
along with this program. Look for COPYING file in the top folder.
|
jaroslav@142
|
18 |
If not, see http://opensource.org/licenses/GPL-2.0.
|
jaroslav@142
|
19 |
|
jaroslav@141
|
20 |
-->
|
jaroslav@141
|
21 |
<!DOCTYPE html>
|
jaroslav@141
|
22 |
<html xmlns="http://www.w3.org/1999/xhtml">
|
jaroslav@141
|
23 |
<head>
|
jaroslav@141
|
24 |
<title>Simple Calculator in HTML5 and Java</title>
|
jtulach@197
|
25 |
|
jtulach@197
|
26 |
<style type="text/css">
|
jtulach@197
|
27 |
body {color: #ffffff; background-color: #121e31; font-family: Monospaced}
|
jtulach@197
|
28 |
pre {color: #ffffff; background-color: #121e31; font-family: Monospaced}
|
jtulach@197
|
29 |
table {color: #ffffff; background-color: #121e31; font-family: Monospaced}
|
jtulach@197
|
30 |
.string {color: #e2ce00}
|
jaroslav@198
|
31 |
a {color: #e2ce00}
|
jtulach@197
|
32 |
.ST1 {color: #0000cc; font-family: Monospaced; font-weight: bold}
|
jtulach@197
|
33 |
.ST0 {color: #0000ff}
|
jtulach@197
|
34 |
.comment {color: #428bdd}
|
jtulach@197
|
35 |
.keyword-directive {color: #f8bb00}
|
jtulach@197
|
36 |
.tag {color: #f8bb00}
|
jtulach@197
|
37 |
.ST0 {color: #628fb5; background-color: #1b3450}
|
jtulach@197
|
38 |
.sgml-comment {color: #808080}
|
jtulach@197
|
39 |
.value {color: #99006b}
|
jtulach@197
|
40 |
.argument {color: #007c00}
|
jtulach@197
|
41 |
.sgml-declaration {color: #bf9221}
|
jtulach@197
|
42 |
</style>
|
jtulach@197
|
43 |
</head>
|
jaroslav@141
|
44 |
<body>
|
jaroslav@198
|
45 |
<h1>Java and HTML5 - Together at Last!</h1>
|
jaroslav@141
|
46 |
<table border="0" cellspacing="2">
|
jaroslav@141
|
47 |
<tbody>
|
jaroslav@141
|
48 |
<tr>
|
jtulach@197
|
49 |
<td colspan="4"><input id="display" value="0"
|
jtulach@197
|
50 |
style="text-align: right"/>
|
jtulach@197
|
51 |
</td>
|
jaroslav@141
|
52 |
</tr>
|
jaroslav@141
|
53 |
<tr>
|
jaroslav@141
|
54 |
<td><button id="n1">1</button></td>
|
jaroslav@141
|
55 |
<td><button id="n2">2</button></td>
|
jaroslav@141
|
56 |
<td><button id="n3">3</button></td>
|
jaroslav@141
|
57 |
<td><button id="plus">+</button></td>
|
jaroslav@141
|
58 |
</tr>
|
jaroslav@141
|
59 |
<tr>
|
jaroslav@141
|
60 |
<td><button id="n4">4</button></td>
|
jaroslav@141
|
61 |
<td><button id="n5">5</button></td>
|
jaroslav@141
|
62 |
<td><button id="n6">6</button></td>
|
jaroslav@141
|
63 |
<td><button id="minus">-</button></td>
|
jaroslav@141
|
64 |
</tr>
|
jaroslav@141
|
65 |
<tr>
|
jaroslav@141
|
66 |
<td><button id="n7">7</button></td>
|
jaroslav@141
|
67 |
<td><button id="n8">8</button></td>
|
jaroslav@141
|
68 |
<td><button id="n9">9</button></td>
|
jaroslav@141
|
69 |
<td><button id="mul">*</button></td>
|
jaroslav@141
|
70 |
</tr>
|
jaroslav@141
|
71 |
<tr>
|
jaroslav@141
|
72 |
<td><button id="clear">C</button></td>
|
jaroslav@141
|
73 |
<td><button id="n0">0</button></td>
|
jaroslav@141
|
74 |
<td><button id="result">=</button></td>
|
jaroslav@141
|
75 |
<td><button id="div">/</button></td>
|
jaroslav@141
|
76 |
</tr>
|
jaroslav@141
|
77 |
</tbody>
|
jaroslav@141
|
78 |
</table>
|
jaroslav@141
|
79 |
|
jaroslav@141
|
80 |
<script src="bootjava.js"/>
|
jtulach@197
|
81 |
|
jtulach@197
|
82 |
<hr/>
|
jaroslav@198
|
83 |
<pre>
|
jaroslav@198
|
84 |
<span class="keyword-directive">package</span> org.apidesign.bck2brwsr.mavenhtml;
|
jaroslav@198
|
85 |
|
jaroslav@198
|
86 |
<span class="keyword-directive">import</span> org.apidesign.bck2brwsr.htmlpage.api.OnClick;
|
jaroslav@198
|
87 |
<span class="keyword-directive">import</span> org.apidesign.bck2brwsr.htmlpage.api.Page;
|
jaroslav@198
|
88 |
|
jaroslav@198
|
89 |
<span class="comment">/**</span> <span class="comment">HTML5</span><span class="comment"> & </span><span class="comment">Java</span> <span class="comment">demo</span> <span class="comment">showing</span> <span class="comment">the</span> <span class="comment">power</span> <span class="comment">of</span> <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">annotation processors</a>
|
jaroslav@198
|
90 |
<span class="comment"> * </span><span class="comment">as</span> <span class="comment">well</span> <span class="comment">as</span> <span class="comment">other</span> <span class="comment">goodies</span><span class="comment">, including type-safe association between</span>
|
jaroslav@198
|
91 |
<span class="comment"> * </span><span class="comment">an XHTML page and Java.</span>
|
jaroslav@198
|
92 |
<span class="comment"> * </span>
|
jaroslav@198
|
93 |
<span class="comment"> * </span><span class="ST1">@author</span> <span class="comment">Jaroslav</span> <span class="comment">Tulach</span> <span class="ST0"><jaroslav.tulach@apidesign.org></span>
|
jaroslav@198
|
94 |
<span class="comment">*/</span>
|
jaroslav@198
|
95 |
@Page(xhtml=<span class="string">"</span><span class="string">Calculator.xhtml</span><span class="string">"</span>)
|
jaroslav@198
|
96 |
<span class="keyword-directive">public</span> <span class="keyword-directive">class</span> App {
|
jaroslav@198
|
97 |
<span class="keyword-directive">private</span> <span class="keyword-directive">static</span> <span class="keyword-directive">double</span> memory;
|
jaroslav@198
|
98 |
<span class="keyword-directive">private</span> <span class="keyword-directive">static</span> String operation;
|
jaroslav@198
|
99 |
|
jaroslav@198
|
100 |
@OnClick(id=<span class="string">"</span><span class="string">clear</span><span class="string">"</span>)
|
jaroslav@198
|
101 |
<span class="keyword-directive">static</span> <span class="keyword-directive">void</span> clear() {
|
jaroslav@198
|
102 |
memory = <span class="number">0</span>;
|
jaroslav@198
|
103 |
operation = <span class="keyword-directive">null</span>;
|
jaroslav@198
|
104 |
Calculator.DISPLAY.setValue(<span class="string">"</span><span class="string">0</span><span class="string">"</span>);
|
jaroslav@198
|
105 |
}
|
jaroslav@198
|
106 |
|
jaroslav@198
|
107 |
@OnClick(id= { <span class="string">"</span><span class="string">plus</span><span class="string">"</span>, <span class="string">"</span><span class="string">minus</span><span class="string">"</span>, <span class="string">"</span><span class="string">mul</span><span class="string">"</span>, <span class="string">"</span><span class="string">div</span><span class="string">"</span> })
|
jaroslav@198
|
108 |
<span class="keyword-directive">static</span> <span class="keyword-directive">void</span> applyOp(String op) {
|
jaroslav@198
|
109 |
memory = getValue();
|
jaroslav@198
|
110 |
operation = op;
|
jaroslav@198
|
111 |
Calculator.DISPLAY.setValue(<span class="string">"</span><span class="string">0</span><span class="string">"</span>);
|
jaroslav@198
|
112 |
}
|
jaroslav@198
|
113 |
|
jaroslav@198
|
114 |
@OnClick(id=<span class="string">"</span><span class="string">result</span><span class="string">"</span>)
|
jaroslav@198
|
115 |
<span class="keyword-directive">static</span> <span class="keyword-directive">void</span> computeTheValue() {
|
jaroslav@198
|
116 |
<span class="keyword-directive">switch</span> (operation) {
|
jaroslav@198
|
117 |
<span class="keyword-directive">case</span> <span class="string">"</span><span class="string">plus</span><span class="string">"</span>: setValue(memory + getValue()); <span class="keyword-directive">break</span>;
|
jaroslav@198
|
118 |
<span class="keyword-directive">case</span> <span class="string">"</span><span class="string">minus</span><span class="string">"</span>: setValue(memory - getValue()); <span class="keyword-directive">break</span>;
|
jaroslav@198
|
119 |
<span class="keyword-directive">case</span> <span class="string">"</span><span class="string">mul</span><span class="string">"</span>: setValue(memory * getValue()); <span class="keyword-directive">break</span>;
|
jaroslav@198
|
120 |
<span class="keyword-directive">case</span> <span class="string">"</span><span class="string">div</span><span class="string">"</span>: setValue(memory / getValue()); <span class="keyword-directive">break</span>;
|
jaroslav@198
|
121 |
<span class="keyword-directive">default</span>: <span class="keyword-directive">throw</span> <span class="keyword-directive">new</span> IllegalStateException(operation);
|
jaroslav@198
|
122 |
}
|
jaroslav@198
|
123 |
}
|
jaroslav@198
|
124 |
|
jaroslav@198
|
125 |
@OnClick(id={<span class="string">"</span><span class="string">n0</span><span class="string">"</span>, <span class="string">"</span><span class="string">n1</span><span class="string">"</span>, <span class="string">"</span><span class="string">n2</span><span class="string">"</span>, <span class="string">"</span><span class="string">n3</span><span class="string">"</span>, <span class="string">"</span><span class="string">n4</span><span class="string">"</span>, <span class="string">"</span><span class="string">n5</span><span class="string">"</span>, <span class="string">"</span><span class="string">n6</span><span class="string">"</span>, <span class="string">"</span><span class="string">n7</span><span class="string">"</span>, <span class="string">"</span><span class="string">n8</span><span class="string">"</span>, <span class="string">"</span><span class="string">n9</span><span class="string">"</span>})
|
jaroslav@198
|
126 |
<span class="keyword-directive">static</span> <span class="keyword-directive">void</span> addDigit(String digit) {
|
jaroslav@198
|
127 |
digit = digit.substring(<span class="number">1</span>);
|
jaroslav@198
|
128 |
String v = Calculator.DISPLAY.getValue();
|
jaroslav@198
|
129 |
<span class="keyword-directive">if</span> (getValue() == <span class="number">0.0</span>) {
|
jaroslav@198
|
130 |
Calculator.DISPLAY.setValue(digit);
|
jaroslav@198
|
131 |
} <span class="keyword-directive">else</span> {
|
jaroslav@198
|
132 |
Calculator.DISPLAY.setValue(v + digit);
|
jaroslav@198
|
133 |
}
|
jaroslav@198
|
134 |
}
|
jaroslav@198
|
135 |
|
jaroslav@198
|
136 |
<span class="keyword-directive">private</span> <span class="keyword-directive">static</span> <span class="keyword-directive">void</span> setValue(<span class="keyword-directive">double</span> v) {
|
jaroslav@198
|
137 |
StringBuilder sb = <span class="keyword-directive">new</span> StringBuilder();
|
jaroslav@198
|
138 |
sb.append(v);
|
jaroslav@198
|
139 |
Calculator.DISPLAY.setValue(sb.toString());
|
jaroslav@198
|
140 |
}
|
jaroslav@198
|
141 |
|
jaroslav@198
|
142 |
<span class="keyword-directive">private</span> <span class="keyword-directive">static</span> <span class="keyword-directive">double</span> getValue() {
|
jaroslav@198
|
143 |
<span class="keyword-directive">try</span> {
|
jaroslav@198
|
144 |
<span class="keyword-directive">return</span> Double.parseDouble(Calculator.DISPLAY.getValue());
|
jaroslav@198
|
145 |
} <span class="keyword-directive">catch</span> (NumberFormatException ex) {
|
jaroslav@198
|
146 |
Calculator.DISPLAY.setValue(<span class="string">"</span><span class="string">err</span><span class="string">"</span>);
|
jaroslav@198
|
147 |
<span class="keyword-directive">return</span> <span class="number">0.0</span>;
|
jaroslav@198
|
148 |
}
|
jaroslav@198
|
149 |
}
|
jaroslav@198
|
150 |
}
|
jaroslav@198
|
151 |
|
jaroslav@198
|
152 |
</pre>
|
jaroslav@141
|
153 |
</body>
|
jaroslav@141
|
154 |
</html>
|