v1.0 First Commit

This commit is contained in:
sharpshark28 2017-04-25 07:01:39 -05:00
commit ff2bc6ac3a
5 changed files with 257 additions and 0 deletions

116
.gitignore vendored Normal file
View file

@ -0,0 +1,116 @@
# Created by https://www.gitignore.io/api/osx,node,windows
### Dont Ship any SVGs
.svg
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
### OSX ###
*.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### Windows ###
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# End of https://www.gitignore.io/api/osx,node,windows

40
README.md Normal file
View file

@ -0,0 +1,40 @@
# svgdir2sprite
Creates a spritesheet from a directory of svgs. Can return the results directly or write to a spritesheet svg file. Node based and powered by [svg2sprite](https://github.com/mrmlnc/svg2sprite).
## As a Module
`npm install --save svgdir2sprite`
### Return SVG Spritesheet as String
``` javascript
const svgdir2sprite = require('svgdir2sprite');
svgdir2sprite('./src/svgs') // Async Promise
.then((svgContent) => console.log(svgContent));
```
### Write SVG Spritesheet to File
``` javascript
const svgdir2sprite = require('svgdir2sprite');
svgdir2sprite('./src/svgs', './build/spritesheet.svg');
```
## From the CLI
`npm install -g blabber-comic`
### Return SVG Spritesheet to the Console
``` bash
svgdir2sprite ./src/svgs
```
### Write SVG Spritesheet to File
``` bash
svgdir2sprite ./src/svgs ./build/spritesheet.svg
```

24
cli.js Normal file
View file

@ -0,0 +1,24 @@
#!/usr/bin/env node
'use strict';
const svgdir2sprite = require('./');
const argv = require('yargs')
.demandCommand(1, 'Warning: Please set a source directory for loose svg\'s')
.example('$0 ./svgs', ':: Output to console')
.example('$0 ./svgs ./build/file.svg', ':: Output to file')
.alias('help', 'h')
.help()
.version()
.wrap(process.stdout.columns)
.argv;
let [src, dest] = argv._;
svgdir2sprite(src, dest)
.then((svgContents) => {
if (dest) {
console.log('Spritesheet successfully generated as ' + dest);
} else {
console.log(svgContents);
}
});

50
index.js Normal file
View file

@ -0,0 +1,50 @@
const fs = require('fs');
const async = require('async');
const svgSprite = require('svg2sprite');
const sprite = svgSprite.collection();
const isSVG = (filename) => filename.split('.').pop() === 'svg';
const iconName = (filename) => filename.split('.')[0];
function saveSpritesheet(path, spritesheet) {
if(path.indexOf('.svg') === -1) throw 'Error: Please specify a filename ending with .svg';
fs.writeFile(path, spritesheet, (error) => { if (error) throw error });
}
function readSprite(filename, file) {
sprite.add(iconName(filename), `<svg>${file}</svg>`);
}
function allSpritesRead(pathBuild) {
let spritesheet = sprite.compile();
if (pathBuild) {
saveSpritesheet(pathBuild, spritesheet);
}
return spritesheet;
}
function generate(pathSrc, pathBuild) {
return new Promise((resolve, reject) => {
fs.readdir(pathSrc, (error, filenames) => {
if (error) reject(error);
async.eachSeries(filenames.filter(isSVG), (filename, cb) => {
fs.readFile(pathSrc + filename, (error, fileData) => {
if (error) reject(error);
readSprite(filename, fileData);
cb(fileData);
});
}, (error) => {
if (error) reject(error);
resolve(allSpritesRead(pathBuild));
});
});
});
}
module.exports = generate;

27
package.json Normal file
View file

@ -0,0 +1,27 @@
{
"name": "svgdir2sprite",
"version": "1.0.0",
"description": "Creates a spritesheet from a directory of svgs.",
"repository": "sharpshark28/svgdir2sprite",
"main": "index.js",
"bin": {
"svgdir2sprite": "./cli.js"
},
"keywords": [
"svg",
"symbol",
"sprite",
"spritesheet",
"generator",
"icon",
"icons"
],
"author": "Joe Wroten <sharpshark28@gmail.com> (http://joewroten.com/)",
"license": "MIT",
"dependencies": {
"async": "^2.3.0",
"fs": "0.0.1-security",
"svg2sprite": "^2.0.1",
"yargs": "^7.1.0"
}
}