var ReactBootstrap = require('react-bootstrap') , Grid = ReactBootstrap.Grid , Col = ReactBootstrap.Col , Row = ReactBootstrap.Row , ListGroupItem = ReactBootstrap.ListGroupItem , Glyphicon = ReactBootstrap.Glyphicon , OverlayTrigger = ReactBootstrap.OverlayTrigger , Tooltip = ReactBootstrap.Tooltip var React = require('react'); var SetIntervalMixin = require("../common/SetIntervalMixin.js"); var SafeStateChangeMixin = require('../common/SafeStateChangeMixin.js'); var PostContent = require('../common/PostContent.js'); var ReplyModalButton = require('../common/ReplyModalButton.js'); var RetwistModalButton = require('../common/RetwistModalButton.js'); var EventListenerMixin = require('../common/EventListenerMixin.js'); module.exports = Post = React.createClass({ mixins: [ SetIntervalMixin, SafeStateChangeMixin, EventListenerMixin('profileupdatebyuser'), EventListenerMixin('avatarupdatebyuser') ], onprofileupdatebyuser: function(event){ //console.log("catched event",this.state.username,event.detail) var profile =event.detail; if(profile.getUsername()==this.props.post.username){ this.setState(function(state){ state.fullname = profile.getField("fullname"); return state; }) } if(profile.getUsername()==this.state.retwistingUsername){ this.setState(function(state){ state.retwistingUserFullname = profile.getField("fullname"); return state; }) } }, onavatarupdatebyuser: function(event){ //console.log("catched event",this.state.username,event.detail) var avatar =event.detail; if(avatar.getUsername()==this.state.username){ this.setState(function(state){ state.avatar = avatar.getUrl(); return state; }) } }, getInitialState: function() { return { username: this.props.post.username, avatar: "img/genericPerson.png", fullname: "", timeAgo: "", retwistingUsername: this.props.post.username, retwistingUserFullname: this.props.post.username, retwistingUserAvatar: "img/genericPerson.png", }; }, updateTimeAgo: function() { var secondsAgo = Date.now()/1000-this.props.post.timestamp; var newTimeAgo = ""; if (secondsAgo<45) {newTimeAgo="1m"} else if (secondsAgo<45*60) {newTimeAgo=Math.round(secondsAgo/60)+"m"} else if (secondsAgo<18*60*60) {newTimeAgo=Math.round(secondsAgo/60/60)+"h"} else if (secondsAgo<26*24*60*60) {newTimeAgo=Math.round(secondsAgo/24/60/60)+"d"} else if (secondsAgo<9*30.5*24*60*60) {newTimeAgo=Math.round(secondsAgo/30.5/24/60/60)+"mo"} else {newTimeAgo=Math.round(secondsAgo/365/24/60/60)+"y"} this.setStateSafe({timeAgo: newTimeAgo}); }, componentDidMount: function () { var thisComponent = this; var post = Twister.getUser(this.props.post.username).getPost(this.props.post.id); if (post.isRetwist()) { post.getUser().doProfile(function(profile){ thisComponent.setStateSafe({ retwistingUsername: profile.getUsername(), retwistingUserFullname: profile.getField("fullname") }); }); post.getUser().doAvatar(function(avatar){ thisComponent.setStateSafe({ retwistingUserAvatar: avatar.getUrl() }); }); post=post.getRetwistedPost(); } //console.log(this.props.post.username+":post"+this.props.post.id); post.getUser().doAvatar(function(avatar){ if (avatar.getUrl()) { thisComponent.setStateSafe({avatar: avatar.getUrl()}); } }); post.getUser().doProfile(function(profile){ thisComponent.setStateSafe({fullname: profile.getField("fullname")}); }); this.updateTimeAgo(); this.setInterval(this.updateTimeAgo,60000); }, render: function() { var post = Twister.getUser(this.props.post.username).getPost(this.props.post.id); if(!post){ return ( ) } var retwist = false; var retwistWithComment = false; var comment = ""; if (post.isRetwist()) { retwist = true; if(post.isRetwistWithComment()){ retwistWithComment=true; comment = post.getContent(); } post=post.getRetwistedPost(); } if (post.isReply()) { var conversationLink = ( View Conversation }> ); } else { var conversationLink = (); } if (!post.isRetwist()) { var replyLink = Reply }> } else { var replyLink = (); } var retwistLink = Retwist }> return ( {this.state.fullname} {this.state.timeAgo} {retwist && retwisted by {this.state.retwistingUserFullname}{retwistWithComment && ":"} } {conversationLink} {replyLink} {retwistLink} {retwistWithComment && } ); } }); /*
{this.state.fullname} @{post.username} - {post.id}
{post.timestamp}
{post.content}

*/