Files
leanote/public/blog/js/share_comment.js

372 lines
9.6 KiB
JavaScript
Raw Normal View History

2014-11-09 16:24:19 +08:00
// leanote blog share & comment
var C = {
info: null,
noteId: noteId,
preLikeNum: preLikeNum,
commentNum: commentNum,
likeBtnO: $("#likeBtn"),
likeNumO: $("#likeNum"),
tLikersO: $("#tLikers"),
likersO: $("#likers"),
tCommentsO: $("#tComments"),
commentsO: $("#comments"),
commentBtnO: $("#commentBtn"),
commentsLoadingO: $(".comments-loading"),
commentsMoreO: $(".comments-more"),
commentBoxO: $(".comment-box"),
init: function() {
var self = this;
if(blogInfo.OpenComment && blogInfo.CommentType != "disqus") {
self.initLikesAndComments();
} else {
self.initLikes();
}
self.initEvent();
self.incReadNum();
},
// 博客的统计信息
getPostStat: function() {
},
// 增加阅读量
incReadNum: function() {
incReadNum(self.noteId);
},
initLikes: function() {
var self = this;
getLikes(self.noteId, function(ret) {
if(reIsOk(ret)) {
ret = ret.Item;
self.info = ret;
self.toggleLikeBtnActive();
self.renderLikers();
self.visitUserInfo = self.info.visitUserInfo || {};
}
});
},
initLikesAndComments: function() {
var self = this;
getLikesAndComments(self.noteId, function(ret) {
if(reIsOk(ret)) {
ret = ret.Item;
self.info = ret;
self.toggleLikeBtnActive();
self.renderLikers();
// 是否需要renderComments?
self.info.commentUserInfo = self.info.commentUserInfo || {};
self.visitUserInfo = self.info.visitUserInfo || {};
// 为了防止第一条评论找不到用户信息情况
if(self.visitUserInfo.UserId) {
self.info.commentUserInfo[self.visitUserInfo.UserId] = self.visitUserInfo;
}
self.renderComments();
// 之前是隐藏的, 取消之
self.commentBoxO.removeClass("hide");
self.commentsLoadingO.addClass("hide");
if(self.info.pageInfo.TotalPage > self.info.pageInfo.CurPage) {
self.commentsMoreO.removeClass("hide");
self.initMoreComments();
}
// 是否已经登录?
if(self.visitUserInfo.UserId) {
$("#commentForm").removeClass("hide");
$("#visitUserLogo").attr("src", self.visitUserInfo.Logo);
} else {
$("#noLoginContainer").removeClass("hide");
}
}
});
},
initMoreComments: function() {
var self = this;
self.commentsMoreO.find("a").click(function(){
if(self.info.pageInfo.TotalPage > self.info.pageInfo.CurPage) {
self.commentsMoreO.addClass("hide");
self.commentsLoadingO.removeClass("hide");
getComments(self.noteId, self.info.pageInfo.CurPage+1, function(ret) {
var pageInfo = ret.pageInfo;
var comments = ret.comments;
var commentUserInfo = ret.commentUserInfo;
$.extend(self.info.commentUserInfo, commentUserInfo);
// 渲染之
for(var i in comments) {
var comment = comments[i];
comment = self.parseComment(comment);
}
var html = self.tCommentsO.render({comments: comments, visitUserInfo: self.visitUserInfo});
self.commentsO.append(html);
self.info.pageInfo = pageInfo;
if(self.info.pageInfo.TotalPage > self.info.pageInfo.CurPage) {
self.commentsMoreO.removeClass("hide");
} else {
self.commentsMoreO.addClass("hide");
}
self.commentsLoadingO.addClass("hide");
});
}
});
},
addCommentRender: function(comment){
var self = this;
comment = self.parseComment(comment);
var html = self.tCommentsO.render({comments: [comment], visitUserInfo: self.visitUserInfo});
self.commentsO.prepend(html);
var li = self.commentsO.find("li").eq(0);
li.hide();
li.show(500);
li.addClass("item-highlight");
setTimeout(function() {
li.removeClass("item-highlight");
}, 2000);
},
parseComment: function(comment) {
var self = this;
var authorUserId = blogInfo.UserId;
commentUserInfo = self.info.commentUserInfo;
comment.UserInfo = commentUserInfo[comment.UserId];
// 是作者自己
if(self.visitUserInfo.UserId == authorUserId) {
comment.IsMyNote = true;
}
if(comment.UserId == authorUserId) {
comment.IsAuthorComment = true;
}
if(comment.UserId == self.visitUserInfo.UserId) {
comment.IsMyComment = true;
}
// 不是回复自己
if(comment.ToUserId && comment.ToUserId != comment.UserId) {
comment.ToUserInfo = commentUserInfo[comment.ToUserId];
if(comment.ToUserInfo.UserId == authorUserId) {
comment.ToUserIsAuthor = true;
}
}
comment.PublishDate = getDateDiff(goNowToDate(comment.CreatedTime));
return comment;
},
// 渲染评论
renderComments: function() {
var self = this;
var comments = self.info.comments || [];
if(comments.length == 0) {
return;
}
// 整理数据
// 回复谁, 是否是作者?
// 回复日期, 几天前, 刚刚
for(var i in comments) {
var comment = comments[i];
comment = self.parseComment(comment);
}
var html = self.tCommentsO.render({comments: comments, visitUserInfo: self.visitUserInfo});
self.commentsO.html(html);
},
// 重新渲染likers
reRenderLikers: function(addMe) {
var self = this;
var likedUsers = self.info.likedUsers || [];
for(var i = 0; i < likedUsers.length; ++i) {
var user = likedUsers[i];
if(user.UserId == self.visitUserInfo.UserId) {
likedUsers.splice(i, 1);
break;
}
}
if(addMe) {
likedUsers = [self.visitUserInfo].concat(likedUsers);
self.info.likedUsers = likedUsers;
}
self.renderLikers();
},
renderLikers: function() {
var self = this;
var users = self.info.likedUsers || [];
var html = self.tLikersO.render({users: users});
self.likersO.html(html);
},
toggleLikeBtnActive: function() {
var self = this;
if(self.info.isILikeIt) {
self.likeBtnO.addClass("active");
} else {
self.likeBtnO.removeClass("active");
}
},
commentNumO: $("#commentNum"),
bindCommentNum: function(fix) {
var self = this;
self.commentNum += fix;
self.commentNumO.text(self.commentNum);
},
initEvent: function() {
var self = this;
// like or not
self.likeBtnO.click(function() {
if(!self.visitUserInfo.UserId) {
needLogin();
return;
}
likePost(noteId, function(ret) {
if(ret.Ok) {
// like
if(ret.Item) {
var num = self.preLikeNum+1;
} else {
var num = self.preLikeNum-1;
}
self.preLikeNum = num >= 0 ? num : 0;
self.likeNumO.text(self.preLikeNum);
self.info.isILikeIt = ret.Item;
self.toggleLikeBtnActive();
// 重新render likers
// 我是否在列表中
self.reRenderLikers(ret.Item);
}
});
});
// 显示回复回复
$("#comments").on("click", ".comment-reply", function() {
var form = $(this).closest("li").find("form");
if(form.is(":hidden")) {
form.show();
form.find("textarea").focus();
} else {
form.hide();
}
});
$("#comments").on("click", ".reply-cancel", function() {
$(this).closest("form").hide();
});
// 回复
$(".comment-box").on("click", ".reply-comment-btn", function(e) {
e.preventDefault();
var commentId = $(this).data("comment-id");
var $form = $(this).closest("form");
var $content = $form.find("textarea");
var content = $.trim($content.val());
if(!content) {
$content.focus();
return;
}
var t = $(this);
t.button("loading");
var data = {noteId: self.noteId, toCommentId: commentId, content: content};
commentPost(self.noteId, commentId, content, function(ret) {
t.button("reset");
$content.val("");
self.bindCommentNum(1);
if(commentId) {
$form.hide();
}
if(commentId) {
scrollToTarget("#comments", -200);
}
// 添加一个
self.addCommentRender(ret.Item);
});
});
// 删除
$(".comment-box").on("click", ".comment-trash", function(e) {
var commentId = $(this).parent().data("comment-id");
var t = this;
try {
2015-01-10 19:04:06 +08:00
BootstrapDialog.confirm("Are you sure?", function(yes) {
2014-11-09 16:24:19 +08:00
if(yes) {
deleteComment(noteId, commentId, function(ret) {
if(ret.Ok) {
var li = $(t).closest("li");
li.hide(500); // remove();
setTimeout(function() {
li.remove();
}, 300);
self.bindCommentNum(-1);
}
});
}
});
} catch(e) {}
});
// 点zan
$(".comment-box").on("click", ".comment-like", function(e) {
var commentId = $(this).parent().data("comment-id");
var t = this;
likeComment(commentId, function(re) {
if(re.Ok) {
var ret = re.Item;
if(ret.Num <= 0) {
$(t).parent().find(".like-num").addClass("hide");
} else {
$(t).parent().find(".like-num").removeClass("hide");
$(t).parent().find(".like-num-i").text(ret.Num)
}
if(ret.IsILikeIt) {
2015-01-10 19:04:06 +08:00
var ever = $(t).find(".like-text").text();
if(ever == "赞") {
$(t).find(".like-text").text("取消赞");
} else {
$(t).find(".like-text").text("Unlike");
}
2014-11-09 16:24:19 +08:00
} else {
2015-01-10 19:04:06 +08:00
var ever = $(t).find(".like-text").text();
if(ever == "取消赞") {
$(t).find(".like-text").text("赞");
} else {
$(t).find(".like-text").text("Like");
}
2014-11-09 16:24:19 +08:00
}
}
});
});
self.initShare();
},
weixinQRCodeO: $("#weixinQRCode"),
initShare: function() {
var self = this;
$(".btn-weixin").click(function() {
if(!self.weixinQRCodeO.html()) {
self.weixinQRCodeO.qrcode(location.href);
}
BootstrapDialog.show({
2015-01-10 19:04:06 +08:00
title: "Open Wechat to scan the code",
2014-11-09 16:24:19 +08:00
message: self.weixinQRCodeO
});
});
$(".btn-share").click(function() {
var $this = $(this);
var map = {"btn-weibo": shareSinaWeibo, "tencent-weibo": shareTencentWeibo, "qq": shareQQ, "renren": shareRenRen};
for(var i in map) {
if($this.hasClass(i)) {
map[i](self.noteId, document.title);
break;
}
}
});
}
}
$(function() {
C.init();
});