wrapper($input); } private static function field($field, $rowID, $field_name, $formID, $formViewerInstance, $nestedLayout, $form_atomic_Cls_map, $value) { $fieldHelpers = new ConversationalFieldHelpers($formID, $field, $rowID, $form_atomic_Cls_map); $addBtnMarkup = ''; $addToEndBtnMarkup = ''; if (isset($field->addBtn->show) && $field->addBtn->show) { $addBtnPreIcn = $fieldHelpers->icon('addBtnPreIcn', 'rpt-add-btn-pre-i'); $addBtnSufIcn = $fieldHelpers->icon('addBtnSufIcn', 'rpt-add-btn-suf-i'); $addBtnMarkup = sprintf( ' ', $fieldHelpers->getCustomAttributes('rpt-add-btn'), $fieldHelpers->getConversationalMultiCls('rpt-add-btn') . ' ' . $fieldHelpers->getCustomClasses('rpt-add-btn'), $field->addBtn->btnTyp, $field->fieldName, $fieldHelpers->getConversationalMultiCls('rpt-add-btn-pre-i'), $fieldHelpers->kses_post($fieldHelpers->renderHTMR($field->addBtn->txt)), $addBtnSufIcn ); }; if (isset($field->addToEndBtn->show) && $field->addToEndBtn->show) { $addToEndBtnPreIcn = $fieldHelpers->icon('addToEndBtnPreIcn', 'add-to-end-btn-pre-i'); $addToEndBtnSufIcn = $fieldHelpers->icon('addToEndBtnSufIcn', 'add-to-end-btn-suf-i'); $addToEndBtnMarkup = sprintf( '
', $fieldHelpers->getCustomAttributes('add-to-end-btn-wrp'), $fieldHelpers->getConversationalMultiCls('add-to-end-btn-wrp') . ' ' . $fieldHelpers->getCustomClasses('add-to-end-btn-wrp'), $fieldHelpers->getCustomAttributes('add-to-end-btn'), $fieldHelpers->getConversationalMultiCls('add-to-end-btn') . ' ' . $fieldHelpers->getCustomClasses('add-to-end-btn'), $field->addToEndBtn->btnTyp, $field->fieldName, $addToEndBtnPreIcn, $fieldHelpers->kses_post($fieldHelpers->renderHTMR($field->addToEndBtn->txt)), $addToEndBtnSufIcn ); }; $removeBtnPreIcn = $fieldHelpers->icon('removeBtnPreIcn', 'rpt-rmv-btn-pre-i'); $removeBtnSufIcn = $fieldHelpers->icon('removeBtnSufIcn', 'rpt-rmv-btn-suf-i'); $conversationalTheme = new DefaultConversationalTheme($formViewerInstance->getFormInfo()->conversationalSettings); $fieldHtml = ''; if (isset($nestedLayout->lg)) { foreach ($nestedLayout->lg as $row) { $fieldHtml .= $conversationalTheme->inputWrapper($formViewerInstance, $row->i, true); } } // role="region" marks each repeater row as a landmark region for screen reader navigation // aria-label provides context about the row (dynamically updated by JS when rows change) $repeatableWrap = '
getCustomAttributes('rpt-wrp') . ' class="' . $fieldHelpers->getConversationalMultiCls('rpt-wrp') . ' ' . $fieldHelpers->getCustomClasses('rpt-wrp') . '" role="region" aria-label="Repeater row" >
getCustomAttributes('rpt-grid-wrp') . ' class="' . $fieldHelpers->getConversationalMultiCls('rpt-grid-wrp') . ' ' . $fieldHelpers->getCustomClasses('rpt-grid-wrp') . '" >
' . $fieldHtml . '
getCustomAttributes('pair-btn-wrp') . ' class="' . $fieldHelpers->getConversationalMultiCls('pair-btn-wrp') . ' ' . $fieldHelpers->getCustomClasses('pair-btn-wrp') . '" > ' . $addBtnMarkup . '
'; $repeatedRow = apply_filters('bitform_repeater_repeated_rows', $repeatableWrap, $field); // role="group" indicates this is a collection of related form controls // aria-labelledby links to the field label for screen reader context return sprintf( '
%7$s %8$s
', $fieldHelpers->getCustomAttributes('inp-fld-wrp'), $fieldHelpers->getConversationalMultiCls('inp-fld-wrp') . ' ' . $fieldHelpers->getConversationalCls('inner-grid-fld-wrp') . ' ' . $fieldHelpers->getCustomClasses('inp-fld-wrp'), $fieldHelpers->getCustomAttributes('rpt-fld-wrp'), $fieldHelpers->getConversationalMultiCls('rpt-fld-wrp') . ' ' . $fieldHelpers->getCustomClasses('rpt-fld-wrp'), $fieldHelpers->getLabelId(), $fieldHelpers->getErrorId(), $repeatedRow, $addToEndBtnMarkup, $fieldHelpers->esc_attr($field->fieldName . '-repeat-index') ); } }