var fs = require('fs'); var path = require('path'); var Promise = require('es6-promise').Promise; var SVGO = require('svgo'); // Initialize what will be used for automatic text measurement. var Canvas = require('canvas'); var canvasElement = new Canvas(0, 0); // Width and height are irrelevant. var canvasContext = canvasElement.getContext('2d'); canvasContext.font = '10px Verdana'; // Template crafting action below. var dot = require('dot'); var badgeData = require('./badges.json'); var badges = badgeData.badges; var colorscheme = badgeData.colorschemes; var template = fs.readFileSync('./template.svg'); var imageTemplate = dot.template(''+template); // Construct the image sheet. var imageSheet = 'sheet.html'; var resultSheet = ''; // Where the images will be put. var targetImgDir = 'img'; function optimize(string, callback) { var svgo = new SVGO(); svgo.optimize(string, callback); } function makeImage(name, data, cb) { if (data.colorscheme) { data.colorA = colorscheme[data.colorscheme].colorA; data.colorB = colorscheme[data.colorscheme].colorB; } data.widths = [ (canvasContext.measureText(data.text[0]).width|0) + 10, (canvasContext.measureText(data.text[1]).width|0) + 10, ]; var result = imageTemplate(data); // Run the SVG through SVGO. optimize(result, function(object) { var result = object.data; var filename = path.join(targetImgDir, name + '.svg'); // Put this image on the sheet. resultSheet += '
';
// Write the image individually.
fs.writeFile(filename, result, cb);
});
}
// Return a promise to have all images written out individually.
function buildImages() {
return Promise.all(Object.keys(badges).map(function(name) {
//console.log('badge', name);
return new Promise(function(resolve) {
makeImage(name, badges[name], resolve);
});
}));
}
function main() {
// Write the images individually.
buildImages()
.then(function() {
// Write the sheet.
//console.log('sheet');
fs.writeFileSync(imageSheet, resultSheet);
})
.catch(function(e) { console.error(e.stack); });
}
main();