Change 20100410-hqm-e by [email protected] on 2010-04-10 19:31:18 EDT
in /Users/hqm/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: UPDATED ^2 BY MAX: make autosizing inputtext recompute it's height
properly when user types
New Features:
Bugs Fixed: LPP-8591 Something mysterious about scrollHeight property in DHTML,
LPP-7832 - Kernel API getTextHeight should be renamed getLineHeight to avoid
confusion
Technical Reviewer: hminsky
QA Reviewer: ptw
Doc Reviewer: (pending)
Documentation:
Release Notes:
Overview: Updated to address Tucker's comments:
1) In CSS, you don't need to specify units for `0`: `0px` is superfluous (In
LzSprite.js). So is `"0px"`, and `0+"px"`! (In LzIputTextSprite.js)
I updated all 0px values to 0 and changed LzKernelUtils.CSSDimension() to
return 0 as-is.
2) I think a better idiom for (m == true) is (!!m). My 2p.
Changed.
3) I guess you are saying that it is more efficient to store the tagname as a
sprite property than to ask for it back from the DOM? Perhaps a comment to
that effect so future generations do not wonder?
I added a comment.
Issues:
1) Why do we need this {setWidth,setHeight}/skipupdate flag? Is there ever a
time that the generic LFC calls setHeight that it would need a callback from
the kernel to actually install the height? It would seem better to me to fix
up the sprite implementation to not use the LFC->kernel API internally when it
is trying to send an update the other way (which is what the old `force` flag
was for).
Yeah, you're right. I managed to eliminate or rationalize all internal sprit
e.setWidth/Height() calls, since _updateSize() was updating that with
definitive values anyway.
I made sure LzText.getTextfieldHeight/TextWidth() notified the kernel to bypass
text initialization options.
2) I don't understand the change in LzTextSprite/__fontloaded from setting the
height to the height of the contents to setting it to just 1-line high. Why?
Good catch! That is what it was doing before because getTextHeight() ->
getLineHeight().
3) I realize this is not part of your change, but I am concerned about the
TODO on line 529 ff of LzTextSprite. It seems we _have_ implemented using the
correct tag for the measurement node, but we _have_not_ made that tag part of
the cache key (the cache key is hardwired to 'div'). Isn't that going to screw
up measurement if we happen to have a <text> and <inputtext> with the same
content? Shouldn't the `'div'` on line 533 be `this.scrolldivtagname` instead?
Yes, this has been fixed. Perhaps we'd get better measurements if we used
actual <input or <textarea objects?
4) The comment at LaszloView#2440 is garbled. Same at LaszloView#2473
Fixed.
Otherwise, the same:
I tweaked this change a bit in order to make it more efficient. I also renamed
some args. Now test/lztest/lztest-textheight.lzx lists all expected warnings,
and things look more visually consistent across dhtml, swf8 and swf10. And of
course, variable-height inputtexts resize when you type in them. And, I found
and fixed a text measurement bug in IE where the first time a string was
measured, it could be inaccurate.
+ make autosizing inputtext recompute it's height properly when user types
Details:
WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js: 0px -> 0, store scrolldivtagname
for faster lookups, remove unneeded calls to setWidth/Height() since
__updatefieldsize covers them, optimize style measurement key lookups, move
text measurement to LzFontManager, fix setWidth() to account for text-indent
per Andre's comments, skip unneeded updates to scroll div in setHeight(),
LzFontManager - Move text measurement from LzTextSprite
WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as: Rename getTextHeight ->
getLineHeight. Add new 'force' arg to getTextfieldHeight (unused in this
implementation, but for compatibiltiy
with DHTML)
WEB-INF/lps/lfc/kernel/swf9/LzTextSprite.as: Rename getTextHeight ->
getLineHeight. Add new 'force' arg to getTextfieldHeight (unused in this
implementation, but for compatibiltiy with DHTML)
WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js: Added quirk for setting height to
zero in order to get proper scroll height in IE and Safari (see __textEvent()
in dhtml/LzInputTextSprite.js), 0px -> 0, default lzswfinputtextmultiline CSS
to whiteSpace: 'pre-wrap', use LzFontManager.__createContainerDiv() to create
font measurement container.
WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js:When a multiline field is
supposed to be autosize it's height, update the position for IE and Safari
quirk, when user types into the field. Track scrolldivtagname, rely on
view.inputtextevent to call __updatefieldsize(), 0px -> 0.
LzKernelUtils: Return 0 immediately in CSSDimension()
WEB-INF/lps/lfc/views/LzInputText.lzs: When 'onchange' event is received from
kernel, multiline field should update it's height to the measured text height,
using 'updateHeight' instead of setHeight (so it doesn't turn it into a fixed
height field)
WEB-INF/lps/lfc/views/LzText.lzs: Autosizing text fields should call
updateHeight, not setHeight, when updating their height, so they don't turn
into fixed height fields. Call sprite APIs directly for text size information,
and pass flag for getTextHeight() so sprites know when the call is from user
code.
WEB-INF/lps/lfc/views/LaszloView.lzs: updateHeight and updateWidth methods
update the memo cache vars
WEB-INF/lps/server/src/org/openlaszlo/sc/CommonGenerator.java: fix for an
unrelated bug that was picked up by findBugs analysis
WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java: need to tell the
JDOM XML parser to preserve newlines in text.
test/lztest/lztest-textheight.lzx: Updated warnings to reflect current state in
different runtimes
Tests: See LPP-8591
Look at text and image sizing in:
demos/lzpix/app.lzx swf,swf10,dhtml
calendar demo
amazon demo
test/lztest/lztest-textheight.lzx
test/smoke/smokecheck
Files:
M test/lztest/lztest-textheight.lzx
M WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as
M WEB-INF/lps/lfc/kernel/dhtml/LzFontManager.js
M WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
M WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js
M WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js
M WEB-INF/lps/lfc/kernel/swf9/LzTextSprite.as
M WEB-INF/lps/lfc/kernel/LzKernelUtils.lzs
M WEB-INF/lps/lfc/views/LzInputText.lzs
M WEB-INF/lps/lfc/views/LzText.lzs
M WEB-INF/lps/lfc/views/LaszloView.lzs
M WEB-INF/lps/server/src/org/openlaszlo/sc/CommonGenerator.java
M WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java
Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20100410-hqm-e.tar