function claro_form_alter

Same name in other branches
  1. 9 core/themes/claro/claro.theme \claro_form_alter()
  2. 8.9.x core/themes/claro/claro.theme \claro_form_alter()
  3. 10 core/themes/claro/claro.theme \claro_form_alter()

Implements hook_form_alter().

File

core/themes/claro/claro.theme, line 415

Code

function claro_form_alter(array &$form, FormStateInterface $form_state, $form_id) : void {
    $build_info = $form_state->getBuildInfo();
    $form_object = $form_state->getFormObject();
    // Make entity forms delete link use the action-link component.
    if (isset($form['actions']['delete']['#type']) && $form['actions']['delete']['#type'] === 'link' && !empty($build_info['callback_object']) && $build_info['callback_object'] instanceof EntityForm) {
        $form['actions']['delete'] = _claro_convert_link_to_action_link($form['actions']['delete'], 'trash', 'default', 'danger');
    }
    if (isset($form['actions']['delete_translation']['#type']) && $form['actions']['delete_translation']['#type'] === 'link' && !empty($build_info['callback_object']) && $build_info['callback_object'] instanceof EntityForm) {
        $form['actions']['delete_translation'] = _claro_convert_link_to_action_link($form['actions']['delete_translation'], 'trash', 'default', 'danger');
    }
    if (($form_object instanceof ViewsForm || $form_object instanceof ViewsFormInterface) && isset($form['override']['#prefix'])) {
        // Replace form--inline class so positioning of override form elements don't
        // have to depend on floats.
        $form['override']['#prefix'] = str_replace('form--inline', 'form--flex', $form['override']['#prefix']);
    }
    if ($form_object instanceof ViewsForm && str_starts_with($form_object->getBaseFormId(), 'views_form_media_library')) {
        if (isset($form['header'])) {
            $form['header']['#attributes']['class'][] = 'media-library-views-form__header';
            $form['header']['media_bulk_form']['#attributes']['class'][] = 'media-library-views-form__bulk_form';
        }
        $form['actions']['submit']['#attributes']['class'] = [
            'media-library-select',
        ];
        $form['#attributes']['class'][] = 'media-library-views-form';
    }
    if ($form_object instanceof ViewsForm && !empty($form['header'])) {
        $view = $form_state->getBuildInfo()['args'][0];
        $view_title = $view->getTitle();
        // Determine if the Views form includes a bulk operations form. If it does,
        // move it to the bottom and remove the second bulk operations submit.
        foreach (Element::children($form['header']) as $key) {
            if (str_contains($key, '_bulk_form')) {
                // Move the bulk actions form from the header to its own container.
                $form['bulk_actions_container'] = $form['header'][$key];
                unset($form['header'][$key]);
                // Remove the supplementary bulk operations submit button as it appears
                // in the same location the form was moved to.
                unset($form['actions']);
                $form['bulk_actions_container']['#attributes']['data-drupal-views-bulk-actions'] = '';
                $form['bulk_actions_container']['#attributes']['class'][] = 'views-bulk-actions';
                $form['bulk_actions_container']['actions']['submit']['#button_type'] = 'primary';
                $form['bulk_actions_container']['actions']['submit']['#attributes']['class'][] = 'button--small';
                $label = t('Perform actions on the selected items in the %view_title view', [
                    '%view_title' => $view_title,
                ]);
                $label_id = $key . '_group_label';
                // Group the bulk actions select and submit elements, and add a label
                // that makes the purpose of these elements more clear to
                // screen readers.
                $form['bulk_actions_container']['#attributes']['role'] = 'group';
                $form['bulk_actions_container']['#attributes']['aria-labelledby'] = $label_id;
                $form['bulk_actions_container']['group_label'] = [
                    '#type' => 'container',
                    '#markup' => $label,
                    '#attributes' => [
                        'id' => $label_id,
                        'class' => [
                            'visually-hidden',
                        ],
                    ],
                    '#weight' => -1,
                ];
                // Add a status label for counting the number of items selected.
                $form['bulk_actions_container']['status'] = [
                    '#type' => 'container',
                    '#markup' => t('No items selected'),
                    '#weight' => -1,
                    '#attributes' => [
                        'class' => [
                            'js-views-bulk-actions-status',
                            'views-bulk-actions__item',
                            'views-bulk-actions__item--status',
                            'js-show',
                        ],
                        'data-drupal-views-bulk-actions-status' => '',
                    ],
                ];
                // Loop through bulk actions items and add the needed CSS classes.
                $bulk_action_item_keys = Element::children($form['bulk_actions_container'], TRUE);
                $bulk_last_key = NULL;
                $bulk_child_before_actions_key = NULL;
                foreach ($bulk_action_item_keys as $bulk_action_item_key) {
                    if (!empty($form['bulk_actions_container'][$bulk_action_item_key]['#type'])) {
                        if ($form['bulk_actions_container'][$bulk_action_item_key]['#type'] === 'actions') {
                            // We need the key of the element that precedes the actions
                            // element.
                            $bulk_child_before_actions_key = $bulk_last_key;
                            $form['bulk_actions_container'][$bulk_action_item_key]['#attributes']['class'][] = 'views-bulk-actions__item';
                        }
                        if (!in_array($form['bulk_actions_container'][$bulk_action_item_key]['#type'], [
                            'hidden',
                            'actions',
                        ])) {
                            $form['bulk_actions_container'][$bulk_action_item_key]['#wrapper_attributes']['class'][] = 'views-bulk-actions__item';
                            $bulk_last_key = $bulk_action_item_key;
                        }
                    }
                }
                if ($bulk_child_before_actions_key) {
                    $form['bulk_actions_container'][$bulk_child_before_actions_key]['#wrapper_attributes']['class'][] = 'views-bulk-actions__item--preceding-actions';
                }
            }
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.