From 35c4ad2bc2cac9e34ca7ffb9ce8296a386df5a49 Mon Sep 17 00:00:00 2001 From: Gerhard Killesreiter Date: Wed, 5 Apr 2006 18:12:48 +0000 Subject: #54104, CSS classes broken on all form elements, patch by Nedjo --- includes/form.inc | 52 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'includes') diff --git a/includes/form.inc b/includes/form.inc index 170cfc35b..61563169d 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -557,7 +557,8 @@ function form_options_flatten($array, $reset = TRUE) { function theme_select($element) { $select = ''; $size = $element['#size'] ? ' size="' . $element['#size'] . '"' : ''; - return theme('form_element', $element['#title'], '', $element['#description'], $element['#id'], $element['#required'], form_get_error($element)); + _form_set_class($element); + return theme('form_element', $element['#title'], '', $element['#description'], $element['#id'], $element['#required'], form_get_error($element)); } function form_select_options($element, $choices = NULL) { @@ -622,8 +623,8 @@ function theme_fieldset($element) { * A themed HTML string representing the form item group. */ function theme_radio($element) { + _form_set_class($element, array('form-radio')); $output = ''; } - - $output = ''; + _form_set_class($element, $class); + $output = ''; return theme('form_element', $element['#title'], $output, $element['#description'], $element['#id'], $element['#required'], form_get_error($element)). $extra; } @@ -943,15 +944,15 @@ function theme_form($element) { * A themed HTML string representing the textarea. */ function theme_textarea($element) { - $class = 'textarea'; + $class = array('textarea'); if ($element['#resizable'] !== false) { drupal_add_js('misc/textarea.js'); - $class .= ' resizable'; + $class[] = 'resizable'; } $cols = $element['#cols'] ? ' cols="'. $element['#cols'] .'"' : ''; - - return theme('form_element', $element['#title'], ''. check_plain($element['#value']) .'', $element['#description'], $element['#id'], $element['#required'], form_get_error($element)); + _form_set_class($element, $class); + return theme('form_element', $element['#title'], ''. check_plain($element['#value']) .'', $element['#description'], $element['#id'], $element['#required'], form_get_error($element)); } /** @@ -982,7 +983,8 @@ function theme_markup($element) { function theme_password($element) { $size = $element['#size'] ? ' size="'. $element['#size'] .'" ' : ''; - $output = ''; + _form_set_class($element, array('form-text')); + $output = ''; return theme('form_element', $element['#title'], $output, $element['#description'], $element['#id'], $element['#required'], form_get_error($element)); } @@ -1026,11 +1028,31 @@ function theme_weight($element) { * provided by file.inc. */ function theme_file($element) { - return theme('form_element', $element['#title'], '\n", $element['#description'], $element['#id'], $element['#required'], form_get_error($element)); + _form_set_class($element, array('form-file')); + return theme('form_element', $element['#title'], '\n", $element['#description'], $element['#id'], $element['#required'], form_get_error($element)); } -function _form_get_class($name, $required, $error) { - return $name. ($required ? ' required' : '') . (isset($error) ? ' error' : ''); +/** + * Sets a form element's class attribute. + * + * Adds 'required' and 'error' classes as needed. + * + * @param &$element + * The form element + * @param $name + * Array of new class names to be added + */ +function _form_set_class(&$element, $class = array()) { + if ($element['#required']) { + $class[] = 'required'; + } + if (form_get_error($element)){ + $class[] = 'error'; + } + if (isset($element['#attributes']['class'])) { + $class[] = $element['#attributes']['class']; + } + $element['#attributes']['class'] = implode(' ', $class); } /** -- cgit v1.2.3