OLD | NEW |
(Empty) | |
| 1 var fs = require('fs'); |
| 2 var path = require('path'); |
| 3 var SVGSprite = require('./SVGSprite'); |
| 4 var Packer = require('./Packer'); |
| 5 var DevToolsDescriptors = require('./DevToolsDescriptors'); |
| 6 |
| 7 var timestamp = 0; |
| 8 function markStart() { |
| 9 timestamp = Date.now(); |
| 10 } |
| 11 function markEnd(label) { |
| 12 console.log('==> ' + label + ': ' + (Date.now() - timestamp) + 'ms'); |
| 13 } |
| 14 |
| 15 /** |
| 16 * @param {string} directoryPath |
| 17 * @param {number} padding |
| 18 * @param {string} outputSVGPath |
| 19 * @param {string} outputJSPath |
| 20 */ |
| 21 module.exports = function(directoryPath, padding, outputSVGPath, outputJSPath) { |
| 22 // 1. Read all the svg files from given directory. |
| 23 markStart(); |
| 24 var svgFilePaths = fs.readdirSync(directoryPath) |
| 25 .filter(file => path.extname(file) === '.svg') |
| 26 .map(fileName => path.join(directoryPath, fileName)); |
| 27 |
| 28 var sprites = []; |
| 29 var spritesArea = 0; |
| 30 for (var filePath of svgFilePaths) { |
| 31 var sprite = SVGSprite.loadFromFile(filePath); |
| 32 spritesArea += sprite.width * sprite.height; |
| 33 sprites.push(sprite); |
| 34 } |
| 35 markEnd('Loaded ' + svgFilePaths.length + ' files'); |
| 36 |
| 37 // 2. Iterate over different sprite compositions to find best. |
| 38 markStart(); |
| 39 var bestStyleSheet = null; |
| 40 var bestCoverage = 0; |
| 41 for (var sortOrderName in Packer.SpriteSortOrder) { |
| 42 var sortOrder = Packer.SpriteSortOrder[sortOrderName]; |
| 43 var spriteSheet = Packer.packSprites(sprites, sortOrder, padding, padding); |
| 44 var coverage = spritesArea / (spriteSheet.width() * spriteSheet.height()); |
| 45 if (!bestStyleSheet || coverage > bestCoverage) { |
| 46 bestStyleSheet = spriteSheet; |
| 47 bestCoverage = coverage; |
| 48 } |
| 49 } |
| 50 markEnd( |
| 51 'Created spritesheet ' + bestStyleSheet.width() + 'x' + bestStyleSheet.hei
ght() + ' with ' + |
| 52 ((bestCoverage * 10000 | 0) / 100) + '% coverage'); |
| 53 |
| 54 // 3. Write results to disk |
| 55 fs.writeFileSync(outputSVGPath, bestStyleSheet.svgText()); |
| 56 fs.writeFileSync(outputJSPath, DevToolsDescriptors.generateJS(bestStyleSheet))
; |
| 57 } |
OLD | NEW |