Index: components/hidden.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/hidden.inc,v
retrieving revision 1.21.2.2
diff -u -r1.21.2.2 hidden.inc
--- components/hidden.inc	11 Mar 2010 01:40:15 -0000	1.21.2.2
+++ components/hidden.inc	26 Apr 2010 01:19:22 -0000
@@ -77,10 +77,10 @@
     '#value' => isset($value[0]) ? $value[0] : NULL,
     '#weight' => $component['weight'],
     '#theme' => 'webform_display_hidden',
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#theme' => 'webform_display_hidden',
-    '#theme_wrappers' => $format == 'text' ? array('webform_element_text') : array('webform_element'),
+    '#theme_wrappers' => $format == 'text' ? array('webform_element_text') : array('webform_element', 'webform_element_wrapper'),
     '#post_render' => array('webform_element_wrapper'),
     '#access' => user_access('edit all webform submissions') || user_access('access all webform results'),
   );
Index: components/textarea.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/textarea.inc,v
retrieving revision 1.20.2.3
diff -u -r1.20.2.3 textarea.inc
--- components/textarea.inc	21 Mar 2010 03:38:12 -0000	1.20.2.3
+++ components/textarea.inc	26 Apr 2010 01:19:26 -0000
@@ -108,8 +108,9 @@
     '#cols'          => !empty($component['extra']['cols']) ? $component['extra']['cols'] : 60,
     '#attributes'    => $component['extra']['attributes'],
     '#resizable'     => (bool) $component['extra']['resizable'], // MUST be FALSE to disable.
-    '#prefix'        => '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
-    '#suffix'        => '</div>',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
+    '#webform_component' => $component,
   );
 
   if ($component['extra']['disabled']) {
@@ -131,9 +132,9 @@
     '#title' => $component['name'],
     '#weight' => $component['weight'],
     '#theme' => 'webform_display_textarea',
-    '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
     '#post_render' => array('webform_element_wrapper'),
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#value' => isset($value[0]) ? $value[0] : '',
   );
Index: components/file.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/file.inc,v
retrieving revision 1.17.2.4
diff -u -r1.17.2.4 file.inc
--- components/file.inc	21 Mar 2010 19:41:15 -0000	1.17.2.4
+++ components/file.inc	26 Apr 2010 01:19:21 -0000
@@ -290,18 +290,18 @@
     '#description'   => _webform_filter_descriptions($component['extra']['description']),
     '#attributes'    => $component['extra']['attributes'],
     '#tree'          => FALSE, // file_check_upload assumes a flat $_FILES structure.
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
     '#element_validate' => array(
       '_webform_validate_file',
       '_webform_required_file',  // Custom required routine.
     ),
+    '#weight' => $component['weight'],
+    '#theme' => 'webform_render_file',
     '#webform_component' => $component,
+    '#webform_required' => $component['mandatory'],
+    '#webform_form_key' => $form_key,
   );
-  $element['#webform_required'] = $component['mandatory'];
-  $element['#webform_form_key'] = $form_key;
-  $element['#weight'] = $component['weight'];
-  $element['#theme'] = 'webform_render_file';
-  $element['#prefix'] = '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">';
-  $element['#suffix'] = '</div>';
 
 
   // Change the 'width' option to the correct 'size' option.
@@ -483,9 +483,9 @@
      '#value' => $fid ? webform_get_file($fid) : NULL,
      '#weight' => $component['weight'],
      '#theme' => 'webform_display_file',
-     '#theme_wrappers' => $format == 'text' ? array('webform_element_text') : array('webform_element'),
+     '#theme_wrappers' => $format == 'text' ? array('webform_element_text') : array('webform_element', 'webform_element_wrapper'),
      '#post_render' => array('webform_element_wrapper'),
-     '#component' => $component,
+     '#webform_component' => $component,
      '#format' => $format,
   );
 }
Index: components/pagebreak.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/pagebreak.inc,v
retrieving revision 1.9
diff -u -r1.9 pagebreak.inc
--- components/pagebreak.inc	9 Feb 2010 05:39:08 -0000	1.9
+++ components/pagebreak.inc	26 Apr 2010 01:19:23 -0000
@@ -69,7 +69,7 @@
     '#theme' => 'webform_display_pagebreak',
     '#title' => $component['name'],
     '#weight' => $component['weight'],
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
   );
   return $element;
Index: components/time.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/time.inc,v
retrieving revision 1.24.2.8
diff -u -r1.24.2.8 time.inc
--- components/time.inc	26 Mar 2010 00:09:10 -0000	1.24.2.8
+++ components/time.inc	26 Apr 2010 01:19:28 -0000
@@ -130,11 +130,11 @@
     '#required' => $component['mandatory'],
     '#weight' => $component['weight'],
     '#description' => _webform_filter_descriptions($component['extra']['description']),
-    '#prefix' => '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
-    '#suffix' => '</div>',
+    '#hourformat' => $component['extra']['hourformat'],
     '#theme' => 'webform_time',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
     '#element_validate' => array('webform_validate_time'),
-    '#hourformat' => $component['extra']['hourformat'],
     '#webform_component' => $component,
   );
 
@@ -237,9 +237,9 @@
     '#title' => $component['name'],
     '#weight' => $component['weight'],
     '#theme' => 'webform_display_time',
-    '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
     '#post_render' => array('webform_element_wrapper'),
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#hourformat' => $component['extra']['hourformat'],
     '#value' => $value,
Index: components/fieldset.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/fieldset.inc,v
retrieving revision 1.11.2.3
diff -u -r1.11.2.3 fieldset.inc
--- components/fieldset.inc	21 Mar 2010 03:43:16 -0000	1.11.2.3
+++ components/fieldset.inc	26 Apr 2010 01:19:19 -0000
@@ -58,7 +58,8 @@
     '#description'   => $filter ? _webform_filter_descriptions($component['extra']['description']) : $component['extra']['description'],
     '#collapsible'   => $component['extra']['collapsible'],
     '#collapsed'     => $component['extra']['collapsed'],
-    '#attributes'    => array('class' => 'webform-component-' . $component['type'], 'id' => 'webform-component-' . $component['form_key']),
+    '#attributes'    => array('class' => 'webform-component-' . $component['type']),
+    '#pre_render'    => array('_webform_pre_render_fieldset'),
   );
 
   return $element;
@@ -80,8 +81,16 @@
     $element = _webform_render_fieldset($component, $value);
   }
 
-  $element['#component'] = $component;
+  $element['#webform_component'] = $component;
   $element['#format'] = $format;
 
   return $element;
 }
+
+/**
+ * Pre-render function to set a fieldset ID.
+ */
+function _webform_pre_render_fieldset($element) {
+  $element['#attributes']['id'] = 'webform-component-' . implode('--', array_slice($element['#parents'], 1));
+  return $element;
+}
Index: components/date.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/date.inc,v
retrieving revision 1.29.2.9
diff -u -r1.29.2.9 date.inc
--- components/date.inc	13 Apr 2010 21:38:28 -0000	1.29.2.9
+++ components/date.inc	26 Apr 2010 01:19:18 -0000
@@ -123,15 +123,15 @@
     '#weight' => $component['weight'],
     '#type' => 'date',
     '#description' => _webform_filter_descriptions($component['extra']['description']),
-    '#prefix' => '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
-    '#suffix' => '</div>',
     '#required' => $component['mandatory'],
     '#year_start' => $component['extra']['year_start'],
     '#year_end' => $component['extra']['year_end'],
-    '#webform_component' => $component,
     '#process' => array('webform_expand_date'),
     '#theme' => 'webform_date',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
     '#element_validate' => array('webform_validate_date'),
+    '#webform_component' => $component,
   );
 
   if ($component['extra']['datepicker'] && function_exists('date_popup_load')) {
@@ -310,9 +310,9 @@
     '#title' => $component['name'],
     '#weight' => $component['weight'],
     '#theme' => 'webform_display_date',
-    '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
     '#post_render' => array('webform_element_wrapper'),
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#value' => $value,
   );
Index: components/markup.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/markup.inc,v
retrieving revision 1.13.2.3
diff -u -r1.13.2.3 markup.inc
--- components/markup.inc	21 Mar 2010 03:38:12 -0000	1.13.2.3
+++ components/markup.inc	26 Apr 2010 01:19:23 -0000
@@ -54,8 +54,9 @@
     '#weight' => $component['weight'],
     '#markup' => $filter ? _webform_filter_values(check_markup($component['value'], $component['extra']['format'], FALSE), NULL, NULL, NULL, FALSE) : $component['value'],
     '#input_format' => $component['extra']['format'],
-    '#prefix' => '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
-    '#suffix' => '</div>',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
+    '#webform_component' => $component,
   );
 
   // TODO: Remove when #markup becomes available in D7.
Index: components/textfield.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/textfield.inc,v
retrieving revision 1.21.2.3
diff -u -r1.21.2.3 textfield.inc
--- components/textfield.inc	21 Mar 2010 03:38:12 -0000	1.21.2.3
+++ components/textfield.inc	26 Apr 2010 01:19:26 -0000
@@ -131,10 +131,9 @@
     '#field_suffix'  => empty($component['extra']['field_suffix']) ? NULL : check_plain($component['extra']['field_suffix']),
     '#description'   => $filter ? _webform_filter_descriptions($component['extra']['description']) : $component['extra']['description'],
     '#attributes'    => $component['extra']['attributes'],
-    '#prefix'        => '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
-    '#suffix'        => '</div>',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
     '#webform_component' => $component,
-    '#element_validate' => array(),
   );
 
   if ($component['extra']['disabled']) {
@@ -169,11 +168,11 @@
     '#title' => $component['name'],
     '#weight' => $component['weight'],
     '#theme' => 'webform_display_textfield',
-    '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
     '#post_render' => array('webform_element_wrapper'),
     '#field_prefix' => $component['extra']['field_prefix'],
     '#field_suffix' => $component['extra']['field_suffix'],
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#value' => isset($value[0]) ? $value[0] : '',
   );
Index: components/select.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/select.inc,v
retrieving revision 1.39.2.13
diff -u -r1.39.2.13 select.inc
--- components/select.inc	10 Apr 2010 22:02:09 -0000	1.39.2.13
+++ components/select.inc	26 Apr 2010 01:19:25 -0000
@@ -261,6 +261,9 @@
     '#required'      => $component['mandatory'],
     '#weight'        => $component['weight'],
     '#description'   => $filter ? _webform_filter_descriptions($component['extra']['description']) : $component['extra']['description'],
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
+    '#webform_component' => $component,
   );
 
   // Convert the user-entered options list into an array.
@@ -351,9 +354,6 @@
     }
   }
 
-  $element['#prefix'] = '<div class="webform-component webform-component-' . $element['#type'] . '" id="webform-component-' . $component['form_key'] . '">';
-  $element['#suffix'] = '</div>';
-
   return $element;
 }
 
@@ -411,9 +411,9 @@
     '#title' => $component['name'],
     '#weight' => $component['weight'],
     '#theme' => 'webform_display_select',
-    '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
     '#post_render' => array('webform_element_wrapper'),
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#value' => (array) $value,
   );
@@ -459,7 +459,7 @@
  * Format the text output for this component.
  */
 function theme_webform_display_select($element) {
-  $component = $element['#component'];
+  $component = $element['#webform_component'];
 
   // Convert submitted 'safe' values to un-edited, original form.
   $options = _webform_select_options($component, TRUE);
Index: components/grid.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/grid.inc,v
retrieving revision 1.14.2.6
diff -u -r1.14.2.6 grid.inc
--- components/grid.inc	8 Apr 2010 07:32:39 -0000	1.14.2.6
+++ components/grid.inc	26 Apr 2010 01:19:22 -0000
@@ -142,10 +142,11 @@
     '#title' => $component['name'],
     '#required' => $component['mandatory'],
     '#weight' => $component['weight'],
-    '#theme' => 'webform_grid',
     '#description' => $filter ? _webform_filter_descriptions($component['extra']['description']) : $component['extra']['description'],
-    '#prefix' => '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
-    '#suffix' => '</div>',
+    '#theme' => 'webform_grid',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
+    '#webform_component' => $component,
   );
 
   $questions = _webform_select_options_from_text($component['extra']['questions'], TRUE);
@@ -191,12 +192,12 @@
   $element = array(
     '#title' => $component['name'],
     '#weight' => $component['weight'],
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#questions' => $questions,
     '#options' => $options,
     '#theme' => 'webform_display_grid',
-    '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
     '#post_render' => array('webform_element_wrapper'),
     '#sorted' => TRUE,
   );
@@ -217,7 +218,7 @@
  * Format the text output for this component.
  */
 function theme_webform_display_grid($element) {
-  $component = $element['#component'];
+  $component = $element['#webform_component'];
   $format = $element['#format'];
 
   if ($format == 'html') {
Index: components/email.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/components/email.inc,v
retrieving revision 1.28.2.4
diff -u -r1.28.2.4 email.inc
--- components/email.inc	10 Apr 2010 00:54:57 -0000	1.28.2.4
+++ components/email.inc	26 Apr 2010 01:19:19 -0000
@@ -115,8 +115,8 @@
     '#weight'        => $component['weight'],
     '#description'   => _webform_filter_descriptions($component['extra']['description']),
     '#attributes'    => $component['extra']['attributes'],
-    '#prefix'        => '<div class="webform-component webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
-    '#suffix'        => '</div>',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#post_render' => array('webform_element_wrapper'),
     '#element_validate'  => array('_webform_validate_email'),
     '#webform_component' => $component,
   );
@@ -175,9 +175,9 @@
     '#title' => $component['name'],
     '#weight' => $component['weight'],
     '#theme' => 'webform_display_email',
-    '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
     '#post_render' => array('webform_element_wrapper'),
-    '#component' => $component,
+    '#webform_component' => $component,
     '#format' => $format,
     '#value' => isset($value[0]) ? $value[0] : '',
   );
Index: webform.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform.module,v
retrieving revision 1.196.2.26
diff -u -r1.196.2.26 webform.module
--- webform.module	23 Apr 2010 15:33:50 -0000	1.196.2.26
+++ webform.module	26 Apr 2010 01:19:16 -0000
@@ -518,6 +518,9 @@
     'webform_element' => array(
       'arguments' => array('element' => NULL, 'value' => NULL),
     ),
+    'webform_element_wrapper' => array(
+      'arguments' => array('element' => NULL, 'content' => NULL),
+    ),
     'webform_element_text' => array(
       'arguments' => array('element' => NULL, 'value' => NULL),
     ),
@@ -2090,7 +2093,6 @@
 function theme_webform_element($element, $value) {
   $wrapper_classes = array(
    'form-item',
-   $element['#format'] == 'html' ? 'webform-display-item' : 'webform-item',
   );
   $output = '<div class="' . implode(' ', $wrapper_classes) . '" id="' . $element['#id'] . '-wrapper">' . "\n";
   $required = !empty($element['#required']) ? '<span class="form-required" title="' . t('This field is required.') . '">*</span>' : '';
@@ -2112,6 +2114,29 @@
 }
 
 /**
+ * Wrap form elements in a DIV with appropriate classes and an ID.
+ *
+ * This is a temporary work-around until we can use theme_webform_element() for
+ * all webform form elements in Drupal 7.
+ */
+function theme_webform_element_wrapper($element, $content) {
+  // All elements using this for display only are given the "display" type.
+  if (isset($element['#format']) && $element['#format'] == 'html') {
+    $type = 'display';
+  }
+  else {
+    $type = (isset($element['#type']) && !in_array($element['#type'], array('markup', 'textfield'))) ? $element['#type'] : $element['#webform_component']['type'];
+  }
+  $parents = str_replace('_', '-', implode('-', array_slice($element['#parents'], 1)));
+
+  $output = '';
+  $output .= '<div class="webform-component webform-component-' . $type . '" id="webform-component-' . $parents . '">';
+  $output .= $content;
+  $output .= '</div>';
+  return $output;
+}
+
+/**
  * Output a form element in plain text format.
  */
 function theme_webform_element_text($element, $value) {
Index: css/webform-admin.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/css/webform-admin.css,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 webform-admin.css
--- css/webform-admin.css	10 Apr 2010 22:02:09 -0000	1.1.2.1
+++ css/webform-admin.css	26 Apr 2010 01:19:28 -0000
@@ -1,12 +1,5 @@
 /* $Id: webform-admin.css,v 1.1.2.1 2010/04/10 22:02:09 quicksketch Exp $ */
 
-.webform-display-item {
-  margin-top: 0.5em;
-  margin-bottom: 0.5em;
-}
-.webform-display-item label {
-  display: inline;
-}
 .webform-submission-navigation {
   text-align: right;
 }
