Skip to content

Commit 7917b0c

Browse files
committed
Added api2
1 parent 2bad0a2 commit 7917b0c

13 files changed

+21196
-23
lines changed

index.js renamed to api1.js

File renamed without changes.

api2.js

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import React from 'react';
2+
3+
function css (className) {
4+
if (typeof className === 'function') {
5+
Object.defineProperty(className.prototype, 'render', {
6+
value: wrapper(className)
7+
});
8+
}
9+
}
10+
11+
function wrapper(className) {
12+
let fn = className.prototype.render;
13+
return function () {
14+
let rawCSS = className.prototype.css.apply(this, arguments);
15+
let style = parseCss(rawCSS);
16+
let renderedElement = fn.apply(this, arguments);
17+
let newProps = {...renderedElement.props, style};
18+
return React.cloneElement(renderedElement, newProps, renderedElement.props.children);
19+
}
20+
}
21+
22+
let camelCase = (key) => key.replace(/(\-[a-z])/g, $1 => $1.toUpperCase().replace('-',''));
23+
24+
let parseCss = (rawCSS) => {
25+
let styles = {};
26+
let rules = rawCSS.trim().split('\n');
27+
for (let rule of rules) {
28+
let [key, value] = rule.trim().replace(';', '').split(':');
29+
key = camelCase(key.trim());
30+
value = value.trim();
31+
styles[key] = value;
32+
}
33+
return styles;
34+
}
35+
36+
export default css;
File renamed without changes.

css2.js

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
7+
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
8+
9+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
10+
11+
var _react = require('react');
12+
13+
var _react2 = _interopRequireDefault(_react);
14+
15+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16+
17+
function css(className) {
18+
if (typeof className === 'function') {
19+
Object.defineProperty(className.prototype, 'render', {
20+
value: wrapper(className)
21+
});
22+
}
23+
}
24+
25+
function wrapper(className) {
26+
var fn = className.prototype.render;
27+
return function () {
28+
var rawCSS = className.prototype.css.apply(this, arguments);
29+
var style = parseCss(rawCSS);
30+
var renderedElement = fn.apply(this, arguments);
31+
var newProps = _extends({}, renderedElement.props, { style: style });
32+
return _react2.default.cloneElement(renderedElement, newProps, renderedElement.props.children);
33+
};
34+
}
35+
36+
var camelCase = function camelCase(key) {
37+
return key.replace(/(\-[a-z])/g, function ($1) {
38+
return $1.toUpperCase().replace('-', '');
39+
});
40+
};
41+
42+
var parseCss = function parseCss(rawCSS) {
43+
var styles = {};
44+
var rules = rawCSS.trim().split('\n');
45+
var _iteratorNormalCompletion = true;
46+
var _didIteratorError = false;
47+
var _iteratorError = undefined;
48+
49+
try {
50+
for (var _iterator = rules[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
51+
var rule = _step.value;
52+
53+
var _rule$trim$replace$sp = rule.trim().replace(';', '').split(':'),
54+
_rule$trim$replace$sp2 = _slicedToArray(_rule$trim$replace$sp, 2),
55+
key = _rule$trim$replace$sp2[0],
56+
value = _rule$trim$replace$sp2[1];
57+
58+
key = camelCase(key.trim());
59+
value = value.trim();
60+
styles[key] = value;
61+
}
62+
} catch (err) {
63+
_didIteratorError = true;
64+
_iteratorError = err;
65+
} finally {
66+
try {
67+
if (!_iteratorNormalCompletion && _iterator.return) {
68+
_iterator.return();
69+
}
70+
} finally {
71+
if (_didIteratorError) {
72+
throw _iteratorError;
73+
}
74+
}
75+
}
76+
77+
return styles;
78+
};
79+
80+
exports.default = css;

0 commit comments

Comments
 (0)