src/main/javadoc/overview.html
author Jaroslav Tulach <jtulach@netbeans.org>
Tue, 26 Aug 2014 18:13:30 +0200
changeset 838 bdc3d696dd4a
parent 834 5b6567dcc966
child 841 e673fd71b81b
permissions -rw-r--r--
During the API review process (bug 246133) the reviewers decided that in order to include html4j to NetBeans Platform, we need to stop using org.apidesign namespace and switch to NetBeans one. Repackaging all SPI packages into org.netbeans.html.smthng.spi.
jaroslav@550
     1
<!--
jaroslav@550
     2
jaroslav@550
     3
    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
jaroslav@550
     4
jaroslav@551
     5
    Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
jaroslav@550
     6
jaroslav@550
     7
    Oracle and Java are registered trademarks of Oracle and/or its affiliates.
jaroslav@550
     8
    Other names may be trademarks of their respective owners.
jaroslav@550
     9
jaroslav@550
    10
    The contents of this file are subject to the terms of either the GNU
jaroslav@550
    11
    General Public License Version 2 only ("GPL") or the Common
jaroslav@550
    12
    Development and Distribution License("CDDL") (collectively, the
jaroslav@550
    13
    "License"). You may not use this file except in compliance with the
jaroslav@550
    14
    License. You can obtain a copy of the License at
jaroslav@550
    15
    http://www.netbeans.org/cddl-gplv2.html
jaroslav@550
    16
    or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
jaroslav@550
    17
    specific language governing permissions and limitations under the
jaroslav@550
    18
    License.  When distributing the software, include this License Header
jaroslav@550
    19
    Notice in each file and include the License file at
jaroslav@550
    20
    nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
jaroslav@550
    21
    particular file as subject to the "Classpath" exception as provided
jaroslav@550
    22
    by Oracle in the GPL Version 2 section of the License file that
jaroslav@550
    23
    accompanied this code. If applicable, add the following below the
jaroslav@550
    24
    License Header, with the fields enclosed by brackets [] replaced by
jaroslav@550
    25
    your own identifying information:
jaroslav@550
    26
    "Portions Copyrighted [year] [name of copyright owner]"
jaroslav@550
    27
jaroslav@550
    28
    Contributor(s):
jaroslav@550
    29
jaroslav@550
    30
    The Original Software is NetBeans. The Initial Developer of the Original
jaroslav@551
    31
    Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
jaroslav@550
    32
jaroslav@550
    33
    If you wish your version of this file to be governed by only the CDDL
jaroslav@550
    34
    or only the GPL Version 2, indicate your decision by adding
jaroslav@550
    35
    "[Contributor] elects to include this software in this distribution
jaroslav@550
    36
    under the [CDDL or GPL Version 2] license." If you do not indicate a
jaroslav@550
    37
    single choice of license, a recipient has the option to distribute
jaroslav@550
    38
    your version of this file under either the CDDL, the GPL Version 2 or
jaroslav@550
    39
    to extend the choice of license to its licensees as provided above.
jaroslav@550
    40
    However, if you add GPL Version 2 code and therefore, elected the GPL
jaroslav@550
    41
    Version 2 license, then the option applies only if the new code is
jaroslav@550
    42
    made subject to such option by the copyright holder.
jaroslav@550
    43
jaroslav@550
    44
-->
jaroslav@541
    45
<!DOCTYPE html>
jaroslav@541
    46
<html>
jaroslav@541
    47
    <head>
jaroslav@541
    48
        <title>HTML for Java APIs</title>
jaroslav@541
    49
        <meta charset="UTF-8">
jaroslav@541
    50
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
jaroslav@541
    51
    </head>
jaroslav@541
    52
    <body>
jaroslav@541
    53
        <p>
jaroslav@543
    54
         Use Java to write application logic; Use HTML5 to render the UI; 
jaroslav@630
    55
         {@link net.java.html.json.Model Animate an HTML page from Java}
jtulach@668
    56
         (see <a target="_blank" href="http://dew.apidesign.org/dew/#7212206">Duke being rotated</a> by CSS);
jaroslav@543
    57
         Use {@link net.java.html.json.OnReceive REST} or
jaroslav@543
    58
         <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>;
jaroslav@543
    59
         interact with <a href="net/java/html/js/package-summary.html">JavaScript</a>;
jaroslav@543
    60
         Get the best of both worlds!
jaroslav@543
    61
         
jaroslav@541
    62
         The goal of these APIs is to use full featured Java runtime 
jaroslav@568
    63
         (like real <a href="http://wiki.apidesign.org/wiki/HotSpot">HotSpot VM</a>), 
jaroslav@541
    64
         but still rely on a very lightweight rendering technology 
jaroslav@541
    65
         (so it can potentially fit 
jaroslav@541
    66
         <a href="http://bck2brwsr.apidesign.org">Bck2Brwsr</a> and definitely
jaroslav@541
    67
         to various types of phones). What can be more lightweight 
jaroslav@541
    68
         (from a browser perspective) than 
jaroslav@541
    69
         <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>!?
jaroslav@541
    70
         By default we use {@link net.java.html.boot.fx JavaFX's WebView} 
jaroslav@541
    71
         component to display the <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>. 
jaroslav@541
    72
         We eliminate the need to manipulate the DOM directly, 
jaroslav@541
    73
         there is a special {@link net.java.html.json Java to Knockout.js binding}. 
jaroslav@617
    74
         As a result the <a href="http://knockoutjs.com">HTML uses Knockout.js syntax</a>, 
jaroslav@541
    75
         yet the application code can be written in Java.
jaroslav@541
    76
        </p>
jaroslav@541
    77
        
jtulach@832
    78
        <h3>What's New in Version 1.0?</h3>
jtulach@832
    79
        
jtulach@832
    80
        <p>
jtulach@832
    81
            {@link net.java.html.json.Property#array() Array properties} are now
jtulach@832
    82
            mutable from the <a href="http://knockoutjs.com">knockout.js</a>
jtulach@838
    83
            point of view (required {@link org.netbeans.html.json.spi.Proto.Type#replaceValue one SPI change}).
jtulach@834
    84
            The page lookup mechanism can use {@link net.java.html.boot.BrowserBuilder#locale(java.util.Locale) locale}
jtulach@834
    85
            to load localized a page with appropriate suffix.
jtulach@832
    86
        </p>
jtulach@832
    87
        
jtulach@771
    88
        <h3>What's New in Version 0.9?</h3>
jtulach@771
    89
        
jtulach@771
    90
        <p>
jtulach@771
    91
            System can run in {@link net.java.html.boot.BrowserBuilder#classloader(java.lang.ClassLoader) Felix OSGi container} (originally only Equinox).
jtulach@788
    92
            {@link net.java.html.json.ComputedProperty Derived properties}
jtulach@788
    93
            now deeply check changes in other {@link net.java.html.json.Model model
jtulach@788
    94
            classes} they depend on and recompute their values accordingly.
jtulach@810
    95
            <a target="_blank" href="http://knockoutjs.com">Knockout.js</a> library has been updated
jtulach@810
    96
            to version 3.2.0.
jtulach@771
    97
        </p>
jtulach@771
    98
        
jtulach@771
    99
        <h3>What's New in 0.8.x Versions?</h3>
jaroslav@720
   100
        
jaroslav@720
   101
        <p>
jaroslav@720
   102
            Setters or array properties on classes generated by {@link net.java.html.json.Model}
jtulach@838
   103
            annotation can be accessed from any thread. {@link org.netbeans.html.sound.spi.AudioEnvironment}
jtulach@747
   104
            can be registered into {@link net.java.html.BrwsrCtx}. There is
jtulach@747
   105
            a {@link net.java.html.json.Models#parse(net.java.html.BrwsrCtx, java.lang.Class, java.io.InputStream, java.util.Collection)  method}
jtulach@747
   106
            to parse a JSON array and convert it into 
jtulach@747
   107
            {@link net.java.html.json.Model model classes}.
jtulach@758
   108
            Improved behavior of <code>enum</code> values in 
jtulach@758
   109
            {@link net.java.html.json.Model knockout bindings}.
jaroslav@720
   110
        </p>
jaroslav@720
   111
        
jtulach@702
   112
        <p>
jtulach@702
   113
            Few bugfixes for better portability. 
jtulach@702
   114
            New API for {@link net.java.html.boot.script.Scripts headless execution}
jtulach@703
   115
            on top of <em>Nashorn</em> - does not run <em>knockout for Java</em>
jtulach@702
   116
            fully yet 
jtulach@702
   117
            (reported as <a href="https://bugs.openjdk.java.net/browse/JDK-8046013">JDK-8046013</a>),
jtulach@702
   118
            however even in current state it is quite 
jtulach@703
   119
            {@link net.java.html.boot.script.Scripts useful for testing}
jtulach@702
   120
            of 
jtulach@703
   121
            {@link net.java.html.js Java/JavaScript interactions}.
jtulach@702
   122
        </p>
jtulach@702
   123
        
jtulach@654
   124
        <p>
jtulach@656
   125
            {@link net.java.html.boot.fx.FXBrowsers} has been extended
jtulach@656
   126
            with new helper methods to make it easier to use HTML+Java
jtulach@656
   127
            API in existing JavaFX applications.
jtulach@656
   128
            The annotation processor is made
jtulach@654
   129
            more robust with respect to errors in callback syntax of
jtulach@654
   130
            {@link net.java.html.js.JavaScriptBody} body parameter.
jtulach@654
   131
            Javadoc of {@link net.java.html.BrwsrCtx#execute} method
jtulach@654
   132
            has been improved based on a failure of its usability study.
jtulach@654
   133
            There can be additional parameters to methods annotated by
jtulach@654
   134
            {@link net.java.html.json.OnReceive} that allows one to
jtulach@654
   135
            pass state when a JSON call is made and use it when it finishes.
jtulach@654
   136
            The mechanism of discovery of sibling HTML page has been
jtulach@654
   137
            extended to work on systems that don't support
jtulach@654
   138
            {@link java.lang.Class#getProtectionDomain}.
jtulach@654
   139
        </p>
jtulach@654
   140
        
jaroslav@617
   141
        <p>
jtulach@650
   142
            The first argument of method annotated by
jtulach@650
   143
            {@link net.java.html.json.OnReceive} annotation has to
jtulach@650
   144
            be the associated {@link net.java.html.json.Model model class}.
jtulach@650
   145
        </p>
jtulach@650
   146
        
jtulach@650
   147
        <p>
jtulach@647
   148
            {@link net.java.html.json.OnReceive} annotation now accepts
jtulach@647
   149
            {@link java.util.List} of data values as second argument
jtulach@647
   150
            (previously required an array).
jtulach@647
   151
        </p>
jtulach@647
   152
        
jtulach@647
   153
        
jtulach@647
   154
        <h3>What's New in Older Versions?</h3>
jtulach@647
   155
        
jtulach@647
   156
        <p>
jaroslav@617
   157
            {@link net.java.html.js.JavaScriptBody} annotation has new attribute
jaroslav@617
   158
            {@link net.java.html.js.JavaScriptBody#wait4js()} which allows
jaroslav@617
   159
            asynchronous execution. Libraries using
jaroslav@617
   160
            {@link net.java.html.js.JavaScriptBody} are urged to use this
jaroslav@617
   161
            new attribute as much as possible, as it can speed up execution
jaroslav@617
   162
            in certain environments.
jaroslav@617
   163
        </p>
jaroslav@617
   164
        
jaroslav@617
   165
        <p>
jaroslav@617
   166
            Use {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable)} in
jaroslav@617
   167
            multi-threaded environment to execute your code on the browser thread.
jaroslav@617
   168
            See example 
jaroslav@617
   169
            {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable) using Java timer}.
jaroslav@617
   170
        </p>
jaroslav@617
   171
        
jaroslav@541
   172
        <h3>Interesting Entry Points</h3>
jaroslav@541
   173
        
jaroslav@541
   174
        <p>Learn how to {@link net.java.html.json.Model animate an HTML page from Java}
jaroslav@541
   175
            without referencing single HTML element from the Java code.
jaroslav@541
   176
        </p>
jaroslav@541
   177
        <p>Use {@link net.java.html.json.OnReceive JSON} to communicate
jaroslav@541
   178
            with REST based server API.
jaroslav@541
   179
        </p>
jaroslav@541
   180
        <p>Use <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>
jaroslav@541
   181
            and JSON.
jaroslav@541
   182
        </p>
jaroslav@541
   183
        <p>Call JavaScript methods from Java and vice versa, via
jaroslav@541
   184
            <a href="net/java/html/js/package-summary.html">JavaScriptBody</a>.
jaroslav@541
   185
        </p>
jaroslav@541
   186
jaroslav@541
   187
        <h3>Getting Started</h3>
jaroslav@541
   188
jtulach@759
   189
        There are <a href="http://wiki.apidesign.org/wiki/DukeScriptInNetBeans">many ways</a> 
jtulach@759
   190
        to start developing 
jaroslav@541
   191
        <a href="http://html.java.net">Html for Java</a> application. 
jaroslav@541
   192
        However to be sure one chooses the most recent setup, it is recommended
jaroslav@541
   193
        to switch to good old command line and use a 
jaroslav@541
   194
        <a href="http://wiki.apidesign.org/wiki/Knockout4Java">Maven archetype</a>
jaroslav@610
   195
        associated with every version of this project. Make sure at least 
jaroslav@610
   196
        <em>JDK7</em> is your installed Java and type:
jaroslav@541
   197
        <pre>      
jaroslav@541
   198
$ mvn archetype:generate \
jaroslav@541
   199
 -DarchetypeGroupId=org.apidesign.html \
jaroslav@541
   200
 -DarchetypeArtifactId=knockout4j-archetype \
jtulach@759
   201
 -DarchetypeVersion=0.8 <em># or newer version, if available</em>
jaroslav@541
   202
        </pre>
jaroslav@611
   203
        Answer few questions (for example choose myfirstbrwsrpage as artifactId) 
jaroslav@611
   204
        and then you can:
jaroslav@541
   205
        <pre>
jaroslav@541
   206
$ cd myfirstbrwsrpage
jaroslav@541
   207
$ mvn process-classes exec:java
jaroslav@541
   208
        </pre>
jaroslav@541
   209
        In a few seconds (or minutes if 
jaroslav@541
   210
        <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
jaroslav@541
   211
        decides to download the whole Internet of dependencies) you should 
jaroslav@611
   212
        see a sample Hello World application rendered in a 
jaroslav@611
   213
        <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
jaroslav@611
   214
        web view component (that of course requires your JDK to come
jaroslav@611
   215
        with <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>; 
jaroslav@611
   216
        <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK7 
jaroslav@611
   217
            and JDK8 from Oracle</a> contain everything that is needed). 
jaroslav@611
   218
        The generated application is built around one 
jaroslav@611
   219
        Java source (uses the {@link net.java.html.json.Model} annotation to
jaroslav@611
   220
        auto-generate another <code>Data.java</code> class during compilation)
jaroslav@611
   221
        and one HTML file (uses the <a href="http://knockoutjs.com">Knockout</a>
jaroslav@611
   222
        syntax to <code>data-bind</code> the HTML elements to the 
jaroslav@611
   223
        generated <code>Data</code> model):
jaroslav@541
   224
        <pre>
jaroslav@541
   225
$ ls src/main/java/**/DataModel.java
jaroslav@541
   226
$ ls src/main/webapp/pages/index.html
jaroslav@541
   227
        </pre>
jaroslav@611
   228
        That is all you need to get started. Play with the sources, 
jaroslav@611
   229
        modify them and enjoy
jaroslav@541
   230
        <a href="http://html.java.net">Html for Java</a>!
jaroslav@541
   231
        
jaroslav@614
   232
        <h2>IDE Support</h2>
jaroslav@614
   233
        
jaroslav@614
   234
        <p>
jaroslav@614
   235
            This API is part of <a target="_blank"
jaroslav@614
   236
            href="http://netbeans.org">NetBeans.org</a> project and as such
jaroslav@614
   237
            it works naturally with the <a target="_blank"
jaroslav@614
   238
            href="https://netbeans.org/features/index.html">NetBeans IDE</a>.
jaroslav@614
   239
            On the other hand, the API is using nothing NetBeans specific,
jaroslav@614
   240
            it builds on standard Java6 APIs and as such it shall work fine
jaroslav@614
   241
            in any IDE.
jaroslav@614
   242
        </p>
jaroslav@614
   243
        
jaroslav@614
   244
        <p>
jaroslav@614
   245
            A lot of work is done by 
jaroslav@614
   246
            <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">
jaroslav@614
   247
            annotation processors</a>
jaroslav@614
   248
            that generate various boiler plate code during compilation. This
jaroslav@614
   249
            is a standard part of Java since JDK6, but for example Eclipse
jaroslav@614
   250
            is known not to deal with processors well and developers using
jaroslav@614
   251
            it need to be careful. IntelliJ users hasn't reported any issues
jaroslav@614
   252
            and of course, NetBeans IDE support for 
jaroslav@614
   253
            <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">processors</a>
jaroslav@614
   254
            is outstanding.
jaroslav@614
   255
        </p>
jaroslav@614
   256
        
jaroslav@614
   257
        <p>
jaroslav@614
   258
            When using {@link net.java.html.js.JavaScriptBody} annotation, it is
jaroslav@614
   259
            useful to do a bit of post processing of classes. There is a
jaroslav@614
   260
            <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a> 
jaroslav@614
   261
            plugin for that.
jaroslav@614
   262
            NetBeans IDE will invoke it when doing a build. Other IDEs may 
jaroslav@614
   263
            need some hint to do so. 
jaroslav@614
   264
            Anyway: If one does not see all (generated) sources or is getting
jaroslav@614
   265
            {@link java.lang.LinkageError}s when executing the application, 
jaroslav@614
   266
            switch to command line and do clean build
jaroslav@614
   267
            from there:
jaroslav@614
   268
        </p>
jaroslav@614
   269
        <pre>$ mvn clean install</pre>
jaroslav@614
   270
        <p>
jaroslav@614
   271
            If that succeeds, your IDE of choice will hopefully
jaroslav@614
   272
            pick the generated sources up and present the result of the build 
jaroslav@614
   273
            properly. If not, 
jaroslav@614
   274
            <a href="https://netbeans.org/downloads/">download NetBeans</a>, 
jaroslav@614
   275
            you will be pleasantly 
jaroslav@614
   276
            surprised - for example with our excellent 
jaroslav@614
   277
            <a href="net/java/html/js/package-summary.html#debugging">Java/JavaScript 
jaroslav@614
   278
            debugging</a> support.
jaroslav@614
   279
        </p>
jaroslav@614
   280
        
jaroslav@615
   281
        <a name="deploy">
jaroslav@615
   282
        <h2>Deploy Your Application</h2>
jaroslav@615
   283
        </a>
jaroslav@615
   284
        
jaroslav@615
   285
        <p>
jaroslav@615
   286
        It is not goal of this documentation to list all possible ways
jaroslav@615
   287
        to package and deploy applications which use this API. However it is 
jaroslav@615
   288
        important for new comers to see the benefits of using the
jaroslav@615
   289
        <a href="http://html.java.net">HTML for Java</a> API and as such
jaroslav@615
   290
        let's list at least few bundling options, known to work at the time of writing 
jaroslav@615
   291
        this documentation.
jaroslav@615
   292
        </p>
jaroslav@615
   293
        
jaroslav@615
   294
        <p>
jaroslav@615
   295
        First of all, this is a <em>client technology</em>. You write client applications
jaroslav@615
   296
        with it which may, but need not connect to a server. You don't need
jaroslav@615
   297
        Tomcat or WebLogic to deploy 
jaroslav@615
   298
        <a href="http://html.java.net">HTML for Java</a> applications.
jaroslav@615
   299
        </p>
jaroslav@615
   300
        
jaroslav@615
   301
        <p>
jaroslav@615
   302
            <img src='resources/javafx_logo.jpg' width="64"
jaroslav@615
   303
                 height="64" align="left"/>
jaroslav@615
   304
            The sample project generated by
jaroslav@615
   305
            <code>org.apidesign.html knockout4j-archetype</code> is configured
jaroslav@615
   306
            to use <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
jaroslav@615
   307
            as the rendering technology. This setup is primarily suitable for 
jaroslav@615
   308
            development - it needs no special packaging, starts quickly and
jaroslav@615
   309
            allows you to use classical HotSpot VM debuggers. A final 
jaroslav@615
   310
            artifact from the build is also a ZIP file which you can use
jaroslav@615
   311
            and distribute to your users. Good for desktop applications.
jaroslav@615
   312
        </p>
jaroslav@615
   313
        
jaroslav@615
   314
        <p>
jaroslav@615
   315
            <img src='resources/netbeans_logo.jpg' width="64"
jaroslav@615
   316
                 height="64" align="right"/>
jaroslav@615
   317
            <img src='resources/eclipse_logo.png' width="64"
jaroslav@615
   318
                 height="64" align="right"/>
jaroslav@615
   319
            All the <a href="http://html.java.net">HTML for Java</a> libraries
jtulach@638
   320
            are packaged as <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
jaroslav@615
   321
            bundles and as such they can easily be run in NetBeans as well as
jaroslav@615
   322
            in Eclipse. As a result one can use 
jaroslav@615
   323
            <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
jtulach@638
   324
            and have a common module system for both platforms. In addition to that 
jtulach@638
   325
            one can render using
jaroslav@615
   326
            HTML and have a common UI in both platforms. In such case
jaroslav@615
   327
            your application would be packaged as a set of
jaroslav@615
   328
            <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a> bundles.
jaroslav@615
   329
            Read 
jaroslav@615
   330
            <a href="http://wiki.apidesign.org/wiki/HTML">more</a>...
jaroslav@615
   331
        </p>
jaroslav@615
   332
        
jaroslav@615
   333
        <p>
jaroslav@615
   334
            <img src='resources/chrome_logo.png' width="64"
jaroslav@615
   335
                 height="64" align="left"/>
jaroslav@615
   336
            <img src='resources/safari_logo.png' width="64"
jaroslav@615
   337
                 height="64" align="left"/>
jaroslav@615
   338
            <img src='resources/ie_logo.png' width="64"
jaroslav@615
   339
                 height="64" align="left"/>
jaroslav@615
   340
            <img src='resources/firefox_logo.png' width="64"
jaroslav@615
   341
                 height="64" align="left"/>
jaroslav@615
   342
            
jaroslav@615
   343
            There is more and more attempts to execute Java bytecode
jtulach@638
   344
            in a browser, without any special Java plugin installed.
jaroslav@615
   345
            The <a href="http://html.java.net">HTML for Java</a> is
jaroslav@615
   346
            carefully designed to produce lightweight, well performing
jaroslav@615
   347
            applications even on such restricted environments. It uses
jaroslav@615
   348
            no reflection calls and that allows to statically pre-compile
jaroslav@615
   349
            the applications into JavaScript. One of such environments
jtulach@638
   350
            is called <a href="http://wiki.apidesign.org/wiki/Bck2Brwsr">Bck2Brwsr</a>, 
jtulach@638
   351
            another <a href="http://wiki.apidesign.org/wiki/TeaVM">TeaVM</a>. Both support the
jaroslav@615
   352
            {@link net.java.html.js.JavaScriptBody} annotation. Read 
jaroslav@615
   353
            <a href="http://wiki.apidesign.org/wiki/Bck2BrwsrViaCLI">more</a> or play
jaroslav@616
   354
            a minesweeper game packaged for your browser 
jaroslav@616
   355
            (of course <a target="_blank"
jaroslav@616
   356
                href="http://source.apidesign.org/hg/html~demo/file/ea79b73d590a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java">
jaroslav@616
   357
                written</a> in Java):
jaroslav@615
   358
        </p>
jaroslav@616
   359
        
jaroslav@616
   360
        <script type="text/html" id="field">
jaroslav@616
   361
            <table class="field">
jaroslav@616
   362
                <tbody>
jaroslav@616
   363
                    <!-- ko foreach: rows -->
jaroslav@616
   364
                    <tr>
jaroslav@616
   365
                        <!-- ko foreach: columns -->
jaroslav@616
   366
                        <td data-bind="css: style, click: $parents[1].click" >
jaroslav@616
   367
                            <div data-bind='html: html'></div>
jaroslav@616
   368
                        </td>
jaroslav@616
   369
                        <!-- /ko -->
jaroslav@616
   370
                    </tr>
jaroslav@616
   371
                    <!-- /ko -->
jaroslav@616
   372
                </tbody>
jaroslav@616
   373
            </table>
jaroslav@616
   374
        </script>
jaroslav@616
   375
jaroslav@616
   376
        <div data-bind="template: { name : 'field', if: fieldShowing }"></div>
jaroslav@616
   377
jaroslav@616
   378
        <!-- boot bck2brwsr -->
jaroslav@616
   379
        <script type="text/javascript" src="resources/teavm.js"></script>
jaroslav@616
   380
        <script>
jaroslav@616
   381
            var vm = new VM();
jaroslav@616
   382
            vm.loadClass('org.apidesign.demo.minesweeper.MainBrwsr');
jaroslav@616
   383
        </script>
jaroslav@616
   384
jaroslav@615
   385
        <p>
jtulach@654
   386
            <img src='resources/ios_logo.jpg' width="64"
jtulach@654
   387
                 height="64" align="right"/>
jaroslav@615
   388
            <img src='resources/android_logo.jpg' width="64"
jaroslav@615
   389
                 height="64" align="right"/>
jaroslav@615
   390
            
jaroslav@615
   391
            Now when we have seen that the 
jaroslav@615
   392
            <a href="http://html.java.net">HTML for Java</a> applications 
jaroslav@615
   393
            can run on any modern browser, we can ask whether they can also
jaroslav@615
   394
            fit into a phone!? Yes, they can and especially to phones 
jaroslav@615
   395
            that can execute Java code already! Just by changing your
jaroslav@615
   396
            packaging you can create an APK file and deploy it to your
jaroslav@615
   397
            Android phone. 
jtulach@624
   398
            Read <a target="_blank" href="http://wiki.apidesign.org/wiki/DlvkBrwsr">more</a>...
jtulach@654
   399
            In case you'd like your application to reach out to second biggest
jtulach@654
   400
            group of smartphone users, don't despair: It 
jtulach@654
   401
            seems the set of devices that can execute
jtulach@654
   402
            <a href="http://html.java.net">HTML for Java</a> applications 
jtulach@654
   403
            has been extended to <em>iPads</em> and <em>iPhones</em>. Get the 
jtulach@654
   404
            <a target="_blank" href="http://wiki.apidesign.org/wiki/IBrwsr">details here</a>
jtulach@654
   405
            and deploy everywhere!
jaroslav@615
   406
        </p>
jaroslav@615
   407
        <p>
jaroslav@615
   408
            Convinced it makes sense to use 
jaroslav@615
   409
            <a href="http://html.java.net">HTML for Java</a>
jaroslav@615
   410
            APIs for writing applications that are 
jaroslav@615
   411
            <em>written once, displayed anywhere</em>? Or do you have an
jaroslav@615
   412
            environment which is not supported? In such case you can bring
jaroslav@615
   413
            <a href="http://html.java.net">HTML for Java</a>
jaroslav@615
   414
            to your environment yourself. Just implement your own
jtulach@838
   415
            {@link org.netbeans.html.boot.spi.Fn.Presenter}!
jaroslav@615
   416
        </p>
jaroslav@615
   417
        
jaroslav@607
   418
        <h2>Other Resources</h2>
jaroslav@607
   419
        
jaroslav@607
   420
        <img src="net/java/html/json/doc-files/DukeHTML.png" width="256" height="184" alt="Duke and HTML5. Together at last!" align="right"/>
jaroslav@607
   421
        
jaroslav@607
   422
        The javadoc for latest and previous versions is also available
jaroslav@607
   423
        online:
jaroslav@607
   424
        <ul>
jaroslav@607
   425
            <li>Current <a target="_blank" href="http://bits.netbeans.org/html+java/dev/">development</a> version
jtulach@771
   426
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.3">0.8.3</a>
jtulach@757
   427
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.2">0.8.2</a>
jtulach@757
   428
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.1">0.8.1</a>
jtulach@654
   429
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8">0.8</a>
jaroslav@607
   430
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.7.5">0.7.5</a>
jaroslav@607
   431
        </ul>
jaroslav@616
   432
        
jaroslav@616
   433
<style type="text/css">
jaroslav@616
   434
table.field td {
jaroslav@616
   435
    padding: 4px;
jaroslav@616
   436
    width: 18px;
jaroslav@616
   437
    height: 18px;
jaroslav@616
   438
    font-size: 1.5em;
jaroslav@616
   439
    border: 1px solid black;
jaroslav@616
   440
}
jaroslav@616
   441
table.field td.UNKNOWN {
jaroslav@616
   442
    background-color: #D6E4E1;
jaroslav@616
   443
    cursor: pointer;
jaroslav@616
   444
}
jaroslav@616
   445
table.field td.EXPLOSION {
jaroslav@616
   446
    background-color: #A31E39;
jaroslav@616
   447
}
jaroslav@616
   448
table.field td.DISCOVERED {
jaroslav@616
   449
    background-color: #9DB2B1;
jaroslav@616
   450
}
jaroslav@616
   451
</style>        
jaroslav@541
   452
    </body>
jaroslav@541
   453
</html>