Release Notes for OpenLaszlo 3.2

OpenLaszlo 3.2 is the next fully-qualified release since 3.1.1. OpenLaszlo 3.2 includes useful new features, many new incubator contributions, improvements to the documentation, and numerous bug fixes. Many of the incubator contributions came from the Laszlo Mail team, which has shared some of the look-and-feel from their components. In addition, there have been significant contributions from the OpenLaszlo community - thank you!

For every release, we rely on the OpenLaszlo community to help ensure the quality of the platform release and to determine its future direction. We encourage you to report any problems, and to make suggestions for enhancements, through our JIRA bug tracking system.

Here is a summary of what you will find in these notes:

New Features since OpenLaszlo 3.1.1

Since release 3.1.1, the following features have been added to OpenLaszlo:

New Contributions in the Incubator

The incubator directory contains components and other code that have been contributed to the OpenLaszlo project, but have not yet been fully integrated into the product. It is intended as an easy way to contribute code that doesn't have the level of documentation, testing, or API review that is required in other directories, or that is simply contributed too late in the release cycle to place elsewhere.

There have been many new items added to the incubator in this release. A large number of items were contributed by the Laszlo Mail team at Laszlo Systems after receiving many requests for their awesome components. Other members of the OpenLaszlo community have also generously shared their components and utilities. Here is a listing of some of the newest items in the incubator to tempt you:

Incubator Contributions Promoted to Components

There were two major changes in the components for OpenLaszlo 3.2. First, the components/lz/floatinglist.lzx was split into two pieces: components/lz/basefloatinglist.lzx, which contains functionality and no look-and-feel, and components/lz/plainfloatinglist.lzx, which is a basefloatinglist subclass that defines a thin border around the list.

Second, the functionality in components/incubator/newcombobox.lzx was moved into components/base/basedatacombobox.lzx. And, components/lz/datacombobox.lzx uses the components/lz/floatinglist.lzx. Note that components/lz/combobox.lzx has been preserved to ensure compatibility with existing applications, just as components/incubator/newcombobox.lzx is a subclass of basedatacombobox.lzx for the same reason.

We recommend that you consider using datacombobox.lzx, which has been defined to perform better than combobox.lzx.

<img> Tags within Rich Text Views (LPP-874)

A partial implementation of the HTML <img> tag allows you to include images within HTML text. There are some limitations; please see the documentation.

MSAA-compatible Accessibility (LPP-872)

By using Active Accessibility and following accessible design practices, developers can make applications running on Windows more accessible to many people with vision, hearing, or motion disabilities. OpenLaszlo now includes a partial implementation of this specification, with some limitations that depend on the target runtime. Please see the documentation.

Rich Text Editor Palette in Incubator (LPP-873)

A complete, standalone rich text editor with toolbar is now available. Just instantiate it as a normal view and you'll have a rich text editor with toolbar controls for bold, underline, italic, font color, font face, font name, hyperlink and 'remove format'. This is a contribution from the LaszloMail team.

JavaScript Compiler Ported from Jython to Java (LPP-752)

The resulting compiler is much faster, with reported gains of up to 5x.

Documentation Improvements

There have been many improvements to the documentation. Significant new content has been added, existing content has been clarified and updated, and many of the typographical errors have been corrected. The documentation is virtually always under development. For the most up-to-date version, you may want to consult the nightly build of the documentation hosted on OpenLaszlo.org. (The latest documentation may include information pertinent to the next-following release (e.g. 4.0) and therefore will not necessarily be accurate for 3.2; however, it will include ongoing general improvements.)

Automated Unit Tests

Automated unit test are now available for those who build OpenLaszlo from sources. The cool thing about automated unit tests is 'ant runlzunit', which automatically runs the known unit tests against a build. These work on Mac and PC; they have not been tested under Linux.

New <handler> and <event> Syntax

There is a new syntax for declaring events and event handlers. The old syntax still works, but we came up with this new style because people find the current syntax somewhat obscure, and anonymous methods sometimes have unanticipated results.

The documentation has not caught up with the new syntax, but there is a wiki page that explains the new idiom.

Backwards-incompatible Changes

The KRANK feature has been removed (LPP-871). This capability was only fully supported under Flash6 and improved performance in later players made it unnecessary.

Significant Bugs Fixed

Several dozens of bugs have been fixed since the 3.1.1 release. Consult JIRA for complete information. Note that the 3.2 release is referred to as "Sage" in JIRA.

Known Defects

For the most current and complete information, consult the JIRA bug database.

There are two particular problems that we would like to call to your attention:

Mouseovers and Animators

There is a common "UI" design pattern that is easily implemented within OpenLaszlo. This implementation, however, reveals a bug that some developers have encountered. In this particular UI design, a view is expanded in some dimension on rollover of the mouse and contracted upon mouseout. The code is often written like the following:

<canvas>
   <view width="100" height="100" bgcolor="blue"
         onmouseover="this.expand.doStart()"
         onmouseout="this.contract.doStart()" >
       <animator name="expand"   attribute="width" to="150"  duration="500" />
       <animator name="contract" attribute="width" to="100"  duration="500" />
   </view>
</canvas>

The visual effect of the above code will fail, however, if the mouse is moved so fast by the user that the 2nd mouseover event occurs before the first expand animation is complete.

In other words, calling doStart() on an animator that is already running does nothing. It seems that the view has missed the 2nd mouseover event, when in actuality it is the animator that ignored its doStart() method call because it was already running.

For now, the work around is to use the javascript interface for animators like the following.

<canvas>
   <view width="100" height="100" bgcolor="red"
         onmouseover=" this.animate('width',150,500) "
         onmouseout="  this.animate('width',100,500) " />
</canvas>

in this case, new animators are created with each new mouse event. These animators will run independently and so will not have the same problems associated with them like those encountered with the animator tags. Run the examples above, and move the mouse quickly in and out of both views. Notice how in the second example the motion of the red box seems more natural.

Applications Embedded in IE

Users have reported problems with applications embedded in some versions of Internet Explorer -- the applications don't appear. If you can't get your OpenLaszlo application to show up in IE, try using the older version of embed.js from 3.0.2. We couldn't fix it because we couldn't reproduce the problem, but using older versions of the embed.js sometimes made the problem go away.