Change Log for OpenLaszlo 3.3.1
This document describes the past version changes for OpenLaszlo (or Laszlo Presentation Server, "LPS"). Please see the release notes for information regarding the current release.
- Changes in:
- Defects fixed in:
OpenLaszlo 3.3.1 addresses one issue. There was a single regression, which is that the behavior of simplelayout
was inadvertantly broken in OpenLaszlo 3.3. In this release, the behavior of simplelayout
has been corrected such that it applies only to a single axis.
Since the 3.2 release, there have been many notable bug fixes, as well as the addition of the new features, which are summarized below.
- New alignment attribute for grid text
- Drag improvements for basewindow
- Compiler support for streaming video
- French translation of the documentation
- Numerous bug fixes to datacombobox
- The
lzc.bat
file has been fixed for the Windows distribution
- The default value for the
trimwhitespace
property was
changed (in 3.2 actually) to false
to match defaults for
XML loading in DHTMl and SWF. Use <dataset
trimwhitespace="true"
> to get the old behavior.
Since the 3.1 release, the Krank feature has been removed, scores of bugs have been fixed, and the new features listed below have been added.
- New contributions in the incubator
- <img> tags within rich text views (LPP-874)
- MSAA-compatible accessibility (LPP-872)
- Rich text editor palette in incubator (LPP-873)
- JavaScript compiler ported from Jython to Java (LPP-752)
- Automated unit tests
- New <handler> and <event> syntax
New Features since OpenLaszlo 3.0.2 include:
- Charting and Graphing Components
- Flash 8 file generation
- XMLHttpRequest ("ajax") API
- Rich Text Class
- New components: hbox, vbox, and image
- Local datasets
- Applications default to window size
- "View source" menu item
- Browser history integration: the default HTML wrappers now include support for browser history and setcanvasAttribute()
- setcanvasAttribute() Javascript function can optionally add browser history events
- Tutorial introduction to Drawview
- Version detection
- Developer console enhancements
- Global "hand cursor" parameter
- Backtrace facility in the debugger
- Other debugger improvements
- Splash screen takes percentages
- New goodies in the incubator
- OpenLaszlo 3.0.2 is a maintenance release only. See Fixed Defects section for details.
- OpenLaszlo 3.0.1 is a maintenance release only. See Fixed Defects section for details.
LPS 3.0 introduces several new features:
- SOLO deployment
- Smaller file sizes (using internal gzip compression)
- Dynamic libraries
- Unicode support
- Optimized for Flash Player versions 6 and 7
- Settable timeouts
- Drawing API
- Client fonts
- Resizeable canvas
- Integration with browser JavaScript
- Support for browser back button
- Support for ("right click") context menu
- Support for mouse wheel
- Text maxlength and restriction
- Debugging improvements
- Performance enhancements
- Separate Designer and Deployer guides
- The name of the product is now "OpenLaszlo"
Most of the new features are described in the product documentation. For others (timeouts, fonts) these notes constitute the primary documentation.
SOLO Deployment
Laszlo applications can be made available on the web, or deployed in either of two ways:
- Deploy SOLO (Standalone OpenLaszlo Output) from any HTTP Web server
- Deploy with OpenLaszlo Server
With SOLO deployment, the LZX source is pre-compiled into a stand-alone SWF
file that can be placed within the HTML docs directory of a common HTTP Web
Server (such as Apache or IIS). SOLO deployments are simple to manage, and
supported by nearly any Web hosting service.
With SOLO deployment, the OpenLaszlo Server is not required for operation of the application (although the Server is
required for developing the application).
With OpenLaszlo Server deployment, the LZX source is placed within the
Web-apps directory of the OpenLaszlo Server, and is dynamically compiled.
OpenLaszlo Server deployment requires a Java Application Server or servlet
container. It provides additional capabilities dependent on the server,
including support for SOAP, XML-RPC, Java-RPC and persistent connections.
The OpenLaszlo Server is also required for applications that use some media formats that are not
natively supported by the Flash player. The OpenLaszlo sever transcodes these media files "on the fly"
into formats supported by the Flash player.
See the "Proxied and Solo Applications" chapter of the Developer's Guide for more information.
Internal compression
The compiler now employs internal gzip compression. This results in substantially smaller object file sizes.
Dynamic Libraries
A dynamic library is a portion of a program that can be loaded after the main application execution file has loaded. The goal for dynamic
libraries is to reduce the initial download size of a Laszlo application. This is important because initial download size (including all
requests that precede initial user interaction) is used to evaluate web applications. Reducing the initial download size has
the additional benefits of reducing the time to first interaction (although there are other ways of doing this), and of reducing
bandwidth costs in the case where an optional feature of the application is not used.
See the Program Structure chapter of the Software Developer's Guide for details.
Unicode
Unicode fonts such as CJK fonts are now supported in <text>
and <inputtext>
fields. Unicode is supported:
- In Laszlo source files. The text in a
<text>
and <inputtext>
tag and within string literals in JavaScript code may be unicode
- In the user interface. Text and Inputtext views can display unicode text, and take unicode input.
- In the data compiler. XML data that is compiled into an application, or request at runtime, may contain unicode text, if the XML source file uses the
encoding
attribute to the XML processing directive (below).
The Laszlo components, such as <button>
, do not work with unicode fonts. (They are fixed-height, and the default height is incorrect for most fonts.) Only the core classes, <text>
and <inputtext>
, are automatically sized for unicode fonts.
Encoding
By default, LZX now expects text to be UTF-8. You can specify a different
encoding within an <?xml?>
processing directive at the beginning of an application source file or an XML data file:
<?xml encoding="UTF-16"?>
<canvas>…</canvas>
<?xml encoding="ISO-8859-1"?>
<data>…</data>
Swf6 and Swf7 support
The compiler now outputs, and has been optimized for, swf6 and swf7 binaries. Swf6 is the default;the swf7 target is available as an option.
Swf5 format is no longer supported.
Settable Timeouts
Settable Timeouts is a mechanism for setting the timeout of a request. There are global settings for data request and media request
timeouts, and per-dataset requests.
API
New canvas attributes:
name | type | default | description |
dataloadtimeout |
number |
30000 (30s) |
timeout time in milliseconds for data requests |
medialoadtimeout |
number |
30000 (30s) |
timeout time in milliseconds for media requests |
dataloadtimeout
is the defaults for newly created datasets.
Changing it doesn't have an effect on dataasets that already exist.
New dataset attribute:
name | type | default | description |
dataloadtimeout |
number |
30000 (30s) |
timeout time in milliseconds for this dataset |
The timeout time can be changed at runtime, and that will affect any subsequent requests made on behalf of the dataset.
Drawing API
LZX now includes a subset of the WHAT-WG graphics API .
A new class DrawView extends LzView.
See the LZX Reference Manual for description of this class.
Client fonts
A client font is a font that is located on the client machine. Text that uses client fonts is faster, and avoids the size penalty of an embedded
font (a font that is compiled into the application). This is particularly important with CJK fonts, which are many megabytes.
Previous versions of OpenLaszlo could only use embedded fonts. This release can also use client fonts:
The value of the font attribute is the name of a font. This may be the name of an embedded font
(one that has been declared with the <font> tag), or a client font (one that is available on the client operating system).
There are three always-defined client fonts, which can be accessed by special names. (These names will probably change prior to the final release.)
sans-serif
serif
monospace
There are also two Japanese fonts, the
equivalent of _sans
and _serif
, whose names can
only be written in Unicode.
Resizable Canvas
The canvas width and height can be specified as a percentage (e.g. <canvas width="50%">
).
When the canvas dimension are a percentage value, the application is scaled according to the size of the HTML page.
In this, onheight
and onwidth
events on the canvas are generated when embedding HTML page is resized.
Communication with browser JavaScript
A new service LzHistory(), and a new JavaScript function LzSetCanvasAttribute(), allow two-way communication between the a Laszlo
application and the browser's Javascript engine.
You can access the javascript engine in the browser using the loadJS method on LzBrowser:
LzBrowser.loadJS(js, target)
argument | value |
js |
JavaScript string to execute |
target |
Optionally specifies a named frame in which to execute the JavaScript expression. |
By default, the JavasSript expression specified in js
is executed in the current browser frame.
See the Browser Integration chapter of the Software Developer's Guide for more information and examples.
Browser Back Button support
The LzHistory mechanism makes it possible for Laslzo applications to capture program states and move among them using the browswer's "back" button.
See the "Browser Integration" chapter of the Developer's Guide for details.
Performance Improvements
Several architectural changes have been made to improve performance:
- Register allocation
- The compiler now uses registers. The user-visible effect of this is a significant speed-up in the generated code.
- Clipped views are faster
- Clipping uses swf6 primitives. The user-visible effect is better performance for clipped views.
- Faster compiler
- Assembler now implemented in Java rather than Python. The user-visible effect is that Laszlo apps compile faster.
- Internal file compression
- Application files are compressed internally, regardless of http encoding.
This results in smaller transfer sizes on clients that don't accept the gzip encoding, as well as a smaller application size
in the browser cache.
- Client fonts
- Text fields that use client fonts are significantly faster than those that use embedded fonts.
- Inlined classes.
- An inlined class is a class that is applied to an instance when an application is compiled, rather than when the application is instantiated. An inlined class has the same semantics as a regular class, except that the class cannot be instantiated or otherwise referred to by name in script code.
An inlined class is similar to an inline function, or a macro, in other languages.
Text maxlength and restrictions
Text fields have new attributes
maxlength: max number of chars you can add to an text field
pattern: whitelist or blacklist of chars that can be added to a text field
which follow the same semantics as the Flash TextField object fields of the same names
Debugging improvements
Inspecting objects is more robust and readable.
The size of a string or array is now included as part of its type. This can be useful when deciding whether
to inspect a string or array that has been abbreviated (i.e., if you inspect a gigantic string, the debugger
will print the full string, which may take a long time.)
ECMAScript changes
When it can, the compiler will warn about mis-matched case for JavaScript tokens. This is in anticipation of full ECMAScript compatibility
which enforces case-sensitivity.
Support for ("right click") context menu
The right click "context" menu is now supported. Documentation forthcoming in the next release. Here is a sample
program that demonstrates the API:
<canvas debug="true" width="1800" height="800">
<method event="oninit">
Debug.showInternalProperties = true;
</method>
<debug x="200" fontsize="14" width="600" height="400"/>
<script>
function rightclick_handler (obj, menuobj) {
Debug.write("rightclick context menu", obj, menuobj);
}
function my_itemhandler(obj, item) {
Debug.write("menu item selected", obj, item);
}
var cm1 = new ContextMenu(rightclick_handler);
cm1.hideBuiltInItems();
cm1.addItem(new ContextMenuItem("LZX Canvas Custom Item!", my_itemhandler));
canvas.setContextMenu(cm1);
var cm2 = new ContextMenu(rightclick_handler);
cm2.hideBuiltInItems();
cm2.addItem(new ContextMenuItem("View Custom Item 1", my_itemhandler));
cm2.addItem(new ContextMenuItem("View Custom Item 2", my_itemhandler));
cm2.addItem(new ContextMenuItem("View Custom Item 3", my_itemhandler));
var cm3 = new ContextMenu(rightclick_handler);
cm3.hideBuiltInItems();
cm3.addItem(new ContextMenuItem("Text Custom Item 1", my_itemhandler));
cm3.addItem(new ContextMenuItem("Text Custom Item 2", my_itemhandler));
</script>
<simplelayout/>
<text id="foo" fontsize="26"
oninit="setContextMenu(cm3)">FOOBAR</text>
<view id="pp"
width="200" height="200" bgcolor="blue"
oninit="setContextMenu(cm2)"/>
</canvas>
Mouse wheel Support
OL 3.0 has an event called LzKeys.onmousewheeldelta. See the Reference Manual.
Documentation restructuring
The Developer's Guide ("Guide to Designing, Developing and Deploying Laszlo Applications") has been trifurcated into Developer's, Designer's and Deployer's Guides
in order to
tailor information to different audiences.
Name Change: Goodbye "Laszlo Presentation Server", hello "OpenLaszlo Server"
With this release the Laszlo Presentation Server ("LPS") has been renamed the OpenLaszlo Server. Accordingly the
"Start Laszlo Presentation Server" menu item and alias has been renamed to "Start OpenLaszlo Server", and similarly for "Stop".
The Laszlo Explorer and documentation have been edited to reflect this change, although their are many places where the old
nomenclature persists. Over time the documentation and user-visible artifacts will be transitioned to OpenLaszlo, although
in the code the LPS terminology is likely to persist indefinitely (for example, in directory names).
Significant Bug Fixes since LPS 2.2
Since 2.2 many bugs have been remedied. Among the more significant:
- XML Data from non-English locales no longer generate "unparseable date" errors.
- Drawing API LzDrawview (added in 3.0b2) is now in the LZX Reference.
See below for a cumulative list.
New functionality in OpenLaszlo 3.0 has necessitated a few backwards-incompatible changes from prior releases.
- Default font is client font, not embedded font
- The default font is now the client font "verdana". Client fonts cannot be rotated and their opacity cannot be
varied. You can change the default by using a <font> on the canvas.
- Change in behavior of <font> tag
- You cannot mix embedded fonts and device fonts in the same text object. It must be one or the other. This fact subtly changes the behavior of the
<font> tag.
For example the following program works correctly in earlier releases, but does not in 3.0:
<canvas height="70">
<font name="helmet" src="helmetr.ttf"/>
<font name="arioso" src="ariosor.ttf"/>
<text fontsize="20">
<font face="helmet">helmet</font>
<font face="arioso">arioso</font>
</text>
</canvas>
The "embedfonts" argument to a textfield will specify whether it uses embedded fonts or not.
It will also be calculated automatically based on the font in effect on the text object, so for example
<text fontsize="20" font="helmet">
<font face="helmet">helmet</font>
<font face="arioso">arioso</font>
</text>
Would work because it would set set the embed flag implicitly.
In the original example, the text clip thinks it is using a device font, because that is what is the "current font" is when it is instantiated.
It doesn't look inside and see the embedded fonts used in the HTML, and even if it did, you cannot mix device and embedded fonts in the same text object.
To get the expected (2.2) behavior, use
<text embedfonts="true"> .
..
- Case Sensitivity
- Arrays that had been null are now empty
When a view is built, subviews[]
is initialized to an empty array. In releases before OpenLaszlo 3.0 it was null. If your program
depended on testing for null, you will need to modify it --for example, by testing for subviews.length == 0.
- LPS-2.2.1 is a maintenance release only. See Fixed Defects section for details.
- LPS no longer supports 1.3 JREs/JDKs.
- LPS requires container support for the 2.3 (or later) version of the servlet specification
- The provided fonts and components were moved from $LPS_HOME/WEB-INF/lps/{fonts,components} to $LPS_HOME/lps/{fonts,components}.
(The default include directories for the compiler were changed to match)
- The provided includes and assets were moved from $LPS_HOME/{assets,includes} to $LPS_HOME/lps/{assets,includes}.
- The provided administrator console moved to $LPS_HOME/lps/admin/console.lzx.
- The default location of the LPS caches and logs moved to $LPS_HOME/WEB-INF/lps/work
- The
?lzrecompile=true
can be used to force a recompile when the lps.properties compMgrDependencyOption is set
to never
.
- The LPS server statistics now display maximum request times for the 1, 5, and 15 minute periods.
- The default location of the LPS cache directories is now underneath the web application's WEB-INF directory.
- There are now separate hscrollbar and vscrollbar components that
can be used to minimize application size.
- Setting width (or height) to null unsets the width (or height).
- There is a new defaultRequestType lps configuration property (in
lps.properties) for controlling the what the LPS does with
urls that end in .lzx that don't have an lzt query string.
- There is a sample deployment configuration provided at WEB-INF/lps/config-deploy.
- The LPS server statistics now display maximum request times for the 1, 5, and 15 minute periods.
- Updated lzx.dtd verified for use with Eclipse
- LPS-2.1.2 is a maintenance release. See Fixed Defects section for details.
- LPS-2.1.1 is a maintenance release only. See Fixed Defects section for details.
- New component:
grid
- New license key format. Existing 2.0 license keys must be upgraded to 2.1 keys in
order for them to work with 2.1. Please contact
sales@laszlosystems.com.
- New components:
tree
and slider
- New animation tutorial.
- Faster initial compile of applications that use components.
- The baseline and some character advances were modified in the
default (verity) fonts.
If you are porting an application from 2.0p to 2.0 that was laid out
pixel-accurately by hand,
you may need to re-make adjustments.
- The compilation cache is now optimized to avoid recompiles when
all that is needed is a re-encode (from gzip to uncompressed
or vice-versa).
- Developer packages now only include gzip encoded versions of LZX
files in the pre-populated cache. This will cause browsers which do not
support gzip encoding to compile sample code and will result in slower
startup times for the welcome application and other samples.
The LPS 2.0 Beta2 release also has a limited number of changes that are
incompatible
with the Beta1 release.
- Some components that were released in 2.0 Beta1 have been
renamed:
inputtextbox -> edittext
baselistcomponent -> baselist
baseformcomponent -> baseformitem
basedatacomponent -> basevaluecomponent
- The "valuedatapath" and "textdatapath" attributes introduced in
Beta1 have been removed; simply use "$path" if you want to specify a
different datapath for a component's value. For example:
<list>
<textlistitem datapath="mydata:/list/item" text="$path{ 'text()' }" value="$path{ '@value' }"/>
</list>
- There is a new "dataoption" attribute on baselist. You can optimize
list or combobox, but setting dataoption="lazy" for lazy replication of
list items, or dataoption="pooling" for pooling.
- The sections below describing changes in 2.0 and bugs fixed since
2.0B1 are now complete and accurate.
- See also the list of defects fixed since
1.0.3.
Laszlo Presentation Server 2.0 Beta 1 introduces
numerous new features, LZX language changes, and
LFC API changes. A limited number of these changes are incompatible
with previous releases.
- New features:
- The Laszlo Component Set
Laszlo Presentation Server 2.0 introduces the Laszlo (lz) component
set: combobox, edittext, scrollbar, menu, menuitem, tabs,
tabslider, radiobutton, radiogroup, checkbox, window, modaldialog,
alert, button, form, submit, style
, and base classes. To get a
feel for what the components do and how to use them, click on the new
"Components" tab on the "Welcome"
page. These components support keyboard navigation. You can tab between
components, and use arrow keys within the components (e.g. within items
in a radio group or a list). There are visual focus brackets that shows
you where the focus is. Note: The Laszlo (lz) component set is
now the default component set. To get the redmond components, insert <include
href="redmond"/>
into your application source.
- Krank Optimization
Laszlo Presentation Server 2.0 introduces a new feature,
called Krank, for optimizing the startup time of an
application. Krank allows you, without changing the source code, to
construct an application that doesn't need to run any initialization
code when it starts. Kranking an application thus can often
result in a dramatic improvement in user-perceived startup time.
Read more about the Krank feature here.
- LFC LzTrack service (see reference guide for documentation)
- LFC Data API features:
- Support for http POST.
- XPath attribute predicates [@foo] and
[@foo='bar'].
- XPath position() and last() operators.
- Selection of multiple intermediate nodes (e.g.
*/*/*
)
$path
bindings for datapath. A node
attribute can be bound directly to a data attribute using this syntax:
<attribute name="myattr" value="$path{ somexpath }">
where somexpath can be a literal xpath or the value of a variable to
resolved at init time. This is a two-way binding between the attribute
and the data. Setting the attribute by other means will update the
data.
- New LFC classes for runtime XML data access: 3 new
classes: LzDataNode (abstract), LzDataElement and LzDataText
The APIs for these classes are currently undocumented, but here are the
most useful parts of that API:
LzDataNode.ownerDocument
LzDataNode.parentNode
LzDataNode.getPreviousSibling
LzDataNode.getNextSibling
LzDataText.setData
LzDataText.data
LzDataElement.childNodes
LzDataElement.insertBefore
LzDataElement.replaceChild
LzDataElement.removeChild
LzDataElement.appendChild
LzDataElement.cloneNode
LzDataElement.getAttr
LzDataElement.setAttr
LzDataElement.setChildNodes
A datapointer's .p slot points to an LzDataNode, or a subclass thereof,
and that attribute can be set directly as well.
- User-defined text tags
The attribute
element can be used to define tags
that contain text or XHTML. (Tags that extend text
and inputtext
continue to accept XHTML and plain text, respectively.)
- Optimized inputtext views
Optimized
inputtext
views are more responsive to keyboard
input at large sizes and on slow machines.
- Documentation
This release includes the beginning of the Laszlo Developer's Guide. Check the Developer Zone of
the Laszlo web site for updates and forthcoming chapters.
There are shiny new examples for:
- LzModeManager
- XML Data (nee httpdata.lzx)
- Server administration (linked from the welcome page):
- There is a new LPS administrative console application (see
the welcome application Administration section).
?lzt=cacheinfo&details=1
server cache
statistics
- Improved
?lzt=stat
server load statistics
- LZX language changes:
x, y, width, height
now expect ${...}
syntax for expressions, old syntax is deprecated and warnings are given
- the recommended way to test for undefined attributes is to
declare them in your class with an initial value of null. For example,
<attribute
name="foo" value="null" >
then later you can write:
if (this.foo) ....
This is faster and easier to read than: if (typeof(this.foo) ==
"undefined")
...
- LFC changes:
- Inputtext: new APIs
are documented in the reference
- getSelectionPosition()
- getSelectionSize()
- setSelection()
- Node
- initialize -> construct (there will be a warning for this,
but it may not be in yet)
- thaw -> createChildren
- deleteNode -> destroy
deleteNode is deprecated
- searchimmediateParents ->searchParents
searchimmediateParents deprecated
- setProp has been officially deprecated
use setAttribute instead
- retrieveData -> updateData (retrieveData deprecated), also
renamed on datapath
- getXPath is deprecated, use XpathQuery instead
- Services
- The LzAudio service is deprecated. Use the audio APIs on
LzView instead.
- View
- LzView now sports two shiny new attributes "xoffset" and
"yoffset", and a method called getBounds which returns the bounds of
the view when it has been rotated. There's also a couple of
bounds-based layouts in components/utils/layouts. getBounds() can be
used in constraints.
- layout attribute: now has JavaScript support for setting at
run-time. Also classes may override all or part of the attribute. (You
can make the layout go away with class:none)
Tag syntax:
<view
layout="axis:x; spacing:20">
<view bgcolor="red"
width="20" height="20"/>
<view bgcolor="red"
width="20" height="20"/>
<view bgcolor="red"
width="20" height="20" />
</view>
JavaScript syntax:
myview.setLayout(
{class: 'wrappinglayout, axis: 'y' } )
myview.setAttribute(
"layout" , {class: 'wrappinglayout, axis: 'y' } );
- new methods: sendbehind, sendinfront (documented in refrence)
- new property: framesloadratio (documented in refrence)
- loadperc, renamed loadratio
- new updateResourceSize method
Since views which use a multi-frame resource base their size on the
size of the resource's first frame, the LFC may incorrectly measure the
intended size of a resource. This method can be called at any time to
recalcuate the resource size.
- New behavior for views with a constraint on their size
In previous releases, a view that had a constraint on its size would be
sized to its contents until the constraint was applied. Now, the view
will not have any size until the constraint is applied. This changes
the behavior of some apps -- mostly due to erroneous code that worked
in previous releases.
- Different time for data application
In previous releases, a view would receive its data whenever that data
was present. This meant that data could be received by a view before
init time, as early as construct time. Now a view will not receive its
data until after it inits.
- ModeManager plays better with LzFocus
- Components changes:
- Layouts
- simplelayout and wrapping layout now have "inset" param,
to create left or top margin
- wrappinglayout was included in the build, but not
documented. Now it is.
Changed "animated" parameter -> "duration" (default is 0, which
causes it to not animate) horiz_spacing and vert_spacing changed to x
and yspacing. It also works better now.
- The Laszlo component set doesn't use the
label
attribute for text content. Use the text
attribute
instead.
- The LZ component set name for a radio button is
<radiobutton>
instead of <radio>
.
- The default font has changed. The old default font can be
included by using
<font name="yourfont"
src="lztahoe8.ttf"/>
If you want your entire application to
use this font, you can redefine the canvas's font like <canvas
font="yourfont"> at the top of your LZX program.
- Each included font takes roughly 30% more space in an compiled
binary
- Deprecated APIs
- LzNode
- initialize
- thaw
- deleteNode
- searchimmediateParents
- setProp
- retrieveData
- getXPath
- LzText
- LzAnimatorGroup
- LzDatapointer
- LzDataset
- getStatusCode
- lockFromUpdate
- unlockFromUpdate
- setURL
- global
- There are individual properties for specifying http back-end
timeouts. See lps.properties.
- The default timeout for back end http requests is now 5 seconds.
(In previous releases the default timeout was infinite.)
- LPS statistics collection can be controlled via values in the
lps.properties file.
- LPS statistics collection of unique urls now strips the query
string from the url.
- LZX source for redmond components refactored and made more
readable.
- New Redmond horizontal scroll bar
- Server statistics request
OpenLaszlo 3.3.1 addresses two issues. First, there was a single regression, which is that the behavior of simplelayout
was inadvertantly broken in OpenLaszlo 3.3. In this release, the behavior of simplelayout
has been corrected such that it applies only to a single axis.
Secondly, the lzc
and lzc.bat
files do not run in the standard Windows XP configuration. The installer places file into a "OpenLaszlo 3.3" directory inside the "Program Files" directory, and the spaces in the names cause a problem. This has been corrected.
Consult JIRA for complete information on the bugs, tasks, improvements, and features included in 3.3.
Nearly a hundred bugs have been fixed since the 3.1 release. Consult JIRA for complete information. Note that the 3.2 release is code-named "Sage".
More than a hundred bugs have been fixed since the 3.0.2 release. Consult JIRA for complete information. Among the more significant fixes are the following:
- mp3 files now correctly work in SOLO mode. LPP-487
- The font in the LZX reference is now embedded—looks good in all browsers. LPP-335
- Increased memory consumption reported in some nightly builds has been fixed. LPP-714
- Debugger issues with swf6 have been cleaned up. LPP-753
- Javascript issues with Internet Explorer have been cleaned up. LPP-657
- All international character sets work correctly with XML-RPC. LPP-716
- Various errors in Laszlo Explorer have been fixed. LPP-513
- "onlastframe" events now work correctly in mac browsers. LPP-715
- Setting
appendChild()
directly on a dataset no longer breaks replication. LPP-692
- [LPP-234] - SOAP schema forward base type references cause exception
- [LPP-283] - Can't pass array of xsd:strings in SOAP rpc call
- [LPP-300] - SOAP only parses first service and port
- [LPP-408] - persistent connection agent stacktrace when sending messages
- [LPP-424] - SOAP simple types not XML escaped when serialized to server
- [LPP-432] - remove "file:" type for data and media requests, replace with http
- [LPP-441] - Type of arrayitem is sometimes set incorrectly in SOAP
- [LPP-456] - amazon-soap gets warning in compiler
- [LPP-457] - WSDL stopped working in 3.0.2cr1
- [LPP-425] - rpc.invoke() should return sequence # in return object
- [LPP-227] - Fix source location bug "missing some sourceLocations"
- [LPP-231] - Error messages aren't sent to remote debugger
- [LPP-86] - Embed source location
- [LPP-228] - Compiler/runtime support for distinguishing instance and class contents
- [LPP-229] - Autoinclude support file
- Error message no longer thrown for TTF fonts missing TTF name table.
- Compiler now correctly recognizes LZX files named with numbers as their first
character in the filename.
- LPS Error log now includes WARN messages if cache directories are not writable.
- Windows installer includes more information when it fails to detect an installed
JDK
- LPS is now compatible with ATG Dynamo
- LZX Reference now includes grid, basegrid, and related components.
- Two defects in lzo serving were fixed. The first could cause lzo serving to use
unnecessary server cpu. The second was a race condition that could cause the
server to introduce corruption into the lzo file.
- Denied requests are now logged.
- LPS no longer holds an HTTP socket open when the backend uses http-keepalive and
the response was an error condition.
- LPS no longer requires that the xalan jar be in Java's endorsed directory list.
LPS installation and initialization issues with Java 1.4.2 and/or Tomcat 5.0
are repaired.
- http.maxUsers property in lps.properties works correctly.
- Visible gets set to false when opacity is set to 0 if visibility hasn't been
explicitly declared. This may cause some unexpected behavior with regards to
layouts and constraints.
- Setting the visible property on a view which has a datapath may have
unpredictable results, since the datapath uses setVisible to control whether the
view is visible due to the presence or absence of mapped data. To work around,
either be sure to set the visible after the ondata event or wrap the data-mapped
view in an extra view.
- lps now has the ability to force compilation when compmgrdependencyoption = never
- LPS now includes a sample deployment configuration with recommended parameters
set for live deployment. See $LPS_HOME/WEB-INF/lps/config-deploy.
- comboboxes and menus can be closed by pressing the 'ESC' key
- In order to see the logging done by the httpclient library on behalf of the
LPS running inside Tomcat 5, you need to copy
$LPS_HOME/WEB-INF/lib/commons-logging.jar and
$LPS_HOME/WEB-INF/lib/log4j.jar
to $TOMCAT_HOME/common/lib
and restart tomcat5. The copy of Tomcat5 that comes with LPS already contains
these jars installed in the correct location.
- Disabled editext now displays its contents
<edittext width="100" name="txt" text="foobar" enabled="false"/>
works as expected
- javadatasource has been completely deprecated and removed
- WSDLs are now correctly fetched over HTTPs
- Attributes used as an 'lvalue' (the target of an assignment) in a
method body may now be referred to as simply <attribute>. Explicitly using
this.<attribute> or this["<attribute>"] is no longer required.
- ^M in CDATA no longer results in blank text.
- The Tree component now works with scrollbar when built with remote data.
- Resizable canvas: the canvas width and height may now be expressed as a
proportion of the browser window dimensions. The canvas will send onwidth and
onheight events. Views may be constrained to the width and height of the canvas.
For example:
<canvas width="100%" height="100%">
<view width="${parent.width}" height="${parent.height/4}" ...
- The API for specifying Client Fonts has been finalized.
- This release adds a dialog box that allows the developer to set debugger
options. This dialog box is available under both the swf5 and swf6 targets,
but most of the options only have an effect in a swf6 target.
- The size profiler and the size summary at the bottom of the app console has been
updated to properly support swf6 and the internal compression.
- This release creates applications that require version 6.0r79 or greater of the
Flash Player. The HTML
pages that the server generates force an update from Flash Player 5. This
means that if you view the
default HTML pages on a browser with Flash Player 5 installed, the application
will generate an update dialog. This is currently only implemented for Internet
Explorer on Windows
- Applications no longer display unexplained compiler warnings.
- In previous releases, the default font was an embedded font called "Verity". in
this release the default font is a client font whose appearance is dependant on
the installed font in your environment. The default font is currently "Verdana".
Some systems do not include this font and may have an undesirable appearance.
This will change in a future release.
- In previous releases, the default font was an embedded font called "Verity". in
this release the default font is a client font whose appearance is dependant on
the installed font in your environment. The default font is currently "Verdana".
Some systems do not include this font and may have an undesirable appearance. A
font fallback mechanism is in place which attempts to select the best font
available.
- Multiline text no longer has a default width of 0.
- The KRANK feature is now implemented for the swf6 target. Kranked swf6
applications are fully functional.
You can now pass datasets for request headers and document style calls instead
of XML strings. Note that datasets aren't namespace aware so, for the time
being, using datasets is not reccomended.
You can now access response headers by setting a local dataset in the SOAP object.
For example:
<soap requestheaders="dset1" responseheaders="dset2">
<remotecall funcname="docstylefunc">
<param value="dset3" />
</remotecall>
</soap>
The SOAP scalability issues have been addressed.
- Under load, single long back-end requests no longer lock the entire media or data cache.
- LZX Reference now includes grid, basegrid, and related components.
- Two defects in lzo serving were fixed. The first could cause lzo serving to use unnecessary server cpu. The second was a race condition that could cause the server to introduce corruption into the lzo file.
- Error message no longer thrown for TTF fonts missing TTF name table.
- Compiler now correctly recognizes LZX files named with numbers as their first
character in the filename.
- LPS Error log now includes WARN messages if cache directories are not writable.
- Windows installer includes more information when it fails do detect an installed
JDK
- LPS is now compatible with ATG Dynamo
- A resource whose name begins with a number, such as <resource name="2c" src="..."/>, cannot be referenced. An attempt to refer to it, such as <view resource="2c"/>, will instead attempt to import the file named "2c".
- When the compiler issues warnings for missing file and resource errors, they
may display the absolute pathname of the file on disk, rather than pathnames
relative to the base application URL, as other compiler warnings do.
- A minor optimization was made to the way in which constraints are
resolved that has changed the order in which they are applied. This normally
shouldn't matter, but in some edge cases (especially deeply circular
constraints and program errors).
- The LFC's xpath parser does not properly interpret whitespace
between /'s and []'s.
-
>If you set a font is set as an attribute of the canvas and any of the redmond
components are used, the following compiler error will be generated:
Error: ../WEB-INF/lps/components/redmond/redmondcombobox.lzx:119:55: Can't find font nicefont ; compilation aborted
Workaround: set the font attribute on all of the top-level views or explicitly
include the redmond component or the whole library, for example:
<include href="/redmond/library.lzx"/>
or
<include href="/redmond/redmondbutton.lzx"/>
- Multi-line string literals (or an unclosed string literal) are errors
but the compiler does not generate a warning for them and may generate incorrect
error locations as a result.
- Fixed that thing that was busted last time.
- A view with pixellock="true" will stop updating its size to the size
of its contents, even if it doesn't have an explicit width and height.
- Long animators (with a duration of about eight seconds ) may not end at the
coorect value.
- The reference lists 'resizable' as a view attribute, but this attribute is unused.
-
If you are deploying the LPS inside Tomcat (or other servlet
containers) running against j2sdk (or j2re) 1.4.2, you will need to
make sure the LPS version of xalan.jar is used. For Tomcat you
can copy $LPS_HOME/WEB-INF/lib/xalan.jar to $TOMCAT_HOME/common/endorsed.
See you servlet container documentation specific details here.
- A mistake with the capitalization of attribute or event names may lead to compiler errors which are hard to pinpoint. XML is casensitive, be sure to check the proper se-case of attribute names (they will all be lowercase in the library lzx components).
-
Error messages of the form:
contactslib.lzx:320:44: element "tagname" from namespace "http://www.laszlosystems.com/2003/05/lzx" not allowed in this context
mean simply that that "tagname" is not a known tag name. The bits about the
namespace and "in this context" can be ignored.
- No compiler warning given when a resource is undefined. So for example
this code will not warn that the resource identifier "fake" is undeclared.
<view resource="fake"/>
- Testing for undefined properties using 'typeof(o.p) == "undefined"' will
generate a warning in the debugger. The warning can be avoided if necessary by
using 'typeof(o[""+(p)]) == "undefined"'. If 'p' is known at compile time, the
string conversion forced by '""+' can be omitted. Best practice is to tolerate
the warning, which will not occur in a future release, rather than obfuscate
your code in this fashion.
- lztabslider panels display "clickable" cursor when the area is not designated as clickable
- Warnings about tag 0x19 are harmless and can be ignored.
- The font "italic lztahoe8" is not compiled into the application swf file by
default. This
means that if you try to use italic style text in Javascript code, it will be
invisible. Workaround is to manually include the font using a <font> tag in
the app, or to include static text in the XML which uses italic style.
- Changing motion attribute on an animatorgroup has no effect.
- Constraining an attribute to one or more values which are themselves
constraints may produce debugger warnings about undefined references, even
though this is perfectly valid. Ignore these warnings.
- There may be cases where calls to Debug.write don't result in debugger
output, even though the method is being called. This is known to happen for the
onaddsubview event and the addSubview methods when they are called by a
replicated node that is a class which has children.
- Too many consecutive fonts will cause the compiler to emit bad code. As a
workkaround, use fewer fonts or intersperse an innocuous '<script>' block.
- Laszlo applications may misrender a PNG with an alpha channel.
- subviews containing subviews which are added to a class which has defaultplacement attribute set do not trigger onaddsubview or addsubview to get called
- Can't restart an animator onstop
- Calling stop() on an animator which isn't running will cause problems. The animator destroy() method calls stop, so animators in states may not work correctly.
- Layouts, constraints, and LzView.setAttributeRelative don't currently
work properly with views that are rotated.
- When data is imported the runtime, only xml element nodes are treated
as children of a given data node. All text nodes are coalesced through
concatenation and can be referred to as the text() property of the node. When
the node is serialized, all of the text will be written as the last (text)
element of the node.
- For compatibility with the DR release, http headers come back with
every data response by default. This allows for the client to introspect header
information. Given that this is usually not necessary, the default results in
extra data traffic between the client and the LPS. The response headers can be
turned off by using the dataset attribute getresponseheaders="false"
- Remaking a request of a dataset which is mapped to a view replication
which does not use pooling results in a brief display problem where the views
from both the old request and the new request are visible at the same time. Use
the pooling option to work around this if possible, or hide the replicated
views when resubmitting the request.
- >Datapaths which match multiple nodes can only do so on the last node
in their xpath. Always map the multiple match to the view which replicates.
- selectParent will select bogus nodes that are not inside the dataset
which a datapointer is pointing to, and it will return true (indiciating that
it successfully selected a parent node) in this case.
- Although calling setFromPointer() on a datapath will work when the
call is made, the datapath may not properly process further changes to the
underlying data after the call is made. If the datapath needs to update as the
data changes, compose an xpath that points to the new data and call the
datapath's setXPath routine with that value.
- Once applied, a $path constraint inside a state will not be removed when the state is removed.
- Calling super.otherMethod() from inside thisMethod won't work as
expected. This generally isn't best practice, but it is spec'ed to work in the
ECMAScript standard. Because of this bug, super should only be used when
calling the superclass version of the same method.
- The getVolume call doesn't work properly
- The LFC doesn't properly interpret the width and height of rotated
views -- transformations to their width and height happen in their parents (non-
rotated) coordinate system. To manipulate the width and height of a rotated
view, create an extra layer of hierarchy and embed the resizing view inside the
rotated one.
- The deleteNode() method of LzNode (and the overrides by the subclasses
of LzNode, such as LzView) are incomplete and do not free all the memory used
by the node. When possible, reuse is preferable to delete/new because of this
problem and because node instantiation is slow.
- Saving an XML file from NotePad or Visual Studio .NET with UTF-8 encoding may
insert a "byte order mark" at the beginning of the text. LPS will
report this error:
Error: broken.lzx:1:1: Content is not allowed in prolog.
- In previous releases running against Sun JVM 1.4 or greater,
because of a JVM bug, the server can throw a StackOverFlow Exception
when validating the LZX code for certain applications. When this
occurs, in 1.0.3, the server will generate a compiler warning, disable
validation for the compilation, and continue to compile the
application.
- The LPS now properly flushes http requests to the back-end. This
will result in fewer warnings in the detailed lps log about
RecoverableHttpExceptions.
- Numerous typographical errors in the comments in the default
lps.properties were fixed.
- Individual back-end requests can no longer hang the server cache.
- The request toggles in lps.properties now work correctly.
- Improved client performance
- Bloch got married.
- iPaq compatibility restored.
- Redmond window has visible non-focus state.
- Combobox and menus can now be used in clipped views.
- Checkbox can be used in constraints.
© Copyright 2002-2005 Laszlo Systems, Inc. All rights reserved. Unauthorized use, duplication or distribution is strictly prohibited.