[Laszlo-checkins] r8108 - in openlaszlo/branches/devildog: . WEB-INF/lps/lfc/compiler WEB-INF/lps/lfc/core WEB-INF/lps/lfc/data WEB-INF/lps/lfc/helpers WEB-INF/lps/lfc/kernel/dhtml WEB-INF/lps/lfc/kernel/swf WEB-INF/lps/lfc/services WEB-INF/lps/lfc/views WEB-INF/lps/server/src/org/openlaszlo/compiler WEB-INF/lps/server/src/org/openlaszlo/css WEB-INF/lps/server/src/org/openlaszlo/data WEB-INF/lps/server/src/org/openlaszlo/sc WEB-INF/lps/server/src/org/openlaszlo/utils demos/youtube docs/component-browser docs/src/deployers docs/src/developers docs/src/developers/programs docs/src/developers/tutorials docs/src/developers/tutorials/programs laszlo-explorer lps/components/extensions lps/components/lzunit test/performance test/style/constraints
dda@openlaszlo.org
dda at openlaszlo.org
Tue Feb 26 12:32:46 PST 2008
Author: dda
Date: 2008-02-26 12:32:17 -0800 (Tue, 26 Feb 2008)
New Revision: 8108
Added:
openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/utils/DeploySOLODHTML.java
openlaszlo/branches/devildog/test/performance/typeof-instance-of.lzx
Modified:
openlaszlo/branches/devildog/
openlaszlo/branches/devildog/WEB-INF/lps/lfc/compiler/LzFormatter.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzDefs.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzNode.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/UserClass.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzDatapointer.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzReplicationManager.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/helpers/LzState.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js
openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js
openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as
openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzFocus.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzModeManager.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloCanvas.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloView.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzInputText.lzs
openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzText.lzs
openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java
openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/css/CSSHandler.java
openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/data/XMLGrabber.java
openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/Function.java
openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/ReferenceCollector.java
openlaszlo/branches/devildog/demos/youtube/youtube.jsp
openlaszlo/branches/devildog/demos/youtube/youtube.lzx
openlaszlo/branches/devildog/docs/component-browser/common.lzx
openlaszlo/branches/devildog/docs/component-browser/formview.lzx
openlaszlo/branches/devildog/docs/component-browser/listview.lzx
openlaszlo/branches/devildog/docs/component-browser/menuview.lzx
openlaszlo/branches/devildog/docs/component-browser/scrollbarview.lzx
openlaszlo/branches/devildog/docs/component-browser/tabsview.lzx
openlaszlo/branches/devildog/docs/component-browser/treeview.lzx
openlaszlo/branches/devildog/docs/component-browser/windowview.lzx
openlaszlo/branches/devildog/docs/src/deployers/logging.dbk
openlaszlo/branches/devildog/docs/src/developers/constraints.dbk
openlaszlo/branches/devildog/docs/src/developers/index.dbk
openlaszlo/branches/devildog/docs/src/developers/programs/constraints-$1.lzx
openlaszlo/branches/devildog/docs/src/developers/tutorials/drawview-intro.dbk
openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$10.lzx
openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$3.lzx
openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$4.lzx
openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$5.lzx
openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$6.lzx
openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$7.lzx
openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$9.lzx
openlaszlo/branches/devildog/laszlo-explorer/explore-nav.lzx
openlaszlo/branches/devildog/lps/components/extensions/drawview.lzx
openlaszlo/branches/devildog/lps/components/lzunit/lzunit.lzx
openlaszlo/branches/devildog/test/style/constraints/subclassing.lzx
Log:
Merged revisions 8011-8107 via svnmerge from
http://svn.openlaszlo.org/openlaszlo/trunk
.......
r8012 | bargull | 2008-02-13 10:30:09 -0500 (Wed, 13 Feb 2008) | 25 lines
Change 20080212-bargull-0 by bargull at dell--p4--2-53 on 2008-02-12 22:59:08
in /home/Admin/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: making a view modal
New Features:
Bugs Fixed: LPP-5426
Technical Reviewer: promanik
QA Reviewer: (pending)
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
Don't push a view onto the modal-stack more than once.
Tests:
.......
r8014 | hqm | 2008-02-13 11:38:32 -0500 (Wed, 13 Feb 2008) | 1 line
fix race condition in jsp test script
.......
r8016 | lou | 2008-02-13 15:12:17 -0500 (Wed, 13 Feb 2008) | 16 lines
Change 20080213-lou-v by lou at loumac.local on 2008-02-13 16:06:20 AST
in /Users/lou/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: reference: LzView: add definitions for onload, onloadperc, and onvisibile
Bugs Fixed: LPP-5432
Technical Reviewer: Max Carlson
QA Reviewer: (pending)
Doc Reviewer: (pending)
Tests: verify visually
.......
r8020 | bargull | 2008-02-13 19:40:55 -0500 (Wed, 13 Feb 2008) | 27 lines
Change 20071116-bargull-2 by bargull at dell--p4--2-53 on 2007-11-16 00:27:11
in /home/Admin/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Add support for retrieving "nodeType" to LzDatapointer
New Features:
Bugs Fixed:
LPP-5036 - Add getter-method for "nodeType" in LzDatapointer
Technical Reviewer: hminsky
QA Reviewer: jcrowley
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
Almost every LzDataNode field/method can be retrieved through a LzDatapointer-method (nodeName -> getNodeName, attrs -> getNodeAttribute, etc.). But you cannot ask for the node-type of the node the datapointer is pointing to through a LzDatapointer-method. That means you need to access the "p"-field of a LzDatapointer directly to get this info (dp.p.nodeType with dp instanceof LzDatapointer and dp.p instanceof LzDataNode). This quite inconsistent compared to the rest of the LzDatapointer-API and should be changed.
This changeset enhances the LzDatapointer-API by introducing a new method to handle this issue (LzDatapointer#getNodeType()).
Tests:
.......
r8021 | max | 2008-02-13 20:33:32 -0500 (Wed, 13 Feb 2008) | 26 lines
Change 20080213-maxcarlson-o by maxcarlson at Roboto on 2008-02-13 15:13:18 PST
in /Users/maxcarlson/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Fix youtube video loading, for real this time!
New Features:
Bugs Fixed: LPP-5424 - YouTube demo is broken, clicking on picture does not load video
Technical Reviewer: promanik
QA Reviewer: mkratt
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details: youtube.jsp - Parse out Location header from different URL - totally bulletproof now.
youtube.lzx - Proxied loads are no longer supported/required!
Tests: Any video will play in youtube.lzx now.
.......
r8023 | max | 2008-02-13 21:11:33 -0500 (Wed, 13 Feb 2008) | 55 lines
Change 20080213-maxcarlson-4 by maxcarlson at Roboto on 2008-02-13 17:34:25 PST
in /Users/maxcarlson/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Avoid sending duplicate shift, ctrl, option events in inputtext
New Features:
Bugs Fixed: LPP-4267 - Onkeyup and onkeydown events fire twice in edittext and inputtext
Technical Reviewer: promanik
QA Reviewer: a.bargull at intensis.de
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details: Avoid sending shift, ctrl and option keys by preventing the keyboard state from getting dirtied.
Tests: This runs consistently in swf and dhtml (FF osx and IE 6)
<canvas height="300">
<simplelayout/>
<edittext id="ex" width="100">
<handler name="onkeydown" args="kc">
Debug.warn('keydown %w', kc);
</handler>
<handler name="onkeyup" args="kc">
Debug.warn('keyup %w', kc);
</handler>
</edittext>
<inputtext id="ix" width="100">
<handler name="onkeydown" args="kc">
Debug.warn('keydown %w', kc);
</handler>
<handler name="onkeyup" args="kc">
Debug.warn('keyup %w', kc);
</handler>
</inputtext>
<button>foo</button>
<handler name="onkeydown" reference="LzKeys" args="kc">
Debug.warn('global keydown %w', kc);
</handler>
<handler name="onkeyup" reference="LzKeys" args="kc">
Debug.warn('global keyup %w', kc);
</handler>
</canvas>
.......
r8032 | ptw | 2008-02-14 17:57:01 -0500 (Thu, 14 Feb 2008) | 65 lines
Change 20080208-ptw-T by ptw at dueling-banjos.local on 2008-02-08 08:18:39 EST
in /Users/ptw/OpenLaszlo/ringding
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Unify argument initialization
Bugs Fixed:
LPP-1587 'ECMA4: Compile LZX declarations as JS declarations' (partial)
LPP-631 'can't override a constraint with a literal with state attributes'
Technical Reviewer: a.bargull at intensis.de (Message-ID: <47B4B8C7.2020809 at intensis.de>)
QA Reviewer: henry.minsky at gmail.com (pending)
Details:
Initial values, initial expressions ($once, $path, but not $style,
yet), and constraints ($always), now are created as a unified list
in the tag compiler solving several issues with
overriding/inheritance of attribute values and constraints and
enabling the solution to an issue with states and constraints.
TextStprite: Update test for constraint on width or height.
LzNode, UserClass: Simplify attribute inheritance/override computation,
maintain backward-compatible magic-merge of attribute values (for
now).
LzNode: Update documentation of `construct` to note that
constraints are now unified in `args`. __LZapplyArgs uses new
args organization to sort out initialization expressions and
constraints. __LZresolveReferences uses the new information to
run initialization expressions and install constraints.
__LZresolveRefs no longer needed. applyConstraint deprecated, but
backward-compatible. New interface: applyConstraintMethod.
Private releaseConstraint did not work, removed. New interface:
releaseConstraintMethod.
LzDefs: Turn LzDeclaredEvent into a singleton class. Add private
support classes LzInitExpr and LzConstraintExpr.
LaszloView: Update test for constraints. Fix setAlign and
setValign to work with constraint methods, and to correctly work
if alignment is changed (to release previous constraint).
LaszloCanvas: Update __LZcallInit to parallel LzNode more
closely.
LzState: Update capturing of held args and constraints. Use this
new organization to release constraints the state will override
(and re-apply them when the state is removed). Remmove unused
__LZstoreRefs.
LzReplicationManager: Fix xpath constraint to work with constraint
methods.
Function.java: Make Function#name public.
NodeModel.java: Coalesce $once, $path, $always into single
arglist, distinguishing 'binders' by internal type, either
LzInitExpr or LzConstraintExpr.
Tests:
smokecheck, amazon, most-components
.......
r8034 | pbr | 2008-02-14 22:24:39 -0500 (Thu, 14 Feb 2008) | 33 lines
Change 20080214-Philip-4 by Philip at Philip-DC on 2008-02-14 08:54:44 EST
in /cygdrive/f/laszlo/svn/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Access text cache as LzTextSprite.prototype._sizecache
New Features:
Bugs Fixed: LPP-5390
Technical Reviewer: max
QA Reviewer: (pending)
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
The code used to access the global cache through 'this'. However, once the cache
is full and is cleared, access through 'this' it not reliable. I changed this._ sizecache to LzTextSprite.prototype._sizecache. Although I only need to do this for the line that actually resets the cache, I changed all references to make it
clear this is a global.
Tests:
See test in LPP-5390. This is slow to run since you need to wait until the _size cache.counter reaches 1000. During testing I set the cache size to 100 (ie. LzTe xtSprite.prototype.__sizecacheupperbound = 100) to verify the bug and the fix.
Files:
M WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js
Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20080214-Philip-4.tar
.......
r8037 | max | 2008-02-14 23:53:11 -0500 (Thu, 14 Feb 2008) | 24 lines
Change 20080214-maxcarlson-9 by maxcarlson at Roboto on 2008-02-14 19:57:57 PST
in /Users/maxcarlson/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Fix errors on page reloads in IE DHTML
New Features:
Bugs Fixed: LPP-5347 - Using IE, browser reports 'no such interface' javascript error when closing or refreshing the window
Technical Reviewer: promanik
QA Reviewer: a.bargull at intensis.de
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details: Check div.nodeType in discardElement()
Tests: See LPP-5347
.......
r8038 | max | 2008-02-15 03:09:54 -0500 (Fri, 15 Feb 2008) | 29 lines
Change 20080214-maxcarlson-B by maxcarlson at Roboto on 2008-02-14 19:19:09 PST
in /Users/maxcarlson/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Fix states and constrained text in DHTML, fix drawview
New Features:
Bugs Fixed: LPP-1587 'ECMA4: Compile LZX declarations as JS declarations' (partial)
Technical Reviewer: promanik
QA Reviewer: ptw
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details: LzTextSprite.js - Don't store args.text from construct.
LzText.lzs - Default to '' in construct() when args.text instanceof LzConstraintExpr || args.text instanceof LzInitExpr
LzState.lzs - More safety checking when unpacking args.
drawview.lzx - Don't use args.height/width/clip to init drawview.
Tests: drawview works again, no warnings under IE when reloading pages. Constrained text works again.
.......
r8042 | pbr | 2008-02-15 09:10:03 -0500 (Fri, 15 Feb 2008) | 41 lines
Change 20080214-Philip-2 by Philip at Philip-DC on 2008-02-14 22:11:53 EST
in /cygdrive/f/laszlo/svn/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Fix component links in the component hierarchy
New Features:
Bugs Fixed: LPP-4555
Technical Reviewer: (pending)
QA Reviewer: (pending)
Doc Reviewer: lou
Documentation:
Release Notes:
Details:
Josh fixed LPP-4555. Turns out there are other pages when you click 'See Related Components' on the component hierarchy page. This change fixes those pages to point to the "new" locations of the reference pages.
Tests:
Visual inspection. The reference guide doesn't build cleanly on Windows. Also, I found a problem with IE6 rendering so the pages need to be tested in that browser. Let me know if you find any pages that aren't correct. I followed the format that the reference page is named lz.<page>.html. For example, the page for base component is called lz.basecomponent.html.
(For IE6 you only need to check one page. The old javascript code to popup a window generated an error on IE6.)
Once this is fixed in trunk we can merge it to the branches.
Files:
M docs/component-browser/tabsview.lzx
M docs/component-browser/listview.lzx
M docs/component-browser/common.lzx
M docs/component-browser/treeview.lzx
M docs/component-browser/formview.lzx
M docs/component-browser/scrollbarview.lzx
M docs/component-browser/menuview.lzx
M docs/component-browser/windowview.lzx
Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20080214-Philip-2.tar
.......
r8051 | lou | 2008-02-16 08:45:34 -0500 (Sat, 16 Feb 2008) | 20 lines
Change 20080216-lou-y by lou at loumac.local on 2008-02-16 09:40:34 AST
in /Users/lou/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: fix broken links to tomcat doc in the logging chapter of the admin guide
New Features:
Bugs Fixed: LPP-5224
Technical Reviewer: (pending)
QA Reviewer: (pending)
Doc Reviewer: (pending)
Details: The 5.0.x documentation no longer exists, so just link
to the tomcat home page.
Tests: test link
.......
r8053 | lou | 2008-02-16 10:20:13 -0500 (Sat, 16 Feb 2008) | 20 lines
Change 20080216-lou-B by lou at loumac.local on 2008-02-16 11:04:00 AST
in /Users/lou/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: document that size needs to be set for drawview in the intro to drawing
chapter of the dguide: http://localhost:8080/trunk/docs/developers/tutorials/drawview-intro.html
Bugs Fixed: LPP-5433
Technical Reviewer: (max)
QA Reviewer: (pending)
Doc Reviewer: (pending)
Details: Add note about size, fix all examples to have size
Tests: visual verify
.......
r8054 | max | 2008-02-16 18:11:03 -0500 (Sat, 16 Feb 2008) | 26 lines
Change 20080215-maxcarlson-I by maxcarlson at Roboto on 2008-02-15 17:43:23 PST
in /Users/maxcarlson/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Fix IE memory leaks
New Features:
Bugs Fixed: LPP-5429 - IE-leak prevention leaks memory, LPP-5431 - Memory Leak using new and destory with <class> instances, LPP-5176 - When using IE 7: Repeated calls to <text>'s setText() will eventually throw javascript errors
Technical Reviewer: promanik
QA Reviewer: a.bargull at intensis.de
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details: LzSprite.js - Delete entries from __sprites cache on destroy().
LzTextSprite.js - Clean up _sizedomcache when the rest of the text size cache is cleared.
Tests: Tested case from LPP-5431 and LPP-5176.tar under IE 6 windows. No errors after 1000 instances, or after a page load and memory usage appears flat for both!
.......
r8062 | hqm | 2008-02-19 15:40:46 -0500 (Tue, 19 Feb 2008) | 37 lines
Change 20080219-hqm-D by hqm at badtzmaru on 2008-02-19 15:39:03 EST
in /Users/hqm/openlaszlo/trunk/WEB-INF/lps/server/src
for http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/server/src
Summary: make sure LPS server data proxy will close http connection if
errors occur
New Features:
Bugs Fixed: LPP-5440
Technical Reviewer: max
QA Reviewer: pkang
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
If an ill-formed or empty document causes an error in the XML proxy
server, it can
leave the HTTP connection open, causing hangs on the client.
This forces the stream to close on any error.
I don't know how to easily throw an error asynchronously to the parent
thread in Java, so we are just closing the connection for now.
Tests:
see bug report for test case
.......
r8066 | lou | 2008-02-19 16:21:43 -0500 (Tue, 19 Feb 2008) | 15 lines
Change 20080219-lou-2 by lou at loumac.local on 2008-02-19 17:16:38 AST
in /Users/lou/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: add more information about size
Bugs Fixed: LPP-5448 (subtask of LPP-5433)
Technical Reviewer: (pending)
QA Reviewer: (pending)
Doc Reviewer: (pending)
Tests: visual verify
.......
r8073 | lou | 2008-02-20 10:31:00 -0500 (Wed, 20 Feb 2008) | 18 lines
Change 20080220-lou-O by lou at loumac.local on 2008-02-20 11:25:53 AST
in /Users/lou/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: remove Documenting your code chapter from the dguide
Bugs Fixed: LPP-5453
Technical Reviewer: (pending)
QA Reviewer: (pending)
Doc Reviewer: (pending)
Details: this chapter contains an outline only. Comment out the code that
includes it.
Tests: visual verify
.......
r8078 | ptw | 2008-02-20 17:25:25 -0500 (Wed, 20 Feb 2008) | 19 lines
Change 20080220-ptw-N by ptw at dueling-banjos.local on 2008-02-20 15:14:43 EST
in /Users/ptw/OpenLaszlo/ringding
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Correct syntax errors in navbar
Bugs Fixed:
LPP-5454 'The nav bar loads, but has no text'
Technical Reviewer: max (message://<47BCA66E.8050008@openlaszlo.org>)
QA Reviewer: mamye (pending)
Details:
The attribute `name` of a class is final so can't be databound.
Tests:
laszlo-explorer/explore-nav.lzx has content now
.......
r8082 | max | 2008-02-20 19:07:58 -0500 (Wed, 20 Feb 2008) | 1 line
+ Add new perf test
.......
r8083 | max | 2008-02-20 19:22:43 -0500 (Wed, 20 Feb 2008) | 1 line
+ Updated perf test
.......
r8084 | hqm | 2008-02-21 00:17:12 -0500 (Thu, 21 Feb 2008) | 64 lines
Change 20080221-hqm-C by hqm at badtzmaru on 2008-02-21 00:13:47 EST
in /Users/hqm/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: add DHTML SOLO deployer class
New Features:
Adds Java-callable class which deploys a SOLO DHTML app
Bugs Fixed:
Technical Reviewer: max
QA Reviewer: phillipe
Doc Reviewer: (pending)
Documentation:
Release Notes:
A new API class, org.openlaszlo.utils.DeploySOLODHTML, will produce a SOLO DHTML deploy archive zipfile for
an app. It is basically a port of the .jsp deploy wizard script, rewritten so it does not depend on an LPS
web server being available.
Details:
Tests:
The testsolo script below invokes a test main() method in the class to produce a /tmp/solo.zip file from
a test app at test/deploy/hello.lzx
#! /bin/bash -f
#
# lzc - Bash script to run laszlo compiler.
#
# * P_LZ_COPYRIGHT_BEGIN ******************************************************
# * Copyright 2001-2005, 2007, 2008 Laszlo Systems, Inc. All Rights Reserved. *
# * Use is subject to license terms. *
# * P_LZ_COPYRIGHT_END ********************************************************
myhome=`dirname "$0"`
if [ -e "$myhome/../Server" ]; then
case "$myhome" in
/*) ;;
*) myhome=`pwd`/"$myhome" ;;
esac
LPS_HOME=`find "$myhome/../Server" -name lps'*' -maxdepth 1`
fi
if [ "${OS}" == Windows_NT ]; then
export LPS_HOME=`cygpath -w $LPS_HOME`
. ${LPS_HOME}\\WEB-INF\\lps\\server\\bin\\lzenv
else
export LPS_HOME
. "${LPS_HOME}/WEB-INF/lps/server/bin/lzenv"
fi
"${JAVA_HOME}/bin/java" ${JAVA_OPTS} -DLPS_HOME="${LPS_HOME}" -cp "$LZCP" org.openlaszlo.utils.DeploySOLODHTML "$@"
.......
r8085 | hqm | 2008-02-21 00:19:17 -0500 (Thu, 21 Feb 2008) | 36 lines
Change 20080221-hqm-N by hqm at badtzmaru on 2008-02-21 00:18:41 EST
in /Users/hqm/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: fix for false error condition in SOLO data loading
New Features:
Bugs Fixed: LPP-4602
Technical Reviewer: andre
QA Reviewer: max
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
Data which is loaded via the LPS proxy service comes wrapped with some
meta-data
including an <error> element which indicates an error condition.
In SOLO data loading, we should no be scanning for this tag, the SOLO
data loading protocol is to interpret all XML content as user data.
There is
no protocol for signalling a SOLO data load error using data in the
XML content.
Tests:
See test case in bug report LPP-4602
.......
r8088 | hqm | 2008-02-21 14:44:41 -0500 (Thu, 21 Feb 2008) | 29 lines
Change 20080221-hqm-R by hqm at badtzmaru on 2008-02-21 14:43:34 EST
in /Users/hqm/openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/utils
for http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/utils
Summary: update of DHTML SOLO deployer API class
New Features:
Bugs Fixed:
Technical Reviewer: nexb
QA Reviewer: (pending)
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
deploy method may be called with new wrapperonly flag, if true, just writes html wrapper to
output stream
optional Canvas may be supplied
Tests:
.......
r8089 | bargull | 2008-02-21 17:26:37 -0500 (Thu, 21 Feb 2008) | 24 lines
Change 20080215-bargull-4 by bargull at dell--p4--2-53 on 2008-02-15 13:48:49
in /home/Admin/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: unregister delegates in inputtext
New Features:
Bugs Fixed: LPP-5438 - "inputtext leaks memory"
Technical Reviewer: ptw
QA Reviewer: (pending)
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
Added destroy-method to unregister delegates in LzInputText.
Tests:
.......
r8090 | ptw | 2008-02-22 14:02:04 -0500 (Fri, 22 Feb 2008) | 52 lines
Change 20080220-ptw-t by ptw at dueling-banjos.local on 2008-02-20 19:36:51 EST
in /Users/ptw/OpenLaszlo/ringding
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Handle $style constraints in the unified argument processor
Bugs Fixed:
LPP-1187 'overriding a literal with a constraint results in wrong value being assigned before constraint is resolved'
LPP-1587 'ECMA4: Compile LZX declarations as JS declarations' (partial)
LPP-4451 '$style cannot override other constraints'
LPP-5444 'Now we've got Super-Constraints!'
Technical Reviewer: max (pending)
QA Reviewer: mamye (pending)
Details:
subclassing.lzx: Uncomment test for lpp-4451, add inverse test,
annotate some assertions for easier debugging.
LzFocus: Fix a type inconsistency that was triggering a warning in
smokecheck.
LzNode: Delete old $style implementation, add styleBinder, add some
debug checks, permit constraints with no dependencies.
LzDefs: Add style init expressions and style attribute binders.
LzText: Teeny optimization.
LzState: Simplify cloning. Back out restoration of constraints
added in r8032 because it breaks dragstate and resizestate.
LzFormatter: Fix pad to enforce max decimals bug revealed by
Firefox precision improvements in smokecheck.
CSSHandler: Use style expressions instead of closures.
ReferenceCollector: Correct comment
NodeModel: Move style processing into unified attribute list, add
some asserts.
lzunit.lzx: fail now will supply file/line for failed assertions
if backtracing is on.
Tests:
test/style/constraints/subclassing.lzx
Test cases from LPP-1187, 4451
smokecheck, Amazon
.......
r8092 | max | 2008-02-22 16:03:41 -0500 (Fri, 22 Feb 2008) | 1 line
+ Add test for failed instanceof
.......
r8095 | lou | 2008-02-23 12:25:17 -0500 (Sat, 23 Feb 2008) | 17 lines
Change 20080223-lou-s by lou at loumac.local on 2008-02-23 13:17:10 AST
in /Users/lou/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Constraints chapter of the dguide: replace references to applyContsraint (deprecated) with applyConstraintMethod.
New Features:
Bugs Fixed: LPP-5460
Technical Reviewer: (ptw)
QA Reviewer: (pending)
Doc Reviewer: (pending)
Tests: visual verify
.......
r8096 | ptw | 2008-02-23 16:27:26 -0500 (Sat, 23 Feb 2008) | 15 lines
Change 20080223-ptw-N by ptw at dueling-banjos.local on 2008-02-23 16:21:10 EST
in /Users/ptw/OpenLaszlo/ringding
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Fix type-oh spotted by Andre in r8090
Bugs Fixed:
[java] Warning: Assignment to free variable styleValue in core/LzNode.lzs (513)
Technical Reviewer: a.bargull at intensis.de (pending)
Tests:
Inspection
.......
r8100 | hqm | 2008-02-25 15:17:25 -0500 (Mon, 25 Feb 2008) | 54 lines
Change 20080225-hqm-q by hqm at badtzmaru.local on 2008-02-25 12:53:53 EST
in /Users/hqm/openlaszlo/trunk/WEB-INF/lps/lfc
for http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/lfc
Summary: add data to SWF SOLO POST requests, to ensure that Flash does not turn them into GET requests
New Features:
Bugs Fixed: LPP-5368
Technical Reviewer: andre
QA Reviewer: max
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
SWF has a bug whereby an empty POST request (one with no data in it's post body) is turned into a
GET request. This behavior used to be masked by the way we forced all query args into the POST
body for post requests.
When a change was made to separate and preserve the query string from the post body, people
started reporting bugs where their POST requests became GET requests.
This patch forces the "__lzbc__" cache-breaking timestamp arg into the body of SOLO post requests.
I am wondering if I should also force this value into Proxied requests, to ensure that
the data which is sent to the back-end is consistent between SOLO and proxied requests. This
patch only forces the __lzbc__ arg into SOLO POST requests.
Tests:
test.lzx:
<canvas debug="true" height="400" >
<dataset name="dsGroups" request="true" type="http" src="test.jsp" querytype="POST"/>
<datapointer name="dpGroups" xpath="dsGroups:/Response">
<handler name="ondata" args="d"><![CDATA[
Debug.write(d);
]]></handler>
</datapointer>
</canvas>
test.jsp:
<%System.out.println(request.getMethod());%>
<Response>
<Method><%=request.getMethod()%></Method>
</Response>
.......
Property changes on: openlaszlo/branches/devildog
___________________________________________________________________
Name: svnmerge-integrated
- /openlaszlo/branches/wafflecone:1-5746,5818-6068,6070-6205,6207-6213,6216-6265,6267-6368,6370-6431,6433-6450,6497 /openlaszlo/trunk:1-8010
+ /openlaszlo/branches/wafflecone:1-5746,5818-6068,6070-6205,6207-6213,6216-6265,6267-6368,6370-6431,6433-6450,6497 /openlaszlo/trunk:1-8107
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/compiler/LzFormatter.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/compiler/LzFormatter.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/compiler/LzFormatter.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -117,7 +117,11 @@
} else {
var decimals = strlen - (decimal + 1);
}
- for (var i = decimals; i < decMax; i++) value += '0';
+ if (decimals > decMax) {
+ value = value.substring(0, strlen - (decimals - decMax));
+ } else {
+ for (var i = decimals; i < decMax; i++) value += '0';
+ }
} else {
value = value.substring(0, decMax);
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzDefs.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzDefs.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzDefs.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,7 +1,7 @@
/**
* LzDefs.lzs
*
- * @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved.
+ * @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved.
* Use is subject to license terms.
* @todo 2006-04-07 hqm This machinery could be removed if all
* callers to sendEvent can be guaranteed to check if the event slot
@@ -10,41 +10,131 @@
* @subtopic Runtime
*/
-/** no op
+/** Sentinel value for events
* @access private
*/
-var LzDeclaredEvent = {};
+class LzDeclaredEventClass /* implements LzEvent */ {
+ /**
+ * @access private
+ */
+ /* const */ var ready = false;
+
+ /**
+ * @access private
+ */
+ function sendEvent() {};
+
+ /**
+ * @access private
+ */
+ function clearDelegates() {};
+
+ /**
+ * @access private
+ */
+ function removeDelegate() {};
+
+ /**
+ * @access private
+ */
+ function getDelegateCount () {return 0};
+
+ /**
+ * @access private
+ */
+ function toString() {
+ return "LzDeclaredEvent";
+ }
+}
+
+ var LzDeclaredEvent = new LzDeclaredEventClass;
+
/**
- * @access private
- */
-LzDeclaredEvent.sendEvent = function ( ){ };
+ * Private class used to distinguish an init expression from an
+ * initial value in node attributes. All forms of 'constraints' are a
+ * subclass of this class
+ * @access private
+ */
+class LzInitExpr {
+}
/**
- * @access private
- */
-LzDeclaredEvent.clearDelegates = function ( ){ };
+ * Private class used to define a 'once' or 'path' constraint
+ * @access private
+ */
+class LzOnceExpr extends LzInitExpr {
+ var methodName:String;
+ function LzOnceExpr(initMethod:String) {
+ this.methodName = initMethod;
+ }
+}
/**
- * @access private
- */
-LzDeclaredEvent.removeDelegate = function ( ){ };
+ * Private class used to define an 'always' constraint
+ * @access private
+ */
+class LzConstraintExpr extends LzOnceExpr {
+ function LzConstraintExpr(constraintMethod:String) {
+ super(constraintMethod);
+ }
+}
/**
- * @access private
- */
-LzDeclaredEvent.getDelegateCount = function ( ){return 0};
+ * Private class used to define a constraint in a style value
+ * @access private
+ */
+class LzStyleExpr extends LzInitExpr {
+ var sourceAttributeName:String;
+ function LzStyleExpr(sourceAttributeName:String) {
+ this.sourceAttributeName = sourceAttributeName;
+ }
+}
/**
- * @access private
- */
-LzDeclaredEvent.toString = function ( ){
- return "LzDeclaredEvent";
+ * Private class used to define an 'attr()' constraint
+ * @access private
+ */
+class LzStyleAttr extends LzStyleExpr {
+ function LzStyleAttr(sourceAttributeName:String) {
+ super(sourceAttributeName);
+ }
+};
+
+/**
+ * Private class used to create the binder for `LzStyleAttr` bindings.
+ *
+ * @param lz.node target: The target node
+ * @param String dest: The destination attribute
+ * @param String source: The source attribute
+ *
+ *@access private
+ */
+class LzStyleAttrBinder {
+ var target:LzNode;
+ var dest:String;
+ var source:String;
+
+ function LzStyleAttrBinder (target:LzNode, dest:String, source:String) {
+ this.target = target;
+ this.dest = dest;
+ this.source = source;
+ }
+
+ function bind() {
+ var target = this.target;
+ target.setAttribute(this.dest, target[this.source]);
+ }
}
/**
- * @access private
- */
-LzDeclaredEvent.ready = false;
+ * Private class used to define an identifier constraint
+ * @access private
+ */
+class LzStyleIdent extends LzStyleExpr {
+ function LzStyleIdent(sourceAttributeName:String) {
+ super(sourceAttributeName);
+ }
+}
/**
* Used to efficiently clone hashtables using Object's
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzNode.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzNode.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/LzNode.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,3 +1,4 @@
+/* -*- mode: JavaScript; c-basic-offset: 4; -*- */
/**
* LzNode.lzs
*
@@ -81,56 +82,41 @@
// Otherwise we create a new hash that inherits the defaults
iargs = new LzInheritedHash(this.defaultattrs);
// And merge in our attrs (if any). Taking care to merge
- // Array and Object attrs correctly, and noting constraints
- // that have been overridden so we can clean up $refs when
- // done.
+ // Array and Object attrs (for back-compatibility). No
+ // special magic is needed to compute attributes overriding
+ // constraints, because they all come as attrs now and
+ // overriding will be automatic from the InheritedHash
+ // (except for the bizarre merging of arrays and hashes!)
if (attrs) {
var dattrs = this.defaultattrs;
- var dattr$refs = '$refs' in dattrs && dattrs.$refs;
- var cleanup = null;
- for ( var k in attrs ){
- var attrk = attrs[ k ];
- // Check for literal overriding a constraint
- if ( dattr$refs && dattr$refs[ k ] ){
- if (! cleanup) { cleanup = {} };
- cleanup[k] = true;
- }
- // Check for object and array merges
- if ( attrk instanceof Object ) {
- var dattrk = dattrs[ k ];
- if ( dattrk instanceof Object ) {
- if ( attrk instanceof Array ) {
-// Debug.debug("%w: LzNode.initialize: merging Array %s", this, k);
- iargs[ k ] = attrk.concat( dattrk );
- continue;
- } else if (typeof attrk == 'object') {
-// Debug.debug("%w: LzNode.initialize: merging Object %s", this, k);
- var tmp = new LzInheritedHash(dattrk);
- for (var j in attrk) {
- tmp[j] = attrk[j];
+ // Check for object and array merges
+ // NOTE: [2008-01-22 ptw] This is just whacky, but it is
+ // required for back-compatibility. IWBNI this were
+ // handled at compile-time
+ for ( var k in attrs ) {
+ var attrk = attrs[ k ];
+ if ( attrk instanceof Object && (! (attrk instanceof LzInitExpr))) {
+ var dattrk = dattrs[ k ];
+ if ( dattrk instanceof Object && (! (dattrk instanceof LzInitExpr))) {
+ if ( attrk instanceof Array ) {
+// Debug.debug("%w.%s: merging %s (%w)", this, arguments.callee, k, attrk);
+ iargs[ k ] = attrk.concat( dattrk );
+ continue;
+ } else if (typeof attrk == 'object') {
+// Debug.debug("%w.%s: merging %s (%w)", this, arguments.callee, k, attrk);
+ var tmp = new LzInheritedHash(dattrk);
+ for (var j in attrk) {
+ tmp[j] = attrk[j];
+ }
+ iargs[ k ] = tmp;
+ continue;
+ }
}
- iargs[ k ] = tmp;
- continue;
- }
}
- }
- // Just a normal value, install it
- iargs[ k ] = attrk;
+// Debug.debug("%w.%s: NOT merging %s (%w)", this, arguments.callee, k, attrk);
+ // Just a normal value (or LzInitExpr), install it
+ iargs[ k ] = attrk;
}
- // Finish literal over constraint processing
- if (cleanup) {
- // We are going to shadow some defaults, so create a
- // clean hash to do that in if we don't already have
- // one.
- if (! iargs.hasOwnProperty('$refs')) {
- //we know the defaultattrs has $refs, so attach it
- iargs.$refs = new LzInheritedHash(dattr$refs);
- }
- var ia = LzNode._ignoreAttribute;
- for (var k in cleanup) {
- iargs.$refs[ k ] = ia;
- }
- }
}
}
@@ -170,6 +156,10 @@
this.construct( parent , maskedargs );
+ // Construct may, through many tangled webs of replication and
+ // placement, actually end up deleting us! Bail out.
+ if (this.__LZdeleted) { return; }
+
// this.setClassEvents( this.constructor );
this.__LZapplyArgs( maskedargs , true );
@@ -177,11 +167,6 @@
// If a replicator was made, we're deleted, if pooling is off.
if (this.__LZdeleted) { return; }
- var styleMap = this.$styles();
- if ( styleMap ) {
- this.__LZstyleConstraints = this.__LZapplyStyleMap( styleMap, attrs );
- }
-
/**
* @todo 2006-05-24 ptw Adam says this is a hack that we should get
* rid of.
@@ -505,88 +490,52 @@
}
}
-
-/**
- * Default style map. Will be overridden for classes that have $style
- * constraints.
- *
- * @access private
- */
-function $styles() {
- return null;
-}
-
-/**
- * Process the style map.
- * For each style-constrained attribute, if it does not have an
- * explicit value defined by the instance, lookup the css value that
- * it should be constrained to. If it is a simple value, set it
- * directly, otherwise save it to be applied after the instance is
- * fully inited (since the constraint may depend on other attributes).
- *
- * @param Object stylemap: a map of attribute names to the css style
- * they are to be constrained to.
- * @param Object initialArgs: the attributes specified explicitly for
- * this instance (which may override style constraints).
- * @access private
- */
-function __LZapplyStyleMap( stylemap, initialArgs ){
- var styleConstraints = {};
- for ( var k in stylemap ){
- //we are going to bypass the CSS API and call the underlying
- //implementation because we're concerned about speed
- if (initialArgs[k] != null) {
- // Don't get CSS value if it would be overridden by a instance/class attribute later
- continue;
- }
- var v = LzCSSStyle.getPropertyValueFor( this , stylemap[ k ] );
-
- // This is a hack because people want to give color styles as
- // Ox... which is not valid CSS, so they pass it as a string.
- // They really should be using #...
- if ((typeof v == 'string') && (v.length > 2) && (v.indexOf('0x') == 0) && (! isNaN(v))) {
- if ($debug) {
- Debug.warn("Invalid CSS value for %w.%s: `%#w`. Use: `#%06x`.", this, k, v, Number(v));
- }
- v = Number(v);
- }
-
- // A style does not override an explicit attribute
- if (! (k in initialArgs)) {
- // A style that is a function is a constraint
- if (v instanceof Function) {
- //Only set styleConstraints[k] if this[k] is null. See LPP-2894 - CSS: subclasses and instances can't override style constraints set on superclass*
- if (this[k] == null) {
-// Debug.warn("setting %w[%w] to %w, was %w", this, k, v, this[k]);
- styleConstraints[k] = v;
- }
- } else {
-// Debug.format("%w[%s] (%#w) %#w -> %#w", this, k, stylemap[k], this.k, v);
- if (v != null) this.setAttribute(k, v);
- }
- }
+ /**
+ * Bind an attribute to a (CSS) style property
+ *
+ * @param String attr: The name of the attribute to bind
+ * @param String prop: The name of the CSS property whose value the
+ * attribute will be bound to
+ *
+ * @access private
+ */
+ function __LZstyleBindAttribute(attr, prop) {
+ // we are going to bypass the CSS API and call the underlying
+ // implementation because we're concerned about speed
+ var styleValue = LzCSSStyle.getPropertyValueFor(this, prop);
+ // This is a hack because people want to give color styles as
+ // Ox... which is not valid CSS, so they pass it as a string.
+ // They really should be using #...
+ if ((typeof styleValue == 'string') && (styleValue.length > 2) && (styleValue.indexOf('0x') == 0) && (! isNaN(styleValue))) {
+ if ($debug) {
+ Debug.warn("Invalid CSS value for %w.%s: `%#w`. Use: `#%06x`.", this, k, styleValue, Number(styleValue));
+ }
+ styleValue = Number(styleValue);
}
- return styleConstraints;
-}
-
-
-/**
- * Process style constraints
- *
- * Compute each of the style constraints that were saved above and
- * apply them
- *
- * @keywords private
- */
-function __LZapplyStyleConstraints() {
- var styleConstraints = this.__LZstyleConstraints;
- for ( var k in styleConstraints ) {
- var fn = styleConstraints[ k ];
- var v = fn.call(this);
-// Debug.format("%w[%s] (%#w) %#w -> %#w", this, k, stylemap[k], this.k, v);
- this.setAttribute(k, v);
+ // Style expressions are constraints
+ if (styleValue instanceof LzStyleExpr) {
+ var source = styleValue.sourceAttributeName;
+ if (styleValue instanceof LzStyleAttr) {
+ // Create a new binder to update the destination attribute,
+ var binder = new LzStyleAttrBinder(this, attr, source);
+ // register it on the source attribute,
+ if (! this.__LZdelegates) { this.__LZdelegates = []; }
+ // TODO: [2008-02-20 ptw] The delegate and binder could be
+ // collapsed into a single object, a custom delegate with the
+ // bind method as its execute method, but I don't think these
+ // are common enough to warrant optimization at this time.
+ this.__LZdelegates.push(new LzDelegate(binder, 'bind', this, 'on' + source));
+ // bind it
+ binder.bind();
+ } else if (styleValue instanceof LzStyleIdent) {
+ this.setAttribute(attr, global[source]);
+ } else if ($debug) {
+ Debug.error("Unknown style expression %w", styleValue);
+ }
+ } else {
+ this.setAttribute(attr, styleValue);
}
-}
+ };
/**
@@ -634,8 +583,14 @@
* @param Object args: A dictionary of initialization arguments that should
* be applied
* to the instance. This contains any arguments that are default arguments
- * written in the class definition.
- *
+ * written in the class definition. Note that initial value
+ * expressions (`$once{...}`) and constraints (`${...}`), are in this
+ * list also, they can be differentiated from initial values by their
+ * type: `LzInitExpr` for the former, and `LzConstraintExpr` for the
+ * latter. If you handle the installation of any instance attributes
+ * in your construct method, you are responsible for dealing with
+ * these "binders" as well. Normally, they will be processed by
+ * LzNode.
*/
function construct ( parent , args ){
@@ -746,8 +701,9 @@
//do this now, so that others know that they're too late
this.isinited = true;
+ // Install computed initializations
this.__LZresolveReferences();
- if (this.__LZstyleConstraints) this.__LZapplyStyleConstraints();
+
var sl = this.subnodes;
if (sl) {
var i = 0;
@@ -783,7 +739,7 @@
this.datapath.__LZApplyDataOnInit();
}
- // Node node end
+ // Note node end
if ($profile) {
var nm = this['_profile_name'];
if (nm) {
@@ -840,52 +796,89 @@
*/
function __LZapplyArgs ( args , constcall ){
var oset = {};
- var hasset = [];
+ var hasset = null;
var hasearly = null;
if ( '$setters' in args && args.$setters ){
this.__LZsetSetters( args.$setters );
}
var setrs = this.setters;
+ var inits = null;
+ var constraints = null;
for ( var a in args ){
+ var val = args[a];
//handle flash bug where objects slots are enumerated multiple times
if ( oset[a] || args[a] === LzNode._ignoreAttribute ) continue;
oset[ a ] = true;
- if (setrs && setrs[ a ] == null ){
- this.addProperty( a, args[ a ]);
- if ( !constcall ){
- //then we need to notify the rest of the system that this
- //value changed.
- var evt = ("on" + a);
- if (evt in this) {
- if (this[evt].ready) this[ evt ].sendEvent( args[ a ] );
- }
+ if (val instanceof LzInitExpr) {
+ if (val instanceof LzConstraintExpr) {
+ if (constraints == null) { constraints = []; }
+ constraints.push(val);
+ } else if (val instanceof LzOnceExpr) {
+ if (inits == null) { inits = []; }
+ inits.push(val);
+ } else if ($debug) {
+ Debug.debug("Unknown init expr: %w", val);
+ }
+ // NOTE: [2007-05-16 ptw] This check ensures that each
+ // constrained attribute exists in the new instance.
+ // Necessary because of 'implicit this', which will make a
+ // free reference (error in Javascript) otherwise. We
+ // have to not shadow inherited values because in some
+ // cases (e.g., lz.state), we actually have a method and
+ // an attribute of the same name! The attribute is
+ // implemented by a setter, so it never clobbers the
+ // method... er, unless you set the attribute to a
+ // function. YOW!
+ if (! (a in this)) {this[a] = null;}
+ } else if (! (a in setrs)) {
+ // TODO: should already be declared, so we should just be
+ // able to set it
+ this.addProperty( a, val);
+ if (! constcall) {
+ //then we need to notify the rest of the system that this
+ //value changed.
+ var evt = ("on" + a);
+ if (evt in this) {
+ if (this[evt].ready) this[ evt ].sendEvent( args[ a ] );
+ }
+ }
+ } else if (setrs[ a ] != -1) {
+ if (a in this.earlySetters) {
+ if (hasearly == null) { hasearly = []; }
+ hasearly[this.earlySetters[a]] = a;
+ } else {
+ if (hasset == null) { hasset = []; }
+ hasset.push(a);
}
- } else if (setrs && setrs[ a ] != -1 ){
- if ( this.earlySetters && this.earlySetters[ a ]){
- if ( hasearly == null){
- hasearly = [];
- }
- hasearly[ this.earlySetters[ a ] ] = a;
- } else{
- hasset.push( a );
- }
}
}
if (hasearly) {
- for (var i = 1; i < hasearly.length; i++) {
+ for (var i = 1, l = hasearly.length; i < l; i++) {
+ if (i in hasearly) {
var a = hasearly[i];
- if (this[setrs[a]]) this[ setrs[a] ]( args[ a ] , a );
+ this[setrs[a]]( args[a], a);
+ }
}
}
- while( hasset.length ){
- var a = hasset.pop();
- this[ setrs[a] ]( args[ a ] , a );
+ if (hasset) {
+ for (var i = hasset.length - 1; i >= 0; i--) {
+ var a = hasset[i];
+ this[setrs[a]]( args[a], a);
+ }
}
+
+ // process inits and constraints
+ // TODO: [2008-02-06 ptw] This can be much more efficient. For
+ // now, we just collect the inits and constraints (once their
+ // inheritance has been computed correctly above) and use the
+ // existing $refs-like mechanism to install them.
+ this.__LZstoreAttr(inits, '$inits');
+ this.__LZstoreAttr(constraints, '$constraints');
}
/**
@@ -1185,6 +1178,12 @@
* bind the attribute.
*/
function dataBindAttribute ( attr , path ) {
+ if ( $debug ){
+ if ( path == null ){
+ Debug.warn( 'No value for %w.%s="$path{%w}"', this, attr, path );
+ }
+ }
+
if ( !this.datapath ){
this.setDatapath( "." );
}
@@ -1243,27 +1242,15 @@
}
-
+// TODO: [2008-02-14 ptw] Remove at 4.1 or later
+if ($debug) {
/**
* @access private
*/
function __LZstoreRefs ( val , prop ){
- //Debug.write('__LZstoreRefs', this, prop, val);
- // NOTE: [2007-05-16 ptw]
- // This loop ensures that each constrained attribute exists in the
- // new instance. Necessary because of 'implicit this', which will
- // make a free reference (error in Javascript) otherwise. We have
- // to not shadow inherited values because in some cases (e.g.,
- // lz.state), we actually have a method and an attribute of the
- // same name! The attribute is implemented by a setter, so it
- // never clobbers the method... er, unless you set the attribute
- // to a function. YOW!
- for ( var i in val){
- if (! (i in this)) {this[i] = null;}
- }
-
- this.__LZstoreAttr( val , prop );
+ Debug.error("%w.%s is no longer supported", this, arguments.callee);
}
+}
/**
* @access private
@@ -1274,85 +1261,74 @@
}
this.__LZresolveDict[ prop ] = val;
-}
+};
/**
* @access private
*/
-function __LZresolveReferences (){
+function __LZresolveReferences () {
var rdict = this.__LZresolveDict;
- this.__LZresolveDict = null;
- for ( var r in rdict ){
- if ( r == "$delegates" ) continue;
- this[ this.__LZdelayedSetters[ r ] ] ( rdict[ r ] );
- }
- // $delegates : "__LZsetDelegates"
- if ( rdict && rdict.$delegates ) this.__LZsetDelegates( rdict.$delegates );
-}
-
-/**
- * Take care to evaluate a path expression in the proper environment
- * $lzsc$ is the compiler convention for internal variables we resort
- * to this in hopes that it is not shadowed in the with contexts
- * because the compiler is not smart enough to use a register
- * @access private
- */
-function __LZevalPathExpr ($lzsc$rp) {
- with (global){
- with( this ){
- return eval( $lzsc$rp );
+ if (rdict != null) {
+ this.__LZresolveDict = null;
+ var inits = rdict['$inits'];
+ if (inits != null) {
+ for (var i = 0, l = inits.length; i < l; i++) {
+ // invoke the init method
+ this[inits[i].methodName]();
+ }
}
- }
-}
-
-/**
- * @access private
- */
-function __LZresolveRefs ( refs ){
- // $once are applied before $always
- for ( var p in refs ){
- var rp = refs[ p ];
- var pp;
- if ( "string" == typeof( rp ) ){
- rp = LzParsedPath.trim( rp );
- var qc = rp.charAt( 0 );
- if ( qc =="'" || qc == '"' ){
- //check, and remove quotes
- if ( $debug ){
- if ( qc != rp.charAt( rp.length -1 ) ){
- Debug.warn( "Bad quoting for $path %w in %w", rp, this );
+ // Install constraints
+ // NOTE: [2008-02-13 ptw] Keep in sync with LzState#remove
+ var constraints = rdict['$constraints'];
+ if (constraints != null) {
+ for (var i = 0, l = constraints.length; i < l; i++) {
+ var c = constraints[i];
+ // Apply the constraint method
+ var constraintMethodName = c.methodName;
+ // TODO: [2008-02-06 ptw] the dependency computation needs
+ // to be a method also, probably stored in the
+ // LzConstraintExpr object
+ var cm = this[constraintMethodName];
+ if ($debug) {
+ if (!(cm && cm instanceof Function)) {
+ Debug.debug("Bad constraint %w on %w", c, this);
}
}
- pp = rp.substring( 1 , rp.length-1 );
- } else {
- pp = this.__LZevalPathExpr(rp);
- if ( $debug ){
- if ( pp == null ){
- Debug.warn( "No value for $path reference %w in %w",
- rp, this );
- }
+ var dependencies = null;
+ if ('dependencies' in cm) {
+ dependencies = cm.dependencies.call(this);
}
+ this.applyConstraintMethod(constraintMethodName , dependencies);
}
- this.dataBindAttribute( p , pp );
- } else if ((rp instanceof Function) &&
- // A function with no or null dependencies is a $once
- (! ('dependencies' in rp && rp.dependencies))) {
- rp.call(this);
}
- }
-
- // Functions with dependencies are $always
- for ( var p in refs ){
- var rp = refs[ p ];
- if ((rp instanceof Function) && ('dependencies' in rp)) {
- this.applyConstraint( p , rp , rp.dependencies.call(this) );
+ // Backward compatibility -- are there any other delayed setters?
+ for ( var r in rdict ){
+ if ( r == "$inits" || r == "$constraints" || r == "$delegates" ) continue;
+ if (r in this.__LZdelayedSetters) {
+ this[ this.__LZdelayedSetters[ r ] ] ( rdict[ r ] );
+ } else if ($debug) {
+ Debug.warn("No delayed setter for %s", r);
+ }
}
+ // Install delegates
+ // $delegates : "__LZsetDelegates"
+ if (rdict['$delegates']) this.__LZsetDelegates( rdict.$delegates );
}
}
+// TODO: [2008-02-14 ptw] Remove at 4.1 or later
+if ($debug) {
/**
* @access private
*/
+function __LZresolveRefs ( refs ){
+ Debug.error("$refs: %s is no longer supported", refs);
+}
+}
+
+/**
+ * @access private
+ */
function __LZsetDelegates ( delarr ){
if ( delarr.length && !this.__LZdelegates ){
this.__LZdelegates = [];
@@ -1367,27 +1343,61 @@
this.__LZdelegates.push( new LzDelegate( this , meth ,sender , delarr[i] ) );
}
-}
+};
+ // TODO: [2008-02-12 ptw] Backwards compatibility, remove in next
+ // release
+ /**
+ * Applies a function as a constraint.
+ *
+ * @deprecated: Constraints should be methods and should be applied
+ * using applyConstraintMethod
+ *
+ * @param String attribute: Putatively the attribute being
+ * constrained, but actually ignored
+ * @param Function constraint: A function that will be `call`-ed on
+ * `this` when any of the dependencies change
+ * @param Array dependencies: A property list of (reference,
+ * attribute) that should cause the constraint function to be invoked.
+ */
+ function applyConstraint(attribute, constraint, dependencies) {
+ if ($debug) {
+ Debug.deprecated(this, arguments.callee, this.applyConstraintMethod);
+ }
+ var constraintMethodName = "$cf" + this.$cfn++;
+ this.addProperty(constraintMethodName, constraint);
+ return this.applyConstraintMethod(constraintMethodName, dependencies);
+ }
+
/**
- * Applies a constraint for the given attribute.
- * @param String prop: The attribute to be constrained to the value of the
- * expression
- * @param Function cfunc: The function that sets the attribute to the value.
- * E.g. function () { this.setAttribute( 'foo' , someOtherFunction() ) }
- * @param Array dep: An array of (reference, attribute) pairs that the
- * constraint depends on. For instance, if the constraint depends on my x
- * and my friend's width, the dependencies array would look like this:
- * [ this, "x" , myfriend, "width" ]
+ * Applies a method as a constraint.
+ *
+ * @param String constraintMethodName: The name of the method that
+ * will be invoked when any of the dependencies changes. Typically
+ * this method 'constrains' an attribute to a computation on the
+ * dependent attributes. E.g. `function constrain_foo () {
+ * this.setAttribute( 'foo' , this.x + myfriend.width ) }`. This
+ * method _must_ be a method on the instance to which you are
+ * applying the constraint.
+ *
+ * @param Array dependencies: An array of (reference, attribute)
+ * pairs that the constraint depends on. For instance, if the
+ * constraint depends on my x and my friend's width, the dependencies
+ * array would look like this: `[ this, "x" , myfriend, "width" ]`
*/
-function applyConstraint ( prop , cfunc, dep ){
- var l = dep.length;
- if (l){
+function applyConstraintMethod ( constraintMethodName, dependencies ){
+ if ($debug) {
+ if (! ((arguments.length == 2) &&
+ (typeof constraintMethodName == 'string') &&
+ (this[constraintMethodName] instanceof Function) &&
+ (dependencies == null || (dependencies instanceof Array)))) {
+ Debug.error("%w.%s: invalid arguments %w", this, arguments.callee, arguments);
+ }
+ }
+ if (dependencies && dependencies.length > 0){
if ( !this.__LZdelegates ){
this.__LZdelegates = [];
}
- var refF = "$cf" + this.$cfn++;
- this[ refF ] = cfunc;
// NOTE: [2006-05-30 ptw] You may think to yourself 'this is
// not my large automobile', I can move that `new LzDelegate`
@@ -1401,32 +1411,64 @@
// a separate delegate for each dependency, and people have
// written code that only works because of this loophole...
var dp;
- for ( var i = 0 ; i < l ; i+=2 ){
- var d = new LzDelegate( this , refF );
- this.__LZdelegates.push( d );
- dp = dep[ i ];
+ for (var i = 0, l = dependencies.length; i < l; i += 2) {
+ dp = dependencies[i];
if (dp) {
- d.register( dp, "on" + dep[ i + 1 ] );
+ var d = new LzDelegate(this, constraintMethodName, dp, "on" + dependencies[i + 1]);
+ this.__LZdelegates.push(d);
}
}
}
// Whether there are dependencies or not, we need to invoke the
// constraint function (since the dependencies may have 'fired'
// before the constraint was installed).
- cfunc.call(this);
+ this[constraintMethodName]();
}
+ /**
+ * Release a constraint on an attribute
+ *
+ * Only works for initial constraints. Constraints applied at
+ * runtime should be applied and released with
+ * `applyConstraintMethod` and `releaseConstraintMethod`.
+ *
+ * @param String attr: The name of the attribute to release the
+ * constraint from
+ */
+ function releaseConstraint(attr:String) {
+ var c = this._instanceAttrs[attr];
+ if (c instanceof LzConstraintExpr) {
+ var m = c.methodName;
+ return this.releaseConstraintMethod(m);
+ }
+ return false;
+ }
+
/**
- * Release the constraint on the named property
- * This function doesn't seem to work. Marking private to remove from docs. -sa
- * @access private
- * @param prop: The property with the constraint to release.
+ * Release a constraint method
+ *
+ * @param String constraintMethodName: the constraint to release
+ *
+ * @devnote TODO: [2008-02-07 ptw] This could probably be made more
+ * efficient, but at least it should work now. The previous
+ * implementation was nonesense.
*/
-function releaseConstraint ( prop ){
-
- var refF = "_SetCons" + prop;
- if (refF in this)
- this[ refF ].delegate.unregisterAll();
+function releaseConstraintMethod (constraintMethodName) {
+ var result = false;
+ var dels = this.__LZdelegates;
+ if (dels) {
+ for (var i = 0; i < dels.length; ) {
+ var del = dels[i];
+ if (del.c === this && del.f == constraintMethodName) {
+ del.unregisterAll();
+ dels.splice(i, 1);
+ result = true;
+ } else {
+ i++;
+ }
+ }
+ }
+ return result;
}
/**
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/UserClass.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/UserClass.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/core/UserClass.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -196,65 +196,60 @@
// TODO: [2006-05-25 ptw] Share this crud with LzNode
// LzNode class initializer assures that we already have a
// defaultattrs property that is an LzInheritedHash
- var dattrs = newproto.defaultattrs;
if (attrs) {
- var dattr$refs = '$refs' in dattrs && dattrs.$refs;
- var cleanup = null;
+ var dattrs = newproto.defaultattrs;
var setters = newproto.setters;
// Could this test be an instanceof test?
var isstate = (('$isstate' in newproto) && (newproto.$isstate));
for ( var k in attrs ) {
var attrk = attrs[k];
- // Check for literal overriding a constraint
- if ( dattr$refs && dattr$refs[ k ] ){
- if (! cleanup ) { cleanup = {} };
- cleanup[k] = true;
- }
- // --- this is different from LzNode, why?
- // if there's no setter, then attach this to the prototype
- if (setters[k] == null && (! isstate)) {
- if ((attrk instanceof Object) && (! (attrk instanceof Function))) {
-// Debug.debug("%w: LzUserClass.initialize: NOT merging %s", this, k);
+
+ if (! (attrk instanceof LzInitExpr)) {
+ // if there's no setter, then attach this to the prototype
+ // TODO: [2008-02-11 ptw] this is different from LzNode, why?
+ // It means things without setters won't get the magic merge
+ // treatment (which is a hack, but it seems wrong to not merge
+ // just because you don't have a setter). I guess the
+ // intent here is to save setting constant values in each
+ // instance so this is a micro-optimization, somewhat
+ // broken.
+ if (setters[k] == null && (! isstate)) {
+ newproto.addProperty( k, attrk );
+ // If there is a property that would have been shadowed,
+ // you have to hide that from applyArgs, or you will get
+ // clobbered!
+ if (k in dattrs) {
+ dattrs[k] = LzNode._ignoreAttribute;
+ }
+ continue;
}
- newproto.addProperty( k, attrk );
- continue;
- }
- // Check for object and array merges
- if (attrk instanceof Object) {
- var dattrk = dattrs[k];
- if (dattrk instanceof Object) {
- if ( attrk instanceof Array ) {
-// Debug.debug("%w: LzUserClass.initialize: merging Array %s", this, k);
- dattrs[ k ] = attrk.concat( dattrk );
- continue;
- } else if (typeof attrk == 'object') {
-// Debug.debug("%w: LzUserClass.initialize: merging Object %s", this, k);
- var tmp = new LzInheritedHash(dattrk);
- for (var j in attrk) {
- tmp[j] = attrk[j];
+ // Check for object and array merges
+ // NOTE: [2008-01-22 ptw] This is just whacky, but it is
+ // required for back-compatibility. IWBNI this were
+ // handled at compile-time
+ if (attrk instanceof Object) {
+ var dattrk = dattrs[k];
+ if (dattrk instanceof Object && (! (dattrk instanceof LzInitExpr))) {
+ if ( attrk instanceof Array ) {
+// Debug.debug("%w.%s: merging %s (%w)", this, arguments.callee, k, attrk);
+ dattrs[ k ] = attrk.concat( dattrk );
+ continue;
+ } else if (typeof attrk == 'object') {
+// Debug.debug("%w.%s: merging %s (%w)", this, arguments.callee, k, attrk);
+ var tmp = new LzInheritedHash(dattrk);
+ for (var j in attrk) {
+ tmp[j] = attrk[j];
+ }
+ dattrs[ k ] = tmp;
+ continue;
}
- dattrs[ k ] = tmp;
- continue;
}
}
}
- // Just a normal value, install it
+// Debug.debug("%w.%s: NOT merging %s (%w)", this, arguments.callee, k, attrk);
+ // Just a normal value (or LzInitExpr), install it
dattrs[k] = attrk;
}
- // Finish literal over constraint processing
- if (cleanup) {
- // We are going to shadow some defaults, so create a
- // clean hash to do that in if we don't already have
- // one.
- if (! dattrs.hasOwnProperty('$refs')) {
- //we know the defaultattrs has $refs, so attach it
- dattrs.$refs = new LzInheritedHash(dattr$refs);
- }
- var ia = LzNode._ignoreAttribute;
- for (var k in cleanup) {
- dattrs.$refs[ k ] = ia;
- }
- }
}
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzDatapointer.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzDatapointer.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzDatapointer.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
/**
*
- * @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved.
+ * @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved.
* Use is subject to license terms.
*
* @topic LFC
@@ -892,6 +892,23 @@
}
/**
+ * Gets the nodeType of the node that the datapointer is pointing to.
+ * @return Integer: one of LzDataNode.ELEMENT_NODE, LzDataNode.TEXT_NODE,
+ * LzDataNode.DOCUMENT_NODE or <code>undefined</code> if this datapointer
+ * does not point to a valid node
+ */
+function getNodeType (){
+ if ( ! this.p ) {
+ if ( $debug ) {
+ Debug.info("%s: p is null in %s", arguments.callee, this);
+ }
+ return;
+ }
+
+ return this.p.nodeType;
+}
+
+/**
* Gets the name of the node that the datapointer is pointing to.
* @return String: The name of the datapointer's node
*/
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -132,6 +132,9 @@
// If an explicit post body content arg wasn't supplied, make
// a url-form-encoded string from the queryparams data.
+
+ var cachebreak = "__lzbc__="+(new Date()).getTime();
+
var postbody = dreq.postbody;
if (postbody == null && qparams != null) {
var names = qparams.getNames();
@@ -140,6 +143,15 @@
q += sep + name + '=' + encodeURIComponent(qparams.getValue(name));
sep = '&';
}
+
+ // [LPP-5368] If this is a SOLO POST request, put the
+ // 'cache-breaking' arg into this post body. This prevents
+ // the case of an empty POST body, which would cause the
+ // Flash player to turn it into a GET request.
+ if (!proxied && (dreq.method == "POST") && !dreq.clientcacheable) {
+ q += cachebreak;
+ }
+
postbody = q;
}
@@ -155,7 +167,6 @@
postbody = null;
}
- var cachebreak = "__lzbc__="+(new Date()).getTime();
// convert url back to string
url = lzurl.toString();
var url;
@@ -175,10 +186,16 @@
} else {
// break the browser cache by adding a unique string to the url
if (!dreq.clientcacheable) {
- if (lzurl.query == null) {
- lzurl.query = cachebreak;
+ if (dreq.method == "POST") {
+ //POST case:
+ // cache break arg already added to post body
} else {
- lzurl.query += ("&" + cachebreak);
+ // GET case: add to url query portion
+ if (lzurl.query == null) {
+ lzurl.query = cachebreak;
+ } else {
+ lzurl.query += ("&" + cachebreak);
+ }
}
}
@@ -234,7 +251,7 @@
var proxied = dreq.proxied;
- if (data.childNodes[0].nodeName == "error") {
+ if (proxied && data.childNodes[0].nodeName == "error") {
this.setRequestError(dreq, data.childNodes[0].attributes['msg']);
dreq.onstatus.sendEvent( dreq );
return;
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzReplicationManager.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzReplicationManager.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/data/LzReplicationManager.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -207,31 +207,44 @@
}
var hadxpathconstraint = false;
- if ( view._instanceAttrs.$refs && view._instanceAttrs.$refs.datapath ) {
- //<view datapath="${ ... }"/>
- //we need to mask this
- this.cloneAttrs.$refs = new LzInheritedHash( this.cloneAttrs.$refs );
- this.cloneAttrs.$refs.datapath = LzNode._ignoreAttribute;
- //but, we want the constraint to apply to this object instead
- var cons = view._instanceAttrs.$refs.datapath;
-
- this._t = cons.dependencies;
+ var ia = view._instanceAttrs;
+ var oa = odp._instanceAttrs;
+ if (ia && 'datapath' in ia && ia.datapath instanceof LzConstraintExpr) {
+ // <view datapath="${ ... }"/>
hadxpathconstraint = true;
+ // we need to mask this constraint
+ // NOTE: [2008-02-07 ptw] Why? Why can't this just execute as
+ // a constraint on the clone via the normal mechanism?
+ this.cloneAttrs = new LzInheritedHash(this.cloneAttrs);
+ this.cloneAttrs.datapath = LzNode._ignoreAttribute;
+ // but, we want the constraint to apply to this object instead
+ var constraintMethodName = ia.datapath.methodName;
+ // TODO: [2008-02-06 ptw] the dependency computation needs
+ // to be a method also, probably stored in the
+ // LzConstraintExpr object
+ var dependencyMethod = view[constraintMethodName].dependencies;
this.__LZpreventXPathUpdate = true;
- this.applyConstraint( 'xpath', cons, this._t != null ? this._t() : [] );
+ // NOTE: [2008-02-07 ptw] The method had better be available
+ // on the clone (which means we really want a clone class here
+ // to instantiate, rather than an instance to clone).
+ this.applyConstraintMethod(constraintMethodName, dependencyMethod != null ? dependencyMethod.call(this) : []);
this.__LZpreventXPathUpdate = false;
- } else if ( odp._instanceAttrs.$refs && odp._instanceAttrs.$refs.xpath ){
+ } else if (oa && 'xpath' in oa && oa.xpath instanceof LzConstraintExpr){
//<view><datapath xpath="${ ... }"/>
-
+ hadxpathconstraint = true;
//we want the constraint to apply to this object instead
- var cons = odp._instanceAttrs.$refs.xpath;
+ var constraintMethodName = oa.xpath.methodName;
+ // TODO: [2008-02-06 ptw] the dependency computation needs
+ // to be a method also, probably stored in the
+ // LzConstraintExpr object
+ var dependencyMethod = odp[constraintMethodName].dependencies;
- this._t = cons.dependencies;
- hadxpathconstraint = true;
-
this.__LZpreventXPathUpdate = true;
- this.applyConstraint( 'xpath', cons, this._t != null ? this._t() : [] );
+ // NOTE: [2008-02-07 ptw] The method had better be available
+ // on the clone (which means the compiler really has to move
+ // it from the datapath subnode to the clone class).
+ this.applyConstraintMethod(constraintMethodName, dependencyMethod != null ? dependencyMethod.call(this) : []);
this.__LZpreventXPathUpdate = false;
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/helpers/LzState.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/helpers/LzState.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/helpers/LzState.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
/**
*
- * @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved.
+ * @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved.
* Use is subject to license terms.
*
* @affects lzstate
@@ -107,7 +107,7 @@
*/
setters.apply = "setApply";
setters.$setters = null;
-static var staterefs = { apply : true };
+static var stateprops = { apply : true };
static var stateevents = { onremove : true , onapply : true };
prototype.$isstate = true; // Defined in LzNode
var asyncnew = false;
@@ -127,6 +127,11 @@
*/
setters.__LZsourceLocation = "__LZsetProperty";
+var heldargs;
+var releasedconstraints;
+var appliedchildren;
+var isapplied = false;
+
/**
* @access private
*/
@@ -134,7 +139,6 @@
super.construct.apply(this, arguments);
this.heldArgs = {};
this.appliedChildren = [];
- this.isapplied = false;
}
/**
@@ -187,32 +191,45 @@
return;
}
+ var parent = this.parent;
this.isapplied = true;
+ // release any constraints you are about to override
+ var pia = parent._instanceAttrs;
+ for (var key in this.heldArgs) {
+ if (pia && key in pia && pia[key] instanceof LzConstraintExpr) {
+ if (this.releasedconstraints == null) { this.releasedconstraints = []; }
+ var constraintMethodName = pia[key].methodName;
+ if (parent.releaseConstraintMethod(constraintMethodName)) {
+ this.releasedconstraints.push(constraintMethodName);
+ }
+ }
+ }
+
//capture delegates created by process of applying state
- var od = this.parent.__LZdelegates;
- this.parent.__LZdelegates = null;
+ var od = parent.__LZdelegates;
+ parent.__LZdelegates = null;
- this.parent.__LZapplyArgs( this.heldArgs );
+ parent.__LZapplyArgs( this.heldArgs );
if (this.subh) var shl = this.subh.length;
- this.parent.__LZsetPreventInit();
+ parent.__LZsetPreventInit();
for ( var i = 0 ; i < shl; i++ ){
if ( this.__LZpool && this.__LZpool[ i ] ){
this.appliedChildren.push( this.__LZretach( this.__LZpool[ i ] ) );
} else {
- this.appliedChildren.push( this.parent.makeChild( this.subh[ i ] ,
+ this.appliedChildren.push( parent.makeChild( this.subh[ i ] ,
this.asyncnew));
}
}
- this.parent.__LZclearPreventInit();
+ parent.__LZclearPreventInit();
- this.parent.__LZresolveReferences();
- this.__LZstatedelegates = this.parent.__LZdelegates;
+ parent.__LZresolveReferences();
+ this.__LZstatedelegates = parent.__LZdelegates;
- this.parent.__LZdelegates = od;
+ parent.__LZdelegates = od;
if (this.onapply.ready) this.onapply.sendEvent( this );
}
@@ -254,9 +271,33 @@
ac.destroy();
}
}
-
+
this.appliedChildren = [];
+ // This sounds good in theory, but breaks dragstate and
+ // resizestate which expect their effect to stick when they are
+ // removed.
+ if (this.releasedconstraints != null) {
+// // re-apply any constraints you released
+// var parent = this.parent;
+// // NOTE: [2008-02-13 ptw] Keep in sync with LzNode#__LZresolveReferences
+// var rc = this.releasedconstraints;
+// for (var i = 0, l = rc.length; i < l; i++) {
+// var constraintMethodName = rc[i];
+// // TODO: [2008-02-06 ptw] the dependency computation needs
+// // to be a method also, probably stored in the
+// // LzConstraintExpr object
+// var cm = parent[constraintMethodName];
+// if ($debug) {
+// if (!(cm && cm instanceof Function)) {
+// Debug.debug("Bad constraint %w on %w", c, this);
+// }
+// }
+// var dependencyMethod = cm.dependencies;
+// parent.applyConstraintMethod(constraintMethodName , dependencyMethod.call(parent));
+// }
+ this.releasedconstraints = null;
+ }
}
/**
@@ -274,57 +315,70 @@
/**
* @devnote We override some methods of LzNode to filter out
- * attributes, setters, and handlers that belong to the state,
- * capturing those that do not for later application/removal to the
- * parent node
+ * attributes, and handlers that belong to the state, capturing those
+ * that do not for later application/removal to the parent node
*/
/**
* @access private
- * Capture attributes that don't belong to the state for later
+ * Filter out attributes that don't belong to the state for later
* application to parent.
+ *
* @devnote NOTE: [2006-12-09 ptw] Currently the only args that apply to the
- * state are args that have setters (which will be intercepted by
- * __LZstoreRefs, q.v.), hence we can just intercept
- * addProperty to capture the 'held args'.
- *
-* override */ function __LZapplyArgs ( args ){
- var ap = this.addProperty;
- this.addProperty = function (prop, val) {
- this.heldArgs[prop] = val;
+ * state are args that have setters
+ */
+/* override */ function __LZapplyArgs ( args ){
+ var stateArgs = {};
+ var held = this.heldArgs;
+ for (var key in args) {
+ var val = args[key];
+ if (key in this.setters) {
+ stateArgs[key] = val;
+ } else {
+ held[key] = val;
+ }
}
- super.__LZapplyArgs(args);
- this.addProperty = ap;
-}
-
-/**
- * @access private
- * Capture setters that don't belong to the state for later
- * application to the parent (and pass the ones that do apply to the
- * state on to your superclass).
-* override */ function __LZstoreRefs ( refs, prop ){
- var parrefs = {};
- var myrefs = {};
-
- for ( var p in refs ){
- // Does this belong to the state?
- if ( LzState.staterefs[ p ] ){
- myrefs[ p ] = refs[ p ]
- var havemyrefs = true;
- } else {
- parrefs[ p ] = refs[ p ];
- var haveparrefs = true;
- }
+ // If any stateArgs are LzInitExpr's, we need to move the
+ // methods they call from held to stateArgs
+ for (var key in stateArgs) {
+ var val = stateArgs[key];
+ if (val instanceof LzInitExpr) {
+ var methodName = val.methodName;
+ if (methodName in held) {
+ stateArgs[methodName] = held[methodName];
+ delete held[methodName];
+ }
}
+ }
- if ( havemyrefs ){
- // Install state setters
- super.__LZstoreRefs( myrefs , prop );
+ // If any held args are LzInitExprs, we need to rename their methods
+ // so they do not clober the parent's methods
+ // TODO: [2008-02-13 ptw] This should take place at compile time.
+ var rename = null;
+ for (var key in held) {
+ var val = held[key];
+ if (val instanceof LzInitExpr) {
+ var methodName = val.methodName;
+ if (methodName in held) {
+ if (rename == null) { rename = []; }
+ rename.push(key);
+ }
}
+ }
+ if (rename != null) {
+ for (var i = 0, l = rename.length; i < l; i++) {
+ var key = rename[i];
+ var val = held[key];
+ var methodName = val.methodName;
+ var newMethodName = methodName + this.__LZUID;
+ // Clone the init expr with the new name
+ held[key] = new (val.constructor)(newMethodName);
+ held[newMethodName] = held[methodName];
+ delete held[methodName];
+ }
+ }
- if ( haveparrefs ){
- this.heldArgs[prop] = parrefs;
- }
+ super.__LZapplyArgs(stateArgs);
}
/**
@@ -332,7 +386,8 @@
* Capture handlers that don't belong to the state for later
* application to the parent (and pass the ones that do apply to the
* state on to your superclass).
-* override */ function __LZstoreDelegates ( delarr ){
+ */
+/* override */ function __LZstoreDelegates ( delarr ){
var pardels = [];
var mydels = [];
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,7 +1,7 @@
/**
* LzKeyboardKernel.js
*
- * @copyright Copyright 2007 Laszlo Systems, Inc. All Rights Reserved.
+ * @copyright Copyright 2007,2008 Laszlo Systems, Inc. All Rights Reserved.
* Use is subject to license terms.
*
* @topic Kernel
@@ -18,7 +18,9 @@
var dirty = false;
var k = e['keyCode'];
var dh = LzKeyboardKernel.__downKeysHash;
- if (k >= 0) {
+ // skip shift, ctrl, option keys to prevent duplicate sending - see LPP-4267
+ // really, all control characters should be skipped...
+ if (k >= 0 && k != 16 && k != 17 && k != 18) {
// TODO: add mapping to flash character codes?
var s = String.fromCharCode(k).toLowerCase();
var t = e.type;
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1255,6 +1255,10 @@
this.__discardElement(this.__LZcanvas);
}
this.__ImgPool = null;
+
+ if (this.quirks.ie_leak_prevention) {
+ delete this.__sprites[this.uid];
+ }
}
/**
@@ -1527,19 +1531,22 @@
if (LzSprite.prototype.quirks.ie_leak_prevention) {
// Used instead of node.removeChild to eliminate 'pseudo-leaks' in IE - see http://outofhanwell.com/ieleak/index.php?title=Fixing_Leaks
//alert('__discardElement' + element);
- if (element.owner) element.owner = null;
- var garbageBin = document.getElementById('__LZIELeakGarbageBin');
- if (!garbageBin) {
- garbageBin = document.createElement('DIV');
- garbageBin.id = '__LZIELeakGarbageBin';
- garbageBin.style.display = 'none';
- document.body.appendChild(garbageBin);
+ if( ( element.nodeType >= 1 ) && ( element.nodeType < 13 ) ) {
+ // ensures element is valid node
+ if (element.owner) element.owner = null;
+ var garbageBin = document.getElementById('__LZIELeakGarbageBin');
+ if (!garbageBin) {
+ garbageBin = document.createElement('DIV');
+ garbageBin.id = '__LZIELeakGarbageBin';
+ garbageBin.style.display = 'none';
+ document.body.appendChild(garbageBin);
+ }
+
+ // move the element to the garbage bin
+ garbageBin.appendChild(element);
+ garbageBin.innerHTML = '';
+ //garbageBin.outerHTML = '';
}
-
- // move the element to the garbage bin
- garbageBin.appendChild(element);
- garbageBin.innerHTML = '';
- //garbageBin.outerHTML = '';
} else {
if (element.parentNode) element.parentNode.removeChild(element);
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js 2008-02-26 20:32:17 UTC (rev 8108)
@@ -41,7 +41,6 @@
this.setFontName(args.font);
this.setFontStyle(args.fontstyle);
this.setFontSize(args.fontsize);
- this.text = args.text;
}
// Should reflect CSS defaults in LzSprite.js
@@ -269,15 +268,21 @@
var root = document.getElementById('lzTextSizeCache');
- // Empty the cache when full, but do not reset the counter because
- // IE holds onto the object.
- if (this._sizecache.counter > 0 && this._sizecache.counter % this.__sizecacheupperbound == 0) {
- this._sizecache = {counter: this._sizecache.counter};
+ if (LzTextSprite.prototype._sizecache.counter > 0 && LzTextSprite.prototype._sizecache.counter % LzTextSprite.prototype.__sizecacheupperbound == 0) {
+ LzTextSprite.prototype._sizecache = {counter: 0};
+ if (LzSprite.prototype.quirks.ie_leak_prevention) {
+ var obj = LzTextSprite.prototype._sizedomcache;
+ var f = LzSprite.prototype.__discardElement;
+ for( var i in obj ) {
+ f( obj[i] );
+ }
+ LzTextSprite.prototype._sizedomcache = {}
+ }
if (root) {
root.innerHTML = '';
}
}
- if (this._sizecache[style] == null) this._sizecache[style] = {};
+ if (LzTextSprite.prototype._sizecache[style] == null) LzTextSprite.prototype._sizecache[style] = {};
if (! root) {
root = document.createElement('div');
@@ -286,7 +291,7 @@
document.body.appendChild(root);
}
- var _textsizecache = this._sizecache[style];
+ var _textsizecache = LzTextSprite.prototype._sizecache[style];
if (! _textsizecache[string]) {
var size = {};
@@ -297,13 +302,13 @@
var tagname = 'span';
var mdiv = _textsizecache['lzdiv~~~' + tagname];
if (mdiv == null) {
- var html = '<' + tagname + ' id="testSpan' + this._sizecache.counter + '"';
+ var html = '<' + tagname + ' id="testSpan' + LzTextSprite.prototype._sizecache.counter + '"';
html += ' style="' + style + '">';
html += string;
html += '</' + tagname + '>';
root.insertAdjacentHTML('beforeEnd', html);
- mdiv = document.all['testSpan' + this._sizecache.counter];
+ mdiv = document.all['testSpan' + LzTextSprite.prototype._sizecache.counter];
_textsizecache['lzdiv~~~' + tagname] = mdiv;
}
} else {
@@ -342,7 +347,7 @@
}
}
_textsizecache[string] = size;
- this._sizecache.counter++;
+ LzTextSprite.prototype._sizecache.counter++;
}
return _textsizecache[string];
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,7 +1,7 @@
/**
* LzInputTextSprite.as
*
- * @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved.
+ * @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved.
* Use is subject to license terms.
*
* @topic Kernel
@@ -96,8 +96,10 @@
// if empty text content was supplied, use DEFAULT_WIDTH
- //(args.width == null && typeof(args.$refs.width) != "function")
-
+ //(args.width == null || args.width instanceof LzInitExpr)
+ // NOTE: [2008-02-13 ptw] No one will fess up to understanding why
+ // we treat the presence of a constraint on width differently than
+ // height.
if (args.width == null) {
// if there's text content, measure it's width
if (this.text != null && this.text.length > 0) {
@@ -114,7 +116,7 @@
// if single line, use font line height
// else get height from flash textobject.textHeight
//
- if (args.height == null && typeof(args.$refs.height) != "function") {
+ if (args.height == null || args.height instanceof LzInitExpr) {
this.sizeToHeight = true;
// set autoSize to get text measured
textclip.autoSize = true;
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzFocus.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzFocus.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzFocus.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
/**
*
- * @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved.
+ * @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved.
* Use is subject to license terms.
*
* @affects lzbrowser
@@ -43,7 +43,7 @@
* unchanged from its last value.
* @type Boolean
*/
-LzFocus.focuswithkey = null;
+LzFocus.focuswithkey = false;
/** @access private */
LzFocus.__LZskipblur = false;
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzModeManager.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzModeManager.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/services/LzModeManager.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
/**
*
- * @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved.
+ * @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved.
* Use is subject to license terms.
*
* @affects lzmodemanager
@@ -69,11 +69,13 @@
* @param LzView view: The view intending to have modal iteraction
*/
LzModeManager.makeModal = function ( view ) {
- this.modeArray.push( view );
- if (this.onmode.ready) this.onmode.sendEvent( view );
- var f = LzFocus.getFocus();
- if ( f && ! f.childOf( view ) ){
- LzFocus.clearFocus();
+ if (this.modeArray.length == 0 || !this.hasMode( view )) {
+ this.modeArray.push( view );
+ if (this.onmode.ready) this.onmode.sendEvent( view );
+ var f = LzFocus.getFocus();
+ if ( f && ! f.childOf( view ) ){
+ LzFocus.clearFocus();
+ }
}
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloCanvas.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloCanvas.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloCanvas.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -477,12 +477,14 @@
* @devnote N.B.: replaces LzNode.__LZcallInit, so must be kept in sync with that
*/
function __LZcallInit ( an ){
+ // Canvas-only: Don't bother with preventSubInit
if (this.isinited) return;
//do this now, so that others know that they're too late
this.isinited = true;
this.__LZresolveReferences();
+ if (this.__LZstyleConstraints) this.__LZapplyStyleConstraints();
var sl = this.subnodes;
if (sl) {
var i = 0;
@@ -505,14 +507,22 @@
}
}
+ // Register in the source locator table, if debugging
+ if ($debug) {
+ if (this.__LZsourceLocation) {
+ LzNode.sourceLocatorTable[this.__LZsourceLocation] = this;
+ }
+ }
+
this.init();
+ // Canvas-only: Why? TODO: [2008-02-01 ptw] Ask max
this.sprite.init(true);
if (this.oninit.ready) this.oninit.sendEvent( this );
if (this.datapath && this.datapath.__LZApplyDataOnInit) {
this.datapath.__LZApplyDataOnInit();
}
- // Note canvas end
+ // Canvas-only: Note _canvas_ end, stop startup profiler
if ($profile) {
Profiler.event('done: #canvas');
// Default is to start the Profiler ASAP, and stop it in
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloView.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloView.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LaszloView.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -130,12 +130,14 @@
* @access public
*/
var onlastframe = LzDeclaredEvent;
-/** @lzxtype event
+/** Send when the view finishes loading media.
+ * @lzxtype event
* @access public
*/
var onload = LzDeclaredEvent;
-/** @lzxtype event
+/** Sends a percentage (0-1) reflecting the amount of a media file that's been downloaded.
+* @lzxtype event
* @access public
*/
var onloadperc = LzDeclaredEvent;
@@ -249,7 +251,8 @@
*/
var onunstretchedwidth = LzDeclaredEvent;
-/** @lzxtype event
+/** Sent when the view changes visibility (true/false)
+ * @lzxtype event
* @access public
*/
var onvisible = LzDeclaredEvent;
@@ -326,17 +329,17 @@
this.__makeSprite(args);
- if ( 'width' in args || (('$refs' in args) && ('width' in args.$refs) && args.$refs.width) ){
+ if ( 'width' in args ){
this.hassetwidth = true;
this.__LZcheckwidth = false;
}
- if ( 'height' in args || (('$refs' in args) && ('height' in args.$refs) && args.$refs.height) ){
+ if ( 'height' in args ){
this.hassetheight = true;
this.__LZcheckheight = false;
}
var r =null;
- if ('resource' in args && args['resource'] != null ){
+ if ('resource' in args && args['resource'] != null && (! (args.resource instanceof LzInitExpr)) ){
r = args.resource;
args.resource = LzNode._ignoreAttribute;
}
@@ -1544,31 +1547,56 @@
}
/**
- * Sets the <attribute>alignment</attribute> for the view to the given
- * value. The alignment is based on the size of this view as compared
- * to the size of the view's immediate parenbgRef.
- * @param String align : The <attribute>alignment</attribute> for the view. This is one of "left",
- * "center", and "right"
+ * Sets the <attribute>alignment</attribute> for the view to the
+ * given value. The alignment is based on the size of this view as
+ * compared to the size of the view's immediate parenbgRef.
+ *
+ * @param String align: The <attribute>alignment</attribute> for the
+ * view. This is one of "left", "center", and "right"
+ *
+ * @devnote TODO: [2008-02-07 ptw] Apparently we never supported
+ * 'onalign', should we?
*/
function setAlign ( align ){
- if ( align == "left" ) {
- this.releaseConstraint('x');
- this.setAttribute('x', 0);
- } else if ( align == "center" ){
- var f = function (){
- this.setAttribute( "x" , this.immediateparent.width /2
- - this.width /2);
+ if (this.align == align) return;
+ function map (align) {
+ switch (align) {
+ case "center": return "__LZalignCenter";
+ case "right": return "__LZalignRight";
+ case "left": return null;
+ default:
+ if ($debug) {
+ Debug.error("%w.%s(%w): Invalid argument. Valid choices are: 'left', 'center', or 'right'.",
+ this, arguments.callee, align);
}
- this.setPosConstraint( this.immediateparent , f , "width" );
- } else if ( align == "right" ){
- var f = function (){
- this.setAttribute( "x" , this.immediateparent.width
- - this.width );
- }
- this.setPosConstraint( this.immediateparent , f , "width" );
}
+ }
+ var from = map(this.align);
+ var to = map(align);
+ if (from != null) {
+ this.releaseConstraintMethod(from);
+ }
+ if (to != null) {
+ this.applyConstraintMethod(to, [this.immediateparent, "width", this, "width"]);
+ } else {
+ this.setAttribute('x', 0);
+ }
+ this.align = align;
}
+/** @access private */
+function __LZalignCenter () {
+ this.setAttribute( "x" , this.immediateparent.width /2
+ - this.width /2);
+}
+
+/** @access private */
+function __LZalignRight () {
+ this.setAttribute( "x" , this.immediateparent.width
+ - this.width);
+}
+
+
/**
* Sets the x offset
* @param Integer o: The x offset
@@ -1671,37 +1699,55 @@
}
/**
- * Sets the vertical alignment for the view to the given value. The alignment
- * is based on the height of this view as compared to the height of the view's
- * <attribute>immediateparent</attribute>.
- * @param String valign : The vertical alignment for the view. This is one of "top",
- * "middle", and "bottom"
+ * Sets the vertical alignment for the view to the given value. The
+ * alignment is based on the height of this view as compared to the
+ * height of the view's <attribute>immediateparent</attribute>.
+ *
+ * @param String valign: The vertical alignment for the view. This is
+ * one of "top", "middle", and "bottom"
+ *
+ * @devnote TODO: [2008-02-07 ptw] Apparently we never supported
+ * 'onvalign', should we?
*/
function setValign ( valign ){
- if ( valign == "top" ) {
- this.releaseConstraint('y');
- this.setAttribute('y', 0);
- } else if ( valign == "middle" ){
- var f = function (){
- this.setAttribute( "y" , this.immediateparent.height /2
- - this.height /2);
+ if (this.valign == valign) return;
+ function map (align) {
+ switch (align) {
+ case "middle": return "__LZvalignMiddle";
+ case "bottom": return "__LZvalignBottom";
+ case "top": return null;
+ default:
+ if ($debug) {
+ Debug.error("%w.%s(%w): Invalid argument. Valid choices are: 'top', 'middle', or 'bottom'.",
+ this, arguments.callee, valign);
}
- this.setPosConstraint( this.immediateparent , f ,"height" );
- } else if ( valign == "bottom" ){
- var f = function (){
- this.setAttribute( "y" , this.immediateparent.height
- - this.height);
- }
- this.setPosConstraint( this.immediateparent , f , "height" );
}
+ }
+ var from = map(this.valign);
+ var to = map(valign);
+ if (from != null) {
+ this.releaseConstraintMethod(from);
+ }
+ if (to != null) {
+ this.applyConstraintMethod(to, [this.immediateparent, "height", this, "height"]);
+ } else {
+ this.setAttribute('y', 0);
+ }
+ this.valign = valign;
}
/** @access private */
-function setPosConstraint ( v , f , widthorheight ){
- var d = [ v , widthorheight , this , widthorheight ];
- this.applyConstraint( widthorheight == "width" ? "x" : "y" , f , d );
+function __LZvalignMiddle () {
+ this.setAttribute( "y" , this.immediateparent.height /2
+ - this.height /2);
}
+/** @access private */
+function __LZvalignBottom () {
+ this.setAttribute( "y" , this.immediateparent.height
+ - this.height);
+}
+
/**
* Sets the color of the view (the view's resource and any subviews) to the
* the color given. This will completely override any color information in the
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzInputText.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzInputText.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzInputText.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -83,6 +83,15 @@
*/
var ontext = LzDeclaredEvent;
+/** @access private */
+var _onfocusDel = null;
+
+/** @access private */
+var _onblurDel = null;
+
+/** @access private */
+var _modemanagerDel = null;
+
/** @access private
* @modifiers override
*/
@@ -114,6 +123,28 @@
}
/**
+ * @access private
+ */
+function destroy (recursiveCall) {
+ if (this._onfocusDel) {
+ this._onfocusDel.unregisterAll();
+ this._onfocusDel = null;
+ }
+
+ if (this._onblurDel) {
+ this._onblurDel.unregisterAll();
+ this._onblurDel = null;
+ }
+
+ if (this._modemanagerDel) {
+ this._modemanagerDel.unregisterAll();
+ this._modemanagerDel = null;
+ }
+
+ super.destroy.apply(this, arguments);
+}
+
+/**
* Called to create the sprite object. May be overridden to use a specific
* version, e.g. LzTextSprite();
* @access private
Modified: openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzText.lzs
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzText.lzs 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/lfc/views/LzText.lzs 2008-02-26 20:32:17 UTC (rev 8108)
@@ -221,7 +221,7 @@
this.setMaxLength(args.maxlength);
}
- this.text = (!('text' in args) || args.text == null) ? "" : args.text;
+ this.text = (!('text' in args) || args.text == null || args.text instanceof LzInitExpr) ? "" : args.text;
if(this.maxlength != null && this.text.length > this.maxlength){
this.text = this.text.substring(0, this.maxlength);
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java 2008-02-26 20:32:17 UTC (rev 8108)
@@ -724,7 +724,9 @@
ComparisonMap attrs, ComparisonMap events,
ComparisonMap references, ComparisonMap paths,
ComparisonMap styles) {
- if (cattr.type == cattr.ATTRIBUTE || cattr.type == cattr.EVENT) {
+ if (cattr.type == cattr.ATTRIBUTE || cattr.type == cattr.EVENT ||
+ (cattr.type == cattr.REFERENCE) || (cattr.type == cattr.PATH) ||
+ (cattr.type == cattr.STYLE)) {
if (attrs.containsKey(name, caseSensitive)) {
env.warn(
/* (non-Javadoc)
@@ -736,26 +738,8 @@
,element);
}
attrs.put(name, cattr.value);
- } else if ((cattr.type == cattr.REFERENCE) || (cattr.type == cattr.PATH)) {
- if (references.containsKey(name, caseSensitive)) {
- env.warn(
-/* (non-Javadoc)
- * @i18n.test
- * @org-mes="redefining reference '" + p[0] + "' which has already been defined on " + p[1]
- */
- org.openlaszlo.i18n.LaszloMessages.getMessage(
- NodeModel.class.getName(),"051018-706", new Object[] {name, getMessageName()})
- ,element);
- }
- references.put(name, cattr.value);
- } else if (cattr.type == cattr.STYLE) {
- if (styles.containsKey(name, caseSensitive)) {
- env.warn(
- // TODO [2006-08-22 ptw] i18n this
- "duplicate $style binding for '" + name + "' in " + getMessageName(),
- element);
- }
- styles.put(name, cattr.value);
+ } else {
+ assert false: "Unknown cattr.type: " + cattr.type;
}
}
@@ -1357,40 +1341,47 @@
// Handle when cases
// N.B., $path and $style are not really when values, but
// there you go...
- if (when.equals(WHEN_PATH)) {
- return new CompiledAttribute(
- CompiledAttribute.PATH,
- srcloc + ScriptCompiler.quote(value) + "\n");
- } else if (when.equals(WHEN_STYLE)) {
- return new CompiledAttribute(
- CompiledAttribute.STYLE,
- srcloc + value + "\n");
- } else if (when.equals(WHEN_ONCE)) {
- return new CompiledAttribute(
- CompiledAttribute.REFERENCE,
- "function " +
- parent_name + "_" + name + "_once" +
- " () {" +
- "\n#pragma 'withThis'\n" +
- // Use this.setAttribute so that the compiler
- // will recognize it for inlining.
- "this.setAttribute(" +
- ScriptCompiler.quote(name) + " , " +
- "\n#beginAttribute\n" + srcloc + canonicalValue + "\n#endAttribute\n)}");
- } else if (when.equals(WHEN_ALWAYS)) {
- return new CompiledAttribute(
- CompiledAttribute.REFERENCE,
- "function " +
- parent_name + "_" + name + "_always" +
- " () {" +
- "\n#pragma 'constraintFunction'\n" +
- "\n#pragma 'withThis'\n" +
- // Use this.setAttribute so that the compiler
- // will recognize it for inlining.
- "this.setAttribute(" +
- ScriptCompiler.quote(name) + ", " +
- "\n#beginAttribute\n" + srcloc + canonicalValue +
- "\n#endAttribute\n)}");
+ if (when.equals(WHEN_PATH) || (when.equals(WHEN_STYLE)) || when.equals(WHEN_ONCE) || when.equals(WHEN_ALWAYS)) {
+ String installer = "setAttribute";
+ String body = "\n#beginAttribute\n" + srcloc + canonicalValue + "\n#endAttribute\n)";
+ String pragmas =
+ // Should be unnecessary for JS2 methods
+ "\n#pragma 'withThis'\n";
+ String kind = "LzOnceExpr";
+ if (when.equals(WHEN_ONCE)) {
+ // default
+ } else if (when.equals(WHEN_PATH)) {
+ installer = "dataBindAttribute";
+ } else if (when.equals(WHEN_STYLE)) {
+ // Styles are processed as constraints, although
+ // they are not compiled as constraints. Whether
+ // a style results in a constraint or not cannot
+ // be determined until the style property value is
+ // derived (at run time)
+ kind = "LzConstraintExpr";
+ installer = "__LZstyleBindAttribute";
+ } else if (when.equals(WHEN_ALWAYS)) {
+ pragmas =
+ "\n#pragma 'constraintFunction'\n" +
+ // Should be unnecessary for JS2 methods
+ "\n#pragma 'withThis'\n";
+ kind = "LzConstraintExpr";
+ } else {
+ assert false : "Unhandled when value: " + when;
+ }
+ String bindername = "$lzc$bind_" + name;
+ Function binder = new Function(
+ bindername,
+ "",
+ pragmas +
+ "this." + installer + "(" +
+ ScriptCompiler.quote(name) + "," +
+ body,
+ srcloc);
+ // Add the binder as a method
+ attrs.put(bindername, binder);
+ // Return an initExpr as the 'value' of the attribute
+ return new CompiledAttribute("new " + kind + "(" + ScriptCompiler.quote(bindername) +")");
} else if (when.equals(WHEN_IMMEDIATELY)) {
if ((CanvasCompiler.isElement(source) &&
("width".equals(name) || "height".equals(name))) ||
@@ -1675,10 +1666,10 @@
attrs.put("$delegates", delegateList);
}
if (!references.isEmpty()) {
- attrs.put("$refs", references);
+ assert false : "There should not be any $refs";
}
if (!paths.isEmpty()) {
- attrs.put("$paths", paths);
+ assert false : "There should not be any $paths";
}
if (datapath != null) {
attrs.put("$datapath", datapath.asMap());
@@ -1688,34 +1679,8 @@
// overridden by an inherited value from the class.
attrs.put("datapath", "LzNode._ignoreAttribute");
}
-
if (!styles.isEmpty()) {
- String styleMap;
- try {
- java.io.Writer writer = new java.io.StringWriter();
- ScriptCompiler.writeObject(styles, writer);
- styleMap = writer.toString();
- } catch (java.io.IOException e) {
- throw new ChainedException(e);
- }
- // NOTE: [2006-09-04 ptw] The $styles method _must_ create
- // a new map each time, because the sub-class or instance
- // may modify it.
- attrs.put("$styles",
- new
- Function(
- "",
- "",
- "\n#beginContent" +
- "\n#pragma 'withThis'" +
- "\n#pragma 'methodName=$styles'" +
- "\nvar map = super.$styles() || (new Object);" +
- "\nvar s = " + styleMap + ";" +
- "\nfor (var k in s) { map[k] = s[k]; };" +
- "\nreturn map;" +
- "\n#endContent" +
- "\n")
- );
+ assert false : "There should not be any $styles";
}
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/css/CSSHandler.java
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/css/CSSHandler.java 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/css/CSSHandler.java 2008-02-26 20:32:17 UTC (rev 8108)
@@ -3,7 +3,7 @@
* ****************************************************************************/
/* J_LZ_COPYRIGHT_BEGIN *******************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* J_LZ_COPYRIGHT_END *********************************************************/
@@ -298,11 +298,11 @@
switch (lu.getLexicalUnitType()) {
case LexicalUnit.SAC_ATTR:
- str = "function () { return this['" + processEscapes(lu.getStringValue()) + "']; }";
+ str = "new LzStyleAttr('" + processEscapes(lu.getStringValue()) + "')";
break;
case LexicalUnit.SAC_IDENT:
- str = "function () { return global['" + processEscapes(lu.getStringValue()) + "']; }";
+ str = "new LzStyleIdent('" + processEscapes(lu.getStringValue()) + "')";
break;
case LexicalUnit.SAC_STRING_VALUE:
Modified: openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/data/XMLGrabber.java
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/data/XMLGrabber.java 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/data/XMLGrabber.java 2008-02-26 20:32:17 UTC (rev 8108)
@@ -8,7 +8,7 @@
* ****************************************************************************/
/* J_LZ_COPYRIGHT_BEGIN *******************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* J_LZ_COPYRIGHT_END *********************************************************/
@@ -147,12 +147,13 @@
public void run() {
try {
writeXMLDataToOutputStream();
- pout.flush();
- pout.close();
- } catch (XmlPullParserException ex) {
- throw new RuntimeException(ex);
- } catch (IOException ex) {
- throw new RuntimeException(ex);
+ } catch (Exception e) {
+ } finally {
+ try {
+ pout.flush();
+ pout.close();
+ } catch (Exception e) {
+ }
}
}
Modified: openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/Function.java
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/Function.java 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/Function.java 2008-02-26 20:32:17 UTC (rev 8108)
@@ -8,7 +8,7 @@
package org.openlaszlo.sc;
public class Function {
- private String name;
+ public String name;
private final String args;
private final String body;
private final String sourceLocation;
@@ -43,6 +43,6 @@
}
/**
- * @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights
+ * @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights
* Reserved. Use is subject to license terms.
*/
Modified: openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/ReferenceCollector.java
===================================================================
--- openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/ReferenceCollector.java 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/sc/ReferenceCollector.java 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,7 +1,7 @@
/* -*- mode: Java; c-basic-offset: 2; -*- */
/* J_LZ_COPYRIGHT_BEGIN *******************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* J_LZ_COPYRIGHT_END *********************************************************/
@@ -64,8 +64,8 @@
return s;
}
- // f(args...) -> f["dependencies"](undefined, args...)
- // a.f(args...) -> f["dependencies"](a, args...)
+ // f(args...) -> f["dependencies"](this, undefined, args...)
+ // a.f(args...) -> f["dependencies"](this, a, args...)
private SimpleNode fsubst(SimpleNode node) {
SimpleNode fn = node.get(0);
SimpleNode callee;
Copied: openlaszlo/branches/devildog/WEB-INF/lps/server/src/org/openlaszlo/utils/DeploySOLODHTML.java (from rev 8100, openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/utils/DeploySOLODHTML.java)
Modified: openlaszlo/branches/devildog/demos/youtube/youtube.jsp
===================================================================
--- openlaszlo/branches/devildog/demos/youtube/youtube.jsp 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/demos/youtube/youtube.jsp 2008-02-26 20:32:17 UTC (rev 8108)
@@ -11,7 +11,7 @@
<%!
/* X_LZ_COPYRIGHT_BEGIN ****************************************************
- * Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+ * Copyright 2007, 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ******************************************************/
@@ -199,18 +199,22 @@
Document result)
{
String pageUrl =
- "http://www.YouTube.com/watch?v=";
- pageUrl += id;
+ "http://www.youtube.com/v/" + id;
- BufferedReader inputFile = null;
+ // Based on http://www.jeroenwijering.com/?thread=5484#msg50818
+ // Get Location header and parse strings from that...
+ String redirURL = null;
try {
URL u = new URL(pageUrl);
- inputFile =
- new BufferedReader(
- new InputStreamReader(
- u.openStream()));
+ HttpURLConnection redir = (java.net.HttpURLConnection)u.openConnection();
+ redir.setFollowRedirects(false);
+ redir.connect();
+ redirURL = redir.getHeaderField("Location");
+ if (redirURL == null) {
+ throw new Exception("No Location header found");
+ }
} catch (Exception e) {
- reportError("Could not load url.", result);
+ reportError("Could not load url " + redirURL + ": " + e.toString(), result);
return;
} // try
@@ -219,57 +223,34 @@
String videoId = "";
String tId = "";
- while (true) {
- String line = null;
- try {
- line = inputFile.readLine();
- } catch (IOException e) {
- line = null;
- }
-
- if (line == null) {
- break;
- }
-
- int start =
- line.indexOf("swfArgs");
- if (start == -1) {
- continue;
- } else {
- // Extract the video_id from the args line
- Pattern vidpat = Pattern.compile("video_id:'[\\w\\d]+'?");
- Pattern tpat = Pattern.compile("t:'[\\w\\d]+'?");
- Matcher vidmatcher = vidpat.matcher(line);
- Matcher tmatcher = tpat.matcher(line);
- if ( vidmatcher.find() ) {
- videoId = (line.substring(vidmatcher.start(), vidmatcher.end()));
- videoId = videoId.substring(10, videoId.length()-1);
- } else {
- reportError("video_id argument not found in HTML page", result);
- return;
- }
- if ( tmatcher.find() ) {
- tId = (line.substring(tmatcher.start(), tmatcher.end()));
- tId = tId.substring(3, tId.length()-1);
- } else {
- reportError("t argument not found in HTML page", result);
- return;
- }
- }
-
- String url =
- "http://www.youtube.com/get_video?video_id=" + videoId + "&t=" + tId;
-
- resultEl.setAttribute("id", videoId);
- resultEl.setAttribute("t", tId);
- resultEl.setAttribute("url", url);
- result.setRootElement(resultEl);
-
+ // Extract the video_id and t fields from
+ Pattern vidpat = Pattern.compile("video_id=[\\w\\d]+'?");
+ Pattern tpat = Pattern.compile("t=[\\w\\d\\-]+'?");
+ Matcher vidmatcher = vidpat.matcher(redirURL);
+ Matcher tmatcher = tpat.matcher(redirURL);
+ if ( vidmatcher.find() ) {
+ videoId = (redirURL.substring(vidmatcher.start(), vidmatcher.end()));
+ videoId = videoId.substring(9, videoId.length());
+ } else {
+ reportError("video_id argument not found in HTML page", result);
return;
}
+ if ( tmatcher.find() ) {
+ tId = (redirURL.substring(tmatcher.start(), tmatcher.end()));
+ tId = tId.substring(2, tId.length());
+ } else {
+ reportError("t argument not found in URL", result);
+ return;
+ }
- reportError("Could not find SWFObject at url " + pageUrl, result);
+ String url =
+ "http://www.youtube.com/get_video?video_id=" + videoId + "&t=" + tId;
+
+ resultEl.setAttribute("id", videoId);
+ resultEl.setAttribute("t", tId);
+ resultEl.setAttribute("url", url);
+ result.setRootElement(resultEl);
}
Modified: openlaszlo/branches/devildog/demos/youtube/youtube.lzx
===================================================================
--- openlaszlo/branches/devildog/demos/youtube/youtube.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/demos/youtube/youtube.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,5 +1,5 @@
<!-- X_LZ_COPYRIGHT_BEGIN ************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2007, 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ************************************************** -->
@@ -7,7 +7,6 @@
<canvas
width="100%"
height="100%"
- proxied="true"
>
<include href="av/videoutils.lzx"/>
Modified: openlaszlo/branches/devildog/docs/component-browser/common.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/common.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/common.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -67,9 +67,9 @@
<attribute name="textcolor" value="0x000000" type="number" />
<attribute name="textselectedcolor" value="0xFFFFFF" type="number" />
<method event="onclick">
- var file = (this.file != '' ? this.file : this.text + '.html');
+ var file = (this.file != '' ? this.file : 'lz.' + this.text + '.html');
var url = canvas.urlprefix + file;
- LzBrowser.loadURL('javascript: var wptr = window.open("' + url + '","laszlo-reference","resizable=1,width=1000,height=700,left=0,top=0,screenX=0,screenY=0,menubar,location,status,scrollbars,toolbar,address"); wptr.focus(); void(0);');
+ LzBrowser.loadURL('javascript: var wptr = window.open("' + url + '","laszlo_reference","resizable=1,width=1000,height=700,left=0,top=0,screenX=0,screenY=0,menubar,location,status,scrollbars,toolbar,address"); wptr.focus(); void(0);');
</method>
<method event="onmouseup">
setAttribute('fgcolor', this.texthilitecolor)
@@ -85,6 +85,6 @@
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/component-browser/formview.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/formview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/formview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -7,15 +7,15 @@
<view width="50%">
<border width="${parent.width}" height="50" cbgcolor="${canvas.lcdcolor}">
<view layout="axis: y" align="center">
- <textlink file="lz-checkbox.html">checkbox</textlink>
- <textlink file="lz-edittext.html">edittext</textlink>
- <textlink file="lz-combobox.html">combobox</textlink>
+ <textlink>checkbox</textlink>
+ <textlink>edittext</textlink>
+ <textlink>combobox</textlink>
</view>
</border>
</view>
<view width="50%" layout="axis: y">
<border width="${parent.width}" height="25" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-radiogroup.html">radiogroup</textlink>
+ <textlink>radiogroup</textlink>
</border>
<border width="${parent.width}" height="25" cbgcolor="${canvas.basecolor}">
<textlink>baselist</textlink>
@@ -29,7 +29,7 @@
<class name="baselistitemview" layout="axis: y">
<border width="${parent.width}" height="50" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-radio.html">radiobutton</textlink>
+ <textlink y="10">radiobutton</textlink>
</border>
<border width="${parent.width}" height="20" cbgcolor="${canvas.basecolor}">
<textlink>baselistitem</textlink>
@@ -48,7 +48,7 @@
<class name="basebuttonview" layout="axis: y">
<border width="${parent.width}" height="70" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-button.html">button</textlink>
+ <textlink y="10">button</textlink>
</border>
<border width="${parent.width}" height="20" cbgcolor="${canvas.basecolor}">
<view align="center" layout="axis: x">
@@ -69,7 +69,7 @@
<class name="baseformview" layout="axis: y">
<border width="${parent.width}" height="70" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-form.html">form</textlink>
+ <textlink y="10">form</textlink>
</border>
<border width="${parent.width}" height="40" cbgcolor="${canvas.basecolor}">
<textlink y="10">baseform</textlink>
@@ -82,7 +82,7 @@
<baseformview width="20%"/>
</view>
<border width="${parent.width}" height="20" cbgcolor="${canvas.lfccolor}">
- <textlink>view</textlink>
+ <textlink file="LzView.html">view</textlink>
</border>
</class>
@@ -94,12 +94,12 @@
</border>
</view>
<border width="${parent.width}" height="20" cbgcolor="${canvas.lfccolor}">
- <textlink>node</textlink>
+ <textlink file="LzNode.html">node</textlink>
</border>
</class>
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/component-browser/listview.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/listview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/listview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -6,19 +6,19 @@
<view width="${parent.width}" layout="axis: x">
<border width="50%" height="40" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-floatinglist.html">floatinglist</textlink>
+ <textlink y="10">floatinglist</textlink>
</border>
<border width="50%" height="40" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-textlistitem.html">textlistitem</textlink>
+ <textlink y="10">textlistitem</textlink>
</border>
</view>
<view width="${parent.width}" layout="axis: x">
<border width="50%" height="40" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-list.html">list</textlink>
+ <textlink y="10">list</textlink>
</border>
<border width="50%" height="40" cbgcolor="${canvas.lcicolor}">
- <textlink y="10" file="lz-listitem.html">listitem</textlink>
+ <textlink y="10">listitem</textlink>
</border>
</view>
@@ -34,6 +34,6 @@
</class>
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/component-browser/menuview.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/menuview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/menuview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -4,13 +4,13 @@
<class name="menuitemview" layout="axis: y">
<border width="100%" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-menuitem.html">menuitem</textlink>
+ <textlink>menuitem</textlink>
</border>
<border width="100%" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-textlistitem.html">textlistitem</textlink>
+ <textlink>textlistitem</textlink>
</border>
<border width="100%" height="20" cbgcolor="${canvas.lcicolor}">
- <textlink file="lz-listitem.html">listitem</textlink>
+ <textlink>listitem</textlink>
</border>
<border width="100%" height="20" cbgcolor="${canvas.basecolor}">
<textlink>baselistitem</textlink>
@@ -24,9 +24,9 @@
<border width="50%" height="100" cbgcolor="${canvas.lcdcolor}">
<view width="100%" y="10">
<simplelayout axis="y" />
- <textlink file="lz-menu.html">menu</textlink>
- <textlink file="lz-menubar.html">menubar</textlink>
- <textlink file="lz-menuseparator.html">menuseparator</textlink>
+ <textlink>menu</textlink>
+ <textlink>menubar</textlink>
+ <textlink>menuseparator</textlink>
</view>
</border>
<menuitemview width="50%" />
@@ -41,6 +41,6 @@
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/component-browser/scrollbarview.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/scrollbarview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/scrollbarview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -4,7 +4,7 @@
<class name="scrollbarview" layout="axis: y">
<border width="100%" height="40" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-scrollbar.html">scrollbar</textlink>
+ <textlink y="10">scrollbar</textlink>
</border>
<border width="100%" height="40" cbgcolor="${canvas.basecolor}">
<textlink y="10">basescrollbar</textlink>
@@ -16,6 +16,6 @@
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/component-browser/tabsview.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/tabsview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/tabsview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -5,10 +5,10 @@
<class name="tabsbarview1" layout="axis: y">
<view width="50%" layout="axis: x">
<border width="${parent.width}" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-tabsbar.html">tabsbar</textlink>
+ <textlink>tabsbar</textlink>
</border>
<border width="${parent.width}" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-tabsbar.html">tab</textlink>
+ <textlink>tab</textlink>
</border>
</view>
<view width="50%" layout="axis: x">
@@ -54,7 +54,7 @@
<class name="tabsview1" layout="axis: x">
<view width="25%" layout="axis: y">
<border width="${parent.width}" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-tabs.html">tabs</textlink>
+ <textlink>tabs</textlink>
</border>
<border width="${parent.width}" height="80" cbgcolor="${canvas.basecolor}">
<textlink>basetabs</textlink>
@@ -62,7 +62,7 @@
</view>
<view width="25%" layout="axis: y">
<border width="${parent.width}" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-tabpane.html">tabpane</textlink>
+ <textlink>tabpane</textlink>
</border>
<border width="${parent.width}" height="80" cbgcolor="${canvas.basecolor}">
<textlink>basetabpane</textlink>
@@ -81,6 +81,6 @@
</class>
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/component-browser/treeview.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/treeview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/treeview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -4,7 +4,7 @@
<class name="treeview" layout="axis: y">
<border width="100%" height="40" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-tree.html">tree</textlink>
+ <textlink y="10">tree</textlink>
</border>
<border width="100%" height="40" cbgcolor="${canvas.basecolor}">
<textlink y="10">basetree</textlink>
@@ -16,6 +16,6 @@
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/component-browser/windowview.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/component-browser/windowview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/component-browser/windowview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -6,18 +6,18 @@
<view width="100%" layout="axis: x">
<view width="50%" layout="axis: y">
<border width="100%" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-alert.html">alert</textlink>
+ <textlink>alert</textlink>
</border>
<border width="100%" height="20" cbgcolor="${canvas.lcdcolor}">
- <textlink file="lz-modaldialog.html">modaldialog</textlink>
+ <textlink>modaldialog</textlink>
</border>
</view>
<border width="50%" height="40" cbgcolor="${canvas.lcdcolor}">
- <textlink y="10" file="lz-window.html">window</textlink>
+ <textlink y="10">window</textlink>
</border>
</view>
<border width="100%" height="20" cbgcolor="${canvas.lcicolor}">
- <textlink file="lz-windowpanel.html">windowpanel</textlink>
+ <textlink>windowpanel</textlink>
</border>
<border width="100%" height="20" cbgcolor="${canvas.basecolor}">
<textlink>basewindow</textlink>
@@ -29,6 +29,6 @@
</library>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/deployers/logging.dbk
===================================================================
--- openlaszlo/branches/devildog/docs/src/deployers/logging.dbk 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/deployers/logging.dbk 2008-02-26 20:32:17 UTC (rev 8108)
@@ -39,8 +39,8 @@
The Jakarta Tomcat 5.0 container, by default, keeps its logs
in <literal>$TOMCAT_HOME/logs</literal>. Depending on how tomcat was started, it may also display some of its
logs in a console or terminal window as well.
-The <ulink url="http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/index.html">Tomcat 5.0 configuration guide</ulink>
-has details on its <ulink url="http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/logger.html">Logger</ulink> configuration.
+See the <ulink url="http://tomcat.apache.org/">Tomcat web site</ulink>
+for more information.
In general, see the documentation on your container for details on how to locate and configure these logs.
</para>
Modified: openlaszlo/branches/devildog/docs/src/developers/constraints.dbk
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/constraints.dbk 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/constraints.dbk 2008-02-26 20:32:17 UTC (rev 8108)
@@ -15,8 +15,8 @@
as well.</para>
<para/></section><section><title>Syntax for creating and removing constraints</title>
-<para>Constraints may be created in either of two ways:</para>
-<itemizedlist spacing="compact"><listitem><para>in a tag, using the ${} syntax to tie the value of one attribute to that of another</para></listitem><listitem><para>in script, using the <indexterm><primary><literal>applyConstraint()</literal></primary></indexterm><methodname>applyConstraint()</methodname> method</para></listitem><listitem><para>in script, using delegates</para></listitem></itemizedlist>
+<para>Constraints may be created as follows:</para>
+<itemizedlist spacing="compact"><listitem><para>in a tag, using the ${} syntax to tie the value of one attribute to that of another</para></listitem><listitem><para>in script, using the <indexterm><primary><literal>applyConstraintMethod()</literal></primary></indexterm><methodname>applyConstraintMethod()</methodname> method</para></listitem><listitem><para>in script, using delegates</para></listitem></itemizedlist>
<para>These are described in turn below.</para>
<para>There is no method for removing constraints. Therefore if you have a constraint that you wish to sometimes be in force and other times not be in force, you should use <indexterm><primary>state</primary></indexterm><sgmltag class="element"><state></sgmltag><remark role="fixme">[unknown tag]</remark>
<!--unknown tag: state-->
@@ -38,20 +38,20 @@
<para role="fixme"><remark role="fixme"><emphasis role="para-label">FIXME: </emphasis> note the lousy explanation below </remark></para>
-<para>The following example uses the <indexterm><primary><literal>applyConstraint()</literal></primary></indexterm><methodname>applyConstraint()</methodname> method inherited from <indexterm><primary>LzNode</primary></indexterm><classname>LzNode</classname> in order to create a constraint at
+<para>The following example uses the <indexterm><primary><literal>applyConstraintMethod()</literal></primary></indexterm><methodname>applyConstraintMethod()</methodname> method inherited from <indexterm><primary>LzNode</primary></indexterm><classname>LzNode</classname> in order to create a constraint at
runtime. You'll see that the <literal>setConstraint</literal> method has the same effect as the simple expression <literal>y=${m.y}</literal>
</para>
<example role="live-example">
- <title>Runtime constraintes with applyConstraint</title>
+ <title>Runtime constraintes with applyConstraintMethod</title>
<programlisting language="lzx">
<textobject><textdata fileref="programs/constraints-$1.lzx"/></textobject>
</programlisting>
</example>
-<para><literal>f</literal> is a callback function that is required for the <indexterm><primary><literal>applyConstraint()</literal></primary></indexterm><methodname>applyConstraint()</methodname> method. <varname>d</varname>
+<para><literal>f</literal> is a callback function that is required for the <indexterm><primary><literal>applyConstraintMethod()</literal></primary></indexterm><methodname>applyConstraintMethod()</methodname> method. <varname>d</varname>
is an array consisting of a pointer to a reference node, and the attribute to bind to.</para>
<para/></section><section><title>Delegates and constraints</title>
<para>Laszlo applications can use something called a <glossterm>delegate</glossterm> in script to associate a
Modified: openlaszlo/branches/devildog/docs/src/developers/index.dbk
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/index.dbk 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/index.dbk 2008-02-26 20:32:17 UTC (rev 8108)
@@ -167,9 +167,9 @@
<xi:fallback><para>Missing: Docbook Local Style Guide</para></xi:fallback>
</xi:include>
- <xi:include href="docbook-code.dbk">
+<!-- <xi:include href="docbook-code.dbk">
<xi:fallback><para>Missing: Docbook Code Comment Style Guide</para></xi:fallback>
- </xi:include>
+ </xi:include>-->
<xi:include href="js2doc-ref.dbk">
<xi:fallback><para>Missing: JS2Doc Reference</para></xi:fallback>
Modified: openlaszlo/branches/devildog/docs/src/developers/programs/constraints-$1.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/programs/constraints-$1.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/programs/constraints-$1.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,22 +1,18 @@
-
-<canvas>
- <view x="250" width="20" height="20" bgcolor="red"
- y="${m.y}"/>
-
- <view x="300" width="20" height="20" bgcolor="blue">
- <handler name="oninit">
- var f = function () {
- this.setAttribute("y", m.y);
- }
- var d = [m, "y"];
- this.applyConstraint("y", f, d);
- </handler>
- </view>
-
- <window id="m" x="10" title="Drag me" width="160" height="20"/>
+<canvas>
+ <view x="250" width="20" height="20" bgcolor="red" y="${m.y}"/>
+ <view x="300" width="20" height="20" bgcolor="blue">
+ <handler name="oninit">
+ var d = [m, "y"];
+ this.applyConstraintMethod("myConstraintMethod", d);
+ </handler>
+ <method name="myConstraintMethod" >
+ this.setAttribute("y", m.y);
+ </method>
+ </view>
+ <window id="m" x="10" title="Drag me" width="160" height="20"/>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/drawview-intro.dbk
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/drawview-intro.dbk 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/drawview-intro.dbk 2008-02-26 20:32:17 UTC (rev 8108)
@@ -30,20 +30,11 @@
<textobject><textdata fileref="programs/drawview-intro-$1.lzx"/></textobject>
</programlisting>
</example>
-<?example role="live-example"><title>view and drawview</title><programlisting role="lzx-embednew"><filename>drawview-intro-$1.lzx</filename><parameter/><code>
- <canvas height="75" proxied="false">
- <simplelayout spacing="5" axis="x"/>
- <view height="50" width="50" bgcolor="red"/>
- <drawview height="50" width="50" bgcolor="blue"/>
- </canvas>
-</code></programlisting><programlisting>
- <canvas height="75" proxied="false">
- <simplelayout spacing="5" axis="x"/>
- <view height="50" width="50" bgcolor="red"/>
- <drawview height="50" width="50" bgcolor="blue"/>
- </canvas>
-</programlisting><?lzx-edit programs/drawview-intro-$1.lzx></example?>
+
<para>
+<note>
+ <para>Previously, <literal><drawview></literal> auto-sized when OpenLaszlo only supported Flash. To make this work in DHTML and Flash consistently, <literal>size</literal> must now be explicitly set, because DHTML doesn't support autosize. <literal>size</literal> can be changed at runtime, but it may clear the canvas, in which case a new <literal>oncontext</literal> event is sent to signal a redraw is needed. <literal>size</literal> need not be a fixed value; it can also be set to percentage values or constraint values.</para>
+</note>
There are no additional tag attributes in the <literal>drawview</literal> class beyond those of <literal>view</literal>. However, <literal>drawview</literal> has four attributes in addition to those it inherits:
</para>
<itemizedlist spacing="compact"><listitem><para>fillStyle</para></listitem><listitem><para>globalAlpha</para></listitem><listitem><para>lineWidth</para></listitem><listitem><para>strokeStyle</para></listitem></itemizedlist>
@@ -61,7 +52,7 @@
For example, this code produces nothing visible:</para>
<example role="live-example"><title>invisble drawing</title><programlisting>
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="50" width="50">
<handler name="oninit">
this.moveTo(100,100)
this.lineTo(200,100)
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$10.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$10.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$10.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="200" width="200">
<handler name="oninit">
this.moveTo(40,40)
this.lineTo(80,40)
@@ -16,6 +16,6 @@
</drawview>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$3.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$3.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$3.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,5 +1,5 @@
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="200" width="200">
<handler name="oninit">
this.moveTo(100,100);
this.lineTo(200,100);
@@ -9,6 +9,6 @@
</drawview>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$4.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$4.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$4.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="200" width="200">
<handler name="oninit">
this.moveTo(100,100);
this.lineTo(200,100);
@@ -11,6 +11,6 @@
</drawview>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$5.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$5.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$5.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="200" width="200">
<handler name="oninit">
this.moveTo(100,100);
this.lineTo(200,100);
@@ -13,6 +13,6 @@
</drawview>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$6.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$6.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$6.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="200" width="200">
<handler name="oninit">
this.moveTo(100,100);
this.lineTo(200,100);
@@ -13,6 +13,6 @@
</drawview>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$7.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$7.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$7.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="200" width="200">
<handler name="oninit">
this.moveTo(100,100);
this.lineTo(200,100);
@@ -22,6 +22,6 @@
</drawview>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$9.lzx
===================================================================
--- openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$9.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/docs/src/developers/tutorials/programs/drawview-intro-$9.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
<canvas height="200" proxied="false">
- <drawview>
+ <drawview height="200" width="200">
<handler name="oninit">
this.moveTo(100,100);
this.lineTo(200,100);
@@ -17,6 +17,6 @@
</drawview>
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Modified: openlaszlo/branches/devildog/laszlo-explorer/explore-nav.lzx
===================================================================
--- openlaszlo/branches/devildog/laszlo-explorer/explore-nav.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/laszlo-explorer/explore-nav.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -148,7 +148,7 @@
</method>
<method name="openSequence" args="seq">
- if (seq[0] == this.name) {
+ if (seq[0] == this.title) {
// first, open self
this.header.open();
if (seq.length > 1) {
@@ -181,7 +181,7 @@
</simplelayout>
</view>
<itembutton name="header" level="$once{classroot.level}"
- text="$once{classroot.name}" width="${classroot.width}"/>
+ text="$once{classroot.title}" width="${classroot.width}"/>
</class>
<!-- ItemButton class the visible portion of navButtons -->
@@ -265,7 +265,7 @@
} else {
if (title ==null){
- title = classroot.name;
+ title = classroot.title;
}
LzBrowser.loadURL('content.jsp?src=' + src + '&tag=' + tagline +
'&title=' + title + '&action=' + action + '&lzr=' + runtime,
@@ -312,7 +312,7 @@
</class>
<class name="navbutton" extends="menubutton" width="${immediateparent.width}">
- <attribute name="name" value="$path{'@name'}"/>
+ <attribute name="title" value="$path{'@name'}"/>
</class>
<!-- APPLICATION -->
@@ -357,7 +357,7 @@
</canvas>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
+* Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
<!-- @LZX_VERSION@ -->
Modified: openlaszlo/branches/devildog/lps/components/extensions/drawview.lzx
===================================================================
--- openlaszlo/branches/devildog/lps/components/extensions/drawview.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/lps/components/extensions/drawview.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,6 +1,6 @@
<!---
- @copyright Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved.
+ @copyright Copyright 2001-2008 Laszlo Systems, Inc. All Rights Reserved.
Use is subject to license terms.
@access public
@@ -564,9 +564,6 @@
var oncontext = LzDeclaredEvent;
function construct(parent,args) {
- args['width'] = args['width'] > -1 ? args.width : null;
- args['height'] = args['height'] > -1 ? args.height : null;
- args['clip'] = args['clip'] == true ? args.clip : null;
super.construct(parent, args);
this.context = this.getMCRef();
this.context.cacheAsBitmap = args['cachebitmap'] != null ? args['cachebitmap'] : this.cachebitmap;
Modified: openlaszlo/branches/devildog/lps/components/lzunit/lzunit.lzx
===================================================================
--- openlaszlo/branches/devildog/lps/components/lzunit/lzunit.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/lps/components/lzunit/lzunit.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -342,9 +342,17 @@
Debug.debug('result is null on fail call: "' + message + '"');
}
if ($debug) {
+ var file = null, line = null;
+ // Find the failing test, which is four frames up
+ var bt = Debug.backtrace(4);
+ if (bt != null) {
+ var sf = bt[bt.length - 1];
+ file = sf.filename();
+ line = sf.lineno();
+ }
Debug.freshLine();
// create an error, which will include a backtrace, if applicable
- Debug.__write(new LzError(null, null, message));
+ Debug.__write(new LzError(file, line, message));
}
</method>
Copied: openlaszlo/branches/devildog/test/performance/typeof-instance-of.lzx (from rev 8100, openlaszlo/trunk/test/performance/typeof-instance-of.lzx)
Modified: openlaszlo/branches/devildog/test/style/constraints/subclassing.lzx
===================================================================
--- openlaszlo/branches/devildog/test/style/constraints/subclassing.lzx 2008-02-26 19:26:26 UTC (rev 8107)
+++ openlaszlo/branches/devildog/test/style/constraints/subclassing.lzx 2008-02-26 20:32:17 UTC (rev 8108)
@@ -1,4 +1,4 @@
-<!-- Copyright 2007 Laszlo Systems -->
+<!-- Copyright 2007, 2008 Laszlo Systems -->
<library>
<!-- [bshine 10.06.2006] This test validates (LPP-2894) The
@@ -15,8 +15,6 @@
}
</stylesheet>
- <simplelayout axis="y" spacing="5" />
-
<!-- This class has a bgcolor defined by a style and an inner view
whose bgcolor is defined by a style that references an
attribute of the view that is constrained to an attribute of
@@ -46,41 +44,45 @@
</class>
<class name="lpp_4451" extends="happystyledbox" width="${parent.width/2}" />
+ <class name="lpp_4451_inverse" extends="happystyledbox" width="$style{'stylewidth'}" />
- <happystyledbox id="sb0" />
+ <view id="testing" width="400" layout="axis: y; spacing: 5">
- <!-- This box is maroon with an inner view of red -->
- <happystyledbox id="sb1" bgcolor="maroon" innerColor="red" />
+ <happystyledbox id="sb0" />
- <subclassbox id="sb2" />
- <otherlassbox id="sb3" width="$style{'stylewidth'}"/>
+ <!-- This box is maroon with an inner view of red -->
+ <happystyledbox id="sb1" bgcolor="maroon" innerColor="red" />
- <subclassbox id="sb4" />
+ <subclassbox id="sb2" />
+ <otherlassbox id="sb3" width="$style{'stylewidth'}"/>
- <lpp_4451 id="sb5" width="$style{'stylewidth'}"/>
+ <subclassbox id="sb4" />
+ <lpp_4451 id="sb5" width="$style{'stylewidth'}"/>
+ <lpp_4451_inverse id="sb6" width="${parent.width/2}"/>
+ </view>
<class name="CSSSubclassingTestCase" extends="TestCase" >
<method name="testClassConstraint">
- this.assertEquals(purple, sb0.getAttribute("bgcolor"));
- this.assertEquals(fuchsia, sb0.inner.getAttribute("bgcolor"));
+ this.assertEquals(purple, sb0.getAttribute("bgcolor"), "Class CSS value");
+ this.assertEquals(fuchsia, sb0.inner.getAttribute("bgcolor"), "Class CSS attr");
</method>
<method name="testInstanceOverrideConstraint">
- this.assertEquals(maroon, sb1.getAttribute("bgcolor"));
- this.assertEquals(red, sb1.inner.getAttribute("bgcolor"));
+ this.assertEquals(maroon, sb1.getAttribute("bgcolor"), "Instance override CSS value");
+ this.assertEquals(red, sb1.inner.getAttribute("bgcolor"), "Instance override CSS attr");
</method>
<method name="testSubclassOverrideConstraint">
<![CDATA[
- this.assertEquals("150", sb2.getAttribute("width"));
- this.assertEquals(navy, sb2.getAttribute("bgcolor")); // fails! [2007.05.28 bshine]
- this.assertEquals(blue, sb2.inner.getAttribute("bgcolor"));
- this.assertEquals(green, sb3.getAttribute("bgcolor")); // fails! [2007.05.28 bshine]
- this.assertEquals(999, sb3.getAttribute("width"));
- this.assertEquals(lime, sb3.inner.getAttribute("bgcolor"));
- // FIXME: [2007-08-08 ptw] (LPP-4451) Uncomment when fixed
- // this.assertEquals(999, sb5.width, "LPP-4451");
+ this.assertEquals("150", sb2.getAttribute("width"), "Subclass override attribute");
+ this.assertEquals(navy, sb2.getAttribute("bgcolor"), "Subclass override CSS value");
+ this.assertEquals(blue, sb2.inner.getAttribute("bgcolor"), "Subclass override CSS attr");
+ this.assertEquals(green, sb3.getAttribute("bgcolor"), "Subclass override CSS value");
+ this.assertEquals(999, sb3.getAttribute("width"), "Subclass CSS value override");
+ this.assertEquals(lime, sb3.inner.getAttribute("bgcolor"), "Subclass override CSS attr attribute");
+ this.assertEquals(999, sb5.width, "LPP-4451");
+ this.assertEquals(testing.width/2, sb6.width, "LPP-4451-inverse");
]]>
</method>
</class>
More information about the Laszlo-checkins
mailing list