fix preprocess focus
[ikiwiki/events.git] / events.pm
index 51c176d..e892d10 100644 (file)
--- 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->{hour}.'/'.IkiWiki::basename($a->{page}) cmp lc $b->{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'));