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();