X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=events.pm;h=e892d10c1548ad2bfa8d19e8aa665a0b8641f6cf;hb=d0d09f26ee4f7303bd4fc80003f2233ea5549f22;hp=2999b1e1fb5f04b18fc710703b3b6163ea4beca1;hpb=12803711b67b13707d6c0f79eddca5cb6bbdaa68;p=ikiwiki%2Fevents.git diff --git a/events.pm b/events.pm index 2999b1e..e892d10 100644 --- a/events.pm +++ b/events.pm @@ -250,7 +250,11 @@ sub events_of_pages ($%) { return map {event_of_page($_->{page}, $_->{date}, %params)} ( (sort {lc IkiWiki::basename($a->{page}) cmp lc IkiWiki::basename($b->{page})} @day_events) - , (sort {lc $a->{date}->{hour}.'/'.IkiWiki::basename($a->{page}) cmp lc $b->{date}->{hour}.'/'.IkiWiki::basename($b->{page})} @hour_events) ); + , (sort { + my $r = $a->{date}->{hour} cmp $b->{date}->{hour}; + if ($r) { $r } + else { IkiWiki::basename($a->{page}) cmp IkiWiki::basename($b->{page}) } + } @hour_events) ); } sub event_html ($$%) { my ($date, $format, %params) = @_; @@ -512,47 +516,45 @@ sub preprocess (@) { ? $config{events_base} : gettext('Agenda'); } - if (defined $params{day}) { - if ($params{day} =~ m/^([+-])(\d+)$/) { - my ($sign, $days) = ($1, $2); - my $duration = DateTime::Duration->new(days => $days, end_of_month => 'limit'); - $params{focus} - = $sign eq '+' - ? $params{focus}->add_duration($duration) - : $params{focus}->subtract_duration($duration); - } - else { - $params{focus}->set(day => $params{day}); - } + + my %focus_set; + if (defined $params{day} and $params{day} =~ m/^(\d+)$/) { + my ($day) = ($1); + $focus_set{day} = $day; } - else { - #$params{focus}->set(day => 1); + if (defined $params{month} and $params{month} =~ m/^(\d+)$/) { + my ($month) = ($1); + $focus_set{month} = $month; } - if (defined $params{month}) { - if ($params{month} =~ m/^([+-])(\d+)$/) { - my ($sign, $months) = ($1, $2); - my $duration = DateTime::Duration->new(months => $months, end_of_month => 'limit'); - $params{focus} - = $sign eq '+' - ? $params{focus}->add_duration($duration) - : $params{focus}->subtract_duration($duration); - } - else { - $params{focus}->set(month => $params{month}); - } + if (defined $params{year} and $params{year} =~ m/^(\d+)$/) { + my ($year) = ($1); + $focus_set{year} = $year; } - if (defined $params{year}) { - if ($params{year} =~ m/^([+-])(\d+)$/) { - my ($sign, $years) = ($1, $2); - my $duration = DateTime::Duration->new(years => $years, end_of_month => 'limit'); - $params{focus} - = $sign eq '+' - ? $params{focus}->add_duration($duration) - : $params{focus}->subtract_duration($duration); - } - else { - $params{focus}->set(year => $params{year}); - } + $params{focus}->set(%focus_set); + + if (defined $params{day} and $params{day} =~ m/^([+-])(\d+)$/) { + my ($sign, $days) = ($1, $2); + my $duration = DateTime::Duration->new(days => $days, end_of_month => 'limit'); + $params{focus} + = $sign eq '+' + ? $params{focus}->add_duration($duration) + : $params{focus}->subtract_duration($duration); + } + if (defined $params{month} and $params{month} =~ m/^([+-])(\d+)$/) { + my ($sign, $months) = ($1, $2); + my $duration = DateTime::Duration->new(months => $months, end_of_month => 'limit'); + $params{focus} + = $sign eq '+' + ? $params{focus}->add_duration($duration) + : $params{focus}->subtract_duration($duration); + } + if (defined $params{year} and $params{year} =~ m/^([+-])(\d+)$/) { + my ($sign, $years) = ($1, $2); + my $duration = DateTime::Duration->new(years => $years, end_of_month => 'limit'); + $params{focus} + = $sign eq '+' + ? $params{focus}->add_duration($duration) + : $params{focus}->subtract_duration($duration); } #debug("events: focus=".$params{focus}->strftime('%Y-%m-%d_%H-%M-%S'));