PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.1
Elementor Website Builder – more than just a page builder v4.3.1
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
← All changes | modules/atomic-widgets/css-converter/value-parsers/background-image-value-parser.php +36 -9 4.2.0-dev2 → 4.3.1 View file →
@@ -211,24 +211,24 @@
211 211 if ( empty( $tokens ) ) {
212 212 return null;
213 213 }
214 214
215 - $stops = [];
215 + $parsed = [];
216 216
217 217 foreach ( $tokens as $token ) {
218 - $stop = self::parse_color_stop( trim( $token ) );
218 + $parts = self::parse_color_stop_parts( trim( $token ) );
219 219
220 - if ( null === $stop ) {
220 + if ( null === $parts ) {
221 221 return null;
222 222 }
223 223
224 - $stops[] = $stop;
224 + $parsed[] = $parts;
225 225 }
226 226
227 - return $stops;
227 + return self::build_color_stops_with_defaults( $parsed );
228 228 }
229 229
230 - private static function parse_color_stop( string $token ): ?array {
230 + private static function parse_color_stop_parts( string $token ): ?array {
231 231 $parts = Css_Token_Splitter::split_by_whitespace( $token );
232 232
233 233 if ( empty( $parts ) || count( $parts ) > 2 ) {
234 234 return null;
@@ -233,9 +233,9 @@
233 233 if ( empty( $parts ) || count( $parts ) > 2 ) {
234 234 return null;
235 235 }
236 236
237 - $stop_value = [ 'color' => Color_Prop_Type::generate( $parts[0] ) ];
237 + $offset = null;
238 238
239 239 if ( isset( $parts[1] ) ) {
240 240 if ( ! preg_match( '/^(-?\d+(?:\.\d+)?)%$/', $parts[1], $m ) ) {
241 241 return null;
@@ -240,10 +240,37 @@
240 240 if ( ! preg_match( '/^(-?\d+(?:\.\d+)?)%$/', $parts[1], $m ) ) {
241 241 return null;
242 242 }
243 243
244 - $stop_value['offset'] = Number_Prop_Type::generate( (float) $m[1] );
244 + $offset = (float) $m[1];
245 245 }
246 246
247 - return Color_Stop_Prop_Type::generate( $stop_value );
247 + return [
248 + 'color' => $parts[0],
249 + 'offset' => $offset,
250 + ];
251 + }
252 +
253 + private static function build_color_stops_with_defaults( array $parsed ): array {
254 + $count = count( $parsed );
255 + $stops = [];
256 +
257 + foreach ( $parsed as $index => $part ) {
258 + $offset = $part['offset'] ?? self::default_offset_for_index( $index, $count );
259 +
260 + $stops[] = Color_Stop_Prop_Type::generate( [
261 + 'color' => Color_Prop_Type::generate( $part['color'] ),
262 + 'offset' => Number_Prop_Type::generate( $offset ),
263 + ] );
264 + }
265 +
266 + return $stops;
267 + }
268 +
269 + private static function default_offset_for_index( int $index, int $count ): float {
270 + if ( $count <= 1 ) {
271 + return 0.0;
272 + }
273 +
274 + return ( $index / ( $count - 1 ) ) * 100;
248 275 }
249 276 }