Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/burlakastudio.realcommenter/ |
Upload File : |
'use strict'; /** * Модуль "Полноценные комментарии 2.0" под Битрикс * Официальный сайт модуля: www.realcommenter.com * Официальный сайт разработчика: burlaka.studio * Автор и разработчик: Алексей Бурлака (AlexeyGfi) -> alexeygfi@gmail.com */ function realcommenter_admintools_scan_and_init () { /** * Ищем все не проинициализиваронные формы */ let admin_tools = document.querySelectorAll( realcommenter_get_selector('tree') + ' ' + realcommenter_get_selector('admin_tools') + ':not([data-inited])'); admin_tools.forEach(function (item) { let switch_obj = item.querySelector('ins'); if (!switch_obj) { return; } switch_obj.addEventListener('click', realcommenter_admintools_switch_cpu.bind(switch_obj, item)); item.setAttribute('data-inited', '1'); }); } window.addEventListener('load', realcommenter_admintools_scan_and_init); document.addEventListener('tree_updated', realcommenter_admintools_scan_and_init); function realcommenter_admintools_switch_cpu (container_obj) { //this - кнопка if (!this || !container_obj) { return; } /** * Если внутри есть уже сгенерённая выпадалка с инструментами - пинаем её открытие * ...иначе запрашиваем, инициализируем и только после этого открываем */ let tools_list = container_obj.querySelector(realcommenter_get_selector('admin_fly_cloud')); if (tools_list) { realcommenter_admintools_switch_show.bind(tools_list, container_obj)(); } else { /** * Если шаблон уже прочитан, не нужно его перечитывать */ realcommenter_admintools_pull.bind(this, container_obj)(); } } function realcommenter_admintools_pull (container_obj) { // this - кнопка let parent_comment = realcommenter_get_closest_comment(container_obj); if (!parent_comment) { return false; } let comment_id_matches = parent_comment.getAttribute('id'); comment_id_matches = comment_id_matches.match(/[0-9]+/); if (!comment_id_matches) { return false; } let _data = { request_type: 'admin_tools', comment_id: comment_id_matches.shift() }; realcommenter_ajaxion.bind(this, { url: '/bitrix/admin/burlakastudio.realcommenter.talk_tree.php', onsuccess: realcommenter_admintools_recieved_template, data: _data })(); } function realcommenter_admintools_recieved_template (result) { if (typeof result['ERROR'] !== 'undefined' && Object.keys(result['ERROR']).length) { console.log('ERROR'); console.log(result); return; } if (result['ADMIN_TOOLS_TEMPLATE'] !== 'undefined' && result['ADMIN_TOOLS_TEMPLATE']) { realcommenter_admintools_switch_cpu['template'] = result['ADMIN_TOOLS_TEMPLATE']; if (!!typeof result['request']['comment_id']) { let parent_comment = document.querySelector( realcommenter_get_selector('comment_id') + result['request']['comment_id'] ); if (parent_comment) { realcommenter_admintools_append_toolbox.bind(parent_comment)(); } } } } function realcommenter_admintools_append_toolbox () { // this - контейнер со всей веткой комментария if ( typeof realcommenter_admintools_switch_cpu['template'] === 'undefined' || !realcommenter_admintools_switch_cpu['template'] ) { return; } let admin_tool = this.querySelector('* > ' + realcommenter_get_selector('admin_tools')); if (!admin_tool) { return; } let bridge_obj = document.createElement('div'); bridge_obj.style.display = 'none'; bridge_obj.innerHTML = realcommenter_admintools_switch_cpu['template']; admin_tool.appendChild(bridge_obj); let tools_list = bridge_obj.querySelector(realcommenter_get_selector('admin_fly_cloud')); if (!tools_list) { return; } admin_tool.appendChild(tools_list); bridge_obj.parentNode.removeChild(bridge_obj); realcommenter_admintools_init_tools_list(admin_tool); } function realcommenter_admintools_init_tools_list (container_obj) { let _tools = container_obj.querySelectorAll('[data-action]'); _tools.forEach(function (item) { let _action = item.getAttribute('data-action'); item.addEventListener('click', realcommenter_admintools_action.bind(item, _action, container_obj)); }); realcommenter_admintools_switch_show(container_obj); } function realcommenter_admintools_action (action, container_obj) { //this - инструмент в admin_tools let parentComment, commentIdMatches; /** * Пункты могут иметь флаг того, что должны быть подтверждены. * Например, при удалении нужно убедиться, что это был не случайный клик */ if (this.hasAttribute('data-confirmable')) { if (!this.hasAttribute('data-action-proof')) { this.setAttribute('data-action-proof', '1'); return; } } switch (action) { case 'EDIT' : realcommenter_admintools_switch_show(container_obj); realcommenter_form_pull.bind(this)(); break; case 'HIDE': case 'FREEZE': case 'ACTIVE': case 'DELETE': realcommenter_admintools_switch_show(container_obj); parentComment = realcommenter_get_closest_comment(this); if (!parentComment) { return false; } commentIdMatches = parentComment.getAttribute('id'); commentIdMatches = commentIdMatches.match(/[0-9]+/); if (!commentIdMatches) { return false; } realcommenter_ajaxion.bind(this, { url: '/bitrix/admin/burlakastudio.realcommenter.talk_tree.php', onsuccess: realcommenter_admintools_ajax_to_expand, data: { request_type: action, comment_id: commentIdMatches.shift(), reverse: +this.hasAttribute('data-reverse') } })(); break; case 'UN_BAN': case 'SEND_TO_BAN': case 'INCREESE_WARNING': parentComment = realcommenter_get_closest_comment(this); if (!parentComment) { return false; } commentIdMatches = parentComment.getAttribute('id'); commentIdMatches = commentIdMatches.match(/[0-9]+/); if (!commentIdMatches) { return false; } realcommenter_ajaxion.bind(this, { url: '/bitrix/admin/burlakastudio.realcommenter.talk_tree.php', onsuccess: function (result) { if (result.ERROR && Object.keys(result.ERROR).length) { console.log('ERROR'); console.log(result); return; } /** * ...например, была попытка применить санкции к модератору */ if (!result.ACTION_RESULT) { realcommenter_admintools_switch_show(container_obj); return; } if (result.request && result.request.comment_id) { realcommenter_find_and_expand(result.request.comment_id); } }, data: { request_type: action, // Нужно его передать, потому что мы собираемся перечитать узел comment_id: commentIdMatches.shift() } })(); break; case 'APPROVE': parentComment = realcommenter_get_closest_comment(this); if (!parentComment) { return false; } commentIdMatches = parentComment.getAttribute('id'); commentIdMatches = commentIdMatches.match(/[0-9]+/); if (!commentIdMatches) { return false; } realcommenter_ajaxion.bind(this, { url: '/bitrix/admin/burlakastudio.realcommenter.talk_tree.php', onsuccess: function (result) { if (result.ERROR && Object.keys(result.ERROR).length) { console.log('ERROR'); console.log(result); return; } /** * ...например, была попытка применить санкции к модератору */ if (!result.ACTION_RESULT) { realcommenter_admintools_switch_show(container_obj); return; } if (result.request && result.request.comment_id) { realcommenter_find_and_expand(result.request.comment_id); } }, data: { request_type: action, // Нужно его передать, потому что мы собираемся перечитать узел comment_id: commentIdMatches.shift() } })(); break; case 'MORE_FROM': parentComment = realcommenter_get_closest_comment(this); if (!parentComment) { return false; } commentIdMatches = parentComment.getAttribute('id'); commentIdMatches = commentIdMatches.match(/[0-9]+/); if (!commentIdMatches) { return false; } realcommenter_ajaxion.bind(this, { url: '/bitrix/admin/burlakastudio.realcommenter.talk_tree.php', onsuccess: function (result) { if (result.ERROR && Object.keys(result.ERROR).length) { console.log('ERROR'); console.log(result); return; } if (!result.LIST) { return; } // this - del in admin tools, clicked by let parentComment = realcommenter_get_closest_comment(this); if (!parentComment) { return false; } let commentIdMatches = parentComment.getAttribute('id'); commentIdMatches = commentIdMatches.match(/[0-9]+/); if (!commentIdMatches) { return false; } realcommenter_admintools_switch_show(container_obj, false); let commentId = commentIdMatches.shift(); if (result.request.comment_id !== commentId) { return; } let bridge_obj = document.createElement('div'); bridge_obj.innerHTML = result.LIST; let readyObj = bridge_obj.children[0]; let noDoubleCss = readyObj.className; // Clear old footsteps let oldInfo = parentComment.querySelectorAll('.' + noDoubleCss.replace(/\s/, '. ')); oldInfo.forEach(old => { old.parentNode.removeChild(old); }); let answerContainer = parentComment.querySelector('article'); if (answerContainer) { answerContainer.parentNode.insertBefore(readyObj, answerContainer); } if (result.UPLOAD_ASSETS) { BX.load(result.UPLOAD_ASSETS, function (callback) { if (callback && window[callback]) { window[callback](); } }.bind(this, result.UPLOAD_CALLBACK)); } }.bind(this), data: { request_type: action, comment_id: commentIdMatches.shift() } })(); break; case 'REQUEST_INFO': parentComment = realcommenter_get_closest_comment(this); if (!parentComment) { return false; } commentIdMatches = parentComment.getAttribute('id'); commentIdMatches = commentIdMatches.match(/[0-9]+/); if (!commentIdMatches) { return false; } realcommenter_ajaxion.bind(this, { url: '/bitrix/admin/burlakastudio.realcommenter.talk_tree.php', data: { request_type: action, comment_id: commentIdMatches.shift() }, onsuccess: function (result) { if (result.ERROR && Object.keys(result.ERROR).length) { console.log('ERROR'); console.log(result); return; } if (!result.INFO) { return; } let processorFunc = realcommenter_deploy_more_info.bind(this, result, container_obj); if (result.UPLOAD_ASSETS) { BX.load(result.UPLOAD_ASSETS, processorFunc); } else { processorFunc(); } }.bind(this) })(); break; default: console.log(action); } } function realcommenter_deploy_more_info (result, container_obj) { // this - node in admin tools, clicked by let parentComment = realcommenter_get_closest_comment(this); if (!parentComment) { return false; } let commentIdMatches = parentComment.getAttribute('id'); commentIdMatches = commentIdMatches.match(/[0-9]+/); if (!commentIdMatches) { return false; } realcommenter_admintools_switch_show(container_obj, false); let commentId = commentIdMatches.shift(); if (result.request.comment_id !== commentId) { return; } let bridge_obj = document.createElement('div'); bridge_obj.innerHTML = result.INFO; let readyObj = bridge_obj.children[0]; let noDoubleCss = readyObj.className; // Clear old footsteps let oldInfo = parentComment.querySelectorAll('.' + noDoubleCss.replace(/\s/, '. ')); oldInfo.forEach(old => { old.parentNode.removeChild(old); }); let answerContainer = parentComment.querySelector('article'); if (answerContainer) { answerContainer.parentNode.insertBefore(readyObj, answerContainer); } if (result['UPLOAD_CALLBACK'] && window[result['UPLOAD_CALLBACK']]) { window[result['UPLOAD_CALLBACK']](); } } function realcommenter_admintools_ajax_to_expand (result) { if (typeof result['ERROR'] !== 'undefined' && Object.keys(result['ERROR']).length) { console.log('ERROR'); console.log(result); return; } if (result['ACTION_RESULT'] !== 'undefined' && result['ACTION_RESULT']) { if (!!typeof result['request']['comment_id'] && typeof result['request']['comment_id']) { if (result['request']['request_type'] === 'DELETE') { let comment_node = document.querySelector( realcommenter_get_selector('comment') + realcommenter_get_selector('comment_id') + result['request']['comment_id'] ); if (comment_node) { comment_node.parentNode.removeChild(comment_node); } } else { let any_child = document.querySelector( realcommenter_get_selector('comment') + realcommenter_get_selector('comment_id') + result['request']['comment_id'] + ' *:first-child' ); if (any_child) { realcommenter_expand_branch.bind(any_child)(); } } } } } // Показать / Скрыть function realcommenter_admintools_switch_show (container_obj, force_state) { // this - облачко с инструментами if (!~container_obj.className.indexOf('_show')) { /** * Собираемся показать облачко - нужно зарядить onclick на документ, чтобы скрывать его */ let _outclicker = realcommenter_admintools_outclicker.bind(container_obj); container_obj.outclicker = _outclicker; document.addEventListener('click', _outclicker); } else { /** * Собираемся скрыть облачко. * Если есть коллбек клика, отписываем document от него */ if (container_obj.outclicker) { document.removeEventListener('click', container_obj.outclicker); container_obj.outclicker = null; } } container_obj.classList.toggle('_show', force_state); } function realcommenter_admintools_outclicker (e) { for (let t = 0; t < e.path.length; t++) { if (e.path[t] === this) { e.stopPropagation(); return; } } /** * Закрываем облачко */ realcommenter_admintools_switch_show(this, false); }