-print '<ul';
-if (count($cal) > 5) print ' class="cols"';
-print ">\n";
-foreach (array_reverse($cal) as $title => $versions) {
- print '<li>';
- if ($url = @$versions['']) {
- printf('<a href="/%s">%s</a>', $url, $title);
+$year = 3600 * 24 * 365; # seconds per year
+$scale = 7; # em width per year
+$mindate = max(time(), strtotime($date) + ($year / $scale * 3)); # at least last entry plus 3em for centered text
+$length = ($mindate - strtotime(key(current($cal)))) / $year * $scale; # earliest entry position
+
+printf('<ul class="timeline" style="background-size:%.1fem">'."\n", $length);
+foreach (array_reverse($cal, TRUE) as $group => $rows) {
+ if (count($rows) > 1) {
+ $time = ($mindate - strtotime("$group-12-31T23:59")) / $year * $scale;
+ printf('<li class="range" style="left:%.1fem; width:%.1fem">',
+ $time, $time + $scale > $length ? $length - $time + 2 : $scale
+ );
+ print "<strong>$group</strong><ul>\n";