mirror of
https://github.com/ENSL/ensl_gathers.git
synced 2024-11-27 06:34:14 +00:00
148 lines
15 KiB
JavaScript
148 lines
15 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var Chatroom = React.createClass({displayName: "Chatroom",
|
||
|
getDefaultProps: function () {
|
||
|
return {
|
||
|
history: []
|
||
|
};
|
||
|
},
|
||
|
componentDidMount: function () {
|
||
|
var self = this;
|
||
|
var TIMER_INTERVAL = 60000; // Every minute
|
||
|
|
||
|
socket.on("message:new", function (data) {
|
||
|
var history = self.props.history;
|
||
|
history.push(data);
|
||
|
self.setProps({
|
||
|
history: history
|
||
|
});
|
||
|
self.scrollToBottom();
|
||
|
});
|
||
|
|
||
|
// Message History Retrieved
|
||
|
socket.on("message:refresh", function (data) {
|
||
|
self.setProps({
|
||
|
history: data.chatHistory
|
||
|
});
|
||
|
self.scrollToBottom();
|
||
|
});
|
||
|
|
||
|
socket.emit("message:refresh", {});
|
||
|
|
||
|
self.timer = setInterval(function () {
|
||
|
if (self.refs.messages) self.refs.messages.refreshTime();
|
||
|
}, TIMER_INTERVAL);
|
||
|
},
|
||
|
|
||
|
componentDidUnmount: function () {
|
||
|
clearInterval(this.timer);
|
||
|
},
|
||
|
sendMessage: function (message) {
|
||
|
socket.emit("newMessage", {message: message});
|
||
|
},
|
||
|
scrollToBottom: function () {
|
||
|
var node = React.findDOMNode(this.refs.messageContainer);
|
||
|
node.scrollTop = node.scrollHeight;
|
||
|
},
|
||
|
render: function () {
|
||
|
var messages = this.props.history.map(function (message) {
|
||
|
return (
|
||
|
React.createElement(ChatMessage, {
|
||
|
avatar: message.author.avatar,
|
||
|
username: message.author.username,
|
||
|
content: message.content,
|
||
|
ref: "messages",
|
||
|
createdAt: message.createdAt})
|
||
|
);
|
||
|
});
|
||
|
return (
|
||
|
React.createElement("div", {className: "panel panel-default"},
|
||
|
React.createElement("div", {className: "panel-heading"}, "Gather Chat"),
|
||
|
React.createElement("div", {className: "panel-body"},
|
||
|
React.createElement("ul", {className: "chat", id: "chatmessages", ref: "messageContainer"},
|
||
|
messages
|
||
|
)
|
||
|
),
|
||
|
React.createElement("div", {className: "panel-footer"},
|
||
|
React.createElement(MessageBar, null)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var ChatMessage = React.createClass({displayName: "ChatMessage",
|
||
|
getInitialState: function () {
|
||
|
return {
|
||
|
timeAgo: $.timeago(this.props.createdAt)
|
||
|
}
|
||
|
},
|
||
|
refreshTime: function () {
|
||
|
var self = this;
|
||
|
self.setState({
|
||
|
timeAgo: $.timeago(self.props.createdAt)
|
||
|
});
|
||
|
},
|
||
|
render: function () {
|
||
|
return (
|
||
|
React.createElement("li", {className: "left clearfix"},
|
||
|
React.createElement("span", {className: "chat-img pull-left"},
|
||
|
React.createElement("img", {
|
||
|
src: this.props.avatar,
|
||
|
alt: "User Avatar",
|
||
|
height: "40",
|
||
|
width: "40",
|
||
|
className: "img-circle"})
|
||
|
),
|
||
|
React.createElement("div", {className: "chat-body clearfix"},
|
||
|
React.createElement("div", {className: "header"},
|
||
|
React.createElement("strong", {className: "primary-font"}, this.props.username),
|
||
|
React.createElement("small", {className: "pull-right text-muted"},
|
||
|
React.createElement("i", {className: "fa fa-clock-o fa-fw"}), " ", this.state.timeAgo
|
||
|
)
|
||
|
),
|
||
|
React.createElement("p", null, this.props.content)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var MessageBar = React.createClass({displayName: "MessageBar",
|
||
|
sendMessage: function (content) {
|
||
|
socket.emit("message:new", {
|
||
|
content: content
|
||
|
});
|
||
|
},
|
||
|
handleSubmit: function (e) {
|
||
|
e.preventDefault();
|
||
|
var content = React.findDOMNode(this.refs.content).value.trim();
|
||
|
if (!content) return;
|
||
|
React.findDOMNode(this.refs.content).value = '';
|
||
|
this.sendMessage(content);
|
||
|
return;
|
||
|
},
|
||
|
render: function () {
|
||
|
return (
|
||
|
React.createElement("form", {onSubmit: this.handleSubmit},
|
||
|
React.createElement("div", {className: "input-group"},
|
||
|
React.createElement("input", {
|
||
|
id: "btn-input",
|
||
|
type: "text",
|
||
|
className: "form-control",
|
||
|
ref: "content",
|
||
|
placeholder: "Be polite please..."}),
|
||
|
React.createElement("span", {className: "input-group-btn"},
|
||
|
React.createElement("input", {
|
||
|
type: "submit",
|
||
|
className: "btn btn-primary",
|
||
|
id: "btn-chat",
|
||
|
value: "Send"})
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZWQuanMiLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixJQUFJLDhCQUE4Qix3QkFBQTtDQUNqQyxlQUFlLEVBQUUsWUFBWTtFQUM1QixPQUFPO0dBQ04sT0FBTyxFQUFFLEVBQUU7R0FDWCxDQUFDO0VBQ0Y7Q0FDRCxpQkFBaUIsRUFBRSxZQUFZO0VBQzlCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixFQUFFLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQzs7RUFFM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxJQUFJLEVBQUU7R0FDeEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7R0FDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2IsT0FBTyxFQUFFLE9BQU87SUFDaEIsQ0FBQyxDQUFDO0dBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3pCLEdBQUcsQ0FBQyxDQUFDO0FBQ0w7O0VBRUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLElBQUksRUFBRTtHQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO0lBQ3pCLENBQUMsQ0FBQztHQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN6QixHQUFHLENBQUMsQ0FBQzs7QUFFTCxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7O0VBRW5DLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFlBQVk7R0FDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztHQUN6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
|