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.
my %cache;
my %linkcache;
my %cache;
my %linkcache;
+my $time=time;
+my @now=localtime($time);
+ hook(type => "needsbuild", id => "version", call => \&needsbuild);
hook(type => "preprocess", id => "calendar", call => \&preprocess);
} #}}}
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));
sub is_leap_year (@) { #{{{
my %params=@_;
return ($params{year} % 4 == 0 && (($params{year} % 100 != 0) || $params{year} % 400 == 0));
my %params=@_;
$params{pages} = "*" unless defined $params{pages};
$params{type} = "month" unless defined $params{type};
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} = 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};
$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;
# Calculate month names for next month, and previous months
my $pmonth = $params{month} - 1;
my $nmonth = $params{month} + 1;
$calendar=format_year(%params);
}
$calendar=format_year(%params);
}
- return "\n<div class=\"calendar\">$calendar</div><!-- calendar -->\n";
+ return "\n<div><div class=\"calendar\">$calendar</div></div>\n";
Redirection pages have been left behind for these moved pages temporarily,
and will be removed later.
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
-- Joey Hess <joeyh@debian.org> Sat, 08 Dec 2007 16:04:43 -0500
ikiwiki (2.14) unstable; 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.
* 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
-- Joey Hess <joeyh@debian.org> Mon, 03 Dec 2007 14:47:36 -0500
[[template id=plugin name=calendar author="[[ManojSrivastava]]"]]
[[tag type/chrome]]
[[template id=plugin name=calendar author="[[ManojSrivastava]]"]]
[[tag type/chrome]]
This plugin displays a calendar, similar to the typical calendars shown on
some blogs.
This plugin displays a calendar, similar to the typical calendars shown on
some blogs.
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.
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
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
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
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"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"