diff options
author | Joey Hess <joey@kitenet.net> | 2010-05-08 12:45:21 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-05-08 12:45:21 -0400 |
commit | 0f778849c6df237f2219de6e1fa237cf2bc9955f (patch) | |
tree | 52d489aff59f212394de02960a5842b6458cda3f | |
parent | f0914b386b026035d0055812a43dbd4a6ae528f7 (diff) |
calendar: Allow negative month to be specified. -1 is last month, etc. (And also negaitve years.)
-rw-r--r-- | IkiWiki/Plugin/calendar.pm | 27 | ||||
-rw-r--r-- | debian/changelog | 2 | ||||
-rw-r--r-- | doc/ikiwiki/directive/calendar.mdwn | 6 | ||||
-rw-r--r-- | doc/plugins/calendar/discussion.mdwn | 11 |
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]] |