Add Mozilla Addons support

This commit is contained in:
Józef Sokołowski 2016-05-29 21:35:06 +02:00 committed by Thaddee Tyl
parent 3edd0df04c
commit 2cb82a4ab3
3 changed files with 87 additions and 4 deletions

View File

@ -25,8 +25,14 @@
"camp": "~16.2.3",
"semver": "~5.3.0",
"bower": "~1.7.9",
"chrome-web-store-item-property": "^1.1.2",
"json-autosave": "~1.1.1"
"chrome-web-store-item-property": "~1.1.2",
"json-autosave": "~1.1.1",
"xml2js": "~0.4.16"
},
"devDependencies": {
"ass": "~0.0.6",
"should": "~3.0.0",
"mocha": "~1.14.0"
},
"scripts": {
"test": "node test/test.js"

View File

@ -21,6 +21,7 @@ var svg2img = require('./svg-to-img.js');
var loadLogos = require('./load-logos.js');
var githubAuth = require('./lib/github-auth.js');
var querystring = require('querystring');
var xml2js = require('xml2js');
var serverSecrets;
try {
// Everything that cannot be checked in but is useful server-side
@ -5346,6 +5347,66 @@ cache(function(data, match, sendBadge, request) {
});
}));
// Mozilla addons integration
camp.route(/^\/amo\/(v|d|rating|users)\/(.*)\.(svg|png|gif|jpg|json)$/,
cache(function(data, match, sendBadge, request) {
var type = match[1];
var addonId = match[2];
var format = match[3];
var badgeData = getBadgeData('mozilla addons', data);
var url = 'https://services.addons.mozilla.org/api/1.5/addon/' + addonId;
request(url, function(err, res, buffer) {
if (err) {
badgeData.text[1] = 'inaccessible';
sendBadge(format, badgeData);
return;
}
xml2js.parseString(buffer.toString(), function (err, data) {
if (err) {
badgeData.text[1] = 'invalid';
sendBadge(format, badgeData);
return;
}
try {
switch (type) {
case 'v':
var version = data.addon.version[0];
var vdata = versionColor(version);
badgeData.text[1] = vdata.version;
badgeData.colorscheme = vdata.color;
break;
case 'd':
var downloads = parseInt(data.addon.total_downloads[0], 10);
badgeData.text[0] = 'downloads';
badgeData.text[1] = metric(downloads);
badgeData.colorscheme = downloadCountColor(downloads);
break;
case 'rating':
var rating = parseInt(data.addon.rating, 10);
badgeData.text[0] = 'rating';
badgeData.text[1] = rating + ' stars';
badgeData.colorscheme = floorCountColor(rating, 2, 3, 4);
break;
case 'users':
var dailyUsers = parseInt(data.addon.daily_users[0], 10);
badgeData.text[0] = 'users';
badgeData.text[1] = metric(dailyUsers);
badgeData.colorscheme = 'brightgreen';
break;
}
sendBadge(format, badgeData);
} catch (err) {
badgeData.text[1] = 'invalid';
sendBadge(format, badgeData);
}
});
});
}));
// Test if a webpage is online
camp.route(/^\/website(-(([^-]|--)*?)-(([^-]|--)*)(-(([^-]|--)+)-(([^-]|--)+))?)?\/(.+)\/(.+)\.(svg|png|gif|jpg|json)$/,
cache(function(data, match, sendBadge, request) {

View File

@ -388,8 +388,8 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable
<td><code>https://img.shields.io/chrome-web-store/d/nimelepbpejjlbmoobocpfnjhihnpked.svg</code></td>
</tr>
<tr><th data-keywords='website' data-doc='websiteDoc'> Website: </th>
<td><img src='/website-up-down-green-red/http/shields.io.svg' alt=''/></td>
<td><code>https://img.shields.io/website-up-down-green-red/http/shields.io.svg</code></td>
<td><img src='/website-up-down-green-red/http/shields.io.svg' alt=''/></td>
<td><code>https://img.shields.io/website-up-down-green-red/http/shields.io.svg</code></td>
</tr>
<tr><th data-keywords='cocoapods'> CocoaPods: </th>
<td><img src='/cocoapods/dt/AFNetworking.svg' alt='' /></td>
@ -403,6 +403,10 @@ Pixel-perfect &nbsp; Retina-ready &nbsp; Fast &nbsp; Consistent &nbsp; Hackable
<td><img src='/cocoapods/dw/AFNetworking.svg' alt='' /></td>
<td><code>https://img.shields.io/cocoapods/dw/AFNetworking.svg</code></td>
</tr>
<tr><th data-keywords='amo firefox'> Mozilla Addons: </th>
<td><img src='/amo/d/dustman.svg' alt=''/></td>
<td><code>https://img.shields.io/amo/d/dustman.svg</code></td>
</tr>
</tbody></table>
<h3 id="version"> Version </h3>
<table class='badge'><tbody>
@ -554,6 +558,10 @@ Pixel-perfect &nbsp; Retina-ready &nbsp; Fast &nbsp; Consistent &nbsp; Hackable
<td><img src='/homebrew/v/cake.svg' alt=''/></td>
<td><code>https://img.shields.io/homebrew/v/cake.svg</code></td>
</tr>
<tr><th data-keywords='amo firefox'> Mozilla Addons: </th>
<td><img src='/amo/v/dustman.svg' alt=''/></td>
<td><code>https://img.shields.io/amo/v/dustman.svg</code></td>
</tr>
</tbody></table>
<h3 id="social"> Social </h3>
@ -865,6 +873,14 @@ Pixel-perfect &nbsp; Retina-ready &nbsp; Fast &nbsp; Consistent &nbsp; Hackable
<td><img src='/aur/votes/yaourt.svg' alt=''/></td>
<td><code>https://img.shields.io/aur/votes/yaourt.svg</code></td>
</tr>
<tr><th data-keywords='amo firefox'> Mozilla Addons: </th>
<td><img src='/amo/users/dustman.svg' alt=''/></td>
<td><code>https://img.shields.io/amo/users/dustman.svg</code></td>
</tr>
<tr><th data-keywords='amo firefox'> Mozilla Addons: </th>
<td><img src='/amo/rating/dustman.svg' alt=''/></td>
<td><code>https://img.shields.io/amo/rating/dustman.svg</code></td>
</tr>
</tbody></table>
<h3 id="miscellaneous"> Longer Miscellaneous </h3>