src/main/javadoc/overview.html
author Jaroslav Tulach <jtulach@netbeans.org>
Tue, 26 Aug 2014 18:38:36 +0200
changeset 841 e673fd71b81b
parent 838 bdc3d696dd4a
child 852 e5723aecdaff
permissions -rw-r--r--
Documenting the SPI packages rename and explicitly blacklisting implementation packages
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@841
    86
            All SPI were moved under the NetBeans namespace - e.g.
jtulach@841
    87
            {@link org.netbeans.html.boot.spi},
jtulach@841
    88
            {@link org.netbeans.html.context.spi},
jtulach@841
    89
            {@link org.netbeans.html.json.spi},
jtulach@841
    90
            {@link org.netbeans.html.sound.spi}, and also
jtulach@841
    91
            {@link org.netbeans.html.json.tck}.
jtulach@832
    92
        </p>
jtulach@832
    93
        
jtulach@771
    94
        <h3>What's New in Version 0.9?</h3>
jtulach@771
    95
        
jtulach@771
    96
        <p>
jtulach@771
    97
            System can run in {@link net.java.html.boot.BrowserBuilder#classloader(java.lang.ClassLoader) Felix OSGi container} (originally only Equinox).
jtulach@788
    98
            {@link net.java.html.json.ComputedProperty Derived properties}
jtulach@788
    99
            now deeply check changes in other {@link net.java.html.json.Model model
jtulach@788
   100
            classes} they depend on and recompute their values accordingly.
jtulach@810
   101
            <a target="_blank" href="http://knockoutjs.com">Knockout.js</a> library has been updated
jtulach@810
   102
            to version 3.2.0.
jtulach@771
   103
        </p>
jtulach@771
   104
        
jtulach@771
   105
        <h3>What's New in 0.8.x Versions?</h3>
jaroslav@720
   106
        
jaroslav@720
   107
        <p>
jaroslav@720
   108
            Setters or array properties on classes generated by {@link net.java.html.json.Model}
jtulach@838
   109
            annotation can be accessed from any thread. {@link org.netbeans.html.sound.spi.AudioEnvironment}
jtulach@747
   110
            can be registered into {@link net.java.html.BrwsrCtx}. There is
jtulach@747
   111
            a {@link net.java.html.json.Models#parse(net.java.html.BrwsrCtx, java.lang.Class, java.io.InputStream, java.util.Collection)  method}
jtulach@747
   112
            to parse a JSON array and convert it into 
jtulach@747
   113
            {@link net.java.html.json.Model model classes}.
jtulach@758
   114
            Improved behavior of <code>enum</code> values in 
jtulach@758
   115
            {@link net.java.html.json.Model knockout bindings}.
jaroslav@720
   116
        </p>
jaroslav@720
   117
        
jtulach@702
   118
        <p>
jtulach@702
   119
            Few bugfixes for better portability. 
jtulach@702
   120
            New API for {@link net.java.html.boot.script.Scripts headless execution}
jtulach@703
   121
            on top of <em>Nashorn</em> - does not run <em>knockout for Java</em>
jtulach@702
   122
            fully yet 
jtulach@702
   123
            (reported as <a href="https://bugs.openjdk.java.net/browse/JDK-8046013">JDK-8046013</a>),
jtulach@702
   124
            however even in current state it is quite 
jtulach@703
   125
            {@link net.java.html.boot.script.Scripts useful for testing}
jtulach@702
   126
            of 
jtulach@703
   127
            {@link net.java.html.js Java/JavaScript interactions}.
jtulach@702
   128
        </p>
jtulach@702
   129
        
jtulach@654
   130
        <p>
jtulach@656
   131
            {@link net.java.html.boot.fx.FXBrowsers} has been extended
jtulach@656
   132
            with new helper methods to make it easier to use HTML+Java
jtulach@656
   133
            API in existing JavaFX applications.
jtulach@656
   134
            The annotation processor is made
jtulach@654
   135
            more robust with respect to errors in callback syntax of
jtulach@654
   136
            {@link net.java.html.js.JavaScriptBody} body parameter.
jtulach@654
   137
            Javadoc of {@link net.java.html.BrwsrCtx#execute} method
jtulach@654
   138
            has been improved based on a failure of its usability study.
jtulach@654
   139
            There can be additional parameters to methods annotated by
jtulach@654
   140
            {@link net.java.html.json.OnReceive} that allows one to
jtulach@654
   141
            pass state when a JSON call is made and use it when it finishes.
jtulach@654
   142
            The mechanism of discovery of sibling HTML page has been
jtulach@654
   143
            extended to work on systems that don't support
jtulach@654
   144
            {@link java.lang.Class#getProtectionDomain}.
jtulach@654
   145
        </p>
jtulach@654
   146
        
jaroslav@617
   147
        <p>
jtulach@650
   148
            The first argument of method annotated by
jtulach@650
   149
            {@link net.java.html.json.OnReceive} annotation has to
jtulach@650
   150
            be the associated {@link net.java.html.json.Model model class}.
jtulach@650
   151
        </p>
jtulach@650
   152
        
jtulach@650
   153
        <p>
jtulach@647
   154
            {@link net.java.html.json.OnReceive} annotation now accepts
jtulach@647
   155
            {@link java.util.List} of data values as second argument
jtulach@647
   156
            (previously required an array).
jtulach@647
   157
        </p>
jtulach@647
   158
        
jtulach@647
   159
        
jtulach@647
   160
        <h3>What's New in Older Versions?</h3>
jtulach@647
   161
        
jtulach@647
   162
        <p>
jaroslav@617
   163
            {@link net.java.html.js.JavaScriptBody} annotation has new attribute
jaroslav@617
   164
            {@link net.java.html.js.JavaScriptBody#wait4js()} which allows
jaroslav@617
   165
            asynchronous execution. Libraries using
jaroslav@617
   166
            {@link net.java.html.js.JavaScriptBody} are urged to use this
jaroslav@617
   167
            new attribute as much as possible, as it can speed up execution
jaroslav@617
   168
            in certain environments.
jaroslav@617
   169
        </p>
jaroslav@617
   170
        
jaroslav@617
   171
        <p>
jaroslav@617
   172
            Use {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable)} in
jaroslav@617
   173
            multi-threaded environment to execute your code on the browser thread.
jaroslav@617
   174
            See example 
jaroslav@617
   175
            {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable) using Java timer}.
jaroslav@617
   176
        </p>
jaroslav@617
   177
        
jaroslav@541
   178
        <h3>Interesting Entry Points</h3>
jaroslav@541
   179
        
jaroslav@541
   180
        <p>Learn how to {@link net.java.html.json.Model animate an HTML page from Java}
jaroslav@541
   181
            without referencing single HTML element from the Java code.
jaroslav@541
   182
        </p>
jaroslav@541
   183
        <p>Use {@link net.java.html.json.OnReceive JSON} to communicate
jaroslav@541
   184
            with REST based server API.
jaroslav@541
   185
        </p>
jaroslav@541
   186
        <p>Use <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>
jaroslav@541
   187
            and JSON.
jaroslav@541
   188
        </p>
jaroslav@541
   189
        <p>Call JavaScript methods from Java and vice versa, via
jaroslav@541
   190
            <a href="net/java/html/js/package-summary.html">JavaScriptBody</a>.
jaroslav@541
   191
        </p>
jaroslav@541
   192
jaroslav@541
   193
        <h3>Getting Started</h3>
jaroslav@541
   194
jtulach@759
   195
        There are <a href="http://wiki.apidesign.org/wiki/DukeScriptInNetBeans">many ways</a> 
jtulach@759
   196
        to start developing 
jaroslav@541
   197
        <a href="http://html.java.net">Html for Java</a> application. 
jaroslav@541
   198
        However to be sure one chooses the most recent setup, it is recommended
jaroslav@541
   199
        to switch to good old command line and use a 
jaroslav@541
   200
        <a href="http://wiki.apidesign.org/wiki/Knockout4Java">Maven archetype</a>
jaroslav@610
   201
        associated with every version of this project. Make sure at least 
jaroslav@610
   202
        <em>JDK7</em> is your installed Java and type:
jaroslav@541
   203
        <pre>      
jaroslav@541
   204
$ mvn archetype:generate \
jaroslav@541
   205
 -DarchetypeGroupId=org.apidesign.html \
jaroslav@541
   206
 -DarchetypeArtifactId=knockout4j-archetype \
jtulach@759
   207
 -DarchetypeVersion=0.8 <em># or newer version, if available</em>
jaroslav@541
   208
        </pre>
jaroslav@611
   209
        Answer few questions (for example choose myfirstbrwsrpage as artifactId) 
jaroslav@611
   210
        and then you can:
jaroslav@541
   211
        <pre>
jaroslav@541
   212
$ cd myfirstbrwsrpage
jaroslav@541
   213
$ mvn process-classes exec:java
jaroslav@541
   214
        </pre>
jaroslav@541
   215
        In a few seconds (or minutes if 
jaroslav@541
   216
        <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
jaroslav@541
   217
        decides to download the whole Internet of dependencies) you should 
jaroslav@611
   218
        see a sample Hello World application rendered in a 
jaroslav@611
   219
        <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
jaroslav@611
   220
        web view component (that of course requires your JDK to come
jaroslav@611
   221
        with <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>; 
jaroslav@611
   222
        <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK7 
jaroslav@611
   223
            and JDK8 from Oracle</a> contain everything that is needed). 
jaroslav@611
   224
        The generated application is built around one 
jaroslav@611
   225
        Java source (uses the {@link net.java.html.json.Model} annotation to
jaroslav@611
   226
        auto-generate another <code>Data.java</code> class during compilation)
jaroslav@611
   227
        and one HTML file (uses the <a href="http://knockoutjs.com">Knockout</a>
jaroslav@611
   228
        syntax to <code>data-bind</code> the HTML elements to the 
jaroslav@611
   229
        generated <code>Data</code> model):
jaroslav@541
   230
        <pre>
jaroslav@541
   231
$ ls src/main/java/**/DataModel.java
jaroslav@541
   232
$ ls src/main/webapp/pages/index.html
jaroslav@541
   233
        </pre>
jaroslav@611
   234
        That is all you need to get started. Play with the sources, 
jaroslav@611
   235
        modify them and enjoy
jaroslav@541
   236
        <a href="http://html.java.net">Html for Java</a>!
jaroslav@541
   237
        
jaroslav@614
   238
        <h2>IDE Support</h2>
jaroslav@614
   239
        
jaroslav@614
   240
        <p>
jaroslav@614
   241
            This API is part of <a target="_blank"
jaroslav@614
   242
            href="http://netbeans.org">NetBeans.org</a> project and as such
jaroslav@614
   243
            it works naturally with the <a target="_blank"
jaroslav@614
   244
            href="https://netbeans.org/features/index.html">NetBeans IDE</a>.
jaroslav@614
   245
            On the other hand, the API is using nothing NetBeans specific,
jaroslav@614
   246
            it builds on standard Java6 APIs and as such it shall work fine
jaroslav@614
   247
            in any IDE.
jaroslav@614
   248
        </p>
jaroslav@614
   249
        
jaroslav@614
   250
        <p>
jaroslav@614
   251
            A lot of work is done by 
jaroslav@614
   252
            <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">
jaroslav@614
   253
            annotation processors</a>
jaroslav@614
   254
            that generate various boiler plate code during compilation. This
jaroslav@614
   255
            is a standard part of Java since JDK6, but for example Eclipse
jaroslav@614
   256
            is known not to deal with processors well and developers using
jaroslav@614
   257
            it need to be careful. IntelliJ users hasn't reported any issues
jaroslav@614
   258
            and of course, NetBeans IDE support for 
jaroslav@614
   259
            <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">processors</a>
jaroslav@614
   260
            is outstanding.
jaroslav@614
   261
        </p>
jaroslav@614
   262
        
jaroslav@614
   263
        <p>
jaroslav@614
   264
            When using {@link net.java.html.js.JavaScriptBody} annotation, it is
jaroslav@614
   265
            useful to do a bit of post processing of classes. There is a
jaroslav@614
   266
            <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a> 
jaroslav@614
   267
            plugin for that.
jaroslav@614
   268
            NetBeans IDE will invoke it when doing a build. Other IDEs may 
jaroslav@614
   269
            need some hint to do so. 
jaroslav@614
   270
            Anyway: If one does not see all (generated) sources or is getting
jaroslav@614
   271
            {@link java.lang.LinkageError}s when executing the application, 
jaroslav@614
   272
            switch to command line and do clean build
jaroslav@614
   273
            from there:
jaroslav@614
   274
        </p>
jaroslav@614
   275
        <pre>$ mvn clean install</pre>
jaroslav@614
   276
        <p>
jaroslav@614
   277
            If that succeeds, your IDE of choice will hopefully
jaroslav@614
   278
            pick the generated sources up and present the result of the build 
jaroslav@614
   279
            properly. If not, 
jaroslav@614
   280
            <a href="https://netbeans.org/downloads/">download NetBeans</a>, 
jaroslav@614
   281
            you will be pleasantly 
jaroslav@614
   282
            surprised - for example with our excellent 
jaroslav@614
   283
            <a href="net/java/html/js/package-summary.html#debugging">Java/JavaScript 
jaroslav@614
   284
            debugging</a> support.
jaroslav@614
   285
        </p>
jaroslav@614
   286
        
jaroslav@615
   287
        <a name="deploy">
jaroslav@615
   288
        <h2>Deploy Your Application</h2>
jaroslav@615
   289
        </a>
jaroslav@615
   290
        
jaroslav@615
   291
        <p>
jaroslav@615
   292
        It is not goal of this documentation to list all possible ways
jaroslav@615
   293
        to package and deploy applications which use this API. However it is 
jaroslav@615
   294
        important for new comers to see the benefits of using the
jaroslav@615
   295
        <a href="http://html.java.net">HTML for Java</a> API and as such
jaroslav@615
   296
        let's list at least few bundling options, known to work at the time of writing 
jaroslav@615
   297
        this documentation.
jaroslav@615
   298
        </p>
jaroslav@615
   299
        
jaroslav@615
   300
        <p>
jaroslav@615
   301
        First of all, this is a <em>client technology</em>. You write client applications
jaroslav@615
   302
        with it which may, but need not connect to a server. You don't need
jaroslav@615
   303
        Tomcat or WebLogic to deploy 
jaroslav@615
   304
        <a href="http://html.java.net">HTML for Java</a> applications.
jaroslav@615
   305
        </p>
jaroslav@615
   306
        
jaroslav@615
   307
        <p>
jaroslav@615
   308
            <img src='resources/javafx_logo.jpg' width="64"
jaroslav@615
   309
                 height="64" align="left"/>
jaroslav@615
   310
            The sample project generated by
jaroslav@615
   311
            <code>org.apidesign.html knockout4j-archetype</code> is configured
jaroslav@615
   312
            to use <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
jaroslav@615
   313
            as the rendering technology. This setup is primarily suitable for 
jaroslav@615
   314
            development - it needs no special packaging, starts quickly and
jaroslav@615
   315
            allows you to use classical HotSpot VM debuggers. A final 
jaroslav@615
   316
            artifact from the build is also a ZIP file which you can use
jaroslav@615
   317
            and distribute to your users. Good for desktop applications.
jaroslav@615
   318
        </p>
jaroslav@615
   319
        
jaroslav@615
   320
        <p>
jaroslav@615
   321
            <img src='resources/netbeans_logo.jpg' width="64"
jaroslav@615
   322
                 height="64" align="right"/>
jaroslav@615
   323
            <img src='resources/eclipse_logo.png' width="64"
jaroslav@615
   324
                 height="64" align="right"/>
jaroslav@615
   325
            All the <a href="http://html.java.net">HTML for Java</a> libraries
jtulach@638
   326
            are packaged as <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
jaroslav@615
   327
            bundles and as such they can easily be run in NetBeans as well as
jaroslav@615
   328
            in Eclipse. As a result one can use 
jaroslav@615
   329
            <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
jtulach@638
   330
            and have a common module system for both platforms. In addition to that 
jtulach@638
   331
            one can render using
jaroslav@615
   332
            HTML and have a common UI in both platforms. In such case
jaroslav@615
   333
            your application would be packaged as a set of
jaroslav@615
   334
            <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a> bundles.
jaroslav@615
   335
            Read 
jaroslav@615
   336
            <a href="http://wiki.apidesign.org/wiki/HTML">more</a>...
jaroslav@615
   337
        </p>
jaroslav@615
   338
        
jaroslav@615
   339
        <p>
jaroslav@615
   340
            <img src='resources/chrome_logo.png' width="64"
jaroslav@615
   341
                 height="64" align="left"/>
jaroslav@615
   342
            <img src='resources/safari_logo.png' width="64"
jaroslav@615
   343
                 height="64" align="left"/>
jaroslav@615
   344
            <img src='resources/ie_logo.png' width="64"
jaroslav@615
   345
                 height="64" align="left"/>
jaroslav@615
   346
            <img src='resources/firefox_logo.png' width="64"
jaroslav@615
   347
                 height="64" align="left"/>
jaroslav@615
   348
            
jaroslav@615
   349
            There is more and more attempts to execute Java bytecode
jtulach@638
   350
            in a browser, without any special Java plugin installed.
jaroslav@615
   351
            The <a href="http://html.java.net">HTML for Java</a> is
jaroslav@615
   352
            carefully designed to produce lightweight, well performing
jaroslav@615
   353
            applications even on such restricted environments. It uses
jaroslav@615
   354
            no reflection calls and that allows to statically pre-compile
jaroslav@615
   355
            the applications into JavaScript. One of such environments
jtulach@638
   356
            is called <a href="http://wiki.apidesign.org/wiki/Bck2Brwsr">Bck2Brwsr</a>, 
jtulach@638
   357
            another <a href="http://wiki.apidesign.org/wiki/TeaVM">TeaVM</a>. Both support the
jaroslav@615
   358
            {@link net.java.html.js.JavaScriptBody} annotation. Read 
jaroslav@615
   359
            <a href="http://wiki.apidesign.org/wiki/Bck2BrwsrViaCLI">more</a> or play
jaroslav@616
   360
            a minesweeper game packaged for your browser 
jaroslav@616
   361
            (of course <a target="_blank"
jaroslav@616
   362
                href="http://source.apidesign.org/hg/html~demo/file/ea79b73d590a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java">
jaroslav@616
   363
                written</a> in Java):
jaroslav@615
   364
        </p>
jaroslav@616
   365
        
jaroslav@616
   366
        <script type="text/html" id="field">
jaroslav@616
   367
            <table class="field">
jaroslav@616
   368
                <tbody>
jaroslav@616
   369
                    <!-- ko foreach: rows -->
jaroslav@616
   370
                    <tr>
jaroslav@616
   371
                        <!-- ko foreach: columns -->
jaroslav@616
   372
                        <td data-bind="css: style, click: $parents[1].click" >
jaroslav@616
   373
                            <div data-bind='html: html'></div>
jaroslav@616
   374
                        </td>
jaroslav@616
   375
                        <!-- /ko -->
jaroslav@616
   376
                    </tr>
jaroslav@616
   377
                    <!-- /ko -->
jaroslav@616
   378
                </tbody>
jaroslav@616
   379
            </table>
jaroslav@616
   380
        </script>
jaroslav@616
   381
jaroslav@616
   382
        <div data-bind="template: { name : 'field', if: fieldShowing }"></div>
jaroslav@616
   383
jaroslav@616
   384
        <!-- boot bck2brwsr -->
jaroslav@616
   385
        <script type="text/javascript" src="resources/teavm.js"></script>
jaroslav@616
   386
        <script>
jaroslav@616
   387
            var vm = new VM();
jaroslav@616
   388
            vm.loadClass('org.apidesign.demo.minesweeper.MainBrwsr');
jaroslav@616
   389
        </script>
jaroslav@616
   390
jaroslav@615
   391
        <p>
jtulach@654
   392
            <img src='resources/ios_logo.jpg' width="64"
jtulach@654
   393
                 height="64" align="right"/>
jaroslav@615
   394
            <img src='resources/android_logo.jpg' width="64"
jaroslav@615
   395
                 height="64" align="right"/>
jaroslav@615
   396
            
jaroslav@615
   397
            Now when we have seen that the 
jaroslav@615
   398
            <a href="http://html.java.net">HTML for Java</a> applications 
jaroslav@615
   399
            can run on any modern browser, we can ask whether they can also
jaroslav@615
   400
            fit into a phone!? Yes, they can and especially to phones 
jaroslav@615
   401
            that can execute Java code already! Just by changing your
jaroslav@615
   402
            packaging you can create an APK file and deploy it to your
jaroslav@615
   403
            Android phone. 
jtulach@624
   404
            Read <a target="_blank" href="http://wiki.apidesign.org/wiki/DlvkBrwsr">more</a>...
jtulach@654
   405
            In case you'd like your application to reach out to second biggest
jtulach@654
   406
            group of smartphone users, don't despair: It 
jtulach@654
   407
            seems the set of devices that can execute
jtulach@654
   408
            <a href="http://html.java.net">HTML for Java</a> applications 
jtulach@654
   409
            has been extended to <em>iPads</em> and <em>iPhones</em>. Get the 
jtulach@654
   410
            <a target="_blank" href="http://wiki.apidesign.org/wiki/IBrwsr">details here</a>
jtulach@654
   411
            and deploy everywhere!
jaroslav@615
   412
        </p>
jaroslav@615
   413
        <p>
jaroslav@615
   414
            Convinced it makes sense to use 
jaroslav@615
   415
            <a href="http://html.java.net">HTML for Java</a>
jaroslav@615
   416
            APIs for writing applications that are 
jaroslav@615
   417
            <em>written once, displayed anywhere</em>? Or do you have an
jaroslav@615
   418
            environment which is not supported? In such case you can bring
jaroslav@615
   419
            <a href="http://html.java.net">HTML for Java</a>
jaroslav@615
   420
            to your environment yourself. Just implement your own
jtulach@838
   421
            {@link org.netbeans.html.boot.spi.Fn.Presenter}!
jaroslav@615
   422
        </p>
jaroslav@615
   423
        
jaroslav@607
   424
        <h2>Other Resources</h2>
jaroslav@607
   425
        
jaroslav@607
   426
        <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
   427
        
jaroslav@607
   428
        The javadoc for latest and previous versions is also available
jaroslav@607
   429
        online:
jaroslav@607
   430
        <ul>
jaroslav@607
   431
            <li>Current <a target="_blank" href="http://bits.netbeans.org/html+java/dev/">development</a> version
jtulach@771
   432
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.3">0.8.3</a>
jtulach@757
   433
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.2">0.8.2</a>
jtulach@757
   434
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.1">0.8.1</a>
jtulach@654
   435
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8">0.8</a>
jaroslav@607
   436
            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.7.5">0.7.5</a>
jaroslav@607
   437
        </ul>
jaroslav@616
   438
        
jaroslav@616
   439
<style type="text/css">
jaroslav@616
   440
table.field td {
jaroslav@616
   441
    padding: 4px;
jaroslav@616
   442
    width: 18px;
jaroslav@616
   443
    height: 18px;
jaroslav@616
   444
    font-size: 1.5em;
jaroslav@616
   445
    border: 1px solid black;
jaroslav@616
   446
}
jaroslav@616
   447
table.field td.UNKNOWN {
jaroslav@616
   448
    background-color: #D6E4E1;
jaroslav@616
   449
    cursor: pointer;
jaroslav@616
   450
}
jaroslav@616
   451
table.field td.EXPLOSION {
jaroslav@616
   452
    background-color: #A31E39;
jaroslav@616
   453
}
jaroslav@616
   454
table.field td.DISCOVERED {
jaroslav@616
   455
    background-color: #9DB2B1;
jaroslav@616
   456
}
jaroslav@616
   457
</style>        
jaroslav@541
   458
    </body>
jaroslav@541
   459
</html>