src/main/javadoc/overview.html
author Jaroslav Tulach <jtulach@netbeans.org>
Thu, 05 Nov 2015 23:38:18 +0100
changeset 1017 10427ce1c0ee
parent 1006 a0f79e32d526
child 1021 c918924ad3c5
permissions -rw-r--r--
#250611: Builder style properties
     1 <!--
     2 
     3     DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     4 
     5     Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
     6 
     7     Oracle and Java are registered trademarks of Oracle and/or its affiliates.
     8     Other names may be trademarks of their respective owners.
     9 
    10     The contents of this file are subject to the terms of either the GNU
    11     General Public License Version 2 only ("GPL") or the Common
    12     Development and Distribution License("CDDL") (collectively, the
    13     "License"). You may not use this file except in compliance with the
    14     License. You can obtain a copy of the License at
    15     http://www.netbeans.org/cddl-gplv2.html
    16     or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    17     specific language governing permissions and limitations under the
    18     License.  When distributing the software, include this License Header
    19     Notice in each file and include the License file at
    20     nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
    21     particular file as subject to the "Classpath" exception as provided
    22     by Oracle in the GPL Version 2 section of the License file that
    23     accompanied this code. If applicable, add the following below the
    24     License Header, with the fields enclosed by brackets [] replaced by
    25     your own identifying information:
    26     "Portions Copyrighted [year] [name of copyright owner]"
    27 
    28     Contributor(s):
    29 
    30     The Original Software is NetBeans. The Initial Developer of the Original
    31     Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
    32 
    33     If you wish your version of this file to be governed by only the CDDL
    34     or only the GPL Version 2, indicate your decision by adding
    35     "[Contributor] elects to include this software in this distribution
    36     under the [CDDL or GPL Version 2] license." If you do not indicate a
    37     single choice of license, a recipient has the option to distribute
    38     your version of this file under either the CDDL, the GPL Version 2 or
    39     to extend the choice of license to its licensees as provided above.
    40     However, if you add GPL Version 2 code and therefore, elected the GPL
    41     Version 2 license, then the option applies only if the new code is
    42     made subject to such option by the copyright holder.
    43 
    44 -->
    45 <!DOCTYPE html>
    46 <html>
    47     <head>
    48         <title>HTML for Java APIs</title>
    49         <meta charset="UTF-8">
    50         <meta name="viewport" content="width=device-width, initial-scale=1.0">
    51         <style type="text/css">
    52         table.field td {
    53             padding: 4px;
    54             width: 18px;
    55             height: 18px;
    56             font-size: 1.5em;
    57             border: 1px solid black;
    58         }
    59         table.field td.UNKNOWN {
    60             background-color: #D6E4E1;
    61             cursor: pointer;
    62         }
    63         table.field td.EXPLOSION {
    64             background-color: #A31E39;
    65         }
    66         table.field td.DISCOVERED {
    67             background-color: #9DB2B1;
    68         }
    69         </style>
    70     </head>
    71     <body>
    72         <p>
    73          Use Java to write application logic; Use HTML5 to render the UI;
    74          {@link net.java.html.json.Model Animate an HTML page from Java}
    75          (see <a target="_blank" href="http://dew.apidesign.org/dew/#7212206">Duke being rotated</a> by CSS);
    76          Use {@link net.java.html.json.OnReceive REST} or
    77          <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>;
    78          interact with <a href="net/java/html/js/package-summary.html">JavaScript</a>;
    79          Get the best of both worlds!
    80 
    81          The goal of these APIs is to use full featured Java runtime
    82          (like real <a href="http://wiki.apidesign.org/wiki/HotSpot">HotSpot VM</a>),
    83          but still rely on a very lightweight rendering technology
    84          (so it can potentially fit
    85          <a href="http://bck2brwsr.apidesign.org">Bck2Brwsr</a> and definitely
    86          to various types of phones). What can be more lightweight
    87          (from a browser perspective) than
    88          <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>!?
    89          By default we use {@link net.java.html.boot.fx JavaFX's WebView}
    90          component to display the <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>.
    91          We eliminate the need to manipulate the DOM directly,
    92          there is a special {@link net.java.html.json Java to Knockout.js binding}.
    93          As a result the <a href="http://knockoutjs.com">HTML uses Knockout.js syntax</a>,
    94          yet the application code can be written in Java.
    95         </p>
    96 
    97         <h3>Improvements in version 1.3</h3>
    98 
    99         {@link net.java.html.json.Model Model classes} can generate
   100         builder-like construction methods if builder
   101         {@link net.java.html.json.Model#builder() prefix} is specified.
   102         The <em>JavaFX</em> presenter can be executed in headless mode -
   103         just specify <code>-Dfxpresenter.headless=true</code> when launching
   104         its virtual machine and no window will be shown. This is particularly
   105         useful for testing. Configure your <em>surefire</em> or <em>failsafe</em>
   106         plugins like: <pre>
   107 &lt;plugin&gt;
   108   &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
   109   &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
   110   &lt;version&gt;2.13&lt;/version&gt;
   111   &lt;configuration&gt;
   112       &lt;systemPropertyVariables&gt;
   113           &lt;fxpresenter.headless&gt;true&lt;/fxpresenter.headless&gt;
   114       &lt;/systemPropertyVariables&gt;
   115   &lt;/configuration&gt;
   116 &lt;/plugin&gt;
   117 </pre>
   118 
   119         <h3>What's Been Improved in Version 1.2.3?</h3>
   120 
   121         One can control {@link net.java.html.json.OnReceive#headers() HTTP request headers}
   122         when connecting to server using the {@link net.java.html.json.OnReceive}
   123         annotation. It is possible to have
   124         {@link net.java.html.json.ComputedProperty#write() writable computed properties}.
   125         There is an easy way to enable <a target="_blank" href="http://getfirebug.com/">Firebug</a> in
   126         the JavaFX based Web View -
   127         just run with <code>-Dfirebug.lite=true</code> as
   128         <a target="_blank" href="https://www.youtube.com/watch?v=2rxwY-QJiLo">this video</a>
   129         demonstrates.
   130         Bugfix of issues <a target="_blank" href='https://netbeans.org/bugzilla/show_bug.cgi?id=250503'>250503</a>,
   131         <a target="_blank" href='https://netbeans.org/bugzilla/show_bug.cgi?id=252987'>252987</a>.
   132 
   133         <h3>What's New in Version 1.1?</h3>
   134 
   135         <p>
   136             The content of a {@link net.java.html.BrwsrCtx context}
   137             can be selected by registering implementations under specific
   138             {@link org.netbeans.html.context.spi.Contexts.Id technology identifiers}
   139             and requesting them during
   140             {@link org.netbeans.html.context.spi.Contexts#newBuilder(java.lang.Object...) construction}
   141             of the context. <code>org.netbeans.html:ko4j</code> module's implementation
   142             offers <b>ko4j</b>, <b>xhr</b> and <b>websocket</b> identifiers
   143             for its registered services
   144             (e.g. {@link org.netbeans.html.json.spi.Technology},
   145             {@link org.netbeans.html.json.spi.Transfer} and
   146             {@link org.netbeans.html.json.spi.WSTransfer}).
   147             <code>org.netbeans.html:ko-ws-tyrus</code>
   148             module registers its
   149             {@link org.netbeans.html.json.spi.Transfer Java based JSON} and
   150             {@link org.netbeans.html.json.spi.WSTransfer WebSocket} implementations
   151             under the name <b>tyrus</b>.
   152         </p>
   153         <p>
   154             A particular DOM subtree
   155             that a <a target="_blank" href="http://knockoutjs.com">knockout.js</a> model gets
   156             applied to can be selected by using
   157             {@link net.java.html.json.Models#applyBindings(java.lang.Object,java.lang.String)
   158             Models.applyBindings(m, id)} with an id of an HTML element.
   159             There is new {@link net.java.html.json.Model#targetId()} attribute
   160             which controls behavior of the generated <code>applyBindings</code> method.
   161             If <em>specified and non-empty</em>, then the generated method
   162             will call {@link net.java.html.json.Models#applyBindings(java.lang.Object,java.lang.String)}
   163             with <code>this</code> and the provided {@link net.java.html.json.Model#targetId() target id}.
   164             If <em>specified, but left empty</em>, then the generated method
   165             calls {@link net.java.html.json.Models#applyBindings(java.lang.Object)}.
   166             <em>If unspecified</em>, the method will <b>not</b> be generated at all
   167             (a change with respect to older versions). However one can
   168             still use {@link net.java.html.json.Models#applyBindings(java.lang.Object)}
   169             or {@link net.java.html.json.Models#applyBindings(java.lang.Object,java.lang.String)}
   170             to perform the association of any model with the page element.
   171         </p>
   172         <p>
   173             Memory model when using Knockout bindings has been improved
   174             (required additions of two new methods:
   175             {@link org.netbeans.html.json.spi.PropertyBinding#weak()} and
   176             {@link org.netbeans.html.json.spi.FunctionBinding#weak()}) and
   177             now the Java {@link net.java.html.json.Model models} can garbage collect,
   178             when no longer used. Library writers that use
   179             {@link net.java.html.js.JavaScriptBody} annotation can also
   180             control garbage collection behavior of method arguments by
   181             setting {@link net.java.html.js.JavaScriptBody#keepAlive() keepAlive=false}
   182             attribute.
   183         </p>
   184 
   185         <h3>What's New in Version 1.0?</h3>
   186 
   187         <p>
   188             {@link net.java.html.json.Property#array() Array properties} are now
   189             mutable from the <a href="http://knockoutjs.com">knockout.js</a>
   190             point of view (required {@link org.netbeans.html.json.spi.Proto.Type#replaceValue one SPI change}).
   191             The page lookup mechanism can use {@link net.java.html.boot.BrowserBuilder#locale(java.util.Locale) locale}
   192             to load localized a page with appropriate suffix.
   193             All SPI were moved under the NetBeans namespace - e.g.
   194             {@link org.netbeans.html.boot.spi},
   195             {@link org.netbeans.html.context.spi},
   196             {@link org.netbeans.html.json.spi},
   197             {@link org.netbeans.html.sound.spi}, and also
   198             {@link org.netbeans.html.json.tck}. Methods annotated
   199             with {@link net.java.html.js.JavaScriptBody} annotation and
   200             without fallback Java code now throw {@link java.lang.IllegalStateException}
   201             with a message suggesting to switch to proper
   202             {@link net.java.html.BrwsrCtx#execute browser context} to
   203             prevent endless debugging when one forgets to do so.
   204         </p>
   205 
   206         <p>
   207         What's new in older versions? Click the
   208         <a href="#" onclick="return showHistoric(true)">link</a>
   209         to view even more
   210         <a href="#" onclick="return showHistoric(true)">historic changes</a> below:
   211         </p>
   212 
   213         <a name="historic.changes"></a>
   214         <div id="historic.changes">
   215             <script>
   216             function showHistoric(show) {
   217                 var e = document.getElementById("historic.changes");
   218                 if (show) {
   219                     e.style.display="block";
   220                 } else {
   221                     e.style.display="none";
   222                 }
   223                 return false;
   224             }
   225             showHistoric(false);
   226             </script>
   227 
   228         <h3>What's New in Version 0.9?</h3>
   229 
   230         <p>
   231             System can run in {@link net.java.html.boot.BrowserBuilder#classloader(java.lang.ClassLoader) Felix OSGi container} (originally only Equinox).
   232             {@link net.java.html.json.ComputedProperty Derived properties}
   233             now deeply check changes in other {@link net.java.html.json.Model model
   234             classes} they depend on and recompute their values accordingly.
   235             <a target="_blank" href="http://knockoutjs.com">Knockout.js</a> library has been updated
   236             to version 3.2.0.
   237         </p>
   238 
   239         <h3>What's New in 0.8.x Versions?</h3>
   240 
   241         <p>
   242             Setters or array properties on classes generated by {@link net.java.html.json.Model}
   243             annotation can be accessed from any thread. {@link org.netbeans.html.sound.spi.AudioEnvironment}
   244             can be registered into {@link net.java.html.BrwsrCtx}. There is
   245             a {@link net.java.html.json.Models#parse(net.java.html.BrwsrCtx, java.lang.Class, java.io.InputStream, java.util.Collection)  method}
   246             to parse a JSON array and convert it into
   247             {@link net.java.html.json.Model model classes}.
   248             Improved behavior of <code>enum</code> values in
   249             {@link net.java.html.json.Model knockout bindings}.
   250         </p>
   251 
   252         <p>
   253             Few bugfixes for better portability.
   254             New API for {@link net.java.html.boot.script.Scripts headless execution}
   255             on top of <em>Nashorn</em> - does not run <em>knockout for Java</em>
   256             fully yet
   257             (reported as <a href="https://bugs.openjdk.java.net/browse/JDK-8046013">JDK-8046013</a>),
   258             however even in current state it is quite
   259             {@link net.java.html.boot.script.Scripts useful for testing}
   260             of
   261             {@link net.java.html.js Java/JavaScript interactions}.
   262         </p>
   263 
   264         <p>
   265             {@link net.java.html.boot.fx.FXBrowsers} has been extended
   266             with new helper methods to make it easier to use HTML+Java
   267             API in existing JavaFX applications.
   268             The annotation processor is made
   269             more robust with respect to errors in callback syntax of
   270             {@link net.java.html.js.JavaScriptBody} body parameter.
   271             Javadoc of {@link net.java.html.BrwsrCtx#execute} method
   272             has been improved based on a failure of its usability study.
   273             There can be additional parameters to methods annotated by
   274             {@link net.java.html.json.OnReceive} that allows one to
   275             pass state when a JSON call is made and use it when it finishes.
   276             The mechanism of discovery of sibling HTML page has been
   277             extended to work on systems that don't support
   278             {@link java.lang.Class#getProtectionDomain}.
   279         </p>
   280 
   281         <p>
   282             The first argument of method annotated by
   283             {@link net.java.html.json.OnReceive} annotation has to
   284             be the associated {@link net.java.html.json.Model model class}.
   285         </p>
   286 
   287         <p>
   288             {@link net.java.html.json.OnReceive} annotation now accepts
   289             {@link java.util.List} of data values as second argument
   290             (previously required an array).
   291         </p>
   292 
   293 
   294         <h3>What's New in 0.7.x Versions?</h3>
   295 
   296         <p>
   297             {@link net.java.html.js.JavaScriptBody} annotation has new attribute
   298             {@link net.java.html.js.JavaScriptBody#wait4js()} which allows
   299             asynchronous execution. Libraries using
   300             {@link net.java.html.js.JavaScriptBody} are urged to use this
   301             new attribute as much as possible, as it can speed up execution
   302             in certain environments.
   303         </p>
   304 
   305         <p>
   306             Use {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable)} in
   307             multi-threaded environment to execute your code on the browser thread.
   308             See example
   309             {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable) using Java timer}.
   310         </p>
   311         </div>
   312 
   313         <h3>Interesting Entry Points</h3>
   314 
   315         <p>Learn how to {@link net.java.html.json.Model animate an HTML page from Java}
   316             without referencing single HTML element from the Java code.
   317         </p>
   318         <p>Use {@link net.java.html.json.OnReceive JSON} to communicate
   319             with REST based server API.
   320         </p>
   321         <p>Use <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>
   322             and JSON.
   323         </p>
   324         <p>Call JavaScript methods from Java and vice versa, via
   325             <a href="net/java/html/js/package-summary.html">JavaScriptBody</a>.
   326         </p>
   327 
   328         <h3>Getting Started</h3>
   329 
   330         There are <a href="http://wiki.apidesign.org/wiki/DukeScriptInNetBeans">many ways</a>
   331         to start developing
   332         <a href="http://html.java.net">Html for Java</a> application.
   333         However to be sure one chooses the most recent setup, it is recommended
   334         to switch to good old command line and use a
   335         <a href="http://wiki.apidesign.org/wiki/Knockout4Java">Maven archetype</a>
   336         associated with every version of this project. Make sure at least
   337         <em>JDK7</em> is your installed Java and type:
   338         <pre>
   339 $ mvn archetype:generate \
   340  -DarchetypeGroupId=org.apidesign.html \
   341  -DarchetypeArtifactId=knockout4j-archetype \
   342  -DarchetypeVersion=0.8 <em># or newer version, if available</em>
   343         </pre>
   344         Answer few questions (for example choose myfirstbrwsrpage as artifactId)
   345         and then you can:
   346         <pre>
   347 $ cd myfirstbrwsrpage
   348 $ mvn process-classes exec:java
   349         </pre>
   350         In a few seconds (or minutes if
   351         <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
   352         decides to download the whole Internet of dependencies) you should
   353         see a sample Hello World application rendered in a
   354         <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
   355         web view component (that of course requires your JDK to come
   356         with <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>;
   357         <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK7
   358             and JDK8 from Oracle</a> contain everything that is needed).
   359         The generated application is built around one
   360         Java source (uses the {@link net.java.html.json.Model} annotation to
   361         auto-generate another <code>Data.java</code> class during compilation)
   362         and one HTML file (uses the <a href="http://knockoutjs.com">Knockout</a>
   363         syntax to <code>data-bind</code> the HTML elements to the
   364         generated <code>Data</code> model):
   365         <pre>
   366 $ ls src/main/java/**/DataModel.java
   367 $ ls src/main/webapp/pages/index.html
   368         </pre>
   369         That is all you need to get started. Play with the sources,
   370         modify them and enjoy
   371         <a href="http://html.java.net">Html for Java</a>!
   372 
   373         <h2>IDE Support</h2>
   374 
   375         <p>
   376             This API is part of <a target="_blank"
   377             href="http://netbeans.org">NetBeans.org</a> project and as such
   378             it works naturally with the <a target="_blank"
   379             href="https://netbeans.org/features/index.html">NetBeans IDE</a>.
   380             On the other hand, the API is using nothing NetBeans specific,
   381             it builds on standard Java6 APIs and as such it shall work fine
   382             in any IDE.
   383         </p>
   384 
   385         <p>
   386             A lot of work is done by
   387             <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">
   388             annotation processors</a>
   389             that generate various boiler plate code during compilation. This
   390             is a standard part of Java since JDK6, but for example Eclipse
   391             is known not to deal with processors well and developers using
   392             it need to be careful. IntelliJ users hasn't reported any issues
   393             and of course, NetBeans IDE support for
   394             <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">processors</a>
   395             is outstanding.
   396         </p>
   397 
   398         <p>
   399             When using {@link net.java.html.js.JavaScriptBody} annotation, it is
   400             useful to do a bit of post processing of classes. There is a
   401             <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
   402             plugin for that.
   403             NetBeans IDE will invoke it when doing a build. Other IDEs may
   404             need some hint to do so.
   405             Anyway: If one does not see all (generated) sources or is getting
   406             {@link java.lang.LinkageError}s when executing the application,
   407             switch to command line and do clean build
   408             from there:
   409         </p>
   410         <pre>$ mvn clean install</pre>
   411         <p>
   412             If that succeeds, your IDE of choice will hopefully
   413             pick the generated sources up and present the result of the build
   414             properly. If not,
   415             <a href="https://netbeans.org/downloads/">download NetBeans</a>,
   416             you will be pleasantly
   417             surprised - for example with our excellent
   418             <a href="net/java/html/js/package-summary.html#debugging">Java/JavaScript
   419             debugging</a> support.
   420         </p>
   421 
   422         <a name="deploy">
   423         <h2>Deploy Your Application</h2>
   424         </a>
   425 
   426         <p>
   427         It is not goal of this documentation to list all possible ways
   428         to package and deploy applications which use this API. However it is
   429         important for new comers to see the benefits of using the
   430         <a href="http://html.java.net">HTML for Java</a> API and as such
   431         let's list at least few bundling options, known to work at the time of writing
   432         this documentation.
   433         </p>
   434 
   435         <p>
   436         First of all, this is a <em>client technology</em>. You write client applications
   437         with it which may, but need not connect to a server. You don't need
   438         Tomcat or WebLogic to deploy
   439         <a href="http://html.java.net">HTML for Java</a> applications.
   440         </p>
   441 
   442         <p>
   443             <img src='resources/javafx_logo.jpg' width="64"
   444                  height="64" align="left"/>
   445             The sample project generated by
   446             <code>org.apidesign.html knockout4j-archetype</code> is configured
   447             to use <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
   448             as the rendering technology. This setup is primarily suitable for
   449             development - it needs no special packaging, starts quickly and
   450             allows you to use classical HotSpot VM debuggers. A final
   451             artifact from the build is also a ZIP file which you can use
   452             and distribute to your users. Good for desktop applications.
   453         </p>
   454 
   455         <p>
   456             <img src='resources/netbeans_logo.jpg' width="64"
   457                  height="64" align="right"/>
   458             <img src='resources/eclipse_logo.png' width="64"
   459                  height="64" align="right"/>
   460             All the <a href="http://html.java.net">HTML for Java</a> libraries
   461             are packaged as <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
   462             bundles and as such they can easily be run in NetBeans as well as
   463             in Eclipse. As a result one can use
   464             <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
   465             and have a common module system for both platforms. In addition to that
   466             one can render using
   467             HTML and have a common UI in both platforms. In such case
   468             your application would be packaged as a set of
   469             <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a> bundles.
   470             Read
   471             <a href="http://wiki.apidesign.org/wiki/HTML">more</a>...
   472         </p>
   473 
   474         <p>
   475             <img src='resources/chrome_logo.png' width="64"
   476                  height="64" align="left"/>
   477             <img src='resources/safari_logo.png' width="64"
   478                  height="64" align="left"/>
   479             <img src='resources/ie_logo.png' width="64"
   480                  height="64" align="left"/>
   481             <img src='resources/firefox_logo.png' width="64"
   482                  height="64" align="left"/>
   483 
   484             There is more and more attempts to execute Java bytecode
   485             in a browser, without any special Java plugin installed.
   486             The <a href="http://html.java.net">HTML for Java</a> is
   487             carefully designed to produce lightweight, well performing
   488             applications even on such restricted environments. It uses
   489             no reflection calls and that allows to statically pre-compile
   490             the applications into JavaScript. One of such environments
   491             is called <a href="http://wiki.apidesign.org/wiki/Bck2Brwsr">Bck2Brwsr</a>,
   492             another <a href="http://wiki.apidesign.org/wiki/TeaVM">TeaVM</a>. Both support the
   493             {@link net.java.html.js.JavaScriptBody} annotation. Read
   494             <a href="http://wiki.apidesign.org/wiki/Bck2BrwsrViaCLI">more</a> or play
   495             a minesweeper game packaged for your browser
   496             (of course <a target="_blank"
   497                 href="http://source.apidesign.org/hg/html~demo/file/ea79b73d590a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java">
   498                 written</a> in Java):
   499         </p>
   500 
   501         <script type="text/html" id="field">
   502             <table class="field">
   503                 <tbody>
   504                     <!-- ko foreach: rows -->
   505                     <tr>
   506                         <!-- ko foreach: columns -->
   507                         <td data-bind="css: style, click: $parents[1].click" >
   508                             <div data-bind='html: html'></div>
   509                         </td>
   510                         <!-- /ko -->
   511                     </tr>
   512                     <!-- /ko -->
   513                 </tbody>
   514             </table>
   515         </script>
   516 
   517         <div data-bind="template: { name : 'field', if: fieldShowing }"></div>
   518 
   519         <!-- boot bck2brwsr -->
   520         <script type="text/javascript" src="resources/teavm.js"></script>
   521         <script>
   522             var vm = new VM();
   523             vm.loadClass('org.apidesign.demo.minesweeper.MainBrwsr');
   524         </script>
   525 
   526         <p>
   527             <img src='resources/ios_logo.jpg' width="64"
   528                  height="64" align="right"/>
   529             <img src='resources/android_logo.jpg' width="64"
   530                  height="64" align="right"/>
   531 
   532             Now when we have seen that the
   533             <a href="http://html.java.net">HTML for Java</a> applications
   534             can run on any modern browser, we can ask whether they can also
   535             fit into a phone!? Yes, they can and especially to phones
   536             that can execute Java code already! Just by changing your
   537             packaging you can create an APK file and deploy it to your
   538             Android phone.
   539             Read <a target="_blank" href="http://wiki.apidesign.org/wiki/DlvkBrwsr">more</a>...
   540             In case you'd like your application to reach out to second biggest
   541             group of smartphone users, don't despair: It
   542             seems the set of devices that can execute
   543             <a href="http://html.java.net">HTML for Java</a> applications
   544             has been extended to <em>iPads</em> and <em>iPhones</em>. Get the
   545             <a target="_blank" href="http://wiki.apidesign.org/wiki/IBrwsr">details here</a>
   546             and deploy everywhere!
   547         </p>
   548         <p>
   549             Convinced it makes sense to use
   550             <a href="http://html.java.net">HTML for Java</a>
   551             APIs for writing applications that are
   552             <em>written once, displayed anywhere</em>? Or do you have an
   553             environment which is not supported? In such case you can bring
   554             <a href="http://html.java.net">HTML for Java</a>
   555             to your environment yourself. Just implement your own
   556             {@link org.netbeans.html.boot.spi.Fn.Presenter}!
   557         </p>
   558 
   559         <h2>Other Resources</h2>
   560 
   561         <img src="net/java/html/json/doc-files/DukeHTML.png" width="256" height="184" alt="Duke and HTML5. Together at last!" align="right"/>
   562 
   563         The javadoc for latest and previous versions is also available
   564         online:
   565         <ul>
   566             <li>Current <a target="_blank" href="http://bits.netbeans.org/html+java/dev/">development</a> version
   567             <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/1.1">1.1</a>
   568             <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/1.0">1.0</a>
   569             <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.9">0.9</a>
   570                 and historic ones (<a target="_blank" href="http://bits.netbeans.org/html+java/0.8.3">0.8.3</a>,
   571                 <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.2">0.8.2</a>,
   572                 <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.1">0.8.1</a>,
   573                 <a target="_blank" href="http://bits.netbeans.org/html+java/0.8">0.8</a>, and
   574                 <a target="_blank" href="http://bits.netbeans.org/html+java/0.7.5">0.7.5</a>)
   575             </li>
   576         </ul>
   577     </body>
   578 </html>