diff --git a/bin/optimise-svgs.js b/bin/optimise-svgs.js new file mode 100755 index 000000000..28f4f715d --- /dev/null +++ b/bin/optimise-svgs.js @@ -0,0 +1,77 @@ +#!/usr/bin/env node + +/* +Optimise the SVGs in ./core/images using SVGO from https://github.com/svg/svgo + +Install SVGO with the following command in the root of the repo: + +npm install svgo +*/ + +"use strict"; + +var fs = require("fs"), + path = require("path"), + SVGO = require("svgo"), + svgo = new SVGO({ + plugins: [ + {cleanupAttrs: true}, + {removeDoctype: true}, + {removeXMLProcInst: true}, + {removeComments: true}, + {removeMetadata: true}, + {removeTitle: true}, + {removeDesc: true}, + {removeUselessDefs: true}, + {removeEditorsNSData: true}, + {removeEmptyAttrs: true}, + {removeHiddenElems: true}, + {removeEmptyText: true}, + {removeEmptyContainers: true}, + {removeViewBox: false}, + {cleanupEnableBackground: true}, + {convertStyleToAttrs: true}, + {convertColors: true}, + {convertPathData: true}, + {convertTransform: true}, + {removeUnknownsAndDefaults: true}, + {removeNonInheritableGroupAttrs: true}, + {removeUselessStrokeAndFill: true}, + {removeUnusedNS: true}, + {cleanupIDs: true}, + {cleanupNumericValues: true}, + {moveElemsAttrsToGroup: true}, + {moveGroupAttrsToElems: true}, + {collapseGroups: true}, + {removeRasterImages: false}, + {mergePaths: true}, + {convertShapeToPath: true}, + {sortAttrs: true}, + {removeDimensions: false}, + {removeAttrs: {attrs: "(stroke|fill)"}} + ] + }); + +var basepath = "./core/images/", + files = fs.readdirSync(basepath).sort(); + +files.forEach(function(filename) { + if(filename.slice(-4) === ".tid") { + var filepath = path.resolve(basepath,filename), + data = fs.readFileSync(filepath,"utf8"), + lines = data.split("\n"), + blankLine = lines.indexOf(""), + header = lines.slice(0,blankLine), + body = lines.slice(blankLine + 1), + fakeSVG = body.join("\n"); + // A hack to make the new-journal-button work + fakeSVG = fakeSVG.replace("<>","<<now "DD">>"); + svgo.optimize(fakeSVG, {path: filepath}).then(function(result) { + var newSVG = header.join("\n") + "\n\n" + result.data.replace("<<now "DD">>","<>"); + fs.writeFileSync(filepath,newSVG); + },function(err) { + console.log("Error " + err + " with " + filename) + process.exit(); + }); + } +});