Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a Base Repository
facebook/flux
AnthonyPAlicea/flux
BlackWidowMaker/flux
Eric-Vandenberg/flux
FreddyZhao/flux
JerJohn15/flux
KelWill/flux
KiaFathi/flux
Lucifer11111/flux
LysY1984/flux
MTco/flux
MaTriXy/flux
RP-3/flux
RyotaSugawara/flux
SEGVeenstra/flux
SammyK/flux
Semigradsky/flux
Shinigamae/flux
StevenWayneRussell/flux
UnknownmAc/flux
aaron-goshine/flux
abergs/flux
abhishekbhalani/flux
aboldisor/flux
acelan86/flux
adonis2014/flux
alduro/flux
alexeyraspopov/flux
andreasthoelke/flux
andrlu04/flux
arichens/flux
aronslee/flux
arrmac/flux
austburn/flux
bendozy/flux
benleiken/flux
blackhat06/flux
bladesling/flux
bluebeckie/flux
bluenet-jack83/flux
bradparks/flux-1
brunoeris/flux
calderaro/flux
cathylill/flux
cgack/flux
chaithu563/flux
chindyaev/flux
chouxiaozi/flux
chrisfarms/flux
cirocosta/flux
cmaish/flux
cwarden/flux
danekszy/flux
danethurber/flux
davidxi/flux
deathtrix/flux
demon1ak/flux
dhan99/flux
dozoisch/flux
dqdinh/flux
edshadi/flux
eiriklv/flux
emilmork/flux
ems2141/flux
enthanMe/flux
ericksoun/flux
esterad/flux
ethanliew/flux
eyevk/flux
fatelei/flux
fckiss/flux
fedomkf1/flux
fengsao/flux
gabrielscindain/flux
ganeshr2/flux
gnesher/flux
goesang/flux
grnbeagle/flux
gurdasnijor/flux-examples-webpack
harrybabu/flux
haruair/flux
ibebrett/flux
icodeforlove/flux
ihodes/flux
iirvine/flux
isergey/flux
jamiepg1/flux
javy-liu/flux
jayaprad/flux
jdeal/flux
jeffbonasso/flux
jhubert/flux
jim-y/flux
jimjea/flux
joaoahmad/flux
johnny-alibuyog/flux
joncode/flux
joseph-hurtado/flux
jrodd32/flux
julienewton/flux
justin808/flux
justinwoo/flux
kaesonho/react-i13n-flux-examples
kamatchu/flux
karan2016/flux
kaushik94/flux
kedemd/flux
krahman/flux
kublermdk/flux
laurakantti/flux
leovander/flux
lgvalle/flux
manmadareddy/flux
marcusmellis89/flux
markpalfreeman/flux
marmikcfc/flux
mcanthony/flux
mehdi-cit/flux
mohtshm/flux
msdgwzhy6/flux
msmakhlouf/flux
namsoila/flux
ncherro/flux
ndreckshage/flux
neelofar/flux
ngEdmundas/flux
nick/flux
nickholub/flux
nicolashery/flux
niilante/flux
nikolayvoronchikhin/flux
nikovanmeurs/flux
nishp1/flux
nobodyguy/flux
nqphuong/flux
nwomack/flux
oceanjack/flux
olivierntk/flux
oya0306/flux
pauldailly/flux
pieterv/flux
pohchen/flux
prabhash1785/flux
prabubio/flux
prodigeni/flux
qdch520/flux
queeniejing/flux
raaum/flux
randylien/flux
rap1ds/flux
rasata/flux
raykanani/flux
react-lib/flux
rebotak/flux
remyyounes/flux
rewmike/flux
rmanivannan/flux
rtfeldman/flux
ruanwz/flux
ruifortes/flux
rybex/flux
saitodisse/flux
samsep/flux
seco/flux
sethmcl/flux
shaunstanislaus/flux
shurong2199/flux
shyamalschandra/flux
sillyMoney/flux
sophiebits/flux
sorpaas/flux
sparx/flux
sputh/flux
stephanieerin/flux
stephy/flux
stevenhsieh/flux
stillema/flux
strax/flux
tc28/flux
tedj/flux
tejomayonline/flux
thathenderson/flux
thefuture2092/flux
tjdecke/flux
tmasternak-infusion/flux
tsing/flux
uapui-dev/flux
vagrantinoz/flux
valmormn/flux
varunpal/flux
vasco3/flux
vexilar/flux
vojtatranta/flux
wanchangjun/flux
webdev1001/flux
wincent/flux
yoshuawuyts/flux
yuyaun/flux
zeng-ge/flux
zeusfactor/flux
Nothing to show
Choose a base branch
Nothing to show
...
Choose a Head Repository
facebook/flux
AnthonyPAlicea/flux
BlackWidowMaker/flux
Eric-Vandenberg/flux
FreddyZhao/flux
JerJohn15/flux
KelWill/flux
KiaFathi/flux
Lucifer11111/flux
LysY1984/flux
MTco/flux
MaTriXy/flux
RP-3/flux
RyotaSugawara/flux
SEGVeenstra/flux
SammyK/flux
Semigradsky/flux
Shinigamae/flux
StevenWayneRussell/flux
UnknownmAc/flux
aaron-goshine/flux
abergs/flux
abhishekbhalani/flux
aboldisor/flux
acelan86/flux
adonis2014/flux
alduro/flux
alexeyraspopov/flux
andreasthoelke/flux
andrlu04/flux
arichens/flux
aronslee/flux
arrmac/flux
austburn/flux
bendozy/flux
benleiken/flux
blackhat06/flux
bladesling/flux
bluebeckie/flux
bluenet-jack83/flux
bradparks/flux-1
brunoeris/flux
calderaro/flux
cathylill/flux
cgack/flux
chaithu563/flux
chindyaev/flux
chouxiaozi/flux
chrisfarms/flux
cirocosta/flux
cmaish/flux
cwarden/flux
danekszy/flux
danethurber/flux
davidxi/flux
deathtrix/flux
demon1ak/flux
dhan99/flux
dozoisch/flux
dqdinh/flux
edshadi/flux
eiriklv/flux
emilmork/flux
ems2141/flux
enthanMe/flux
ericksoun/flux
esterad/flux
ethanliew/flux
eyevk/flux
fatelei/flux
fckiss/flux
fedomkf1/flux
fengsao/flux
gabrielscindain/flux
ganeshr2/flux
gnesher/flux
goesang/flux
grnbeagle/flux
gurdasnijor/flux-examples-webpack
harrybabu/flux
haruair/flux
ibebrett/flux
icodeforlove/flux
ihodes/flux
iirvine/flux
isergey/flux
jamiepg1/flux
javy-liu/flux
jayaprad/flux
jdeal/flux
jeffbonasso/flux
jhubert/flux
jim-y/flux
jimjea/flux
joaoahmad/flux
johnny-alibuyog/flux
joncode/flux
joseph-hurtado/flux
jrodd32/flux
julienewton/flux
justin808/flux
justinwoo/flux
kaesonho/react-i13n-flux-examples
kamatchu/flux
karan2016/flux
kaushik94/flux
kedemd/flux
krahman/flux
kublermdk/flux
laurakantti/flux
leovander/flux
lgvalle/flux
manmadareddy/flux
marcusmellis89/flux
markpalfreeman/flux
marmikcfc/flux
mcanthony/flux
mehdi-cit/flux
mohtshm/flux
msdgwzhy6/flux
msmakhlouf/flux
namsoila/flux
ncherro/flux
ndreckshage/flux
neelofar/flux
ngEdmundas/flux
nick/flux
nickholub/flux
nicolashery/flux
niilante/flux
nikolayvoronchikhin/flux
nikovanmeurs/flux
nishp1/flux
nobodyguy/flux
nqphuong/flux
nwomack/flux
oceanjack/flux
olivierntk/flux
oya0306/flux
pauldailly/flux
pieterv/flux
pohchen/flux
prabhash1785/flux
prabubio/flux
prodigeni/flux
qdch520/flux
queeniejing/flux
raaum/flux
randylien/flux
rap1ds/flux
rasata/flux
raykanani/flux
react-lib/flux
rebotak/flux
remyyounes/flux
rewmike/flux
rmanivannan/flux
rtfeldman/flux
ruanwz/flux
ruifortes/flux
rybex/flux
saitodisse/flux
samsep/flux
seco/flux
sethmcl/flux
shaunstanislaus/flux
shurong2199/flux
shyamalschandra/flux
sillyMoney/flux
sophiebits/flux
sorpaas/flux
sparx/flux
sputh/flux
stephanieerin/flux
stephy/flux
stevenhsieh/flux
stillema/flux
strax/flux
tc28/flux
tedj/flux
tejomayonline/flux
thathenderson/flux
thefuture2092/flux
tjdecke/flux
tmasternak-infusion/flux
tsing/flux
uapui-dev/flux
vagrantinoz/flux
valmormn/flux
varunpal/flux
vasco3/flux
vexilar/flux
vojtatranta/flux
wanchangjun/flux
webdev1001/flux
wincent/flux
yoshuawuyts/flux
yuyaun/flux
zeng-ge/flux
zeusfactor/flux
Nothing to show
Choose a head branch
Checking mergeability… Don’t worry, you can still create the pull request.
  • 15 commits
  • 8 files changed
  • 0 commit comments
  • 1 contributor
@@ -12,7 +12,7 @@
.chatapp {
font-family: 'Muli', 'Helvetica Neue', helvetica, arial;
- max-width: 760px;
+ max-width: 1000px;
margin: 20px auto;
overflow: hidden;
}
@@ -18,9 +18,11 @@ var ChatWebAPIUtils = require('./utils/ChatWebAPIUtils');
var React = require('react');
window.React = React; // export for http://fb.me/react-devtools
-ChatExampleData.init(); // load example data into localstorage
+//ChatExampleData.init(); // load example data into localstorage
-ChatWebAPIUtils.getAllMessages();
+ChatWebAPIUtils.init(function () {
+ ChatWebAPIUtils.getAllMessages();
+});
React.render(
<ChatApp />,
@@ -51,6 +51,7 @@ var MessageSection = React.createClass({
render: function() {
var messageListItems = this.state.messages.map(getMessageListItem);
+ if (!this.state.thread) return (<div className="message-section"/>);
return (
<div className="message-section">
<h3 className="message-thread-heading">{this.state.thread.name}</h3>
@@ -67,6 +68,7 @@ var MessageSection = React.createClass({
},
_scrollToBottom: function() {
+ if (!this.state.thread) return;
var ul = this.refs.messageList.getDOMNode();
ul.scrollTop = ul.scrollHeight;
},
@@ -38,7 +38,7 @@ var ThreadListItem = React.createClass({
{lastMessage.date.toLocaleTimeString()}
</div>
<div className="thread-last-message">
- {lastMessage.text}
+ &lt;{lastMessage.authorName}&gt; {lastMessage.text}
</div>
</li>
);
@@ -40,7 +40,7 @@ var ThreadStore = assign({}, EventEmitter.prototype, {
if (!_currentID) {
var allChrono = this.getAllChrono();
- _currentID = allChrono[allChrono.length - 1].id;
+ _currentID = allChrono[0].id;
}
_threads[_currentID].lastMessage.isRead = true;
@@ -83,9 +83,9 @@ var ThreadStore = assign({}, EventEmitter.prototype, {
}
orderedThreads.sort(function(a, b) {
if (a.lastMessage.date < b.lastMessage.date) {
- return -1;
- } else if (a.lastMessage.date > b.lastMessage.date) {
return 1;
+ } else if (a.lastMessage.date > b.lastMessage.date) {
+ return -1;
}
return 0;
});
@@ -112,6 +112,11 @@ ThreadStore.dispatchToken = ChatAppDispatcher.register(function(action) {
ThreadStore.emitChange();
break;
+ case ActionTypes.RECEIVE_RAW_CREATED_MESSAGE:
+ ThreadStore.init([ action.rawMessage ]);
+ ThreadStore.emitChange();
+ break;
+
case ActionTypes.RECEIVE_RAW_MESSAGES:
ThreadStore.init(action.rawMessages);
ThreadStore.emitChange();
@@ -10,6 +10,8 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+var ChatWebAPIUtils = require('./ChatWebAPIUtils');
+
module.exports = {
convertRawMessage: function(rawMessage, currentThreadID) {
@@ -28,7 +30,7 @@ module.exports = {
return {
id: 'm_' + timestamp,
threadID: currentThreadID,
- authorName: 'Bill', // hard coded for the example
+ authorName: ChatWebAPIUtils.getUserId(),
date: new Date(timestamp),
text: text,
isRead: true
@@ -12,44 +12,95 @@
var ChatServerActionCreators = require('../actions/ChatServerActionCreators');
-// !!! Please Note !!!
-// We are using localStorage as an example, but in a real-world scenario, this
-// would involve XMLHttpRequest, or perhaps a newer client-server protocol.
-// The function signatures below might be similar to what you would build, but
-// the contents of the functions are just trying to simulate client-server
-// communication and server-side processing.
+var sdk;
+var client;
+var homeserverUrl = "https://matrix.org";
+
+function _getBody(event) {
+ if (event.content.msgtype === "m.emote") {
+ return ("* " + client.getFriendlyDisplayName(event.user_id, event.room_id) + " " + event.content.body);
+ }
+ else {
+ return event.content.body;
+ }
+}
module.exports = {
- getAllMessages: function() {
- // simulate retrieving data from a database
- var rawMessages = JSON.parse(localStorage.getItem('messages'));
+ init: function(callback) {
+ sdk = require("matrix-js-sdk");
+ sdk.request(require("browser-request"));
- // simulate success callback
- ChatServerActionCreators.receiveAll(rawMessages);
+ client = sdk.createClient(homeserverUrl, {}, new sdk.MatrixInMemoryStore());
+ var credentials = JSON.parse(localStorage.getItem('credentials'));
+ if (!credentials || !credentials.accessToken) {
+ var userId = prompt("Enter your matrix user id");
+ var password = prompt("Enter your matrix password (WARNING: your typing will be visible)");
+ client.loginWithPassword(userId, password, function(err, data) {
+ if (err) {
+ alert(JSON.stringify(err));
+ }
+ client.credentials.accessToken = data.access_token;
+ client.credentials.userId = data.user_id;
+ localStorage.setItem('credentials', JSON.stringify(client.credentials));
+ callback();
+ });
+ } else {
+ client.credentials.accessToken = credentials.accessToken;
+ client.credentials.userId = credentials.userId;
+ callback();
+ }
},
- createMessage: function(message, threadName) {
- // simulate writing to a database
- var rawMessages = JSON.parse(localStorage.getItem('messages'));
+ getAllMessages: function() {
+ client.startClient(function(err, events, live) {
+ var rawMessages = [];
+ if (err) {
+ console.error("err %s", JSON.stringify(err));
+ } else {
+ for (var i = 0; i < events.length; i++) {
+ var event = events[i].event;
+ if (event.type !== "m.room.message") continue;
+ if (live && event.user_id === client.credentials.userId) continue; // XXX: local echo hack
+ var message = {
+ id: event.event_id,
+ threadID: event.room_id,
+ // XXX: should these be event.getHelper() methods instead?
+ threadName: client.getFriendlyRoomName(event.room_id),
+ authorName: client.getFriendlyDisplayName(event.user_id, event.room_id),
+ text: _getBody(event),
+ timestamp: event.origin_server_ts,
+ };
+ rawMessages.push(message);
+ }
+ }
+ ChatServerActionCreators.receiveAll(rawMessages);
+ }, 12);
+ },
+
+ getUserId: function() {
+ return client.credentials.userId;
+ },
+
+ createMessage: function(message) {
var timestamp = Date.now();
var id = 'm_' + timestamp;
var threadID = message.threadID || ('t_' + Date.now());
var createdMessage = {
id: id,
threadID: threadID,
- threadName: threadName,
+ threadName: client.getFriendlyRoomName(threadID),
authorName: message.authorName,
text: message.text,
timestamp: timestamp
};
- rawMessages.push(createdMessage);
- localStorage.setItem('messages', JSON.stringify(rawMessages));
+
+ client.sendTextMessage(threadID, message.text, function (err,data) {
+ if (err) {
+ console.error("err %s", JSON.stringify(err));
+ }
+ });
- // simulate success callback
- setTimeout(function() {
- ChatServerActionCreators.receiveCreatedMessage(createdMessage);
- }, 0);
+ ChatServerActionCreators.receiveCreatedMessage(createdMessage);
}
-
};
@@ -11,9 +11,11 @@
"react": "^0.12.0"
},
"devDependencies": {
+ "browser-request": "^0.3.3",
"browserify": "^6.2.0",
"envify": "^3.0.0",
"jest-cli": "~0.1.17",
+ "matrix-js-sdk": "0.0.2",
"reactify": "^0.15.2",
"uglify-js": "~2.4.15",
"watchify": "^2.1.1"

No commit comments for this range