PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 3.2.2
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v3.2.2
3.3.1 V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 2.10.1 All 138 releases
bit-form / includes / Frontend / Form / View / Theme / Fields / RepeaterField.php

RepeaterField.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 3.2.2, at includes/Frontend/Form/View/Theme/Fields/RepeaterField.php

197 lines 6.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace BitCode\BitForm\Frontend\Form\View\Theme\Fields;
4
5 use BitCode\BitForm\Frontend\Form\View\Theme\ThemeBase;
6
7 class RepeaterField
8 {
9 public static function init($field, $rowID, $field_name, $form_atomic_Cls_map, $formID, $formViewerInstance, $nestedLayout, $error = null, $value = null)
10 {
11 $inputWrapper = new ClassicInputWrapper($field, $rowID, $field_name, $form_atomic_Cls_map, $formID, $error, $value);
12 $input = self::field($field, $rowID, $field_name, $formID, $formViewerInstance, $nestedLayout, $form_atomic_Cls_map, $value);
13 return $inputWrapper->wrapper($input);
14 }
15
16 private static function field($field, $rowID, $field_name, $formID, $formViewerInstance, $nestedLayout, $form_atomic_Cls_map, $value)
17 {
18 $fieldHelpers = new ClassicFieldHelpers($field, $rowID, $form_atomic_Cls_map);
19
20 $addBtnMarkup = '';
21 $addToEndBtnMarkup = '';
22
23 if (isset($field->addBtn->show) && $field->addBtn->show) {
24 $addBtnPreIcn = $fieldHelpers->icon('addBtnPreIcn', 'rpt-add-btn-pre-i');
25 $addBtnSufIcn = $fieldHelpers->icon('addBtnSufIcn', 'rpt-add-btn-suf-i');
26
27 $addBtnMarkup = sprintf(
28 '<button
29 %1$s
30 class="%2$s %3$s"
31 type="%4$s"
32 data-parent-field-name="%5$s"
33 aria-label="Add new row"
34 >
35 %6$s
36 %7$s
37 %8$s
38 </button>',
39 $fieldHelpers->getCustomAttributes('rpt-add-btn'),
40 $fieldHelpers->getAtomicCls('rpt-add-btn'),
41 $fieldHelpers->getCustomClasses('rpt-add-btn'),
42 $field->addBtn->btnTyp,
43 $field->fieldName,
44 $addBtnPreIcn,
45 $fieldHelpers->kses_post($fieldHelpers->renderHTMR($field->addBtn->txt)),
46 $addBtnSufIcn
47 );
48 };
49
50 if (isset($field->addToEndBtn->show) && $field->addToEndBtn->show) {
51 $addToEndBtnPreIcn = $fieldHelpers->icon('addToEndBtnPreIcn', 'add-to-end-btn-pre-i');
52 $addToEndBtnSufIcn = $fieldHelpers->icon('addToEndBtnSufIcn', 'add-to-end-btn-suf-i');
53
54 $addToEndBtnMarkup = sprintf(
55 '<div
56 %1$s
57 class="%2$s %3$s"
58 >
59 <button
60 %4$s
61 class="%5$s %6$s"
62 type="%7$s"
63 data-parent-field-name="%8$s"
64 aria-label="Add new row at end"
65 >
66 %9$s
67 %10$s
68 %11$s
69 </button>
70 </div>',
71 $fieldHelpers->getCustomAttributes('add-to-end-btn-wrp'),
72 $fieldHelpers->getAtomicCls('add-to-end-btn-wrp'),
73 $fieldHelpers->getCustomClasses('add-to-end-btn-wrp'),
74 $fieldHelpers->getCustomAttributes('add-to-end-btn'),
75 $fieldHelpers->getAtomicCls('add-to-end-btn'),
76 $fieldHelpers->getCustomClasses('add-to-end-btn'),
77 $field->addToEndBtn->btnTyp,
78 $field->fieldName,
79 $addToEndBtnPreIcn,
80 $fieldHelpers->kses_post($fieldHelpers->renderHTMR($field->addToEndBtn->txt)),
81 $addToEndBtnSufIcn
82 );
83 };
84
85 $removeBtnPreIcn = $fieldHelpers->icon('removeBtnPreIcn', 'rpt-rmv-btn-pre-i');
86 $removeBtnSufIcn = $fieldHelpers->icon('removeBtnSufIcn', 'rpt-rmv-btn-suf-i');
87
88 $themeBase = new ThemeBase();
89 $fieldHtml = '';
90 if (isset($nestedLayout->lg)) {
91 foreach ($nestedLayout->lg as $row) {
92 $fieldHtml .= $themeBase->inputWrapper($formViewerInstance, $row->i);
93 }
94 }
95
96 // role="region" marks each repeater row as a landmark region
97 // aria-label provides context about which row number this is (dynamically updated by JS)
98 // This helps screen reader users navigate between repeater rows
99 $repeatableWrap = sprintf(
100 '<div
101 %1$s
102 class="%2$s %3$s"
103 role="region"
104 aria-label="Repeater row"
105 >
106 <div
107 %4$s
108 class="%5$s %6$s"
109 >
110 <div class="_frm-b%7$s b%7$s-bf-repeater-grid bf-repeater-grid">
111 %8$s
112 </div>
113 </div>
114 <div
115 %9$s
116 class="%10$s %11$s"
117 >
118 %12$s
119 <button
120 %13$s
121 class="%14$s %15$s"
122 type="%16$s"
123 data-parent-field-name="%17$s"
124 aria-label="Remove this row"
125 >
126 %18$s
127 %19$s
128 %20$s
129 </button>
130 </div>
131 </div>',
132 $fieldHelpers->getCustomAttributes('rpt-wrp'),
133 $fieldHelpers->getAtomicCls('rpt-wrp'),
134 $fieldHelpers->getCustomClasses('rpt-wrp'),
135 $fieldHelpers->getCustomAttributes('rpt-grid-wrp'),
136 $fieldHelpers->getAtomicCls('rpt-grid-wrp'),
137 $fieldHelpers->getCustomClasses('rpt-grid-wrp'),
138 $formID,
139 $fieldHtml,
140 $fieldHelpers->getCustomAttributes('pair-btn-wrp'),
141 $fieldHelpers->getAtomicCls('pair-btn-wrp'),
142 $fieldHelpers->getCustomClasses('pair-btn-wrp'),
143 $addBtnMarkup,
144 $fieldHelpers->getCustomAttributes('rpt-rmv-btn'),
145 $fieldHelpers->getAtomicCls('rpt-rmv-btn'),
146 $fieldHelpers->getCustomClasses('rpt-rmv-btn'),
147 $field->removeBtn->btnTyp,
148 $field->fieldName,
149 $removeBtnPreIcn,
150 $fieldHelpers->renderHTMR($field->removeBtn->txt),
151 $removeBtnSufIcn
152 );
153
154 $repeatedRow = apply_filters('bitform_repeater_repeated_rows', $repeatableWrap, $field);
155
156 // role="group" indicates this is a collection of related form controls
157 // aria-labelledby links to the field label for screen reader context
158 // This helps users understand the repeater structure
159 return sprintf(
160 '<div
161 %1$s
162 class="%2$s %3$s"
163 >
164 <div
165 %4$s
166 class="%5$s %6$s"
167 role="group"
168 aria-labelledby="%7$s"
169 aria-describedby="%8$s"
170 >
171 %9$s
172 %10$s
173 <input
174 type="text"
175 class="d-none"
176 title="Rpeater Index Hidden Input"
177 name="%11$s"
178 value=""
179 aria-hidden="true"
180 />
181 </div>
182 </div>',
183 $fieldHelpers->getCustomAttributes('inp-fld-wrp'),
184 $fieldHelpers->getAtomicCls('inp-fld-wrp'),
185 $fieldHelpers->getCustomClasses('inp-fld-wrp'),
186 $fieldHelpers->getCustomAttributes('rpt-fld-wrp'),
187 $fieldHelpers->getAtomicCls('rpt-fld-wrp'),
188 $fieldHelpers->getCustomClasses('rpt-fld-wrp'),
189 $fieldHelpers->getLabelId(),
190 $fieldHelpers->getErrorId(),
191 $repeatedRow,
192 $addToEndBtnMarkup,
193 $fieldHelpers->esc_attr($field->fieldName . '-repeat-index')
194 );
195 }
196 }
197