75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
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 += '<p><img src="' + filename + '">';
|
|
// 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();
|