Skip to content

Commit e9e428d

Browse files
committed
initial commit
0 parents  commit e9e428d

File tree

13 files changed

+254
-0
lines changed

13 files changed

+254
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules/
2+
main.js
3+
style.css
4+
.idea

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Gallery App
2+
====
3+
4+
Image Gallery utilizing Imgur API, built with React

gulpfile.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
var gulp = require('gulp');
2+
var gutil = require('gulp-util');
3+
var source = require('vinyl-source-stream');
4+
var browserify = require('browserify');
5+
var watchify = require('watchify');
6+
var reactify = require('reactify');
7+
var notifier = require('node-notifier');
8+
var server = require('gulp-server-livereload');
9+
var concat = require('gulp-concat');
10+
var sass = require('gulp-sass');
11+
var watch = require('gulp-watch');
12+
13+
var notify = function(error) {
14+
var message = 'In: ';
15+
var title = 'Error: ';
16+
17+
if(error.description) {
18+
title += error.description;
19+
} else if (error.message) {
20+
title += error.message;
21+
}
22+
23+
if(error.filename) {
24+
var file = error.filename.split('/');
25+
message += file[file.length-1];
26+
}
27+
28+
if(error.lineNumber) {
29+
message += '\nOn Line: ' + error.lineNumber;
30+
}
31+
32+
notifier.notify({title: title, message: message});
33+
};
34+
35+
var bundler = watchify(browserify({
36+
entries: ['./src/app.jsx'],
37+
transform: [reactify],
38+
extensions: ['.jsx'],
39+
debug: true,
40+
cache: {},
41+
packageCache: {},
42+
fullPaths: true
43+
}));
44+
45+
function bundle() {
46+
return bundler
47+
.bundle()
48+
.on('error', notify)
49+
.pipe(source('main.js'))
50+
.pipe(gulp.dest('./'))
51+
}
52+
bundler.on('update', bundle)
53+
54+
gulp.task('build', function() {
55+
bundle()
56+
});
57+
58+
gulp.task('serve', function(done) {
59+
gulp.src('')
60+
.pipe(server({
61+
livereload: {
62+
enable: true,
63+
filter: function(filePath, cb) {
64+
if(/main.js/.test(filePath)) {
65+
cb(true)
66+
} else if(/style.css/.test(filePath)){
67+
cb(true)
68+
}
69+
}
70+
},
71+
open: true
72+
}));
73+
});
74+
75+
gulp.task('sass', function () {
76+
gulp.src('./sass/**/*.scss')
77+
.pipe(sass().on('error', sass.logError))
78+
.pipe(concat('style.css'))
79+
.pipe(gulp.dest('./'));
80+
});
81+
82+
gulp.task('default', ['build', 'serve', 'sass', 'watch']);
83+
84+
gulp.task('watch', function () {
85+
gulp.watch('./sass/**/*.scss', ['sass']);
86+
});

index.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<head>
2+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
3+
<link rel="stylesheet" href="style.css">
4+
</head>
5+
<body>
6+
<div class="container">
7+
</div>
8+
</body>
9+
<script src="main.js"></script>

package.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"name": "react-starter",
3+
"version": "1.0.0",
4+
"main": "index.js",
5+
"scripts": {
6+
"test": "echo \"Error: no test specified\" && exit 1"
7+
},
8+
"author": "",
9+
"license": "ISC",
10+
"dependencies": {
11+
"browserify": "^9.0.3",
12+
"gulp": "^3.8.11",
13+
"gulp-concat": "^2.5.2",
14+
"gulp-react": "^3.0.1",
15+
"gulp-sass": "^2.0.1",
16+
"gulp-server-livereload": "^1.3.0",
17+
"gulp-util": "^3.0.4",
18+
"gulp-watch": "^4.2.4",
19+
"node-notifier": "^4.2.1",
20+
"react": "^0.13.1",
21+
"react-router": "^1.0.0-beta2",
22+
"reactify": "^1.1.0",
23+
"reflux": "^0.3.0",
24+
"vinyl-source-stream": "^1.1.0",
25+
"watchify": "^2.4.0",
26+
"whatwg-fetch": "^0.10.1"
27+
},
28+
"devDependencies": {}
29+
}

sass/style.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.black {
2+
color: black
3+
}

src/app.jsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
var React = require('react');
2+
var Routes = require('./routes');
3+
var Api = require('./utils/api');
4+
5+
React.render(Routes, document.querySelector('.container'));

src/components/header.jsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
var React = require('react');
2+
var Router = require('react-router');
3+
var Link = Router.Link;
4+
5+
module.exports = React.createClass({
6+
render: function() {
7+
return (
8+
<nav className="navbar navbar-default header">
9+
<div className="container-fluid">
10+
<Link to="/" className="navbar-brand">
11+
Gallery App
12+
</Link>
13+
<ul className="nav navbar-nav navbar-right">
14+
<li><a>Topic #1</a></li>
15+
<li><a>Topic #2</a></li>
16+
</ul>
17+
</div>
18+
</nav>
19+
)
20+
}
21+
});

src/components/main.jsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var React = require('react');
2+
var Header = require('./header');
3+
var TopicList = require('./topic-list');
4+
5+
module.exports = React.createClass({
6+
render: function() {
7+
return <div>
8+
<Header />
9+
{this.content()}
10+
</div>
11+
},
12+
content: function () {
13+
if(this.props.children){
14+
return this.props.children
15+
} else {
16+
return <TopicList />
17+
}
18+
}
19+
});

src/components/topic-list.jsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
var React = require('react');
2+
var TopicStore = require('../stores/topic-store');
3+
4+
module.exports = React.createClass({
5+
getInitialState: function () {
6+
return {
7+
topics: []
8+
}
9+
},
10+
componentWillMount: function () {
11+
TopicStore.getTopics()
12+
.then(function () {
13+
this.setState({
14+
topics: TopicStore.topics
15+
})
16+
}.bind(this));
17+
},
18+
render: function() {
19+
return <div className="list-group">
20+
Topic list
21+
{this.renderTopics()}
22+
</div>
23+
},
24+
renderTopics: function () {
25+
return this.state.topics.map(function (topic) {
26+
return <li>
27+
{topic}
28+
</li>
29+
})
30+
}
31+
});

0 commit comments

Comments
 (0)