javaquery/demo-calculator/src/main/resources/org/apidesign/bck2brwsr/mavenhtml/Calculator.xhtml
author Martin Soch <Martin.Soch@oracle.com>
Fri, 11 Jan 2013 16:36:28 +0100
brancharithmetic
changeset 427 12e866a32b40
parent 198 5c1604c5ca9a
parent 375 5751fe604e6b
child 492 854286e49061
permissions -rw-r--r--
merge with trunk
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"> &amp; </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">&lt;jaroslav.tulach@apidesign.org&gt;</span>
jaroslav@198
    94
     <span class="comment">*/</span>
jaroslav@198
    95
    @Page(xhtml=<span class="string">&quot;</span><span class="string">Calculator.xhtml</span><span class="string">&quot;</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">&quot;</span><span class="string">clear</span><span class="string">&quot;</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">&quot;</span><span class="string">0</span><span class="string">&quot;</span>);
jaroslav@198
   105
        }
jaroslav@198
   106
jaroslav@198
   107
        @OnClick(id= { <span class="string">&quot;</span><span class="string">plus</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">minus</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">mul</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">div</span><span class="string">&quot;</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">&quot;</span><span class="string">0</span><span class="string">&quot;</span>);
jaroslav@198
   112
        }
jaroslav@198
   113
jaroslav@198
   114
        @OnClick(id=<span class="string">&quot;</span><span class="string">result</span><span class="string">&quot;</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">&quot;</span><span class="string">plus</span><span class="string">&quot;</span>: setValue(memory + getValue()); <span class="keyword-directive">break</span>;
jaroslav@198
   118
                <span class="keyword-directive">case</span> <span class="string">&quot;</span><span class="string">minus</span><span class="string">&quot;</span>: setValue(memory - getValue()); <span class="keyword-directive">break</span>;
jaroslav@198
   119
                <span class="keyword-directive">case</span> <span class="string">&quot;</span><span class="string">mul</span><span class="string">&quot;</span>: setValue(memory * getValue()); <span class="keyword-directive">break</span>;
jaroslav@198
   120
                <span class="keyword-directive">case</span> <span class="string">&quot;</span><span class="string">div</span><span class="string">&quot;</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">&quot;</span><span class="string">n0</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n1</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n2</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n3</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n4</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n5</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n6</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n7</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n8</span><span class="string">&quot;</span>, <span class="string">&quot;</span><span class="string">n9</span><span class="string">&quot;</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">&quot;</span><span class="string">err</span><span class="string">&quot;</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>