commit 8cbf2f763a4bbc95f1f5cb2b95461ea3b627f7fd
Author: ijortengab <m_roji28@yahoo.com>
Date:   Wed Sep 3 09:01:07 2014 +0700

    build preprocess function

diff --git a/numbered_multivalue_fields.module b/numbered_multivalue_fields.module
index 585668b..ecb49b8 100644
--- a/numbered_multivalue_fields.module
+++ b/numbered_multivalue_fields.module
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * @file
  * Main Numbered Multivalue Fields module functions.
@@ -34,19 +33,6 @@ function numbered_multivalue_fields_permission() {
 }
 
 /**
- * Implements hook_theme_registry_alter().
- */
-function numbered_multivalue_fields_theme_registry_alter(&$theme_registry) {
-  // Override standard theme function theme_field_multiple_value_form
-  // with our custom one.
-  if (isset($theme_registry['field_multiple_value_form'])) {
-    $theme_registry['field_multiple_value_form']['type'] = 'module';
-    $theme_registry['field_multiple_value_form']['theme path'] = drupal_get_path('module', 'numbered_multivalue_field');
-    $theme_registry['field_multiple_value_form']['function'] = 'theme_numbered_field_multiple_value_form';
-  }
-}
-
-/**
  * Returns a list of numbered multi-value fields.
  */
 function numbered_multivalue_fields_field_list() {
@@ -55,114 +41,79 @@ function numbered_multivalue_fields_field_list() {
   if (!$active) {
     return array();
   }
-
   // Load Inclusions/Exclusions.
   $inclusions = variable_get('numbered_multivalue_fields_inclusion_list', array());
   $exclusions = variable_get('numbered_multivalue_fields_exclusion_list', array());
-
   if (empty($inclusions)) {
     $fields = field_info_fields();
     $inclusions = array_keys($fields);
   }
-
   // Remove Exclusions from list.
   $field_list = array_diff($inclusions, $exclusions);
-
   // Allow altering of fields.
   drupal_alter('numbered_multivalue_fields_field_list', $field_list);
-
   return $field_list;
 }
 
 /**
- * Overrides field_multiple_value_form theme function.
+ * Implements hook_preprocess_HOOK().
  */
-function theme_numbered_field_multiple_value_form($variables) {
-  $element = $variables['element'];
-  $numbered = FALSE;
+function numbered_multivalue_fields_preprocess_field_multiple_value_form(&$variables){
+  // Give token here, to pass from preprocess theme_table
+  $element = &$variables['element'];
+  $field_multivalue = $element['#cardinality'] > 1 || $element['#cardinality'] == FIELD_CARDINALITY_UNLIMITED;
   $output = '';
-
   // Load Numbered Field list.
   $numbered_field_list = numbered_multivalue_fields_field_list();
-
   // If field is within the field list then use our
   // numbered theme else use the default.
-  $exists = in_array($element['#field_name'], $numbered_field_list);
-  if ($exists) {
+  $numbered = FALSE;
+  if (in_array($element['#field_name'], $numbered_field_list)) {
     $numbered = TRUE;
   }
-
-  if ($element['#cardinality'] > 1 || $element['#cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
-    $table_id = drupal_html_id($element['#field_name'] . '_values');
-    $order_class = $element['#field_name'] . '-delta-order';
-    $required = !empty($element['#required']) ? theme('form_required_marker', $variables) : '';
-
-    $header = array(
-      array(
-        'data' => '<label>' . t('!title !required', array('!title' => $element['#title'], '!required' => $required)) . "</label>",
-        // Change to a colspan of 3 if using numbering.
-        'colspan' => ($numbered) ? 3 : 2,
-        'class' => array('field-label'),
-      ),
-      t('Order'),
-    );
-    $rows = array();
-
-    // Sort items according to '_weight' (needed when the form comes back after
-    // preview or failed validation).
-    $items = array();
+  if ($field_multivalue && $numbered) {
     foreach (element_children($element) as $key) {
-      if ($key === 'add_more') {
-        $add_more_button = &$element[$key];
-      }
-      else {
-        $items[] = &$element[$key];
+      if (is_numeric($key)) {
+        $element[$key]['value']['#post_render'][] = 'numbered_multivalue_fields_token';
       }
     }
-    usort($items, '_field_sort_items_value_helper');
+  }
+}
 
-    // Add the items as table rows.
-    foreach ($items as $key => $item) {
-      $item['_weight']['#attributes']['class'] = array($order_class);
-      $delta_element = drupal_render($item['_weight']);
+/**
+ * Post process render to give token.
+ */
+function numbered_multivalue_fields_token($html, $element){
+  $html = '[numbered_multivalue_fields]' . $html;
+  return $html;
+}
 
-      $cells = array();
-      $cells[] = array('data' => '', 'class' => array('field-multiple-drag'));
-
-      // Add our number cell.
-      if ($numbered) {
-        $cells[] = array('data' => ($key + 1), 'class' => array('row-number'));
-      }
-
-      $cells[] = drupal_render($item);
-      $cells[] = array('data' => $delta_element, 'class' => array('delta-order'));
-
-      $rows[] = array(
-        'data' => $cells,
-        'class' => array('draggable'),
+/**
+ * Implements hook_preprocess_HOOK().
+ */
+function numbered_multivalue_fields_preprocess_table(&$variables){
+  // mydebug($variables,'$variables @ ' . __FUNCTION__, 'f:debug_20140903_table');
+  $numbered = FALSE;
+  $rows = &$variables['rows'];
+  foreach ($rows as $key => $values) {
+    if (isset($values['data'][1]) && preg_match('/\[numbered_multivalue_fields\]/', $values['data'][1])) {
+      // First, remove token.
+      $values['data'][1] = preg_replace('/\[numbered_multivalue_fields\]/','', $values['data'][1]);
+      // Here we add numbered value
+      $numbered = TRUE;
+      $_0 = isset($values['data'][0]) ? $values['data'][0] : '';
+      $_1 = isset($values['data'][1]) ? $values['data'][1] : '';
+      $_2 = isset($values['data'][2]) ? $values['data'][2] : '';
+      $rows[$key]['data'] = array(
+        $_0,
+        array('data' => ($key + 1), 'class' => array('row-number')),
+        $_1,
+        $_2,
       );
     }
-
-    $output = '<div class="form-item">';
-    $output .= theme('table', array(
-      'header' => $header,
-      'rows' => $rows,
-      'attributes' => array(
-        'id' => $table_id,
-        'class' => array('field-multiple-table'),
-      ),
-    ));
-    $output .= $element['#description'] ? '<div class="description">' . $element['#description'] . '</div>' : '';
-    $output .= '<div class="clearfix">' . drupal_render($add_more_button) . '</div>';
-    $output .= '</div>';
-
-    drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class);
   }
-  else {
-    foreach (element_children($element) as $key) {
-      $output .= drupal_render($element[$key]);
-    }
+  // Change to a colspan of 3 if using numbering.
+  if ($numbered) {
+    $variables['header'][0]['colspan'] = 3;
   }
-
-  return $output;
-}
+}
\ No newline at end of file
