Add Mozilla Addons support
This commit is contained in:
parent
3edd0df04c
commit
2cb82a4ab3
10
package.json
10
package.json
|
@ -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"
|
||||
|
|
61
server.js
61
server.js
|
@ -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) {
|
||||
|
|
20
try.html
20
try.html
|
@ -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 Retina-ready Fast Consistent 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 Retina-ready Fast Consistent 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 Retina-ready Fast Consistent 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>
|
||||
|
|
Loading…
Reference in New Issue
Block a user