@@ -88,7 +88,7 @@ function ThemeRoller( options ) {
8888 vars = options . vars ;
8989 if ( vars === false || vars === null ) {
9090 this . isNull = true ;
91- this . vars = { } ;
91+ vars = { } ;
9292 return ;
9393 } else if ( vars ) {
9494 vars = { ...vars } ;
@@ -115,13 +115,24 @@ function ThemeRoller( options ) {
115115 }
116116 oldImagesBackCompat ( vars || { } ) ;
117117 this . serializedVars = querystring . stringify ( vars ) ;
118- vars = this . vars = Object . assign ( { } , ThemeRoller . defaults , vars ) ;
118+ vars = this . vars = {
119+ ...ThemeRoller . defaults ,
120+ ...vars
121+ } ;
119122 this . images = [ ] ;
120123
121- // Opacity fix
122- // TODO: Remove `filter` style when dropping support for IE8 and earlier.
123- vars . opacityOverlayPerc = vars . opacityOverlay ;
124- vars . opacityShadowPerc = vars . opacityShadow ;
124+ // Opacity fix.
125+ // ThemeRoller sometimes gets post-processed `vars` in `options`,
126+ // e.g. in `buildPackages` in `Gruntfile.js`. To avoid dividing
127+ // `opacityOverlay` by 100 twice, resulting in invalid values,
128+ // record original percentage values with the `Perc` suffix and
129+ // use those for computation inputs.
130+ if ( ! ( "opacityOverlayPerc" in vars ) ) {
131+ vars . opacityOverlayPerc = vars . opacityOverlay ;
132+ }
133+ if ( ! ( "opacityShadowPerc" in vars ) ) {
134+ vars . opacityShadowPerc = vars . opacityShadow ;
135+ }
125136 if ( semver . lt ( this . jqueryUi . pkg . version , "1.13.0-a" ) ) {
126137
127138 // For version <1.13.0, `filter` has its own separate line
@@ -134,8 +145,8 @@ function ThemeRoller( options ) {
134145 } ;
135146 vars . opacityFilterOverlay = opacityFilter ( vars . opacityOverlay ) ;
136147 vars . opacityFilterShadow = opacityFilter ( vars . opacityShadow ) ;
137- vars . opacityOverlay = opacityFix ( vars . opacityOverlay ) ;
138- vars . opacityShadow = opacityFix ( vars . opacityShadow ) ;
148+ vars . opacityOverlay = opacityFix ( vars . opacityOverlayPerc ) ;
149+ vars . opacityShadow = opacityFix ( vars . opacityShadowPerc ) ;
139150 } else if ( semver . lt ( this . jqueryUi . pkg . version , "1.14.0-a" ) ) {
140151
141152 // For version >=1.13.0 <1.14.0, `-ms-filter` has its own separate line
@@ -148,17 +159,17 @@ function ThemeRoller( options ) {
148159 } ;
149160 vars . opacityFilterOverlay = opacityFilter ( vars . opacityOverlay ) ;
150161 vars . opacityFilterShadow = opacityFilter ( vars . opacityShadow ) ;
151- vars . opacityOverlay = opacityFix ( vars . opacityOverlay ) ;
152- vars . opacityShadow = opacityFix ( vars . opacityShadow ) ;
162+ vars . opacityOverlay = opacityFix ( vars . opacityOverlayPerc ) ;
163+ vars . opacityShadow = opacityFix ( vars . opacityShadowPerc ) ;
153164 } else {
154165
155166 // For version >=1.14.0, IE is not supported so there's no `filter`
156167 // or `-ms-filter`.
157168 opacityFix = function ( opacity ) {
158169 return ( opacity / 100 ) . toString ( ) . replace ( / ^ 0 \. / , "." ) ;
159170 } ;
160- vars . opacityOverlay = opacityFix ( vars . opacityOverlay ) ;
161- vars . opacityShadow = opacityFix ( vars . opacityShadow ) ;
171+ vars . opacityOverlay = opacityFix ( vars . opacityOverlayPerc ) ;
172+ vars . opacityShadow = opacityFix ( vars . opacityShadowPerc ) ;
162173 }
163174
164175 // Add '#' in the beginning of the colors if needed
0 commit comments