Skip to content

Commit 2be0b72

Browse files
committed
Debug.
1 parent c6b1097 commit 2be0b72

File tree

3 files changed

+157
-15
lines changed

3 files changed

+157
-15
lines changed

dist/index.js

Lines changed: 80 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,82 @@ var _reactDom = require('react-dom');
2222

2323
var _reactDom2 = _interopRequireDefault(_reactDom);
2424

25+
var _lodashLangIsArray = require('lodash/lang/isArray');
26+
27+
var _lodashLangIsArray2 = _interopRequireDefault(_lodashLangIsArray);
28+
29+
var unfreeze = undefined;
30+
31+
/**
32+
* Naive implementation of a method to unfreeze an object.
33+
*
34+
* @param {Object} source Frozen object.
35+
* @return {Object}
36+
*/
37+
unfreeze = function (source) {
38+
var property = undefined,
39+
target = undefined;
40+
41+
target = {};
42+
43+
for (property in source) {
44+
target[property] = source[property];
45+
}
46+
47+
return target;
48+
};
49+
2550
/**
2651
* @param {ReactClass} Target
2752
* @return {ReactClass}
2853
*/
2954

30-
exports['default'] = function (Target) {
55+
exports['default'] = function (Target, styles) {
56+
var linkClass = undefined;
57+
58+
/**
59+
* @param {ReactElement} element
60+
* @return {ReactElement}
61+
*/
62+
linkClass = function (element) {
63+
var isFrozen = undefined;
64+
65+
if (Object.isFrozen && Object.isFrozen(element)) {
66+
isFrozen = true;
67+
68+
// https://github.com/facebook/react/blob/v0.13.3/src/classic/element/ReactElement.js#L131
69+
element = unfreeze(element);
70+
element.props = unfreeze(element.props);
71+
}
72+
73+
if (element.props.className) {
74+
element.props.className = element.props.className.split(' ').map(function (className) {
75+
if (styles[className]) {
76+
return className + ' ' + styles[className];
77+
} else {
78+
return className;
79+
}
80+
}).join(' ');
81+
}
82+
83+
if ((0, _lodashLangIsArray2['default'])(element.props.children)) {
84+
element.props.children = element.props.children.map(function (node) {
85+
if (node instanceof element.constructor) {
86+
return changeClass(node);
87+
} else {
88+
return node;
89+
}
90+
});
91+
}
92+
93+
if (isFrozen) {
94+
Object.freeze(element);
95+
Object.freeze(element.props);
96+
}
97+
98+
return element;
99+
};
100+
31101
return (function (_React$Component) {
32102
_inherits(CSSModules, _React$Component);
33103

@@ -38,17 +108,18 @@ exports['default'] = function (Target) {
38108
}
39109

40110
_createClass(CSSModules, [{
111+
key: 'componentDidMount',
112+
value: function componentDidMount() {
113+
console.log('OK');
114+
}
115+
}, {
41116
key: 'render',
42117
value: function render() {
118+
// <Target />
43119
return _react2['default'].createElement(
44120
'div',
45-
null,
46-
_react2['default'].createElement(
47-
'p',
48-
null,
49-
'test'
50-
),
51-
_react2['default'].createElement(Target, this.props)
121+
{ ref: 'test' },
122+
'test'
52123
);
53124
}
54125
}]);
@@ -57,4 +128,4 @@ exports['default'] = function (Target) {
57128
})(_react2['default'].Component);
58129
};
59130

60-
module.exports = exports['default'];
131+
module.exports = exports['default'];

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,8 @@
2121
"peerDependencies": {
2222
"react": "^0.14.0-beta3",
2323
"react-dom": "^0.14.0-beta3"
24+
},
25+
"dependencies": {
26+
"lodash": "^3.10.1"
2427
}
2528
}

src/index.js

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,85 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
3+
import isArray from 'lodash/lang/isArray';
4+
5+
let unfreeze;
6+
7+
/**
8+
* Naive implementation of a method to unfreeze an object.
9+
*
10+
* @param {Object} source Frozen object.
11+
* @return {Object}
12+
*/
13+
unfreeze = (source) => {
14+
let property,
15+
target;
16+
17+
target = {};
18+
19+
for (property in source) {
20+
target[property] = source[property];
21+
}
22+
23+
return target;
24+
};
325

426
/**
527
* @param {ReactClass} Target
628
* @return {ReactClass}
729
*/
8-
export default (Target) => {
30+
export default (Target, styles) => {
31+
let linkClass;
32+
33+
/**
34+
* @param {ReactElement} element
35+
* @return {ReactElement}
36+
*/
37+
linkClass = (element) => {
38+
let isFrozen;
39+
40+
if (Object.isFrozen && Object.isFrozen(element)) {
41+
isFrozen = true;
42+
43+
// https://github.com/facebook/react/blob/v0.13.3/src/classic/element/ReactElement.js#L131
44+
element = unfreeze(element);
45+
element.props = unfreeze(element.props);
46+
}
47+
48+
if (element.props.className) {
49+
element.props.className = element.props.className.split(' ').map((className) => {
50+
if (styles[className]) {
51+
return `${className} ${styles[className]}`;
52+
} else {
53+
return className;
54+
}
55+
}).join(' ');
56+
}
57+
58+
if (isArray(element.props.children)) {
59+
element.props.children = element.props.children.map((node) => {
60+
if (node instanceof element.constructor) {
61+
return changeClass(node);
62+
} else {
63+
return node;
64+
}
65+
});
66+
}
67+
68+
if (isFrozen) {
69+
Object.freeze(element);
70+
Object.freeze(element.props);
71+
}
72+
73+
return element;
74+
};
75+
976
return class CSSModules extends React.Component {
10-
render() {
11-
return <div>
12-
<p>test</p>
13-
<Target {... this.props} />
14-
</div>;
77+
componentDidMount () {
78+
console.log('OK');
79+
}
80+
render () {
81+
// <Target />
82+
return <div ref='test'>test</div>;
1583
}
1684
}
1785
};

0 commit comments

Comments
 (0)