Change 20100921-maxcarlson-L by maxcarl...@friendly on 2010-09-21 13:14:17 PDT
    in /Users/maxcarlson/openlaszlo/trunk2
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: UPDATED: Simplify mouse events

Bugs Fixed: LPP-8470 - Simplify IE 7-specific mousehandling logic

Technical Reviewer: ptw
QA Reviewer: hminsky

Overview: This change uses a single (canvas) div for handling mouse events, 
instead of registering on all click divs.  A lot of simplification falls out of 
this.

Details: Updated to address Tucker's comments:
> Questions:
> 
> 1) LzInputTextSprite#492, I don't see the point of this guarding `if`, since 
> it appears to be guarding individual tests that simply repeat it?

It's there to prevent the mouse events from being forwarded, see the return at 
the end of the block.  I improved the comment.

> 2) LzInputTextSprite#502 says "this is Firefox specific code".  Shouldn't it 
> be in a quirk then?  Maybe the comment is just mis-placed?

Improved the comment.

> 3) LzInputTextSprite#551 seems like a redundant `if`?  Ditto at 556?

Fixed.

> 4) LzInputTextSprite#708 `LzSprite.prototype.setClickable.apply(this, 
> [true]);` could be changed to `call` and not cost the array, or use your fake 
> super-call technique.  Of course, it really should be calling 
> LzTextSprite.prototype, since that is its superclass, right?

Fixed.

> 5) LzInputTextSprite#1101 Yow!

Indeed.  Whoopsie!

> 6) LzMouseKernel#28, LzSprite#212 I'm concerned using . instead of [' could 
> lead to warnings in debug mode.

I disagree.  Either way is valid.  Also, I don't think we do that kind of 
testing in the generated LFC, for performance reasons...  And we only really 
warn for null properties for swf8 user code, right?

> 7) LzMouseKernel#137, this technique will call the method with an empty 
> context, is that going to work?  attach/removeEventHandler do not use `this`? 
>  If so, perhaps add a comment?

I added a comment.

> 8) LzMouseKernel#1531 Do we really still support FF 1.5?

Probably not, but I was worried that removing this would have side effects in 
other browsers.  I added a TODO to remember to look later.

> 9) LzMouseKernel#1691, LzMouseKernel#1715 Maybe `return false`, just to 
> document that this is a function with a boolean result?

Done.

> 10) General question about LzMouseKernel.__clickDispatcher:  Does it still 
> make sense to talk about bubbling here?  I thought this handler is now on the 
> root sprite div, so where is the event going to bubble to?

I think it does make sense.  I added a comment.

> Otherwise technically approved, to the best of my ability.  This is tricky 
> stuff!

Otherwise the same:

LzSprite - Use LzSprite.__setClickable() to register for all mouse events at 
root sprite init time.  Move quirks.prevent_selection clause from global scope 
of LzInputTextSprite.  Remove __setClickable() calls, since individual 
clickdivs are no longer made clickable.  Unify (almost) all mouse event 
handling logic in LzSprite.__clickDispatcher(), simplify __mouseEvent().  
Improve __findParents() to return the first item found, use in __isMouseOver(). 
 __globalmouseup() is simplified.  Clean up setWidth/Height() and destroy() 
logic.  Test for quirks.fix_clickable  in setCursor().

LzTextSprite - Update setSelectable() to use explicit handler for allowing 
selection, to prevent event bubbling.  Remove __setClickable() calls, since 
individual clickdivs are no longer made clickable.  Override __mouseEvent() to 
return based on the value of selectable, to allow selection to happen.

LzMouseKernel - Eliminate __mouseupEvent() since global mosue up is handled by 
LzSprite.__clickDispatcher().  Explicitly return true for real onmousemove 
events to keep text selection working.

LzInputTextSprite - Wrap this.dragging property initialization in 
quirks.autoscroll_textarea to show where it's used.  Inputtexts are always 
clickable, so call setClickable(true).  Override setClickable() to cache the 
value locally and ensure the inputtext remains clickable.  Remove unused 
__handlemouse() method.  Use explicit  handler for allowing selection, to 
prevent event bubbling.  Minimize events registered by __setTextEvents(), and 
forward to __mouseEvent() when needed.  Fix braino in setTextColor()

Tests: All apps run as before in DHTML on Firefox, Safari and IE.  
test/lfc/legals/keyboardandmouse.lzx?lzr=dhtml&lzt=html comes much closer to 
matching swf.

Files:
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/LzMouseKernel.js
M       WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js

Changeset: 
http://svn.openlaszlo.org/openlaszlo/patches/20100921-maxcarlson-L.tar

Reply via email to