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
← All changes | includes/blocks/menu-item/block.php +54 -0 2.9.1 → 2.16.0 View file →
@@ -1,9 +1,17 @@
1 1 <?php
2 2 namespace ABlocks\Blocks\MenuItem;
3 3
4 +if ( ! defined( 'ABSPATH' ) ) {
5 + exit;
6 +}
7 +
4 8 use ABlocks\Classes\BlockBaseAbstract;
5 9 use ABlocks\Classes\CssGenerator;
10 +use ABlocks\Controls\Color;
11 +use ABlocks\Controls\Icon;
12 +use ABlocks\Controls\Range;
13 +
6 14 class Block extends BlockBaseAbstract {
7 15 protected $parent_block_name = 'menu';
8 16 protected $block_name = 'menu-item';
9 17
@@ -10,7 +18,53 @@
10 18 public function build_css( $attributes ) {
11 19 // Generate CSS
12 20 $css_generator = new CssGenerator( $attributes );
13 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 +
14 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 + );
15 69 }
16 70 }