diff --git a/badge.js b/badge.js
index a03654b..7114cf9 100644
--- a/badge.js
+++ b/badge.js
@@ -15,12 +15,19 @@ try {
} catch(e) {}
canvasContext.font = '11px Verdana, "DejaVu Sans"';
+// cache templates
+var templates = {}
+var templateFiles = fs.readdirSync('templates')
+templateFiles.forEach(function(file) {
+ templates[file] = fs.readFileSync(path.join('templates', file)).toString()
+})
+
+var colorscheme = require('./colorscheme.json');
+
function makeTemplate(colorscheme, template) {
// Template crafting action below.
- var colorscheme = require(path.join(__dirname, 'templates', (colorscheme || 'default') + '-colorscheme.json'));
- var template = fs.readFileSync(path.join(__dirname, 'templates', (template || 'default') + '-template.svg'));
+ var template = templates[(template || 'default') + '-template.svg'];
var imageTemplate = dot.template(''+template);
- imageTemplate.colorscheme = colorscheme;
return imageTemplate;
}
@@ -41,8 +48,8 @@ function makeImage(data, options, cb) {
template = makeTemplate(options.colorscheme, options.template);
}
if (data.colorscheme) {
- data.colorA = template.colorscheme[data.colorscheme].colorA;
- data.colorB = template.colorscheme[data.colorscheme].colorB;
+ data.colorA = colorscheme[data.colorscheme].colorA;
+ data.colorB = colorscheme[data.colorscheme].colorB;
}
data.widths = [
(canvasContext.measureText(data.text[0]).width|0) + 10,
diff --git a/templates/default-colorscheme.json b/colorscheme.json
similarity index 100%
rename from templates/default-colorscheme.json
rename to colorscheme.json
diff --git a/coverage.svg b/coverage.svg
index 36e8404..c285722 100644
--- a/coverage.svg
+++ b/coverage.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/gh-badge.js b/gh-badge.js
index aad96ee..0f0c91b 100755
--- a/gh-badge.js
+++ b/gh-badge.js
@@ -2,10 +2,10 @@
var path = require('path');
var badge = require(path.join(__dirname, 'badge.js'));
var svg2img = require(path.join(__dirname, 'svg-to-img.js'));
-var colorscheme = require(path.join(__dirname, 'templates', 'default-colorscheme.json'));
+var colorscheme = require(path.join(__dirname, 'colorscheme.json'));
if (process.argv.length < 4) {
- console.log('Usage: badge subject status [:colorscheme] [.output]');
- console.log('Or: badge subject status right-color [left-color] [.output]');
+ console.log('Usage: badge subject status [:colorscheme] [.output] [@style]');
+ console.log('Or: badge subject status right-color [left-color] [.output] [@style]');
console.log();
console.log(' colorscheme: one of '
+ Object.keys(colorscheme).join(', ') + '.');
@@ -16,17 +16,24 @@ if (process.argv.length < 4) {
console.log(' output:');
console.log(' svg, png, jpg, or gif');
console.log();
- console.log('Eg: badge cactus grown :green');
+ console.log('Eg: badge cactus grown :green @flat');
console.log();
process.exit();
}
// Find a format specifier.
var format = 'svg';
+var style = '';
for (var i = 4; i < process.argv.length; i++) {
if (process.argv[i][0] === '.') {
format = process.argv[i].slice(1);
process.argv.splice(i, 1);
+ continue;
+ }
+ if (process.argv[i][0] === '@') {
+ style = process.argv[i].slice(1);
+ process.argv.splice(i, 1);
+ continue;
}
}
@@ -35,6 +42,12 @@ var status = process.argv[3];
var color = process.argv[4] || ':green';
var colorA = process.argv[5];
+var badgeOpts = {}
+
+if (style) {
+ badgeOpts.template = style;
+}
+
var badgeData = {text: [subject, status]};
if (color[0] === ':') {
@@ -50,7 +63,7 @@ if (color[0] === ':') {
if (colorA) { badgeData.colorA = colorA; }
}
-badge(badgeData, function produceOutput(svg) {
+badge(badgeData, badgeOpts, function produceOutput(svg) {
if (format === 'svg') {
console.log(svg);
} else if (/png|jpg|gif/.test(format)) {