Skip to content

Commit 91277ff

Browse files
committed
Merge pull request #3 from andersaloof/master
Prevents stripping of dashed attributes and camelCases them
2 parents 9c774b5 + 1c2fa93 commit 91277ff

4 files changed

Lines changed: 39 additions & 8 deletions

File tree

index.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,15 @@ var templates = ['all', 'svg', 'icon'],
1212

1313
var settings = {
1414
babel: {},
15-
svgo : {}
15+
svgo : {
16+
plugins: [
17+
{
18+
removeViewBox: false
19+
}, {
20+
removeUselessStrokeAndFill: false
21+
}
22+
]
23+
}
1624
};
1725

1826
var isSVG = function (filename) {
@@ -42,12 +50,10 @@ var type = 'svg',
4250
var transform = function (filename) {
4351

4452
var write = function (buffer) {
45-
4653
data += buffer;
4754
};
4855

4956
var end = function () {
50-
5157
svgo.optimize(data, out);
5258
};
5359

@@ -56,6 +62,14 @@ var transform = function (filename) {
5662
var source = render(filename, svg.data),
5763
output = babel.transform(source, settings.babel);
5864

65+
var replaceAttribute = function (a, str) {
66+
return str.replace(/-(.)/g, function (_, letter) {
67+
return letter.toUpperCase();
68+
});
69+
};
70+
71+
output.code = output.code.replace(/\"(clip-path|fill-opacity|font-family|font-size|marker-end|marker-mid|marker-start|stop-color|stop-opacity|stroke-width|stroke-linecap|stroke-dasharray|stroke-opacity|text-anchor)\"/g, replaceAttribute);
72+
5973
stream.queue(output.code);
6074
stream.queue(null);
6175
};

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"dependencies" : {
2121
"through" : "2.3",
2222
"react" : "0.14",
23+
"react-addons-test-utils": "0.14",
2324
"babel" : "5.8",
2425
"svgo" : "0.5",
2526
"extend" : "3.0",

test/main.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
var React = require('react/addons'),
2-
TestUtils = React.addons.TestUtils,
1+
var React = require('react'),
2+
TestUtils = require('react-addons-test-utils'),
33
fs = require('fs'),
44
vm = require('vm'),
55
path = require('path'),
@@ -160,4 +160,20 @@ describe('The app', function () {
160160
template: 'all',
161161
type : 'icon'
162162
}));
163-
});
163+
164+
it('should work for all template and camelize dashed element attributes', load('some.svg', function (svg) {
165+
166+
var component = React.createElement(svg, {
167+
type: 'svg'
168+
}),
169+
rendered = TestUtils.renderIntoDocument(component),
170+
path = TestUtils.findRenderedDOMComponentWithTag(rendered, 'path');
171+
172+
(rendered.getDOMNode().tagName.toLowerCase()).should.equal('svg');
173+
(rendered.getDOMNode().querySelector('path').getAttribute('d')).should.equal('M0 0h100v100H0z');
174+
(rendered.getDOMNode().querySelector('path').getAttribute('stroke-width')).should.equal('2.5');
175+
(rendered.getDOMNode().querySelector('path').getAttribute('clip-path')).should.equal('something');
176+
}, {
177+
template: 'all'
178+
}));
179+
});

test/svg/some.svg

Lines changed: 2 additions & 2 deletions
Loading

0 commit comments

Comments
 (0)