X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=events.pm;h=2999b1e1fb5f04b18fc710703b3b6163ea4beca1;hb=12803711b67b13707d6c0f79eddca5cb6bbdaa68;hp=e06e2ce6723d49723682eabeaf580d331674d42c;hpb=3624b2511a8ff22fa7020a48437dfaf12605d9f0;p=ikiwiki%2Fevents.git diff --git a/events.pm b/events.pm index e06e2ce..2999b1e 100644 --- a/events.pm +++ b/events.pm @@ -22,6 +22,7 @@ use warnings; use IkiWiki 3.00; use Time::Local; use DateTime; +use CGI::FormBuilder; #use Data::Dumper; sub import { @@ -154,11 +155,15 @@ sub date_of_page ($%) { my $dir = IkiWiki::dirname($page); my ($year, $month, $day, $hour, $hour_begin, $hour_end) = $dir =~ m{ - .*/ - (\d+)/ - (01|02|03|04|05|06|07|08|09|10|11|12)/ - (01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)/ - (([0-2][0-9]h[0-5][0-9])(-[0-2][0-9]h[0-5][0-9])?)? + .*? + /(\d+) + (?:/(01|02|03|04|05|06|07|08|09|10|11|12) + (?:/(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31) + (?:/(([0-2][0-9]h[0-5][0-9]) + (?:-([0-2][0-9]h[0-5][0-9]))?) + )? + )? + )? $ }x; my $r = @@ -173,13 +178,13 @@ sub date_of_page ($%) { return $r; } sub event_of_page ($%) { - my ($event, %params) = @_; + my ($event, $date, %params) = @_; my $title = exists $pagestate{$event}{meta}{title} ? $pagestate{$event}{meta}{title} : pagetitle(IkiWiki::basename($event)); my $hour - = date_of_page($event)->{hour}; + = $date->{hour}; my $link = htmllink ( $params{page} @@ -206,7 +211,7 @@ sub event_of_page ($%) { = htmllink ( $params{page} , $params{destpage} - , $tag + , '/'.$tag , linktext => $title , noimageinline => 1 , title => $title ); @@ -218,10 +223,15 @@ sub event_of_page ($%) { { class => "tag tag-$class" , link => $link } } @tags; + my $base = IkiWiki::dirname($event); + $base =~ s/[^a-zA-Z0-9-]/_/g; return { hour => $hour + , page => $event + , date => $date , link => $link - , tags => \@tags }; + , tags => \@tags + , base => $base }; } sub events_of_pages ($%) { my ($pages, %params) = @_; @@ -231,16 +241,16 @@ sub events_of_pages ($%) { foreach my $page (@$pages) { my $date = date_of_page($page); if (defined $date->{hour}) { - push @hour_events, $page; + push @hour_events, {page=>$page, date=>$date}; } else { - push @day_events, $page; + push @day_events, {page=>$page, date=>$date}; } } return - map {event_of_page($_, %params)} - ( (sort {lc $pagedir->($a) cmp lc $pagedir->($b)} @day_events) - , (sort {lc $pagedir->($a) cmp lc $pagedir->($b)} @hour_events) ); + 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) ); } sub event_html ($$%) { my ($date, $format, %params) = @_; @@ -334,7 +344,7 @@ sub event_html ($$%) { ?(month => $month):()) , (($date->year() or $date->month() or $date->day()) ?(year => $date->year()):()) - , do => 'events' + , do => 'newevent' , page => $params{destpage} ) . qq{' rel='nofollow'>+}; @@ -367,7 +377,7 @@ sub preprocess_day (@) { my @tags = map {"