Index: misc/form.js =================================================================== RCS file: /cvs/drupal/drupal/misc/form.js,v retrieving revision 1.2 diff -u -p -r1.2 form.js --- misc/form.js 29 Oct 2008 10:01:26 -0000 1.2 +++ misc/form.js 8 Nov 2008 12:53:41 -0000 @@ -10,3 +10,18 @@ Drupal.behaviors.multiselectSelector = { }); } }; + +Drupal.behaviors.filterGuildelines = { + attach: function (context) { + // Automatically displays the guidelines of the selected input format. + $('.filter-guidelines:not(.filterGuidelines-processed)', context) + .addClass('filterGuidelines-processed') + .parents('.filter-wrapper').find('select.filter-list') + .bind('change', function() { + $(this).parents('.filter-wrapper') + .find('.filter-guidelines-item').hide() + .siblings('#filter-guidelines-' + this.value).show(); + }) + .change(); + } +}; Index: modules/filter/filter.module =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v retrieving revision 1.231 diff -u -p -r1.231 filter.module --- modules/filter/filter.module 1 Nov 2008 19:51:06 -0000 1.231 +++ modules/filter/filter.module 8 Nov 2008 12:53:42 -0000 @@ -58,7 +58,10 @@ function filter_theme() { 'file' => 'filter.pages.inc', ), 'filter_tips_more_info' => array( - 'arguments' => array(), + 'arguments' => array('icon' => FALSE), + ), + 'filter_guidelines' => array( + 'arguments' => array('format' => NULL), ), ); } @@ -477,32 +480,31 @@ function filter_form($value = FILTER_FOR $value = filter_resolve_format($value); $formats = filter_formats(); - $extra = theme('filter_tips_more_info'); + $form = array( + '#type' => 'fieldset', + '#weight' => $weight, + '#attributes' => array('class' => 'filter-wrapper'), + ); if (count($formats) > 1) { - $form = array( - '#type' => 'fieldset', - '#title' => t('Input format'), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#weight' => $weight, - '#element_validate' => array('filter_form_validate'), - ); - // Multiple formats available: display radio buttons with tips. + // Multiple formats available: display dropdown select list. + drupal_add_js('misc/form.js', 'core'); foreach ($formats as $format) { - // Generate the parents as the autogenerator does, so we will have a - // unique id for each radio button. - $parents_for_id = array_merge($parents, array($format->format)); - $form[$format->format] = array( - '#type' => 'radio', - '#title' => $format->name, - '#default_value' => $value, - '#return_value' => $format->format, - '#parents' => $parents, - '#description' => theme('filter_tips', _filter_tips($format->format, FALSE)), - '#id' => form_clean_id('edit-' . implode('-', $parents_for_id)), - ); + $options[$format->format] = $format->name; + $guidelines[$format->format] = array('#markup' => theme('filter_guidelines', $format)); } + $element_id = form_clean_id('edit-' . implode('-', $parents)); + $form['format'] = array( + '#type' => 'select', + '#title' => t('Formatting'), + '#options' => $options, + '#default_value' => $value, + '#parents' => $parents, + '#id' => $element_id, + '#attributes' => array('class' => 'filter-list'), + ); + $form['format_help'] = array('#markup' => '
'. theme('filter_tips_more_info', TRUE) .'
'); + $form['format_guidelines'] = array_merge($guidelines, array('#prefix' => '
', '#suffix' => '
')); } else { // Only one format available: use a hidden form item and only show tips. @@ -511,23 +513,12 @@ function filter_form($value = FILTER_FOR $tips = _filter_tips(variable_get('filter_default_format', 1), FALSE); $form['format']['guidelines'] = array( '#title' => t('Formatting guidelines'), - '#markup' => theme('filter_tips', $tips, FALSE, $extra), + '#markup' => theme('filter_tips', $tips) . theme('filter_tips_more_info'), ); } - $form[] = array('#markup' => $extra); return $form; } -function filter_form_validate($form) { - foreach (element_children($form) as $key) { - if ($form[$key]['#value'] == $form[$key]['#return_value']) { - return; - } - } - form_error($form, t('An illegal choice has been detected. Please contact the site administrator.')); - watchdog('form', 'Illegal choice %choice in %name element.', array('%choice' => $form[$key]['#value'], '%name' => empty($form['#title']) ? $form['#parents'][0] : $form['#title']), WATCHDOG_ERROR); -} - /** * Returns TRUE if the user is allowed to access this format. */ @@ -580,8 +571,23 @@ function _filter_tips($format, $long = F * * @ingroup themeable */ -function theme_filter_tips_more_info() { - return '

' . l(t('More information about formatting options'), 'filter/tips') . '

'; +function theme_filter_tips_more_info($icon = FALSE) { + if ($icon) { + $description = t('More information about formatting options'); + return l(theme('image', 'misc/help.png', $description, $description), 'filter/tips', array('html' => TRUE)); + } + else { + return '

'. l(t('More information about formatting options'), 'filter/tips') .'

'; + } +} + +/** + * Format guidelines for an input format. + * + * @ingroup themeable + */ +function theme_filter_guidelines($format) { + return '
'. theme('filter_tips', _filter_tips($format->format, FALSE)) .'
'; } /** Index: modules/system/system.css =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.css,v retrieving revision 1.52 diff -u -p -r1.52 system.css --- modules/system/system.css 19 Oct 2008 20:55:07 -0000 1.52 +++ modules/system/system.css 8 Nov 2008 12:53:43 -0000 @@ -348,6 +348,58 @@ html.js fieldset.collapsible .fieldset-w } /* +** Input formats +*/ +/* Aligns the Input format fieldset to its textarea. */ +.filter-wrapper { + margin-top: -1em; + margin-right: -2px; +} +/* Puts it all on one line and applies some margins and font weight. */ +.filter-wrapper .form-item { + float: left; + margin: 0; +} +.filter-wrapper .form-item label { + float: left; + margin-right: 1em; + font-weight: normal; +} +.filter-wrapper .form-item select { + float: left; + margin-right: 1em; +} +.filter-help { + float: left; +} +/* Removes unaesthetic spacing at the bottom when only one input format is available. */ +.filter-wrapper p { + margin-bottom: 0; +} +/* Positions the guidelines below the select list. */ +.filter-guidelines { + clear: left; +} +.filter-guidelines-item { + padding-top: 0.5em; +} +/* Allows jQuery to only show guidelines for the currently selected format. */ +.filterGuidelines-processed .filter-guidelines-item, +.filterGuidelines-processed label { + display: none; +} +/* To make the Input format fieldset the same width as the body textarea, we can make + the whole wrapper 95% wide, instead of only the textarea. This will also have to be + done on other textareas that has input formats, such as CCK's. */ +.body-field-wrapper { + width: 95%; +} +.body-field-wrapper textarea, +.body-field-wrapper .resizable-textarea { + width: 100%; +} + +/* ** Resizable text areas */ .resizable-textarea {