Skip to content

Commit 0e87cbe

Browse files
committed
initial commit
1 parent ea2b12c commit 0e87cbe

File tree

15 files changed

+385
-3
lines changed

15 files changed

+385
-3
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.idea
2+
node_modules
3+
.DS_Store

Brocfile.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
var rimraf = require('rimraf');
2+
3+
var mergeTrees = require('broccoli-merge-trees');
4+
var Funnel = require('broccoli-funnel');
5+
6+
var compileSass = require('broccoli-sass');
7+
8+
var esTranspiler = require('broccoli-6to5-transpiler');
9+
10+
var fastBrowserify = require('broccoli-fast-browserify');
11+
var browserify = require('broccoli-browserify');
12+
13+
//var uglifyJavaScript = require('broccoli-uglify-js');
14+
var uglifyJavaScript = require('broccoli-uglify-sourcemap');
15+
16+
var gzipFiles = require('broccoli-gzip');
17+
18+
19+
var staticFiles = new Funnel('src', {
20+
files: ['index.html']
21+
});
22+
23+
//var jqueryFiles = new Funnel('node_modules/jquery/dist/cdn', {
24+
// include: [
25+
// new RegExp(/\.min\.(js|map)$/),
26+
// ],
27+
// destDir: 'vendor/jquery'
28+
//});
29+
//var semantiUiFiles = new Funnel('node_modules/semantic-ui/dist', {
30+
// exclude: [new RegExp(/components/)],
31+
// include: [
32+
// new RegExp(/\.min\.(js|css)$/),
33+
// new RegExp(/themes/)
34+
// ],
35+
// destDir: 'vendor/semantic-ui'
36+
//});
37+
//var fontAwesomeFiles = new Funnel('node_modules/font-awesome', {
38+
// include: [
39+
// new RegExp(/min\.css$/),
40+
// new RegExp(/fonts/)
41+
// ],
42+
// destDir: 'vendor/font-awesome'
43+
//});
44+
45+
var bootstrapFiles = new Funnel('node_modules/bootstrap/dist', {
46+
include: [
47+
new RegExp(/css\/.+\.min\.css$/),
48+
new RegExp(/css\/.+\.map$/),
49+
new RegExp(/fonts/)
50+
],
51+
destDir: 'vendor/bootstrap'
52+
});
53+
vendorFiles = mergeTrees([bootstrapFiles]);
54+
55+
var cssFiles = compileSass(['src'], 'styles/app.scss', 'styles/app.css');
56+
57+
var jsFiles = new Funnel('src', {
58+
exclude: [new RegExp(/__tests__/)],
59+
include: [new RegExp(/\.js$/)]
60+
});
61+
jsFiles = esTranspiler(jsFiles, {experimental: true});
62+
jsFiles = browserify(jsFiles, {
63+
entries: ['./index'],
64+
outputFile: 'index.js'
65+
});
66+
67+
var env = require('broccoli-env').getEnv();
68+
69+
if (env === 'production') {
70+
jsFiles = uglifyJavaScript(jsFiles);
71+
jsFiles = gzipFiles(jsFiles, {
72+
extensions: ['js', 'css'],
73+
keepUncompressed: true
74+
});
75+
}
76+
77+
rimraf.sync('./dist');
78+
module.exports = mergeTrees([staticFiles, vendorFiles, jsFiles, cssFiles], {overwrite: false});
79+

README.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,22 @@
1-
react-es7
2-
=========
1+
Install
32

4-
Example of using ReactJS + Reflux + ES6/ES7 + Jest (testing)
3+
```
4+
npm install
5+
```
6+
7+
Usage:
8+
9+
```bash
10+
npm run-script dev
11+
```
12+
13+
Open `http://localhost:4200`
14+
15+
or
16+
17+
```
18+
$ npm run-script pro
19+
$ http-server dist/
20+
```
21+
22+
Open: `http://localhost:8080`

package.json

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"name": "react-es7",
3+
"version": "0.0.1",
4+
"description": "Example of simple ReactJS using Reflux and ES6 (+ experimental ES7) features",
5+
"main": "src/index.js",
6+
"scripts": {
7+
"test": "jest",
8+
"bundle": "broccoli build dist",
9+
"serve": "broccoli serve"
10+
},
11+
"jest": {
12+
"scriptPreprocessor": "<rootDir>/node_modules/6to5-jest",
13+
"testFileExtensions": [
14+
"es6",
15+
"js"
16+
],
17+
"moduleFileExtensions": [
18+
"js",
19+
"json",
20+
"es6",
21+
"jsx"
22+
]
23+
},
24+
"author": "",
25+
"license": "ISC",
26+
"devDependencies": {
27+
"6to5": "^1.15.0",
28+
"6to5-jest": "git://github.com/hipertracker/6to5-jest",
29+
"broccoli": "^0.13.3",
30+
"broccoli-6to5-transpiler": "^0.1.1",
31+
"broccoli-browserify": "^0.1.0",
32+
"broccoli-cli": "0.0.1",
33+
"broccoli-env": "0.0.1",
34+
"broccoli-fast-browserify": "^0.2.3",
35+
"broccoli-filter": "^0.1.10",
36+
"broccoli-funnel": "^0.1.6",
37+
"broccoli-gzip": "^0.2.0",
38+
"broccoli-merge-trees": "^0.2.1",
39+
"broccoli-sass": "^0.3.3",
40+
"broccoli-uglify-js": "^0.1.3",
41+
"broccoli-uglify-sourcemap": "^0.2.1",
42+
"browserify": "^8.0.1",
43+
"http-server": "^0.7.4",
44+
"jest-cli": "^0.2.1"
45+
},
46+
"dependencies": {
47+
"bootstrap": "^3.3.1",
48+
"lodash": "^2.4.1",
49+
"react": "*",
50+
"react-bootstrap": "^0.13.0",
51+
"reflux": "*",
52+
"requirejs": "^2.1.15",
53+
"rimraf": "^2.2.8"
54+
}
55+
}

src/__tests__/sum-test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
jest.dontMock('../sum'); // of jest.autoMockOff();
2+
3+
var sum = require('../sum')['default'];
4+
5+
describe('sum', function () {
6+
it('adds 1 + 2 to equal 3', function () {
7+
expect(sum(1, 2)).toBe(3);
8+
});
9+
});

src/app/actions/LinksActions.js

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
let Reflux = require('reflux');
2+
3+
let LinksActions = Reflux.createActions([
4+
'loadData',
5+
'loadDataSuccess'
6+
]);
7+
8+
let data = [
9+
{
10+
url: 'http://facebook.github.io/react/',
11+
title: 'React home page'
12+
},
13+
{
14+
"url": "https://github.com/enaqx/awesome-react",
15+
"title": "A collection of awesome React libraries, resources and shiny things."
16+
},
17+
{
18+
"url": "https://reactjsnews.com/",
19+
"title": "ReactJS News and tutorials from the community"
20+
},
21+
{
22+
"url": "http://spoike.ghost.io/deconstructing-reactjss-flux/",
23+
"title": "Reflux - deconstructing ReactJS's Flux"
24+
},
25+
{
26+
"url": "https://github.com/echenley/react-news",
27+
"title": "Hacker News clone written in React + Reflux + Firebase"
28+
},
29+
{
30+
"url": "https://github.com/WRidder/react-spa",
31+
"title": "Community site SPA based on ReactJS + Reflux"
32+
},
33+
{
34+
"url": "http://react-components.com",
35+
"title": "Searchable database of React components"
36+
},
37+
{
38+
"url": "http://www.reactjsx.com/",
39+
"title": "Search reusable React components"
40+
},
41+
{
42+
"url": "http://formatjs.io/react/",
43+
"title": "React mixin for internationalization"
44+
},
45+
{
46+
"url": "http://isomorphic.net/",
47+
"title": "Isomorphic JavaScript - The future of web app development"
48+
},
49+
{
50+
"url": "https://code.tutsplus.com/courses/getting-started-with-reactjs",
51+
"title": "Getting Started With React.js [screencasts]"
52+
},
53+
{
54+
"url": "https://egghead.io/series/react-flux-architecture",
55+
"title": "React: Flux Architecture [screencasts]"
56+
},
57+
{
58+
"url": "https://www.facebook.com/groups/228321510706889/",
59+
"title": "ReactJS (Facebook group)"
60+
},
61+
{
62+
"url": "http://react-bootstrap.github.io/",
63+
"title": "Bootstrap 3 in React"
64+
},
65+
{
66+
"url": "http://react-components.com/component/react-semantify",
67+
"title": "Semantic-UI in React"
68+
},
69+
{
70+
"url": "https://github.com/sterpe/quantum-flux",
71+
"title": "https://github.com/sterpe/quantum-flux"
72+
},
73+
{
74+
"url": "http://react.rocks/",
75+
"title": "Collection of examples and tutorials"
76+
}
77+
];
78+
79+
LinksActions.loadData.listen(function () {
80+
// here is the place for external communication with servers...
81+
LinksActions.loadDataSuccess.triggerAsync(data);
82+
});
83+
84+
export default LinksActions;

src/app/components/App.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
let React = require('react');
2+
import UsefulLinks from './UsefulLinks';
3+
import LinksActions from '../actions/LinksActions';
4+
5+
var App = React.createClass({
6+
componentDidMount() {
7+
LinksActions.loadData();
8+
},
9+
render() {
10+
let styles = {
11+
margin: 20
12+
};
13+
return (
14+
<section style={styles}>
15+
<UsefulLinks title="Useful Links"/>
16+
</section>
17+
)
18+
}
19+
});
20+
21+
export default App;

src/app/components/UsefulLinks.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
let React = require('react');
2+
let Reflux = require('reflux');
3+
4+
import LinksStore from '../stores/LinksStore';
5+
import {m} from '../lib/tools';
6+
7+
let T = React.PropTypes;
8+
9+
let UsefulLinks = React.createClass({
10+
mixins: [Reflux.listenTo(LinksStore, 'linksUpdate')],
11+
propTypes: {
12+
title: T.string.isRequired
13+
},
14+
getDefaultProps() {
15+
return {
16+
title: 'Useful Links',
17+
style: {backgroundColor: 'white'}
18+
};
19+
},
20+
getInitialState() {
21+
return {
22+
links: []
23+
}
24+
},
25+
linksUpdate(data) {
26+
this.setState({links: data.links});
27+
},
28+
render() {
29+
if (!this.state.links.length) {
30+
return <span/>;
31+
}
32+
let styles = {
33+
item: {
34+
paddingLeft: '10px'
35+
}
36+
};
37+
let style = m(styles.item, this.props.style);
38+
let items = this.state.links.map((item, key) =>
39+
<li key={key}>
40+
<a href={item.url} target="_blank">{item.title}</a>
41+
</li>);
42+
return (
43+
<section>
44+
<h4>{this.props.title}</h4>
45+
<ul style={style}>{items}</ul>
46+
</section>
47+
);
48+
}
49+
});
50+
51+
export default UsefulLinks;

src/app/lib/tools.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
let React = require('react');
2+
let _ = require('lodash');
3+
4+
// mounting a React component to a selector id location
5+
export function mount(component, location) {
6+
if (!location) {
7+
location = document.body;
8+
} else {
9+
location = document.getElementById(location);
10+
}
11+
React.render(React.createFactory(component)(), location);
12+
};
13+
14+
// merging properties, used in React component for aggregating styles
15+
export function m() {
16+
let res = {};
17+
_.each(arguments, (arg) => arg && _.merge(res, arg));
18+
return res;
19+
};
20+

src/app/mixins/.keep

Whitespace-only changes.

0 commit comments

Comments
 (0)