summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2010-05-08 12:45:21 -0400
committerJoey Hess <joey@kitenet.net>2010-05-08 12:45:21 -0400
commit0f778849c6df237f2219de6e1fa237cf2bc9955f (patch)
tree52d489aff59f212394de02960a5842b6458cda3f
parentf0914b386b026035d0055812a43dbd4a6ae528f7 (diff)
calendar: Allow negative month to be specified. -1 is last month, etc. (And also negaitve years.)
-rw-r--r--IkiWiki/Plugin/calendar.pm27
-rw-r--r--debian/changelog2
-rw-r--r--doc/ikiwiki/directive/calendar.mdwn6
-rw-r--r--doc/plugins/calendar/discussion.mdwn11
4 files changed, 38 insertions, 8 deletions
diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
index aeb5f3d29..02f41070e 100644
--- a/IkiWiki/Plugin/calendar.pm
+++ b/IkiWiki/Plugin/calendar.pm
@@ -386,8 +386,19 @@ sub preprocess (@) {
$params{year} = $thisyear unless defined $params{year};
$params{month} = $thismonth unless defined $params{month};
+ my $relativemonth=0;
+ if ($params{month} < 1) {
+ $params{month}=$thismonth+$params{month};
+ $relativemonth=1;
+ }
+ my $relativeyear=0;
+ if ($params{year} < 1) {
+ $params{year}=$thisyear+$params{year};
+ $relativeyear=1;
+ }
+
$params{month} = sprintf("%02d", $params{month});
-
+
if ($params{type} eq 'month' && $params{year} == $thisyear
&& $params{month} == $thismonth) {
# calendar for current month, updates next midnight
@@ -404,8 +415,11 @@ sub preprocess (@) {
$pagestate{$params{destpage}}{calendar}{nextchange}=
timelocal(0, 0, 0, 1, $params{month}-1, $params{year});
}
- elsif ($params{type} eq 'year' && $params{year} == $thisyear) {
- # calendar for current year, updates 1st of next month
+ elsif (($params{type} eq 'year' && $params{year} == $thisyear) ||
+ $relativemonth) {
+ # Calendar for current year updates 1st of next month.
+ # Any calendar relative to the current month also updates
+ # then.
if ($thismonth < 12) {
$pagestate{$params{destpage}}{calendar}{nextchange}=
timelocal(0, 0, 0, 1, $thismonth+1-1, $params{year});
@@ -415,6 +429,12 @@ sub preprocess (@) {
timelocal(0, 0, 0, 1, 1-1, $params{year}+1);
}
}
+ elsif ($relativeyear) {
+ # Any calendar relative to the current year updates 1st
+ # of next year.
+ $pagestate{$params{destpage}}{calendar}{nextchange}=
+ timelocal(0, 0, 0, 1, 1-1, $thisyear+1);
+ }
elsif ($params{type} eq 'year' && $params{year} > $thisyear) {
# calendar for upcoming year, updates 1st of that year
$pagestate{$params{destpage}}{calendar}{nextchange}=
@@ -426,7 +446,6 @@ sub preprocess (@) {
delete $pagestate{$params{destpage}}{calendar};
}
- # Calculate month names for next month, and previous months
my $calendar="";
if ($params{type} eq 'month') {
$calendar=format_month(%params);
diff --git a/debian/changelog b/debian/changelog
index f74e9929f..795f02822 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -26,6 +26,8 @@ ikiwiki (3.20100505) UNRELEASED; urgency=low
leave passwordauth enabled and let people who don't have an openid use it.
The openid selector form avoids the UI annoyance of having both openid
and passwordauth on one form.
+ * calendar: Allow negative month to be specified. -1 is last month, etc.
+ (And also negaitve years.)
-- Joey Hess <joeyh@debian.org> Wed, 05 May 2010 18:07:29 -0400
diff --git a/doc/ikiwiki/directive/calendar.mdwn b/doc/ikiwiki/directive/calendar.mdwn
index 198da9d51..e9216e11f 100644
--- a/doc/ikiwiki/directive/calendar.mdwn
+++ b/doc/ikiwiki/directive/calendar.mdwn
@@ -47,14 +47,14 @@ An example crontab:
"2010". These pages can be automatically created using the
`ikiwiki-calendar` program.
* `year` - The year for which the calendar is requested. Defaults to the
- current year.
+ current year. Can also use -1 to refer to last year, and so on.
* `month` - The numeric month for which the calendar is requested, in the
range 1..12. Used only for the month view calendar, and defaults to the
- current month.
+ current month. Can also use -1 to refer to last month, and so on.
* `week_start_day` - A number, in the range 0..6, which represents the day
of the week that the month calendar starts with. 0 is Sunday, 1 is Monday,
and so on. Defaults to 0, which is Sunday.
-* `months_per_row` - In the annual calendar, number of months to place in
+* `months_per_row` - In the year calendar, number of months to place in
each row. Defaults to 3.
[[!meta robots="noindex, follow"]]
diff --git a/doc/plugins/calendar/discussion.mdwn b/doc/plugins/calendar/discussion.mdwn
index 9d57b7a1e..bb76a9d8b 100644
--- a/doc/plugins/calendar/discussion.mdwn
+++ b/doc/plugins/calendar/discussion.mdwn
@@ -1,6 +1,15 @@
It would be nice if the "month" type calendar could collect all of the
matching pages on a given date in some inline type way. --[[DavidBremner]]
+> I agree, but I have not come up with good html to display them. Seems
+> it might need some sort of popup.
+
Is it possible to get the calendar to link to pages based not on their timestamp (as I understand that it does now, or have I misunderstood this?) and instead on for example their location in a directory hierarchy. That way the calendar could be used as a planning / timeline device which I think would be great. --[[Alexander]]
-I would like the ability to specify relative previous months. This way I could have a sidebar with the last three months by specifying no month, then 'month="-1"' and 'month="-2"'. Negative numbers for the month would otherwise be invalid, so this shouldn't produce any conflicts with expected behavior. (Right?) -- [[StevenBlack]]
+I would like the ability to specify relative previous months. This way I
+could have a sidebar with the last three months by specifying no month,
+then 'month="-1"' and 'month="-2"'. Negative numbers for the month would
+otherwise be invalid, so this shouldn't produce any conflicts with expected
+behavior. (Right?) -- [[StevenBlack]]
+
+> Great idea! Just implemented that and also relative years. --[[Joey]]