src/tweene.js
function transformMapping(name, value)
{
    var easing, dirs = ['X', 'Y', 'Z'], values = {}, parts, baseName;
    if(isArray(value))
    {
        value = value[0];
        easing = value[1];
    }
    else
    {
        easing = null;
    }

    parts = String(value).split(/\s*,\s*/);
    baseName = name.indexOf('3') !== -1? name.substr(0, name.length - 2) : name;

    if(name == 'rotate3d')
    {
        if(parts.length == 4)
        {
            dirs = [parts[0] == '1'? 'X' : (parts[1] == '1'? 'Y' : 'Z')];
            parts[0] = parts[3];
        }
        else
        {
            throw 'invalid rotate 3d value';
        }
    }
    else
    {
        switch(parts.length)
        {
            // for rotations, a single value is passed as Z-value, while for other transforms it is applied to X and Y
            case 1:
                parts = baseName == 'rotate' || baseName == 'rotation'? [null, null, parts[0]] : [parts[0], parts[0], null];
            break;

            case 2:
                parts = [parts[0], parts[1], null];
            break;
        }

    }

    for(var i = 0; i < dirs.length; i++)
    {
        if(parts[i] !== null)
        {
            values[baseName + dirs[i]] = easing? [parts[i], easing] : parts[i];
        }
    }
    return values;
}
function transformMapping(name, value)
{
    var easing, dirs = ['X', 'Y', 'Z'], values = {}, parts, baseName;
    if(isArray(value))
    {
        value = value[0];
        easing = value[1];
    }
    else
    {
        easing = null;
    }

    parts = String(value).split(/\s*,\s*/);
    baseName = name.indexOf('3') !== -1? name.substr(0, name.length - 2) : name;

    if(name == 'rotate3d')
    {
        if(parts.length == 4)
        {
            dirs = [parts[0] == '1'? 'X' : (parts[1] == '1'? 'Y' : 'Z')];
            parts[0] = parts[3];
        }
        else
        {
            throw 'invalid rotate 3d value';
        }
    }
    else
    {
        switch(parts.length)
        {
            // for rotations, a single value is passed as Z-value, while for other transforms it is applied to X and Y
            case 1:
                parts = baseName == 'rotate' || baseName == 'rotation'? [null, null, parts[0]] : [parts[0], parts[0], null];
            break;

            case 2:
                parts = [parts[0], parts[1], null];
            break;
        }

    }

    for(var i = 0; i < dirs.length; i++)
    {
        if(parts[i] !== null)
        {
            values[baseName + dirs[i]] = easing? [parts[i], easing] : parts[i];
        }
    }
    return values;
}
function transformMapping ( name , value ) { var easing , dirs = [ 'X' , 'Y' , 'Z' ] , values = { } , parts , baseName ; if ( isArray ( value ) ) { value = value [ 0 ] ; easing = value [ 1 ] ; } else { easing = null ; } parts = String ( value ) . split ( / \s*,\s* / ) ; baseName = name . indexOf ( '3' ) !== - 1 ? name . substr ( 0 , name . length - 2 ) : name ; if ( name == 'rotate3d' ) { if ( parts . length == 4 ) { dirs = [ parts [ 0 ] == '1' ? 'X' : ( parts [ 1 ] == '1' ? 'Y' : 'Z' ) ] ; parts [ 0 ] = parts [ 3 ] ; } else { throw 'invalid rotate 3d value' ; } } else { switch ( parts . length ) { // for rotations, a single value is passed as Z-value, while for other transforms it is applied to X and Y case 1 : parts = baseName == 'rotate' || baseName == 'rotation' ? [ null , null , parts [ 0 ] ] : [ parts [ 0 ] , parts [ 0 ] , null ] ; break ; case 2 : parts = [ parts [ 0 ] , parts [ 1 ] , null ] ; break ; } } for ( var i = 0 ; i < dirs . length ; i ++ ) { if ( parts [ i ] !== null ) { values [ baseName + dirs [ i ] ] = easing ? [ parts [ i ] , easing ] : parts [ i ] ; } } return values ; }
split commpound transform values

scale: 1.2 => scaleX: 1.2, scaleY: 1.2
rotate3d: 30, 60, 40 => rotateX: 30, rotateY: 60, rotateZ: 40

@param {string} name
@param {string} value
@returns {object}
split commpound transform values