1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-05 16:04:24 +03:00
ifhub.club/templates/skin/developer-jquery/js/comments.js

332 lines
10 KiB
JavaScript
Raw Normal View History

var ls = ls || {};
/**
* Обработка комментариев
*/
ls.comments = (function ($) {
/**
* Опции
*/
this.options = {
type: {
topic: {
url_add: aRouter.blog+'ajaxaddcomment/',
url_response: aRouter.blog+'ajaxresponsecomment/'
},
talk: {
url_add: aRouter.talk+'ajaxaddcomment/',
url_response: aRouter.talk+'ajaxresponsecomment/'
}
2011-04-01 10:49:36 +03:00
},
classes: {
form_loader: 'loader',
comment_new: 'new',
comment_current: 'current',
comment_deleted: 'deleted',
comment_self: 'self',
comment: 'comment',
comment_goto_parent: 'goto-comment-parent',
comment_goto_child: 'goto-comment-child'
},
wysiwyg: null
};
this.iCurrentShowFormComment=0;
2011-08-15 11:51:37 +03:00
this.iCurrentViewComment=null;
this.aCommentNew=[];
2011-04-01 12:54:47 +03:00
// Добавляет комментарий
this.add = function(formObj, targetId, targetType) {
if (this.options.wysiwyg) {
$('#'+formObj+' textarea').val(tinyMCE.activeEditor.getContent());
}
2011-04-01 10:49:36 +03:00
formObj = $('#'+formObj);
$('#form_comment_text').addClass(this.options.classes.form_loader).attr('readonly',true);
$('#comment-button-submit').attr('disabled', 'disabled');
ls.ajax(this.options.type[targetType].url_add, formObj.serializeJSON(), function(result){
2011-08-09 10:45:04 +03:00
$('#comment-button-submit').removeAttr('disabled');
2011-04-01 10:49:36 +03:00
if (!result) {
this.enableFormComment();
ls.msg.error('Error','Please try again later');
return;
}
if (result.bStateError) {
this.enableFormComment();
ls.msg.error(null,result.sMsg);
2011-04-01 10:49:36 +03:00
} else {
this.enableFormComment();
2011-04-01 10:49:36 +03:00
$('#form_comment_text').val('');
2011-04-01 10:49:36 +03:00
// Load new comments
this.load(targetId, targetType, result.sCommentId, true);
2011-04-01 10:49:36 +03:00
}
}.bind(this));
}
2011-04-01 12:54:47 +03:00
// Активирует форму
this.enableFormComment = function() {
$('#form_comment_text').removeClass(this.options.classes.form_loader).attr('readonly',false);
2011-08-15 11:51:37 +03:00
}
2011-04-01 12:54:47 +03:00
// Показывает/скрывает форму комментирования
this.toggleCommentForm = function(idComment, bNoFocus) {
2011-08-13 20:33:29 +03:00
$('#comment_preview_'+this.iCurrentShowFormComment).html('').css('display','none');
if (this.iCurrentShowFormComment==idComment && $('#reply_'+idComment).css('display')=='block') {
$('#reply_'+idComment).hide();
return;
}
if (this.options.wysiwyg) {
tinyMCE.execCommand('mceRemoveControl',true,'form_comment_text');
}
2011-04-01 10:49:36 +03:00
$('#form_comment').appendTo("#reply_"+idComment);
$('#form_comment_text').val('');
$('#form_comment_reply').val(idComment);
2011-08-15 11:51:37 +03:00
$('.reply').hide();
$('#reply_'+idComment).css('display','block');
this.iCurrentShowFormComment=idComment;
if (this.options.wysiwyg) {
tinyMCE.execCommand('mceAddControl',true,'form_comment_text');
}
2011-08-21 16:29:46 +03:00
if (!bNoFocus) $('#form_comment_text').focus();
2011-08-15 11:51:37 +03:00
}
2011-04-01 12:54:47 +03:00
// Подгружает новые комментарии
this.load = function(idTarget, typeTarget, selfIdComment, bNotFlushNew) {
2011-04-01 10:49:36 +03:00
var idCommentLast = $("#comment_last_id").val();
2011-04-01 12:54:47 +03:00
// Удаляем подсветку у комментариев
if (!bNotFlushNew) {
$('.comment').each(function(index, item){
$(item).removeClass(this.options.classes.comment_new+' '+this.options.classes.comment_current);
}.bind(this));
}
2011-04-01 10:49:36 +03:00
objImg = $('#update-comments');
2011-07-24 15:25:01 +03:00
objImg.addClass('active');
var params = { idCommentLast: idCommentLast, idTarget: idTarget, typeTarget: typeTarget };
if (selfIdComment) {
params.selfIdComment = selfIdComment;
}
if ($('#comment_use_paging').val()) {
params.bUsePaging = 1;
}
ls.ajax(this.options.type[typeTarget].url_response, params, function(result) {
2011-07-24 15:25:01 +03:00
objImg.removeClass('active');
if (!result) { ls.msg.error('Error','Please try again later'); }
2011-04-01 10:49:36 +03:00
if (result.bStateError) {
ls.msg.error(null,result.sMsg);
} else {
var aCmt = result.aComments;
if (aCmt.length > 0 && result.iMaxIdComment) {
$("#comment_last_id").val(result.iMaxIdComment);
if ($('#block_stream_item_comment').length && ls.blocks) {
ls.blocks.load($('#block_stream_item_comment'), 'block_stream');
}
}
2011-08-15 11:51:37 +03:00
var iCountOld=0;
if (bNotFlushNew) {
iCountOld=this.aCommentNew.length;
} else {
this.aCommentNew=[];
}
if (selfIdComment) {
2011-08-26 13:36:58 +03:00
this.toggleCommentForm(this.iCurrentShowFormComment, true);
2011-08-15 11:51:37 +03:00
this.setCountNewComment(aCmt.length-1+iCountOld);
} else {
2011-08-15 11:51:37 +03:00
this.setCountNewComment(aCmt.length+iCountOld);
}
$.each(aCmt, function(index, item) {
2011-08-15 11:51:37 +03:00
if (!(selfIdComment && selfIdComment==item.id)) {
this.aCommentNew.push(item.id);
}
this.inject(item.idParent, item.id, item.html);
}.bind(this));
if (selfIdComment && $('#comment_id_'+selfIdComment).length) {
this.scrollToComment(selfIdComment);
}
2011-08-15 11:51:37 +03:00
//this.checkFolding();
2011-04-01 10:49:36 +03:00
}
}.bind(this));
2011-08-15 11:51:37 +03:00
}
2011-04-01 12:54:47 +03:00
// Вставка комментария
this.inject = function(idCommentParent, idComment, sHtml) {
var newComment = $('<div>', {'class': 'comment-wrapper', id: 'comment_wrapper_id_'+idComment}).html(sHtml);
if (idCommentParent) {
2011-04-01 10:49:36 +03:00
$('#comment_wrapper_id_'+idCommentParent).append(newComment);
} else {
$('#comments').append(newComment);
}
2011-08-15 11:51:37 +03:00
}
2011-04-01 12:54:47 +03:00
// Удалить/восстановить комментарий
this.toggle = function(obj, commentId) {
ls.ajax(aRouter['ajax']+'comment/delete/', { idComment: commentId }, function(result){
2011-04-01 10:49:36 +03:00
if (!result) {
ls.msg.error('Error','Please try again later');
}
if (result.bStateError) {
ls.msg.error(null,result.sMsg);
} else {
ls.msg.notice(null,result.sMsg);
$('#comment_id_'+commentId).removeClass(this.options.classes.comment_self+' '+this.options.classes.comment_new+' '+this.options.classes.comment_deleted+' '+this.options.classes.comment_current);
2011-04-01 10:49:36 +03:00
if (result.bState) {
$('#comment_id_'+commentId).addClass(this.options.classes.comment_deleted);
2011-04-01 10:49:36 +03:00
}
$(obj).text(result.sTextToggle);
2011-04-01 10:49:36 +03:00
}
}.bind(this));
2011-08-15 11:51:37 +03:00
}
2011-04-01 12:54:47 +03:00
// Предпросмотр комментария
this.preview = function() {
if (this.options.wysiwyg) {
$("#form_comment_text").val(tinyMCE.activeEditor.getContent());
}
2011-04-01 10:49:36 +03:00
if ($("#form_comment_text").val() == '') return;
$("#comment_preview_"+this.iCurrentShowFormComment).css('display', 'block');
ls.tools.textPreview('form_comment_text', false, 'comment_preview_'+this.iCurrentShowFormComment);
2011-08-15 11:51:37 +03:00
}
2011-04-01 12:54:47 +03:00
// Устанавливает число новых комментариев
this.setCountNewComment = function(count) {
if (count > 0) {
$('#new_comments_counter').css('display','block').text(count);
} else {
2011-04-01 10:49:36 +03:00
$('#new_comments_counter').text(0).hide();
}
2011-08-15 11:51:37 +03:00
}
2011-04-01 12:54:47 +03:00
// Вычисляет кол-во новых комментариев
this.calcNewComments = function() {
2011-08-15 11:51:37 +03:00
var aCommentsNew = $('.'+this.options.classes.comment+'.'+this.options.classes.comment_new);
this.setCountNewComment(aCommentsNew.length);
$.each(aCommentsNew,function(k,v){
this.aCommentNew.push(parseInt($(v).attr('id').replace('comment_id_','')));
}.bind(this));
}
2011-04-01 12:54:47 +03:00
// Переход к следующему комментарию
this.goToNextComment = function() {
2011-08-15 11:51:37 +03:00
if (this.aCommentNew[0]) {
if ($('#comment_id_'+this.aCommentNew[0]).length) {
this.scrollToComment(this.aCommentNew[0]);
}
this.aCommentNew.shift();
}
this.setCountNewComment(this.aCommentNew.length);
}
2011-04-01 12:54:47 +03:00
// Прокрутка к комментарию
this.scrollToComment = function(idComment) {
2011-04-01 10:49:36 +03:00
$.scrollTo('#comment_id_'+idComment, 1000, {offset: -250});
2011-08-15 11:51:37 +03:00
if (this.iCurrentViewComment) {
$('#comment_id_'+this.iCurrentViewComment).removeClass(this.options.classes.comment_current);
}
$('#comment_id_'+idComment).addClass(this.options.classes.comment_current);
2011-08-15 11:51:37 +03:00
this.iCurrentViewComment=idComment;
}
2011-04-01 10:49:36 +03:00
2011-04-01 12:54:47 +03:00
// Прокрутка к родительскому комментарию
this.goToParentComment = function(id, pid) {
2011-04-01 10:49:36 +03:00
thisObj = this;
$('.'+this.options.classes.comment_goto_child).hide().find('a').unbind();
$("#comment_id_"+pid).find('.'+this.options.classes.comment_goto_child).show().find("a").bind("click", function(){
$(this).parent('.'+thisObj.options.classes.comment_goto_child).hide();
2011-04-01 10:49:36 +03:00
thisObj.scrollToComment(id);
return false;
});
this.scrollToComment(pid);
return false;
}
2011-08-15 11:51:37 +03:00
2011-08-09 10:45:04 +03:00
// Сворачивание комментариев
this.checkFolding = function() {
$(".folding").each(function(index, element){
if ($(element).parent(".comment").next(".comment-wrapper").length == 0) {
$(element).hide();
} else {
$(element).show();
}
});
return false;
}
this.expandComment = function(folding) {
$(folding).removeClass("folded").parent().nextAll(".comment-wrapper").show();
}
this.collapseComment = function(folding) {
$(folding).addClass("folded").parent().nextAll(".comment-wrapper").hide();
}
this.expandCommentAll = function() {
$.each($(".folding"),function(k,v){
this.expandComment(v);
}.bind(this))
}
this.collapseCommentAll = function() {
$.each($(".folding"),function(k,v){
this.collapseComment(v);
}.bind(this))
}
2011-08-15 11:51:37 +03:00
this.init = function() {
this.initEvent();
this.calcNewComments();
2011-08-15 11:51:37 +03:00
//this.checkFolding();
this.toggleCommentForm(this.iCurrentShowFormComment);
if (typeof(this.options.wysiwyg)!='number') {
this.options.wysiwyg = Boolean(BLOG_USE_TINYMCE && tinyMCE);
}
}
this.initEvent = function() {
$('#form_comment_text').bind('keyup', function(e) {
key = e.keyCode || e.which;
if(e.ctrlKey && (key == 13)) {
$('#comment-button-submit').click();
return false;
}
});
2011-08-09 10:45:04 +03:00
$(".folding").click(function(e){
if ($(e.target).hasClass("folded")) {
this.expandComment(e.target);
} else {
this.collapseComment(e.target);
}
}.bind(this));
}
return this;
}).call(ls.comments || {},jQuery);
2011-04-01 10:49:36 +03:00
2011-08-09 10:45:04 +03:00
jQuery(document).ready(function(){
ls.comments.init();
});