--- olddiff.module	2006-07-12 10:42:01.206821200 +0100
+++ diff.module	2006-07-12 10:41:08.371283500 +0100
@@ -1,5 +1,5 @@
 <?php
-// $Id: diff.module,v 1.7 2005/10/29 16:58:13 weitzman Exp $
+// $Id: diff.module,v 1.2.2.3 2005/05/05 18:20:37 weitzman Exp $
 
 /*
  * Diff module for drupal.
@@ -10,6 +10,7 @@
 
 function diff_help($section) {
   switch ($section) {
+  case 'admin/help#diff':
   case 'admin/modules#description':
   case 'admin/diff':
     return "Show difference between node revisions.";
@@ -29,109 +30,80 @@ function diff_perm() {
 function diff_menu($may_cache) {
   $items = array();
 
-  if (!$may_cache) {
     if (arg(0) == 'node' && is_numeric(arg(1))) {
-      $node = node_load(array('nid' => arg(1)));
-      if ($node->nid) {
-        if ($node->vid > 1) {
-           $items[] = array('path' => 'node/'. arg(1) .'/diff', 'title' => t('diff'),
-           'callback' => 'diff_page',
-           'callback arguments' => array(arg(1)),
-           'access' => user_access('access diff'),
-           'weight' => 6,
-           'type' => MENU_LOCAL_TASK);
-           
-           $path = drupal_get_path('module', 'diff');
-           $style = "<link type=\"text/css\" rel=\"stylesheet\" href=\"$path/diff.css\" />";
-           drupal_set_html_head($style);
+      $node = node_load(arg(1));
+      if ($node->nid)	{
+        if ( count(node_revision_list($node)) > 1 ) {
+          $items[] = array('path' => 'node/'. arg(1) .'/diff', 'title' => t('diff'),
+            'callback' => 'diff_page',
+            'callback arguments' => array(arg(1)),
+            'access' => user_access('access diff'),
+            'weight' => 6,
+            'type' => MENU_LOCAL_TASK);
         }
       }
     }
-  }
   return $items;
 }
 
+/**
+ * Show a difference between revisions.
+ */
 function diff_page($nid, $rid1 = NULL, $rid2 = NULL) {
+  drupal_set_html_head(theme('stylesheet_import', base_path() . drupal_get_path('module', 'diff') .'/diff.css'));
+  include_once 'Text/Diff.php';
+  include_once 'Text/Diff/Renderer.php';
+  include_once 'Text/Diff/Renderer/inline.php';
+
   if (!is_null($rid1)) {
-    return diff_revision_detail($nid, $rid1, $rid2);
+    return _diff_show_revision($nid, $rid1, $rid2);
   }
   else {
-    return diff_revision_overview($nid);
+    return _diff_show_page($nid);
   }
 }
 
 
-/**
- * Show a difference between revisions.
- */
-function diff_revision_detail($nid, $rid1, $rid2 = NULL) {
-  drupal_set_title(t('Differences between versions %1 and %2', array('%1' => $rid1, '%2' => $rid2 ? $rid2 : t('current'))));
-  $path = dirname(__FILE__);
-  require_once "$path/Text/Diff.php";
-  require_once "$path/Text/Diff/Renderer.php";
-  require_once "$path/Text/Diff/Renderer/inline.php";
-  
-  $r1 = node_load(array('nid' => $nid), $rid1);
-  $r2 = node_load(array('nid' => $nid), $rid2);
-  $source = explode("\n", diff_node_render($r1));
-  $target = explode("\n", diff_node_render($r2));
-  $diff = &new Text_Diff($target, $source);
+function _diff_show_revision($nid, $rid1, $rid2 = NULL) {
+  $r1 = node_load($nid, $rid1);
+  $r2 = node_load($nid, $rid2);
+  $source = explode("\n", diff_node_render($r2));
+  $target = explode("\n", diff_node_render($r1));
+  $diff = &new Text_Diff($source, $target);
   $renderer = &new Text_Diff_Renderer_inline();
   $node = $r1;
-  if ($r1->title != $r2->title) {
-    $node->body = form_item(t('Title'), '<del class=diff>'. check_plain($r2->title). '</del>&nbsp;<ins class=diff>'. check_plain($r1->title)). '</ins>';
-  }
-  $node->body .= form_item(t('Body'), $renderer->render($diff));
-  return $node->body; //theme('node', $node);
+  $node->body = $renderer->render($diff); 
+  return theme('node', $node);
 }
 
-/**
- * Generate an overview table of older revisions of a node.
- */
-function diff_revision_overview($nid) {
+function _diff_show_page($nid) {
   $node = node_load($nid);
+  drupal_set_title($node->title);
 
-  drupal_set_title(t('Revisions for %title', array('%title' => check_plain($node->title))));
-
-  if ($node->vid) {
-    $header = array('', t('Author'), t('Title'), t('Date'), array('colspan' => '2', 'data' => t('Operations')));
-
-    $revisions = node_revision_list($node);
-
-    $i = 0;
-    foreach ($revisions as $revision) {
-      $row = ++$i;
-      
-      if (!$revision->current_vid) {
-        $links[] = l(t('current'), "node/$node->nid/diff/$revision->vid");
-        $txt_vid = $revision->vid; 
-      }
-      else {
-        $txt_vid = $revision->vid. ' '. t('(current)');
-      }
-      if ($revision->vid > 1) {  
-        $links[] = l(t('previous '), "node/$node->nid/diff/$revision->vid/".($revision->vid-1));
-        $links[] = l(t('first '), "node/$node->nid/diff/$revision->vid/1");
-      }
-      $difflinks = t('diff to: '). theme('links', $links);
-      unset($links);
-      
-      $rows[] = array(
-        array('data' => $txt_vid, 'rowspan' => ($revision->log != '') ? 2 : 1),
-          theme('username', $revision),
-          $revision->title,
-          format_date($revision->timestamp, 'small'),
-          $difflinks,
-          // l(t('view'), "node/$node->nid"),
-        );
-      if ($revision->log != '') {
-        $rows[] = array(array('data' => $revision->log, 'colspan' => 5));
-      }
+  $header = array(t('Older revisions'), array('data' => t('Operations'), 'colspan' => 3));
+  // $last_key = count($node->revisions) - 1;
+	
+  $revisions = node_revision_list($node);
+
+  foreach ($revisions as $key => $revision)	{
+	$vid = $revision->vid;
+    if ($key != 0) {
+      $prev = l(t('previous'), "node/$node->nid/diff/$vid/".( $revisions[$key-1]->vid ));
+      $first = l(t('first'), "node/$node->nid/diff/$vid/" .($revisions[0]->vid));
     }
-    $output .= theme('table', $header, $rows);
+    $current = l(t('current'), "node/$node->nid/diff/$vid");
+    $rows[] = array(
+	  t('revision %r (%v) revised by %u on %d',
+  		array(
+		  '%r' => 1 + $key,
+    	  '%v' => $vid,
+    	  '%u' => theme('username', user_load(array('uid' => $revision->uid))),
+    	  '%d' => format_date($revision->timestamp, 'small')
+		)
+	  ) . ($revision->history ? '<br /><small>'. $revision->history .'</small>' : ''),
+	  $prev, $first, $current);
   }
-
-  return $output;
+  return theme('table', $header, $rows);
 }
 
 // Get node *body* output (filtered and with module-specific fields). Modified from node_update_index()
@@ -148,4 +120,4 @@ function diff_node_render($node) {
   return $node->body;
 }
 
-?>
+?>
\ No newline at end of file
