src/cm/media/js/lib/yui/yui3.0.0/build/anim/anim-base-debug.js
author raph
Mon, 23 Nov 2009 15:14:29 +0100
changeset 0 40c8f766c9b8
permissions -rw-r--r--
import from internal svn r 4007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('anim-base', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
* The Animation Utility provides an API for creating advanced transitions.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
* @module anim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
* Provides the base Anim class, for animating numeric properties.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
* @module anim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
* @submodule anim-base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
     * A class for constructing animation instances.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
     * @class Anim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
     * @for Anim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
     * @extends Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    var RUNNING = 'running',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        START_TIME = 'startTime',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        ELAPSED_TIME = 'elapsedTime',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        * @for Anim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        * @event start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        * @description fires when an animation begins.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        * @param {Event} ev The start event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        * @type Event.Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        START = 'start',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        * @event tween
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        * @description fires every frame of the animation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        * @param {Event} ev The tween event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        * @type Event.Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        TWEEN = 'tween',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        * @event end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        * @description fires after the animation completes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        * @param {Event} ev The end event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        * @type Event.Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        END = 'end',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        NODE = 'node',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        PAUSED = 'paused',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        REVERSE = 'reverse', // TODO: cleanup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        ITERATION_COUNT = 'iterationCount',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        NUM = Number;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
    var _running = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        _instances = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        _timer;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    Y.Anim = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        Y.Anim.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        _instances[Y.stamp(this)] = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
    Y.Anim.NAME = 'anim';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
     * Regex of properties that should use the default unit.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
     * @property RE_DEFAULT_UNIT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
    Y.Anim.RE_DEFAULT_UNIT = /^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
     * The default unit to use with properties that pass the RE_DEFAULT_UNIT test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
     * @property DEFAULT_UNIT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    Y.Anim.DEFAULT_UNIT = 'px';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
    Y.Anim.DEFAULT_EASING = function (t, b, c, d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
        return c * t / d + b; // linear easing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
     * Bucket for custom getters and setters
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
     * @property behaviors
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
    Y.Anim.behaviors = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
        left: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
            get: function(anim, attr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
                return anim._getOffset(attr);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
    Y.Anim.behaviors.top = Y.Anim.behaviors.left;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
     * The default setter to use when setting object properties.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
     * @property DEFAULT_SETTER
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
    Y.Anim.DEFAULT_SETTER = function(anim, att, from, to, elapsed, duration, fn, unit) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        unit = unit || '';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        anim._node.setStyle(att, fn(elapsed, NUM(from), NUM(to) - NUM(from), duration) + unit);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
     * The default getter to use when getting object properties.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
     * @property DEFAULT_GETTER
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
    Y.Anim.DEFAULT_GETTER = function(anim, prop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
        return anim._node.getComputedStyle(prop);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
    Y.Anim.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
         * The object to be animated.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
         * @attribute node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
         * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
        node: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
            setter: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
                node = Y.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
                this._node = node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
                if (!node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
                    Y.log(node + ' is not a valid node', 'warn', 'Anim');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
                return node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
         * The length of the animation.  Defaults to "1" (second).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
         * @attribute duration
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
         * @type NUM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
        duration: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
            value: 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
         * The method that will provide values to the attribute(s) during the animation. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
         * Defaults to "Easing.easeNone".
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
         * @attribute easing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
         * @type Function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
        easing: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
            value: Y.Anim.DEFAULT_EASING,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
            setter: function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
                if (typeof val === 'string' && Y.Easing) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
                    return Y.Easing[val];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
         * The starting values for the animated properties. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
         * Fields may be strings, numbers, or functions.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
         * If a function is used, the return value becomes the from value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
         * If no from value is specified, the DEFAULT_GETTER will be used. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
         * @attribute from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
         * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
        from: {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
         * The ending values for the animated properties. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
         * Fields may be strings, numbers, or functions.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
         * @attribute to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
         * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        to: {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
         * Date stamp for the first frame of the animation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
         * @attribute startTime
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
         * @type Int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
         * @default 0 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
         * @readOnly
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
        startTime: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
            value: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
            readOnly: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
         * Current time the animation has been running.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
         * @attribute elapsedTime
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
         * @type Int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
         * @default 0 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
         * @readOnly
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
        elapsedTime: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
            value: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
            readOnly: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
         * Whether or not the animation is currently running.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
         * @attribute running 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
         * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
         * @default false 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
         * @readOnly
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
        running: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
            getter: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
                return !!_running[Y.stamp(this)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
            readOnly: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
         * The number of times the animation should run 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
         * @attribute iterations
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
         * @type Int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
         * @default 1 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
        iterations: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
            value: 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
         * The number of iterations that have occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
         * Resets when an animation ends (reaches iteration count or stop() called). 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
         * @attribute iterationCount
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
         * @type Int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
         * @default 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
         * @readOnly
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
        iterationCount: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
            value: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
            readOnly: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
         * How iterations of the animation should behave. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
         * Possible values are "normal" and "alternate".
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
         * Normal will repeat the animation, alternate will reverse on every other pass.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
         * @attribute direction
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
         * @default "normal"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
        direction: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
            value: 'normal' // | alternate (fwd on odd, rev on even per spec)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
         * Whether or not the animation is currently paused.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
         * @attribute paused 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
         * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
         * @default false 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
         * @readOnly
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
        paused: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
            readOnly: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
         * If true, animation begins from last frame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
         * @attribute reverse
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
         * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
         * @default false 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
        reverse: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
     * Runs all animation instances.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
     * @method run
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
     */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
    Y.Anim.run = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
        for (var i in _instances) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
            if (_instances[i].run) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
                _instances[i].run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
     * Pauses all animation instances.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
     * @method pause
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
     */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
    Y.Anim.pause = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
        for (var i in _running) { // stop timer if nothing running
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
            if (_running[i].pause) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
                _running[i].pause();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
        Y.Anim._stopTimer();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
     * Stops all animation instances.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
     * @method stop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
     */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
    Y.Anim.stop = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
        for (var i in _running) { // stop timer if nothing running
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
            if (_running[i].stop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
                _running[i].stop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
        Y.Anim._stopTimer();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
    Y.Anim._startTimer = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
        if (!_timer) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
            _timer = setInterval(Y.Anim._runFrame, 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
    Y.Anim._stopTimer = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
        clearInterval(_timer);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
        _timer = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
     * Called per Interval to handle each animation frame.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
     * @method _runFrame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
     */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
    Y.Anim._runFrame = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
        var done = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
        for (var anim in _running) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
            if (_running[anim]._runFrame) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
                done = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
                _running[anim]._runFrame();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
        if (done) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
            Y.Anim._stopTimer();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
    Y.Anim.RE_UNITS = /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
    var proto = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
         * Starts or resumes an animation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
         * percent start time marker.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
         * @method run
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
         * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
        run: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
            if (!this.get(RUNNING)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
                this._start();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
            } else if (this.get(PAUSED)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
                this._resume();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
         * Pauses the animation and
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
         * freezes it in its current state and time.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
         * Calling run() will continue where it left off.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
         * @method pause
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
         * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
        pause: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
            if (this.get(RUNNING)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
                this._pause();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
         * Stops the animation and resets its time.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
         * @method stop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
         * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
        stop: function(finish) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
            if (this.get(RUNNING) || this.get(PAUSED)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
                this._end(finish);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
        _added: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
        _start: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
            this._set(START_TIME, new Date() - this.get(ELAPSED_TIME));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
            this._actualFrames = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
            if (!this.get(PAUSED)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
                this._initAnimAttr();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
            _running[Y.stamp(this)] = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
            Y.Anim._startTimer();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
            this.fire(START);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
        _pause: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
            this._set(START_TIME, null);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
            this._set(PAUSED, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
            delete _running[Y.stamp(this)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
            * @event pause
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
            * @description fires when an animation is paused.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
            * @param {Event} ev The pause event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
            * @type Event.Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
            */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
            this.fire('pause');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
        _resume: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
            this._set(PAUSED, false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
            _running[Y.stamp(this)] = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
            * @event resume
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
            * @description fires when an animation is resumed (run from pause).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
            * @param {Event} ev The pause event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
            * @type Event.Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
            */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
            this.fire('resume');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
        _end: function(finish) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
            this._set(START_TIME, null);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
            this._set(ELAPSED_TIME, 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
            this._set(PAUSED, false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
            delete _running[Y.stamp(this)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
            this.fire(END, {elapsed: this.get(ELAPSED_TIME)});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
        _runFrame: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
            var attr = this._runtimeAttr,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
                customAttr = Y.Anim.behaviors,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
                easing = attr.easing,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
                d = attr.duration,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
                t = new Date() - this.get(START_TIME),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
                reversed = this.get(REVERSE),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
                done = (t >= d),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
                lastFrame = d,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
                attribute,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
                setter;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
            if (reversed) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
                t = d - t;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
                done = (t <= 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
                lastFrame = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
            for (var i in attr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
                if (attr[i].to) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
                    attribute = attr[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
                    setter = (i in customAttr && 'set' in customAttr[i]) ?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
                            customAttr[i].set : Y.Anim.DEFAULT_SETTER;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
                    if (!done) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
                        setter(this, i, attribute.from, attribute.to, t, d, easing, attribute.unit); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
                    } else { // ensure final frame value is set
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
                       // TODO: handle keyframes 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
                        setter(this, i, attribute.from, attribute.to, lastFrame, d, easing, attribute.unit); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   488
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   491
            this._actualFrames += 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   492
            this._set(ELAPSED_TIME, t);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   493
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   494
            this.fire(TWEEN);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   495
            if (done) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   496
                this._lastFrame();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   497
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   498
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   499
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   500
        _lastFrame: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   501
            var iter = this.get('iterations'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   502
                iterCount = this.get(ITERATION_COUNT);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   503
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   504
            iterCount += 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   505
            if (iter === 'infinite' || iterCount < iter) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   506
                if (this.get('direction') === 'alternate') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   507
                    this.set(REVERSE, !this.get(REVERSE)); // flip it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   508
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   509
                /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   510
                * @event iteration
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   511
                * @description fires when an animation begins an iteration.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   512
                * @param {Event} ev The iteration event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   513
                * @type Event.Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   514
                */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   515
                this.fire('iteration');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   516
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   517
                iterCount = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   518
                this._end();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   519
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   520
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   521
            this._set(START_TIME, new Date());
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   522
            this._set(ITERATION_COUNT, iterCount);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   523
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   524
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   525
        _initAnimAttr: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   526
            var from = this.get('from') || {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   527
                to = this.get('to') || {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   528
                dur = this.get('duration') * 1000,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   529
                node = this.get(NODE),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   530
                easing = this.get('easing') || {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   531
                attr = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   532
                customAttr = Y.Anim.behaviors,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   533
                unit, begin, end;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   534
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   535
            Y.each(to, function(val, name) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   536
                if (typeof val === 'function') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   537
                    val = val.call(this, node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   538
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   539
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   540
                begin = from[name];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   541
                if (begin === undefined) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   542
                    begin = (name in customAttr && 'get' in customAttr[name])  ?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   543
                            customAttr[name].get(this, name) : Y.Anim.DEFAULT_GETTER(this, name);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   544
                } else if (typeof begin === 'function') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   545
                    begin = begin.call(this, node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   546
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   547
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   548
                var mFrom = Y.Anim.RE_UNITS.exec(begin);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   549
                var mTo = Y.Anim.RE_UNITS.exec(val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   550
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   551
                begin = mFrom ? mFrom[1] : begin;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   552
                end = mTo ? mTo[1] : val;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   553
                unit = mTo ? mTo[2] : mFrom ?  mFrom[2] : ''; // one might be zero TODO: mixed units
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   554
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   555
                if (!unit && Y.Anim.RE_DEFAULT_UNIT.test(name)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   556
                    unit = Y.Anim.DEFAULT_UNIT;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   557
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   558
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   559
                if (!begin || !end) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   560
                    Y.error('invalid "from" or "to" for "' + name + '"', 'Anim');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   561
                    return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   562
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   563
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   564
                attr[name] = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   565
                    from: begin,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   566
                    to: end,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   567
                    unit: unit
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   568
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   569
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   570
                attr.duration = dur;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   571
                attr.easing = easing;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   572
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   573
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   574
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   575
            this._runtimeAttr = attr;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   576
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   577
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   578
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   579
        // TODO: move to computedStyle? (browsers dont agree on default computed offsets)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   580
        _getOffset: function(attr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   581
            var node = this._node,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   582
                val = node.getComputedStyle(attr),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   583
                get = (attr === 'left') ? 'getX': 'getY',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   584
                set = (attr === 'left') ? 'setX': 'setY';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   585
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   586
            if (val === 'auto') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   587
                var position = node.getStyle('position');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   588
                if (position === 'absolute' || position === 'fixed') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   589
                    val = node[get]();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   590
                    node[set](val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   591
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   592
                    val = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   593
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   594
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   595
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   596
            return val;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   597
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   598
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   599
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   600
    Y.extend(Y.Anim, Y.Base, proto);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   601
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   602
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   603
}, '3.0.0' ,{requires:['base-base', 'node-style']});