calendar: When there are multiple pages for a given day, they're displayed in a popup...
[ikiwiki.git] / IkiWiki / Plugin / calendar.pm
index d443198f69618f28e37821766731b50bc2599306..8ca6dd82680171d8ebae5f88ac9053c327e0ad3d 100644 (file)
@@ -86,8 +86,10 @@ sub format_month (@) {
                my $year  = $date[5] + 1900;
                my $mtag  = sprintf("%02d", $month);
 
                my $year  = $date[5] + 1900;
                my $mtag  = sprintf("%02d", $month);
 
-               # Only one posting per day is being linked to.
-               $linkcache{"$year/$mtag/$mday"} = $p;
+               if (! $linkcache{"$year/$mtag/$mday"}) {
+                       $linkcache{"$year/$mtag/$mday"} = [];
+               }
+               push(@{$linkcache{"$year/$mtag/$mday"}}, $p);
        }
                
        my $pmonth = $params{month} - 1;
        }
                
        my $pmonth = $params{month} - 1;
@@ -221,11 +223,38 @@ EOF
                                $tag='month-calendar-day-link';
                        }
                        $calendar.=qq{\t\t<td class="$tag $downame{$wday}">};
                                $tag='month-calendar-day-link';
                        }
                        $calendar.=qq{\t\t<td class="$tag $downame{$wday}">};
-                       $calendar.=htmllink($params{page}, $params{destpage}, 
-                               $linkcache{$key},
-                               noimageinline => 1,
-                               linktext => $day,
-                               title => pagetitle(IkiWiki::basename($linkcache{$key})));
+                       if (scalar(@{$linkcache{$key}}) == 1) {
+                               # Only one posting on this page
+                               my $page = $linkcache{$key}[0];
+                               $calendar.=htmllink($params{page}, $params{destpage}, 
+                                       $page,
+                                       noimageinline => 1,
+                                       linktext => $day,
+                                       title => pagetitle(IkiWiki::basename($page)));
+                       }
+                       else {
+                               $calendar.=qq{<div class='popup'>$day<div class='balloon'>};
+                               # Several postings on this page
+                               $calendar.=qq{<ul>};
+                               foreach my $page (@{$linkcache{$key}}) {
+                                       $calendar.= qq{\n\t\t\t<li>};
+                                       my $title;
+                                       if (exists $pagestate{$page}{meta}{title}) {
+                                               $title = "$pagestate{$page}{meta}{title}";
+                                       }
+                                       else {
+                                               $title = pagetitle(IkiWiki::basename($page));
+                                       }
+                                       $calendar.=htmllink($params{page}, $params{destpage}, 
+                                               $page,
+                                               noimageinline => 1,
+                                               linktext => $title,
+                                               title => $title);
+                                       $calendar.= '</li>';
+                               }
+                               $calendar.=qq{\n\t\t</ul>};
+                               $calendar.=qq{</div></div>};
+                       }
                        $calendar.=qq{</td>\n};
                }
                else {
                        $calendar.=qq{</td>\n};
                }
                else {