[Laszlo-checkins] r11705 - in openlaszlo/trunk/WEB-INF/lps/lfc: kernel/dhtml views
bargull@openlaszlo.org
bargull at openlaszlo.org
Thu Nov 6 15:42:31 PST 2008
Author: bargull
Date: 2008-11-06 15:42:27 -0800 (Thu, 06 Nov 2008)
New Revision: 11705
Modified:
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js
openlaszlo/trunk/WEB-INF/lps/lfc/views/LzInputText.lzs
Log:
Change 20081031-bargull-V5I by bargull at dell--p4--2-53 on 2008-10-31 15:12:03
in /home/Admin/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: fix dhtml inputtext bug
New Features:
Bugs Fixed: LPP-7113
Technical Reviewer: max
QA Reviewer: (pending)
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
Tests:
LzInputText:
- removed "onselect"-event (private + dhtml-only)
- merged both "inputtextevent()" methods
- removed "onmousedown sets focus", it was dhtml-only. instead send an artificial "onfocus"-event from the inputtext-sprite
- call clearFocus() when you get an "onblur"-event (LPP-7113)
LzInputTextSprite:
- removed event-listener for "onselect"
- send an artifial "onfocus" event after "onmousedown"
- store "this.owner" and "this.owner.owner" in local variables for efficiency
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js 2008-11-06 23:39:03 UTC (rev 11704)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js 2008-11-06 23:42:27 UTC (rev 11705)
@@ -306,7 +306,6 @@
div.onkeyup = f;
div.onkeydown = f;
div.onkeypress = f;
- div.onselect = f;
div.onchange = f;
if (this.quirks.ie_paste_event || this.quirks.safari_paste_event) {
div.onpaste = c ? function (e) { this.owner.__pasteHandlerEx(e) } : null;
@@ -381,7 +380,7 @@
var val = this.__LzInputDiv.value;
var that = this;
- //use 1ms timeout to give UI enough time for updating
+ // use 1ms timeout to defer execution, so that UI can update its state
setTimeout(function() {
var newval = that.__LzInputDiv.value;
var newlen = newval.length;
@@ -407,88 +406,79 @@
}
// Called from the scope of the div - use owner property
-LzInputTextSprite.prototype.__textEvent = function ( e ){
- if (! e) e = window.event;
- if (this.owner.__LZdeleted == true) return;
- if (this.owner.__skipevent) {
- this.owner.__skipevent = false;
+LzInputTextSprite.prototype.__textEvent = function ( evt ){
+ if (! evt) evt = window.event;
+ var sprite = this.owner;
+ var view = this.owner.owner;
+ if (sprite.__LZdeleted == true) return;
+ if (sprite.__skipevent) {
+ sprite.__skipevent = false;
return;
}
- var eventname = 'on' + e.type;
- if (this.owner.quirks.ie_mouse_events && eventname == 'onmouseleave') {
+ var eventname = 'on' + evt.type;
+ if (sprite.quirks.ie_mouse_events && eventname == 'onmouseleave') {
eventname = 'onmouseout';
}
- if (this.owner.__shown != true) {
+ if (sprite.__shown != true) {
// this only happens when tabbing in from outside the app
if (eventname == 'onfocus') {
- this.owner.__skipevent = true;
- //this.owner.select()
- this.owner.__show();
- this.owner.__LzInputDiv.blur();
- LzInputTextSprite.__lastfocus = this.owner;
+ sprite.__skipevent = true;
+ //sprite.select()
+ sprite.__show();
+ sprite.__LzInputDiv.blur();
+ LzInputTextSprite.__lastfocus = sprite;
LzKeyboardKernel.setKeyboardControl(true);
}
return;
- } else if (this.owner.__shown == false) {
+ } else if (sprite.__shown == false) {
return;
}
- var keycode = e ? e.keyCode : event.keyCode;
if (eventname == 'onfocus' || eventname == 'onmousedown') {
if (eventname == 'onfocus') {
LzInputTextSprite.prototype.__setglobalclickable(false);
}
- LzInputTextSprite.prototype.__focusedSprite = this.owner;
- this.owner.__show();
- if (eventname == 'onfocus' && this.owner._cancelfocus) {
- this.owner._cancelfocus = false;
+ LzInputTextSprite.prototype.__focusedSprite = sprite;
+ sprite.__show();
+ if (eventname == 'onfocus' && sprite._cancelfocus) {
+ sprite._cancelfocus = false;
return;
}
if (window['LzKeyboardKernel']) LzKeyboardKernel.__cancelKeys = false;
} else if (eventname == 'onblur') {
if (window['LzKeyboardKernel']) LzKeyboardKernel.__cancelKeys = true;
- if (LzInputTextSprite.prototype.__focusedSprite == this.owner) {
+ if (LzInputTextSprite.prototype.__focusedSprite === sprite) {
LzInputTextSprite.prototype.__focusedSprite = null;
}
- if (this.owner.__fix_inputtext_with_parent_resource && this.owner.__isMouseOver()) {
+ if (sprite.__fix_inputtext_with_parent_resource && sprite.__isMouseOver()) {
//Debug.write('undo blur')
- this.owner.select();
+ sprite.select();
return;
}
- this.owner.__hide();
- if (this.owner._cancelblur) {
- this.owner._cancelblur = false;
+ sprite.__hide();
+ if (sprite._cancelblur) {
+ sprite._cancelblur = false;
return;
}
} else if (eventname == 'onmouseout') {
- this.owner.__setglobalclickable(true);
+ sprite.__setglobalclickable(true);
}
- if (this.owner.multiline && this.owner.owner.maxlength > 0) {
- if (eventname == 'onkeypress') {
- var evt = e ? e : event;
- var charcode = this.owner.quirks.text_event_charcode ? evt.charCode : evt.keyCode;
-
- /* BUG:
- * env: Safari - Win
- * -> last char is \n, delete per backspace, notice Safari-UI did update,
- * but __LzInputDiv.value still holds the \n!
- * blur inputtext, focus again -> \n is again there, also in UI!
- * what about Safari - Mac?
- */
-
+ if (eventname == 'onkeypress') {
+ if (sprite.multiline && view.maxlength > 0) {
+ var charcode = sprite.quirks.text_event_charcode ? evt.charCode : evt.keyCode;
//Debug.write("charCode = %s, keyCode = %s, ctrlKey = %s, altKey = %s, shiftKey = %s", charcode, keycode, evt.ctrlKey, evt.altKey, evt.shiftKey);
-
+
if (!(evt.ctrlKey || evt.altKey) && (charcode || keycode == 13) && keycode != 8) {
- var selsize = this.owner.getSelectionSize();
+ var selsize = sprite.getSelectionSize();
//[TODO anba 2008-01-06] use selsize==0 when LPP-5330 is fixed
if (selsize <= 0) {
- if (this.owner.quirks.text_ie_carriagereturn) {
- var val = this.owner.__LzInputDiv.value.replace(this.owner.____crregexp, '\n');
+ if (sprite.quirks.text_ie_carriagereturn) {
+ var val = sprite.__LzInputDiv.value.replace(sprite.____crregexp, '\n');
} else {
- var val = this.owner.__LzInputDiv.value;
+ var val = sprite.__LzInputDiv.value;
}
-
- var len = val.length, max = this.owner.owner.maxlength;
+
+ var len = val.length, max = view.maxlength;
if (len >= max) {
evt.returnValue = false;
if (evt.preventDefault) {
@@ -499,16 +489,17 @@
} else {
/* IE and Safari do not send 'onkeypress' for function-keys, */
/* but Firefox and Opera! */
- if (this.owner.quirks.keypress_function_keys) {
+ if (sprite.quirks.keypress_function_keys) {
if (evt.ctrlKey && !evt.altKey && !evt.shiftKey) {
var c = String.fromCharCode(charcode);
/* 'v' for Firefox and 'V' for Opera */
if (c == 'v' || c == 'V') {
//pasting per ctrl + v
//[TODO anba 2008-01-06] how to detect paste per context-menu?
- var len = this.owner.__LzInputDiv.value.length, max = this.owner.owner.maxlength;
- if (len < max || this.owner.getSelectionSize() > 0) {
- this.owner.__pasteHandler();
+ //[TODO anba 2008-10-06] (LPP-5406) Firefox3 added context-menu events
+ var len = sprite.__LzInputDiv.value.length, max = view.maxlength;
+ if (len < max || sprite.getSelectionSize() > 0) {
+ sprite.__pasteHandler();
} else {
evt.returnValue = false;
if (evt.preventDefault) {
@@ -520,26 +511,27 @@
}
}
}
- }
-
- if (eventname == 'onkeypress') {
- /* we need to leave here, else LzInputText.inputtextevent(..) will freak out */
+ // don't forward 'onkeypress' to inputtextevent()
return;
}
//Debug.info('__textEvent', eventname, keycode);
- if (this.owner.owner) {
+ if (view) {
// Generate the event. onkeyup/onkeydown sent by lz.Keys.js
if (eventname == 'onkeydown' || eventname == 'onkeyup') {
- var v = this.owner.__LzInputDiv.value;
- if (v != this.owner.text) {
- this.owner.text = v;
- this.owner.owner.inputtextevent('onchange', v);
+ var v = sprite.__LzInputDiv.value;
+ if (v != sprite.text) {
+ sprite.text = v;
+ view.inputtextevent('onchange', v);
}
+ } else {
+ if (eventname == 'onmousedown') {
+ view.inputtextevent(eventname);
+ // also send an artifial 'onfocus' event
+ eventname = 'onfocus';
+ }
+ view.inputtextevent(eventname);
}
- else {
- this.owner.owner.inputtextevent(eventname, keycode);
- }
}
}
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/views/LzInputText.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/views/LzInputText.lzs 2008-11-06 23:39:03 UTC (rev 11704)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/views/LzInputText.lzs 2008-11-06 23:42:27 UTC (rev 11705)
@@ -83,12 +83,6 @@
*/
var onenabled = LzDeclaredEvent;
-
-/** @access private
- * @lzxtype event
- */
-var onselect = LzDeclaredEvent;
-
/**
* Width to use for text field if none is specified
* @access private
@@ -170,50 +164,11 @@
if ($dhtml) {
private static const __LZinputmouse = {onclick: true, onmousedown: true, onmouseout: true};
-/** @access private
- * Receive input text events from sprite
- * TODO: [20081030 anba] (LPP-7113) re-merge with swf-version when working on LPP-7113
- */
-function inputtextevent (eventname, value = null) {
- //Debug.warn('inputtextevent', eventname, value);
- if (eventname == 'onfocus' && this._focused) return;
- if (eventname == 'onblur' && ! this._focused) return;
- if (eventname == 'onfocus' || eventname == 'onmousedown') {
- this._focused = true;
- if (lz.Focus.getFocus() != this) {
- var tabdown = lz.Keys.isKeyDown('tab');
- lz.Focus.setFocus(this, tabdown);
- return;
- }
- } else if (eventname == 'onchange') {
- //multiline resizable fields adjust their height
- var isprite:LzInputTextSprite = (this.sprite cast LzInputTextSprite);
- this.text = isprite.getText();
- if ( this.multiline &&
- this.sizeToHeight &&
- this.height != isprite.getTextfieldHeight() ) {
- this.setHeight(isprite.getTextfieldHeight());
- }
- if (this.ontext.ready) this.ontext.sendEvent(value);
- return;
- } else if (eventname == 'onblur') {
- this._focused = false;
- }
- // we get these events from LzInputTextSprite:
- // onblur, onselect, onfocus, onchange,
- // onmousedown, onmouseout, onclick
- if (LzInputText.__LZinputmouse[eventname]) {
- // use the service class to propagate mouse-events
- lz.ModeManager.handleMouseEvent(this, eventname);
- } else {
- // FIXME: [20081030 anba] this isn't quite right,
- // e.g. we must use lz.Focus for focus events!
- if (this[eventname].ready) this[eventname].sendEvent(value);
- }
}
-} else {
+
/** @access private
- * Receive input text events from sprite
+ * Receive input text events from sprite: onblur, onfocus, onchange
+ * Additionally for dhtml: onmousedown, onmouseout, onclick
*/
function inputtextevent (eventname:String, value:* = null) :void {
if (eventname == 'onfocus' && this._focused) return;
@@ -240,11 +195,23 @@
if (lz.Focus.getFocus() === this) {
lz.Focus.clearFocus();
}
- } else if ($debug) {
- Debug.warn("unhandled inputtextevent='%s' in %#w", eventname, this);
+ } else {
+ if ($dhtml) {
+ if (LzInputText.__LZinputmouse[eventname]) {
+ // must use lz.ModeManager to propagate mouse-events
+ // TODO: [20081031 anba] I don't know why the dhtml-kernel sends
+ // mouse-events through inputtextevent(). This code wasn't
+ // even executed when I ran simple testcases. Maybe it's just
+ // redundant now and we can remove it..
+ lz.ModeManager.handleMouseEvent(this, eventname);
+ return;
+ }
+ }
+ if ($debug) {
+ Debug.warn("unhandled inputtextevent='%s' in %#w", eventname, this);
+ }
}
}
-}
/**
* Retrieves the contents of the text field for use by a datapath. See
More information about the Laszlo-checkins
mailing list