PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / trunk
Kubio AI Page Builder vtrunk
2.8.2 2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / lib / src / Core / StyleManager / GlobalStyleRender.php
kubio / lib / src / Core / StyleManager Last commit date
Generics 1 year ago Props 1 month ago BlockStyleRender.php 1 year ago DynamicStyles.php 1 year ago GlobalStyleRender.php 1 year ago MainAttribute.php 4 years ago ParserUtils.php 1 year ago StyleManager.php 2 years ago StyleParser.php 1 year ago StyleRender.php 1 year ago Utils.php 1 year ago
GlobalStyleRender.php
133 lines
1 <?php
2
3 namespace Kubio\Core\StyleManager;
4
5 use IlluminateAgnostic\Arr\Support\Arr;
6 use Kubio\Config;
7 use Kubio\Core\Blocks\DataHelper;
8 use Kubio\Core\LodashBasic;
9
10 class GlobalStyleRender extends StyleRender {
11
12 const V_SPACE_NEGATIVE = 'vSpaceNegative';
13 const V_SPACE = 'vSpace';
14 const H_SPACE_GROUP = 'hSpaceGroup';
15 const H_SPACE = 'hSpace';
16 const GLOBAL_PREFIX = '#kubio';
17 const BODY_SELECTOR = '';
18 const KUBIO_BLOCK_PREFIX = '[data-kubio]';
19
20 private $dataHelper = null;
21 public function __construct( $main_attr ) {
22 $this->dataHelper = new DataHelper( array(), array( Config::$mainAttributeKey => $main_attr ) );
23
24 $styledElementsByName = Config::value( 'definitions.globalStyle.elementsByName' );
25 $styledElementsEnum = Config::value( 'definitions.globalStyle.elementsEnum' );
26
27 $styledElementsByName = $this->maybePrefixStyledElements( $styledElementsByName );
28
29 $normalized = self::normalizeData( $main_attr, $styledElementsByName, $styledElementsEnum );
30 $this->model = (object) array_merge(
31 LodashBasic::get( $normalized, 'model', array() ),
32 array(
33 'globalStyle' => true,
34 )
35 );
36 parent::__construct(
37 array(
38 'styledElementsByName' => $styledElementsByName,
39 'styledElementsEnum' => $styledElementsEnum,
40 'wrapperElement' => false,
41 )
42 );
43 }
44
45
46 public function maybePrefixStyledElements( $styledElementsByName ) {
47 foreach ( $styledElementsByName as $name => $styled_element ) {
48
49 //if the styled element has isGlobalSelector true do not change it.
50 if ( isset( $styled_element['selector'] ) && Arr::get( $styled_element, 'isGlobalSelector', false ) || $name === 'body' ) {
51 continue;
52 }
53
54 if ( isset( $styled_element['selector'] ) && Arr::get( $styled_element, 'withGlobalPrefix', false ) ) {
55 $prefix = GlobalStyleRender::GLOBAL_PREFIX . ' ' . GlobalStyleRender::BODY_SELECTOR;
56 } elseif ( isset( $styled_element['selector'] ) && Arr::get( $styled_element, 'withKubioBlockPrefix', false ) ) {
57 $prefix = GlobalStyleRender::KUBIO_BLOCK_PREFIX;
58 } else {
59 $prefix = GlobalStyleRender::BODY_SELECTOR;
60 }
61 $selector = $styled_element['selector'];
62
63 if ( is_string( $selector ) ) {
64 $styled_element['selector'] = $this->prefixSelector( $selector, $prefix );
65 } else {
66 foreach ( $selector as $state => $state_selector ) {
67 $styled_element['selector'][ $state ] = $this->prefixSelector( $state_selector, $prefix );
68 }
69 }
70
71 $styledElementsByName[ $name ] = $styled_element;
72 }
73
74 return $styledElementsByName;
75 }
76
77 private function prefixSelector( $selector, $prefix ) {
78 $selector_parts = explode( ',', $selector );
79
80 foreach ( $selector_parts as $index => $value ) {
81 $selector_parts[ $index ] = $prefix . ' ' . trim( $value );
82 }
83
84 return implode( ',', $selector_parts );
85 }
86
87 public function getDynamicStyle() {
88 $vSpaceByMedia = $this->dataHelper->getPropByMedia( 'vSpace' );
89 $hSpaceByMedia = $this->dataHelper->getPropByMedia( 'hSpace' );
90
91 return self::normalizeDynamicStyle(
92 array(
93 self::V_SPACE_NEGATIVE => DynamicStyles::vSpace(
94 $vSpaceByMedia,
95 true
96 ),
97 self::V_SPACE => DynamicStyles::vSpace(
98 $vSpaceByMedia
99 ),
100 self::H_SPACE_GROUP => DynamicStyles::hSpaceParent(
101 $hSpaceByMedia
102 ),
103 self::H_SPACE => DynamicStyles::hSpace(
104 $hSpaceByMedia
105 ),
106 )
107 );
108 }
109
110 public function export( $dynamicStyle = null ) {
111 $style = $this->model->style['shared'];
112 $css = array();
113
114 $css['global'] = $this->convertStyleToCss(
115 $style,
116 array(
117 'styledElementsByName' => $this->styledElementsByName,
118 'styleType' => 'global',
119 )
120 );
121
122 $css['dynamic'] = $this->convertStyleToCss(
123 $this->getDynamicStyle(),
124 array(
125 'styledElementsByName' => $this->styledElementsByName,
126 'styleType' => 'global',
127 )
128 );
129
130 return $css;
131 }
132 }
133