PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / V3.0.2
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder vV3.0.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 / Conversational / Fields / RepeaterField.php

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

167 lines 6.9 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\Conversational\Fields;
4
5 use BitCode\BitForm\Frontend\Form\View\Conversational\DefaultConversationalTheme;
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 ConversationalInputWrapper($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 ConversationalFieldHelpers($formID, $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 $addBtnMarkup = sprintf(
27 ' <button
28 %1$s
29 class="%2$s"
30 type="%3$s"
31 data-parent-field-name="%4$s"
32 aria-label="Add new row"
33 >
34 <svg class="%5$s" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 24 24"><path fill="currentColor" d="M11 13H5v-2h6V5h2v6h6v2h-6v6h-2v-6Z"/></svg>
35 %6$s
36 %7$s
37 </button>',
38 $fieldHelpers->getCustomAttributes('rpt-add-btn'),
39 $fieldHelpers->getConversationalMultiCls('rpt-add-btn') . ' ' . $fieldHelpers->getCustomClasses('rpt-add-btn'),
40 $field->addBtn->btnTyp,
41 $field->fieldName,
42 $fieldHelpers->getConversationalMultiCls('rpt-add-btn-pre-i'),
43 $fieldHelpers->kses_post($fieldHelpers->renderHTMR($field->addBtn->txt)),
44 $addBtnSufIcn
45 );
46 };
47
48 if (isset($field->addToEndBtn->show) && $field->addToEndBtn->show) {
49 $addToEndBtnPreIcn = $fieldHelpers->icon('addToEndBtnPreIcn', 'add-to-end-btn-pre-i');
50 $addToEndBtnSufIcn = $fieldHelpers->icon('addToEndBtnSufIcn', 'add-to-end-btn-suf-i');
51 $addToEndBtnMarkup = sprintf(
52 ' <div
53 %1$s
54 class="%2$s"
55 >
56 <button
57 %3$s
58 class="%4$s"
59 type="%5$s"
60 data-parent-field-name="%6$s"
61 aria-label="Add new row at end"
62 >
63 %7$s
64 %8$s
65 %9$s
66 </button>
67 </div>',
68 $fieldHelpers->getCustomAttributes('add-to-end-btn-wrp'),
69 $fieldHelpers->getConversationalMultiCls('add-to-end-btn-wrp') . ' ' . $fieldHelpers->getCustomClasses('add-to-end-btn-wrp'),
70 $fieldHelpers->getCustomAttributes('add-to-end-btn'),
71 $fieldHelpers->getConversationalMultiCls('add-to-end-btn') . ' ' . $fieldHelpers->getCustomClasses('add-to-end-btn'),
72 $field->addToEndBtn->btnTyp,
73 $field->fieldName,
74 $addToEndBtnPreIcn,
75 $fieldHelpers->kses_post($fieldHelpers->renderHTMR($field->addToEndBtn->txt)),
76 $addToEndBtnSufIcn
77 );
78 };
79
80 $removeBtnPreIcn = $fieldHelpers->icon('removeBtnPreIcn', 'rpt-rmv-btn-pre-i');
81 $removeBtnSufIcn = $fieldHelpers->icon('removeBtnSufIcn', 'rpt-rmv-btn-suf-i');
82
83 $conversationalTheme = new DefaultConversationalTheme($formViewerInstance->getFormInfo()->conversationalSettings);
84 $fieldHtml = '';
85 if (isset($nestedLayout->lg)) {
86 foreach ($nestedLayout->lg as $row) {
87 $fieldHtml .= $conversationalTheme->inputWrapper($formViewerInstance, $row->i, true);
88 }
89 }
90
91 // role="region" marks each repeater row as a landmark region for screen reader navigation
92 // aria-label provides context about the row (dynamically updated by JS when rows change)
93 $repeatableWrap = '
94 <div
95 ' . $fieldHelpers->getCustomAttributes('rpt-wrp') . '
96 class="' . $fieldHelpers->getConversationalMultiCls('rpt-wrp') . ' ' . $fieldHelpers->getCustomClasses('rpt-wrp') . '"
97 role="region"
98 aria-label="Repeater row"
99 >
100 <div
101 ' . $fieldHelpers->getCustomAttributes('rpt-grid-wrp') . '
102 class="' . $fieldHelpers->getConversationalMultiCls('rpt-grid-wrp') . ' ' . $fieldHelpers->getCustomClasses('rpt-grid-wrp') . '"
103 >
104 <div class="_frm-b' . $formID . ' b' . $formID . '-bf-repeater-grid bf-repeater-grid">
105 ' . $fieldHtml . '
106 </div>
107 </div>
108 <div
109 ' . $fieldHelpers->getCustomAttributes('pair-btn-wrp') . '
110 class="' . $fieldHelpers->getConversationalMultiCls('pair-btn-wrp') . ' ' . $fieldHelpers->getCustomClasses('pair-btn-wrp') . '"
111 >
112 ' . $addBtnMarkup . '
113 <button
114 ' . $fieldHelpers->getCustomAttributes('rpt-rmv-btn') . '
115 class="' . $fieldHelpers->getConversationalMultiCls('rpt-rmv-btn') . ' ' . $fieldHelpers->getCustomClasses('rpt-rmv-btn') . '"
116 type="' . $field->removeBtn->btnTyp . '"
117 data-parent-field-name="' . $field->fieldName . '"
118 aria-label="Remove this row"
119 >
120 <svg class="' . $fieldHelpers->getConversationalCls('rpt-rmv-btn-pre-i') . '" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 24 24"><path fill="currentColor" d="M19 12.998H5v-2h14z"/></svg>
121 ' . $fieldHelpers->renderHTMR($field->removeBtn->txt) . '
122 ' . $removeBtnSufIcn . '
123 </button>
124 </div>
125 </div>';
126
127 $repeatedRow = apply_filters('bitform_repeater_repeated_rows', $repeatableWrap, $field);
128
129 // role="group" indicates this is a collection of related form controls
130 // aria-labelledby links to the field label for screen reader context
131 return sprintf(
132 ' <div
133 %1$s
134 class="%2$s"
135 >
136 <div
137 %3$s
138 class="%4$s"
139 role="group"
140 aria-labelledby="{%5$s}"
141 aria-describedby="{%6$s}"
142 >
143 %7$s
144 %8$s
145 <input
146 type="text"
147 class="d-none"
148 title="Rpeater Index Hidden Input"
149 name="%9$s"
150 value=""
151 aria-hidden="true"
152 />
153 </div>
154 </div>',
155 $fieldHelpers->getCustomAttributes('inp-fld-wrp'),
156 $fieldHelpers->getConversationalMultiCls('inp-fld-wrp') . ' ' . $fieldHelpers->getConversationalCls('inner-grid-fld-wrp') . ' ' . $fieldHelpers->getCustomClasses('inp-fld-wrp'),
157 $fieldHelpers->getCustomAttributes('rpt-fld-wrp'),
158 $fieldHelpers->getConversationalMultiCls('rpt-fld-wrp') . ' ' . $fieldHelpers->getCustomClasses('rpt-fld-wrp'),
159 $fieldHelpers->getLabelId(),
160 $fieldHelpers->getErrorId(),
161 $repeatedRow,
162 $addToEndBtnMarkup,
163 $fieldHelpers->esc_attr($field->fieldName . '-repeat-index')
164 );
165 }
166 }
167