PluginProbe ʕ •ᴥ•ʔ
GenerateBlocks / 1.4.0
GenerateBlocks v1.4.0
trunk 1.0 1.0.1 1.0.2 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 2.0.0 2.0.1 2.0.2 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.3.0
generateblocks / includes / class-render-blocks.php
generateblocks / includes Last commit date
class-do-css.php 4 years ago class-enqueue-css.php 4 years ago class-legacy-attributes.php 4 years ago class-plugin-update.php 5 years ago class-render-blocks.php 4 years ago class-rest.php 5 years ago class-settings.php 5 years ago dashboard.php 5 years ago defaults.php 4 years ago functions.php 4 years ago general.php 4 years ago generate-css.php 4 years ago
class-render-blocks.php
278 lines
1 <?php
2 /**
3 * This file handles the dynamic parts of our blocks.
4 *
5 * @package GenerateBlocks
6 */
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit; // Exit if accessed directly.
10 }
11
12 /**
13 * Render the dynamic aspects of our blocks.
14 *
15 * @since 1.2.0
16 */
17 class GenerateBlocks_Render_Block {
18 /**
19 * Instance.
20 *
21 * @access private
22 * @var object Instance
23 * @since 1.2.0
24 */
25 private static $instance;
26
27 /**
28 * Initiator.
29 *
30 * @since 1.2.0
31 * @return object initialized object of class.
32 */
33 public static function get_instance() {
34 if ( ! isset( self::$instance ) ) {
35 self::$instance = new self();
36 }
37
38 return self::$instance;
39 }
40
41 /**
42 * Constructor.
43 */
44 public function __construct() {
45 add_action( 'init', array( $this, 'register_blocks' ) );
46 }
47
48 /**
49 * Register our dynamic blocks.
50 *
51 * @since 1.2.0
52 */
53 public function register_blocks() {
54 register_block_type(
55 'generateblocks/container',
56 array(
57 'title' => esc_html__( 'Container', 'generateblocks' ),
58 'render_callback' => array( $this, 'do_container_block' ),
59 )
60 );
61
62 register_block_type(
63 'generateblocks/grid',
64 array(
65 'title' => esc_html__( 'Grid', 'generateblocks' ),
66 'render_callback' => array( $this, 'do_grid_block' ),
67 )
68 );
69
70 register_block_type(
71 'generateblocks/button-container',
72 array(
73 'title' => esc_html__( 'Buttons', 'generateblocks' ),
74 'render_callback' => array( $this, 'do_button_container' ),
75 )
76 );
77 }
78
79 /**
80 * Output the dynamic aspects of our Container block.
81 *
82 * @since 1.2.0
83 * @param array $attributes The block attributes.
84 * @param string $content The inner blocks.
85 */
86 public function do_container_block( $attributes, $content ) {
87 if ( ! isset( $attributes['isDynamic'] ) || ! $attributes['isDynamic'] ) {
88 return $content;
89 }
90
91 $defaults = generateblocks_get_block_defaults();
92
93 $settings = wp_parse_args(
94 $attributes,
95 $defaults['container']
96 );
97
98 $output = '';
99
100 if ( $settings['isGrid'] ) {
101 $gridItemClassNames = array(
102 'gb-grid-column',
103 'gb-grid-column-' . $settings['uniqueId'],
104 );
105
106 $output .= sprintf(
107 '<div %s>',
108 generateblocks_attr(
109 'grid-item',
110 array(
111 'class' => implode( ' ', $gridItemClassNames ),
112 ),
113 $settings
114 )
115 );
116 }
117
118 $classNames = array(
119 'gb-container',
120 'gb-container-' . $settings['uniqueId'],
121 );
122
123 if ( ! empty( $settings['className'] ) ) {
124 $classNames[] = $settings['className'];
125 }
126
127 if ( ! $settings['isGrid'] && ! empty( $settings['align'] ) ) {
128 $classNames[] = 'align' . $settings['align'];
129 }
130
131 $tagName = apply_filters( 'generateblocks_container_tagname', $settings['tagName'], $attributes );
132
133 $allowedTagNames = apply_filters(
134 'generateblocks_container_allowed_tagnames',
135 array(
136 'div',
137 'section',
138 'header',
139 'footer',
140 'aside',
141 'a',
142 ),
143 $attributes
144 );
145
146 if ( ! in_array( $tagName, $allowedTagNames ) ) {
147 $tagName = 'div';
148 }
149
150 $output .= sprintf(
151 '<%1$s %2$s>',
152 $tagName,
153 generateblocks_attr(
154 'container',
155 array(
156 'id' => isset( $settings['anchor'] ) ? $settings['anchor'] : null,
157 'class' => implode( ' ', $classNames ),
158 ),
159 $settings
160 )
161 );
162
163 $output = apply_filters( 'generateblocks_after_container_open', $output, $attributes );
164 $output .= '<div class="gb-inside-container">';
165 $output = apply_filters( 'generateblocks_inside_container', $output, $attributes );
166 $output .= $content;
167 $output .= '</div>';
168 $output = apply_filters( 'generateblocks_before_container_close', $output, $attributes );
169
170 $output .= sprintf(
171 '</%s>',
172 $tagName
173 );
174
175 if ( $settings['isGrid'] ) {
176 $output .= '</div>';
177 }
178
179 return $output;
180 }
181
182 /**
183 * Output the dynamic aspects of our Grid block.
184 *
185 * @since 1.2.0
186 * @param array $attributes The block attributes.
187 * @param string $content The inner blocks.
188 */
189 public function do_grid_block( $attributes, $content ) {
190 if ( ! isset( $attributes['isDynamic'] ) || ! $attributes['isDynamic'] ) {
191 return $content;
192 }
193
194 $defaults = generateblocks_get_block_defaults();
195
196 $settings = wp_parse_args(
197 $attributes,
198 $defaults['gridContainer']
199 );
200
201 $classNames = array(
202 'gb-grid-wrapper',
203 'gb-grid-wrapper-' . $settings['uniqueId'],
204 );
205
206 if ( ! empty( $settings['className'] ) ) {
207 $classNames[] = $settings['className'];
208 }
209
210 $output = sprintf(
211 '<div %s>',
212 generateblocks_attr(
213 'grid-wrapper',
214 array(
215 'id' => isset( $settings['anchor'] ) ? $settings['anchor'] : null,
216 'class' => implode( ' ', $classNames ),
217 ),
218 $settings
219 )
220 );
221
222 $output .= $content;
223
224 $output .= '</div>';
225
226 return $output;
227 }
228
229 /**
230 * Output the dynamic aspects of our Button Container block.
231 *
232 * @since 1.2.0
233 * @param array $attributes The block attributes.
234 * @param string $content The inner blocks.
235 */
236 public function do_button_container( $attributes, $content ) {
237 if ( ! isset( $attributes['isDynamic'] ) || ! $attributes['isDynamic'] ) {
238 return $content;
239 }
240
241 $defaults = generateblocks_get_block_defaults();
242
243 $settings = wp_parse_args(
244 $attributes,
245 $defaults['buttonContainer']
246 );
247
248 $classNames = array(
249 'gb-button-wrapper',
250 'gb-button-wrapper-' . $settings['uniqueId'],
251 );
252
253 if ( ! empty( $settings['className'] ) ) {
254 $classNames[] = $settings['className'];
255 }
256
257 $output = sprintf(
258 '<div %s>',
259 generateblocks_attr(
260 'button-container',
261 array(
262 'id' => isset( $settings['anchor'] ) ? $settings['anchor'] : null,
263 'class' => implode( ' ', $classNames ),
264 ),
265 $settings
266 )
267 );
268
269 $output .= $content;
270
271 $output .= '</div>';
272
273 return $output;
274 }
275 }
276
277 GenerateBlocks_Render_Block::get_instance();
278