first commit

This commit is contained in:
Roman Pyrih
2026-03-10 09:50:10 +01:00
commit 64c4a90405
7289 changed files with 2645777 additions and 0 deletions

View File

@@ -0,0 +1,128 @@
<?php
namespace Elementor\Modules\Variables\Adapters;
use Elementor\Modules\AtomicWidgets\PropTypes\Color_Prop_Type;
use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\String_Prop_Type;
use Elementor\Modules\AtomicWidgets\PropTypes\Size_Prop_Type;
use Elementor\Modules\AtomicWidgets\Styles\Size_Constants;
use Elementor\Modules\Variables\PropTypes\Color_Variable_Prop_Type;
use Elementor\Modules\Variables\PropTypes\Font_Variable_Prop_Type;
use Elementor\Modules\Variables\PropTypes\Size_Variable_Prop_Type;
use Elementor\Modules\Variables\Storage\Entities\Variable;
use Elementor\Modules\Variables\Storage\Variables_Collection;
class Prop_Type_Adapter {
public const GLOBAL_CUSTOM_SIZE_VARIABLE_KEY = 'global-custom-size-variable';
public static function to_storage( Variables_Collection $collection ): array {
$schema = self::get_schema();
$collection->set_version( Variables_Collection::FORMAT_VERSION_V2 );
$record = $collection->serialize();
$collection->each( function( Variable $variable ) use ( $schema, &$record ) {
$type = $variable->type();
$value = $variable->value();
$id = $variable->id();
$variable = $variable->to_array();
$prop_type = $schema[ $type ] ?? null;
if ( is_array( $value ) || ! $prop_type ) {
return;
}
if ( Size_Variable_Prop_Type::get_key() === $type ) {
$value = self::parse_size_value( $value );
}
if ( self::GLOBAL_CUSTOM_SIZE_VARIABLE_KEY === $type ) {
$value = [
'size' => $value,
'unit' => 'custom',
];
$variable['type'] = Size_Variable_Prop_Type::get_key();
}
$record['data'][ $id ] = array_merge( $variable, [ 'value' => $prop_type::generate( $value ) ] );
} );
return $record;
}
public static function from_storage( Variables_Collection $collection ): Variables_Collection {
$collection->each( function( Variable $variable ) {
$value = $variable->value();
if ( ! is_array( $value ) ) {
return;
}
$value = $value['value'];
if ( isset( $value['unit'] ) && 'custom' === $value['unit'] ) {
$value = $value['size'];
$variable->set_type( self::GLOBAL_CUSTOM_SIZE_VARIABLE_KEY );
}
if ( Size_Variable_Prop_Type::get_key() === $variable->type() ) {
if ( ! is_array( $value ) ) {
$value = [
'size' => '',
'unit' => Size_Constants::DEFAULT_UNIT,
];
}
$value['size'] = $value['size'] ?? '';
$value['unit'] = empty( $value['unit'] ) ? Size_Constants::DEFAULT_UNIT : $value['unit'];
$value = $value['size'] . $value['unit'];
}
$variable->set_value( $value );
} );
$collection->set_version( Variables_Collection::FORMAT_VERSION_V1 );
return $collection;
}
private static function get_schema(): array {
return [
Color_Variable_Prop_Type::get_key() => Color_Prop_Type::class,
Font_Variable_Prop_Type::get_key() => String_Prop_Type::class,
Size_Variable_Prop_Type::get_key() => Size_Prop_Type::class,
self::GLOBAL_CUSTOM_SIZE_VARIABLE_KEY => Size_Prop_Type::class,
];
}
private static function parse_size_value( ?string $value ) {
$value = trim( strtolower( $value ) );
if ( 'auto' === $value ) {
return [
'size' => '',
'unit' => 'auto',
];
}
if ( preg_match( '/^(-?\d*\.?\d+)([a-z%]+)$/i', trim( $value ), $matches ) ) {
return [
'size' => $matches[1] + 0,
'unit' => strtolower( $matches[2] ),
];
}
if ( empty( $value ) ) {
return [
'size' => '',
'unit' => Size_Constants::DEFAULT_UNIT,
];
}
return $value;
}
}