PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 2.8.0
Kubio AI Page Builder v2.8.0
2.8.4 2.8.3 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 / build / block-library / blocks / tab / index.php
kubio / build / block-library / blocks / tab Last commit date
blocks 1 year ago index.php 1 month ago
index.php
227 lines
1 <?php
2
3 namespace Kubio\Blocks;
4
5 use Kubio\Config;
6 use Kubio\Core\Blocks\BlockBase;
7 use Kubio\Core\LodashBasic;
8 use Kubio\Core\Registry;
9 use Kubio\Core\StyleManager\DynamicStyles;
10 use Kubio\Core\Utils;
11
12 class TabBlock extends BlockBase {
13
14 const OUTER = 'outer';
15 const VSPACE = 'v-space';
16 const CONTENT = 'content';
17
18
19 public function mapDynamicStyleToElements() {
20 $dynamicStyles = array();
21 $spaceByMedia = $this->getPropByMedia(
22 'vSpace',
23 array()
24 );
25
26 $dynamicStyles[ self::VSPACE ] = DynamicStyles::vSpace( $spaceByMedia );
27 return $dynamicStyles;
28 }
29
30 public function mapPropsToElements() {
31 $scriptData = Utils::useJSComponentProps( 'tabs' );
32 $layout = $this->getProp( 'layout' );
33 $tabItemsWidthByMedia = $this->getPropByMedia( 'tabItemsWidth' );
34 $classes = array_merge(
35 $this->getTabItemsWidthClasses( $tabItemsWidthByMedia, $layout ),
36 $this->getLayoutClasses( $layout )
37 );
38 return array(
39 self::OUTER => array_merge(
40 array( 'className' => $classes ),
41 $scriptData
42 ),
43 );
44 }
45
46 public function getTabItemsWidthClasses( $valueByMedia, $layout ) {
47 $mediasById = Config::mediasById();
48 $classes = array();
49 foreach ( $mediasById as $mediaId => $media ) {
50 $itemWidth = LodashBasic::get( $valueByMedia, $mediaId );
51 $itemWidthForLayout = LodashBasic::get( $itemWidth, $layout );
52 $gridPrefix = LodashBasic::get( $media, 'gridPrefix' );
53 $prefix = $gridPrefix ? sprintf( '-%s', $gridPrefix ) : '';
54 $widthClass = sprintf( 'h-tabs--%s--%s%s', $layout, $itemWidthForLayout, $prefix );
55 $classes[] = $widthClass;
56 }
57 return $classes;
58 }
59
60 public function getLayoutClasses( $layout ) {
61 $classes = array();
62 switch ( $layout ) {
63 case 'horizontal':
64 $classes[] = 'h-tabs-horizontal';
65 break;
66 case 'vertical':
67 $classes[] = 'h-tabs-vertical';
68 break;
69 }
70 return $classes;
71 }
72 }
73
74 class TabItemsBlock extends BlockBase {
75
76 const OUTER = 'outer';
77
78
79 public function mapPropsToElements() {
80
81 return array();
82 }
83 }
84
85 class TabItemBlock extends BlockBase {
86
87 const OUTER = 'outer';
88 const INNER = 'inner';
89
90 public function mapPropsToElements() {
91 $isFirst = LodashBasic::get( $this->parent_block_->block_data, 'innerBlocks.0.attrs.kubio.hash' )
92 === LodashBasic::get( $this->block_data, 'attrs.kubio.hash' );
93
94 $slug = $this->getAttribute( 'slug' );
95 return array(
96 self::OUTER => array(),
97 self::INNER => array(
98 'id' => esc_attr( $slug ),
99 'className' => $isFirst ? 'h-tabs-content-active' : '',
100 ),
101 );
102 }
103 }
104
105 class TabNavigationBlock extends BlockBase {
106
107 const OUTER = 'outer';
108
109
110 public function mapPropsToElements() {
111
112 $tab_block = Registry::getInstance()->getLastBlockOfName( 'kubio/tab' );
113 $tabItems = LodashBasic::get( $tab_block->block_data, array( 'innerBlocks', 1, 'innerBlocks' ) );
114
115 $content = '';
116 $tabWrapper = new TabBlock( $tab_block->block_data );
117 $iconEnabled = $tabWrapper->getProp( 'icons.show' );
118 foreach ( $tabItems as $index => $tabItem ) {
119 $clone = LodashBasic::merge( array(), $tabItem );
120 $blockWrapper = new TabItemBlock( $clone );
121 $clone['blockName'] = 'kubio/tabnavigationitem';
122 $title = $blockWrapper->getAttribute( 'title' );
123 $slug = $blockWrapper->getAttribute( 'slug' );
124 $icon = $blockWrapper->getAttribute( 'icon' );
125 $context = array(
126 'title' => esc_html( $title ),
127 'slug' => $slug,
128 'iconName' => $icon,
129 'iconEnabled' => $iconEnabled,
130 'arrayIndex' => $index,
131 );
132 $content .= (
133 new \WP_Block(
134 $clone,
135 $context
136 )
137 )->render();
138 }
139
140 return array(
141 self::OUTER => array(
142 'innerHTML' => $content,
143 ),
144 );
145 }
146 }
147
148 class TabNavigationItemBlock extends BlockBase {
149
150 const OUTER = 'outer';
151 const ICON = 'icon';
152 const LINK = 'link';
153 const TEXT = 'text';
154
155 public function computed() {
156 $iconEnabled = LodashBasic::get( $this->block_context, 'iconEnabled' );
157 $title = LodashBasic::get( $this->block_context, 'title' );
158 $shouldRenderText = ! ! $title;
159 return array(
160 'iconEnabled' => $iconEnabled,
161 'shouldRenderText' => $shouldRenderText,
162 );
163 }
164
165 public function mapPropsToElements() {
166
167 $title = LodashBasic::get( $this->block_context, 'title' );
168 $iconName = LodashBasic::get( $this->block_context, 'iconName' );
169 $arrayIndex = LodashBasic::get( $this->block_context, 'arrayIndex' );
170 $link = sprintf( '#%s', LodashBasic::get( $this->block_context, 'slug' ) );
171 if(empty($title)) {
172 $title = '';
173 }
174 return array(
175 self::LINK => array(
176 'href' => esc_url( $link ),
177 'className' => $arrayIndex === 0 ? 'h-tabs-navigation-active-item h-custom-active-state' : '',
178 ),
179 self::ICON => array(
180 'name' => $iconName,
181 ),
182 self::TEXT => array(
183 'innerHTML' => wp_kses_post( $title ),
184 ),
185 );
186 }
187 }
188
189 Registry::registerBlock(
190 __DIR__,
191 TabNavigationBlock::class,
192 array(
193 'metadata' => './blocks/tab-navigation/block.json',
194 )
195 );
196
197 Registry::registerBlock(
198 __DIR__,
199 TabNavigationItemBlock::class,
200 array(
201 'metadata' => './blocks/tab-navigation-item/block.json',
202 )
203 );
204
205 Registry::registerBlock(
206 __DIR__,
207 TabItemBlock::class,
208 array(
209 'metadata' => './blocks/tab-item/block.json',
210 )
211 );
212 Registry::registerBlock(
213 __DIR__,
214 TabItemsBlock::class,
215 array(
216 'metadata' => './blocks/tab-items/block.json',
217 )
218 );
219
220 Registry::registerBlock(
221 __DIR__,
222 TabBlock::class,
223 array(
224 'metadata' => './blocks/tab/block.json',
225 )
226 );
227