[Laszlo-checkins] r5747 - openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml
max@openlaszlo.org
max at openlaszlo.org
Sun Jul 22 21:01:05 PDT 2007
Author: max
Date: 2007-07-22 21:00:59 -0700 (Sun, 22 Jul 2007)
New Revision: 5747
Modified:
openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js
openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js
openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
Log:
Change 20070722-maxcarlson-g by maxcarlson at plastik on 2007-07-22 12:13:31 PDT
in /Users/maxcarlson/openlaszlo/legals-checkin
for http://svn.openlaszlo.org/openlaszlo/branches/legals
Summary: Fix inputtext focus and blurring in IE
New Features:
Bugs Fixed: LPP-4244 - Mouse handling busted in R5588 IE7 DHTML
Technical Reviewer: promanik
QA Reviewer: hminsky
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details: LzSprite.js - setWidth/Height() return new width value if changed. Optimize setOpacity.
LzMouseKernel.js - Pass eventname and target into LzInputTextSprite.__hideIfNotFocused(), but only when fix_ie_clickable quirk is on. Otherwise, act the same as before.
LzInputTextSprite.js - Add __setglobalclickable() method and call it instead of calling __setCSSClassProperty() directly. Turn global ckickability on when mousing out of inputtext, and off again when mousing back over the inputtext. This makes clickable views function they way they should without interfering with the inputtext. setWidth/Height() use values returned from LzSprite.setWidth/Height().
Tests: ant lztest, LPP-4244 pass.
Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js 2007-07-23 02:48:38 UTC (rev 5746)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js 2007-07-23 04:00:59 UTC (rev 5747)
@@ -74,6 +74,7 @@
this.__LZinputclickdiv.className = 'lzclickdiv';
this.__LZinputclickdiv.owner = this;
this.__LZinputclickdiv.onmouseover = function () {
+ LzInputTextSprite.prototype.__setglobalclickable(false);
this.owner.__show();
}
this.__LZclickdiv.appendChild(this.__LZinputclickdiv);
@@ -110,19 +111,41 @@
}
if (this.quirks.fix_ie_clickable) {
this.__LZclickdiv.appendChild(this.__LzInputDiv);
- this.__setCSSClassProperty('.lzclickdiv', 'display', 'none');
+ this.__setglobalclickable(false);
} else {
this.__LZinputclickdiv.appendChild(this.__LzInputDiv);
}
//Debug.write('show');
}
-LzInputTextSprite.prototype.__hideIfNotFocused = function() {
+LzInputTextSprite.prototype.__hideIfNotFocused = function(eventname, target) {
if (LzInputTextSprite.prototype.__lastshown == null) return;
- if (LzInputTextSprite.prototype.__focusedSprite != LzInputTextSprite.prototype.__lastshown) {
- LzInputTextSprite.prototype.__lastshown.__hide();
+ if (LzSprite.prototype.quirks.fix_ie_clickable && eventname == 'onmousemove') {
+ // track mouse position for inputtext when global clickable is false
+ if (LzInputTextSprite.prototype.__globalclickable == false && LzInputTextSprite.prototype.__focusedSprite && target) {
+ if (target.owner != LzInputTextSprite.prototype.__focusedSprite) {
+ LzInputTextSprite.prototype.__setglobalclickable(true);
+ } else {
+ LzInputTextSprite.prototype.__setglobalclickable(false);
+ }
+ }
+ } else {
+ if (eventname != null && LzInputTextSprite.prototype.__globalclickable == true) {
+ LzInputTextSprite.prototype.__setglobalclickable(false);
+ }
+ if (LzInputTextSprite.prototype.__focusedSprite != LzInputTextSprite.prototype.__lastshown) {
+ LzInputTextSprite.prototype.__lastshown.__hide();
+ }
}
+
}
+LzInputTextSprite.prototype.__setglobalclickable = function(c) {
+ if (! LzSprite.prototype.quirks.fix_ie_clickable) return;
+ if (c != LzInputTextSprite.prototype.__globalclickable) {
+ LzInputTextSprite.prototype.__globalclickable = c;
+ LzInputTextSprite.prototype.__setCSSClassProperty('.lzclickdiv', 'display', c ? '' : 'none');
+ }
+}
LzInputTextSprite.prototype.__hide = function() {
if (this.__shown != true || this.disabled == true) return;
@@ -146,7 +169,7 @@
// and make the click be displayed or not by whether it is before or after the (input) div?
// [max 1-18-2007] IE requires different nesting rules for inputtext. Also, if there are _any_ clickable divs behind the inputtext they'll grab clicks. This is the reason I temporarily hide all clickable divs when the inputtext is selected - and the reason the inputtext can't be a child of the clickable view.
- this.__setCSSClassProperty('.lzclickdiv', 'display', '');
+ this.__setglobalclickable(true);
this.__LzInputDiv = this.__LZclickdiv.removeChild(this.__LzInputDiv);
} else {
this.__LzInputDiv = this.__LZinputclickdiv.removeChild(this.__LzInputDiv);
@@ -179,6 +202,7 @@
if (c) {
this.__LzInputDiv.onblur = function (e) { this.owner.__textEvent(e, 'onblur') }
this.__LzInputDiv.onmousedown = function (e) { this.owner.__textEvent(e, 'onmousedown') }
+ this.__LzInputDiv.onmouseout = function (e) { this.owner.__textEvent(e, 'onmouseout') }
this.__LzInputDiv.onfocus = function (e) { this.owner.__textEvent(e, 'onfocus') }
this.__LzInputDiv.onclick = function (e) { this.owner.__textEvent(e, 'onclick') }
this.__LzInputDiv.onkeyup = function (e) { this.owner.__textEvent(e, 'onkeyup') }
@@ -201,6 +225,9 @@
if (this.destroyed == true) return;
var keycode = e ? e.keyCode : event.keyCode;
if (eventname == 'onfocus' || eventname == 'onmousedown') {
+ if (eventname == 'onfocus') {
+ LzInputTextSprite.prototype.__setglobalclickable(false);
+ }
LzInputTextSprite.prototype.__focusedSprite = this;
this.__show();
if (eventname == 'onfocus' && this._cancelfocus) {
@@ -218,7 +245,9 @@
this._cancelblur = false;
return;
}
- }
+ } else if (eventname == 'onmouseout') {
+ this.__setglobalclickable(true);
+ }
//Debug.info('__textEvent', eventname, keycode);
if (this.owner) {
@@ -304,24 +333,26 @@
LzInputTextSprite.prototype.setWidth = function (w) {
if (w == null || w < 0 || isNaN(w) || this.width == w) return;
// call LzSprite.setWidth();
- this.__setWidth(w - this.____wpadding);
- if (this.quirks.fix_clickable) {
- var w = this.CSSDimension(this.width);
- this.__LZclickdiv.style.width = w;
- this.__LZinputclickdiv.style.width = w;
+ var nw = this.__setWidth(w - this.____wpadding);
+ if (this.quirks.fix_clickable && nw != null) {
+ this.__LZclickdiv.style.width = nw;
+ this.__LZinputclickdiv.style.width = nw;
}
}
LzInputTextSprite.prototype.setHeight = function (h) {
if (h == null || h < 0 || isNaN(h) || this.height == h) return;
// call LzSprite.setHeight();
- this.__setHeight(h);
- if (this.quirks.fix_clickable) {
- var h = this.CSSDimension(this.height);
- this.__LZclickdiv.style.height = h;
- this.__LZinputclickdiv.style.height = h;
+ var nh = this.__setHeight(h);
+ if (this.quirks.fix_clickable && nh != null) {
+ this.__LZclickdiv.style.height = nh;
+ this.__LZinputclickdiv.style.height = nh;
if (this.multiline && this.quirks.set_height_for_multiline_inputtext) {
- this.__LzInputDiv.style.height = this.CSSDimension(this.height - (this.____hpadding * 2));
+ h = this.CSSDimension(h - (this.____hpadding * 2));
+ if (h != this._multilineheight) {
+ this._multilineheight = h;
+ this.__LzInputDiv.style.height = h
+ }
}
}
}
Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js 2007-07-23 02:48:38 UTC (rev 5746)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzMouseKernel.js 2007-07-23 04:00:59 UTC (rev 5747)
@@ -21,8 +21,15 @@
,__mouseEvent: function(e) {
if (!e) e = window.event;
var eventname = 'on' + e.type;
- if (window['LzKeyboardKernel']) LzKeyboardKernel.__keyboardEvent(e);
- if (window['LzInputTextSprite'] && eventname != 'onmousemove' && LzInputTextSprite.prototype.__lastshown != null) LzInputTextSprite.prototype.__hideIfNotFocused();
+ var targ = e.srcElement ? e.srcElement : e.target;
+ if (window['LzKeyboardKernel'] && LzKeyboardKernel['__keyboardEvent']) LzKeyboardKernel.__keyboardEvent(e);
+ if (window['LzInputTextSprite']) {
+ if (LzSprite.prototype.quirks.fix_ie_clickable) {
+ LzInputTextSprite.prototype.__hideIfNotFocused(eventname, targ);
+ } else if (eventname != 'onmousemove' && LzInputTextSprite.prototype.__lastshown != null) {
+ LzInputTextSprite.prototype.__hideIfNotFocused();
+ }
+ }
if (eventname == 'onmouseup' && LzMouseKernel.__lastMouseDown != null) {
// call mouseup on the sprite that got the last mouse down
LzMouseKernel.__lastMouseDown.__globalmouseup(e);
@@ -38,7 +45,6 @@
if (LzMouseKernel.__callback) {
if (e.button == 2 && eventname != 'oncontextmenu') return;
if (eventname == 'oncontextmenu') {
- var targ = e.srcElement ? e.srcElement : e.target;
if (targ && targ.owner && targ.owner.__contextmenu) {
targ.owner.__contextmenu.__show();
return targ.owner.__contextmenu.showbuiltins;
Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js 2007-07-23 02:48:38 UTC (rev 5746)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js 2007-07-23 04:00:59 UTC (rev 5747)
@@ -682,6 +682,7 @@
if (this.clip) this.__updateClip();
if (this.stretches) this.__updateStretches();
if (this.__LZclick) this.__LZclick.style.width = w;
+ return w;
}
}
@@ -712,6 +713,7 @@
if (this.clip) this.__updateClip();
if (this.stretches) this.__updateStretches();
if (this.__LZclick) this.__LZclick.style.height = h;
+ return h;
}
}
@@ -777,11 +779,14 @@
if (this.opacity == o || o < 0) return;
//Debug.info('setOpacity', o);
this.opacity = o;
- if (o < .001) o = 0;
- if (this.quirks.ie_alpha_image_loader) {
- this.__LZdiv.style.filter = "alpha(opacity="+(o * 100)+")";
- } else {
- this.__LZdiv.style.opacity = o;
+ o = parseInt(o * 100) / 100;
+ if (o != this._opacity) {
+ this._opacity = o;
+ if (this.quirks.ie_alpha_image_loader) {
+ this.__LZdiv.style.filter = "alpha(opacity=" + parseInt(o * 100) + ")";
+ } else {
+ this.__LZdiv.style.opacity = o;
+ }
}
}
More information about the Laszlo-checkins
mailing list