2828 // except "table", "table-cell", or "table-caption"
2929 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
3030 rdisplayswap = / ^ ( n o n e | t a b l e (? ! - c [ e a ] ) .+ ) / ,
31+ rcustomProp = / ^ - - / ,
3132 cssShow = { position : "absolute" , visibility : "hidden" , display : "block" } ,
3233 cssNormalTransform = {
3334 letterSpacing : "0" ,
@@ -57,6 +58,16 @@ function vendorPropName( name ) {
5758 }
5859}
5960
61+ // Return a property mapped along what jQuery.cssProps suggests or to
62+ // a vendor prefixed property.
63+ function finalPropName ( name ) {
64+ var ret = jQuery . cssProps [ name ] ;
65+ if ( ! ret ) {
66+ ret = jQuery . cssProps [ name ] = vendorPropName ( name ) || name ;
67+ }
68+ return ret ;
69+ }
70+
6071function setPositiveNumber ( elem , value , subtract ) {
6172
6273 // Any relative (+/-) values have already been
@@ -218,10 +229,15 @@ jQuery.extend( {
218229 // Make sure that we're working with the right name
219230 var ret , type , hooks ,
220231 origName = jQuery . camelCase ( name ) ,
232+ isCustomProp = rcustomProp . test ( name ) ,
221233 style = elem . style ;
222234
223- name = jQuery . cssProps [ origName ] ||
224- ( jQuery . cssProps [ origName ] = vendorPropName ( origName ) || origName ) ;
235+ // Make sure that we're working with the right name. We don't
236+ // want to query the value if it is a CSS custom property
237+ // since they are user-defined.
238+ if ( ! isCustomProp ) {
239+ name = finalPropName ( origName ) ;
240+ }
225241
226242 // Gets hook for the prefixed version, then unprefixed version
227243 hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ;
@@ -257,7 +273,11 @@ jQuery.extend( {
257273 if ( ! hooks || ! ( "set" in hooks ) ||
258274 ( value = hooks . set ( elem , value , extra ) ) !== undefined ) {
259275
260- style [ name ] = value ;
276+ if ( isCustomProp ) {
277+ style . setProperty ( name , value ) ;
278+ } else {
279+ style [ name ] = value ;
280+ }
261281 }
262282
263283 } else {
@@ -276,11 +296,15 @@ jQuery.extend( {
276296
277297 css : function ( elem , name , extra , styles ) {
278298 var val , num , hooks ,
279- origName = jQuery . camelCase ( name ) ;
299+ origName = jQuery . camelCase ( name ) ,
300+ isCustomProp = rcustomProp . test ( name ) ;
280301
281- // Make sure that we're working with the right name
282- name = jQuery . cssProps [ origName ] ||
283- ( jQuery . cssProps [ origName ] = vendorPropName ( origName ) || origName ) ;
302+ // Make sure that we're working with the right name. We don't
303+ // want to modify the value if it is a CSS custom property
304+ // since they are user-defined.
305+ if ( ! isCustomProp ) {
306+ name = finalPropName ( origName ) ;
307+ }
284308
285309 // Try prefixed name followed by the unprefixed name
286310 hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ;
@@ -305,6 +329,7 @@ jQuery.extend( {
305329 num = parseFloat ( val ) ;
306330 return extra === true || isFinite ( num ) ? num || 0 : val ;
307331 }
332+
308333 return val ;
309334 }
310335} ) ;
0 commit comments