--- MoinMoin/action/rss_rc.py	2005-01-09 10:48:07.000000000 -0800
+++ MoinMoin/action/rss_rc.py	2005-06-25 06:43:55.000000000 -0700
@@ -43,6 +43,11 @@
         ddiffs = int(request.form.get('ddiffs', [0])[0])
     except ValueError:
         ddiffs = 0
+    ## Sitewide versus local changes by Travis Snoozy <ai2097@yahoo.com>, 2005-06-25
+    try:
+        sitewide = int(request.form.get('sitewide', [0])[0])
+    except ValueError:
+        sitewide = 0
 
     # prepare output
     out = StringIO.StringIO()
@@ -63,7 +68,8 @@
         if not request.user.may.read(line.pagename):
             continue
         if ((line.action[:4] != 'SAVE') or
-            ((line.pagename in pages) and unique)): continue
+            ((line.pagename in pages) and unique) or
+            (not sitewide and line.pagename != pagename)): continue
         #if log.dayChanged() and log.daycount > _MAX_DAYS: break
         line.editor = line.getEditorData(request)[1]
         line.time = util.datetime.tmtuple(wikiutil.version2timestamp(line.ed_time_usecs)) # UTC
@@ -87,17 +93,32 @@
         '    Add "diffs=1" to add change diffs to the description of each items.\n'
         '    \n'
         '    Add "ddiffs=1" to link directly to the diff (good for FeedReader).\n'
-        '    Current settings: items=%i, unique=%i, diffs=%i, ddiffs=%i'
-        '-->\n' % (items_limit, max_items, unique, diffs, ddiffs)
+        '    \n'
+        '    Add "sitewide=1" to get a site-wide feed; otherwise, only differences\n' 
+        '    for the identified page will be shown.\n'
+        '    \n'
+        '    Current settings: items=%i, unique=%i, diffs=%i, ddiffs=%i, sitewide=%i'
+        '-->\n' % (items_limit, max_items, unique, diffs, ddiffs, sitewide)
         )
 
     # emit channel description
-    handler.startNode('channel', {
-        (handler.xmlns['rdf'], 'about'): request.getBaseURL(),
-        })
-    handler.simpleNode('title', cfg.sitename)
-    handler.simpleNode('link', interwiki + wikiutil.quoteWikinameURL(pagename))
-    handler.simpleNode('description', 'RecentChanges at %s' % cfg.sitename)
+    if sitewide:
+        # Site-wide feed
+        handler.startNode('channel', {
+            (handler.xmlns['rdf'], 'about'): request.getBaseURL(),
+            })
+        handler.simpleNode('title', cfg.sitename)
+        handler.simpleNode('link', request.getBaseURL())
+        handler.simpleNode('description', 'RecentChanges at %s' % cfg.sitename)
+    else:
+        # Page-specific feed
+        handler.startNode('channel', {
+            (handler.xmlns['rdf'], 'about'): request.getBaseURL() + request.getPathinfo(),
+            })
+        handler.simpleNode('title', cfg.sitename + " " + pagename)
+        handler.simpleNode('link', interwiki + wikiutil.quoteWikinameURL(pagename))
+        handler.simpleNode('description', 'RecentChanges to %s at %s' % (pagename, cfg.sitename))
+
     if logo:
         handler.simpleNode('image', None, {
             (handler.xmlns['rdf'], 'resource'): logo,
@@ -139,7 +160,7 @@
         # general attributes
         handler.simpleNode('title', item.pagename)
         if ddiffs:
-            handler.simpleNode('link', link+"?action=diff")
+            handler.simpleNode('link', link+"?action=diff&amp;rev1="+str(int(item.rev)-1)+"&amp;rev2="+str(int(item.rev)))
         else:
             handler.simpleNode('link', link)
             
@@ -148,19 +169,7 @@
         # description
         desc_text = item.comment
         if diffs:
-            # TODO: rewrite / extend wikiutil.pagediff
-            # searching for the matching pages doesn't really belong here
-            revisions = page.getRevList()
-
-            rl = len(revisions)
-            for idx in range(rl):
-                rev = revisions[idx]
-                if rev <= item.rev:
-                    if idx+1 < rl:
-                        lines = wikiutil.pagediff(request, item.pagename, revisions[idx+1], item.pagename, 0, ignorews=1)
-                        if len(lines) > 20: lines = lines[:20] + ['...\n']
-                        desc_text = '%s\n<pre>\n%s\n</pre>\n' % (desc_text, '\n'.join(lines))
-                    break
+            desc_text = '%s\n<pre>\n%s\n</pre>\n' % (desc_text, '\n'.join(wikiutil.pagediff(request, item.pagename, (int(item.rev)-1), item.pagename, int(item.rev), ignorews=1)))
         if desc_text:
             handler.simpleNode('description', desc_text)
 
