X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=events.pm;h=6cc233cf73a440da8369ea0dd8babb5a7127a94a;hb=90ffea3e1048f6f75c9342c8469130ce525f2118;hp=e892d10c1548ad2bfa8d19e8aa665a0b8641f6cf;hpb=d0d09f26ee4f7303bd4fc80003f2233ea5549f22;p=ikiwiki%2Fevents.git diff --git a/events.pm b/events.pm index e892d10..6cc233c 100644 --- a/events.pm +++ b/events.pm @@ -202,7 +202,9 @@ sub event_of_page ($%) { (keys %{$IkiWiki::typedlinks{$event}{tag}})); @tags = map { - my $tag = $_; + my $tag_best = bestlink($params{page}, $_); + $tag_best = (length $tag_best > 0 ? $tag_best : bestlink($event, $_)); + my $tag = (length $tag_best > 0 ? $tag_best : $_); my $title = exists $pagestate{$tag}{meta}{title} ? $pagestate{$tag}{meta}{title} @@ -211,7 +213,7 @@ sub event_of_page ($%) { = htmllink ( $params{page} , $params{destpage} - , '/'.$tag + , $tag , linktext => $title , noimageinline => 1 , title => $title ); @@ -288,7 +290,7 @@ sub event_html ($$%) { , $date->year() ); add_depends($params{page}, $year_page, deptype("presence")); - if ($pagesources{$year_page}) { + if (exists $pagesources{$year_page}) { $year_html = htmllink ( $params{page} @@ -307,7 +309,7 @@ sub event_html ($$%) { , $date->month() ); add_depends($params{page}, $month_page, deptype("presence")); - if ($pagesources{$month_page}) { + if (exists $pagesources{$month_page}) { $month_html = htmllink ( $params{page} @@ -327,7 +329,7 @@ sub event_html ($$%) { , $date->day() ); add_depends($params{page}, $day_page, deptype("presence")); - if ($pagesources{$day_page}) { + if (exists $pagesources{$day_page}) { $day_html = htmllink ( $params{page} @@ -517,22 +519,35 @@ sub preprocess (@) { : gettext('Agenda'); } - my %focus_set; - if (defined $params{day} and $params{day} =~ m/^(\d+)$/) { - my ($day) = ($1); - $focus_set{day} = $day; + my %focus_set = + ( day => $params{focus}->day() + , month => $params{focus}->month() + , year => $params{focus}->year() + ); + if (defined $params{year} and $params{year} =~ m/^(\d+)$/) { + my ($year) = ($1); + $focus_set{year} = $year; } - if (defined $params{month} and $params{month} =~ m/^(\d+)$/) { + if (defined $params{month} and $params{month} =~ m/^(\d+)$/ and ($params{type} eq 'month' or $params{type} eq 'day')) { my ($month) = ($1); $focus_set{month} = $month; } - if (defined $params{year} and $params{year} =~ m/^(\d+)$/) { - my ($year) = ($1); - $focus_set{year} = $year; + if (defined $params{day} and $params{day} =~ m/^(\d+)$/ and $params{type} eq 'day') { + my ($day) = ($1); + $focus_set{day} = $day; + } + if (not defined $focus_set{day}) { + $focus_set{day} = 1; + } + else { + my $month = DateTime->new(year => $focus_set{year}, month => $focus_set{month}, day => 1); + my $last_day_of_month = $month->add(months => 1)->subtract(days => 1)->day(); + $focus_set{day} = $last_day_of_month + if $focus_set{day} > $last_day_of_month; } $params{focus}->set(%focus_set); - if (defined $params{day} and $params{day} =~ m/^([+-])(\d+)$/) { + if (defined $params{day} and $params{day} =~ m/^([+-])(\d+)$/ and $params{type} eq 'day') { my ($sign, $days) = ($1, $2); my $duration = DateTime::Duration->new(days => $days, end_of_month => 'limit'); $params{focus} @@ -540,7 +555,7 @@ sub preprocess (@) { ? $params{focus}->add_duration($duration) : $params{focus}->subtract_duration($duration); } - if (defined $params{month} and $params{month} =~ m/^([+-])(\d+)$/) { + if (defined $params{month} and $params{month} =~ m/^([+-])(\d+)$/ and ($params{type} eq 'month' or $params{type} eq 'day')) { my ($sign, $months) = ($1, $2); my $duration = DateTime::Duration->new(months => $months, end_of_month => 'limit'); $params{focus}