From 2020952953fea7779953266ec297b490402d7bfb Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 2 May 2011 11:32:06 -0500 Subject: [PATCH] Issue #1144716: Add support for more attributes in theme_vertical_tabs(). --- includes/form.inc | 60 +++++++++++++++++++++++++++- modules/block/block.admin.inc | 6 +-- modules/filter/filter.admin.inc | 6 +-- modules/simpletest/tests/form_test.module | 1 + modules/user/user.admin.inc | 6 +-- 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/includes/form.inc b/includes/form.inc index 3f83b8e..71ac0f4 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -3526,12 +3526,66 @@ function form_process_vertical_tabs($element, &$form_state) { * @ingroup themeable */ function theme_vertical_tabs($variables) { - $element = $variables['element']; + $element = &$variables['element']; + + + // This is also used in the installer, pre-database setup. + $t = get_t(); + // Add required JavaScript and Stylesheet. drupal_add_library('system', 'drupal.vertical-tabs'); - $output = '

' . t('Vertical Tabs') . '

'; - $output .= '
' . $element['#children'] . '
'; + // This function is invoked as theme wrapper, but the rendered form element + // may not necessarily have been processed by form_builder(). + $element += array( + '#title_display' => 'before', + ); + + // Add element's #type and #name as class to aid with JS/CSS selectors. + $element['#attributes']['class'][] = 'form-item'; + $element['#attributes']['class'][] = 'form-type-vertical-tabs'; + element_set_attributes($element, array('id')); + if (!empty($element['#name'])) { + $element['#attributes']['class'][] = 'form-item-' . strtr($element['#name'], array(' ' => '-', '_' => '-', '[' => '-', ']' => '')); + } + // Add a class for disabled elements to facilitate cross-browser styling. + if (!empty($element['#attributes']['disabled'])) { + $element['#attributes']['class'][] = 'form-disabled'; + } + $output = '' . "\n"; + + // If #title is not set, we don't display any label or required marker. + if (!isset($element['#title'])) { + $element['#title_display'] = 'none'; + } + $prefix = '
'; + $suffix = '
'; + + if (!empty($element['#description'])) { + $prefix = '
' . $element['#description'] . "
\n" . $prefix; + } + + switch ($element['#title_display']) { + case 'before': + case 'invisible': + $output .= ' ' . theme('form_element_label', $variables); + $output .= ' ' . $prefix . $element['#children'] . $suffix . "\n"; + break; + + case 'after': + $output .= ' ' . $prefix . $element['#children'] . $suffix; + $output .= ' ' . theme('form_element_label', $variables) . "\n"; + break; + + case 'none': + case 'attribute': + // Output no label and no required marker, only the children. + $output .= ' ' . $prefix . $element['#children'] . $suffix . "\n"; + break; + } + + $output .= "\n"; + return $output; } diff --git a/modules/block/block.admin.inc b/modules/block/block.admin.inc index 3981de9..49f2f88 100644 --- a/modules/block/block.admin.inc +++ b/modules/block/block.admin.inc @@ -321,12 +321,9 @@ function block_admin_configure($form, &$form_state, $module, $delta) { } // Visibility settings. - $form['visibility_title'] = array( - '#type' => 'item', - '#title' => t('Visibility settings'), - ); $form['visibility'] = array( '#type' => 'vertical_tabs', + '#title' => t('Visibility settings'), '#attached' => array( 'js' => array(drupal_get_path('module', 'block') . '/block.js'), ), @@ -686,4 +683,3 @@ function template_preprocess_block_admin_display_form(&$variables) { $variables['form_submit'] = drupal_render_children($variables['form']); } - diff --git a/modules/filter/filter.admin.inc b/modules/filter/filter.admin.inc index 5a21e6e..3fa8439 100644 --- a/modules/filter/filter.admin.inc +++ b/modules/filter/filter.admin.inc @@ -221,12 +221,9 @@ function filter_admin_format_form($form, &$form_state, $format) { } // Filter settings. - $form['filter_settings_title'] = array( - '#type' => 'item', - '#title' => t('Filter settings'), - ); $form['filter_settings'] = array( '#type' => 'vertical_tabs', + '#title' => t('Filter settings'), ); foreach ($filter_info as $name => $filter) { @@ -362,4 +359,3 @@ function filter_admin_disable_submit($form, &$form_state) { $form_state['redirect'] = 'admin/config/content/formats'; } - diff --git a/modules/simpletest/tests/form_test.module b/modules/simpletest/tests/form_test.module index 00be7d2..b4dea6b 100644 --- a/modules/simpletest/tests/form_test.module +++ b/modules/simpletest/tests/form_test.module @@ -550,6 +550,7 @@ function _form_test_tableselect_js_select_form($form, $form_state, $action) { function _form_test_vertical_tabs_form($form, &$form_state) { $form['vertical_tabs'] = array( '#type' => 'vertical_tabs', + '#title' => 'Vertical tabs test', ); $form['tab1'] = array( '#type' => 'fieldset', diff --git a/modules/user/user.admin.inc b/modules/user/user.admin.inc index 0596bde..33e86fc 100644 --- a/modules/user/user.admin.inc +++ b/modules/user/user.admin.inc @@ -421,12 +421,9 @@ function user_admin_settings() { '#description' => t("This text is displayed at the picture upload form in addition to the default guidelines. It's useful for helping or instructing your users."), ); - $form['email_title'] = array( - '#type' => 'item', - '#title' => t('E-mails'), - ); $form['email'] = array( '#type' => 'vertical_tabs', + '#title' => t('E-mails'), ); // These email tokens are shared for all settings, so just define // the list once to help ensure they stay in sync. @@ -1029,4 +1026,3 @@ function user_admin_role_delete_confirm_submit($form, &$form_state) { drupal_set_message(t('The role has been deleted.')); $form_state['redirect'] = 'admin/people/permissions/roles'; } - -- 1.7.3.1