From 21fe57393c0d05892efb8a186b987dbaba413fb6 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 4 Dec 2015 11:02:43 +0000 Subject: [PATCH 001/149] Updated ignore definition. --- .gitignore | 7 ++++++- .npmignore | 4 +--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index fa88f70..14e7b61 100755 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,9 @@ node_modules coverage -.coveralls.yml +dist *.log +.* +!.gitignore +!.npmignore +!.babelrc +!.travis.yml diff --git a/.npmignore b/.npmignore index 4f341b3..e8add85 100755 --- a/.npmignore +++ b/.npmignore @@ -1,7 +1,5 @@ src tests coverage -.coveralls.yml -.travis.yml -.eslintrc +.* *.log From 2c24b61ee55edd3f49da8db6e3071be7c6dfad5b Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 4 Dec 2015 11:38:45 +0000 Subject: [PATCH 002/149] Meeting the updated linting requirements. --- .babelrc | 3 --- README.md | 1 - package.json | 21 +++++++++++--------- src/extendReactClass.js | 2 ++ src/index.js | 5 +++-- src/isIterable.js | 35 ++++++++++++++++++++++++++-------- src/linkClass.js | 16 +++++++--------- src/makeConfiguration.js | 8 ++++---- src/wrapStatelessFunction.js | 2 ++ tests/extendReactClass.js | 10 +--------- tests/linkClass.js | 18 +++++------------ tests/mocha.opts | 1 - tests/reactCssModules.js | 17 +++++++++++------ tests/wrapStatelessFunction.js | 7 +++++-- 14 files changed, 79 insertions(+), 67 deletions(-) delete mode 100644 .babelrc delete mode 100644 tests/mocha.opts diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 12606a3..0000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "stage": 0 -} diff --git a/README.md b/README.md index 362e693..3d3a19b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![Travis build status](http://img.shields.io/travis/gajus/react-css-modules/master.svg?style=flat)](https://travis-ci.org/gajus/react-css-modules) [![NPM version](http://img.shields.io/npm/v/react-css-modules.svg?style=flat)](https://www.npmjs.org/package/react-css-modules) -[![Coverage Status](https://coveralls.io/repos/gajus/react-css-modules/badge.svg?branch=master&service=github)](https://coveralls.io/github/gajus/react-css-modules?branch=master) diff --git a/package.json b/package.json index ca140d3..5c519f5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-css-modules", "description": "Seamless mapping of class names to CSS modules inside of React components.", - "main": "./dist/index.js", + "main": "./dist/", "repository": { "type": "git", "url": "https://github.com/gajus/react-css-modules" @@ -15,7 +15,7 @@ "version": "3.6.1", "author": { "name": "Gajus Kuizinas", - "email": "gk@anuary.com", + "email": "gajus@gajus.com", "url": "http://gajus.com" }, "license": "BSD-3-Clause", @@ -23,17 +23,20 @@ "lodash": "^3.10.1" }, "devDependencies": { - "chai": "^3.4.0", - "coveralls": "^2.11.4", - "jsdom": "^7.0.2", - "pragmatist": "^1.1.5", - "react": "^0.14.0", - "react-addons-test-utils": "^0.14.0" + "chai": "^3.4.1", + "jsdom": "^7.1.1", + "pragmatist": "^1.9.4", + "react": "^0.14.3", + "react-addons-test-utils": "^0.14.3" }, "scripts": { "pragmatist": "node ./node_modules/.bin/pragmatist", "lint": "npm run pragmatist lint", + "test": "npm run pragmatist test", "build": "npm run pragmatist build", - "test": "npm run pragmatist test && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls" + "watch": "npm run pragmatist watch", + "watch-lint": "npm run pragmatist watch-lint", + "watch-test": "npm run pragmatist watch-test", + "watch-build": "npm run pragmatist watch-build" } } diff --git a/src/extendReactClass.js b/src/extendReactClass.js index 4ff5114..556334d 100644 --- a/src/extendReactClass.js +++ b/src/extendReactClass.js @@ -1,3 +1,5 @@ +/* eslint-disable react/prop-types */ + import linkClass from './linkClass'; import React from 'react'; import _ from 'lodash'; diff --git a/src/index.js b/src/index.js index 9f1ff1e..9e8c274 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,4 @@ +import _ from 'lodash'; import extendReactClass from './extendReactClass'; import wrapStatelessFunction from './wrapStatelessFunction'; @@ -12,7 +13,7 @@ let decoratorConstructor, * @return {boolean} */ isReactComponent = (Component) => { - return 'prototype' in Component && typeof Component.prototype.render === 'function'; + return 'prototype' in Component && _.isFunction(Component.prototype.render); }; /** @@ -55,7 +56,7 @@ decoratorConstructor = (defaultStyles, options) => { }; export default (...args) => { - if (typeof args[0] === 'function') { + if (_.isFunction(args[0])) { return functionConstructor(args[0], args[1], args[2]); } else { return decoratorConstructor(args[0], args[1]); diff --git a/src/isIterable.js b/src/isIterable.js index 2a5b74c..9e4c449 100644 --- a/src/isIterable.js +++ b/src/isIterable.js @@ -1,10 +1,29 @@ -import { isObject } from 'lodash'; +import _ from 'lodash'; -const ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; -const OLD_ITERATOR_SYMBOL = '@@iterator'; +let ITERATOR_SYMBOL, + OLD_ITERATOR_SYMBOL; -export default function isIterable(obj) { - return isObject(obj) && - typeof ((ITERATOR_SYMBOL && obj[ITERATOR_SYMBOL]) - || obj[OLD_ITERATOR_SYMBOL]) === 'function'; -} +ITERATOR_SYMBOL = _.isFunction(Symbol) && Symbol.iterator; +OLD_ITERATOR_SYMBOL = '@@iterator'; + +/** + * @see https://github.com/lodash/lodash/issues/1668 + * @see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols + * @param {Object} target + * @returns {boolean} + */ +export default (target) => { + let iterator; + + if (!_.isObject(target)) { + return false; + } + + if (ITERATOR_SYMBOL) { + iterator = target[ITERATOR_SYMBOL]; + } else { + iterator = target[OLD_ITERATOR_SYMBOL]; + } + + return _.isFunction(iterator); +}; diff --git a/src/linkClass.js b/src/linkClass.js index 58dd47a..ce824e2 100644 --- a/src/linkClass.js +++ b/src/linkClass.js @@ -34,24 +34,22 @@ linkClass = (element, styles = {}, userConfiguration) => { styleNames = _.filter(styleNames); if (configuration.allowMultiple === false && styleNames.length > 1) { - throw new Error(`ReactElement styleName property defines multiple module names ("${element.props.styleName}").`); + throw new Error('ReactElement styleName property defines multiple module names ("' + element.props.styleName + '").'); } - appendClassName = styleNames.map((styleName) => { + appendClassName = _.map(styleNames, (styleName) => { if (styles[styleName]) { return styles[styleName]; } else { if (configuration.errorWhenNotFound === true) { - throw new Error(`"${styleName}" CSS module is undefined.`); + throw new Error('"' + styleName + '" CSS module is undefined.'); } return ''; } }); - appendClassName = appendClassName.filter((className) => { - return className.length; - }); + appendClassName = _.filter(appendClassName, 'length'); appendClassName = appendClassName.join(' '); } @@ -62,14 +60,14 @@ linkClass = (element, styles = {}, userConfiguration) => { // [ReactElement, 'text'] // ReactElement - // console.log(`element.props.children`, element.props.children, `React.Children.count(element.props.children)`, React.Children.count(element.props.children)); - children = element.props.children; if (React.isValidElement(children)) { newChildren = linkClass(React.Children.only(children), styles, configuration); } else if (_.isArray(children) || isIterable(children)) { + /* eslint-disable lodash3/prefer-lodash-method */ newChildren = React.Children.map(children, (node) => { + /* eslint-enable lodash3/prefer-lodash-method */ if (React.isValidElement(node)) { return linkClass(node, styles, configuration); } else { @@ -85,7 +83,7 @@ linkClass = (element, styles = {}, userConfiguration) => { if (appendClassName) { if (element.props.className) { - appendClassName = `${element.props.className} ${appendClassName}`; + appendClassName = element.props.className + ' ' + appendClassName; } newProps = { diff --git a/src/makeConfiguration.js b/src/makeConfiguration.js index dae8ca5..292e2f1 100644 --- a/src/makeConfiguration.js +++ b/src/makeConfiguration.js @@ -20,12 +20,12 @@ export default (userConfiguration = {}) => { }; _.forEach(userConfiguration, (value, name) => { - if (typeof configuration[name] === 'undefined') { - throw new Error(`Unknown configuration property "${name}".`); + if (_.isUndefined(configuration[name])) { + throw new Error('Unknown configuration property "' + name + '".'); } - if (typeof value !== 'boolean') { - throw new Error(`"${name}" property value must be a boolean.`); + if (!_.isBoolean(value)) { + throw new Error('"' + name + '" property value must be a boolean.'); } configuration[name] = value; diff --git a/src/wrapStatelessFunction.js b/src/wrapStatelessFunction.js index cacf1e4..342d724 100644 --- a/src/wrapStatelessFunction.js +++ b/src/wrapStatelessFunction.js @@ -1,3 +1,5 @@ +/* eslint-disable react/prop-types */ + import linkClass from './linkClass'; import React from 'react'; import _ from 'lodash'; diff --git a/tests/extendReactClass.js b/tests/extendReactClass.js index 2b32174..7f269dc 100644 --- a/tests/extendReactClass.js +++ b/tests/extendReactClass.js @@ -11,15 +11,7 @@ import extendReactClass from './../src/extendReactClass'; describe('extendReactClass', () => { beforeEach(() => { - global.document = jsdom.jsdom(` - - - - - - - - `); + global.document = jsdom.jsdom(''); global.window = document.defaultView; }); diff --git a/tests/linkClass.js b/tests/linkClass.js index e0778a8..1aa28f3 100644 --- a/tests/linkClass.js +++ b/tests/linkClass.js @@ -110,11 +110,12 @@ describe('linkClass', () => { }); context('when multiple descendants have styleName and are iterable', () => { it('assigns a generated className', () => { - let subject, iterable; + let iterable, + subject; iterable = { - 0:

, - 1:

, + 0:

, + 1:

, length: 2, [Symbol.iterator]: Array.prototype[Symbol.iterator] }; @@ -231,16 +232,7 @@ describe('linkClass', () => { nodeList; beforeEach(() => { - global.document = jsdom.jsdom(` - - - - - - - - `); - + global.document = jsdom.jsdom(''); global.window = document.defaultView; Foo = class extends React.Component { diff --git a/tests/mocha.opts b/tests/mocha.opts deleted file mode 100644 index 13374d0..0000000 --- a/tests/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---compilers js:babel/register diff --git a/tests/reactCssModules.js b/tests/reactCssModules.js index 685988f..3e911c8 100644 --- a/tests/reactCssModules.js +++ b/tests/reactCssModules.js @@ -1,4 +1,4 @@ -/* eslint-disable max-nested-callbacks */ +/* eslint-disable max-nested-callbacks, react/no-multi-comp */ import { expect @@ -13,9 +13,10 @@ describe('reactCssModules', () => { it('inherits displayName', () => { let Foo; - Foo = class extends React.Component { - static displayName = 'Bar'; - }; + Foo = class extends React.Component {}; + + // @todo https://phabricator.babeljs.io/T2779 + Foo.displayName = 'Bar'; Foo = reactCssModules(Foo); @@ -67,7 +68,9 @@ describe('reactCssModules', () => { shallowRenderer = TestUtils.createRenderer(); - Foo = () =>
Hello
; + Foo = () => { + return
Hello
; + }; Foo = reactCssModules(Foo, { foo: 'foo-1' @@ -116,7 +119,9 @@ describe('reactCssModules', () => { shallowRenderer = TestUtils.createRenderer(); - Foo = () => null; + Foo = () => { + return null; + }; Foo = reactCssModules(Foo, { foo: 'foo-1' diff --git a/tests/wrapStatelessFunction.js b/tests/wrapStatelessFunction.js index 44d027f..f66c43e 100644 --- a/tests/wrapStatelessFunction.js +++ b/tests/wrapStatelessFunction.js @@ -14,7 +14,10 @@ describe('wrapStatelessFunction', () => { foo: 'foo-1' }; - Component = function InnerComponent () { return null; }; + Component = function InnerComponent () { + return null; + }; + Component.propTypes = {}; Component.defaultProps = {}; @@ -64,7 +67,7 @@ describe('wrapStatelessFunction', () => { expect(props.styles).to.equal(styles); done(); })({ - styles: styles + styles }); }); }); From b15ef858242e0e183d74ea31e02890a37d76c976 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 4 Dec 2015 11:38:50 +0000 Subject: [PATCH 003/149] 3.6.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c519f5..6af34c4 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "css", "modules" ], - "version": "3.6.1", + "version": "3.6.2", "author": { "name": "Gajus Kuizinas", "email": "gajus@gajus.com", From ddb8828e08f2d9376bb724d918fe997c6ae5a5fd Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 4 Dec 2015 11:40:10 +0000 Subject: [PATCH 004/149] Do not include coveralls config. --- .coveralls.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .coveralls.yml diff --git a/.coveralls.yml b/.coveralls.yml deleted file mode 100644 index 65bf7c7..0000000 --- a/.coveralls.yml +++ /dev/null @@ -1 +0,0 @@ -repo_token: bqiXmaOA0xarSUociqxGKJ72bp8SSHlQC From 6917304d1c7ac4e86898b766fccf8d87dcd30798 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 4 Dec 2015 11:42:36 +0000 Subject: [PATCH 005/149] Icon style. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3d3a19b..88a335c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # React CSS Modules -[![Travis build status](http://img.shields.io/travis/gajus/react-css-modules/master.svg?style=flat)](https://travis-ci.org/gajus/react-css-modules) -[![NPM version](http://img.shields.io/npm/v/react-css-modules.svg?style=flat)](https://www.npmjs.org/package/react-css-modules) +[![Travis build status](http://img.shields.io/travis/gajus/react-css-modules/master.svg?style=flat-square)](https://travis-ci.org/gajus/react-css-modules) +[![NPM version](http://img.shields.io/npm/v/react-css-modules.svg?style=flat-square)](https://www.npmjs.org/package/react-css-modules) From 55bef97d8ac32aa04afc205f86f8a9154bd02b56 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 4 Dec 2015 15:33:50 +0000 Subject: [PATCH 006/149] Do not include ./dist in github. --- dist/extendReactClass.js | 85 -------------------- dist/extendReactClass.js.map | 1 - dist/index.js | 79 ------------------- dist/index.js.map | 1 - dist/linkClass.js | 125 ------------------------------ dist/linkClass.js.map | 1 - dist/makeConfiguration.js | 51 ------------ dist/makeConfiguration.js.map | 1 - dist/wrapStatelessFunction.js | 78 ------------------- dist/wrapStatelessFunction.js.map | 1 - 10 files changed, 423 deletions(-) delete mode 100644 dist/extendReactClass.js delete mode 100644 dist/extendReactClass.js.map delete mode 100644 dist/index.js delete mode 100644 dist/index.js.map delete mode 100644 dist/linkClass.js delete mode 100644 dist/linkClass.js.map delete mode 100644 dist/makeConfiguration.js delete mode 100644 dist/makeConfiguration.js.map delete mode 100644 dist/wrapStatelessFunction.js delete mode 100644 dist/wrapStatelessFunction.js.map diff --git a/dist/extendReactClass.js b/dist/extendReactClass.js deleted file mode 100644 index bec936c..0000000 --- a/dist/extendReactClass.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -var _lodashLangIsObject2 = require('lodash/lang/isObject'); - -var _lodashLangIsObject3 = _interopRequireDefault(_lodashLangIsObject2); - -var _lodashObjectAssign2 = require('lodash/object/assign'); - -var _lodashObjectAssign3 = _interopRequireDefault(_lodashObjectAssign2); - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - -function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var _linkClass = require('./linkClass'); - -var _linkClass2 = _interopRequireDefault(_linkClass); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var extendReactClass = undefined; - -/** - * @param {ReactClass} Component - * @param {Object} defaultStyles - * @param {Object} options - * @returns {ReactClass} - */ -extendReactClass = function (Component, defaultStyles, options) { - return (function (_Component) { - _inherits(_class, _Component); - - function _class() { - _classCallCheck(this, _class); - - _get(Object.getPrototypeOf(_class.prototype), 'constructor', this).apply(this, arguments); - } - - _createClass(_class, [{ - key: 'render', - value: function render() { - var renderResult = undefined, - styles = undefined; - - if (this.props.styles) { - styles = this.props.styles; - } else if ((0, _lodashLangIsObject3['default'])(defaultStyles)) { - this.props = (0, _lodashObjectAssign3['default'])({}, this.props, { - styles: defaultStyles - }); - - styles = defaultStyles; - } else { - styles = {}; - } - - renderResult = _get(Object.getPrototypeOf(_class.prototype), 'render', this).call(this); - - if (renderResult) { - return (0, _linkClass2['default'])(renderResult, styles, options); - } - - return _react2['default'].createElement('noscript'); - } - }]); - - return _class; - })(Component); -}; - -exports['default'] = extendReactClass; -module.exports = exports['default']; -//# sourceMappingURL=extendReactClass.js.map diff --git a/dist/extendReactClass.js.map b/dist/extendReactClass.js.map deleted file mode 100644 index 63c37a9..0000000 --- a/dist/extendReactClass.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["extendReactClass.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;yBAAsB,aAAa;;;;qBACjB,OAAO;;;;;;AAGzB,IAAI,gBAAgB,YAAA,CAAC;;;;;;;;AAQrB,gBAAgB,GAAG,UAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAK;AACtD;;;;;;;;;;;mBACW,kBAAG;AACN,oBAAI,YAAY,YAAA;oBACZ,MAAM,YAAA,CAAC;;AAEX,oBAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACnB,0BAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC9B,MAAM,IAAI,qCAAW,aAAa,CAAC,EAAE;AAClC,wBAAI,CAAC,KAAK,GAAG,qCAAS,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE;AAClC,8BAAM,EAAE,aAAa;qBACxB,CAAC,CAAC;;AAEH,0BAAM,GAAG,aAAa,CAAC;iBAC1B,MAAM;AACH,0BAAM,GAAG,EAAE,CAAC;iBACf;;AAED,4BAAY,2EAAiB,CAAC;;AAE9B,oBAAI,YAAY,EAAE;AACd,2BAAO,4BAAU,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;iBACnD;;AAED,uBAAO,mBAAM,aAAa,CAAC,UAAU,CAAC,CAAC;aAC1C;;;;OAxBgB,SAAS,EAyB5B;CACL,CAAC;;qBAEa,gBAAgB","file":"extendReactClass.js","sourcesContent":["import linkClass from './linkClass';\nimport React from 'react';\nimport _ from 'lodash';\n\nlet extendReactClass;\n\n/**\n * @param {ReactClass} Component\n * @param {Object} defaultStyles\n * @param {Object} options\n * @returns {ReactClass}\n */\nextendReactClass = (Component, defaultStyles, options) => {\n return class extends Component {\n render () {\n let renderResult,\n styles;\n\n if (this.props.styles) {\n styles = this.props.styles;\n } else if (_.isObject(defaultStyles)) {\n this.props = _.assign({}, this.props, {\n styles: defaultStyles\n });\n\n styles = defaultStyles;\n } else {\n styles = {};\n }\n\n renderResult = super.render();\n\n if (renderResult) {\n return linkClass(renderResult, styles, options);\n }\n\n return React.createElement('noscript');\n }\n };\n};\n\nexport default extendReactClass;\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index ef6b8b4..0000000 --- a/dist/index.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _extendReactClass = require('./extendReactClass'); - -var _extendReactClass2 = _interopRequireDefault(_extendReactClass); - -var _wrapStatelessFunction = require('./wrapStatelessFunction'); - -var _wrapStatelessFunction2 = _interopRequireDefault(_wrapStatelessFunction); - -var decoratorConstructor = undefined, - functionConstructor = undefined, - isReactComponent = undefined; - -/** - * Determines if the given object has the signature of a class that inherits React.Component. - * - * @param {*} Component - * @return {boolean} - */ -isReactComponent = function (Component) { - return 'prototype' in Component && typeof Component.prototype.render === 'function'; -}; - -/** - * When used as a function. - * - * @param {Function} Component - * @param {Object} defaultStyles CSS Modules class map. - * @param {Object} options {@link https://github.com/gajus/react-css-modules#options} - * @return {Function} - */ -functionConstructor = function (Component, defaultStyles, options) { - var decoratedClass = undefined; - - if (isReactComponent(Component)) { - decoratedClass = (0, _extendReactClass2['default'])(Component, defaultStyles, options); - } else { - decoratedClass = (0, _wrapStatelessFunction2['default'])(Component, defaultStyles, options); - } - - if (Component.displayName) { - decoratedClass.displayName = Component.displayName; - } else { - decoratedClass.displayName = Component.name; - } - - return decoratedClass; -}; - -/** - * When used as a ES7 decorator. - * - * @param {Object} defaultStyles CSS Modules class map. - * @param {Object} options {@link https://github.com/gajus/react-css-modules#options} - * @return {Function} - */ -decoratorConstructor = function (defaultStyles, options) { - return function (Component) { - return functionConstructor(Component, defaultStyles, options); - }; -}; - -exports['default'] = function () { - if (typeof arguments[0] === 'function') { - return functionConstructor(arguments[0], arguments[1], arguments[2]); - } else { - return decoratorConstructor(arguments[0], arguments[1]); - } -}; - -module.exports = exports['default']; -//# sourceMappingURL=index.js.map diff --git a/dist/index.js.map b/dist/index.js.map deleted file mode 100644 index 161c75a..0000000 --- a/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;;gCAA6B,oBAAoB;;;;qCACf,yBAAyB;;;;AAE3D,IAAI,oBAAoB,YAAA;IACpB,mBAAmB,YAAA;IACnB,gBAAgB,YAAA,CAAC;;;;;;;;AAQrB,gBAAgB,GAAG,UAAC,SAAS,EAAK;AAC9B,WAAO,WAAW,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC;CACvF,CAAC;;;;;;;;;;AAUF,mBAAmB,GAAG,UAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAK;AACzD,QAAI,cAAc,YAAA,CAAC;;AAEnB,QAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE;AAC7B,sBAAc,GAAG,mCAAiB,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;KACxE,MAAM;AACH,sBAAc,GAAG,wCAAsB,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;KAC7E;;AAED,QAAI,SAAS,CAAC,WAAW,EAAE;AACvB,sBAAc,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;KACtD,MAAM;AACH,sBAAc,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;KAC/C;;AAED,WAAO,cAAc,CAAC;CACzB,CAAC;;;;;;;;;AASF,oBAAoB,GAAG,UAAC,aAAa,EAAE,OAAO,EAAK;AAC/C,WAAO,UAAC,SAAS,EAAK;AAClB,eAAO,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;KACjE,CAAC;CACL,CAAC;;qBAEa,YAAa;AACxB,QAAI,OAAO,UAAK,CAAC,CAAC,KAAK,UAAU,EAAE;AAC/B,eAAO,mBAAmB,CAAC,UAAK,CAAC,CAAC,EAAE,UAAK,CAAC,CAAC,EAAE,UAAK,CAAC,CAAC,CAAC,CAAC;KACzD,MAAM;AACH,eAAO,oBAAoB,CAAC,UAAK,CAAC,CAAC,EAAE,UAAK,CAAC,CAAC,CAAC,CAAC;KACjD;CACJ","file":"index.js","sourcesContent":["import extendReactClass from './extendReactClass';\nimport wrapStatelessFunction from './wrapStatelessFunction';\n\nlet decoratorConstructor,\n functionConstructor,\n isReactComponent;\n\n/**\n * Determines if the given object has the signature of a class that inherits React.Component.\n *\n * @param {*} Component\n * @return {boolean}\n */\nisReactComponent = (Component) => {\n return 'prototype' in Component && typeof Component.prototype.render === 'function';\n};\n\n/**\n * When used as a function.\n *\n * @param {Function} Component\n * @param {Object} defaultStyles CSS Modules class map.\n * @param {Object} options {@link https://github.com/gajus/react-css-modules#options}\n * @return {Function}\n */\nfunctionConstructor = (Component, defaultStyles, options) => {\n let decoratedClass;\n\n if (isReactComponent(Component)) {\n decoratedClass = extendReactClass(Component, defaultStyles, options);\n } else {\n decoratedClass = wrapStatelessFunction(Component, defaultStyles, options);\n }\n\n if (Component.displayName) {\n decoratedClass.displayName = Component.displayName;\n } else {\n decoratedClass.displayName = Component.name;\n }\n\n return decoratedClass;\n};\n\n/**\n * When used as a ES7 decorator.\n *\n * @param {Object} defaultStyles CSS Modules class map.\n * @param {Object} options {@link https://github.com/gajus/react-css-modules#options}\n * @return {Function}\n */\ndecoratorConstructor = (defaultStyles, options) => {\n return (Component) => {\n return functionConstructor(Component, defaultStyles, options);\n };\n};\n\nexport default (...args) => {\n if (typeof args[0] === 'function') {\n return functionConstructor(args[0], args[1], args[2]);\n } else {\n return decoratorConstructor(args[0], args[1]);\n }\n};\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/linkClass.js b/dist/linkClass.js deleted file mode 100644 index 7b48e71..0000000 --- a/dist/linkClass.js +++ /dev/null @@ -1,125 +0,0 @@ -'use strict'; - -var _lodashCollectionFilter2 = require('lodash/collection/filter'); - -var _lodashCollectionFilter3 = _interopRequireDefault(_lodashCollectionFilter2); - -var _lodashLangIsArray2 = require('lodash/lang/isArray'); - -var _lodashLangIsArray3 = _interopRequireDefault(_lodashLangIsArray2); - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _makeConfiguration = require('./makeConfiguration'); - -var _makeConfiguration2 = _interopRequireDefault(_makeConfiguration); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var linkClass = undefined; - -/** - * @param {ReactElement} element - * @param {Object} styles CSS modules class map. - * @param {CSSModules~Options} userConfiguration - * @return {ReactElement} - */ -linkClass = function (element, styles, userConfiguration) { - if (styles === undefined) styles = {}; - - var appendClassName = undefined, - clonedElement = undefined, - configuration = undefined, - newChildren = undefined, - newProps = undefined, - styleNames = undefined; - - // @see https://github.com/gajus/react-css-modules/pull/30 - if (!element) { - return element; - } - - configuration = (0, _makeConfiguration2['default'])(userConfiguration); - - styleNames = element.props.styleName; - - if (styleNames) { - styleNames = styleNames.split(' '); - styleNames = (0, _lodashCollectionFilter3['default'])(styleNames); - - if (configuration.allowMultiple === false && styleNames.length > 1) { - throw new Error('ReactElement styleName property defines multiple module names ("' + element.props.styleName + '").'); - } - - appendClassName = styleNames.map(function (styleName) { - if (styles[styleName]) { - return styles[styleName]; - } else { - if (configuration.errorWhenNotFound === true) { - throw new Error('"' + styleName + '" CSS module is undefined.'); - } - - return ''; - } - }); - - appendClassName = appendClassName.filter(function (className) { - return className.length; - }); - - appendClassName = appendClassName.join(' '); - } - - // element.props.children can be one of the following: - // 'text' - // ['text'] - // [ReactElement, 'text'] - // ReactElement - - // console.log(`element.props.children`, element.props.children, `React.Children.count(element.props.children)`, React.Children.count(element.props.children)); - - if (_react2['default'].isValidElement(element.props.children)) { - newChildren = linkClass(_react2['default'].Children.only(element.props.children), styles, configuration); - } else if ((0, _lodashLangIsArray3['default'])(element.props.children)) { - newChildren = _react2['default'].Children.map(element.props.children, function (node) { - if (_react2['default'].isValidElement(node)) { - return linkClass(node, styles, configuration); - } else { - return node; - } - }); - - // https://github.com/facebook/react/issues/4723#issuecomment-135555277 - // Forcing children into an array produces the following error: - // Warning: A ReactFragment is an opaque type. Accessing any of its properties is deprecated. Pass it to one of the React.Children helpers. - // newChildren = _.values(newChildren); - } - - if (appendClassName) { - if (element.props.className) { - appendClassName = element.props.className + ' ' + appendClassName; - } - - newProps = { - className: appendClassName - }; - } - - if (newChildren) { - clonedElement = _react2['default'].cloneElement(element, newProps, newChildren); - } else { - clonedElement = _react2['default'].cloneElement(element, newProps); - } - - return clonedElement; -}; - -exports['default'] = linkClass; -module.exports = exports['default']; -//# sourceMappingURL=linkClass.js.map diff --git a/dist/linkClass.js.map b/dist/linkClass.js.map deleted file mode 100644 index 3367091..0000000 --- a/dist/linkClass.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["linkClass.js"],"names":[],"mappings":";;;;;;;;;;;;;;qBAAkB,OAAO;;;;iCACK,qBAAqB;;;;;;AAGnD,IAAI,SAAS,YAAA,CAAC;;;;;;;;AAQd,SAAS,GAAG,UAAC,OAAO,EAAE,MAAM,EAAO,iBAAiB,EAAK;QAAnC,MAAM,gBAAN,MAAM,GAAG,EAAE;;AAC7B,QAAI,eAAe,YAAA;QACf,aAAa,YAAA;QACb,aAAa,YAAA;QACb,WAAW,YAAA;QACX,QAAQ,YAAA;QACR,UAAU,YAAA,CAAC;;;AAGf,QAAI,CAAC,OAAO,EAAE;AACV,eAAO,OAAO,CAAC;KAClB;;AAED,iBAAa,GAAG,oCAAkB,iBAAiB,CAAC,CAAC;;AAErD,cAAU,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;;AAErC,QAAI,UAAU,EAAE;AACZ,kBAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnC,kBAAU,GAAG,yCAAS,UAAU,CAAC,CAAC;;AAElC,YAAI,aAAa,CAAC,aAAa,KAAK,KAAK,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,kBAAM,IAAI,KAAK,sEAAoE,OAAO,CAAC,KAAK,CAAC,SAAS,SAAM,CAAC;SACpH;;AAED,uBAAe,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,SAAS,EAAK;AAC5C,gBAAI,MAAM,CAAC,SAAS,CAAC,EAAE;AACnB,uBAAO,MAAM,CAAC,SAAS,CAAC,CAAC;aAC5B,MAAM;AACH,oBAAI,aAAa,CAAC,iBAAiB,KAAK,IAAI,EAAE;AAC1C,0BAAM,IAAI,KAAK,OAAK,SAAS,gCAA6B,CAAC;iBAC9D;;AAED,uBAAO,EAAE,CAAC;aACb;SACJ,CAAC,CAAC;;AAEH,uBAAe,GAAG,eAAe,CAAC,MAAM,CAAC,UAAC,SAAS,EAAK;AACpD,mBAAO,SAAS,CAAC,MAAM,CAAC;SAC3B,CAAC,CAAC;;AAEH,uBAAe,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/C;;;;;;;;;;AAUD,QAAI,mBAAM,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAC9C,mBAAW,GAAG,SAAS,CAAC,mBAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;KAC/F,MAAM,IAAI,oCAAU,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAC1C,mBAAW,GAAG,mBAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAC,IAAI,EAAK;AAC/D,gBAAI,mBAAM,cAAc,CAAC,IAAI,CAAC,EAAE;AAC5B,uBAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;aACjD,MAAM;AACH,uBAAO,IAAI,CAAC;aACf;SACJ,CAAC,CAAC;;;;;;KAMN;;AAED,QAAI,eAAe,EAAE;AACjB,YAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;AACzB,2BAAe,GAAM,OAAO,CAAC,KAAK,CAAC,SAAS,SAAI,eAAe,AAAE,CAAC;SACrE;;AAED,gBAAQ,GAAG;AACP,qBAAS,EAAE,eAAe;SAC7B,CAAC;KACL;;AAED,QAAI,WAAW,EAAE;AACb,qBAAa,GAAG,mBAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;KACtE,MAAM;AACH,qBAAa,GAAG,mBAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KACzD;;AAED,WAAO,aAAa,CAAC;CACxB,CAAC;;qBAEa,SAAS","file":"linkClass.js","sourcesContent":["import React from 'react';\nimport makeConfiguration from './makeConfiguration';\nimport _ from 'lodash';\n\nlet linkClass;\n\n/**\n * @param {ReactElement} element\n * @param {Object} styles CSS modules class map.\n * @param {CSSModules~Options} userConfiguration\n * @return {ReactElement}\n */\nlinkClass = (element, styles = {}, userConfiguration) => {\n let appendClassName,\n clonedElement,\n configuration,\n newChildren,\n newProps,\n styleNames;\n\n // @see https://github.com/gajus/react-css-modules/pull/30\n if (!element) {\n return element;\n }\n\n configuration = makeConfiguration(userConfiguration);\n\n styleNames = element.props.styleName;\n\n if (styleNames) {\n styleNames = styleNames.split(' ');\n styleNames = _.filter(styleNames);\n\n if (configuration.allowMultiple === false && styleNames.length > 1) {\n throw new Error(`ReactElement styleName property defines multiple module names (\"${element.props.styleName}\").`);\n }\n\n appendClassName = styleNames.map((styleName) => {\n if (styles[styleName]) {\n return styles[styleName];\n } else {\n if (configuration.errorWhenNotFound === true) {\n throw new Error(`\"${styleName}\" CSS module is undefined.`);\n }\n\n return '';\n }\n });\n\n appendClassName = appendClassName.filter((className) => {\n return className.length;\n });\n\n appendClassName = appendClassName.join(' ');\n }\n\n // element.props.children can be one of the following:\n // 'text'\n // ['text']\n // [ReactElement, 'text']\n // ReactElement\n\n // console.log(`element.props.children`, element.props.children, `React.Children.count(element.props.children)`, React.Children.count(element.props.children));\n\n if (React.isValidElement(element.props.children)) {\n newChildren = linkClass(React.Children.only(element.props.children), styles, configuration);\n } else if (_.isArray(element.props.children)) {\n newChildren = React.Children.map(element.props.children, (node) => {\n if (React.isValidElement(node)) {\n return linkClass(node, styles, configuration);\n } else {\n return node;\n }\n });\n\n // https://github.com/facebook/react/issues/4723#issuecomment-135555277\n // Forcing children into an array produces the following error:\n // Warning: A ReactFragment is an opaque type. Accessing any of its properties is deprecated. Pass it to one of the React.Children helpers.\n // newChildren = _.values(newChildren);\n }\n\n if (appendClassName) {\n if (element.props.className) {\n appendClassName = `${element.props.className} ${appendClassName}`;\n }\n\n newProps = {\n className: appendClassName\n };\n }\n\n if (newChildren) {\n clonedElement = React.cloneElement(element, newProps, newChildren);\n } else {\n clonedElement = React.cloneElement(element, newProps);\n }\n\n return clonedElement;\n};\n\nexport default linkClass;\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/makeConfiguration.js b/dist/makeConfiguration.js deleted file mode 100644 index 178a574..0000000 --- a/dist/makeConfiguration.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -var _lodashCollectionForEach2 = require('lodash/collection/forEach'); - -var _lodashCollectionForEach3 = _interopRequireDefault(_lodashCollectionForEach2); - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -/** - * @typedef CSSModules~Options - * @see {@link https://github.com/gajus/react-css-modules#options} - * @property {boolean} allowMultiple - * @property {boolean} errorWhenNotFound - */ - -/** - * @param {CSSModules~Options} userConfiguration - * @return {CSSModules~Options} - */ - -exports['default'] = function () { - var userConfiguration = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - var configuration = undefined; - - configuration = { - allowMultiple: false, - errorWhenNotFound: true - }; - - (0, _lodashCollectionForEach3['default'])(userConfiguration, function (value, name) { - if (typeof configuration[name] === 'undefined') { - throw new Error('Unknown configuration property "' + name + '".'); - } - - if (typeof value !== 'boolean') { - throw new Error('"' + name + '" property value must be a boolean.'); - } - - configuration[name] = value; - }); - - return configuration; -}; - -module.exports = exports['default']; -//# sourceMappingURL=makeConfiguration.js.map diff --git a/dist/makeConfiguration.js.map b/dist/makeConfiguration.js.map deleted file mode 100644 index dd0546d..0000000 --- a/dist/makeConfiguration.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["makeConfiguration.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;qBAae,YAA4B;QAA3B,iBAAiB,yDAAG,EAAE;;AAClC,QAAI,aAAa,YAAA,CAAC;;AAElB,iBAAa,GAAG;AACZ,qBAAa,EAAE,KAAK;AACpB,yBAAiB,EAAE,IAAI;KAC1B,CAAC;;AAEF,8CAAU,iBAAiB,EAAE,UAAC,KAAK,EAAE,IAAI,EAAK;AAC1C,YAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;AAC5C,kBAAM,IAAI,KAAK,sCAAoC,IAAI,QAAK,CAAC;SAChE;;AAED,YAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC5B,kBAAM,IAAI,KAAK,OAAK,IAAI,yCAAsC,CAAC;SAClE;;AAED,qBAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;KAC/B,CAAC,CAAC;;AAEH,WAAO,aAAa,CAAC;CACxB","file":"makeConfiguration.js","sourcesContent":["import _ from 'lodash';\n\n/**\n * @typedef CSSModules~Options\n * @see {@link https://github.com/gajus/react-css-modules#options}\n * @property {boolean} allowMultiple\n * @property {boolean} errorWhenNotFound\n */\n\n/**\n * @param {CSSModules~Options} userConfiguration\n * @return {CSSModules~Options}\n */\nexport default (userConfiguration = {}) => {\n let configuration;\n\n configuration = {\n allowMultiple: false,\n errorWhenNotFound: true\n };\n\n _.forEach(userConfiguration, (value, name) => {\n if (typeof configuration[name] === 'undefined') {\n throw new Error(`Unknown configuration property \"${name}\".`);\n }\n\n if (typeof value !== 'boolean') {\n throw new Error(`\"${name}\" property value must be a boolean.`);\n }\n\n configuration[name] = value;\n });\n\n return configuration;\n};\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/wrapStatelessFunction.js b/dist/wrapStatelessFunction.js deleted file mode 100644 index 7723dfa..0000000 --- a/dist/wrapStatelessFunction.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; - -var _lodashLangIsObject2 = require('lodash/lang/isObject'); - -var _lodashLangIsObject3 = _interopRequireDefault(_lodashLangIsObject2); - -var _lodashObjectAssign2 = require('lodash/object/assign'); - -var _lodashObjectAssign3 = _interopRequireDefault(_lodashObjectAssign2); - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _linkClass = require('./linkClass'); - -var _linkClass2 = _interopRequireDefault(_linkClass); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var wrapStatelessFunction = undefined; - -/** - * @see https://facebook.github.io/react/blog/2015/09/10/react-v0.14-rc1.html#stateless-function-components - * @param {Function} Component - * @param {Object} defaultStyles - * @param {Object} options - * @returns {Function} - */ -wrapStatelessFunction = function (Component, defaultStyles, options) { - var WrappedComponent = undefined; - - WrappedComponent = function () { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var props = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - var renderResult = undefined, - styles = undefined, - useProps = undefined; - - if (props.styles) { - useProps = props; - styles = props.styles; - } else if ((0, _lodashLangIsObject3['default'])(defaultStyles)) { - useProps = (0, _lodashObjectAssign3['default'])({}, props, { - styles: defaultStyles - }); - - styles = defaultStyles; - } else { - useProps = props; - styles = {}; - } - - renderResult = Component.apply(undefined, [useProps].concat(args)); - - if (renderResult) { - return (0, _linkClass2['default'])(renderResult, styles, options); - } - - return _react2['default'].createElement('noscript'); - }; - - (0, _lodashObjectAssign3['default'])(WrappedComponent, Component); - - return WrappedComponent; -}; - -exports['default'] = wrapStatelessFunction; -module.exports = exports['default']; -//# sourceMappingURL=wrapStatelessFunction.js.map diff --git a/dist/wrapStatelessFunction.js.map b/dist/wrapStatelessFunction.js.map deleted file mode 100644 index 78ef1e4..0000000 --- a/dist/wrapStatelessFunction.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["wrapStatelessFunction.js"],"names":[],"mappings":";;;;;;;;;;;;;;yBAAsB,aAAa;;;;qBACjB,OAAO;;;;;;AAGzB,IAAI,qBAAqB,YAAA,CAAC;;;;;;;;;AAS1B,qBAAqB,GAAG,UAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAK;AAC3D,QAAI,gBAAgB,YAAA,CAAC;;AAErB,oBAAgB,GAAG,YAAyB;0CAAT,IAAI;AAAJ,gBAAI;;;YAAnB,KAAK,yDAAG,EAAE;;AAC1B,YAAI,YAAY,YAAA;YACZ,MAAM,YAAA;YACN,QAAQ,YAAA,CAAC;;AAEb,YAAI,KAAK,CAAC,MAAM,EAAE;AACd,oBAAQ,GAAG,KAAK,CAAC;AACjB,kBAAM,GAAG,KAAK,CAAC,MAAM,CAAC;SACzB,MAAM,IAAI,qCAAW,aAAa,CAAC,EAAE;AAClC,oBAAQ,GAAG,qCAAS,EAAE,EAAE,KAAK,EAAE;AAC3B,sBAAM,EAAE,aAAa;aACxB,CAAC,CAAC;;AAEH,kBAAM,GAAG,aAAa,CAAC;SAC1B,MAAM;AACH,oBAAQ,GAAG,KAAK,CAAC;AACjB,kBAAM,GAAG,EAAE,CAAC;SACf;;AAED,oBAAY,GAAG,SAAS,mBAAC,QAAQ,SAAK,IAAI,EAAC,CAAC;;AAE5C,YAAI,YAAY,EAAE;AACd,mBAAO,4BAAU,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SACnD;;AAED,eAAO,mBAAM,aAAa,CAAC,UAAU,CAAC,CAAC;KAC1C,CAAC;;AAEF,yCAAS,gBAAgB,EAAE,SAAS,CAAC,CAAC;;AAEtC,WAAO,gBAAgB,CAAC;CAC3B,CAAC;;qBAEa,qBAAqB","file":"wrapStatelessFunction.js","sourcesContent":["import linkClass from './linkClass';\nimport React from 'react';\nimport _ from 'lodash';\n\nlet wrapStatelessFunction;\n\n/**\n * @see https://facebook.github.io/react/blog/2015/09/10/react-v0.14-rc1.html#stateless-function-components\n * @param {Function} Component\n * @param {Object} defaultStyles\n * @param {Object} options\n * @returns {Function}\n */\nwrapStatelessFunction = (Component, defaultStyles, options) => {\n let WrappedComponent;\n\n WrappedComponent = (props = {}, ...args) => {\n let renderResult,\n styles,\n useProps;\n\n if (props.styles) {\n useProps = props;\n styles = props.styles;\n } else if (_.isObject(defaultStyles)) {\n useProps = _.assign({}, props, {\n styles: defaultStyles\n });\n\n styles = defaultStyles;\n } else {\n useProps = props;\n styles = {};\n }\n\n renderResult = Component(useProps, ...args);\n\n if (renderResult) {\n return linkClass(renderResult, styles, options);\n }\n\n return React.createElement('noscript');\n };\n\n _.assign(WrappedComponent, Component);\n\n return WrappedComponent;\n};\n\nexport default wrapStatelessFunction;\n"],"sourceRoot":"/source/"} \ No newline at end of file From f65bad27dab80a88c835122d704715f876a9d749 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 4 Dec 2015 15:33:59 +0000 Subject: [PATCH 007/149] 3.6.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6af34c4..124ba62 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "css", "modules" ], - "version": "3.6.2", + "version": "3.6.3", "author": { "name": "Gajus Kuizinas", "email": "gajus@gajus.com", From 64eff397a49d648167e7a3e85a795321babd27c2 Mon Sep 17 00:00:00 2001 From: Gianluca Esposito Date: Fri, 18 Dec 2015 10:47:42 +0100 Subject: [PATCH 008/149] Update README.md Fixed Module Bundler fragment --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 88a335c..3a0b467 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ Using `react-css-modules`: Setup consists of: -* Setting up a [module bundler](#modulebundler) to load the [Interoperable CSS](https://github.com/css-modules/icss). +* Setting up a [module bundler](#module-bundler) to load the [Interoperable CSS](https://github.com/css-modules/icss). * [Decorating](#decorator) your component using `react-css-modules`. ### Module Bundler From 85fc0194b962afc0d296630e0c024fd2e56f38af Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 18 Dec 2015 11:50:18 +0000 Subject: [PATCH 009/149] Added documentation about HMR. --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 3a0b467..1c95255 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ React CSS Modules implement automatic mapping of CSS modules. Every CSS class is - [Options](#options) - [`allowMultiple`](#allowmultiple) - [`errorWhenNotFound`](#errorwhennotfound) +– [React Hot Module Replacement](#react-hot-module-replacement) - [Class Composition](#class-composition) - [What Problems does Class Composition Solve?](#what-problems-does-class-composition-solve) - [Class Composition Using CSS Preprocessors](#class-composition-using-css-preprocessors) @@ -366,6 +367,16 @@ Throws an error when `styleName` cannot be mapped to an existing CSS Module. } ``` +## React Hot Module Replacement + +Hot module reloading does to reload the CSS (see https://github.com/gajus/react-css-modules/issues/51). + +To enable CSS reloading, my advise is to wrap your webpack setup using [BrowserSync](https://www.browsersync.io/). BrowserSync enables CSS reloading when it detects a file change. + +[React CSS Modules examples](https://github.com/gajus/react-css-modules-examples) repository includes a configuration example using [BrowserSync](https://github.com/gajus/react-css-modules-examples/blob/master/webpack.config.browsersync.js). + +Note that `webpackk-dev-server` program [does not write bundle files to the disk](https://github.com/webpack/webpack-dev-server/issues/62). You need to use a [write-file-webpack-plugin](https://github.com/gajus/write-file-webpack-plugin) plugin to force writing to the disk to enable BrowserSync to detect changes. + ## Class Composition CSS Modules promote composition pattern, i.e. every CSS Module that is used in a component should define all properties required to describe an element, e.g. From a9d92b0647c240010cddd5fdfe72ff19ee54ef68 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 18 Dec 2015 12:47:27 +0000 Subject: [PATCH 010/149] React Hot Module Replacement docs. --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1c95255..18f6f30 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ React CSS Modules implement automatic mapping of CSS modules. Every CSS class is - [Options](#options) - [`allowMultiple`](#allowmultiple) - [`errorWhenNotFound`](#errorwhennotfound) -– [React Hot Module Replacement](#react-hot-module-replacement) +- [React Hot Module Replacement](#react-hot-module-replacement) - [Class Composition](#class-composition) - [What Problems does Class Composition Solve?](#what-problems-does-class-composition-solve) - [Class Composition Using CSS Preprocessors](#class-composition-using-css-preprocessors) @@ -369,13 +369,13 @@ Throws an error when `styleName` cannot be mapped to an existing CSS Module. ## React Hot Module Replacement -Hot module reloading does to reload the CSS (see https://github.com/gajus/react-css-modules/issues/51). +[Hot module reloading](https://github.com/gaearon/react-transform-hmr) (HMR) does to reload the CSS document (see https://github.com/gajus/react-css-modules/issues/51). It only reloads the `class` HTML attribute value. -To enable CSS reloading, my advise is to wrap your webpack setup using [BrowserSync](https://www.browsersync.io/). BrowserSync enables CSS reloading when it detects a file change. +To enable CSS reloading, wrap [`webpack-dev-server`](https://webpack.github.io/docs/webpack-dev-server.html) configuration using [BrowserSync](https://www.browsersync.io/). BrowserSync enables CSS reloading when it detects a file change. -[React CSS Modules examples](https://github.com/gajus/react-css-modules-examples) repository includes a configuration example using [BrowserSync](https://github.com/gajus/react-css-modules-examples/blob/master/webpack.config.browsersync.js). +[React CSS Modules examples](https://github.com/gajus/react-css-modules-examples) repository includes a configuration example using [BrowserSync configuration using webpack-dev-server](https://github.com/gajus/react-css-modules-examples/blob/master/webpack.config.browsersync.js). -Note that `webpackk-dev-server` program [does not write bundle files to the disk](https://github.com/webpack/webpack-dev-server/issues/62). You need to use a [write-file-webpack-plugin](https://github.com/gajus/write-file-webpack-plugin) plugin to force writing to the disk to enable BrowserSync to detect changes. +Note that `webpackk-dev-server` program [does not write bundle files to the disk](https://github.com/webpack/webpack-dev-server/issues/62). Use [write-file-webpack-plugin](https://github.com/gajus/write-file-webpack-plugin) plugin to force writing to the disk. This will enable BrowserSync to detect changes. ## Class Composition From 6359a4c030e0ac7aeef8c341255bfaba025c8649 Mon Sep 17 00:00:00 2001 From: Tieme van Veen Date: Mon, 21 Dec 2015 11:44:22 +0100 Subject: [PATCH 011/149] Fix typo in readme HMR does *to* reload the css -> HMR does *not* reload the css --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18f6f30..60da45f 100644 --- a/README.md +++ b/README.md @@ -369,7 +369,7 @@ Throws an error when `styleName` cannot be mapped to an existing CSS Module. ## React Hot Module Replacement -[Hot module reloading](https://github.com/gaearon/react-transform-hmr) (HMR) does to reload the CSS document (see https://github.com/gajus/react-css-modules/issues/51). It only reloads the `class` HTML attribute value. +[Hot module reloading](https://github.com/gaearon/react-transform-hmr) (HMR) does not reload the CSS document (see https://github.com/gajus/react-css-modules/issues/51). It only reloads the `class` HTML attribute value. To enable CSS reloading, wrap [`webpack-dev-server`](https://webpack.github.io/docs/webpack-dev-server.html) configuration using [BrowserSync](https://www.browsersync.io/). BrowserSync enables CSS reloading when it detects a file change. From 170a78380ec8cefb2a3c1e527df00f56463a931d Mon Sep 17 00:00:00 2001 From: Tieme van Veen Date: Tue, 29 Dec 2015 18:01:19 +0100 Subject: [PATCH 012/149] Sourcemaps documentation --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 60da45f..59e2104 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ React CSS Modules implement automatic mapping of CSS modules. Every CSS class is - [Options](#options) - [`allowMultiple`](#allowmultiple) - [`errorWhenNotFound`](#errorwhennotfound) +- [SASS, SCSS, LESS and other CSS Preprocessors](#sass-scss-less-and-other-css-preprocessors) + - [Enable Sourcemaps](#enable-sourcemaps) - [React Hot Module Replacement](#react-hot-module-replacement) - [Class Composition](#class-composition) - [What Problems does Class Composition Solve?](#what-problems-does-class-composition-solve) @@ -367,6 +369,17 @@ Throws an error when `styleName` cannot be mapped to an existing CSS Module. } ``` +### Enable Sourcemaps + +To enable CSS Source maps, you'll need to pass the sourceMap-option to the css-loader: + +```js +{ + test: /\.scss$/, + loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!sass') +} +``` + ## React Hot Module Replacement [Hot module reloading](https://github.com/gaearon/react-transform-hmr) (HMR) does not reload the CSS document (see https://github.com/gajus/react-css-modules/issues/51). It only reloads the `class` HTML attribute value. From 43690c1b0d6909515c4bd284f945b9619ed00ddb Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 8 Jan 2016 15:46:51 +0000 Subject: [PATCH 013/149] Bumped dependencies. --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 124ba62..2dca1be 100644 --- a/package.json +++ b/package.json @@ -24,13 +24,13 @@ }, "devDependencies": { "chai": "^3.4.1", - "jsdom": "^7.1.1", - "pragmatist": "^1.9.4", - "react": "^0.14.3", - "react-addons-test-utils": "^0.14.3" + "jsdom": "^7.2.2", + "pragmatist": "^2.3.71", + "react": "^0.14.6", + "react-addons-test-utils": "^0.14.6" }, "scripts": { - "pragmatist": "node ./node_modules/.bin/pragmatist", + "pragmatist": "node ./node_modules/.bin/pragmatist --browser", "lint": "npm run pragmatist lint", "test": "npm run pragmatist test", "build": "npm run pragmatist build", From f094ec0de2ce8157e1383d2eca9b42ce54e3ba0f Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 8 Jan 2016 15:58:14 +0000 Subject: [PATCH 014/149] 3.6.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2dca1be..89b360b 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "css", "modules" ], - "version": "3.6.3", + "version": "3.6.4", "author": { "name": "Gajus Kuizinas", "email": "gajus@gajus.com", From 9ef21b68cc55324ed96c38535bc5778f710a5b9e Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 8 Jan 2016 16:06:26 +0000 Subject: [PATCH 015/149] Update README file path. --- README.md | 2 +- README/react-css-modules.png | Bin 46508 -> 0 bytes README/react-css-modules.sketch | Bin 90112 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 README/react-css-modules.png delete mode 100644 README/react-css-modules.sketch diff --git a/README.md b/README.md index 60da45f..f9a297a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Travis build status](http://img.shields.io/travis/gajus/react-css-modules/master.svg?style=flat-square)](https://travis-ci.org/gajus/react-css-modules) [![NPM version](http://img.shields.io/npm/v/react-css-modules.svg?style=flat-square)](https://www.npmjs.org/package/react-css-modules) - + React CSS Modules implement automatic mapping of CSS modules. Every CSS class is assigned a local-scoped identifier with a global unique name. CSS Modules enable a modular and reusable CSS! diff --git a/README/react-css-modules.png b/README/react-css-modules.png deleted file mode 100644 index 2614951ab7b6ec971422202f5b4424e5d263514f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46508 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 diff --git a/README/react-css-modules.sketch b/README/react-css-modules.sketch deleted file mode 100644 index a014d753a90a6eddb38d41660334d04f785a9ee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 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

<%Ke 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%0D$?jx`rI*EQEO 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 From ea396e00b8e605e0c5193cb9a402b48535338e7a Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 8 Jan 2016 16:21:43 +0000 Subject: [PATCH 016/149] Updated docs about the loop and child components. --- README.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f9a297a..b2c4ebc 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ React CSS Modules implement automatic mapping of CSS modules. Every CSS class is - [webpack](#webpack) - [Browserify](#browserify) - [Extending Component Styles](#extending-component-styles) - - [Styles Property](#styles-property) + - [`styles` Property](#styles-property) + - [Loops and Child Components](#loops-and-child-components) - [Decorator](#decorator) - [Options](#options) - [`allowMultiple`](#allowmultiple) @@ -219,45 +220,99 @@ In this example, `table-custom-styles.css` selectively extends `table.css` (the Refer to the [`UsingStylesProperty` example](https://github.com/gajus/react-css-modules-examples/tree/master/src/UsingStylesProperty) for an example of a working implementation. -### Styles Property +### `styles` Property Decorated components inherit `styles` property that describes the mapping between CSS modules and CSS classes. -`styles` property within the component itself is designed to be used only when `styleNames` cannot be used. +```js +class extends React.Component { + render () { +

+

+

+
; + } +} +``` + +In the above example, `styleName='foo'` and `className={this.props.styles.foo}` are equivalent. + +`styles` property is designed to enable component decoration of [Loops and Child Components](#loops-and-child-components). + +### Loops and Child Components -`styleNames` cannot be used within a component to define styles of a `ReactElement` that will be generated by another component (https://github.com/gajus/react-css-modules/issues/11), e.g. +`styleName` cannot be used to define styles of a `ReactElement` that will be generated by another component, e.g. ```js -class extends React.Component { +import React from 'react'; +import CSSModules from 'react-css-modules'; +import List from './List'; +import styles from './table.css'; + +class CustomList extends React.Component { render () { let itemTemplate; itemTemplate = (name) => { - return
  • {name}
  • ; + return
  • {name}
  • ; }; - return ; + return ; } } + +export default CSSModules(CustomList, styles); ``` -For that purpose, the decorated component inherits `styles` property that you can use just as a regular CSS Modules object. The earlier example can be therefore rewritten to: +The above example will not work. `CSSModules` is used to decorate `CustomList` component. However, it is the `List` component that will render `itemTemplate`. + +For that purpose, the decorated component inherits [`styles` property](#styles-property) that you can use just as a regular CSS Modules object. The earlier example can be therefore rewritten to: ```js -class extends React.Component { +import React from 'react'; +import CSSModules from 'react-css-modules'; +import List from './List'; +import styles from './table.css'; + +class CustomList extends React.Component { render () { let itemTemplate; itemTemplate = (name) => { - return
  • {name}
  • ; + return
  • {name}
  • ; }; - return ; + return ; } } + +export default CSSModules(CustomList, styles); ``` -`styles` property works with ES6 classes and stateless function components. +You can use `styleName` property within the child component if you decorate the child component using `CSSModules` before passing it to the rendering component, e.g. + +```js +import React from 'react'; +import CSSModules from 'react-css-modules'; +import List from './List'; +import styles from './table.css'; + +class CustomList extends React.Component { + render () { + let itemTemplate; + + itemTemplate = (name) => { + return
  • {name}
  • ; + }; + + itemTemplate = CSSModules(itemTemplate, styles); + + return ; + } +} + +export default CSSModules(CustomList, styles); +``` ### Decorator From ca261d1a03f7c39c3e2ed2f8f45efb4e0997d3dc Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Fri, 8 Jan 2016 16:23:53 +0000 Subject: [PATCH 017/149] Corrected styles reference. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b2c4ebc..e9c6eae 100644 --- a/README.md +++ b/README.md @@ -305,7 +305,7 @@ class CustomList extends React.Component { return
  • {name}
  • ; }; - itemTemplate = CSSModules(itemTemplate, styles); + itemTemplate = CSSModules(itemTemplate, this.props.styles); return ; } From c62813733809498c736135dc21b287e4fc3c1f0e Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Mon, 11 Jan 2016 17:28:28 +0000 Subject: [PATCH 018/149] Added tests for noscript. --- tests/extendReactClass.js | 36 ++++++++++++++++++++++++++++------ tests/wrapStatelessFunction.js | 26 ++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/tests/extendReactClass.js b/tests/extendReactClass.js index 7f269dc..f4a37bf 100644 --- a/tests/extendReactClass.js +++ b/tests/extendReactClass.js @@ -15,9 +15,8 @@ describe('extendReactClass', () => { global.window = document.defaultView; }); - context('using default styles', () => { - it('exposes styles through styles property', (done) => { + it('exposes styles through this.props.styles property', (done) => { let Component, styles; @@ -56,9 +55,8 @@ describe('extendReactClass', () => { TestUtils.renderIntoDocument(); }); }); - - context('using explicit styles', () => { - it('exposes styles through styles property', (done) => { + context('overwriting default styles using "styles" property of the extended component', () => { + it('overwrites default styles', (done) => { let Component, styles; @@ -73,9 +71,35 @@ describe('extendReactClass', () => { foo: 'foo-1' }; - Component = extendReactClass(Component); + Component = extendReactClass(Component, { + foo: 'foo-0', + bar: 'bar-0' + }); TestUtils.renderIntoDocument(); }); }); + context('rendering Component that returns null', () => { + it('generates