web commit by https://id.mayfirst.org/jamie/: woops - forgot the patch

master
Joey Hess 2008-06-30 15:34:13 -04:00
parent 6cc12f559a
commit ed88d219d7
1 changed files with 177 additions and 1 deletions

View File

@ -29,4 +29,180 @@ Longer term plans:
* Convincing the world to switch to base 10 calendar system.
--- calendar.pm.orig 2008-06-24 22:36:09.000000000 -0400
+++ calendar.pm 2008-06-28 22:02:15.000000000 -0400
@@ -23,6 +23,8 @@
use IkiWiki 2.00;
use Time::Local;
use POSIX;
+use Date::Parse;
+use Data::Dumper;
my %cache;
my %linkcache;
@@ -32,6 +34,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 (@) { #{{{
@@ -58,6 +61,7 @@
my $nmonth = $params{nmonth};
my $pyear = $params{pyear};
my $nyear = $params{nyear};
+ my $detail = $params{detail};
my @list;
my $calendar="\n";
@@ -153,33 +157,58 @@
}
my $tag;
+ my $display_day;
my $mtag = sprintf("%02d", $month);
- if (defined $cache{$pagespec}{"$year/$mtag/$day"}) {
- if ($day == $today) {
+ if ($day == $today) {
$tag='month-calendar-day-this-day';
- }
- else {
- $tag='month-calendar-day-link';
- }
- $calendar.=qq{\t\t<td class="$tag $downame{$wday}">};
- $calendar.=htmllink($params{page}, $params{destpage},
- pagename($linkcache{"$year/$mtag/$day"}),
- "linktext" => "$day");
- push @list, pagename($linkcache{"$year/$mtag/$day"});
- $calendar.=qq{</td>\n};
+ }
+ elsif ($day >= $future_dom) {
+ $tag='month-calendar-day-future';
+ }
+ elsif($params{detail} == 0 &&
+ !defined $cache{$pagespec}{"$year/$mtag/$day"}) {
+ $tag='month-calendar-day-nolink';
+ }
+ elsif($params{detail} == 0 &&
+ defined $cache{$pagespec}{"$year/$mtag/$day"}) {
+ $tag='month-calendar-day-link';
}
else {
- if ($day == $today) {
- $tag='month-calendar-day-this-day';
- }
- elsif ($day == $future_dom) {
- $tag='month-calendar-day-future';
+ $tag='month-calendar-day';
+ }
+
+ $calendar.=qq{\t\t<td class="$tag $downame{$wday}">};
+ my $day_label = qq{<span class="month-calendar-day-label">$day</span>};
+ if (defined $cache{$pagespec}{"$year/$mtag/$day"}) {
+ my $srcpage; my $destpage;
+ if($params{detail} == 0) {
+ # pull off the first page
+ (($srcpage,$destpage) = each(%{$linkcache{"$year/$mtag/$day"}}));
+ $calendar.=htmllink($params{page}, $params{destpage},
+ pagename($destpage),
+ "linktext" => "$day_label");
+ push @list, pagename($linkcache{"$year/$mtag/$day"});
}
else {
- $tag='month-calendar-day-nolink';
+ $calendar.=qq{$day_label\n};
+ while(($srcpage,$destpage) = each(%{$linkcache{"$year/$mtag/$day"}})) {
+ my $title = IkiWiki::basename(pagename($srcpage));
+ if (exists $pagestate{$srcpage}{meta}{title} ) {
+ $title = $pagestate{$srcpage}{meta}{title};
+ }
+ $calendar.=qq{\t\t<div class="$tag $downame{$wday}">};
+ $calendar.=htmllink($params{page}, $params{destpage},
+ pagename($destpage),
+ "linktext" => $title);
+ push @list, pagename($linkcache{"$year/$mtag/$day"}{"$srcpage"});
+ $calendar.=qq{\t\t</div>};
+ }
}
- $calendar.=qq{\t\t<td class="$tag $downame{$wday}">$day</td>\n};
}
+ else {
+ $calendar.=qq{$day_label\n};
+ }
+ $calendar.=qq{</td>\n};
}
# finish off the week
@@ -304,6 +333,18 @@
return $calendar;
} #}}}
+sub preprocess_event (@) { #{{{
+ my %params=@_;
+ # if now time is given, use now
+ $params{begin} = localtime($time) unless defined $params{begin};
+
+ my $timestamp = str2time($params{begin});
+ if ( defined $timestamp) {
+ $pagestate{$params{page}}{event}{begin}=$timestamp;
+ }
+ return "<!-- $params{begin} -->";
+} #}}
+
sub preprocess (@) { #{{{
my %params=@_;
$params{pages} = "*" unless defined $params{pages};
@@ -311,6 +352,8 @@
$params{month} = sprintf("%02d", $params{month}) if 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{time_src} = 'auto' unless defined $params{time_src};
+ $params{detail} = 0 unless defined $params{detail};
if (! defined $params{year} || ! defined $params{month}) {
# Record that the calendar next changes at midnight.
@@ -355,19 +398,29 @@
if (! defined $cache{$pagespec}) {
foreach my $p (keys %pagesources) {
next unless pagespec_match($p, $pagespec);
- my $mtime = $IkiWiki::pagectime{$p};
- my $src = $pagesources{$p};
- my @date = localtime($mtime);
- my $mday = $date[3];
- my $month = $date[4] + 1;
- my $year = $date[5] + 1900;
- my $mtag = sprintf("%02d", $month);
-
- # Only one posting per day is being linked to.
- $linkcache{"$year/$mtag/$mday"} = "$src";
- $cache{$pagespec}{"$year"}++;
- $cache{$pagespec}{"$year/$mtag"}++;
- $cache{$pagespec}{"$year/$mtag/$mday"}++;
+ my $begin = '';
+ # use time defined by event preprocessor if it's available
+ if (defined $pagestate{$p}{event}{begin}) {
+ $begin = $pagestate{$p}{event}{begin};
+ # fall back on ctime if time_src is set to auto
+ # set time_src to 'event' to skip posts that don't
+ # have the event preprocessor
+ } elsif ($params{time_src} eq 'auto') {
+ $begin = $IkiWiki::pagectime{$p};
+ }
+ if($begin ne '') {
+ my $dest = $pagesources{$p};
+ my @date = localtime($begin);
+ my $mday = $date[3];
+ my $month = $date[4] + 1;
+ my $year = $date[5] + 1900;
+ my $mtag = sprintf("%02d", $month);
+
+ $linkcache{"$year/$mtag/$mday"}{$p} = "$dest";
+ $cache{$pagespec}{"$year"}++;
+ $cache{$pagespec}{"$year/$mtag"}++;
+ $cache{$pagespec}{"$year/$mtag/$mday"}++;
+ }
}
}