summaryrefslogtreecommitdiff
path: root/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js
diff options
context:
space:
mode:
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js')
-rw-r--r--webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js175
1 files changed, 175 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js
new file mode 100644
index 0000000000..d045524d29
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js
@@ -0,0 +1,175 @@
+/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+ License:
+ LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+ Authors:
+ * Sebastian Werner (wpbasti)
+ * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+#require(qx.dom.Style)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.ScrollIntoView");
+
+// Internet Explorer has invented scrollIntoView, but does not behave the same like in Mozilla (which would be better)
+// Mozilla has a native well working method scrollIntoView
+// Safari does not support scrollIntoView (but it can be found in Webkit since May 2005)
+// Opera does not support scrollIntoView
+
+qx.dom.BODY_TAG_NAME = "body";
+
+qx.dom.ScrollIntoView.scrollX = function(vElement, vAlignLeft)
+{
+ var vParentWidth, vParentScrollLeft, vWidth, vHasScroll;
+
+ var vParent = vElement.parentNode;
+ var vOffset = vElement.offsetLeft;
+ var vWidth = vElement.offsetWidth;
+
+ while(vParent)
+ {
+ switch(qx.dom.Style.getStyleProperty(vParent, "overflow"))
+ {
+ case "scroll":
+ case "auto":
+ case "-moz-scrollbars-horizontal":
+ vHasScroll = true;
+ break;
+
+ default:
+ switch(qx.dom.Style.getStyleProperty(vParent, "overflowX"))
+ {
+ case "scroll":
+ case "auto":
+ vHasScroll = true;
+ break;
+
+ default:
+ vHasScroll = false;
+ }
+ }
+
+ if (vHasScroll)
+ {
+ vParentWidth = vParent.clientWidth;
+ vParentScrollLeft = vParent.scrollLeft;
+
+ if (vAlignLeft)
+ {
+ vParent.scrollLeft = vOffset;
+ }
+ else if (vAlignLeft == false)
+ {
+ vParent.scrollLeft = vOffset + vWidth - vParentWidth;
+ }
+ else if (vWidth > vParentWidth || vOffset < vParentScrollLeft)
+ {
+ vParent.scrollLeft = vOffset;
+ }
+ else if ((vOffset + vWidth) > (vParentScrollLeft + vParentWidth))
+ {
+ vParent.scrollLeft = vOffset + vWidth - vParentWidth;
+ }
+
+ vOffset = vParent.offsetLeft;
+ vWidth = vParent.offsetWidth;
+ }
+ else
+ {
+ vOffset += vParent.offsetLeft;
+ }
+
+ if (vParent.tagName.toLowerCase() == qx.dom.BODY_TAG_NAME) {
+ break;
+ }
+
+ vParent = vParent.parentNode;
+ }
+
+ return true;
+}
+
+qx.dom.ScrollIntoView.scrollY = function(vElement, vAlignTop)
+{
+ var vParentHeight, vParentScrollTop, vHeight, vHasScroll;
+
+ var vParent = vElement.parentNode;
+ var vOffset = vElement.offsetTop;
+ var vHeight = vElement.offsetHeight;
+
+ while(vParent)
+ {
+ switch(qx.dom.Style.getStyleProperty(vParent, "overflow"))
+ {
+ case "scroll":
+ case "auto":
+ case "-moz-scrollbars-vertical":
+ vHasScroll = true;
+ break;
+
+ default:
+ switch(qx.dom.Style.getStyleProperty(vParent, "overflowY"))
+ {
+ case "scroll":
+ case "auto":
+ vHasScroll = true;
+ break;
+
+ default:
+ vHasScroll = false;
+ }
+ }
+
+ if (vHasScroll)
+ {
+ vParentHeight = vParent.clientHeight;
+ vParentScrollTop = vParent.scrollTop;
+
+ if (vAlignTop)
+ {
+ vParent.scrollTop = vOffset;
+ }
+ else if (vAlignTop == false)
+ {
+ vParent.scrollTop = vOffset + vHeight - vParentHeight;
+ }
+ else if (vHeight > vParentHeight || vOffset < vParentScrollTop)
+ {
+ vParent.scrollTop = vOffset;
+ }
+ else if ((vOffset + vHeight) > (vParentScrollTop + vParentHeight))
+ {
+ vParent.scrollTop = vOffset + vHeight - vParentHeight;
+ }
+
+ vOffset = vParent.offsetTop;
+ vHeight = vParent.offsetHeight;
+ }
+ else
+ {
+ vOffset += vParent.offsetTop;
+ }
+
+ if (vParent.tagName.toLowerCase() == qx.dom.BODY_TAG_NAME) {
+ break;
+ }
+
+ vParent = vParent.parentNode;
+ }
+
+ return true;
+}