X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/21b6fa937b11db46359a1a6aec85d33aca0551a8..1ef40ff68370aba85e9816221675a8edd7a308f5:/IkiWiki/Plugin/calendar.pm?ds=inline

diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
index c7d2b7c01..682bfb6fb 100644
--- a/IkiWiki/Plugin/calendar.pm
+++ b/IkiWiki/Plugin/calendar.pm
@@ -13,7 +13,7 @@
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 
 require 5.002;
 package IkiWiki::Plugin::calendar;
@@ -22,7 +22,6 @@ use warnings;
 use strict;
 use IkiWiki 3.00;
 use Time::Local;
-use POSIX ();
 
 my $time=time;
 my @now=localtime($time);
@@ -87,8 +86,10 @@ sub format_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;
@@ -123,10 +124,10 @@ sub format_month (@) {
 	}
 
 	# Find out month names for this, next, and previous months
-	my $monthabbrev=POSIX::strftime("%b", @monthstart);
-	my $monthname=POSIX::strftime("%B", @monthstart);
-	my $pmonthname=POSIX::strftime("%B", localtime(timelocal(0,0,0,1,$pmonth-1,$pyear-1900)));
-	my $nmonthname=POSIX::strftime("%B", localtime(timelocal(0,0,0,1,$nmonth-1,$nyear-1900)));
+	my $monthabbrev=strftime_utf8("%b", @monthstart);
+	my $monthname=strftime_utf8("%B", @monthstart);
+	my $pmonthname=strftime_utf8("%B", localtime(timelocal(0,0,0,1,$pmonth-1,$pyear-1900)));
+	my $nmonthname=strftime_utf8("%B", localtime(timelocal(0,0,0,1,$nmonth-1,$nyear-1900)));
 
 	my $archivebase = 'archives';
 	$archivebase = $config{archivebase} if defined $config{archivebase};
@@ -182,7 +183,7 @@ EOF
 	my %dowabbr;
 	for my $dow ($week_start_day..$week_start_day+6) {
 		my @day=localtime(timelocal(0,0,0,$start_day++,$params{month}-1,$params{year}-1900));
-		my $downame = POSIX::strftime("%A", @day);
+		my $downame = strftime_utf8("%A", @day);
 		my $dowabbr = substr($downame, 0, 1);
 		$downame{$dow % 7}=$downame;
 		$dowabbr{$dow % 7}=$dowabbr;
@@ -222,11 +223,27 @@ EOF
 				$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})));
+			$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 {
@@ -329,8 +346,8 @@ EOF
 	for (my $month = 1; $month <= 12; $month++) {
 		my @day=localtime(timelocal(0,0,0,15,$month-1,$params{year}-1900));
 		my $murl;
-		my $monthname = POSIX::strftime("%B", @day);
-		my $monthabbr = POSIX::strftime("%b", @day);
+		my $monthname = strftime_utf8("%B", @day);
+		my $monthabbr = strftime_utf8("%b", @day);
 		$calendar.=qq{\t<tr>\n}  if ($month % $params{months_per_row} == 1);
 		my $tag;
 		my $mtag=sprintf("%02d", $month);