From 5766bbfc65e3f6663737da5d15359d68e3f991ff Mon Sep 17 00:00:00 2001 From: Reed Garmsen Date: Mon, 24 Aug 2015 20:47:27 -0700 Subject: Prevents users from typing more than 4000 characters into any 'textbox' (posts, comments, and post/comment edits). Also adds new error message for when users hit exactly 4000 characters so they know the limit. --- web/react/components/create_comment.jsx | 10 +++++++++- web/react/components/create_post.jsx | 10 +++++++++- web/react/components/edit_post_modal.jsx | 15 ++++++++++++--- web/react/components/textbox.jsx | 2 +- 4 files changed, 31 insertions(+), 6 deletions(-) (limited to 'web/react/components') diff --git a/web/react/components/create_comment.jsx b/web/react/components/create_comment.jsx index 1de768872..59b0a5c2b 100644 --- a/web/react/components/create_comment.jsx +++ b/web/react/components/create_comment.jsx @@ -106,13 +106,21 @@ module.exports = React.createClass({ } }, handleUserInput: function(messageText) { + var newPostError = this.state.postError; + + if (!this.state.postError && messageText.length >= Constants.MAX_POST_LEN) { + newPostError = 'Message length cannot exceed 4000 characters'; + } else if (this.state.postError === 'Message length cannot exceed 4000 characters' && messageText.length < Constants.MAX_POST_LEN) { + newPostError = ''; + } + var draft = PostStore.getCommentDraft(this.props.rootId); draft.message = messageText; PostStore.storeCommentDraft(this.props.rootId, draft); $('.post-right__scroll').scrollTop($('.post-right__scroll')[0].scrollHeight); $('.post-right__scroll').perfectScrollbar('update'); - this.setState({messageText: messageText}); + this.setState({messageText: messageText, postError: newPostError}); }, handleUploadStart: function(clientIds, channelId) { var draft = PostStore.getCommentDraft(this.props.rootId); diff --git a/web/react/components/create_post.jsx b/web/react/components/create_post.jsx index efaa40577..242513d07 100644 --- a/web/react/components/create_post.jsx +++ b/web/react/components/create_post.jsx @@ -132,8 +132,16 @@ module.exports = React.createClass({ } }, handleUserInput: function(messageText) { + var newPostError = this.state.postError; + + if (!this.state.postError && messageText.length >= Constants.MAX_POST_LEN) { + newPostError = 'Message length cannot exceed 4000 characters'; + } else if (this.state.postError === 'Message length cannot exceed 4000 characters' && messageText.length < Constants.MAX_POST_LEN) { + newPostError = ''; + } + this.resizePostHolder(); - this.setState({messageText: messageText}); + this.setState({messageText: messageText, postError: newPostError}); var draft = PostStore.getCurrentDraft(); draft['message'] = messageText; diff --git a/web/react/components/edit_post_modal.jsx b/web/react/components/edit_post_modal.jsx index 2d865a45d..2dce889f8 100644 --- a/web/react/components/edit_post_modal.jsx +++ b/web/react/components/edit_post_modal.jsx @@ -3,6 +3,7 @@ var Client = require('../utils/client.jsx'); var AsyncClient = require('../utils/async_client.jsx'); +var Constants = require('../utils/constants.jsx'); var Textbox = require('./textbox.jsx'); var BrowserStore = require('../stores/browser_store.jsx'); @@ -37,7 +38,15 @@ module.exports = React.createClass({ $(this.state.refocusId).focus(); }, handleEditInput: function(editText) { - this.setState({ editText: editText }); + var newError = this.state.error; + + if (!this.state.error && editText.length >= Constants.MAX_POST_LEN) { + newError = 'Message length cannot exceed 4000 characters'; + } else if (this.state.error === 'Message length cannot exceed 4000 characters' && editText.length < Constants.MAX_POST_LEN) { + newError = ''; + } + + this.setState({editText: editText, error: newError}); }, handleEditKeyPress: function(e) { if (e.which == 13 && !e.shiftKey && !e.altKey) { @@ -53,7 +62,7 @@ module.exports = React.createClass({ var self = this; $(this.refs.modal.getDOMNode()).on('hidden.bs.modal', function(e) { - self.setState({ editText: "", title: "", channel_id: "", post_id: "", comments: 0, refocusId: "" }); + self.setState({editText: "", title: "", channel_id: "", post_id: "", comments: 0, refocusId: "", error: ''}); }); $(this.refs.modal.getDOMNode()).on('show.bs.modal', function(e) { @@ -69,7 +78,7 @@ module.exports = React.createClass({ return { editText: "", title: "", post_id: "", channel_id: "", comments: 0, refocusId: "" }; }, render: function() { - var error = this.state.error ?
: null; + var error = this.state.error ?

:

; return (