Author: pyaschenko
Date: 2009-02-05 08:43:39 -0500 (Thu, 05 Feb 2009)
New Revision: 12576
Modified:
trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js
trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
trunk/ui/combobox/src/main/resources/org/richfaces/renderkit/html/scripts/combolist.js
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js
Log:
https://jira.jboss.org/jira/browse/RF-4354
Modified:
trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js
===================================================================
---
trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js 2009-02-05
13:32:55 UTC (rev 12575)
+++
trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js 2009-02-05
13:43:39 UTC (rev 12576)
@@ -487,4 +487,33 @@
}
if (result!=false) result = true;
return result;
-};
\ No newline at end of file
+};
+
+Richfaces.setupScrollEventHandlers = function(element, handler) {
+
+ var elements = []
+
+ element = element.parentNode;
+ while (element && element!=window.document)
+ {
+ if (element.offsetWidth!=element.scrollWidth ||
element.offsetHeight!=element.scrollHeight)
+ {
+ elements.push(element);
+ Event.observe(element, "scroll", handler, false);
+ }
+ element = element.parentNode;
+ }
+
+ return elements;
+};
+
+Richfaces.removeScrollEventHandlers = function(elements, handler) {
+ if (elements)
+ {
+ for (var i=0;i<elements.length;i++)
+ {
+ Event.stopObserving(elements[i], "scroll", handler, false);
+ }
+ elements = null;
+ }
+};
Modified:
trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
===================================================================
---
trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2009-02-05
13:32:55 UTC (rev 12575)
+++
trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2009-02-05
13:43:39 UTC (rev 12576)
@@ -784,6 +784,8 @@
}
}
+ this.scrollElements = null;
+
//alert(new Date().getTime()-_d.getTime());
},
@@ -792,6 +794,7 @@
{
if (this.params.popup && this.isVisible)
{
+ Richfaces.removeScrollEventHandlers(this.scrollElements, this.eventOnScroll);
Event.stopObserving(window.document, "click", this.eventOnCollapse, false);
}
},
@@ -1117,6 +1120,10 @@
this.timeHoursDigits = digits;
},
+ eventOnScroll: function (e) {
+ this.doCollapse();
+ },
+
doCollapse: function() {
if (!this.params.popup || !this.isVisible) return;
@@ -1127,6 +1134,7 @@
if (this.invokeEvent("collapse", element))
{
+ Richfaces.removeScrollEventHandlers(this.scrollElements, this.eventOnScroll);
Event.stopObserving(window.document, "click", this.eventOnCollapse, false);
var iframe=null;
@@ -1152,7 +1160,6 @@
if (this.invokeEvent("expand", element, e))
{
-
var iframe=null;
if (Richfaces.browser.isIE6) iframe = $(this.IFRAME_ID);
@@ -1203,6 +1210,9 @@
this.isVisible = true;
Event.observe(window.document, "click", this.eventOnCollapse, false);
+
+ Richfaces.removeScrollEventHandlers(this.scrollElements, this.eventOnScroll);
+ this.scrollElements = Richfaces.setupScrollEventHandlers(element,
this.eventOnScroll);
}
},
@@ -1298,6 +1308,7 @@
prepareEvents: function() {
this.eventOnCollapse = this.eventOnCollapse.bindAsEventListener(this);
+ this.eventOnScroll = this.eventOnScroll.bindAsEventListener(this);
},
invokeEvent: function(eventName, element, event, date) {
Modified:
trunk/ui/combobox/src/main/resources/org/richfaces/renderkit/html/scripts/combolist.js
===================================================================
---
trunk/ui/combobox/src/main/resources/org/richfaces/renderkit/html/scripts/combolist.js 2009-02-05
13:32:55 UTC (rev 12575)
+++
trunk/ui/combobox/src/main/resources/org/richfaces/renderkit/html/scripts/combolist.js 2009-02-05
13:43:39 UTC (rev 12576)
@@ -34,6 +34,8 @@
this.width = width;
this.height = height;
this.initDimensions();
+ this.scrollElements = null;
+ this.eventOnScroll = this.eventOnScroll.bindAsEventListener(this);
},
@@ -111,7 +113,8 @@
}
this.listParent.fire("rich:onlistcall", {});
-
+ Richfaces.removeScrollEventHandlers(this.scrollElements, this.eventOnScroll);
+ this.scrollElements =
Richfaces.setupScrollEventHandlers(this.listParentContainer.parentNode,
this.eventOnScroll);
},
injectListToBody: function(listElement) {
@@ -143,6 +146,7 @@
},
hide : function() {
+ Richfaces.removeScrollEventHandlers(this.scrollElements, this.eventOnScroll);
this.outjectListFromBody(this.listParentContainer, this.listParent);
this.resetState();
if (this.iframe) {
@@ -159,6 +163,10 @@
},
+ eventOnScroll: function (e) {
+ this.hideWithDelay();
+ },
+
visible : function() {
return this.listParent.visible();
},
Modified:
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js
===================================================================
---
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js 2009-02-05
13:32:55 UTC (rev 12575)
+++
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js 2009-02-05
13:43:39 UTC (rev 12576)
@@ -160,6 +160,9 @@
}
this.onNothingLabelClick = this.hideNLabel.bindAsEventListener(this);
+
+ this.scrollElements = null;
+ this.eventOnScroll = this.eventOnScroll.bindAsEventListener(this);
},
cancelSubmit: function(event) {
@@ -238,9 +241,13 @@
if (Element.getStyle(this.update, 'display')
== 'none') this.options.onShow(this.element, this.update,
this.options);
this.disableSubmit();
+
+ Richfaces.removeScrollEventHandlers(this.scrollElements, this.eventOnScroll);
+ this.scrollElements =
Richfaces.setupScrollEventHandlers($(this.options.selection), this.eventOnScroll);
},
hide: function() {
+ Richfaces.removeScrollEventHandlers(this.scrollElements, this.eventOnScroll);
if (RichFaces.SAFARI == RichFaces.navigatorType()) {
if (this.wasScroll) {
this.wasScroll = false;
@@ -255,6 +262,10 @@
this.hasFocus = false;
this.active = false;
},
+
+ eventOnScroll: function (e) {
+ this.hide();
+ },
hideNLabel: function(event) {
var nothingLabel = $(this.update.id + "NothingLabel");