#!/usr/bin/perl -w
use POSIX;
use CGI();
my @months = qw( x Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec);
(undef,undef,undef,$todaymday,$todaymonth,$todayyear,undef,undef,undef) = localtime(time);
$todayyear += 1900;
$todaymonth++;
$todaymonth = "0$todaymonth" if ($todaymonth < 9);
my $selectedyear = CGI::param('year') || '';
my $selectedmonth = CGI::param('month') || '';
opendir(DIR,'entries');
my @entries = grep { !/^\./ && !/CVS/ } readdir(DIR);
closedir(DIR);
if ($selectedmonth eq '') {
@entries = reverse sort @entries;
($selectedyear,$selectedmonth) = split /-/,$entries[0];
}
my $calHTML = makeSidebar($selectedmonth,$selectedyear,@entries);
my $HTML;
$HTML .= '
';
$HTML .= ' ';
$HTML .= ' ';
my $i = 0;
my $selectedprefix = "$selectedyear-$selectedmonth";
foreach my $entry (sort {$b cmp $a} @entries) {
next unless $entry =~ /^$selectedprefix/;
my $date = $entry;
$date =~ s/\.html//;
my $entryHTML = getEntry($entry);
$HTML .= qq| |;
$HTML .= qq| |;
$HTML .= qq|$entryHTML |;
$HTML .= qq| |;
}
print <<"EOF";
Content-type: text/html; charset=ISO-8859-1
Blog
EOF
sub getEntry {
my $f = shift;
open FILE,"entries/$f";
my $data;
foreach () {
s///;
s/<\/h>/<\/span>/;
s/---/—/g;
$data .= $_;
}
close FILE;
return $data;
}
sub makeSidebar {
my ($month,$year,@entries) = @_;
my %ents;
my $HTML = "";
foreach my $name (@entries) {
$name =~ s/-...html$//;
$ents{$name} += 1;
}
my $prev_y = '';
foreach my $name (sort {$b cmp $a} keys %ents) {
my ($y,$m) = split('-',$name);
if ($y ne $prev_y) {
my $icon = ''; #$y == $year ? '▾' : '▸';
$HTML .= qq|$icon $y |;
my $display = $y eq $year ? 'block' : 'none';
$HTML .= qq||;
$prev_y = $y;
foreach my $name (sort {$b cmp $a} keys %ents) {
my ($y,$m) = split('-',$name);
if ($y eq $prev_y) {
my $count = $ents{$name};
$name = $months[$m];
$name = "
$name " if ($y == $year && $m == $month);
$title = $count == 1 ? "1 entry" : "$count entries";
$HTML .= qq|
$name |;
}
}
$HTML .= '
'
}
}
$HTML .= 'Code ';
return $HTML;
}
sub makeCal {
my ($mon,$year) = @_;
my $month = $months[$mon];
my $html = '';
$html .= qq|$month $year |;
$html .= qq|Man Tirs Ons Tors Fre Lør Søn |;
$html .= qq| |;
my $time = POSIX::mktime(0, 0, 12, 1, $mon-1, $year-1900, 0, 0, 0);
$html .= '';
my ($sec,$min,$hour,$mday,$m,$y,$wday,$yday,$isdst) = localtime($time);
$html .= ' 'x(($wday-1)%7);
while ($m < $mon) {
my $style='';
if ($mon == $todaymonth && $mday == $todaymday && $year == $todayyear) {
$style = 'style="background-color: #c0c0c0"';
}
if (dateHasEntry($year,$mon,$mday)) {
$mday = qq|$mday |;
}
$html .= "$mday ";
$html .= ' ' if ($wday-1)%7 == 6;
$time += 24*3600;
($sec,$min,$hour,$mday,$m,$y,$wday,$yday,$isdst) = localtime($time);
}
$html .= ' ';
$html .= qq| |;
$html .= '
';
return $html;
}
sub dateHasEntry {
my ($year,$mon,$mday) = @_;
$mon = "0$mon" if $mon < 10;
$mday = "0$mday" if $mday < 10;
return -e "entries/$year-$mon-$mday.html";
}