added configuration for recentchanges
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 29 Jan 2008 20:51:32 +0000 (15:51 -0500)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 29 Jan 2008 20:51:32 +0000 (15:51 -0500)
I kept it to a simple global configuration, rather than using the
preprocessor directive for recentchanges, because that had chicken and egg
problems and seemed overcomplicated. This should work reasonably well,
though it would be good to add some more metadata so that more customised
recentchanges pages can be made.

IkiWiki/Plugin/recentchanges.pm
IkiWiki/Render.pm
doc/cgi.mdwn
doc/ikiwiki.setup
doc/plugins/recentchanges.mdwn
doc/recentchanges.mdwn
doc/usage.mdwn
docwiki.setup
po/ikiwiki.pot
t/pagespec_match.t

index 8f707afc4dba3dfd099369f0de8696249d89642a..f5982604bd7c091a8604700663062b36b3d5973c 100644 (file)
@@ -6,25 +6,30 @@ use strict;
 use IkiWiki 2.00;
 
 sub import { #{{{
-       hook(type => "refresh", id => "recentchanges",
-               call => \&refresh);
-       hook(type => "preprocess", id => "recentchanges",
-               call => \&preprocess);
-       hook(type => "htmlize", id => "_change",
-               call => \&htmlize);
+       hook(type => "checkconfig", id => "recentchanges", call => \&checkconfig);
+       hook(type => "refresh", id => "recentchanges", call => \&refresh);
+       hook(type => "htmlize", id => "_change", call => \&htmlize);
 } #}}}
 
-sub refresh ($) { #{{{
-       my @changes=IkiWiki::rcs_recentchanges(100);
-       updatechanges("*", "recentchanges", \@changes);
+sub checkconfig () { #{{{
+       $config{recentchangespage}='recentchanges' unless defined $config{recentchangespage};
+       $config{recentchangesnum}=100 unless defined $config{recentchangesnum};
 } #}}}
 
-sub preprocess (@) { #{{{
-       my %params=@_;
-
-       # TODO
+sub refresh ($) { #{{{
+       my %seen;
 
-       return "";
+       # add new changes
+       foreach my $change (IkiWiki::rcs_recentchanges($config{recentchangesnum})) {
+               $seen{store($change, $config{recentchangespage})}=1;
+       }
+       
+       # delete old and excess changes
+       foreach my $page (keys %pagesources) {
+               if ($page=~/^\Q$config{recentchangespage}\E\/change_/ && ! $seen{$page}) {
+                       unlink($config{srcdir}.'/'.$pagesources{$page});
+               }
+       }
 } #}}}
 
 # Pages with extension _change have plain html markup, pass through.
@@ -33,11 +38,10 @@ sub htmlize (@) { #{{{
        return $params{content};
 } #}}}
 
-sub store ($$) { #{{{
+sub store ($$$) { #{{{
        my $change=shift;
-       my $subdir=shift;
-       
-       my $page="$subdir/change_".IkiWiki::titlepage($change->{rev});
+
+       my $page="$config{recentchangespage}/change_".IkiWiki::titlepage($change->{rev});
 
        # Optimisation to avoid re-writing pages. Assumes commits never
        # change (or that any changes are not important).
@@ -102,23 +106,9 @@ sub store ($$) { #{{{
 } #}}}
 
 sub updatechanges ($$) { #{{{
-       my $pagespec=shift;
        my $subdir=shift;
        my @changes=@{shift()};
        
-       my %seen;
-
-       # add new changes
-       foreach my $change (@changes) {
-               $seen{store($change, $subdir)}=1;
-       }
-       
-       # delete old and excess changes
-       foreach my $page (keys %pagesources) {
-               if ($page=~/^\Q$subdir\E\/change_/ && ! $seen{$page}) {
-                       unlink($config{srcdir}.'/'.$pagesources{$page});
-               }
-       }
 } #}}}
 
 1
index b5b461499d1a1f9324d1c9a68c9644f72f246eca..ed359bdd77f9dccc1f034cfaca3878ad938f0063 100644 (file)
@@ -85,8 +85,8 @@ sub genpage ($$) { #{{{
                $actions++;
        }
                
-       if ($config{rcs}) {
-               $template->param(recentchangesurl => urlto("recentchanges", $page));
+       if ($config{rcs} && exists $config{recentchangespage}) {
+               $template->param(recentchangesurl => urlto($config{recentchangespage}, $page));
                $actions++;
        }
 
index 22d8c43320ae8a015cfbf4daeb8166bec3564993..1448fa4d57855d4e89fe26d1cd9840c9d3a10deb 100644 (file)
@@ -1,3 +1,5 @@
-While ikiwiki is primarily a wiki compiler, which generates static html pages, it does use CGI for two important wiki features, online page editing and the [[RecentChanges]] display.
+While ikiwiki is primarily a wiki compiler, which generates static html
+pages, it does use CGI for online page editing.
 
-To enable CGI, you need to create and install an ikiwiki.cgi wrapper. [[Setup]] explains how to do this.
\ No newline at end of file
+To enable CGI, you need to create and install an ikiwiki.cgi wrapper.
+[[Setup]] explains how to do this.
index af27f1d7eb06631a06c4cb5c7583be23abc2b829..9bf54298199d130dc3187c97c784df20c7e45e6e 100644 (file)
@@ -115,6 +115,9 @@ use IkiWiki::Setup::Standard {
        #account_creation_password => "example",
        # Uncomment to force ikiwiki to run with a particular umask.
        #umask => 022,
+       # Default settings for the recentchanges page.
+       #recentchangespage => "recentchanges",
+       #recentchangesnum => 100,
 
        # To add plugins, list them here.
        #add_plugins => [qw{goodstuff search wikitext camelcase
index 69073adf08d21851811c3d6928da4a647573239e..8647985c9aeb01cb2d62267ea1d4e2f21331a2b6 100644 (file)
@@ -5,12 +5,8 @@ generates a page describing each recent change made to the wiki. These
 pages can be joined together with [[inline]] to generate the
 [[RecentChanges]] page.
 
-Typically only the RecentChanges page will use the plugin, but you can
-use it elsewhere too if you like. It's used like this:
+Typically only the RecentChanges page will use the pages generated by this
+plugin, but you can use it elsewhere too if you like. It's used like this:
 
-       \[[recentchanges pages="*" num=100 template=change]]
        \[[inline pages="internal(recentchanges/change_*)"
        template=recentchanges show=0]]
-
-The pages describing recent changes will be created as [[subpages|subpage]]
-of the page where the `recentchanges` directive is placed.
index d702b0f3416c01d186cddc3c06d02983f8fe6744..2dd2185207cf77127bc9899bfba42511c3daf402 100644 (file)
@@ -1,5 +1,4 @@
 Recent changes to this wiki:
 
-[[recentchanges pages="*" num=100 template=change]]
 [[inline pages="internal(recentchanges/change_*) and !*/Discussion" 
 template=recentchanges show=0]]
index 354e266f1d4c31a3c34c45ea7a8a13f9e3ceabbe..f34d5bad653ba4119ca968d71a77a19be8dafbd3 100644 (file)
@@ -33,8 +33,7 @@ These options control the mode that ikiwiki operates in.
 * --cgi
 
   Enable [[CGI]] mode. In cgi mode ikiwiki runs as a cgi script, and
-  supports editing pages, signing in, registration, and displaying
-  [[RecentChanges]].
+  supports editing pages, signing in, and registration.
 
   To use ikiwiki as a [[CGI]] program you need to use --wrapper or --setup
   to generate a wrapper. The wrapper will generally need to run suid 6755 to
@@ -141,8 +140,7 @@ configuration options of their own.
   whatever the revision control system you select uses.
 
   In [[CGI]] mode, with a revision control system enabled, pages edited via
-  the web will be committed. Also, the [[RecentChanges]] link will be placed
-  on pages.
+  the web will be committed.
 
   No revision control is enabled by default.
 
index 5793d87bf7f3f53d6b9b3cb67cd6e97e0301b54f..e8f680a207869b5e14ba2422e9549dc5482d9fb5 100644 (file)
@@ -15,10 +15,6 @@ use IkiWiki::Setup::Standard {
        syslog => 0,
        userdir => "users",
        usedirs => 0,
-       rcs => 'git',
-       rss => 1,
-       cgiurl => "http://ikiwiki.info/ikiwiki.cgi",
-       url => "http://ikiwiki.info",
-       add_plugins => [qw{goodstuff version haiku polygen fortune
-               recentchanges }],
+       add_plugins => [qw{goodstuff version haiku polygen fortune}],
+       disable_plugins => [qw{recentchanges}],
 }
index 98882d535d068135ab89a50d339ee3d44ca69bb2..4e43f5da95accdc4ae4be1c5b9bd0f73f16ebfc5 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-01-29 15:21-0500\n"
+"POT-Creation-Date: 2008-01-29 15:46-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
index 3a641c6a8b13bbf54365819e63240e24b41971b5..cb98ab1498adc387a443ea8e25c3bc6a846d5553 100755 (executable)
@@ -67,9 +67,6 @@ ok(! pagespec_match("foo", "creation_day(3)"), "other day");
 
 ok(! pagespec_match("foo", "no_such_function(foo)"), "foo");
 
-ok(pagespec_match("foo", "foo and user(bar)", user => "bar"), "user");
-ok(! pagespec_match("foo", "foo and user(bar)", user => "baz"), "user fail");
-
 my $ret=pagespec_match("foo", "(invalid");
 ok(! $ret, "syntax error");
 ok($ret eq "syntax error", "error message");