[[tag patch]] Here's a patch to the calendar plugin. If you specify an event preprocessor in a post, such as: [[event time="2008-06-24"]] That date will be used instead of the post creation time when displaying the calendar. > Thanks for coming up with a patch.. Let me make sure I understand its > rationalle. > > The meta plugin already allows modifying the page creation time, > which is what the calendar plugin uses. > > So, it seems to me that the use of this patch is for recording events in > the future. You'd not want a page for a future event to claim it was > created in the future. I suppose you could also use it for events in the > past, if you didn't want to change the creation time for some reason. > (Perhaps you're doing a calendar of historical events, for example.) > > Accurate? --[[Joey]] --- calendar.pm.orig 2008-06-24 22:36:09.000000000 -0400 +++ calendar.pm 2008-06-24 22:51:11.000000000 -0400 @@ -23,6 +23,7 @@ use IkiWiki 2.00; use Time::Local; use POSIX; +use Date::Parse; my %cache; my %linkcache; @@ -32,6 +33,7 @@ sub import { #{{{ hook(type => "needsbuild", id => "version", call => \&needsbuild); hook(type => "preprocess", id => "calendar", call => \&preprocess); + hook(type => "preprocess", id => "event", call => \&preprocess_event); } #}}} sub is_leap_year (@) { #{{{ @@ -304,6 +306,19 @@ return $calendar; } #}}} +sub preprocess_event (@) { #{{{ + my %params=@_; + # if now time is given, use now + $params{time} = localtime unless defined $params{time}; + + my $timestamp = str2time($params{time}); + if ( defined $timestamp) { + $pagestate{$params{page}}{event}{mtime}=$timestamp; + } + # remove the event block entirely + return ""; +} #}} + sub preprocess (@) { #{{{ my %params=@_; $params{pages} = "*" unless defined $params{pages}; @@ -355,7 +370,13 @@ if (! defined $cache{$pagespec}) { foreach my $p (keys %pagesources) { next unless pagespec_match($p, $pagespec); - my $mtime = $IkiWiki::pagectime{$p}; + my $mtime; + # use time defined by event preprocessor if it's available + if (defined $pagestate{$p}{event}{mtime}) { + $mtime = $pagestate{$p}{event}{mtime}; + } else { + $mtime = $IkiWiki::pagectime{$p}; + } my $src = $pagesources{$p}; my @date = localtime($mtime); my $mday = $date[3];