Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.77
diff -u -r1.77 form.inc
--- includes/form.inc	12 Mar 2006 09:28:12 -0000	1.77
+++ includes/form.inc	15 Mar 2006 20:05:24 -0000
@@ -539,7 +539,10 @@
 function theme_select($element) {
   $select = '';
   $size = $element['#size'] ? ' size="' . $element['#size'] . '"' : '';
-  return theme('form_element', $element['#title'], '<select class="' . _form_get_class('', $element['#required'], form_get_error($element)). '" name="'. $element['#name'] .''. ($element['#multiple'] ? '[]' : '') .'"'. ($element['#multiple'] ? ' multiple="multiple" ' : '') . drupal_attributes($element['#attributes']) .' id="' . $element['#id'] .'" '. $size .'>'. form_select_options($element) .'</select>', $element['#description'], $element['#id'], $element['#required'], form_get_error($element));
+  if($class = _form_get_class('', $element['#required'], form_get_error($element))) {
+    $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . $class : $class;
+  }
+  return theme('form_element', $element['#title'], '<select name="'. $element['#name'] .''. ($element['#multiple'] ? '[]' : '') .'"'. ($element['#multiple'] ? ' multiple="multiple" ' : '') . drupal_attributes($element['#attributes']) .' id="' . $element['#id'] .'" '. $size .'>'. form_select_options($element) .'</select>', $element['#description'], $element['#id'], $element['#required'], form_get_error($element));
 }
 
 function form_select_options($element, $choices = NULL) {
@@ -604,8 +607,9 @@
  *   A themed HTML string representing the form item group.
  */
 function theme_radio($element) {
+  $class = _form_get_class('form-radio', $element['#required'], form_get_error($element));
+  $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . ' ' . $class : $class;
   $output = '<input type="radio" ';
-  $output .= 'class="'. _form_get_class('form-radio', $element['#required'], form_get_error($element)) .'" ';
   $output .= 'name="' . $element['#name'] .'" ';
   $output .= 'value="'. $element['#return_value'] .'" ';
   $output .= ($element['#value'] == $element['#return_value']) ? ' checked="checked" ' : ' ';
@@ -799,9 +803,10 @@
  *   A themed HTML string representing the checkbox.
  */
 function theme_checkbox($element) {
+  $class = _form_get_class('form-checkbox', $element['#required'], form_get_error($element));
+  $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . ' ' . $class : $class;
   $checkbox = '<input ';
   $checkbox .= 'type="checkbox" ';
-  $checkbox .= 'class="'. _form_get_class('form-checkbox', $element['#required'], form_get_error($element)) . '" ';
   $checkbox .= 'name="'. $element['#name'] .'" ';
   $checkbox .= 'id="'. $element['#id'].'" ' ;
   $checkbox .= 'value="'. $element['#return_value'] .'" ';
@@ -853,7 +858,9 @@
 }
 
 function theme_button($element) {
-  return '<input type="submit" class="form-'. $element['#button_type'] .'" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') .'value="'. check_plain($element['#value']) .'" '. drupal_attributes($element['#attributes']) ." />\n";
+  $class = 'form-' . $element['#button_type'];
+  $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . ' ' . $class : $class;
+  return '<input type="submit" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') .'value="'. check_plain($element['#value']) .'" '. drupal_attributes($element['#attributes']) ." />\n";
 }
 
 /**
@@ -880,15 +887,15 @@
  */
 function theme_textfield($element) {
   $size = $element['#size'] ? ' size="' . $element['#size'] . '"' : '';
-  $class = '';
   $extra = '';
+  $class = _form_get_class("form-text", $element['#required'], form_get_error($element));
   if ($element['#autocomplete_path']) {
     drupal_add_js('misc/autocomplete.js');
-    $class = ' form-autocomplete';
+    $class .= ' form-autocomplete';
     $extra =  '<input class="autocomplete" type="hidden" id="'. $element['#id'] .'-autocomplete" value="'. check_url(url($element['#autocomplete_path'], NULL, NULL, TRUE)) .'" disabled="disabled" />';
   }
-
-  $output = '<input type="text" maxlength="'. $element['#maxlength'] .'" class="'. _form_get_class("form-text$class", $element['#required'], form_get_error($element)) .'" name="'. $element['#name'] .'" id="'. $element['#id'] .'" '. $size .' value="'. check_plain($element['#value']) .'"'. drupal_attributes($element['#attributes']) .' />';
+  $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . ' ' . $class : $class;
+  $output = '<input type="text" maxlength="'. $element['#maxlength'] .'" name="'. $element['#name'] .'" id="'. $element['#id'] .'" '. $size .' value="'. check_plain($element['#value']) .'"'. drupal_attributes($element['#attributes']) .' />';
   return theme('form_element', $element['#title'], $output, $element['#description'], $element['#id'], $element['#required'], form_get_error($element)). $extra;
 }
 
@@ -922,10 +929,12 @@
     drupal_add_js('misc/textarea.js');
     $class .= ' resizable';
   }
+  $class = _form_get_class($class, $element['#required'], form_get_error($element));
+  $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . ' ' . $class : $class;
 
   $cols = $element['#cols'] ? ' cols="'. $element['#cols'] .'"' : '';
 
-  return theme('form_element', $element['#title'], '<textarea'. $cols .' rows="'. $element['#rows'] .'" name="'. $element['#name'] .'" id="' . $element['#id'] .'" class="'. _form_get_class($class, $element['#required'], form_get_error($element)) .'"'. drupal_attributes($element['#attributes']) .'>'. check_plain($element['#value']) .'</textarea>', $element['#description'], $element['#id'], $element['#required'], form_get_error($element));
+  return theme('form_element', $element['#title'], '<textarea'. $cols .' rows="'. $element['#rows'] .'" name="'. $element['#name'] .'" id="' . $element['#id'] . '"' . drupal_attributes($element['#attributes']) .'>'. check_plain($element['#value']) .'</textarea>', $element['#description'], $element['#id'], $element['#required'], form_get_error($element));
 }
 
 /**
@@ -955,8 +964,9 @@
 */
 function theme_password($element) {
   $size = $element['#size'] ? ' size="'. $element['#size'] .'" ' : '';
-
-  $output = '<input type="password" maxlength="'. $element['#maxlength'] .'" class="'. _form_get_class('form-text', $element['#required'], form_get_error($element)) .'" name="'. $element['#name'] .'" id="'. $element['#id'] .'" '. $size . drupal_attributes($element['#attributes']) .' />';
+  $class = _form_get_class('form-text', $element['#required'], form_get_error($element));
+  $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . ' ' . $class : $class;
+  $output = '<input type="password" maxlength="'. $element['#maxlength'] .'" name="'. $element['#name'] .'" id="'. $element['#id'] .'" '. $size . drupal_attributes($element['#attributes']) .' />';
 
   return theme('form_element', $element['#title'], $output, $element['#description'], $element['#id'], $element['#required'], form_get_error($element));
 }
@@ -1000,7 +1010,9 @@
  * provided by file.inc.
  */
 function theme_file($element) {
-  return theme('form_element', $element['#title'], '<input type="file" class="'. _form_get_class('form-file', $element['#required'], form_get_error($element)) .'" name="'. $element['#name'] .'"'. ($element['#attributes'] ? ' '. drupal_attributes($element['#attributes']) : '') .' id="'. form_clean_id($element['#id']) .'" size="'. $element['#size'] ."\" />\n", $element['#description'], $element['#id'], $element['#required'], form_get_error($element));
+  $class = _form_get_class('form-file', $element['#required'], form_get_error($element));
+  $element['#attributes']['class'] = $element['#attributes']['class'] ? $element['#attributes']['class'] . ' ' . $class : $class;
+  return theme('form_element', $element['#title'], '<input type="file" name="'. $element['#name'] .'"'. ($element['#attributes'] ? ' '. drupal_attributes($element['#attributes']) : '') .' id="'. form_clean_id($element['#id']) .'" size="'. $element['#size'] ."\" />\n", $element['#description'], $element['#id'], $element['#required'], form_get_error($element));
 }
 
 function _form_get_class($name, $required, $error) {
