"use strict"; var Chatroom = React.createClass({ componentDidMount() { this.scrollToBottom(); }, loadMoreMessages() { var earliestMessage = this.props.messages[0]; if (earliestMessage === undefined) return; this.disableScroll = true; socket.emit("message:refresh", { before: earliestMessage.createdAt }); }, sendMessage(message) { socket.emit("newMessage", {message: message}); }, componentDidUpdate() { if (this.disableScroll) { this.disableScroll = false; } else { this.scrollToBottom(); } }, scrollToBottom() { let node = React.findDOMNode(this.refs.messageContainer); node.scrollTop = node.scrollHeight; }, render() { let messages = this.props.messages.map(message => { if (message) { return } }); return (
Gather Chat
); } }); var ChatMessage = React.createClass({ mixins: [ ReactAutolink, ReactEmoji ], getInitialState() { return { createdAt: "" } }, updateCreatedAt() { let self = this; if (this.props.message.createdAt) { self.setState({ createdAt: $.timeago(self.props.message.createdAt) }) } }, componentWillMount() { this.updateCreatedAt(); }, componentDidMount() { this.interval = setInterval(this.updateCreatedAt, 60000); }, componentWillUnmount: function () { clearInterval(this.interval); }, messageContent: function () { let self = this; return self.autolink(self.props.message.content, { target: "_blank", rel: "nofollow" }).map((elem) => { if (_.isString(elem)) { return self.emojify(elem); } else { return elem; } }); }, render() { let deleteButton; let user = this.props.user; if (user && user.admin) { deleteButton = ; } return (
  • User Avatar
    {this.props.message.author.username} {deleteButton} {this.state.createdAt}

    {this.messageContent()}

  • ); } }); var DeleteMessageButton = React.createClass({ handleClick (e) { e.preventDefault(); socket.emit("message:delete", { id: this.props.messageId }); }, render() { return ( ); } }) var MessageBar = React.createClass({ sendMessage(content) { socket.emit("message:new", { content: content }); }, handleSubmit(e) { e.preventDefault(); let content = React.findDOMNode(this.refs.content).value.trim(); if (!content) return; React.findDOMNode(this.refs.content).value = ''; this.sendMessage(content); return; }, render() { return (
    ); } });