Skip to content

Commit 3ff2d94

Browse files
committed
Handle single text node.
1 parent 776d4c1 commit 3ff2d94

File tree

7 files changed

+73
-48
lines changed

7 files changed

+73
-48
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,11 @@
22

33
[![Travis build status](http://img.shields.io/travis/gajus/react-css-modules/master.svg?style=flat)](https://travis-ci.org/gajus/react-css-modules)
44
[![NPM version](http://img.shields.io/npm/v/react-css-modules.svg?style=flat)](https://www.npmjs.org/package/react-css-modules)
5+
6+
## Usage
7+
8+
First you need to setup [webpack](http://webpack.github.io/docs/) to load your css files using "css" loader and enable CSS modules. You will also need to use `extract-text-webpack-plugin` to construct the CSS file. Refer to [webpack-demo](https://github.com/css-modules/webpack-demo).
9+
10+
```js
11+
12+
```

dist/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var _linkClass2 = _interopRequireDefault(_linkClass);
2020

2121
/**
2222
* @param {ReactClass} Target
23-
* @param {Object} styles
23+
* @param {Object} styles {localClassName: 'generatedClassName'}
2424
* @return {ReactClass}
2525
*/
2626

dist/linkClass.js

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,6 @@ var _react = require('react');
1010

1111
var _react2 = _interopRequireDefault(_react);
1212

13-
var _lodashLangIsArray = require('lodash/lang/isArray');
14-
15-
var _lodashLangIsArray2 = _interopRequireDefault(_lodashLangIsArray);
16-
17-
var _lodashLangToarray = require('lodash/lang/toarray');
18-
19-
var _lodashLangToarray2 = _interopRequireDefault(_lodashLangToarray);
20-
2113
var linkClass = undefined;
2214

2315
/**
@@ -43,25 +35,37 @@ linkClass = function (element) {
4335
}).join(' ');
4436
}
4537

46-
childrenCount = _react2['default'].Children.count(element.props.children);
47-
48-
if (childrenCount > 1) {
49-
newChildren = [];
50-
51-
_react2['default'].Children.forEach(element.props.children, function (node) {
52-
if (_react2['default'].isValidElement(node)) {
53-
newChildren.push(linkClass(node, styles));
54-
} else {
55-
newChildren.push(node);
38+
// A child can be either an array, a sole object or a string.
39+
// <div>test</div>
40+
if (typeof element.props.children !== 'string') {
41+
childrenCount = _react2['default'].Children.count(element.props.children);
42+
43+
if (childrenCount > 1) {
44+
newChildren = [];
45+
46+
_react2['default'].Children.forEach(element.props.children, function (node) {
47+
if (_react2['default'].isValidElement(node)) {
48+
newChildren.push(linkClass(node, styles));
49+
} else {
50+
newChildren.push(node);
51+
}
52+
});
53+
54+
// Do not use React.Children.map.
55+
// For whatever reason React render multiple children as an array, while
56+
// React.Children.map generates an object.
57+
58+
/* newChildren = React.Children.map((node) => {
59+
if (React.isValidElement(node)) {
60+
return linkClass(node, styles);
61+
} else {
62+
return node;
63+
}
64+
}); */
65+
} else if (childrenCount === 1) {
66+
newChildren = linkClass(_react2['default'].Children.only(element.props.children), styles);
5667
}
57-
});
58-
59-
// Do not use React.Children.map.
60-
// For whatever reason React render multiple children as an array, while
61-
// React.Children.map generates an object.
62-
} else if (childrenCount === 1) {
63-
newChildren = linkClass(_react2['default'].Children.only(element.props.children), styles);
64-
} else {}
68+
}
6569

6670
if (newClassName) {
6771
newProps = {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"lodash": "^3.10.1"
2626
},
2727
"devDependencies": {
28+
"babel": "^5.8.21",
2829
"chai": "^3.2.0",
2930
"jsdom": "^6.2.0",
3031
"mocha": "^2.2.5",

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import linkClass from './linkClass';
22

33
/**
44
* @param {ReactClass} Target
5-
* @param {Object} styles
5+
* @param {Object} styles {localClassName: 'generatedClassName'}
66
* @return {ReactClass}
77
*/
88
export default (Target, styles) => {

src/linkClass.js

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import React from 'react';
2-
import isArray from 'lodash/lang/isArray';
3-
import toArray from 'lodash/lang/toarray';
42

53
let linkClass;
64

@@ -25,29 +23,39 @@ linkClass = (element, styles = {}) => {
2523
}).join(' ');
2624
}
2725

28-
childrenCount = React.Children.count(element.props.children);
26+
// A child can be either an array, a sole object or a string.
27+
// <div>test</div>
28+
if (typeof element.props.children !== 'string') {
29+
childrenCount = React.Children.count(element.props.children);
2930

30-
if (childrenCount > 1) {
31-
newChildren = [];
31+
if (childrenCount > 1) {
32+
newChildren = [];
3233

33-
React.Children.forEach(element.props.children, (node) => {
34-
if (React.isValidElement(node)) {
35-
newChildren.push(linkClass(node, styles));
36-
} else {
37-
newChildren.push(node);
38-
}
39-
});
34+
React.Children.forEach(element.props.children, (node) => {
35+
if (React.isValidElement(node)) {
36+
newChildren.push(linkClass(node, styles));
37+
} else {
38+
newChildren.push(node);
39+
}
40+
});
4041

41-
// Do not use React.Children.map.
42-
// For whatever reason React render multiple children as an array, while
43-
// React.Children.map generates an object.
44-
45-
} else if (childrenCount === 1) {
46-
newChildren = linkClass(React.Children.only(element.props.children), styles);
47-
} else {
42+
// Do not use React.Children.map.
43+
// For whatever reason React render multiple children as an array, while
44+
// React.Children.map generates an object.
4845

46+
/* newChildren = React.Children.map((node) => {
47+
if (React.isValidElement(node)) {
48+
return linkClass(node, styles);
49+
} else {
50+
return node;
51+
}
52+
}); */
53+
} else if (childrenCount === 1) {
54+
newChildren = linkClass(React.Children.only(element.props.children), styles);
55+
}
4956
}
5057

58+
5159
if (newClassName) {
5260
newProps = {
5361
className: newClassName

test/linkClass.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ describe('linkClass', () => {
1313
expect(linkClass(<div></div>)).to.deep.equal(<div></div>);
1414
});
1515

16-
it('does not affect element with a single child', () => {
16+
it('does not affect element with a single element child', () => {
1717
expect(linkClass(<div><p></p></div>)).to.deep.equal(<div><p></p></div>);
1818
});
1919

20+
it('does not affect element with a single text child', () => {
21+
expect(linkClass(<div>test</div>)).to.deep.equal(<div>test</div>);
22+
});
23+
2024
it('does not affect element with multiple children', () => {
2125
expect(linkClass(<div><p></p><p></p></div>)).to.deep.equal(<div><p></p><p></p></div>);
2226
});

0 commit comments

Comments
 (0)