transition-timer.js revision b8e54cd0fdbfd4d5482a6c38e53b0d42e2e2baff
0b062f4990db5cc6db2fe3398926f71b92a67407Brian WellingtonYUI.add('transition-timer', function(Y) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews/**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* The Transition Utility provides an API for creating advanced transitions.
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington* @module node
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington*/
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein/**
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews* Provides the base Transition class, for animating numeric properties.
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews*
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* @module node
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews* @submodule transition
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews*/
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews/**
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington * A class for constructing animation instances.
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews * @class Transition
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @for Transition
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @constructor
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrewsvar PROPERTY_END = 'transition:propertyEnd',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Transition = Y.Transition;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark AndrewsY.mix(Transition.prototype, {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein _start: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (Transition.useNative) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._runNative();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._runTimer();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein _runTimer: function() {
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews var anim = this;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein anim._initAttrs();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Transition._running[Y.stamp(anim)] = anim;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein anim._startTime = new Date();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Transition._startTimer();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews _end: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein delete Transition._running[Y.stamp(this)];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._running = false;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._startTime = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein _runFrame: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var t = new Date() - this._startTime;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._runAttrs(t);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein _runAttrs: function(time) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var anim = this,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein node = anim._node,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein uid = Y.stamp(node),
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attrs = Transition._nodeAttrs[uid],
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein customAttr = Transition.behaviors,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein allDone = false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein callback = anim._callback,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein name,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein setter,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein elapsed,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein delay,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein d,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein t,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein i;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for (name in attrs) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute = attrs[name];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ((attribute && attribute.transition === anim)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein d = attribute.duration;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein delay = attribute.delay;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein elapsed = time / 1000;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein t = time;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein setter = (i in customAttr && 'set' in customAttr[i]) ?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein customAttr[i].set : Transition.DEFAULT_SETTER;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done = (t >= d);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (t > d) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein t = d;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!delay || time >= delay) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein setter(anim, name, attribute.from, attribute.to, t - delay, d - delay,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute.easing, attribute.unit);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (done) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein delete attrs[name];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein anim._count--;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!allDone && anim._count <= 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein allDone = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein anim._end();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (callback) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein anim._callback = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein callback.call(node, {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein elapsedTime: (time - delay) / 1000
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein });
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein _initAttrs: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var anim = this,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein customAttr = Transition.behaviors,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein uid = Y.stamp(this._node),
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attrs = Transition._nodeAttrs[uid],
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein duration,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein delay,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein easing,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein val,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein name,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unit, begin, end;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for (name in attrs) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute = attrs[name];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (attrs.hasOwnProperty(name) && (attribute && attribute.transition === anim)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein duration = attribute.duration * 1000;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein delay = attribute.delay * 1000;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein easing = attribute.easing;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein val = attribute.value;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein begin = (name in customAttr && 'get' in customAttr[name]) ?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein customAttr[name].get(anim, name) : Transition.DEFAULT_GETTER(anim, name);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var mFrom = Transition.RE_UNITS.exec(begin);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var mTo = Transition.RE_UNITS.exec(val);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein begin = mFrom ? mFrom[1] : begin;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein end = mTo ? mTo[1] : val;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unit = mTo ? mTo[2] : mFrom ? mFrom[2] : ''; // one might be zero TODO: mixed units
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!unit && Transition.RE_DEFAULT_UNIT.test(name)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unit = Transition.DEFAULT_UNIT;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!begin || !end) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (typeof easing === 'string') {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (easing.indexOf('cubic-bezier') > -1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein easing = easing.substring(13, easing.length - 1).split(',');
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else if (Transition.easings[easing]) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein easing = Transition.easings[easing];
90153b6536f7a5078e1c157c980110dbcd7fe205Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute.from = begin;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute.to = end;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute.unit = unit;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute.easing = easing;
8ffa8320abcc17ae593af566cb946a58fe293860Brian Wellington attribute.duration = duration;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attribute.delay = delay;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein destroy: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this.detachAll();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._node = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}, true);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinY.mix(Y.Transition, {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein _runtimeAttrs: {},
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Regex of properties that should use the default unit.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein *
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @property RE_DEFAULT_UNIT
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @static
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein RE_DEFAULT_UNIT: /^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * The default unit to use with properties that pass the RE_DEFAULT_UNIT test.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein *
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @property DEFAULT_UNIT
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @static
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein DEFAULT_UNIT: 'px',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Time in milliseconds passed to setInterval for frame processing
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein *
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews * @property intervalTime
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @default 20
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @static
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein intervalTime: 20,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Bucket for custom getters and setters
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein *
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @property behaviors
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @static
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein behaviors: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein left: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein get: function(anim, attr) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return Y.DOM._getAttrOffset(anim._node._node, attr);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews * The default setter to use when setting object properties.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein *
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @property DEFAULT_SETTER
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @static
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein DEFAULT_SETTER: function(anim, att, from, to, elapsed, duration, fn, unit) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein from = Number(from);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein to = Number(to);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews var node = anim._node,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein val = Transition.cubicBezier(fn, elapsed / duration);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein val = from + val[0] * (to - from);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (att in node._node.style || att in Y.DOM.CUSTOM_STYLES) {
unit = unit || '';
node.setStyle(att, val + unit);
} else if (node._node.attributes[att]) {
node.setAttribute(att, val);
} else {
node.set(att, val);
}
},
/**
* The default getter to use when getting object properties.
*
* @property DEFAULT_GETTER
* @static
*/
DEFAULT_GETTER: function(anim, att) {
var node = anim._node,
val = '';
if (att in node._node.style || att in Y.DOM.CUSTOM_STYLES) {
val = node.getComputedStyle(att);
} else if (node._node.attributes[att]) {
val = node.getAttribute(att);
} else {
val = node.get(att);
}
return val;
},
_startTimer: function() {
if (!Transition._timer) {
Transition._timer = setInterval(Transition._runFrame, Transition.intervalTime);
}
},
_stopTimer: function() {
clearInterval(Transition._timer);
Transition._timer = null;
},
/**
* Called per Interval to handle each animation frame.
* @method _runFrame
* @private
* @static
*/
_runFrame: function() {
var done = true,
anim;
for (anim in Transition._running) {
if (Transition._running[anim]._runFrame) {
done = false;
Transition._running[anim]._runFrame();
}
}
if (done) {
Transition._stopTimer();
}
},
cubicBezier: function(p, t) {
var x0 = 0,
y0 = 0,
x1 = p[0],
y1 = p[1],
x2 = p[2],
y2 = p[3],
x3 = 1,
y3 = 0,
A = x3 - 3 * x2 + 3 * x1 - x0,
B = 3 * x2 - 6 * x1 + 3 * x0,
C = 3 * x1 - 3 * x0,
D = x0,
E = y3 - 3 * y2 + 3 * y1 - y0,
F = 3 * y2 - 6 * y1 + 3 * y0,
G = 3 * y1 - 3 * y0,
H = y0,
x = (((A*t) + B)*t + C)*t + D,
y = (((E*t) + F)*t + G)*t + H;
return [x, y];
},
easings: {
ease: [0.25, 0, 1, 0.25],
linear: [0, 0, 1, 1],
'ease-in': [0.42, 0, 1, 1],
'ease-out': [0, 0, 0.58, 1],
'ease-in-out': [0.42, 0, 0.58, 1]
},
_running: {},
_timer: null,
RE_UNITS: /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/
}, true);
Transition.behaviors.top = Transition.behaviors.bottom = Transition.behaviors.right = Transition.behaviors.left;
Y.Transition = Transition;
}, '@VERSION@' ,{requires:['transition-native', 'node-style']});