| 3873 | } |
| 3874 | |
| 3875 | function propFilter( props, specialEasing ) { |
| 3876 | var index, name, easing, value, hooks; |
| 3877 | |
| 3878 | // camelCase, specialEasing and expand cssHook pass |
| 3879 | for ( index in props ) { |
| 3880 | name = jQuery.camelCase( index ); |
| 3881 | easing = specialEasing[ name ]; |
| 3882 | value = props[ index ]; |
| 3883 | if ( jQuery.isArray( value ) ) { |
| 3884 | easing = value[ 1 ]; |
| 3885 | value = props[ index ] = value[ 0 ]; |
| 3886 | } |
| 3887 | |
| 3888 | if ( index !== name ) { |
| 3889 | props[ name ] = value; |
| 3890 | delete props[ index ]; |
| 3891 | } |
| 3892 | |
| 3893 | hooks = jQuery.cssHooks[ name ]; |
| 3894 | if ( hooks && "expand" in hooks ) { |
| 3895 | value = hooks.expand( value ); |
| 3896 | delete props[ name ]; |
| 3897 | |
| 3898 | // not quite $.extend, this wont overwrite keys already present. |
| 3899 | // also - reusing 'index' from above because we have the correct "name" |
| 3900 | for ( index in value ) { |
| 3901 | if ( !( index in props ) ) { |
| 3902 | props[ index ] = value[ index ]; |
| 3903 | specialEasing[ index ] = easing; |
| 3904 | } |
| 3905 | } |
| 3906 | } else { |
| 3907 | specialEasing[ name ] = easing; |
| 3908 | } |
| 3909 | } |
| 3910 | } |
| 3911 | |
| 3912 | function Animation( elem, properties, options ) { |
| 3913 | var result, |