jQuery(document).ready(function () {
(function($) {
var defaults = {
url: {
loadComments: '/api4/comments/#entity_code#/list?offset=#offset#',
postComment: '/api4/comments/add',
voteComment: '/api4/comments/#commentId#/votes',
userVotes: '/api4/comments/users/#userId#/votes',
userBan: '/api4/comments/moderate/users/#userId#/ban',
userUnBan: '/api4/comments/moderate/users/#userId#/unban',
userBans: '/api4/comments/moderate/usersbans',
hideComment: '/api4/comments/hide',
showComment: '/api4/comments/show',
censorText: '/api4/comments/censoredtext',
},
minMessageLength: 10,
minGuestNameLength: 3,
commentLimit: 50,
guestColors: {},
guestIcons: {},
entityCode: '',
authorized: false,
user: {},
error: {
messageSendError: 'Не удалось отправить сообщение',
messageShortError: 'Сообщение слишком короткое',
messageVoteError: 'Не удалось проголосовать, попробуйте обновить страницу',
guestNameSaveError: 'Не удалось сохранить имя пользователя',
voteError: 'Не удалось проголосовать за комментарий',
hideComment: 'Не удалось скрыть комментарий',
showComment: 'Не удалось отобразить комментарий',
shortGuestName: 'Имя пользователя слишком короткое',
},
hiddenCommentClass: 'b-comment_hidden-moderation',
errorTpl: '',
userIds: {}
};
var options;
$.fn.comments = function(params){
var options = $.extend({}, defaults, options, params);
var offset = options.commentLimit;
var commentsBlock = $(this);
var commentCount = options.commentCount;
var commentTpl = '';
var commentReplyBlock = '';
var entityCode = options.entityCode;
var guest = false;
var userImages = {};
var consultants = {};
var reComment = null;
var resetReCaptcha = false;
var loadComments = function (onSuccess, onError) {
var url = options.url.loadComments;
url = url.replace('#offset#', offset);
showFader();
$.ajax({
url: url,
dataType : "json",
success: function (data, textStatus) {
$.each(data.comments, function(i, comment) {
var newCommentBlock = addComment(comment);
newCommentBlock.find('.b-voting__item').not('.js-vote_val').addClass('b-voting__item_state_disabled');
});
if (offset + options.commentLimit > commentCount) {
commentsBlock.find('.js-load_more').hide();
} else {
commentsBlock.find('.js-load_more').show();
}
offset += options.commentLimit;
commentsBlock.find('.js-load_error').hide();
if (typeof data.userImages === 'object') {
userImages = $.extend(userImages, data.userImages);
}
insertUserImage();
loadUserVotes();
hideFader();
onSuccess();
},
error: function () {
commentsBlock.find('.js-load_error').show();
commentsBlock.find('.js-load_more').show();
hideFader();
onError();
}
});
};
var postComment = function (data) {
eventCommentAdd();
var url = options.url.postComment;
var commentText = data.commentText;
var comment = {
"entityCode": entityCode,
"parentId": data.parentId,
"authorId": options.user.id,
"authorName": options.user.name,
"comment": commentText,
"guestIcon": "",
"guestColor": ""
};
if (!options.authorized) {
comment.guestColor = guest.color;
comment.guestIcon = guest.code;
comment.authorName= guest.name;
}
if (useReCaptcha()) {
comment['reCaptcha'] = grecaptcha.getResponse();
}
showFader();
$.ajax({
url: url,
dataType : "json",
method: 'POST',
data: JSON.stringify(comment),
contentType: "application/json; charset=utf-8",
success: function (comment, textStatus) {
if (comment.status != 'moderation') {
var commentBlock = addComment(comment);
commentBlock.find('.b-avatar').removeAttr('data-author_id');
if (options.authorized) {
if (options.user.img) {
commentBlock.find('img.b-avatar__image')
.attr('src', options.user.img);
}
commentBlock.find('.js-vote_plus:first, .js-vote_minus:first')
.removeClass('b-voting__item_state_disabled');
}
$(window).scrollTo(commentBlock, 250, {offset: {top: -50}});
}
data.onSuccess(comment);
if (!options.authorized) {
$.cookie('guest_data.name', guest.name);
$.cookie('guest_data.color', guest.color);
$.cookie('guest_data.icon', guest.code);
var userTopBlock = commentsBlock.find('.js-user_top_form');
userTopBlock.find('.js-guest_name').parent().hide();
userTopBlock.find('.js-user_name').show();
commentsBlock.find('.b-user__name-action_edit').show();
commentsBlock.find('.b-user__name-action_save').hide();
}
hideFader();
},
error: function () {
hideFader();
data.onError();
}
});
};
var init = function () {
if (options.user.id !== undefined) {
options.authorized = true;
} else {
options.authorized = false;
}
if (typeof commentsUserImages === 'object' && commentsUserImages !== null) {
userImages = commentsUserImages;
}
if (typeof commentsConsultants === 'object' && commentsConsultants !== null) {
consultants = commentsConsultants;
}
insertUserImage();
showConsultants();
var userTopBlock = commentsBlock.find('.js-user_top_form');
if (options.authorized) {
userTopBlock.find('.js-user_name').text(options.user.name);
userTopBlock.find('.b-user__name-action_save').hide();
if (options.user.img) {
userTopBlock.find('img.b-avatar__image')
.attr('src', options.user.img)
.load(function () {
userTopBlock.find('.js-auth_user_avatar').show();
userTopBlock.find('.js-guest_avatar').hide();
});
} else {
userTopBlock.find('.js-auth_user_avatar').show();
userTopBlock.find('.js-guest_avatar').hide();
}
userTopBlock.find('.b-form-note_discussions').text('').show();
userTopBlock.find('.js-auth_user_avatar .b-avatar__image').attr('title', options.user.name)
.attr('alt', options.user.name);
if (options.user.banned) {
userTopBlock.find('.b-form-note_discussions')
.html('Вы забанены до ' + options.user.banTo + '').show();
commentsBlock.find('.b-form-field, .js-reply_button, .b-button_content_add-comment').hide();
}
} else {
guest = getGuestInfo();
userTopBlock.find('.b-form-note_discussions').show();
userTopBlock.find('.js-auth_user_avatar').hide();
userTopBlock.find('.js-guest_avatar').show();
userTopBlock.find('.js-user_name').text(guest.name);
userTopBlock.find('.js-guest_avatar').html(guest.html)
.addClass('b-avatar_color_' + guest.color)
.find('svg');//.css({height: 90, width: 90, left: '20%', top: '18%'});
userTopBlock.find('.js-guest_avatar').attr('title', guest.name)
.attr('alt', guest.name);
}
commentTpl = commentsBlock.find('.js-comment_template').html();
commentReplyBlock = commentsBlock.find('.js-reply_form_template');
options.url.loadComments = options.url.loadComments
.replace('#entity_code#', entityCode);
commentsBlock.find('.js-load_more').on('click', function (e) {
$(this).hide();
loadComments(
function () {
},
function () {
}
);
e.preventDefault();
});
commentsBlock.on('click', '.js-reply_button', function () {
var parent = $(this).parents('.b-comment__footer:first');
var parentComment = $(this).parents('.b-comment:first');
var replyFormParent = $(commentReplyBlock).parents('.b-comment:first');
if (replyFormParent.data('comment_id') == parentComment.data('comment_id')) {
commentReplyBlock.show();
return;
}
var parenCommentAuthor = parentComment.find('.js-author_name:first').text().trim();
commentReplyBlock.find('div.b-comments__error').hide();
$('.js-form_info_block').hide();
$(commentReplyBlock).find('textarea').val(parenCommentAuthor + ', ');
$(commentReplyBlock).hide().insertAfter(parent).show(0, function () {
$(this).find('textarea').focus().trigger('input');
});
});
commentsBlock.on('click', '.js-post_reply', function (e) {
var parent = $(this).parents('.b-form:first');
var parentComment = parent.parents('.b-comment:first');
var parentId = 0;
var errorBlock = commentReplyBlock.find('.js-form_error_block');
var infoBlock = commentReplyBlock.find('.js-form_info_block');
var commentText = commentReplyBlock.find('textarea').val();
$('.js-form_info_block').hide();
if (commentText.length < options.minMessageLength) {
errorBlock.show().find('.js-message').text(options.error.messageShortError);
e.preventDefault();
return false;
}
if (parentComment.length > 0) {
parentId = parentComment.data('comment_id');
}
var postData = {
commentText: commentText,
parentId: parentId,
onSuccess: function (comment) {
errorBlock.hide();
commentReplyBlock.hide();
if (comment.status == 'moderation') {
infoBlock.clone().insertAfter(parentComment.find('.js-comment_text')).show().find('.js-message').html('Ваш комментарий будет опубликован после проверки.')
}
},
onError: function () {
errorBlock.show().find('.js-message').text(options.error.messageSendError);
}
};
if (useReCaptcha()) {
reComment = postData;
showFader();
if (resetReCaptcha) {
grecaptcha.reset();
}
grecaptcha.execute();
} else {
postComment(postData);
}
e.preventDefault();
return false;
});
commentsBlock.on('submit', '.js-reply_form_template form', function (e) {
e.preventDefault();
return false;
});
commentsBlock.on('submit', '.js-user_top_form form', function (e) {
var parentId = 0;
var postForm = $(this);
var errorBlock = postForm.find('.js-form_error_block');
var infoBlock = postForm.find('.js-form_info_block');
var commentText = postForm.find('textarea').val();
$('.js-form_info_block').hide();
if (commentText.length < options.minMessageLength) {
errorBlock.show().find('.js-message').text(options.error.messageShortError);
e.preventDefault();
return false;
}
var postData = {
commentText: postForm.find('textarea').val(),
parentId: parentId,
onSuccess: function (comment) {
postForm.find('.js-form_error_block').hide();
postForm.find('textarea').val('');
if (comment.status == 'moderation') {
infoBlock.show().find('.js-message').html('Ваш комментарий будет опубликован после проверки.')
}
},
onError: function () {
errorBlock.show().find('.js-message').text(options.error.messageSendError);
}
};
if (useReCaptcha()) {
reComment = postData;
showFader();
if (resetReCaptcha) {
grecaptcha.reset();
}
grecaptcha.execute();
} else {
postComment(postData);
}
e.preventDefault();
return false;
});
commentsBlock.on('click', '.js-vote_plus, .js-vote_minus', function (e) {
if ($(this).hasClass('b-voting__item_state_disabled')) {
return;
}
var value = 1;
if ($(this).hasClass('js-vote_minus')) {
value = -1;
}
var commentsBlock = $(this).parents('.b-comment:first');
vote(commentsBlock, value);
});
commentsBlock.on('click', '.b-comments__error .b-ico_content_close', function (e) {
hideFader();
$(this).parent().hide();
});
commentsBlock.on('click', '.js-show_hidden_comment a', function (e) {
$(this).parents('.b-comment:first').find('.js-comment_text').show();
$(this).parent().remove();
e.preventDefault();
return false;
});
commentsBlock.on('click', '.b-comment__user-answer', function (e) {
var parentId = $(this).data('parent_comment_id');
if (parentId > 0) {
var parentCommentBlock = commentsBlock.find('[data-comment_id='+ parentId +']');
$(window).scrollTo(parentCommentBlock, 250, {offset: {top: -50}});
}
});
commentsBlock.on('click', '.b-user__name-action_save', function (e) {
var guestName = commentsBlock.find('.js-guest_name').val();
if (guestName.length < options.minGuestNameLength) {
showError(options.error.shortGuestName);
return;
}
censorText(
guestName,
function (data) {
guestName = data.text;
guest.name = guestName;
commentsBlock.find('.js-guest_name').parent().hide();
commentsBlock.find('.js-guest_name').val(guest.name);
$.cookie('guest_data.name', guest.name);
$.cookie('guest_data.color', guest.color);
$.cookie('guest_data.icon', guest.code);
commentsBlock.find('.js-user_name').text(guest.name).show();
commentsBlock.find('.b-user__name-action_edit').show();
commentsBlock.find('.b-user__name-action_save').hide();
},
function () {
showError(options.error.guestNameSaveError);
}
);
});
commentsBlock.on('click', '.b-user__name-action_edit', function (e) {
commentsBlock.find('.b-user__name-action_edit').hide();
commentsBlock.find('.js-user_name').hide();
commentsBlock.find('.js-guest_name').parent().show();
commentsBlock.find('.b-user__name-action_save').show();
});
initChangeGuestName();
hideFader();
};
var renderComment = function (tpl, comment, authorized, parentCommentBlock) {
$.each(comment, function (code, value) {
tpl = tpl.replace(new RegExp('#' + code +'#','g'), value);
});
var rating = parseInt(comment.ratingPositive) + parseInt(comment.ratingNegative);
tpl = $(tpl);
var voteBlock = tpl.find('.b-voting:first');
var voteValBlock = tpl.find('.js-vote_val');
updateVoteBlock(voteBlock, rating);
if (!authorized) {
tpl.find('.b-voting__item').not(voteValBlock).addClass('b-voting__item_state_disabled');
}
var avatarBlock = tpl.find('.b-avatar');
if (parseInt(comment.authorId) > 0) {
tpl.find('.b-avatar_type_temporary-user').remove();
tpl.find('.b-avatar').attr('data-author_id', comment.authorId).show();
if (consultants[comment.authorId] !== undefined) {
markConsultantBlock(tpl, consultants[comment.authorId]);
}
} else {
tpl.find('.b-avatar').addClass('b-avatar_color_' + comment.guestColor);
var iconHtml = findGuestIcon(comment.guestIcon);
avatarBlock.html(iconHtml);
}
if (parentCommentBlock.length > 0) {
tpl.find('.b-comment__user-answer')
.text('> ' + parentCommentBlock.find('.js-author_name').text());
tpl.find('.b-comment__user-answer').attr('data-parent_comment_id', parentCommentBlock.data('comment_id'));
} else {
tpl.find('.b-comment__user-answer').remove();
}
if (comment.blocked) {
tpl.find('.b-comment').addClass('b-comment_hidden-moderation');
}
tpl.find('time.timeago').attr('datetime', comment.createdAtRaw);
return tpl;
};
var findParentBlock = function (parentId) {
var parentBlock;
if (parentId == null) {
parentBlock = commentsBlock.find('.b-comments-list:first');
} else {
var parentCommentBlock = commentsBlock.find('[data-comment_id='+ parentId +']');
var childCommentBlock = parentCommentBlock.find('ul.b-comments-list:first');
if (childCommentBlock.length > 0) {
parentBlock = childCommentBlock;
} else {
parentBlock = $('
')
.appendTo(parentCommentBlock.parent());
}
}
return parentBlock;
};
var addComment = function (comment) {
var parentId = comment.parentId;
var parentBlock = findParentBlock(parentId);
var parentCommentBlock = commentsBlock.find('[data-comment_id='+ parentId +']');
var tmpCommentTpl = commentTpl;
tmpCommentTpl = renderComment(tmpCommentTpl, comment, options.authorized, parentCommentBlock);
var commentBlock = tmpCommentTpl.appendTo(parentBlock);
commentBlock.find('time.timeago').timeago();
return commentBlock;
};
var vote = function (commentBlock, value) {
var url = options.url.voteComment;
var commentId = commentBlock.data('comment_id');
var commentVote = {
userId: options.user.id,
value: value
};
url = url.replace('#commentId#', commentId);
showFader();
$.ajax({
url: url,
dataType : "json",
method: 'POST',
data: JSON.stringify(commentVote),
contentType: "application/json; charset=utf-8",
success: function (data, textStatus) {
var newValue = data.ratingPositive + data.ratingNegative;
updateVoteBlock(commentBlock.find('.b-voting:first'), newValue);
commentBlock.find('.js-vote_plus:first, .js-vote_minus:first')
.addClass('b-voting__item_state_disabled');
hideFader();
},
error: function () {
showError(options.error.voteError);
}
});
};
var updateVoteBlock = function (voteBlock, value) {
var voteValBlock = voteBlock.find('.js-vote_val');
voteValBlock.html(value);
voteValBlock
.removeClass('b-voting__item_state_disabled b-voting__item_state_positive b-voting__item_state_negative');
if (value > 0) {
voteValBlock.addClass('b-voting__item_state_positive');
voteValBlock.html('+' + voteValBlock.html());
}
if (value < 0){
voteValBlock.addClass('b-voting__item_state_negative');
}
if (value == 0){
voteValBlock.addClass('b-voting__item_state_disabled');
}
};
var findGuestIcon = function (code) {
var iconData = options.guestIcons[code];
if (iconData === undefined) {
var tmpGuest = generateGuest();
return tmpGuest.html;
}
return iconData.html;
};
var getGuestInfo = function () {
var guestCookie = $.cookie('guest_data.name');
var guestData = {};
var guestNameInput = commentsBlock.find('.js-guest_name');
var guestNameBlock = commentsBlock.find('.js-user_name');
if (undefined !== guestCookie) {
try {
guestCookie = {
name: $.cookie('guest_data.name'),
icon: $.cookie('guest_data.icon'),
color: $.cookie('guest_data.color')
};
guestData = options.guestIcons[guestCookie.icon];
guestData.name = guestCookie.name;
guestData.color = options.guestColors[guestCookie.color].code;
commentsBlock.find('.b-user__name-action_edit').show();
commentsBlock.find('.b-user__name-action_save').hide();
return guestData;
} catch (e) {
guestNameBlock.show();
guestNameInput.parent().hide();
commentsBlock.find('.b-user__name-action_edit').show();
commentsBlock.find('.b-user__name-action_save').hide();
return generateGuest();
}
} else {
guestNameBlock.show();
guestNameInput.parent().hide();
commentsBlock.find('.b-user__name-action_edit').show();
commentsBlock.find('.b-user__name-action_save').hide();
return generateGuest();
}
};
var generateGuest = function () {
var getRandom = function (array) {
var keys = Object.keys(array);
for(var j, x, i = keys.length; i; j = parseInt(Math.random() * i), x = keys[--i], keys[i] = keys[j], keys[j] = x);
return array[keys[0]];
};
var guestData = getRandom(options.guestIcons);
guestData.color = getRandom(options.guestColors).code;
guestData.name += '-' + (Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000);
return guestData;
};
var insertUserImage = function () {
var imagesBlocks = commentsBlock.find('.b-avatar[data-avatar_loaded=0]');
imagesBlocks.each(function () {
var userId = parseInt($(this).data('author_id'));
if (typeof userImages[userId] !== "undefined") {
var imageUrl = userImages[userId];
var avatarBlock = commentsBlock.find('.b-avatar[data-author_id=' + userId + ']');
avatarBlock.attr('data-avatar_loaded', 1)
.find('img.b-avatar__image').attr('src', imageUrl);
}
});
};
var showConsultants = function () {
$.each(consultants, function (userId, userData) {
var userBlocks = findUserCommentBlocks(userId);
userBlocks.each(function () {
var commentBlock = $(this).parents('.b-comment:first');
markConsultantBlock(commentBlock, userData);
});
});
};
var markConsultantBlock = function (commentBlock, userData) {
commentBlock.find('.js-author_name').addClass('b-comment__user_confirmed')
.attr('title', 'Комментарий эксперта');
if (userData.description != undefined) {
$('')
.insertAfter(commentBlock.find('.js-author_name'));
}
if (userData.name != undefined) {
commentBlock.find('.js-author_name').text(userData.name);
}
};
var initChangeGuestName = function () {
var guestNameInput = commentsBlock.find('.js-guest_name');
var guestNameBlock = commentsBlock.find('.js-user_name');
guestNameInput.val(guest.name);
};
var showFader = function () {
commentsBlock.find('.js-fader').show();
commentsBlock.find('.js-comments_error').hide();
};
var hideFader = function () {
commentsBlock.find('.js-fader').hide();
};
var loadUserVotes = function () {
if (options.authorized) {
var commentsBlocks = commentsBlock.find('.b-comment[data-vote_loaded=0]');
var commentsIds = [];
commentsBlocks.each(function () {
var val = $(this).data('comment_id');
if (val === parseInt(val)) {
commentsIds.push(val);
}
});
var url = options.url.userVotes;
url = url.replace('#userId#', options.user.id);
if (commentsIds.length > 0) {
$.ajax({
url: url + '?' + $.param({commentIds: commentsIds.sort()}),
dataType: "json",
method: 'GET',
headers: {"Accept": "application/json"},
success: function (data) {
commentsBlocks.each(function () {
var commentBlock = $(this);
var commentId = commentBlock.data('comment_id');
if (data.indexOf(commentId) === -1) {
commentBlock.find('.js-vote_plus:first, .js-vote_minus:first')
.removeClass('b-voting__item_state_disabled');
}
commentBlock.attr('data-vote_loaded', '1');
});
},
error: function () {
}
});
}
}
};
var censorText = function (text, onSuccess, onError) {
showFader();
$.ajax({
url: options.url.censorText + '?text=' + text,
dataType: "json",
method: 'GET',
headers: {"Accept": "application/json"},
success: function (data) {
hideFader();
onSuccess(data);
},
error: function () {
hideFader();
onError();
}
});
};
var showError = function (message) {
showFader();
commentsBlock.find('.js-comments_error').show()
.find('.b-comments__error').show()
.find('.js-message').text(message);
};
var initModeration = function () {
var errorTpl = options.errorTpl;
commentsBlock.on('click', '.js-moderate_hide', function () {
var commentBlock = $(this).parents('.b-comment:first');
moderateHideComment(
commentBlock.data('comment_id'),
function (data) {
commentBlock.addClass(options.hiddenCommentClass);
commentBlock.find('.b-comment__body').html(data.comment);
commentBlock.find('.js-moderate_hide').hide();
commentBlock.find('.js-moderate_show').show();
},
function () {
showError(options.error.hideComment);
}
);
});
commentsBlock.on('click', '.js-moderate_show', function () {
var commentBlock = $(this).parents('.b-comment:first');
moderateShowComment(
commentBlock.data('comment_id'),
function (data) {
commentBlock.removeClass(options.hiddenCommentClass);
commentBlock.find('.b-comment__body').html(data.comment);
commentBlock.find('.js-moderate_hide').show();
commentBlock.find('.js-moderate_show').hide();
},
function () {
showError(options.error.showComment);
}
);
});
var moderateHideComment = function (commentId, onSuccess, onError) {
var url = options.url.hideComment;
var data = {
"commentId": commentId
};
showFader();
$.ajax({
url: url,
dataType : "json",
method: 'POST',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (data) {
onSuccess(data);
hideFader();
},
error: function () {
hideFader();
onError();
}
});
};
var moderateShowComment = function (commentId, onSuccess, onError) {
var url = options.url.showComment;
var data = {
"commentId": commentId
};
showFader();
$.ajax({
url: url,
dataType : "json",
method: 'POST',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (data) {
onSuccess(data);
hideFader();
},
error: function () {
hideFader();
onError();
}
});
};
var banFormBlock = commentsBlock.find('.js-ban-form');
var unBanFormBlock = commentsBlock.find('.js-unban-form');
var banForm = banFormBlock.find('form');
var unBanForm = unBanFormBlock.find('form');
var usersBanData = [];
commentsBlock.on('click', '.js-moderate_ban', function () {
var moderateBlock = $(this).parent();
banForm.show();
banFormBlock.find('.b-comments__error').hide();
if (moderateBlock.find('.js-ban-form').length > 0) {
banFormBlock.show();
return;
}
var commentBlock = $(this).parents('.b-comment:first');
banFormBlock.attr('data-comment_id', commentBlock.data('comment_id'))
.attr('data-user_id', commentBlock.find('.b-avatar').data('author_id'));
moderateBlock.append(banFormBlock.show());
});
commentsBlock.on('click', '.js-moderate_unban', function () {
var moderateBlock = $(this).parent();
unBanForm.show();
unBanFormBlock.find('.b-comments__error').hide();
if (moderateBlock.find('.js-unban-form').length > 0) {
unBanFormBlock.show();
return;
}
var commentBlock = $(this).parents('.b-comment:first');
var userId = commentBlock.find('.b-avatar').data('author_id');
var banData = usersBanData[userId];
unBanFormBlock.attr('data-comment_id', commentBlock.data('comment_id'))
.attr('data-user_id', userId);
unBanFormBlock.find('.js-ban_reason').text(banData.reason);
unBanFormBlock.find('.js-ban_date_to').text(banData.dateTo);
moderateBlock.append(unBanFormBlock.show());
});
banFormBlock.find('.js-ban_form_cancel').click(function (e) {
banFormBlock.hide();
banFormBlock.find('.js-ban_reason').val('');
e.preventDefault();
return false;
});
unBanFormBlock.find('.js-ban_form_cancel').click(function (e) {
unBanFormBlock.hide();
e.preventDefault();
return false;
});
banForm.submit(function () {
var commentBlock = banFormBlock.parents('.b-comment:first');
var userId = banFormBlock.data('user_id');
var hideAllComments = banFormBlock.find('.js-comments_remove_all:checked').length > 0;
banFormBlock.find('.b-comments__error').hide();
banUser(
userId,
commentBlock.data('comment_id'),
hideAllComments,
banFormBlock.find('.js-ban_reason').val(),
function () {
banForm.hide();
banFormBlock.find('.js-form_success').show();
commentBlock.find('.js-moderate_ban').hide();
commentBlock.find('.js-moderate_unban').show();
var userBlocks = findUserCommentBlocks(userId);
userBlocks.each(function () {
var commentBlock = $(this).parents('.b-comment:first');
commentBlock.find('.js-moderate_ban').hide();
commentBlock.find('.js-moderate_unban').show();
if (hideAllComments) {
commentBlock.addClass('b-comment_hidden-moderation');
}
});
commentBlock.find('.js-moderate_hide').click();
},
function () {
banFormBlock.find('.js-form_error').show();
}
);
return false;
});
unBanForm.submit(function () {
var commentBlock = unBanFormBlock.parents('.b-comment:first');
var userId = unBanFormBlock.data('user_id');
unBanFormBlock.find('.b-comments__error').hide();
unBanUser(
userId,
function () {
unBanForm.hide();
unBanFormBlock.find('.js-form_success').show();
commentBlock.find('.js-moderate_ban').show();
commentBlock.find('.js-moderate_unban').hide();
var userBlocks = findUserCommentBlocks(userId);
userBlocks.each(function () {
var commentBlock = $(this).parents('.b-comment:first');
commentBlock.find('.js-moderate_ban').show();
commentBlock.find('.js-moderate_unban').hide();
});
},
function () {
unBanFormBlock.find('.js-form_error').show();
}
);
return false;
});
banFormBlock.find('.js-form_success .b-ico_content_close').click(function () {
banFormBlock.hide();
});
unBanFormBlock.find('.js-form_success .b-ico_content_close').click(function () {
unBanFormBlock.hide();
});
var banUser = function (userId, commentId, hideAllComments, reason, onSuccess, onError) {
var url = options.url.userBan;
url = url.replace('#userId#', userId);
var data = {
"hideAllComments": hideAllComments,
"reason": reason,
"commentId": commentId
};
showFader();
$.ajax({
url: url,
dataType : "json",
method: 'POST',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (data, textStatus) {
usersBanData[userId] = data;
onSuccess();
hideFader();
},
error: function () {
hideFader();
onError();
}
});
};
var unBanUser = function (userId, onSuccess, onError) {
var url = options.url.userUnBan;
url = url.replace('#userId#', userId);
showFader();
$.ajax({
url: url,
dataType : "json",
method: 'DELETE',
contentType: "application/json; charset=utf-8",
success: function (data, textStatus) {
onSuccess();
hideFader();
},
error: function () {
hideFader();
onError();
}
});
};
var initUsersBan = function () {
var url = options.url.userBans;
var userBlocks = commentsBlock.find('.b-avatar[data-author_id]');
var userIds = [];
userBlocks.each(function () {
var userId = parseInt($(this).data('author_id'));
if (userId > 0 && userIds.indexOf(userId) === -1) {
userIds.push(userId);
}
});
$.ajax({
url: url,
dataType : "json",
method: 'POST',
data: JSON.stringify(userIds),
contentType: "application/json; charset=utf-8",
success: function (data) {
commentsBlock.find('.b-comment__moderator-tools')
.not('.js-user_moderation').show();
$.each(data, function (userId, banData) {
usersBanData[userId] = banData;
var userBlocks = findUserCommentBlocks(userId);
userBlocks.each(function () {
var commentBlock = $(this).parents('.b-comment:first');
commentBlock.find('.js-moderate_ban').hide();
commentBlock.find('.js-moderate_unban').show();
});
});
},
error: function () {
}
});
};
initUsersBan();
};
var findCommentByHash = function () {
var hash = window.location.hash.substr(1);
if (hash.search('comment_') !== -1) {
var commentBlock = commentsBlock.find('#' + hash);
if (commentBlock.length) {
$(window).scrollTo(
commentBlock,
250,
{
offset: {top: -100},
onAfter: function () {
commentBlock.addClass('b-comment_selected');
}
}
);
} else {
if (commentsBlock.find('.js-load_more:visible').length) {
loadComments(
function () {
findCommentByHash();
},
function () {
}
);
}
}
}
};
var findUserCommentBlocks = function (userId) {
return commentsBlock.find('.b-avatar[data-author_id='+ userId +']');
};
var useReCaptcha = function () {
return typeof grecaptcha !== 'undefined';
};
var eventCommentAdd = function () {
var event = new Event('sd.comments:add');
document.dispatchEvent(event);
};
init();
loadUserVotes();
findCommentByHash();
if (options.isModerator) {
initModeration();
}
this.postReComment = function () {
if (reComment !== null) {
postComment(reComment);
reComment = null;
resetReCaptcha = true;
}
};
return this;
};
})(jQuery);
});
guestIcons = {"icon1":{"name":"\u041f\u043b\u0430\u043d\u0435\u0442\u0430","code":"icon1","html":"