// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. // See License.txt for license information. var PostStore = require('../stores/post_store.jsx'); var ChannelStore = require('../stores/channel_store.jsx'); var UserProfile = require( './user_profile.jsx' ); var UserStore = require('../stores/user_store.jsx'); var AppDispatcher = require('../dispatcher/app_dispatcher.jsx'); var utils = require('../utils/utils.jsx'); var SearchBox =require('./search_bar.jsx'); var CreateComment = require( './create_comment.jsx' ); var Constants = require('../utils/constants.jsx'); var ViewImageModal = require('./view_image.jsx'); var ActionTypes = Constants.ActionTypes; RhsHeaderPost = React.createClass({ handleClose: function(e) { e.preventDefault(); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_SEARCH, results: null }); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_POST_SELECTED, results: null }); }, handleBack: function(e) { e.preventDefault(); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_SEARCH_TERM, term: this.props.fromSearch, do_search: true, is_mention_search: this.props.isMentionSearch }); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_POST_SELECTED, results: null }); }, render: function() { var back = this.props.fromSearch ? : ""; return (
{back}Message Details
); } }); RootPost = React.createClass({ handleImageClick: function(e) { this.setState({startImgId: parseInt($(e.target.parentNode).attr('data-img-id'))}); }, getInitialState: function() { return { startImgId: 0 }; }, render: function() { var postImageModalId = "rhs_view_image_modal_" + this.props.post.id; var message = utils.textToJsx(this.props.post.message); var filenames = this.props.post.filenames; var isOwner = UserStore.getCurrentId() == this.props.post.user_id; var timestamp = UserStore.getProfile(this.props.post.user_id).update_at; var channel = ChannelStore.get(this.props.post.channel_id); var type = "Post"; if (this.props.post.root_id.length > 0) { type = "Comment"; } var currentUserCss = ""; if (UserStore.getCurrentId() === this.props.post.user_id) { currentUserCss = "current--user"; } if (channel) { channelName = (channel.type === 'D') ? "Private Message" : channel.display_name; } if (filenames) { var postFiles = []; var images = []; var re1 = new RegExp(' ', 'g'); var re2 = new RegExp('\\(', 'g'); var re3 = new RegExp('\\)', 'g'); for (var i = 0; i < filenames.length && i < Constants.MAX_DISPLAY_FILES; i++) { var fileSplit = filenames[i].split('.'); if (fileSplit.length < 2) continue; var ext = fileSplit[fileSplit.length-1]; fileSplit.splice(fileSplit.length-1,1); var filePath = fileSplit.join('.'); var filename = filePath.split('/')[filePath.split('/').length-1]; var ftype = utils.getFileType(ext); if (ftype === "image") { var url = filePath.replace(re1, '%20').replace(re2, '%28').replace(re3, '%29'); postFiles.push(
); images.push(filenames[i]); } else { postFiles.push(
); } } } return (
{ channelName }
  • { isOwner ? : "" }

{message}

{ filenames.length > 0 ?
{ postFiles }
: "" } { images.length > 0 ? : "" }

); } }); CommentPost = React.createClass({ handleImageClick: function(e) { this.setState({startImgId: parseInt($(e.target.parentNode).attr('data-img-id'))}); }, getInitialState: function() { return { startImgId: 0 }; }, render: function() { var commentClass = "post"; var currentUserCss = ""; if (UserStore.getCurrentId() === this.props.post.user_id) { currentUserCss = "current--user"; } var postImageModalId = "rhs_comment_view_image_modal_" + this.props.post.id; var filenames = this.props.post.filenames; var isOwner = UserStore.getCurrentId() == this.props.post.user_id; var type = "Post" if (this.props.post.root_id.length > 0) { type = "Comment" } if (filenames) { var postFiles = []; var images = []; var re1 = new RegExp(' ', 'g'); var re2 = new RegExp('\\(', 'g'); var re3 = new RegExp('\\)', 'g'); for (var i = 0; i < filenames.length && i < Constants.MAX_DISPLAY_FILES; i++) { var fileSplit = filenames[i].split('.'); if (fileSplit.length < 2) continue; var ext = fileSplit[fileSplit.length-1]; fileSplit.splice(fileSplit.length-1,1) var filePath = fileSplit.join('.'); var filename = filePath.split('/')[filePath.split('/').length-1]; var type = utils.getFileType(ext); if (type === "image") { var url = filePath.replace(re1, '%20').replace(re2, '%28').replace(re3, '%29'); postFiles.push(
); images.push(filenames[i]); } else { postFiles.push(
); } } } var message = utils.textToJsx(this.props.post.message); var timestamp = UserStore.getCurrentUser().update_at; return (
  • { isOwner ? : "" }

{message}

{ filenames.length > 0 ?
{ postFiles }
: "" } { images.length > 0 ? : "" }
); } }); function getStateFromStores() { return { post_list: PostStore.getSelectedPost() }; } module.exports = React.createClass({ componentDidMount: function() { PostStore.addSelectedPostChangeListener(this._onChange); PostStore.addChangeListener(this._onChangeAll); UserStore.addStatusesChangeListener(this._onTimeChange); this.resize(); var self = this; $(window).resize(function(){ self.resize(); }); }, componentDidUpdate: function() { this.resize(); }, componentWillUnmount: function() { PostStore.removeSelectedPostChangeListener(this._onChange); PostStore.removeChangeListener(this._onChangeAll); UserStore.removeStatusesChangeListener(this._onTimeChange); }, _onChange: function() { if (this.isMounted()) { var newState = getStateFromStores(); if (!utils.areStatesEqual(newState, this.state)) { this.setState(newState); } } }, _onChangeAll: function() { if (this.isMounted()) { // if something was changed in the channel like adding a // comment or post then lets refresh the sidebar list var currentSelected = PostStore.getSelectedPost(); if (!currentSelected || currentSelected.order.length == 0) { return; } var currentPosts = PostStore.getPosts(currentSelected.posts[currentSelected.order[0]].channel_id); if (!currentPosts || currentPosts.order.length == 0) { return; } if (currentPosts.posts[currentPosts.order[0]].channel_id == currentSelected.posts[currentSelected.order[0]].channel_id) { currentSelected.posts = {}; for (var postId in currentPosts.posts) { currentSelected.posts[postId] = currentPosts.posts[postId]; } PostStore.storeSelectedPost(currentSelected); } this.setState(getStateFromStores()); } }, _onTimeChange: function() { for (var id in this.state.post_list.posts) { if (!this.refs[id]) continue; this.refs[id].forceUpdate(); } }, getInitialState: function() { return getStateFromStores(); }, resize: function() { var height = $(window).height() - $('#error_bar').outerHeight() - 100; $(".post-right__scroll").css("height", height + "px"); $(".post-right__scroll").scrollTop(100000); $(".post-right__scroll").perfectScrollbar(); }, render: function() { var post_list = this.state.post_list; if (post_list == null) { return (
); } var selected_post = post_list.posts[post_list.order[0]]; var root_post = null; if (selected_post.root_id == "") { root_post = selected_post; } else { root_post = post_list.posts[selected_post.root_id]; } var posts_array = []; for (var postId in post_list.posts) { var cpost = post_list.posts[postId]; if (cpost.root_id == root_post.id) { posts_array.push(cpost); } } posts_array.sort(function(a,b) { if (a.create_at < b.create_at) return -1; if (a.create_at > b.create_at) return 1; return 0; }); var results = this.state.results; var currentId = UserStore.getCurrentId(); var searchForm = currentId == null ? null : ; return (
{searchForm}
{ posts_array.map(function(cpost) { return })}
); } });