? .settings
Index: modules/field_ui/field_ui-field-overview-form.tpl.php
===================================================================
RCS file: modules/field_ui/field_ui-field-overview-form.tpl.php
diff -N modules/field_ui/field_ui-field-overview-form.tpl.php
--- modules/field_ui/field_ui-field-overview-form.tpl.php	24 Oct 2009 17:26:16 -0000	1.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,94 +0,0 @@
-<?php
-// $Id: field_ui-field-overview-form.tpl.php,v 1.2 2009/10/24 17:26:16 webchick Exp $
-
-/**
- * @file
- * Default theme implementation to configure field settings.
- *
- * Available variables:
- *
- * - $form: The complete overview form for the field settings.
- * - $contexts: An associative array of the available contexts for these fields.
- *   On the node field display settings this defaults to including "teaser" and
- *   "full" as the available contexts.
- * - $rows: The field overview form broken down into rendered rows for printing
- *   as a table.
- * - $submit: The rendered submit button for this form.
- *
- * @see field_ui_field_overview_form()
- * @see template_preprocess_field_ui_field_overview_form()
- */
-?>
-<table id="field-overview" class="sticky-enabled">
-  <thead>
-    <tr>
-      <th><?php print t('Label'); ?></th>
-      <th><?php print t('Weight'); ?></th>
-      <th><?php print t('Name'); ?></th>
-      <th><?php print t('Field'); ?></th>
-      <th><?php print t('Widget'); ?></th>
-      <th colspan="2"><?php print t('Operations'); ?></th>
-    </tr>
-  </thead>
-  <tbody>
-    <?php
-    $count = 0;
-    foreach ($rows as $row): ?>
-      <tr class="<?php print $count % 2 == 0 ? 'odd' : 'even'; ?> <?php print $row->class ?>">
-      <?php
-      switch ($row->row_type):
-        case 'field': ?>
-          <td>
-            <span class="<?php print $row->label_class; ?>"><?php print $row->label; ?></span>
-          </td>
-          <td><?php print $row->weight . $row->hidden_name; ?></td>
-          <td><?php print $row->field_name; ?></td>
-          <td><?php print $row->type; ?></td>
-          <td><?php print $row->widget_type; ?></td>
-          <td><?php print $row->edit; ?></td>
-          <td><?php print $row->delete; ?></td>
-          <?php break;
-
-        case 'extra': ?>
-          <td>
-            <span class="<?php print $row->label_class; ?>"><?php print $row->label; ?></span>
-          </td>
-          <td><?php print $row->weight . $row->hidden_name; ?></td>
-          <td><?php print $row->name; ?></td>
-          <td colspan="2"><?php print $row->description; ?></td>
-          <td><?php print $row->edit; ?></td>
-          <td><?php print $row->delete; ?></td>
-          <?php break;
-
-        case 'add_new_field': ?>
-          <td>
-            <div class="<?php print $row->label_class; ?>">
-              <div class="new"><?php print t('Add new field'); ?></div>
-              <?php print $row->label; ?>
-            </div>
-          </td>
-          <td><div class="new">&nbsp;</div><?php print $row->weight . $row->hidden_name; ?></td>
-          <td><div class="new">&nbsp;</div><?php print $row->field_name; ?></td>
-          <td><div class="new">&nbsp;</div><?php print $row->type; ?></td>
-          <td colspan="3"><div class="new">&nbsp;</div><?php print $row->widget_type; ?></td>
-          <?php break;
-
-        case 'add_existing_field': ?>
-          <td>
-            <div class="<?php print $row->label_class; ?>">
-              <div class="new"><?php print t('Add existing field'); ?></div>
-              <?php print $row->label; ?>
-            </div>
-          </td>
-          <td><div class="new">&nbsp;</div><?php print $row->weight . $row->hidden_name; ?></td>
-          <td colspan="2"><div class="new">&nbsp;</div><?php print $row->field_name; ?></td>
-          <td colspan="3"><div class="new">&nbsp;</div><?php print $row->widget_type; ?></td>
-          <?php break;
-      endswitch; ?>
-      </tr>
-      <?php $count++;
-    endforeach; ?>
-  </tbody>
-</table>
-
-<?php print $submit; ?>
Index: modules/field_ui/field_ui-rtl.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui-rtl.css,v
retrieving revision 1.1
diff -u -p -r1.1 field_ui-rtl.css
--- modules/field_ui/field_ui-rtl.css	19 Aug 2009 13:31:13 -0000	1.1
+++ modules/field_ui/field_ui-rtl.css	30 May 2010 13:43:18 -0000
@@ -1,8 +1,7 @@
 /* $Id: field_ui-rtl.css,v 1.1 2009/08/19 13:31:13 webchick Exp $ */
 
 /* 'Manage fields' overview */
-#field-overview .label-add-new-field,
-#field-overview .label-add-existing-field {
+#field-overview tr.add-new .label-input {
   float: right;
 }
 
Index: modules/field_ui/field_ui.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.admin.inc,v
retrieving revision 1.51
diff -u -p -r1.51 field_ui.admin.inc
--- modules/field_ui/field_ui.admin.inc	23 May 2010 19:10:23 -0000	1.51
+++ modules/field_ui/field_ui.admin.inc	30 May 2010 15:07:31 -0000
@@ -63,6 +63,64 @@ function field_ui_inactive_message($enti
 }
 
 /**
+ * Returns a themed table.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - table: A FAPI specification for a table.
+ *
+ * @return
+ *   A themed table.
+ */
+function theme_field_ui_table($variables) {
+  $elements = $variables['table'];
+  $table = array();
+
+  // @todo colgroups ?
+  foreach (array('header', 'attributes', 'colgroups') as $key) {
+    if (isset($elements["#$key"])) {
+      $table[$key] = $elements["#$key"];
+    }
+  }
+
+  // @todo this 'predictive' $col_order doesn't work well for cells with colspans.
+  $col_order = array();
+  foreach (array_keys($elements['#header']) as $key) {
+    $col_order = array_merge($col_order, explode(',', $key));
+  }
+  $row_order = _field_ui_overview_order($elements);
+
+  foreach ($row_order as $key) {
+    $element = $elements[$key];
+    $row = array('data' => array());
+    $row += $element['#attributes'];
+
+    foreach ($col_order as $cell_id) {
+      if (isset($element[$cell_id])) {
+        $cell = array('data' => drupal_render($element[$cell_id]));
+        if (isset($element[$cell_id]['#cell_attributes'])) {
+          $cell += $element[$cell_id]['#cell_attributes'];
+        }
+        $row['data'][] = $cell;
+      }
+      else {
+        $row['data'][] = '';
+      }
+    }
+
+    // @todo : needed ?
+    // Use the row's key as HTML ID if it's not numeric.
+    if (!isset($row['id']) && !is_numeric($key)) {
+      $row['id'] = drupal_html_id($key);
+    }
+
+    $table['rows'][] = $row;
+  }
+
+  return theme('table', $table);
+}
+
+/**
  * Menu callback; listing of fields for a bundle.
  *
  * Allows fields and pseudo-fields to be re-ordered.
@@ -94,15 +152,30 @@ function field_ui_field_overview_form($f
     '#bundle' => $bundle,
     '#fields' => array_keys($instances),
     '#extra' => array_keys($extra_fields),
+  );
+
+  $table = array(
+    '#type' => 'table',
+    '#header' => array(
+      'label' => t('Label'),
+      'weight' => t('Weight'),
+      'field_name' => t('Name'),
+      'type' => t('Field'),
+      'widget_type' => t('Widget'),
+      'edit,delete' => array('data' => t('Operations'), 'colspan' => 2),
+    ),
+    '#attributes' => array('id' => 'field-overview'),
     '#field_rows' => array(),
   );
 
+  $element['hidden_name']['#attributes']['class'][] = 'field-name';
+
   // Fields.
   foreach ($instances as $name => $instance) {
     $field = field_info_field($instance['field_name']);
     $admin_field_path = $admin_path . '/fields/' . $instance['field_name'];
     $weight = $instance['widget']['weight'];
-    $form[$name] = array(
+    $table[$name] = array(
       'label' => array(
         '#markup' => check_plain($instance['label']),
       ),
@@ -137,40 +210,44 @@ function field_ui_field_overview_form($f
         '#type' => 'textfield',
         '#default_value' => $weight,
         '#size' => 3,
+        '#attributes' => array('class' => array('field-weight')),
        ),
       'hidden_name' => array(
         '#type' => 'hidden',
         '#default_value' => $instance['field_name'],
+        '#attributes' => array('class' => array('field-name')),
        ),
-      '#row_type' => 'field',
+      '#attributes' => array('class' => array('draggable')),
     );
 
     if (!empty($instance['locked'])) {
-      $form[$name]['edit'] = array('#value' => t('Locked'));
-      $form[$name]['delete'] = array();
-      $form[$name]['#disabled_row'] = TRUE;
+      $table[$name]['edit'] = array('#value' => t('Locked'));
+      $table[$name]['delete'] = array();
+      $table[$name]['#attributes']['class'][] = 'menu-disabled';
     }
-    $form['#field_rows'][] = $name;
+    $table['#field_rows'][] = $name;
     $weights[] = $weight;
   }
 
   // Non-field elements.
   foreach ($extra_fields as $name => $extra_field) {
     $weight = $extra_field['weight'];
-    $form[$name] = array(
+    $table[$name] = array(
       'label' => array(
         '#markup' => check_plain($extra_field['label']),
       ),
-      'name' => array(
+      'field_name' => array(
         '#markup' => $name,
       ),
-      'description' => array(
+      'type' => array(
         '#markup' => isset($extra_field['description']) ? $extra_field['description'] : '',
+        '#cell_attributes' => array('colspan' => 2),
       ),
       'weight' => array(
         '#type' => 'textfield',
         '#default_value' => $weight,
         '#size' => 3,
+        '#attributes' => array('class' => array('field-weight')),
       ),
       'edit' => array(
         '#markup' => isset($extra_field['edit']) ? $extra_field['edit'] : '',
@@ -181,14 +258,13 @@ function field_ui_field_overview_form($f
       'hidden_name' => array(
         '#type' => 'hidden',
         '#default_value' => $name,
+        '#attributes' => array('class' => array('field-name')),
       ),
-      '#disabled_row' => TRUE,
-      '#row_type' => 'extra',
+      '#attributes' => array('class' => array('draggable', 'menu-disabled')),
     );
-    $form['#field_rows'][] = $name;
+    $table['#field_rows'][] = $name;
     $weights[] = $weight;
   }
-
   // Additional row: add new field.
   $weight = !empty($weights) ? max($weights) + 1 : 0;
   $field_type_options = field_ui_field_type_options();
@@ -197,11 +273,13 @@ function field_ui_field_overview_form($f
     array_unshift($field_type_options, t('- Select a field type -'));
     array_unshift($widget_type_options, t('- Select a widget -'));
     $name = '_add_new_field';
-    $form[$name] = array(
+    $table[$name] = array(
       'label' => array(
         '#type' => 'textfield',
         '#size' => 15,
         '#description' => t('Label'),
+        '#prefix' => '<div class="label-input"><div class="add-new-placeholder">' . t('Add new field') .'</div>',
+        '#suffix' => '</div>',
       ),
       'field_name' => array(
         '#type' => 'textfield',
@@ -211,30 +289,38 @@ function field_ui_field_overview_form($f
         '#attributes' => array('dir'=>'ltr'),
         '#size' => 15,
         '#description' => t('Field name (a-z, 0-9, _)'),
+        '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
       ),
       'type' => array(
         '#type' => 'select',
         '#options' => $field_type_options,
         '#description' => t('Type of data to store.'),
+        '#attributes' => array('class' => array('field-type-select')),
+        '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
       ),
       'widget_type' => array(
         '#type' => 'select',
         '#options' => $widget_type_options,
         '#description' => t('Form element to edit the data.'),
+        '#attributes' => array('class' => array('widget-type-select')),
+        '#cell_attributes' => array('colspan' => 3),
+        '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
       ),
       'weight' => array(
         '#type' => 'textfield',
         '#default_value' => $weight,
         '#size' => 3,
+        '#attributes' => array('class' => array('field-weight')),
+        '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
       ),
       'hidden_name' => array(
         '#type' => 'hidden',
         '#default_value' => $name,
+        '#attributes' => array('class' => array('field-name')),
       ),
-      '#add_new' => TRUE,
-      '#row_type' => 'add_new_field',
+      '#attributes' => array('class' => array('draggable', 'add-new')),
     );
-    $form['#field_rows'][] = $name;
+    $table['#field_rows'][] = $name;
   }
 
   // Additional row: add existing field.
@@ -243,106 +329,71 @@ function field_ui_field_overview_form($f
     $weight++;
     array_unshift($existing_field_options, t('- Select an existing field -'));
     $name = '_add_existing_field';
-    $form[$name] = array(
+    $table[$name] = array(
       'label' => array(
         '#type' => 'textfield',
         '#size' => 15,
         '#description' => t('Label'),
+        '#attributes' => array('class' => array('label-textfield')),
+        '#prefix' => '<div class="label-input"><div class="add-new-placeholder">' . t('Add existing field') .'</div>',
+        '#suffix' => '</div>',
       ),
       'field_name' => array(
         '#type' => 'select',
         '#options' => $existing_field_options,
         '#description' => t('Field to share'),
+        '#attributes' => array('class' => array('field-select')),
+        '#cell_attributes' => array('colspan' => 2),
+        '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
       ),
       'widget_type' => array(
         '#type' => 'select',
         '#options' => $widget_type_options,
         '#description' => t('Form element to edit the data.'),
+        '#attributes' => array('class' => array('widget-type-select')),
+        '#cell_attributes' => array('colspan' => 3),
+        '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
       ),
       'weight' => array(
         '#type' => 'textfield',
         '#default_value' => $weight,
         '#size' => 3,
+        '#attributes' => array('class' => array('field-weight')),
+        '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
       ),
       'hidden_name' => array(
         '#type' => 'hidden',
         '#default_value' => $name,
+        '#attributes' => array('class' => array('field-name')),
       ),
-      '#add_new' => TRUE,
-      '#row_type' => 'add_existing_field',
+      '#attributes' => array('class' => array('draggable', 'menu-disabled')),
     );
-    $form['#field_rows'][] = $name;
+    $table['#field_rows'][] = $name;
   }
 
+  $form['table'] = $table;
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
-  return $form;
-}
 
-/**
- * Theme preprocess function for field_ui-field-overview-form.tpl.php.
- */
-function template_preprocess_field_ui_field_overview_form(&$vars) {
-  $form = &$vars['form'];
+  $form['#attached']['drupal_add_tabledrag'][] = array('field-overview', 'order', 'sibling', 'field-weight');
+
+  $form['#attached']['css'][] = drupal_get_path('module', 'field_ui') . '/field_ui.css';
+  $form['#attached']['js'][] = drupal_get_path('module', 'field_ui') . '/field_ui.js';
 
-  drupal_add_css(drupal_get_path('module', 'field_ui') . '/field_ui.css');
-  drupal_add_tabledrag('field-overview', 'order', 'sibling', 'field-weight');
-  drupal_add_js(drupal_get_path('module', 'field_ui') . '/field_ui.js');
-  // Add settings for the update selects behavior.
+  // Add settings for the update selects behavior
+  // @todo revise that ?
   $js_fields = array();
   foreach (field_ui_existing_field_options($form['#entity_type'], $form['#bundle']) as $field_name => $fields) {
     $field = field_info_field($field_name);
     $instance = field_info_instance($form['#entity_type'], $field_name, $form['#bundle']);
     $js_fields[$field_name] = array('label' => $instance['label'], 'type' => $field['type'], 'widget' => $instance['widget']['type']);
   }
-  drupal_add_js(array('fieldWidgetTypes' => field_ui_widget_type_options(), 'fields' => $js_fields), 'setting');
-
-  $order = _field_ui_overview_order($form, $form['#field_rows']);
-  $rows = array();
-
-  // Identify the 'new item' keys in the form.
-  $keys = array_keys($form);
-  $add_rows = array();
-  foreach ($keys as $key) {
-    if (substr($key, 0, 4) == '_add') {
-      $add_rows[] = $key;
-    }
-  }
-  while ($order) {
-    $key = reset($order);
-    $element = &$form[$key];
-    $row = new stdClass();
-
-    // Add target classes for the tabledrag behavior.
-    $element['weight']['#attributes']['class'][] = 'field-weight';
-    $element['hidden_name']['#attributes']['class'][] = 'field-name';
-    // Add target classes for the update selects behavior.
-    switch ($element['#row_type']) {
-      case 'add_new_field':
-        $element['type']['#attributes']['class'][] = 'field-type-select';
-        $element['widget_type']['#attributes']['class'][] = 'widget-type-select';
-        break;
-
-      case 'add_existing_field':
-        $element['field_name']['#attributes']['class'][] = 'field-select';
-        $element['widget_type']['#attributes']['class'][] = 'widget-type-select';
-        $element['label']['#attributes']['class'][] = 'label-textfield';
-        break;
-    }
-    foreach (element_children($element) as $child) {
-      $row->{$child} = drupal_render($element[$child]);
-    }
-    $row->label_class = 'label-' . strtr($element['#row_type'], '_', '-');
-    $row->row_type = $element['#row_type'];
-    $row->class = 'draggable';
-    $row->class .= isset($element['#add_new']) ? ' add-new' : '';
-    $row->class .= isset($element['#disabled_row']) ? ' menu-disabled' : '';
+  $form['#attached']['js'][] = array(
+    'type' => 'setting',
+    'data' => array('fieldWidgetTypes' => field_ui_widget_type_options(), 'fields' => $js_fields),
+  );
 
-    $rows[] = $row;
-    array_shift($order);
-  }
-  $vars['rows'] = $rows;
-  $vars['submit'] = drupal_render_children($form);
+  return $form;
 }
 
 /**
@@ -474,14 +525,14 @@ function field_ui_field_overview_form_su
       foreach($instance['display'] as $view_mode => $display) {
         $instance['display'][$view_mode]['weight'] = $values['weight'];
       }
-      field_update_instance($instance);
+      //field_update_instance($instance);
     }
     elseif (in_array($key, $form['#extra'])) {
       $bundle_settings['extra_fields']['form'][$key]['weight'] = $values['weight'];
     }
   }
 
-  field_bundle_settings($entity_type, $bundle, $bundle_settings);
+  //field_bundle_settings($entity_type, $bundle, $bundle_settings);
 
   $destinations = array();
 
@@ -508,14 +559,14 @@ function field_ui_field_overview_form_su
 
     // Create the field and instance.
     try {
-      field_create_field($field);
-      field_create_instance($instance);
-
-      $destinations[] = $admin_path . '/fields/' . $field['field_name'] . '/field-settings';
-      $destinations[] = $admin_path . '/fields/' . $field['field_name'] . '/edit';
-
-      // Store new field information for any additional submit handlers.
-      $form_state['fields_added']['_add_new_field'] = $field['field_name'];
+//      field_create_field($field);
+//      field_create_instance($instance);
+//
+//      $destinations[] = $admin_path . '/fields/' . $field['field_name'] . '/field-settings';
+//      $destinations[] = $admin_path . '/fields/' . $field['field_name'] . '/edit';
+//
+//      // Store new field information for any additional submit handlers.
+//      $form_state['fields_added']['_add_new_field'] = $field['field_name'];
     }
     catch (Exception $e) {
       drupal_set_message(t('There was a problem creating field %label: @message.', array('%label' => $instance['label'], '@message' => $e->getMessage())));
@@ -542,10 +593,10 @@ function field_ui_field_overview_form_su
       );
 
       try {
-        field_create_instance($instance);
-        $destinations[] = $admin_path . '/fields/' . $instance['field_name'] . '/edit';
-        // Store new field information for any additional submit handlers.
-        $form_state['fields_added']['_add_existing_field'] = $instance['field_name'];
+//        field_create_instance($instance);
+//        $destinations[] = $admin_path . '/fields/' . $instance['field_name'] . '/edit';
+//        // Store new field information for any additional submit handlers.
+//        $form_state['fields_added']['_add_existing_field'] = $instance['field_name'];
       }
       catch (Exception $e) {
         drupal_set_message(t('There was a problem creating field instance %label: @message.', array('%label' => $instance['label'], '@message' => $e->getMessage())));
@@ -1410,20 +1461,21 @@ function field_ui_next_destination($enti
 
 /**
  * Helper function to order fields when theming overview forms.
+ *
+ * @todo : put back in theme_field_ui_table() ?
  */
-function _field_ui_overview_order(&$form, $field_rows) {
-  // Put weight and parenting values into a $dummy render structure and let
+function _field_ui_overview_order($table) {
+  // Put weight and parenting values into a dummy render structure and let
   // drupal_render() figure out the corresponding row order.
-  $dummy = array();
+  $rows = array();
   // Field rows: account for weight.
-  foreach ($field_rows as $name) {
-    $dummy[$name] = array(
+  foreach ($table['#field_rows'] as $name) {
+    $rows[$name] = array(
       '#markup' => $name . ' ',
-      '#type' => 'markup',
-      '#weight' => $form[$name]['weight']['#value'],
+      '#weight' => $table[$name]['weight']['#value'],
     );
   }
-  return $dummy ? explode(' ', trim(drupal_render($dummy))) : array();
+  return $rows ? explode(' ', trim(drupal_render($rows))) : array();
 }
 
 /**
Index: modules/field_ui/field_ui.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.css,v
retrieving revision 1.2
diff -u -p -r1.2 field_ui.css
--- modules/field_ui/field_ui.css	23 May 2010 19:10:23 -0000	1.2
+++ modules/field_ui/field_ui.css	30 May 2010 14:16:29 -0000
@@ -1,8 +1,7 @@
 /* $Id: field_ui.css,v 1.2 2010/05/23 19:10:23 dries Exp $ */
 
 /* 'Manage fields' overview */
-#field-overview .label-add-new-field,
-#field-overview .label-add-existing-field {
+#field-overview tr.add-new .label-input {
   float: left; /* LTR */
 }
 #field-overview tr.add-new .tabledrag-changed {
@@ -11,7 +10,7 @@
 #field-overview tr.add-new .description {
   margin-bottom: 0;
 }
-#field-overview .new {
+#field-overview tr.add-new .add-new-placeholder {
   font-weight: bold;
   padding-bottom: .5em;
 }
Index: modules/field_ui/field_ui.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.module,v
retrieving revision 1.30
diff -u -p -r1.30 field_ui.module
--- modules/field_ui/field_ui.module	23 May 2010 19:10:23 -0000	1.30
+++ modules/field_ui/field_ui.module	30 May 2010 14:33:27 -0000
@@ -49,24 +49,6 @@ function field_ui_help($path, $arg) {
 }
 
 /**
- * Implements hook_theme().
- */
-function field_ui_theme() {
-  return array(
-    'field_ui_field_overview_form' => array(
-      'render element' => 'form',
-      'file' => 'field_ui.admin.inc',
-      'template' => 'field_ui-field-overview-form',
-    ),
-    'field_ui_display_overview_table' => array(
-      'render element' => 'elements',
-      'file' => 'field_ui.admin.inc',
-      'template' => 'field_ui-display-overview-table',
-    ),
-  );
-}
-
-/**
  * Implements hook_menu().
  */
 function field_ui_menu() {
@@ -289,6 +271,33 @@ function _field_ui_view_mode_menu_access
 }
 
 /**
+ * Implements hook_theme().
+ */
+function field_ui_theme() {
+  return array(
+    'field_ui_display_overview_table' => array(
+      'render element' => 'elements',
+      'file' => 'field_ui.admin.inc',
+      'template' => 'field_ui-display-overview-table',
+    ),
+    'field_ui_table' => array(
+      'render element' => 'table',
+    ),
+  );
+}
+
+/**
+ * Implements hook_element_info().
+ */
+function field_ui_element_info() {
+  return array(
+    'table' => array(
+      '#theme' => 'field_ui_table',
+    ),
+  );
+}
+
+/**
  * Implements hook_field_attach_create_bundle().
  */
 function field_ui_field_attach_create_bundle($entity_type, $bundle) {
