* The calendar plugin stores state about when it needs to be updated,

and forces rebuilds of the pages that contain calendars. So
  running ikiwiki --refresh at midnight is now enough, no need for a full
  wiki rebuild each midnight.
* calendar: Work around block html parsing bug in markdown 1.0.1 by
  enclosing the calendar in an extra div.
master
Joey Hess 2007-12-08 23:54:34 -05:00
parent fa90bdf4bf
commit 5023f2301d
5 changed files with 57 additions and 9 deletions

View File

@ -26,12 +26,33 @@ use POSIX;
my %cache;
my %linkcache;
my @now=localtime();
my $time=time;
my @now=localtime($time);
sub import { #{{{
hook(type => "needsbuild", id => "version", call => \&needsbuild);
hook(type => "preprocess", id => "calendar", call => \&preprocess);
} #}}}
sub needsbuild (@) { #{{{
my $needsbuild=shift;
foreach my $page (keys %pagestate) {
if (exists $pagestate{$page}{calendar}{nextchange}) {
if ($pagestate{$page}{calendar}{nextchange} >= $time) {
# force a rebuild so the calendar shows
# the current day
push @$needsbuild, $pagesources{$page};
}
if (grep { $_ eq $pagesources{$page} } @$needsbuild) {
# remove state, will be re-added if
# the calendar is still there during the
# rebuild
delete $pagestate{$page}{calendar};
}
}
}
} # }}}
sub is_leap_year (@) { #{{{
my %params=@_;
return ($params{year} % 4 == 0 && (($params{year} % 100 != 0) || $params{year} % 400 == 0));
@ -306,12 +327,25 @@ sub preprocess (@) { #{{{
my %params=@_;
$params{pages} = "*" unless defined $params{pages};
$params{type} = "month" unless defined $params{type};
$params{year} = 1900 + $now[5] unless defined $params{year};
$params{month} = sprintf("%02d", $params{month}) if defined $params{month};
$params{month} = 1 + $now[4] unless defined $params{month};
$params{week_start_day} = 0 unless defined $params{week_start_day};
$params{months_per_row} = 3 unless defined $params{months_per_row};
if (! defined $params{year} || ! defined $params{month}) {
# Record that the calendar next changes at midnight.
$pagestate{$params{destpage}}{calendar}{nextchange}=($time
+ (60 - $now[0]) # seconds
+ (59 - $now[1]) * 60 # minutes
+ (23 - $now[2]) * 60 * 60 # hours
);
$params{year} = 1900 + $now[5] unless defined $params{year};
$params{month} = 1 + $now[4] unless defined $params{month};
}
else {
delete $pagestate{$params{destpage}}{calendar};
}
# Calculate month names for next month, and previous months
my $pmonth = $params{month} - 1;
my $nmonth = $params{month} + 1;
@ -363,7 +397,7 @@ sub preprocess (@) { #{{{
$calendar=format_year(%params);
}
return "\n<div class=\"calendar\">$calendar</div><!-- calendar -->\n";
return "\n<div><div class=\"calendar\">$calendar</div></div>\n";
} #}}
1

5
debian/NEWS vendored
View File

@ -5,6 +5,11 @@ ikiwiki (2.16) UNRELEASED; urgency=low
Redirection pages have been left behind for these moved pages temporarily,
and will be removed later.
If you use the calendar plugin, ikiwiki is now smarter and your nightly
cron job to update the wiki doesn't need to rebuild everything. Just pass
--refresh to ikiwiki in the cron job and it will update only pages that
contain out of date calendars.
-- Joey Hess <joeyh@debian.org> Sat, 08 Dec 2007 16:04:43 -0500
ikiwiki (2.14) unstable; urgency=low

6
debian/changelog vendored
View File

@ -11,6 +11,12 @@ ikiwiki (2.16) UNRELEASED; urgency=low
* Use pagestate in meta to detect potential redir loops.
* Added a version plugin that saves state about what's using it, to force
pages to rebuild when ikiwiki's version changes.
* The calendar plugin stores state about when it needs to be updated,
and forces rebuilds of the pages that contain calendars. So
running ikiwiki --refresh at midnight is now enough, no need for a full
wiki rebuild each midnight.
* calendar: Work around block html parsing bug in markdown 1.0.1 by
enclosing the calendar in an extra div.
-- Joey Hess <joeyh@debian.org> Mon, 03 Dec 2007 14:47:36 -0500

View File

@ -1,6 +1,8 @@
[[template id=plugin name=calendar author="[[ManojSrivastava]]"]]
[[tag type/chrome]]
[[calendar ]]
This plugin displays a calendar, similar to the typical calendars shown on
some blogs.
@ -17,10 +19,11 @@ derives no code from it. This plugin is essentially a fancy front end
to archives of previous pages, usually used for blogs. It can produce
a calendar for a given month, or a list of months for a given year.
The tricky part of this is that while calendar defaults to showing the
current day and month, ikiwiki is a wiki compiler, which only rebuilds
pages if they have changed. So to keep the calendar up-to-date, wikis that
include it need to be periodically rebuilt, typically by cron at midnight.
Since ikiwiki is a wiki compiler, to keep the calendar up-to-date,
wikis that include it need to be preiodically refreshes, typically by cron
at midnight. Example crontab:
0 0 * * * ikiwiki -setup ~/ikiwiki.setup -refresh
The month format calendar simply links to any page posted on each
day of the month. The year format calendar links to archive pages, with

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-12-08 19:38-0500\n"
"POT-Creation-Date: 2007-12-08 23:51-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"