From c6163c9a4f35daf61a0a6e9cdf7e6fd7cba465e3 Mon Sep 17 00:00:00 2001 From: Max Ogden Date: Sat, 19 Apr 2014 10:27:20 -0700 Subject: [PATCH] move colorscheme back to original location, add @ syntax to cli for specifying style, cache templates on server start --- badge.js | 17 ++++++++++---- ...fault-colorscheme.json => colorscheme.json | 0 coverage.svg | 2 +- gh-badge.js | 23 +++++++++++++++---- 4 files changed, 31 insertions(+), 11 deletions(-) rename templates/default-colorscheme.json => colorscheme.json (100%) 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 @@ -coveragecoverage83.9%83.9% \ No newline at end of file +coveragecoverage80.8%80.8% \ 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)) {