PluginProbe
Elementor Website Builder – more than just a page builder / 3.29.0-beta4
Elementor Website Builder – more than just a page builder v3.29.0-beta4
4.3.3 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 All 456 releases
elementor / modules / atomic-widgets / props-resolver / transformers / styles / background-overlay-transformer.php

background-overlay-transformer.php in Elementor Website Builder – more than just a page builder 3.29.0-beta4, at modules/atomic-widgets/props-resolver/transformers/styles/background-overlay-transformer.php

74 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles;
4
5 use Elementor\Modules\AtomicWidgets\PropsResolver\Multi_Props;
6 use Elementor\Modules\AtomicWidgets\PropsResolver\Props_Resolver_Context;
7 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformer_Base;
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit; // Exit if accessed directly.
11 }
12
13 class Background_Overlay_Transformer extends Transformer_Base {
14 public function transform( $value, Props_Resolver_Context $context ) {
15 $normalized_values = $this->normalize_overlay_values( $value );
16
17 return array_filter( [
18 'background-image' => $this->get_values_string( $normalized_values, 'src', Background_Image_Overlay_Transformer::DEFAULT_IMAGE, true ),
19 'background-repeat' => $this->get_values_string( $normalized_values, 'repeat', Background_Image_Overlay_Transformer::DEFAULT_REPEAT ),
20 'background-attachment' => $this->get_values_string( $normalized_values, 'attachment', Background_Image_Overlay_Transformer::DEFAULT_ATTACHMENT ),
21 'background-size' => $this->get_values_string( $normalized_values, 'size', Background_Image_Overlay_Transformer::DEFAULT_SIZE ),
22 'background-position' => $this->get_values_string( $normalized_values, 'position', Background_Image_Overlay_Transformer::DEFAULT_POSITION ),
23 ] );
24 }
25
26 private function normalize_overlay_values( $overlays ): array {
27 return array_map( function( $value ) {
28 if ( is_string( $value ) ) {
29 return [
30 'src' => $value,
31 'repeat' => null,
32 'attachment' => null,
33 'size' => null,
34 'position' => null,
35 ];
36 }
37
38 return $value;
39 }, $overlays );
40 }
41
42 private function get_values_string( $value, string $prop, string $default_value, bool $prevent_unification = false ) {
43 $is_empty = empty( array_filter( $value, function ( array $item ) use ( $prop ) {
44 return isset( $item[ $prop ] ) && ! is_null( $item[ $prop ] );
45 } ) );
46
47 if ( $is_empty ) {
48 return null;
49 }
50
51 $formatted_values = array_map( function ( $item ) use ( $prop, $default_value ) {
52 if ( is_string( $item ) ) {
53 return $default_value;
54 }
55
56 if ( ! is_array( $item ) ) {
57 return $default_value;
58 }
59
60 return $item[ $prop ] ?? $default_value;
61 }, $value );
62
63 if ( ! $prevent_unification ) {
64 $all_same = count( array_unique( $formatted_values ) ) === 1;
65
66 if ( $all_same ) {
67 return $formatted_values[0];
68 }
69 }
70
71 return implode( ',', $formatted_values );
72 }
73 }
74