diff --git a/index.html b/index.html index 079c279..3adb4c0 100644 --- a/index.html +++ b/index.html @@ -707,6 +707,14 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/github/issues-raw/badges/shields/website.svg + GitHub pull requests: + + https://img.shields.io/github/issues-pr/cdnjs/cdnjs.svg + + + + https://img.shields.io/github/issues-pr-raw/cdnjs/cdnjs.svg + license: https://img.shields.io/github/license/mashape/apistatus.svg diff --git a/server.js b/server.js index 151e6dc..c1e4991 100644 --- a/server.js +++ b/server.js @@ -2966,23 +2966,24 @@ cache(function(data, match, sendBadge, request) { })); // GitHub issues integration. -camp.route(/^\/github\/issues(-raw)?\/([^\/]+)\/([^\/]+)\/?([^\/]+)?\.(svg|png|gif|jpg|json)$/, +camp.route(/^\/github\/issues(-pr)?(-raw)?\/([^\/]+)\/([^\/]+)\/?([^\/]+)?\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { - var isRaw = !!match[1]; - var user = match[2]; // eg, badges - var repo = match[3]; // eg, shields - var ghLabel = match[4]; // eg, website - var format = match[5]; - var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo; + var isPR = !!match[1]; + var isRaw = !!match[2]; + var user = match[3]; // eg, badges + var repo = match[4]; // eg, shields + var ghLabel = match[5]; // eg, website + var format = match[6]; + var apiUrl = 'https://api.github.com/' + (isPR ? 'search/issues?q=is:pr+is:open+' : 'repos/') + user + '/' + repo; var issuesApi = false; // Are we using the issues API instead of the repo one? var query = {}; - if (ghLabel !== undefined) { + if (!isPR && ghLabel !== undefined) { apiUrl += '/issues'; query.labels = ghLabel; issuesApi = true; } - var badgeData = getBadgeData('issues', data); + var badgeData = getBadgeData( (isPR ? 'pull requests' : 'issues'), data); if (badgeData.template === 'social') { badgeData.logo = badgeData.logo || logos.github; } @@ -2995,12 +2996,16 @@ cache(function(data, match, sendBadge, request) { try { var data = JSON.parse(buffer); var modifier = ''; - if (issuesApi) { - var issues = data.length; - if (res.headers['link'] && - res.headers['link'].indexOf('rel="last"') >= 0) { modifier = '+'; } + if (isPR) { + issues = data.total_count; } else { - var issues = data.open_issues_count; + if (issuesApi) { + var issues = data.length; + if (res.headers['link'] && + res.headers['link'].indexOf('rel="last"') >= 0) { modifier = '+'; } + } else { + var issues = data.open_issues_count; + } } badgeData.text[1] = issues + modifier + (isRaw? '': ' open'); badgeData.colorscheme = issues ? 'yellow' : 'brightgreen'; diff --git a/try.html b/try.html index 737890c..7e6bb3e 100644 --- a/try.html +++ b/try.html @@ -706,6 +706,14 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/github/issues-raw/badges/shields/website.svg + GitHub pull requests: + + https://img.shields.io/github/issues-pr/cdnjs/cdnjs.svg + + + + https://img.shields.io/github/issues-pr-raw/cdnjs/cdnjs.svg + license: https://img.shields.io/github/license/mashape/apistatus.svg