From a56603d666a4f3e22a92a0271eef56ab613ce848 Mon Sep 17 00:00:00 2001 From: Reed Garmsen Date: Wed, 26 Aug 2015 09:38:06 -0700 Subject: Moved duplicate code into functions and added better handling of large paste text dumps --- web/react/components/create_comment.jsx | 13 +++---------- web/react/components/create_post.jsx | 14 ++++---------- web/react/components/edit_post_modal.jsx | 14 +++----------- web/react/utils/utils.jsx | 24 ++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 31 deletions(-) (limited to 'web') diff --git a/web/react/components/create_comment.jsx b/web/react/components/create_comment.jsx index 68bee800a..94b6e1b7f 100644 --- a/web/react/components/create_comment.jsx +++ b/web/react/components/create_comment.jsx @@ -105,16 +105,9 @@ module.exports = React.createClass({ this.lastTime = t; } }, - handleUserInput: function(messageText) { - var newPostError = this.state.postError; - - var len = utils.getLengthOfTextInTextarea(messageText); - - if (!this.state.postError && len >= Constants.MAX_POST_LEN) { - newPostError = 'Comment length cannot exceed 4000 characters'; - } else if (this.state.postError === 'Comment length cannot exceed 4000 characters' && len < Constants.MAX_POST_LEN) { - newPostError = ''; - } + handleUserInput: function(message) { + var messageText = utils.truncateText(message); + var newPostError = utils.checkMessageLengthError(messageText, this.state.postError, 'Comment length cannot exceed ' + Constants.MAX_POST_LEN + ' characters'); var draft = PostStore.getCommentDraft(this.props.rootId); draft.message = messageText; diff --git a/web/react/components/create_post.jsx b/web/react/components/create_post.jsx index 387149b14..19270197e 100644 --- a/web/react/components/create_post.jsx +++ b/web/react/components/create_post.jsx @@ -18,6 +18,7 @@ var Constants = require('../utils/constants.jsx'); var ActionTypes = Constants.ActionTypes; module.exports = React.createClass({ + displayName: 'CreatePost', lastTime: 0, handleSubmit: function(e) { e.preventDefault(); @@ -131,16 +132,9 @@ module.exports = React.createClass({ this.lastTime = t; } }, - handleUserInput: function(messageText) { - var newPostError = this.state.postError; - - var len = utils.getLengthOfTextInTextarea(messageText); - - if (!this.state.postError && len >= Constants.MAX_POST_LEN) { - newPostError = 'Message length cannot exceed 4000 characters'; - } else if (this.state.postError === 'Message length cannot exceed 4000 characters' && len < Constants.MAX_POST_LEN) { - newPostError = ''; - } + handleUserInput: function(message) { + var messageText = utils.truncateText(message); + var newPostError = utils.checkMessageLengthError(messageText, this.state.postError, 'Message length cannot exceed ' + Constants.MAX_POST_LEN + ' characters'); this.resizePostHolder(); this.setState({messageText: messageText, postError: newPostError}); diff --git a/web/react/components/edit_post_modal.jsx b/web/react/components/edit_post_modal.jsx index 39d058f30..8ffd5013a 100644 --- a/web/react/components/edit_post_modal.jsx +++ b/web/react/components/edit_post_modal.jsx @@ -39,17 +39,9 @@ module.exports = React.createClass({ $(this.state.refocusId).focus(); }, handleEditInput: function(editText) { - var newError = this.state.error; - - var len = utils.getLengthOfTextInTextarea(editText); - - if (!this.state.error && len >= Constants.MAX_POST_LEN) { - newError = 'New message length cannot exceed 4000 characters'; - } else if (this.state.error === 'New message length cannot exceed 4000 characters' && len < Constants.MAX_POST_LEN) { - newError = ''; - } - - this.setState({editText: editText, error: newError}); + var editMessage = utils.truncateText(editText); + var newError = utils.checkMessageLengthError(editMessage, this.state.error, 'New message length cannot exceed ' + Constants.MAX_POST_LEN + ' characters'); + this.setState({editText: editMessage, error: newError}); }, handleEditKeyPress: function(e) { if (e.which == 13 && !e.shiftKey && !e.altKey) { diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx index 33c103c2e..77b204793 100644 --- a/web/react/utils/utils.jsx +++ b/web/react/utils/utils.jsx @@ -1032,6 +1032,30 @@ module.exports.getLengthOfTextInTextarea = function(messageText) { return len; }; +module.exports.checkMessageLengthError = function(message, currentError, newError) { + var updatedError = currentError; + var len = module.exports.getLengthOfTextInTextarea(message); + + if (!currentError && len >= Constants.MAX_POST_LEN) { + updatedError = newError; + } else if (currentError === newError && len < Constants.MAX_POST_LEN) { + updatedError = ''; + } + + return updatedError; +}; + +// Necessary due to issues with textarea max length and pasting newlines +module.exports.truncateText = function(message) { + var lengthDifference = module.exports.getLengthOfTextInTextarea(message) - message.length; + + if (lengthDifference > 0) { + return message.substring(0, Constants.MAX_POST_LEN - lengthDifference); + } + + return message.substring(0, Constants.MAX_POST_LEN); +}; + // Used to get the id of the other user from a DM channel module.exports.getUserIdFromChannelName = function(channel) { var ids = channel.name.split('__'); -- cgit v1.2.3-1-g7c22