PluginProbe
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder / 2.11.0
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder v2.11.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 1.1.2 All 80 releases
ablocks / includes / blocks / image-comparison / block.php

block.php in aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder 2.11.0, at includes/blocks/image-comparison/block.php

433 lines 15.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace ABlocks\Blocks\ImageComparison;
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\Border;
13 use ABlocks\Controls\Range;
14 use ABlocks\Controls\Color;
15
16 class Block extends BlockBaseAbstract {
17 protected $block_name = 'image-comparison';
18
19 public function build_css_v1( $attributes ) {
20 $css_generator = new CssGenerator( $attributes );
21
22 $css_generator->add_class_styles(
23 '{{WRAPPER}} .ablocks-image-comparison__images-container .ablocks-image-comparison__before-image',
24 $this->get_before_image_width_css( $attributes )
25 );
26
27 $css_generator->add_class_styles(
28 '{{WRAPPER}} .ablocks-image-comparison__images-container-vertical .ablocks-image-comparison__before-image',
29 $this->get_before_image_height_css( $attributes )
30 );
31
32 $css_generator->add_class_styles(
33 '{{WRAPPER}} .ablocks-image-comparison__images-container .ablocks-image-comparison__slider-line',
34 $this->get_slider_line_horizontal_css( $attributes ),
35 $this->get_slider_line_horizontal_css( $attributes, 'Tablet' ),
36 $this->get_slider_line_horizontal_css( $attributes, 'Mobile' )
37 );
38
39 $css_generator->add_class_styles(
40 '{{WRAPPER}} .ablocks-image-comparison__images-container-vertical .ablocks-image-comparison__slider-line',
41 $this->get_slider_line_vertical_css( $attributes ),
42 $this->get_slider_line_vertical_css( $attributes, 'Tablet' ),
43 $this->get_slider_line_vertical_css( $attributes, 'Mobile' )
44 );
45
46 $css_generator->add_class_styles(
47 '{{WRAPPER}} .ablocks-image-comparison__images-container .ablocks-image-comparison__slider-icon',
48 $this->get_horizontal_slider_icon_css( $attributes ),
49 $this->get_horizontal_slider_icon_css( $attributes, 'Tablet' ),
50 $this->get_horizontal_slider_icon_css( $attributes, 'Mobile' )
51 );
52
53 $css_generator->add_class_styles(
54 '{{WRAPPER}} .ablocks-image-comparison__images-container-vertical .ablocks-image-comparison__slider-icon',
55 $this->get_vertical_slider_icon_css( $attributes ),
56 $this->get_vertical_slider_icon_css( $attributes, 'Tablet' ),
57 $this->get_vertical_slider_icon_css( $attributes, 'Mobile' )
58 );
59
60 $css_generator->add_class_styles(
61 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label',
62 $this->get_image_overlay_css( $attributes ),
63 $this->get_image_overlay_css( $attributes, 'Tablet' ),
64 $this->get_image_overlay_css( $attributes, 'Mobile' )
65 );
66
67 $css_generator->add_class_styles(
68 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label:hover',
69 $this->get_image_overlay_hover_css( $attributes ),
70 $this->get_image_overlay_hover_css( $attributes, 'Tablet' ),
71 $this->get_image_overlay_hover_css( $attributes, 'Mobile' )
72 );
73
74 $css_generator->add_class_styles(
75 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label',
76 $this->get_image_overlay_css( $attributes ),
77 $this->get_image_overlay_css( $attributes, 'Tablet' ),
78 $this->get_image_overlay_css( $attributes, 'Mobile' )
79 );
80
81 $css_generator->add_class_styles(
82 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label:hover',
83 $this->get_image_overlay_hover_css( $attributes ),
84 $this->get_image_overlay_hover_css( $attributes, 'Tablet' ),
85 $this->get_image_overlay_hover_css( $attributes, 'Mobile' )
86 );
87
88 $css_generator->add_class_styles(
89 '{{WRAPPER}} .ablocks-image-comparison__overlay',
90 $this->get_overlay_css( $attributes ),
91 );
92
93 $css_generator->add_class_styles(
94 '{{WRAPPER}} .ablocks-image-comparison__overlay--hover',
95 $this->get_overlay_css( $attributes ),
96 );
97
98 $css_generator->add_class_styles(
99 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label--horizontal',
100 $this->get_before_image_overlay_horizontal_css( $attributes )
101 );
102 $css_generator->add_class_styles(
103 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label--vertical',
104 $this->get_before_image_overlay_vertical_css( $attributes )
105 );
106 $css_generator->add_class_styles(
107 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label--horizontal',
108 $this->get_after_image_overlay_horizontal_css( $attributes )
109 );
110 $css_generator->add_class_styles(
111 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label--vertical',
112 $this->get_after_image_overlay_vertical_css( $attributes )
113 );
114
115 return $css_generator->generate_css();
116 }
117
118 public function build_css_v2( $attributes ) {
119 $css_generator = new CssGeneratorV2( $attributes );
120
121 $css_generator->add_class_styles(
122 '{{WRAPPER}} .ablocks-image-comparison__images-container .ablocks-image-comparison__before-image',
123 $this->get_before_image_width_css( $attributes )
124 );
125
126 $css_generator->add_class_styles(
127 '{{WRAPPER}} .ablocks-image-comparison__images-container-vertical .ablocks-image-comparison__before-image',
128 $this->get_before_image_height_css( $attributes )
129 );
130
131 $css_generator->add_class_styles(
132 '{{WRAPPER}} .ablocks-image-comparison__images-container .ablocks-image-comparison__slider-line',
133 $this->get_slider_line_horizontal_css( $attributes ),
134 $this->get_slider_line_horizontal_css( $attributes, 'Tablet' ),
135 $this->get_slider_line_horizontal_css( $attributes, 'Mobile' )
136 );
137
138 $css_generator->add_class_styles(
139 '{{WRAPPER}} .ablocks-image-comparison__images-container-vertical .ablocks-image-comparison__slider-line',
140 $this->get_slider_line_vertical_css( $attributes ),
141 $this->get_slider_line_vertical_css( $attributes, 'Tablet' ),
142 $this->get_slider_line_vertical_css( $attributes, 'Mobile' )
143 );
144
145 $css_generator->add_class_styles(
146 '{{WRAPPER}} .ablocks-image-comparison__images-container .ablocks-image-comparison__slider-icon',
147 $this->get_horizontal_slider_icon_css( $attributes ),
148 $this->get_horizontal_slider_icon_css( $attributes, 'Tablet' ),
149 $this->get_horizontal_slider_icon_css( $attributes, 'Mobile' )
150 );
151
152 $css_generator->add_class_styles(
153 '{{WRAPPER}} .ablocks-image-comparison__images-container-vertical .ablocks-image-comparison__slider-icon',
154 $this->get_vertical_slider_icon_css( $attributes ),
155 $this->get_vertical_slider_icon_css( $attributes, 'Tablet' ),
156 $this->get_vertical_slider_icon_css( $attributes, 'Mobile' )
157 );
158
159 $css_generator->add_class_styles(
160 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label',
161 $this->get_image_overlay_css( $attributes ),
162 $this->get_image_overlay_css( $attributes, 'Tablet' ),
163 $this->get_image_overlay_css( $attributes, 'Mobile' )
164 );
165
166 $css_generator->add_class_styles(
167 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label:hover',
168 $this->get_image_overlay_hover_css( $attributes ),
169 $this->get_image_overlay_hover_css( $attributes, 'Tablet' ),
170 $this->get_image_overlay_hover_css( $attributes, 'Mobile' )
171 );
172
173 $css_generator->add_class_styles(
174 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label',
175 $this->get_image_overlay_css( $attributes ),
176 $this->get_image_overlay_css( $attributes, 'Tablet' ),
177 $this->get_image_overlay_css( $attributes, 'Mobile' )
178 );
179
180 $css_generator->add_class_styles(
181 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label:hover',
182 $this->get_image_overlay_hover_css( $attributes ),
183 $this->get_image_overlay_hover_css( $attributes, 'Tablet' ),
184 $this->get_image_overlay_hover_css( $attributes, 'Mobile' )
185 );
186
187 $css_generator->add_class_styles(
188 '{{WRAPPER}} .ablocks-image-comparison__overlay',
189 $this->get_overlay_css( $attributes ),
190 );
191
192 $css_generator->add_class_styles(
193 '{{WRAPPER}} .ablocks-image-comparison__overlay--hover',
194 $this->get_overlay_css( $attributes ),
195 );
196
197 $css_generator->add_class_styles(
198 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label--horizontal',
199 $this->get_before_image_overlay_horizontal_css( $attributes )
200 );
201 $css_generator->add_class_styles(
202 '{{WRAPPER}} .ablocks-image-comparison__beforeImage-label--vertical',
203 $this->get_before_image_overlay_vertical_css( $attributes )
204 );
205 $css_generator->add_class_styles(
206 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label--horizontal',
207 $this->get_after_image_overlay_horizontal_css( $attributes )
208 );
209 $css_generator->add_class_styles(
210 '{{WRAPPER}} .ablocks-image-comparison__afterImage-label--vertical',
211 $this->get_after_image_overlay_vertical_css( $attributes )
212 );
213
214 return $css_generator->generate_css();
215 }
216
217
218 public function build_css( $attributes ) {
219 if ( isset( $attributes['blockVersion'] ) && (int) $attributes['blockVersion'] === 2 ) {
220 return $this->build_css_v2( $attributes );
221 }
222 return $this->build_css_v1( $attributes );
223 }
224
225 public function get_before_image_width_css( $attributes ) {
226 $slider_position = isset( $attributes['sliderPosition'] ) ? $attributes['sliderPosition'] : 50;
227 return [ 'width' => $slider_position . '%' ];
228 }
229
230 public function get_before_image_height_css( $attributes ) {
231 $slider_position = isset( $attributes['sliderPosition'] ) ? $attributes['sliderPosition'] : 50;
232 return [ 'height' => $slider_position . '%' ];
233 }
234
235 public function get_slider_line_horizontal_css( $attributes, $device = '' ) {
236 $slider_position = isset( $attributes['sliderPosition'] ) ? $attributes['sliderPosition'] : 50;
237 $css = [];
238 $css['left'] = $slider_position . '%';
239 return array_merge(
240 [ 'background' => Color::get_css( isset( $attributes['handleColor'] ) ? $attributes['handleColor'] : '' ) ],
241 Range::get_css([
242 'attributeValue' => $attributes['sliderBarSize'],
243 'attribute_object_key' => 'value',
244 'isResponsive' => true,
245 'defaultValue' => 4,
246 'unitDefaultValue' => 'px',
247 'property' => 'width',
248 'device' => $device,
249 ]),
250 $css
251 );
252
253 }
254
255 public function get_slider_line_vertical_css( $attributes, $device = '' ) {
256 $slider_top = isset( $attributes['sliderPosition'] ) ? $attributes['sliderPosition'] : 50;
257 $css = [];
258 $css['top'] = $slider_top . '%';
259 return array_merge(
260 [ 'background' => Color::get_css( isset( $attributes['handleColor'] ) ? $attributes['handleColor'] : '' ) ],
261 Range::get_css([
262 'attributeValue' => $attributes['sliderBarSize'],
263 'attribute_object_key' => 'value',
264 'isResponsive' => true,
265 'defaultValue' => 4,
266 'unitDefaultValue' => 'px',
267 'property' => 'height',
268 'device' => $device,
269 ]),
270 $css,
271 );
272 }
273
274 public function get_horizontal_slider_icon_css( $attributes, $device = '' ) {
275 $slider_position = isset( $attributes['sliderPosition'] ) ? $attributes['sliderPosition'] : 50;
276 $slider_icon_border_size = isset( $attributes['sliderIconBorderSize'][ 'value' . $device ] ) ? $attributes['sliderIconBorderSize'][ 'value' . $device ] : [ 'value' => 2 ];
277 $border_size = is_array( $slider_icon_border_size ) && isset( $slider_icon_border_size[ 'value' . $device ] )
278 ? $slider_icon_border_size[ 'value' . $device ]
279 : ( is_array( $slider_icon_border_size ) ? $slider_icon_border_size['value'] : $slider_icon_border_size );
280 $css = [];
281 $css['left'] = $slider_position . '%';
282 $css['top'] = '50%';
283 $css['border-weight'] = 'solid';
284 return array_merge(
285 [ 'border-color' => Color::get_css( isset( $attributes['handleColor'] ) ? $attributes['handleColor'] : '' ) ],
286 [ 'color' => Color::get_css( isset( $attributes['handleColor'] ) ? $attributes['handleColor'] : '' ) ],
287 Range::get_css([
288 'attributeValue' => $attributes['sliderIconSize'],
289 'attribute_object_key' => 'value',
290 'isResponsive' => true,
291 'defaultValue' => 50,
292 'unitDefaultValue' => 'px',
293 'property' => 'width',
294 'device' => $device,
295 ]),
296 Range::get_css([
297 'attributeValue' => $attributes['sliderIconSize'],
298 'attribute_object_key' => 'value',
299 'isResponsive' => true,
300 'defaultValue' => 50,
301 'unitDefaultValue' => 'px',
302 'property' => 'height',
303 'device' => $device,
304 ]),
305 Range::get_css([
306 'attributeValue' => $attributes['sliderIconBorderSize'],
307 'attribute_object_key' => 'value',
308 'isResponsive' => true,
309 'defaultValue' => 2,
310 'unitDefaultValue' => 'px',
311 'property' => 'border-width',
312 'device' => $device,
313 ]),
314 $css
315 );
316 }
317
318 public function get_vertical_slider_icon_css( $attributes, $device = '' ) {
319 $slider_position = isset( $attributes['sliderPosition'] ) ? $attributes['sliderPosition'] : 50;
320 $css = [];
321 $css['left'] = '50%';
322 $css['top'] = $slider_position . '%';
323 $css['border-weight'] = 'solid';
324 return array_merge(
325 [ 'border-color' => Color::get_css( isset( $attributes['handleColor'] ) ? $attributes['handleColor'] : '' ) ],
326 [ 'color' => Color::get_css( isset( $attributes['handleColor'] ) ? $attributes['handleColor'] : '' ) ],
327 Range::get_css([
328 'attributeValue' => $attributes['sliderIconSize'],
329 'attribute_object_key' => 'value',
330 'isResponsive' => true,
331 'defaultValue' => 50,
332 'unitDefaultValue' => 'px',
333 'property' => 'width',
334 'device' => $device,
335 ]),
336 Range::get_css([
337 'attributeValue' => $attributes['sliderIconSize'],
338 'attribute_object_key' => 'value',
339 'isResponsive' => true,
340 'defaultValue' => 50,
341 'unitDefaultValue' => 'px',
342 'property' => 'height',
343 'device' => $device,
344 ]),
345 Range::get_css([
346 'attributeValue' => $attributes['sliderIconBorderSize'],
347 'attribute_object_key' => 'value',
348 'isResponsive' => true,
349 'defaultValue' => 2,
350 'unitDefaultValue' => 'px',
351 'property' => 'border-width',
352 'device' => $device,
353 ]),
354 $css
355 );
356 }
357
358 public function get_overlay_css( $attributes, $device = '' ) {
359 return [ 'background' => Color::get_css( isset( $attributes['labelOverlayColor'] ) ? $attributes['labelOverlayColor'] : '' ) ];
360 }
361
362 public function get_image_overlay_css( $attributes, $device = '' ) {
363 $label_border = isset( $attributes['labelBorder'] ) ? $attributes['labelBorder'] : [];
364 $slider_orientation = isset( $attributes['sliderOrientation'] ) ? $attributes['sliderOrientation'] : '';
365 $label_position = isset( $attributes['labelPosition'] ) ? $attributes['labelPosition'] : '';
366
367 // Determine transform value based on the conditions
368 $transform = 'none';
369 if ( $label_position === 45 && $slider_orientation === 'vertical' ) {
370 $transform = 'translateX(-50%)';
371 } elseif ( $label_position === 95 && $slider_orientation === 'vertical' ) {
372 $transform = 'translateX(-100%)';
373 } elseif ( $label_position === 90 && $slider_orientation === 'horizontal' ) {
374 $transform = 'translateY(-100%)';
375 }
376
377 return array_merge(
378 Border::get_css( $label_border, '', $device ),
379 [ 'color' => Color::get_css( isset( $attributes['labelTextColor'] ) ? $attributes['labelTextColor'] : '' ) ],
380 [ 'background' => Color::get_css( isset( $attributes['labelBgColor'] ) ? $attributes['labelBgColor'] : '' ) ],
381 [
382 'transform' => $transform,
383 'max-width' => '30%'
384 ]
385 );
386 }
387
388
389 public function get_image_overlay_hover_css( $attributes, $device = '' ) {
390 return array_merge(
391 Border::get_hover_css( $attributes['labelBorder'], '', $device ),
392 [ 'color' => Color::get_css( isset( $attributes['labelHoverTextColor'] ) ? $attributes['labelHoverTextColor'] : '' ) ],
393 [ 'background' => Color::get_css( isset( $attributes['labelHoverBgColor'] ) ? $attributes['labelHoverBgColor'] : '' ) ],
394 );
395 }
396
397 public function get_before_image_overlay_horizontal_css( $attributes ) {
398 $label_position = isset( $attributes['labelPosition'] ) ? $attributes['labelPosition'] : 45;
399
400 return [
401 'top' => $label_position . '%',
402 'left' => '10px'
403 ];
404 }
405
406 public function get_before_image_overlay_vertical_css( $attributes ) {
407 $label_position = isset( $attributes['labelPosition'] ) ? $attributes['labelPosition'] : 45;
408
409 return [
410 'left' => $label_position . '%',
411 'top' => '10px'
412 ];
413 }
414
415 public function get_after_image_overlay_horizontal_css( $attributes ) {
416 $label_position = isset( $attributes['labelPosition'] ) ? $attributes['labelPosition'] : 45;
417
418 return [
419 'top' => $label_position . '%',
420 'right' => '10px',
421 ];
422 }
423
424 public function get_after_image_overlay_vertical_css( $attributes ) {
425 $label_position = isset( $attributes['labelPosition'] ) ? $attributes['labelPosition'] : 45;
426
427 return [
428 'bottom' => '10px',
429 'left' => $label_position . '%',
430 ];
431 }
432 }
433