function webform_bootstrap_webform_element_alter in Webform 6.x
Same name and namespace in other branches
- 8.5 modules/webform_bootstrap/webform_bootstrap.module \webform_bootstrap_webform_element_alter()
Implements hook_webform_element_alter().
File
- modules/
webform_bootstrap/ webform_bootstrap.module, line 44 - Helps support Webform to Bootstrap integration.
Code
function webform_bootstrap_webform_element_alter(array &$element, FormStateInterface $form_state, array $context) {
if (!_webform_bootstrap_is_active_theme()) {
return;
}
// Convert #description are being changed smart descriptions which
// contain render arrays to rendered markup.
// @see \Drupal\bootstrap\Utility\Element::smartDescription
static $smart_description_enabled;
if (!isset($smart_description_enabled)) {
$theme = \Drupal\bootstrap\Bootstrap::getTheme();
$smart_description_enabled = $theme
->getSetting('tooltip_enabled') && $theme
->getSetting('forms_smart_descriptions');
}
// We need to set $element['#smart_description'] to false if the element's
// description_display is set to 'before' or 'after' otherwise Bootstrap will
// display as a tooltip regardless of the setting.
if ($smart_description_enabled && isset($element['#description']) && isset($element['#description_display']) && empty($element['#smart_description']) && ($element['#description_display'] === 'after' || $element['#description_display'] === 'before')) {
$element['#smart_description'] = FALSE;
}
if ($smart_description_enabled && isset($element['#description']) && is_array($element['#description']) && (empty($element['#smart_description']) || $element['#smart_description'] === TRUE)) {
$element['#description'] = \Drupal::service('renderer')
->renderPlain($element['#description']);
}
// Enable Bootstrap .input-group wrapper for #field_prefix.
// and/or #field_suffix support.
// @see \Drupal\bootstrap\Plugin\ProcessManager::process
if (isset($element['#field_prefix']) || isset($element['#field_suffix'])) {
$element['#input_group'] = TRUE;
}
// Tweak element types.
if (isset($element['#type'])) {
$element_info = \Drupal::service('element_info')
->getInfo($element['#type']);
if (isset($element_info['#pre_render'])) {
foreach ($element_info['#pre_render'] as $pre_render) {
if (is_array($pre_render) && in_array($pre_render[1], [
'preRenderCompositeFormElement',
'preRenderWebformCompositeFormElement',
])) {
// Prevent elements that extend radios and checkboxes from being wrapped
// in a fieldset.
// @see \Drupal\bootstrap\Plugin\Alter\ElementInfo::alter
$element['#bootstrap_panel'] = FALSE;
break;
}
}
}
}
}