wrapper($input); } private static function field($field, $rowID, $field_name, $formID, $formViewerInstance, $nestedLayout, $form_atomic_Cls_map, $value) { $fieldHelpers = new ClassicFieldHelpers($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->getAtomicCls('rpt-add-btn'), $fieldHelpers->getCustomClasses('rpt-add-btn'), $field->addBtn->btnTyp, $field->fieldName, $addBtnPreIcn, $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->getAtomicCls('add-to-end-btn-wrp'), $fieldHelpers->getCustomClasses('add-to-end-btn-wrp'), $fieldHelpers->getCustomAttributes('add-to-end-btn'), $fieldHelpers->getAtomicCls('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'); $themeBase = new ThemeBase(); $fieldHtml = ''; if (isset($nestedLayout->lg)) { foreach ($nestedLayout->lg as $row) { $fieldHtml .= $themeBase->inputWrapper($formViewerInstance, $row->i); } } // role="region" marks each repeater row as a landmark region // aria-label provides context about which row number this is (dynamically updated by JS) // This helps screen reader users navigate between repeater rows $repeatableWrap = sprintf( '
%8$s
%12$s
', $fieldHelpers->getCustomAttributes('rpt-wrp'), $fieldHelpers->getAtomicCls('rpt-wrp'), $fieldHelpers->getCustomClasses('rpt-wrp'), $fieldHelpers->getCustomAttributes('rpt-grid-wrp'), $fieldHelpers->getAtomicCls('rpt-grid-wrp'), $fieldHelpers->getCustomClasses('rpt-grid-wrp'), $formID, $fieldHtml, $fieldHelpers->getCustomAttributes('pair-btn-wrp'), $fieldHelpers->getAtomicCls('pair-btn-wrp'), $fieldHelpers->getCustomClasses('pair-btn-wrp'), $addBtnMarkup, $fieldHelpers->getCustomAttributes('rpt-rmv-btn'), $fieldHelpers->getAtomicCls('rpt-rmv-btn'), $fieldHelpers->getCustomClasses('rpt-rmv-btn'), $field->removeBtn->btnTyp, $field->fieldName, $removeBtnPreIcn, $fieldHelpers->renderHTMR($field->removeBtn->txt), $removeBtnSufIcn ); $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 // This helps users understand the repeater structure return sprintf( '
%9$s %10$s
', $fieldHelpers->getCustomAttributes('inp-fld-wrp'), $fieldHelpers->getAtomicCls('inp-fld-wrp'), $fieldHelpers->getCustomClasses('inp-fld-wrp'), $fieldHelpers->getCustomAttributes('rpt-fld-wrp'), $fieldHelpers->getAtomicCls('rpt-fld-wrp'), $fieldHelpers->getCustomClasses('rpt-fld-wrp'), $fieldHelpers->getLabelId(), $fieldHelpers->getErrorId(), $repeatedRow, $addToEndBtnMarkup, $fieldHelpers->esc_attr($field->fieldName . '-repeat-index') ); } }