diff --git a/server.js b/server.js index f9fc53d..88ce3bc 100644 --- a/server.js +++ b/server.js @@ -2951,6 +2951,7 @@ cache(function(data, match, sendBadge, request) { }); })); +// CPAN integration. camp.route(/^\/cpan\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { var info = match[1]; // either `v` or `l` @@ -2985,6 +2986,32 @@ cache(function(data, match, sendBadge, request) { }); })); +// CTAN integration. +camp.route(/^\/ctan\/v\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var pkg = match[1]; // eg, tex + var format = match[2]; + var url = 'http://www.ctan.org/json/pkg/'+pkg; + var badgeData = getBadgeData('ctan', data); + request(url, function (err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(badgeData, format); + } + try { + var data = JSON.parse(buffer); + var version = data.version.number; + var vdata = versionColor(version); + badgeData.text[1] = vdata.version; + badgeData.colorscheme = vdata.color; + sendBadge(format, badgeData); + } catch (e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + })} +)); + // Any badge. camp.route(/^\/(:|badge\/)(([^-]|--)+)-(([^-]|--)+)-(([^-]|--)+)\.(svg|png|gif|jpg)$/, function(data, match, end, ask) { diff --git a/try.html b/try.html index 0f48b1c..6ea8972 100644 --- a/try.html +++ b/try.html @@ -374,6 +374,10 @@ Pixel-perfect Retina-ready Fast Consistent Hackable
https://img.shields.io/cpan/v/Config-Augeas.svg
https://img.shields.io/ctan/v/tex.svg