diff --git a/server.js b/server.js index 08cda12..38fad2c 100644 --- a/server.js +++ b/server.js @@ -3107,6 +3107,101 @@ cache(function(data, match, sendBadge, request) { })} )); +// DUB download integration +camp.route(/^\/dub\/(dd|dw|dm|dt)\/([^\/]+)(?:\/([^\/]+))?\.(svg|png|gif|jpg|json)$/, +cache(function (data, match, sendBadge, request) { + var info = match[1]; // downloads (dd - daily, dw - weekly, dm - monthly, dt - total) + var pkg = match[2]; // package name, e.g. vibe-d + var version = match[3]; // version (1.2.3 or latest) + var format = match[4]; + var apiUrl = 'http://code.dlang.org/api/packages/'+pkg; + if (version) + apiUrl += '/' + version; + apiUrl += '/stats'; + var badgeData = getBadgeData('dub', data); + request(apiUrl, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + } + try { + var data = JSON.parse(buffer); + if (info.charAt(0) === 'd') { + badgeData.text[0] = getLabel('downloads', data); + var downloads; + switch (info.charAt(1)) { + case 'm': + downloads = data.downloads.monthly; + badgeData.text[1] = metric(downloads) + '/month'; + break; + case 'w': + downloads = data.downloads.weekly; + badgeData.text[1] = metric(downloads) + '/week'; + break; + case 'd': + downloads = data.downloads.daily; + badgeData.text[1] = metric(downloads) + '/day'; + break; + case 't': + downloads = data.downloads.total; + badgeData.text[1] = metric(downloads); + break; + } + if (version) { + badgeData.text[1] += ' ' + versionColor(version).version; + } + badgeData.colorscheme = downloadCountColor(downloads); + sendBadge(format, badgeData); + } + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + +// DUB license and version integration +camp.route(/^\/dub\/(v|l)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function (data, match, sendBadge, request) { + var info = match[1]; // (v - version, l - license) + var pkg = match[2]; // package name, e.g. vibe-d + var format = match[3]; + var apiUrl = 'http://code.dlang.org/api/packages/'+pkg; + if (info === 'v') + apiUrl += '/latest'; + else if (info === 'l') + apiUrl += '/latest/info'; + var badgeData = getBadgeData('dub', data); + request(apiUrl, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + } + try { + var data = JSON.parse(buffer); + if (info === 'v') { + var vdata = versionColor(data); + badgeData.text[1] = vdata.version; + badgeData.colorscheme = vdata.color; + sendBadge(format, badgeData); + } else if (info == 'l') { + var license = data.info.license; + badgeData.text[0] = 'license'; + if (license == null) { + badgeData.text[1] = 'Unknown'; + } else { + badgeData.text[1] = license; + badgeData.colorscheme = 'blue'; + } + 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 605866b..79dfa81 100644 --- a/try.html +++ b/try.html @@ -271,6 +271,22 @@ Pixel-perfect Retina-ready Fast Consistent Hackable
https://img.shields.io/puppetforge/dt/camptocamp/openldap.svg
https://img.shields.io/dub/dd/vibe-d.svg
https://img.shields.io/dub/dw/vibe-d.svg
https://img.shields.io/dub/dm/vibe-d/latest.svg
https://img.shields.io/dub/dt/vibe-d/0.7.23.svg
https://img.shields.io/ctan/v/tex.svg |
+ ||
DUB: | +https://img.shields.io/dub/v/vibe-d.svg |
+
---|
https://img.shields.io/gem/u/raphink.svg
https://img.shields.io/dub/l/vibe-d.svg