Version matrix

Signed-off-by: Eike Stepper <stepper@esc-net.de>
diff --git a/downloads/versions.css b/downloads/versions.css
index 9a87ca6..5a27f98 100644
--- a/downloads/versions.css
+++ b/downloads/versions.css
@@ -44,3 +44,11 @@
   text-align: center;
 }
 
+td.hl {
+  background-color: #C0C0FF;
+}
+
+th.hl {
+  background-color: #C0C0FF;
+}
+
diff --git a/downloads/versions.php b/downloads/versions.php
index ab056ff..e41d20a 100644
--- a/downloads/versions.php
+++ b/downloads/versions.php
@@ -17,6 +17,9 @@
 $releases = [];
 $bundles = [];
 
+$selectedRelease = isset($_GET["sr"]) ? $_GET["sr"] : null;
+$selectedBundle = isset($_GET["sb"]) ? $_GET["sb"] : null;
+
 $lines = explode("\n", file_get_contents("$drops/drops.txt"));
 sort($lines);
 $lines = array_reverse($lines);
@@ -93,37 +96,53 @@
 {
   $drop = $info["drop"];
   $label = str_replace("-", " ", $release);
-  print "      <th><h3>CDO $label</h3></th>\n";
+  $href = "?sr=$release";
+  if ($selectedBundle)
+  {
+    $href .= "&sb=$selectedBundle";
+  }
+  
+  print "      <th><h3><a href=\"$href\">CDO $label</a></h3></th>\n";
 }
 
 print "    </tr>\n";
 
-headLine($releases, "Build", "drop", function($v) { $l = simpleDate($v); return "<a href=\"https://download.eclipse.org/modeling/emf/cdo/drops/$v\" title=\"CDO $v Downloads\">$l</a>"; });
-headLine($releases, "Commit", "commit", function($v) { $l = substr($v, 0, 7); return "<a href=\"https://git.eclipse.org/c/cdo/cdo.git/commit/?id=$v\">$l</a>"; });
-headLine($releases, "Simrel", "train", function($v) { return "<a href=\"https://www.eclipse.org/downloads/packages/release/$v\">$v</a>"; });
-headLine($releases, "Eclipse", "eclipse");
-headLine($releases, "EMF", "emf");
+headLine("Build", "drop", function($v) { $l = simpleDate($v); return "<a href=\"https://download.eclipse.org/modeling/emf/cdo/drops/$v\" title=\"CDO $v Downloads\">$l</a>"; });
+headLine("Commit", "commit", function($v) { $l = substr($v, 0, 7); return "<a href=\"https://git.eclipse.org/c/cdo/cdo.git/commit/?id=$v\">$l</a>"; });
+headLine("Simrel", "train", function($v) { return "<a href=\"https://www.eclipse.org/downloads/packages/release/$v\">$v</a>"; });
+headLine("Eclipse", "eclipse");
+headLine("EMF", "emf");
 
 print "  </thead>\n";
 print "  <tbody>\n";
 
 foreach ($bundles as $bundle)
 {
+  $clazz = $bundle == $selectedBundle ? " class=\"hl\"" : "";
+  
+  $href = "?sb=$bundle";
+  if ($selectedRelease)
+  {
+    $href .= "&sr=$selectedRelease";
+  }
+  
   print "    <tr>\n";
-  print "      <th scope=\"row\">$bundle</th>\n";
+  print "      <th scope=\"row\"$clazz><a href=\"$href\">$bundle</a></th>\n";
 
   foreach ($releases as $release => $info)
   {
+    $clazz = $release == $selectedRelease || $bundle == $selectedBundle ? " class=\"hl\"" : "";
+  
     $versions = $info["versions"];
     if (isset($versions[$bundle]))
     {
       $version = $versions[$bundle];
       $file = $bundle . "_" . $version . ".jar";
-      print "      <td><a href=\"https://download.eclipse.org/modeling/emf/cdo/drops/$drop/plugins/$file\" title=\"CDO $release &rarr; $file\">" . simpleVersion($version) . "</a></td>\n";
+      print "      <td$clazz><a href=\"https://download.eclipse.org/modeling/emf/cdo/drops/$drop/plugins/$file\" title=\"CDO $release &rarr; $file\">" . simpleVersion($version) . "</a></td>\n";
     }
     else
     {
-      print "      <td>&nbsp;</td>\n";
+      print "      <td$clazz>&nbsp;</td>\n";
     }
   }
   
@@ -135,13 +154,17 @@
 print '</div>';
 
 
-function headLine($releases, $label, $field, callable $formatter = null)
+function headLine($label, $field, callable $formatter = null)
 {
+  global $releases, $selectedRelease;
+  
   print "    <tr>\n";
   print "      <th scope=\"row\">$label</th>\n";
   
   foreach ($releases as $release => $info)
   {
+    $clazz = $release == $selectedRelease ? " class=\"hl\"" : "";
+  
     $value = $info[$field];
     
     if ($formatter)
@@ -149,7 +172,7 @@
       $value = $formatter($value);
     }
     
-    print "      <td>$value</td>\n";
+    print "      <td$clazz>$value</td>\n";
   }
   
   print "    </tr>\n";