? pimped_cck_ui.patch
Index: content.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/Attic/content.module,v
retrieving revision 1.301.2.106
diff -u -p -r1.301.2.106 content.module
--- content.module	2 Jun 2009 12:24:04 -0000	1.301.2.106
+++ content.module	23 Jun 2009 20:49:55 -0000
@@ -116,13 +116,14 @@ function content_menu() {
         'weight' => 2,
       );
       $contexts = content_build_modes('_tabs');
+      $weight = 0;
       foreach ($contexts as $key => $tab) {
         $items['admin/content/node-type/'. $type_url_str .'/display/'. $key] = array(
           'title' => $tab['title'],
           'page arguments' => array('content_display_overview_form', $type_name, $key),
           'access arguments' => array('administer content types'),
-          'type' => $key == 'basic' ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK,
-          'weight' => $key == 'basic' ? 0 : 1,
+          'type' => $key == 'node' ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK,
+          'weight' => $weight++,
         );
       }
       // Cast as an array in case this is called before any fields have
@@ -328,6 +329,10 @@ function content_delete_revision(&$node)
  * Generate field render arrays.
  */
 function content_view(&$node, $teaser = FALSE, $page = FALSE) {
+  // Set the build mode for the node.
+  $node->build_mode = ($page) ? 'node' : 'teaser';
+  if ($node->build_mode == 'teaser' && $node->sticky == 1) $node->build_mode = 'sticky';
+
   // Let field modules sanitize their data for output.
   _content_field_invoke('sanitize', $node, $teaser, $page);
 
@@ -755,7 +760,7 @@ function content_field($op, &$node, $fie
         $theme = $formatter['module'] .'_formatter_'. $formatter_name;
         $single = (content_handle('formatter', 'multiple values', $formatter) == CONTENT_HANDLE_CORE);
 
-        $label_display = isset($field['display_settings']['label']['format']) ? $field['display_settings']['label']['format'] : 'above';
+        $label_display = isset($field['display_settings'][$node->build_mode]['label']['format']) ? $field['display_settings'][$node->build_mode]['label']['format'] : 'above';
         // Do not include field labels when indexing content.
         if ($context == NODE_BUILD_SEARCH_INDEX) {
           $label_display = 'hidden';
@@ -806,10 +811,16 @@ function content_field($op, &$node, $fie
         // to populate the $FIELD_NAME_rendered variable for node templates,
         // and hide it from the $content variable if needed.
         // See 'preprocess_node' op and theme_content_field_wrapper()?
+        $selector_order_key = $node->build_mode .'order';
+        $weight = isset($field['display_settings'][$selector_order_key]) ? $field['display_settings'][$selector_order_key] : 0;
+        $region = isset($field['display_settings'][$node->build_mode]['region']) ? $field['display_settings'][$node->build_mode]['region'] : 'main';
+        $exclude = isset($field['display_settings'][$node->build_mode]['exclude']) ? $field['display_settings'][$node->build_mode]['exclude'] : FALSE;
         $wrapper = array(
+          '#region' => $region,
           'field' => $element,
-          '#weight' => $field['widget']['weight'],
-          '#post_render' => array('content_field_wrapper_post_render'),
+          '#weight' => $weight,
+          //'#post_render' => array('content_field_wrapper_post_render'),
+          '#exclude' => $exclude,
           '#field_name' => $field['field_name'],
           '#type_name' => $node->type,
           '#context' => $context,
@@ -866,14 +877,23 @@ function content_field($op, &$node, $fie
       $wrapper = NULL;
       if (isset($node->content[$field['field_name']])) {
         $wrapper = $node->content[$field['field_name']];
+        $region = $node->content[$field['field_name']]['#region'];
+        $weight = $node->content[$field['field_name']]['#weight'];
+        $exclude = $node->content[$field['field_name']]['#exclude'];
       }
       elseif (module_exists('fieldgroup') && ($group_name = fieldgroup_get_group($node->type, $field['field_name'])) && isset($node->content[$group_name]['group'][$field['field_name']])) {
         $wrapper = $node->content[$group_name]['group'][$field['field_name']];
+        $region = $node->content[$group_name]['group'][$field['field_name']]['#region'];
+        $weight = $node->content[$group_name]['group'][$field['field_name']]['#weight'];
+        $exclude = $node->content[$group_name]['group'][$field['field_name']]['#exclude'];
       }
 
       if ($wrapper) {
         // '#chilren' is not set if the field is empty.
-        $addition[$field['field_name'] .'_rendered'] = isset($wrapper['#children']) ? $wrapper['#children'] : '';
+        $addition[$field['field_name'] .'_rendered']['value'] = isset($wrapper['#children']) ? $wrapper['#children'] : '';
+        $addition[$field['field_name'] .'_rendered']['region'] = $region;
+        $addition[$field['field_name'] .'_rendered']['weight'] = $weight;
+        $addition[$field['field_name'] .'_rendered']['exclude'] = $exclude;
       }
 
       return $addition;
@@ -1850,15 +1870,29 @@ function content_build_modes($selector =
  */
 function node_content_build_modes() {
   return array(
-    'basic' => array(
-      'title' => t('Basic'),
+    'node' => array(
+      'title' => t('Full node'),
+      'build modes' => array(
+        'node' => array(
+          'title' => t('Node'),
+          'views style' => TRUE,
+        ),
+      ),
+    ),
+    'teaser' => array(
+      'title' => t('Teaser'),
       'build modes' => array(
         'teaser' => array(
           'title' => t('Teaser'),
           'views style' => TRUE,
         ),
-        'full' => array(
-          'title' => t('Full node'),
+      ),
+    ),
+    'sticky' => array(
+      'title' => t('Sticky'),
+      'build modes' => array(
+        'sticky' => array(
+          'title' => t('Sticky'),
           'views style' => TRUE,
         ),
       ),
@@ -2316,6 +2350,42 @@ function content_preprocess_content_fiel
 function content_preprocess_node(&$vars) {
   $additions = _content_field_invoke_default('preprocess_node', $vars['node']);
   $vars = array_merge($vars, $additions);
+
+  // Put all additions in their region.
+  $regions = array();
+  foreach ($additions as $name => $value) {
+    if ($value['exclude'] != 1)
+    $regions[$value['region']][$value['weight']] = $value['value'];
+  }
+
+  $content = '';
+  $region_classes = array();
+  $content_regions = content_node_regions();
+  foreach ($content_regions as $region_key => $region_name) {
+    if (isset($regions[$region_key])) {
+      if ($region_key == 'left' || $region_key == 'right') {
+        $region_classes[] = $region_key;
+      }
+      $content .= '<div class="node_region_'. $region_key .'">';
+      ksort($regions[$region_key]);
+      foreach ($regions[$region_key] as $key => $value) {
+        $content .= $value;
+      }
+      $content .= '</div>';
+    }
+  }
+
+  $vars['node_classes'] = array();
+  if (in_array('left', $region_classes) && in_array('right', $region_classes)) $vars['node_classes'][] = 'two-sidebars';
+  elseif (in_array('left', $region_classes) && !in_array('right', $region_classes)) $vars['node_classes'][] = 'one-sidebar sidebar-left';
+  elseif (!in_array('left', $region_classes) && in_array('right', $region_classes)) $vars['node_classes'][] = 'one-sidebar sidebar-right';
+  else $vars['node_classes'][] = 'no-sidebars';
+  $vars['node_classes'] = implode(' ', $vars['node_classes']);
+
+  // We need to add other keys later on, but for now,
+  // let's only add cck fields.
+  $vars['content'] = $content;
+
 }
 
 /**
@@ -2533,3 +2603,16 @@ function content_inactive_fields($type_n
   }
   return $inactive;
 }
+
+/**
+ * Return array of all the available node regions.
+ */
+function content_node_regions() {
+  return array(
+    'header' => t('Header'),
+    'left' => t('Left'),
+    'main' => t('Middle'),
+    'right' => t('Right'),
+    'footer' => t('Footer'),
+  );
+}
Index: includes/content.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/includes/Attic/content.admin.inc,v
retrieving revision 1.181.2.69
diff -u -p -r1.181.2.69 content.admin.inc
--- includes/content.admin.inc	18 Jun 2009 19:23:02 -0000	1.181.2.69
+++ includes/content.admin.inc	23 Jun 2009 20:49:57 -0000
@@ -552,7 +552,7 @@ function content_field_overview_form_sub
  * Form includes form widgets to select which fields appear for teaser, full node
  * and how the field labels should be rendered.
  */
-function content_display_overview_form(&$form_state, $type_name, $contexts_selector = 'basic') {
+function content_display_overview_form(&$form_state, $type_name, $contexts_selector = 'node') {
   content_inactive_message($type_name);
 
   // Gather type information.
@@ -560,9 +560,10 @@ function content_display_overview_form(&
   $field_types = _content_field_types();
   $fields = $type['fields'];
 
-  $groups = array();
+  $groups = $group_options = array();
   if (module_exists('fieldgroup')) {
     $groups = fieldgroup_groups($type['type']);
+    $group_options = _fieldgroup_groups_label($type['type']);
   }
   $contexts = content_build_modes($contexts_selector);
 
@@ -574,18 +575,27 @@ function content_display_overview_form(&
     '#contexts' => $contexts_selector,
   );
 
+  /**
+   * This isn't true in our case, just leave it commented out.
+   */
   if (empty($fields)) {
     drupal_set_message(t('There are no fields configured for this content type. You can add new fields on the <a href="@link">Manage fields</a> page.', array(
       '@link' => url('admin/content/node-type/'. $type['url_str'] .'/fields'))), 'warning');
     return $form;
   }
 
+  // Create order key.
+  $order_key = $contexts_selector .'order';
+  $form['contexts_order_key'] = array('#type' => 'hidden', '#value' => $order_key);
+
   // Fields.
   $label_options = array(
     'above' => t('Above'),
     'inline' => t('Inline'),
     'hidden' => t('<Hidden>'),
   );
+  $region_options = content_node_regions();
+
   foreach ($fields as $name => $field) {
     $field_type = $field_types[$field['type']];
     $defaults = $field['display_settings'];
@@ -593,18 +603,17 @@ function content_display_overview_form(&
 
     $form[$name] = array(
       'human_name' => array('#value' => check_plain($field['widget']['label'])),
-      'weight' => array('#type' => 'value', '#value' => $weight),
+      'weight' => array('#type' => 'value', '#default_value' => $weight),
       'parent' => array('#type' => 'value', '#value' => ''),
     );
 
-    // Label
-    if ($contexts_selector == 'basic') {
-      $form[$name]['label']['format'] = array(
-        '#type' => 'select',
-        '#options' => $label_options,
-        '#default_value' => isset($defaults['label']['format']) ? $defaults['label']['format'] : 'above',
-      );
-    }
+    $weight = isset($field['display_settings'][$order_key]) ? $field['display_settings'][$order_key] : 0;
+    $form[$name]['weight'] = array('#type' => 'value', '#default_value' => $weight);
+    $form[$name][$order_key] = array(
+      '#type' => 'weight',
+      '#default_value' => $weight,
+      '#delta' => 20,
+    );
 
     // Formatters.
     $options = array();
@@ -614,6 +623,12 @@ function content_display_overview_form(&
     $options['hidden'] = t('<Hidden>');
 
     foreach ($contexts as $key => $value) {
+      $form[$name][$key]['label']['format'] = array(
+        '#type' => 'select',
+        '#options' => $label_options,
+        '#default_value' => isset($defaults[$key]['label']['format']) ? $defaults[$key]['label']['format'] : 'above',
+      );
+
       $form[$name][$key]['format'] = array(
         '#type' => 'select',
         '#options' => $options,
@@ -625,6 +640,14 @@ function content_display_overview_form(&
         '#options' => array(0 => t('Include'), 1 => t('Exclude')),
         '#default_value' => isset($defaults[$key]['exclude']) ? $defaults[$key]['exclude'] : 0,
       );
+
+      // select region
+      $form[$name][$key]['region'] = array(
+        '#type' => 'select',
+        '#options' => $region_options,
+        '#default_value' => isset($defaults[$key]['region']) ? $defaults[$key]['region'] : 0,
+      );
+
     }
   }
 
Index: theme/content-admin-display-overview-form.tpl.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/theme/Attic/content-admin-display-overview-form.tpl.php,v
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.3 content-admin-display-overview-form.tpl.php
--- theme/content-admin-display-overview-form.tpl.php	9 Oct 2008 20:58:26 -0000	1.1.2.3
+++ theme/content-admin-display-overview-form.tpl.php	23 Jun 2009 20:49:57 -0000
@@ -1,40 +1,38 @@
 <?php
 // $Id: content-admin-display-overview-form.tpl.php,v 1.1.2.3 2008/10/09 20:58:26 karens Exp $
 ?>
-<div>
-  <?php print $help; ?>
-</div>
+
 <?php if ($rows): ?>
   <table id="content-display-overview" class="sticky-enabled">
     <thead>
       <tr>
         <th><?php print t('Field'); ?></th>
-        <?php if ($basic): ?>
-          <th><?php print t('Label'); ?></th>
-        <?php endif; ?>
+        <th><?php print t('Label'); ?></th>
         <?php foreach ($contexts as $key => $value): ?>
-          <th><?php print $value['title']; ?></th>
+          <th><?php print $value['title']; ?> format</th>
           <th><?php print t('Exclude'); ?></th>
         <?php endforeach; ?>
+        <th><?php print t('Region'); ?></th>
+        <th><?php print t('Weight'); ?></th>
       </tr>
     </thead>
     <tbody>
       <?php
       $count = 0;
       foreach ($rows as $row): ?>
-        <tr class="<?php print $count % 2 == 0 ? 'odd' : 'even'; ?>">
+        <tr class="<?php print $count % 2 == 0 ? 'odd' : 'even'; ?> <?php print $row->class ?>">
           <td><?php print $row->indentation; ?><span class="<?php print $row->label_class; ?>"><?php print $row->human_name; ?></span></td>
-          <?php if ($basic): ?>
-            <td><?php print $row->label; ?></td>
-          <?php endif; ?>
           <?php foreach ($contexts as $context => $title): ?>
+            <td><?php print $row->{$context}->label; ?></td>
             <td><?php print $row->{$context}->format; ?></td>
             <td><?php print $row->{$context}->exclude; ?></td>
           <?php endforeach; ?>
+          <td><?php print $row->{$context}->region; ?></td>
+          <td><?php print $row->{$contexts_order_key}; ?></td>
         </tr>
         <?php $count++;
       endforeach; ?>
     </tbody>
   </table>
   <?php print $submit; ?>
-<?php endif; ?>
+<?php endif; ?>
\ No newline at end of file
Index: theme/content-admin-field-overview-form.tpl.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/theme/Attic/content-admin-field-overview-form.tpl.php,v
retrieving revision 1.1.2.5
diff -u -p -r1.1.2.5 content-admin-field-overview-form.tpl.php
--- theme/content-admin-field-overview-form.tpl.php	16 Oct 2008 14:40:54 -0000	1.1.2.5
+++ theme/content-admin-field-overview-form.tpl.php	23 Jun 2009 20:49:57 -0000
@@ -8,7 +8,6 @@
   <thead>
     <tr>
       <th><?php print t('Label'); ?></th>
-      <th><?php print t('Weight'); ?></th>
       <th><?php print t('Name'); ?></th>
       <th><?php print t('Type'); ?></th>
       <th><?php print t('Operations'); ?></th>
@@ -16,6 +15,7 @@
   </thead>
   <tbody>
     <?php
+    //dsm($rows);
     $count = 0;
     foreach ($rows as $row): ?>
       <tr class="<?php print $count % 2 == 0 ? 'odd' : 'even'; ?> <?php print $row->class ?>">
@@ -26,7 +26,6 @@
             <?php print $row->indentation; ?>
             <span class="<?php print $row->label_class; ?>"><?php print $row->label; ?></span>
           </td>
-          <td><?php print $row->weight . $row->parent . $row->hidden_name; ?></td>
           <td><?php print $row->field_name; ?></td>
           <td><?php print $row->type; ?></td>
           <td><?php print $row->configure; ?>&nbsp;&nbsp;<?php print $row->remove; ?></td>
@@ -36,19 +35,10 @@
             <?php print $row->indentation; ?>
             <span class="<?php print $row->label_class; ?>"><?php print $row->label; ?></span>
           </td>
-          <td><?php print $row->weight . $row->parent . $row->hidden_name; ?></td>
           <td><?php print $row->group_name; ?></td>
           <td><?php print $row->group_type; ?></td>
           <td><?php print $row->configure; ?>&nbsp;&nbsp;<?php print $row->remove; ?></td>
           <?php break;
-        case 'extra': ?>
-          <td>
-            <?php print $row->indentation; ?>
-            <span class="<?php print $row->label_class; ?>"><?php print $row->label; ?></span>
-          </td>
-          <td><?php print $row->weight . $row->parent . $row->hidden_name; ?></td>
-          <td colspan="3"><?php print $row->description; ?></td>
-          <?php break;
         case 'separator': ?>
           <td colspan="5" class="region"><?php print t('Add'); ?></td>
           <?php break;
@@ -60,7 +50,6 @@
               <?php print $row->label; ?>
             </div>
           </td>
-          <td><div class="content-new">&nbsp;</div><?php print $row->weight . $row->parent . $row->hidden_name; ?></td>
           <td><div class="content-new">&nbsp;</div><?php print $row->field_name; ?></td>
           <td><div class="content-new">&nbsp;</div><?php print $row->type; ?></td>
           <td><div class="content-new">&nbsp;</div><?php print $row->widget_type; ?></td>
@@ -73,7 +62,6 @@
               <?php print $row->label; ?>
             </div>
           </td>
-          <td><div class="content-new">&nbsp;</div><?php print $row->weight . $row->parent . $row->hidden_name; ?></td>
           <td colspan="2"><div class="content-new">&nbsp;</div><?php print $row->field_name; ?></td>
           <td><div class="content-new">&nbsp;</div><?php print $row->widget_type; ?></td>
           <?php break;
@@ -85,7 +73,6 @@
               <?php print $row->label; ?>
             </div>
           </td>
-          <td><div class="content-new">&nbsp;</div><?php print $row->weight . $row->parent . $row->hidden_name; ?></td>
           <td><div class="content-new">&nbsp;</div><?php print $row->group_name; ?></td>
           <td><div class="content-new">&nbsp;</div><?php print $row->group_type; ?></td>
           <td><div class="content-new">&nbsp;</div><?php print $row->group_option; ?></td>
Index: theme/theme.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/theme/theme.inc,v
retrieving revision 1.1.2.13
diff -u -p -r1.1.2.13 theme.inc
--- theme/theme.inc	28 Apr 2009 23:06:37 -0000	1.1.2.13
+++ theme/theme.inc	23 Jun 2009 20:49:57 -0000
@@ -1,6 +1,8 @@
 <?php
 // $Id: theme.inc,v 1.1.2.13 2009/04/28 23:06:37 yched Exp $
 
+// $Id: theme.inc,v 1.1.2.12 2008/10/28 22:12:09 yched Exp $
+
 /**
  * @file
  * Theme preprocess function for content-admin-field-overview-form.tpl.php.
@@ -10,7 +12,7 @@ function template_preprocess_content_fie
 
   $vars['help'] = theme('advanced_help_topic', 'content', 'manage-fields') . t('Add fields and groups to the content type, and arrange them on content display and input forms.');
   if (module_exists('fieldgroup')) {
-    $vars['help'] .= '<br/>'. t('You can add a field to a group by dragging it below and to the right of the group.');
+    $vars['help'] .= '<br>'. t('You can add a field to a group by dragging it below and to the right of the group.');
   }
   if (!module_exists('advanced_help')) {
     $vars['help'] .= '<br/>' . t('Note: Installing the <a href="!adv_help">Advanced help</a> module will let you access more and better help.', array('!adv_help' => 'http://drupal.org/project/advanced_help'));
@@ -39,7 +41,7 @@ function template_preprocess_content_fie
       if (empty($remaining_rows) && empty($element['#depth'])) {
         $row = new stdClass();
         $row->row_type = 'separator';
-        $row->class = 'tabledrag-leaf region';
+        $row->class = 'region';//'tabledrag-leaf region';
         $rows[] = $row;
         $added_separator = TRUE;
       }
@@ -48,8 +50,6 @@ function template_preprocess_content_fie
     $row = new stdClass();
 
     // Add target classes for the tabledrag behavior.
-    $element['weight']['#attributes']['class'] = 'field-weight';
-    $element['parent']['#attributes']['class'] = 'group-parent';
     $element['hidden_name']['#attributes']['class'] = 'field-name';
     // Add target classes for the update selects behavior.
     switch ($element['#row_type']) {
@@ -58,7 +58,7 @@ function template_preprocess_content_fie
         $element['widget_type']['#attributes']['class'] = 'content-widget-type-select';
         break;
       case 'add_existing_field':
-        $element['field_name']['#attributes']['class'] = 'content-field-select';
+        $element['field_name']['#attplatform_content_display_overview_formributes']['class'] = 'content-field-select';
         $element['widget_type']['#attributes']['class'] = 'content-widget-type-select';
         $element['label']['#attributes']['class'] = 'content-label-textfield';
         break;
@@ -69,7 +69,6 @@ function template_preprocess_content_fie
     $row->label_class = 'label-'. strtr($element['#row_type'], '_', '-');
     $row->row_type = $element['#row_type'];
     $row->indentation = theme('indentation', isset($element['#depth']) ? $element['#depth'] : 0);
-    $row->class = 'draggable';
     $row->class .= isset($element['#disabled_row']) ? ' menu-disabled' : '';
     $row->class .= isset($element['#add_new']) ? ' content-add-new' : '';
     $row->class .= isset($element['#leaf']) ? ' tabledrag-leaf' : '';
@@ -81,12 +80,6 @@ function template_preprocess_content_fie
   $vars['rows'] = $rows;
   $vars['submit'] = drupal_render($form);
 
-  // Add tabledrag behavior.
-//  drupal_add_tabledrag('content-field-overview', 'match', 'parent', 'group-parent', 'group-parent', 'field-name', FALSE, 1);
-  drupal_add_tabledrag('content-field-overview', 'match', 'parent', 'group-parent', 'group-parent', 'field-name', TRUE, 1);
-//  drupal_add_tabledrag('content-field-overview', 'order', 'sibling', 'field-weight', NULL, NULL, FALSE);
-  drupal_add_tabledrag('content-field-overview', 'order', 'sibling', 'field-weight');
-
   // Add settings for the update selects behavior.
   $js_fields = array();
   foreach (array_keys(content_existing_field_options($form['#type_name'])) as $field_name) {
@@ -96,7 +89,6 @@ function template_preprocess_content_fie
   drupal_add_js(array('contentWidgetTypes' => content_widget_type_options(), 'contentFields' => $js_fields), 'setting');
   drupal_add_js(drupal_get_path('module', 'content') .'/content.js');
 }
-
 /**
  * Theme preprocess function for content-admin-display-overview-form.tpl.php.
  */
@@ -107,15 +99,6 @@ function template_preprocess_content_dis
   $vars['basic'] = $contexts_selector == 'basic';
   $vars['contexts'] = content_build_modes($contexts_selector);
 
-  if ($contexts_selector == 'basic') {
-    $help = t("Configure how this content type's fields and field labels should be displayed when it's viewed in teaser and full-page mode.");
-  }
-  else {
-    $help = t("Configure how this content type's fields should be displayed when it's rendered in the following contexts.");
-  }
-  $help .= ' '. t("Use the 'Exclude' checkbox to exclude an item from the !content value passed to the node template.", array('!content' => '$content'));
-  $vars['help'] = $help;
-
   $order = _content_overview_order($form, $form['#fields'], $form['#groups']);
   if (empty($order)) {
     $vars['rows'] = array();
@@ -127,19 +110,41 @@ function template_preprocess_content_dis
   foreach ($order as $key) {
     $element = &$form[$key];
     $row = new stdClass();
+
+    $element[$form['contexts_order_key']['#value']]['#attributes']['class'] = 'field-'. $form['contexts_order_key']['#value'];
+
     foreach (element_children($element) as $child) {
       if (!array_key_exists('exclude', $element[$child])) {
+        // Process weight.
+        if ($child == $form['contexts_order_key']['#value']) {
+          $element[$child] = process_weight($element[$child]);
+        }
         $row->{$child} = drupal_render($element[$child]);
       }
       else {
+        $row->{$child}->label = drupal_render($element[$child]['label']);
         $row->{$child}->format = drupal_render($element[$child]['format']);
         $row->{$child}->exclude = drupal_render($element[$child]['exclude']);
+        $row->{$child}->region = drupal_render($element[$child]['region']);
       }
+
     }
+
+    // Add draggable.
+    $row->class = 'draggable';
+
+    // Parent.
+    $row->parent = 0;
+
     $row->label_class = in_array($key, $form['#groups']) ? 'label-group' : 'label-field';
     $row->indentation = theme('indentation', isset($element['#depth']) ? $element['#depth'] : 0);
     $rows[] = $row;
   }
+
+  drupal_add_tabledrag('content-display-overview', 'order', 'sibling', 'field-'. $form['contexts_order_key']['#value']);
+
+  $vars['contexts_order_key'] = $form['contexts_order_key']['#value'];
   $vars['rows'] = $rows;
   $vars['submit'] = drupal_render($form);
+
 }
\ No newline at end of file

