/*!
|
* Ext JS Library 3.1.0
|
* Copyright(c) 2006-2009 Ext JS, LLC
|
* licensing@extjs.com
|
* http://www.extjs.com/license
|
*/
|
(function(){
|
var doc = document,
|
isCSS1 = doc.compatMode == "CSS1Compat",
|
MAX = Math.max,
|
ROUND = Math.round,
|
PARSEINT = parseInt;
|
|
Ext.lib.Dom = {
|
isAncestor : function(p, c) {
|
var ret = false;
|
|
p = Ext.getDom(p);
|
c = Ext.getDom(c);
|
if (p && c) {
|
if (p.contains) {
|
return p.contains(c);
|
} else if (p.compareDocumentPosition) {
|
return !!(p.compareDocumentPosition(c) & 16);
|
} else {
|
while (c = c.parentNode) {
|
ret = c == p || ret;
|
}
|
}
|
}
|
return ret;
|
},
|
|
getViewWidth : function(full) {
|
return full ? this.getDocumentWidth() : this.getViewportWidth();
|
},
|
|
getViewHeight : function(full) {
|
return full ? this.getDocumentHeight() : this.getViewportHeight();
|
},
|
|
getDocumentHeight: function() {
|
return MAX(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, this.getViewportHeight());
|
},
|
|
getDocumentWidth: function() {
|
return MAX(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, this.getViewportWidth());
|
},
|
|
getViewportHeight: function(){
|
return Ext.isIE ?
|
(Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) :
|
self.innerHeight;
|
},
|
|
getViewportWidth : function() {
|
return !Ext.isStrict && !Ext.isOpera ? doc.body.clientWidth :
|
Ext.isIE ? doc.documentElement.clientWidth : self.innerWidth;
|
},
|
|
getY : function(el) {
|
return this.getXY(el)[1];
|
},
|
|
getX : function(el) {
|
return this.getXY(el)[0];
|
},
|
|
getXY : function(el) {
|
var p,
|
pe,
|
b,
|
bt,
|
bl,
|
dbd,
|
x = 0,
|
y = 0,
|
scroll,
|
hasAbsolute,
|
bd = (doc.body || doc.documentElement),
|
ret = [0,0];
|
|
el = Ext.getDom(el);
|
|
if(el != bd){
|
if (el.getBoundingClientRect) {
|
b = el.getBoundingClientRect();
|
scroll = fly(document).getScroll();
|
ret = [ROUND(b.left + scroll.left), ROUND(b.top + scroll.top)];
|
} else {
|
p = el;
|
hasAbsolute = fly(el).isStyle("position", "absolute");
|
|
while (p) {
|
pe = fly(p);
|
x += p.offsetLeft;
|
y += p.offsetTop;
|
|
hasAbsolute = hasAbsolute || pe.isStyle("position", "absolute");
|
|
if (Ext.isGecko) {
|
y += bt = PARSEINT(pe.getStyle("borderTopWidth"), 10) || 0;
|
x += bl = PARSEINT(pe.getStyle("borderLeftWidth"), 10) || 0;
|
|
if (p != el && !pe.isStyle('overflow','visible')) {
|
x += bl;
|
y += bt;
|
}
|
}
|
p = p.offsetParent;
|
}
|
|
if (Ext.isSafari && hasAbsolute) {
|
x -= bd.offsetLeft;
|
y -= bd.offsetTop;
|
}
|
|
if (Ext.isGecko && !hasAbsolute) {
|
dbd = fly(bd);
|
x += PARSEINT(dbd.getStyle("borderLeftWidth"), 10) || 0;
|
y += PARSEINT(dbd.getStyle("borderTopWidth"), 10) || 0;
|
}
|
|
p = el.parentNode;
|
while (p && p != bd) {
|
if (!Ext.isOpera || (p.tagName != 'TR' && !fly(p).isStyle("display", "inline"))) {
|
x -= p.scrollLeft;
|
y -= p.scrollTop;
|
}
|
p = p.parentNode;
|
}
|
ret = [x,y];
|
}
|
}
|
return ret
|
},
|
|
setXY : function(el, xy) {
|
(el = Ext.fly(el, '_setXY')).position();
|
|
var pts = el.translatePoints(xy),
|
style = el.dom.style,
|
pos;
|
|
for (pos in pts) {
|
if(!isNaN(pts[pos])) style[pos] = pts[pos] + "px"
|
}
|
},
|
|
setX : function(el, x) {
|
this.setXY(el, [x, false]);
|
},
|
|
setY : function(el, y) {
|
this.setXY(el, [false, y]);
|
}
|
};
|
})();
|