src/cm/media/js/lib/yui/yui_3.10.3/build/transition/transition.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('transition', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
* Provides the transition method for Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
* Transition has no API of its own, but adds the transition method to Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
* @module transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
* @requires node-style
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
var CAMEL_VENDOR_PREFIX = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    VENDOR_PREFIX = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    DOCUMENT_STYLE = DOCUMENT[DOCUMENT_ELEMENT].style,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    TRANSITION_CAMEL = 'transition',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    TRANSITION_PROPERTY_CAMEL = 'transitionProperty',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
    TRANSITION_PROPERTY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
    TRANSITION_DURATION,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    TRANSITION_TIMING_FUNCTION,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
    TRANSITION_DELAY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    TRANSITION_END,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    ON_TRANSITION_END,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    EMPTY_OBJ = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    VENDORS = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
        'Webkit',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
        'Moz'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    VENDOR_TRANSITION_END = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
        Webkit: 'webkitTransitionEnd'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
 * A class for constructing transition instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
 * Adds the "transition" method to Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
 * @class Transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
Transition = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    this.init.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
// One off handling of transform-prefixing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
Transition._TRANSFORM = 'transform';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
Transition._toCamel = function(property) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    property = property.replace(/-([a-z])/gi, function(m0, m1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
        return m1.toUpperCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    return property;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
Transition._toHyphen = function(property) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    property = property.replace(/([A-Z]?)([a-z]+)([A-Z]?)/g, function(m0, m1, m2, m3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        var str = ((m1) ? '-' + m1.toLowerCase() : '') + m2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
        if (m3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
            str += '-' + m3.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
        return str;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    return property;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
Transition.SHOW_TRANSITION = 'fadeIn';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
Transition.HIDE_TRANSITION = 'fadeOut';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
Transition.useNative = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
// Map transition properties to vendor-specific versions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
if ('transition' in DOCUMENT_STYLE 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    && 'transitionProperty' in DOCUMENT_STYLE 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    && 'transitionDuration' in DOCUMENT_STYLE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    && 'transitionTimingFunction' in DOCUMENT_STYLE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    && 'transitionDelay' in DOCUMENT_STYLE) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    Transition.useNative = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
    Transition.supported = true; // TODO: remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
} else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    Y.Array.each(VENDORS, function(val) { // then vendor specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
        var property = val + 'Transition';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
        if (property in DOCUMENT[DOCUMENT_ELEMENT].style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
            CAMEL_VENDOR_PREFIX = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
            VENDOR_PREFIX       = Transition._toHyphen(val) + '-';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
            Transition.useNative = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
            Transition.supported = true; // TODO: remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
            Transition._VENDOR_PREFIX = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
// Map transform property to vendor-specific versions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
// One-off required for cssText injection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
if (typeof DOCUMENT_STYLE.transform === 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    Y.Array.each(VENDORS, function(val) { // then vendor specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
        var property = val + 'Transform';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
        if (typeof DOCUMENT_STYLE[property] !== 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
            Transition._TRANSFORM = property;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
if (CAMEL_VENDOR_PREFIX) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
    TRANSITION_CAMEL          = CAMEL_VENDOR_PREFIX + 'Transition';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    TRANSITION_PROPERTY_CAMEL = CAMEL_VENDOR_PREFIX + 'TransitionProperty';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
TRANSITION_PROPERTY        = VENDOR_PREFIX + 'transition-property';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
TRANSITION_DURATION        = VENDOR_PREFIX + 'transition-duration';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
TRANSITION_TIMING_FUNCTION = VENDOR_PREFIX + 'transition-timing-function';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
TRANSITION_DELAY           = VENDOR_PREFIX + 'transition-delay';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
TRANSITION_END    = 'transitionend';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
ON_TRANSITION_END = 'on' + CAMEL_VENDOR_PREFIX.toLowerCase() + 'transitionend';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
TRANSITION_END    = VENDOR_TRANSITION_END[CAMEL_VENDOR_PREFIX] || TRANSITION_END;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
Transition.fx = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
Transition.toggles = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
Transition._hasEnd = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
Transition._reKeywords = /^(?:node|duration|iterations|easing|delay|on|onstart|onend)$/i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
Y.Node.DOM_EVENTS[TRANSITION_END] = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
Transition.NAME = 'transition';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
Transition.DEFAULT_EASING = 'ease';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
Transition.DEFAULT_DURATION = 0.5;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
Transition.DEFAULT_DELAY = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
Transition._nodeAttrs = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
Transition.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
    constructor: Transition,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
    init: function(node, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
        var anim = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
        anim._node = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
        if (!anim._running && config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
            anim._config = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
            node._transition = anim; // cache for reuse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
            anim._duration = ('duration' in config) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
                config.duration: anim.constructor.DEFAULT_DURATION;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
            anim._delay = ('delay' in config) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
                config.delay: anim.constructor.DEFAULT_DELAY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
            anim._easing = config.easing || anim.constructor.DEFAULT_EASING;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
            anim._count = 0; // track number of animated properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            anim._running = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
        return anim;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    addProperty: function(prop, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
            node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            uid = Y.stamp(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
            nodeInstance = Y.one(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
            computed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
            compareVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
            dur,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
            attr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
            val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
        if (!attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
            attrs = Transition._nodeAttrs[uid] = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
        attr = attrs[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
        // might just be a value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
        if (config && config.value !== undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
            val = config.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
        } else if (config !== undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
            val = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
            config = EMPTY_OBJ;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        if (typeof val === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
            val = val.call(nodeInstance, nodeInstance);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
        if (attr && attr.transition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
            // take control if another transition owns this property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
            if (attr.transition !== anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
                attr.transition._count--; // remapping attr to this transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
        anim._count++; // properties per transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        // make 0 async and fire events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        dur = ((typeof config.duration !== 'undefined') ? config.duration :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
                    anim._duration) || 0.0001;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
        attrs[prop] = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
            value: val,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
            duration: dur,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            delay: (typeof config.delay !== 'undefined') ? config.delay :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                    anim._delay,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
            easing: config.easing || anim._easing,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
            transition: anim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
        // native end event doesnt fire when setting to same value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
        // supplementing with timer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
        // val may be a string or number (height: 0, etc), but computedStyle is always string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
        computed = Y.DOM.getComputedStyle(node, prop);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
        compareVal = (typeof val === 'string') ? computed : parseFloat(computed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
        if (Transition.useNative && compareVal === val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
            setTimeout(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
                anim._onNativeEnd.call(node, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
                    propertyName: prop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
                    elapsedTime: dur
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
            }, dur * 1000);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    removeProperty: function(prop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
            attrs = Transition._nodeAttrs[Y.stamp(anim._node)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
        if (attrs && attrs[prop]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
            delete attrs[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
            anim._count--;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    initAttrs: function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        var attr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
            node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
        if (config.transform && !config[Transition._TRANSFORM]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
            config[Transition._TRANSFORM] = config.transform;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
            delete config.transform; // TODO: copy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
        for (attr in config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
            if (config.hasOwnProperty(attr) && !Transition._reKeywords.test(attr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
                this.addProperty(attr, config[attr]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
                // when size is auto or % webkit starts from zero instead of computed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
                // (https://bugs.webkit.org/show_bug.cgi?id=16020)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
                // TODO: selective set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
                if (node.style[attr] === '') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
                    Y.DOM.setStyle(node, attr, Y.DOM.getComputedStyle(node, attr));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
     * Starts or an animation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
     * @method run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
    run: function(callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
            node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
            config = anim._config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
            data = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
                type: 'transition:start',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
                config: config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
        if (!anim._running) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
            anim._running = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
            if (config.on && config.on.start) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
                config.on.start.call(Y.one(node), data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
            anim.initAttrs(anim._config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
            anim._callback = callback;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
            anim._start();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
        return anim;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    _start: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
        this._runNative();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    _prepDur: function(dur) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
        dur = parseFloat(dur) * 1000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
        return dur + 'ms';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
    _runNative: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
            node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
            uid = Y.stamp(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
            style = node.style,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
            computed = node.ownerDocument.defaultView.getComputedStyle(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
            cssText = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
            cssTransition = computed[Transition._toCamel(TRANSITION_PROPERTY)],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
            transitionText = TRANSITION_PROPERTY + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
            duration = TRANSITION_DURATION + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
            easing = TRANSITION_TIMING_FUNCTION + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
            delay = TRANSITION_DELAY + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
            hyphy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
            attr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
            name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
        // preserve existing transitions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
        if (cssTransition !== 'all') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
            transitionText += cssTransition + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
            duration += computed[Transition._toCamel(TRANSITION_DURATION)] + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
            easing += computed[Transition._toCamel(TRANSITION_TIMING_FUNCTION)] + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
            delay += computed[Transition._toCamel(TRANSITION_DELAY)] + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
        // run transitions mapped to this instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
        for (name in attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
            hyphy = Transition._toHyphen(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
            attr = attrs[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
            if ((attr = attrs[name]) && attr.transition === anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
                if (name in node.style) { // only native styles allowed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
                    duration += anim._prepDur(attr.duration) + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
                    delay += anim._prepDur(attr.delay) + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
                    easing += (attr.easing) + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
                    transitionText += hyphy + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
                    cssText += hyphy + ': ' + attr.value + '; ';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
                    this.removeProperty(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
        transitionText = transitionText.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
        duration = duration.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
        easing = easing.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
        delay = delay.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
        // only one native end event per node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
        if (!Transition._hasEnd[uid]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
            node.addEventListener(TRANSITION_END, anim._onNativeEnd, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
            Transition._hasEnd[uid] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        style.cssText += transitionText + duration + easing + delay + cssText;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
    _end: function(elapsed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
            node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
            callback = anim._callback,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
            config = anim._config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
            data = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
                type: 'transition:end',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
                config: config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
                elapsedTime: elapsed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
            nodeInstance = Y.one(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
        anim._running = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
        anim._callback = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
            if (config.on && config.on.end) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
                setTimeout(function() { // IE: allow previous update to finish
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
                    config.on.end.call(nodeInstance, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
                    // nested to ensure proper fire order
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
                    if (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
                        callback.call(nodeInstance, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
                }, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
            } else if (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
                setTimeout(function() { // IE: allow previous update to finish
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
                    callback.call(nodeInstance, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
                }, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    _endNative: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
        var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
            value = node.ownerDocument.defaultView.getComputedStyle(node, '')[Transition._toCamel(TRANSITION_PROPERTY)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
        name = Transition._toHyphen(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
        if (typeof value === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
            value = value.replace(new RegExp('(?:^|,\\s)' + name + ',?'), ',');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
            value = value.replace(/^,|,$/, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
            node.style[TRANSITION_CAMEL] = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    _onNativeEnd: function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
        var node = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
            uid = Y.stamp(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
            event = e,//e._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
            name = Transition._toCamel(event.propertyName),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
            elapsed = event.elapsedTime,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
            attr = attrs[name],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
            anim = (attr) ? attr.transition : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
            data,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
            config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
        if (anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
            anim.removeProperty(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
            anim._endNative(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
            config = anim._config[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
            data = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
                type: 'propertyEnd',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
                propertyName: name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
                elapsedTime: elapsed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
                config: config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
            if (config && config.on && config.on.end) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
                config.on.end.call(Y.one(node), data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
            if (anim._count <= 0)  { // after propertyEnd fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
                anim._end(elapsed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
                node.style[TRANSITION_PROPERTY_CAMEL] = ''; // clean up style
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
    destroy: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
            node = anim._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
            node.removeEventListener(TRANSITION_END, anim._onNativeEnd, false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
            anim._node = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
Y.Transition = Transition;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
Y.TransitionNative = Transition; // TODO: remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
 *   Animate one or more css properties to a given value. Requires the "transition" module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
 *   <pre>example usage:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
 *       Y.one('#demo').transition({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
 *           duration: 1, // in seconds, default is 0.5
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
 *           easing: 'ease-out', // default is 'ease'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
 *           delay: '1', // delay start for 1 second, default is 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
 *           height: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
 *           width: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
 *           opacity: { // per property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
 *               value: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
 *               duration: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
 *               delay: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
 *               easing: 'ease-in'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
 *           }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
 *       });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
 *   </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
 *   @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
 *   @method transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
 *   @param {Object} config An object containing one or more style properties, a duration and an easing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
 *   @param {Function} callback A function to run after the transition has completed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
 *   @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
Y.Node.prototype.transition = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
    var
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
        transitionAttrs = Transition._nodeAttrs[Y.stamp(this._node)],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
        anim = (transitionAttrs) ? transitionAttrs.transition || null : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
        fxConfig,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
        prop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
    if (typeof name === 'string') { // named effect, pull config from registry
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
        if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
            callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
            config = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
        fxConfig = Transition.fx[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
        if (config && typeof config !== 'boolean') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
            config = Y.clone(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
            for (prop in fxConfig) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
                if (fxConfig.hasOwnProperty(prop)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
                    if (! (prop in config)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
                        config[prop] = fxConfig[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
            config = fxConfig;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
    } else { // name is a config, config is a callback or undefined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
        callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
        config = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
    if (anim && !anim._running) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
        anim.init(this, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
        anim = new Transition(this._node, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    anim.run(callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
Y.Node.prototype.show = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    this._show(); // show prior to transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
    if (name && Y.Transition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
        if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
            if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
                callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
                config = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
            name = Transition.SHOW_TRANSITION;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
        this.transition(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
Y.NodeList.prototype.show = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
        Y.one(node).show(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
var _wrapCallBack = function(anim, fn, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
    return function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
        if (fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
            fn.call(anim);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
        if (callback && typeof callback === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
            callback.apply(anim._node, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
Y.Node.prototype.hide = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
    if (name && Y.Transition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
        if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
            callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
            config = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
        callback = _wrapCallBack(this, this._hide, callback); // wrap with existing callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
        if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
            if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
                callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
                config = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
            name = Transition.HIDE_TRANSITION;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
        this.transition(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
        this._hide();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
Y.NodeList.prototype.hide = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
        Y.one(node).hide(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
 *   Animate one or more css properties to a given value. Requires the "transition" module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
 *   <pre>example usage:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
 *       Y.all('.demo').transition({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
 *           duration: 1, // in seconds, default is 0.5
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
 *           easing: 'ease-out', // default is 'ease'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
 *           delay: '1', // delay start for 1 second, default is 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
 *           height: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
 *           width: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
 *           opacity: { // per property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
 *               value: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
 *               duration: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
 *               delay: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
 *               easing: 'ease-in'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
 *           }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
 *       });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
 *   </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
 *   @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
 *   @method transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
 *   @param {Object} config An object containing one or more style properties, a duration and an easing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
 *   @param {Function} callback A function to run after the transition has completed. The callback fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
 *       once per item in the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
 *   @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
Y.NodeList.prototype.transition = function(config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
        Y.one(node).transition(config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
Y.Node.prototype.toggleView = function(name, on, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
    this._toggles = this._toggles || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
    callback = arguments[arguments.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
    if (typeof name !== 'string') { // no transition, just toggle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
        on = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
        this._toggleView(on, callback); // call original _toggleView in Y.Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
        return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
    if (typeof on === 'function') { // Ignore "on" if used for callback argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
        on = undefined;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
    if (typeof on === 'undefined' && name in this._toggles) { // reverse current toggle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
        on = ! this._toggles[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
    on = (on) ? 1 : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
    if (on) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
        this._show();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
    }  else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
        callback = _wrapCallBack(this, this._hide, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
    this._toggles[name] = on;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
    this.transition(Y.Transition.toggles[name][on], callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
Y.NodeList.prototype.toggleView = function(name, on, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
        node = Y.one(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
        node.toggleView.apply(node, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
Y.mix(Transition.fx, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
    fadeOut: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
        opacity: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
        duration: 0.5,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
        easing: 'ease-out'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
    fadeIn: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
        opacity: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
        duration: 0.5,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
        easing: 'ease-in'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
    sizeOut: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
        height: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
        width: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
        duration: 0.75,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
        easing: 'ease-out'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
    sizeIn: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
        height: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
            return node.get('scrollHeight') + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
        width: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
            return node.get('scrollWidth') + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
        duration: 0.5,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
        easing: 'ease-in',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
        on: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
            start: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
                var overflow = this.getStyle('overflow');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
                if (overflow !== 'hidden') { // enable scrollHeight/Width
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
                    this.setStyle('overflow', 'hidden');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
                    this._transitionOverflow = overflow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
            end: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
                if (this._transitionOverflow) { // revert overridden value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
                    this.setStyle('overflow', this._transitionOverflow);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
                    delete this._transitionOverflow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
Y.mix(Transition.toggles, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
    size: ['sizeOut', 'sizeIn'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
    fade: ['fadeOut', 'fadeIn']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
}, '3.10.3', {"requires": ["node-style"]});