/**
* @class Ext.fx.target.Element
*
* This class represents a animation target for an {@link Ext.dom.Element}. In general this class
* will not be created directly, the {@link Ext.dom.Element} will be passed to the animation and
* and the appropriate target will be created.
*/
Ext.define('Ext.fx.target.Element', {
extend: 'Ext.fx.target.Target',
type: 'element',
constructor: function(target) {
this.callParent([target]);
// Allow simple local left/top style setting for top level absolute positioned elements.
this.isAbsoluteOnPage = this.target.dom.parentNode === document.body &&
this.target.isStyle('position', 'absolute');
},
getElVal: function(el, attr, val) {
if (val === undefined) {
if (attr === 'x') {
val = el.getX();
}
else if (attr === 'y') {
val = el.getY();
}
else if (attr === 'scrollTop') {
val = el.getScroll().top;
}
else if (attr === 'scrollLeft') {
val = el.getScroll().left;
}
else if (attr === 'height') {
val = el.getHeight();
}
else if (attr === 'width') {
val = el.getWidth();
}
else {
val = el.getStyle(attr);
}
}
return val;
},
getAttr: function(attr, val) {
var el = this.target;
return [[ el, this.getElVal(el, attr, val)]];
},
setAttr: function(targetData) {
var ln = targetData.length,
attrs, attr, o, i, j, ln2;
for (i = 0; i < ln; i++) {
attrs = targetData[i].attrs;
for (attr in attrs) {
if (attrs.hasOwnProperty(attr)) {
ln2 = attrs[attr].length;
for (j = 0; j < ln2; j++) {
o = attrs[attr][j];
this.setElVal(o[0], attr, o[1]);
}
}
}
}
},
setElVal: function(element, attr, value) {
if (attr === 'x') {
if (this.isAbsoluteOnPage) {
element.setLocalX(value);
}
else {
element.setXY([value, null]);
}
}
else if (attr === 'y') {
if (this.isAbsoluteOnPage) {
element.setLocalY(value);
}
else {
element.setXY([null, value]);
}
}
else if (attr === 'scrollTop') {
element.scrollTo('top', value);
}
else if (attr === 'scrollLeft') {
element.scrollTo('left', value);
}
else if (attr === 'width') {
element.setWidth(value);
}
else if (attr === 'height') {
element.setHeight(value);
}
else {
element.setStyle(attr, value);
}
}
});