PluginProbe
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder / 2.16.0
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder v2.16.0
2.16.0 2.15.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 All 83 releases
ablocks / includes / blocks / menu-item / block.php

block.php in aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder 2.16.0, at includes/blocks/menu-item/block.php

71 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace ABlocks\Blocks\MenuItem;
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit;
6 }
7
8 use ABlocks\Classes\BlockBaseAbstract;
9 use ABlocks\Classes\CssGenerator;
10 use ABlocks\Controls\Color;
11 use ABlocks\Controls\Icon;
12 use ABlocks\Controls\Range;
13
14 class Block extends BlockBaseAbstract {
15 protected $parent_block_name = 'menu';
16 protected $block_name = 'menu-item';
17
18 public function build_css( $attributes ) {
19 // Generate CSS
20 $css_generator = new CssGenerator( $attributes );
21
22 if ( ! empty( $attributes['showIcon'] ) ) {
23 // Child combinators keep this item's icon styles out of the menu
24 // items nested in its submenu.
25 $icon_wrap = '{{WRAPPER}} > .ablocks-menu-item__link > .ablocks-icon-wrap';
26 $icon_wrap_hover = '{{WRAPPER}}:hover > .ablocks-menu-item__link > .ablocks-icon-wrap';
27 $styles = [
28 '{{WRAPPER}} > .ablocks-menu-item__link' => [ $this, 'get_link_css' ],
29 $icon_wrap => [ Icon::class, 'get_wrapper_css' ],
30 $icon_wrap . ' svg.ablocks-svg-icon' => [ $this, 'get_icon_css' ],
31 $icon_wrap . ' img.ablocks-image-icon' => [ Icon::class, 'get_element_image_css' ],
32 $icon_wrap_hover . ' svg.ablocks-svg-icon, ' . $icon_wrap_hover . ' img.ablocks-image-icon' => [ Icon::class, 'get_element_image_hover_css' ],
33 ];
34 foreach ( $styles as $selector => $get_css ) {
35 $css_generator->add_class_styles(
36 $selector,
37 call_user_func( $get_css, $attributes ),
38 call_user_func( $get_css, $attributes, 'Tablet' ),
39 call_user_func( $get_css, $attributes, 'Mobile' ),
40 $css_generator->custom_device_map( function ( $device ) use ( $attributes, $get_css ) { return call_user_func( $get_css, $attributes, $device ); } )
41 );
42 }
43 }
44
45 return $css_generator->generate_css();
46 }
47
48 public function get_link_css( $attributes, $device = '' ) {
49 return Range::get_css([
50 'attributeValue' => $attributes['iconSpace'],
51 'attribute_object_key' => 'value',
52 'isResponsive' => true,
53 'defaultValue' => 8,
54 'hasUnit' => true,
55 'unitDefaultValue' => 'px',
56 'property' => 'column-gap',
57 'device' => $device,
58 ]);
59 }
60
61 // Without an icon color the icon follows the link text color, so the Menu
62 // block's normal/hover/active link colors apply to it too.
63 public function get_icon_css( $attributes, $device = '' ) {
64 $color = Color::get_css( isset( $attributes['iconColor'] ) ? $attributes['iconColor'] : '' );
65 return array_merge(
66 Icon::get_element_css( $attributes, $device ),
67 [ 'fill' => $color ? $color : 'currentColor' ]
68 );
69 }
70 }
71