diff --git a/server.js b/server.js index f763352..b87cd4f 100644 --- a/server.js +++ b/server.js @@ -4906,6 +4906,46 @@ cache(function(data, match, sendBadge, request) { }); })); +// Waffle.io integration +camp.route(/^\/waffle\/column\/([^\/]+)\/([^\/]+)\/?([^\/]+)?\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var user = match[1]; // eg, potherca + var repo = match[2]; // eg, GraphvizWebEditor + var ghLabel = match[3] || 'ready'; // eg, waffle:%20ready%20for%20development + var format = match[4]; + var apiUrl = 'https://api.waffle.io/' + user + '/' + repo + '/columns'; + var badgeData = getBadgeData('issues', data); + + request(apiUrl, function(err, res, buffer) { + try { + var list = JSON.parse(buffer); + if (list.length === 0) { + badgeData.text[1] = 'absent'; + sendBadge(format, badgeData); + return; + } + var column; + for (var i = 0; i < list.length; i++) { + var column = list[i]; + var name = column.label? column.label.name: column.displayName; + var color = column.label? column.label.color: '78bdf2'; + if (name === ghLabel) { + break; + } + } + badgeData.text[0] = data.label || column.displayName || name; + badgeData.text[1] = '' + column.issues.length; + badgeData.colorscheme = null; + badgeData.colorB = '#' + 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 67903ab..dc88b44 100644 --- a/try.html +++ b/try.html @@ -746,6 +746,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/maintenance/yes/2016.svg + Waffle.io: + + https://img.shields.io/waffle/column/potherca/GraphvizWebEditor/waffle:%20in%20progress.svg +

Longer Miscellaneous