/** * Ajax Comment * Last Update: 2020/02/26 */ /** * Tmp */ var dataTmp = { comments: {} }; /** * 评论部分 */ var MiraclesComment = { //评论核心函数 core: function() { var commentID = $('.comment-box-id').attr('id'); window.TypechoComment = { dom : function (id) { return document.getElementById(id); }, create : function (tag, attr) { var el = document.createElement(tag); for (var key in attr) { el.setAttribute(key, attr[key]); } return el; }, reply : function (cid, coid) { var comment = this.dom(cid), parent = comment.parentNode, response = this.dom(commentID), input = this.dom('comment-parent'), form = 'form' == response.tagName ? response : response.getElementsByTagName('form')[0], textarea = response.getElementsByTagName('textarea')[0]; if (null == input) { input = this.create('input', { 'type' : 'hidden', 'name' : 'parent', 'id' : 'comment-parent' }); form.appendChild(input); } input.setAttribute('value', coid); if (null == this.dom('comment-form-place-holder')) { var holder = this.create('div', { 'id' : 'comment-form-place-holder' }); response.parentNode.insertBefore(holder, response); } comment.appendChild(response); this.dom('cancel-comment-reply-link').style.display = ''; if (null != textarea && 'text' == textarea.name) { textarea.focus(); } return false; }, cancelReply : function () { var response = this.dom(commentID), holder = this.dom('comment-form-place-holder'), input = this.dom('comment-parent'); if (null != input) { input.parentNode.removeChild(input); } if (null == holder) { return true; } this.dom('cancel-comment-reply-link').style.display = 'none'; holder.parentNode.insertBefore(response, holder); return false; } }; }, //提交评论 submitComment: function() { //如果获取不到评论提交 URL 则终止 if(!$('.comment-box-id').attr('data-commentUrl')) { return false; } /* ===== 检查是否完整 =====*/ if (!$('#comment-form #textarea').val()) { alertSend('请填写评论内容!', 'error'); return false; } if ($('#comment-form .comment-input #author').length && !$('#comment-form .comment-input #author').val()) { alertSend('请填写您的昵称!', 'error'); return false; } //评论前需要做的事情 function beforeComment() { //禁用按钮 $('#comment-form .comment-submit').attr('disabled', true); $('#comment-form').addClass('comment-sending'); $('#comment-form .comment-submit').text(commentSubmit); }; beforeComment(); //评论后需要做的事情 function afterComment(status) { //取消禁用评论按钮 $('#comment-form .comment-submit').removeAttr('disabled'); $('#comment-form').removeClass('comment-sending'); $('#comment-form .comment-submit').text(commentSubmitLoading); //判断是否评论成功 if(status) { //如果成功 if ($('.comment-waiting').length>0) { alertSend('评论提交成功,正在等待审核!', 'success'); LazyLoad();//防止 owo 表情懒加载失效 }else{ alertSend('评论提交成功!', 'success'); LazyLoad();//防止 owo 表情懒加载失效 } //清空被回复 ID dataTmp.comments.replyTo = ''; }else{ //如果失败 alertSend('评论提交失败!', 'error'); } //无论是否成功都要重新绑定回复按钮 ID MiraclesComment.bindReplyBtn(); } //AJAX 提交 $.ajax({ type: 'POST', url: $('.comment-box-id').attr('data-commentUrl'), data: $('#comment-form').serialize(), success: function(data) { var data = $("
").append($(data)); var $html = $("title", data); //返回的内容 //评论成功 if ($html.html() != 'Error') { $('#comment-form #textarea').val(''); //清空评论框 //获取新评论 ID if (data.html()) { dataTmp.comments.NewID = $(".comment-list", data).html().match(/id=\"?comment-\d+/g).join().match(/\d+/g).sort(function (a, b) { return a - b }).pop(); }else{ alertSend('评论失败!请刷新页面', 'error'); return false; } console.log(dataTmp.comments.replyTo); //如果是父评论 if('' === dataTmp.comments.replyTo) { if(!$('.comment-list').length) { //检查是否已有评论 //如果没有先插入评论列表基本结构 dataTmp.comments.NewComment = $("#comment-" + dataTmp.comments.NewID, data); $('.comment').prepend('
已有 0 条评论