@@ -317,12 +317,14 @@ var Comment = {
317317 } ,
318318 } )
319319
320- $ ( '#replyUseName' ) .
320+ Comment . _getReplyUseName ( ) .
321+ addClass ( 'reply-use-name--active' ) .
321322 html ( '<a href="javascript:void(0)" onclick="Comment._bgFade($(\'#' +
322323 id +
323324 '\'))" class="ft-a-title"><svg><use xlink:href="#edit"></use></svg> ' +
324325 Label . commonUpdateCommentPermissionLabel + '</a>' ) .
325- data ( 'commentId' , id )
326+ data ( 'commentId' , id ) .
327+ removeData ( 'commentOriginalCommentId' )
326328 } ,
327329 /**
328330 * 背景渐变
@@ -379,6 +381,34 @@ var Comment = {
379381 }
380382 } )
381383 } ,
384+ /**
385+ * 获取当前可用的“回复指示”容器
386+ * 移动端模板中存在隐藏占位节点,优先选择可见容器
387+ * @returns {jQuery }
388+ */
389+ _getReplyUseName : function ( ) {
390+ var $replyUseName = $ ( '#replyUseName' ) . not ( '.fn-none' ) . first ( )
391+ if ( $replyUseName . length === 0 ) {
392+ $replyUseName = $ ( '#replyUseName' ) . first ( )
393+ }
394+ return $replyUseName
395+ } ,
396+ /**
397+ * 清理回复/编辑目标指示
398+ */
399+ _clearReplyUseName : function ( ) {
400+ Comment . _getReplyUseName ( ) .
401+ removeClass ( 'reply-use-name--active' ) .
402+ html ( '' ) .
403+ removeData ( 'commentOriginalCommentId' ) .
404+ removeData ( 'commentId' )
405+ } ,
406+ /**
407+ * 取消回复(恢复普通评论)
408+ */
409+ cancelReply : function ( ) {
410+ Comment . _clearReplyUseName ( )
411+ } ,
382412 /**
383413 * 评论初始化
384414 * @returns {Boolean }
@@ -639,6 +669,7 @@ var Comment = {
639669 * @param {String } csrfToken CSRF 令牌
640670 */
641671 add : function ( id , csrfToken ) {
672+ var $replyUseName = Comment . _getReplyUseName ( )
642673
643674 var requestJSONObject = {
644675 articleId : id ,
@@ -648,14 +679,14 @@ var Comment = {
648679 userCommentViewMode : Label . userCommentViewMode ,
649680 }
650681
651- if ( $ ( '# replyUseName' ) . data ( 'commentOriginalCommentId' ) ) {
652- requestJSONObject . commentOriginalCommentId = $ ( '# replyUseName' ) .
682+ if ( $replyUseName . data ( 'commentOriginalCommentId' ) ) {
683+ requestJSONObject . commentOriginalCommentId = $replyUseName .
653684 data ( 'commentOriginalCommentId' )
654685 }
655686
656687 var url = Label . servePath + '/comment' ,
657688 type = 'POST' ,
658- commentId = $ ( '# replyUseName' ) . data ( 'commentId' )
689+ commentId = $replyUseName . data ( 'commentId' )
659690 if ( commentId ) {
660691 url = Label . servePath + '/comment/' + commentId
661692 type = 'PUT'
@@ -684,7 +715,7 @@ var Comment = {
684715 Comment . editor . setValue ( '' )
685716
686717 // clear reply comment
687- $ ( '#replyUseName' ) . text ( '' ) . removeData ( )
718+ Comment . _clearReplyUseName ( )
688719
689720 // clear local storage
690721 if ( window . localStorage ) {
@@ -724,7 +755,19 @@ var Comment = {
724755 * @param {String } userName 用户名称
725756 */
726757 reply : function ( userName , id ) {
727- $ ( '#replyUseName' ) . data ( 'commentOriginalCommentId' , id )
758+ var safeUserName = String ( userName ) .
759+ replace ( / & / g, '&' ) .
760+ replace ( / < / g, '<' ) .
761+ replace ( / > / g, '>' ) ,
762+ $replyUseName = Comment . _getReplyUseName ( )
763+
764+ $replyUseName .
765+ addClass ( 'reply-use-name--active' ) .
766+ html ( '<a rel="nofollow" href="javascript:void(0)" class="ft-a-title reply-use-name__target fn-pointer" onclick="Comment.cancelReply()"><svg><use xlink:href="#reply-to"></use></svg> ' +
767+ safeUserName +
768+ '</a><span class="reply-use-name__cancel fn-pointer ft-fade" onclick="Comment.cancelReply()">×</span>' ) .
769+ data ( 'commentOriginalCommentId' , id ) .
770+ removeData ( 'commentId' )
728771 Comment . editor . focus ( )
729772 } ,
730773}
0 commit comments