src/tweene.js
function compoundMapping(name, value)
{
    var parts, nameParts, prefix, suffix, dirs, values = {}, easing, i;
    if(isArray(value))
    {
        value = value[0];
        easing = value[1];
    }
    else
    {
        easing = null;
    }

    parts = String(value).split(/\s+/);

    switch(parts.length)
    {
        case 1: parts = [parts[0], parts[0], parts[0], parts[0]]; break;
        case 2: parts = [parts[0], parts[1], parts[0], parts[1]]; break;
        case 3: parts = [parts[0], parts[1], parts[2], parts[1]]; break;
    }

    nameParts = decamelize(name).split('-');
    prefix = nameParts[0];
    suffix = nameParts.length > 1? nameParts[1].substr(0, 1).toUpperCase() + nameParts[1].substr(1) : '';

    dirs = name == 'borderRadius'? radiusDirections : compoundDirections;

    for(i = 0; i < 4; i++)
    {
        values[prefix + dirs[i] + suffix] = easing? [parts[i], easing] : parts[i];
    }
    return values;
}
function compoundMapping(name, value)
{
    var parts, nameParts, prefix, suffix, dirs, values = {}, easing, i;
    if(isArray(value))
    {
        value = value[0];
        easing = value[1];
    }
    else
    {
        easing = null;
    }

    parts = String(value).split(/\s+/);

    switch(parts.length)
    {
        case 1: parts = [parts[0], parts[0], parts[0], parts[0]]; break;
        case 2: parts = [parts[0], parts[1], parts[0], parts[1]]; break;
        case 3: parts = [parts[0], parts[1], parts[2], parts[1]]; break;
    }

    nameParts = decamelize(name).split('-');
    prefix = nameParts[0];
    suffix = nameParts.length > 1? nameParts[1].substr(0, 1).toUpperCase() + nameParts[1].substr(1) : '';

    dirs = name == 'borderRadius'? radiusDirections : compoundDirections;

    for(i = 0; i < 4; i++)
    {
        values[prefix + dirs[i] + suffix] = easing? [parts[i], easing] : parts[i];
    }
    return values;
}
function compoundMapping ( name , value ) { var parts , nameParts , prefix , suffix , dirs , values = { } , easing , i ; if ( isArray ( value ) ) { value = value [ 0 ] ; easing = value [ 1 ] ; } else { easing = null ; } parts = String ( value ) . split ( / \s+ / ) ; switch ( parts . length ) { case 1 : parts = [ parts [ 0 ] , parts [ 0 ] , parts [ 0 ] , parts [ 0 ] ] ; break ; case 2 : parts = [ parts [ 0 ] , parts [ 1 ] , parts [ 0 ] , parts [ 1 ] ] ; break ; case 3 : parts = [ parts [ 0 ] , parts [ 1 ] , parts [ 2 ] , parts [ 1 ] ] ; break ; } nameParts = decamelize ( name ) . split ( '-' ) ; prefix = nameParts [ 0 ] ; suffix = nameParts . length > 1 ? nameParts [ 1 ] . substr ( 0 , 1 ) . toUpperCase ( ) + nameParts [ 1 ] . substr ( 1 ) : '' ; dirs = name == 'borderRadius' ? radiusDirections : compoundDirections ; for ( i = 0 ; i < 4 ; i ++ ) { values [ prefix + dirs [ i ] + suffix ] = easing ? [ parts [ i ] , easing ] : parts [ i ] ; } return values ; }
take as input compound properties defined as a space separated string of values and return the list of single value properties

padding: 5 => paddingTop: 5, paddingRight: 5, paddingBottom: 5, paddingLeft: 5
border-width: 2px 1px => borderTopWidth: 2px, borderRightWidth: 1px, borderBottomWidth: 2px, borderLeftWidth: 1px

@param {string} name
@param {string} value
@returns {object}
take as input compound properties defined as a space separated string of values and return the list of single value properties