Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 50993
1
// Generated by CoffeeScript 1.9.2
2
3
/*
4
5
* Flummox using CoffeeScript --
6
7
* build:
8
9
cjsx -b -c flummox.cjsx && browserify --exports=require flummox.js -o flummox0.js
10
*/
11
var Actions, App, AppFlux, Flux, FluxComponent, MessageActions, MessageStore, React, Store, flux, log, page, ref, rtypes,
12
slice = [].slice,
13
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
14
hasProp = {}.hasOwnProperty;
15
16
log = function() {
17
var s;
18
s = 1 <= arguments.length ? slice.call(arguments, 0) : [];
19
return console.log.apply(console, s);
20
};
21
22
log("flummox.cjsx");
23
24
ref = require('flummox'), Actions = ref.Actions, Store = ref.Store, Flux = ref.Flux;
25
26
MessageActions = (function(superClass) {
27
extend(MessageActions, superClass);
28
29
function MessageActions() {
30
return MessageActions.__super__.constructor.apply(this, arguments);
31
}
32
33
MessageActions.prototype.createMessage = function(messageContent) {
34
return {
35
content: messageContent,
36
date: Date.now()
37
};
38
};
39
40
MessageActions.prototype.clearMessages = function() {
41
log("clearMessages");
42
return {};
43
};
44
45
return MessageActions;
46
47
})(Actions);
48
49
MessageStore = (function(superClass) {
50
extend(MessageStore, superClass);
51
52
function MessageStore(flux) {
53
var messageActionIds;
54
MessageStore.__super__.constructor.call(this);
55
messageActionIds = flux.getActionIds('messages');
56
this.register(messageActionIds.createMessage, this.handleNewMessage);
57
this.register(messageActionIds.clearMessages, this.clearMessages);
58
this.state = {
59
messages: []
60
};
61
}
62
63
MessageStore.prototype.handleNewMessage = function(message) {
64
log("appending new message");
65
this.setState({
66
messages: this.state.messages.concat([message])
67
});
68
return log("now state=", this.state);
69
};
70
71
MessageStore.prototype.clearMessages = function() {
72
log("clearing messages");
73
return this.setState({
74
messages: []
75
});
76
};
77
78
return MessageStore;
79
80
})(Store);
81
82
AppFlux = (function(superClass) {
83
extend(AppFlux, superClass);
84
85
function AppFlux() {
86
log("AppFlux constructor");
87
AppFlux.__super__.constructor.call(this);
88
}
89
90
return AppFlux;
91
92
})(Flux);
93
94
flux = new AppFlux();
95
96
flux.createActions('messages', MessageActions);
97
98
flux.createStore('messages', MessageStore, flux);
99
100
flux.addListener('dispatch', function(payload) {
101
return log('Dispatch: ', payload);
102
});
103
104
window.flux = flux;
105
106
window.React = React = require('react');
107
108
rtypes = React.PropTypes;
109
110
App = (function(superClass) {
111
extend(App, superClass);
112
113
function App() {
114
return App.__super__.constructor.apply(this, arguments);
115
}
116
117
App.prototype.propTypes = {
118
title: rtypes.string
119
};
120
121
App.prototype.message_list = function() {
122
var i, j, len, m, ref1, results;
123
if (this.props.messages != null) {
124
ref1 = this.props.messages;
125
results = [];
126
for (i = j = 0, len = ref1.length; j < len; i = ++j) {
127
m = ref1[i];
128
results.push(React.createElement("div", {
129
"key": i
130
}, m));
131
}
132
return results;
133
}
134
};
135
136
App.prototype.render = function() {
137
return React.createElement("div", null, React.createElement("h1", null, this.props.title), React.createElement("form", {
138
"onSubmit": this.submit_handler
139
}, React.createElement("button", {
140
"type": "submit"
141
}, "Send a new message"), this.message_list()), React.createElement("form", {
142
"onSubmit": this.clear_handler
143
}, React.createElement("button", {
144
"type": "submit"
145
}, "Clear messages")));
146
};
147
148
App.prototype.submit_handler = function(event) {
149
event.preventDefault();
150
log("new message button pushed");
151
return flux.getActions('messages').createMessage("the button was pushed -- " + (Math.random()));
152
};
153
154
App.prototype.clear_handler = function(event) {
155
event.preventDefault();
156
log("clear button pushed");
157
return flux.getActions('messages').clearMessages();
158
};
159
160
return App;
161
162
})(React.Component);
163
164
FluxComponent = require('flummox/component');
165
166
window.FluxComponent = FluxComponent;
167
168
log("FluxComponent=", FluxComponent);
169
170
page = function() {
171
return React.createElement(FluxComponent, {
172
"flux": flux,
173
"connectToStores": ['messages']
174
}, React.createElement(App, {
175
"title": "Demo"
176
}));
177
};
178
179
log("render");
180
181
React.render(page(), document.getElementById('app'));
182
183