UNPKG

font-awesome-svg-png

Version:

Font Awesome split to individual SVG and PNG files of different sizes along with Node.JS based generator

47 lines (38 loc) 1.37 kB
var Promise = require("bluebird"), fs = require('graceful-fs'), SVGO = require('svgo'), pathModule = require('path'), mkdirp = require("mkdirp"), getIconSvg = require("./getIconSvg"); var svgo = new SVGO({ removeViewBox: true }); function generateSprite(name, params) { return new Promise(function(resolve, reject) { svgo.optimize(getIconSvg(params), function(result) { var m = result.data.match('(<path.*\/>)'); var svgPath = m[1].replace('path', 'path id="fa-' + name + '"'); resolve(svgPath.replace(/\s*fill="[^"]+"/, '')); }); }); } function generateSprites(glyphs, params) { mkdirp.sync(params.destFolder); var outPath = pathModule.join(params.destFolder, 'sprites.svg'); console.log('Generating sprites to', outPath); var workChain = []; glyphs.forEach(function(glyph) { workChain.push(generateSprite(glyph.id, { advWidth: glyph.data['horiz-adv-x'] || 1536, path: glyph.data.d })); }); return Promise.all(workChain).then(function(lines) { var outSvgSheet = fs.createWriteStream(outPath); outSvgSheet.write('<?xml version="1.0" encoding="utf-8"?>\n'); outSvgSheet.write('<svg height="0" width="0" style="position:absolute;margin-left: -100%;">\n'); outSvgSheet.write(lines.join('\n')); outSvgSheet.end('\n<\/svg>\n'); }); } module.exports = generateSprites;