diff --git a/server.js b/server.js index 3047d65..08c31bf 100644 --- a/server.js +++ b/server.js @@ -301,6 +301,8 @@ camp.notfound(/\.(svg|png|gif|jpg|json)/, function(query, match, end, request) { var badgeData = getBadgeData("404", query); badgeData.text[1] = 'badge not found'; badgeData.colorscheme = 'red'; + // Add format to badge data. + badgeData.format = format; badge(badgeData, makeSend(format, request.res, end)); }); @@ -4887,7 +4889,7 @@ cache(function(data, match, sendBadge, request) { // CTAN integration. -camp.route(/^\/ctan\/([^\/])\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +camp.route(/^\/ctan\/([vl])\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { var info = match[1]; // either `v` or `l` var pkg = match[2]; // eg, tex @@ -4900,6 +4902,11 @@ cache(function(data, match, sendBadge, request) { sendBadge(format, badgeData); return; } + if (res.statusCode === 404) { + badgeData.text[1] = 'not found'; + sendBadge(format, badgeData); + return; + } try { var data = JSON.parse(buffer); @@ -4911,13 +4918,16 @@ cache(function(data, match, sendBadge, request) { sendBadge(format, badgeData); } else if (info === 'l') { var license = data.license; - if (license === '') { - badgeData.text[1] = 'Unknown'; - } else { - badgeData.text[1] = license; + if (license) { + // API returns licenses inconsistently ordered, so fix the order. + badgeData.text[1] = license.sort().join(','); badgeData.colorscheme = 'blue'; + } else { + badgeData.text[1] = 'unknown'; } sendBadge(format, badgeData); + } else { + throw Error('Unreachable due to regex'); } } catch (e) { badgeData.text[1] = 'invalid'; diff --git a/try.html b/try.html index b786239..1b3e078 100644 --- a/try.html +++ b/try.html @@ -724,8 +724,8 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/cpan/l/Config-Augeas.svg CTAN: - - https://img.shields.io/ctan/l/tex.svg + + https://img.shields.io/ctan/l/novel.svg Wheelmap: