PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 3.2.1
JetFormBuilder — Dynamic Blocks Form Builder v3.2.1
3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.1.0 2.1.1 2.1.10 2.1.11 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.0 3.0.0.1 3.0.0.2 3.0.0.3 3.0.1 3.0.1.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.0.1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.3.2 3.3.3 3.3.3.1 3.3.4 3.3.4.1 3.3.4.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.5.1 3.4.5.2 3.4.6 3.4.7 3.4.7.1 3.5.0 3.5.1 3.5.1.1 3.5.1.2 3.5.2 3.5.2.1 3.5.3 3.5.4 3.5.5 3.5.6 3.5.6.1 3.5.6.2 3.5.6.3 3.6.0
jetformbuilder / includes / blocks / render / repeater-field-render.php
jetformbuilder / includes / blocks / render Last commit date
action-button-render.php 2 years ago base-select-radio-check.php 2 years ago base.php 2 years ago calculated-field-render.php 2 years ago checkbox-field-render.php 2 years ago date-field-render.php 2 years ago datetime-field-render.php 2 years ago form-builder.php 2 years ago form-hidden-fields.php 2 years ago group-break-field-render.php 2 years ago heading-field-render.php 2 years ago media-field-render.php 2 years ago number-field-render.php 2 years ago radio-field-render.php 2 years ago range-field-render.php 2 years ago repeater-field-render.php 2 years ago select-field-render.php 2 years ago text-field-render.php 2 years ago textarea-field-render.php 2 years ago time-field-render.php 2 years ago wysiwyg-field-render.php 2 years ago
repeater-field-render.php
149 lines
1 <?php
2
3 namespace Jet_Form_Builder\Blocks\Render;
4
5 // If this file is called directly, abort.
6 use Jet_Form_Builder\Blocks\Block_Helper;
7 use Jet_Form_Builder\Blocks\Types\Repeater_Field;
8 use Jet_Form_Builder\Classes\Builder_Helper;
9 use Jet_Form_Builder\Classes\Tools;
10
11 if ( ! defined( 'WPINC' ) ) {
12 die;
13 }
14
15 /**
16 * @property Repeater_Field block_type
17 *
18 * Class Repeater_Field_Render
19 * @package Jet_Form_Builder\Blocks\Render
20 */
21 class Repeater_Field_Render extends Base {
22
23 public $current_repeater_i = false;
24 public $current_repeater;
25
26 public function get_name() {
27 return 'repeater-field';
28 }
29
30 public function render( $wp_block = null, $template = null ) {
31 if ( empty( $wp_block['innerBlocks'] ) ) {
32 return '';
33 }
34
35 $this->add_attribute( 'class', 'jet-form-builder-repeater jet-form-builder__field' );
36 $this->add_attribute( 'class', $this->block_type->block_attrs['class_name'] );
37 $this->add_attribute( 'data-required', $this->block_type->get_required_val() );
38 $this->add_attribute( 'data-jfb-sync' );
39
40 $attrs = Builder_Helper::attrs(
41 array(
42 array( 'data-field-name', esc_attr( $this->block_type->block_attrs['name'] ) ),
43 array( 'name', esc_attr( $this->block_type->block_attrs['name'] ) ),
44 array( 'data-calc-type', esc_attr( $this->block_type->calc_type ) ),
45 array( 'data-formula', esc_attr( $this->block_type->get_calculated_formula() ) ),
46 array( 'data-manage-items', esc_attr( $this->block_type->manage_items ) ),
47 array( 'data-items-field', esc_attr( $this->block_type->items_field ) ),
48 )
49 );
50
51 $html = '<div class="jet-form-builder__field-wrap">';
52 $content = '';
53
54 foreach ( $this->iterate_rows_html( $wp_block ) as $part ) {
55 $content .= $part;
56 }
57
58 $html .= sprintf(
59 '<div data-repeater="1" %1$s %2$s>%3$s',
60 $attrs,
61 $this->get_attributes_string(),
62 $content
63 );
64
65 if ( ! $this->block_type->manage_items ) {
66 $html .= sprintf(
67 '<div class="jet-form-builder-repeater__actions">
68 <button type="button" class="jet-form-builder-repeater__new">%1$s</button>
69 </div>',
70 wp_kses_post( $this->block_type->new_item_label )
71 );
72 }
73
74 $html .= '</div>';
75 $html .= '</div>';
76
77 return parent::render( null, $html );
78 }
79
80 protected function iterate_rows_html( $wp_block ): \Generator {
81 foreach ( $this->populate_blocks_or_html( $wp_block ) as $row ) {
82 // just html
83 if ( is_string( $row ) ) {
84 yield $row;
85
86 continue;
87 }
88
89 yield Block_Helper::render_with_context(
90 $row,
91 $this->block_type->block_context + array(
92 Repeater_Field::CONTEXT_NAME => $this->block_type->block_attrs['name'] ?? '',
93 Repeater_Field::CONTEXT_MANAGE_ITEMS => $this->block_type->manage_items,
94 )
95 );
96 }
97 }
98
99 protected function populate_blocks_or_html( $wp_block ): \Generator {
100 // repeater template should always render
101 yield array(
102 'blockName' => 'jet-forms/repeater-row',
103 'attrs' => array(
104 'isTemplate' => true,
105 ),
106 'innerBlocks' => $wp_block['innerBlocks'],
107 'innerContent' => $wp_block['innerContent'],
108 );
109
110 $repeater_rows = $this->block_type->block_attrs['default'];
111
112 if ( ! $repeater_rows || ! is_array( $repeater_rows ) ) {
113 yield '<div class="jet-form-builder-repeater__items"></div>';
114
115 return;
116 }
117
118 yield '<div class="jet-form-builder-repeater__items">';
119
120 $repeater_rows = array_values( $repeater_rows );
121 $counter = 0;
122
123 foreach ( $repeater_rows as $row ) {
124 yield array(
125 'blockName' => 'jet-forms/repeater-row',
126 'attrs' => array(
127 'rowDefault' => $row,
128 'currentIndex' => $counter,
129 ),
130 'innerBlocks' => $wp_block['innerBlocks'],
131 'innerContent' => $wp_block['innerContent'],
132 );
133 ++$counter;
134 }
135
136 yield '</div>';
137 }
138
139 /**
140 * @see \Jet_Form_Builder\Blocks\Render\Calculated_Field_Render::get_fields_label_tag
141 *
142 * @return string
143 */
144 protected function get_fields_label_tag(): string {
145 return 'div';
146 }
147
148 }
149