diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java index 8851dbc82..faf0da599 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java @@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Comment; import cc.ryanc.halo.model.domain.Post; import cc.ryanc.halo.model.domain.User; import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.BlogPropertiesEnum; import cc.ryanc.halo.model.enums.CommentStatusEnum; import cc.ryanc.halo.model.enums.PostTypeEnum; @@ -27,10 +28,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @@ -150,10 +148,11 @@ public class CommentController extends BaseController { * * @param commentId 被回复的评论 * @param commentContent 回复的内容 - * @return 重定向到/admin/comments + * @return JsonResult */ @PostMapping(value = "/reply") - public String replyComment(@RequestParam("commentId") Long commentId, + @ResponseBody + public JsonResult replyComment(@RequestParam("commentId") Long commentId, @RequestParam("postId") Long postId, @RequestParam("commentContent") String commentContent, @RequestParam("userAgent") String userAgent, @@ -182,7 +181,7 @@ public class CommentController extends BaseController { comment.setCommentAuthorAvatarMd5(SecureUtil.md5(user.getUserEmail())); comment.setCommentDate(DateUtil.date()); String lastContent = "@" + lastComment.getCommentAuthor() + " "; - comment.setCommentContent(lastContent + OwoUtil.markToImg(HtmlUtil.escape(commentContent))); + comment.setCommentContent(lastContent + OwoUtil.markToImg(HtmlUtil.escape(commentContent).replace("<br/>", "
"))); comment.setCommentAgent(userAgent); comment.setCommentParent(commentId); comment.setCommentStatus(CommentStatusEnum.PUBLISHED.getCode()); @@ -191,10 +190,11 @@ public class CommentController extends BaseController { //邮件通知 new EmailToAuthor(comment, lastComment, post, user, commentContent).start(); + return new JsonResult(1, "回复成功!"); } catch (Exception e) { log.error("回复评论失败:{}", e.getMessage()); + return new JsonResult(0, "回复失败!"); } - return "redirect:/admin/comments"; } /** diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java index 9c5b8ba61..cb2a805d8 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java @@ -127,10 +127,10 @@ public class FrontCommentController { if (comment.getCommentParent() > 0) { lastComment = commentService.findCommentById(comment.getCommentParent()).get(); String lastContent = "@" + lastComment.getCommentAuthor() + " "; - comment.setCommentContent(lastContent + OwoUtil.markToImg(HtmlUtil.escape(comment.getCommentContent()))); + comment.setCommentContent(lastContent + OwoUtil.markToImg(HtmlUtil.escape(comment.getCommentContent()).replace("<br/>", "
"))); } else { //将评论内容的字符专为安全字符 - comment.setCommentContent(OwoUtil.markToImg(HtmlUtil.escape(comment.getCommentContent()))); + comment.setCommentContent(OwoUtil.markToImg(HtmlUtil.escape(comment.getCommentContent()).replace("<br/>", "
"))); } if (StrUtil.isNotEmpty(comment.getCommentAuthorUrl())) { comment.setCommentAuthorUrl(URLUtil.formatUrl(comment.getCommentAuthorUrl())); diff --git a/src/main/resources/static/js/comment.js b/src/main/resources/static/js/comment.js index 0a573747b..5b8b09e50 100644 --- a/src/main/resources/static/js/comment.js +++ b/src/main/resources/static/js/comment.js @@ -38,10 +38,10 @@ $('#comment-submit').click(function () { async: false, data: { 'postId': $('input[name=postId]').val(), - 'commentContent': $('textarea[name=commentContent]').val(), - 'commentAuthor': $('input[name=commentAuthor]').val(), - 'commentAuthorEmail': $('input[name=commentAuthorEmail]').val(), - 'commentAuthorUrl': $('input[name=commentAuthorUrl]').val(), + 'commentContent': formatContent(content.val()), + 'commentAuthor': author.val(), + 'commentAuthorEmail': email.val(), + 'commentAuthorUrl': url.val(), 'commentAgent': navigator.userAgent, 'commentParent': $('input[name=commentParent]').val() }, @@ -78,12 +78,22 @@ $('.comment-cancel-reply').click(function () { $('#commentContent').attr("placeholder",""); $(".comment-cancel-reply").hide(); }); + +/** + * 加载头像 + */ function loadAvatar() { $(".comment-author-avatar").attr("src","//gravatar.loli.net/avatar/"+md5(localStorage.getItem("email"))+"?s=256&d="+avatarType); if($('input[name=commentAuthorEmail]').val()!='' && $('input[name=commentAuthorEmail]').val()!=null){ $(".comment-author-avatar").attr("src","//gravatar.loli.net/avatar/"+md5($('input[name=commentAuthorEmail]').val())+"?s=256&d="+avatarType); } } + +/** + * 格式化ua信息 + * @param string + * @returns {string} + */ var parser = new UAParser(); function show_ua(string){ parser.setUA(string); @@ -95,3 +105,15 @@ function show_ua(string){ var os = uua.os.name + ' ' + uua.os.version; return ''+browser+''+os+''; } + +/** + * 格式化字符串 + * @param a a + * @returns {*} + */ +function formatContent(a) { + a = a.replace(/\r\n/g, '
'); + a = a.replace(/\n/g, '
'); + a = a.replace(/\s/g, ' '); + return a; +} diff --git a/src/main/resources/templates/admin/admin_comment.ftl b/src/main/resources/templates/admin/admin_comment.ftl index 67c63351d..39ddd8036 100755 --- a/src/main/resources/templates/admin/admin_comment.ftl +++ b/src/main/resources/templates/admin/admin_comment.ftl @@ -129,16 +129,16 @@
+ + +
@@ -163,12 +163,49 @@ window.location.href=url; } + /** + * 显示回复模态框 + * + * @param commentId commentId + * @param postId postId + */ function replyShow(commentId,postId) { $('#userAgent').val(navigator.userAgent); $('#commentId').val(commentId); $('#postId').val(postId); $('#commentReplyModal').modal(); } + + function reply() { + $.ajax({ + type: 'POST', + url: '/admin/comments/reply', + async: false, + data: { + 'commentId': $("#commentId").val(), + 'userAgent': $("#userAgent").val(), + 'postId': $("#postId").val(), + 'commentContent': formatContent($("#commentContent").val()) + }, + success: function (data) { + if(data.code==1){ + window.location.reload(); + } + } + }); + } + + /** + * 格式化字符串 + * @param a a + * @returns {*} + */ + function formatContent(a) { + a = a.replace(/\r\n/g, '
'); + a = a.replace(/\n/g, '
'); + a = a.replace(/\s/g, ' '); + return a; + } <#include "module/_footer.ftl">