# HG changeset patch # User David Champion # Date 1290526585 21600 # Node ID e4d31654a9d3884df79a4869b20d60fa7c2f1948 # Parent 3e0b0dc69adf1a7a92e4c84cc3aae560c4102f5e downloads: put each available version into a separate table With this update we generate a separate table on the /downloads page for each version that is represented in sources.js. Downloader.maxversions is the number of versions to display by default; 0 means to display all. If any versions are not displayed by default, a "more versions" label appears. Clicking it reveals the remaining versions. diff -r 3e0b0dc69adf -r e4d31654a9d3 static/css/styles.css --- a/static/css/styles.css Mon Nov 22 20:16:50 2010 +0100 +++ b/static/css/styles.css Tue Nov 23 09:36:25 2010 -0600 @@ -67,6 +67,12 @@ thead td, thead th { background: #999; color: #fff; font-weight: bold; } tbody td { border-bottom: 1px solid #ccc; } tbody td em { font-style: normal; font-weight: bolder; } +tbody td:last-child { width: 5em; } + +/* + * Table expansion + */ +div #more { font-size: smaller; color: #999; } /* * Quotes diff -r 3e0b0dc69adf -r e4d31654a9d3 static/js/download.js --- a/static/js/download.js Mon Nov 22 20:16:50 2010 +0100 +++ b/static/js/download.js Tue Nov 23 09:36:25 2010 -0600 @@ -28,6 +28,9 @@ var Downloader = { + // maximum number of versions to display (0 to display all available) + maxversions: 3, + downloads: [], init: function (sources) { @@ -47,9 +50,35 @@ return null; }, - listall: function () { - // copy the download list - var downloads = this.downloads.slice(0); + versions: function () { + var uniq = new Object(); + for (i in this.downloads) { + uniq[this.downloads[i].version] = 1; + } + var versions = new Array(); + for (key in uniq) { + versions.push(key); + } + versions.sort(function (a, b) { + a = a.toLowerCase(); + b = b.toLowerCase(); + return (a < b) - (b < a); + }); + return versions; + }, + + listall: function (selector) { + if (selector == null) + selector = function (o) { return true; } + + // copy the download list, selecting only wanted nodes + var downloads = new Array(); + for (i in this.downloads) { + if (selector(this.downloads[i])) { + downloads.push(this.downloads[i]); + } + } + // alpha-sort it by description (case-folded) downloads.sort(function (a, b) { a = a.desc.toLowerCase(); @@ -58,6 +87,7 @@ }); var desc; + var out = '' for (i in downloads) { var dl = downloads[i]; var ua = navigator.userAgent; @@ -65,10 +95,32 @@ desc = '' + dl.desc + ''; else desc = dl.desc; - document.write('\n' + desc + '' + - '' + - 'download' + - ''); + out += '\n' + desc + '' + + '' + + 'download' + + ''; } + return out; + }, + + table: function (name, selector) { + var out = ''; + out += '\n'; + out += '\n'; + out += '\n'; + out += ''; + out += ''; + out += ''; + out += ''; + out += ''; + out += ''; + out += this.listall(selector); + out += ''; + out += '
Mercurial '; + out += name; + out += '
'; + out += '
'; + return out; } };