formAlter($form, $form_state, $form_id); // User form (Login, Register or Forgot password). if (strpos($form_id, 'user_login') !== FALSE || strpos($form_id, 'user_register') !== FALSE || strpos($form_id, 'user_pass') !== FALSE) { $form['actions']['submit']['#attributes']['class'][] = 'button--primary'; } // Bulk forms: update action & actions to small variants. if (strpos($form_id, 'views_form') !== FALSE) { if (isset($form['header'])) { $bulk_form = current(preg_grep('/_bulk_form/', array_keys($form['header']))); if (isset($form['header'][$bulk_form])) { $form['header'][$bulk_form]['action']['#attributes']['class'][] = 'form-element--type-select--small'; $form['header'][$bulk_form]['actions']['submit']['#attributes']['class'][] = 'button--small'; // Remove double entry of submit button. unset($form['actions']['submit']); } } } // Delete forms: alter buttons. if (strpos($form_id, 'delete_form') !== FALSE) { $form['actions']['submit']['#attributes']['class'][] = 'button--danger'; $form['actions']['cancel']['#attributes']['class'][] = 'button--secondary'; } } /** * Implements form_user_form_alter(). */ function gin_form_user_form_alter(&$form, FormStateInterface $form_state) { // If new user account, don't show settings yet. if ($form_state->getFormObject()->getEntity()->isNew()) { return; } /** @var \Drupal\gin\GinSettings $settings */ $settings = \Drupal::classResolver(GinSettings::class); if ($settings->allowUserOverrides()) { // Inject the settings for the dark mode feature. $form['gin_theme_settings'] = [ '#type' => 'details', '#title' => t('Admin theme settings'), '#open' => TRUE, '#weight' => 90, ]; /** @var \Drupal\Core\Session\AccountInterface $account */ $account = $form_state->getBuildInfo()['callback_object']->getEntity(); $form['gin_theme_settings']['enable_user_settings'] = [ '#type' => 'checkbox', '#title' => t('Enable overrides'), '#description' => t("Enables default admin theme overrides."), '#default_value' => $settings->userOverrideEnabled($account), '#weight' => 0, ]; $form['gin_theme_settings']['user_settings'] = [ '#type' => 'container', '#states' => [ // Show if met. 'visible' => [ ':input[name="enable_user_settings"]' => ['checked' => TRUE], ], ], ] + $settings->getSettingsForm($account); // Attach custom library. $form['#attached']['library'][] = 'gin/settings'; array_unshift($form['actions']['submit']['#submit'], '_gin_user_form_submit'); } } /** * Implements template_preprocess_HOOK() for select. */ function gin_preprocess_select(&$variables) { if (in_array('block-weight', $variables['attributes']['class'], TRUE)) { $variables['attributes']['class'][] = 'form-element--extrasmall'; } } /** * Implements form_alter() for forms. */ function gin_theme_suggestions_form_alter(array &$suggestions, array $variables) { $suggestions[] = 'form__' . str_replace('-', '_', $variables['element']['#id']); } /** * Implements form_alter() for input. */ function gin_theme_suggestions_input_alter(array &$suggestions, array $variables) { if ($variables['element']['#type'] === 'checkbox') { // Way to identify if checkbox is in a checkboxes group // as Drupal doesn't provide one yet (see #2643012) if (!isset($variables['element']['#error_no_message'])) { $suggestions[] = 'input__checkbox__toggle'; } } } /** * Implements template_preprocess_HOOK() for form_element. */ function gin_preprocess_form_element(&$variables) { \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables); } /** * Implements template_preprocess_HOOK() for datetime_wrapper. */ function gin_preprocess_datetime_wrapper(&$variables) { \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables); } /** * Implements template_preprocess_HOOK() for details. */ function gin_preprocess_details(&$variables) { \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables); } /** * Implements template_preprocess_HOOK() for fieldset. */ function gin_preprocess_fieldset(&$variables) { \Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables); } /** * Implements hook_element_info_alter(). */ function gin_element_info_alter(&$info) { if (array_key_exists('text_format', $info)) { $info['text_format']['#pre_render'][] = [ GinPreRender::class, 'textFormat', ]; } } /** * Implements template_preprocess_HOOK() for text_format_wrapper. */ function gin_preprocess_text_format_wrapper(&$variables) { /** @var \Drupal\gin\GinSettings $settings */ $settings = \Drupal::classResolver(GinSettings::class); if ($settings->get('show_description_toggle') && !empty($variables['description'])) { $variables['description_display'] = 'invisible'; $variables['description_toggle'] = TRUE; } } /** * Implements template_preprocess_inline_entity_form_entity_table() for forms. */ function gin_preprocess_inline_entity_form_entity_table(array &$variables) { $variables['table']['#attached']['library'][] = 'gin/inline_entity_form'; }