PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.0
Elementor Website Builder – more than just a page builder v4.3.0
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
elementor / modules / atomic-widgets / css-converter / converters / object-position-property-converter.php

object-position-property-converter.php in Elementor Website Builder – more than just a page builder 4.3.0, at modules/atomic-widgets/css-converter/converters/object-position-property-converter.php

62 lines 2.0 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\CssConverter\Converters;
4
5 use Elementor\Modules\AtomicWidgets\CssConverter\Conversion_Context;
6 use Elementor\Modules\AtomicWidgets\CssConverter\Property_Converter_Base;
7 use Elementor\Modules\AtomicWidgets\CssConverter\ValueParsers\Css_Token_Splitter;
8 use Elementor\Modules\AtomicWidgets\CssConverter\ValueParsers\Size_Value_Parser;
9 use Elementor\Modules\AtomicWidgets\PropTypes\Position_Prop_Type;
10 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\String_Prop_Type;
11 use Elementor\Modules\AtomicWidgets\PropTypes\Size_Prop_Type;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit; // Exit if accessed directly.
15 }
16
17 /**
18 * Converter for `object-position`: Union(String enum | Position_Prop_Type{x, y}).
19 *
20 * Named keyword pairs (e.g. `center left`) emit a String PropValue validated against the enum.
21 * Two size tokens (e.g. `50% 30%`, `10px 20px`) emit a Position_Prop_Type PropValue.
22 * Anything else declines to custom_css.
23 */
24 class Object_Position_Property_Converter extends Property_Converter_Base {
25 protected function get_supported_properties(): array {
26 return [ 'object-position' ];
27 }
28
29 protected function do_convert( Conversion_Context $context, array $rule ): bool {
30 $value = trim( $rule['value'] );
31
32 if ( in_array( $value, Position_Prop_Type::get_position_enum_values(), true ) ) {
33 $context->set_prop( 'object-position', String_Prop_Type::generate( $value ) );
34 return true;
35 }
36
37 return $this->try_size_pair( $context, $value );
38 }
39
40 private function try_size_pair( Conversion_Context $context, string $value ): bool {
41 $tokens = Css_Token_Splitter::split_by_whitespace( $value );
42
43 if ( 2 !== count( $tokens ) ) {
44 return false;
45 }
46
47 $x = Size_Value_Parser::parse( $tokens[0] );
48 $y = Size_Value_Parser::parse( $tokens[1] );
49
50 if ( null === $x || null === $y ) {
51 return false;
52 }
53
54 $context->set_prop( 'object-position', Position_Prop_Type::generate( [
55 'x' => Size_Prop_Type::generate( $x ),
56 'y' => Size_Prop_Type::generate( $y ),
57 ] ) );
58
59 return true;
60 }
61 }
62