Skip to content

Commit 9f710b9

Browse files
committed
Use Babel 6. Drop old disabled handling. (#164)
1 parent cc4db43 commit 9f710b9

22 files changed

+163
-158
lines changed

.babelrc

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
{
2-
"stage": 1
2+
"presets": ["es2015-loose", "stage-0", "react"],
3+
"plugins": ["add-module-exports"]
34
}

.eslintrc

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
{
22
"extends": "airbnb",
3-
"parser": "babel-eslint",
4-
"rules": {
5-
"comma-dangle": 0,
6-
"eqeqeq": [2, "allow-null"]
7-
}
3+
"parser": "babel-eslint"
84
}

README.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,15 @@ Integration between [React Router](https://github.com/rackt/react-router) and [R
66

77
## Usage
88

9-
Wrap your React-Bootstrap element in a `LinkContainer` to make it behave like a React Router `Link`:
9+
Wrap your React-Bootstrap element in a `<LinkContainer>` to make it behave like a React Router `<Link>`:
1010

1111
```js
1212
<LinkContainer to={{ pathname: '/foo', query: { bar: 'baz' } }}>
1313
<Button>Foo</Button>
1414
</LinkContainer>
1515
```
1616

17-
To disable the element and the link, set the `disabled` prop on the `LinkContainer`. For the equivalent of `IndexLink`, use `IndexLinkContainer`.
18-
19-
As with React Router's `Link`, returning `false` from an `onClick` handler on `LinkContainer` will prevent the transition. However, this behavior will not apply to any `onClick` on the child, which instead will have to call `event.preventDefault()` explicitly to prevent the transition.
17+
For the equivalent of `<IndexLink>`, use `<IndexLinkContainer>`.
2018

2119
## Installation
2220

bower.template.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"dependencies": <%= JSON.stringify(pkg.peerDependencies) %>,
1313
"ignore": [
1414
"**/.*",
15-
"tests",
15+
"test",
1616
"src",
1717
"CONTRIBUTING.md",
1818
"karma.conf.js",

karma.conf.babel.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
export default config => {
2+
config.set({
3+
basePath: '',
4+
5+
frameworks: [
6+
'mocha',
7+
'sinon-chai',
8+
],
9+
10+
files: [
11+
'./test/index.js',
12+
],
13+
14+
preprocessors: {
15+
'./test/index.js': ['webpack', 'sourcemap'],
16+
},
17+
18+
webpack: {
19+
output: {
20+
pathinfo: true,
21+
},
22+
module: {
23+
loaders: [
24+
{ test: /\.js/, loader: 'babel', exclude: /node_modules/ },
25+
],
26+
},
27+
devtool: 'inline-source-map',
28+
},
29+
30+
webpackMiddleware: {
31+
noInfo: true,
32+
},
33+
34+
reporters: ['mocha'],
35+
36+
port: 9876,
37+
38+
colors: true,
39+
40+
logLevel: config.LOG_INFO,
41+
42+
autoWatch: true,
43+
44+
browsers: ['PhantomJS'],
45+
46+
captureTimeout: 60000,
47+
browserDisconnectTimeout: 7000,
48+
browserDisconnectTolerance: 1,
49+
browserDisconnectNoActivityTimeout: 60000,
50+
51+
singleRun: false,
52+
});
53+
};

karma.conf.js

+2-47
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,2 @@
1-
require('babel/register');
2-
var webpackConfig = require('./webpack.test.config.babel.js');
3-
delete webpackConfig.entry;
4-
5-
module.exports = function (config) {
6-
config.set({
7-
basePath: '',
8-
9-
frameworks: [
10-
'mocha',
11-
'sinon-chai'
12-
],
13-
14-
files: [
15-
'./tests/index.js'
16-
],
17-
18-
preprocessors: {
19-
'./tests/index.js': ['webpack', 'sourcemap']
20-
},
21-
22-
webpack: webpackConfig,
23-
24-
webpackMiddleware: {
25-
noInfo: true
26-
},
27-
28-
reporters: ['mocha'],
29-
30-
port: 9876,
31-
32-
colors: true,
33-
34-
logLevel: config.LOG_INFO,
35-
36-
autoWatch: true,
37-
38-
browsers: ['PhantomJS'],
39-
40-
captureTimeout: 60000,
41-
browserDisconnectTimeout: 7000,
42-
browserDisconnectTolerance: 1,
43-
browserDisconnectNoActivityTimeout: 60000,
44-
45-
singleRun: false
46-
});
47-
};
1+
require('babel-register');
2+
module.exports = require('./karma.conf.babel.js');

package.json

+30-22
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
"main": "./lib/index.js",
66
"scripts": {
77
"prepublish": "npm run build",
8-
"build": "rimraf lib && babel src --out-dir=lib && webpack && webpack -p && npm run bower-prepare",
8+
"build": "rimraf lib && babel src -d lib && webpack && webpack -p && npm run bower-prepare",
99
"test": "npm run lint && karma start --single-run",
1010
"tdd": "karma start",
1111
"visual-test": "open http://localhost:8080/ && webpack-dev-server --config webpack.visual.config.babel.js",
12-
"lint": "eslint *.babel.js src tests",
12+
"lint": "eslint *.js src test",
1313
"bower-prepare": "babel-node scripts/bower-prepare.js",
1414
"release": "release"
1515
},
@@ -36,52 +36,60 @@
3636
"react-router": ">=2.0.0"
3737
},
3838
"devDependencies": {
39-
"babel": "^5.8.38",
40-
"babel-core": "^5.8.38",
41-
"babel-eslint": "^4.1.8",
42-
"babel-loader": "^5.4.0",
39+
"babel-cli": "^6.5.2",
40+
"babel-core": "^6.7.7",
41+
"babel-eslint": "^6.0.4",
42+
"babel-loader": "^6.2.4",
43+
"babel-plugin-add-module-exports": "^0.1.3",
44+
"babel-preset-es2015": "^6.6.0",
45+
"babel-preset-es2015-loose": "^7.0.0",
46+
"babel-preset-react": "^6.5.0",
47+
"babel-preset-stage-0": "^6.5.0",
48+
"babel-register": "^6.7.2",
4349
"bootstrap": "^3.3.6",
4450
"chai": "^3.5.0",
4551
"colors": "^1.1.2",
4652
"css-loader": "^0.23.1",
47-
"es5-shim": "^4.5.7",
48-
"eslint": "^1.10.3",
49-
"eslint-config-airbnb": "^2.1.1",
53+
"es5-shim": "^4.5.8",
54+
"eslint": "^2.8.0",
55+
"eslint-config-airbnb": "^8.0.0",
5056
"eslint-plugin-babel": "^3.2.0",
51-
"eslint-plugin-mocha": "^1.1.0",
52-
"eslint-plugin-react": "^3.16.1",
57+
"eslint-plugin-import": "^1.6.0",
58+
"eslint-plugin-jsx-a11y": "^1.0.3",
59+
"eslint-plugin-mocha": "^2.2.0",
60+
"eslint-plugin-react": "^5.0.1",
5361
"file-loader": "^0.8.5",
54-
"history": "^2.0.1",
55-
"html-webpack-plugin": "^2.15.0",
62+
"history": "^2.1.0",
63+
"html-webpack-plugin": "^2.16.0",
5664
"karma": "^0.13.22",
5765
"karma-cli": "^0.1.2",
5866
"karma-mocha": "^0.2.2",
59-
"karma-mocha-reporter": "^2.0.0",
67+
"karma-mocha-reporter": "^2.0.2",
6068
"karma-phantomjs-launcher": "^1.0.0",
6169
"karma-sinon-chai": "^1.2.0",
6270
"karma-sourcemap-loader": "^0.3.7",
6371
"karma-webpack": "^1.7.0",
6472
"less": "^2.6.1",
6573
"less-loader": "^2.2.3",
66-
"lodash": "^3.10.1",
74+
"lodash": "^4.11.1",
6775
"lolex": "^1.4.0",
6876
"mocha": "^2.4.5",
6977
"node-libs-browser": "^1.0.0",
7078
"phantomjs-prebuilt": "^2.1.7",
71-
"react": "^15.0.0",
72-
"react-bootstrap": "^0.28.5",
73-
"react-dom": "^15.0.0",
74-
"react-router": "^2.0.1",
79+
"react": "^15.0.1",
80+
"react-bootstrap": "^0.29.2",
81+
"react-dom": "^15.0.1",
82+
"react-router": "^2.3.0",
7583
"release-script": "^1.0.2",
7684
"rimraf": "^2.5.2",
77-
"shelljs": "^0.6.0",
85+
"shelljs": "^0.7.0",
7886
"sinon": "^1.17.3",
7987
"sinon-chai": "^2.8.0",
8088
"style-loader": "^0.13.1",
8189
"url-loader": "^0.5.7",
82-
"webpack": "^1.12.14",
90+
"webpack": "^1.13.0",
8391
"webpack-dev-server": "^1.14.1",
84-
"yargs": "^4.4.0"
92+
"yargs": "^4.6.0"
8593
},
8694
"files": [
8795
"lib"

src/IndexLinkContainer.js

+3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ import React from 'react';
22

33
import LinkContainer from './LinkContainer';
44

5+
// Don't use a stateless function, to allow users to set a ref.
6+
/* eslint-disable react/prefer-stateless-function */
57
export default class IndexLinkContainer extends React.Component {
68
render() {
79
return (
810
<LinkContainer {...this.props} onlyActiveOnIndex />
911
);
1012
}
1113
}
14+
/* eslint-enable react/prefer-stateless-function */

src/LinkContainer.js

+23-30
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,33 @@
33
import React from 'react';
44
import Link from 'react-router/lib/Link';
55

6-
export default class LinkContainer extends React.Component {
7-
constructor(props, context) {
8-
super(props, context);
6+
const propTypes = {
7+
onlyActiveOnIndex: React.PropTypes.bool.isRequired,
8+
to: React.PropTypes.oneOfType([
9+
React.PropTypes.string,
10+
React.PropTypes.object,
11+
]).isRequired,
12+
onClick: React.PropTypes.func,
13+
active: React.PropTypes.bool,
14+
children: React.PropTypes.node.isRequired,
15+
};
916

10-
this.onClick = this.onClick.bind(this);
11-
}
17+
const contextTypes = {
18+
router: React.PropTypes.object,
19+
};
1220

13-
onClick(event) {
14-
if (this.props.disabled) {
15-
event.preventDefault();
16-
return;
17-
}
21+
const defaultProps = {
22+
onlyActiveOnIndex: false,
23+
};
1824

25+
class LinkContainer extends React.Component {
26+
onClick = (event) => {
1927
if (this.props.children.props.onClick) {
2028
this.props.children.props.onClick(event);
2129
}
2230

2331
Link.prototype.handleClick.call(this, event);
24-
}
32+
};
2533

2634
render() {
2735
const { router } = this.context;
@@ -42,23 +50,8 @@ export default class LinkContainer extends React.Component {
4250
}
4351
}
4452

45-
LinkContainer.propTypes = {
46-
onlyActiveOnIndex: React.PropTypes.bool.isRequired,
47-
to: React.PropTypes.oneOfType([
48-
React.PropTypes.string,
49-
React.PropTypes.object,
50-
]).isRequired,
51-
onClick: React.PropTypes.func,
52-
active: React.PropTypes.bool,
53-
disabled: React.PropTypes.bool.isRequired,
54-
children: React.PropTypes.node.isRequired
55-
};
56-
57-
LinkContainer.contextTypes = {
58-
router: React.PropTypes.object
59-
};
53+
LinkContainer.propTypes = propTypes;
54+
LinkContainer.contextTypes = contextTypes;
55+
LinkContainer.defaultProps = defaultProps;
6056

61-
LinkContainer.defaultProps = {
62-
onlyActiveOnIndex: false,
63-
disabled: false
64-
};
57+
export default LinkContainer;
File renamed without changes.

tests/IndexLinkContainer.spec.js renamed to test/IndexLinkContainer.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe('IndexLinkContainer', () => {
1111
'Button',
1212
'NavItem',
1313
'MenuItem',
14-
'ListGroupItem'
14+
'ListGroupItem',
1515
].forEach(name => {
1616
describe(name, () => {
1717
const Component = ReactBootstrap[name];

0 commit comments

Comments
 (0)