function webform_bootstrap_webform_element_alter in Webform 8.5
Same name and namespace in other branches
- 6.x 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;
}
// Remove jQuery Tooltip and use Bootstrap Tooltip.
// @see \Drupal\webform\Plugin\WebformElementBase::prepare
if (isset($element['#attached']['library'][0]) && $element['#attached']['library'][0] === 'webform/webform.tooltip') {
unset($element['#attached']['library'][0]);
$element['#attached']['library'] = array_values($element['#attached']['library']);
}
// 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;
}
}
}
}
}