spritesh 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/spritesh +1 -1
- data/bin/spritesh.js +126 -0
- metadata +5 -5
- data/bin/sprite.sh +0 -96
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c13c15fa2554bd54dc4bea931eb5ffbefee2449d
|
4
|
+
data.tar.gz: 79c8e42718a8ab903571f5f47ef5982e3c28a8de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55bca2537e5582d2a5109206efa3b4b19e97b30f8b5364dcc2e511259d92062c658e6113065958f42225ebd53312289fba4b2b901523282cc3bd523374a7eda9
|
7
|
+
data.tar.gz: 0625db59003a7cb6b6a92490bbf5c838b2a59ee85cb57a4b9ce92c31e1da27353a9fe24193703f742b0f1142bedc9cbdbacd1cb5c82e355061395cc8bd240952
|
data/bin/spritesh
CHANGED
data/bin/spritesh.js
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
const path = require('path');
|
4
|
+
const fs = require('fs-promise');
|
5
|
+
const program = require('commander');
|
6
|
+
const cheerio = require('cheerio');
|
7
|
+
|
8
|
+
program
|
9
|
+
.option('-i, --input [input]', 'Specifies input dir (current dir by default)')
|
10
|
+
.option('-o, --output [output]', 'Specifies output file ("./sprite.svg" by default)')
|
11
|
+
.option('-v, --viewbox [viewbox]', 'Specifies viewBox attribute (parsed by default)')
|
12
|
+
.option('-p, --prefix [prefix]', 'Specifies prefix for id attribute (none by default)')
|
13
|
+
.option('-q, --quiet', 'Disable informative output')
|
14
|
+
.parse(process.argv);
|
15
|
+
|
16
|
+
const SRC_FOLDER = program.input || '.';
|
17
|
+
const DEST_FILE = program.output || 'sprite.svg';
|
18
|
+
const ID_PREFIX = program.prefix || '';
|
19
|
+
const VIEWBOX = program.viewbox || null;
|
20
|
+
const QUIET = program.quiet || false;
|
21
|
+
|
22
|
+
const log = (message) => {
|
23
|
+
if (!QUIET) console.log(message);
|
24
|
+
};
|
25
|
+
|
26
|
+
const getSvgElement = (content) => {
|
27
|
+
const $ = cheerio.load(content);
|
28
|
+
return $('svg').first();
|
29
|
+
};
|
30
|
+
|
31
|
+
const getViewbox = (content) => {
|
32
|
+
return VIEWBOX || getSvgElement(content).attr('viewbox');
|
33
|
+
};
|
34
|
+
|
35
|
+
const getPreserveAspectRatio = (content) => {
|
36
|
+
return getSvgElement(content).attr('preserveaspectratio');
|
37
|
+
};
|
38
|
+
|
39
|
+
const constructId = (fileName) => {
|
40
|
+
return (ID_PREFIX + fileName).replace(' ', '-');
|
41
|
+
};
|
42
|
+
|
43
|
+
const constructAttributesString = (attributes) => {
|
44
|
+
return Object.keys(attributes).reduce((acc, key) => {
|
45
|
+
const value = attributes[key]
|
46
|
+
return value
|
47
|
+
? `${acc} ${key}='${value}'`
|
48
|
+
: acc;
|
49
|
+
}, '');
|
50
|
+
};
|
51
|
+
|
52
|
+
const getSvgContent = (content) => {
|
53
|
+
return getSvgElement(content).html();
|
54
|
+
};
|
55
|
+
|
56
|
+
const createSymbol = (content, attributes) => {
|
57
|
+
return `<symbol ${constructAttributesString(attributes)}>
|
58
|
+
${getSvgContent(content)}
|
59
|
+
</symbol>`;
|
60
|
+
};
|
61
|
+
|
62
|
+
const wrapFile = (fileName, content) => {
|
63
|
+
const attributes = {
|
64
|
+
viewBox: getViewbox(content),
|
65
|
+
id: constructId(fileName),
|
66
|
+
preserveAspectRatio: getPreserveAspectRatio(content)
|
67
|
+
};
|
68
|
+
|
69
|
+
log(`Processing ‘${fileName}’ (viewBox ‘${attributes.viewBox}’)…`);
|
70
|
+
|
71
|
+
return createSymbol(content, attributes);
|
72
|
+
};
|
73
|
+
|
74
|
+
const processFile = (file) => {
|
75
|
+
const filePath = path.resolve(SRC_FOLDER, file);
|
76
|
+
const fileName = path.basename(file, path.extname(file));
|
77
|
+
const wrapContent = wrapFile.bind(null, fileName);
|
78
|
+
|
79
|
+
return fs.readFile(filePath, 'utf8').then(wrapContent);
|
80
|
+
};
|
81
|
+
|
82
|
+
const removeDestFile = () => {
|
83
|
+
return fs.remove(DEST_FILE);
|
84
|
+
};
|
85
|
+
|
86
|
+
const readSrcFolder = (foo) => {
|
87
|
+
return fs.readdir(SRC_FOLDER);
|
88
|
+
};
|
89
|
+
|
90
|
+
const processFiles = (files) => {
|
91
|
+
const processedFiles = files
|
92
|
+
.filter(filterFile)
|
93
|
+
.map(processFile);
|
94
|
+
|
95
|
+
return Promise.all(processedFiles);
|
96
|
+
};
|
97
|
+
|
98
|
+
const filterFile = (file) => {
|
99
|
+
return path.extname(file) === '.svg';
|
100
|
+
};
|
101
|
+
|
102
|
+
const getSpriteContent = (contents) => {
|
103
|
+
return '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none">'
|
104
|
+
+ contents.join('')
|
105
|
+
+ '</svg>';
|
106
|
+
};
|
107
|
+
|
108
|
+
const writeDestFile = (content) => {
|
109
|
+
return fs.writeFile(DEST_FILE, content, 'utf8');
|
110
|
+
};
|
111
|
+
|
112
|
+
const printFinish = () => {
|
113
|
+
log(`File ‘${DEST_FILE}’ successfully generated.`);
|
114
|
+
};
|
115
|
+
|
116
|
+
const catchErrors = (err) => {
|
117
|
+
throw err;
|
118
|
+
};
|
119
|
+
|
120
|
+
removeDestFile()
|
121
|
+
.then(readSrcFolder)
|
122
|
+
.then(processFiles)
|
123
|
+
.then(getSpriteContent)
|
124
|
+
.then(writeDestFile)
|
125
|
+
.then(printFinish)
|
126
|
+
.catch(catchErrors);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spritesh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hugo Giraudel
|
@@ -9,9 +9,9 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-05-
|
12
|
+
date: 2016-05-09 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description: A
|
14
|
+
description: A script to build a SVG sprite from a folder of SVG files (typically
|
15
15
|
icons).
|
16
16
|
email:
|
17
17
|
- h.giraudel@de.edenspiekermann.com
|
@@ -21,8 +21,8 @@ executables:
|
|
21
21
|
extensions: []
|
22
22
|
extra_rdoc_files: []
|
23
23
|
files:
|
24
|
-
- bin/sprite.sh
|
25
24
|
- bin/spritesh
|
25
|
+
- bin/spritesh.js
|
26
26
|
homepage: https://github.com/edenspiekermann/sprite.sh
|
27
27
|
licenses:
|
28
28
|
- MIT
|
@@ -43,7 +43,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
43
|
version: '0'
|
44
44
|
requirements: []
|
45
45
|
rubyforge_project:
|
46
|
-
rubygems_version: 2.
|
46
|
+
rubygems_version: 2.4.3
|
47
47
|
signing_key:
|
48
48
|
specification_version: 4
|
49
49
|
summary: Build an SVG sprite from a folder of SVG files.
|
data/bin/sprite.sh
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
|
3
|
-
PROGNAME="${0##*/}"
|
4
|
-
SRC_FOLDER="."
|
5
|
-
DEST_FILE="sprite.svg"
|
6
|
-
ID_PREFIX=""
|
7
|
-
QUIET="0"
|
8
|
-
|
9
|
-
usage()
|
10
|
-
{
|
11
|
-
cat <<EO
|
12
|
-
Usage: $PROGNAME [options]
|
13
|
-
Script to build a SVG sprite from a folder of SVG files.
|
14
|
-
Options:
|
15
|
-
EO
|
16
|
-
cat <<EO | column -s\& -t
|
17
|
-
-h, --help & Shows this help
|
18
|
-
-q, --quiet & Disables informative output
|
19
|
-
-i, --input [dir] & Specifies input dir (current dir by default)
|
20
|
-
-o, --output [file] & Specifies output file ("./sprite.svg" by default)
|
21
|
-
-v, --viewbox [str] & Specifies viewBox attribute (parsed by default)
|
22
|
-
-p, --prefix [str] & Specifies prefix for id attribute (none by default)
|
23
|
-
EO
|
24
|
-
}
|
25
|
-
|
26
|
-
echo_verbose ()
|
27
|
-
{
|
28
|
-
if [ "$QUIET" == "0" ]; then
|
29
|
-
echo "$1"
|
30
|
-
fi
|
31
|
-
}
|
32
|
-
|
33
|
-
clean ()
|
34
|
-
{
|
35
|
-
rm -rf "$DEST_FILE"
|
36
|
-
}
|
37
|
-
|
38
|
-
main ()
|
39
|
-
{
|
40
|
-
for f in "$SRC_FOLDER"/*.svg; do
|
41
|
-
if [ -f "$f" ]; then
|
42
|
-
NAME="$(basename "$f" .svg)"
|
43
|
-
VIEWBOX="${VIEWBOX_SIZE:-$(sed -n -E 's/.*viewBox="([^"]+)".*/\1/p' "$f")}"
|
44
|
-
ID="$(echo "$ID_PREFIX$NAME" | tr ' ' '-')"
|
45
|
-
|
46
|
-
echo_verbose "Processing \`$f\` (viewBox \`$VIEWBOX\`)…"
|
47
|
-
echo "<symbol id='$ID' viewBox='$VIEWBOX'>$(perl -pe 's/\s*?<\/??svg.*?>\s*?\n//gi' "$f")</symbol>" >> "$DEST_FILE"
|
48
|
-
fi
|
49
|
-
done
|
50
|
-
|
51
|
-
if [ -f "$DEST_FILE" ]; then
|
52
|
-
awk 'BEGIN{print "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"display:none\">"}{print}END{print "</svg>"}' "$DEST_FILE" > .spritesh && mv .spritesh "$DEST_FILE"
|
53
|
-
fi
|
54
|
-
}
|
55
|
-
|
56
|
-
# Grabbing options
|
57
|
-
while [[ $# > 0 ]]; do
|
58
|
-
key="$1"
|
59
|
-
case "$key" in
|
60
|
-
-h|--help)
|
61
|
-
usage
|
62
|
-
exit 0
|
63
|
-
;;
|
64
|
-
-i|--input)
|
65
|
-
SRC_FOLDER="$2"
|
66
|
-
shift
|
67
|
-
;;
|
68
|
-
-o|--output)
|
69
|
-
DEST_FILE="$2"
|
70
|
-
shift
|
71
|
-
;;
|
72
|
-
-v|--viewbox)
|
73
|
-
VIEWBOX_SIZE="$2"
|
74
|
-
shift
|
75
|
-
;;
|
76
|
-
-p|--prefix)
|
77
|
-
ID_PREFIX="$2"
|
78
|
-
shift
|
79
|
-
;;
|
80
|
-
-q|--quiet)
|
81
|
-
QUIET="1"
|
82
|
-
;;
|
83
|
-
*)
|
84
|
-
;;
|
85
|
-
esac
|
86
|
-
shift
|
87
|
-
done
|
88
|
-
|
89
|
-
clean
|
90
|
-
main
|
91
|
-
|
92
|
-
if [ -f "$DEST_FILE" ]; then
|
93
|
-
echo_verbose "File \`$DEST_FILE\` successfully generated."
|
94
|
-
else
|
95
|
-
echo_verbose "Could not generated \`$DEST_FILE\`. Are there any SVG file in \`$SRC_FOLDER\` folder?"
|
96
|
-
fi
|