(keys %{$IkiWiki::typedlinks{$event}{tag}}));
@tags
= map {
- my $tag = $_;
+ my $besttag = bestlink($params{page}, $_);
+ my $tag = (length $besttag > 0 ? $besttag : $_);
my $title
= exists $pagestate{$tag}{meta}{title}
? $pagestate{$tag}{meta}{title}
= htmllink
( $params{page}
, $params{destpage}
- , '/'.$tag
+ , (length $besttag == 0 and defined $config{tag_new} ? $config{tag_new} : '').'/'.$tag
, linktext => $title
, noimageinline => 1
, title => $title );
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) = @_;
? $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'));