/**
* @ignore
* special patch for anim backgroundPosition
* @author yiminghe@gmail.com
*/
KISSY.add('anim/background-position', function (S, DOM, Anim, Fx) {
function numeric(bp) {
bp = bp.replace(/left|top/g, '0px')
.replace(/right|bottom/g, '100%')
.replace(/([0-9\.]+)(\s|\)|$)/g, '$1px$2');
var res = bp.match(/(-?[0-9\.]+)(px|%|em|pt)\s(-?[0-9\.]+)(px|%|em|pt)/);
return [parseFloat(res[1]), res[2], parseFloat(res[3]), res[4]];
}
function BackgroundPositionFx() {
BackgroundPositionFx.superclass.constructor.apply(this, arguments);
}
S.extend(BackgroundPositionFx, Fx, {
load:function () {
var self = this, fromUnit;
BackgroundPositionFx.superclass.load.apply(self, arguments);
fromUnit = self.unit = ['px', 'px'];
if (self.from) {
var from = numeric(self.from);
self.from = [from[0], from[2]];
fromUnit = [from[1], from[3]];
} else {
self.from = [0, 0];
}
if (self.to) {
var to = numeric(self.to);
self.to = [to[0], to[2]];
self.unit = [to[1], to[3]];
} else {
self.to = [0, 0];
}
if (fromUnit) {
if (fromUnit[0] !== self.unit[0] || fromUnit[1] !== self.unit[1]) {
S.log('BackgroundPosition x y unit is not same :', 'warn');
S.log(fromUnit, 'warn');
S.log(self.unit, 'warn');
}
}
},
interpolate:function (from, to, pos) {
var unit = this.unit, interpolate = BackgroundPositionFx.superclass.interpolate;
return interpolate(from[0], to[0], pos) + unit[0] + ' ' +
interpolate(from[1], to[1], pos) + unit[1];
},
cur:function () {
return DOM.css(this.anim.config.el, 'backgroundPosition');
},
update:function () {
var self = this,
prop = self.prop,
el = self.anim.config.el,
from = self.from,
to = self.to,
val = self.interpolate(from, to, self.pos);
DOM.css(el, prop, val);
}
});
Fx.Factories['backgroundPosition'] = BackgroundPositionFx;
return BackgroundPositionFx;
}, {
requires:['dom', './base', './fx']
});