Index: custom_pagers.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/custom_pagers/custom_pagers.admin.inc,v
retrieving revision 1.1.2.2
diff -u -p -w -r1.1.2.2 custom_pagers.admin.inc
--- custom_pagers.admin.inc	24 Dec 2008 00:58:21 -0000	1.1.2.2
+++ custom_pagers.admin.inc	4 Feb 2009 16:56:26 -0000
@@ -1,5 +1,5 @@
 <?php
-// $Id: custom_pagers.admin.inc,v 1.1.2.2 2008/12/24 00:58:21 eaton Exp $
+// $Id: custom_pagers.admin.inc,v 1.1 2008/06/17 20:47:05 eaton Exp $
 
 /**
  * @file
@@ -7,29 +7,82 @@
  */
 
 // Lists all current custom pagers, and provides a link to the edit page.
-function custom_pagers_page() {
+function custom_pagers_overview_form() {
   $pagers = _custom_pagers_load_all_pagers(TRUE);
+  $form = array('#tree' => TRUE);
 
-  $header = array(t('Title'), t('Node list'), t('Visibility'), '');
+  foreach ($pagers as $pager) {
+    $form[$vocabulary->vid]['#pager'] = (array)$pager;
+    $form[$pager->pid]['weight'] = array('#type' => 'weight', '#delta' => 10, '#default_value' => $pager->weight);
+    $form[$pager->pid]['title'] = array('#value' => $pager->title);
+    $form[$pager->pid]['node_list'] = array('#value' => !empty($pager->list_php) ? t('PHP snippet') : $pager->view . t(' view'));
+    $form[$pager->pid]['visibility'] = array('#value' => !empty($pager->visibility_php) ? t('PHP snippet') : $pager->node_type . t(' nodes'));
+    $form[$pager->pid]['edit'] = array('#value' => l(t('edit'), 'admin/build/custom_pagers/edit/' . $pager->pid));
+  }
+
+  // Only make this form include a submit button and weight if more than one
+  // pager exists.
+  if (count($pagers) > 1) {
+    $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
+  }
+  elseif (isset($pager)) {
+    unset($form[$pager->pid]['weight']);
+  }
+  return $form;
+}
+
+/**
+ * Submit handler for pagers overview. Updates changed pager weights.
+ *
+ * @see custom_pagers_overview_form()
+ */
+function custom_pagers_overview_form_submit($form, &$form_state) {
+  foreach ($form_state['values'] as $pid => $pager) {
+    if (is_numeric($pid) && $form[$pid]['#pager']['weight'] != $form_state['values'][$pid]['weight']) {
+      $pager = _custom_pagers_load_pager($pid);
+      $pager->weight = $form_state['values'][$pid]['weight'];
+      _custom_pagers_save_pager($pager);
+    }
+  }
+}
 
+/**
+ * Theme the pagers overview as a sortable list of pagers.
+ *
+ * @ingroup themeable
+ * @see custom_pagers_overview_form()
+ */
+function theme_custom_pagers_overview_form($form) {
   $rows = array();
-  foreach ($pagers as $pager) {
+  foreach (element_children($form) as $key) {
+    if (isset($form[$key]['title'])) {
+      $pager = &$form[$key];
+
     $row = array();
-    $row[] = $pager->title;
-    $row[] = !empty($pager->list_php) ? t('PHP snippet') : $pager->view . ' ' . t('view');
-    $row[] = !empty($pager->visibility_php) ? t('PHP snippet') : $pager->node_type . ' ' .t('nodes');
-    $row[] =  l(t('edit'), 'admin/build/custom_pagers/edit/' . $pager->pid);
-    $rows[] = $row;
-  }
-  if (count($rows) == 0) {
-    $rows[] = array(array('data' => t('No custom pagers have been defined.'), 'colspan' => 3));
+
+      if (isset($pager['weight'])) {
+        $row[] = drupal_render($pager['weight']);
   }
+      $row[] = drupal_render($pager['title']);
+      $row[] = drupal_render($pager['node_list']);
+      $row[] = drupal_render($pager['visibility']);
+      $row[] = drupal_render($pager['edit']);
 
-  $rows[] = array(array('data' => l(t('Add a new custom pager'), 'admin/build/custom_pagers/add'), 'colspan' => 2));
+      $rows[] = array('data' => $row, 'class' => 'draggable');
+    }
+  }
+  if (empty($rows)) {
+    $rows[] = array(array('data' => t('No custom pagers have been defined.'), 'colspan' => 4));
+  }
+  $rows[] = array(array('data' => l(t('Add a new custom pager'), 'admin/build/custom_pagers/add'), 'colspan' => 4));
 
-  return theme('table', $header, $rows);
+  $header = array(t('Weight'), t('Title'), t('Node list'), t('Visibility'), '');
+  if (isset($form['submit'])) {
+    //drupal_add_tabledrag('pagers', 'order', 'sibling', 'pager-weight');
 }
 
+  return theme('table', $header, $rows, array('id' => 'pagers')) . drupal_render($form);
+}
 
 // Displays an edit form for a custom pager record.
 function custom_pagers_form(&$form_state, $pid = NULL) {
@@ -40,6 +93,12 @@ function custom_pagers_form(&$form_state
     );
   }
 
+  $form['weight'] = array(
+    '#type' => 'weight',
+    '#delta' => 10,
+    '#default_value' => $vocabulary->weight,
+  );
+
   $form['title'] = array(
     '#type' => 'textfield',
     '#title' => t('Title'),
Index: custom_pagers.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/custom_pagers/custom_pagers.install,v
retrieving revision 1.3.2.2
diff -u -p -w -r1.3.2.2 custom_pagers.install
--- custom_pagers.install	24 Dec 2008 00:58:21 -0000	1.3.2.2
+++ custom_pagers.install	4 Feb 2009 16:56:26 -0000
@@ -1,5 +1,5 @@
 <?php
-// $Id: custom_pagers.install,v 1.3.2.2 2008/12/24 00:58:21 eaton Exp $
+// $Id: custom_pagers.install,v 1.3 2008/06/17 20:47:05 eaton Exp $
 
 /**
  * @file
@@ -77,6 +77,13 @@ function custom_pagers_schema() {
         'size' => 'tiny',
         'description' => t("A boolean flag indicating that this {custom_pager} should be displayed in reverse order.")
       ),
+      'weight' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'size' => 'tiny',
+        'description' => 'The weight of this pager in relation to other pagers.',
+      ),
     ),
     'primary key' => array('pid'),
   );
@@ -116,7 +123,6 @@ function custom_pagers_update_2() {
   return $ret;
 }
 
-
 /**
  * Kill the cache flag as it's not actually that helpful.
  */
@@ -126,6 +132,19 @@ function custom_pagers_update_6104() {
   return $ret;
 }
 
+function custom_pagers_update_6105() {
+  $ret = array();
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      $ret[] = update_sql("ALTER TABLE {custom_pager} ADD weight tinyint NOT NULL default 0");
+      break;
+    case 'pgsql':
+      db_add_column($ret, 'custom_pager', 'weight', 'smallint', array('not null' => TRUE, 'default' => 0));
+      break;
+  }
+  return $ret;
+}
 function custom_pagers_uninstall() {
   drupal_uninstall_schema('custom_pagers');
 }
Index: custom_pagers.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/custom_pagers/custom_pagers.module,v
retrieving revision 1.6.2.4
diff -u -p -w -r1.6.2.4 custom_pagers.module
--- custom_pagers.module	25 Dec 2008 18:48:43 -0000	1.6.2.4
+++ custom_pagers.module	4 Feb 2009 16:56:26 -0000
@@ -1,5 +1,5 @@
 <?php
-// $Id: custom_pagers.module,v 1.6.2.4 2008/12/25 18:48:43 eaton Exp $
+// $Id: custom_pagers.module,v 1.6 2008/06/17 21:20:32 eaton Exp $
 
 /**
  * @file
@@ -16,7 +16,8 @@ function custom_pagers_menu() {
   $items['admin/build/custom_pagers'] = array(
     'title' => 'Custom pagers',
     'description' => 'Add custom pagers for content types.',
-    'page callback' => 'custom_pagers_page',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('custom_pagers_overview_form'),
     'access arguments' => array('administer custom pagers'),
     'file' => 'custom_pagers.admin.inc',
   );
@@ -58,6 +59,9 @@ function custom_pagers_theme() {
       ),
       'template' => 'custom-pager',
     ),
+    'custom_pagers_overview_form' => array(
+      'arguments' => array('form' => array()),
+    ),
   );
 }
 
@@ -143,7 +147,7 @@ function _custom_pagers_load_pager($pid)
 function _custom_pagers_load_all_pagers($refresh = FALSE) {
   static $pagers;
   if ($refresh || !isset($pagers)) {
-    $sql = 'SELECT * FROM {custom_pager}';
+    $sql = 'SELECT * FROM {custom_pager} ORDER BY weight asc';
     $result = db_query($sql);
 
     $pagers = array();
@@ -210,7 +214,40 @@ function custom_pager_build_nav($pager, 
     }
   }
 
-  return pager_entries_by_val($node->nid, $list);
+  $pager_cache[$pager->pid] = $list;
+
+  $entries =  pager_entries_by_val($node->nid, $list);
+
+  if ($entries['current_index'] != -1) {
+    $pagers = _custom_pagers_load_all_pagers();
+    $pager_keys = array_keys($pagers);
+    $pager_index = array_search($pager->pid, $pager_keys);
+    $node_index = array_search($node->nid, $entries['full_list']);
+    // Not at the beginning
+    if ($node_index == 0) {
+      $previous = $pagers[$pager_keys[$pager_index - 1]];
+      if (empty($pager_cache[$previous->pid])) {
+        custom_pager_build_nav($previous, $node);
+      }
+      $prev_list = $pager_cache[$previous->pid];
+      $prev_entries = pager_entries_by_val($node->nid, $prev_list);
+      $entries['prev'] = $prev_entries['last'];
+    }
+
+    // At the end
+    if ($node_index == (count($entries['full_list']) - 1)) {
+
+      $next = $pagers[$pager_keys[$pager_index + 1]];
+      if (empty($pager_cache[$next->pid])) {
+        custom_pager_build_nav($next, $node);
+      }
+      $next_list = $pager_cache[$next->pid];
+      $next_entries =  pager_entries_by_val($node->nid, $next_list);
+      $entries['next'] = $next_entries['first'];
+    }
+  }
+
+  return $entries;
 }
 
 // Helper functions to pull proper entries from a list of nids.
