Skip to content

Commit 65db621

Browse files
author
azadorozhniy
committed
Implemented grid with baisc cards
1 parent 4a6cb03 commit 65db621

File tree

14 files changed

+178
-78
lines changed

14 files changed

+178
-78
lines changed

src/app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var bodyParser = require('body-parser');
44
var cookieParser = require('cookie-parser');
55
var setupRoutes = require('./server/routes');
66
var setupPassport = require('./server/auth/setup');
7+
var cors = require('cors');
78

89
var app = express();
910

@@ -20,6 +21,7 @@ app.use(express.static(__dirname + '/public'));
2021
app.use(bodyParser.json());
2122
app.use(bodyParser.urlencoded());
2223
app.use(cookieParser());
24+
app.use(cors());
2325

2426
setupPassport(app);
2527
setupRoutes(app);

src/public/js/actions/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
var Reflux = require('reflux');
22

33
module.exports = Reflux.createActions([
4-
'fetchCards'
4+
'fetchCards',
5+
'cardsMatchedWin',
6+
'cardsMatchFailed'
57
]);

src/public/js/app.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ var routes = (
1616
Router.run(routes, function runner (Handler, state) {
1717
React.render(<Handler params={state.params}/>, document.body);
1818
});
19+
20+
module.exports = {};

src/public/js/components/card.jsx

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
var React = require('react');
2+
var Reflux = require('reflux');
3+
var cx = React.addons.classSet;
4+
5+
6+
module.exports = React.createClass({
7+
8+
getInitialState: function () {
9+
return {
10+
opened: false
11+
};
12+
},
13+
14+
onClickCaught: function () {
15+
if (!this.state.opened) {
16+
this.props.onCardClicked(this);
17+
}
18+
},
19+
20+
reveal: function () {
21+
this.setState({
22+
opened: true
23+
});
24+
},
25+
26+
fail: function () {
27+
this.setState({
28+
opened: true,
29+
wrong: true
30+
});
31+
setTimeout((function () {
32+
this.setState({
33+
opened: false,
34+
wrong: false
35+
});
36+
}).bind(this), 2000);
37+
},
38+
39+
succeed: function () {
40+
this.setState({flipped: true, correct: true});
41+
},
42+
43+
44+
render: function () {
45+
var classes = cx({
46+
'opened': this.state.opened,
47+
'correct': this.state.correct,
48+
'wrong': this.state.wrong
49+
});
50+
51+
return (
52+
<div className={'brick '+ (classes || '')} onClick={this.onClickCaught}>
53+
<div className="front">?</div>
54+
<div className="back">
55+
<img src={this.props.url} className="img-thumbnail"/>
56+
</div>
57+
</div>
58+
);
59+
}
60+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./card.jsx');
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
var React = require('react');
2+
var Reflux = require('reflux');
3+
var _ = require('lodash');
4+
5+
var cardsStore = require('stores/cards/cards-store');
6+
var actions = require('actions');
7+
8+
function handleFirstCard (card) {
9+
this.setState({
10+
prevCard: card,
11+
status: 'hasOneChosenCard'
12+
});
13+
card.open();
14+
}
15+
16+
function handleSecondCard (card) {
17+
var prevCard = this.state.prevCard;
18+
if (card === prevCard) {
19+
prevCard.succeed();
20+
actions.cardsMatchedWin()
21+
} else {
22+
actions.cardsMatchFailed()
23+
}
24+
this.setState({
25+
prevCard: null,
26+
status: 'noCardsSelected'
27+
});
28+
}
29+
30+
module.exports = React.createClass({
31+
32+
mixins: [
33+
Reflux.connect(cardsStore, 'cards')
34+
],
35+
36+
getInitialState: function getInitialState () {
37+
return {prevCard: null, status: 'noCardsSelected'};
38+
},
39+
40+
chooseCurrentActivity: function chooseCurrentActivity () {
41+
var map = {};
42+
map['noCardsSelected'] = handleFirstCard.bind(this);
43+
map['hasOneChosenCard'] = handleSecondCard.bind(this);
44+
return map;
45+
},
46+
47+
onCardClicked: function (card) {
48+
var fn = this.chooseCurrentActivity()[this.state.status] || _.noop();
49+
fn(card);
50+
}
51+
,
52+
render: function () {
53+
var renderedCards = this.state.cards.map(function (card, index) {
54+
return <Card card={card} key={index} onCardClicked={this.onCardClicked}/>;
55+
}, this);
56+
57+
return (
58+
<div>
59+
{renderedCards}
60+
</div>
61+
);
62+
}
63+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./grid.jsx');

src/public/js/screens/main/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require("./main.jsx");

src/public/js/screens/main/index.jsx renamed to src/public/js/screens/main/main.jsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
var React = require('react');
22
var Reflux = require('reflux');
33

4+
var PlayGrid = require('./grid');
5+
var Stats = require('./stats');
46

57
module.exports = React.createClass({
68
render: function () {
79
return (
810
<div className="container">
911
<div className="row">
10-
<div className="small-8">
11-
Hellos
12+
<div className="col-lg-8 col-md-7 col-sm-6">
13+
<PlayGrid/>
1214
</div>
13-
<div className="small-4">
14-
World
15+
<div className="col-lg-4 col-md-5 col-sm-6">
16+
<Stats/>
1517
</div>
1618
</div>
1719
</div>

0 commit comments

Comments
 (0)