bootstrap_italia-8.x-0.x-dev/src/Helper/FormElement.php
src/Helper/FormElement.php
<?php namespace Drupal\bootstrap_italia\Helper; /** * Helper Form class for bootstrap_italia theme. * * Why isn't it a service? https://www.drupal.org/project/drupal/issues/2002606. */ class FormElement { /** * Set form element. * * @param array<string, mixed> &$variables * Referenced $variables array. */ public static function set(array &$variables): void { if (isset($variables['type'])) { $variables['type'] = self::getType($variables); switch ($variables['type']) { case 'text': case 'textfield': case 'entity_autocomplete': case 'email': case 'search': case 'password': case 'file': case 'color': case 'url': case 'month': case 'week': case 'webform_email_multiple': self::setText($variables); break; case 'number': self::setNumber($variables); break; case 'number_composite': self::setNumberComposite($variables); break; case 'tel': self::setTel($variables); break; case 'textarea': self::setTextarea($variables); break; case 'date': case 'datetime': case 'datelist': case 'datetime_local': case 'time': case 'webform_time': self::setDateTime($variables); break; case 'checkbox': case 'radio': self::setBoolean($variables); break; case 'select': self::setSelect($variables); break; case 'select_composite': self::setSelectComposite($variables); break; } } } /** * Check if label is active. * * @param array<string, mixed> &$variables * Referenced $variables array. */ public static function setActiveLabel(array &$variables): void { if ( isset($variables['element']['#attributes']['value']) && ( !empty($variables['element']['#attributes']['value']) || !empty($variables['element']['#attributes']['placeholder']) ) && !isset($variables['label']['#attributes']['class']['active']) ) { $variables['label']['#attributes']['class'][] = 'active'; } } /** * Return variables type. * * @param array<string, mixed> $variables * Variables array. * * @return string * Element type. */ private static function getType(array $variables): string { $type = $variables['type']; if ($type == 'textfield' && isset($variables['element']['#title_display']) && $variables['element']['#title_display'] == 'invisible' && isset($variables['label_display']) && $variables['label_display'] == 'invisible' ) { $type = 'textfield_composite'; } if ($type == 'number' && isset($variables['element']['#title_display']) && $variables['element']['#title_display'] == 'invisible' && isset($variables['label_display']) && $variables['label_display'] == 'invisible' ) { $type = 'number_composite'; } if ($type == 'url' && isset($variables['element']['#title_display']) && $variables['element']['#title_display'] == 'invisible' && isset($variables['label_display']) && $variables['label_display'] == 'invisible' ) { $type = 'url_composite'; } if ($type === 'select' && isset($variables['element']['#attributes']) && isset($variables['element']['#attributes']['multiple']) && $variables['element']['#attributes']['multiple'] == 'multiple' ) { $type = 'select_multiple'; } if ($type === 'select' && isset($variables['element']['#attributes']) && isset($variables['element']['#attributes']['class']) && in_array('webform-select2', $variables['element']['#attributes']['class'], TRUE) ) { $type = 'select2'; } if ($type == 'select' && isset($variables['element']['#title_display']) && $variables['element']['#title_display'] == 'invisible' && isset($variables['label_display']) && $variables['label_display'] == 'invisible' ) { $type = 'select_composite'; } if ($type === 'radio' && isset($variables['element']['#attributes']) && isset($variables['element']['#attributes']['class']) && in_array('visually-hidden', $variables['element']['#attributes']['class'], TRUE) ) { $type = 'radio_composite'; } if ($type === 'checkbox' && isset($variables['element']['#attributes']) && isset($variables['element']['#attributes']['class']) ) { if (in_array('tableselect', $variables['element']['#attributes']['class'], TRUE)) { $type = 'checkbox_tableselect'; } if (in_array('webform-tableselect-sort', $variables['element']['#attributes']['class'], TRUE)) { $type = 'checkbox_tableselect_sort'; } } if ($type === 'entity_autocomplete' && isset($variables['element']['#title_display']) && $variables['element']['#title_display'] == 'invisible' && isset($variables['label_display']) && $variables['label_display'] == 'invisible' ) { $type = 'entity_autocomplete_composite'; } return $type; } /** * Number element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setNumber(array &$variables): void { $variables['label']['#attributes']['class'][] = 'input-number-label'; $variables['label']['#attributes']['class'][] = 'active'; $variables['attributes']['class'][] = 'form-group'; } /** * Number composite element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setNumberComposite(array &$variables): void { $variables['label']['#attributes']['class'][] = 'input-number-label'; $variables['label']['#attributes']['class'][] = 'active'; } /** * Telephone element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setTel(array &$variables): void { if (isset($variables['element']['#international']) && $variables['element']['#international'] ) { $variables['label']['#attributes']['class'][] = 'active'; } $variables['attributes']['class'][] = 'form-group'; } /** * Textarea element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setTextarea(array &$variables): void { $variables['label']['#attributes']['class'][] = 'active'; $variables['attributes']['class'][] = 'form-group'; } /** * Date time element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setDateTime(array &$variables): void { $variables['label']['#attributes']['class'][] = 'active'; $variables['attributes']['class'][] = 'form-group'; } /** * Text element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setText(array &$variables): void { $variables['attributes']['class'][] = 'form-group'; } /** * Boolean element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setBoolean(array &$variables): void { $variables['attributes']['class'][] = 'form-check'; } /** * Select element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setSelect(array &$variables): void { $variables['attributes']['class'][] = 'select-wrapper'; } /** * Select composite element settings. * * @param array<string, mixed> $variables * Variables array. */ private static function setSelectComposite(array &$variables): void { $variables['attributes']['class'][] = 'select-wrapper'; } }