PluginProbe
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder / 2.14.0
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder v2.14.0
2.14.0 2.13.0 2.13.1 2.12.0 2.11.1 2.11.0 2.10.0 2.9.0 2.7.4 2.7.5 2.7.6 2.7.7 2.8.0 2.8.1 2.9.1 trunk 1.0 1.0-beta1 1.0-beta2 1.0-beta3 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 All 81 releases
ablocks / includes / blocks / countdown / block.php

block.php in aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder 2.14.0, at includes/blocks/countdown/block.php

315 lines 12.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace ABlocks\Blocks\Countdown;
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit;
6 }
7
8 use ABlocks\Classes\BlockBaseAbstract;
9 use ABlocks\Classes\CssGenerator;
10 use ABlocks\Classes\CssGeneratorV2;
11 use ABlocks\Controls\Alignment;
12 use ABlocks\Controls\Typography;
13 use ABlocks\Controls\Border;
14 use ABlocks\Controls\BoxShadow;
15 use ABlocks\Controls\Range;
16 use ABlocks\Controls\Color;
17 use ABlocks\Controls\Dimensions;
18
19 class Block extends BlockBaseAbstract {
20 protected $block_name = 'countdown';
21
22 public function build_css_v1( $attributes ) {
23 $css_generator = new CssGenerator( $attributes );
24
25 $css_generator->add_class_styles(
26 '{{WRAPPER}}',
27 $this->get_wrapper_css( $attributes ),
28 $this->get_wrapper_css( $attributes, 'Tablet' ),
29 $this->get_wrapper_css( $attributes, 'Mobile' ),
30 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_wrapper_css( $attributes, $device ); } )
31 );
32
33 $css_generator->add_class_styles(
34 '{{WRAPPER}} .ablocks-block-container',
35 $this->get_countdown_items_css( $attributes ),
36 $this->get_countdown_items_css( $attributes, 'Tablet' ),
37 $this->get_countdown_items_css( $attributes, 'Mobile' ),
38 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_countdown_items_css( $attributes, $device ); } )
39 );
40
41 $css_generator->add_class_styles(
42 '{{WRAPPER}} .ablocks-countdown__item',
43 $this->get_countdown_item_css( $attributes ),
44 $this->get_countdown_item_css( $attributes, 'Tablet' ),
45 $this->get_countdown_item_css( $attributes, 'Mobile' ),
46 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_countdown_item_css( $attributes, $device ); } )
47 );
48 $css_generator->add_class_styles(
49 '{{WRAPPER}} .ablocks-countdown__item:hover',
50 $this->get_countdown_item_hover_css( $attributes ),
51 $this->get_countdown_item_hover_css( $attributes, 'Tablet' ),
52 $this->get_countdown_item_hover_css( $attributes, 'Mobile' ),
53 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_countdown_item_hover_css( $attributes, $device ); } )
54 );
55
56 $css_generator->add_class_styles(
57 '{{WRAPPER}} .ablocks-countdown__item .ablocks-countdown-label',
58 $this->get_label_css( $attributes ),
59 $this->get_label_css( $attributes, 'Tablet' ),
60 $this->get_label_css( $attributes, 'Mobile' ),
61 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_label_css( $attributes, $device ); } )
62 );
63
64 $css_generator->add_class_styles(
65 '{{WRAPPER}} .ablocks-countdown__item .ablocks-countdown-value',
66 $this->get_number_css( $attributes ),
67 $this->get_number_css( $attributes, 'Tablet' ),
68 $this->get_number_css( $attributes, 'Mobile' ),
69 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_number_css( $attributes, $device ); } )
70 );
71
72 $css_generator->add_class_styles(
73 '{{WRAPPER}} .ablocks-countdown__separator',
74 $this->get_separator_css( $attributes ),
75 $this->get_separator_css( $attributes, 'Tablet' ),
76 $this->get_separator_css( $attributes, 'Mobile' ),
77 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_separator_css( $attributes, $device ); } )
78 );
79
80 return $css_generator->generate_css();
81 }
82 public function build_css_v2( $attributes ) {
83 $css_generator = new CssGeneratorV2( $attributes, $this->block_name );
84
85 $css_generator->add_class_styles(
86 '{{WRAPPER}}',
87 $this->get_wrapper_css( $attributes ),
88 $this->get_wrapper_css( $attributes, 'Tablet' ),
89 $this->get_wrapper_css( $attributes, 'Mobile' ),
90 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_wrapper_css( $attributes, $device ); } )
91 );
92 $css_generator->add_class_styles(
93 '{{WRAPPER}}.ablocks-block--countdown:not(.ablocks-has-container),
94 {{WRAPPER}}.ablocks-block--countdown .ablocks-block-container',
95 $this->get_countdown_items_css( $attributes, '' ),
96 $this->get_countdown_items_css( $attributes, 'Tablet' ),
97 $this->get_countdown_items_css( $attributes, 'Mobile' ),
98 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_countdown_items_css( $attributes, $device ); } )
99 );
100
101 $css_generator->add_class_styles(
102 '{{WRAPPER}} .ablocks-countdown__item',
103 $this->get_countdown_item_css( $attributes ),
104 $this->get_countdown_item_css( $attributes, 'Tablet' ),
105 $this->get_countdown_item_css( $attributes, 'Mobile' ),
106 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_countdown_item_css( $attributes, $device ); } )
107 );
108 $css_generator->add_class_styles(
109 '{{WRAPPER}} .ablocks-countdown__item:hover',
110 $this->get_countdown_item_hover_css( $attributes ),
111 $this->get_countdown_item_hover_css( $attributes, 'Tablet' ),
112 $this->get_countdown_item_hover_css( $attributes, 'Mobile' ),
113 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_countdown_item_hover_css( $attributes, $device ); } )
114 );
115
116 $css_generator->add_class_styles(
117 '{{WRAPPER}} .ablocks-countdown__item .ablocks-countdown-label',
118 $this->get_label_css( $attributes ),
119 $this->get_label_css( $attributes, 'Tablet' ),
120 $this->get_label_css( $attributes, 'Mobile' ),
121 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_label_css( $attributes, $device ); } )
122 );
123
124 $css_generator->add_class_styles(
125 '{{WRAPPER}} .ablocks-countdown__item .ablocks-countdown-value',
126 $this->get_number_css( $attributes ),
127 $this->get_number_css( $attributes, 'Tablet' ),
128 $this->get_number_css( $attributes, 'Mobile' ),
129 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_number_css( $attributes, $device ); } )
130 );
131
132 $css_generator->add_class_styles(
133 '{{WRAPPER}} .ablocks-countdown__separator',
134 $this->get_separator_css( $attributes ),
135 $this->get_separator_css( $attributes, 'Tablet' ),
136 $this->get_separator_css( $attributes, 'Mobile' ),
137 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_separator_css( $attributes, $device ); } )
138 );
139
140 return $css_generator->generate_css();
141 }
142
143 public function build_css( $attributes ) {
144 if ( isset( $attributes['blockVersion'] ) && (int) $attributes['blockVersion'] === 2 ) {
145 return $this->build_css_v2( $attributes );
146 }
147 return $this->build_css_v1( $attributes );
148 }
149
150 public function get_wrapper_css( $attributes, $device = '' ) {
151 $alignment = ! empty( $attributes['alignment'] ) ? $attributes['alignment'] : '';
152 return Alignment::get_css( $alignment, 'text-align', $device );
153 }
154
155 public function get_countdown_items_css( $attributes, $device = '' ) {
156 $css = [];
157
158 if ( ! empty( $attributes['orient'][ 'value' . $device ] ) ) {
159 $css['flex-direction'] = $attributes['orient'][ 'value' . $device ];
160 }
161 if ( ! empty( $attributes['justificationAlign'][ 'value' . $device ] ) ) {
162 $css['justify-content'] = $attributes['justificationAlign'][ 'value' . $device ];
163 }
164 if ( ! empty( $attributes['alignment'][ 'value' . $device ] ) ) {
165 $css['align-items'] = $attributes['alignment'][ 'value' . $device ];
166 }
167 if ( ! empty( $attributes['wrapping'][ 'value' . $device ] ) ) {
168 $css['flex-wrap'] = $attributes['wrapping'][ 'value' . $device ];
169 }
170
171 return array_merge(
172 Range::get_css([
173 'attributeValue' => $attributes['boxSize'],
174 'attribute_object_key' => 'value',
175 'isResponsive' => true,
176 'defaultValue' => 130,
177 'hasUnit' => true,
178 'unitDefaultValue' => 'px',
179 'property' => 'min-height',
180 'device' => $device,
181 ]),
182 Range::get_css([
183 'attributeValue' => $attributes['boxRowGap'],
184 'attribute_object_key' => 'value',
185 'isResponsive' => true,
186 'defaultValue' => 0,
187 'hasUnit' => true,
188 'unitDefaultValue' => 'px',
189 'property' => 'row-gap',
190 'device' => $device,
191 ]),
192 Range::get_css([
193 'attributeValue' => $attributes['boxColumnGap'],
194 'attribute_object_key' => 'value',
195 'isResponsive' => true,
196 'defaultValue' => 0,
197 'hasUnit' => true,
198 'unitDefaultValue' => 'px',
199 'property' => 'column-gap',
200 'device' => $device,
201 ]),
202 $css,
203 );
204 }
205
206 public function get_countdown_item_css( $attributes, $device = '' ) {
207 $css = [];
208 $width_css = [];
209 // $css['padding'] = '0';
210 $label_position = ! empty( $attributes['labelPosition'] ) ? $attributes['labelPosition'] : '';
211 $orient = ! empty( $attributes['orient'] ) ? $attributes['orient'] : [];
212
213 $device_key = $device ? 'value' . ucfirst( $device ) : 'value';
214 $direction = isset( $orient[ $device_key ] ) ? $orient[ $device_key ] : ( $orient['value'] ?? '' );
215
216 if ( in_array( $direction, [ 'column', 'column-reverse' ], true ) ) {
217 $width_css = Range::get_css( [
218 'attributeValue' => $attributes['boxSize'],
219 'attribute_object_key' => 'value',
220 'isResponsive' => true,
221 'defaultValue' => 130,
222 'hasUnit' => true,
223 'unitDefaultValue' => 'px',
224 'property' => 'width',
225 'device' => $device,
226 ] );
227 } else {
228 $width_css = [ 'width' => '130px' ];
229 }
230
231 if ( $label_position ) {
232 $css['flex-direction'] = $label_position;
233 }
234
235 $border_css = [];
236 if ( isset( $attributes['boxBorder'] ) ) {
237 $border_css = Border::get_css( $attributes['boxBorder'], '', $device );
238 }
239
240 return array_merge(
241 [ 'background' => Color::get_css( isset( $attributes['boxBackgroundColor'] ) ? $attributes['boxBackgroundColor'] : '' ) ],
242 $width_css,
243 Range::get_css( [
244 'attributeValue' => $attributes['numberAndLabelGap'],
245 'attribute_object_key' => 'value',
246 'isResponsive' => true,
247 'defaultValue' => 5,
248 'hasUnit' => true,
249 'unitDefaultValue' => 'px',
250 'property' => 'gap',
251 'device' => $device,
252 ] ),
253 $border_css,
254 $css,
255 BoxShadow::get_css( ! empty( $attributes['boxShadow'] ) ? $attributes['boxShadow'] : '', $device ),
256 Dimensions::get_css( $attributes['padding'], 'padding', $device ),
257 );
258 }
259
260
261
262
263 public function get_countdown_item_hover_css( $attributes, $device = '' ) {
264 return array_merge(
265 Border::get_hover_css( ! empty( $attributes['boxBorder'] ) ? $attributes['boxBorder'] : [], '', $device ),
266 BoxShadow::get_hover_css( $attributes['boxShadow'], '', $device )
267 );
268 }
269
270 public function get_label_css( $attributes, $device = '' ) {
271 $css = [];
272 if ( $attributes['labelPosition'] === 'column' || $attributes['labelPosition'] === 'column-reverse' ) {
273 $css['width'] = '100%';
274 $css['flex'] = '1 1 30%';
275 $css['display'] = 'flex';
276 $css['justify-content'] = 'center';
277 $css['align-items'] = 'center';
278 }
279 $typographyGlobal = ( isset( $attributes['labelTypographyGlobal'] ) ? $attributes['labelTypographyGlobal'] : '' );
280 return array_merge(
281 [ 'color' => Color::get_css( isset( $attributes['labelColor'] ) ? $attributes['labelColor'] : '' ) ],
282 [ 'background' => Color::get_css( isset( $attributes['labelBgColor'] ) ? $attributes['labelBgColor'] : '' ) ],
283 ! empty( $attributes['labelTypography'] ) ? Typography::get_css( $attributes['labelTypography'], '', $device, $typographyGlobal ) : array(),
284 $css
285 );
286 }
287
288 public function get_number_css( $attributes, $device = '' ) {
289 $css = [];
290 if ( $attributes['labelPosition'] === 'column' || $attributes['labelPosition'] === 'column-reverse' ) {
291 $css['width'] = '100%';
292 $css['flex'] = '1 1 70%';
293 $css['display'] = 'flex';
294 $css['justify-content'] = 'center';
295 $css['align-items'] = 'center';
296 }
297 $typographyGlobal = ( isset( $attributes['numberTypographyGlobal'] ) ? $attributes['numberTypographyGlobal'] : '' );
298 return array_merge(
299 [ 'color' => Color::get_css( isset( $attributes['numberColor'] ) ? $attributes['numberColor'] : '' ) ],
300 [ 'background' => Color::get_css( isset( $attributes['numberBgColor'] ) ? $attributes['numberBgColor'] : '' ) ],
301 ! empty( $attributes['numberTypography'] ) ? Typography::get_css( $attributes['numberTypography'], '', $device, $typographyGlobal ) : array(),
302 $css
303 );
304 }
305
306 public function get_separator_css( $attributes, $device = '' ) {
307 $typographyGlobal = ( isset( $attributes['separatorTypographyGlobal'] ) ? $attributes['separatorTypographyGlobal'] : '' );
308 return array_merge(
309 [ 'color' => Color::get_css( isset( $attributes['separatorColor'] ) ? $attributes['separatorColor'] : '' ) ],
310 ! empty( $attributes['separatorTypography'] ) ? Typography::get_css( $attributes['separatorTypography'], '', $device, $typographyGlobal ) : array(),
311 );
312 }
313 }
314
315