diff options
-rw-r--r-- | web/react/components/post_body.jsx | 69 | ||||
-rw-r--r-- | web/react/components/post_list.jsx | 3 | ||||
-rw-r--r-- | web/react/components/post_right.jsx | 6 | ||||
-rw-r--r-- | web/react/utils/utils.jsx | 2 | ||||
-rw-r--r-- | web/static/js/marked/lib/marked.js | 32 |
5 files changed, 46 insertions, 66 deletions
diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx index bf039d79b..fab6833e6 100644 --- a/web/react/components/post_body.jsx +++ b/web/react/components/post_body.jsx @@ -9,11 +9,11 @@ var formatText = require('../../static/js/marked/lib/marked.js'); module.exports = React.createClass({ componentWillReceiveProps: function(nextProps) { var linkData = utils.extractLinks(nextProps.post.message); - this.setState({ links: linkData["links"], message: linkData["text"] }); + this.setState({links: linkData.links, message: linkData.text}); }, getInitialState: function() { var linkData = utils.extractLinks(this.props.post.message); - return { links: linkData["links"], message: linkData["text"] }; + return {links: linkData.links, message: linkData.text}; }, render: function() { var post = this.props.post; @@ -22,52 +22,51 @@ module.exports = React.createClass({ var inner = utils.textToJsx(this.state.message); var allowTextFormatting = config.AllowTextFormatting; - var comment = ""; - var reply = ""; - var postClass = ""; + var comment = ''; + var postClass = ''; if (parentPost) { var profile = UserStore.getProfile(parentPost.user_id); - var apostrophe = ""; - var name = "..."; + var apostrophe = ''; + var name = '...'; if (profile != null) { if (profile.username.slice(-1) === 's') { apostrophe = "'"; } else { apostrophe = "'s"; } - name = <a className="theme" onClick={function(){ utils.searchForTerm(profile.username); }}>{profile.username}</a>; + name = <a className='theme' onClick={utils.searchForTerm.bind(this, profile.username)}>{profile.username}</a>; } - var message = "" - if(parentPost.message) { - message = utils.replaceHtmlEntities(parentPost.message) + var message = ''; + if (parentPost.message) { + message = utils.replaceHtmlEntities(parentPost.message); } else if (parentPost.filenames.length) { message = parentPost.filenames[0].split('/').pop(); if (parentPost.filenames.length === 2) { - message += " plus 1 other file"; + message += ' plus 1 other file'; } else if (parentPost.filenames.length > 2) { - message += " plus " + (parentPost.filenames.length - 1) + " other files"; + message += ' plus ' + (parentPost.filenames.length - 1) + ' other files'; } } if (allowTextFormatting) { message = formatText(message, {sanitize: true, mangle: false, gfm: true, breaks: true, tables: false, smartypants: true, renderer: utils.customMarkedRenderer({disable: true})}); comment = ( - <p className="post-link"> - <span>Commented on {name}{apostrophe} message: <a className="theme" onClick={this.props.handleCommentClick} dangerouslySetInnerHTML={{__html: message}} /></span> + <p className='post-link'> + <span>Commented on {name}{apostrophe} message: <a className='theme' onClick={this.props.handleCommentClick} dangerouslySetInnerHTML={{__html: message}} /></span> </p> ); } else { comment = ( - <p className="post-link"> - <span>Commented on {name}{apostrophe} message: <a className="theme" onClick={this.props.handleCommentClick}>{message}</a></span> + <p className='post-link'> + <span>Commented on {name}{apostrophe} message: <a className='theme' onClick={this.props.handleCommentClick}>{message}</a></span> </p> ); } - postClass += " post-comment"; + postClass += ' post-comment'; } var embed; @@ -75,22 +74,26 @@ module.exports = React.createClass({ embed = utils.getEmbed(this.state.links[0]); } + var innerHolder = <p key={post.id + '_message'} className={postClass}><span>{inner}</span></p>; + if (allowTextFormatting) { + innerHolder = <div key={post.id + '_message'} className={postClass}><span>{inner}</span></div>; + } + + var fileAttachmentHolder = ''; + if (filenames && filenames.length > 0) { + fileAttachmentHolder = (<FileAttachmentList + filenames={filenames} + modalId={'view_image_modal_' + post.id} + channelId={post.channel_id} + userId={post.user_id} />); + } + return ( - <div className="post-body"> - { comment } - {allowTextFormatting ? - <div key={post.id+"_message"} className={postClass}><span>{inner}</span></div> - : - <p key={post.id+"_message"} className={postClass}><span>{inner}</span></p> - } - { filenames && filenames.length > 0 ? - <FileAttachmentList - filenames={filenames} - modalId={"view_image_modal_" + post.id} - channelId={post.channel_id} - userId={post.user_id} /> - : "" } - { embed } + <div className='post-body'> + {comment} + {innerHolder} + {fileAttachmentHolder} + {embed} </div> ); } diff --git a/web/react/components/post_list.jsx b/web/react/components/post_list.jsx index 12875ee90..ad7f4a8bf 100644 --- a/web/react/components/post_list.jsx +++ b/web/react/components/post_list.jsx @@ -434,8 +434,9 @@ module.exports = React.createClass({ var isLastComment = utils.isComment(post) && (i === 0 || posts[order[i-1]].root_id != post.root_id); var postKey = post.id; - if (post.lastEditDate != undefined) + if (post.lastEditDate) { postKey += post.lastEditDate; + } var postCtl = ( <Post ref={post.id} sameUser={sameUser} sameRoot={sameRoot} post={post} parentPost={parentPost} key={postKey} diff --git a/web/react/components/post_right.jsx b/web/react/components/post_right.jsx index 10a9400f5..19e4cf67a 100644 --- a/web/react/components/post_right.jsx +++ b/web/react/components/post_right.jsx @@ -286,8 +286,9 @@ module.exports = React.createClass({ } var rootPostKey = root_post.id - if (root_post.lastEditDate != undefined) + if (root_post.lastEditDate) { rootPostKey += root_post.lastEditDate; + } var posts_array = []; @@ -295,8 +296,9 @@ module.exports = React.createClass({ var cpost = post_list.posts[postId]; if (cpost.root_id == root_post.id) { var cpostKey = cpost.id - if (cpost.lastEditDate != undefined) + if (cpost.lastEditDate) { cpostKey += cpost.lastEditDate; + } cpost.cpostKey = cpostKey; posts_array.push(cpost); diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx index bbe5003bc..2136accb4 100644 --- a/web/react/utils/utils.jsx +++ b/web/react/utils/utils.jsx @@ -634,6 +634,8 @@ module.exports.textToJsx = function(textToChange, options) { } if (!useTextFormatting && i !== lines.length - 1) { inner.push(<br key={'br_' + i}/>); + } else if (useTextFormatting && !codeFlag && i < lines.length - 2) { + inner.push(<br key={'br_' + i}/>); } } diff --git a/web/static/js/marked/lib/marked.js b/web/static/js/marked/lib/marked.js index 5c7d89f46..4085649a5 100644 --- a/web/static/js/marked/lib/marked.js +++ b/web/static/js/marked/lib/marked.js @@ -194,18 +194,6 @@ Lexer.prototype.token = function(src, top, bq) { continue; } - // top-level paragraph - if (top && (cap = this.rules.paragraph.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'paragraph', - text: cap[1].charAt(cap[1].length - 1) === '\n' - ? cap[1].slice(0, -1) - : cap[1] - }); - continue; - } - // text if (cap = this.rules.text.exec(src)) { // Top-level should never reach here. @@ -240,7 +228,7 @@ var inline = { nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, strong: /^\*((?:\*\*|[\s\S])+?)\*/, em: /^\b_((?:[^_]|__)+?)_\b/, - code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, + code: /^(`{1})\s*([^\r?\n|\r]*?[^`])\s*\1(?!`)/, br: /^ {2,}\n(?!\s*$)/, del: noop, text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/ @@ -394,13 +382,6 @@ InlineLexer.prototype.output = function(src) { continue; } - // br - if (cap = this.rules.br.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.br(); - continue; - } - // text if (cap = this.rules.text.exec(src)) { src = src.substring(cap[0].length); @@ -484,15 +465,6 @@ function Renderer(options) { } Renderer.prototype.code = function(code, lang, escaped) { - return '<pre>' + code + '</pre>'; - /*if (this.options.highlight) { - var out = this.options.highlight(code, lang); - if (out != null && out !== code) { - escaped = true; - code = out; - } - } - if (!lang) { return '<pre><code>' + (escaped ? code : escape(code, true)) @@ -504,7 +476,7 @@ Renderer.prototype.code = function(code, lang, escaped) { + escape(lang, true) + '">' + (escaped ? code : escape(code, true)) - + '\n</code></pre>\n';*/ + + '\n</code></pre>\n'; }; Renderer.prototype.blockquote = function(quote) { |