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) { $('
' + userData.description + '
') .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":"<\/g><\/svg>"},"icon2":{"name":"\u041a\u043e\u0440\u0430\u0431\u043b\u0438\u043a","code":"icon2","html":"<\/g><\/svg>"},"icon3":{"name":"\u041f\u0440\u0438\u0432\u0438\u0434\u0435\u043d\u0438\u0435","code":"icon3","html":"<\/svg>"},"icon4":{"name":"\u041f\u0430\u0437\u043b","code":"icon4","html":"<\/svg>"},"icon5":{"name":"\u0427\u0435\u0440\u0435\u043f","code":"icon5","html":"<\/svg>"},"icon6":{"name":"\u041a\u0440\u0435\u0441\u0442\u0438","code":"icon6","html":"<\/g><\/svg>"},"icon7":{"name":"\u041f\u0442\u0438\u0447\u043a\u0430","code":"icon7","html":"<\/g><\/svg>"},"icon8":{"name":"\u041a\u043e\u0441\u0442\u044c","code":"icon8","html":"<\/g><\/svg>"},"icon9":{"name":"\u041a\u043e\u0448\u043a\u0430","code":"icon9","html":"<\/g><\/svg>"},"icon10":{"name":"\u041a\u043e\u0440\u043e\u043d\u0430","code":"icon10","html":"<\/path><\/path><\/path><\/g><\/svg>"},"icon11":{"name":"\u041c\u043e\u043b\u043d\u0438\u044f","code":"icon11","html":"<\/g><\/svg>"},"icon12":{"name":"\u0420\u0443\u0431\u0430\u0448\u043a\u0430","code":"icon12","html":"<\/svg>"},"icon13":{"name":"\u0417\u0432\u0435\u0437\u0434\u0430","code":"icon13","html":"<\/svg>"},"icon14":{"name":"\u041c\u043e\u0440\u043e\u0436\u0435\u043d\u043e\u0435","code":"icon14","html":"<\/path><\/path><\/path><\/path><\/path><\/g><\/svg>"},"icon15":{"name":"\u0420\u0430\u043a\u0435\u0442\u0430","code":"icon15","html":"<\/g><\/svg>"},"icon16":{"name":"\u0410\u043d\u0434\u0440\u043e\u0438\u0434","code":"icon16","html":"<\/path><\/g><\/svg>"},"icon17":{"name":"\u0416\u0443\u043a","code":"icon17","html":"<\/path><\/g><\/svg>"},"icon18":{"name":"\u0421\u043e\u0432\u0430","code":"icon18","html":"<\/path><\/svg>"},"icon19":{"name":"\u0420\u043e\u0437\u0435\u0442\u043a\u0430","code":"icon19","html":"<\/path><\/svg>"},"icon20":{"name":"\u0412\u0438\u043d\u0442","code":"icon20","html":"<\/path><\/svg>"},"icon21":{"name":"\u0411\u043e\u043a\u0430\u043b","code":"icon21","html":"<\/path><\/svg>"},"icon22":{"name":"\u0426\u0432\u0435\u0442\u043e\u0447\u0435\u043a","code":"icon22","html":"<\/path><\/g><\/svg>"},"icon23":{"name":"\u0411\u0430\u0431\u043e\u0447\u043a\u0430","code":"icon23","html":"<\/path><\/svg>"},"icon24":{"name":"\u0421\u043e\u043b\u043d\u044b\u0448\u043a\u043e","code":"icon24","html":"<\/path><\/svg>"},"icon25":{"name":"\u0414\u043e\u043c\u0438\u043a","code":"icon25","html":"<\/path><\/g><\/svg>"},"icon26":{"name":"\u0422\u0443\u0444\u0435\u043b\u044c\u043a\u0430","code":"icon26","html":"<\/path><\/svg>"},"icon27":{"name":"\u0427\u0430\u0448\u043a\u0430","code":"icon27","html":"<\/path><\/svg>"},"icon28":{"name":"\u041e\u0433\u043e\u043d\u044c","code":"icon28","html":"<\/path><\/svg>"},"icon29":{"name":"\u041a\u043e\u043b\u0435\u0447\u043a\u043e","code":"icon29","html":"<\/path><\/svg>"},"icon30":{"name":"\u041a\u0430\u043f\u0435\u043b\u044c\u043a\u0430","code":"icon30","html":"<\/path><\/svg>"},"icon31":{"name":"\u041e\u0431\u043b\u0430\u0447\u043a\u043e","code":"icon31","html":"<\/path><\/svg>"},"icon32":{"name":"\u0417\u043e\u043d\u0442\u0438\u043a","code":"icon32","html":"<\/path><\/svg>"},"icon33":{"name":"\u0411\u0430\u043d\u0442\u0438\u043a","code":"icon33","html":"<\/path><\/g><\/svg>"},"icon34":{"name":"\u041f\u0442\u0438\u0447\u043a\u0430","code":"icon34","html":"<\/path><\/svg>"},"icon35":{"name":"\u041a\u0435\u043a\u0441\u0438\u043a","code":"icon35","html":"<\/path><\/g><\/svg>"},"icon36":{"name":"\u041e\u0441\u044c\u043c\u0438\u043d\u043e\u0436\u043a\u0430","code":"icon36","html":"<\/path><\/svg>"},"icon37":{"name":"\u041a\u043e\u043d\u0444\u0435\u0442\u043a\u0430","code":"icon37","html":"<\/path><\/g><\/svg>"}};guestColors = {"cc3d3d":{"code":"cc3d3d"},"bf8441":{"code":"bf8441"},"4c9900":{"code":"4c9900"},"369eb2":{"code":"369eb2"},"3655b3":{"code":"3655b3"},"7537b3":{"code":"7537b3"}};