From 1e83a252f13f6fc912d6b649860cfb327688e4b3 Mon Sep 17 00:00:00 2001 From: svfcode Date: Wed, 5 Feb 2025 09:32:43 +0300 Subject: [PATCH 1/3] Fix. Settings. Prevented browser notice on 2fa save. --- js/spbc-admin.min.js | 2 +- js/spbc-admin.min.js.map | 2 +- js/spbc-common.min.js.map | 2 +- js/spbc-cookie.min.js.map | 2 +- js/spbc-dashboard-widget.min.js.map | 2 +- js/spbc-modal.min.js.map | 2 +- js/spbc-scanner-plugin.min.js.map | 2 +- js/spbc-settings.min.js.map | 2 +- js/spbc-settings_tab--backups.min.js.map | 2 +- js/spbc-settings_tab--fswatcher.min.js.map | 2 +- js/spbc-settings_tab--scanner.min.js.map | 2 +- js/spbc-settings_tab--security_log.min.js.map | 2 +- js/spbc-settings_tab--settings_general.min.js.map | 2 +- js/spbc-settings_tab--summary.min.js.map | 2 +- js/spbc-settings_tab--traffic_control.min.js.map | 2 +- js/spbc-table.min.js.map | 2 +- js/spbc-upload.min.js.map | 2 +- js/src/spbc-admin.js | 6 +++++- 18 files changed, 22 insertions(+), 18 deletions(-) diff --git a/js/spbc-admin.min.js b/js/spbc-admin.min.js index 64c686881..e08bcec3e 100644 --- a/js/spbc-admin.min.js +++ b/js/spbc-admin.min.js @@ -1,2 +1,2 @@ -function spbcGetGoogleQrCode(){var e={};let t={};return e.security=spbcSettings.ajax_nonce,e.action="spbc_get_google_qr_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){t=e}}),t}function spbcCheckGoogleCode(){var e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_google_code",e.code=jQuery("#spbct-google-qr-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("#spbct-google-qr-code").dialog("close"),document.location.reload()):alert(e.data)}})}function spbcDisableG2fa(e){var t={};t.security=spbcSettings.ajax_nonce,t.action="spbc_disable_google_2fa",t.user_id=jQuery(e).data("user-id"),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:t,success:function(e){e.success?document.location.reload():alert(e.data)}})}function spbcCheckVulnerability(e,t="install"){var c={};c.security=spbcSettings.ajax_nonce,c.action="install"===t?"spbc_check_vulnerability_install":"spbc_check_vulnerability_list",c.list=e,jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:c,success:function(e){e.success?("install"===t&&spbcCheckVulnerabilityInstallRender(e.list,e.msg),"list"===t&&spbcCheckVulnerabilityListRender(e.list)):console.log(e)}})}function spbcCheckVulnerabilityListRender(e){let t,c;e.forEach(e=>{(c=document.createElement("div")).classList.add("notice","notice-error","error-message","spbc-vulnerable-notice"),c.innerHTML=e.msg,(t=document.querySelector(".themes .theme[data-slug="+e.slug+"]"))&&t.appendChild(c)})}function spbcCheckVulnerabilityInstallRender(e,t){let c,n=document.createElement("div");n.classList.add("notice"),n.innerHTML="

"+t+"

",e.forEach(e=>{(c=document.querySelector(".theme-id-container .theme-actions a[data-slug="+e+"]"))&&c.parentNode.parentNode.parentNode.appendChild(n)})}function spbcSummaryShowCDNCheckerTable(){event.preventDefault();var e=document.getElementById("spbc_stats_cdn_checker_table");void 0!==e&&("block"===e.style.display?e.style.display="none":e.style.display="block")}function spbcHandleBannersDismissing(){var e=jQuery("body");e.on("click",".spbct-notice-dismiss-link",function(e){jQuery(e.target).siblings(".notice-dismiss").click()}),e.on("click",".spbc-notice .notice-dismiss",function(n){var s,i,a=jQuery(n.target).parent(".notice").attr("id");if(a&&(spbcSendAJAXRequest({action:"spbc_dismiss_banner",banner_id:a},{}),"undefined"!=typeof spbcSettings)&&spbcSettings.hasOwnProperty("spbctNoticeDismissSuccess")){let e=spbcSettings.spbctNoticeDismissSuccess,t="",c="";if("string"==typeof e){try{e=JSON.parse(e)}catch(n){e=[]}for(var o of e)o.hasOwnProperty("bannerName")&&o.hasOwnProperty("postNoticeText")&&(s=o.bannerName,-1!==a.indexOf(s)&&(t=o.postNoticeText),o.hasOwnProperty("noticeLevel"))&&(c=o.noticeLevel)}""!==t&&(i='

'+t+"

",jQuery(n.target).parent(".notice").after(i),setTimeout(function(){jQuery("#spbct-notice-dismiss-success").fadeOut()},5e3))}})}function spbcHighlightCriticalFilesNotice(e=!1){var t=-1!==window.location.href.indexOf("spbc_tab=scanner&highlight_critical_files=1"),n=-1===window.location.href.indexOf("spbc_tab=scanner");if(e&&n)window.location.href="options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1";else if(t||e){let t=null;n=document.querySelectorAll("#notice_id_found_critical_files");if(0{null==t&&null!==e.closest("#spbc_tab-scanner")&&(t=e)}),null!==t&&(t.scrollIntoView({behavior:"smooth",block:"start"}),!t.hasOwnProperty("highlighted"))){let e=!1;setInterval(()=>{(e=!e)?(t.classList.remove("notice-warning"),t.classList.add("notice-error"),t.highlighted=!0):(t.classList.remove("notice-error"),t.classList.add("notice-warning"))},1e3)}let c=document.querySelector('h3[aria-controls="spbc_scan_accordion_tab_critical"]');if(null!==c)c.classList.contains("ui-accordion-header-active")||c.click();else{let e=setInterval(()=>{null!==(c=document.querySelector('h3[aria-controls="spbc_scan_accordion_tab_critical"]'))&&(c.classList.contains("ui-accordion-header-active")||c.click(),clearInterval(e))},150)}}}jQuery(document).ready(function(){if(-1"+e.data.code+"

"),jQuery("#spbct-google-qr-code input").val(""),jQuery("#spbct-google-qr-code").dialog({modal:!0,title:"Google authenticator activation",buttons:{Cancel:function(){jQuery(this).dialog("close")},Ok:function(){spbcCheckGoogleCode()}},draggable:!1,resizable:!1})):alert(spbcGetGoogleQrCode.data)}),jQuery(document).on("click","#spbc-g2fa-disable",function(e){e.preventDefault(),confirm("Are you sure?")&&spbcDisableG2fa(this)});function e(e,t,c){setTimeout(function(){null!==e&&(jQuery(".spbc-admin_bar--user_counter").html(e.count),e.count<=3?(jQuery("#wp-admin-bar-spbc_admin_bar__online_admins").show(),jQuery(".spbc-admin_bar--online_admins").html(e.users.join(", "))):jQuery("#wp-admin-bar-spbc_admin_bar__online_admins").hide()),spbcSendAJAXRequest(t,c)},15e3)}var t,c,n;1==+spbcSettings.admin_bar__admins_online_counter&&e(null,{action:"spbc_get_authorized_admins"},{callback:e}),spbcHandleBannersDismissing(),1==+spbcSettings.needToWhitelist&&spbcSendAJAXRequest({action:"spbc_private_list_add"},{callback:null}),0<+spbcSettings.critical&&((t=document.createElement("div")).className="spbc_ring-container",t.style.top="0px",t.style.right="70px",(n=document.createElement("div")).className="spbc_ringring",(c=document.createElement("div")).className="spbc_circle",t.appendChild(n),t.appendChild(c),n=document.querySelector("#menu-settings"))&&n.appendChild(t),jQuery(document).on("keyup","#spbc_key",function(e){e.preventDefault();e=jQuery("#spbc_key").val();/^[a-zA-Z0-9]+$/.test(e)&&8{(c=document.createElement("div")).classList.add("notice","notice-error","error-message","spbc-vulnerable-notice"),c.innerHTML=e.msg,(t=document.querySelector(".themes .theme[data-slug="+e.slug+"]"))&&t.appendChild(c)})}function spbcCheckVulnerabilityInstallRender(e,t){let c,n=document.createElement("div");n.classList.add("notice"),n.innerHTML="

"+t+"

",e.forEach(e=>{(c=document.querySelector(".theme-id-container .theme-actions a[data-slug="+e+"]"))&&c.parentNode.parentNode.parentNode.appendChild(n)})}function spbcSummaryShowCDNCheckerTable(){event.preventDefault();var e=document.getElementById("spbc_stats_cdn_checker_table");void 0!==e&&("block"===e.style.display?e.style.display="none":e.style.display="block")}function spbcHandleBannersDismissing(){var e=jQuery("body");e.on("click",".spbct-notice-dismiss-link",function(e){jQuery(e.target).siblings(".notice-dismiss").click()}),e.on("click",".spbc-notice .notice-dismiss",function(n){var s,i,a=jQuery(n.target).parent(".notice").attr("id");if(a&&(spbcSendAJAXRequest({action:"spbc_dismiss_banner",banner_id:a},{}),"undefined"!=typeof spbcSettings)&&spbcSettings.hasOwnProperty("spbctNoticeDismissSuccess")){let e=spbcSettings.spbctNoticeDismissSuccess,t="",c="";if("string"==typeof e){try{e=JSON.parse(e)}catch(n){e=[]}for(var o of e)o.hasOwnProperty("bannerName")&&o.hasOwnProperty("postNoticeText")&&(s=o.bannerName,-1!==a.indexOf(s)&&(t=o.postNoticeText),o.hasOwnProperty("noticeLevel"))&&(c=o.noticeLevel)}""!==t&&(i='

'+t+"

",jQuery(n.target).parent(".notice").after(i),setTimeout(function(){jQuery("#spbct-notice-dismiss-success").fadeOut()},5e3))}})}function spbcHighlightCriticalFilesNotice(e=!1){var t=-1!==window.location.href.indexOf("spbc_tab=scanner&highlight_critical_files=1"),n=-1===window.location.href.indexOf("spbc_tab=scanner");if(e&&n)window.location.href="options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1";else if(t||e){let t=null;n=document.querySelectorAll("#notice_id_found_critical_files");if(0{null==t&&null!==e.closest("#spbc_tab-scanner")&&(t=e)}),null!==t&&(t.scrollIntoView({behavior:"smooth",block:"start"}),!t.hasOwnProperty("highlighted"))){let e=!1;setInterval(()=>{(e=!e)?(t.classList.remove("notice-warning"),t.classList.add("notice-error"),t.highlighted=!0):(t.classList.remove("notice-error"),t.classList.add("notice-warning"))},1e3)}let c=document.querySelector('h3[aria-controls="spbc_scan_accordion_tab_critical"]');if(null!==c)c.classList.contains("ui-accordion-header-active")||c.click();else{let e=setInterval(()=>{null!==(c=document.querySelector('h3[aria-controls="spbc_scan_accordion_tab_critical"]'))&&(c.classList.contains("ui-accordion-header-active")||c.click(),clearInterval(e))},150)}}}jQuery(document).ready(function(){if(-1"+e.data.code+"

"),jQuery("#spbct-google-qr-code input").val(""),jQuery("#spbct-google-qr-code").dialog({modal:!0,title:"Google authenticator activation",buttons:{Cancel:function(){jQuery(this).dialog("close")},Ok:function(){spbcCheckGoogleCode()}},draggable:!1,resizable:!1})):alert(spbcGetGoogleQrCode.data)}),jQuery(document).on("click","#spbc-g2fa-disable",function(e){e.preventDefault(),confirm("Are you sure?")&&spbcDisableG2fa(this)});function e(e,t,c){setTimeout(function(){null!==e&&(jQuery(".spbc-admin_bar--user_counter").html(e.count),e.count<=3?(jQuery("#wp-admin-bar-spbc_admin_bar__online_admins").show(),jQuery(".spbc-admin_bar--online_admins").html(e.users.join(", "))):jQuery("#wp-admin-bar-spbc_admin_bar__online_admins").hide()),spbcSendAJAXRequest(t,c)},15e3)}var t,c,n;1==+spbcSettings.admin_bar__admins_online_counter&&e(null,{action:"spbc_get_authorized_admins"},{callback:e}),spbcHandleBannersDismissing(),1==+spbcSettings.needToWhitelist&&spbcSendAJAXRequest({action:"spbc_private_list_add"},{callback:null}),0<+spbcSettings.critical&&((t=document.createElement("div")).className="spbc_ring-container",t.style.top="0px",t.style.right="70px",(n=document.createElement("div")).className="spbc_ringring",(c=document.createElement("div")).className="spbc_circle",t.appendChild(n),t.appendChild(c),n=document.querySelector("#menu-settings"))&&n.appendChild(t),jQuery(document).on("keyup","#spbc_key",function(e){e.preventDefault();e=jQuery("#spbc_key").val();/^[a-zA-Z0-9]+$/.test(e)&&8 {\n badge = document.createElement('div');\n badge.classList.add('notice', 'notice-error', 'error-message', 'spbc-vulnerable-notice');\n badge.innerHTML = el.msg;\n card = document.querySelector('.themes .theme[data-slug=' + el.slug + ']');\n if (card) {\n card.appendChild(badge);\n }\n });\n}\n\n/**\n * Check Vulnerability Install Render\n *\n * @param {object} list\n * @param {string} msg\n */\nfunction spbcCheckVulnerabilityInstallRender(list, msg) {\n let card;\n\n let badge = document.createElement('div');\n badge.classList.add('notice');\n badge.innerHTML = '

' + msg + '

';\n\n list.forEach((el) => {\n card = document.querySelector('.theme-id-container .theme-actions a[data-slug=' + el + ']');\n if (card) {\n card.parentNode.parentNode.parentNode.appendChild(badge);\n }\n });\n}\n\njQuery(document).ready(function() {\n if (window.location.href.indexOf('themes.php') > -1 && spbcSettings.vulnerabilityShowList) {\n let slugsState = [];\n let slugs = [];\n let slugsNodes;\n let version;\n\n setInterval(function() {\n slugsNodes = document.querySelectorAll('.themes .theme[data-slug]');\n\n if (slugsNodes.length > 0) {\n slugs = [];\n slugsNodes.forEach(function(el) {\n version = el.querySelector('img').src ?\n el.querySelector('img').src.match(/ver=([\\d\\.]+)/)[1] :\n null;\n slugs.push({'slug': el.dataset.slug, 'version': version});\n });\n }\n\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\n slugsState = slugs;\n spbcCheckVulnerability(slugs, 'list');\n }\n }, 500);\n }\n\n if (window.location.href.indexOf('theme-install.php') > -1 && spbcSettings.vulnerabilityShowInstall) {\n let slugsState = [];\n let slugs = [];\n let slugsNodes;\n\n setInterval(function() {\n slugsNodes = document.querySelectorAll('.theme-id-container .theme-actions a[data-slug]');\n\n if (slugsNodes.length > 0) {\n slugs = [];\n slugsNodes.forEach(function(el) {\n slugs.push(el.dataset.slug);\n });\n }\n\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\n slugsState = slugs;\n spbcCheckVulnerability(slugs);\n }\n }, 500);\n }\n\n // Auto update banner close handler\n jQuery('.spbc_update_notice').on('click', 'button', function() {\n spbcSetCookie('spbc_update_banner_closed', 1, 86400 * 30);\n });\n\n // Enable G2FA from user profile page\n jQuery(document).on('click', '#spbc-g2fa-enable', function(e) {\n e.preventDefault();\n let spbcGoogleQrCode = spbcGetGoogleQrCode();\n\n if ( spbcGoogleQrCode.success ) {\n let qrCodeDiv = jQuery('#spbct-google-qr-code-img');\n qrCodeDiv.html(spbcGoogleQrCode.data.img + '

' + spbcGoogleQrCode.data.code + '

');\n jQuery('#spbct-google-qr-code input').val('');\n jQuery('#spbct-google-qr-code').dialog({\n modal: true,\n title: 'Google authenticator activation',\n buttons: {\n Cancel: function() {\n jQuery( this ).dialog( 'close' );\n },\n Ok: function() {\n spbcCheckGoogleCode();\n },\n },\n draggable: false,\n resizable: false,\n });\n } else {\n alert(spbcGetGoogleQrCode.data);\n }\n });\n\n // Disable G2FA from user profile page\n jQuery(document).on('click', '#spbc-g2fa-disable', function(e) {\n e.preventDefault();\n if ( confirm( 'Are you sure?' ) ) {\n spbcDisableG2fa( this );\n }\n });\n\n let refreshUserOnlineCounter = function( result, data, params ) {\n setTimeout(function() {\n if ( result !== null ) {\n jQuery('.spbc-admin_bar--user_counter').html(result.count);\n if ( result.count <= 3 ) {\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').show();\n jQuery('.spbc-admin_bar--online_admins').html(result.users.join(', '));\n } else {\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').hide();\n }\n }\n spbcSendAJAXRequest( data, params );\n }, 15000 );\n };\n\n if ( +spbcSettings.admin_bar__admins_online_counter === 1 ) {\n refreshUserOnlineCounter(null, {action: 'spbc_get_authorized_admins'}, {callback: refreshUserOnlineCounter});\n }\n\n // Dismiss admin banner\n spbcHandleBannersDismissing();\n\n if (+spbcSettings.needToWhitelist === 1) {\n spbcSendAJAXRequest( {'action': 'spbc_private_list_add'}, {'callback': null} );\n }\n\n if ( +spbcSettings.critical > 0) {\n let ringContainer = document.createElement('div');\n ringContainer.className = 'spbc_ring-container';\n ringContainer.style.top = '0px';\n ringContainer.style.right = '70px';\n let ringRing = document.createElement('div');\n ringRing.className = 'spbc_ringring';\n let circle = document.createElement('div');\n circle.className = 'spbc_circle';\n\n ringContainer.appendChild(ringRing);\n ringContainer.appendChild(circle);\n\n let settings = document.querySelector('#menu-settings');\n if (settings) {\n settings.appendChild(ringContainer);\n }\n }\n\n jQuery(document).on('keyup', '#spbc_key', function(e) {\n e.preventDefault();\n let value = jQuery('#spbc_key').val();\n if (/^[a-zA-Z0-9]+$/.test(value) && value.length > 8) {\n jQuery('#spbc-key-manually-link').hide();\n jQuery('#spbc_setting_get_key_auto').hide();\n jQuery('#spbc_get_key_or_text').hide();\n } else {\n jQuery('#spbc-key-manually-link').show();\n jQuery('#spbc_setting_get_key_auto').show();\n jQuery('#spbc_get_key_or_text').show();\n }\n });\n});\n\n/**\n * Summary Show CDN Checker Table\n */\nfunction spbcSummaryShowCDNCheckerTable() {/* eslint-disable-line no-unused-vars */\n event.preventDefault();\n let table = document.getElementById('spbc_stats_cdn_checker_table');\n if (typeof (table) !== 'undefined') {\n if (table.style.display === 'block') {\n table.style.display = 'none';\n } else {\n table.style.display = 'block';\n }\n }\n}\n\n/**\n * Dismiss function for banners.\n */\nfunction spbcHandleBannersDismissing() {\n let body = jQuery('body');\n body.on('click', '.spbct-notice-dismiss-link', function(e) {\n jQuery(e.target).siblings('.notice-dismiss').click();\n });\n body.on('click', '.spbc-notice .notice-dismiss', function(e) {\n const bannerId = jQuery(e.target).parent('.notice').attr('id');\n if (bannerId) {\n // call ajax to dismiss banner anyway\n // todo There is no case when further API call for notice_review is unsuccessful,\n // todo but it should be handled in the future\n spbcSendAJAXRequest({'action': 'spbc_dismiss_banner', 'banner_id': bannerId}, {});\n\n // check if there is a postNoticeText to show after dismissing the notice\n if (\n typeof spbcSettings !== 'undefined' &&\n spbcSettings.hasOwnProperty('spbctNoticeDismissSuccess')\n ) {\n // get afterDismissingNotices from localized settings\n let afterDismissingNotices = spbcSettings.spbctNoticeDismissSuccess;\n // default postNoticeText\n let postNoticeText = '';\n // default notice level\n let noticeLevel = '';\n if (typeof afterDismissingNotices === 'string') {\n // try to parse JSON\n try {\n afterDismissingNotices = JSON.parse(afterDismissingNotices);\n } catch (e) {\n afterDismissingNotices = [];\n }\n // get postNoticeText and noticeLevel according to bannerName\n for (const afterDismissingNotice of afterDismissingNotices) {\n if (\n afterDismissingNotice.hasOwnProperty('bannerName') &&\n afterDismissingNotice.hasOwnProperty('postNoticeText')\n ) {\n let bannerName = afterDismissingNotice.bannerName;\n // if banner name is in the bannerId, show the postNoticeText\n if (bannerId.indexOf(bannerName) !== -1) {\n postNoticeText = afterDismissingNotice.postNoticeText;\n }\n // if noticeLevel is set, use it\n if (afterDismissingNotice.hasOwnProperty('noticeLevel')) {\n noticeLevel = afterDismissingNotice.noticeLevel;\n }\n }\n }\n }\n\n // if postNoticeText is set, show it\n if (postNoticeText !== '') {\n const noticeClassList = 'notice ' + noticeLevel + ' is-dismissible';\n let elem = '
' +\n '

' +\n postNoticeText +\n '

';\n jQuery(e.target)\n .parent('.notice')\n .after(elem);\n setTimeout(function() {\n jQuery('#spbct-notice-dismiss-success').fadeOut();\n }, 5000);\n }\n }\n }\n });\n}\n\n// eslint-disable-next-line no-unused-vars\n/**\n * Highlights the critical files notice if the URL contains specific parameters.\n *\n * @param {boolean} [isBannerCall=false] - Indicates if the function is called from a banner.\n *\n */\nfunction spbcHighlightCriticalFilesNotice(isBannerCall = false) { // eslint-disable-line no-unused-vars\n // Check if the URL contains the parameters to highlight the notice\n let needToHighlightNotice = window.location.href.indexOf('spbc_tab=scanner&highlight_critical_files=1') !== -1;\n let redirectConditionIsOK = window.location.href.indexOf('spbc_tab=scanner') === -1;\n\n // Redirect to the scanner tab if called from a banner and the condition is met\n if (isBannerCall && redirectConditionIsOK) {\n window.location.href = 'options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1';\n return;\n }\n\n // If the notice needs to be highlighted\n if (needToHighlightNotice || isBannerCall) {\n let criticalFilesNotice = null;\n let criticalFilesNotices = document.querySelectorAll('#notice_id_found_critical_files');\n\n // Find the critical files notice within the scanner tab\n if (criticalFilesNotices.length > 0) {\n criticalFilesNotices.forEach((notice) => {\n if (criticalFilesNotice == null) {\n if (notice.closest('#spbc_tab-scanner') !== null) {\n criticalFilesNotice = notice;\n }\n }\n });\n }\n // Scroll to the notice and highlight it with a blinking effect\n if (criticalFilesNotice !== null) {\n criticalFilesNotice.scrollIntoView({behavior: 'smooth', block: 'start'});\n if (!criticalFilesNotice.hasOwnProperty('highlighted')) {\n let switcher = false;\n setInterval(() => {\n switcher = !switcher;\n if (switcher) {\n criticalFilesNotice.classList.remove('notice-warning');\n criticalFilesNotice.classList.add('notice-error');\n criticalFilesNotice.highlighted = true;\n } else {\n criticalFilesNotice.classList.remove('notice-error');\n criticalFilesNotice.classList.add('notice-warning');\n }\n }, 1000);\n }\n }\n\n // Expand the critical files table if it exits and is collapsed\n let criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\n if (criticalFileTable !== null) {\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\n criticalFileTable.click();\n }\n } else {\n // Check periodically if the table is loaded and expand it\n const tabLoadingCheckInterval = setInterval(() => {\n criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\n if (criticalFileTable !== null) {\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\n criticalFileTable.click();\n }\n clearInterval(tabLoadingCheckInterval);\n }\n }, 150);\n }\n }\n}\n"],"names":["spbcGetGoogleQrCode","let","data","res","security","spbcSettings","ajax_nonce","action","jQuery","ajax","type","async","url","ajaxurl","success","result","spbcCheckGoogleCode","code","val","dialog","document","location","reload","alert","spbcDisableG2fa","element","user_id","spbcCheckVulnerability","list","spbcCheckVulnerabilityInstallRender","msg","spbcCheckVulnerabilityListRender","console","log","card","badge","forEach","createElement","classList","add","innerHTML","el","querySelector","slug","appendChild","parentNode","spbcSummaryShowCDNCheckerTable","event","preventDefault","table","getElementById","style","display","spbcHandleBannersDismissing","body","on","e","target","siblings","click","bannerName","elem","bannerId","parent","attr","spbcSendAJAXRequest","banner_id","hasOwnProperty","afterDismissingNotices","spbctNoticeDismissSuccess","postNoticeText","noticeLevel","JSON","parse","afterDismissingNotice","indexOf","after","setTimeout","fadeOut","spbcHighlightCriticalFilesNotice","isBannerCall","needToHighlightNotice","window","href","redirectConditionIsOK","criticalFilesNotice","criticalFilesNotices","querySelectorAll","length","notice","closest","scrollIntoView","behavior","block","switcher","setInterval","remove","highlighted","criticalFileTable","contains","tabLoadingCheckInterval","clearInterval","ready","vulnerabilityShowList","slugsState","slugs","slugsNodes","version","src","match","push","dataset","stringify","vulnerabilityShowInstall","spbcSetCookie","spbcGoogleQrCode","html","img","modal","title","buttons","Cancel","this","Ok","draggable","resizable","confirm","refreshUserOnlineCounter","params","count","show","users","join","hide","ringContainer","circle","settings","admin_bar__admins_online_counter","callback","needToWhitelist","critical","className","top","right","ringRing","value","test"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-admin.min.js","sources":["spbc-admin.js"],"sourcesContent":["/**\r\n * Get Google Qr Code\r\n *\r\n * @return {object}\r\n */\r\nfunction spbcGetGoogleQrCode() {\r\n let data = {};\r\n let res = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_get_google_qr_code';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n res = result;\r\n },\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Check Google Code\r\n */\r\nfunction spbcCheckGoogleCode() {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_check_google_code';\r\n data.code = jQuery('#spbct-google-qr-code input').val();\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n jQuery('#spbct-google-qr-code').dialog( 'close' );\r\n const submitButton = jQuery('form#your-profile input#submit');\r\n if (submitButton.length > 0) {\r\n submitButton.click();\r\n }\r\n\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Disable Google 2fa\r\n *\r\n * @param {string} element\r\n */\r\nfunction spbcDisableG2fa( element ) {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_disable_google_2fa';\r\n data.user_id = jQuery(element).data('user-id');\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n document.location.reload();\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability\r\n *\r\n * @param {array} list\r\n * @param {string} type\r\n */\r\nfunction spbcCheckVulnerability(list, type = 'install') {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = type === 'install' ? 'spbc_check_vulnerability_install' : 'spbc_check_vulnerability_list';\r\n data.list = list;\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n if (type === 'install') {\r\n spbcCheckVulnerabilityInstallRender(result.list, result.msg);\r\n }\r\n if (type === 'list') {\r\n spbcCheckVulnerabilityListRender(result.list);\r\n }\r\n } else {\r\n console.log(result);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability List Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityListRender(list) {\r\n let card;\r\n let badge;\r\n\r\n list.forEach((el) => {\r\n badge = document.createElement('div');\r\n badge.classList.add('notice', 'notice-error', 'error-message', 'spbc-vulnerable-notice');\r\n badge.innerHTML = el.msg;\r\n card = document.querySelector('.themes .theme[data-slug=' + el.slug + ']');\r\n if (card) {\r\n card.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability Install Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityInstallRender(list, msg) {\r\n let card;\r\n\r\n let badge = document.createElement('div');\r\n badge.classList.add('notice');\r\n badge.innerHTML = '

' + msg + '

';\r\n\r\n list.forEach((el) => {\r\n card = document.querySelector('.theme-id-container .theme-actions a[data-slug=' + el + ']');\r\n if (card) {\r\n card.parentNode.parentNode.parentNode.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n if (window.location.href.indexOf('themes.php') > -1 && spbcSettings.vulnerabilityShowList) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n let version;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.themes .theme[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n version = el.querySelector('img').src ?\r\n el.querySelector('img').src.match(/ver=([\\d\\.]+)/)[1] :\r\n null;\r\n slugs.push({'slug': el.dataset.slug, 'version': version});\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs, 'list');\r\n }\r\n }, 500);\r\n }\r\n\r\n if (window.location.href.indexOf('theme-install.php') > -1 && spbcSettings.vulnerabilityShowInstall) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.theme-id-container .theme-actions a[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n slugs.push(el.dataset.slug);\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs);\r\n }\r\n }, 500);\r\n }\r\n\r\n // Auto update banner close handler\r\n jQuery('.spbc_update_notice').on('click', 'button', function() {\r\n spbcSetCookie('spbc_update_banner_closed', 1, 86400 * 30);\r\n });\r\n\r\n // Enable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-enable', function(e) {\r\n e.preventDefault();\r\n let spbcGoogleQrCode = spbcGetGoogleQrCode();\r\n\r\n if ( spbcGoogleQrCode.success ) {\r\n let qrCodeDiv = jQuery('#spbct-google-qr-code-img');\r\n qrCodeDiv.html(spbcGoogleQrCode.data.img + '

' + spbcGoogleQrCode.data.code + '

');\r\n jQuery('#spbct-google-qr-code input').val('');\r\n jQuery('#spbct-google-qr-code').dialog({\r\n modal: true,\r\n title: 'Google authenticator activation',\r\n buttons: {\r\n Cancel: function() {\r\n jQuery( this ).dialog( 'close' );\r\n },\r\n Ok: function() {\r\n spbcCheckGoogleCode();\r\n },\r\n },\r\n draggable: false,\r\n resizable: false,\r\n });\r\n } else {\r\n alert(spbcGetGoogleQrCode.data);\r\n }\r\n });\r\n\r\n // Disable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-disable', function(e) {\r\n e.preventDefault();\r\n if ( confirm( 'Are you sure?' ) ) {\r\n spbcDisableG2fa( this );\r\n }\r\n });\r\n\r\n let refreshUserOnlineCounter = function( result, data, params ) {\r\n setTimeout(function() {\r\n if ( result !== null ) {\r\n jQuery('.spbc-admin_bar--user_counter').html(result.count);\r\n if ( result.count <= 3 ) {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').show();\r\n jQuery('.spbc-admin_bar--online_admins').html(result.users.join(', '));\r\n } else {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').hide();\r\n }\r\n }\r\n spbcSendAJAXRequest( data, params );\r\n }, 15000 );\r\n };\r\n\r\n if ( +spbcSettings.admin_bar__admins_online_counter === 1 ) {\r\n refreshUserOnlineCounter(null, {action: 'spbc_get_authorized_admins'}, {callback: refreshUserOnlineCounter});\r\n }\r\n\r\n // Dismiss admin banner\r\n spbcHandleBannersDismissing();\r\n\r\n if (+spbcSettings.needToWhitelist === 1) {\r\n spbcSendAJAXRequest( {'action': 'spbc_private_list_add'}, {'callback': null} );\r\n }\r\n\r\n if ( +spbcSettings.critical > 0) {\r\n let ringContainer = document.createElement('div');\r\n ringContainer.className = 'spbc_ring-container';\r\n ringContainer.style.top = '0px';\r\n ringContainer.style.right = '70px';\r\n let ringRing = document.createElement('div');\r\n ringRing.className = 'spbc_ringring';\r\n let circle = document.createElement('div');\r\n circle.className = 'spbc_circle';\r\n\r\n ringContainer.appendChild(ringRing);\r\n ringContainer.appendChild(circle);\r\n\r\n let settings = document.querySelector('#menu-settings');\r\n if (settings) {\r\n settings.appendChild(ringContainer);\r\n }\r\n }\r\n\r\n jQuery(document).on('keyup', '#spbc_key', function(e) {\r\n e.preventDefault();\r\n let value = jQuery('#spbc_key').val();\r\n if (/^[a-zA-Z0-9]+$/.test(value) && value.length > 8) {\r\n jQuery('#spbc-key-manually-link').hide();\r\n jQuery('#spbc_setting_get_key_auto').hide();\r\n jQuery('#spbc_get_key_or_text').hide();\r\n } else {\r\n jQuery('#spbc-key-manually-link').show();\r\n jQuery('#spbc_setting_get_key_auto').show();\r\n jQuery('#spbc_get_key_or_text').show();\r\n }\r\n });\r\n});\r\n\r\n/**\r\n * Summary Show CDN Checker Table\r\n */\r\nfunction spbcSummaryShowCDNCheckerTable() {/* eslint-disable-line no-unused-vars */\r\n event.preventDefault();\r\n let table = document.getElementById('spbc_stats_cdn_checker_table');\r\n if (typeof (table) !== 'undefined') {\r\n if (table.style.display === 'block') {\r\n table.style.display = 'none';\r\n } else {\r\n table.style.display = 'block';\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Dismiss function for banners.\r\n */\r\nfunction spbcHandleBannersDismissing() {\r\n let body = jQuery('body');\r\n body.on('click', '.spbct-notice-dismiss-link', function(e) {\r\n jQuery(e.target).siblings('.notice-dismiss').click();\r\n });\r\n body.on('click', '.spbc-notice .notice-dismiss', function(e) {\r\n const bannerId = jQuery(e.target).parent('.notice').attr('id');\r\n if (bannerId) {\r\n // call ajax to dismiss banner anyway\r\n // todo There is no case when further API call for notice_review is unsuccessful,\r\n // todo but it should be handled in the future\r\n spbcSendAJAXRequest({'action': 'spbc_dismiss_banner', 'banner_id': bannerId}, {});\r\n\r\n // check if there is a postNoticeText to show after dismissing the notice\r\n if (\r\n typeof spbcSettings !== 'undefined' &&\r\n spbcSettings.hasOwnProperty('spbctNoticeDismissSuccess')\r\n ) {\r\n // get afterDismissingNotices from localized settings\r\n let afterDismissingNotices = spbcSettings.spbctNoticeDismissSuccess;\r\n // default postNoticeText\r\n let postNoticeText = '';\r\n // default notice level\r\n let noticeLevel = '';\r\n if (typeof afterDismissingNotices === 'string') {\r\n // try to parse JSON\r\n try {\r\n afterDismissingNotices = JSON.parse(afterDismissingNotices);\r\n } catch (e) {\r\n afterDismissingNotices = [];\r\n }\r\n // get postNoticeText and noticeLevel according to bannerName\r\n for (const afterDismissingNotice of afterDismissingNotices) {\r\n if (\r\n afterDismissingNotice.hasOwnProperty('bannerName') &&\r\n afterDismissingNotice.hasOwnProperty('postNoticeText')\r\n ) {\r\n let bannerName = afterDismissingNotice.bannerName;\r\n // if banner name is in the bannerId, show the postNoticeText\r\n if (bannerId.indexOf(bannerName) !== -1) {\r\n postNoticeText = afterDismissingNotice.postNoticeText;\r\n }\r\n // if noticeLevel is set, use it\r\n if (afterDismissingNotice.hasOwnProperty('noticeLevel')) {\r\n noticeLevel = afterDismissingNotice.noticeLevel;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // if postNoticeText is set, show it\r\n if (postNoticeText !== '') {\r\n const noticeClassList = 'notice ' + noticeLevel + ' is-dismissible';\r\n let elem = '
' +\r\n '

' +\r\n postNoticeText +\r\n '

';\r\n jQuery(e.target)\r\n .parent('.notice')\r\n .after(elem);\r\n setTimeout(function() {\r\n jQuery('#spbct-notice-dismiss-success').fadeOut();\r\n }, 5000);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\n/**\r\n * Highlights the critical files notice if the URL contains specific parameters.\r\n *\r\n * @param {boolean} [isBannerCall=false] - Indicates if the function is called from a banner.\r\n *\r\n */\r\nfunction spbcHighlightCriticalFilesNotice(isBannerCall = false) { // eslint-disable-line no-unused-vars\r\n // Check if the URL contains the parameters to highlight the notice\r\n let needToHighlightNotice = window.location.href.indexOf('spbc_tab=scanner&highlight_critical_files=1') !== -1;\r\n let redirectConditionIsOK = window.location.href.indexOf('spbc_tab=scanner') === -1;\r\n\r\n // Redirect to the scanner tab if called from a banner and the condition is met\r\n if (isBannerCall && redirectConditionIsOK) {\r\n window.location.href = 'options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1';\r\n return;\r\n }\r\n\r\n // If the notice needs to be highlighted\r\n if (needToHighlightNotice || isBannerCall) {\r\n let criticalFilesNotice = null;\r\n let criticalFilesNotices = document.querySelectorAll('#notice_id_found_critical_files');\r\n\r\n // Find the critical files notice within the scanner tab\r\n if (criticalFilesNotices.length > 0) {\r\n criticalFilesNotices.forEach((notice) => {\r\n if (criticalFilesNotice == null) {\r\n if (notice.closest('#spbc_tab-scanner') !== null) {\r\n criticalFilesNotice = notice;\r\n }\r\n }\r\n });\r\n }\r\n // Scroll to the notice and highlight it with a blinking effect\r\n if (criticalFilesNotice !== null) {\r\n criticalFilesNotice.scrollIntoView({behavior: 'smooth', block: 'start'});\r\n if (!criticalFilesNotice.hasOwnProperty('highlighted')) {\r\n let switcher = false;\r\n setInterval(() => {\r\n switcher = !switcher;\r\n if (switcher) {\r\n criticalFilesNotice.classList.remove('notice-warning');\r\n criticalFilesNotice.classList.add('notice-error');\r\n criticalFilesNotice.highlighted = true;\r\n } else {\r\n criticalFilesNotice.classList.remove('notice-error');\r\n criticalFilesNotice.classList.add('notice-warning');\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n // Expand the critical files table if it exits and is collapsed\r\n let criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n } else {\r\n // Check periodically if the table is loaded and expand it\r\n const tabLoadingCheckInterval = setInterval(() => {\r\n criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n clearInterval(tabLoadingCheckInterval);\r\n }\r\n }, 150);\r\n }\r\n }\r\n}\r\n"],"names":["spbcGetGoogleQrCode","let","data","res","security","spbcSettings","ajax_nonce","action","jQuery","ajax","type","async","url","ajaxurl","success","result","spbcCheckGoogleCode","code","val","submitButton","dialog","length","click","alert","spbcDisableG2fa","element","user_id","document","location","reload","spbcCheckVulnerability","list","spbcCheckVulnerabilityInstallRender","msg","spbcCheckVulnerabilityListRender","console","log","card","badge","forEach","createElement","classList","add","innerHTML","el","querySelector","slug","appendChild","parentNode","spbcSummaryShowCDNCheckerTable","event","preventDefault","table","getElementById","style","display","spbcHandleBannersDismissing","body","on","e","target","siblings","bannerName","elem","bannerId","parent","attr","spbcSendAJAXRequest","banner_id","hasOwnProperty","afterDismissingNotices","spbctNoticeDismissSuccess","postNoticeText","noticeLevel","JSON","parse","afterDismissingNotice","indexOf","after","setTimeout","fadeOut","spbcHighlightCriticalFilesNotice","isBannerCall","needToHighlightNotice","window","href","redirectConditionIsOK","criticalFilesNotice","criticalFilesNotices","querySelectorAll","notice","closest","scrollIntoView","behavior","block","switcher","setInterval","remove","highlighted","criticalFileTable","contains","tabLoadingCheckInterval","clearInterval","ready","vulnerabilityShowList","slugsState","slugs","slugsNodes","version","src","match","push","dataset","stringify","vulnerabilityShowInstall","spbcSetCookie","spbcGoogleQrCode","html","img","modal","title","buttons","Cancel","this","Ok","draggable","resizable","confirm","refreshUserOnlineCounter","params","count","show","users","join","hide","ringContainer","circle","settings","admin_bar__admins_online_counter","callback","needToWhitelist","critical","className","top","right","ringRing","value","test"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-common.min.js.map b/js/spbc-common.min.js.map index aecc7a7e3..c208bcbcd 100644 --- a/js/spbc-common.min.js.map +++ b/js/spbc-common.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-common.min.js","sources":["spbc-common.js"],"sourcesContent":["/**\n * Timestamp\n *\n * @return {number}\n */\nfunction spbcTimestamp() {/* eslint-disable-line no-unused-vars */\n return Math.floor(+new Date() / 1000);\n}\n\n/**\n * Hightlights element\n *\n * @param {number|string} id\n * @param {number} times\n */\nfunction spbcHighlightElement(id, times) {/* eslint-disable-line no-unused-vars */\n times = times-1 || 0;\n jQuery('html, body').animate({scrollTop: jQuery(jQuery('#'+id)).offset().top - 100}, 'slow');\n jQuery('#'+id).addClass('spbc_highlighted');\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 1.0)'}, 400, 'linear', function() {\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 0.0)'}, 400, 'linear', function() {\n if (times>0) {\n spbcHighlightElement(id, times);\n } else {\n jQuery('#'+id).removeClass('spbc_highlighted');\n }\n });\n });\n}\n\n/**\n * Send AJAX Request\n *\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcSendAJAXRequest(data, params, obj) {/* eslint-disable-line no-unused-vars */\n let dataType = params.notJson ? 'text' : 'json';\n\n // Default params\n let button = params.button || null;\n let spinner = params.spinner || null;\n let progressbar = params.progressbar || null;\n let callback = params.callback || null;\n let notJson = params.notJson || null;\n let timeout = params.timeout || 15000;\n obj = obj || null;\n let context = params.context || this;\n\n // Button and spinner\n if (button) {\n button.setAttribute('disabled', 'disabled'); button.style.cursor = 'not-allowed';\n }\n if (spinner) {\n if (Array.isArray(spinner)) {\n spinner.forEach(function(el) {\n jQuery(el).css('display', 'inline');\n });\n } else {\n jQuery(spinner).css('display', 'inline');\n }\n }\n\n // Adding security code\n data.security = spbcSettings.ajax_nonce;\n data.no_cache = Math.random();\n\n // Using passed successCallback() or default\n let success = params.success || function(result) {\n if (button) {\n button.removeAttribute('disabled');\n button.style.cursor = 'pointer';\n }\n\n if (spinner) {\n if (Array.isArray(spinner)) {\n spinner.forEach(function(el) {\n jQuery(el).css('display', 'none');\n });\n } else {\n jQuery(spinner).css('display', 'none');\n }\n }\n\n if (!notJson && typeof result !== 'object') {\n result = JSON.parse(result);\n }\n\n if (result.error) {\n setTimeout(function() {\n if (progressbar) progressbar.fadeOut('slow');\n }, 1000);\n let errorComment = typeof result.error_comment !== 'undefined' ? result.error_comment : null;\n const hideSupportLink = typeof result.hide_support_link !== 'undefined';\n errorOutput( result.error, errorComment, hideSupportLink );\n jQuery('.tbl-preloader--in_button').css('display', 'none');\n } else if (callback) {\n callback(result, data, params, obj);\n }\n };\n\n // Using passed successCallback() or default\n let error = params.error || function(jqXHR, textStatus, errorThrown) {\n if (button) {\n button.removeAttribute('disabled');\n button.style.cursor = 'pointer';\n }\n if (spinner) {\n if (Array.isArray(spinner)) {\n spinner.forEach(function(el) {\n jQuery(el).css('display', 'none');\n });\n } else {\n jQuery(spinner).css('display', 'none');\n }\n }\n\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\n console.log( textStatus );\n console.log( errorThrown );\n console.log( jqXHR );\n\n errorOutput( textStatus );\n };\n\n var errorOutput = params.errorOutput || function( msg ) {};/* eslint-disable-line no-var */\n\n jQuery.ajax({\n context: context,\n type: 'POST',\n url: spbcSettings.ajaxurl,\n data: data,\n dataType: dataType,\n success: success,\n error: error,\n timeout: timeout,\n });\n}\n"],"names":["spbcTimestamp","Math","floor","Date","spbcHighlightElement","id","times","jQuery","animate","scrollTop","offset","top","addClass","outlineColor","removeClass","spbcSendAJAXRequest","data","params","obj","let","dataType","notJson","button","spinner","progressbar","callback","timeout","context","this","success","setAttribute","style","cursor","Array","isArray","forEach","el","css","security","spbcSettings","ajax_nonce","no_cache","random","result","errorComment","hideSupportLink","removeAttribute","JSON","parse","error","setTimeout","fadeOut","error_comment","hide_support_link","errorOutput","msg","ajax","type","url","ajaxurl","jqXHR","textStatus","errorThrown","console","log"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-common.min.js","sources":["spbc-common.js"],"sourcesContent":["/**\r\n * Timestamp\r\n *\r\n * @return {number}\r\n */\r\nfunction spbcTimestamp() {/* eslint-disable-line no-unused-vars */\r\n return Math.floor(+new Date() / 1000);\r\n}\r\n\r\n/**\r\n * Hightlights element\r\n *\r\n * @param {number|string} id\r\n * @param {number} times\r\n */\r\nfunction spbcHighlightElement(id, times) {/* eslint-disable-line no-unused-vars */\r\n times = times-1 || 0;\r\n jQuery('html, body').animate({scrollTop: jQuery(jQuery('#'+id)).offset().top - 100}, 'slow');\r\n jQuery('#'+id).addClass('spbc_highlighted');\r\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 1.0)'}, 400, 'linear', function() {\r\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 0.0)'}, 400, 'linear', function() {\r\n if (times>0) {\r\n spbcHighlightElement(id, times);\r\n } else {\r\n jQuery('#'+id).removeClass('spbc_highlighted');\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Send AJAX Request\r\n *\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcSendAJAXRequest(data, params, obj) {/* eslint-disable-line no-unused-vars */\r\n let dataType = params.notJson ? 'text' : 'json';\r\n\r\n // Default params\r\n let button = params.button || null;\r\n let spinner = params.spinner || null;\r\n let progressbar = params.progressbar || null;\r\n let callback = params.callback || null;\r\n let notJson = params.notJson || null;\r\n let timeout = params.timeout || 15000;\r\n obj = obj || null;\r\n let context = params.context || this;\r\n\r\n // Button and spinner\r\n if (button) {\r\n button.setAttribute('disabled', 'disabled'); button.style.cursor = 'not-allowed';\r\n }\r\n if (spinner) {\r\n if (Array.isArray(spinner)) {\r\n spinner.forEach(function(el) {\r\n jQuery(el).css('display', 'inline');\r\n });\r\n } else {\r\n jQuery(spinner).css('display', 'inline');\r\n }\r\n }\r\n\r\n // Adding security code\r\n data.security = spbcSettings.ajax_nonce;\r\n data.no_cache = Math.random();\r\n\r\n // Using passed successCallback() or default\r\n let success = params.success || function(result) {\r\n if (button) {\r\n button.removeAttribute('disabled');\r\n button.style.cursor = 'pointer';\r\n }\r\n\r\n if (spinner) {\r\n if (Array.isArray(spinner)) {\r\n spinner.forEach(function(el) {\r\n jQuery(el).css('display', 'none');\r\n });\r\n } else {\r\n jQuery(spinner).css('display', 'none');\r\n }\r\n }\r\n\r\n if (!notJson && typeof result !== 'object') {\r\n result = JSON.parse(result);\r\n }\r\n\r\n if (result.error) {\r\n setTimeout(function() {\r\n if (progressbar) progressbar.fadeOut('slow');\r\n }, 1000);\r\n let errorComment = typeof result.error_comment !== 'undefined' ? result.error_comment : null;\r\n const hideSupportLink = typeof result.hide_support_link !== 'undefined';\r\n errorOutput( result.error, errorComment, hideSupportLink );\r\n jQuery('.tbl-preloader--in_button').css('display', 'none');\r\n } else if (callback) {\r\n callback(result, data, params, obj);\r\n }\r\n };\r\n\r\n // Using passed successCallback() or default\r\n let error = params.error || function(jqXHR, textStatus, errorThrown) {\r\n if (button) {\r\n button.removeAttribute('disabled');\r\n button.style.cursor = 'pointer';\r\n }\r\n if (spinner) {\r\n if (Array.isArray(spinner)) {\r\n spinner.forEach(function(el) {\r\n jQuery(el).css('display', 'none');\r\n });\r\n } else {\r\n jQuery(spinner).css('display', 'none');\r\n }\r\n }\r\n\r\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\r\n console.log( textStatus );\r\n console.log( errorThrown );\r\n console.log( jqXHR );\r\n\r\n errorOutput( textStatus );\r\n };\r\n\r\n var errorOutput = params.errorOutput || function( msg ) {};/* eslint-disable-line no-var */\r\n\r\n jQuery.ajax({\r\n context: context,\r\n type: 'POST',\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n dataType: dataType,\r\n success: success,\r\n error: error,\r\n timeout: timeout,\r\n });\r\n}\r\n"],"names":["spbcTimestamp","Math","floor","Date","spbcHighlightElement","id","times","jQuery","animate","scrollTop","offset","top","addClass","outlineColor","removeClass","spbcSendAJAXRequest","data","params","obj","let","dataType","notJson","button","spinner","progressbar","callback","timeout","context","this","success","setAttribute","style","cursor","Array","isArray","forEach","el","css","security","spbcSettings","ajax_nonce","no_cache","random","result","errorComment","hideSupportLink","removeAttribute","JSON","parse","error","setTimeout","fadeOut","error_comment","hide_support_link","errorOutput","msg","ajax","type","url","ajaxurl","jqXHR","textStatus","errorThrown","console","log"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-cookie.min.js.map b/js/spbc-cookie.min.js.map index b908033db..e33070cce 100644 --- a/js/spbc-cookie.min.js.map +++ b/js/spbc-cookie.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-cookie.min.js","sources":["spbc-cookie.js"],"sourcesContent":["/**\n * Set Cookie\n * @param {string} cookies\n * @param {string} value\n * @param {number} expires\n */\nfunction spbcSetCookie( cookies, value, expires ) {/* eslint-disable-line no-unused-vars */\n if ( typeof cookies === 'string' && ( typeof value === 'string' || typeof value === 'number' ) ) {\n cookies = [[cookies, value, expires]];\n }\n\n // Cookies disabled\n if ( +spbcPublic.data__set_cookies === 0 ) {\n return;\n\n // Using traditional cookies\n } else if ( +spbcPublic.data__set_cookies === 1 ) {\n cookies.forEach( function(item, i, arr) {\n let expires = typeof item[2] !== 'undefined' ? 'expires=' + item[2] + '; ' : '';\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = item[0] +\n '=' + encodeURIComponent(item[1]) +\n '; ' + expires + 'path=/; samesite=lax' +\n ctSecure;\n });\n\n // Using alternative cookies\n } else if ( +spbcPublic.data__set_cookies === 2 ) {\n // Using REST API handler\n if ( +spbcPublic.data__set_cookies__alt_sessions_type === 1 ) {\n spbcSendRESTRequest(\n 'alt_sessions',\n {\n method: 'POST',\n data: {cookies: cookies},\n },\n );\n }\n // Using AJAX request and handler\n // }else if( +spbcPublic.data__set_cookies__alt_sessions_type === 2 ) {\n // apbct_public_sendAJAX(\n // {\n // action: 'apbct_alt_session__save__AJAX',\n // cookies: cookies,\n // },\n // {\n // apbct_ajax: 1,\n // notJson: 1,\n // }\n // );\n // }\n }\n}\n\n/**\n * Send REST Request\n * @param {string} route\n * @param {obj} params\n */\nfunction spbcSendRESTRequest( route, params ) {\n let callback = params.callback || null;\n let data = params.data || [];\n let method = params.method || 'POST';\n\n jQuery.ajax({\n type: method,\n url: spbcPublic._rest_url + 'cleantalk-security/v1/' + route,\n data: data,\n beforeSend: function( xhr ) {\n xhr.setRequestHeader( 'X-WP-Nonce', spbcPublic._rest_nonce );\n xhr.setRequestHeader('X-Robots-Tag', 'noindex, nofollow');\n },\n success: function(result) {\n if (result.error) {\n console.log('Security by Cleantalk. Error: ' + (result.error || 'Unknown'));\n } else {\n if (callback) {\n let obj = null;\n callback(result, route, params, obj);\n }\n }\n },\n error: function(jqXHR, textStatus, errorThrown) {\n if ( errorThrown ) {\n console.log('SPBCT_REST_ERROR');\n console.log(jqXHR);\n console.log(textStatus);\n console.log('Security by Cleantalk plugin REST API error: ' +\n errorThrown +\n ' Please, contact Cleantalk tech support ' +\n 'https://wordpress.org/support/plugin/security-malware-firewall/');\n }\n },\n });\n}\n"],"names":["spbcSetCookie","cookies","value","expires","spbcPublic","data__set_cookies","forEach","item","i","arr","let","ctSecure","location","protocol","document","cookie","encodeURIComponent","data__set_cookies__alt_sessions_type","spbcSendRESTRequest","method","data","route","params","callback","jQuery","ajax","type","url","_rest_url","beforeSend","xhr","setRequestHeader","_rest_nonce","success","result","error","console","log","jqXHR","textStatus","errorThrown"],"mappings":"AAMA,SAASA,cAAeC,EAASC,EAAOC,GACZ,UAAnB,OAAOF,GAA2C,UAAjB,OAAOC,GAAuC,UAAjB,OAAOA,IACtED,EAAU,CAAC,CAACA,EAASC,EAAOC,KAIO,GAAlC,CAACC,WAAWC,oBAI6B,GAAlC,CAACD,WAAWC,kBACpBJ,EAAQK,QAAS,SAASC,EAAMC,EAAGC,GAC/BC,IAAIP,EAA6B,KAAA,IAAZI,EAAK,GAAqB,WAAaA,EAAK,GAAK,KAAO,GACzEI,EAAiC,WAAtBC,SAASC,SAAwB,WAAa,GAC7DC,SAASC,OAASR,EAAK,GACnB,IAAMS,mBAAmBT,EAAK,EAAE,EAChC,KAAOJ,EAAU,uBACjBQ,CACR,CAAC,EAGyC,GAAlC,CAACP,WAAWC,mBAEsC,GAArD,CAACD,WAAWa,sCACbC,oBACI,eACA,CACIC,OAAQ,OACRC,KAAM,CAACnB,QAASA,CAAO,CAC3B,CACJ,EAgBZ,CAOA,SAASiB,oBAAqBG,EAAOC,GACjCZ,IAAIa,EAAWD,EAAOC,UAAY,KAIlCC,OAAOC,KAAK,CACRC,KAHSJ,EAAOH,QAAU,OAI1BQ,IAAKvB,WAAWwB,UAAY,yBAA2BP,EACvDD,KANOE,EAAOF,MAAQ,GAOtBS,WAAY,SAAUC,GAClBA,EAAIC,iBAAkB,aAAc3B,WAAW4B,WAAY,EAC3DF,EAAIC,iBAAiB,eAAgB,mBAAmB,CAC5D,EACAE,QAAS,SAASC,GACVA,EAAOC,MACPC,QAAQC,IAAI,kCAAoCH,EAAOC,OAAS,UAAU,EAEtEZ,GAEAA,EAASW,EAAQb,EAAOC,EADd,IACyB,CAG/C,EACAa,MAAO,SAASG,EAAOC,EAAYC,GAC1BA,IACDJ,QAAQC,IAAI,kBAAkB,EAC9BD,QAAQC,IAAIC,CAAK,EACjBF,QAAQC,IAAIE,CAAU,EACtBH,QAAQC,IAAI,gDACRG,EAEA,yGAAiE,EAE7E,CACJ,CAAC,CACL"} \ No newline at end of file +{"version":3,"file":"spbc-cookie.min.js","sources":["spbc-cookie.js"],"sourcesContent":["/**\r\n * Set Cookie\r\n * @param {string} cookies\r\n * @param {string} value\r\n * @param {number} expires\r\n */\r\nfunction spbcSetCookie( cookies, value, expires ) {/* eslint-disable-line no-unused-vars */\r\n if ( typeof cookies === 'string' && ( typeof value === 'string' || typeof value === 'number' ) ) {\r\n cookies = [[cookies, value, expires]];\r\n }\r\n\r\n // Cookies disabled\r\n if ( +spbcPublic.data__set_cookies === 0 ) {\r\n return;\r\n\r\n // Using traditional cookies\r\n } else if ( +spbcPublic.data__set_cookies === 1 ) {\r\n cookies.forEach( function(item, i, arr) {\r\n let expires = typeof item[2] !== 'undefined' ? 'expires=' + item[2] + '; ' : '';\r\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\r\n document.cookie = item[0] +\r\n '=' + encodeURIComponent(item[1]) +\r\n '; ' + expires + 'path=/; samesite=lax' +\r\n ctSecure;\r\n });\r\n\r\n // Using alternative cookies\r\n } else if ( +spbcPublic.data__set_cookies === 2 ) {\r\n // Using REST API handler\r\n if ( +spbcPublic.data__set_cookies__alt_sessions_type === 1 ) {\r\n spbcSendRESTRequest(\r\n 'alt_sessions',\r\n {\r\n method: 'POST',\r\n data: {cookies: cookies},\r\n },\r\n );\r\n }\r\n // Using AJAX request and handler\r\n // }else if( +spbcPublic.data__set_cookies__alt_sessions_type === 2 ) {\r\n // apbct_public_sendAJAX(\r\n // {\r\n // action: 'apbct_alt_session__save__AJAX',\r\n // cookies: cookies,\r\n // },\r\n // {\r\n // apbct_ajax: 1,\r\n // notJson: 1,\r\n // }\r\n // );\r\n // }\r\n }\r\n}\r\n\r\n/**\r\n * Send REST Request\r\n * @param {string} route\r\n * @param {obj} params\r\n */\r\nfunction spbcSendRESTRequest( route, params ) {\r\n let callback = params.callback || null;\r\n let data = params.data || [];\r\n let method = params.method || 'POST';\r\n\r\n jQuery.ajax({\r\n type: method,\r\n url: spbcPublic._rest_url + 'cleantalk-security/v1/' + route,\r\n data: data,\r\n beforeSend: function( xhr ) {\r\n xhr.setRequestHeader( 'X-WP-Nonce', spbcPublic._rest_nonce );\r\n xhr.setRequestHeader('X-Robots-Tag', 'noindex, nofollow');\r\n },\r\n success: function(result) {\r\n if (result.error) {\r\n console.log('Security by Cleantalk. Error: ' + (result.error || 'Unknown'));\r\n } else {\r\n if (callback) {\r\n let obj = null;\r\n callback(result, route, params, obj);\r\n }\r\n }\r\n },\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n if ( errorThrown ) {\r\n console.log('SPBCT_REST_ERROR');\r\n console.log(jqXHR);\r\n console.log(textStatus);\r\n console.log('Security by Cleantalk plugin REST API error: ' +\r\n errorThrown +\r\n ' Please, contact Cleantalk tech support ' +\r\n 'https://wordpress.org/support/plugin/security-malware-firewall/');\r\n }\r\n },\r\n });\r\n}\r\n"],"names":["spbcSetCookie","cookies","value","expires","spbcPublic","data__set_cookies","forEach","item","i","arr","let","ctSecure","location","protocol","document","cookie","encodeURIComponent","data__set_cookies__alt_sessions_type","spbcSendRESTRequest","method","data","route","params","callback","jQuery","ajax","type","url","_rest_url","beforeSend","xhr","setRequestHeader","_rest_nonce","success","result","error","console","log","jqXHR","textStatus","errorThrown"],"mappings":"AAMA,SAASA,cAAeC,EAASC,EAAOC,GACZ,UAAnB,OAAOF,GAA2C,UAAjB,OAAOC,GAAuC,UAAjB,OAAOA,IACtED,EAAU,CAAC,CAACA,EAASC,EAAOC,KAIO,GAAlC,CAACC,WAAWC,oBAI6B,GAAlC,CAACD,WAAWC,kBACpBJ,EAAQK,QAAS,SAASC,EAAMC,EAAGC,GAC/BC,IAAIP,EAA6B,KAAA,IAAZI,EAAK,GAAqB,WAAaA,EAAK,GAAK,KAAO,GACzEI,EAAiC,WAAtBC,SAASC,SAAwB,WAAa,GAC7DC,SAASC,OAASR,EAAK,GACnB,IAAMS,mBAAmBT,EAAK,EAAE,EAChC,KAAOJ,EAAU,uBACjBQ,CACR,CAAC,EAGyC,GAAlC,CAACP,WAAWC,mBAEsC,GAArD,CAACD,WAAWa,sCACbC,oBACI,eACA,CACIC,OAAQ,OACRC,KAAM,CAACnB,QAASA,CAAO,CAC3B,CACJ,EAgBZ,CAOA,SAASiB,oBAAqBG,EAAOC,GACjCZ,IAAIa,EAAWD,EAAOC,UAAY,KAIlCC,OAAOC,KAAK,CACRC,KAHSJ,EAAOH,QAAU,OAI1BQ,IAAKvB,WAAWwB,UAAY,yBAA2BP,EACvDD,KANOE,EAAOF,MAAQ,GAOtBS,WAAY,SAAUC,GAClBA,EAAIC,iBAAkB,aAAc3B,WAAW4B,WAAY,EAC3DF,EAAIC,iBAAiB,eAAgB,mBAAmB,CAC5D,EACAE,QAAS,SAASC,GACVA,EAAOC,MACPC,QAAQC,IAAI,kCAAoCH,EAAOC,OAAS,UAAU,EAEtEZ,GAEAA,EAASW,EAAQb,EAAOC,EADd,IACyB,CAG/C,EACAa,MAAO,SAASG,EAAOC,EAAYC,GAC1BA,IACDJ,QAAQC,IAAI,kBAAkB,EAC9BD,QAAQC,IAAIC,CAAK,EACjBF,QAAQC,IAAIE,CAAU,EACtBH,QAAQC,IAAI,gDACRG,EAEA,yGAAiE,EAE7E,CACJ,CAAC,CACL"} \ No newline at end of file diff --git a/js/spbc-dashboard-widget.min.js.map b/js/spbc-dashboard-widget.min.js.map index c151ae5e9..7b34ace0b 100644 --- a/js/spbc-dashboard-widget.min.js.map +++ b/js/spbc-dashboard-widget.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-dashboard-widget.min.js","sources":["spbc-dashboard-widget.js"],"sourcesContent":["jQuery(document).ready(function() {\n // Set \"refresh\" link handler\n jQuery('.spbc_widget_refresh_link').on('click', function() {\n jQuery('.spbc_preloader').show();\n setTimeout(function() {\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\n }, 1);\n setTimeout(function() {\n jQuery('#spbc_refresh_form').submit();\n }, 2500);\n });\n\n if (location.hash == '#ct_widget') {\n setTimeout(function() {\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\n }, 1);\n }\n\n // Fixing default wrapper style\n jQuery('#spbc_widget_wrapper').parent().css('padding', 0);\n\n locale = navigator.language || navigator.userLanguage;\n\n let dateFormatter = new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n });\n\n /**\n * Reformat Widget Data\n * @param {array} spbcDashboardWidget\n * @return {array}\n */\n function reformatWidgetData(spbcDashboardWidget) {\n let widgetData = {'labels': [], 'counts': []};\n for (let i = 0; i < spbcDashboardWidget.length; i++) {\n widgetData.labels.push(dateFormatter.format(new Date(spbcDashboardWidget[i]['0'])));\n widgetData.counts.push(spbcDashboardWidget[i]['1']);\n }\n return widgetData;\n }\n\n const ctx = document.getElementById('spbc_widget_chart');\n // let widgetData = reformatWidgetData(spbcDashboardWidget['data'])\n let widgetDataFW = reformatWidgetData(spbcDashboardWidget['data_fw']);\n let widgetDataBFP = reformatWidgetData(spbcDashboardWidget['data_bfp']);\n\n new Chart(ctx, {\n type: 'bar',\n data: {\n labels: widgetDataFW.labels,\n datasets: [\n {\n label: 'Visitors blocked by Bruteforce Protection',\n data: widgetDataBFP.counts,\n borderWidth: 1,\n backgroundColor: 'gray',\n },\n {\n label: 'Visitors blocked by Firewall',\n data: widgetDataFW.counts,\n borderWidth: 1,\n backgroundColor: 'steelblue',\n },\n ],\n },\n options: {\n legend: {\n display: false,\n },\n maintainAspectRatio: false,\n responsive: true,\n scales: {\n y: {\n ticks: {\n precision: 0,\n },\n },\n },\n title: {\n display: true,\n text: 'Blocked attacks',\n fontSize: 18,\n },\n plugins: {\n legend: {\n display: false,\n },\n title: {\n display: true,\n text: 'Blocked attacks',\n font: {\n size: 18,\n },\n },\n },\n elements: {\n bar: {\n backgroundColor: 'steelblue',\n },\n },\n animations: {\n tension: {\n duration: 1000,\n easing: 'linear',\n from: 1,\n to: 0,\n loop: true,\n },\n },\n\n },\n });\n});\n"],"names":["jQuery","document","ready","on","show","setTimeout","window","scrollTo","offset","top","submit","location","hash","parent","css","locale","navigator","language","userLanguage","let","dateFormatter","Intl","DateTimeFormat","month","day","reformatWidgetData","spbcDashboardWidget","widgetData","labels","counts","i","length","push","format","Date","ctx","getElementById","widgetDataFW","widgetDataBFP","Chart","type","data","datasets","label","borderWidth","backgroundColor","options","legend","display","maintainAspectRatio","responsive","scales","y","ticks","precision","title","text","fontSize","plugins","font","size","elements","bar","animations","tension","duration","easing","from","to","loop"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WAEnBF,OAAO,2BAA2B,EAAEG,GAAG,QAAS,WAC5CH,OAAO,iBAAiB,EAAEI,KAAK,EAC/BC,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EACJJ,WAAW,WACPL,OAAO,oBAAoB,EAAEU,OAAO,CACxC,EAAG,IAAI,CACX,CAAC,EAEoB,cAAjBC,SAASC,MACTP,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EAIRT,OAAO,sBAAsB,EAAEa,OAAO,EAAEC,IAAI,UAAW,CAAC,EAExDC,OAASC,UAAUC,UAAYD,UAAUE,aAEzCC,IAAIC,EAAgB,IAAIC,KAAKC,eAAeP,OAAQ,CAChDQ,MAAO,QACPC,IAAK,SACT,CAAC,EAOD,SAASC,EAAmBC,GACxBP,IAAIQ,EAAa,CAACC,OAAU,GAAIC,OAAU,EAAE,EAC5C,IAAKV,IAAIW,EAAI,EAAGA,EAAIJ,EAAoBK,OAAQD,CAAC,GAC7CH,EAAWC,OAAOI,KAAKZ,EAAca,OAAO,IAAIC,KAAKR,EAAoBI,GAAG,EAAI,CAAC,CAAC,EAClFH,EAAWE,OAAOG,KAAKN,EAAoBI,GAAG,EAAI,EAEtD,OAAOH,CACX,CAEA,IAAMQ,EAAMlC,SAASmC,eAAe,mBAAmB,EAEnDC,EAAeZ,EAAmBC,oBAA6B,OAAC,EAChEY,EAAgBb,EAAmBC,oBAA8B,QAAC,EAEtE,IAAIa,MAAMJ,EAAK,CACXK,KAAM,MACNC,KAAM,CACFb,OAAQS,EAAaT,OACrBc,SAAU,CACN,CACIC,MAAO,4CACPF,KAAMH,EAAcT,OACpBe,YAAa,EACbC,gBAAiB,MACrB,EACA,CACIF,MAAO,+BACPF,KAAMJ,EAAaR,OACnBe,YAAa,EACbC,gBAAiB,WACrB,EAER,EACAC,QAAS,CACLC,OAAQ,CACJC,QAAS,CAAA,CACb,EACAC,oBAAqB,CAAA,EACrBC,WAAY,CAAA,EACZC,OAAQ,CACJC,EAAG,CACCC,MAAO,CACHC,UAAW,CACf,CACJ,CACJ,EACAC,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNC,SAAU,EACd,EACAC,QAAS,CACLX,OAAQ,CACJC,QAAS,CAAA,CACb,EACAO,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNG,KAAM,CACFC,KAAM,EACV,CACJ,CACJ,EACAC,SAAU,CACNC,IAAK,CACDjB,gBAAiB,WACrB,CACJ,EACAkB,WAAY,CACRC,QAAS,CACLC,SAAU,IACVC,OAAQ,SACRC,KAAM,EACNC,GAAI,EACJC,KAAM,CAAA,CACV,CACJ,CAEJ,CACJ,CAAC,CACL,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-dashboard-widget.min.js","sources":["spbc-dashboard-widget.js"],"sourcesContent":["jQuery(document).ready(function() {\r\n // Set \"refresh\" link handler\r\n jQuery('.spbc_widget_refresh_link').on('click', function() {\r\n jQuery('.spbc_preloader').show();\r\n setTimeout(function() {\r\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\r\n }, 1);\r\n setTimeout(function() {\r\n jQuery('#spbc_refresh_form').submit();\r\n }, 2500);\r\n });\r\n\r\n if (location.hash == '#ct_widget') {\r\n setTimeout(function() {\r\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\r\n }, 1);\r\n }\r\n\r\n // Fixing default wrapper style\r\n jQuery('#spbc_widget_wrapper').parent().css('padding', 0);\r\n\r\n locale = navigator.language || navigator.userLanguage;\r\n\r\n let dateFormatter = new Intl.DateTimeFormat(locale, {\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n\r\n /**\r\n * Reformat Widget Data\r\n * @param {array} spbcDashboardWidget\r\n * @return {array}\r\n */\r\n function reformatWidgetData(spbcDashboardWidget) {\r\n let widgetData = {'labels': [], 'counts': []};\r\n for (let i = 0; i < spbcDashboardWidget.length; i++) {\r\n widgetData.labels.push(dateFormatter.format(new Date(spbcDashboardWidget[i]['0'])));\r\n widgetData.counts.push(spbcDashboardWidget[i]['1']);\r\n }\r\n return widgetData;\r\n }\r\n\r\n const ctx = document.getElementById('spbc_widget_chart');\r\n // let widgetData = reformatWidgetData(spbcDashboardWidget['data'])\r\n let widgetDataFW = reformatWidgetData(spbcDashboardWidget['data_fw']);\r\n let widgetDataBFP = reformatWidgetData(spbcDashboardWidget['data_bfp']);\r\n\r\n new Chart(ctx, {\r\n type: 'bar',\r\n data: {\r\n labels: widgetDataFW.labels,\r\n datasets: [\r\n {\r\n label: 'Visitors blocked by Bruteforce Protection',\r\n data: widgetDataBFP.counts,\r\n borderWidth: 1,\r\n backgroundColor: 'gray',\r\n },\r\n {\r\n label: 'Visitors blocked by Firewall',\r\n data: widgetDataFW.counts,\r\n borderWidth: 1,\r\n backgroundColor: 'steelblue',\r\n },\r\n ],\r\n },\r\n options: {\r\n legend: {\r\n display: false,\r\n },\r\n maintainAspectRatio: false,\r\n responsive: true,\r\n scales: {\r\n y: {\r\n ticks: {\r\n precision: 0,\r\n },\r\n },\r\n },\r\n title: {\r\n display: true,\r\n text: 'Blocked attacks',\r\n fontSize: 18,\r\n },\r\n plugins: {\r\n legend: {\r\n display: false,\r\n },\r\n title: {\r\n display: true,\r\n text: 'Blocked attacks',\r\n font: {\r\n size: 18,\r\n },\r\n },\r\n },\r\n elements: {\r\n bar: {\r\n backgroundColor: 'steelblue',\r\n },\r\n },\r\n animations: {\r\n tension: {\r\n duration: 1000,\r\n easing: 'linear',\r\n from: 1,\r\n to: 0,\r\n loop: true,\r\n },\r\n },\r\n\r\n },\r\n });\r\n});\r\n"],"names":["jQuery","document","ready","on","show","setTimeout","window","scrollTo","offset","top","submit","location","hash","parent","css","locale","navigator","language","userLanguage","let","dateFormatter","Intl","DateTimeFormat","month","day","reformatWidgetData","spbcDashboardWidget","widgetData","labels","counts","i","length","push","format","Date","ctx","getElementById","widgetDataFW","widgetDataBFP","Chart","type","data","datasets","label","borderWidth","backgroundColor","options","legend","display","maintainAspectRatio","responsive","scales","y","ticks","precision","title","text","fontSize","plugins","font","size","elements","bar","animations","tension","duration","easing","from","to","loop"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WAEnBF,OAAO,2BAA2B,EAAEG,GAAG,QAAS,WAC5CH,OAAO,iBAAiB,EAAEI,KAAK,EAC/BC,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EACJJ,WAAW,WACPL,OAAO,oBAAoB,EAAEU,OAAO,CACxC,EAAG,IAAI,CACX,CAAC,EAEoB,cAAjBC,SAASC,MACTP,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EAIRT,OAAO,sBAAsB,EAAEa,OAAO,EAAEC,IAAI,UAAW,CAAC,EAExDC,OAASC,UAAUC,UAAYD,UAAUE,aAEzCC,IAAIC,EAAgB,IAAIC,KAAKC,eAAeP,OAAQ,CAChDQ,MAAO,QACPC,IAAK,SACT,CAAC,EAOD,SAASC,EAAmBC,GACxBP,IAAIQ,EAAa,CAACC,OAAU,GAAIC,OAAU,EAAE,EAC5C,IAAKV,IAAIW,EAAI,EAAGA,EAAIJ,EAAoBK,OAAQD,CAAC,GAC7CH,EAAWC,OAAOI,KAAKZ,EAAca,OAAO,IAAIC,KAAKR,EAAoBI,GAAG,EAAI,CAAC,CAAC,EAClFH,EAAWE,OAAOG,KAAKN,EAAoBI,GAAG,EAAI,EAEtD,OAAOH,CACX,CAEA,IAAMQ,EAAMlC,SAASmC,eAAe,mBAAmB,EAEnDC,EAAeZ,EAAmBC,oBAA6B,OAAC,EAChEY,EAAgBb,EAAmBC,oBAA8B,QAAC,EAEtE,IAAIa,MAAMJ,EAAK,CACXK,KAAM,MACNC,KAAM,CACFb,OAAQS,EAAaT,OACrBc,SAAU,CACN,CACIC,MAAO,4CACPF,KAAMH,EAAcT,OACpBe,YAAa,EACbC,gBAAiB,MACrB,EACA,CACIF,MAAO,+BACPF,KAAMJ,EAAaR,OACnBe,YAAa,EACbC,gBAAiB,WACrB,EAER,EACAC,QAAS,CACLC,OAAQ,CACJC,QAAS,CAAA,CACb,EACAC,oBAAqB,CAAA,EACrBC,WAAY,CAAA,EACZC,OAAQ,CACJC,EAAG,CACCC,MAAO,CACHC,UAAW,CACf,CACJ,CACJ,EACAC,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNC,SAAU,EACd,EACAC,QAAS,CACLX,OAAQ,CACJC,QAAS,CAAA,CACb,EACAO,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNG,KAAM,CACFC,KAAM,EACV,CACJ,CACJ,EACAC,SAAU,CACNC,IAAK,CACDjB,gBAAiB,WACrB,CACJ,EACAkB,WAAY,CACRC,QAAS,CACLC,SAAU,IACVC,OAAQ,SACRC,KAAM,EACNC,GAAI,EACJC,KAAM,CAAA,CACV,CACJ,CAEJ,CACJ,CAAC,CACL,CAAC"} \ No newline at end of file diff --git a/js/spbc-modal.min.js.map b/js/spbc-modal.min.js.map index 391674948..b5156334b 100644 --- a/js/spbc-modal.min.js.map +++ b/js/spbc-modal.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-modal.min.js","sources":["spbc-modal.js"],"sourcesContent":["/* Cleantalk Modal object */\nspbcModal = {\n\n // Flags\n loaded: false,\n loading: false,\n opened: false,\n opening: false,\n\n // Methods\n load: function( action ) {\n if ( ! this.loaded ) {\n this.loading = true;\n callback = function( result, data, params, obj ) {\n spbcModal.loading = false;\n spbcModal.loaded = result;\n document.dispatchEvent(\n new CustomEvent( 'spbcModalContentLoaded', {\n bubbles: true,\n } ),\n );\n };\n if ( typeof spbcSendAJAXRequest === 'function' ) {\n spbcSendAJAXRequest( {'action': action}, {'callback': callback, 'notJson': true} );\n }\n }\n },\n\n putError: function( errorText, hideSupportLink = false) {\n let html = '

An error

' +\n '

' + errorText + '

';\n if (!hideSupportLink) {\n html += 'Contact tech support';\n }\n this.put(html);\n },\n\n put: function( html ) {\n spbcModal.loading = false;\n spbcModal.loaded = html;\n document.dispatchEvent(\n new CustomEvent( 'spbcModalContentLoaded', {\n bubbles: true,\n } ),\n );\n },\n\n confirm: function(header, text = '', filePath = '', callback, yesButtonText = 'Yes', noButtonText = 'No') {\n spbcModal.loading = false;\n let contentBlock = document.getElementById('spbc-modal-content');\n if (contentBlock) {\n contentBlock.innerHTML = '';\n\n const headerBlock = document.createElement('div');\n headerBlock.className = 'spbc-modal-header';\n headerBlock.textContent = header;\n contentBlock.append(headerBlock);\n\n // Create text block\n const textBlock = document.createElement('div');\n textBlock.className = 'spbc-modal-text-block';\n contentBlock.append(textBlock);\n\n const fullLinkPath = filePath;\n\n if (filePath && filePath.length > 60) {\n filePath = '...' + filePath.slice(filePath.length - 60);\n }\n\n const textElem = document.createElement('div');\n textElem.className = 'spbc-modal-text';\n textElem.textContent = text;\n textBlock.append(textElem);\n\n const pathElemWrapper = document.createElement('div');\n pathElemWrapper.className = 'spbc-modal-file_path_wrapper';\n textBlock.append(pathElemWrapper);\n const pathElem = document.createElement('span');\n pathElem.className = 'spbc-modal-file_path';\n pathElem.textContent = filePath ? filePath : '';\n pathElem.title = fullLinkPath;\n pathElemWrapper.append(pathElem);\n\n // Create buttons block\n const buttonsBlock = document.createElement('div');\n buttonsBlock.className = 'spbc-modal-buttons-block';\n contentBlock.append(buttonsBlock);\n\n const yesButton = document.createElement('button');\n yesButton.className = 'spbc-modal-button spbc_manual_link';\n yesButton.textContent = yesButtonText;\n yesButton.onclick = function() {\n callback(true);\n spbcModal.close();\n };\n buttonsBlock.append(yesButton);\n\n const noButton = document.createElement('button');\n noButton.className = 'spbc-modal-button spbc_manual_link';\n noButton.textContent = noButtonText;\n noButton.onclick = function() {\n spbcModal.close();\n };\n buttonsBlock.append(noButton);\n }\n document.dispatchEvent(\n new CustomEvent( 'spbcModalContentLoaded', {\n bubbles: true,\n } ),\n );\n },\n\n open: function() {\n /* Cleantalk Modal CSS start */\n let renderCss = function() {\n let cssStr = '';\n for ( key in this.styles ) {\n if (key) {\n cssStr += key + ':' + this.styles[key] + ';';\n }\n }\n return cssStr;\n };\n let overlayCss = {\n styles: {\n 'z-index': '9999',\n 'position': 'fixed',\n 'top': '0',\n 'left': '0',\n 'width': '100%',\n 'height': '100%',\n 'background': 'rgba(0,0,0,0.5)',\n 'display': 'flex',\n 'justify-content': 'center',\n 'align-items': 'center',\n },\n toString: renderCss,\n };\n let innerCss = {\n styles: {\n 'position': 'relative',\n 'padding': '20px',\n 'margin': '10px',\n 'max-width': '550px',\n 'background': '#FFF',\n 'border': '1px solid rgba(0,0,0,0.75)',\n 'border-radius': '4px',\n 'box-shadow': '7px 7px 5px 0px rgba(50,50,50,0.75)',\n },\n toString: renderCss,\n };\n let closeCss = {\n styles: {\n 'position': 'absolute',\n 'background': '#FFF',\n 'width': '20px',\n 'height': '20px',\n 'border': '2px solid rgba(0,0,0,0.75)',\n 'border-radius': '15px',\n 'cursor': 'pointer',\n 'top': '-8px',\n 'right': '-8px',\n },\n toString: renderCss,\n };\n let closeCssBefore = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(45deg)',\n },\n toString: renderCss,\n };\n let closeCssAfter = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(-45deg)',\n },\n toString: renderCss,\n };\n let contentCss = {\n styles: {\n 'display': 'grid',\n 'gap': '20px',\n 'overflow-y': 'auto',\n 'overflow-x': 'hidden',\n },\n toString: renderCss,\n };\n let bodyCss = {\n styles: {\n 'overflow': 'hidden',\n },\n toString: renderCss,\n };\n let spbcModalStyle = document.createElement( 'style' );\n spbcModalStyle.setAttribute( 'id', 'spbc-modal-styles' );\n spbcModalStyle.innerHTML = 'body.spbc-modal-opened{' + bodyCss + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-overlay{' + overlayCss + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-close{' + closeCss + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-close:before{' + closeCssBefore + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-close:after{' + closeCssAfter + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-content{' + contentCss + '}';\n document.body.append( spbcModalStyle );\n /* Cleantalk Modal CSS end */\n\n let overlay = document.createElement( 'div' );\n overlay.setAttribute( 'id', 'spbc-modal-overlay' );\n document.body.append( overlay );\n\n document.body.classList.add( 'spbc-modal-opened' );\n\n let inner = document.createElement( 'div' );\n inner.setAttribute( 'id', 'spbc-modal-inner' );\n inner.setAttribute( 'style', innerCss );\n overlay.append( inner );\n\n let close = document.createElement( 'div' );\n close.setAttribute( 'id', 'spbc-modal-close' );\n inner.append( close );\n\n let content = document.createElement( 'div' );\n if ( this.loaded ) {\n content.innerHTML = this.loaded;\n } else {\n content.innerHTML = 'Loading...';\n }\n content.setAttribute( 'id', 'spbc-modal-content' );\n inner.append( content );\n\n this.opened = true;\n\n return this;\n },\n\n close: function() {\n spbcModal.loaded = '';\n spbcModal.loading = false;\n document.body.classList.remove( 'spbc-modal-opened' );\n document.getElementById( 'spbc-modal-overlay' ).remove();\n document.getElementById( 'spbc-modal-styles' ).remove();\n document.dispatchEvent(\n new CustomEvent( 'spbcModalClosed', {\n bubbles: true,\n } ),\n );\n },\n\n};\n\n/* Cleantalk Modal helpers */\ndocument.addEventListener('click', function( e ) {\n if ( e.target && e.target.id === 'spbc-modal-overlay' || e.target.id === 'spbc-modal-close' ) {\n spbcModal.close();\n }\n});\ndocument.addEventListener('spbcModalContentLoaded', function( e ) {\n if ( spbcModal.opened && spbcModal.loaded ) {\n document.getElementById( 'spbc-modal-content' ).innerHTML = spbcModal.loaded;\n }\n});\n"],"names":["spbcModal","loaded","loading","opened","opening","load","action","this","callback","result","data","params","obj","document","dispatchEvent","CustomEvent","bubbles","spbcSendAJAXRequest","notJson","putError","errorText","hideSupportLink","let","html","put","confirm","header","text","filePath","yesButtonText","noButtonText","pathElem","noButton","contentBlock","getElementById","innerHTML","headerBlock","createElement","className","textContent","append","textBlock","fullLinkPath","length","slice","textElem","pathElemWrapper","title","buttonsBlock","yesButton","onclick","close","open","renderCss","cssStr","key","styles","overlayCss","z-index","position","top","left","width","height","background","display","justify-content","align-items","toString","innerCss","padding","margin","max-width","border","border-radius","box-shadow","closeCss","cursor","right","closeCssBefore","content","transform","closeCssAfter","contentCss","gap","overflow-y","overflow-x","bodyCss","overflow","spbcModalStyle","overlay","setAttribute","body","inner","classList","add","remove","addEventListener","e","target","id"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-modal.min.js","sources":["spbc-modal.js"],"sourcesContent":["/* Cleantalk Modal object */\r\nspbcModal = {\r\n\r\n // Flags\r\n loaded: false,\r\n loading: false,\r\n opened: false,\r\n opening: false,\r\n\r\n // Methods\r\n load: function( action ) {\r\n if ( ! this.loaded ) {\r\n this.loading = true;\r\n callback = function( result, data, params, obj ) {\r\n spbcModal.loading = false;\r\n spbcModal.loaded = result;\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalContentLoaded', {\r\n bubbles: true,\r\n } ),\r\n );\r\n };\r\n if ( typeof spbcSendAJAXRequest === 'function' ) {\r\n spbcSendAJAXRequest( {'action': action}, {'callback': callback, 'notJson': true} );\r\n }\r\n }\r\n },\r\n\r\n putError: function( errorText, hideSupportLink = false) {\r\n let html = '

An error

' +\r\n '

' + errorText + '

';\r\n if (!hideSupportLink) {\r\n html += 'Contact tech support';\r\n }\r\n this.put(html);\r\n },\r\n\r\n put: function( html ) {\r\n spbcModal.loading = false;\r\n spbcModal.loaded = html;\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalContentLoaded', {\r\n bubbles: true,\r\n } ),\r\n );\r\n },\r\n\r\n confirm: function(header, text = '', filePath = '', callback, yesButtonText = 'Yes', noButtonText = 'No') {\r\n spbcModal.loading = false;\r\n let contentBlock = document.getElementById('spbc-modal-content');\r\n if (contentBlock) {\r\n contentBlock.innerHTML = '';\r\n\r\n const headerBlock = document.createElement('div');\r\n headerBlock.className = 'spbc-modal-header';\r\n headerBlock.textContent = header;\r\n contentBlock.append(headerBlock);\r\n\r\n // Create text block\r\n const textBlock = document.createElement('div');\r\n textBlock.className = 'spbc-modal-text-block';\r\n contentBlock.append(textBlock);\r\n\r\n const fullLinkPath = filePath;\r\n\r\n if (filePath && filePath.length > 60) {\r\n filePath = '...' + filePath.slice(filePath.length - 60);\r\n }\r\n\r\n const textElem = document.createElement('div');\r\n textElem.className = 'spbc-modal-text';\r\n textElem.textContent = text;\r\n textBlock.append(textElem);\r\n\r\n const pathElemWrapper = document.createElement('div');\r\n pathElemWrapper.className = 'spbc-modal-file_path_wrapper';\r\n textBlock.append(pathElemWrapper);\r\n const pathElem = document.createElement('span');\r\n pathElem.className = 'spbc-modal-file_path';\r\n pathElem.textContent = filePath ? filePath : '';\r\n pathElem.title = fullLinkPath;\r\n pathElemWrapper.append(pathElem);\r\n\r\n // Create buttons block\r\n const buttonsBlock = document.createElement('div');\r\n buttonsBlock.className = 'spbc-modal-buttons-block';\r\n contentBlock.append(buttonsBlock);\r\n\r\n const yesButton = document.createElement('button');\r\n yesButton.className = 'spbc-modal-button spbc_manual_link';\r\n yesButton.textContent = yesButtonText;\r\n yesButton.onclick = function() {\r\n callback(true);\r\n spbcModal.close();\r\n };\r\n buttonsBlock.append(yesButton);\r\n\r\n const noButton = document.createElement('button');\r\n noButton.className = 'spbc-modal-button spbc_manual_link';\r\n noButton.textContent = noButtonText;\r\n noButton.onclick = function() {\r\n spbcModal.close();\r\n };\r\n buttonsBlock.append(noButton);\r\n }\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalContentLoaded', {\r\n bubbles: true,\r\n } ),\r\n );\r\n },\r\n\r\n open: function() {\r\n /* Cleantalk Modal CSS start */\r\n let renderCss = function() {\r\n let cssStr = '';\r\n for ( key in this.styles ) {\r\n if (key) {\r\n cssStr += key + ':' + this.styles[key] + ';';\r\n }\r\n }\r\n return cssStr;\r\n };\r\n let overlayCss = {\r\n styles: {\r\n 'z-index': '9999',\r\n 'position': 'fixed',\r\n 'top': '0',\r\n 'left': '0',\r\n 'width': '100%',\r\n 'height': '100%',\r\n 'background': 'rgba(0,0,0,0.5)',\r\n 'display': 'flex',\r\n 'justify-content': 'center',\r\n 'align-items': 'center',\r\n },\r\n toString: renderCss,\r\n };\r\n let innerCss = {\r\n styles: {\r\n 'position': 'relative',\r\n 'padding': '20px',\r\n 'margin': '10px',\r\n 'max-width': '550px',\r\n 'background': '#FFF',\r\n 'border': '1px solid rgba(0,0,0,0.75)',\r\n 'border-radius': '4px',\r\n 'box-shadow': '7px 7px 5px 0px rgba(50,50,50,0.75)',\r\n },\r\n toString: renderCss,\r\n };\r\n let closeCss = {\r\n styles: {\r\n 'position': 'absolute',\r\n 'background': '#FFF',\r\n 'width': '20px',\r\n 'height': '20px',\r\n 'border': '2px solid rgba(0,0,0,0.75)',\r\n 'border-radius': '15px',\r\n 'cursor': 'pointer',\r\n 'top': '-8px',\r\n 'right': '-8px',\r\n },\r\n toString: renderCss,\r\n };\r\n let closeCssBefore = {\r\n styles: {\r\n 'content': '\"\"',\r\n 'display': 'block',\r\n 'position': 'absolute',\r\n 'background': '#000',\r\n 'border-radius': '1px',\r\n 'width': '2px',\r\n 'height': '16px',\r\n 'top': '2px',\r\n 'left': '9px',\r\n 'transform': 'rotate(45deg)',\r\n },\r\n toString: renderCss,\r\n };\r\n let closeCssAfter = {\r\n styles: {\r\n 'content': '\"\"',\r\n 'display': 'block',\r\n 'position': 'absolute',\r\n 'background': '#000',\r\n 'border-radius': '1px',\r\n 'width': '2px',\r\n 'height': '16px',\r\n 'top': '2px',\r\n 'left': '9px',\r\n 'transform': 'rotate(-45deg)',\r\n },\r\n toString: renderCss,\r\n };\r\n let contentCss = {\r\n styles: {\r\n 'display': 'grid',\r\n 'gap': '20px',\r\n 'overflow-y': 'auto',\r\n 'overflow-x': 'hidden',\r\n },\r\n toString: renderCss,\r\n };\r\n let bodyCss = {\r\n styles: {\r\n 'overflow': 'hidden',\r\n },\r\n toString: renderCss,\r\n };\r\n let spbcModalStyle = document.createElement( 'style' );\r\n spbcModalStyle.setAttribute( 'id', 'spbc-modal-styles' );\r\n spbcModalStyle.innerHTML = 'body.spbc-modal-opened{' + bodyCss + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-overlay{' + overlayCss + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-close{' + closeCss + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-close:before{' + closeCssBefore + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-close:after{' + closeCssAfter + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-content{' + contentCss + '}';\r\n document.body.append( spbcModalStyle );\r\n /* Cleantalk Modal CSS end */\r\n\r\n let overlay = document.createElement( 'div' );\r\n overlay.setAttribute( 'id', 'spbc-modal-overlay' );\r\n document.body.append( overlay );\r\n\r\n document.body.classList.add( 'spbc-modal-opened' );\r\n\r\n let inner = document.createElement( 'div' );\r\n inner.setAttribute( 'id', 'spbc-modal-inner' );\r\n inner.setAttribute( 'style', innerCss );\r\n overlay.append( inner );\r\n\r\n let close = document.createElement( 'div' );\r\n close.setAttribute( 'id', 'spbc-modal-close' );\r\n inner.append( close );\r\n\r\n let content = document.createElement( 'div' );\r\n if ( this.loaded ) {\r\n content.innerHTML = this.loaded;\r\n } else {\r\n content.innerHTML = 'Loading...';\r\n }\r\n content.setAttribute( 'id', 'spbc-modal-content' );\r\n inner.append( content );\r\n\r\n this.opened = true;\r\n\r\n return this;\r\n },\r\n\r\n close: function() {\r\n spbcModal.loaded = '';\r\n spbcModal.loading = false;\r\n document.body.classList.remove( 'spbc-modal-opened' );\r\n document.getElementById( 'spbc-modal-overlay' ).remove();\r\n document.getElementById( 'spbc-modal-styles' ).remove();\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalClosed', {\r\n bubbles: true,\r\n } ),\r\n );\r\n },\r\n\r\n};\r\n\r\n/* Cleantalk Modal helpers */\r\ndocument.addEventListener('click', function( e ) {\r\n if ( e.target && e.target.id === 'spbc-modal-overlay' || e.target.id === 'spbc-modal-close' ) {\r\n spbcModal.close();\r\n }\r\n});\r\ndocument.addEventListener('spbcModalContentLoaded', function( e ) {\r\n if ( spbcModal.opened && spbcModal.loaded ) {\r\n document.getElementById( 'spbc-modal-content' ).innerHTML = spbcModal.loaded;\r\n }\r\n});\r\n"],"names":["spbcModal","loaded","loading","opened","opening","load","action","this","callback","result","data","params","obj","document","dispatchEvent","CustomEvent","bubbles","spbcSendAJAXRequest","notJson","putError","errorText","hideSupportLink","let","html","put","confirm","header","text","filePath","yesButtonText","noButtonText","pathElem","noButton","contentBlock","getElementById","innerHTML","headerBlock","createElement","className","textContent","append","textBlock","fullLinkPath","length","slice","textElem","pathElemWrapper","title","buttonsBlock","yesButton","onclick","close","open","renderCss","cssStr","key","styles","overlayCss","z-index","position","top","left","width","height","background","display","justify-content","align-items","toString","innerCss","padding","margin","max-width","border","border-radius","box-shadow","closeCss","cursor","right","closeCssBefore","content","transform","closeCssAfter","contentCss","gap","overflow-y","overflow-x","bodyCss","overflow","spbcModalStyle","overlay","setAttribute","body","inner","classList","add","remove","addEventListener","e","target","id"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-scanner-plugin.min.js.map b/js/spbc-scanner-plugin.min.js.map index 6ea56f56e..8ea3dbcf2 100644 --- a/js/spbc-scanner-plugin.min.js.map +++ b/js/spbc-scanner-plugin.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-scanner-plugin.min.js","sources":["spbc-scanner-plugin.js"],"sourcesContent":["'use strict';\n\n/**\n * class SpbcMalwareScanner\n */\nclass SpbcMalwareScanner {/* eslint-disable-line no-unused-vars */\n first_start = true;\n\n active = false;\n\n root = '';\n settings = [];\n states = [\n 'get_cms_hashes',\n 'get_modules_hashes',\n 'clean_results',\n 'file_system_analysis',\n 'get_approved_hashes',\n 'get_denied_hashes',\n 'signature_analysis',\n 'heuristic_analysis',\n 'schedule_send_heuristic_suspicious_files',\n 'auto_cure_backup',\n 'auto_cure',\n 'os_cron_analysis',\n 'outbound_links',\n 'frontend_analysis',\n 'important_files_listing',\n 'send_results',\n ];\n state = null;\n offset = 0;\n amount = 0;\n amount_coefficient = 1;\n total_scanned = 0;\n scan_percent = 0;\n percent_completed = 0;\n\n paused = false;\n\n button = null;\n spinner = null;\n\n progress_overall = null;\n progressbar = null;\n progressbar_text = null;\n\n timeout = 60000;\n\n state_timer = 0;\n\n /**\n * constructor\n * @param {array} properties\n */\n constructor( properties ) {\n console.log('init');\n if (jQuery('#spbcscan-results-log-module').length) {\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\n }\n\n // Crunch for cure backups\n if ( typeof properties['settings']['auto_cure'] !== 'undefined' ) {\n properties['settings']['scanner__auto_cure_backup'] = '1';\n }\n\n for ( let key in properties ) {\n if ( typeof this[key] !== 'undefined' ) {\n this[key] = properties[key];\n }\n }\n };\n\n /**\n * Function Action Control\n */\n actionControl() {\n if (this.state === null) {\n this.start();\n } else if (this.paused) {\n this.resume();\n this.controller();\n } else {\n this.pause();\n }\n };\n\n /**\n * Function Start\n */\n start() {\n this.active = true;\n this.state_timer = Math.round(new Date().getTime() /1000);\n\n this.state = this.getNextState( null );\n\n this.setPercents( 0 );\n this.scan_percent = 0;\n this.offset = 0;\n this.progress_overall.children('span')\n .removeClass('spbc_bold')\n .filter('.spbc_overall_scan_status_' + this.state)\n .addClass('spbc_bold');\n\n this.progressbar.show(500);\n this.progress_overall.show(500);\n this.button.html(spbcScaner.button_scan_pause);\n this.spinner.css({display: 'inline'});\n\n setTimeout(() => {\n this.controller();\n }, 1000);\n };\n\n /**\n * Function Pause\n * @param {*} result\n * @param {*} data\n * @param {*} opt\n */\n pause( result, data, opt ) {\n console.log('PAUSE');\n this.button.html(spbcScaner.button_scan_resume);\n this.spinner.css({display: 'none'});\n this.paused = true;\n this.active = false;\n };\n\n /**\n * Function Resume\n * @param {*} opt\n */\n resume( opt ) {\n console.log('RESUME');\n this.button.html(spbcScaner.button_scan_pause);\n this.spinner.css({display: 'inline'});\n this.paused = false;\n this.active = true;\n };\n\n /**\n * Function End\n * @param {bool} reload\n */\n end( reload ) {\n this.progressbar.hide(500);\n this.progress_overall.hide(500);\n this.button.html(spbcScaner.button_scan_perform);\n this.spinner.css({display: 'none'});\n this.state = null;\n this.plug = false;\n this.total_scanned = 0;\n this.active = false;\n\n if (reload) {\n document.location = document.location;\n } else {\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_tab__reload_accordion'},\n {\n notJson: true,\n callback: function(result, data, params, obj) {\n jQuery(obj).accordion('destroy')\n .html(result)\n .accordion({\n header: 'h3',\n heightStyle: 'content',\n collapsible: true,\n active: false,\n });\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n spbcScannerReloadScanInfo();\n },\n },\n jQuery('#spbc_scan_accordion'),\n );\n\n if (!jQuery('#spbc_scanner_clear').length) {\n let clearLink = '

Clear scanner logs


';\n jQuery(clearLink).insertBefore('#spbcscan-scanner-caption');\n }\n }\n };\n\n /**\n * Function Controller\n * @param {obj} result\n */\n controller( result ) {\n console.log(this.state);\n\n // The current stage is over. Switching to the new one\n if ( typeof result !== 'undefined' && result.end ) {\n this.state = this.getNextState( this.state );\n\n // End condition\n if (typeof this.state === 'undefined') {\n this.end();\n return;\n }\n\n // Set percent to 0\n this.setPercents( 0 );\n this.scan_percent = 0;\n this.offset = 0;\n\n // Changing visualizing of the current stage\n this.progress_overall.children('span')\n .removeClass('spbc_bold')\n .filter('.spbc_overall_scan_status_' + this.state)\n .addClass('spbc_bold');\n }\n\n // Break execution if paused\n if ( this.paused === true ) {\n return;\n }\n\n // // AJAX params\n let data = {\n action: 'spbc_scanner_controller_front',\n method: this.state,\n offset: this.offset,\n };\n\n let params = {\n type: 'GET',\n success: this.success,\n callback: this.successCallback,\n error: this.error,\n errorOutput: this.errorOutput,\n complete: null,\n context: this,\n timeout: 120000,\n };\n\n switch (this.state) {\n case 'get_modules_hashes': this.amount = 2; break;\n case 'clear_table': this.amount = 10000; break;\n case 'file_system_analysis': this.amount = 700; break;\n case 'auto_cure': this.amount = 5; break;\n case 'outbound_links': this.amount = 10; break;\n case 'frontend_analysis': this.amount = spbcSettings.frontendAnalysisAmount; break;\n case 'signature_analysis': this.amount = 10; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\n case 'heuristic_analysis': this.amount = 4; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\n case 'schedule_send_heuristic_suspicious_files': this.amount = 1; break;\n }\n\n data.amount = Math.round(this.amount * this.amount_coefficient);\n\n spbcSendAJAXRequest(\n data,\n params,\n jQuery('#spbc_scan_accordion'),\n );\n };\n\n /**\n * Set Coefficients\n * @param {string} state\n */\n setCoefficients( state ) {\n let coefficient = this.amount_coefficient;\n switch (state) {\n case 'file_system_analysis': coefficient *= 1.5; break;\n }\n this.amount_coefficient = coefficient;\n };\n\n /**\n * Get Next State\n * @param {string} state\n * @return {number}\n */\n getNextState( state ) {\n state = state === null ? this.states[0] : this.states[this.states.indexOf( state ) + 1];\n\n if (typeof this.settings['scanner__' + state] !== 'undefined' && +this.settings['scanner__' + state] === 0) {\n state = this.getNextState( state );\n }\n\n return state;\n };\n\n /**\n * Set Percents\n * @param {number} percents\n */\n setPercents( percents ) {\n this.percent_completed = Math.floor( percents * 100 ) / 100;\n this.progressbar.progressbar( 'option', 'value', this.percent_completed );\n this.progressbar_text.text( spbcScaner['progressbar_' + this.state] + ' - ' + this.percent_completed + '%' );\n };\n\n /**\n * Function Success\n * @param {obj} response\n */\n success( response ) {\n if ( !! response.error ) {\n this.error(\n {status: 200, responseText: response.error},\n response.error,\n response.msg,\n );\n } else {\n if ( this.successCallback ) {\n this.successCallback( response, this.data, this.obj );\n }\n }\n };\n\n // Processing response from backend\n /**\n * Success Callback\n * @param {obj} result\n */\n successCallback( result ) {\n console.log( result );\n\n this.interactAccordion(result);\n\n if ( typeof result.total !== 'undefined' ) {\n this.scan_percent = 100 / result.total;\n }\n\n if ( typeof result.processed_items !== 'undefined') {\n if ( this.state === 'heuristic_analysis' && typeof result.total !== 0 ) {\n this.logRaw('

Heuristic Analysis

');\n }\n if ( this.state === 'signature_analysis' && typeof result.total !== 0 ) {\n this.logRaw('

Signature Analysis

');\n }\n\n this.logFileEntry( result.processed_items );\n }\n\n if ( typeof result.stage_data_for_logging !== 'undefined') {\n this.logStageEntry( result.stage_data_for_logging );\n }\n\n // Add link on shuffle salt if cured\n if (result.cured !== undefined && Number(result.cured) > 0) {\n this.showLinkForShuffleSalts(result.message);\n }\n\n if ( result.end !== true && result.end !== 1 ) {\n let processedPercents = this.percent_completed + result.processed * this.scan_percent;\n if (result.stage_data_for_logging.title === 'File System Analysis' && processedPercents > 100) {\n processedPercents = 100;\n }\n this.setPercents(processedPercents);\n this.offset = this.offset + result.processed;\n this.controller( result );\n } else {\n console.log( this.state +\n ' stage took ' +\n ( Math.round(new Date().getTime() /1000) - this.state_timer ) +\n ' seconds to complete' );\n this.state_timer = Math.round(new Date().getTime()/1000);\n this.setPercents( 100 );\n this.scan_percent = 0;\n this.offset = 0;\n setTimeout(() => {\n this.controller( result );\n }, 300);\n }\n };\n\n /**\n * Run interactive refresh for accordion.\n * @param {obj|string[]} result\n */\n interactAccordion(result) {\n // validation control\n if (result.hasOwnProperty('interactivity_data') &&\n result.interactivity_data.hasOwnProperty('update_text') &&\n result.interactivity_data.update_text &&\n result.interactivity_data.hasOwnProperty('refresh_data') &&\n result.interactivity_data.refresh_data.hasOwnProperty('do_refresh') &&\n result.interactivity_data.refresh_data.do_refresh &&\n result.interactivity_data.refresh_data.hasOwnProperty('control_tab') &&\n result.interactivity_data.refresh_data.control_tab\n ) {\n spbcReloadAccordion(\n result.interactivity_data.refresh_data.control_tab,\n result.interactivity_data.update_text,\n );\n }\n }\n\n /**\n * Function Error\n * @param {object} xhr\n * @param {string} status\n * @param {string} error\n */\n error( xhr, status, error ) {\n let errorOutput = this.errorOutput;\n\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\n console.log( status );\n console.log( error );\n console.log( xhr );\n\n if (status == 'error' && (error == '' || error == 'Not found')) {\n if (!this.tryCount) {\n this.tryCount = 0;\n this.retryLimit = 30;\n }\n this.tryCount++;\n console.log('Try #' + this.tryCount);\n this.setCoefficients(this.state);\n if (this.tryCount <= this.retryLimit) {\n this.pause();\n this.resume();\n this.controller();\n return;\n }\n }\n\n if ( xhr.status === 200 ) {\n if ( status === 'parsererror' ) {\n errorOutput( 'Unexpected response from server. See console for details.', this.state );\n console.log( '%c ' + xhr.responseText, 'color: pink;' );\n } else {\n let errorString = status;\n if ( typeof error !== 'undefined' ) {\n errorString += ' Additional info: ' + error;\n }\n errorOutput( errorString, this.state );\n }\n } else if (xhr.status === 500) {\n errorOutput( 'Internal server error.', this.state);\n } else {\n errorOutput('Unexpected response code: ' + xhr.status + '. Error: ' + status, this.state);\n }\n\n if ( this.progressbar ) {\n this.progressbar.fadeOut('slow');\n }\n\n this.end();\n };\n\n /**\n * Error Output\n * @param {string} errorMsg\n * @param {string} stage\n */\n errorOutput( errorMsg, stage ) {\n spbcModal.open().putError( errorMsg + '
Stage: ' + stage);\n };\n\n /**\n * Log Raw\n * @param {htmlString|Element|Text|Array|jQuery} messageToLog\n */\n logRaw(messageToLog) {\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\n jQuery('.spbc_log-wrapper').removeClass('spbc---hidden');\n jQuery('.spbc_log-wrapper .panel-body').prepend( messageToLog );\n };\n\n /**\n * Log File Entry\n * @param {array} items\n */\n logFileEntry(items) {\n for ( let key in items ) {\n if ( key ) {\n this.logRaw(\n '

' +\n this.getSiteUTCShiftedTimeString() + ' - ' +\n items[key].path + ' - ' + items[key].module +\n ': ' + items[key].status + '' +\n '

');\n }\n }\n };\n\n /**\n * Log Stage Entry\n * @param {obj} data\n */\n logStageEntry(data) {\n if (typeof jQuery('.panel-body .spbc_log-line span').first() !== 'undefined' &&\n typeof jQuery('.panel-body .spbc_log-line span').first()[0] !== 'undefined' &&\n jQuery('.panel-body .spbc_log-line span').first()[0].textContent === data.description\n ) {\n return;\n }\n this.logRaw( '

test ' +\n this.getSiteUTCShiftedTimeString() + ' - ' + '' +\n data.title + ' ' + '' + data.description + '

' );\n };\n\n /**\n * Show Link For Shuffle Salts\n * @param {string} message\n */\n showLinkForShuffleSalts(message) {\n jQuery('#spbc_notice_about_shuffle_link').remove();\n jQuery(jQuery('.spbc_tab--active .spbc_wrapper_field p')[1])\n .after(\n '
' +\n '' +\n message +\n '' +\n '
',\n );\n }\n\n /**\n * Get Site UTC Shifted Time String\n * @return {string}\n */\n getSiteUTCShiftedTimeString() {\n let utcShiftedTs = false;\n // gettings current system/browser offset\n let currentBrowserOffset = new Date().getTimezoneOffset();\n currentBrowserOffset = currentBrowserOffset * -1 * 1000 * 60;\n // chek if global ct object is defined\n if (typeof spbcScaner !== 'undefined' &&\n typeof spbcScaner.timezone_shift !== 'undefined' &&\n spbcScaner.timezone_shift !== false) {\n utcShiftedTs = Date.now() - currentBrowserOffset + (spbcScaner.timezone_shift * 1000);\n }\n let ctDate = utcShiftedTs ? new Date(utcShiftedTs) : new Date();\n // construct date string\n let shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\n let minutes = String(ctDate.getMinutes()).padStart(2, '0');\n let seconds = String(ctDate.getSeconds()).padStart(2, '0');\n return shortMonthName(ctDate) + ' ' +\n ctDate.getDate() + ' ' + ctDate.getFullYear() + ' ' +\n ctDate.getHours() + ':' + minutes + ':' + seconds;\n }\n}\n"],"names":["SpbcMalwareScanner","first_start","active","root","settings","states","state","offset","amount","amount_coefficient","total_scanned","scan_percent","percent_completed","paused","button","spinner","progress_overall","progressbar","progressbar_text","timeout","state_timer","constructor","properties","let","key","console","log","jQuery","length","removeClass","this","actionControl","start","resume","controller","pause","Math","round","Date","getTime","getNextState","setPercents","children","filter","addClass","show","html","spbcScaner","button_scan_pause","css","display","setTimeout","result","data","opt","button_scan_resume","end","reload","hide","button_scan_perform","plug","document","location","spbcSendAJAXRequest","action","notJson","callback","params","obj","accordion","header","heightStyle","collapsible","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","spbcScannerReloadScanInfo","insertBefore","method","type","success","successCallback","error","errorOutput","complete","context","spbcSettings","frontendAnalysisAmount","status","setCoefficients","coefficient","indexOf","percents","floor","text","response","responseText","msg","interactAccordion","total","processed_items","logRaw","logFileEntry","stage_data_for_logging","logStageEntry","undefined","cured","Number","showLinkForShuffleSalts","message","processedPercents","processed","title","hasOwnProperty","interactivity_data","update_text","refresh_data","do_refresh","control_tab","spbcReloadAccordion","xhr","tryCount","retryLimit","errorString","fadeOut","errorMsg","stage","spbcModal","open","putError","messageToLog","prepend","items","getSiteUTCShiftedTimeString","path","module","first","textContent","description","remove","after","utcShiftedTs","currentBrowserOffset","getTimezoneOffset","ctDate","timezone_shift","now","shortMonthName","Intl","DateTimeFormat","month","format","minutes","String","getMinutes","padStart","seconds","getSeconds","getDate","getFullYear","getHours"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-scanner-plugin.min.js","sources":["spbc-scanner-plugin.js"],"sourcesContent":["'use strict';\r\n\r\n/**\r\n * class SpbcMalwareScanner\r\n */\r\nclass SpbcMalwareScanner {/* eslint-disable-line no-unused-vars */\r\n first_start = true;\r\n\r\n active = false;\r\n\r\n root = '';\r\n settings = [];\r\n states = [\r\n 'get_cms_hashes',\r\n 'get_modules_hashes',\r\n 'clean_results',\r\n 'file_system_analysis',\r\n 'get_approved_hashes',\r\n 'get_denied_hashes',\r\n 'signature_analysis',\r\n 'heuristic_analysis',\r\n 'schedule_send_heuristic_suspicious_files',\r\n 'auto_cure_backup',\r\n 'auto_cure',\r\n 'os_cron_analysis',\r\n 'outbound_links',\r\n 'frontend_analysis',\r\n 'important_files_listing',\r\n 'send_results',\r\n ];\r\n state = null;\r\n offset = 0;\r\n amount = 0;\r\n amount_coefficient = 1;\r\n total_scanned = 0;\r\n scan_percent = 0;\r\n percent_completed = 0;\r\n\r\n paused = false;\r\n\r\n button = null;\r\n spinner = null;\r\n\r\n progress_overall = null;\r\n progressbar = null;\r\n progressbar_text = null;\r\n\r\n timeout = 60000;\r\n\r\n state_timer = 0;\r\n\r\n /**\r\n * constructor\r\n * @param {array} properties\r\n */\r\n constructor( properties ) {\r\n console.log('init');\r\n if (jQuery('#spbcscan-results-log-module').length) {\r\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\r\n }\r\n\r\n // Crunch for cure backups\r\n if ( typeof properties['settings']['auto_cure'] !== 'undefined' ) {\r\n properties['settings']['scanner__auto_cure_backup'] = '1';\r\n }\r\n\r\n for ( let key in properties ) {\r\n if ( typeof this[key] !== 'undefined' ) {\r\n this[key] = properties[key];\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Function Action Control\r\n */\r\n actionControl() {\r\n if (this.state === null) {\r\n this.start();\r\n } else if (this.paused) {\r\n this.resume();\r\n this.controller();\r\n } else {\r\n this.pause();\r\n }\r\n };\r\n\r\n /**\r\n * Function Start\r\n */\r\n start() {\r\n this.active = true;\r\n this.state_timer = Math.round(new Date().getTime() /1000);\r\n\r\n this.state = this.getNextState( null );\r\n\r\n this.setPercents( 0 );\r\n this.scan_percent = 0;\r\n this.offset = 0;\r\n this.progress_overall.children('span')\r\n .removeClass('spbc_bold')\r\n .filter('.spbc_overall_scan_status_' + this.state)\r\n .addClass('spbc_bold');\r\n\r\n this.progressbar.show(500);\r\n this.progress_overall.show(500);\r\n this.button.html(spbcScaner.button_scan_pause);\r\n this.spinner.css({display: 'inline'});\r\n\r\n setTimeout(() => {\r\n this.controller();\r\n }, 1000);\r\n };\r\n\r\n /**\r\n * Function Pause\r\n * @param {*} result\r\n * @param {*} data\r\n * @param {*} opt\r\n */\r\n pause( result, data, opt ) {\r\n console.log('PAUSE');\r\n this.button.html(spbcScaner.button_scan_resume);\r\n this.spinner.css({display: 'none'});\r\n this.paused = true;\r\n this.active = false;\r\n };\r\n\r\n /**\r\n * Function Resume\r\n * @param {*} opt\r\n */\r\n resume( opt ) {\r\n console.log('RESUME');\r\n this.button.html(spbcScaner.button_scan_pause);\r\n this.spinner.css({display: 'inline'});\r\n this.paused = false;\r\n this.active = true;\r\n };\r\n\r\n /**\r\n * Function End\r\n * @param {bool} reload\r\n */\r\n end( reload ) {\r\n this.progressbar.hide(500);\r\n this.progress_overall.hide(500);\r\n this.button.html(spbcScaner.button_scan_perform);\r\n this.spinner.css({display: 'none'});\r\n this.state = null;\r\n this.plug = false;\r\n this.total_scanned = 0;\r\n this.active = false;\r\n\r\n if (reload) {\r\n document.location = document.location;\r\n } else {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_tab__reload_accordion'},\r\n {\r\n notJson: true,\r\n callback: function(result, data, params, obj) {\r\n jQuery(obj).accordion('destroy')\r\n .html(result)\r\n .accordion({\r\n header: 'h3',\r\n heightStyle: 'content',\r\n collapsible: true,\r\n active: false,\r\n });\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n spbcScannerReloadScanInfo();\r\n },\r\n },\r\n jQuery('#spbc_scan_accordion'),\r\n );\r\n\r\n if (!jQuery('#spbc_scanner_clear').length) {\r\n let clearLink = '

Clear scanner logs


';\r\n jQuery(clearLink).insertBefore('#spbcscan-scanner-caption');\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Function Controller\r\n * @param {obj} result\r\n */\r\n controller( result ) {\r\n console.log(this.state);\r\n\r\n // The current stage is over. Switching to the new one\r\n if ( typeof result !== 'undefined' && result.end ) {\r\n this.state = this.getNextState( this.state );\r\n\r\n // End condition\r\n if (typeof this.state === 'undefined') {\r\n this.end();\r\n return;\r\n }\r\n\r\n // Set percent to 0\r\n this.setPercents( 0 );\r\n this.scan_percent = 0;\r\n this.offset = 0;\r\n\r\n // Changing visualizing of the current stage\r\n this.progress_overall.children('span')\r\n .removeClass('spbc_bold')\r\n .filter('.spbc_overall_scan_status_' + this.state)\r\n .addClass('spbc_bold');\r\n }\r\n\r\n // Break execution if paused\r\n if ( this.paused === true ) {\r\n return;\r\n }\r\n\r\n // // AJAX params\r\n let data = {\r\n action: 'spbc_scanner_controller_front',\r\n method: this.state,\r\n offset: this.offset,\r\n };\r\n\r\n let params = {\r\n type: 'GET',\r\n success: this.success,\r\n callback: this.successCallback,\r\n error: this.error,\r\n errorOutput: this.errorOutput,\r\n complete: null,\r\n context: this,\r\n timeout: 120000,\r\n };\r\n\r\n switch (this.state) {\r\n case 'get_modules_hashes': this.amount = 2; break;\r\n case 'clear_table': this.amount = 10000; break;\r\n case 'file_system_analysis': this.amount = 700; break;\r\n case 'auto_cure': this.amount = 5; break;\r\n case 'outbound_links': this.amount = 10; break;\r\n case 'frontend_analysis': this.amount = spbcSettings.frontendAnalysisAmount; break;\r\n case 'signature_analysis': this.amount = 10; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\r\n case 'heuristic_analysis': this.amount = 4; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\r\n case 'schedule_send_heuristic_suspicious_files': this.amount = 1; break;\r\n }\r\n\r\n data.amount = Math.round(this.amount * this.amount_coefficient);\r\n\r\n spbcSendAJAXRequest(\r\n data,\r\n params,\r\n jQuery('#spbc_scan_accordion'),\r\n );\r\n };\r\n\r\n /**\r\n * Set Coefficients\r\n * @param {string} state\r\n */\r\n setCoefficients( state ) {\r\n let coefficient = this.amount_coefficient;\r\n switch (state) {\r\n case 'file_system_analysis': coefficient *= 1.5; break;\r\n }\r\n this.amount_coefficient = coefficient;\r\n };\r\n\r\n /**\r\n * Get Next State\r\n * @param {string} state\r\n * @return {number}\r\n */\r\n getNextState( state ) {\r\n state = state === null ? this.states[0] : this.states[this.states.indexOf( state ) + 1];\r\n\r\n if (typeof this.settings['scanner__' + state] !== 'undefined' && +this.settings['scanner__' + state] === 0) {\r\n state = this.getNextState( state );\r\n }\r\n\r\n return state;\r\n };\r\n\r\n /**\r\n * Set Percents\r\n * @param {number} percents\r\n */\r\n setPercents( percents ) {\r\n this.percent_completed = Math.floor( percents * 100 ) / 100;\r\n this.progressbar.progressbar( 'option', 'value', this.percent_completed );\r\n this.progressbar_text.text( spbcScaner['progressbar_' + this.state] + ' - ' + this.percent_completed + '%' );\r\n };\r\n\r\n /**\r\n * Function Success\r\n * @param {obj} response\r\n */\r\n success( response ) {\r\n if ( !! response.error ) {\r\n this.error(\r\n {status: 200, responseText: response.error},\r\n response.error,\r\n response.msg,\r\n );\r\n } else {\r\n if ( this.successCallback ) {\r\n this.successCallback( response, this.data, this.obj );\r\n }\r\n }\r\n };\r\n\r\n // Processing response from backend\r\n /**\r\n * Success Callback\r\n * @param {obj} result\r\n */\r\n successCallback( result ) {\r\n console.log( result );\r\n\r\n this.interactAccordion(result);\r\n\r\n if ( typeof result.total !== 'undefined' ) {\r\n this.scan_percent = 100 / result.total;\r\n }\r\n\r\n if ( typeof result.processed_items !== 'undefined') {\r\n if ( this.state === 'heuristic_analysis' && typeof result.total !== 0 ) {\r\n this.logRaw('

Heuristic Analysis

');\r\n }\r\n if ( this.state === 'signature_analysis' && typeof result.total !== 0 ) {\r\n this.logRaw('

Signature Analysis

');\r\n }\r\n\r\n this.logFileEntry( result.processed_items );\r\n }\r\n\r\n if ( typeof result.stage_data_for_logging !== 'undefined') {\r\n this.logStageEntry( result.stage_data_for_logging );\r\n }\r\n\r\n // Add link on shuffle salt if cured\r\n if (result.cured !== undefined && Number(result.cured) > 0) {\r\n this.showLinkForShuffleSalts(result.message);\r\n }\r\n\r\n if ( result.end !== true && result.end !== 1 ) {\r\n let processedPercents = this.percent_completed + result.processed * this.scan_percent;\r\n if (result.stage_data_for_logging.title === 'File System Analysis' && processedPercents > 100) {\r\n processedPercents = 100;\r\n }\r\n this.setPercents(processedPercents);\r\n this.offset = this.offset + result.processed;\r\n this.controller( result );\r\n } else {\r\n console.log( this.state +\r\n ' stage took ' +\r\n ( Math.round(new Date().getTime() /1000) - this.state_timer ) +\r\n ' seconds to complete' );\r\n this.state_timer = Math.round(new Date().getTime()/1000);\r\n this.setPercents( 100 );\r\n this.scan_percent = 0;\r\n this.offset = 0;\r\n setTimeout(() => {\r\n this.controller( result );\r\n }, 300);\r\n }\r\n };\r\n\r\n /**\r\n * Run interactive refresh for accordion.\r\n * @param {obj|string[]} result\r\n */\r\n interactAccordion(result) {\r\n // validation control\r\n if (result.hasOwnProperty('interactivity_data') &&\r\n result.interactivity_data.hasOwnProperty('update_text') &&\r\n result.interactivity_data.update_text &&\r\n result.interactivity_data.hasOwnProperty('refresh_data') &&\r\n result.interactivity_data.refresh_data.hasOwnProperty('do_refresh') &&\r\n result.interactivity_data.refresh_data.do_refresh &&\r\n result.interactivity_data.refresh_data.hasOwnProperty('control_tab') &&\r\n result.interactivity_data.refresh_data.control_tab\r\n ) {\r\n spbcReloadAccordion(\r\n result.interactivity_data.refresh_data.control_tab,\r\n result.interactivity_data.update_text,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Function Error\r\n * @param {object} xhr\r\n * @param {string} status\r\n * @param {string} error\r\n */\r\n error( xhr, status, error ) {\r\n let errorOutput = this.errorOutput;\r\n\r\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\r\n console.log( status );\r\n console.log( error );\r\n console.log( xhr );\r\n\r\n if (status == 'error' && (error == '' || error == 'Not found')) {\r\n if (!this.tryCount) {\r\n this.tryCount = 0;\r\n this.retryLimit = 30;\r\n }\r\n this.tryCount++;\r\n console.log('Try #' + this.tryCount);\r\n this.setCoefficients(this.state);\r\n if (this.tryCount <= this.retryLimit) {\r\n this.pause();\r\n this.resume();\r\n this.controller();\r\n return;\r\n }\r\n }\r\n\r\n if ( xhr.status === 200 ) {\r\n if ( status === 'parsererror' ) {\r\n errorOutput( 'Unexpected response from server. See console for details.', this.state );\r\n console.log( '%c ' + xhr.responseText, 'color: pink;' );\r\n } else {\r\n let errorString = status;\r\n if ( typeof error !== 'undefined' ) {\r\n errorString += ' Additional info: ' + error;\r\n }\r\n errorOutput( errorString, this.state );\r\n }\r\n } else if (xhr.status === 500) {\r\n errorOutput( 'Internal server error.', this.state);\r\n } else {\r\n errorOutput('Unexpected response code: ' + xhr.status + '. Error: ' + status, this.state);\r\n }\r\n\r\n if ( this.progressbar ) {\r\n this.progressbar.fadeOut('slow');\r\n }\r\n\r\n this.end();\r\n };\r\n\r\n /**\r\n * Error Output\r\n * @param {string} errorMsg\r\n * @param {string} stage\r\n */\r\n errorOutput( errorMsg, stage ) {\r\n spbcModal.open().putError( errorMsg + '
Stage: ' + stage);\r\n };\r\n\r\n /**\r\n * Log Raw\r\n * @param {htmlString|Element|Text|Array|jQuery} messageToLog\r\n */\r\n logRaw(messageToLog) {\r\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\r\n jQuery('.spbc_log-wrapper').removeClass('spbc---hidden');\r\n jQuery('.spbc_log-wrapper .panel-body').prepend( messageToLog );\r\n };\r\n\r\n /**\r\n * Log File Entry\r\n * @param {array} items\r\n */\r\n logFileEntry(items) {\r\n for ( let key in items ) {\r\n if ( key ) {\r\n this.logRaw(\r\n '

' +\r\n this.getSiteUTCShiftedTimeString() + ' - ' +\r\n items[key].path + ' - ' + items[key].module +\r\n ': ' + items[key].status + '' +\r\n '

');\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Log Stage Entry\r\n * @param {obj} data\r\n */\r\n logStageEntry(data) {\r\n if (typeof jQuery('.panel-body .spbc_log-line span').first() !== 'undefined' &&\r\n typeof jQuery('.panel-body .spbc_log-line span').first()[0] !== 'undefined' &&\r\n jQuery('.panel-body .spbc_log-line span').first()[0].textContent === data.description\r\n ) {\r\n return;\r\n }\r\n this.logRaw( '

test ' +\r\n this.getSiteUTCShiftedTimeString() + ' - ' + '' +\r\n data.title + ' ' + '' + data.description + '

' );\r\n };\r\n\r\n /**\r\n * Show Link For Shuffle Salts\r\n * @param {string} message\r\n */\r\n showLinkForShuffleSalts(message) {\r\n jQuery('#spbc_notice_about_shuffle_link').remove();\r\n jQuery(jQuery('.spbc_tab--active .spbc_wrapper_field p')[1])\r\n .after(\r\n '
' +\r\n '' +\r\n message +\r\n '' +\r\n '
',\r\n );\r\n }\r\n\r\n /**\r\n * Get Site UTC Shifted Time String\r\n * @return {string}\r\n */\r\n getSiteUTCShiftedTimeString() {\r\n let utcShiftedTs = false;\r\n // gettings current system/browser offset\r\n let currentBrowserOffset = new Date().getTimezoneOffset();\r\n currentBrowserOffset = currentBrowserOffset * -1 * 1000 * 60;\r\n // chek if global ct object is defined\r\n if (typeof spbcScaner !== 'undefined' &&\r\n typeof spbcScaner.timezone_shift !== 'undefined' &&\r\n spbcScaner.timezone_shift !== false) {\r\n utcShiftedTs = Date.now() - currentBrowserOffset + (spbcScaner.timezone_shift * 1000);\r\n }\r\n let ctDate = utcShiftedTs ? new Date(utcShiftedTs) : new Date();\r\n // construct date string\r\n let shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\r\n let minutes = String(ctDate.getMinutes()).padStart(2, '0');\r\n let seconds = String(ctDate.getSeconds()).padStart(2, '0');\r\n return shortMonthName(ctDate) + ' ' +\r\n ctDate.getDate() + ' ' + ctDate.getFullYear() + ' ' +\r\n ctDate.getHours() + ':' + minutes + ':' + seconds;\r\n }\r\n}\r\n"],"names":["SpbcMalwareScanner","first_start","active","root","settings","states","state","offset","amount","amount_coefficient","total_scanned","scan_percent","percent_completed","paused","button","spinner","progress_overall","progressbar","progressbar_text","timeout","state_timer","constructor","properties","let","key","console","log","jQuery","length","removeClass","this","actionControl","start","resume","controller","pause","Math","round","Date","getTime","getNextState","setPercents","children","filter","addClass","show","html","spbcScaner","button_scan_pause","css","display","setTimeout","result","data","opt","button_scan_resume","end","reload","hide","button_scan_perform","plug","document","location","spbcSendAJAXRequest","action","notJson","callback","params","obj","accordion","header","heightStyle","collapsible","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","spbcScannerReloadScanInfo","insertBefore","method","type","success","successCallback","error","errorOutput","complete","context","spbcSettings","frontendAnalysisAmount","status","setCoefficients","coefficient","indexOf","percents","floor","text","response","responseText","msg","interactAccordion","total","processed_items","logRaw","logFileEntry","stage_data_for_logging","logStageEntry","undefined","cured","Number","showLinkForShuffleSalts","message","processedPercents","processed","title","hasOwnProperty","interactivity_data","update_text","refresh_data","do_refresh","control_tab","spbcReloadAccordion","xhr","tryCount","retryLimit","errorString","fadeOut","errorMsg","stage","spbcModal","open","putError","messageToLog","prepend","items","getSiteUTCShiftedTimeString","path","module","first","textContent","description","remove","after","utcShiftedTs","currentBrowserOffset","getTimezoneOffset","ctDate","timezone_shift","now","shortMonthName","Intl","DateTimeFormat","month","format","minutes","String","getMinutes","padStart","seconds","getSeconds","getDate","getFullYear","getHours"],"mappings":"MAKMA,mBACFC,YAAc,CAAA,EAEdC,OAAS,CAAA,EAETC,KAAO,GACPC,SAAW,GACXC,OAAS,CACL,iBACA,qBACA,gBACA,uBACA,sBACA,oBACA,qBACA,qBACA,2CACA,mBACA,YACA,mBACA,iBACA,oBACA,0BACA,gBAEJC,MAAQ,KACRC,OAAS,EACTC,OAAS,EACTC,mBAAqB,EACrBC,cAAgB,EAChBC,aAAe,EACfC,kBAAoB,EAEpBC,OAAS,CAAA,EAETC,OAAS,KACTC,QAAU,KAEVC,iBAAmB,KACnBC,YAAc,KACdC,iBAAmB,KAEnBC,QAAU,IAEVC,YAAc,EAMdC,YAAaC,GAWT,IAAMC,IAAIC,KAVVC,QAAQC,IAAI,MAAM,EACdC,OAAO,8BAA8B,EAAEC,QACvCD,OAAO,sBAAsB,EAAEE,YAAY,eAAe,EAIV,KAAA,IAAxCP,EAAqB,SAAa,YAC1CA,EAAqB,SAA6B,0BAAI,KAGzCA,EACa,KAAA,IAAdQ,KAAKN,KACbM,KAAKN,GAAOF,EAAWE,GAGnC,CAKAO,gBACuB,OAAfD,KAAKxB,MACLwB,KAAKE,MAAM,EACJF,KAAKjB,QACZiB,KAAKG,OAAO,EACZH,KAAKI,WAAW,GAEhBJ,KAAKK,MAAM,CAEnB,CAKAH,QACIF,KAAK5B,OAAS,CAAA,EACd4B,KAAKV,YAAcgB,KAAKC,OAAM,IAAIC,MAAOC,QAAQ,EAAG,GAAI,EAExDT,KAAKxB,MAAQwB,KAAKU,aAAc,IAAK,EAErCV,KAAKW,YAAa,CAAE,EACpBX,KAAKnB,aAAe,EACpBmB,KAAKvB,OAAS,EACduB,KAAKd,iBAAiB0B,SAAS,MAAM,EAChCb,YAAY,WAAW,EACvBc,OAAO,6BAA+Bb,KAAKxB,KAAK,EAChDsC,SAAS,WAAW,EAEzBd,KAAKb,YAAY4B,KAAK,GAAG,EACzBf,KAAKd,iBAAiB6B,KAAK,GAAG,EAC9Bf,KAAKhB,OAAOgC,KAAKC,WAAWC,iBAAiB,EAC7ClB,KAAKf,QAAQkC,IAAI,CAACC,QAAS,QAAQ,CAAC,EAEpCC,WAAW,KACPrB,KAAKI,WAAW,CACpB,EAAG,GAAI,CACX,CAQAC,MAAOiB,EAAQC,EAAMC,GACjB7B,QAAQC,IAAI,OAAO,EACnBI,KAAKhB,OAAOgC,KAAKC,WAAWQ,kBAAkB,EAC9CzB,KAAKf,QAAQkC,IAAI,CAACC,QAAS,MAAM,CAAC,EAClCpB,KAAKjB,OAAS,CAAA,EACdiB,KAAK5B,OAAS,CAAA,CAClB,CAMA+B,OAAQqB,GACJ7B,QAAQC,IAAI,QAAQ,EACpBI,KAAKhB,OAAOgC,KAAKC,WAAWC,iBAAiB,EAC7ClB,KAAKf,QAAQkC,IAAI,CAACC,QAAS,QAAQ,CAAC,EACpCpB,KAAKjB,OAAS,CAAA,EACdiB,KAAK5B,OAAS,CAAA,CAClB,CAMAsD,IAAKC,GACD3B,KAAKb,YAAYyC,KAAK,GAAG,EACzB5B,KAAKd,iBAAiB0C,KAAK,GAAG,EAC9B5B,KAAKhB,OAAOgC,KAAKC,WAAWY,mBAAmB,EAC/C7B,KAAKf,QAAQkC,IAAI,CAACC,QAAS,MAAM,CAAC,EAClCpB,KAAKxB,MAAQ,KACbwB,KAAK8B,KAAO,CAAA,EACZ9B,KAAKpB,cAAgB,EACrBoB,KAAK5B,OAAS,CAAA,EAEVuD,EACAI,SAASC,SAAWD,SAASC,UAE7BC,oBACI,CAACC,OAAQ,oCAAoC,EAC7C,CACIC,QAAS,CAAA,EACTC,SAAU,SAASd,EAAQC,EAAMc,EAAQC,GACrCzC,OAAOyC,CAAG,EAAEC,UAAU,SAAS,EAC1BvB,KAAKM,CAAM,EACXiB,UAAU,CACPC,OAAQ,KACRC,YAAa,UACbC,YAAa,CAAA,EACbtE,OAAQ,CAAA,CACZ,CAAC,EACLuE,yBAAyB,EACzBC,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,EAClBC,0BAA0B,CAC9B,CACJ,EACAnD,OAAO,sBAAsB,CACjC,EAEKA,OAAO,qBAAqB,EAAEC,QAI/BD,OAHgB,wLAGA,EAAEoD,aAAa,2BAA2B,EAGtE,CAMA7C,WAAYkB,GAIR,GAHA3B,QAAQC,IAAII,KAAKxB,KAAK,EAGC,KAAA,IAAX8C,GAA0BA,EAAOI,IAAM,CAI/C,GAHA1B,KAAKxB,MAAQwB,KAAKU,aAAcV,KAAKxB,KAAM,EAGjB,KAAA,IAAfwB,KAAKxB,MAEZ,OADAwB,KAAAA,KAAK0B,IAAI,EAKb1B,KAAKW,YAAa,CAAE,EACpBX,KAAKnB,aAAe,EACpBmB,KAAKvB,OAAS,EAGduB,KAAKd,iBAAiB0B,SAAS,MAAM,EAChCb,YAAY,WAAW,EACvBc,OAAO,6BAA+Bb,KAAKxB,KAAK,EAChDsC,SAAS,WAAW,CAC7B,CAGA,GAAqB,CAAA,IAAhBd,KAAKjB,OAAV,CAKAU,IAAI8B,EAAO,CACPW,OAAQ,gCACRgB,OAAQlD,KAAKxB,MACbC,OAAQuB,KAAKvB,MACjB,EAEI4D,EAAS,CACTc,KAAM,MACNC,QAASpD,KAAKoD,QACdhB,SAAUpC,KAAKqD,gBACfC,MAAOtD,KAAKsD,MACZC,YAAavD,KAAKuD,YAClBC,SAAU,KACVC,QAASzD,KACTX,QAAS,IACb,EAEA,OAAQW,KAAKxB,OACb,IAAK,qBAAsBwB,KAAKtB,OAAS,EAAG,MAC5C,IAAK,cAAesB,KAAKtB,OAAS,IAAO,MACzC,IAAK,uBAAwBsB,KAAKtB,OAAS,IAAK,MAChD,IAAK,YAAasB,KAAKtB,OAAS,EAAG,MACnC,IAAK,iBAAkBsB,KAAKtB,OAAS,GAAI,MACzC,IAAK,oBAAqBsB,KAAKtB,OAASgF,aAAaC,uBAAwB,MAC7E,IAAK,qBAAsB3D,KAAKtB,OAAS,GAAI6C,EAAKqC,OAAS,qCAAsC,MACjG,IAAK,qBAAsB5D,KAAKtB,OAAS,EAAG6C,EAAKqC,OAAS,qCAAsC,MAChG,IAAK,2CAA4C5D,KAAKtB,OAAS,CAC/D,CAEA6C,EAAK7C,OAAS4B,KAAKC,MAAMP,KAAKtB,OAASsB,KAAKrB,kBAAkB,EAE9DsD,oBACIV,EACAc,EACAxC,OAAO,sBAAsB,CACjC,CAtCA,CAuCJ,CAMAgE,gBAAiBrF,GACbiB,IAAIqE,EAAc9D,KAAKrB,mBAElB,yBADGH,IACqBsF,GAAe,KAE5C9D,KAAKrB,mBAAqBmF,CAC9B,CAOApD,aAAclC,GAOV,OANAA,EAAkB,OAAVA,EAAiBwB,KAAKzB,OAAO,GAAKyB,KAAKzB,OAAOyB,KAAKzB,OAAOwF,QAASvF,CAAM,EAAI,GAGjFA,EAD8C,KAAA,IAAvCwB,KAAK1B,SAAS,YAAcE,IAAkE,GAAxC,CAACwB,KAAK1B,SAAS,YAAcE,GAClFwB,KAAKU,aAAclC,CAAM,EAG9BA,CACX,CAMAmC,YAAaqD,GACThE,KAAKlB,kBAAoBwB,KAAK2D,MAAkB,IAAXD,CAAe,EAAI,IACxDhE,KAAKb,YAAYA,YAAa,SAAU,QAASa,KAAKlB,iBAAkB,EACxEkB,KAAKZ,iBAAiB8E,KAAMjD,WAAW,eAAiBjB,KAAKxB,OAAS,MAAQwB,KAAKlB,kBAAoB,GAAI,CAC/G,CAMAsE,QAASe,GACGA,EAASb,MACbtD,KAAKsD,MACD,CAACM,OAAQ,IAAKQ,aAAcD,EAASb,KAAK,EAC1Ca,EAASb,MACTa,EAASE,GACb,EAEKrE,KAAKqD,iBACNrD,KAAKqD,gBAAiBc,EAAUnE,KAAKuB,KAAMvB,KAAKsC,GAAI,CAGhE,CAOAe,gBAAiB/B,GA6Bb,GA5BA3B,QAAQC,IAAK0B,CAAO,EAEpBtB,KAAKsE,kBAAkBhD,CAAM,EAEA,KAAA,IAAjBA,EAAOiD,QACfvE,KAAKnB,aAAe,IAAMyC,EAAOiD,OAGE,KAAA,IAA3BjD,EAAOkD,kBACK,uBAAfxE,KAAKxB,OAA0D,IAAxB,OAAO8C,EAAOiD,OACtDvE,KAAKyE,OAAO,2DAA2D,EAEvD,uBAAfzE,KAAKxB,OAA0D,IAAxB,OAAO8C,EAAOiD,OACtDvE,KAAKyE,OAAO,2DAA2D,EAG3EzE,KAAK0E,aAAcpD,EAAOkD,eAAgB,GAGA,KAAA,IAAlClD,EAAOqD,wBACf3E,KAAK4E,cAAetD,EAAOqD,sBAAuB,EAIjCE,KAAAA,IAAjBvD,EAAOwD,OAA8C,EAAvBC,OAAOzD,EAAOwD,KAAK,GACjD9E,KAAKgF,wBAAwB1D,EAAO2D,OAAO,EAG3B,CAAA,IAAf3D,EAAOI,KAA+B,IAAfJ,EAAOI,IAAY,CAC3CjC,IAAIyF,EAAoBlF,KAAKlB,kBAAoBwC,EAAO6D,UAAYnF,KAAKnB,aAC7B,yBAAxCyC,EAAOqD,uBAAuBS,OAAwD,IAApBF,IAClEA,EAAoB,KAExBlF,KAAKW,YAAYuE,CAAiB,EAClClF,KAAKvB,OAASuB,KAAKvB,OAAS6C,EAAO6D,UACnCnF,KAAKI,WAAYkB,CAAO,CAC5B,MACI3B,QAAQC,IAAKI,KAAKxB,MACd,gBACE8B,KAAKC,OAAM,IAAIC,MAAOC,QAAQ,EAAG,GAAI,EAAIT,KAAKV,aAChD,sBAAuB,EAC3BU,KAAKV,YAAcgB,KAAKC,OAAM,IAAIC,MAAOC,QAAQ,EAAE,GAAI,EACvDT,KAAKW,YAAa,GAAI,EACtBX,KAAKnB,aAAe,EACpBmB,KAAKvB,OAAS,EACd4C,WAAW,KACPrB,KAAKI,WAAYkB,CAAO,CAC5B,EAAG,GAAG,CAEd,CAMAgD,kBAAkBhD,GAEVA,EAAO+D,eAAe,oBAAoB,GAC1C/D,EAAOgE,mBAAmBD,eAAe,aAAa,GACtD/D,EAAOgE,mBAAmBC,aAC1BjE,EAAOgE,mBAAmBD,eAAe,cAAc,GACvD/D,EAAOgE,mBAAmBE,aAAaH,eAAe,YAAY,GAClE/D,EAAOgE,mBAAmBE,aAAaC,YACvCnE,EAAOgE,mBAAmBE,aAAaH,eAAe,aAAa,GACnE/D,EAAOgE,mBAAmBE,aAAaE,aAEvCC,oBACIrE,EAAOgE,mBAAmBE,aAAaE,YACvCpE,EAAOgE,mBAAmBC,WAC9B,CAER,CAQAjC,MAAOsC,EAAKhC,EAAQN,GAChB7D,IAAI8D,EAAcvD,KAAKuD,YAOvB,GALA5D,QAAQC,IAAK,sBAAuB,aAAc,EAClDD,QAAQC,IAAKgE,CAAO,EACpBjE,QAAQC,IAAK0D,CAAM,EACnB3D,QAAQC,IAAKgG,CAAI,EAEH,SAAVhC,IAA+B,IAATN,GAAwB,aAATA,KAChCtD,KAAK6F,WACN7F,KAAK6F,SAAW,EAChB7F,KAAK8F,WAAa,IAEtB9F,KAAK6F,QAAQ,GACblG,QAAQC,IAAI,QAAUI,KAAK6F,QAAQ,EACnC7F,KAAK6D,gBAAgB7D,KAAKxB,KAAK,EAC3BwB,KAAK6F,UAAY7F,KAAK8F,YACtB9F,KAAKK,MAAM,EACXL,KAAKG,OAAO,EACZH,KAAKI,WAAW,MAXxB,CAgBA,GAAoB,MAAfwF,EAAIhC,OACL,GAAgB,gBAAXA,EACDL,EAAa,4DAA6DvD,KAAKxB,KAAM,EACrFmB,QAAQC,IAAK,MAAQgG,EAAIxB,aAAc,cAAe,MACnD,CACH3E,IAAIsG,EAAcnC,EACI,KAAA,IAAVN,IACRyC,GAAe,qBAAuBzC,GAE1CC,EAAawC,EAAa/F,KAAKxB,KAAM,CACzC,MACsB,MAAfoH,EAAIhC,OACXL,EAAa,yBAA0BvD,KAAKxB,KAAK,EAEjD+E,EAAY,6BAA+BqC,EAAIhC,OAAS,YAAcA,EAAQ5D,KAAKxB,KAAK,EAGvFwB,KAAKb,aACNa,KAAKb,YAAY6G,QAAQ,MAAM,EAGnChG,KAAK0B,IAAI,CAvBT,CAwBJ,CAOA6B,YAAa0C,EAAUC,GACnBC,UAAUC,KAAK,EAAEC,SAAUJ,EAAW,cAAgBC,CAAK,CAC/D,CAMAzB,OAAO6B,GACHzG,OAAO,sBAAsB,EAAEE,YAAY,eAAe,EAC1DF,OAAO,mBAAmB,EAAEE,YAAY,eAAe,EACvDF,OAAO,+BAA+B,EAAE0G,QAASD,CAAa,CAClE,CAMA5B,aAAa8B,GACT,IAAM/G,IAAIC,KAAO8G,EACR9G,GACDM,KAAKyE,OACD,4BACAzE,KAAKyG,4BAA4B,EAAI,MACrCD,EAAM9G,GAAKgH,KAAO,MAAQF,EAAM9G,GAAKiH,OACrC,QAAUH,EAAM9G,GAAKkE,OACrB,UAAM,CAGtB,CAMAgB,cAAcrD,GACwD,KAAA,IAAvD1B,OAAO,kCAAkC,EAAE+G,MAAM,GACS,KAAA,IAA1D/G,OAAO,kCAAkC,EAAE+G,MAAM,EAAE,IAC1D/G,OAAO,kCAAkC,EAAE+G,MAAM,EAAE,GAAGC,cAAgBtF,EAAKuF,aAI/E9G,KAAKyE,OAAQ,iCACTzE,KAAKyG,4BAA4B,EAAY,SAC7ClF,EAAK6D,MAAkB,cAAW7D,EAAKuF,YAAc,aAAc,CAC3E,CAMA9B,wBAAwBC,GACpBpF,OAAO,iCAAiC,EAAEkH,OAAO,EACjDlH,OAAOA,OAAO,yCAAyC,EAAE,EAAE,EACtDmH,MACG,uKAEA/B,EAEA,YACJ,CACR,CAMAwB,8BACIhH,IAAIwH,EAAe,CAAA,EAEnBxH,IACAyH,EAA8C,CAAC,GADpB,IAAI1G,MAAO2G,kBAAkB,EACL,IAAO,GAOtDC,GAFAH,EAHsB,aAAtB,OAAOhG,YAC8B,KAAA,IAA9BA,WAAWoG,gBACY,CAAA,IAA9BpG,WAAWoG,eACI7G,KAAK8G,IAAI,EAAIJ,EAAoD,IAA5BjG,WAAWoG,eAEtDJ,GAAe,IAAIzG,KAAKyG,CAAY,EAAI,IAAIzG,KAErD+G,EAAiB,IAAIC,KAAKC,eAAe,QAAS,CAACC,MAAO,OAAO,CAAC,EAAEC,OACpEC,EAAUC,OAAOT,EAAOU,WAAW,CAAC,EAAEC,SAAS,EAAG,GAAG,EACrDC,EAAUH,OAAOT,EAAOa,WAAW,CAAC,EAAEF,SAAS,EAAG,GAAG,EACzD,OAAOR,EAAeH,CAAM,EAAI,IAC5BA,EAAOc,QAAQ,EAAI,IAAMd,EAAOe,YAAY,EAAI,IAChDf,EAAOgB,SAAS,EAAI,IAAMR,EAAU,IAAMI,CAClD,CACJ"} \ No newline at end of file diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index c92ce8e2c..1915b73c9 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function() { // eslint-disable-line no-extend-native\n let formatted = this;\n /* eslint-disable guard-for-in */\n for ( let arg in arguments ) { // eslint-disable-line prefer-rest-params\n let beforeFormatted = formatted.substring(0, formatted.indexOf('%s', 0));\n let afterFormatted = formatted.substring(formatted.indexOf('%s', 0)+2, formatted.length);\n formatted = beforeFormatted + arguments[arg] + afterFormatted; // eslint-disable-line prefer-rest-params\n }\n return formatted;\n};\n\n/**\n * Switching tabs\n *\n * @param {object} tab\n * @param {object} params\n */\nfunction spbcSwitchTab(tab, params) {\n let tabName = tab.classList[1].replace('spbc_tab_nav-', '');\n\n // update url\n let searchParams = new URLSearchParams(window.location.search);\n searchParams.set('spbc_tab', tabName);\n let hashParam = window.location.hash;\n let newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n // Hiding a tab 'Backups' if exist\n if (searchParams.get('spbc_tab') !== 'backups') {\n jQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n jQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n jQuery('.spbc_tab').removeClass('spbc_tab--active');\n jQuery(tab).addClass('spbc_tab_nav--active');\n jQuery('.spbc_tab-' + tabName).addClass('spbc_tab--active');\n\n if (!jQuery(tab).data('loaded')) {\n let data = {\n action: 'spbc_settings__draw_elements',\n tab_name: tabName,\n security: spbcSettings.ajax_nonce,\n };\n params = {\n callback: spbcDrawSettingsCallback,\n notJson: true,\n additional: params || null,\n };\n spbcSendAJAXRequest( data, params, tab );\n } else if (params && params.action) {\n switch (params.action) {\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function() {\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n}\n\n/**\n * Draws settings\n *\n * @param {*} result\n * @param {*} data\n * @param {*} params\n * @param {*} obj\n */\nfunction spbcDrawSettingsCallback(result, data, params, obj) {\n jQuery(obj).data('loaded', true);\n jQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n let tab = jQuery('.spbc_tab-'+data.tab_name);\n tab.addClass('spbc_tab--active');\n\n jQuery(document).off( 'click', '.spbc_long_description__show');\n jQuery(document).on('click', '.spbc_long_description__show', function() {\n self = jQuery(this);\n spbcSettingsShowDescription(self, self.attr('setting'));\n });\n\n jQuery(document).off( 'click', '.spbc_long_recommendation__show');\n jQuery(document).on('click', '.spbc_long_recommendation__show', function() {\n self = jQuery(this);\n spbcSettingsShowRecommendation(self, self.attr('setting'));\n });\n\n if (params.additional) {\n switch (params.additional.action) {\n case 'highlight':\n spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function() {\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n jQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function() {\n jQuery('.spbc_hint-send_'+data.tab_name).hide();\n spbcSendAJAXRequest(\n {action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n {callback: spbcSendLogsCallback},\n );\n });\n\n // scroll to anchor\n if (window.location.hash) {\n document.getElementById(window.location.hash.substring(1)).scrollIntoView();\n }\n\n document.dispatchEvent(\n new CustomEvent( 'spbctTabLoaded', {\n bubbles: true,\n detail: {tab: data.tab_name},\n } ),\n );\n\n if (typeof spbcHighlightCriticalFilesNotice === 'function') {\n spbcHighlightCriticalFilesNotice(false);\n }\n\n spbcSaveSettingsButtonMobileLayout();\n window.addEventListener('resize', (event) => {\n spbcSaveSettingsButtonMobileLayout();\n });\n}\n\n/**\n * A chunk to hide the custom element \"submit button\" on large screen or make sticky on mobile\n */\nfunction spbcSaveSettingsButtonMobileLayout() {\n const selector = document.querySelector('div[name=\"spbc_settings--save_button_custom\"]');\n if (selector) {\n if (window.innerWidth > 900) {\n selector.style.display = 'none';\n } else {\n selector.style.display = 'flex';\n }\n }\n}\n\n/**\n * Sends logs\n *\n * @param {*} result\n * @param {*} data\n * @param {*} params\n * @param {*} obj\n */\nfunction spbcSendLogsCallback(result, data, params, obj) {\n jQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n spbcSwitchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n/**\n * Disables/enables settings by ID\n *\n * @param {array} settingsIDs\n * @param {number} enable\n */\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable) { // eslint-disable-line no-unused-vars\n if (typeof settingsIDs === 'string') {\n tmp = [];\n tmp.push(settingsIDs);\n settingsIDs = tmp;\n }\n\n enable = typeof enable === 'undefined' ? null : +enable;\n\n settingsIDs.forEach(function(settingID, i, arr) {\n let elem = document.getElementById('spbc_setting_'+settingID);\n let doDisable = function() {\n elem.setAttribute('disabled', 'disabled');\n };\n let doEnable = function() {\n elem.removeAttribute('disabled');\n };\n\n if (enable !== null) {\n // Set\n enable === 1 ? doEnable() : doDisable();\n } else {\n // Switch\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\n }\n });\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n * @param {array} settingNames\n * @param {number} enable\n */\nfunction spbcSettingsDependencies(settingNames, enable) { // eslint-disable-line no-unused-vars\n // Cast settingNames to array\n settingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n enable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n settingNames.forEach(function(settingName, i, arr) {\n document.getElementsByName('spbc_settings['+settingName+']')\n .forEach(function( elem, i, arr ) {\n let doDisable = function() {\n elem.setAttribute('disabled', 'disabled');\n };\n let doEnable = function() {\n elem.removeAttribute('disabled');\n };\n if (enable !== null) {\n // Set\n enable === 1 ? doEnable() : doDisable();\n } else {\n // Switch\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\n }\n\n let children = elem.getAttribute('children');\n if ( children !== null ) {\n spbcSettingsDependencies(children, enable && elem.checked);\n }\n });\n });\n}\n\n/**\n * Shows description\n *\n * @param {object} label\n * @param {string} settingId\n */\nfunction spbcSettingsShowDescription(label, settingId) {\n let removeDescFunc = function(e) {\n if (\n typeof e === 'undefined' ||\n (\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\n ) && !jQuery(e.target).hasClass('spbc_long_description__show')\n ) {\n jQuery('.spbc_long_desc').remove();\n jQuery(document).off('click', removeDescFunc);\n }\n };\n\n removeDescFunc();\n\n label.after('
');\n let obj = jQuery('#spbc_long_desc__'+settingId);\n obj.append('')\n .append('
')\n .css({\n top: label.position().top + 25,\n left: label.position().left + 5,\n });\n\n\n spbcSendAJAXRequest(\n {action: 'spbc_settings__get_description', setting_id: settingId},\n {\n spinner: obj.children('img'),\n callback: function(result, data, params, obj) {\n obj.empty()\n .append('
')\n .append('')\n .append('

'+result.title+'

')\n .append('

'+result.desc+'

');\n\n jQuery(document).on('click', removeDescFunc);\n },\n },\n obj,\n );\n}\n\n/**\n * Shows recommendation\n *\n * @param {object} label\n * @param {string} settingId\n */\nfunction spbcSettingsShowRecommendation(label, settingId) {\n let removeRecommendationFunc = function(e) {\n if (\n typeof e === 'undefined' ||\n (\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\n ) && !jQuery(e.target).hasClass('spbc_long_recommendation__show')\n ) {\n jQuery('.spbc_long_desc').remove();\n jQuery(document).off('click', removeRecommendationFunc);\n }\n };\n\n removeRecommendationFunc();\n\n label.after('
');\n let obj = jQuery('#spbc_long_desc__'+settingId);\n obj.append('')\n .append('
')\n .css({\n top: label.position().top + 25,\n left: label.position().left + 5,\n });\n\n\n spbcSendAJAXRequest(\n {action: 'spbc_settings__get_recommendation', setting_id: settingId},\n {\n spinner: obj.children('img'),\n callback: function(result, data, params, obj) {\n obj.empty()\n .append('
')\n .append('')\n .append('

'+result.title+'

')\n .append('

'+result.desc+'

');\n\n jQuery(document).on('click', removeRecommendationFunc);\n },\n },\n obj,\n );\n}\n\n/**\n * Shows/hides full text\n */\nfunction spbcStartShowHide() { // eslint-disable-line no-unused-vars\n jQuery('.spbcShortText')\n .off('mouseover' )\n .on('mouseover', function() {\n jQuery(this).next().show();\n })\n .off('mouseout' )\n .on('mouseout', function() {\n jQuery(this).next().hide();\n });\n jQuery('.spbcFullText')\n .off('mouseout' )\n .on('mouseout', function() {\n jQuery(this).hide();\n })\n .off('mouseover' )\n .on('mouseover', function() {\n jQuery(this).show();\n });\n}\n\n/**\n * Generate and save confirmation code\n *\n * @return {object}\n */\nfunction spbctGenerateConfirmationCode() {\n let data = {};\n let res = {};\n res.success = false;\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_generate_confirmation_code';\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n res.success = true;\n } else {\n res.text = result.data;\n }\n },\n });\n return res;\n}\n\n/**\n * Check confirmation code\n *\n * @param {object} radioButton\n * @param {number} timeout\n * @param {object} timer\n */\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n let element = radioButton;\n let data = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_check_confirmation_code';\n data.code = jQuery('#confirmation-code input').val();\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n jQuery('[name *= 2fa__enable]').attr('checked', '');\n element.checked = true;\n jQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n jQuery('#spbc_setting_2fa__roles > option:first').attr('selected', 'selected');\n clearTimeout( timeout );\n timer.remove();\n jQuery('#confirmation-code').dialog( 'close' );\n } else {\n alert('Code verification failed!');\n }\n },\n });\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbcBannerCheck() {\n let bannerChecker = setInterval( function() {\n spbcSendAJAXRequest(\n {action: 'spbc_settings__check_renew_banner'},\n {\n callback: function(result, data, params, obj) {\n if (result.close_renew_banner) {\n if (jQuery('#spbc_renew_notice').length) {\n jQuery('#spbc_renew_notice').hide('slow');\n }\n if (jQuery('#spbc_trial_notice').length) {\n jQuery('#spbc_trial_notice').hide('slow');\n }\n clearInterval(bannerChecker);\n }\n },\n },\n );\n }, 60000);\n}\n\njQuery(document).ready(function() {\n document.dispatchEvent(new CustomEvent('spbctPage', {bubbles: true}));\n document.dispatchEvent(new CustomEvent('spbctPageTabs', {bubbles: true}));\n document.dispatchEvent(new CustomEvent('spbctMobAboutCT', {bubbles: true}));\n\n jQuery('#spbc_gdpr_open_modal').on('click', function() {\n jQuery('#gdpr_dialog').dialog({\n modal: true,\n show: true,\n position: {my: 'center', at: 'center', of: window},\n width: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n height: 'auto',\n title: 'GDPR compliance',\n draggable: false,\n resizable: false,\n closeText: 'Close',\n });\n });\n\n // Checking email receiving possibility for activation 2FA\n jQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e) {\n e.preventDefault();\n\n let view = '
' +\n '
';\n jQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n .append(view);\n let enableResend = setTimeout(function() {\n jQuery('#confirmation-code--resend').removeAttr('disabled');\n jQuery('#confirmation-code--resend>.circle').remove();\n }, 30000);\n\n let res = spbctGenerateConfirmationCode();\n if ( res.success ) {\n jQuery('#confirmation-code input').val('');\n jQuery('#confirmation-code').dialog({\n modal: true,\n title: 'Confirmation code',\n width: 310,\n buttons: {\n Cancel: function() {\n jQuery( this ).dialog( 'close' );\n clearTimeout( enableResend );\n jQuery('#confirmation-code--resend>.circle').remove();\n },\n Ok: function() {\n let selector = '#confirmation-code--resend>.circle';\n spbctCheckConfirmationCode(e.target, enableResend, jQuery(selector));\n },\n },\n draggable: false,\n resizable: false,\n });\n } else {\n alert(res.text);\n }\n });\n\n if (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n spbcBannerCheck();\n }\n\n // Sync button migrated to react\n\n if ( spbcSettings.key_changed ) {\n jQuery('#spbc_button__sync').click();\n }\n\n // Get Key Auto button\n jQuery(document).on('click', '#spbc_setting_get_key_auto', function() {\n spbcSendAJAXRequest(\n {action: 'spbc_get_key_auto', ct_admin_timezone: jQuery('#spbc_admin_timezone').val()},\n {\n timeout: 25000,\n button: document.getElementById('spbc_setting_get_key_auto' ),\n spinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n jQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);\n }, 2000);\n if (result.reload) {\n document.location.reload();\n }\n if (result.msg) {\n spbcModal.open().putError(result.msg);\n }\n if (result.getTemplates) {\n spbcModal.loaded = result.getTemplates;\n spbcModal.open();\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n }\n },\n },\n );\n });\n\n // Import settings\n jQuery( document ).on('click', '#spbc_settings_templates_import_button', function() {\n jQuery('#spbc-ajax-result').remove();\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n let templateNameInput = jQuery('#spbc_settings_templates_import_name');\n templateNameInput.css('border-color', 'inherit');\n if ( typeof optionSelected.data('id') === 'undefined' ) {\n console.log( 'Attribute \"data-id\" not set for the option.' );\n return;\n }\n let data = {\n 'template_id': optionSelected.data('id'),\n 'template_name': optionSelected.data('name'),\n 'settings': optionSelected.data('settings'),\n };\n let button = this;\n spbcSendAJAXRequest(\n {action: 'spbc_settings_templates_import', data: data},\n {\n timeout: 25000,\n button: button,\n spinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n let selector;\n if (result.success) {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n jQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);\n }, 2000);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n setTimeout(function() {\n spbcModal.close();\n }, 2000);\n } else {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n }\n },\n },\n );\n });\n\n // Export settings\n jQuery( document ).on('click', '#spbc_settings_templates_export_button', function() {\n jQuery('#spbc-ajax-result').remove();\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n let templateNameInput = jQuery('#spbc_settings_templates_export_name');\n templateNameInput.css('border-color', 'inherit');\n if ( typeof optionSelected.data('id') === 'undefined' ) {\n console.log( 'Attribute \"data-id\" not set for the option.' );\n return;\n }\n let data;\n if ( optionSelected.data('id') === 'new_template' ) {\n let templateName = templateNameInput.val();\n if ( templateName === '' ) {\n templateNameInput.css('border-color', 'red');\n return;\n }\n data = {\n 'template_name': templateName,\n };\n } else {\n data = {\n 'template_id': optionSelected.data('id'),\n };\n }\n let button = this;\n spbcSendAJAXRequest(\n {action: 'spbc_settings_templates_export', data: data},\n {\n timeout: 25000,\n button: button,\n spinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n let selector;\n if (result.success) {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n jQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);\n }, 2000);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n setTimeout(function() {\n spbcModal.close();\n }, 2000);\n } else {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n }\n },\n },\n );\n });\n\n // Reset settings\n jQuery( document ).on('click', '#spbc_settings_templates_reset_button', function() {\n let button = this;\n spbcSendAJAXRequest(\n {action: 'spbc_settings_templates_reset'},\n {\n timeout: 25000,\n button: button,\n spinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n let selector;\n if (result.success) {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n jQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);\n }, 2000);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n setTimeout(function() {\n spbcModal.close();\n }, 2000);\n } else {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n }\n },\n },\n );\n });\n\n jQuery(document).on('change', '#spbc_settings_templates_export', function() {\n let optionSelected = jQuery('option:selected', this);\n if ( optionSelected.data('id') === 'new_template' ) {\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n } else {\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n }\n });\n\n //* TAB_CONTROL\n // migrated to react\n //* / REFRESH TAB IF ctrl+F5 END\n\n /**\n * Change cleantalk account email\n */\n jQuery(document).on('click', '#spbc-change-account-email', function(e) {\n e.preventDefault();\n\n let $this = jQuery(this);\n let accountEmailField = jQuery('#spbc-account-email');\n let accountEmail = accountEmailField.text();\n\n spbcToggleClass($this, 'active');\n\n if ($this.hasClass('active')) {\n $this.text($this.data('save-text'));\n accountEmailField.attr('contenteditable', 'true');\n accountEmailField.focus();\n accountEmailField.on('keydown', function(e) {\n if (e.code === 'Enter') {\n e.preventDefault();\n }\n });\n accountEmailField.on('input', function(e) {\n if (e.inputType === 'insertParagraph') {\n e.preventDefault();\n }\n });\n } else {\n spbcSendAJAXRequest(\n {\n action: 'spbc_update_account_email',\n accountEmail: accountEmail,\n },\n {\n timeout: 5000,\n callback: function(result, data, params, obj) {\n if (result.success !== undefined && result.success === 'ok') {\n if (result.manuallyLink !== undefined) {\n jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink);\n }\n }\n\n if (result.error !== undefined) {\n jQuery('#spbc-account-email').css('border-color', 'red');\n }\n },\n errorOutput: function(msg) {\n spbcModal.loaded = msg;\n spbcModal.open();\n },\n },\n );\n\n accountEmailField.attr('contenteditable', 'false');\n $this.text($this.data('default-text'));\n }\n });\n\n jQuery(document).on('click', '.spbct_notice-dismiss', function(e) {\n let classListNotice = this.parentElement.classList;\n let classNoticeForClose = classListNotice[classListNotice.length - 1];\n\n document.querySelectorAll('.' + classNoticeForClose).forEach((element) => {\n element.parentElement.setAttribute('style', 'display:none;');\n spbcSetCookie(classNoticeForClose, 1, 86400 * 30);\n });\n });\n});\n\n/**\n * Toggle class for DOM elements\n * @param {Array} arr\n * @param {string} className\n * @return {void}\n */\nfunction spbcToggleClass(arr, className) {\n for (let i=0; i {\r\n spbcSaveSettingsButtonMobileLayout();\r\n });\r\n}\r\n\r\n/**\r\n * A chunk to hide the custom element \"submit button\" on large screen or make sticky on mobile\r\n */\r\nfunction spbcSaveSettingsButtonMobileLayout() {\r\n const selector = document.querySelector('div[name=\"spbc_settings--save_button_custom\"]');\r\n if (selector) {\r\n if (window.innerWidth > 900) {\r\n selector.style.display = 'none';\r\n } else {\r\n selector.style.display = 'flex';\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Sends logs\r\n *\r\n * @param {*} result\r\n * @param {*} data\r\n * @param {*} params\r\n * @param {*} obj\r\n */\r\nfunction spbcSendLogsCallback(result, data, params, obj) {\r\n jQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\r\n spbcSwitchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\r\n}\r\n\r\n/**\r\n * Disables/enables settings by ID\r\n *\r\n * @param {array} settingsIDs\r\n * @param {number} enable\r\n */\r\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable) { // eslint-disable-line no-unused-vars\r\n if (typeof settingsIDs === 'string') {\r\n tmp = [];\r\n tmp.push(settingsIDs);\r\n settingsIDs = tmp;\r\n }\r\n\r\n enable = typeof enable === 'undefined' ? null : +enable;\r\n\r\n settingsIDs.forEach(function(settingID, i, arr) {\r\n let elem = document.getElementById('spbc_setting_'+settingID);\r\n let doDisable = function() {\r\n elem.setAttribute('disabled', 'disabled');\r\n };\r\n let doEnable = function() {\r\n elem.removeAttribute('disabled');\r\n };\r\n\r\n if (enable !== null) {\r\n // Set\r\n enable === 1 ? doEnable() : doDisable();\r\n } else {\r\n // Switch\r\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Recursive in case children found!\r\n *\r\n * Settings dependencies\r\n *\r\n * @param {array} settingNames\r\n * @param {number} enable\r\n */\r\nfunction spbcSettingsDependencies(settingNames, enable) { // eslint-disable-line no-unused-vars\r\n // Cast settingNames to array\r\n settingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\r\n enable = typeof enable === 'undefined' ? +event.target.checked : +enable;\r\n\r\n settingNames.forEach(function(settingName, i, arr) {\r\n document.getElementsByName('spbc_settings['+settingName+']')\r\n .forEach(function( elem, i, arr ) {\r\n let doDisable = function() {\r\n elem.setAttribute('disabled', 'disabled');\r\n };\r\n let doEnable = function() {\r\n elem.removeAttribute('disabled');\r\n };\r\n if (enable !== null) {\r\n // Set\r\n enable === 1 ? doEnable() : doDisable();\r\n } else {\r\n // Switch\r\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\r\n }\r\n\r\n let children = elem.getAttribute('children');\r\n if ( children !== null ) {\r\n spbcSettingsDependencies(children, enable && elem.checked);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Shows description\r\n *\r\n * @param {object} label\r\n * @param {string} settingId\r\n */\r\nfunction spbcSettingsShowDescription(label, settingId) {\r\n let removeDescFunc = function(e) {\r\n if (\r\n typeof e === 'undefined' ||\r\n (\r\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\r\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\r\n ) && !jQuery(e.target).hasClass('spbc_long_description__show')\r\n ) {\r\n jQuery('.spbc_long_desc').remove();\r\n jQuery(document).off('click', removeDescFunc);\r\n }\r\n };\r\n\r\n removeDescFunc();\r\n\r\n label.after('
');\r\n let obj = jQuery('#spbc_long_desc__'+settingId);\r\n obj.append('')\r\n .append('
')\r\n .css({\r\n top: label.position().top + 25,\r\n left: label.position().left + 5,\r\n });\r\n\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings__get_description', setting_id: settingId},\r\n {\r\n spinner: obj.children('img'),\r\n callback: function(result, data, params, obj) {\r\n obj.empty()\r\n .append('
')\r\n .append('')\r\n .append('

'+result.title+'

')\r\n .append('

'+result.desc+'

');\r\n\r\n jQuery(document).on('click', removeDescFunc);\r\n },\r\n },\r\n obj,\r\n );\r\n}\r\n\r\n/**\r\n * Shows recommendation\r\n *\r\n * @param {object} label\r\n * @param {string} settingId\r\n */\r\nfunction spbcSettingsShowRecommendation(label, settingId) {\r\n let removeRecommendationFunc = function(e) {\r\n if (\r\n typeof e === 'undefined' ||\r\n (\r\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\r\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\r\n ) && !jQuery(e.target).hasClass('spbc_long_recommendation__show')\r\n ) {\r\n jQuery('.spbc_long_desc').remove();\r\n jQuery(document).off('click', removeRecommendationFunc);\r\n }\r\n };\r\n\r\n removeRecommendationFunc();\r\n\r\n label.after('
');\r\n let obj = jQuery('#spbc_long_desc__'+settingId);\r\n obj.append('')\r\n .append('
')\r\n .css({\r\n top: label.position().top + 25,\r\n left: label.position().left + 5,\r\n });\r\n\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings__get_recommendation', setting_id: settingId},\r\n {\r\n spinner: obj.children('img'),\r\n callback: function(result, data, params, obj) {\r\n obj.empty()\r\n .append('
')\r\n .append('')\r\n .append('

'+result.title+'

')\r\n .append('

'+result.desc+'

');\r\n\r\n jQuery(document).on('click', removeRecommendationFunc);\r\n },\r\n },\r\n obj,\r\n );\r\n}\r\n\r\n/**\r\n * Shows/hides full text\r\n */\r\nfunction spbcStartShowHide() { // eslint-disable-line no-unused-vars\r\n jQuery('.spbcShortText')\r\n .off('mouseover' )\r\n .on('mouseover', function() {\r\n jQuery(this).next().show();\r\n })\r\n .off('mouseout' )\r\n .on('mouseout', function() {\r\n jQuery(this).next().hide();\r\n });\r\n jQuery('.spbcFullText')\r\n .off('mouseout' )\r\n .on('mouseout', function() {\r\n jQuery(this).hide();\r\n })\r\n .off('mouseover' )\r\n .on('mouseover', function() {\r\n jQuery(this).show();\r\n });\r\n}\r\n\r\n/**\r\n * Generate and save confirmation code\r\n *\r\n * @return {object}\r\n */\r\nfunction spbctGenerateConfirmationCode() {\r\n let data = {};\r\n let res = {};\r\n res.success = false;\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_generate_confirmation_code';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n res.success = true;\r\n } else {\r\n res.text = result.data;\r\n }\r\n },\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Check confirmation code\r\n *\r\n * @param {object} radioButton\r\n * @param {number} timeout\r\n * @param {object} timer\r\n */\r\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\r\n let element = radioButton;\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_check_confirmation_code';\r\n data.code = jQuery('#confirmation-code input').val();\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n jQuery('[name *= 2fa__enable]').attr('checked', '');\r\n element.checked = true;\r\n jQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\r\n jQuery('#spbc_setting_2fa__roles > option:first').attr('selected', 'selected');\r\n clearTimeout( timeout );\r\n timer.remove();\r\n jQuery('#confirmation-code').dialog( 'close' );\r\n } else {\r\n alert('Code verification failed!');\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Checking current account status for renew notice\r\n */\r\nfunction spbcBannerCheck() {\r\n let bannerChecker = setInterval( function() {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings__check_renew_banner'},\r\n {\r\n callback: function(result, data, params, obj) {\r\n if (result.close_renew_banner) {\r\n if (jQuery('#spbc_renew_notice').length) {\r\n jQuery('#spbc_renew_notice').hide('slow');\r\n }\r\n if (jQuery('#spbc_trial_notice').length) {\r\n jQuery('#spbc_trial_notice').hide('slow');\r\n }\r\n clearInterval(bannerChecker);\r\n }\r\n },\r\n },\r\n );\r\n }, 60000);\r\n}\r\n\r\njQuery(document).ready(function() {\r\n document.dispatchEvent(new CustomEvent('spbctPage', {bubbles: true}));\r\n document.dispatchEvent(new CustomEvent('spbctPageTabs', {bubbles: true}));\r\n document.dispatchEvent(new CustomEvent('spbctMobAboutCT', {bubbles: true}));\r\n\r\n jQuery('#spbc_gdpr_open_modal').on('click', function() {\r\n jQuery('#gdpr_dialog').dialog({\r\n modal: true,\r\n show: true,\r\n position: {my: 'center', at: 'center', of: window},\r\n width: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\r\n height: 'auto',\r\n title: 'GDPR compliance',\r\n draggable: false,\r\n resizable: false,\r\n closeText: 'Close',\r\n });\r\n });\r\n\r\n // Checking email receiving possibility for activation 2FA\r\n jQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e) {\r\n e.preventDefault();\r\n\r\n let view = '
' +\r\n '
';\r\n jQuery('#confirmation-code--resend').attr('disabled', 'disabled')\r\n .append(view);\r\n let enableResend = setTimeout(function() {\r\n jQuery('#confirmation-code--resend').removeAttr('disabled');\r\n jQuery('#confirmation-code--resend>.circle').remove();\r\n }, 30000);\r\n\r\n let res = spbctGenerateConfirmationCode();\r\n if ( res.success ) {\r\n jQuery('#confirmation-code input').val('');\r\n jQuery('#confirmation-code').dialog({\r\n modal: true,\r\n title: 'Confirmation code',\r\n width: 310,\r\n buttons: {\r\n Cancel: function() {\r\n jQuery( this ).dialog( 'close' );\r\n clearTimeout( enableResend );\r\n jQuery('#confirmation-code--resend>.circle').remove();\r\n },\r\n Ok: function() {\r\n let selector = '#confirmation-code--resend>.circle';\r\n spbctCheckConfirmationCode(e.target, enableResend, jQuery(selector));\r\n },\r\n },\r\n draggable: false,\r\n resizable: false,\r\n });\r\n } else {\r\n alert(res.text);\r\n }\r\n });\r\n\r\n if (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\r\n spbcBannerCheck();\r\n }\r\n\r\n // Sync button migrated to react\r\n\r\n if ( spbcSettings.key_changed ) {\r\n jQuery('#spbc_button__sync').click();\r\n }\r\n\r\n // Get Key Auto button\r\n jQuery(document).on('click', '#spbc_setting_get_key_auto', function() {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_get_key_auto', ct_admin_timezone: jQuery('#spbc_admin_timezone').val()},\r\n {\r\n timeout: 25000,\r\n button: document.getElementById('spbc_setting_get_key_auto' ),\r\n spinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n jQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);\r\n }, 2000);\r\n if (result.reload) {\r\n document.location.reload();\r\n }\r\n if (result.msg) {\r\n spbcModal.open().putError(result.msg);\r\n }\r\n if (result.getTemplates) {\r\n spbcModal.loaded = result.getTemplates;\r\n spbcModal.open();\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n // Import settings\r\n jQuery( document ).on('click', '#spbc_settings_templates_import_button', function() {\r\n jQuery('#spbc-ajax-result').remove();\r\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\r\n let templateNameInput = jQuery('#spbc_settings_templates_import_name');\r\n templateNameInput.css('border-color', 'inherit');\r\n if ( typeof optionSelected.data('id') === 'undefined' ) {\r\n console.log( 'Attribute \"data-id\" not set for the option.' );\r\n return;\r\n }\r\n let data = {\r\n 'template_id': optionSelected.data('id'),\r\n 'template_name': optionSelected.data('name'),\r\n 'settings': optionSelected.data('settings'),\r\n };\r\n let button = this;\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings_templates_import', data: data},\r\n {\r\n timeout: 25000,\r\n button: button,\r\n spinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n let selector;\r\n if (result.success) {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n jQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);\r\n }, 2000);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n setTimeout(function() {\r\n spbcModal.close();\r\n }, 2000);\r\n } else {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n // Export settings\r\n jQuery( document ).on('click', '#spbc_settings_templates_export_button', function() {\r\n jQuery('#spbc-ajax-result').remove();\r\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\r\n let templateNameInput = jQuery('#spbc_settings_templates_export_name');\r\n templateNameInput.css('border-color', 'inherit');\r\n if ( typeof optionSelected.data('id') === 'undefined' ) {\r\n console.log( 'Attribute \"data-id\" not set for the option.' );\r\n return;\r\n }\r\n let data;\r\n if ( optionSelected.data('id') === 'new_template' ) {\r\n let templateName = templateNameInput.val();\r\n if ( templateName === '' ) {\r\n templateNameInput.css('border-color', 'red');\r\n return;\r\n }\r\n data = {\r\n 'template_name': templateName,\r\n };\r\n } else {\r\n data = {\r\n 'template_id': optionSelected.data('id'),\r\n };\r\n }\r\n let button = this;\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings_templates_export', data: data},\r\n {\r\n timeout: 25000,\r\n button: button,\r\n spinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n let selector;\r\n if (result.success) {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n jQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);\r\n }, 2000);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n setTimeout(function() {\r\n spbcModal.close();\r\n }, 2000);\r\n } else {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n // Reset settings\r\n jQuery( document ).on('click', '#spbc_settings_templates_reset_button', function() {\r\n let button = this;\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings_templates_reset'},\r\n {\r\n timeout: 25000,\r\n button: button,\r\n spinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n let selector;\r\n if (result.success) {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n jQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);\r\n }, 2000);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n setTimeout(function() {\r\n spbcModal.close();\r\n }, 2000);\r\n } else {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n jQuery(document).on('change', '#spbc_settings_templates_export', function() {\r\n let optionSelected = jQuery('option:selected', this);\r\n if ( optionSelected.data('id') === 'new_template' ) {\r\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\r\n } else {\r\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\r\n }\r\n });\r\n\r\n //* TAB_CONTROL\r\n // migrated to react\r\n //* / REFRESH TAB IF ctrl+F5 END\r\n\r\n /**\r\n * Change cleantalk account email\r\n */\r\n jQuery(document).on('click', '#spbc-change-account-email', function(e) {\r\n e.preventDefault();\r\n\r\n let $this = jQuery(this);\r\n let accountEmailField = jQuery('#spbc-account-email');\r\n let accountEmail = accountEmailField.text();\r\n\r\n spbcToggleClass($this, 'active');\r\n\r\n if ($this.hasClass('active')) {\r\n $this.text($this.data('save-text'));\r\n accountEmailField.attr('contenteditable', 'true');\r\n accountEmailField.focus();\r\n accountEmailField.on('keydown', function(e) {\r\n if (e.code === 'Enter') {\r\n e.preventDefault();\r\n }\r\n });\r\n accountEmailField.on('input', function(e) {\r\n if (e.inputType === 'insertParagraph') {\r\n e.preventDefault();\r\n }\r\n });\r\n } else {\r\n spbcSendAJAXRequest(\r\n {\r\n action: 'spbc_update_account_email',\r\n accountEmail: accountEmail,\r\n },\r\n {\r\n timeout: 5000,\r\n callback: function(result, data, params, obj) {\r\n if (result.success !== undefined && result.success === 'ok') {\r\n if (result.manuallyLink !== undefined) {\r\n jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink);\r\n }\r\n }\r\n\r\n if (result.error !== undefined) {\r\n jQuery('#spbc-account-email').css('border-color', 'red');\r\n }\r\n },\r\n errorOutput: function(msg) {\r\n spbcModal.loaded = msg;\r\n spbcModal.open();\r\n },\r\n },\r\n );\r\n\r\n accountEmailField.attr('contenteditable', 'false');\r\n $this.text($this.data('default-text'));\r\n }\r\n });\r\n\r\n jQuery(document).on('click', '.spbct_notice-dismiss', function(e) {\r\n let classListNotice = this.parentElement.classList;\r\n let classNoticeForClose = classListNotice[classListNotice.length - 1];\r\n\r\n document.querySelectorAll('.' + classNoticeForClose).forEach((element) => {\r\n element.parentElement.setAttribute('style', 'display:none;');\r\n spbcSetCookie(classNoticeForClose, 1, 86400 * 30);\r\n });\r\n });\r\n});\r\n\r\n/**\r\n * Toggle class for DOM elements\r\n * @param {Array} arr\r\n * @param {string} className\r\n * @return {void}\r\n */\r\nfunction spbcToggleClass(arr, className) {\r\n for (let i=0; i');\n\n let spinner = jQuery('#spbc_file_view_preloader');\n let sizeMultiplier = (wpWrap.width() * 0.0004);\n\n spinner.height(128 * sizeMultiplier);\n spinner.width(128 * sizeMultiplier);\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\n\n const firstSelectorId = jQuery('#fswatcher__first_date').val();\n const secondSelectorId = jQuery('#fswatcher__second_date').val();\n\n let data = {\n action: 'spbct_fswatcher_view_file',\n fswatcher_file_path: el.dataset.path,\n fswatcher__first_date: firstSelectorId,\n fswatcher__second_date: secondSelectorId,\n };\n\n let callback = function(response) {\n let content = '';\n if (typeof response.error !== 'undefined') {\n content = response.error;\n } else if (typeof response.data !== 'undefined') {\n content = response.data;\n } else {\n content = 'Unknown error on reading file. Data is empty.';\n }\n content = content.split('\\n');\n let dialogWindow = jQuery('#spbc_dialog');\n dialogWindow.empty();\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\n let rowTemplate = '
' +\n '%s' +\n '

%s

' +\n '
<' +\n '/div>';\n\n content.forEach((line, index) => {\n dialogWindow.append(rowTemplate.printf(index + 1, line));\n });\n\n let contentHeight = Object.keys(content).length * 19 < 76 ? 76 : Object.keys(content).length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\n\n dialogWindow.css({\n height: height,\n overflow: overflow,\n });\n };\n\n spbcSendAJAXRequest(data, {callback: callback});\n}\n\n/**\n * Try to decode JSON string from site response.\n * @param {string} response\n * @return {obj} Json parsed obj or error obj.\n */\nfunction FSWDecodeJSON(response) {\n try {\n return JSON.parse(response);\n } catch (e) {\n return {'error': e};\n }\n}\n\n/**\n * Run rendering comparison table in dependence of response object\n * @param {{}} responseDataObj\n */\nfunction renderFSWatcherTableContent(responseDataObj) {\n fsWatcherTableBody.innerHTML = '';\n for (const dataSetName of availableFSWDataSetNames) {\n if (handleFSWDataObject(responseDataObj, dataSetName)) {\n noFSWChangesDetected = false;\n }\n }\n}\n\n/**\n * Validate response object from site.\n * @param {obj} responseDataObj\n * @return {*|boolean}\n */\nfunction validateFSWResponse(responseDataObj) {\n if (\n !responseDataObj ||\n typeof responseDataObj !== 'object'\n ) {\n return fswatcherTranslations['fs_err_resp_obj'];\n }\n\n if (typeof responseDataObj.error !== 'undefined') {\n return responseDataObj.error;\n }\n\n for (const dataSetName of availableFSWDataSetNames) {\n if (\n !responseDataObj.hasOwnProperty(dataSetName)\n ) {\n return fswatcherTranslations['fs_err_property'];\n }\n }\n\n return true;\n}\n\n/**\n * @param {object} responseDataObj\n * @param {string|number} eventType\n * @return {boolean}\n */\nfunction handleFSWDataObject(responseDataObj, eventType) {\n const eventsArray = responseDataObj[eventType];\n if (eventsArray.length > 0) {\n for (let i = 0; i < eventsArray.length; i++) {\n const row = convertFSWEventToRow(eventsArray[i], eventType);\n renderFSWTableRow(row.path, row.event_type, row.date);\n }\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Convert a row of site response to the formatted data.\n * @param {object} event contains the date and the file path\n * @param {string} eventType contains event type\n * @return {{path: string, event_type: string, date: string}} row of the table\n */\nfunction convertFSWEventToRow(event, eventType) {\n let row = {\n 'path': 'unknown',\n 'event_type': eventType.toUpperCase(),\n 'date': 'unknown',\n };\n\n if (event.length === 2) {\n if (typeof event[0] === 'string') {\n row.path = event[0];\n if (row.event_type !== 'DELETED') {\n row.path += '
View'; // eslint-disable-line max-len\n }\n }\n if (typeof event[1] === 'string') {\n let d = new Date(Number(event[1]) * 1000);\n shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\n let minutes = String(d.getMinutes()).padStart(2, '0');\n let seconds = String(d.getSeconds()).padStart(2, '0');\n row.date = shortMonthName(d) +\n ' ' +\n d.getDate() +\n ' ' +\n d.getFullYear() +\n ' ' +\n d.getHours() +\n ':' +\n minutes +\n ':' +\n seconds;\n }\n }\n\n return row;\n}\n\n/**\n * Render the row of FSW table.\n * @param {string} path the file path\n * @param {string} eventType the event type\n * @param {string} date the date of event\n */\nfunction renderFSWTableRow(path, eventType, date) {\n if (eventType === 'no_changes') {\n let tr = document.createElement('tr');\n let td = document.createElement('td');\n td.setAttribute('name', 'fswatcher-event-no-changes');\n td.setAttribute('colspan', '3');\n td.innerText = fswatcherTranslations['fs_no_changes'];\n tr.appendChild(td);\n fsWatcherTableBody.appendChild(tr);\n return;\n }\n\n let tr = document.createElement('tr');\n\n let tdPath = document.createElement('td');\n tdPath.setAttribute('name', 'fswatcher-event-path');\n tdPath.setAttribute('data-before', 'Path');\n tdPath.innerHTML = path;\n tr.appendChild(tdPath);\n\n let tdType = document.createElement('td');\n tdType.setAttribute('name', 'fswatcher-event-type');\n tdType.setAttribute('data-before', 'Event');\n tdType.innerText = eventType;\n tr.appendChild(tdType);\n\n let tdDate = document.createElement('td');\n tdDate.setAttribute('name', 'fswatcher-event-date');\n tdDate.setAttribute('data-before', 'Changed on date');\n tdDate.innerText = date;\n tr.appendChild(tdDate);\n\n fsWatcherTableBody.appendChild(tr);\n}\n\n/**\n * Filter options for the first selector and disable it to keep it from changes.\n */\nfunction filterFSWSecondSelector() {\n toggleFSWSelectorsInfo(false);\n}\n\n/**\n * Filter options for the second selector and disable it to keep it from changes.\n */\nfunction filterFSWFirstSelector() {\n toggleFSWSelectorsInfo(false);\n}\n\n/**\n * Reset selectors to its initial statements.\n */\nfunction resetFSWSelectors() {\n for (let i = 0; i < firstFSWSelector.options.length; i++) {\n firstFSWSelector.options[i].style.display = 'inherit';\n }\n for (let i = 0; i < secondFSWSelector.options.length; i++) {\n secondFSWSelector.options[i].style.display = 'inherit';\n }\n secondFSWSelector.removeAttribute('disabled');\n firstFSWSelector.removeAttribute('disabled');\n}\n\n/**\n * Toggle info string.\n * @param {boolean} enable Set logs names if true, disable content if false.\n */\nfunction toggleFSWSelectorsInfo(enable) {\n let infoTag = document.getElementById('spbc--fs-watcher-table-handling-selects-info');\n if (\n enable &&\n typeof firstFSWSelector.options[firstFSWSelector.selectedIndex] !== 'undefined' &&\n typeof secondFSWSelector.options[secondFSWSelector.selectedIndex] !== 'undefined'\n ) {\n const changesCountOnTRS = document.querySelectorAll('#spbc-table-fs_watcher-comparison > tr').length;\n const hasNoChangesTD = document.getElementsByName('fswatcher-event-no-changes').length;\n const changesCount = hasNoChangesTD > 0 ? 0 : changesCountOnTRS;\n\n infoTag.style.display = 'inherit';\n infoTag.innerHTML= fswatcherTranslations['fs_comparing'] +\n ' ' + firstFSWSelector.options[firstFSWSelector.selectedIndex].text + ' ' +\n fswatcherTranslations['fs_with'] +\n ' ' + secondFSWSelector.options[secondFSWSelector.selectedIndex].text + ' ' +\n fswatcherTranslations['fs_total'] +\n ' ' + changesCount + '';\n } else {\n infoTag.innerText = '';\n infoTag.style.display = 'none';\n }\n}\n\n\n"],"names":["let","noFSWChangesDetected","firstFSWSelector","document","getElementById","secondFSWSelector","fsWatcherTableBody","availableFSWDataSetNames","FSWOnload","querySelector","selectedIndex","secondDate","options","length","FSWCompare","Event","e","preventDefault","currentTarget","style","display","firstDate","value","spbcSendAJAXRequest","action","fswatcher__first_date","fswatcher__second_date","callback","response","responseDataObj","FSWDecodeJSON","hasOwnProperty","alert","fswatcherTranslations","console","log","error","validateResult","validateFSWResponse","renderFSWatcherTableContent","renderFSWTableRow","resetFSWSelectors","toggleFSWSelectorsInfo","FSWCreate","button","target","timeout","FSWViewFile","el","wpWrap","jQuery","dialogWindow","spinner","dialog","modal","title","dataset","path","position","my","at","of","window","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","open","event","ui","overflow","height","documentElement","beforeClose","body","empty","append","sizeMultiplier","firstSelectorId","css","left","top","val","secondSelectorId","data","fswatcher_file_path","content","split","forEach","line","index","printf","contentHeight","Object","keys","visibleHeight","JSON","parse","innerHTML","dataSetName","handleFSWDataObject","eventType","eventsArray","i","row","convertFSWEventToRow","event_type","date","minutes","seconds","toUpperCase","d","Date","Number","shortMonthName","Intl","DateTimeFormat","month","format","String","getMinutes","padStart","getSeconds","getDate","getFullYear","getHours","tr","tdDate","createElement","td","setAttribute","innerText","appendChild","tdPath","tdType","filterFSWSecondSelector","filterFSWFirstSelector","removeAttribute","enable","infoTag","changesCountOnTRS","querySelectorAll","changesCount","getElementsByName","text","readyState","addEventListener"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--fswatcher.min.js","sources":["spbc-settings_tab--fswatcher.js"],"sourcesContent":["// if no changes detected after comparison\r\nlet noFSWChangesDetected = true;\r\n// first selector elem\r\nconst firstFSWSelector = document.getElementById('fswatcher__first_date');\r\n// second selector elem\r\nconst secondFSWSelector = document.getElementById('fswatcher__second_date');\r\n// FSW table body\r\nconst fsWatcherTableBody = document.getElementById('spbc-table-fs_watcher-comparison');\r\n// available types of events\r\nconst availableFSWDataSetNames = ['added', 'changed', 'deleted'];\r\n\r\nif ( document.readyState !== 'loading' ) {\r\n FSWOnload(); // eslint-disable-line new-cap\r\n} else {\r\n document.addEventListener('DOMContentLoaded', FSWOnload);\r\n}\r\n\r\n// listeners\r\ndocument.getElementById('fswatcher__compare').addEventListener('click', FSWCompare);\r\ndocument.getElementById('fswatcher__create_snapshot').addEventListener('click', FSWCreate);\r\nfirstFSWSelector.addEventListener('change', filterFSWSecondSelector);\r\nsecondFSWSelector.addEventListener('change', filterFSWFirstSelector);\r\n\r\n// eslint-disable-next-line require-jsdoc\r\nfunction FSWOnload() {\r\n document.querySelector('#fswatcher__first_date').selectedIndex = 0;\r\n let secondDate = document.querySelector('#fswatcher__second_date');\r\n secondDate.selectedIndex = secondDate.options.length - 1;\r\n FSWCompare(new Event({})); // eslint-disable-line new-cap\r\n}\r\n\r\n/**\r\n * Main handler function. Run this on the button click.\r\n * @param {Event} e click event.\r\n * @return {void|false}\r\n */\r\nfunction FSWCompare(e) {\r\n e.preventDefault();\r\n\r\n if (e.currentTarget !== null) {\r\n document.querySelector('#fsw_preloader_compare').style.display = 'inline';\r\n }\r\n\r\n if ( typeof document.getElementById('fswatcher__first_date') === 'undefined' ||\r\n typeof document.getElementById('fswatcher__second_date') === 'undefined' ) {\r\n return false;\r\n }\r\n\r\n let firstDate = document.getElementById('fswatcher__first_date').value;\r\n let secondDate = document.getElementById('fswatcher__second_date').value;\r\n\r\n let data = {\r\n action: 'spbct_fswatcher_compare',\r\n fswatcher__first_date: firstDate,\r\n fswatcher__second_date: secondDate,\r\n };\r\n\r\n let params = {\r\n callback: function(response) {\r\n let responseDataObj = {};\r\n noFSWChangesDetected = true;\r\n if (typeof response === 'object') {\r\n responseDataObj = response;\r\n } else if (typeof response === 'string') {\r\n responseDataObj = FSWDecodeJSON(response); // eslint-disable-line new-cap\r\n if (responseDataObj.hasOwnProperty('error')) {\r\n alert(fswatcherTranslations['fs_err_parse_json']);\r\n console.log('File System watcher JSON parse error: ' + responseDataObj.error);\r\n return;\r\n }\r\n }\r\n\r\n const validateResult = validateFSWResponse(responseDataObj);\r\n if (true === validateResult) {\r\n renderFSWatcherTableContent(responseDataObj);\r\n if (noFSWChangesDetected) {\r\n renderFSWTableRow( '', 'no_changes', '');\r\n }\r\n } else {\r\n alert(validateResult + ' ' + fswatcherTranslations['fs_err_valid_result'] + ' support@cleantalk.org');\r\n console.log('File System watcher response validating error: ' + validateResult);\r\n }\r\n resetFSWSelectors();\r\n toggleFSWSelectorsInfo(true);\r\n document.querySelector('#fsw_preloader_compare').style.display = 'none';\r\n },\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Create snapshot handler.\r\n * @param {Event} e\r\n * @constructor\r\n */\r\nfunction FSWCreate(e) {\r\n e.preventDefault();\r\n\r\n if (e.currentTarget !== null) {\r\n document.querySelector('#fsw_preloader_create').style.display = 'inline';\r\n }\r\n\r\n let data = {\r\n action: 'spbct_fswatcher_create_snapshot',\r\n };\r\n\r\n let params = {\r\n callback: function(response) {\r\n if (typeof response === 'string') {\r\n FSWDecodeJSON(response); // eslint-disable-line new-cap\r\n }\r\n document.querySelector('#fsw_preloader_create').style.display = 'none';\r\n },\r\n button: e.target,\r\n timeout: 30000,\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * View file content in modal window.\r\n * @param {HTMLElement} el\r\n * @constructor\r\n */\r\nfunction FSWViewFile(el) { // eslint-disable-line no-unused-vars\r\n let wpWrap = jQuery('#wpwrap');\r\n let dialogWindow = jQuery('#spbc_dialog');\r\n\r\n dialogWindow.dialog({\r\n modal: true,\r\n title: fswatcherTranslations['fs_modal'] + ' ' + el.dataset.path,\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(wpWrap.width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: false,\r\n resizable: false,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n });\r\n\r\n dialogWindow.append('\"Wait');\r\n\r\n let spinner = jQuery('#spbc_file_view_preloader');\r\n let sizeMultiplier = (wpWrap.width() * 0.0004);\r\n\r\n spinner.height(128 * sizeMultiplier);\r\n spinner.width(128 * sizeMultiplier);\r\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\r\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\r\n\r\n const firstSelectorId = jQuery('#fswatcher__first_date').val();\r\n const secondSelectorId = jQuery('#fswatcher__second_date').val();\r\n\r\n let data = {\r\n action: 'spbct_fswatcher_view_file',\r\n fswatcher_file_path: el.dataset.path,\r\n fswatcher__first_date: firstSelectorId,\r\n fswatcher__second_date: secondSelectorId,\r\n };\r\n\r\n let callback = function(response) {\r\n let content = '';\r\n if (typeof response.error !== 'undefined') {\r\n content = response.error;\r\n } else if (typeof response.data !== 'undefined') {\r\n content = response.data;\r\n } else {\r\n content = 'Unknown error on reading file. Data is empty.';\r\n }\r\n content = content.split('\\n');\r\n let dialogWindow = jQuery('#spbc_dialog');\r\n dialogWindow.empty();\r\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\r\n let rowTemplate = '
' +\r\n '%s' +\r\n '

%s

' +\r\n '
<' +\r\n '/div>';\r\n\r\n content.forEach((line, index) => {\r\n dialogWindow.append(rowTemplate.printf(index + 1, line));\r\n });\r\n\r\n let contentHeight = Object.keys(content).length * 19 < 76 ? 76 : Object.keys(content).length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\r\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\r\n\r\n dialogWindow.css({\r\n height: height,\r\n overflow: overflow,\r\n });\r\n };\r\n\r\n spbcSendAJAXRequest(data, {callback: callback});\r\n}\r\n\r\n/**\r\n * Try to decode JSON string from site response.\r\n * @param {string} response\r\n * @return {obj} Json parsed obj or error obj.\r\n */\r\nfunction FSWDecodeJSON(response) {\r\n try {\r\n return JSON.parse(response);\r\n } catch (e) {\r\n return {'error': e};\r\n }\r\n}\r\n\r\n/**\r\n * Run rendering comparison table in dependence of response object\r\n * @param {{}} responseDataObj\r\n */\r\nfunction renderFSWatcherTableContent(responseDataObj) {\r\n fsWatcherTableBody.innerHTML = '';\r\n for (const dataSetName of availableFSWDataSetNames) {\r\n if (handleFSWDataObject(responseDataObj, dataSetName)) {\r\n noFSWChangesDetected = false;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Validate response object from site.\r\n * @param {obj} responseDataObj\r\n * @return {*|boolean}\r\n */\r\nfunction validateFSWResponse(responseDataObj) {\r\n if (\r\n !responseDataObj ||\r\n typeof responseDataObj !== 'object'\r\n ) {\r\n return fswatcherTranslations['fs_err_resp_obj'];\r\n }\r\n\r\n if (typeof responseDataObj.error !== 'undefined') {\r\n return responseDataObj.error;\r\n }\r\n\r\n for (const dataSetName of availableFSWDataSetNames) {\r\n if (\r\n !responseDataObj.hasOwnProperty(dataSetName)\r\n ) {\r\n return fswatcherTranslations['fs_err_property'];\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * @param {object} responseDataObj\r\n * @param {string|number} eventType\r\n * @return {boolean}\r\n */\r\nfunction handleFSWDataObject(responseDataObj, eventType) {\r\n const eventsArray = responseDataObj[eventType];\r\n if (eventsArray.length > 0) {\r\n for (let i = 0; i < eventsArray.length; i++) {\r\n const row = convertFSWEventToRow(eventsArray[i], eventType);\r\n renderFSWTableRow(row.path, row.event_type, row.date);\r\n }\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Convert a row of site response to the formatted data.\r\n * @param {object} event contains the date and the file path\r\n * @param {string} eventType contains event type\r\n * @return {{path: string, event_type: string, date: string}} row of the table\r\n */\r\nfunction convertFSWEventToRow(event, eventType) {\r\n let row = {\r\n 'path': 'unknown',\r\n 'event_type': eventType.toUpperCase(),\r\n 'date': 'unknown',\r\n };\r\n\r\n if (event.length === 2) {\r\n if (typeof event[0] === 'string') {\r\n row.path = event[0];\r\n if (row.event_type !== 'DELETED') {\r\n row.path += '
View'; // eslint-disable-line max-len\r\n }\r\n }\r\n if (typeof event[1] === 'string') {\r\n let d = new Date(Number(event[1]) * 1000);\r\n shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\r\n let minutes = String(d.getMinutes()).padStart(2, '0');\r\n let seconds = String(d.getSeconds()).padStart(2, '0');\r\n row.date = shortMonthName(d) +\r\n ' ' +\r\n d.getDate() +\r\n ' ' +\r\n d.getFullYear() +\r\n ' ' +\r\n d.getHours() +\r\n ':' +\r\n minutes +\r\n ':' +\r\n seconds;\r\n }\r\n }\r\n\r\n return row;\r\n}\r\n\r\n/**\r\n * Render the row of FSW table.\r\n * @param {string} path the file path\r\n * @param {string} eventType the event type\r\n * @param {string} date the date of event\r\n */\r\nfunction renderFSWTableRow(path, eventType, date) {\r\n if (eventType === 'no_changes') {\r\n let tr = document.createElement('tr');\r\n let td = document.createElement('td');\r\n td.setAttribute('name', 'fswatcher-event-no-changes');\r\n td.setAttribute('colspan', '3');\r\n td.innerText = fswatcherTranslations['fs_no_changes'];\r\n tr.appendChild(td);\r\n fsWatcherTableBody.appendChild(tr);\r\n return;\r\n }\r\n\r\n let tr = document.createElement('tr');\r\n\r\n let tdPath = document.createElement('td');\r\n tdPath.setAttribute('name', 'fswatcher-event-path');\r\n tdPath.setAttribute('data-before', 'Path');\r\n tdPath.innerHTML = path;\r\n tr.appendChild(tdPath);\r\n\r\n let tdType = document.createElement('td');\r\n tdType.setAttribute('name', 'fswatcher-event-type');\r\n tdType.setAttribute('data-before', 'Event');\r\n tdType.innerText = eventType;\r\n tr.appendChild(tdType);\r\n\r\n let tdDate = document.createElement('td');\r\n tdDate.setAttribute('name', 'fswatcher-event-date');\r\n tdDate.setAttribute('data-before', 'Changed on date');\r\n tdDate.innerText = date;\r\n tr.appendChild(tdDate);\r\n\r\n fsWatcherTableBody.appendChild(tr);\r\n}\r\n\r\n/**\r\n * Filter options for the first selector and disable it to keep it from changes.\r\n */\r\nfunction filterFSWSecondSelector() {\r\n toggleFSWSelectorsInfo(false);\r\n}\r\n\r\n/**\r\n * Filter options for the second selector and disable it to keep it from changes.\r\n */\r\nfunction filterFSWFirstSelector() {\r\n toggleFSWSelectorsInfo(false);\r\n}\r\n\r\n/**\r\n * Reset selectors to its initial statements.\r\n */\r\nfunction resetFSWSelectors() {\r\n for (let i = 0; i < firstFSWSelector.options.length; i++) {\r\n firstFSWSelector.options[i].style.display = 'inherit';\r\n }\r\n for (let i = 0; i < secondFSWSelector.options.length; i++) {\r\n secondFSWSelector.options[i].style.display = 'inherit';\r\n }\r\n secondFSWSelector.removeAttribute('disabled');\r\n firstFSWSelector.removeAttribute('disabled');\r\n}\r\n\r\n/**\r\n * Toggle info string.\r\n * @param {boolean} enable Set logs names if true, disable content if false.\r\n */\r\nfunction toggleFSWSelectorsInfo(enable) {\r\n let infoTag = document.getElementById('spbc--fs-watcher-table-handling-selects-info');\r\n if (\r\n enable &&\r\n typeof firstFSWSelector.options[firstFSWSelector.selectedIndex] !== 'undefined' &&\r\n typeof secondFSWSelector.options[secondFSWSelector.selectedIndex] !== 'undefined'\r\n ) {\r\n const changesCountOnTRS = document.querySelectorAll('#spbc-table-fs_watcher-comparison > tr').length;\r\n const hasNoChangesTD = document.getElementsByName('fswatcher-event-no-changes').length;\r\n const changesCount = hasNoChangesTD > 0 ? 0 : changesCountOnTRS;\r\n\r\n infoTag.style.display = 'inherit';\r\n infoTag.innerHTML= fswatcherTranslations['fs_comparing'] +\r\n ' ' + firstFSWSelector.options[firstFSWSelector.selectedIndex].text + ' ' +\r\n fswatcherTranslations['fs_with'] +\r\n ' ' + secondFSWSelector.options[secondFSWSelector.selectedIndex].text + ' ' +\r\n fswatcherTranslations['fs_total'] +\r\n ' ' + changesCount + '';\r\n } else {\r\n infoTag.innerText = '';\r\n infoTag.style.display = 'none';\r\n }\r\n}\r\n\r\n\r\n"],"names":["let","noFSWChangesDetected","firstFSWSelector","document","getElementById","secondFSWSelector","fsWatcherTableBody","availableFSWDataSetNames","FSWOnload","querySelector","selectedIndex","secondDate","options","length","FSWCompare","Event","e","preventDefault","currentTarget","style","display","firstDate","value","spbcSendAJAXRequest","action","fswatcher__first_date","fswatcher__second_date","callback","response","responseDataObj","FSWDecodeJSON","hasOwnProperty","alert","fswatcherTranslations","console","log","error","validateResult","validateFSWResponse","renderFSWatcherTableContent","renderFSWTableRow","resetFSWSelectors","toggleFSWSelectorsInfo","FSWCreate","button","target","timeout","FSWViewFile","el","wpWrap","jQuery","dialogWindow","spinner","dialog","modal","title","dataset","path","position","my","at","of","window","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","open","event","ui","overflow","height","documentElement","beforeClose","body","empty","append","sizeMultiplier","firstSelectorId","css","left","top","val","secondSelectorId","data","fswatcher_file_path","content","split","forEach","line","index","printf","contentHeight","Object","keys","visibleHeight","JSON","parse","innerHTML","dataSetName","handleFSWDataObject","eventType","eventsArray","i","row","convertFSWEventToRow","event_type","date","minutes","seconds","toUpperCase","d","Date","Number","shortMonthName","Intl","DateTimeFormat","month","format","String","getMinutes","padStart","getSeconds","getDate","getFullYear","getHours","tr","tdDate","createElement","td","setAttribute","innerText","appendChild","tdPath","tdType","filterFSWSecondSelector","filterFSWFirstSelector","removeAttribute","enable","infoTag","changesCountOnTRS","querySelectorAll","changesCount","getElementsByName","text","readyState","addEventListener"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-settings_tab--scanner.min.js.map b/js/spbc-settings_tab--scanner.min.js.map index a47cf151d..bac138bc8 100644 --- a/js/spbc-settings_tab--scanner.min.js.map +++ b/js/spbc-settings_tab--scanner.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["/**\n * Show popup tip\n *\n * @param {object} showIcon\n */\nfunction spbcPopupTipShow(showIcon) { // eslint-disable-line no-unused-vars\n let tipTitle = showIcon.attr('spbc_tip_title') || null;\n let tipText = showIcon.attr('spbc_tip_text') || null;\n let removeDescFunc = function(e) {\n if (\n typeof e === 'undefined' ||\n (\n jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 ||\n jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')\n )\n ) {\n jQuery('.spbc_popup_tip--wrapper').hide();\n jQuery(document).off('click', removeDescFunc);\n }\n };\n\n removeDescFunc();\n\n showIcon.after('
');\n\n let obj = jQuery('.spbc_popup_tip--wrapper');\n\n obj.empty()\n .append('
')\n .css({\n top: showIcon.position().top - 2,\n left: showIcon.position().left + 25,\n });\n obj.append('')\n .append('

' + tipTitle + '

')\n .append('

' + tipText + '

');\n\n jQuery(document).on('click', removeDescFunc);\n showIcon.parents('tr').on('mouseout', removeDescFunc);\n}\n\n/**\n * View file in the scanner\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonFileViewEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_file_view',\n file_id: self.parents('.row-actions').attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n document.addEventListener('spbcModalClosed', function( e ) {\n spbcReloadAccordion();\n });\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n *\n * @param {object} obj\n */\nfunction spbcScannerAnalysisLogDeleteFromLog(obj) { // eslint-disable-line no-unused-vars\n let fileIds = [];\n const self = jQuery(obj);\n let spinner;\n\n if ( jQuery(obj).hasClass('tbl-row_action') ) {\n fileIds.push(self.parents('.row-actions').attr('uid'));\n spinner = self.parent().siblings('.tbl-preloader--tiny');\n } else {\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select:checked');\n if (selectedItems.length === 0) {\n alert('Please, select elements.');\n return;\n }\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n fileIds.push(elementId);\n });\n spinner = self.children('.tbl-preloader--small');\n }\n\n const data = {\n action: 'spbc_scanner_analysis_log_delete_from_log',\n file_ids: fileIds,\n };\n\n let params = {\n spinner: spinner,\n callback: function() {\n window.location.reload();\n },\n };\n\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * View page in the scanner\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonPageViewEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_page_view',\n page_url: self.parents('.row-actions').attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n },\n };\n\n let wpWrap = jQuery('#wpwrap');\n let dialogWindow = jQuery('#spbc_dialog');\n\n dialogWindow.dialog({\n modal: true,\n title: 'Loading..',\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(wpWrap.width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: false,\n resizable: false,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = 'auto';\n jQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n });\n\n dialogWindow.append('\"Wait');\n\n let spinner = jQuery('#spbc_file_view_preloader');\n let sizeMultiplier = (wpWrap.width() * 0.0004);\n\n spinner.height(128 * sizeMultiplier);\n spinner.width(128 * sizeMultiplier);\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\n\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Callback for file view\n *\n * @param {object} result\n */\nfunction spbcScannerButtonViewCallback(result) { // eslint-disable-line no-unused-vars\n let dialogWindow = jQuery('#spbc_dialog');\n dialogWindow.empty();\n\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\n\n let rowTemplate = '
%s';\n rowTemplate += '

%s


';\n\n /* eslint-disable guard-for-in */\n for (let row in result.file) {\n dialogWindow.append(rowTemplate.printf(row, result.file[row]));\n }\n\n let contentHeight = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\n\n dialogWindow.css({\n height: height,\n overflow: overflow,\n });\n\n dialogWindow.dialog({\n modal: true,\n title: ('Loaded: ' + result.file_path),\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(jQuery('#wpwrap').width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: true,\n resizable: false,\n height: height,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = overflow;\n jQuery('#spbc_dialog').height(height);\n jQuery('.ui-widget-overlay').on('click', function() {\n jQuery('#spbc_dialog').dialog('close');\n });\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n });\n\n console.log('FILE_VIEWED');\n}\n\n/**\n * Event for file view bad\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonFileViewBadEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_file_view',\n file_id: self.parents('.row-actions').attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewBadFileCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Event for page view bad\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonPageViewBadEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_page_view',\n page_url: self.parent().attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewBadCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Callback for file view bad\n *\n * @param {object} result\n * @param {object} data\n * @param {object} params\n */\nfunction spbcScannerButtonViewBadFileCallback(result, data, params) { // eslint-disable-line no-unused-vars\n console.log('FILE_VIEWED_BAD_CODE_FILE');\n jQuery('#spbc_dialog').empty();\n\n let rowTemplate = '
%s';\n rowTemplate += '

%s


';\n let rowTemplateBad = '
';\n rowTemplateBad += '%s';\n rowTemplateBad += '

%s


';\n let severityParts = [];\n let severityPartsSorted = [];\n let severityKeysSorted = [];\n\n result.weak_spots = JSON.parse(result.weak_spots);\n /* eslint-disable guard-for-in */\n for (let severity in result.weak_spots) {\n severityParts[severity] = Object.keys(result.weak_spots[severity]);\n }\n\n severityKeysSorted = Object.keys(severityParts).sort();\n\n /* eslint-disable guard-for-in */\n for (key in severityKeysSorted) {\n severityPartsSorted[severityKeysSorted[key]] = severityParts[severityKeysSorted[key]];\n }\n\n /* eslint-disable guard-for-in */\n for (let severityPart in severityPartsSorted) {\n let headerName = 'spbc-dialog-row-header-' + severityPart.toLowerCase();\n let headerHtml = '';\n headerHtml += severityPart + ' weakspots:';\n const dialog = jQuery('#spbc_dialog');\n\n dialog.append(rowTemplate.printf('', headerHtml));\n dialog.append(rowTemplate. printf('...', '...'));\n\n let header = dialog.find('#' + headerName);\n header.parent().parent().css('text-align', 'center');\n header.parent().parent().css('border', '1px dotted');\n header.parent().parent().css('background', 'darkgrey');\n\n /* eslint-disable guard-for-in */\n for (let strNum in severityParts[severityPart]) {\n // Sort bad line\n strNum = [...new Set(strNum)].sort();\n\n let row = +severityParts[severityPart][strNum];\n let displayDepth = 2;\n let temp;\n // Display only existing lines of file\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\n if ( typeof result.file[currRow] !== 'undefined' ) {\n temp = row === currRow ? rowTemplateBad : rowTemplate;\n dialog.append(temp.printf(currRow, result.file[currRow]));\n }\n }\n\n // Placing an empty string between results\n dialog.append(rowTemplate. printf('...', '...'));\n }\n }\n\n // Removing last empty string\n jQuery('#spbc_dialog div').last().remove();\n\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\n\n jQuery('#spbc_dialog').dialog({\n modal: true,\n title: result.file_path,\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(jQuery('#wpwrap').width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: true,\n resizable: false,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = overflow;\n jQuery('#spbc_dialog').height(height);\n jQuery('.ui-widget-overlay').on('click', function() {\n jQuery('#spbc_dialog').dialog('close');\n });\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n });\n}\n\n/**\n * Callback for file view bad\n *\n * @param {object} result\n * @param {object} data\n * @param {object} params\n */\nfunction spbcScannerButtonViewBadCallback(result, data, params) { // eslint-disable-line no-unused-vars\n console.log('FILE_VIEWED_BAD_CODE');\n\n let afterClose = () => {};\n\n if ( result.success == true ) {\n console.log(result);\n let rowTemplate = '
' +\n '%s' +\n '

%s

' +\n '
';\n let rowTemplateBad = '
' +\n '%s' +\n '

%s

' +\n '
';\n let strNums = [];\n\n result.weak_spots = JSON.parse(result.weak_spots);\n /* eslint-disable guard-for-in */\n for (let severity in result.weak_spots) {\n strNums = strNums.concat(Object.keys(result.weak_spots[severity]));\n }\n\n strNums = [...new Set(strNums)].sort(); // Sort bad line\n // get a map of bad strings\n // TODO: Probably there can get something else except CRITICAL in the future\n let badStringsMap = new Map(Object.entries(result.weak_spots.CRITICAL));\n /* eslint-disable guard-for-in */\n for (let strNum in strNums) {\n if (strNum == 0 && badStringsMap.get(strNums[strNum]).toLowerCase().includes('doctype')) {\n continue;\n }\n\n let row = +strNums[strNum];\n let displayDepth = 2;\n\n // Display only existing lines of file\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\n if ( typeof result.file[currRow] !== 'undefined' ) {\n let isBadString = (row === currRow);\n let unformattedRow;\n let highlitedRow;\n if (isBadString) {\n unformattedRow = rowTemplateBad;\n } else {\n unformattedRow = rowTemplate;\n }\n if (isBadString && !result.file[currRow].includes('iframe')) {\n highlitedRow = unformattedRow.printf(currRow, badStringsMap.get(strNums[strNum]));\n } else {\n highlitedRow = unformattedRow.printf(currRow, result.file[currRow]);\n }\n jQuery('#spbc_dialog').append(highlitedRow);\n }\n }\n\n // Placing an empty string between results\n jQuery('#spbc_dialog').append(rowTemplate. printf('', ''));\n\n // Removing last empty string\n jQuery('#spbc_dialog div').last().remove();\n }\n } else {\n let wrapperElement = '
%s
';\n jQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n afterClose = () => {\n document.location.reload();\n };\n }\n\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let height = 'auto';\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\n\n jQuery('#spbc_dialog').dialog({\n modal: true,\n title: result.file_path,\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(jQuery('#wpwrap').width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: true,\n resizable: false,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = overflow;\n jQuery('#spbc_dialog').height(height);\n jQuery('.ui-widget-overlay').on('click', function() {\n jQuery('#spbc_dialog').dialog('close');\n });\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n close: afterClose,\n });\n}\n\n/**\n * Reloads last scan info\n */\nfunction spbcScannerReloadScanInfo() { // eslint-disable-line no-unused-vars\n jQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n const data = {\n action: 'spbc_scanner__last_scan_info',\n };\n const params = {\n callback: (result) => {\n document.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Cure file\n * @param {object} obj\n */\nfunction spbcScannerButtonCureFileAjaxHandler(obj) { // eslint-disable-line no-unused-vars\n const self = jQuery(obj);\n const fileFastHash = self.parents('.row-actions').attr('uid');\n\n let data = {\n action: 'spbc_file_cure_ajax_action',\n file_fast_hash: fileFastHash,\n security: spbcSettings.ajax_nonce,\n };\n\n jQuery.ajax({\n type: 'POST',\n async: true,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n spbcModal.open().put(result.data);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n } else {\n spbcModal.open().putError(result.data);\n }\n },\n });\n}\n\n/**\n * Restore file from backup\n * @param {object} obj\n */\nfunction spbcScannerButtonRestoreFromBackupAjaxHandler(obj) { // eslint-disable-line no-unused-vars\n const self = jQuery(obj);\n const fileFastHash = self.parents('.row-actions').attr('uid');\n\n let data = {\n action: 'spbc_restore_file_from_backup_ajax_action',\n file_fast_hash: fileFastHash,\n security: spbcSettings.ajax_nonce,\n };\n\n jQuery.ajax({\n type: 'POST',\n async: true,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n spbcModal.open().put(result.data);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n } else {\n spbcModal.open().putError(result.data);\n }\n },\n });\n}\n\n/**\n * Clear scan results\n * @return {void}\n */\nfunction spbcScannerButtonClearScanResults() { // eslint-disable-line no-unused-vars\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\n return;\n }\n\n console.log('CLEAR');\n\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_clear'},\n {\n type: 'GET',\n successCallback: function() {\n document.location = document.location;\n },\n complete: null,\n errorOutput: null,\n context: this,\n timeout: 40000,\n success: function() {\n document.location.reload();\n },\n },\n );\n}\n\n/**\n * Show copy log to clipboard hint\n * @param {string} text\n */\nfunction spbcScannerCopyLogToClipboardHint(text) {\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').text(text);\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').show();\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').animate({opacity: 0}, 3000, function() {\n jQuery(this).hide();\n jQuery(this).css('opacity', 1);\n });\n}\n\njQuery(document).ready(function() {\n // EVENT HADLING\n spbcTblBulkActionsListen(); // Table. Row bulk handler\n spbcTblRowActionsListen(); // Table. Row actions handler\n spbcTblPaginationListen(); // Table. Pagination handler\n spbcTblSortListen(); // Table. Sort handler\n\n spbcStartShowHide();\n\n // Preparing progressbar\n jQuery('#spbc_scaner_progress_bar').progressbar({\n value: 0,\n create: function( event, ui ) {\n event.target.style.position = 'relative';\n event.target.style.marginBottom = '12px';\n },\n change: function(event, ui) {\n jQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n },\n });\n\n // Preparing accordion\n jQuery('#spbc_scan_accordion').accordion({\n header: 'h3',\n heightStyle: 'content',\n collapsible: true,\n active: false,\n activate: function( event, ui ) {\n jQuery('#spbc_scan_accordion')\n .accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom spbc-overflow--visible');\n },\n beforeActivate: function( event, ui ) {\n jQuery('#spbc_scan_accordion').accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom');\n },\n });\n\n // Init scanner plugin\n window.spbcScanner = new SpbcMalwareScanner({\n settings: spbcScaner.settings,\n states: spbcScaner.states,\n button: jQuery('#spbc_perform_scan'),\n spinner: jQuery('#spbc_perform_scan').next(),\n callback: null,\n progress_overall: jQuery('#spbc_scaner_progress_overall'),\n progressbar: jQuery('#spbc_scaner_progress_bar'),\n progressbar_text: jQuery('.spbc_progressbar_counter span'),\n wrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n warnings: {\n long_scan: jQuery('.spbc_hint_warning__long_scan'),\n outdated: jQuery('.spbc_hint_warning__outdated'),\n },\n });\n\n jQuery(document).on('click', '.spbc_popup_tip--icon---show', function() {\n spbcPopupTipShow( jQuery( this ) );\n });\n\n jQuery('#spbc_perform_scan').on('click', function() {\n jQuery('#spbcscan-results-log-module').remove();\n spbcScanner.actionControl();\n\n if (!jQuery('.spbc_log-wrapper .panel-body').length) {\n jQuery('.spbc_log-wrapper').append('
');\n }\n\n jQuery('.spbc_log-wrapper').resizable({\n handles: 'n, s',\n containment: 'document',\n });\n });\n\n jQuery('#spbcscan-results-log-module').resizable({\n handles: 'n, s',\n containment: 'document',\n });\n\n // Clear scanner's tables\n jQuery('#spbc_scanner_clear').on('click', function() {\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\n return;\n }\n\n console.log('CLEAR');\n\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_clear'},\n {\n type: 'GET',\n successCallback: function() {\n document.location = document.location;\n },\n complete: null,\n errorOutput: null,\n context: this,\n timeout: 40000,\n success: function() {\n document.location.reload();\n },\n },\n );\n });\n\n jQuery('#spbc_scanner_save_to_pdf').on('click', function() {\n jQuery.ajax({\n url: spbcSettings.ajaxurl,\n type: 'POST',\n data: {\n action: 'spbc_scanner_save_to_pdf',\n security: spbcSettings.ajax_nonce,\n no_cache: Math.random(),\n },\n xhrFields: {\n responseType: 'blob',\n },\n success: function(data) {\n jQuery.ajax({\n url: spbcSettings.ajaxurl,\n type: 'POST',\n data: {\n action: 'spbc_scanner_get_pdf_file_name',\n security: spbcSettings.ajax_nonce,\n no_cache: Math.random(),\n },\n xhrFields: {\n responseType: 'text',\n },\n success: function(filename) {\n let blob=new Blob([data]);\n let link=document.createElement('a');\n link.href=window.URL.createObjectURL(blob);\n link.download=filename.data;\n link.click();\n },\n },\n );\n },\n });\n });\n\n jQuery('#spbc_load_more_scan_logs').on('click', function(e) {\n e.preventDefault();\n\n jQuery.ajax({\n url: spbcSettings.ajaxurl,\n type: 'POST',\n data: {\n action: 'spbc_scanner_load_more_scan_logs',\n security: spbcSettings.ajax_nonce,\n no_cache: Math.random(),\n offset: jQuery(this).data('offset') + 100,\n },\n xhrFields: {\n responseType: 'text',\n },\n success: function(data) {\n if (data.success) {\n jQuery('#spbcscan-results-log-module .panel-body').append(data.data);\n }\n },\n });\n });\n\n if (jQuery('#spbc_scanner_copy_log_to_clipboard').length) {\n jQuery('#spbc_scanner_copy_log_to_clipboard').on('click', function(e) {\n e.preventDefault();\n if (navigator.clipboard) {\n let log = jQuery('#spbcscan-results-log-module .panel-body').html();\n let formattedLog = log.replace(//g, '').replace(/<\\/b>/g, '');\n formattedLog = formattedLog.replace(/

/g, '\\n').replace(/<\\/p>/g, '');\n navigator.clipboard.writeText(formattedLog).then(() => {\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint);\n }).catch((err) => {\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_failed);\n });\n } else {\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_unsupported);\n }\n });\n }\n});\n"],"names":["spbcPopupTipShow","showIcon","let","tipTitle","attr","tipText","removeDescFunc","e","jQuery","target","parent","length","hasClass","hide","document","off","after","obj","empty","append","css","top","position","left","on","parents","spbcScannerButtonFileViewEvent","self","data","action","file_id","params","spinner","siblings","callback","spbcScannerButtonViewCallback","errorOutput","msg","spbcModal","open","putError","addEventListener","spbcReloadAccordion","spbcSendAJAXRequest","spbcScannerAnalysisLogDeleteFromLog","fileIds","push","selectedItems","closest","find","alert","each","index","element","elementId","val","children","file_ids","window","location","reload","spbcScannerButtonPageViewEvent","page_url","wpWrap","dialogWindow","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","sizeMultiplier","result","row","rowTemplate","display","file","printf","contentHeight","Object","keys","visibleHeight","file_path","console","log","spbcScannerButtonFileViewBadEvent","spbcScannerButtonViewBadFileCallback","spbcScannerButtonPageViewBadEvent","spbcScannerButtonViewBadCallback","severityKeysSorted","severity","severityPart","rowTemplateBad","severityParts","severityPartsSorted","weak_spots","JSON","parse","key","sort","strNum","headerName","toLowerCase","headerHtml","header","Set","temp","currRow","last","remove","afterClose","success","strNums","concat","badStringsMap","Map","entries","CRITICAL","get","includes","isBadString","unformattedRow","highlitedRow","content","close","spbcScannerReloadScanInfo","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbcScannerButtonCureFileAjaxHandler","file_fast_hash","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","put","spbcScannerButtonRestoreFromBackupAjaxHandler","spbcScannerButtonClearScanResults","confirm","successCallback","complete","context","this","timeout","spbcScannerCopyLogToClipboardHint","animate","opacity","ready","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","heightStyle","collapsible","active","activate","beforeActivate","spbcScanner","SpbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","preventDefault","offset","navigator","clipboard","formattedLog","html","replace","writeText","then","copy_log_to_clipboard_hint","catch","copy_log_to_clipboard_hint_failed","copy_log_to_clipboard_hint_unsupported"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["/**\r\n * Show popup tip\r\n *\r\n * @param {object} showIcon\r\n */\r\nfunction spbcPopupTipShow(showIcon) { // eslint-disable-line no-unused-vars\r\n let tipTitle = showIcon.attr('spbc_tip_title') || null;\r\n let tipText = showIcon.attr('spbc_tip_text') || null;\r\n let removeDescFunc = function(e) {\r\n if (\r\n typeof e === 'undefined' ||\r\n (\r\n jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 ||\r\n jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')\r\n )\r\n ) {\r\n jQuery('.spbc_popup_tip--wrapper').hide();\r\n jQuery(document).off('click', removeDescFunc);\r\n }\r\n };\r\n\r\n removeDescFunc();\r\n\r\n showIcon.after('

');\r\n\r\n let obj = jQuery('.spbc_popup_tip--wrapper');\r\n\r\n obj.empty()\r\n .append('
')\r\n .css({\r\n top: showIcon.position().top - 2,\r\n left: showIcon.position().left + 25,\r\n });\r\n obj.append('')\r\n .append('

' + tipTitle + '

')\r\n .append('

' + tipText + '

');\r\n\r\n jQuery(document).on('click', removeDescFunc);\r\n showIcon.parents('tr').on('mouseout', removeDescFunc);\r\n}\r\n\r\n/**\r\n * View file in the scanner\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonFileViewEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_file_view',\r\n file_id: self.parents('.row-actions').attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n spbcReloadAccordion();\r\n });\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Delete file from analysis log\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerAnalysisLogDeleteFromLog(obj) { // eslint-disable-line no-unused-vars\r\n let fileIds = [];\r\n const self = jQuery(obj);\r\n let spinner;\r\n\r\n if ( jQuery(obj).hasClass('tbl-row_action') ) {\r\n fileIds.push(self.parents('.row-actions').attr('uid'));\r\n spinner = self.parent().siblings('.tbl-preloader--tiny');\r\n } else {\r\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select:checked');\r\n if (selectedItems.length === 0) {\r\n alert('Please, select elements.');\r\n return;\r\n }\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n fileIds.push(elementId);\r\n });\r\n spinner = self.children('.tbl-preloader--small');\r\n }\r\n\r\n const data = {\r\n action: 'spbc_scanner_analysis_log_delete_from_log',\r\n file_ids: fileIds,\r\n };\r\n\r\n let params = {\r\n spinner: spinner,\r\n callback: function() {\r\n window.location.reload();\r\n },\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * View page in the scanner\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonPageViewEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_page_view',\r\n page_url: self.parents('.row-actions').attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n },\r\n };\r\n\r\n let wpWrap = jQuery('#wpwrap');\r\n let dialogWindow = jQuery('#spbc_dialog');\r\n\r\n dialogWindow.dialog({\r\n modal: true,\r\n title: 'Loading..',\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(wpWrap.width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: false,\r\n resizable: false,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n });\r\n\r\n dialogWindow.append('\"Wait');\r\n\r\n let spinner = jQuery('#spbc_file_view_preloader');\r\n let sizeMultiplier = (wpWrap.width() * 0.0004);\r\n\r\n spinner.height(128 * sizeMultiplier);\r\n spinner.width(128 * sizeMultiplier);\r\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\r\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\r\n\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Callback for file view\r\n *\r\n * @param {object} result\r\n */\r\nfunction spbcScannerButtonViewCallback(result) { // eslint-disable-line no-unused-vars\r\n let dialogWindow = jQuery('#spbc_dialog');\r\n dialogWindow.empty();\r\n\r\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\r\n\r\n let rowTemplate = '
%s';\r\n rowTemplate += '

%s


';\r\n\r\n /* eslint-disable guard-for-in */\r\n for (let row in result.file) {\r\n dialogWindow.append(rowTemplate.printf(row, result.file[row]));\r\n }\r\n\r\n let contentHeight = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\r\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\r\n\r\n dialogWindow.css({\r\n height: height,\r\n overflow: overflow,\r\n });\r\n\r\n dialogWindow.dialog({\r\n modal: true,\r\n title: ('Loaded: ' + result.file_path),\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(jQuery('#wpwrap').width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: true,\r\n resizable: false,\r\n height: height,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = overflow;\r\n jQuery('#spbc_dialog').height(height);\r\n jQuery('.ui-widget-overlay').on('click', function() {\r\n jQuery('#spbc_dialog').dialog('close');\r\n });\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n });\r\n\r\n console.log('FILE_VIEWED');\r\n}\r\n\r\n/**\r\n * Event for file view bad\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonFileViewBadEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_file_view',\r\n file_id: self.parents('.row-actions').attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewBadFileCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Event for page view bad\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonPageViewBadEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_page_view',\r\n page_url: self.parent().attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewBadCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Callback for file view bad\r\n *\r\n * @param {object} result\r\n * @param {object} data\r\n * @param {object} params\r\n */\r\nfunction spbcScannerButtonViewBadFileCallback(result, data, params) { // eslint-disable-line no-unused-vars\r\n console.log('FILE_VIEWED_BAD_CODE_FILE');\r\n jQuery('#spbc_dialog').empty();\r\n\r\n let rowTemplate = '
%s';\r\n rowTemplate += '

%s


';\r\n let rowTemplateBad = '
';\r\n rowTemplateBad += '%s';\r\n rowTemplateBad += '

%s


';\r\n let severityParts = [];\r\n let severityPartsSorted = [];\r\n let severityKeysSorted = [];\r\n\r\n result.weak_spots = JSON.parse(result.weak_spots);\r\n /* eslint-disable guard-for-in */\r\n for (let severity in result.weak_spots) {\r\n severityParts[severity] = Object.keys(result.weak_spots[severity]);\r\n }\r\n\r\n severityKeysSorted = Object.keys(severityParts).sort();\r\n\r\n /* eslint-disable guard-for-in */\r\n for (key in severityKeysSorted) {\r\n severityPartsSorted[severityKeysSorted[key]] = severityParts[severityKeysSorted[key]];\r\n }\r\n\r\n /* eslint-disable guard-for-in */\r\n for (let severityPart in severityPartsSorted) {\r\n let headerName = 'spbc-dialog-row-header-' + severityPart.toLowerCase();\r\n let headerHtml = '';\r\n headerHtml += severityPart + ' weakspots:';\r\n const dialog = jQuery('#spbc_dialog');\r\n\r\n dialog.append(rowTemplate.printf('', headerHtml));\r\n dialog.append(rowTemplate. printf('...', '...'));\r\n\r\n let header = dialog.find('#' + headerName);\r\n header.parent().parent().css('text-align', 'center');\r\n header.parent().parent().css('border', '1px dotted');\r\n header.parent().parent().css('background', 'darkgrey');\r\n\r\n /* eslint-disable guard-for-in */\r\n for (let strNum in severityParts[severityPart]) {\r\n // Sort bad line\r\n strNum = [...new Set(strNum)].sort();\r\n\r\n let row = +severityParts[severityPart][strNum];\r\n let displayDepth = 2;\r\n let temp;\r\n // Display only existing lines of file\r\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\r\n if ( typeof result.file[currRow] !== 'undefined' ) {\r\n temp = row === currRow ? rowTemplateBad : rowTemplate;\r\n dialog.append(temp.printf(currRow, result.file[currRow]));\r\n }\r\n }\r\n\r\n // Placing an empty string between results\r\n dialog.append(rowTemplate. printf('...', '...'));\r\n }\r\n }\r\n\r\n // Removing last empty string\r\n jQuery('#spbc_dialog div').last().remove();\r\n\r\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\r\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\r\n\r\n jQuery('#spbc_dialog').dialog({\r\n modal: true,\r\n title: result.file_path,\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(jQuery('#wpwrap').width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: true,\r\n resizable: false,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = overflow;\r\n jQuery('#spbc_dialog').height(height);\r\n jQuery('.ui-widget-overlay').on('click', function() {\r\n jQuery('#spbc_dialog').dialog('close');\r\n });\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Callback for file view bad\r\n *\r\n * @param {object} result\r\n * @param {object} data\r\n * @param {object} params\r\n */\r\nfunction spbcScannerButtonViewBadCallback(result, data, params) { // eslint-disable-line no-unused-vars\r\n console.log('FILE_VIEWED_BAD_CODE');\r\n\r\n let afterClose = () => {};\r\n\r\n if ( result.success == true ) {\r\n console.log(result);\r\n let rowTemplate = '
' +\r\n '%s' +\r\n '

%s

' +\r\n '
';\r\n let rowTemplateBad = '
' +\r\n '%s' +\r\n '

%s

' +\r\n '
';\r\n let strNums = [];\r\n\r\n result.weak_spots = JSON.parse(result.weak_spots);\r\n /* eslint-disable guard-for-in */\r\n for (let severity in result.weak_spots) {\r\n strNums = strNums.concat(Object.keys(result.weak_spots[severity]));\r\n }\r\n\r\n strNums = [...new Set(strNums)].sort(); // Sort bad line\r\n // get a map of bad strings\r\n // TODO: Probably there can get something else except CRITICAL in the future\r\n let badStringsMap = new Map(Object.entries(result.weak_spots.CRITICAL));\r\n /* eslint-disable guard-for-in */\r\n for (let strNum in strNums) {\r\n if (strNum == 0 && badStringsMap.get(strNums[strNum]).toLowerCase().includes('doctype')) {\r\n continue;\r\n }\r\n\r\n let row = +strNums[strNum];\r\n let displayDepth = 2;\r\n\r\n // Display only existing lines of file\r\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\r\n if ( typeof result.file[currRow] !== 'undefined' ) {\r\n let isBadString = (row === currRow);\r\n let unformattedRow;\r\n let highlitedRow;\r\n if (isBadString) {\r\n unformattedRow = rowTemplateBad;\r\n } else {\r\n unformattedRow = rowTemplate;\r\n }\r\n if (isBadString && !result.file[currRow].includes('iframe')) {\r\n highlitedRow = unformattedRow.printf(currRow, badStringsMap.get(strNums[strNum]));\r\n } else {\r\n highlitedRow = unformattedRow.printf(currRow, result.file[currRow]);\r\n }\r\n jQuery('#spbc_dialog').append(highlitedRow);\r\n }\r\n }\r\n\r\n // Placing an empty string between results\r\n jQuery('#spbc_dialog').append(rowTemplate. printf('', ''));\r\n\r\n // Removing last empty string\r\n jQuery('#spbc_dialog div').last().remove();\r\n }\r\n } else {\r\n let wrapperElement = '
%s
';\r\n jQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\r\n afterClose = () => {\r\n document.location.reload();\r\n };\r\n }\r\n\r\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let height = 'auto';\r\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\r\n\r\n jQuery('#spbc_dialog').dialog({\r\n modal: true,\r\n title: result.file_path,\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(jQuery('#wpwrap').width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: true,\r\n resizable: false,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = overflow;\r\n jQuery('#spbc_dialog').height(height);\r\n jQuery('.ui-widget-overlay').on('click', function() {\r\n jQuery('#spbc_dialog').dialog('close');\r\n });\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n close: afterClose,\r\n });\r\n}\r\n\r\n/**\r\n * Reloads last scan info\r\n */\r\nfunction spbcScannerReloadScanInfo() { // eslint-disable-line no-unused-vars\r\n jQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\r\n const data = {\r\n action: 'spbc_scanner__last_scan_info',\r\n };\r\n const params = {\r\n callback: (result) => {\r\n document.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Cure file\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonCureFileAjaxHandler(obj) { // eslint-disable-line no-unused-vars\r\n const self = jQuery(obj);\r\n const fileFastHash = self.parents('.row-actions').attr('uid');\r\n\r\n let data = {\r\n action: 'spbc_file_cure_ajax_action',\r\n file_fast_hash: fileFastHash,\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: true,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n spbcModal.open().put(result.data);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n } else {\r\n spbcModal.open().putError(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Restore file from backup\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonRestoreFromBackupAjaxHandler(obj) { // eslint-disable-line no-unused-vars\r\n const self = jQuery(obj);\r\n const fileFastHash = self.parents('.row-actions').attr('uid');\r\n\r\n let data = {\r\n action: 'spbc_restore_file_from_backup_ajax_action',\r\n file_fast_hash: fileFastHash,\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: true,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n spbcModal.open().put(result.data);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n } else {\r\n spbcModal.open().putError(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Clear scan results\r\n * @return {void}\r\n */\r\nfunction spbcScannerButtonClearScanResults() { // eslint-disable-line no-unused-vars\r\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\r\n return;\r\n }\r\n\r\n console.log('CLEAR');\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_clear'},\r\n {\r\n type: 'GET',\r\n successCallback: function() {\r\n document.location = document.location;\r\n },\r\n complete: null,\r\n errorOutput: null,\r\n context: this,\r\n timeout: 40000,\r\n success: function() {\r\n document.location.reload();\r\n },\r\n },\r\n );\r\n}\r\n\r\n/**\r\n * Show copy log to clipboard hint\r\n * @param {string} text\r\n */\r\nfunction spbcScannerCopyLogToClipboardHint(text) {\r\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').text(text);\r\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').show();\r\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').animate({opacity: 0}, 3000, function() {\r\n jQuery(this).hide();\r\n jQuery(this).css('opacity', 1);\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n // EVENT HADLING\r\n spbcTblBulkActionsListen(); // Table. Row bulk handler\r\n spbcTblRowActionsListen(); // Table. Row actions handler\r\n spbcTblPaginationListen(); // Table. Pagination handler\r\n spbcTblSortListen(); // Table. Sort handler\r\n\r\n spbcStartShowHide();\r\n\r\n // Preparing progressbar\r\n jQuery('#spbc_scaner_progress_bar').progressbar({\r\n value: 0,\r\n create: function( event, ui ) {\r\n event.target.style.position = 'relative';\r\n event.target.style.marginBottom = '12px';\r\n },\r\n change: function(event, ui) {\r\n jQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\r\n },\r\n });\r\n\r\n // Preparing accordion\r\n jQuery('#spbc_scan_accordion').accordion({\r\n header: 'h3',\r\n heightStyle: 'content',\r\n collapsible: true,\r\n active: false,\r\n activate: function( event, ui ) {\r\n jQuery('#spbc_scan_accordion')\r\n .accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom spbc-overflow--visible');\r\n },\r\n beforeActivate: function( event, ui ) {\r\n jQuery('#spbc_scan_accordion').accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom');\r\n },\r\n });\r\n\r\n // Init scanner plugin\r\n window.spbcScanner = new SpbcMalwareScanner({\r\n settings: spbcScaner.settings,\r\n states: spbcScaner.states,\r\n button: jQuery('#spbc_perform_scan'),\r\n spinner: jQuery('#spbc_perform_scan').next(),\r\n callback: null,\r\n progress_overall: jQuery('#spbc_scaner_progress_overall'),\r\n progressbar: jQuery('#spbc_scaner_progress_bar'),\r\n progressbar_text: jQuery('.spbc_progressbar_counter span'),\r\n wrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\r\n warnings: {\r\n long_scan: jQuery('.spbc_hint_warning__long_scan'),\r\n outdated: jQuery('.spbc_hint_warning__outdated'),\r\n },\r\n });\r\n\r\n jQuery(document).on('click', '.spbc_popup_tip--icon---show', function() {\r\n spbcPopupTipShow( jQuery( this ) );\r\n });\r\n\r\n jQuery('#spbc_perform_scan').on('click', function() {\r\n jQuery('#spbcscan-results-log-module').remove();\r\n spbcScanner.actionControl();\r\n\r\n if (!jQuery('.spbc_log-wrapper .panel-body').length) {\r\n jQuery('.spbc_log-wrapper').append('
');\r\n }\r\n\r\n jQuery('.spbc_log-wrapper').resizable({\r\n handles: 'n, s',\r\n containment: 'document',\r\n });\r\n });\r\n\r\n jQuery('#spbcscan-results-log-module').resizable({\r\n handles: 'n, s',\r\n containment: 'document',\r\n });\r\n\r\n // Clear scanner's tables\r\n jQuery('#spbc_scanner_clear').on('click', function() {\r\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\r\n return;\r\n }\r\n\r\n console.log('CLEAR');\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_clear'},\r\n {\r\n type: 'GET',\r\n successCallback: function() {\r\n document.location = document.location;\r\n },\r\n complete: null,\r\n errorOutput: null,\r\n context: this,\r\n timeout: 40000,\r\n success: function() {\r\n document.location.reload();\r\n },\r\n },\r\n );\r\n });\r\n\r\n jQuery('#spbc_scanner_save_to_pdf').on('click', function() {\r\n jQuery.ajax({\r\n url: spbcSettings.ajaxurl,\r\n type: 'POST',\r\n data: {\r\n action: 'spbc_scanner_save_to_pdf',\r\n security: spbcSettings.ajax_nonce,\r\n no_cache: Math.random(),\r\n },\r\n xhrFields: {\r\n responseType: 'blob',\r\n },\r\n success: function(data) {\r\n jQuery.ajax({\r\n url: spbcSettings.ajaxurl,\r\n type: 'POST',\r\n data: {\r\n action: 'spbc_scanner_get_pdf_file_name',\r\n security: spbcSettings.ajax_nonce,\r\n no_cache: Math.random(),\r\n },\r\n xhrFields: {\r\n responseType: 'text',\r\n },\r\n success: function(filename) {\r\n let blob=new Blob([data]);\r\n let link=document.createElement('a');\r\n link.href=window.URL.createObjectURL(blob);\r\n link.download=filename.data;\r\n link.click();\r\n },\r\n },\r\n );\r\n },\r\n });\r\n });\r\n\r\n jQuery('#spbc_load_more_scan_logs').on('click', function(e) {\r\n e.preventDefault();\r\n\r\n jQuery.ajax({\r\n url: spbcSettings.ajaxurl,\r\n type: 'POST',\r\n data: {\r\n action: 'spbc_scanner_load_more_scan_logs',\r\n security: spbcSettings.ajax_nonce,\r\n no_cache: Math.random(),\r\n offset: jQuery(this).data('offset') + 100,\r\n },\r\n xhrFields: {\r\n responseType: 'text',\r\n },\r\n success: function(data) {\r\n if (data.success) {\r\n jQuery('#spbcscan-results-log-module .panel-body').append(data.data);\r\n }\r\n },\r\n });\r\n });\r\n\r\n if (jQuery('#spbc_scanner_copy_log_to_clipboard').length) {\r\n jQuery('#spbc_scanner_copy_log_to_clipboard').on('click', function(e) {\r\n e.preventDefault();\r\n if (navigator.clipboard) {\r\n let log = jQuery('#spbcscan-results-log-module .panel-body').html();\r\n let formattedLog = log.replace(//g, '').replace(/<\\/b>/g, '');\r\n formattedLog = formattedLog.replace(/

/g, '\\n').replace(/<\\/p>/g, '');\r\n navigator.clipboard.writeText(formattedLog).then(() => {\r\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint);\r\n }).catch((err) => {\r\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_failed);\r\n });\r\n } else {\r\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_unsupported);\r\n }\r\n });\r\n }\r\n});\r\n"],"names":["spbcPopupTipShow","showIcon","let","tipTitle","attr","tipText","removeDescFunc","e","jQuery","target","parent","length","hasClass","hide","document","off","after","obj","empty","append","css","top","position","left","on","parents","spbcScannerButtonFileViewEvent","self","data","action","file_id","params","spinner","siblings","callback","spbcScannerButtonViewCallback","errorOutput","msg","spbcModal","open","putError","addEventListener","spbcReloadAccordion","spbcSendAJAXRequest","spbcScannerAnalysisLogDeleteFromLog","fileIds","push","selectedItems","closest","find","alert","each","index","element","elementId","val","children","file_ids","window","location","reload","spbcScannerButtonPageViewEvent","page_url","wpWrap","dialogWindow","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","sizeMultiplier","result","row","rowTemplate","display","file","printf","contentHeight","Object","keys","visibleHeight","file_path","console","log","spbcScannerButtonFileViewBadEvent","spbcScannerButtonViewBadFileCallback","spbcScannerButtonPageViewBadEvent","spbcScannerButtonViewBadCallback","severityKeysSorted","severity","severityPart","rowTemplateBad","severityParts","severityPartsSorted","weak_spots","JSON","parse","key","sort","strNum","headerName","toLowerCase","headerHtml","header","Set","temp","currRow","last","remove","afterClose","success","strNums","concat","badStringsMap","Map","entries","CRITICAL","get","includes","isBadString","unformattedRow","highlitedRow","content","close","spbcScannerReloadScanInfo","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbcScannerButtonCureFileAjaxHandler","file_fast_hash","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","put","spbcScannerButtonRestoreFromBackupAjaxHandler","spbcScannerButtonClearScanResults","confirm","successCallback","complete","context","this","timeout","spbcScannerCopyLogToClipboardHint","animate","opacity","ready","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","heightStyle","collapsible","active","activate","beforeActivate","spbcScanner","SpbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","preventDefault","offset","navigator","clipboard","formattedLog","html","replace","writeText","then","copy_log_to_clipboard_hint","catch","copy_log_to_clipboard_hint_failed","copy_log_to_clipboard_hint_unsupported"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-settings_tab--security_log.min.js.map b/js/spbc-settings_tab--security_log.min.js.map index aa06fa92e..ebebcae52 100644 --- a/js/spbc-settings_tab--security_log.min.js.map +++ b/js/spbc-settings_tab--security_log.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--security_log.min.js","sources":["spbc-settings_tab--security_log.js"],"sourcesContent":["/**\n * Show more security logs\n */\nfunction spbcSecLogsShowMoreListen() {\n jQuery('#spbc_show_more_button').on('click', function() {\n if (spbcSettingsSecLogs.clicks < 2) {\n spbcSettingsSecLogs.clicks++;\n let data = {\n action: 'spbc_show_more_security_logs',\n amount: spbcSettingsSecLogs.amount * (+spbcSettingsSecLogs.clicks+1),\n };\n let params = {\n button: this,\n spinner: this.nextElementSibling,\n wrapper: jQuery('#spbc_tbl__secuirty_logs').find('tbody'),\n callback: spbcSecLogsShowMoreCallback,\n };\n spbcSendAJAXRequest( data, params );\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(this).hide();\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n });\n}\n\n/**\n * Callback for SHOW MORE SECURITY LOGS\n * @param {*} result\n * @param {*} data\n * @param {*} params\n */\nfunction spbcSecLogsShowMoreCallback(result, data, params) {\n if (result.size > 0) {\n jQuery(params.wrapper).html(result.html);\n spbcTblRowActionsListen();\n spbcStartShowHide();\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(params.button).hide();\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n}\n\n/**\n * Allow IP\n * @param {*} ip\n * @return {boolean}\n */\nfunction spbcSecLogsAllowIp(ip) { // eslint-disable-line no-unused-vars\n spbcSecLogsFilterIp( ip, 'allow');\n return false;\n}\n\n/**\n * Ban IP\n * @param {*} ip\n * @return {boolean}\n */\nfunction spbcSecLogsBanIp(ip) { // eslint-disable-line no-unused-vars\n spbcSecLogsFilterIp( ip, 'deny');\n return false;\n}\n\n/**\n * Filter IP\n * @param {*} ip\n * @param {*} status\n * @param {*} bulk\n * @return {boolean}\n */\nfunction spbcSecLogsFilterIp( ip, status, bulk = false) {\n const data = {\n action: 'spbc_tc__filter_ip',\n ip: ip,\n status: status,\n };\n const params = {\n status: status,\n };\n if (!bulk) {\n params.callback = spbcSecLogsAllowIpCallback;\n }\n spbcSendAJAXRequest( data, params );\n\n return false;\n}\n\n/**\n * Callback for FILTER IP\n * @param {*} result\n * @param {*} data\n */\nfunction spbcSecLogsAllowIpCallback(result, data) {\n console.log(data);\n if (result.success) {\n let msg = data.status === 'allow' ? 'Allowed' : 'Banned';\n alert('Success. Selected IPs have been ' + msg + '. Changes will be applied within 10 minutes.');\n } else {\n alert(result.data);\n }\n}\n\njQuery(document).ready(function() {\n spbcTblRowActionsListen(); // Table. Row actions handler\n spbcTblBulkActionsListen();\n spbcTblPaginationListen(); // Table. Pagination handler\n spbcTblSortListen(); // Table. Sort handler\n\n // Handler for show more SECURITY LOGS\n spbcSecLogsShowMoreListen();\n\n // Start to hide long values in a table\n spbcStartShowHide();\n});\n"],"names":["spbcSecLogsShowMoreListen","jQuery","on","data","params","spbcSettingsSecLogs","clicks","action","amount","button","this","spinner","nextElementSibling","wrapper","find","callback","spbcSecLogsShowMoreCallback","spbcSendAJAXRequest","hide","siblings","css","result","size","html","spbcTblRowActionsListen","spbcStartShowHide","spbcSecLogsAllowIp","ip","spbcSecLogsFilterIp","spbcSecLogsBanIp","status","bulk","spbcSecLogsAllowIpCallback","console","log","success","msg","alert","document","ready","spbcTblBulkActionsListen","spbcTblPaginationListen","spbcTblSortListen"],"mappings":"AAGA,SAASA,4BACLC,OAAO,wBAAwB,EAAEC,GAAG,QAAS,WACzC,IAEQC,EAIAC,EANJC,oBAAoBC,OAAS,GAC7BD,oBAAoBC,MAAM,GACtBH,EAAO,CACPI,OAAQ,+BACRC,OAAQH,oBAAoBG,QAAU,CAACH,oBAAoBC,OAAO,EACtE,EACIF,EAAS,CACTK,OAAQC,KACRC,QAASD,KAAKE,mBACdC,QAASZ,OAAO,0BAA0B,EAAEa,KAAK,OAAO,EACxDC,SAAUC,2BACd,EACAC,oBAAqBd,EAAMC,CAAO,IAGlCH,OAAOS,IAAI,EAAEQ,KAAK,EAClBjB,OAAOS,IAAI,EAAES,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAQA,SAASJ,4BAA4BK,EAAQlB,EAAMC,GAC7B,EAAdiB,EAAOC,MACPrB,OAAOG,EAAOS,OAAO,EAAEU,KAAKF,EAAOE,IAAI,EACvCC,wBAAwB,EACxBC,kBAAkB,IAGlBxB,OAAOG,EAAOK,MAAM,EAAES,KAAK,EAC3BjB,OAAOG,EAAOK,MAAM,EAAEU,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAOA,SAASM,mBAAmBC,GAExB,OADAC,oBAAqBD,EAAI,OAAO,EACzB,CAAA,CACX,CAOA,SAASE,iBAAiBF,GAEtB,OADAC,oBAAqBD,EAAI,MAAM,EACxB,CAAA,CACX,CASA,SAASC,oBAAqBD,EAAIG,EAAQC,EAAO,CAAA,GACvC5B,EAAO,CACTI,OAAQ,qBACRoB,GAAIA,EACJG,OAAQA,CACZ,EACM1B,EAAS,CACX0B,OAAQA,CACZ,EAMA,OALKC,IACD3B,EAAOW,SAAWiB,4BAEtBf,oBAAqBd,EAAMC,CAAO,EAE3B,CAAA,CACX,CAOA,SAAS4B,2BAA2BX,EAAQlB,GACxC8B,QAAQC,IAAI/B,CAAI,EACZkB,EAAOc,SACHC,EAAsB,UAAhBjC,EAAK2B,OAAqB,UAAY,SAChDO,MAAM,mCAAqCD,EAAM,8CAA8C,GAE/FC,MAAMhB,EAAOlB,IAAI,CAEzB,CAEAF,OAAOqC,QAAQ,EAAEC,MAAM,WACnBf,wBAAwB,EACxBgB,yBAAyB,EACzBC,wBAAwB,EACxBC,kBAAkB,EAGlB1C,0BAA0B,EAG1ByB,kBAAkB,CACtB,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--security_log.min.js","sources":["spbc-settings_tab--security_log.js"],"sourcesContent":["/**\r\n * Show more security logs\r\n */\r\nfunction spbcSecLogsShowMoreListen() {\r\n jQuery('#spbc_show_more_button').on('click', function() {\r\n if (spbcSettingsSecLogs.clicks < 2) {\r\n spbcSettingsSecLogs.clicks++;\r\n let data = {\r\n action: 'spbc_show_more_security_logs',\r\n amount: spbcSettingsSecLogs.amount * (+spbcSettingsSecLogs.clicks+1),\r\n };\r\n let params = {\r\n button: this,\r\n spinner: this.nextElementSibling,\r\n wrapper: jQuery('#spbc_tbl__secuirty_logs').find('tbody'),\r\n callback: spbcSecLogsShowMoreCallback,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(this).hide();\r\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Callback for SHOW MORE SECURITY LOGS\r\n * @param {*} result\r\n * @param {*} data\r\n * @param {*} params\r\n */\r\nfunction spbcSecLogsShowMoreCallback(result, data, params) {\r\n if (result.size > 0) {\r\n jQuery(params.wrapper).html(result.html);\r\n spbcTblRowActionsListen();\r\n spbcStartShowHide();\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(params.button).hide();\r\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n}\r\n\r\n/**\r\n * Allow IP\r\n * @param {*} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcSecLogsAllowIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcSecLogsFilterIp( ip, 'allow');\r\n return false;\r\n}\r\n\r\n/**\r\n * Ban IP\r\n * @param {*} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcSecLogsBanIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcSecLogsFilterIp( ip, 'deny');\r\n return false;\r\n}\r\n\r\n/**\r\n * Filter IP\r\n * @param {*} ip\r\n * @param {*} status\r\n * @param {*} bulk\r\n * @return {boolean}\r\n */\r\nfunction spbcSecLogsFilterIp( ip, status, bulk = false) {\r\n const data = {\r\n action: 'spbc_tc__filter_ip',\r\n ip: ip,\r\n status: status,\r\n };\r\n const params = {\r\n status: status,\r\n };\r\n if (!bulk) {\r\n params.callback = spbcSecLogsAllowIpCallback;\r\n }\r\n spbcSendAJAXRequest( data, params );\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Callback for FILTER IP\r\n * @param {*} result\r\n * @param {*} data\r\n */\r\nfunction spbcSecLogsAllowIpCallback(result, data) {\r\n console.log(data);\r\n if (result.success) {\r\n let msg = data.status === 'allow' ? 'Allowed' : 'Banned';\r\n alert('Success. Selected IPs have been ' + msg + '. Changes will be applied within 10 minutes.');\r\n } else {\r\n alert(result.data);\r\n }\r\n}\r\n\r\njQuery(document).ready(function() {\r\n spbcTblRowActionsListen(); // Table. Row actions handler\r\n spbcTblBulkActionsListen();\r\n spbcTblPaginationListen(); // Table. Pagination handler\r\n spbcTblSortListen(); // Table. Sort handler\r\n\r\n // Handler for show more SECURITY LOGS\r\n spbcSecLogsShowMoreListen();\r\n\r\n // Start to hide long values in a table\r\n spbcStartShowHide();\r\n});\r\n"],"names":["spbcSecLogsShowMoreListen","jQuery","on","data","params","spbcSettingsSecLogs","clicks","action","amount","button","this","spinner","nextElementSibling","wrapper","find","callback","spbcSecLogsShowMoreCallback","spbcSendAJAXRequest","hide","siblings","css","result","size","html","spbcTblRowActionsListen","spbcStartShowHide","spbcSecLogsAllowIp","ip","spbcSecLogsFilterIp","spbcSecLogsBanIp","status","bulk","spbcSecLogsAllowIpCallback","console","log","success","msg","alert","document","ready","spbcTblBulkActionsListen","spbcTblPaginationListen","spbcTblSortListen"],"mappings":"AAGA,SAASA,4BACLC,OAAO,wBAAwB,EAAEC,GAAG,QAAS,WACzC,IAEQC,EAIAC,EANJC,oBAAoBC,OAAS,GAC7BD,oBAAoBC,MAAM,GACtBH,EAAO,CACPI,OAAQ,+BACRC,OAAQH,oBAAoBG,QAAU,CAACH,oBAAoBC,OAAO,EACtE,EACIF,EAAS,CACTK,OAAQC,KACRC,QAASD,KAAKE,mBACdC,QAASZ,OAAO,0BAA0B,EAAEa,KAAK,OAAO,EACxDC,SAAUC,2BACd,EACAC,oBAAqBd,EAAMC,CAAO,IAGlCH,OAAOS,IAAI,EAAEQ,KAAK,EAClBjB,OAAOS,IAAI,EAAES,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAQA,SAASJ,4BAA4BK,EAAQlB,EAAMC,GAC7B,EAAdiB,EAAOC,MACPrB,OAAOG,EAAOS,OAAO,EAAEU,KAAKF,EAAOE,IAAI,EACvCC,wBAAwB,EACxBC,kBAAkB,IAGlBxB,OAAOG,EAAOK,MAAM,EAAES,KAAK,EAC3BjB,OAAOG,EAAOK,MAAM,EAAEU,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAOA,SAASM,mBAAmBC,GAExB,OADAC,oBAAqBD,EAAI,OAAO,EACzB,CAAA,CACX,CAOA,SAASE,iBAAiBF,GAEtB,OADAC,oBAAqBD,EAAI,MAAM,EACxB,CAAA,CACX,CASA,SAASC,oBAAqBD,EAAIG,EAAQC,EAAO,CAAA,GACvC5B,EAAO,CACTI,OAAQ,qBACRoB,GAAIA,EACJG,OAAQA,CACZ,EACM1B,EAAS,CACX0B,OAAQA,CACZ,EAMA,OALKC,IACD3B,EAAOW,SAAWiB,4BAEtBf,oBAAqBd,EAAMC,CAAO,EAE3B,CAAA,CACX,CAOA,SAAS4B,2BAA2BX,EAAQlB,GACxC8B,QAAQC,IAAI/B,CAAI,EACZkB,EAAOc,SACHC,EAAsB,UAAhBjC,EAAK2B,OAAqB,UAAY,SAChDO,MAAM,mCAAqCD,EAAM,8CAA8C,GAE/FC,MAAMhB,EAAOlB,IAAI,CAEzB,CAEAF,OAAOqC,QAAQ,EAAEC,MAAM,WACnBf,wBAAwB,EACxBgB,yBAAyB,EACzBC,wBAAwB,EACxBC,kBAAkB,EAGlB1C,0BAA0B,EAG1ByB,kBAAkB,CACtB,CAAC"} \ No newline at end of file diff --git a/js/spbc-settings_tab--settings_general.min.js.map b/js/spbc-settings_tab--settings_general.min.js.map index 0d3847ca4..44828474f 100644 --- a/js/spbc-settings_tab--settings_general.min.js.map +++ b/js/spbc-settings_tab--settings_general.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--settings_general.min.js","sources":["spbc-settings_tab--settings_general.js"],"sourcesContent":["jQuery(document).ready(function() {\n // Show/Hide access key\n jQuery('#showHideLink').on('click', function() {\n jQuery('#spbc_key').val(jQuery('#spbc_key').attr('key'));\n jQuery('#spbc_key+div').show();\n jQuery(this).fadeOut(300);\n });\n\n // Set time zone filed value if key is bad\n if ( !+spbcSettings.key_is_ok ) {\n let d = new Date();\n jQuery('#spbc_admin_timezone').val(d.getTimezoneOffset()/60*(-1));\n }\n\n /**\n * Shuffle authentication unique keys and salts\n */\n function spbcShuffleSalts() {\n let data = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_action_shuffle_salts';\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n document.location.reload();\n } else {\n alert(result.data);\n }\n },\n });\n }\n\n // Event for shuffle authentication unique keys and salts\n // Enabling the salt update button and repeatedly pressing\n let actionShuffleSaltsCountClicks = 0;\n\n jQuery('#action-shuffle-salts').click(function(e) {\n e.preventDefault();\n\n if (jQuery(this).hasClass('disabled')) {\n actionShuffleSaltsCountClicks++;\n if (actionShuffleSaltsCountClicks === 3) {\n jQuery(this).removeClass('disabled');\n }\n } else {\n actionShuffleSaltsCountClicks = 0;\n\n if (confirm('Are you sure?')) {\n spbcShuffleSalts();\n }\n }\n });\n\n jQuery('button[id*=\"action-adjust-change-\"]').click(function(e) {\n e.preventDefault();\n\n let data = {};\n data.action = 'spbc_action_adjust_change';\n data.adjust = jQuery(this).data('adjust');\n\n let params = {};\n params.button = document.getElementById('action-adjust-change-' + data.adjust);\n\n params.success = function() {\n document.location.reload();\n };\n\n spbcSendAJAXRequest(data, params);\n });\n\n jQuery('button[id*=\"action-adjust-reverse-\"]').click(function(e) {\n e.preventDefault();\n\n let data = {};\n data.action = 'spbc_action_adjust_reverse';\n data.adjust = jQuery(this).data('adjust');\n\n let params = {};\n params.button = document.getElementById('action-adjust-reverse-' + data.adjust);\n\n params.success = function() {\n document.location.reload();\n };\n\n spbcSendAJAXRequest(data, params);\n });\n});\n"],"names":["jQuery","document","ready","d","on","val","attr","show","this","fadeOut","spbcSettings","key_is_ok","Date","getTimezoneOffset","let","actionShuffleSaltsCountClicks","click","e","preventDefault","hasClass","removeClass","confirm","data","security","ajax_nonce","action","ajax","type","async","url","ajaxurl","success","result","location","reload","alert","params","adjust","button","getElementById","spbcSendAJAXRequest"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WASnB,IACQC,EARRH,OAAO,eAAe,EAAEI,GAAG,QAAS,WAChCJ,OAAO,WAAW,EAAEK,IAAIL,OAAO,WAAW,EAAEM,KAAK,KAAK,CAAC,EACvDN,OAAO,eAAe,EAAEO,KAAK,EAC7BP,OAAOQ,IAAI,EAAEC,QAAQ,GAAG,CAC5B,CAAC,EAGK,CAACC,aAAaC,YACZR,EAAI,IAAIS,KACZZ,OAAO,sBAAsB,EAAEK,IAAIF,EAAEU,kBAAkB,EAAE,GAAG,CAAE,CAAE,GA4BpEC,IAAIC,EAAgC,EAEpCf,OAAO,uBAAuB,EAAEgB,MAAM,SAASC,GAC3CA,EAAEC,eAAe,EAEblB,OAAOQ,IAAI,EAAEW,SAAS,UAAU,EAEM,IADtCJ,EAAAA,GAEIf,OAAOQ,IAAI,EAAEY,YAAY,UAAU,GAGvCL,EAAgC,EAE5BM,QAAQ,eAAe,KAlC3BC,EAAO,IACNC,SAAWb,aAAac,WAC7BF,EAAKG,OAAS,4BAEdzB,OAAO0B,KAAK,CACRC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKnB,aAAaoB,QAClBR,KAAMA,EACNS,QAAS,SAASC,GACVA,EAAOD,QACP9B,SAASgC,SAASC,OAAO,EAEzBC,MAAMH,EAAOV,IAAI,CAEzB,CACJ,CAAC,GAsBL,CAAC,EAEDtB,OAAO,qCAAqC,EAAEgB,MAAM,SAASC,GACzDA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,2BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,wBAA0BjB,EAAKe,MAAM,EAE7ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,EAEDpC,OAAO,sCAAsC,EAAEgB,MAAM,SAASC,GAC1DA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,4BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,yBAA2BjB,EAAKe,MAAM,EAE9ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,CACL,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--settings_general.min.js","sources":["spbc-settings_tab--settings_general.js"],"sourcesContent":["jQuery(document).ready(function() {\r\n // Show/Hide access key\r\n jQuery('#showHideLink').on('click', function() {\r\n jQuery('#spbc_key').val(jQuery('#spbc_key').attr('key'));\r\n jQuery('#spbc_key+div').show();\r\n jQuery(this).fadeOut(300);\r\n });\r\n\r\n // Set time zone filed value if key is bad\r\n if ( !+spbcSettings.key_is_ok ) {\r\n let d = new Date();\r\n jQuery('#spbc_admin_timezone').val(d.getTimezoneOffset()/60*(-1));\r\n }\r\n\r\n /**\r\n * Shuffle authentication unique keys and salts\r\n */\r\n function spbcShuffleSalts() {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_action_shuffle_salts';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n document.location.reload();\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n }\r\n\r\n // Event for shuffle authentication unique keys and salts\r\n // Enabling the salt update button and repeatedly pressing\r\n let actionShuffleSaltsCountClicks = 0;\r\n\r\n jQuery('#action-shuffle-salts').click(function(e) {\r\n e.preventDefault();\r\n\r\n if (jQuery(this).hasClass('disabled')) {\r\n actionShuffleSaltsCountClicks++;\r\n if (actionShuffleSaltsCountClicks === 3) {\r\n jQuery(this).removeClass('disabled');\r\n }\r\n } else {\r\n actionShuffleSaltsCountClicks = 0;\r\n\r\n if (confirm('Are you sure?')) {\r\n spbcShuffleSalts();\r\n }\r\n }\r\n });\r\n\r\n jQuery('button[id*=\"action-adjust-change-\"]').click(function(e) {\r\n e.preventDefault();\r\n\r\n let data = {};\r\n data.action = 'spbc_action_adjust_change';\r\n data.adjust = jQuery(this).data('adjust');\r\n\r\n let params = {};\r\n params.button = document.getElementById('action-adjust-change-' + data.adjust);\r\n\r\n params.success = function() {\r\n document.location.reload();\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n });\r\n\r\n jQuery('button[id*=\"action-adjust-reverse-\"]').click(function(e) {\r\n e.preventDefault();\r\n\r\n let data = {};\r\n data.action = 'spbc_action_adjust_reverse';\r\n data.adjust = jQuery(this).data('adjust');\r\n\r\n let params = {};\r\n params.button = document.getElementById('action-adjust-reverse-' + data.adjust);\r\n\r\n params.success = function() {\r\n document.location.reload();\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n });\r\n});\r\n"],"names":["jQuery","document","ready","d","on","val","attr","show","this","fadeOut","spbcSettings","key_is_ok","Date","getTimezoneOffset","let","actionShuffleSaltsCountClicks","click","e","preventDefault","hasClass","removeClass","confirm","data","security","ajax_nonce","action","ajax","type","async","url","ajaxurl","success","result","location","reload","alert","params","adjust","button","getElementById","spbcSendAJAXRequest"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WASnB,IACQC,EARRH,OAAO,eAAe,EAAEI,GAAG,QAAS,WAChCJ,OAAO,WAAW,EAAEK,IAAIL,OAAO,WAAW,EAAEM,KAAK,KAAK,CAAC,EACvDN,OAAO,eAAe,EAAEO,KAAK,EAC7BP,OAAOQ,IAAI,EAAEC,QAAQ,GAAG,CAC5B,CAAC,EAGK,CAACC,aAAaC,YACZR,EAAI,IAAIS,KACZZ,OAAO,sBAAsB,EAAEK,IAAIF,EAAEU,kBAAkB,EAAE,GAAG,CAAE,CAAE,GA4BpEC,IAAIC,EAAgC,EAEpCf,OAAO,uBAAuB,EAAEgB,MAAM,SAASC,GAC3CA,EAAEC,eAAe,EAEblB,OAAOQ,IAAI,EAAEW,SAAS,UAAU,EAEM,IADtCJ,EAAAA,GAEIf,OAAOQ,IAAI,EAAEY,YAAY,UAAU,GAGvCL,EAAgC,EAE5BM,QAAQ,eAAe,KAlC3BC,EAAO,IACNC,SAAWb,aAAac,WAC7BF,EAAKG,OAAS,4BAEdzB,OAAO0B,KAAK,CACRC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKnB,aAAaoB,QAClBR,KAAMA,EACNS,QAAS,SAASC,GACVA,EAAOD,QACP9B,SAASgC,SAASC,OAAO,EAEzBC,MAAMH,EAAOV,IAAI,CAEzB,CACJ,CAAC,GAsBL,CAAC,EAEDtB,OAAO,qCAAqC,EAAEgB,MAAM,SAASC,GACzDA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,2BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,wBAA0BjB,EAAKe,MAAM,EAE7ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,EAEDpC,OAAO,sCAAsC,EAAEgB,MAAM,SAASC,GAC1DA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,4BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,yBAA2BjB,EAAKe,MAAM,EAE9ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,CACL,CAAC"} \ No newline at end of file diff --git a/js/spbc-settings_tab--summary.min.js.map b/js/spbc-settings_tab--summary.min.js.map index 58b4147e7..a5a5f7e95 100644 --- a/js/spbc-settings_tab--summary.min.js.map +++ b/js/spbc-settings_tab--summary.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--summary.min.js","sources":["spbc-settings_tab--summary.js"],"sourcesContent":["jQuery(document).ready(function() {\n console.log('TAB - SUMMARY');\n});\n"],"names":["jQuery","document","ready","console","log"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WACnBC,QAAQC,IAAI,eAAe,CAC/B,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--summary.min.js","sources":["spbc-settings_tab--summary.js"],"sourcesContent":["jQuery(document).ready(function() {\r\n console.log('TAB - SUMMARY');\r\n});\r\n"],"names":["jQuery","document","ready","console","log"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WACnBC,QAAQC,IAAI,eAAe,CAC/B,CAAC"} \ No newline at end of file diff --git a/js/spbc-settings_tab--traffic_control.min.js.map b/js/spbc-settings_tab--traffic_control.min.js.map index 69c0cd766..859a1e569 100644 --- a/js/spbc-settings_tab--traffic_control.min.js.map +++ b/js/spbc-settings_tab--traffic_control.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--traffic_control.min.js","sources":["spbc-settings_tab--traffic_control.js"],"sourcesContent":["/**\n * Callback for displaying Firewall logs\n *\n * @param {obj} result\n * @param {obj} data\n * @param {obj} params\n */\nfunction spbcTcShowMoreCallback(result, data, params) {\n if (data.full_refresh) {\n jQuery(params.wrapper).html(result);\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n } else if (result.size > 0) {\n jQuery(params.wrapper).html(result.html);\n spbcTblRowActionsListen();\n spbcStartShowHide();\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(params.button).hide();\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n}\n\n/**\n * Listener for `Show more` button in the TC log\n */\nfunction spbcTcShowMoreListen() {\n jQuery('#spbc_show_more_fw_logs_button').on('click', function() {\n if (spbcSettingsFWLogs.clicks < 2) {\n spbcSettingsFWLogs.clicks++;\n let data = {\n action: 'spbc_show_more_security_firewall_logs',\n amount: spbcSettingsFWLogs.amount * (+spbcSettingsFWLogs.clicks+1),\n };\n let params = {\n button: this,\n spinner: this.nextElementSibling,\n wrapper: jQuery('#spbc_tbl__traffic_control_logs').find('tbody'),\n callback: spbcTcShowMoreCallback,\n };\n spbcSendAJAXRequest( data, params );\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(this).hide();\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n });\n}\n\njQuery(document).ready(function() {\n spbcTblRowActionsListen(); // Table. Row actions handler\n spbcTblPaginationListen(); // Table. Pagination handler\n spbcTblSortListen(); // Table. Sort handler\n\n // Start to hide long values in a table\n spbcStartShowHide();\n\n // FIREWALL LOGS EVENTS\n\n // Handler for show more FIREWALL LOGS\n spbcTcShowMoreListen();\n\n // Timer for FireWall logs\n setTimeout(function spbcРeartbeat() {\n // Do refresh only if traffic control is enabled and tab is active\n if ( +spbcSettingsFWLogs.moderate && jQuery('.spbc_tab_nav-traffic_control').hasClass('spbc_tab_nav--active')) {\n let data = {\n action: 'spbc_show_more_security_firewall_logs',\n full_refresh: true,\n };\n let params = {\n wrapper: jQuery('#spbc_tbl__traffic_control_logs'),\n callback: spbcTcShowMoreCallback,\n notJson: true,\n };\n spbcSendAJAXRequest( data, params );\n }\n setTimeout(spbcРeartbeat, 60000);\n }, 60000);\n});\n\n/**\n * @param {string} ip\n * @return {boolean}\n */\nfunction spbcTcAllowIp(ip) { // eslint-disable-line no-unused-vars\n spbcTcFilterIp( ip, 'allow');\n return false;\n}\n\n/**\n * @param {string} ip\n * @return {boolean}\n */\nfunction spbcTcBanIp(ip) { // eslint-disable-line no-unused-vars\n spbcTcFilterIp( ip, 'deny');\n return false;\n}\n\n/**\n * @param {string} ip\n * @param {string} status 'allow'|'deny'\n * @return {boolean}\n */\nfunction spbcTcFilterIp(ip, status) {\n const data = {\n action: 'spbc_tc__filter_ip',\n ip: ip,\n status: status,\n };\n const params = {\n callback: spbcTcAllowIpCallback,\n };\n spbcSendAJAXRequest( data, params );\n return false;\n}\n\n/**\n * @param {obj} data\n */\nfunction spbcTcAllowIpCallback(data) {\n if (data.success) {\n alert('Success.');\n } else {\n alert(data.data);\n }\n}\n"],"names":["spbcTcShowMoreCallback","result","data","params","full_refresh","jQuery","wrapper","html","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","size","button","hide","siblings","css","spbcTcShowMoreListen","on","spbcSettingsFWLogs","clicks","action","amount","this","spinner","nextElementSibling","find","callback","spbcSendAJAXRequest","spbcTcAllowIp","ip","spbcTcFilterIp","spbcTcBanIp","status","spbcTcAllowIpCallback","success","alert","document","ready","setTimeout","spbcРeartbeat","moderate","hasClass","notJson"],"mappings":"AAOA,SAASA,uBAAuBC,EAAQC,EAAMC,GACtCD,EAAKE,cACLC,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,CAAM,EAClCO,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,GACG,EAAdV,EAAOW,MACdP,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,EAAOM,IAAI,EACvCC,wBAAwB,EACxBG,kBAAkB,IAGlBN,OAAOF,EAAOU,MAAM,EAAEC,KAAK,EAC3BT,OAAOF,EAAOU,MAAM,EAAEE,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAKA,SAASC,uBACLZ,OAAO,gCAAgC,EAAEa,GAAG,QAAS,WACjD,IAEQhB,EAIAC,EANJgB,mBAAmBC,OAAS,GAC5BD,mBAAmBC,MAAM,GACrBlB,EAAO,CACPmB,OAAQ,wCACRC,OAAQH,mBAAmBG,QAAU,CAACH,mBAAmBC,OAAO,EACpE,EACIjB,EAAS,CACTU,OAAQU,KACRC,QAASD,KAAKE,mBACdnB,QAASD,OAAO,iCAAiC,EAAEqB,KAAK,OAAO,EAC/DC,SAAU3B,sBACd,EACA4B,oBAAqB1B,EAAMC,CAAO,IAGlCE,OAAOkB,IAAI,EAAET,KAAK,EAClBT,OAAOkB,IAAI,EAAER,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAsCA,SAASa,cAAcC,GAEnB,OADAC,eAAgBD,EAAI,OAAO,EACpB,CAAA,CACX,CAMA,SAASE,YAAYF,GAEjB,OADAC,eAAgBD,EAAI,MAAM,EACnB,CAAA,CACX,CAOA,SAASC,eAAeD,EAAIG,GAUxB,OADAL,oBARa,CACTP,OAAQ,qBACRS,GAAIA,EACJG,OAAQA,CACZ,EACe,CACXN,SAAUO,qBACd,CACkC,EAC3B,CAAA,CACX,CAKA,SAASA,sBAAsBhC,GACvBA,EAAKiC,QACLC,MAAM,UAAU,EAEhBA,MAAMlC,EAAKA,IAAI,CAEvB,CA7EAG,OAAOgC,QAAQ,EAAEC,MAAM,WACnB9B,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAGlBC,kBAAkB,EAKlBM,qBAAqB,EAGrBsB,WAAW,SAASC,IAEhB,IACQtC,EAIAC,EALH,CAACgB,mBAAmBsB,UAAYpC,OAAO,+BAA+B,EAAEqC,SAAS,sBAAsB,IACpGxC,EAAO,CACPmB,OAAQ,wCACRjB,aAAc,CAAA,CAClB,EACID,EAAS,CACTG,QAASD,OAAO,iCAAiC,EACjDsB,SAAU3B,uBACV2C,QAAS,CAAA,CACb,EACAf,oBAAqB1B,EAAMC,CAAO,GAEtCoC,WAAWC,EAAe,GAAK,CACnC,EAAG,GAAK,CACZ,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--traffic_control.min.js","sources":["spbc-settings_tab--traffic_control.js"],"sourcesContent":["/**\r\n * Callback for displaying Firewall logs\r\n *\r\n * @param {obj} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n */\r\nfunction spbcTcShowMoreCallback(result, data, params) {\r\n if (data.full_refresh) {\r\n jQuery(params.wrapper).html(result);\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n } else if (result.size > 0) {\r\n jQuery(params.wrapper).html(result.html);\r\n spbcTblRowActionsListen();\r\n spbcStartShowHide();\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(params.button).hide();\r\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n}\r\n\r\n/**\r\n * Listener for `Show more` button in the TC log\r\n */\r\nfunction spbcTcShowMoreListen() {\r\n jQuery('#spbc_show_more_fw_logs_button').on('click', function() {\r\n if (spbcSettingsFWLogs.clicks < 2) {\r\n spbcSettingsFWLogs.clicks++;\r\n let data = {\r\n action: 'spbc_show_more_security_firewall_logs',\r\n amount: spbcSettingsFWLogs.amount * (+spbcSettingsFWLogs.clicks+1),\r\n };\r\n let params = {\r\n button: this,\r\n spinner: this.nextElementSibling,\r\n wrapper: jQuery('#spbc_tbl__traffic_control_logs').find('tbody'),\r\n callback: spbcTcShowMoreCallback,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(this).hide();\r\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n spbcTblRowActionsListen(); // Table. Row actions handler\r\n spbcTblPaginationListen(); // Table. Pagination handler\r\n spbcTblSortListen(); // Table. Sort handler\r\n\r\n // Start to hide long values in a table\r\n spbcStartShowHide();\r\n\r\n // FIREWALL LOGS EVENTS\r\n\r\n // Handler for show more FIREWALL LOGS\r\n spbcTcShowMoreListen();\r\n\r\n // Timer for FireWall logs\r\n setTimeout(function spbcРeartbeat() {\r\n // Do refresh only if traffic control is enabled and tab is active\r\n if ( +spbcSettingsFWLogs.moderate && jQuery('.spbc_tab_nav-traffic_control').hasClass('spbc_tab_nav--active')) {\r\n let data = {\r\n action: 'spbc_show_more_security_firewall_logs',\r\n full_refresh: true,\r\n };\r\n let params = {\r\n wrapper: jQuery('#spbc_tbl__traffic_control_logs'),\r\n callback: spbcTcShowMoreCallback,\r\n notJson: true,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n }\r\n setTimeout(spbcРeartbeat, 60000);\r\n }, 60000);\r\n});\r\n\r\n/**\r\n * @param {string} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcTcAllowIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcTcFilterIp( ip, 'allow');\r\n return false;\r\n}\r\n\r\n/**\r\n * @param {string} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcTcBanIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcTcFilterIp( ip, 'deny');\r\n return false;\r\n}\r\n\r\n/**\r\n * @param {string} ip\r\n * @param {string} status 'allow'|'deny'\r\n * @return {boolean}\r\n */\r\nfunction spbcTcFilterIp(ip, status) {\r\n const data = {\r\n action: 'spbc_tc__filter_ip',\r\n ip: ip,\r\n status: status,\r\n };\r\n const params = {\r\n callback: spbcTcAllowIpCallback,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n return false;\r\n}\r\n\r\n/**\r\n * @param {obj} data\r\n */\r\nfunction spbcTcAllowIpCallback(data) {\r\n if (data.success) {\r\n alert('Success.');\r\n } else {\r\n alert(data.data);\r\n }\r\n}\r\n"],"names":["spbcTcShowMoreCallback","result","data","params","full_refresh","jQuery","wrapper","html","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","size","button","hide","siblings","css","spbcTcShowMoreListen","on","spbcSettingsFWLogs","clicks","action","amount","this","spinner","nextElementSibling","find","callback","spbcSendAJAXRequest","spbcTcAllowIp","ip","spbcTcFilterIp","spbcTcBanIp","status","spbcTcAllowIpCallback","success","alert","document","ready","setTimeout","spbcРeartbeat","moderate","hasClass","notJson"],"mappings":"AAOA,SAASA,uBAAuBC,EAAQC,EAAMC,GACtCD,EAAKE,cACLC,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,CAAM,EAClCO,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,GACG,EAAdV,EAAOW,MACdP,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,EAAOM,IAAI,EACvCC,wBAAwB,EACxBG,kBAAkB,IAGlBN,OAAOF,EAAOU,MAAM,EAAEC,KAAK,EAC3BT,OAAOF,EAAOU,MAAM,EAAEE,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAKA,SAASC,uBACLZ,OAAO,gCAAgC,EAAEa,GAAG,QAAS,WACjD,IAEQhB,EAIAC,EANJgB,mBAAmBC,OAAS,GAC5BD,mBAAmBC,MAAM,GACrBlB,EAAO,CACPmB,OAAQ,wCACRC,OAAQH,mBAAmBG,QAAU,CAACH,mBAAmBC,OAAO,EACpE,EACIjB,EAAS,CACTU,OAAQU,KACRC,QAASD,KAAKE,mBACdnB,QAASD,OAAO,iCAAiC,EAAEqB,KAAK,OAAO,EAC/DC,SAAU3B,sBACd,EACA4B,oBAAqB1B,EAAMC,CAAO,IAGlCE,OAAOkB,IAAI,EAAET,KAAK,EAClBT,OAAOkB,IAAI,EAAER,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAsCA,SAASa,cAAcC,GAEnB,OADAC,eAAgBD,EAAI,OAAO,EACpB,CAAA,CACX,CAMA,SAASE,YAAYF,GAEjB,OADAC,eAAgBD,EAAI,MAAM,EACnB,CAAA,CACX,CAOA,SAASC,eAAeD,EAAIG,GAUxB,OADAL,oBARa,CACTP,OAAQ,qBACRS,GAAIA,EACJG,OAAQA,CACZ,EACe,CACXN,SAAUO,qBACd,CACkC,EAC3B,CAAA,CACX,CAKA,SAASA,sBAAsBhC,GACvBA,EAAKiC,QACLC,MAAM,UAAU,EAEhBA,MAAMlC,EAAKA,IAAI,CAEvB,CA7EAG,OAAOgC,QAAQ,EAAEC,MAAM,WACnB9B,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAGlBC,kBAAkB,EAKlBM,qBAAqB,EAGrBsB,WAAW,SAASC,IAEhB,IACQtC,EAIAC,EALH,CAACgB,mBAAmBsB,UAAYpC,OAAO,+BAA+B,EAAEqC,SAAS,sBAAsB,IACpGxC,EAAO,CACPmB,OAAQ,wCACRjB,aAAc,CAAA,CAClB,EACID,EAAS,CACTG,QAASD,OAAO,iCAAiC,EACjDsB,SAAU3B,uBACV2C,QAAS,CAAA,CACb,EACAf,oBAAqB1B,EAAMC,CAAO,GAEtCoC,WAAWC,EAAe,GAAK,CACnC,EAAG,GAAK,CACZ,CAAC"} \ No newline at end of file diff --git a/js/spbc-table.min.js.map b/js/spbc-table.min.js.map index 3e40cc5b1..df3e8c5f6 100644 --- a/js/spbc-table.min.js.map +++ b/js/spbc-table.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-table.min.js","sources":["spbc-table.js"],"sourcesContent":["let spbcBulkAction = null;\nconst noConfirmActions = spbcGetNoConfirmActions(spbcPublic);\n\n/**\n * Reloads scanner accordion and set all the listeners\n * @param {string|null} interactControlTab ajaxResult If is set, will use this var as interactivity data.\n * @param {string|null} updateText\n */\nfunction spbcReloadAccordion(interactControlTab = null, updateText = '') {\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_tab__reload_accordion'},\n {\n notJson: true,\n callback: function(result, data, params, obj) {\n jQuery(obj).accordion('destroy');\n jQuery(obj).html(result);\n jQuery(obj).accordion({\n header: 'h3',\n heightStyle: 'content',\n collapsible: true,\n active: false,\n });\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n if (interactControlTab !== null && updateText !== null) {\n interactScannerTab(interactControlTab, updateText);\n }\n },\n },\n jQuery('#spbc_scan_accordion'),\n );\n}\n\n/**\n * Open refreshed tab after scanner reload.\n * @param {string} controlTab\n * @param {string} updateText\n */\nfunction interactScannerTab(controlTab, updateText) {\n let refreshControlTabSelector;\n let headerSelector;\n let headerUpdateStatus;\n\n if (\n typeof(controlTab) !== 'string' ||\n controlTab === '' ||\n typeof(updateText) !== 'string' ||\n updateText === ''\n ) {\n return;\n }\n\n // init refresh controlled tabs\n refreshControlTabSelector = jQuery('#spbc_scan_accordion div[refresh_control_tab=\"' + controlTab + '\"]')[0];\n\n // init header to click\n headerSelector = 'h3[aria-controls=spbc_scan_accordion_tab_' + controlTab + ']';\n headerSelector = jQuery(headerSelector)[0];\n\n if (\n typeof(refreshControlTabSelector) === 'undefined' ||\n typeof(headerSelector) === 'undefined'\n ) {\n return;\n }\n\n // show updated caption\n jQuery('

')\n .appendTo(headerSelector);\n headerUpdateStatus = jQuery('.spbc_accordion_header_caption__update_status');\n jQuery('
' + updateText + '
')\n .appendTo(headerUpdateStatus);\n\n // do click to open tab\n headerSelector.click();\n\n // highlight header\n refreshControlTabSelector.setAttribute(\n 'class',\n 'ui-accordion-header ui-corner-top ui-state-default ui-accordion-icons ui-accordion-header-active',\n );\n\n // hide all actions on partial reload\n jQuery('.row-actions').hide();\n}\n\n/**\n * Table bulk actions\n */\nfunction spbcTblBulkActionsListen() {\n jQuery('.tbl-bulk_actions-all--apply')\n .off('click')\n .on('click', function() {\n // @ToDo perhaps spbcScanner.active is not defined anywhere.\n // check this and implement `active` status in the right place\n if ( spbcScanner.active ) {\n alert(spbcTableLocalize.scannerIsActive);\n return;\n }\n\n let self = jQuery(this);\n let allowedBulkActions = [\n 'approve',\n 'disapprove',\n 'send',\n 'check_analysis_status',\n 'approve_page',\n 'disapprove_page',\n 'cure',\n 'delete_from_analysis_log',\n 'restore',\n ];\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\n\n if ( allowedBulkActions.indexOf( action ) !== -1 ) {\n if (!noConfirmActions.any.includes(action)) {\n if (!confirm(spbcTable.warning_bulk)) {\n return;\n }\n }\n let data = {\n action: 'spbc_tbl-action--bulk',\n add_action: action,\n status: self.parents('.tbl-root').attr('type'),\n };\n\n if (action === 'cure') {\n spbcScannerCureBulk(self, true);\n return;\n }\n\n if (action === 'restore') {\n spbcScannerRestoreBulk(self, true);\n }\n\n if (action === 'delete_from_analysis_log') {\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select');\n let fileIds = [];\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n fileIds.push(elementId);\n });\n data.file_ids = fileIds;\n }\n\n let params = {\n button: this,\n spinner: self.children('.tbl-preloader--small'),\n callback: function(out) {\n spbcReloadAccordion();\n if ( action === 'check_analysis_status' && typeof out !== 'undefined') {\n let html = '

Analysis status updated.' +\n ' Total: ' + out.counters.total +\n ', updated: ' + out.counters.updated +\n ', skipped: ' + out.counters.skipped +\n ', failed: ' + out.counters.failed +\n ', queued: ' + out.counters.queued +\n '

';\n spbcModal.open().put( html );\n }\n if ( action === 'send' && typeof out !== 'undefined') {\n let html = '

Files have been sent: ' +\n out.files_sent_counter +\n '

';\n spbcModal.open().put(html);\n }\n },\n errorOutput: function( errorText, comment ) {\n if ( comment ) {\n errorText = errorText + '
Additional information:
' + comment;\n }\n spbcModal.open().putError( errorText );\n },\n timeout: 60000,\n };\n\n spbcSendAJAXRequest(data, params);\n } else {\n alert('This action is not supported for all files yet =(');\n }\n });\n\n jQuery('.tbl-bulk_actions--apply')\n .off('click')\n .on('click', function(e) {\n let self = spbcBulkAction || jQuery(this);\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\n if (!spbcBulkAction && !noConfirmActions.any.includes(action) && !confirm(spbcTable.warning_bulk)) {\n return;\n }\n\n spbcBulkAction = self;\n\n if (action === 'cure') {\n spbcScannerCureBulk(jQuery(this), false);\n return;\n }\n\n if (action === 'restore') {\n spbcScannerRestoreBulk(jQuery(this), false);\n return;\n }\n\n if (action === 'delete_from_analysis_log') {\n spbcScannerAnalysisLogDeleteFromLog(jQuery(this));\n return;\n }\n\n if (action === 'allow' || action === 'ban') {\n let sendAction = action === 'ban' ? 'deny' : action;\n let items = self.parents('.tbl-root').find('.cb-select:checked');\n if (items) {\n self.children('.tbl-preloader--small').show();\n items.each(function() {\n let ip = jQuery(this).parents('tr').find('.tbl-row_action--'+action).data('ip');\n spbcSecLogsFilterIp(ip, sendAction, true);\n jQuery(this).prop('checked', false);\n });\n }\n self.children('.tbl-preloader--small').hide();\n let msg = action === 'allow' ? 'Allowed' : 'Banned';\n let html = '

Success. Selected IPs have been ' +\n msg +\n '. Changes will be applied within 10 minutes.' +\n '

';\n spbcModal.open().put( html );\n setTimeout(spbcReloadAccordion, 1900);\n\n return;\n }\n\n if ( action !== '-1' && self.parents('.tbl-root').find('.cb-select').is(':checked') ) {\n self.children('.tbl-preloader--small').show();\n // eslint-disable-next-line max-len\n if (self.parents('.tbl-root').find('.cb-select:checked').first().parents('tr').find('.tbl-row_action--'+action)[0]) {\n self\n .parents('.tbl-root')\n .find('.cb-select:checked')\n .first()\n .parents('tr')\n .find('.tbl-row_action--'+action)\n .click();\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\n } else {\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\n self.click();\n }\n } else {\n self.children('.tbl-preloader--small').hide();\n spbcBulkAction = null;\n if ( action === 'check_analysis_status' || action === 'disapprove' ) {\n let html = '

All available files are updated.' + '

';\n spbcModal.open().put( html );\n }\n if ( action === 'send') {\n let html = '

All available files are sent.' + '

';\n spbcModal.open().put( html );\n }\n setTimeout(spbcReloadAccordion, 1900);\n }\n // reset spbcBulkAction if action is restricted\n if (noConfirmActions.restricted.includes(action)) {\n spbcBulkAction = null;\n }\n });\n}\n\n/**\n * Cure selected files\n * @param {obj} current\n * @param {boolean} allItems\n */\nfunction spbcScannerCureBulk(current, allItems = false) {\n let selectedIds = [];\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\n\n if (selectedItems.length === 0) {\n alert('Please, select elements.');\n return;\n }\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n selectedIds.push(elementId);\n });\n\n const data = {\n action: 'spbc_cure_selected',\n security: spbcSettings.ajax_nonce,\n selectedIds: selectedIds,\n };\n jQuery.ajax({\n type: 'POST',\n url: spbcSettings.ajaxurl,\n data: data,\n beforeSend: function() {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .show();\n },\n success: function(result) {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .hide();\n const displayData = result.data;\n // prepare output\n let divWrapper = document.createElement('div');\n let pMessage = document.createElement('p');\n let pCounters = document.createElement('p');\n let divFiles = document.createElement('div');\n let bSeeMore = document.createElement('b');\n let pSeeMore = document.createElement('p');\n bSeeMore.innerHTML = 'See more details in the threats log.';\n pSeeMore.append(bSeeMore);\n const failedToCure = displayData.hasOwnProperty('failed_to_cure') ? displayData.failed_to_cure : [];\n if (failedToCure.length > 0) {\n divFiles.innerHTML = failedToCure.join('
');\n }\n pMessage.innerHTML = displayData.message;\n pCounters.innerHTML += 'Cured: ' +\n (\n displayData.hasOwnProperty('cured_on_request') ?\n displayData.cured_on_request :\n 0\n );\n pCounters.innerHTML += ', already cured: ' +\n (\n displayData.hasOwnProperty('skipped') ?\n displayData.skipped :\n 0\n );\n pCounters.innerHTML += ', failed to cure: ' + failedToCure.length;\n\n divWrapper.append(pMessage);\n divWrapper.append(pCounters);\n divWrapper.append(divFiles);\n if (failedToCure.length > 0) {\n divWrapper.append(pSeeMore);\n }\n if (result.success) {\n spbcModal.open().put(divWrapper.outerHTML);\n } else {\n spbcModal.open().putError(divWrapper.outerHTML);\n }\n document.addEventListener('spbcModalClosed', function( e ) {\n spbcReloadAccordion();\n });\n },\n });\n}\n\n/**\n * Restore selected files\n * @param {obj} current\n * @param {boolean} allItems\n */\nfunction spbcScannerRestoreBulk(current, allItems = false) {\n let selectedIds = [];\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\n\n if (selectedItems.length === 0) {\n alert('Please, select elements.');\n return;\n }\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n selectedIds.push(elementId);\n });\n\n const data = {\n action: 'spbc_restore_selected',\n security: spbcSettings.ajax_nonce,\n selectedIds: selectedIds,\n };\n jQuery.ajax({\n type: 'POST',\n url: spbcSettings.ajaxurl,\n data: data,\n beforeSend: function() {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .show();\n },\n success: function(result) {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .hide();\n const displayData = result.data;\n // prepare output\n let divWrapper = document.createElement('div');\n let pMessage = document.createElement('p');\n let pCounters = document.createElement('p');\n let divFiles = document.createElement('div');\n const failedToRestore = displayData.hasOwnProperty('failed_to_restore') ?\n displayData.failed_to_restore :\n [];\n if (failedToRestore.length > 0) {\n divFiles.innerHTML = failedToRestore.join('
');\n }\n pMessage.innerHTML = displayData.message;\n pCounters.innerHTML += 'Restored: ' +\n (\n displayData.hasOwnProperty('restored_on_request') ?\n displayData.restored_on_request :\n 0\n );\n pCounters.innerHTML += ', unchanged or already restored: ' +\n (\n displayData.hasOwnProperty('skipped') ?\n displayData.skipped :\n 0\n );\n pCounters.innerHTML += ', failed to restore: ' + failedToRestore.length;\n\n divWrapper.append(pMessage);\n divWrapper.append(pCounters);\n divWrapper.append(divFiles);\n\n if (result.success) {\n spbcModal.open().put(divWrapper.outerHTML);\n } else {\n spbcModal.open().putError(divWrapper.outerHTML);\n }\n document.addEventListener('spbcModalClosed', function( e ) {\n spbcReloadAccordion();\n });\n },\n });\n}\n\n/**\n * Table row actions\n */\nfunction spbcTblRowActionsListen() {\n jQuery('.tbl-row_action--ajax')\n .off('click')\n .on('click', function() {\n if ( spbcScanner.active ) {\n alert(spbcTableLocalize.scannerIsActive);\n return;\n }\n let self = jQuery(this);\n let data = {\n action: 'spbc_tbl-action--row',\n add_action: self.attr('row-action'),\n id: self.parents('.row-actions').attr('uid'),\n cols: self.parents('.row-actions').attr('cols_amount'),\n page_url: self.parent().attr('uid'),\n page_id: self.parent().attr('page_id'),\n };\n let params = {\n callback: spbcTblRowActionsCallback,\n errorOutput: function(msg, comment, hideSupportLink) {\n spbcModal.open().putError( msg, hideSupportLink );\n },\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n };\n\n // @ToDo delete this timeout after ready task #10014\n if ( self.attr('row-action') === 'delete' ) {\n params.timeout = 60000;\n }\n\n let fileName = self.parent().parent()[0].firstChild.innerHTML;\n let confirmationHeader = spbcTable['warning_h_'+self.attr('row-action')] || spbcTable.warning_default;\n let confirmationText = spbcTable['warning_t_'+self.attr('row-action')] || '';\n // init row actions with no confirm required\n if ( spbcBulkAction || noConfirmActions.any.includes(data.add_action) ) {\n // do not request user confirmation if the action is excluded or if it is a bulk action\n spbcSendAJAXRequest(data, params, self.parents('tr'));\n } else {\n // do request confirmation otherwise\n const yesButtonText = self.attr('row-action') === 'quarantine' ? 'Quarantine' : 'Yes';\n const noButtonText = self.attr('row-action') === 'quarantine' ? 'Cancel' : 'No';\n spbcModal.open().confirm(confirmationHeader, confirmationText, fileName, (confirmed) => {\n if (confirmed) {\n spbcSendAJAXRequest(data, params, self.parents('tr'));\n }\n }, yesButtonText, noButtonText);\n }\n });\n}\n\n/**\n * Row actions with no confirm required.\n * @param {object} spbcPublic Global localized SPBC object\n * @return {{}}\n */\nfunction spbcGetNoConfirmActions(spbcPublic) {\n let noConfirmActionsEmpty = {\n 'any': [],\n 'restricted': [],\n 'defaults': [],\n };\n let noConfirmActions = noConfirmActionsEmpty;\n try {\n if ( typeof spbcPublic !== 'undefined' && spbcPublic.hasOwnProperty('no_confirm_row_actions')) {\n noConfirmActions = JSON.parse(spbcPublic.no_confirm_row_actions);\n }\n if (\n typeof noConfirmActions.any.includes !== 'function' ||\n typeof noConfirmActions.restricted.includes !== 'function' ||\n typeof noConfirmActions.defaults.includes !== 'function'\n ) {\n noConfirmActions = noConfirmActionsEmpty;\n }\n } catch (e) {\n noConfirmActions = noConfirmActionsEmpty;\n }\n return noConfirmActions;\n}\n\n/**\n * Callback for table row actions\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcTblRowActionsCallback(result, data, params, obj) {\n if (result.color) {\n obj.css({background: result.background, color: result.color});\n }\n if (result.html) {\n obj.parent().parent().parent().prepend(result.html);\n setTimeout(function() {\n obj.fadeOut(300);\n }, 1500);\n if ( ! spbcBulkAction) {\n setTimeout(spbcReloadAccordion, 1900);\n }\n }\n\n if (\n data.add_action === 'copy_file_info'\n ) {\n if (result.success === true && result.data.file_info) {\n window.\n prompt('Copy the file info below and send it to support@cleantalk.org: ', result.data.file_info);\n } else {\n let errorText = (typeof result.data.error !== 'undefined') ?\n result.data.error :\n 'Unknown copy_file_info error';\n spbcModal.open().putError( errorText );\n }\n }\n\n if (result.temp_html) {\n let tmp=obj.html();\n obj.html(result.temp_html);\n if (result.updated_template !== undefined) {\n let updatedType = result.updated_template_type;\n let template = result.updated_template;\n let rowsInTemplate = jQuery(template).find('.wp-list-table tbody tr');\n let countRowInTemplate = rowsInTemplate.length;\n let targetTab = jQuery('[aria-controls=\"spbc_scan_accordion_tab_' + updatedType + '\"]');\n\n if (targetTab.length > 0) {\n let table = jQuery('#spbc_tbl__scanner_' + updatedType);\n // Count files in header\n jQuery('.spbc_bad_type_count.' + updatedType + '_counter').text(countRowInTemplate);\n // Count rows in table\n let countExistingRows = table.find('.wp-list-table tbody tr').length;\n table.remove();\n jQuery('#spbc_scan_accordion_tab_' + updatedType).append(template);\n // Marked new rows\n jQuery(jQuery('#spbc_scan_accordion_tab_' + updatedType)\n .find('.wp-list-table tbody tr'))\n .each(function(index, element) {\n if (++index > countExistingRows) {\n jQuery(element).css('outline', '1px solid green');\n }\n });\n targetTab.click();\n } else {\n if (updatedType === 'analysis_log') {\n // eslint-disable-next-line max-len\n let tabHeaderTemplate = '

Analysis Log (' + countRowInTemplate + ')

';\n // eslint-disable-next-line max-len\n let tabBodyTemplate = '

Files sent for analysis.

' +\n template +\n '
';\n jQuery('#spbc_scan_accordion_tab_critical').after(tabHeaderTemplate + tabBodyTemplate);\n targetTab.click();\n }\n }\n }\n setTimeout(function() {\n obj\n .html(tmp)\n .css({background: 'inherit'})\n .find('.column-primary .row-actions .tbl-row_action--' + data.add_action)\n .remove();\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcStartShowHide();\n }, 5000);\n }\n if (spbcBulkAction) {\n spbcBulkAction.click();\n }\n}\n\n/**\n * Table pagination actions\n */\nfunction spbcTblPaginationListen() {\n let data = {action: 'spbc_tbl-pagination'};\n let params = {callback: spbcTblPaginationCallback, notJson: true};\n jQuery('.tbl-pagination--button').on('click', function() {\n jQuery(this).parents('.tbl-root').find('.tbl-pagination--button').attr('disabled', 'disabled');\n });\n jQuery('.tbl-pagination--go').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.siblings('.tbl-pagination--curr_page').val();\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--prev').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.parents('.tbl-pagination--wrapper').attr('prev_page');\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--next').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.parents('.tbl-pagination--wrapper').attr('next_page');\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--end').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.parents('.tbl-pagination--wrapper').attr('last_page');\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--start').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = 1;\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n}\n\n/**\n * Callback for Table pagination actions\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcTblPaginationCallback(result, data, params, obj) {\n jQuery(obj)\n .html(result)\n .find('.tbl-pagination--button').removeAttr('disabled');\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n}\n\n/**\n * Table sort actions\n */\nfunction spbcTblSortListen() {\n let params = {callback: spbcTblSortCallback, notJson: true};\n jQuery('.tbl-column-sortable').on('click', function(e) {\n if (e.target.classList.contains('tbl-sorting_indicator')) {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n let domain = obj.attr('type') == 'links'? jQuery('#spbc_tbl__scanner__outbound_links b').html(): '';\n let data = {\n action: 'spbc_tbl-sort',\n order_by: self.attr('id'),\n order: self.attr('sort_direction'),\n type: obj.attr('type'),\n domain: domain,\n };\n spbcSendAJAXRequest(data, params, obj);\n }\n });\n}\n\n/**\n * Callback for Table sort actions\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcTblSortCallback(result, data, params, obj) {\n jQuery(obj).html(result);\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n}\n\njQuery(document).ready(function() {\n // Table. Row actions handler\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcEATUpdateIntervalStart();\n});\n\n/**\n * Switching table handler\n * Using by inline php code\n *\n * @param {obj} obj\n * @param {obj} table\n *\n */\nfunction spbcScannerSwitchTable(obj, table) {/* eslint-disable-line no-unused-vars */\n let _obj = jQuery(obj);\n let domain = _obj.parents('.row-actions').attr('uid');\n let data = {action: 'spbc_tbl-switch', type: table, domain: domain};\n let params = {callback: spbcTblPaginationCallback, notJson: true};\n spbcSendAJAXRequest(data, params, _obj.parents('.tbl-root'));\n}\n\n/**\n * Open/close table rows handler\n * Using by inline php code\n *\n * @param {string} blockId\n * @param {string} columnKey\n */\nfunction spbcShowHideRows(blockId, columnKey) {/* eslint-disable-line no-unused-vars */\n let className = '.' + columnKey + '_block_' + blockId;\n let block = jQuery(className);\n if (block.hasClass('mob_table_active')) {\n block.removeClass('mob_table_active');\n } else {\n block.addClass('mob_table_active');\n }\n}\n\n/**\n * Starts an interval to update the analysis log table and stats every 6 seconds.\n */\nfunction spbcEATUpdateIntervalStart() {\n setInterval(() => {\n // Check if the analysis log tab is present\n if (document.querySelector('div[refresh_control_tab=\"analysis_log\"]') !== null) {\n // Add a spinner to the analysis log tab header\n spbcEATAddSpinner();\n // Update the analysis log table\n spbcUpdateTableEAT();\n // Update the analysis log stats\n spbcUpdateStatsEAT();\n }\n }, 60000);\n}\n\n/**\n * Adds a spinner to the analysis log tab header if it doesn't already exist.\n */\nfunction spbcEATAddSpinner() {\n if (document.getElementById('analysis_log_counter_spinner') === null) {\n const refreshTab = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_analysis_log\"]');\n if (refreshTab !== null) {\n const spinner = document.createElement('img');\n spinner.class = 'spbc_preloader';\n // todo Probably we need a validation function of spbcSettings object\n spinner.alt = spbcSettings.spbcSpinner.altText;\n spinner.src = spbcSettings.spbcSpinner.imgSource;\n spinner.id = 'analysis_log_counter_spinner';\n spinner.style = 'display: none; height: 13px; position: relative; top: 2px; margin-left: 5px';\n refreshTab.append(spinner);\n }\n }\n spbcEATSwitchSpinner();\n}\n\n/**\n * Toggles the display of the spinner in the analysis log tab header.\n */\nfunction spbcEATSwitchSpinner() {\n const spinner = document.getElementById('analysis_log_counter_spinner');\n if (spinner !== null) {\n spinner.style.display = spinner.style.display === 'none' ?\n spinner.style.display = 'inline' :\n spinner.style.display = 'none';\n }\n}\n\n/**\n * Sends an AJAX request to update the analysis log table.\n */\nfunction spbcUpdateTableEAT() {\n // Define the tab name for the request\n let tabName = 'scanner';\n // Data object containing parameters for the AJAX request\n let data = {\n action: 'spbc_settings__draw_elements',\n tab_name: tabName,\n security: spbcSettings.ajax_nonce,\n };\n // Params object with additional settings for the AJAX request\n let currentParams = {\n callback: spbcUpdateTableCallbackEAT,\n notJson: true,\n additional: null,\n };\n // Send the AJAX request with the data and params objects\n spbcSendAJAXRequest( data, currentParams, null );\n}\n\n/**\n * Callback function to update the analysis log table with new HTML content.\n *\n * @param {string} allTablesHTML - The HTML content of all tables.\n */\nfunction spbcUpdateTableCallbackEAT(allTablesHTML) {\n // select the same table element to search in the current code and update from received\n const analysisTableSelector = '#spbc_tbl__scanner_analysis_log';\n const parser = new DOMParser();\n const allTablesHTMLParsed = parser.parseFromString(allTablesHTML, 'text/html');\n\n let newTabElement = null;\n let newTabElementInnerHTML = '';\n let currentTabElement = null;\n\n // get new analysis table element and its HTML\n newTabElement = allTablesHTMLParsed.querySelector(analysisTableSelector);\n if (newTabElement !== null && newTabElement.innerHTML !== '') {\n newTabElementInnerHTML = newTabElement.innerHTML;\n }\n\n // get current analysis table element and its HTML\n currentTabElement = document.querySelector(analysisTableSelector);\n if (currentTabElement !== null && currentTabElement.innerHTML === '') {\n currentTabElement = null;\n }\n\n // update analysis table element if it's changed and new data presented\n if (currentTabElement !== null && newTabElementInnerHTML !== '') {\n currentTabElement.innerHTML = newTabElementInnerHTML;\n }\n}\n\n/**\n * Sends an AJAX request to update the analysis log stats.\n */\nfunction spbcUpdateStatsEAT() {\n // Data object containing parameters for the AJAX request\n let data = {\n action: 'spbc_analysyis_files_stats__get_html',\n sub_action: 'give_me_html',\n security: spbcSettings.ajax_nonce,\n };\n // Params object with additional settings for the AJAX request\n let params = {\n callback: spbcUpdateStatsCallbackEAT,\n notJson: true,\n };\n // Send the AJAX request with the data and params objects\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Callback function to update the analysis log stats with new HTML content.\n *\n * @param {string} newStatsHtml - The new HTML content for the stats.\n */\nfunction spbcUpdateStatsCallbackEAT(newStatsHtml) {\n // Get the element that displays the analysis files stats\n let info = document.getElementById('spbc_analysis_files_stats');\n // If the element exists, update its inner HTML with the new stats\n if (info) {\n info.innerHTML = newStatsHtml;\n }\n // Toggle the display of the spinner in the analysis log tab header\n spbcEATSwitchSpinner();\n}\n"],"names":["let","spbcBulkAction","noConfirmActions","spbcGetNoConfirmActions","spbcPublic","spbcReloadAccordion","interactControlTab","updateText","spbcSendAJAXRequest","action","notJson","callback","result","data","params","obj","jQuery","accordion","html","header","heightStyle","collapsible","active","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","interactScannerTab","controlTab","refreshControlTabSelector","headerUpdateStatus","headerSelector","appendTo","click","setAttribute","hide","off","on","spbcScanner","alert","spbcTableLocalize","scannerIsActive","self","this","siblings","children","first","selectedIndex","value","indexOf","any","includes","confirm","spbcTable","warning_bulk","add_action","status","parents","attr","spbcScannerCureBulk","spbcScannerRestoreBulk","selectedItems","closest","find","fileIds","each","index","element","elementId","val","push","file_ids","button","spinner","out","counters","total","updated","skipped","failed","queued","spbcModal","open","put","files_sent_counter","errorOutput","errorText","comment","putError","timeout","e","spbcScannerAnalysisLogDeleteFromLog","sendAction","items","msg","show","ip","spbcSecLogsFilterIp","prop","setTimeout","is","restricted","current","allItems","selectedIds","selector","length","security","spbcSettings","ajax_nonce","ajax","type","url","ajaxurl","beforeSend","success","displayData","divWrapper","document","createElement","pMessage","pCounters","divFiles","bSeeMore","pSeeMore","failedToCure","innerHTML","append","hasOwnProperty","failed_to_cure","join","message","cured_on_request","outerHTML","addEventListener","failedToRestore","failed_to_restore","restored_on_request","id","cols","page_url","parent","page_id","spbcTblRowActionsCallback","hideSupportLink","yesButtonText","noButtonText","fileName","firstChild","confirmationHeader","warning_default","confirmationText","confirmed","noConfirmActionsEmpty","defaults","JSON","parse","no_confirm_row_actions","color","css","background","prepend","fadeOut","file_info","window","prompt","error","temp_html","tmp","undefined","updated_template","updatedType","updated_template_type","template","countRowInTemplate","targetTab","table","text","countExistingRows","remove","tabHeaderTemplate","tabBodyTemplate","after","spbcTblPaginationCallback","page","removeAttr","spbcTblSortCallback","domain","target","classList","contains","order_by","order","spbcScannerSwitchTable","_obj","spbcShowHideRows","blockId","columnKey","block","hasClass","removeClass","addClass","spbcEATUpdateIntervalStart","setInterval","querySelector","spbcEATAddSpinner","spbcUpdateTableEAT","spbcUpdateStatsEAT","refreshTab","getElementById","class","alt","spbcSpinner","altText","src","imgSource","style","spbcEATSwitchSpinner","display","tab_name","spbcUpdateTableCallbackEAT","additional","allTablesHTML","analysisTableSelector","newTabElementInnerHTML","currentTabElement","newTabElement","DOMParser","parseFromString","sub_action","spbcUpdateStatsCallbackEAT","newStatsHtml","info","ready"],"mappings":"AAAAA,IAAIC,eAAiB,KACfC,iBAAmBC,wBAAwBC,UAAU,EAO3D,SAASC,oBAAoBC,EAAqB,KAAMC,EAAa,IACjEC,oBACI,CAACC,OAAQ,oCAAoC,EAC7C,CACIC,QAAS,CAAA,EACTC,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACrCC,OAAOD,CAAG,EAAEE,UAAU,SAAS,EAC/BD,OAAOD,CAAG,EAAEG,KAAKN,CAAM,EACvBI,OAAOD,CAAG,EAAEE,UAAU,CAClBE,OAAQ,KACRC,YAAa,UACbC,YAAa,CAAA,EACbC,OAAQ,CAAA,CACZ,CAAC,EACDC,yBAAyB,EACzBC,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,EACS,OAAvBrB,GAA8C,OAAfC,GAC/BqB,mBAAmBtB,EAAoBC,CAAU,CAEzD,CACJ,EACAS,OAAO,sBAAsB,CACjC,CACJ,CAOA,SAASY,mBAAmBC,EAAYtB,GACpCP,IAAI8B,EAEAC,EAGuB,UAAvB,OAAM,GACS,KAAfF,GACuB,UAAvB,OAAM,GACS,KAAftB,IAMJuB,EAA4Bd,OAAO,iDAAmDa,EAAa,IAAI,EAAE,GAGzGG,EAAiB,4CAA8CH,EAAa,IAC5EG,EAAiBhB,OAAOgB,CAAc,EAAE,GAGE,KAAA,IAAhC,IACqB,KAAA,IAArB,IAMVhB,OAAO,kEAAkE,EACpEiB,SAASD,CAAc,EAC5BD,EAAqBf,OAAO,+CAA+C,EAC3EA,OAAO,uDAAyDT,EAAa,QAAQ,EAChF0B,SAASF,CAAkB,EAGhCC,EAAeE,MAAM,EAGrBJ,EAA0BK,aACtB,QACA,kGACJ,EAGAnB,OAAO,cAAc,EAAEoB,KAAK,EAChC,CAKA,SAASb,2BACLP,OAAO,8BAA8B,EAChCqB,IAAI,OAAO,EACXC,GAAG,QAAS,WAGT,GAAKC,YAAYjB,OACbkB,MAAMC,kBAAkBC,eAAe,MAD3C,CAKA1C,IAAI2C,EAAO3B,OAAO4B,IAAI,EAYtB5C,IAAIS,EAASkC,EAAKE,SAAS,QAAQ,EAAEC,SAAS,EAAEH,EAAKE,SAAS,QAAQ,EAAEE,MAAM,EAAE,GAAGC,eAAeC,MAElG,GAA8C,CAAC,IAbtB,CACrB,UACA,aACA,OACA,wBACA,eACA,kBACA,OACA,2BACA,WAIoBC,QAASzC,CAAO,GACpC,GAAKP,iBAAiBiD,IAAIC,SAAS3C,CAAM,GAChC4C,QAAQC,UAAUC,YAAY,EADvC,CAKAvD,IAAIa,EAAO,CACPJ,OAAQ,wBACR+C,WAAY/C,EACZgD,OAAQd,EAAKe,QAAQ,WAAW,EAAEC,KAAK,MAAM,CACjD,EAEA,GAAe,SAAXlD,EACAmD,oBAAoBjB,EAAM,CAAA,CAAI,MADlC,CASA,GAJe,YAAXlC,GACAoD,uBAAuBlB,EAAM,CAAA,CAAI,EAGtB,6BAAXlC,EAAuC,CACvC,IAAMqD,EAAgBnB,EAAKoB,QAAQ,iCAAiC,EAAEC,KAAK,YAAY,EACvFhE,IAAIiE,EAAU,GAEdH,EAAcI,KAAK,SAASC,EAAOC,GACzBC,EAAYrD,OAAOoD,CAAO,EAAEE,IAAI,EACtCL,EAAQM,KAAKF,CAAS,CAC1B,CAAC,EACDxD,EAAK2D,SAAWP,CACpB,CAEInD,EAAS,CACT2D,OAAQ7B,KACR8B,QAAS/B,EAAKG,SAAS,uBAAuB,EAC9CnC,SAAU,SAASgE,GAEf,IAWQzD,EAZRb,oBAAoB,EACJ,0BAAXI,GAAqD,KAAA,IAARkE,IAC1CzD,EAAO,uCACMyD,EAAIC,SAASC,MAC1B,cAAgBF,EAAIC,SAASE,QAC7B,cAAgBH,EAAIC,SAASG,QAC7B,aAAeJ,EAAIC,SAASI,OAC5B,aAAeL,EAAIC,SAASK,OAC5B,OACJC,UAAUC,KAAK,EAAEC,IAAKlE,CAAK,GAEf,SAAXT,GAAoC,KAAA,IAARkE,IACzBzD,EAAO,6BACPyD,EAAIU,mBACJ,OACJH,UAAUC,KAAK,EAAEC,IAAIlE,CAAI,EAEjC,EACAoE,YAAa,SAAUC,EAAWC,GACzBA,IACDD,EAAYA,EAAY,kCAAoCC,GAEhEN,UAAUC,KAAK,EAAEM,SAAUF,CAAU,CACzC,EACAG,QAAS,GACb,EAEAlF,oBAAoBK,EAAMC,CAAM,CAhDhC,CAVA,CAAA,MA4DA0B,MAAM,mDAAmD,CAjF7D,CAmFJ,CAAC,EAELxB,OAAO,0BAA0B,EAC5BqB,IAAI,OAAO,EACXC,GAAG,QAAS,SAASqD,GAClB3F,IAAI2C,EAAO1C,gBAAkBe,OAAO4B,IAAI,EACxC5C,IAAIS,EAASkC,EAAKE,SAAS,QAAQ,EAAEC,SAAS,EAAEH,EAAKE,SAAS,QAAQ,EAAEE,MAAM,EAAE,GAAGC,eAAeC,MAClG,GAAKhD,gBAAmBC,iBAAiBiD,IAAIC,SAAS3C,CAAM,GAAM4C,QAAQC,UAAUC,YAAY,EAMhG,GAFAtD,eAAiB0C,EAEF,SAAXlC,EACAmD,oBAAoB5C,OAAO4B,IAAI,EAAG,CAAA,CAAK,OAI3C,GAAe,YAAXnC,EACAoD,uBAAuB7C,OAAO4B,IAAI,EAAG,CAAA,CAAK,OAI9C,GAAe,6BAAXnC,EACAmF,oCAAoC5E,OAAO4B,IAAI,CAAC,OAIpD,GAAe,UAAXnC,GAAiC,QAAXA,EAAkB,CACxCT,IAAI6F,EAAwB,QAAXpF,EAAmB,OAASA,EAC7CT,IAAI8F,EAAQnD,EAAKe,QAAQ,WAAW,EAAEM,KAAK,oBAAoB,EAU3D+B,GATAD,IACAnD,EAAKG,SAAS,uBAAuB,EAAEkD,KAAK,EAC5CF,EAAM5B,KAAK,WACPlE,IAAIiG,EAAKjF,OAAO4B,IAAI,EAAEc,QAAQ,IAAI,EAAEM,KAAK,oBAAoBvD,CAAM,EAAEI,KAAK,IAAI,EAC9EqF,oBAAoBD,EAAIJ,EAAY,CAAA,CAAI,EACxC7E,OAAO4B,IAAI,EAAEuD,KAAK,UAAW,CAAA,CAAK,CACtC,CAAC,GAELxD,EAAKG,SAAS,uBAAuB,EAAEV,KAAK,EACvB,UAAX3B,EAAqB,UAAY,UACvCS,EAAO,uCACP6E,EAEA,mDACJb,UAAUC,KAAK,EAAEC,IAAKlE,CAAK,EAA3BgE,KACAkB,WAAW/F,oBAAqB,IAAI,CAGxC,KAEgB,OAAXI,GAAmBkC,EAAKe,QAAQ,WAAW,EAAEM,KAAK,YAAY,EAAEqC,GAAG,UAAU,GAC9E1D,EAAKG,SAAS,uBAAuB,EAAEkD,KAAK,EAExCrD,EAAKe,QAAQ,WAAW,EAAEM,KAAK,oBAAoB,EAAEjB,MAAM,EAAEW,QAAQ,IAAI,EAAEM,KAAK,oBAAoBvD,CAAM,EAAE,IAC5GkC,EACKe,QAAQ,WAAW,EACnBM,KAAK,oBAAoB,EACzBjB,MAAM,EACNW,QAAQ,IAAI,EACZM,KAAK,oBAAoBvD,CAAM,EAC/ByB,MAAM,EACXS,EAAKe,QAAQ,WAAW,EAAEM,KAAK,oBAAoB,EAAEjB,MAAM,EAAEoD,KAAK,UAAW,CAAA,CAAK,IAElFxD,EAAKe,QAAQ,WAAW,EAAEM,KAAK,oBAAoB,EAAEjB,MAAM,EAAEoD,KAAK,UAAW,CAAA,CAAK,EAClFxD,EAAKT,MAAM,KAGfS,EAAKG,SAAS,uBAAuB,EAAEV,KAAK,EAC5CnC,eAAiB,KACD,0BAAXQ,GAAiD,eAAXA,GAEvCyE,UAAUC,KAAK,EAAEC,IADN,0CACgB,EAEf,SAAX3E,GAEDyE,UAAUC,KAAK,EAAEC,IADN,uCACgB,EAE/BgB,WAAW/F,oBAAqB,IAAI,GAGpCH,iBAAiBoG,WAAWlD,SAAS3C,CAAM,IAC3CR,eAAiB,KAEzB,CAAC,CACT,CAOA,SAAS2D,oBAAoB2C,EAASC,EAAW,CAAA,GAC7CxG,IAAIyG,EAAc,GAClB,IAAMC,EAAWF,EAAW,aAAe,qBACrC1C,EAAgByC,EAAQxC,QAAQ,6BAA6B,EAAEC,KAAK0C,CAAQ,EAErD,IAAzB5C,EAAc6C,OACdnE,MAAM,0BAA0B,GAIpCsB,EAAcI,KAAK,SAASC,EAAOC,GACzBC,EAAYrD,OAAOoD,CAAO,EAAEE,IAAI,EACtCmC,EAAYlC,KAAKF,CAAS,CAC9B,CAAC,EAEKxD,EAAO,CACTJ,OAAQ,qBACRmG,SAAUC,aAAaC,WACvBL,YAAaA,CACjB,EACAzF,OAAO+F,KAAK,CACRC,KAAM,OACNC,IAAKJ,aAAaK,QAClBrG,KAAMA,EACNsG,WAAY,WACRZ,EACKxC,QAAQ,6BAA6B,EACrCC,KAAK,oDAAoD,EACzDgC,KAAK,CACd,EACAoB,QAAS,SAASxG,GACd2F,EACKxC,QAAQ,6BAA6B,EACrCC,KAAK,oDAAoD,EACzD5B,KAAK,EACV,IAAMiF,EAAczG,EAAOC,KAEvByG,EAAaC,SAASC,cAAc,KAAK,EACzCC,EAAWF,SAASC,cAAc,GAAG,EACrCE,EAAYH,SAASC,cAAc,GAAG,EACtCG,EAAWJ,SAASC,cAAc,KAAK,EACvCI,EAAWL,SAASC,cAAc,GAAG,EACrCK,EAAWN,SAASC,cAAc,GAAG,EAGnCM,GAFNF,EAASG,UAAY,uCACrBF,EAASG,OAAOJ,CAAQ,EACHP,EAAYY,eAAe,gBAAgB,EAAIZ,EAAYa,eAAiB,IACvE,EAAtBJ,EAAanB,SACbgB,EAASI,UAAYD,EAAaK,KAAK,OAAO,GAElDV,EAASM,UAAYV,EAAYe,QACjCV,EAAUK,WAAa,WAEfV,EAAYY,eAAe,kBAAkB,EACzCZ,EAAYgB,iBACZ,GAEZX,EAAUK,WAAa,qBAEfV,EAAYY,eAAe,SAAS,EAChCZ,EAAYtC,QACZ,GAEZ2C,EAAUK,WAAa,qBAAuBD,EAAanB,OAE3DW,EAAWU,OAAOP,CAAQ,EAC1BH,EAAWU,OAAON,CAAS,EAC3BJ,EAAWU,OAAOL,CAAQ,EACA,EAAtBG,EAAanB,QACbW,EAAWU,OAAOH,CAAQ,EAE1BjH,EAAOwG,QACPlC,UAAUC,KAAK,EAAEC,IAAIkC,EAAWgB,SAAS,EAEzCpD,UAAUC,KAAK,EAAEM,SAAS6B,EAAWgB,SAAS,EAElDf,SAASgB,iBAAiB,kBAAmB,SAAU5C,GACnDtF,oBAAoB,CACxB,CAAC,CACL,CACJ,CAAC,EACL,CAOA,SAASwD,uBAAuB0C,EAASC,EAAW,CAAA,GAChDxG,IAAIyG,EAAc,GAClB,IAAMC,EAAWF,EAAW,aAAe,qBACrC1C,EAAgByC,EAAQxC,QAAQ,6BAA6B,EAAEC,KAAK0C,CAAQ,EAErD,IAAzB5C,EAAc6C,OACdnE,MAAM,0BAA0B,GAIpCsB,EAAcI,KAAK,SAASC,EAAOC,GACzBC,EAAYrD,OAAOoD,CAAO,EAAEE,IAAI,EACtCmC,EAAYlC,KAAKF,CAAS,CAC9B,CAAC,EAEKxD,EAAO,CACTJ,OAAQ,wBACRmG,SAAUC,aAAaC,WACvBL,YAAaA,CACjB,EACAzF,OAAO+F,KAAK,CACRC,KAAM,OACNC,IAAKJ,aAAaK,QAClBrG,KAAMA,EACNsG,WAAY,WACRZ,EACKxC,QAAQ,6BAA6B,EACrCC,KAAK,oDAAoD,EACzDgC,KAAK,CACd,EACAoB,QAAS,SAASxG,GACd2F,EACKxC,QAAQ,6BAA6B,EACrCC,KAAK,oDAAoD,EACzD5B,KAAK,EACV,IAAMiF,EAAczG,EAAOC,KAEvByG,EAAaC,SAASC,cAAc,KAAK,EACzCC,EAAWF,SAASC,cAAc,GAAG,EACrCE,EAAYH,SAASC,cAAc,GAAG,EACtCG,EAAWJ,SAASC,cAAc,KAAK,EACrCgB,EAAkBnB,EAAYY,eAAe,mBAAmB,EAClEZ,EAAYoB,kBACZ,GACyB,EAAzBD,EAAgB7B,SAChBgB,EAASI,UAAYS,EAAgBL,KAAK,OAAO,GAErDV,EAASM,UAAYV,EAAYe,QACjCV,EAAUK,WAAa,cAEXV,EAAYY,eAAe,qBAAqB,EAC5CZ,EAAYqB,oBACZ,GAEhBhB,EAAUK,WAAa,qCAEXV,EAAYY,eAAe,SAAS,EAChCZ,EAAYtC,QACZ,GAEhB2C,EAAUK,WAAa,wBAA0BS,EAAgB7B,OAEjEW,EAAWU,OAAOP,CAAQ,EAC1BH,EAAWU,OAAON,CAAS,EAC3BJ,EAAWU,OAAOL,CAAQ,EAEtB/G,EAAOwG,QACPlC,UAAUC,KAAK,EAAEC,IAAIkC,EAAWgB,SAAS,EAEzCpD,UAAUC,KAAK,EAAEM,SAAS6B,EAAWgB,SAAS,EAElDf,SAASgB,iBAAiB,kBAAmB,SAAU5C,GACnDtF,oBAAoB,CACxB,CAAC,CACL,CACJ,CAAC,EACL,CAKA,SAASmB,0BACLR,OAAO,uBAAuB,EACzBqB,IAAI,OAAO,EACXC,GAAG,QAAS,WACT,GAAKC,YAAYjB,OACbkB,MAAMC,kBAAkBC,eAAe,MAD3C,CAIA1C,IAAI2C,EAAO3B,OAAO4B,IAAI,EAClB/B,EAAO,CACPJ,OAAQ,uBACR+C,WAAYb,EAAKgB,KAAK,YAAY,EAClCgF,GAAIhG,EAAKe,QAAQ,cAAc,EAAEC,KAAK,KAAK,EAC3CiF,KAAMjG,EAAKe,QAAQ,cAAc,EAAEC,KAAK,aAAa,EACrDkF,SAAUlG,EAAKmG,OAAO,EAAEnF,KAAK,KAAK,EAClCoF,QAASpG,EAAKmG,OAAO,EAAEnF,KAAK,SAAS,CACzC,EACI7C,EAAS,CACTH,SAAUqI,0BACV1D,YAAa,SAASS,EAAKP,EAASyD,GAChC/D,UAAUC,KAAK,EAAEM,SAAUM,EAAKkD,CAAgB,CACpD,EACAvE,QAAS/B,EAAKmG,OAAO,EAAEjG,SAAS,sBAAsB,CAC1D,EAGiC,WAA5BF,EAAKgB,KAAK,YAAY,IACvB7C,EAAO4E,QAAU,KAGrB1F,IASUkJ,EACAC,EAVNC,EAAWzG,EAAKmG,OAAO,EAAEA,OAAO,EAAE,GAAGO,WAAWtB,UAChDuB,EAAqBhG,UAAU,aAAaX,EAAKgB,KAAK,YAAY,IAAML,UAAUiG,gBAClFC,EAAmBlG,UAAU,aAAaX,EAAKgB,KAAK,YAAY,IAAM,GAErE1D,gBAAkBC,iBAAiBiD,IAAIC,SAASvC,EAAK2C,UAAU,EAEhEhD,oBAAoBK,EAAMC,EAAQ6B,EAAKe,QAAQ,IAAI,CAAC,GAG9CwF,EAA4C,eAA5BvG,EAAKgB,KAAK,YAAY,EAAqB,aAAe,MAC1EwF,EAA2C,eAA5BxG,EAAKgB,KAAK,YAAY,EAAqB,SAAW,KAC3EuB,UAAUC,KAAK,EAAE9B,QAAQiG,EAAoBE,EAAkBJ,EAAU,IACjEK,GACAjJ,oBAAoBK,EAAMC,EAAQ6B,EAAKe,QAAQ,IAAI,CAAC,CAE5D,EAAGwF,EAAeC,CAAY,EAtClC,CAwCJ,CAAC,CACT,CAOA,SAAShJ,wBAAwBC,GAC7BJ,IAAI0J,EAAwB,CACxBvG,IAAO,GACPmD,WAAc,GACdqD,SAAY,EAChB,EACA3J,IAAIE,EAAmBwJ,EACvB,IAKiD,YAAzC,OAHAxJ,EADuB,KAAA,IAAfE,GAA8BA,EAAW6H,eAAe,wBAAwB,EACrE2B,KAAKC,MAAMzJ,EAAW0J,sBAAsB,EAGxD5J,GAAiBiD,IAAIC,UACoB,YAAhD,OAAOlD,EAAiBoG,WAAWlD,UACW,YAA9C,OAAOlD,EAAiByJ,SAASvG,WAEjClD,EAAmBwJ,EAI3B,CAFE,MAAO/D,GACLzF,EAAmBwJ,CACvB,CACA,OAAOxJ,CACX,CAUA,SAAS8I,0BAA0BpI,EAAQC,EAAMC,EAAQC,GA4BrD,GA3BIH,EAAOmJ,OACPhJ,EAAIiJ,IAAI,CAACC,WAAYrJ,EAAOqJ,WAAYF,MAAOnJ,EAAOmJ,KAAK,CAAC,EAE5DnJ,EAAOM,OACPH,EAAI+H,OAAO,EAAEA,OAAO,EAAEA,OAAO,EAAEoB,QAAQtJ,EAAOM,IAAI,EAClDkF,WAAW,WACPrF,EAAIoJ,QAAQ,GAAG,CACnB,EAAG,IAAI,EACAlK,gBACHmG,WAAW/F,oBAAqB,IAAI,GAKpB,mBAApBQ,EAAK2C,aAEkB,CAAA,IAAnB5C,EAAOwG,SAAoBxG,EAAOC,KAAKuJ,UACvCC,OACIC,OAAO,kEAAmE1J,EAAOC,KAAKuJ,SAAS,GAE/F7E,EAA0C,KAAA,IAAtB3E,EAAOC,KAAK0J,MAChC3J,EAAOC,KAAK0J,MACZ,+BACJrF,UAAUC,KAAK,EAAEM,SAAUF,CAAU,IAIzC3E,EAAO4J,UAAW,CAClBxK,IAAIyK,EAAI1J,EAAIG,KAAK,EAEjB,GADAH,EAAIG,KAAKN,EAAO4J,SAAS,EACOE,KAAAA,IAA5B9J,EAAO+J,iBAAgC,CACvC3K,IAAI4K,EAAchK,EAAOiK,sBACrBC,EAAWlK,EAAO+J,iBAElBI,EADiB/J,OAAO8J,CAAQ,EAAE9G,KAAK,yBAAyB,EAC5B2C,OACpCqE,EAAYhK,OAAO,2CAA6C4J,EAAc,IAAI,EAEtF,GAAuB,EAAnBI,EAAUrE,OAAY,CACtB3G,IAAIiL,EAAQjK,OAAO,sBAAwB4J,CAAW,EAEtD5J,OAAO,wBAA0B4J,EAAc,UAAU,EAAEM,KAAKH,CAAkB,EAElF/K,IAAImL,EAAoBF,EAAMjH,KAAK,yBAAyB,EAAE2C,OAC9DsE,EAAMG,OAAO,EACbpK,OAAO,4BAA8B4J,CAAW,EAAE5C,OAAO8C,CAAQ,EAEjE9J,OAAOA,OAAO,4BAA8B4J,CAAW,EAClD5G,KAAK,yBAAyB,CAAC,EAC/BE,KAAK,SAASC,EAAOC,GACd,EAAED,EAAQgH,GACVnK,OAAOoD,CAAO,EAAE4F,IAAI,UAAW,iBAAiB,CAExD,CAAC,EACLgB,EAAU9I,MAAM,CACpB,KACwB,iBAAhB0I,IAEIS,EAAoB,oaAAsaN,EAAqB,oBAE/cO,EAAkB,qVAClBR,EACA,SACJ9J,OAAO,mCAAmC,EAAEuK,MAAMF,EAAoBC,CAAe,EACrFN,EAAU9I,MAAM,EAG5B,CACAkE,WAAW,WACPrF,EACKG,KAAKuJ,CAAG,EACRT,IAAI,CAACC,WAAY,SAAS,CAAC,EAC3BjG,KAAK,iDAAmDnD,EAAK2C,UAAU,EACvE4H,OAAO,EACZ7J,yBAAyB,EACzBC,wBAAwB,EACxBG,kBAAkB,CACtB,EAAG,GAAI,CACX,CACI1B,gBACAA,eAAeiC,MAAM,CAE7B,CAKA,SAAST,0BACLzB,IAAIa,EAAO,CAACJ,OAAQ,qBAAqB,EACrCK,EAAS,CAACH,SAAU6K,0BAA2B9K,QAAS,CAAA,CAAI,EAChEM,OAAO,yBAAyB,EAAEsB,GAAG,QAAS,WAC1CtB,OAAO4B,IAAI,EAAEc,QAAQ,WAAW,EAAEM,KAAK,yBAAyB,EAAEL,KAAK,WAAY,UAAU,CACjG,CAAC,EACD3C,OAAO,qBAAqB,EAAEsB,GAAG,QAAS,WACtCtC,IAAI2C,EAAO3B,OAAO4B,IAAI,EAClB7B,EAAM4B,EAAKe,QAAQ,WAAW,EAClC7C,EAAK4K,KAAO9I,EAAKE,SAAS,4BAA4B,EAAEyB,IAAI,EAC5DzD,EAAKmG,KAAOjG,EAAI4C,KAAK,MAAM,EAC3B7C,EAAO4D,QAAU/B,EAAKE,SAAS,uBAAuB,EACtDrC,oBAAoBK,EAAMC,EAAQC,CAAG,CACzC,CAAC,EACDC,OAAO,uBAAuB,EAAEsB,GAAG,QAAS,WACxCtC,IAAI2C,EAAO3B,OAAO4B,IAAI,EAClB7B,EAAM4B,EAAKe,QAAQ,WAAW,EAClC7C,EAAK4K,KAAO9I,EAAKe,QAAQ,0BAA0B,EAAEC,KAAK,WAAW,EACrE9C,EAAKmG,KAAOjG,EAAI4C,KAAK,MAAM,EAC3B7C,EAAO4D,QAAU/B,EAAKE,SAAS,uBAAuB,EACtDrC,oBAAoBK,EAAMC,EAAQC,CAAG,CACzC,CAAC,EACDC,OAAO,uBAAuB,EAAEsB,GAAG,QAAS,WACxCtC,IAAI2C,EAAO3B,OAAO4B,IAAI,EAClB7B,EAAM4B,EAAKe,QAAQ,WAAW,EAClC7C,EAAK4K,KAAO9I,EAAKe,QAAQ,0BAA0B,EAAEC,KAAK,WAAW,EACrE9C,EAAKmG,KAAOjG,EAAI4C,KAAK,MAAM,EAC3B7C,EAAO4D,QAAU/B,EAAKE,SAAS,uBAAuB,EACtDrC,oBAAoBK,EAAMC,EAAQC,CAAG,CACzC,CAAC,EACDC,OAAO,sBAAsB,EAAEsB,GAAG,QAAS,WACvCtC,IAAI2C,EAAO3B,OAAO4B,IAAI,EAClB7B,EAAM4B,EAAKe,QAAQ,WAAW,EAClC7C,EAAK4K,KAAO9I,EAAKe,QAAQ,0BAA0B,EAAEC,KAAK,WAAW,EACrE9C,EAAKmG,KAAOjG,EAAI4C,KAAK,MAAM,EAC3B7C,EAAO4D,QAAU/B,EAAKE,SAAS,uBAAuB,EACtDrC,oBAAoBK,EAAMC,EAAQC,CAAG,CACzC,CAAC,EACDC,OAAO,wBAAwB,EAAEsB,GAAG,QAAS,WACzCtC,IAAI2C,EAAO3B,OAAO4B,IAAI,EAClB7B,EAAM4B,EAAKe,QAAQ,WAAW,EAClC7C,EAAK4K,KAAO,EACZ5K,EAAKmG,KAAOjG,EAAI4C,KAAK,MAAM,EAC3B7C,EAAO4D,QAAU/B,EAAKE,SAAS,uBAAuB,EACtDrC,oBAAoBK,EAAMC,EAAQC,CAAG,CACzC,CAAC,CACL,CAUA,SAASyK,0BAA0B5K,EAAQC,EAAMC,EAAQC,GACrDC,OAAOD,CAAG,EACLG,KAAKN,CAAM,EACXoD,KAAK,yBAAyB,EAAE0H,WAAW,UAAU,EAC1DnK,yBAAyB,EACzBC,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,CACtB,CAKA,SAASD,oBACL1B,IAAIc,EAAS,CAACH,SAAUgL,oBAAqBjL,QAAS,CAAA,CAAI,EAC1DM,OAAO,sBAAsB,EAAEsB,GAAG,QAAS,SAASqD,GAChD,IAEQ5E,EACA6K,EAHJjG,EAAEkG,OAAOC,UAAUC,SAAS,uBAAuB,IAG/CH,EAA6B,UAD7B7K,GADA4B,EAAO3B,OAAO4B,IAAI,GACPc,QAAQ,WAAW,GACjBC,KAAK,MAAM,EAAc3C,OAAO,sCAAsC,EAAEE,KAAK,EAAG,GAC7FL,EAAO,CACPJ,OAAQ,gBACRuL,SAAUrJ,EAAKgB,KAAK,IAAI,EACxBsI,MAAOtJ,EAAKgB,KAAK,gBAAgB,EACjCqD,KAAMjG,EAAI4C,KAAK,MAAM,EACrBiI,OAAQA,CACZ,EACApL,oBAAoBK,EAAMC,EAAQC,CAAG,EAE7C,CAAC,CACL,CAUA,SAAS4K,oBAAoB/K,EAAQC,EAAMC,EAAQC,GAC/CC,OAAOD,CAAG,EAAEG,KAAKN,CAAM,EACvBW,yBAAyB,EACzBC,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,CACtB,CAmBA,SAASwK,uBAAuBnL,EAAKkK,GACjCjL,IAAImM,EAAOnL,OAAOD,CAAG,EACjB6K,EAASO,EAAKzI,QAAQ,cAAc,EAAEC,KAAK,KAAK,EAGpDnD,oBAFW,CAACC,OAAQ,kBAAmBuG,KAAMiE,EAAOW,OAAQA,CAAM,EACrD,CAACjL,SAAU6K,0BAA2B9K,QAAS,CAAA,CAAI,EAC9ByL,EAAKzI,QAAQ,WAAW,CAAC,CAC/D,CASA,SAAS0I,iBAAiBC,EAASC,GAE3BC,EAAQvL,OADI,IAAMsL,EAAY,UAAYD,CAClB,EACxBE,EAAMC,SAAS,kBAAkB,EACjCD,EAAME,YAAY,kBAAkB,EAEpCF,EAAMG,SAAS,kBAAkB,CAEzC,CAKA,SAASC,6BACLC,YAAY,KAEkE,OAAtErF,SAASsF,cAAc,yCAAyC,IAEhEC,kBAAkB,EAElBC,mBAAmB,EAEnBC,mBAAmB,EAE3B,EAAG,GAAK,CACZ,CAKA,SAASF,oBACL,IACUG,EAEIvI,EAHkD,OAA5D6C,SAAS2F,eAAe,8BAA8B,GAEnC,QADbD,EAAa1F,SAASsF,cAAc,0DAA0D,MAE1FnI,EAAU6C,SAASC,cAAc,KAAK,GACpC2F,MAAQ,iBAEhBzI,EAAQ0I,IAAMvG,aAAawG,YAAYC,QACvC5I,EAAQ6I,IAAM1G,aAAawG,YAAYG,UACvC9I,EAAQiE,GAAK,+BACbjE,EAAQ+I,MAAQ,8EAChBR,EAAWjF,OAAOtD,CAAO,GAGjCgJ,qBAAqB,CACzB,CAKA,SAASA,uBACL,IAAMhJ,EAAU6C,SAAS2F,eAAe,8BAA8B,EACtD,OAAZxI,IACAA,EAAQ+I,MAAME,QAAoC,SAA1BjJ,EAAQ+I,MAAME,QAClCjJ,EAAQ+I,MAAME,QAAU,SACxBjJ,EAAQ+I,MAAME,QAAU,OAEpC,CAKA,SAASZ,qBAEL/M,IAEIa,EAAO,CACPJ,OAAQ,+BACRmN,SAJU,UAKVhH,SAAUC,aAAaC,UAC3B,EAQAtG,oBAAqBK,EAND,CAChBF,SAAUkN,2BACVnN,QAAS,CAAA,EACToN,WAAY,IAChB,EAE0C,IAAK,CACnD,CAOA,SAASD,2BAA2BE,GAEhC,IAAMC,EAAwB,kCAK9BhO,IAAIiO,EAAyB,GACzBC,EAAoB,KAIF,QADtBC,GARe,IAAIC,WACgBC,gBAAgBN,EAAe,WAAW,EAOzClB,cAAcmB,CAAqB,IACb,KAA5BG,EAAcpG,YACxCkG,EAAyBE,EAAcpG,WAUjB,QAJtBmG,EADsB,QAD1BA,EAAoB3G,SAASsF,cAAcmB,CAAqB,IACE,KAAhCE,EAAkBnG,UAC5B,KAIpBmG,IAAyD,KAA3BD,IAC9BC,EAAkBnG,UAAYkG,EAEtC,CAKA,SAASjB,qBAELhN,IAAIa,EAAO,CACPJ,OAAQ,uCACR6N,WAAY,eACZ1H,SAAUC,aAAaC,UAC3B,EAOAtG,oBAAoBK,EALP,CACTF,SAAU4N,2BACV7N,QAAS,CAAA,CACb,CAEgC,CACpC,CAOA,SAAS6N,2BAA2BC,GAEhCxO,IAAIyO,EAAOlH,SAAS2F,eAAe,2BAA2B,EAE1DuB,IACAA,EAAK1G,UAAYyG,GAGrBd,qBAAqB,CACzB,CAnLA1M,OAAOuG,QAAQ,EAAEmH,MAAM,WAEnBnN,yBAAyB,EACzBC,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBiL,2BAA2B,CAC/B,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-table.min.js","sources":["spbc-table.js"],"sourcesContent":["let spbcBulkAction = null;\r\nconst noConfirmActions = spbcGetNoConfirmActions(spbcPublic);\r\n\r\n/**\r\n * Reloads scanner accordion and set all the listeners\r\n * @param {string|null} interactControlTab ajaxResult If is set, will use this var as interactivity data.\r\n * @param {string|null} updateText\r\n */\r\nfunction spbcReloadAccordion(interactControlTab = null, updateText = '') {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_tab__reload_accordion'},\r\n {\r\n notJson: true,\r\n callback: function(result, data, params, obj) {\r\n jQuery(obj).accordion('destroy');\r\n jQuery(obj).html(result);\r\n jQuery(obj).accordion({\r\n header: 'h3',\r\n heightStyle: 'content',\r\n collapsible: true,\r\n active: false,\r\n });\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n if (interactControlTab !== null && updateText !== null) {\r\n interactScannerTab(interactControlTab, updateText);\r\n }\r\n },\r\n },\r\n jQuery('#spbc_scan_accordion'),\r\n );\r\n}\r\n\r\n/**\r\n * Open refreshed tab after scanner reload.\r\n * @param {string} controlTab\r\n * @param {string} updateText\r\n */\r\nfunction interactScannerTab(controlTab, updateText) {\r\n let refreshControlTabSelector;\r\n let headerSelector;\r\n let headerUpdateStatus;\r\n\r\n if (\r\n typeof(controlTab) !== 'string' ||\r\n controlTab === '' ||\r\n typeof(updateText) !== 'string' ||\r\n updateText === ''\r\n ) {\r\n return;\r\n }\r\n\r\n // init refresh controlled tabs\r\n refreshControlTabSelector = jQuery('#spbc_scan_accordion div[refresh_control_tab=\"' + controlTab + '\"]')[0];\r\n\r\n // init header to click\r\n headerSelector = 'h3[aria-controls=spbc_scan_accordion_tab_' + controlTab + ']';\r\n headerSelector = jQuery(headerSelector)[0];\r\n\r\n if (\r\n typeof(refreshControlTabSelector) === 'undefined' ||\r\n typeof(headerSelector) === 'undefined'\r\n ) {\r\n return;\r\n }\r\n\r\n // show updated caption\r\n jQuery('
')\r\n .appendTo(headerSelector);\r\n headerUpdateStatus = jQuery('.spbc_accordion_header_caption__update_status');\r\n jQuery('
' + updateText + '
')\r\n .appendTo(headerUpdateStatus);\r\n\r\n // do click to open tab\r\n headerSelector.click();\r\n\r\n // highlight header\r\n refreshControlTabSelector.setAttribute(\r\n 'class',\r\n 'ui-accordion-header ui-corner-top ui-state-default ui-accordion-icons ui-accordion-header-active',\r\n );\r\n\r\n // hide all actions on partial reload\r\n jQuery('.row-actions').hide();\r\n}\r\n\r\n/**\r\n * Table bulk actions\r\n */\r\nfunction spbcTblBulkActionsListen() {\r\n jQuery('.tbl-bulk_actions-all--apply')\r\n .off('click')\r\n .on('click', function() {\r\n // @ToDo perhaps spbcScanner.active is not defined anywhere.\r\n // check this and implement `active` status in the right place\r\n if ( spbcScanner.active ) {\r\n alert(spbcTableLocalize.scannerIsActive);\r\n return;\r\n }\r\n\r\n let self = jQuery(this);\r\n let allowedBulkActions = [\r\n 'approve',\r\n 'disapprove',\r\n 'send',\r\n 'check_analysis_status',\r\n 'approve_page',\r\n 'disapprove_page',\r\n 'cure',\r\n 'delete_from_analysis_log',\r\n 'restore',\r\n ];\r\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\r\n\r\n if ( allowedBulkActions.indexOf( action ) !== -1 ) {\r\n if (!noConfirmActions.any.includes(action)) {\r\n if (!confirm(spbcTable.warning_bulk)) {\r\n return;\r\n }\r\n }\r\n let data = {\r\n action: 'spbc_tbl-action--bulk',\r\n add_action: action,\r\n status: self.parents('.tbl-root').attr('type'),\r\n };\r\n\r\n if (action === 'cure') {\r\n spbcScannerCureBulk(self, true);\r\n return;\r\n }\r\n\r\n if (action === 'restore') {\r\n spbcScannerRestoreBulk(self, true);\r\n }\r\n\r\n if (action === 'delete_from_analysis_log') {\r\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select');\r\n let fileIds = [];\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n fileIds.push(elementId);\r\n });\r\n data.file_ids = fileIds;\r\n }\r\n\r\n let params = {\r\n button: this,\r\n spinner: self.children('.tbl-preloader--small'),\r\n callback: function(out) {\r\n spbcReloadAccordion();\r\n if ( action === 'check_analysis_status' && typeof out !== 'undefined') {\r\n let html = '

Analysis status updated.' +\r\n ' Total: ' + out.counters.total +\r\n ', updated: ' + out.counters.updated +\r\n ', skipped: ' + out.counters.skipped +\r\n ', failed: ' + out.counters.failed +\r\n ', queued: ' + out.counters.queued +\r\n '

';\r\n spbcModal.open().put( html );\r\n }\r\n if ( action === 'send' && typeof out !== 'undefined') {\r\n let html = '

Files have been sent: ' +\r\n out.files_sent_counter +\r\n '

';\r\n spbcModal.open().put(html);\r\n }\r\n },\r\n errorOutput: function( errorText, comment ) {\r\n if ( comment ) {\r\n errorText = errorText + '
Additional information:
' + comment;\r\n }\r\n spbcModal.open().putError( errorText );\r\n },\r\n timeout: 60000,\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n } else {\r\n alert('This action is not supported for all files yet =(');\r\n }\r\n });\r\n\r\n jQuery('.tbl-bulk_actions--apply')\r\n .off('click')\r\n .on('click', function(e) {\r\n let self = spbcBulkAction || jQuery(this);\r\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\r\n if (!spbcBulkAction && !noConfirmActions.any.includes(action) && !confirm(spbcTable.warning_bulk)) {\r\n return;\r\n }\r\n\r\n spbcBulkAction = self;\r\n\r\n if (action === 'cure') {\r\n spbcScannerCureBulk(jQuery(this), false);\r\n return;\r\n }\r\n\r\n if (action === 'restore') {\r\n spbcScannerRestoreBulk(jQuery(this), false);\r\n return;\r\n }\r\n\r\n if (action === 'delete_from_analysis_log') {\r\n spbcScannerAnalysisLogDeleteFromLog(jQuery(this));\r\n return;\r\n }\r\n\r\n if (action === 'allow' || action === 'ban') {\r\n let sendAction = action === 'ban' ? 'deny' : action;\r\n let items = self.parents('.tbl-root').find('.cb-select:checked');\r\n if (items) {\r\n self.children('.tbl-preloader--small').show();\r\n items.each(function() {\r\n let ip = jQuery(this).parents('tr').find('.tbl-row_action--'+action).data('ip');\r\n spbcSecLogsFilterIp(ip, sendAction, true);\r\n jQuery(this).prop('checked', false);\r\n });\r\n }\r\n self.children('.tbl-preloader--small').hide();\r\n let msg = action === 'allow' ? 'Allowed' : 'Banned';\r\n let html = '

Success. Selected IPs have been ' +\r\n msg +\r\n '. Changes will be applied within 10 minutes.' +\r\n '

';\r\n spbcModal.open().put( html );\r\n setTimeout(spbcReloadAccordion, 1900);\r\n\r\n return;\r\n }\r\n\r\n if ( action !== '-1' && self.parents('.tbl-root').find('.cb-select').is(':checked') ) {\r\n self.children('.tbl-preloader--small').show();\r\n // eslint-disable-next-line max-len\r\n if (self.parents('.tbl-root').find('.cb-select:checked').first().parents('tr').find('.tbl-row_action--'+action)[0]) {\r\n self\r\n .parents('.tbl-root')\r\n .find('.cb-select:checked')\r\n .first()\r\n .parents('tr')\r\n .find('.tbl-row_action--'+action)\r\n .click();\r\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\r\n } else {\r\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\r\n self.click();\r\n }\r\n } else {\r\n self.children('.tbl-preloader--small').hide();\r\n spbcBulkAction = null;\r\n if ( action === 'check_analysis_status' || action === 'disapprove' ) {\r\n let html = '

All available files are updated.' + '

';\r\n spbcModal.open().put( html );\r\n }\r\n if ( action === 'send') {\r\n let html = '

All available files are sent.' + '

';\r\n spbcModal.open().put( html );\r\n }\r\n setTimeout(spbcReloadAccordion, 1900);\r\n }\r\n // reset spbcBulkAction if action is restricted\r\n if (noConfirmActions.restricted.includes(action)) {\r\n spbcBulkAction = null;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Cure selected files\r\n * @param {obj} current\r\n * @param {boolean} allItems\r\n */\r\nfunction spbcScannerCureBulk(current, allItems = false) {\r\n let selectedIds = [];\r\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\r\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\r\n\r\n if (selectedItems.length === 0) {\r\n alert('Please, select elements.');\r\n return;\r\n }\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n selectedIds.push(elementId);\r\n });\r\n\r\n const data = {\r\n action: 'spbc_cure_selected',\r\n security: spbcSettings.ajax_nonce,\r\n selectedIds: selectedIds,\r\n };\r\n jQuery.ajax({\r\n type: 'POST',\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n beforeSend: function() {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .show();\r\n },\r\n success: function(result) {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .hide();\r\n const displayData = result.data;\r\n // prepare output\r\n let divWrapper = document.createElement('div');\r\n let pMessage = document.createElement('p');\r\n let pCounters = document.createElement('p');\r\n let divFiles = document.createElement('div');\r\n let bSeeMore = document.createElement('b');\r\n let pSeeMore = document.createElement('p');\r\n bSeeMore.innerHTML = 'See more details in the threats log.';\r\n pSeeMore.append(bSeeMore);\r\n const failedToCure = displayData.hasOwnProperty('failed_to_cure') ? displayData.failed_to_cure : [];\r\n if (failedToCure.length > 0) {\r\n divFiles.innerHTML = failedToCure.join('
');\r\n }\r\n pMessage.innerHTML = displayData.message;\r\n pCounters.innerHTML += 'Cured: ' +\r\n (\r\n displayData.hasOwnProperty('cured_on_request') ?\r\n displayData.cured_on_request :\r\n 0\r\n );\r\n pCounters.innerHTML += ', already cured: ' +\r\n (\r\n displayData.hasOwnProperty('skipped') ?\r\n displayData.skipped :\r\n 0\r\n );\r\n pCounters.innerHTML += ', failed to cure: ' + failedToCure.length;\r\n\r\n divWrapper.append(pMessage);\r\n divWrapper.append(pCounters);\r\n divWrapper.append(divFiles);\r\n if (failedToCure.length > 0) {\r\n divWrapper.append(pSeeMore);\r\n }\r\n if (result.success) {\r\n spbcModal.open().put(divWrapper.outerHTML);\r\n } else {\r\n spbcModal.open().putError(divWrapper.outerHTML);\r\n }\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n spbcReloadAccordion();\r\n });\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Restore selected files\r\n * @param {obj} current\r\n * @param {boolean} allItems\r\n */\r\nfunction spbcScannerRestoreBulk(current, allItems = false) {\r\n let selectedIds = [];\r\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\r\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\r\n\r\n if (selectedItems.length === 0) {\r\n alert('Please, select elements.');\r\n return;\r\n }\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n selectedIds.push(elementId);\r\n });\r\n\r\n const data = {\r\n action: 'spbc_restore_selected',\r\n security: spbcSettings.ajax_nonce,\r\n selectedIds: selectedIds,\r\n };\r\n jQuery.ajax({\r\n type: 'POST',\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n beforeSend: function() {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .show();\r\n },\r\n success: function(result) {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .hide();\r\n const displayData = result.data;\r\n // prepare output\r\n let divWrapper = document.createElement('div');\r\n let pMessage = document.createElement('p');\r\n let pCounters = document.createElement('p');\r\n let divFiles = document.createElement('div');\r\n const failedToRestore = displayData.hasOwnProperty('failed_to_restore') ?\r\n displayData.failed_to_restore :\r\n [];\r\n if (failedToRestore.length > 0) {\r\n divFiles.innerHTML = failedToRestore.join('
');\r\n }\r\n pMessage.innerHTML = displayData.message;\r\n pCounters.innerHTML += 'Restored: ' +\r\n (\r\n displayData.hasOwnProperty('restored_on_request') ?\r\n displayData.restored_on_request :\r\n 0\r\n );\r\n pCounters.innerHTML += ', unchanged or already restored: ' +\r\n (\r\n displayData.hasOwnProperty('skipped') ?\r\n displayData.skipped :\r\n 0\r\n );\r\n pCounters.innerHTML += ', failed to restore: ' + failedToRestore.length;\r\n\r\n divWrapper.append(pMessage);\r\n divWrapper.append(pCounters);\r\n divWrapper.append(divFiles);\r\n\r\n if (result.success) {\r\n spbcModal.open().put(divWrapper.outerHTML);\r\n } else {\r\n spbcModal.open().putError(divWrapper.outerHTML);\r\n }\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n spbcReloadAccordion();\r\n });\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Table row actions\r\n */\r\nfunction spbcTblRowActionsListen() {\r\n jQuery('.tbl-row_action--ajax')\r\n .off('click')\r\n .on('click', function() {\r\n if ( spbcScanner.active ) {\r\n alert(spbcTableLocalize.scannerIsActive);\r\n return;\r\n }\r\n let self = jQuery(this);\r\n let data = {\r\n action: 'spbc_tbl-action--row',\r\n add_action: self.attr('row-action'),\r\n id: self.parents('.row-actions').attr('uid'),\r\n cols: self.parents('.row-actions').attr('cols_amount'),\r\n page_url: self.parent().attr('uid'),\r\n page_id: self.parent().attr('page_id'),\r\n };\r\n let params = {\r\n callback: spbcTblRowActionsCallback,\r\n errorOutput: function(msg, comment, hideSupportLink) {\r\n spbcModal.open().putError( msg, hideSupportLink );\r\n },\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n };\r\n\r\n // @ToDo delete this timeout after ready task #10014\r\n if ( self.attr('row-action') === 'delete' ) {\r\n params.timeout = 60000;\r\n }\r\n\r\n let fileName = self.parent().parent()[0].firstChild.innerHTML;\r\n let confirmationHeader = spbcTable['warning_h_'+self.attr('row-action')] || spbcTable.warning_default;\r\n let confirmationText = spbcTable['warning_t_'+self.attr('row-action')] || '';\r\n // init row actions with no confirm required\r\n if ( spbcBulkAction || noConfirmActions.any.includes(data.add_action) ) {\r\n // do not request user confirmation if the action is excluded or if it is a bulk action\r\n spbcSendAJAXRequest(data, params, self.parents('tr'));\r\n } else {\r\n // do request confirmation otherwise\r\n const yesButtonText = self.attr('row-action') === 'quarantine' ? 'Quarantine' : 'Yes';\r\n const noButtonText = self.attr('row-action') === 'quarantine' ? 'Cancel' : 'No';\r\n spbcModal.open().confirm(confirmationHeader, confirmationText, fileName, (confirmed) => {\r\n if (confirmed) {\r\n spbcSendAJAXRequest(data, params, self.parents('tr'));\r\n }\r\n }, yesButtonText, noButtonText);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Row actions with no confirm required.\r\n * @param {object} spbcPublic Global localized SPBC object\r\n * @return {{}}\r\n */\r\nfunction spbcGetNoConfirmActions(spbcPublic) {\r\n let noConfirmActionsEmpty = {\r\n 'any': [],\r\n 'restricted': [],\r\n 'defaults': [],\r\n };\r\n let noConfirmActions = noConfirmActionsEmpty;\r\n try {\r\n if ( typeof spbcPublic !== 'undefined' && spbcPublic.hasOwnProperty('no_confirm_row_actions')) {\r\n noConfirmActions = JSON.parse(spbcPublic.no_confirm_row_actions);\r\n }\r\n if (\r\n typeof noConfirmActions.any.includes !== 'function' ||\r\n typeof noConfirmActions.restricted.includes !== 'function' ||\r\n typeof noConfirmActions.defaults.includes !== 'function'\r\n ) {\r\n noConfirmActions = noConfirmActionsEmpty;\r\n }\r\n } catch (e) {\r\n noConfirmActions = noConfirmActionsEmpty;\r\n }\r\n return noConfirmActions;\r\n}\r\n\r\n/**\r\n * Callback for table row actions\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcTblRowActionsCallback(result, data, params, obj) {\r\n if (result.color) {\r\n obj.css({background: result.background, color: result.color});\r\n }\r\n if (result.html) {\r\n obj.parent().parent().parent().prepend(result.html);\r\n setTimeout(function() {\r\n obj.fadeOut(300);\r\n }, 1500);\r\n if ( ! spbcBulkAction) {\r\n setTimeout(spbcReloadAccordion, 1900);\r\n }\r\n }\r\n\r\n if (\r\n data.add_action === 'copy_file_info'\r\n ) {\r\n if (result.success === true && result.data.file_info) {\r\n window.\r\n prompt('Copy the file info below and send it to support@cleantalk.org: ', result.data.file_info);\r\n } else {\r\n let errorText = (typeof result.data.error !== 'undefined') ?\r\n result.data.error :\r\n 'Unknown copy_file_info error';\r\n spbcModal.open().putError( errorText );\r\n }\r\n }\r\n\r\n if (result.temp_html) {\r\n let tmp=obj.html();\r\n obj.html(result.temp_html);\r\n if (result.updated_template !== undefined) {\r\n let updatedType = result.updated_template_type;\r\n let template = result.updated_template;\r\n let rowsInTemplate = jQuery(template).find('.wp-list-table tbody tr');\r\n let countRowInTemplate = rowsInTemplate.length;\r\n let targetTab = jQuery('[aria-controls=\"spbc_scan_accordion_tab_' + updatedType + '\"]');\r\n\r\n if (targetTab.length > 0) {\r\n let table = jQuery('#spbc_tbl__scanner_' + updatedType);\r\n // Count files in header\r\n jQuery('.spbc_bad_type_count.' + updatedType + '_counter').text(countRowInTemplate);\r\n // Count rows in table\r\n let countExistingRows = table.find('.wp-list-table tbody tr').length;\r\n table.remove();\r\n jQuery('#spbc_scan_accordion_tab_' + updatedType).append(template);\r\n // Marked new rows\r\n jQuery(jQuery('#spbc_scan_accordion_tab_' + updatedType)\r\n .find('.wp-list-table tbody tr'))\r\n .each(function(index, element) {\r\n if (++index > countExistingRows) {\r\n jQuery(element).css('outline', '1px solid green');\r\n }\r\n });\r\n targetTab.click();\r\n } else {\r\n if (updatedType === 'analysis_log') {\r\n // eslint-disable-next-line max-len\r\n let tabHeaderTemplate = '

Analysis Log (' + countRowInTemplate + ')

';\r\n // eslint-disable-next-line max-len\r\n let tabBodyTemplate = '

Files sent for analysis.

' +\r\n template +\r\n '
';\r\n jQuery('#spbc_scan_accordion_tab_critical').after(tabHeaderTemplate + tabBodyTemplate);\r\n targetTab.click();\r\n }\r\n }\r\n }\r\n setTimeout(function() {\r\n obj\r\n .html(tmp)\r\n .css({background: 'inherit'})\r\n .find('.column-primary .row-actions .tbl-row_action--' + data.add_action)\r\n .remove();\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcStartShowHide();\r\n }, 5000);\r\n }\r\n if (spbcBulkAction) {\r\n spbcBulkAction.click();\r\n }\r\n}\r\n\r\n/**\r\n * Table pagination actions\r\n */\r\nfunction spbcTblPaginationListen() {\r\n let data = {action: 'spbc_tbl-pagination'};\r\n let params = {callback: spbcTblPaginationCallback, notJson: true};\r\n jQuery('.tbl-pagination--button').on('click', function() {\r\n jQuery(this).parents('.tbl-root').find('.tbl-pagination--button').attr('disabled', 'disabled');\r\n });\r\n jQuery('.tbl-pagination--go').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.siblings('.tbl-pagination--curr_page').val();\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--prev').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.parents('.tbl-pagination--wrapper').attr('prev_page');\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--next').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.parents('.tbl-pagination--wrapper').attr('next_page');\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--end').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.parents('.tbl-pagination--wrapper').attr('last_page');\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--start').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = 1;\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n}\r\n\r\n/**\r\n * Callback for Table pagination actions\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcTblPaginationCallback(result, data, params, obj) {\r\n jQuery(obj)\r\n .html(result)\r\n .find('.tbl-pagination--button').removeAttr('disabled');\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n}\r\n\r\n/**\r\n * Table sort actions\r\n */\r\nfunction spbcTblSortListen() {\r\n let params = {callback: spbcTblSortCallback, notJson: true};\r\n jQuery('.tbl-column-sortable').on('click', function(e) {\r\n if (e.target.classList.contains('tbl-sorting_indicator')) {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n let domain = obj.attr('type') == 'links'? jQuery('#spbc_tbl__scanner__outbound_links b').html(): '';\r\n let data = {\r\n action: 'spbc_tbl-sort',\r\n order_by: self.attr('id'),\r\n order: self.attr('sort_direction'),\r\n type: obj.attr('type'),\r\n domain: domain,\r\n };\r\n spbcSendAJAXRequest(data, params, obj);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Callback for Table sort actions\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcTblSortCallback(result, data, params, obj) {\r\n jQuery(obj).html(result);\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n}\r\n\r\njQuery(document).ready(function() {\r\n // Table. Row actions handler\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcEATUpdateIntervalStart();\r\n});\r\n\r\n/**\r\n * Switching table handler\r\n * Using by inline php code\r\n *\r\n * @param {obj} obj\r\n * @param {obj} table\r\n *\r\n */\r\nfunction spbcScannerSwitchTable(obj, table) {/* eslint-disable-line no-unused-vars */\r\n let _obj = jQuery(obj);\r\n let domain = _obj.parents('.row-actions').attr('uid');\r\n let data = {action: 'spbc_tbl-switch', type: table, domain: domain};\r\n let params = {callback: spbcTblPaginationCallback, notJson: true};\r\n spbcSendAJAXRequest(data, params, _obj.parents('.tbl-root'));\r\n}\r\n\r\n/**\r\n * Open/close table rows handler\r\n * Using by inline php code\r\n *\r\n * @param {string} blockId\r\n * @param {string} columnKey\r\n */\r\nfunction spbcShowHideRows(blockId, columnKey) {/* eslint-disable-line no-unused-vars */\r\n let className = '.' + columnKey + '_block_' + blockId;\r\n let block = jQuery(className);\r\n if (block.hasClass('mob_table_active')) {\r\n block.removeClass('mob_table_active');\r\n } else {\r\n block.addClass('mob_table_active');\r\n }\r\n}\r\n\r\n/**\r\n * Starts an interval to update the analysis log table and stats every 6 seconds.\r\n */\r\nfunction spbcEATUpdateIntervalStart() {\r\n setInterval(() => {\r\n // Check if the analysis log tab is present\r\n if (document.querySelector('div[refresh_control_tab=\"analysis_log\"]') !== null) {\r\n // Add a spinner to the analysis log tab header\r\n spbcEATAddSpinner();\r\n // Update the analysis log table\r\n spbcUpdateTableEAT();\r\n // Update the analysis log stats\r\n spbcUpdateStatsEAT();\r\n }\r\n }, 60000);\r\n}\r\n\r\n/**\r\n * Adds a spinner to the analysis log tab header if it doesn't already exist.\r\n */\r\nfunction spbcEATAddSpinner() {\r\n if (document.getElementById('analysis_log_counter_spinner') === null) {\r\n const refreshTab = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_analysis_log\"]');\r\n if (refreshTab !== null) {\r\n const spinner = document.createElement('img');\r\n spinner.class = 'spbc_preloader';\r\n // todo Probably we need a validation function of spbcSettings object\r\n spinner.alt = spbcSettings.spbcSpinner.altText;\r\n spinner.src = spbcSettings.spbcSpinner.imgSource;\r\n spinner.id = 'analysis_log_counter_spinner';\r\n spinner.style = 'display: none; height: 13px; position: relative; top: 2px; margin-left: 5px';\r\n refreshTab.append(spinner);\r\n }\r\n }\r\n spbcEATSwitchSpinner();\r\n}\r\n\r\n/**\r\n * Toggles the display of the spinner in the analysis log tab header.\r\n */\r\nfunction spbcEATSwitchSpinner() {\r\n const spinner = document.getElementById('analysis_log_counter_spinner');\r\n if (spinner !== null) {\r\n spinner.style.display = spinner.style.display === 'none' ?\r\n spinner.style.display = 'inline' :\r\n spinner.style.display = 'none';\r\n }\r\n}\r\n\r\n/**\r\n * Sends an AJAX request to update the analysis log table.\r\n */\r\nfunction spbcUpdateTableEAT() {\r\n // Define the tab name for the request\r\n let tabName = 'scanner';\r\n // Data object containing parameters for the AJAX request\r\n let data = {\r\n action: 'spbc_settings__draw_elements',\r\n tab_name: tabName,\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n // Params object with additional settings for the AJAX request\r\n let currentParams = {\r\n callback: spbcUpdateTableCallbackEAT,\r\n notJson: true,\r\n additional: null,\r\n };\r\n // Send the AJAX request with the data and params objects\r\n spbcSendAJAXRequest( data, currentParams, null );\r\n}\r\n\r\n/**\r\n * Callback function to update the analysis log table with new HTML content.\r\n *\r\n * @param {string} allTablesHTML - The HTML content of all tables.\r\n */\r\nfunction spbcUpdateTableCallbackEAT(allTablesHTML) {\r\n // select the same table element to search in the current code and update from received\r\n const analysisTableSelector = '#spbc_tbl__scanner_analysis_log';\r\n const parser = new DOMParser();\r\n const allTablesHTMLParsed = parser.parseFromString(allTablesHTML, 'text/html');\r\n\r\n let newTabElement = null;\r\n let newTabElementInnerHTML = '';\r\n let currentTabElement = null;\r\n\r\n // get new analysis table element and its HTML\r\n newTabElement = allTablesHTMLParsed.querySelector(analysisTableSelector);\r\n if (newTabElement !== null && newTabElement.innerHTML !== '') {\r\n newTabElementInnerHTML = newTabElement.innerHTML;\r\n }\r\n\r\n // get current analysis table element and its HTML\r\n currentTabElement = document.querySelector(analysisTableSelector);\r\n if (currentTabElement !== null && currentTabElement.innerHTML === '') {\r\n currentTabElement = null;\r\n }\r\n\r\n // update analysis table element if it's changed and new data presented\r\n if (currentTabElement !== null && newTabElementInnerHTML !== '') {\r\n currentTabElement.innerHTML = newTabElementInnerHTML;\r\n }\r\n}\r\n\r\n/**\r\n * Sends an AJAX request to update the analysis log stats.\r\n */\r\nfunction spbcUpdateStatsEAT() {\r\n // Data object containing parameters for the AJAX request\r\n let data = {\r\n action: 'spbc_analysyis_files_stats__get_html',\r\n sub_action: 'give_me_html',\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n // Params object with additional settings for the AJAX request\r\n let params = {\r\n callback: spbcUpdateStatsCallbackEAT,\r\n notJson: true,\r\n };\r\n // Send the AJAX request with the data and params objects\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Callback function to update the analysis log stats with new HTML content.\r\n *\r\n * @param {string} newStatsHtml - The new HTML content for the stats.\r\n */\r\nfunction spbcUpdateStatsCallbackEAT(newStatsHtml) {\r\n // Get the element that displays the analysis files stats\r\n let info = document.getElementById('spbc_analysis_files_stats');\r\n // If the element exists, update its inner HTML with the new stats\r\n if (info) {\r\n info.innerHTML = newStatsHtml;\r\n }\r\n // Toggle the display of the spinner in the analysis log tab header\r\n spbcEATSwitchSpinner();\r\n}\r\n"],"names":["let","spbcBulkAction","noConfirmActions","spbcGetNoConfirmActions","spbcPublic","spbcReloadAccordion","interactControlTab","updateText","spbcSendAJAXRequest","action","notJson","callback","result","data","params","obj","jQuery","accordion","html","header","heightStyle","collapsible","active","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","interactScannerTab","controlTab","refreshControlTabSelector","headerUpdateStatus","headerSelector","appendTo","click","setAttribute","hide","off","on","spbcScanner","alert","spbcTableLocalize","scannerIsActive","self","this","siblings","children","first","selectedIndex","value","indexOf","any","includes","confirm","spbcTable","warning_bulk","add_action","status","parents","attr","spbcScannerCureBulk","spbcScannerRestoreBulk","selectedItems","closest","find","fileIds","each","index","element","elementId","val","push","file_ids","button","spinner","out","counters","total","updated","skipped","failed","queued","spbcModal","open","put","files_sent_counter","errorOutput","errorText","comment","putError","timeout","e","spbcScannerAnalysisLogDeleteFromLog","sendAction","items","msg","show","ip","spbcSecLogsFilterIp","prop","setTimeout","is","restricted","current","allItems","selectedIds","selector","length","security","spbcSettings","ajax_nonce","ajax","type","url","ajaxurl","beforeSend","success","displayData","divWrapper","document","createElement","pMessage","pCounters","divFiles","bSeeMore","pSeeMore","failedToCure","innerHTML","append","hasOwnProperty","failed_to_cure","join","message","cured_on_request","outerHTML","addEventListener","failedToRestore","failed_to_restore","restored_on_request","id","cols","page_url","parent","page_id","spbcTblRowActionsCallback","hideSupportLink","yesButtonText","noButtonText","fileName","firstChild","confirmationHeader","warning_default","confirmationText","confirmed","noConfirmActionsEmpty","defaults","JSON","parse","no_confirm_row_actions","color","css","background","prepend","fadeOut","file_info","window","prompt","error","temp_html","tmp","undefined","updated_template","updatedType","updated_template_type","template","countRowInTemplate","targetTab","table","text","countExistingRows","remove","tabHeaderTemplate","tabBodyTemplate","after","spbcTblPaginationCallback","page","removeAttr","spbcTblSortCallback","domain","target","classList","contains","order_by","order","spbcScannerSwitchTable","_obj","spbcShowHideRows","blockId","columnKey","block","hasClass","removeClass","addClass","spbcEATUpdateIntervalStart","setInterval","querySelector","spbcEATAddSpinner","spbcUpdateTableEAT","spbcUpdateStatsEAT","refreshTab","getElementById","class","alt","spbcSpinner","altText","src","imgSource","style","spbcEATSwitchSpinner","display","tab_name","spbcUpdateTableCallbackEAT","additional","allTablesHTML","analysisTableSelector","newTabElementInnerHTML","currentTabElement","newTabElement","DOMParser","parseFromString","sub_action","spbcUpdateStatsCallbackEAT","newStatsHtml","info","ready"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-upload.min.js.map b/js/spbc-upload.min.js.map index 1fde6a5a7..9ccf71bac 100644 --- a/js/spbc-upload.min.js.map +++ b/js/spbc-upload.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-upload.min.js","sources":["spbc-upload.js"],"sourcesContent":["let spbcErrorMsgCount = 0;\n\njQuery(document).ready(function() {\n // Count error messages each 100ms\n setTimeout(spbcCheckNewFiles, 1000);\n});\n\n/**\n * Check blocked file and display error message about it\n */\nfunction spbcCheckNewFiles() {\n // If their more messages than were, fire AJAX request to get data\n if (spbcErrorMsgCount < spbcGetErrorMsgs().length) {\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\n spbcGetLatestBlockedFile();\n spbcErrorMsgCount = spbcErrorMsgCount - 1;\n // If their fewer messages than were, recount\n } else if (spbcErrorMsgCount > spbcGetErrorMsgs().length) {\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\n }\n setTimeout(spbcCheckNewFiles, 1000);\n}\n\n/**\n * Array of the appear errors notices on the page\n *\n * @return {{length}|*|jQuery|HTMLElement|*[]}\n */\nfunction spbcGetErrorMsgs() {\n let mediaError = jQuery('#media-upload-error .error');\n let uploadError = jQuery('.upload-error-message');\n if (mediaError.length) {\n return mediaError;\n } else if (uploadError.length) {\n return uploadError;\n } else {\n return [];\n }\n}\n\n/**\n * Fires AJAX request to get more info about the block\n */\nfunction spbcGetLatestBlockedFile() {\n let data = {action: 'spbc_check_file_block', timestamp: spbcTimestamp()};\n let params = {callback: spbcCheckFileBlockCallback};\n let obj = spbcGetErrorMsgs().first();\n spbcSendAJAXRequest(data, params, obj);\n}\n\n/**\n * Callback. Sets correct error message with details\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcCheckFileBlockCallback(result, data, params, obj) {\n if (result.blocked) {\n let pattern = result.pattern.CRITICAL || result.pattern.DANGER || result.pattern.SUSPICIOUS;\n obj.html(result.warning + '
' + result.pattern_title + ' ' + pattern);\n }\n}\n"],"names":["let","spbcErrorMsgCount","spbcCheckNewFiles","spbcGetErrorMsgs","length","spbcGetLatestBlockedFile","setTimeout","mediaError","jQuery","uploadError","data","action","timestamp","spbcTimestamp","params","callback","spbcCheckFileBlockCallback","obj","first","spbcSendAJAXRequest","result","pattern","blocked","CRITICAL","DANGER","SUSPICIOUS","html","warning","pattern_title","document","ready"],"mappings":"AAAAA,IAAIC,kBAAoB,EAUxB,SAASC,oBAEDD,kBAAoBE,iBAAiB,EAAEC,QACvCH,kBAAoBE,iBAAiB,EAAEC,OACvCC,yBAAyB,EACzBJ,mBAAwC,GAEjCA,kBAAoBE,iBAAiB,EAAEC,SAC9CH,kBAAoBE,iBAAiB,EAAEC,QAE3CE,WAAWJ,kBAAmB,GAAI,CACtC,CAOA,SAASC,mBACLH,IAAIO,EAAaC,OAAO,4BAA4B,EAChDC,EAAcD,OAAO,uBAAuB,EAChD,OAAID,EAAWH,OACJG,EACAE,EAAYL,OACZK,EAEA,EAEf,CAKA,SAASJ,2BACLL,IAAIU,EAAO,CAACC,OAAQ,wBAAyBC,UAAWC,cAAc,CAAC,EACnEC,EAAS,CAACC,SAAUC,0BAA0B,EAC9CC,EAAMd,iBAAiB,EAAEe,MAAM,EACnCC,oBAAoBT,EAAMI,EAAQG,CAAG,CACzC,CAUA,SAASD,2BAA2BI,EAAQV,EAAMI,EAAQG,GACtD,IACQI,EADJD,EAAOE,UACHD,EAAUD,EAAOC,QAAQE,UAAYH,EAAOC,QAAQG,QAAUJ,EAAOC,QAAQI,WACjFR,EAAIS,KAAKN,EAAOO,QAAU,OAASP,EAAOQ,cAAgB,IAAMP,CAAO,EAE/E,CA7DAb,OAAOqB,QAAQ,EAAEC,MAAM,WAEnBxB,WAAWJ,kBAAmB,GAAI,CACtC,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-upload.min.js","sources":["spbc-upload.js"],"sourcesContent":["let spbcErrorMsgCount = 0;\r\n\r\njQuery(document).ready(function() {\r\n // Count error messages each 100ms\r\n setTimeout(spbcCheckNewFiles, 1000);\r\n});\r\n\r\n/**\r\n * Check blocked file and display error message about it\r\n */\r\nfunction spbcCheckNewFiles() {\r\n // If their more messages than were, fire AJAX request to get data\r\n if (spbcErrorMsgCount < spbcGetErrorMsgs().length) {\r\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\r\n spbcGetLatestBlockedFile();\r\n spbcErrorMsgCount = spbcErrorMsgCount - 1;\r\n // If their fewer messages than were, recount\r\n } else if (spbcErrorMsgCount > spbcGetErrorMsgs().length) {\r\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\r\n }\r\n setTimeout(spbcCheckNewFiles, 1000);\r\n}\r\n\r\n/**\r\n * Array of the appear errors notices on the page\r\n *\r\n * @return {{length}|*|jQuery|HTMLElement|*[]}\r\n */\r\nfunction spbcGetErrorMsgs() {\r\n let mediaError = jQuery('#media-upload-error .error');\r\n let uploadError = jQuery('.upload-error-message');\r\n if (mediaError.length) {\r\n return mediaError;\r\n } else if (uploadError.length) {\r\n return uploadError;\r\n } else {\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Fires AJAX request to get more info about the block\r\n */\r\nfunction spbcGetLatestBlockedFile() {\r\n let data = {action: 'spbc_check_file_block', timestamp: spbcTimestamp()};\r\n let params = {callback: spbcCheckFileBlockCallback};\r\n let obj = spbcGetErrorMsgs().first();\r\n spbcSendAJAXRequest(data, params, obj);\r\n}\r\n\r\n/**\r\n * Callback. Sets correct error message with details\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcCheckFileBlockCallback(result, data, params, obj) {\r\n if (result.blocked) {\r\n let pattern = result.pattern.CRITICAL || result.pattern.DANGER || result.pattern.SUSPICIOUS;\r\n obj.html(result.warning + '
' + result.pattern_title + ' ' + pattern);\r\n }\r\n}\r\n"],"names":["let","spbcErrorMsgCount","spbcCheckNewFiles","spbcGetErrorMsgs","length","spbcGetLatestBlockedFile","setTimeout","mediaError","jQuery","uploadError","data","action","timestamp","spbcTimestamp","params","callback","spbcCheckFileBlockCallback","obj","first","spbcSendAJAXRequest","result","pattern","blocked","CRITICAL","DANGER","SUSPICIOUS","html","warning","pattern_title","document","ready"],"mappings":"AAAAA,IAAIC,kBAAoB,EAUxB,SAASC,oBAEDD,kBAAoBE,iBAAiB,EAAEC,QACvCH,kBAAoBE,iBAAiB,EAAEC,OACvCC,yBAAyB,EACzBJ,mBAAwC,GAEjCA,kBAAoBE,iBAAiB,EAAEC,SAC9CH,kBAAoBE,iBAAiB,EAAEC,QAE3CE,WAAWJ,kBAAmB,GAAI,CACtC,CAOA,SAASC,mBACLH,IAAIO,EAAaC,OAAO,4BAA4B,EAChDC,EAAcD,OAAO,uBAAuB,EAChD,OAAID,EAAWH,OACJG,EACAE,EAAYL,OACZK,EAEA,EAEf,CAKA,SAASJ,2BACLL,IAAIU,EAAO,CAACC,OAAQ,wBAAyBC,UAAWC,cAAc,CAAC,EACnEC,EAAS,CAACC,SAAUC,0BAA0B,EAC9CC,EAAMd,iBAAiB,EAAEe,MAAM,EACnCC,oBAAoBT,EAAMI,EAAQG,CAAG,CACzC,CAUA,SAASD,2BAA2BI,EAAQV,EAAMI,EAAQG,GACtD,IACQI,EADJD,EAAOE,UACHD,EAAUD,EAAOC,QAAQE,UAAYH,EAAOC,QAAQG,QAAUJ,EAAOC,QAAQI,WACjFR,EAAIS,KAAKN,EAAOO,QAAU,OAASP,EAAOQ,cAAgB,IAAMP,CAAO,EAE/E,CA7DAb,OAAOqB,QAAQ,EAAEC,MAAM,WAEnBxB,WAAWJ,kBAAmB,GAAI,CACtC,CAAC"} \ No newline at end of file diff --git a/js/src/spbc-admin.js b/js/src/spbc-admin.js index d3ba56723..8350c28c6 100644 --- a/js/src/spbc-admin.js +++ b/js/src/spbc-admin.js @@ -38,7 +38,11 @@ function spbcCheckGoogleCode() { success: function(result) { if (result.success) { jQuery('#spbct-google-qr-code').dialog( 'close' ); - document.location.reload(); + const submitButton = jQuery('form#your-profile input#submit'); + if (submitButton.length > 0) { + submitButton.click(); + } + } else { alert(result.data); } From 6f09a38d51589bb5d91a72e6b4cc18cc1e791cd9 Mon Sep 17 00:00:00 2001 From: svfcode Date: Wed, 5 Feb 2025 09:35:21 +0300 Subject: [PATCH 2/3] fix eslint --- js/spbc-admin.min.js.map | 2 +- js/src/spbc-admin.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/js/spbc-admin.min.js.map b/js/spbc-admin.min.js.map index 055761e60..b455d64e8 100644 --- a/js/spbc-admin.min.js.map +++ b/js/spbc-admin.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-admin.min.js","sources":["spbc-admin.js"],"sourcesContent":["/**\r\n * Get Google Qr Code\r\n *\r\n * @return {object}\r\n */\r\nfunction spbcGetGoogleQrCode() {\r\n let data = {};\r\n let res = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_get_google_qr_code';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n res = result;\r\n },\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Check Google Code\r\n */\r\nfunction spbcCheckGoogleCode() {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_check_google_code';\r\n data.code = jQuery('#spbct-google-qr-code input').val();\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n jQuery('#spbct-google-qr-code').dialog( 'close' );\r\n const submitButton = jQuery('form#your-profile input#submit');\r\n if (submitButton.length > 0) {\r\n submitButton.click();\r\n }\r\n\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Disable Google 2fa\r\n *\r\n * @param {string} element\r\n */\r\nfunction spbcDisableG2fa( element ) {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_disable_google_2fa';\r\n data.user_id = jQuery(element).data('user-id');\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n document.location.reload();\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability\r\n *\r\n * @param {array} list\r\n * @param {string} type\r\n */\r\nfunction spbcCheckVulnerability(list, type = 'install') {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = type === 'install' ? 'spbc_check_vulnerability_install' : 'spbc_check_vulnerability_list';\r\n data.list = list;\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n if (type === 'install') {\r\n spbcCheckVulnerabilityInstallRender(result.list, result.msg);\r\n }\r\n if (type === 'list') {\r\n spbcCheckVulnerabilityListRender(result.list);\r\n }\r\n } else {\r\n console.log(result);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability List Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityListRender(list) {\r\n let card;\r\n let badge;\r\n\r\n list.forEach((el) => {\r\n badge = document.createElement('div');\r\n badge.classList.add('notice', 'notice-error', 'error-message', 'spbc-vulnerable-notice');\r\n badge.innerHTML = el.msg;\r\n card = document.querySelector('.themes .theme[data-slug=' + el.slug + ']');\r\n if (card) {\r\n card.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability Install Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityInstallRender(list, msg) {\r\n let card;\r\n\r\n let badge = document.createElement('div');\r\n badge.classList.add('notice');\r\n badge.innerHTML = '

' + msg + '

';\r\n\r\n list.forEach((el) => {\r\n card = document.querySelector('.theme-id-container .theme-actions a[data-slug=' + el + ']');\r\n if (card) {\r\n card.parentNode.parentNode.parentNode.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n if (window.location.href.indexOf('themes.php') > -1 && spbcSettings.vulnerabilityShowList) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n let version;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.themes .theme[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n version = el.querySelector('img').src ?\r\n el.querySelector('img').src.match(/ver=([\\d\\.]+)/)[1] :\r\n null;\r\n slugs.push({'slug': el.dataset.slug, 'version': version});\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs, 'list');\r\n }\r\n }, 500);\r\n }\r\n\r\n if (window.location.href.indexOf('theme-install.php') > -1 && spbcSettings.vulnerabilityShowInstall) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.theme-id-container .theme-actions a[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n slugs.push(el.dataset.slug);\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs);\r\n }\r\n }, 500);\r\n }\r\n\r\n // Auto update banner close handler\r\n jQuery('.spbc_update_notice').on('click', 'button', function() {\r\n spbcSetCookie('spbc_update_banner_closed', 1, 86400 * 30);\r\n });\r\n\r\n // Enable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-enable', function(e) {\r\n e.preventDefault();\r\n let spbcGoogleQrCode = spbcGetGoogleQrCode();\r\n\r\n if ( spbcGoogleQrCode.success ) {\r\n let qrCodeDiv = jQuery('#spbct-google-qr-code-img');\r\n qrCodeDiv.html(spbcGoogleQrCode.data.img + '

' + spbcGoogleQrCode.data.code + '

');\r\n jQuery('#spbct-google-qr-code input').val('');\r\n jQuery('#spbct-google-qr-code').dialog({\r\n modal: true,\r\n title: 'Google authenticator activation',\r\n buttons: {\r\n Cancel: function() {\r\n jQuery( this ).dialog( 'close' );\r\n },\r\n Ok: function() {\r\n spbcCheckGoogleCode();\r\n },\r\n },\r\n draggable: false,\r\n resizable: false,\r\n });\r\n } else {\r\n alert(spbcGetGoogleQrCode.data);\r\n }\r\n });\r\n\r\n // Disable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-disable', function(e) {\r\n e.preventDefault();\r\n if ( confirm( 'Are you sure?' ) ) {\r\n spbcDisableG2fa( this );\r\n }\r\n });\r\n\r\n let refreshUserOnlineCounter = function( result, data, params ) {\r\n setTimeout(function() {\r\n if ( result !== null ) {\r\n jQuery('.spbc-admin_bar--user_counter').html(result.count);\r\n if ( result.count <= 3 ) {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').show();\r\n jQuery('.spbc-admin_bar--online_admins').html(result.users.join(', '));\r\n } else {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').hide();\r\n }\r\n }\r\n spbcSendAJAXRequest( data, params );\r\n }, 15000 );\r\n };\r\n\r\n if ( +spbcSettings.admin_bar__admins_online_counter === 1 ) {\r\n refreshUserOnlineCounter(null, {action: 'spbc_get_authorized_admins'}, {callback: refreshUserOnlineCounter});\r\n }\r\n\r\n // Dismiss admin banner\r\n spbcHandleBannersDismissing();\r\n\r\n if (+spbcSettings.needToWhitelist === 1) {\r\n spbcSendAJAXRequest( {'action': 'spbc_private_list_add'}, {'callback': null} );\r\n }\r\n\r\n if ( +spbcSettings.critical > 0) {\r\n let ringContainer = document.createElement('div');\r\n ringContainer.className = 'spbc_ring-container';\r\n ringContainer.style.top = '0px';\r\n ringContainer.style.right = '70px';\r\n let ringRing = document.createElement('div');\r\n ringRing.className = 'spbc_ringring';\r\n let circle = document.createElement('div');\r\n circle.className = 'spbc_circle';\r\n\r\n ringContainer.appendChild(ringRing);\r\n ringContainer.appendChild(circle);\r\n\r\n let settings = document.querySelector('#menu-settings');\r\n if (settings) {\r\n settings.appendChild(ringContainer);\r\n }\r\n }\r\n\r\n jQuery(document).on('keyup', '#spbc_key', function(e) {\r\n e.preventDefault();\r\n let value = jQuery('#spbc_key').val();\r\n if (/^[a-zA-Z0-9]+$/.test(value) && value.length > 8) {\r\n jQuery('#spbc-key-manually-link').hide();\r\n jQuery('#spbc_setting_get_key_auto').hide();\r\n jQuery('#spbc_get_key_or_text').hide();\r\n } else {\r\n jQuery('#spbc-key-manually-link').show();\r\n jQuery('#spbc_setting_get_key_auto').show();\r\n jQuery('#spbc_get_key_or_text').show();\r\n }\r\n });\r\n});\r\n\r\n/**\r\n * Summary Show CDN Checker Table\r\n */\r\nfunction spbcSummaryShowCDNCheckerTable() {/* eslint-disable-line no-unused-vars */\r\n event.preventDefault();\r\n let table = document.getElementById('spbc_stats_cdn_checker_table');\r\n if (typeof (table) !== 'undefined') {\r\n if (table.style.display === 'block') {\r\n table.style.display = 'none';\r\n } else {\r\n table.style.display = 'block';\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Dismiss function for banners.\r\n */\r\nfunction spbcHandleBannersDismissing() {\r\n let body = jQuery('body');\r\n body.on('click', '.spbct-notice-dismiss-link', function(e) {\r\n jQuery(e.target).siblings('.notice-dismiss').click();\r\n });\r\n body.on('click', '.spbc-notice .notice-dismiss', function(e) {\r\n const bannerId = jQuery(e.target).parent('.notice').attr('id');\r\n if (bannerId) {\r\n // call ajax to dismiss banner anyway\r\n // todo There is no case when further API call for notice_review is unsuccessful,\r\n // todo but it should be handled in the future\r\n spbcSendAJAXRequest({'action': 'spbc_dismiss_banner', 'banner_id': bannerId}, {});\r\n\r\n // check if there is a postNoticeText to show after dismissing the notice\r\n if (\r\n typeof spbcSettings !== 'undefined' &&\r\n spbcSettings.hasOwnProperty('spbctNoticeDismissSuccess')\r\n ) {\r\n // get afterDismissingNotices from localized settings\r\n let afterDismissingNotices = spbcSettings.spbctNoticeDismissSuccess;\r\n // default postNoticeText\r\n let postNoticeText = '';\r\n // default notice level\r\n let noticeLevel = '';\r\n if (typeof afterDismissingNotices === 'string') {\r\n // try to parse JSON\r\n try {\r\n afterDismissingNotices = JSON.parse(afterDismissingNotices);\r\n } catch (e) {\r\n afterDismissingNotices = [];\r\n }\r\n // get postNoticeText and noticeLevel according to bannerName\r\n for (const afterDismissingNotice of afterDismissingNotices) {\r\n if (\r\n afterDismissingNotice.hasOwnProperty('bannerName') &&\r\n afterDismissingNotice.hasOwnProperty('postNoticeText')\r\n ) {\r\n let bannerName = afterDismissingNotice.bannerName;\r\n // if banner name is in the bannerId, show the postNoticeText\r\n if (bannerId.indexOf(bannerName) !== -1) {\r\n postNoticeText = afterDismissingNotice.postNoticeText;\r\n }\r\n // if noticeLevel is set, use it\r\n if (afterDismissingNotice.hasOwnProperty('noticeLevel')) {\r\n noticeLevel = afterDismissingNotice.noticeLevel;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // if postNoticeText is set, show it\r\n if (postNoticeText !== '') {\r\n const noticeClassList = 'notice ' + noticeLevel + ' is-dismissible';\r\n let elem = '
' +\r\n '

' +\r\n postNoticeText +\r\n '

';\r\n jQuery(e.target)\r\n .parent('.notice')\r\n .after(elem);\r\n setTimeout(function() {\r\n jQuery('#spbct-notice-dismiss-success').fadeOut();\r\n }, 5000);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\n/**\r\n * Highlights the critical files notice if the URL contains specific parameters.\r\n *\r\n * @param {boolean} [isBannerCall=false] - Indicates if the function is called from a banner.\r\n *\r\n */\r\nfunction spbcHighlightCriticalFilesNotice(isBannerCall = false) { // eslint-disable-line no-unused-vars\r\n // Check if the URL contains the parameters to highlight the notice\r\n let needToHighlightNotice = window.location.href.indexOf('spbc_tab=scanner&highlight_critical_files=1') !== -1;\r\n let redirectConditionIsOK = window.location.href.indexOf('spbc_tab=scanner') === -1;\r\n\r\n // Redirect to the scanner tab if called from a banner and the condition is met\r\n if (isBannerCall && redirectConditionIsOK) {\r\n window.location.href = 'options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1';\r\n return;\r\n }\r\n\r\n // If the notice needs to be highlighted\r\n if (needToHighlightNotice || isBannerCall) {\r\n let criticalFilesNotice = null;\r\n let criticalFilesNotices = document.querySelectorAll('#notice_id_found_critical_files');\r\n\r\n // Find the critical files notice within the scanner tab\r\n if (criticalFilesNotices.length > 0) {\r\n criticalFilesNotices.forEach((notice) => {\r\n if (criticalFilesNotice == null) {\r\n if (notice.closest('#spbc_tab-scanner') !== null) {\r\n criticalFilesNotice = notice;\r\n }\r\n }\r\n });\r\n }\r\n // Scroll to the notice and highlight it with a blinking effect\r\n if (criticalFilesNotice !== null) {\r\n criticalFilesNotice.scrollIntoView({behavior: 'smooth', block: 'start'});\r\n if (!criticalFilesNotice.hasOwnProperty('highlighted')) {\r\n let switcher = false;\r\n setInterval(() => {\r\n switcher = !switcher;\r\n if (switcher) {\r\n criticalFilesNotice.classList.remove('notice-warning');\r\n criticalFilesNotice.classList.add('notice-error');\r\n criticalFilesNotice.highlighted = true;\r\n } else {\r\n criticalFilesNotice.classList.remove('notice-error');\r\n criticalFilesNotice.classList.add('notice-warning');\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n // Expand the critical files table if it exits and is collapsed\r\n let criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n } else {\r\n // Check periodically if the table is loaded and expand it\r\n const tabLoadingCheckInterval = setInterval(() => {\r\n criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n clearInterval(tabLoadingCheckInterval);\r\n }\r\n }, 150);\r\n }\r\n }\r\n}\r\n"],"names":["spbcGetGoogleQrCode","let","data","res","security","spbcSettings","ajax_nonce","action","jQuery","ajax","type","async","url","ajaxurl","success","result","spbcCheckGoogleCode","code","val","submitButton","dialog","length","click","alert","spbcDisableG2fa","element","user_id","document","location","reload","spbcCheckVulnerability","list","spbcCheckVulnerabilityInstallRender","msg","spbcCheckVulnerabilityListRender","console","log","card","badge","forEach","createElement","classList","add","innerHTML","el","querySelector","slug","appendChild","parentNode","spbcSummaryShowCDNCheckerTable","event","preventDefault","table","getElementById","style","display","spbcHandleBannersDismissing","body","on","e","target","siblings","bannerName","elem","bannerId","parent","attr","spbcSendAJAXRequest","banner_id","hasOwnProperty","afterDismissingNotices","spbctNoticeDismissSuccess","postNoticeText","noticeLevel","JSON","parse","afterDismissingNotice","indexOf","after","setTimeout","fadeOut","spbcHighlightCriticalFilesNotice","isBannerCall","needToHighlightNotice","window","href","redirectConditionIsOK","criticalFilesNotice","criticalFilesNotices","querySelectorAll","notice","closest","scrollIntoView","behavior","block","switcher","setInterval","remove","highlighted","criticalFileTable","contains","tabLoadingCheckInterval","clearInterval","ready","vulnerabilityShowList","slugsState","slugs","slugsNodes","version","src","match","push","dataset","stringify","vulnerabilityShowInstall","spbcSetCookie","spbcGoogleQrCode","html","img","modal","title","buttons","Cancel","this","Ok","draggable","resizable","confirm","refreshUserOnlineCounter","params","count","show","users","join","hide","ringContainer","circle","settings","admin_bar__admins_online_counter","callback","needToWhitelist","critical","className","top","right","ringRing","value","test"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-admin.min.js","sources":["spbc-admin.js"],"sourcesContent":["/**\r\n * Get Google Qr Code\r\n *\r\n * @return {object}\r\n */\r\nfunction spbcGetGoogleQrCode() {\r\n let data = {};\r\n let res = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_get_google_qr_code';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n res = result;\r\n },\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Check Google Code\r\n */\r\nfunction spbcCheckGoogleCode() {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_check_google_code';\r\n data.code = jQuery('#spbct-google-qr-code input').val();\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n jQuery('#spbct-google-qr-code').dialog( 'close' );\r\n const submitButton = jQuery('form#your-profile input#submit');\r\n if (submitButton.length > 0) {\r\n submitButton.click();\r\n }\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Disable Google 2fa\r\n *\r\n * @param {string} element\r\n */\r\nfunction spbcDisableG2fa( element ) {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_disable_google_2fa';\r\n data.user_id = jQuery(element).data('user-id');\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n document.location.reload();\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability\r\n *\r\n * @param {array} list\r\n * @param {string} type\r\n */\r\nfunction spbcCheckVulnerability(list, type = 'install') {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = type === 'install' ? 'spbc_check_vulnerability_install' : 'spbc_check_vulnerability_list';\r\n data.list = list;\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n if (type === 'install') {\r\n spbcCheckVulnerabilityInstallRender(result.list, result.msg);\r\n }\r\n if (type === 'list') {\r\n spbcCheckVulnerabilityListRender(result.list);\r\n }\r\n } else {\r\n console.log(result);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability List Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityListRender(list) {\r\n let card;\r\n let badge;\r\n\r\n list.forEach((el) => {\r\n badge = document.createElement('div');\r\n badge.classList.add('notice', 'notice-error', 'error-message', 'spbc-vulnerable-notice');\r\n badge.innerHTML = el.msg;\r\n card = document.querySelector('.themes .theme[data-slug=' + el.slug + ']');\r\n if (card) {\r\n card.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability Install Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityInstallRender(list, msg) {\r\n let card;\r\n\r\n let badge = document.createElement('div');\r\n badge.classList.add('notice');\r\n badge.innerHTML = '

' + msg + '

';\r\n\r\n list.forEach((el) => {\r\n card = document.querySelector('.theme-id-container .theme-actions a[data-slug=' + el + ']');\r\n if (card) {\r\n card.parentNode.parentNode.parentNode.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n if (window.location.href.indexOf('themes.php') > -1 && spbcSettings.vulnerabilityShowList) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n let version;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.themes .theme[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n version = el.querySelector('img').src ?\r\n el.querySelector('img').src.match(/ver=([\\d\\.]+)/)[1] :\r\n null;\r\n slugs.push({'slug': el.dataset.slug, 'version': version});\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs, 'list');\r\n }\r\n }, 500);\r\n }\r\n\r\n if (window.location.href.indexOf('theme-install.php') > -1 && spbcSettings.vulnerabilityShowInstall) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.theme-id-container .theme-actions a[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n slugs.push(el.dataset.slug);\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs);\r\n }\r\n }, 500);\r\n }\r\n\r\n // Auto update banner close handler\r\n jQuery('.spbc_update_notice').on('click', 'button', function() {\r\n spbcSetCookie('spbc_update_banner_closed', 1, 86400 * 30);\r\n });\r\n\r\n // Enable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-enable', function(e) {\r\n e.preventDefault();\r\n let spbcGoogleQrCode = spbcGetGoogleQrCode();\r\n\r\n if ( spbcGoogleQrCode.success ) {\r\n let qrCodeDiv = jQuery('#spbct-google-qr-code-img');\r\n qrCodeDiv.html(spbcGoogleQrCode.data.img + '

' + spbcGoogleQrCode.data.code + '

');\r\n jQuery('#spbct-google-qr-code input').val('');\r\n jQuery('#spbct-google-qr-code').dialog({\r\n modal: true,\r\n title: 'Google authenticator activation',\r\n buttons: {\r\n Cancel: function() {\r\n jQuery( this ).dialog( 'close' );\r\n },\r\n Ok: function() {\r\n spbcCheckGoogleCode();\r\n },\r\n },\r\n draggable: false,\r\n resizable: false,\r\n });\r\n } else {\r\n alert(spbcGetGoogleQrCode.data);\r\n }\r\n });\r\n\r\n // Disable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-disable', function(e) {\r\n e.preventDefault();\r\n if ( confirm( 'Are you sure?' ) ) {\r\n spbcDisableG2fa( this );\r\n }\r\n });\r\n\r\n let refreshUserOnlineCounter = function( result, data, params ) {\r\n setTimeout(function() {\r\n if ( result !== null ) {\r\n jQuery('.spbc-admin_bar--user_counter').html(result.count);\r\n if ( result.count <= 3 ) {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').show();\r\n jQuery('.spbc-admin_bar--online_admins').html(result.users.join(', '));\r\n } else {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').hide();\r\n }\r\n }\r\n spbcSendAJAXRequest( data, params );\r\n }, 15000 );\r\n };\r\n\r\n if ( +spbcSettings.admin_bar__admins_online_counter === 1 ) {\r\n refreshUserOnlineCounter(null, {action: 'spbc_get_authorized_admins'}, {callback: refreshUserOnlineCounter});\r\n }\r\n\r\n // Dismiss admin banner\r\n spbcHandleBannersDismissing();\r\n\r\n if (+spbcSettings.needToWhitelist === 1) {\r\n spbcSendAJAXRequest( {'action': 'spbc_private_list_add'}, {'callback': null} );\r\n }\r\n\r\n if ( +spbcSettings.critical > 0) {\r\n let ringContainer = document.createElement('div');\r\n ringContainer.className = 'spbc_ring-container';\r\n ringContainer.style.top = '0px';\r\n ringContainer.style.right = '70px';\r\n let ringRing = document.createElement('div');\r\n ringRing.className = 'spbc_ringring';\r\n let circle = document.createElement('div');\r\n circle.className = 'spbc_circle';\r\n\r\n ringContainer.appendChild(ringRing);\r\n ringContainer.appendChild(circle);\r\n\r\n let settings = document.querySelector('#menu-settings');\r\n if (settings) {\r\n settings.appendChild(ringContainer);\r\n }\r\n }\r\n\r\n jQuery(document).on('keyup', '#spbc_key', function(e) {\r\n e.preventDefault();\r\n let value = jQuery('#spbc_key').val();\r\n if (/^[a-zA-Z0-9]+$/.test(value) && value.length > 8) {\r\n jQuery('#spbc-key-manually-link').hide();\r\n jQuery('#spbc_setting_get_key_auto').hide();\r\n jQuery('#spbc_get_key_or_text').hide();\r\n } else {\r\n jQuery('#spbc-key-manually-link').show();\r\n jQuery('#spbc_setting_get_key_auto').show();\r\n jQuery('#spbc_get_key_or_text').show();\r\n }\r\n });\r\n});\r\n\r\n/**\r\n * Summary Show CDN Checker Table\r\n */\r\nfunction spbcSummaryShowCDNCheckerTable() {/* eslint-disable-line no-unused-vars */\r\n event.preventDefault();\r\n let table = document.getElementById('spbc_stats_cdn_checker_table');\r\n if (typeof (table) !== 'undefined') {\r\n if (table.style.display === 'block') {\r\n table.style.display = 'none';\r\n } else {\r\n table.style.display = 'block';\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Dismiss function for banners.\r\n */\r\nfunction spbcHandleBannersDismissing() {\r\n let body = jQuery('body');\r\n body.on('click', '.spbct-notice-dismiss-link', function(e) {\r\n jQuery(e.target).siblings('.notice-dismiss').click();\r\n });\r\n body.on('click', '.spbc-notice .notice-dismiss', function(e) {\r\n const bannerId = jQuery(e.target).parent('.notice').attr('id');\r\n if (bannerId) {\r\n // call ajax to dismiss banner anyway\r\n // todo There is no case when further API call for notice_review is unsuccessful,\r\n // todo but it should be handled in the future\r\n spbcSendAJAXRequest({'action': 'spbc_dismiss_banner', 'banner_id': bannerId}, {});\r\n\r\n // check if there is a postNoticeText to show after dismissing the notice\r\n if (\r\n typeof spbcSettings !== 'undefined' &&\r\n spbcSettings.hasOwnProperty('spbctNoticeDismissSuccess')\r\n ) {\r\n // get afterDismissingNotices from localized settings\r\n let afterDismissingNotices = spbcSettings.spbctNoticeDismissSuccess;\r\n // default postNoticeText\r\n let postNoticeText = '';\r\n // default notice level\r\n let noticeLevel = '';\r\n if (typeof afterDismissingNotices === 'string') {\r\n // try to parse JSON\r\n try {\r\n afterDismissingNotices = JSON.parse(afterDismissingNotices);\r\n } catch (e) {\r\n afterDismissingNotices = [];\r\n }\r\n // get postNoticeText and noticeLevel according to bannerName\r\n for (const afterDismissingNotice of afterDismissingNotices) {\r\n if (\r\n afterDismissingNotice.hasOwnProperty('bannerName') &&\r\n afterDismissingNotice.hasOwnProperty('postNoticeText')\r\n ) {\r\n let bannerName = afterDismissingNotice.bannerName;\r\n // if banner name is in the bannerId, show the postNoticeText\r\n if (bannerId.indexOf(bannerName) !== -1) {\r\n postNoticeText = afterDismissingNotice.postNoticeText;\r\n }\r\n // if noticeLevel is set, use it\r\n if (afterDismissingNotice.hasOwnProperty('noticeLevel')) {\r\n noticeLevel = afterDismissingNotice.noticeLevel;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // if postNoticeText is set, show it\r\n if (postNoticeText !== '') {\r\n const noticeClassList = 'notice ' + noticeLevel + ' is-dismissible';\r\n let elem = '
' +\r\n '

' +\r\n postNoticeText +\r\n '

';\r\n jQuery(e.target)\r\n .parent('.notice')\r\n .after(elem);\r\n setTimeout(function() {\r\n jQuery('#spbct-notice-dismiss-success').fadeOut();\r\n }, 5000);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\n/**\r\n * Highlights the critical files notice if the URL contains specific parameters.\r\n *\r\n * @param {boolean} [isBannerCall=false] - Indicates if the function is called from a banner.\r\n *\r\n */\r\nfunction spbcHighlightCriticalFilesNotice(isBannerCall = false) { // eslint-disable-line no-unused-vars\r\n // Check if the URL contains the parameters to highlight the notice\r\n let needToHighlightNotice = window.location.href.indexOf('spbc_tab=scanner&highlight_critical_files=1') !== -1;\r\n let redirectConditionIsOK = window.location.href.indexOf('spbc_tab=scanner') === -1;\r\n\r\n // Redirect to the scanner tab if called from a banner and the condition is met\r\n if (isBannerCall && redirectConditionIsOK) {\r\n window.location.href = 'options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1';\r\n return;\r\n }\r\n\r\n // If the notice needs to be highlighted\r\n if (needToHighlightNotice || isBannerCall) {\r\n let criticalFilesNotice = null;\r\n let criticalFilesNotices = document.querySelectorAll('#notice_id_found_critical_files');\r\n\r\n // Find the critical files notice within the scanner tab\r\n if (criticalFilesNotices.length > 0) {\r\n criticalFilesNotices.forEach((notice) => {\r\n if (criticalFilesNotice == null) {\r\n if (notice.closest('#spbc_tab-scanner') !== null) {\r\n criticalFilesNotice = notice;\r\n }\r\n }\r\n });\r\n }\r\n // Scroll to the notice and highlight it with a blinking effect\r\n if (criticalFilesNotice !== null) {\r\n criticalFilesNotice.scrollIntoView({behavior: 'smooth', block: 'start'});\r\n if (!criticalFilesNotice.hasOwnProperty('highlighted')) {\r\n let switcher = false;\r\n setInterval(() => {\r\n switcher = !switcher;\r\n if (switcher) {\r\n criticalFilesNotice.classList.remove('notice-warning');\r\n criticalFilesNotice.classList.add('notice-error');\r\n criticalFilesNotice.highlighted = true;\r\n } else {\r\n criticalFilesNotice.classList.remove('notice-error');\r\n criticalFilesNotice.classList.add('notice-warning');\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n // Expand the critical files table if it exits and is collapsed\r\n let criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n } else {\r\n // Check periodically if the table is loaded and expand it\r\n const tabLoadingCheckInterval = setInterval(() => {\r\n criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n clearInterval(tabLoadingCheckInterval);\r\n }\r\n }, 150);\r\n }\r\n }\r\n}\r\n"],"names":["spbcGetGoogleQrCode","let","data","res","security","spbcSettings","ajax_nonce","action","jQuery","ajax","type","async","url","ajaxurl","success","result","spbcCheckGoogleCode","code","val","submitButton","dialog","length","click","alert","spbcDisableG2fa","element","user_id","document","location","reload","spbcCheckVulnerability","list","spbcCheckVulnerabilityInstallRender","msg","spbcCheckVulnerabilityListRender","console","log","card","badge","forEach","createElement","classList","add","innerHTML","el","querySelector","slug","appendChild","parentNode","spbcSummaryShowCDNCheckerTable","event","preventDefault","table","getElementById","style","display","spbcHandleBannersDismissing","body","on","e","target","siblings","bannerName","elem","bannerId","parent","attr","spbcSendAJAXRequest","banner_id","hasOwnProperty","afterDismissingNotices","spbctNoticeDismissSuccess","postNoticeText","noticeLevel","JSON","parse","afterDismissingNotice","indexOf","after","setTimeout","fadeOut","spbcHighlightCriticalFilesNotice","isBannerCall","needToHighlightNotice","window","href","redirectConditionIsOK","criticalFilesNotice","criticalFilesNotices","querySelectorAll","notice","closest","scrollIntoView","behavior","block","switcher","setInterval","remove","highlighted","criticalFileTable","contains","tabLoadingCheckInterval","clearInterval","ready","vulnerabilityShowList","slugsState","slugs","slugsNodes","version","src","match","push","dataset","stringify","vulnerabilityShowInstall","spbcSetCookie","spbcGoogleQrCode","html","img","modal","title","buttons","Cancel","this","Ok","draggable","resizable","confirm","refreshUserOnlineCounter","params","count","show","users","join","hide","ringContainer","circle","settings","admin_bar__admins_online_counter","callback","needToWhitelist","critical","className","top","right","ringRing","value","test"],"mappings":"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"} \ No newline at end of file diff --git a/js/src/spbc-admin.js b/js/src/spbc-admin.js index 8350c28c6..3b7d3c44c 100644 --- a/js/src/spbc-admin.js +++ b/js/src/spbc-admin.js @@ -42,7 +42,6 @@ function spbcCheckGoogleCode() { if (submitButton.length > 0) { submitButton.click(); } - } else { alert(result.data); } From 87e706fd8b1c4e9bcc3ea4a4bf678ac0d89d29f6 Mon Sep 17 00:00:00 2001 From: AntonV1211 Date: Thu, 6 Feb 2025 19:06:27 +0700 Subject: [PATCH 3/3] Rebuild js --- js/spbc-admin.min.js.map | 2 +- js/spbc-common.min.js.map | 2 +- js/spbc-cookie.min.js.map | 2 +- js/spbc-dashboard-widget.min.js.map | 2 +- js/spbc-modal.min.js.map | 2 +- js/spbc-scanner-plugin.min.js.map | 2 +- js/spbc-settings.min.js.map | 2 +- js/spbc-settings_tab--backups.min.js.map | 2 +- js/spbc-settings_tab--fswatcher.min.js.map | 2 +- js/spbc-settings_tab--scanner.min.js.map | 2 +- js/spbc-settings_tab--security_log.min.js.map | 2 +- js/spbc-settings_tab--settings_general.min.js.map | 2 +- js/spbc-settings_tab--summary.min.js.map | 2 +- js/spbc-settings_tab--traffic_control.min.js.map | 2 +- js/spbc-table.min.js.map | 2 +- js/spbc-upload.min.js.map | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/js/spbc-admin.min.js.map b/js/spbc-admin.min.js.map index b455d64e8..c612507d4 100644 --- a/js/spbc-admin.min.js.map +++ b/js/spbc-admin.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-admin.min.js","sources":["spbc-admin.js"],"sourcesContent":["/**\r\n * Get Google Qr Code\r\n *\r\n * @return {object}\r\n */\r\nfunction spbcGetGoogleQrCode() {\r\n let data = {};\r\n let res = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_get_google_qr_code';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n res = result;\r\n },\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Check Google Code\r\n */\r\nfunction spbcCheckGoogleCode() {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_check_google_code';\r\n data.code = jQuery('#spbct-google-qr-code input').val();\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n jQuery('#spbct-google-qr-code').dialog( 'close' );\r\n const submitButton = jQuery('form#your-profile input#submit');\r\n if (submitButton.length > 0) {\r\n submitButton.click();\r\n }\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Disable Google 2fa\r\n *\r\n * @param {string} element\r\n */\r\nfunction spbcDisableG2fa( element ) {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_disable_google_2fa';\r\n data.user_id = jQuery(element).data('user-id');\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n document.location.reload();\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability\r\n *\r\n * @param {array} list\r\n * @param {string} type\r\n */\r\nfunction spbcCheckVulnerability(list, type = 'install') {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = type === 'install' ? 'spbc_check_vulnerability_install' : 'spbc_check_vulnerability_list';\r\n data.list = list;\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n if (type === 'install') {\r\n spbcCheckVulnerabilityInstallRender(result.list, result.msg);\r\n }\r\n if (type === 'list') {\r\n spbcCheckVulnerabilityListRender(result.list);\r\n }\r\n } else {\r\n console.log(result);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability List Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityListRender(list) {\r\n let card;\r\n let badge;\r\n\r\n list.forEach((el) => {\r\n badge = document.createElement('div');\r\n badge.classList.add('notice', 'notice-error', 'error-message', 'spbc-vulnerable-notice');\r\n badge.innerHTML = el.msg;\r\n card = document.querySelector('.themes .theme[data-slug=' + el.slug + ']');\r\n if (card) {\r\n card.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Check Vulnerability Install Render\r\n *\r\n * @param {object} list\r\n * @param {string} msg\r\n */\r\nfunction spbcCheckVulnerabilityInstallRender(list, msg) {\r\n let card;\r\n\r\n let badge = document.createElement('div');\r\n badge.classList.add('notice');\r\n badge.innerHTML = '

' + msg + '

';\r\n\r\n list.forEach((el) => {\r\n card = document.querySelector('.theme-id-container .theme-actions a[data-slug=' + el + ']');\r\n if (card) {\r\n card.parentNode.parentNode.parentNode.appendChild(badge);\r\n }\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n if (window.location.href.indexOf('themes.php') > -1 && spbcSettings.vulnerabilityShowList) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n let version;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.themes .theme[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n version = el.querySelector('img').src ?\r\n el.querySelector('img').src.match(/ver=([\\d\\.]+)/)[1] :\r\n null;\r\n slugs.push({'slug': el.dataset.slug, 'version': version});\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs, 'list');\r\n }\r\n }, 500);\r\n }\r\n\r\n if (window.location.href.indexOf('theme-install.php') > -1 && spbcSettings.vulnerabilityShowInstall) {\r\n let slugsState = [];\r\n let slugs = [];\r\n let slugsNodes;\r\n\r\n setInterval(function() {\r\n slugsNodes = document.querySelectorAll('.theme-id-container .theme-actions a[data-slug]');\r\n\r\n if (slugsNodes.length > 0) {\r\n slugs = [];\r\n slugsNodes.forEach(function(el) {\r\n slugs.push(el.dataset.slug);\r\n });\r\n }\r\n\r\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\r\n slugsState = slugs;\r\n spbcCheckVulnerability(slugs);\r\n }\r\n }, 500);\r\n }\r\n\r\n // Auto update banner close handler\r\n jQuery('.spbc_update_notice').on('click', 'button', function() {\r\n spbcSetCookie('spbc_update_banner_closed', 1, 86400 * 30);\r\n });\r\n\r\n // Enable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-enable', function(e) {\r\n e.preventDefault();\r\n let spbcGoogleQrCode = spbcGetGoogleQrCode();\r\n\r\n if ( spbcGoogleQrCode.success ) {\r\n let qrCodeDiv = jQuery('#spbct-google-qr-code-img');\r\n qrCodeDiv.html(spbcGoogleQrCode.data.img + '

' + spbcGoogleQrCode.data.code + '

');\r\n jQuery('#spbct-google-qr-code input').val('');\r\n jQuery('#spbct-google-qr-code').dialog({\r\n modal: true,\r\n title: 'Google authenticator activation',\r\n buttons: {\r\n Cancel: function() {\r\n jQuery( this ).dialog( 'close' );\r\n },\r\n Ok: function() {\r\n spbcCheckGoogleCode();\r\n },\r\n },\r\n draggable: false,\r\n resizable: false,\r\n });\r\n } else {\r\n alert(spbcGetGoogleQrCode.data);\r\n }\r\n });\r\n\r\n // Disable G2FA from user profile page\r\n jQuery(document).on('click', '#spbc-g2fa-disable', function(e) {\r\n e.preventDefault();\r\n if ( confirm( 'Are you sure?' ) ) {\r\n spbcDisableG2fa( this );\r\n }\r\n });\r\n\r\n let refreshUserOnlineCounter = function( result, data, params ) {\r\n setTimeout(function() {\r\n if ( result !== null ) {\r\n jQuery('.spbc-admin_bar--user_counter').html(result.count);\r\n if ( result.count <= 3 ) {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').show();\r\n jQuery('.spbc-admin_bar--online_admins').html(result.users.join(', '));\r\n } else {\r\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').hide();\r\n }\r\n }\r\n spbcSendAJAXRequest( data, params );\r\n }, 15000 );\r\n };\r\n\r\n if ( +spbcSettings.admin_bar__admins_online_counter === 1 ) {\r\n refreshUserOnlineCounter(null, {action: 'spbc_get_authorized_admins'}, {callback: refreshUserOnlineCounter});\r\n }\r\n\r\n // Dismiss admin banner\r\n spbcHandleBannersDismissing();\r\n\r\n if (+spbcSettings.needToWhitelist === 1) {\r\n spbcSendAJAXRequest( {'action': 'spbc_private_list_add'}, {'callback': null} );\r\n }\r\n\r\n if ( +spbcSettings.critical > 0) {\r\n let ringContainer = document.createElement('div');\r\n ringContainer.className = 'spbc_ring-container';\r\n ringContainer.style.top = '0px';\r\n ringContainer.style.right = '70px';\r\n let ringRing = document.createElement('div');\r\n ringRing.className = 'spbc_ringring';\r\n let circle = document.createElement('div');\r\n circle.className = 'spbc_circle';\r\n\r\n ringContainer.appendChild(ringRing);\r\n ringContainer.appendChild(circle);\r\n\r\n let settings = document.querySelector('#menu-settings');\r\n if (settings) {\r\n settings.appendChild(ringContainer);\r\n }\r\n }\r\n\r\n jQuery(document).on('keyup', '#spbc_key', function(e) {\r\n e.preventDefault();\r\n let value = jQuery('#spbc_key').val();\r\n if (/^[a-zA-Z0-9]+$/.test(value) && value.length > 8) {\r\n jQuery('#spbc-key-manually-link').hide();\r\n jQuery('#spbc_setting_get_key_auto').hide();\r\n jQuery('#spbc_get_key_or_text').hide();\r\n } else {\r\n jQuery('#spbc-key-manually-link').show();\r\n jQuery('#spbc_setting_get_key_auto').show();\r\n jQuery('#spbc_get_key_or_text').show();\r\n }\r\n });\r\n});\r\n\r\n/**\r\n * Summary Show CDN Checker Table\r\n */\r\nfunction spbcSummaryShowCDNCheckerTable() {/* eslint-disable-line no-unused-vars */\r\n event.preventDefault();\r\n let table = document.getElementById('spbc_stats_cdn_checker_table');\r\n if (typeof (table) !== 'undefined') {\r\n if (table.style.display === 'block') {\r\n table.style.display = 'none';\r\n } else {\r\n table.style.display = 'block';\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Dismiss function for banners.\r\n */\r\nfunction spbcHandleBannersDismissing() {\r\n let body = jQuery('body');\r\n body.on('click', '.spbct-notice-dismiss-link', function(e) {\r\n jQuery(e.target).siblings('.notice-dismiss').click();\r\n });\r\n body.on('click', '.spbc-notice .notice-dismiss', function(e) {\r\n const bannerId = jQuery(e.target).parent('.notice').attr('id');\r\n if (bannerId) {\r\n // call ajax to dismiss banner anyway\r\n // todo There is no case when further API call for notice_review is unsuccessful,\r\n // todo but it should be handled in the future\r\n spbcSendAJAXRequest({'action': 'spbc_dismiss_banner', 'banner_id': bannerId}, {});\r\n\r\n // check if there is a postNoticeText to show after dismissing the notice\r\n if (\r\n typeof spbcSettings !== 'undefined' &&\r\n spbcSettings.hasOwnProperty('spbctNoticeDismissSuccess')\r\n ) {\r\n // get afterDismissingNotices from localized settings\r\n let afterDismissingNotices = spbcSettings.spbctNoticeDismissSuccess;\r\n // default postNoticeText\r\n let postNoticeText = '';\r\n // default notice level\r\n let noticeLevel = '';\r\n if (typeof afterDismissingNotices === 'string') {\r\n // try to parse JSON\r\n try {\r\n afterDismissingNotices = JSON.parse(afterDismissingNotices);\r\n } catch (e) {\r\n afterDismissingNotices = [];\r\n }\r\n // get postNoticeText and noticeLevel according to bannerName\r\n for (const afterDismissingNotice of afterDismissingNotices) {\r\n if (\r\n afterDismissingNotice.hasOwnProperty('bannerName') &&\r\n afterDismissingNotice.hasOwnProperty('postNoticeText')\r\n ) {\r\n let bannerName = afterDismissingNotice.bannerName;\r\n // if banner name is in the bannerId, show the postNoticeText\r\n if (bannerId.indexOf(bannerName) !== -1) {\r\n postNoticeText = afterDismissingNotice.postNoticeText;\r\n }\r\n // if noticeLevel is set, use it\r\n if (afterDismissingNotice.hasOwnProperty('noticeLevel')) {\r\n noticeLevel = afterDismissingNotice.noticeLevel;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // if postNoticeText is set, show it\r\n if (postNoticeText !== '') {\r\n const noticeClassList = 'notice ' + noticeLevel + ' is-dismissible';\r\n let elem = '
' +\r\n '

' +\r\n postNoticeText +\r\n '

';\r\n jQuery(e.target)\r\n .parent('.notice')\r\n .after(elem);\r\n setTimeout(function() {\r\n jQuery('#spbct-notice-dismiss-success').fadeOut();\r\n }, 5000);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\n/**\r\n * Highlights the critical files notice if the URL contains specific parameters.\r\n *\r\n * @param {boolean} [isBannerCall=false] - Indicates if the function is called from a banner.\r\n *\r\n */\r\nfunction spbcHighlightCriticalFilesNotice(isBannerCall = false) { // eslint-disable-line no-unused-vars\r\n // Check if the URL contains the parameters to highlight the notice\r\n let needToHighlightNotice = window.location.href.indexOf('spbc_tab=scanner&highlight_critical_files=1') !== -1;\r\n let redirectConditionIsOK = window.location.href.indexOf('spbc_tab=scanner') === -1;\r\n\r\n // Redirect to the scanner tab if called from a banner and the condition is met\r\n if (isBannerCall && redirectConditionIsOK) {\r\n window.location.href = 'options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1';\r\n return;\r\n }\r\n\r\n // If the notice needs to be highlighted\r\n if (needToHighlightNotice || isBannerCall) {\r\n let criticalFilesNotice = null;\r\n let criticalFilesNotices = document.querySelectorAll('#notice_id_found_critical_files');\r\n\r\n // Find the critical files notice within the scanner tab\r\n if (criticalFilesNotices.length > 0) {\r\n criticalFilesNotices.forEach((notice) => {\r\n if (criticalFilesNotice == null) {\r\n if (notice.closest('#spbc_tab-scanner') !== null) {\r\n criticalFilesNotice = notice;\r\n }\r\n }\r\n });\r\n }\r\n // Scroll to the notice and highlight it with a blinking effect\r\n if (criticalFilesNotice !== null) {\r\n criticalFilesNotice.scrollIntoView({behavior: 'smooth', block: 'start'});\r\n if (!criticalFilesNotice.hasOwnProperty('highlighted')) {\r\n let switcher = false;\r\n setInterval(() => {\r\n switcher = !switcher;\r\n if (switcher) {\r\n criticalFilesNotice.classList.remove('notice-warning');\r\n criticalFilesNotice.classList.add('notice-error');\r\n criticalFilesNotice.highlighted = true;\r\n } else {\r\n criticalFilesNotice.classList.remove('notice-error');\r\n criticalFilesNotice.classList.add('notice-warning');\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n // Expand the critical files table if it exits and is collapsed\r\n let criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n } else {\r\n // Check periodically if the table is loaded and expand it\r\n const tabLoadingCheckInterval = setInterval(() => {\r\n criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\r\n if (criticalFileTable !== null) {\r\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\r\n criticalFileTable.click();\r\n }\r\n clearInterval(tabLoadingCheckInterval);\r\n }\r\n }, 150);\r\n }\r\n }\r\n}\r\n"],"names":["spbcGetGoogleQrCode","let","data","res","security","spbcSettings","ajax_nonce","action","jQuery","ajax","type","async","url","ajaxurl","success","result","spbcCheckGoogleCode","code","val","submitButton","dialog","length","click","alert","spbcDisableG2fa","element","user_id","document","location","reload","spbcCheckVulnerability","list","spbcCheckVulnerabilityInstallRender","msg","spbcCheckVulnerabilityListRender","console","log","card","badge","forEach","createElement","classList","add","innerHTML","el","querySelector","slug","appendChild","parentNode","spbcSummaryShowCDNCheckerTable","event","preventDefault","table","getElementById","style","display","spbcHandleBannersDismissing","body","on","e","target","siblings","bannerName","elem","bannerId","parent","attr","spbcSendAJAXRequest","banner_id","hasOwnProperty","afterDismissingNotices","spbctNoticeDismissSuccess","postNoticeText","noticeLevel","JSON","parse","afterDismissingNotice","indexOf","after","setTimeout","fadeOut","spbcHighlightCriticalFilesNotice","isBannerCall","needToHighlightNotice","window","href","redirectConditionIsOK","criticalFilesNotice","criticalFilesNotices","querySelectorAll","notice","closest","scrollIntoView","behavior","block","switcher","setInterval","remove","highlighted","criticalFileTable","contains","tabLoadingCheckInterval","clearInterval","ready","vulnerabilityShowList","slugsState","slugs","slugsNodes","version","src","match","push","dataset","stringify","vulnerabilityShowInstall","spbcSetCookie","spbcGoogleQrCode","html","img","modal","title","buttons","Cancel","this","Ok","draggable","resizable","confirm","refreshUserOnlineCounter","params","count","show","users","join","hide","ringContainer","circle","settings","admin_bar__admins_online_counter","callback","needToWhitelist","critical","className","top","right","ringRing","value","test"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-admin.min.js","sources":["spbc-admin.js"],"sourcesContent":["/**\n * Get Google Qr Code\n *\n * @return {object}\n */\nfunction spbcGetGoogleQrCode() {\n let data = {};\n let res = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_get_google_qr_code';\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n res = result;\n },\n });\n return res;\n}\n\n/**\n * Check Google Code\n */\nfunction spbcCheckGoogleCode() {\n let data = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_check_google_code';\n data.code = jQuery('#spbct-google-qr-code input').val();\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n jQuery('#spbct-google-qr-code').dialog( 'close' );\n const submitButton = jQuery('form#your-profile input#submit');\n if (submitButton.length > 0) {\n submitButton.click();\n }\n } else {\n alert(result.data);\n }\n },\n });\n}\n\n/**\n * Disable Google 2fa\n *\n * @param {string} element\n */\nfunction spbcDisableG2fa( element ) {\n let data = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_disable_google_2fa';\n data.user_id = jQuery(element).data('user-id');\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n document.location.reload();\n } else {\n alert(result.data);\n }\n },\n });\n}\n\n/**\n * Check Vulnerability\n *\n * @param {array} list\n * @param {string} type\n */\nfunction spbcCheckVulnerability(list, type = 'install') {\n let data = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = type === 'install' ? 'spbc_check_vulnerability_install' : 'spbc_check_vulnerability_list';\n data.list = list;\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n if (type === 'install') {\n spbcCheckVulnerabilityInstallRender(result.list, result.msg);\n }\n if (type === 'list') {\n spbcCheckVulnerabilityListRender(result.list);\n }\n } else {\n console.log(result);\n }\n },\n });\n}\n\n/**\n * Check Vulnerability List Render\n *\n * @param {object} list\n * @param {string} msg\n */\nfunction spbcCheckVulnerabilityListRender(list) {\n let card;\n let badge;\n\n list.forEach((el) => {\n badge = document.createElement('div');\n badge.classList.add('notice', 'notice-error', 'error-message', 'spbc-vulnerable-notice');\n badge.innerHTML = el.msg;\n card = document.querySelector('.themes .theme[data-slug=' + el.slug + ']');\n if (card) {\n card.appendChild(badge);\n }\n });\n}\n\n/**\n * Check Vulnerability Install Render\n *\n * @param {object} list\n * @param {string} msg\n */\nfunction spbcCheckVulnerabilityInstallRender(list, msg) {\n let card;\n\n let badge = document.createElement('div');\n badge.classList.add('notice');\n badge.innerHTML = '

' + msg + '

';\n\n list.forEach((el) => {\n card = document.querySelector('.theme-id-container .theme-actions a[data-slug=' + el + ']');\n if (card) {\n card.parentNode.parentNode.parentNode.appendChild(badge);\n }\n });\n}\n\njQuery(document).ready(function() {\n if (window.location.href.indexOf('themes.php') > -1 && spbcSettings.vulnerabilityShowList) {\n let slugsState = [];\n let slugs = [];\n let slugsNodes;\n let version;\n\n setInterval(function() {\n slugsNodes = document.querySelectorAll('.themes .theme[data-slug]');\n\n if (slugsNodes.length > 0) {\n slugs = [];\n slugsNodes.forEach(function(el) {\n version = el.querySelector('img').src ?\n el.querySelector('img').src.match(/ver=([\\d\\.]+)/)[1] :\n null;\n slugs.push({'slug': el.dataset.slug, 'version': version});\n });\n }\n\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\n slugsState = slugs;\n spbcCheckVulnerability(slugs, 'list');\n }\n }, 500);\n }\n\n if (window.location.href.indexOf('theme-install.php') > -1 && spbcSettings.vulnerabilityShowInstall) {\n let slugsState = [];\n let slugs = [];\n let slugsNodes;\n\n setInterval(function() {\n slugsNodes = document.querySelectorAll('.theme-id-container .theme-actions a[data-slug]');\n\n if (slugsNodes.length > 0) {\n slugs = [];\n slugsNodes.forEach(function(el) {\n slugs.push(el.dataset.slug);\n });\n }\n\n if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\n slugsState = slugs;\n spbcCheckVulnerability(slugs);\n }\n }, 500);\n }\n\n // Auto update banner close handler\n jQuery('.spbc_update_notice').on('click', 'button', function() {\n spbcSetCookie('spbc_update_banner_closed', 1, 86400 * 30);\n });\n\n // Enable G2FA from user profile page\n jQuery(document).on('click', '#spbc-g2fa-enable', function(e) {\n e.preventDefault();\n let spbcGoogleQrCode = spbcGetGoogleQrCode();\n\n if ( spbcGoogleQrCode.success ) {\n let qrCodeDiv = jQuery('#spbct-google-qr-code-img');\n qrCodeDiv.html(spbcGoogleQrCode.data.img + '

' + spbcGoogleQrCode.data.code + '

');\n jQuery('#spbct-google-qr-code input').val('');\n jQuery('#spbct-google-qr-code').dialog({\n modal: true,\n title: 'Google authenticator activation',\n buttons: {\n Cancel: function() {\n jQuery( this ).dialog( 'close' );\n },\n Ok: function() {\n spbcCheckGoogleCode();\n },\n },\n draggable: false,\n resizable: false,\n });\n } else {\n alert(spbcGetGoogleQrCode.data);\n }\n });\n\n // Disable G2FA from user profile page\n jQuery(document).on('click', '#spbc-g2fa-disable', function(e) {\n e.preventDefault();\n if ( confirm( 'Are you sure?' ) ) {\n spbcDisableG2fa( this );\n }\n });\n\n let refreshUserOnlineCounter = function( result, data, params ) {\n setTimeout(function() {\n if ( result !== null ) {\n jQuery('.spbc-admin_bar--user_counter').html(result.count);\n if ( result.count <= 3 ) {\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').show();\n jQuery('.spbc-admin_bar--online_admins').html(result.users.join(', '));\n } else {\n jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').hide();\n }\n }\n spbcSendAJAXRequest( data, params );\n }, 15000 );\n };\n\n if ( +spbcSettings.admin_bar__admins_online_counter === 1 ) {\n refreshUserOnlineCounter(null, {action: 'spbc_get_authorized_admins'}, {callback: refreshUserOnlineCounter});\n }\n\n // Dismiss admin banner\n spbcHandleBannersDismissing();\n\n if (+spbcSettings.needToWhitelist === 1) {\n spbcSendAJAXRequest( {'action': 'spbc_private_list_add'}, {'callback': null} );\n }\n\n if ( +spbcSettings.critical > 0) {\n let ringContainer = document.createElement('div');\n ringContainer.className = 'spbc_ring-container';\n ringContainer.style.top = '0px';\n ringContainer.style.right = '70px';\n let ringRing = document.createElement('div');\n ringRing.className = 'spbc_ringring';\n let circle = document.createElement('div');\n circle.className = 'spbc_circle';\n\n ringContainer.appendChild(ringRing);\n ringContainer.appendChild(circle);\n\n let settings = document.querySelector('#menu-settings');\n if (settings) {\n settings.appendChild(ringContainer);\n }\n }\n\n jQuery(document).on('keyup', '#spbc_key', function(e) {\n e.preventDefault();\n let value = jQuery('#spbc_key').val();\n if (/^[a-zA-Z0-9]+$/.test(value) && value.length > 8) {\n jQuery('#spbc-key-manually-link').hide();\n jQuery('#spbc_setting_get_key_auto').hide();\n jQuery('#spbc_get_key_or_text').hide();\n } else {\n jQuery('#spbc-key-manually-link').show();\n jQuery('#spbc_setting_get_key_auto').show();\n jQuery('#spbc_get_key_or_text').show();\n }\n });\n});\n\n/**\n * Summary Show CDN Checker Table\n */\nfunction spbcSummaryShowCDNCheckerTable() {/* eslint-disable-line no-unused-vars */\n event.preventDefault();\n let table = document.getElementById('spbc_stats_cdn_checker_table');\n if (typeof (table) !== 'undefined') {\n if (table.style.display === 'block') {\n table.style.display = 'none';\n } else {\n table.style.display = 'block';\n }\n }\n}\n\n/**\n * Dismiss function for banners.\n */\nfunction spbcHandleBannersDismissing() {\n let body = jQuery('body');\n body.on('click', '.spbct-notice-dismiss-link', function(e) {\n jQuery(e.target).siblings('.notice-dismiss').click();\n });\n body.on('click', '.spbc-notice .notice-dismiss', function(e) {\n const bannerId = jQuery(e.target).parent('.notice').attr('id');\n if (bannerId) {\n // call ajax to dismiss banner anyway\n // todo There is no case when further API call for notice_review is unsuccessful,\n // todo but it should be handled in the future\n spbcSendAJAXRequest({'action': 'spbc_dismiss_banner', 'banner_id': bannerId}, {});\n\n // check if there is a postNoticeText to show after dismissing the notice\n if (\n typeof spbcSettings !== 'undefined' &&\n spbcSettings.hasOwnProperty('spbctNoticeDismissSuccess')\n ) {\n // get afterDismissingNotices from localized settings\n let afterDismissingNotices = spbcSettings.spbctNoticeDismissSuccess;\n // default postNoticeText\n let postNoticeText = '';\n // default notice level\n let noticeLevel = '';\n if (typeof afterDismissingNotices === 'string') {\n // try to parse JSON\n try {\n afterDismissingNotices = JSON.parse(afterDismissingNotices);\n } catch (e) {\n afterDismissingNotices = [];\n }\n // get postNoticeText and noticeLevel according to bannerName\n for (const afterDismissingNotice of afterDismissingNotices) {\n if (\n afterDismissingNotice.hasOwnProperty('bannerName') &&\n afterDismissingNotice.hasOwnProperty('postNoticeText')\n ) {\n let bannerName = afterDismissingNotice.bannerName;\n // if banner name is in the bannerId, show the postNoticeText\n if (bannerId.indexOf(bannerName) !== -1) {\n postNoticeText = afterDismissingNotice.postNoticeText;\n }\n // if noticeLevel is set, use it\n if (afterDismissingNotice.hasOwnProperty('noticeLevel')) {\n noticeLevel = afterDismissingNotice.noticeLevel;\n }\n }\n }\n }\n\n // if postNoticeText is set, show it\n if (postNoticeText !== '') {\n const noticeClassList = 'notice ' + noticeLevel + ' is-dismissible';\n let elem = '
' +\n '

' +\n postNoticeText +\n '

';\n jQuery(e.target)\n .parent('.notice')\n .after(elem);\n setTimeout(function() {\n jQuery('#spbct-notice-dismiss-success').fadeOut();\n }, 5000);\n }\n }\n }\n });\n}\n\n// eslint-disable-next-line no-unused-vars\n/**\n * Highlights the critical files notice if the URL contains specific parameters.\n *\n * @param {boolean} [isBannerCall=false] - Indicates if the function is called from a banner.\n *\n */\nfunction spbcHighlightCriticalFilesNotice(isBannerCall = false) { // eslint-disable-line no-unused-vars\n // Check if the URL contains the parameters to highlight the notice\n let needToHighlightNotice = window.location.href.indexOf('spbc_tab=scanner&highlight_critical_files=1') !== -1;\n let redirectConditionIsOK = window.location.href.indexOf('spbc_tab=scanner') === -1;\n\n // Redirect to the scanner tab if called from a banner and the condition is met\n if (isBannerCall && redirectConditionIsOK) {\n window.location.href = 'options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1';\n return;\n }\n\n // If the notice needs to be highlighted\n if (needToHighlightNotice || isBannerCall) {\n let criticalFilesNotice = null;\n let criticalFilesNotices = document.querySelectorAll('#notice_id_found_critical_files');\n\n // Find the critical files notice within the scanner tab\n if (criticalFilesNotices.length > 0) {\n criticalFilesNotices.forEach((notice) => {\n if (criticalFilesNotice == null) {\n if (notice.closest('#spbc_tab-scanner') !== null) {\n criticalFilesNotice = notice;\n }\n }\n });\n }\n // Scroll to the notice and highlight it with a blinking effect\n if (criticalFilesNotice !== null) {\n criticalFilesNotice.scrollIntoView({behavior: 'smooth', block: 'start'});\n if (!criticalFilesNotice.hasOwnProperty('highlighted')) {\n let switcher = false;\n setInterval(() => {\n switcher = !switcher;\n if (switcher) {\n criticalFilesNotice.classList.remove('notice-warning');\n criticalFilesNotice.classList.add('notice-error');\n criticalFilesNotice.highlighted = true;\n } else {\n criticalFilesNotice.classList.remove('notice-error');\n criticalFilesNotice.classList.add('notice-warning');\n }\n }, 1000);\n }\n }\n\n // Expand the critical files table if it exits and is collapsed\n let criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\n if (criticalFileTable !== null) {\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\n criticalFileTable.click();\n }\n } else {\n // Check periodically if the table is loaded and expand it\n const tabLoadingCheckInterval = setInterval(() => {\n criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\n if (criticalFileTable !== null) {\n if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\n criticalFileTable.click();\n }\n clearInterval(tabLoadingCheckInterval);\n }\n }, 150);\n }\n }\n}\n"],"names":["spbcGetGoogleQrCode","let","data","res","security","spbcSettings","ajax_nonce","action","jQuery","ajax","type","async","url","ajaxurl","success","result","spbcCheckGoogleCode","code","val","submitButton","dialog","length","click","alert","spbcDisableG2fa","element","user_id","document","location","reload","spbcCheckVulnerability","list","spbcCheckVulnerabilityInstallRender","msg","spbcCheckVulnerabilityListRender","console","log","card","badge","forEach","createElement","classList","add","innerHTML","el","querySelector","slug","appendChild","parentNode","spbcSummaryShowCDNCheckerTable","event","preventDefault","table","getElementById","style","display","spbcHandleBannersDismissing","body","on","e","target","siblings","bannerName","elem","bannerId","parent","attr","spbcSendAJAXRequest","banner_id","hasOwnProperty","afterDismissingNotices","spbctNoticeDismissSuccess","postNoticeText","noticeLevel","JSON","parse","afterDismissingNotice","indexOf","after","setTimeout","fadeOut","spbcHighlightCriticalFilesNotice","isBannerCall","needToHighlightNotice","window","href","redirectConditionIsOK","criticalFilesNotice","criticalFilesNotices","querySelectorAll","notice","closest","scrollIntoView","behavior","block","switcher","setInterval","remove","highlighted","criticalFileTable","contains","tabLoadingCheckInterval","clearInterval","ready","vulnerabilityShowList","slugsState","slugs","slugsNodes","version","src","match","push","dataset","stringify","vulnerabilityShowInstall","spbcSetCookie","spbcGoogleQrCode","html","img","modal","title","buttons","Cancel","this","Ok","draggable","resizable","confirm","refreshUserOnlineCounter","params","count","show","users","join","hide","ringContainer","circle","settings","admin_bar__admins_online_counter","callback","needToWhitelist","critical","className","top","right","ringRing","value","test"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-common.min.js.map b/js/spbc-common.min.js.map index c208bcbcd..aecc7a7e3 100644 --- a/js/spbc-common.min.js.map +++ b/js/spbc-common.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-common.min.js","sources":["spbc-common.js"],"sourcesContent":["/**\r\n * Timestamp\r\n *\r\n * @return {number}\r\n */\r\nfunction spbcTimestamp() {/* eslint-disable-line no-unused-vars */\r\n return Math.floor(+new Date() / 1000);\r\n}\r\n\r\n/**\r\n * Hightlights element\r\n *\r\n * @param {number|string} id\r\n * @param {number} times\r\n */\r\nfunction spbcHighlightElement(id, times) {/* eslint-disable-line no-unused-vars */\r\n times = times-1 || 0;\r\n jQuery('html, body').animate({scrollTop: jQuery(jQuery('#'+id)).offset().top - 100}, 'slow');\r\n jQuery('#'+id).addClass('spbc_highlighted');\r\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 1.0)'}, 400, 'linear', function() {\r\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 0.0)'}, 400, 'linear', function() {\r\n if (times>0) {\r\n spbcHighlightElement(id, times);\r\n } else {\r\n jQuery('#'+id).removeClass('spbc_highlighted');\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Send AJAX Request\r\n *\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcSendAJAXRequest(data, params, obj) {/* eslint-disable-line no-unused-vars */\r\n let dataType = params.notJson ? 'text' : 'json';\r\n\r\n // Default params\r\n let button = params.button || null;\r\n let spinner = params.spinner || null;\r\n let progressbar = params.progressbar || null;\r\n let callback = params.callback || null;\r\n let notJson = params.notJson || null;\r\n let timeout = params.timeout || 15000;\r\n obj = obj || null;\r\n let context = params.context || this;\r\n\r\n // Button and spinner\r\n if (button) {\r\n button.setAttribute('disabled', 'disabled'); button.style.cursor = 'not-allowed';\r\n }\r\n if (spinner) {\r\n if (Array.isArray(spinner)) {\r\n spinner.forEach(function(el) {\r\n jQuery(el).css('display', 'inline');\r\n });\r\n } else {\r\n jQuery(spinner).css('display', 'inline');\r\n }\r\n }\r\n\r\n // Adding security code\r\n data.security = spbcSettings.ajax_nonce;\r\n data.no_cache = Math.random();\r\n\r\n // Using passed successCallback() or default\r\n let success = params.success || function(result) {\r\n if (button) {\r\n button.removeAttribute('disabled');\r\n button.style.cursor = 'pointer';\r\n }\r\n\r\n if (spinner) {\r\n if (Array.isArray(spinner)) {\r\n spinner.forEach(function(el) {\r\n jQuery(el).css('display', 'none');\r\n });\r\n } else {\r\n jQuery(spinner).css('display', 'none');\r\n }\r\n }\r\n\r\n if (!notJson && typeof result !== 'object') {\r\n result = JSON.parse(result);\r\n }\r\n\r\n if (result.error) {\r\n setTimeout(function() {\r\n if (progressbar) progressbar.fadeOut('slow');\r\n }, 1000);\r\n let errorComment = typeof result.error_comment !== 'undefined' ? result.error_comment : null;\r\n const hideSupportLink = typeof result.hide_support_link !== 'undefined';\r\n errorOutput( result.error, errorComment, hideSupportLink );\r\n jQuery('.tbl-preloader--in_button').css('display', 'none');\r\n } else if (callback) {\r\n callback(result, data, params, obj);\r\n }\r\n };\r\n\r\n // Using passed successCallback() or default\r\n let error = params.error || function(jqXHR, textStatus, errorThrown) {\r\n if (button) {\r\n button.removeAttribute('disabled');\r\n button.style.cursor = 'pointer';\r\n }\r\n if (spinner) {\r\n if (Array.isArray(spinner)) {\r\n spinner.forEach(function(el) {\r\n jQuery(el).css('display', 'none');\r\n });\r\n } else {\r\n jQuery(spinner).css('display', 'none');\r\n }\r\n }\r\n\r\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\r\n console.log( textStatus );\r\n console.log( errorThrown );\r\n console.log( jqXHR );\r\n\r\n errorOutput( textStatus );\r\n };\r\n\r\n var errorOutput = params.errorOutput || function( msg ) {};/* eslint-disable-line no-var */\r\n\r\n jQuery.ajax({\r\n context: context,\r\n type: 'POST',\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n dataType: dataType,\r\n success: success,\r\n error: error,\r\n timeout: timeout,\r\n });\r\n}\r\n"],"names":["spbcTimestamp","Math","floor","Date","spbcHighlightElement","id","times","jQuery","animate","scrollTop","offset","top","addClass","outlineColor","removeClass","spbcSendAJAXRequest","data","params","obj","let","dataType","notJson","button","spinner","progressbar","callback","timeout","context","this","success","setAttribute","style","cursor","Array","isArray","forEach","el","css","security","spbcSettings","ajax_nonce","no_cache","random","result","errorComment","hideSupportLink","removeAttribute","JSON","parse","error","setTimeout","fadeOut","error_comment","hide_support_link","errorOutput","msg","ajax","type","url","ajaxurl","jqXHR","textStatus","errorThrown","console","log"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-common.min.js","sources":["spbc-common.js"],"sourcesContent":["/**\n * Timestamp\n *\n * @return {number}\n */\nfunction spbcTimestamp() {/* eslint-disable-line no-unused-vars */\n return Math.floor(+new Date() / 1000);\n}\n\n/**\n * Hightlights element\n *\n * @param {number|string} id\n * @param {number} times\n */\nfunction spbcHighlightElement(id, times) {/* eslint-disable-line no-unused-vars */\n times = times-1 || 0;\n jQuery('html, body').animate({scrollTop: jQuery(jQuery('#'+id)).offset().top - 100}, 'slow');\n jQuery('#'+id).addClass('spbc_highlighted');\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 1.0)'}, 400, 'linear', function() {\n jQuery('#'+id).animate({outlineColor: 'rgba(255, 0, 0, 0.0)'}, 400, 'linear', function() {\n if (times>0) {\n spbcHighlightElement(id, times);\n } else {\n jQuery('#'+id).removeClass('spbc_highlighted');\n }\n });\n });\n}\n\n/**\n * Send AJAX Request\n *\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcSendAJAXRequest(data, params, obj) {/* eslint-disable-line no-unused-vars */\n let dataType = params.notJson ? 'text' : 'json';\n\n // Default params\n let button = params.button || null;\n let spinner = params.spinner || null;\n let progressbar = params.progressbar || null;\n let callback = params.callback || null;\n let notJson = params.notJson || null;\n let timeout = params.timeout || 15000;\n obj = obj || null;\n let context = params.context || this;\n\n // Button and spinner\n if (button) {\n button.setAttribute('disabled', 'disabled'); button.style.cursor = 'not-allowed';\n }\n if (spinner) {\n if (Array.isArray(spinner)) {\n spinner.forEach(function(el) {\n jQuery(el).css('display', 'inline');\n });\n } else {\n jQuery(spinner).css('display', 'inline');\n }\n }\n\n // Adding security code\n data.security = spbcSettings.ajax_nonce;\n data.no_cache = Math.random();\n\n // Using passed successCallback() or default\n let success = params.success || function(result) {\n if (button) {\n button.removeAttribute('disabled');\n button.style.cursor = 'pointer';\n }\n\n if (spinner) {\n if (Array.isArray(spinner)) {\n spinner.forEach(function(el) {\n jQuery(el).css('display', 'none');\n });\n } else {\n jQuery(spinner).css('display', 'none');\n }\n }\n\n if (!notJson && typeof result !== 'object') {\n result = JSON.parse(result);\n }\n\n if (result.error) {\n setTimeout(function() {\n if (progressbar) progressbar.fadeOut('slow');\n }, 1000);\n let errorComment = typeof result.error_comment !== 'undefined' ? result.error_comment : null;\n const hideSupportLink = typeof result.hide_support_link !== 'undefined';\n errorOutput( result.error, errorComment, hideSupportLink );\n jQuery('.tbl-preloader--in_button').css('display', 'none');\n } else if (callback) {\n callback(result, data, params, obj);\n }\n };\n\n // Using passed successCallback() or default\n let error = params.error || function(jqXHR, textStatus, errorThrown) {\n if (button) {\n button.removeAttribute('disabled');\n button.style.cursor = 'pointer';\n }\n if (spinner) {\n if (Array.isArray(spinner)) {\n spinner.forEach(function(el) {\n jQuery(el).css('display', 'none');\n });\n } else {\n jQuery(spinner).css('display', 'none');\n }\n }\n\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\n console.log( textStatus );\n console.log( errorThrown );\n console.log( jqXHR );\n\n errorOutput( textStatus );\n };\n\n var errorOutput = params.errorOutput || function( msg ) {};/* eslint-disable-line no-var */\n\n jQuery.ajax({\n context: context,\n type: 'POST',\n url: spbcSettings.ajaxurl,\n data: data,\n dataType: dataType,\n success: success,\n error: error,\n timeout: timeout,\n });\n}\n"],"names":["spbcTimestamp","Math","floor","Date","spbcHighlightElement","id","times","jQuery","animate","scrollTop","offset","top","addClass","outlineColor","removeClass","spbcSendAJAXRequest","data","params","obj","let","dataType","notJson","button","spinner","progressbar","callback","timeout","context","this","success","setAttribute","style","cursor","Array","isArray","forEach","el","css","security","spbcSettings","ajax_nonce","no_cache","random","result","errorComment","hideSupportLink","removeAttribute","JSON","parse","error","setTimeout","fadeOut","error_comment","hide_support_link","errorOutput","msg","ajax","type","url","ajaxurl","jqXHR","textStatus","errorThrown","console","log"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-cookie.min.js.map b/js/spbc-cookie.min.js.map index e33070cce..b908033db 100644 --- a/js/spbc-cookie.min.js.map +++ b/js/spbc-cookie.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-cookie.min.js","sources":["spbc-cookie.js"],"sourcesContent":["/**\r\n * Set Cookie\r\n * @param {string} cookies\r\n * @param {string} value\r\n * @param {number} expires\r\n */\r\nfunction spbcSetCookie( cookies, value, expires ) {/* eslint-disable-line no-unused-vars */\r\n if ( typeof cookies === 'string' && ( typeof value === 'string' || typeof value === 'number' ) ) {\r\n cookies = [[cookies, value, expires]];\r\n }\r\n\r\n // Cookies disabled\r\n if ( +spbcPublic.data__set_cookies === 0 ) {\r\n return;\r\n\r\n // Using traditional cookies\r\n } else if ( +spbcPublic.data__set_cookies === 1 ) {\r\n cookies.forEach( function(item, i, arr) {\r\n let expires = typeof item[2] !== 'undefined' ? 'expires=' + item[2] + '; ' : '';\r\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\r\n document.cookie = item[0] +\r\n '=' + encodeURIComponent(item[1]) +\r\n '; ' + expires + 'path=/; samesite=lax' +\r\n ctSecure;\r\n });\r\n\r\n // Using alternative cookies\r\n } else if ( +spbcPublic.data__set_cookies === 2 ) {\r\n // Using REST API handler\r\n if ( +spbcPublic.data__set_cookies__alt_sessions_type === 1 ) {\r\n spbcSendRESTRequest(\r\n 'alt_sessions',\r\n {\r\n method: 'POST',\r\n data: {cookies: cookies},\r\n },\r\n );\r\n }\r\n // Using AJAX request and handler\r\n // }else if( +spbcPublic.data__set_cookies__alt_sessions_type === 2 ) {\r\n // apbct_public_sendAJAX(\r\n // {\r\n // action: 'apbct_alt_session__save__AJAX',\r\n // cookies: cookies,\r\n // },\r\n // {\r\n // apbct_ajax: 1,\r\n // notJson: 1,\r\n // }\r\n // );\r\n // }\r\n }\r\n}\r\n\r\n/**\r\n * Send REST Request\r\n * @param {string} route\r\n * @param {obj} params\r\n */\r\nfunction spbcSendRESTRequest( route, params ) {\r\n let callback = params.callback || null;\r\n let data = params.data || [];\r\n let method = params.method || 'POST';\r\n\r\n jQuery.ajax({\r\n type: method,\r\n url: spbcPublic._rest_url + 'cleantalk-security/v1/' + route,\r\n data: data,\r\n beforeSend: function( xhr ) {\r\n xhr.setRequestHeader( 'X-WP-Nonce', spbcPublic._rest_nonce );\r\n xhr.setRequestHeader('X-Robots-Tag', 'noindex, nofollow');\r\n },\r\n success: function(result) {\r\n if (result.error) {\r\n console.log('Security by Cleantalk. Error: ' + (result.error || 'Unknown'));\r\n } else {\r\n if (callback) {\r\n let obj = null;\r\n callback(result, route, params, obj);\r\n }\r\n }\r\n },\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n if ( errorThrown ) {\r\n console.log('SPBCT_REST_ERROR');\r\n console.log(jqXHR);\r\n console.log(textStatus);\r\n console.log('Security by Cleantalk plugin REST API error: ' +\r\n errorThrown +\r\n ' Please, contact Cleantalk tech support ' +\r\n 'https://wordpress.org/support/plugin/security-malware-firewall/');\r\n }\r\n },\r\n });\r\n}\r\n"],"names":["spbcSetCookie","cookies","value","expires","spbcPublic","data__set_cookies","forEach","item","i","arr","let","ctSecure","location","protocol","document","cookie","encodeURIComponent","data__set_cookies__alt_sessions_type","spbcSendRESTRequest","method","data","route","params","callback","jQuery","ajax","type","url","_rest_url","beforeSend","xhr","setRequestHeader","_rest_nonce","success","result","error","console","log","jqXHR","textStatus","errorThrown"],"mappings":"AAMA,SAASA,cAAeC,EAASC,EAAOC,GACZ,UAAnB,OAAOF,GAA2C,UAAjB,OAAOC,GAAuC,UAAjB,OAAOA,IACtED,EAAU,CAAC,CAACA,EAASC,EAAOC,KAIO,GAAlC,CAACC,WAAWC,oBAI6B,GAAlC,CAACD,WAAWC,kBACpBJ,EAAQK,QAAS,SAASC,EAAMC,EAAGC,GAC/BC,IAAIP,EAA6B,KAAA,IAAZI,EAAK,GAAqB,WAAaA,EAAK,GAAK,KAAO,GACzEI,EAAiC,WAAtBC,SAASC,SAAwB,WAAa,GAC7DC,SAASC,OAASR,EAAK,GACnB,IAAMS,mBAAmBT,EAAK,EAAE,EAChC,KAAOJ,EAAU,uBACjBQ,CACR,CAAC,EAGyC,GAAlC,CAACP,WAAWC,mBAEsC,GAArD,CAACD,WAAWa,sCACbC,oBACI,eACA,CACIC,OAAQ,OACRC,KAAM,CAACnB,QAASA,CAAO,CAC3B,CACJ,EAgBZ,CAOA,SAASiB,oBAAqBG,EAAOC,GACjCZ,IAAIa,EAAWD,EAAOC,UAAY,KAIlCC,OAAOC,KAAK,CACRC,KAHSJ,EAAOH,QAAU,OAI1BQ,IAAKvB,WAAWwB,UAAY,yBAA2BP,EACvDD,KANOE,EAAOF,MAAQ,GAOtBS,WAAY,SAAUC,GAClBA,EAAIC,iBAAkB,aAAc3B,WAAW4B,WAAY,EAC3DF,EAAIC,iBAAiB,eAAgB,mBAAmB,CAC5D,EACAE,QAAS,SAASC,GACVA,EAAOC,MACPC,QAAQC,IAAI,kCAAoCH,EAAOC,OAAS,UAAU,EAEtEZ,GAEAA,EAASW,EAAQb,EAAOC,EADd,IACyB,CAG/C,EACAa,MAAO,SAASG,EAAOC,EAAYC,GAC1BA,IACDJ,QAAQC,IAAI,kBAAkB,EAC9BD,QAAQC,IAAIC,CAAK,EACjBF,QAAQC,IAAIE,CAAU,EACtBH,QAAQC,IAAI,gDACRG,EAEA,yGAAiE,EAE7E,CACJ,CAAC,CACL"} \ No newline at end of file +{"version":3,"file":"spbc-cookie.min.js","sources":["spbc-cookie.js"],"sourcesContent":["/**\n * Set Cookie\n * @param {string} cookies\n * @param {string} value\n * @param {number} expires\n */\nfunction spbcSetCookie( cookies, value, expires ) {/* eslint-disable-line no-unused-vars */\n if ( typeof cookies === 'string' && ( typeof value === 'string' || typeof value === 'number' ) ) {\n cookies = [[cookies, value, expires]];\n }\n\n // Cookies disabled\n if ( +spbcPublic.data__set_cookies === 0 ) {\n return;\n\n // Using traditional cookies\n } else if ( +spbcPublic.data__set_cookies === 1 ) {\n cookies.forEach( function(item, i, arr) {\n let expires = typeof item[2] !== 'undefined' ? 'expires=' + item[2] + '; ' : '';\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = item[0] +\n '=' + encodeURIComponent(item[1]) +\n '; ' + expires + 'path=/; samesite=lax' +\n ctSecure;\n });\n\n // Using alternative cookies\n } else if ( +spbcPublic.data__set_cookies === 2 ) {\n // Using REST API handler\n if ( +spbcPublic.data__set_cookies__alt_sessions_type === 1 ) {\n spbcSendRESTRequest(\n 'alt_sessions',\n {\n method: 'POST',\n data: {cookies: cookies},\n },\n );\n }\n // Using AJAX request and handler\n // }else if( +spbcPublic.data__set_cookies__alt_sessions_type === 2 ) {\n // apbct_public_sendAJAX(\n // {\n // action: 'apbct_alt_session__save__AJAX',\n // cookies: cookies,\n // },\n // {\n // apbct_ajax: 1,\n // notJson: 1,\n // }\n // );\n // }\n }\n}\n\n/**\n * Send REST Request\n * @param {string} route\n * @param {obj} params\n */\nfunction spbcSendRESTRequest( route, params ) {\n let callback = params.callback || null;\n let data = params.data || [];\n let method = params.method || 'POST';\n\n jQuery.ajax({\n type: method,\n url: spbcPublic._rest_url + 'cleantalk-security/v1/' + route,\n data: data,\n beforeSend: function( xhr ) {\n xhr.setRequestHeader( 'X-WP-Nonce', spbcPublic._rest_nonce );\n xhr.setRequestHeader('X-Robots-Tag', 'noindex, nofollow');\n },\n success: function(result) {\n if (result.error) {\n console.log('Security by Cleantalk. Error: ' + (result.error || 'Unknown'));\n } else {\n if (callback) {\n let obj = null;\n callback(result, route, params, obj);\n }\n }\n },\n error: function(jqXHR, textStatus, errorThrown) {\n if ( errorThrown ) {\n console.log('SPBCT_REST_ERROR');\n console.log(jqXHR);\n console.log(textStatus);\n console.log('Security by Cleantalk plugin REST API error: ' +\n errorThrown +\n ' Please, contact Cleantalk tech support ' +\n 'https://wordpress.org/support/plugin/security-malware-firewall/');\n }\n },\n });\n}\n"],"names":["spbcSetCookie","cookies","value","expires","spbcPublic","data__set_cookies","forEach","item","i","arr","let","ctSecure","location","protocol","document","cookie","encodeURIComponent","data__set_cookies__alt_sessions_type","spbcSendRESTRequest","method","data","route","params","callback","jQuery","ajax","type","url","_rest_url","beforeSend","xhr","setRequestHeader","_rest_nonce","success","result","error","console","log","jqXHR","textStatus","errorThrown"],"mappings":"AAMA,SAASA,cAAeC,EAASC,EAAOC,GACZ,UAAnB,OAAOF,GAA2C,UAAjB,OAAOC,GAAuC,UAAjB,OAAOA,IACtED,EAAU,CAAC,CAACA,EAASC,EAAOC,KAIO,GAAlC,CAACC,WAAWC,oBAI6B,GAAlC,CAACD,WAAWC,kBACpBJ,EAAQK,QAAS,SAASC,EAAMC,EAAGC,GAC/BC,IAAIP,EAA6B,KAAA,IAAZI,EAAK,GAAqB,WAAaA,EAAK,GAAK,KAAO,GACzEI,EAAiC,WAAtBC,SAASC,SAAwB,WAAa,GAC7DC,SAASC,OAASR,EAAK,GACnB,IAAMS,mBAAmBT,EAAK,EAAE,EAChC,KAAOJ,EAAU,uBACjBQ,CACR,CAAC,EAGyC,GAAlC,CAACP,WAAWC,mBAEsC,GAArD,CAACD,WAAWa,sCACbC,oBACI,eACA,CACIC,OAAQ,OACRC,KAAM,CAACnB,QAASA,CAAO,CAC3B,CACJ,EAgBZ,CAOA,SAASiB,oBAAqBG,EAAOC,GACjCZ,IAAIa,EAAWD,EAAOC,UAAY,KAIlCC,OAAOC,KAAK,CACRC,KAHSJ,EAAOH,QAAU,OAI1BQ,IAAKvB,WAAWwB,UAAY,yBAA2BP,EACvDD,KANOE,EAAOF,MAAQ,GAOtBS,WAAY,SAAUC,GAClBA,EAAIC,iBAAkB,aAAc3B,WAAW4B,WAAY,EAC3DF,EAAIC,iBAAiB,eAAgB,mBAAmB,CAC5D,EACAE,QAAS,SAASC,GACVA,EAAOC,MACPC,QAAQC,IAAI,kCAAoCH,EAAOC,OAAS,UAAU,EAEtEZ,GAEAA,EAASW,EAAQb,EAAOC,EADd,IACyB,CAG/C,EACAa,MAAO,SAASG,EAAOC,EAAYC,GAC1BA,IACDJ,QAAQC,IAAI,kBAAkB,EAC9BD,QAAQC,IAAIC,CAAK,EACjBF,QAAQC,IAAIE,CAAU,EACtBH,QAAQC,IAAI,gDACRG,EAEA,yGAAiE,EAE7E,CACJ,CAAC,CACL"} \ No newline at end of file diff --git a/js/spbc-dashboard-widget.min.js.map b/js/spbc-dashboard-widget.min.js.map index 7b34ace0b..c151ae5e9 100644 --- a/js/spbc-dashboard-widget.min.js.map +++ b/js/spbc-dashboard-widget.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-dashboard-widget.min.js","sources":["spbc-dashboard-widget.js"],"sourcesContent":["jQuery(document).ready(function() {\r\n // Set \"refresh\" link handler\r\n jQuery('.spbc_widget_refresh_link').on('click', function() {\r\n jQuery('.spbc_preloader').show();\r\n setTimeout(function() {\r\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\r\n }, 1);\r\n setTimeout(function() {\r\n jQuery('#spbc_refresh_form').submit();\r\n }, 2500);\r\n });\r\n\r\n if (location.hash == '#ct_widget') {\r\n setTimeout(function() {\r\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\r\n }, 1);\r\n }\r\n\r\n // Fixing default wrapper style\r\n jQuery('#spbc_widget_wrapper').parent().css('padding', 0);\r\n\r\n locale = navigator.language || navigator.userLanguage;\r\n\r\n let dateFormatter = new Intl.DateTimeFormat(locale, {\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n\r\n /**\r\n * Reformat Widget Data\r\n * @param {array} spbcDashboardWidget\r\n * @return {array}\r\n */\r\n function reformatWidgetData(spbcDashboardWidget) {\r\n let widgetData = {'labels': [], 'counts': []};\r\n for (let i = 0; i < spbcDashboardWidget.length; i++) {\r\n widgetData.labels.push(dateFormatter.format(new Date(spbcDashboardWidget[i]['0'])));\r\n widgetData.counts.push(spbcDashboardWidget[i]['1']);\r\n }\r\n return widgetData;\r\n }\r\n\r\n const ctx = document.getElementById('spbc_widget_chart');\r\n // let widgetData = reformatWidgetData(spbcDashboardWidget['data'])\r\n let widgetDataFW = reformatWidgetData(spbcDashboardWidget['data_fw']);\r\n let widgetDataBFP = reformatWidgetData(spbcDashboardWidget['data_bfp']);\r\n\r\n new Chart(ctx, {\r\n type: 'bar',\r\n data: {\r\n labels: widgetDataFW.labels,\r\n datasets: [\r\n {\r\n label: 'Visitors blocked by Bruteforce Protection',\r\n data: widgetDataBFP.counts,\r\n borderWidth: 1,\r\n backgroundColor: 'gray',\r\n },\r\n {\r\n label: 'Visitors blocked by Firewall',\r\n data: widgetDataFW.counts,\r\n borderWidth: 1,\r\n backgroundColor: 'steelblue',\r\n },\r\n ],\r\n },\r\n options: {\r\n legend: {\r\n display: false,\r\n },\r\n maintainAspectRatio: false,\r\n responsive: true,\r\n scales: {\r\n y: {\r\n ticks: {\r\n precision: 0,\r\n },\r\n },\r\n },\r\n title: {\r\n display: true,\r\n text: 'Blocked attacks',\r\n fontSize: 18,\r\n },\r\n plugins: {\r\n legend: {\r\n display: false,\r\n },\r\n title: {\r\n display: true,\r\n text: 'Blocked attacks',\r\n font: {\r\n size: 18,\r\n },\r\n },\r\n },\r\n elements: {\r\n bar: {\r\n backgroundColor: 'steelblue',\r\n },\r\n },\r\n animations: {\r\n tension: {\r\n duration: 1000,\r\n easing: 'linear',\r\n from: 1,\r\n to: 0,\r\n loop: true,\r\n },\r\n },\r\n\r\n },\r\n });\r\n});\r\n"],"names":["jQuery","document","ready","on","show","setTimeout","window","scrollTo","offset","top","submit","location","hash","parent","css","locale","navigator","language","userLanguage","let","dateFormatter","Intl","DateTimeFormat","month","day","reformatWidgetData","spbcDashboardWidget","widgetData","labels","counts","i","length","push","format","Date","ctx","getElementById","widgetDataFW","widgetDataBFP","Chart","type","data","datasets","label","borderWidth","backgroundColor","options","legend","display","maintainAspectRatio","responsive","scales","y","ticks","precision","title","text","fontSize","plugins","font","size","elements","bar","animations","tension","duration","easing","from","to","loop"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WAEnBF,OAAO,2BAA2B,EAAEG,GAAG,QAAS,WAC5CH,OAAO,iBAAiB,EAAEI,KAAK,EAC/BC,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EACJJ,WAAW,WACPL,OAAO,oBAAoB,EAAEU,OAAO,CACxC,EAAG,IAAI,CACX,CAAC,EAEoB,cAAjBC,SAASC,MACTP,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EAIRT,OAAO,sBAAsB,EAAEa,OAAO,EAAEC,IAAI,UAAW,CAAC,EAExDC,OAASC,UAAUC,UAAYD,UAAUE,aAEzCC,IAAIC,EAAgB,IAAIC,KAAKC,eAAeP,OAAQ,CAChDQ,MAAO,QACPC,IAAK,SACT,CAAC,EAOD,SAASC,EAAmBC,GACxBP,IAAIQ,EAAa,CAACC,OAAU,GAAIC,OAAU,EAAE,EAC5C,IAAKV,IAAIW,EAAI,EAAGA,EAAIJ,EAAoBK,OAAQD,CAAC,GAC7CH,EAAWC,OAAOI,KAAKZ,EAAca,OAAO,IAAIC,KAAKR,EAAoBI,GAAG,EAAI,CAAC,CAAC,EAClFH,EAAWE,OAAOG,KAAKN,EAAoBI,GAAG,EAAI,EAEtD,OAAOH,CACX,CAEA,IAAMQ,EAAMlC,SAASmC,eAAe,mBAAmB,EAEnDC,EAAeZ,EAAmBC,oBAA6B,OAAC,EAChEY,EAAgBb,EAAmBC,oBAA8B,QAAC,EAEtE,IAAIa,MAAMJ,EAAK,CACXK,KAAM,MACNC,KAAM,CACFb,OAAQS,EAAaT,OACrBc,SAAU,CACN,CACIC,MAAO,4CACPF,KAAMH,EAAcT,OACpBe,YAAa,EACbC,gBAAiB,MACrB,EACA,CACIF,MAAO,+BACPF,KAAMJ,EAAaR,OACnBe,YAAa,EACbC,gBAAiB,WACrB,EAER,EACAC,QAAS,CACLC,OAAQ,CACJC,QAAS,CAAA,CACb,EACAC,oBAAqB,CAAA,EACrBC,WAAY,CAAA,EACZC,OAAQ,CACJC,EAAG,CACCC,MAAO,CACHC,UAAW,CACf,CACJ,CACJ,EACAC,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNC,SAAU,EACd,EACAC,QAAS,CACLX,OAAQ,CACJC,QAAS,CAAA,CACb,EACAO,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNG,KAAM,CACFC,KAAM,EACV,CACJ,CACJ,EACAC,SAAU,CACNC,IAAK,CACDjB,gBAAiB,WACrB,CACJ,EACAkB,WAAY,CACRC,QAAS,CACLC,SAAU,IACVC,OAAQ,SACRC,KAAM,EACNC,GAAI,EACJC,KAAM,CAAA,CACV,CACJ,CAEJ,CACJ,CAAC,CACL,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-dashboard-widget.min.js","sources":["spbc-dashboard-widget.js"],"sourcesContent":["jQuery(document).ready(function() {\n // Set \"refresh\" link handler\n jQuery('.spbc_widget_refresh_link').on('click', function() {\n jQuery('.spbc_preloader').show();\n setTimeout(function() {\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\n }, 1);\n setTimeout(function() {\n jQuery('#spbc_refresh_form').submit();\n }, 2500);\n });\n\n if (location.hash == '#ct_widget') {\n setTimeout(function() {\n window.scrollTo(0, jQuery('#spbc_widget_wrapper').offset().top - 130);\n }, 1);\n }\n\n // Fixing default wrapper style\n jQuery('#spbc_widget_wrapper').parent().css('padding', 0);\n\n locale = navigator.language || navigator.userLanguage;\n\n let dateFormatter = new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n });\n\n /**\n * Reformat Widget Data\n * @param {array} spbcDashboardWidget\n * @return {array}\n */\n function reformatWidgetData(spbcDashboardWidget) {\n let widgetData = {'labels': [], 'counts': []};\n for (let i = 0; i < spbcDashboardWidget.length; i++) {\n widgetData.labels.push(dateFormatter.format(new Date(spbcDashboardWidget[i]['0'])));\n widgetData.counts.push(spbcDashboardWidget[i]['1']);\n }\n return widgetData;\n }\n\n const ctx = document.getElementById('spbc_widget_chart');\n // let widgetData = reformatWidgetData(spbcDashboardWidget['data'])\n let widgetDataFW = reformatWidgetData(spbcDashboardWidget['data_fw']);\n let widgetDataBFP = reformatWidgetData(spbcDashboardWidget['data_bfp']);\n\n new Chart(ctx, {\n type: 'bar',\n data: {\n labels: widgetDataFW.labels,\n datasets: [\n {\n label: 'Visitors blocked by Bruteforce Protection',\n data: widgetDataBFP.counts,\n borderWidth: 1,\n backgroundColor: 'gray',\n },\n {\n label: 'Visitors blocked by Firewall',\n data: widgetDataFW.counts,\n borderWidth: 1,\n backgroundColor: 'steelblue',\n },\n ],\n },\n options: {\n legend: {\n display: false,\n },\n maintainAspectRatio: false,\n responsive: true,\n scales: {\n y: {\n ticks: {\n precision: 0,\n },\n },\n },\n title: {\n display: true,\n text: 'Blocked attacks',\n fontSize: 18,\n },\n plugins: {\n legend: {\n display: false,\n },\n title: {\n display: true,\n text: 'Blocked attacks',\n font: {\n size: 18,\n },\n },\n },\n elements: {\n bar: {\n backgroundColor: 'steelblue',\n },\n },\n animations: {\n tension: {\n duration: 1000,\n easing: 'linear',\n from: 1,\n to: 0,\n loop: true,\n },\n },\n\n },\n });\n});\n"],"names":["jQuery","document","ready","on","show","setTimeout","window","scrollTo","offset","top","submit","location","hash","parent","css","locale","navigator","language","userLanguage","let","dateFormatter","Intl","DateTimeFormat","month","day","reformatWidgetData","spbcDashboardWidget","widgetData","labels","counts","i","length","push","format","Date","ctx","getElementById","widgetDataFW","widgetDataBFP","Chart","type","data","datasets","label","borderWidth","backgroundColor","options","legend","display","maintainAspectRatio","responsive","scales","y","ticks","precision","title","text","fontSize","plugins","font","size","elements","bar","animations","tension","duration","easing","from","to","loop"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WAEnBF,OAAO,2BAA2B,EAAEG,GAAG,QAAS,WAC5CH,OAAO,iBAAiB,EAAEI,KAAK,EAC/BC,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EACJJ,WAAW,WACPL,OAAO,oBAAoB,EAAEU,OAAO,CACxC,EAAG,IAAI,CACX,CAAC,EAEoB,cAAjBC,SAASC,MACTP,WAAW,WACPC,OAAOC,SAAS,EAAGP,OAAO,sBAAsB,EAAEQ,OAAO,EAAEC,IAAM,GAAG,CACxE,EAAG,CAAC,EAIRT,OAAO,sBAAsB,EAAEa,OAAO,EAAEC,IAAI,UAAW,CAAC,EAExDC,OAASC,UAAUC,UAAYD,UAAUE,aAEzCC,IAAIC,EAAgB,IAAIC,KAAKC,eAAeP,OAAQ,CAChDQ,MAAO,QACPC,IAAK,SACT,CAAC,EAOD,SAASC,EAAmBC,GACxBP,IAAIQ,EAAa,CAACC,OAAU,GAAIC,OAAU,EAAE,EAC5C,IAAKV,IAAIW,EAAI,EAAGA,EAAIJ,EAAoBK,OAAQD,CAAC,GAC7CH,EAAWC,OAAOI,KAAKZ,EAAca,OAAO,IAAIC,KAAKR,EAAoBI,GAAG,EAAI,CAAC,CAAC,EAClFH,EAAWE,OAAOG,KAAKN,EAAoBI,GAAG,EAAI,EAEtD,OAAOH,CACX,CAEA,IAAMQ,EAAMlC,SAASmC,eAAe,mBAAmB,EAEnDC,EAAeZ,EAAmBC,oBAA6B,OAAC,EAChEY,EAAgBb,EAAmBC,oBAA8B,QAAC,EAEtE,IAAIa,MAAMJ,EAAK,CACXK,KAAM,MACNC,KAAM,CACFb,OAAQS,EAAaT,OACrBc,SAAU,CACN,CACIC,MAAO,4CACPF,KAAMH,EAAcT,OACpBe,YAAa,EACbC,gBAAiB,MACrB,EACA,CACIF,MAAO,+BACPF,KAAMJ,EAAaR,OACnBe,YAAa,EACbC,gBAAiB,WACrB,EAER,EACAC,QAAS,CACLC,OAAQ,CACJC,QAAS,CAAA,CACb,EACAC,oBAAqB,CAAA,EACrBC,WAAY,CAAA,EACZC,OAAQ,CACJC,EAAG,CACCC,MAAO,CACHC,UAAW,CACf,CACJ,CACJ,EACAC,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNC,SAAU,EACd,EACAC,QAAS,CACLX,OAAQ,CACJC,QAAS,CAAA,CACb,EACAO,MAAO,CACHP,QAAS,CAAA,EACTQ,KAAM,kBACNG,KAAM,CACFC,KAAM,EACV,CACJ,CACJ,EACAC,SAAU,CACNC,IAAK,CACDjB,gBAAiB,WACrB,CACJ,EACAkB,WAAY,CACRC,QAAS,CACLC,SAAU,IACVC,OAAQ,SACRC,KAAM,EACNC,GAAI,EACJC,KAAM,CAAA,CACV,CACJ,CAEJ,CACJ,CAAC,CACL,CAAC"} \ No newline at end of file diff --git a/js/spbc-modal.min.js.map b/js/spbc-modal.min.js.map index b5156334b..391674948 100644 --- a/js/spbc-modal.min.js.map +++ b/js/spbc-modal.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-modal.min.js","sources":["spbc-modal.js"],"sourcesContent":["/* Cleantalk Modal object */\r\nspbcModal = {\r\n\r\n // Flags\r\n loaded: false,\r\n loading: false,\r\n opened: false,\r\n opening: false,\r\n\r\n // Methods\r\n load: function( action ) {\r\n if ( ! this.loaded ) {\r\n this.loading = true;\r\n callback = function( result, data, params, obj ) {\r\n spbcModal.loading = false;\r\n spbcModal.loaded = result;\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalContentLoaded', {\r\n bubbles: true,\r\n } ),\r\n );\r\n };\r\n if ( typeof spbcSendAJAXRequest === 'function' ) {\r\n spbcSendAJAXRequest( {'action': action}, {'callback': callback, 'notJson': true} );\r\n }\r\n }\r\n },\r\n\r\n putError: function( errorText, hideSupportLink = false) {\r\n let html = '

An error

' +\r\n '

' + errorText + '

';\r\n if (!hideSupportLink) {\r\n html += 'Contact tech support';\r\n }\r\n this.put(html);\r\n },\r\n\r\n put: function( html ) {\r\n spbcModal.loading = false;\r\n spbcModal.loaded = html;\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalContentLoaded', {\r\n bubbles: true,\r\n } ),\r\n );\r\n },\r\n\r\n confirm: function(header, text = '', filePath = '', callback, yesButtonText = 'Yes', noButtonText = 'No') {\r\n spbcModal.loading = false;\r\n let contentBlock = document.getElementById('spbc-modal-content');\r\n if (contentBlock) {\r\n contentBlock.innerHTML = '';\r\n\r\n const headerBlock = document.createElement('div');\r\n headerBlock.className = 'spbc-modal-header';\r\n headerBlock.textContent = header;\r\n contentBlock.append(headerBlock);\r\n\r\n // Create text block\r\n const textBlock = document.createElement('div');\r\n textBlock.className = 'spbc-modal-text-block';\r\n contentBlock.append(textBlock);\r\n\r\n const fullLinkPath = filePath;\r\n\r\n if (filePath && filePath.length > 60) {\r\n filePath = '...' + filePath.slice(filePath.length - 60);\r\n }\r\n\r\n const textElem = document.createElement('div');\r\n textElem.className = 'spbc-modal-text';\r\n textElem.textContent = text;\r\n textBlock.append(textElem);\r\n\r\n const pathElemWrapper = document.createElement('div');\r\n pathElemWrapper.className = 'spbc-modal-file_path_wrapper';\r\n textBlock.append(pathElemWrapper);\r\n const pathElem = document.createElement('span');\r\n pathElem.className = 'spbc-modal-file_path';\r\n pathElem.textContent = filePath ? filePath : '';\r\n pathElem.title = fullLinkPath;\r\n pathElemWrapper.append(pathElem);\r\n\r\n // Create buttons block\r\n const buttonsBlock = document.createElement('div');\r\n buttonsBlock.className = 'spbc-modal-buttons-block';\r\n contentBlock.append(buttonsBlock);\r\n\r\n const yesButton = document.createElement('button');\r\n yesButton.className = 'spbc-modal-button spbc_manual_link';\r\n yesButton.textContent = yesButtonText;\r\n yesButton.onclick = function() {\r\n callback(true);\r\n spbcModal.close();\r\n };\r\n buttonsBlock.append(yesButton);\r\n\r\n const noButton = document.createElement('button');\r\n noButton.className = 'spbc-modal-button spbc_manual_link';\r\n noButton.textContent = noButtonText;\r\n noButton.onclick = function() {\r\n spbcModal.close();\r\n };\r\n buttonsBlock.append(noButton);\r\n }\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalContentLoaded', {\r\n bubbles: true,\r\n } ),\r\n );\r\n },\r\n\r\n open: function() {\r\n /* Cleantalk Modal CSS start */\r\n let renderCss = function() {\r\n let cssStr = '';\r\n for ( key in this.styles ) {\r\n if (key) {\r\n cssStr += key + ':' + this.styles[key] + ';';\r\n }\r\n }\r\n return cssStr;\r\n };\r\n let overlayCss = {\r\n styles: {\r\n 'z-index': '9999',\r\n 'position': 'fixed',\r\n 'top': '0',\r\n 'left': '0',\r\n 'width': '100%',\r\n 'height': '100%',\r\n 'background': 'rgba(0,0,0,0.5)',\r\n 'display': 'flex',\r\n 'justify-content': 'center',\r\n 'align-items': 'center',\r\n },\r\n toString: renderCss,\r\n };\r\n let innerCss = {\r\n styles: {\r\n 'position': 'relative',\r\n 'padding': '20px',\r\n 'margin': '10px',\r\n 'max-width': '550px',\r\n 'background': '#FFF',\r\n 'border': '1px solid rgba(0,0,0,0.75)',\r\n 'border-radius': '4px',\r\n 'box-shadow': '7px 7px 5px 0px rgba(50,50,50,0.75)',\r\n },\r\n toString: renderCss,\r\n };\r\n let closeCss = {\r\n styles: {\r\n 'position': 'absolute',\r\n 'background': '#FFF',\r\n 'width': '20px',\r\n 'height': '20px',\r\n 'border': '2px solid rgba(0,0,0,0.75)',\r\n 'border-radius': '15px',\r\n 'cursor': 'pointer',\r\n 'top': '-8px',\r\n 'right': '-8px',\r\n },\r\n toString: renderCss,\r\n };\r\n let closeCssBefore = {\r\n styles: {\r\n 'content': '\"\"',\r\n 'display': 'block',\r\n 'position': 'absolute',\r\n 'background': '#000',\r\n 'border-radius': '1px',\r\n 'width': '2px',\r\n 'height': '16px',\r\n 'top': '2px',\r\n 'left': '9px',\r\n 'transform': 'rotate(45deg)',\r\n },\r\n toString: renderCss,\r\n };\r\n let closeCssAfter = {\r\n styles: {\r\n 'content': '\"\"',\r\n 'display': 'block',\r\n 'position': 'absolute',\r\n 'background': '#000',\r\n 'border-radius': '1px',\r\n 'width': '2px',\r\n 'height': '16px',\r\n 'top': '2px',\r\n 'left': '9px',\r\n 'transform': 'rotate(-45deg)',\r\n },\r\n toString: renderCss,\r\n };\r\n let contentCss = {\r\n styles: {\r\n 'display': 'grid',\r\n 'gap': '20px',\r\n 'overflow-y': 'auto',\r\n 'overflow-x': 'hidden',\r\n },\r\n toString: renderCss,\r\n };\r\n let bodyCss = {\r\n styles: {\r\n 'overflow': 'hidden',\r\n },\r\n toString: renderCss,\r\n };\r\n let spbcModalStyle = document.createElement( 'style' );\r\n spbcModalStyle.setAttribute( 'id', 'spbc-modal-styles' );\r\n spbcModalStyle.innerHTML = 'body.spbc-modal-opened{' + bodyCss + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-overlay{' + overlayCss + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-close{' + closeCss + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-close:before{' + closeCssBefore + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-close:after{' + closeCssAfter + '}';\r\n spbcModalStyle.innerHTML += '#spbc-modal-content{' + contentCss + '}';\r\n document.body.append( spbcModalStyle );\r\n /* Cleantalk Modal CSS end */\r\n\r\n let overlay = document.createElement( 'div' );\r\n overlay.setAttribute( 'id', 'spbc-modal-overlay' );\r\n document.body.append( overlay );\r\n\r\n document.body.classList.add( 'spbc-modal-opened' );\r\n\r\n let inner = document.createElement( 'div' );\r\n inner.setAttribute( 'id', 'spbc-modal-inner' );\r\n inner.setAttribute( 'style', innerCss );\r\n overlay.append( inner );\r\n\r\n let close = document.createElement( 'div' );\r\n close.setAttribute( 'id', 'spbc-modal-close' );\r\n inner.append( close );\r\n\r\n let content = document.createElement( 'div' );\r\n if ( this.loaded ) {\r\n content.innerHTML = this.loaded;\r\n } else {\r\n content.innerHTML = 'Loading...';\r\n }\r\n content.setAttribute( 'id', 'spbc-modal-content' );\r\n inner.append( content );\r\n\r\n this.opened = true;\r\n\r\n return this;\r\n },\r\n\r\n close: function() {\r\n spbcModal.loaded = '';\r\n spbcModal.loading = false;\r\n document.body.classList.remove( 'spbc-modal-opened' );\r\n document.getElementById( 'spbc-modal-overlay' ).remove();\r\n document.getElementById( 'spbc-modal-styles' ).remove();\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbcModalClosed', {\r\n bubbles: true,\r\n } ),\r\n );\r\n },\r\n\r\n};\r\n\r\n/* Cleantalk Modal helpers */\r\ndocument.addEventListener('click', function( e ) {\r\n if ( e.target && e.target.id === 'spbc-modal-overlay' || e.target.id === 'spbc-modal-close' ) {\r\n spbcModal.close();\r\n }\r\n});\r\ndocument.addEventListener('spbcModalContentLoaded', function( e ) {\r\n if ( spbcModal.opened && spbcModal.loaded ) {\r\n document.getElementById( 'spbc-modal-content' ).innerHTML = spbcModal.loaded;\r\n }\r\n});\r\n"],"names":["spbcModal","loaded","loading","opened","opening","load","action","this","callback","result","data","params","obj","document","dispatchEvent","CustomEvent","bubbles","spbcSendAJAXRequest","notJson","putError","errorText","hideSupportLink","let","html","put","confirm","header","text","filePath","yesButtonText","noButtonText","pathElem","noButton","contentBlock","getElementById","innerHTML","headerBlock","createElement","className","textContent","append","textBlock","fullLinkPath","length","slice","textElem","pathElemWrapper","title","buttonsBlock","yesButton","onclick","close","open","renderCss","cssStr","key","styles","overlayCss","z-index","position","top","left","width","height","background","display","justify-content","align-items","toString","innerCss","padding","margin","max-width","border","border-radius","box-shadow","closeCss","cursor","right","closeCssBefore","content","transform","closeCssAfter","contentCss","gap","overflow-y","overflow-x","bodyCss","overflow","spbcModalStyle","overlay","setAttribute","body","inner","classList","add","remove","addEventListener","e","target","id"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-modal.min.js","sources":["spbc-modal.js"],"sourcesContent":["/* Cleantalk Modal object */\nspbcModal = {\n\n // Flags\n loaded: false,\n loading: false,\n opened: false,\n opening: false,\n\n // Methods\n load: function( action ) {\n if ( ! this.loaded ) {\n this.loading = true;\n callback = function( result, data, params, obj ) {\n spbcModal.loading = false;\n spbcModal.loaded = result;\n document.dispatchEvent(\n new CustomEvent( 'spbcModalContentLoaded', {\n bubbles: true,\n } ),\n );\n };\n if ( typeof spbcSendAJAXRequest === 'function' ) {\n spbcSendAJAXRequest( {'action': action}, {'callback': callback, 'notJson': true} );\n }\n }\n },\n\n putError: function( errorText, hideSupportLink = false) {\n let html = '

An error

' +\n '

' + errorText + '

';\n if (!hideSupportLink) {\n html += 'Contact tech support';\n }\n this.put(html);\n },\n\n put: function( html ) {\n spbcModal.loading = false;\n spbcModal.loaded = html;\n document.dispatchEvent(\n new CustomEvent( 'spbcModalContentLoaded', {\n bubbles: true,\n } ),\n );\n },\n\n confirm: function(header, text = '', filePath = '', callback, yesButtonText = 'Yes', noButtonText = 'No') {\n spbcModal.loading = false;\n let contentBlock = document.getElementById('spbc-modal-content');\n if (contentBlock) {\n contentBlock.innerHTML = '';\n\n const headerBlock = document.createElement('div');\n headerBlock.className = 'spbc-modal-header';\n headerBlock.textContent = header;\n contentBlock.append(headerBlock);\n\n // Create text block\n const textBlock = document.createElement('div');\n textBlock.className = 'spbc-modal-text-block';\n contentBlock.append(textBlock);\n\n const fullLinkPath = filePath;\n\n if (filePath && filePath.length > 60) {\n filePath = '...' + filePath.slice(filePath.length - 60);\n }\n\n const textElem = document.createElement('div');\n textElem.className = 'spbc-modal-text';\n textElem.textContent = text;\n textBlock.append(textElem);\n\n const pathElemWrapper = document.createElement('div');\n pathElemWrapper.className = 'spbc-modal-file_path_wrapper';\n textBlock.append(pathElemWrapper);\n const pathElem = document.createElement('span');\n pathElem.className = 'spbc-modal-file_path';\n pathElem.textContent = filePath ? filePath : '';\n pathElem.title = fullLinkPath;\n pathElemWrapper.append(pathElem);\n\n // Create buttons block\n const buttonsBlock = document.createElement('div');\n buttonsBlock.className = 'spbc-modal-buttons-block';\n contentBlock.append(buttonsBlock);\n\n const yesButton = document.createElement('button');\n yesButton.className = 'spbc-modal-button spbc_manual_link';\n yesButton.textContent = yesButtonText;\n yesButton.onclick = function() {\n callback(true);\n spbcModal.close();\n };\n buttonsBlock.append(yesButton);\n\n const noButton = document.createElement('button');\n noButton.className = 'spbc-modal-button spbc_manual_link';\n noButton.textContent = noButtonText;\n noButton.onclick = function() {\n spbcModal.close();\n };\n buttonsBlock.append(noButton);\n }\n document.dispatchEvent(\n new CustomEvent( 'spbcModalContentLoaded', {\n bubbles: true,\n } ),\n );\n },\n\n open: function() {\n /* Cleantalk Modal CSS start */\n let renderCss = function() {\n let cssStr = '';\n for ( key in this.styles ) {\n if (key) {\n cssStr += key + ':' + this.styles[key] + ';';\n }\n }\n return cssStr;\n };\n let overlayCss = {\n styles: {\n 'z-index': '9999',\n 'position': 'fixed',\n 'top': '0',\n 'left': '0',\n 'width': '100%',\n 'height': '100%',\n 'background': 'rgba(0,0,0,0.5)',\n 'display': 'flex',\n 'justify-content': 'center',\n 'align-items': 'center',\n },\n toString: renderCss,\n };\n let innerCss = {\n styles: {\n 'position': 'relative',\n 'padding': '20px',\n 'margin': '10px',\n 'max-width': '550px',\n 'background': '#FFF',\n 'border': '1px solid rgba(0,0,0,0.75)',\n 'border-radius': '4px',\n 'box-shadow': '7px 7px 5px 0px rgba(50,50,50,0.75)',\n },\n toString: renderCss,\n };\n let closeCss = {\n styles: {\n 'position': 'absolute',\n 'background': '#FFF',\n 'width': '20px',\n 'height': '20px',\n 'border': '2px solid rgba(0,0,0,0.75)',\n 'border-radius': '15px',\n 'cursor': 'pointer',\n 'top': '-8px',\n 'right': '-8px',\n },\n toString: renderCss,\n };\n let closeCssBefore = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(45deg)',\n },\n toString: renderCss,\n };\n let closeCssAfter = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(-45deg)',\n },\n toString: renderCss,\n };\n let contentCss = {\n styles: {\n 'display': 'grid',\n 'gap': '20px',\n 'overflow-y': 'auto',\n 'overflow-x': 'hidden',\n },\n toString: renderCss,\n };\n let bodyCss = {\n styles: {\n 'overflow': 'hidden',\n },\n toString: renderCss,\n };\n let spbcModalStyle = document.createElement( 'style' );\n spbcModalStyle.setAttribute( 'id', 'spbc-modal-styles' );\n spbcModalStyle.innerHTML = 'body.spbc-modal-opened{' + bodyCss + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-overlay{' + overlayCss + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-close{' + closeCss + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-close:before{' + closeCssBefore + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-close:after{' + closeCssAfter + '}';\n spbcModalStyle.innerHTML += '#spbc-modal-content{' + contentCss + '}';\n document.body.append( spbcModalStyle );\n /* Cleantalk Modal CSS end */\n\n let overlay = document.createElement( 'div' );\n overlay.setAttribute( 'id', 'spbc-modal-overlay' );\n document.body.append( overlay );\n\n document.body.classList.add( 'spbc-modal-opened' );\n\n let inner = document.createElement( 'div' );\n inner.setAttribute( 'id', 'spbc-modal-inner' );\n inner.setAttribute( 'style', innerCss );\n overlay.append( inner );\n\n let close = document.createElement( 'div' );\n close.setAttribute( 'id', 'spbc-modal-close' );\n inner.append( close );\n\n let content = document.createElement( 'div' );\n if ( this.loaded ) {\n content.innerHTML = this.loaded;\n } else {\n content.innerHTML = 'Loading...';\n }\n content.setAttribute( 'id', 'spbc-modal-content' );\n inner.append( content );\n\n this.opened = true;\n\n return this;\n },\n\n close: function() {\n spbcModal.loaded = '';\n spbcModal.loading = false;\n document.body.classList.remove( 'spbc-modal-opened' );\n document.getElementById( 'spbc-modal-overlay' ).remove();\n document.getElementById( 'spbc-modal-styles' ).remove();\n document.dispatchEvent(\n new CustomEvent( 'spbcModalClosed', {\n bubbles: true,\n } ),\n );\n },\n\n};\n\n/* Cleantalk Modal helpers */\ndocument.addEventListener('click', function( e ) {\n if ( e.target && e.target.id === 'spbc-modal-overlay' || e.target.id === 'spbc-modal-close' ) {\n spbcModal.close();\n }\n});\ndocument.addEventListener('spbcModalContentLoaded', function( e ) {\n if ( spbcModal.opened && spbcModal.loaded ) {\n document.getElementById( 'spbc-modal-content' ).innerHTML = spbcModal.loaded;\n }\n});\n"],"names":["spbcModal","loaded","loading","opened","opening","load","action","this","callback","result","data","params","obj","document","dispatchEvent","CustomEvent","bubbles","spbcSendAJAXRequest","notJson","putError","errorText","hideSupportLink","let","html","put","confirm","header","text","filePath","yesButtonText","noButtonText","pathElem","noButton","contentBlock","getElementById","innerHTML","headerBlock","createElement","className","textContent","append","textBlock","fullLinkPath","length","slice","textElem","pathElemWrapper","title","buttonsBlock","yesButton","onclick","close","open","renderCss","cssStr","key","styles","overlayCss","z-index","position","top","left","width","height","background","display","justify-content","align-items","toString","innerCss","padding","margin","max-width","border","border-radius","box-shadow","closeCss","cursor","right","closeCssBefore","content","transform","closeCssAfter","contentCss","gap","overflow-y","overflow-x","bodyCss","overflow","spbcModalStyle","overlay","setAttribute","body","inner","classList","add","remove","addEventListener","e","target","id"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-scanner-plugin.min.js.map b/js/spbc-scanner-plugin.min.js.map index 8ea3dbcf2..6ea56f56e 100644 --- a/js/spbc-scanner-plugin.min.js.map +++ b/js/spbc-scanner-plugin.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-scanner-plugin.min.js","sources":["spbc-scanner-plugin.js"],"sourcesContent":["'use strict';\r\n\r\n/**\r\n * class SpbcMalwareScanner\r\n */\r\nclass SpbcMalwareScanner {/* eslint-disable-line no-unused-vars */\r\n first_start = true;\r\n\r\n active = false;\r\n\r\n root = '';\r\n settings = [];\r\n states = [\r\n 'get_cms_hashes',\r\n 'get_modules_hashes',\r\n 'clean_results',\r\n 'file_system_analysis',\r\n 'get_approved_hashes',\r\n 'get_denied_hashes',\r\n 'signature_analysis',\r\n 'heuristic_analysis',\r\n 'schedule_send_heuristic_suspicious_files',\r\n 'auto_cure_backup',\r\n 'auto_cure',\r\n 'os_cron_analysis',\r\n 'outbound_links',\r\n 'frontend_analysis',\r\n 'important_files_listing',\r\n 'send_results',\r\n ];\r\n state = null;\r\n offset = 0;\r\n amount = 0;\r\n amount_coefficient = 1;\r\n total_scanned = 0;\r\n scan_percent = 0;\r\n percent_completed = 0;\r\n\r\n paused = false;\r\n\r\n button = null;\r\n spinner = null;\r\n\r\n progress_overall = null;\r\n progressbar = null;\r\n progressbar_text = null;\r\n\r\n timeout = 60000;\r\n\r\n state_timer = 0;\r\n\r\n /**\r\n * constructor\r\n * @param {array} properties\r\n */\r\n constructor( properties ) {\r\n console.log('init');\r\n if (jQuery('#spbcscan-results-log-module').length) {\r\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\r\n }\r\n\r\n // Crunch for cure backups\r\n if ( typeof properties['settings']['auto_cure'] !== 'undefined' ) {\r\n properties['settings']['scanner__auto_cure_backup'] = '1';\r\n }\r\n\r\n for ( let key in properties ) {\r\n if ( typeof this[key] !== 'undefined' ) {\r\n this[key] = properties[key];\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Function Action Control\r\n */\r\n actionControl() {\r\n if (this.state === null) {\r\n this.start();\r\n } else if (this.paused) {\r\n this.resume();\r\n this.controller();\r\n } else {\r\n this.pause();\r\n }\r\n };\r\n\r\n /**\r\n * Function Start\r\n */\r\n start() {\r\n this.active = true;\r\n this.state_timer = Math.round(new Date().getTime() /1000);\r\n\r\n this.state = this.getNextState( null );\r\n\r\n this.setPercents( 0 );\r\n this.scan_percent = 0;\r\n this.offset = 0;\r\n this.progress_overall.children('span')\r\n .removeClass('spbc_bold')\r\n .filter('.spbc_overall_scan_status_' + this.state)\r\n .addClass('spbc_bold');\r\n\r\n this.progressbar.show(500);\r\n this.progress_overall.show(500);\r\n this.button.html(spbcScaner.button_scan_pause);\r\n this.spinner.css({display: 'inline'});\r\n\r\n setTimeout(() => {\r\n this.controller();\r\n }, 1000);\r\n };\r\n\r\n /**\r\n * Function Pause\r\n * @param {*} result\r\n * @param {*} data\r\n * @param {*} opt\r\n */\r\n pause( result, data, opt ) {\r\n console.log('PAUSE');\r\n this.button.html(spbcScaner.button_scan_resume);\r\n this.spinner.css({display: 'none'});\r\n this.paused = true;\r\n this.active = false;\r\n };\r\n\r\n /**\r\n * Function Resume\r\n * @param {*} opt\r\n */\r\n resume( opt ) {\r\n console.log('RESUME');\r\n this.button.html(spbcScaner.button_scan_pause);\r\n this.spinner.css({display: 'inline'});\r\n this.paused = false;\r\n this.active = true;\r\n };\r\n\r\n /**\r\n * Function End\r\n * @param {bool} reload\r\n */\r\n end( reload ) {\r\n this.progressbar.hide(500);\r\n this.progress_overall.hide(500);\r\n this.button.html(spbcScaner.button_scan_perform);\r\n this.spinner.css({display: 'none'});\r\n this.state = null;\r\n this.plug = false;\r\n this.total_scanned = 0;\r\n this.active = false;\r\n\r\n if (reload) {\r\n document.location = document.location;\r\n } else {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_tab__reload_accordion'},\r\n {\r\n notJson: true,\r\n callback: function(result, data, params, obj) {\r\n jQuery(obj).accordion('destroy')\r\n .html(result)\r\n .accordion({\r\n header: 'h3',\r\n heightStyle: 'content',\r\n collapsible: true,\r\n active: false,\r\n });\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n spbcScannerReloadScanInfo();\r\n },\r\n },\r\n jQuery('#spbc_scan_accordion'),\r\n );\r\n\r\n if (!jQuery('#spbc_scanner_clear').length) {\r\n let clearLink = '

Clear scanner logs


';\r\n jQuery(clearLink).insertBefore('#spbcscan-scanner-caption');\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Function Controller\r\n * @param {obj} result\r\n */\r\n controller( result ) {\r\n console.log(this.state);\r\n\r\n // The current stage is over. Switching to the new one\r\n if ( typeof result !== 'undefined' && result.end ) {\r\n this.state = this.getNextState( this.state );\r\n\r\n // End condition\r\n if (typeof this.state === 'undefined') {\r\n this.end();\r\n return;\r\n }\r\n\r\n // Set percent to 0\r\n this.setPercents( 0 );\r\n this.scan_percent = 0;\r\n this.offset = 0;\r\n\r\n // Changing visualizing of the current stage\r\n this.progress_overall.children('span')\r\n .removeClass('spbc_bold')\r\n .filter('.spbc_overall_scan_status_' + this.state)\r\n .addClass('spbc_bold');\r\n }\r\n\r\n // Break execution if paused\r\n if ( this.paused === true ) {\r\n return;\r\n }\r\n\r\n // // AJAX params\r\n let data = {\r\n action: 'spbc_scanner_controller_front',\r\n method: this.state,\r\n offset: this.offset,\r\n };\r\n\r\n let params = {\r\n type: 'GET',\r\n success: this.success,\r\n callback: this.successCallback,\r\n error: this.error,\r\n errorOutput: this.errorOutput,\r\n complete: null,\r\n context: this,\r\n timeout: 120000,\r\n };\r\n\r\n switch (this.state) {\r\n case 'get_modules_hashes': this.amount = 2; break;\r\n case 'clear_table': this.amount = 10000; break;\r\n case 'file_system_analysis': this.amount = 700; break;\r\n case 'auto_cure': this.amount = 5; break;\r\n case 'outbound_links': this.amount = 10; break;\r\n case 'frontend_analysis': this.amount = spbcSettings.frontendAnalysisAmount; break;\r\n case 'signature_analysis': this.amount = 10; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\r\n case 'heuristic_analysis': this.amount = 4; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\r\n case 'schedule_send_heuristic_suspicious_files': this.amount = 1; break;\r\n }\r\n\r\n data.amount = Math.round(this.amount * this.amount_coefficient);\r\n\r\n spbcSendAJAXRequest(\r\n data,\r\n params,\r\n jQuery('#spbc_scan_accordion'),\r\n );\r\n };\r\n\r\n /**\r\n * Set Coefficients\r\n * @param {string} state\r\n */\r\n setCoefficients( state ) {\r\n let coefficient = this.amount_coefficient;\r\n switch (state) {\r\n case 'file_system_analysis': coefficient *= 1.5; break;\r\n }\r\n this.amount_coefficient = coefficient;\r\n };\r\n\r\n /**\r\n * Get Next State\r\n * @param {string} state\r\n * @return {number}\r\n */\r\n getNextState( state ) {\r\n state = state === null ? this.states[0] : this.states[this.states.indexOf( state ) + 1];\r\n\r\n if (typeof this.settings['scanner__' + state] !== 'undefined' && +this.settings['scanner__' + state] === 0) {\r\n state = this.getNextState( state );\r\n }\r\n\r\n return state;\r\n };\r\n\r\n /**\r\n * Set Percents\r\n * @param {number} percents\r\n */\r\n setPercents( percents ) {\r\n this.percent_completed = Math.floor( percents * 100 ) / 100;\r\n this.progressbar.progressbar( 'option', 'value', this.percent_completed );\r\n this.progressbar_text.text( spbcScaner['progressbar_' + this.state] + ' - ' + this.percent_completed + '%' );\r\n };\r\n\r\n /**\r\n * Function Success\r\n * @param {obj} response\r\n */\r\n success( response ) {\r\n if ( !! response.error ) {\r\n this.error(\r\n {status: 200, responseText: response.error},\r\n response.error,\r\n response.msg,\r\n );\r\n } else {\r\n if ( this.successCallback ) {\r\n this.successCallback( response, this.data, this.obj );\r\n }\r\n }\r\n };\r\n\r\n // Processing response from backend\r\n /**\r\n * Success Callback\r\n * @param {obj} result\r\n */\r\n successCallback( result ) {\r\n console.log( result );\r\n\r\n this.interactAccordion(result);\r\n\r\n if ( typeof result.total !== 'undefined' ) {\r\n this.scan_percent = 100 / result.total;\r\n }\r\n\r\n if ( typeof result.processed_items !== 'undefined') {\r\n if ( this.state === 'heuristic_analysis' && typeof result.total !== 0 ) {\r\n this.logRaw('

Heuristic Analysis

');\r\n }\r\n if ( this.state === 'signature_analysis' && typeof result.total !== 0 ) {\r\n this.logRaw('

Signature Analysis

');\r\n }\r\n\r\n this.logFileEntry( result.processed_items );\r\n }\r\n\r\n if ( typeof result.stage_data_for_logging !== 'undefined') {\r\n this.logStageEntry( result.stage_data_for_logging );\r\n }\r\n\r\n // Add link on shuffle salt if cured\r\n if (result.cured !== undefined && Number(result.cured) > 0) {\r\n this.showLinkForShuffleSalts(result.message);\r\n }\r\n\r\n if ( result.end !== true && result.end !== 1 ) {\r\n let processedPercents = this.percent_completed + result.processed * this.scan_percent;\r\n if (result.stage_data_for_logging.title === 'File System Analysis' && processedPercents > 100) {\r\n processedPercents = 100;\r\n }\r\n this.setPercents(processedPercents);\r\n this.offset = this.offset + result.processed;\r\n this.controller( result );\r\n } else {\r\n console.log( this.state +\r\n ' stage took ' +\r\n ( Math.round(new Date().getTime() /1000) - this.state_timer ) +\r\n ' seconds to complete' );\r\n this.state_timer = Math.round(new Date().getTime()/1000);\r\n this.setPercents( 100 );\r\n this.scan_percent = 0;\r\n this.offset = 0;\r\n setTimeout(() => {\r\n this.controller( result );\r\n }, 300);\r\n }\r\n };\r\n\r\n /**\r\n * Run interactive refresh for accordion.\r\n * @param {obj|string[]} result\r\n */\r\n interactAccordion(result) {\r\n // validation control\r\n if (result.hasOwnProperty('interactivity_data') &&\r\n result.interactivity_data.hasOwnProperty('update_text') &&\r\n result.interactivity_data.update_text &&\r\n result.interactivity_data.hasOwnProperty('refresh_data') &&\r\n result.interactivity_data.refresh_data.hasOwnProperty('do_refresh') &&\r\n result.interactivity_data.refresh_data.do_refresh &&\r\n result.interactivity_data.refresh_data.hasOwnProperty('control_tab') &&\r\n result.interactivity_data.refresh_data.control_tab\r\n ) {\r\n spbcReloadAccordion(\r\n result.interactivity_data.refresh_data.control_tab,\r\n result.interactivity_data.update_text,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Function Error\r\n * @param {object} xhr\r\n * @param {string} status\r\n * @param {string} error\r\n */\r\n error( xhr, status, error ) {\r\n let errorOutput = this.errorOutput;\r\n\r\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\r\n console.log( status );\r\n console.log( error );\r\n console.log( xhr );\r\n\r\n if (status == 'error' && (error == '' || error == 'Not found')) {\r\n if (!this.tryCount) {\r\n this.tryCount = 0;\r\n this.retryLimit = 30;\r\n }\r\n this.tryCount++;\r\n console.log('Try #' + this.tryCount);\r\n this.setCoefficients(this.state);\r\n if (this.tryCount <= this.retryLimit) {\r\n this.pause();\r\n this.resume();\r\n this.controller();\r\n return;\r\n }\r\n }\r\n\r\n if ( xhr.status === 200 ) {\r\n if ( status === 'parsererror' ) {\r\n errorOutput( 'Unexpected response from server. See console for details.', this.state );\r\n console.log( '%c ' + xhr.responseText, 'color: pink;' );\r\n } else {\r\n let errorString = status;\r\n if ( typeof error !== 'undefined' ) {\r\n errorString += ' Additional info: ' + error;\r\n }\r\n errorOutput( errorString, this.state );\r\n }\r\n } else if (xhr.status === 500) {\r\n errorOutput( 'Internal server error.', this.state);\r\n } else {\r\n errorOutput('Unexpected response code: ' + xhr.status + '. Error: ' + status, this.state);\r\n }\r\n\r\n if ( this.progressbar ) {\r\n this.progressbar.fadeOut('slow');\r\n }\r\n\r\n this.end();\r\n };\r\n\r\n /**\r\n * Error Output\r\n * @param {string} errorMsg\r\n * @param {string} stage\r\n */\r\n errorOutput( errorMsg, stage ) {\r\n spbcModal.open().putError( errorMsg + '
Stage: ' + stage);\r\n };\r\n\r\n /**\r\n * Log Raw\r\n * @param {htmlString|Element|Text|Array|jQuery} messageToLog\r\n */\r\n logRaw(messageToLog) {\r\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\r\n jQuery('.spbc_log-wrapper').removeClass('spbc---hidden');\r\n jQuery('.spbc_log-wrapper .panel-body').prepend( messageToLog );\r\n };\r\n\r\n /**\r\n * Log File Entry\r\n * @param {array} items\r\n */\r\n logFileEntry(items) {\r\n for ( let key in items ) {\r\n if ( key ) {\r\n this.logRaw(\r\n '

' +\r\n this.getSiteUTCShiftedTimeString() + ' - ' +\r\n items[key].path + ' - ' + items[key].module +\r\n ': ' + items[key].status + '' +\r\n '

');\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Log Stage Entry\r\n * @param {obj} data\r\n */\r\n logStageEntry(data) {\r\n if (typeof jQuery('.panel-body .spbc_log-line span').first() !== 'undefined' &&\r\n typeof jQuery('.panel-body .spbc_log-line span').first()[0] !== 'undefined' &&\r\n jQuery('.panel-body .spbc_log-line span').first()[0].textContent === data.description\r\n ) {\r\n return;\r\n }\r\n this.logRaw( '

test ' +\r\n this.getSiteUTCShiftedTimeString() + ' - ' + '' +\r\n data.title + ' ' + '' + data.description + '

' );\r\n };\r\n\r\n /**\r\n * Show Link For Shuffle Salts\r\n * @param {string} message\r\n */\r\n showLinkForShuffleSalts(message) {\r\n jQuery('#spbc_notice_about_shuffle_link').remove();\r\n jQuery(jQuery('.spbc_tab--active .spbc_wrapper_field p')[1])\r\n .after(\r\n '
' +\r\n '' +\r\n message +\r\n '' +\r\n '
',\r\n );\r\n }\r\n\r\n /**\r\n * Get Site UTC Shifted Time String\r\n * @return {string}\r\n */\r\n getSiteUTCShiftedTimeString() {\r\n let utcShiftedTs = false;\r\n // gettings current system/browser offset\r\n let currentBrowserOffset = new Date().getTimezoneOffset();\r\n currentBrowserOffset = currentBrowserOffset * -1 * 1000 * 60;\r\n // chek if global ct object is defined\r\n if (typeof spbcScaner !== 'undefined' &&\r\n typeof spbcScaner.timezone_shift !== 'undefined' &&\r\n spbcScaner.timezone_shift !== false) {\r\n utcShiftedTs = Date.now() - currentBrowserOffset + (spbcScaner.timezone_shift * 1000);\r\n }\r\n let ctDate = utcShiftedTs ? new Date(utcShiftedTs) : new Date();\r\n // construct date string\r\n let shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\r\n let minutes = String(ctDate.getMinutes()).padStart(2, '0');\r\n let seconds = String(ctDate.getSeconds()).padStart(2, '0');\r\n return shortMonthName(ctDate) + ' ' +\r\n ctDate.getDate() + ' ' + ctDate.getFullYear() + ' ' +\r\n ctDate.getHours() + ':' + minutes + ':' + seconds;\r\n }\r\n}\r\n"],"names":["SpbcMalwareScanner","first_start","active","root","settings","states","state","offset","amount","amount_coefficient","total_scanned","scan_percent","percent_completed","paused","button","spinner","progress_overall","progressbar","progressbar_text","timeout","state_timer","constructor","properties","let","key","console","log","jQuery","length","removeClass","this","actionControl","start","resume","controller","pause","Math","round","Date","getTime","getNextState","setPercents","children","filter","addClass","show","html","spbcScaner","button_scan_pause","css","display","setTimeout","result","data","opt","button_scan_resume","end","reload","hide","button_scan_perform","plug","document","location","spbcSendAJAXRequest","action","notJson","callback","params","obj","accordion","header","heightStyle","collapsible","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","spbcScannerReloadScanInfo","insertBefore","method","type","success","successCallback","error","errorOutput","complete","context","spbcSettings","frontendAnalysisAmount","status","setCoefficients","coefficient","indexOf","percents","floor","text","response","responseText","msg","interactAccordion","total","processed_items","logRaw","logFileEntry","stage_data_for_logging","logStageEntry","undefined","cured","Number","showLinkForShuffleSalts","message","processedPercents","processed","title","hasOwnProperty","interactivity_data","update_text","refresh_data","do_refresh","control_tab","spbcReloadAccordion","xhr","tryCount","retryLimit","errorString","fadeOut","errorMsg","stage","spbcModal","open","putError","messageToLog","prepend","items","getSiteUTCShiftedTimeString","path","module","first","textContent","description","remove","after","utcShiftedTs","currentBrowserOffset","getTimezoneOffset","ctDate","timezone_shift","now","shortMonthName","Intl","DateTimeFormat","month","format","minutes","String","getMinutes","padStart","seconds","getSeconds","getDate","getFullYear","getHours"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-scanner-plugin.min.js","sources":["spbc-scanner-plugin.js"],"sourcesContent":["'use strict';\n\n/**\n * class SpbcMalwareScanner\n */\nclass SpbcMalwareScanner {/* eslint-disable-line no-unused-vars */\n first_start = true;\n\n active = false;\n\n root = '';\n settings = [];\n states = [\n 'get_cms_hashes',\n 'get_modules_hashes',\n 'clean_results',\n 'file_system_analysis',\n 'get_approved_hashes',\n 'get_denied_hashes',\n 'signature_analysis',\n 'heuristic_analysis',\n 'schedule_send_heuristic_suspicious_files',\n 'auto_cure_backup',\n 'auto_cure',\n 'os_cron_analysis',\n 'outbound_links',\n 'frontend_analysis',\n 'important_files_listing',\n 'send_results',\n ];\n state = null;\n offset = 0;\n amount = 0;\n amount_coefficient = 1;\n total_scanned = 0;\n scan_percent = 0;\n percent_completed = 0;\n\n paused = false;\n\n button = null;\n spinner = null;\n\n progress_overall = null;\n progressbar = null;\n progressbar_text = null;\n\n timeout = 60000;\n\n state_timer = 0;\n\n /**\n * constructor\n * @param {array} properties\n */\n constructor( properties ) {\n console.log('init');\n if (jQuery('#spbcscan-results-log-module').length) {\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\n }\n\n // Crunch for cure backups\n if ( typeof properties['settings']['auto_cure'] !== 'undefined' ) {\n properties['settings']['scanner__auto_cure_backup'] = '1';\n }\n\n for ( let key in properties ) {\n if ( typeof this[key] !== 'undefined' ) {\n this[key] = properties[key];\n }\n }\n };\n\n /**\n * Function Action Control\n */\n actionControl() {\n if (this.state === null) {\n this.start();\n } else if (this.paused) {\n this.resume();\n this.controller();\n } else {\n this.pause();\n }\n };\n\n /**\n * Function Start\n */\n start() {\n this.active = true;\n this.state_timer = Math.round(new Date().getTime() /1000);\n\n this.state = this.getNextState( null );\n\n this.setPercents( 0 );\n this.scan_percent = 0;\n this.offset = 0;\n this.progress_overall.children('span')\n .removeClass('spbc_bold')\n .filter('.spbc_overall_scan_status_' + this.state)\n .addClass('spbc_bold');\n\n this.progressbar.show(500);\n this.progress_overall.show(500);\n this.button.html(spbcScaner.button_scan_pause);\n this.spinner.css({display: 'inline'});\n\n setTimeout(() => {\n this.controller();\n }, 1000);\n };\n\n /**\n * Function Pause\n * @param {*} result\n * @param {*} data\n * @param {*} opt\n */\n pause( result, data, opt ) {\n console.log('PAUSE');\n this.button.html(spbcScaner.button_scan_resume);\n this.spinner.css({display: 'none'});\n this.paused = true;\n this.active = false;\n };\n\n /**\n * Function Resume\n * @param {*} opt\n */\n resume( opt ) {\n console.log('RESUME');\n this.button.html(spbcScaner.button_scan_pause);\n this.spinner.css({display: 'inline'});\n this.paused = false;\n this.active = true;\n };\n\n /**\n * Function End\n * @param {bool} reload\n */\n end( reload ) {\n this.progressbar.hide(500);\n this.progress_overall.hide(500);\n this.button.html(spbcScaner.button_scan_perform);\n this.spinner.css({display: 'none'});\n this.state = null;\n this.plug = false;\n this.total_scanned = 0;\n this.active = false;\n\n if (reload) {\n document.location = document.location;\n } else {\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_tab__reload_accordion'},\n {\n notJson: true,\n callback: function(result, data, params, obj) {\n jQuery(obj).accordion('destroy')\n .html(result)\n .accordion({\n header: 'h3',\n heightStyle: 'content',\n collapsible: true,\n active: false,\n });\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n spbcScannerReloadScanInfo();\n },\n },\n jQuery('#spbc_scan_accordion'),\n );\n\n if (!jQuery('#spbc_scanner_clear').length) {\n let clearLink = '

Clear scanner logs


';\n jQuery(clearLink).insertBefore('#spbcscan-scanner-caption');\n }\n }\n };\n\n /**\n * Function Controller\n * @param {obj} result\n */\n controller( result ) {\n console.log(this.state);\n\n // The current stage is over. Switching to the new one\n if ( typeof result !== 'undefined' && result.end ) {\n this.state = this.getNextState( this.state );\n\n // End condition\n if (typeof this.state === 'undefined') {\n this.end();\n return;\n }\n\n // Set percent to 0\n this.setPercents( 0 );\n this.scan_percent = 0;\n this.offset = 0;\n\n // Changing visualizing of the current stage\n this.progress_overall.children('span')\n .removeClass('spbc_bold')\n .filter('.spbc_overall_scan_status_' + this.state)\n .addClass('spbc_bold');\n }\n\n // Break execution if paused\n if ( this.paused === true ) {\n return;\n }\n\n // // AJAX params\n let data = {\n action: 'spbc_scanner_controller_front',\n method: this.state,\n offset: this.offset,\n };\n\n let params = {\n type: 'GET',\n success: this.success,\n callback: this.successCallback,\n error: this.error,\n errorOutput: this.errorOutput,\n complete: null,\n context: this,\n timeout: 120000,\n };\n\n switch (this.state) {\n case 'get_modules_hashes': this.amount = 2; break;\n case 'clear_table': this.amount = 10000; break;\n case 'file_system_analysis': this.amount = 700; break;\n case 'auto_cure': this.amount = 5; break;\n case 'outbound_links': this.amount = 10; break;\n case 'frontend_analysis': this.amount = spbcSettings.frontendAnalysisAmount; break;\n case 'signature_analysis': this.amount = 10; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\n case 'heuristic_analysis': this.amount = 4; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED,ERROR'; break;\n case 'schedule_send_heuristic_suspicious_files': this.amount = 1; break;\n }\n\n data.amount = Math.round(this.amount * this.amount_coefficient);\n\n spbcSendAJAXRequest(\n data,\n params,\n jQuery('#spbc_scan_accordion'),\n );\n };\n\n /**\n * Set Coefficients\n * @param {string} state\n */\n setCoefficients( state ) {\n let coefficient = this.amount_coefficient;\n switch (state) {\n case 'file_system_analysis': coefficient *= 1.5; break;\n }\n this.amount_coefficient = coefficient;\n };\n\n /**\n * Get Next State\n * @param {string} state\n * @return {number}\n */\n getNextState( state ) {\n state = state === null ? this.states[0] : this.states[this.states.indexOf( state ) + 1];\n\n if (typeof this.settings['scanner__' + state] !== 'undefined' && +this.settings['scanner__' + state] === 0) {\n state = this.getNextState( state );\n }\n\n return state;\n };\n\n /**\n * Set Percents\n * @param {number} percents\n */\n setPercents( percents ) {\n this.percent_completed = Math.floor( percents * 100 ) / 100;\n this.progressbar.progressbar( 'option', 'value', this.percent_completed );\n this.progressbar_text.text( spbcScaner['progressbar_' + this.state] + ' - ' + this.percent_completed + '%' );\n };\n\n /**\n * Function Success\n * @param {obj} response\n */\n success( response ) {\n if ( !! response.error ) {\n this.error(\n {status: 200, responseText: response.error},\n response.error,\n response.msg,\n );\n } else {\n if ( this.successCallback ) {\n this.successCallback( response, this.data, this.obj );\n }\n }\n };\n\n // Processing response from backend\n /**\n * Success Callback\n * @param {obj} result\n */\n successCallback( result ) {\n console.log( result );\n\n this.interactAccordion(result);\n\n if ( typeof result.total !== 'undefined' ) {\n this.scan_percent = 100 / result.total;\n }\n\n if ( typeof result.processed_items !== 'undefined') {\n if ( this.state === 'heuristic_analysis' && typeof result.total !== 0 ) {\n this.logRaw('

Heuristic Analysis

');\n }\n if ( this.state === 'signature_analysis' && typeof result.total !== 0 ) {\n this.logRaw('

Signature Analysis

');\n }\n\n this.logFileEntry( result.processed_items );\n }\n\n if ( typeof result.stage_data_for_logging !== 'undefined') {\n this.logStageEntry( result.stage_data_for_logging );\n }\n\n // Add link on shuffle salt if cured\n if (result.cured !== undefined && Number(result.cured) > 0) {\n this.showLinkForShuffleSalts(result.message);\n }\n\n if ( result.end !== true && result.end !== 1 ) {\n let processedPercents = this.percent_completed + result.processed * this.scan_percent;\n if (result.stage_data_for_logging.title === 'File System Analysis' && processedPercents > 100) {\n processedPercents = 100;\n }\n this.setPercents(processedPercents);\n this.offset = this.offset + result.processed;\n this.controller( result );\n } else {\n console.log( this.state +\n ' stage took ' +\n ( Math.round(new Date().getTime() /1000) - this.state_timer ) +\n ' seconds to complete' );\n this.state_timer = Math.round(new Date().getTime()/1000);\n this.setPercents( 100 );\n this.scan_percent = 0;\n this.offset = 0;\n setTimeout(() => {\n this.controller( result );\n }, 300);\n }\n };\n\n /**\n * Run interactive refresh for accordion.\n * @param {obj|string[]} result\n */\n interactAccordion(result) {\n // validation control\n if (result.hasOwnProperty('interactivity_data') &&\n result.interactivity_data.hasOwnProperty('update_text') &&\n result.interactivity_data.update_text &&\n result.interactivity_data.hasOwnProperty('refresh_data') &&\n result.interactivity_data.refresh_data.hasOwnProperty('do_refresh') &&\n result.interactivity_data.refresh_data.do_refresh &&\n result.interactivity_data.refresh_data.hasOwnProperty('control_tab') &&\n result.interactivity_data.refresh_data.control_tab\n ) {\n spbcReloadAccordion(\n result.interactivity_data.refresh_data.control_tab,\n result.interactivity_data.update_text,\n );\n }\n }\n\n /**\n * Function Error\n * @param {object} xhr\n * @param {string} status\n * @param {string} error\n */\n error( xhr, status, error ) {\n let errorOutput = this.errorOutput;\n\n console.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\n console.log( status );\n console.log( error );\n console.log( xhr );\n\n if (status == 'error' && (error == '' || error == 'Not found')) {\n if (!this.tryCount) {\n this.tryCount = 0;\n this.retryLimit = 30;\n }\n this.tryCount++;\n console.log('Try #' + this.tryCount);\n this.setCoefficients(this.state);\n if (this.tryCount <= this.retryLimit) {\n this.pause();\n this.resume();\n this.controller();\n return;\n }\n }\n\n if ( xhr.status === 200 ) {\n if ( status === 'parsererror' ) {\n errorOutput( 'Unexpected response from server. See console for details.', this.state );\n console.log( '%c ' + xhr.responseText, 'color: pink;' );\n } else {\n let errorString = status;\n if ( typeof error !== 'undefined' ) {\n errorString += ' Additional info: ' + error;\n }\n errorOutput( errorString, this.state );\n }\n } else if (xhr.status === 500) {\n errorOutput( 'Internal server error.', this.state);\n } else {\n errorOutput('Unexpected response code: ' + xhr.status + '. Error: ' + status, this.state);\n }\n\n if ( this.progressbar ) {\n this.progressbar.fadeOut('slow');\n }\n\n this.end();\n };\n\n /**\n * Error Output\n * @param {string} errorMsg\n * @param {string} stage\n */\n errorOutput( errorMsg, stage ) {\n spbcModal.open().putError( errorMsg + '
Stage: ' + stage);\n };\n\n /**\n * Log Raw\n * @param {htmlString|Element|Text|Array|jQuery} messageToLog\n */\n logRaw(messageToLog) {\n jQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\n jQuery('.spbc_log-wrapper').removeClass('spbc---hidden');\n jQuery('.spbc_log-wrapper .panel-body').prepend( messageToLog );\n };\n\n /**\n * Log File Entry\n * @param {array} items\n */\n logFileEntry(items) {\n for ( let key in items ) {\n if ( key ) {\n this.logRaw(\n '

' +\n this.getSiteUTCShiftedTimeString() + ' - ' +\n items[key].path + ' - ' + items[key].module +\n ': ' + items[key].status + '' +\n '

');\n }\n }\n };\n\n /**\n * Log Stage Entry\n * @param {obj} data\n */\n logStageEntry(data) {\n if (typeof jQuery('.panel-body .spbc_log-line span').first() !== 'undefined' &&\n typeof jQuery('.panel-body .spbc_log-line span').first()[0] !== 'undefined' &&\n jQuery('.panel-body .spbc_log-line span').first()[0].textContent === data.description\n ) {\n return;\n }\n this.logRaw( '

test ' +\n this.getSiteUTCShiftedTimeString() + ' - ' + '' +\n data.title + ' ' + '' + data.description + '

' );\n };\n\n /**\n * Show Link For Shuffle Salts\n * @param {string} message\n */\n showLinkForShuffleSalts(message) {\n jQuery('#spbc_notice_about_shuffle_link').remove();\n jQuery(jQuery('.spbc_tab--active .spbc_wrapper_field p')[1])\n .after(\n '
' +\n '' +\n message +\n '' +\n '
',\n );\n }\n\n /**\n * Get Site UTC Shifted Time String\n * @return {string}\n */\n getSiteUTCShiftedTimeString() {\n let utcShiftedTs = false;\n // gettings current system/browser offset\n let currentBrowserOffset = new Date().getTimezoneOffset();\n currentBrowserOffset = currentBrowserOffset * -1 * 1000 * 60;\n // chek if global ct object is defined\n if (typeof spbcScaner !== 'undefined' &&\n typeof spbcScaner.timezone_shift !== 'undefined' &&\n spbcScaner.timezone_shift !== false) {\n utcShiftedTs = Date.now() - currentBrowserOffset + (spbcScaner.timezone_shift * 1000);\n }\n let ctDate = utcShiftedTs ? new Date(utcShiftedTs) : new Date();\n // construct date string\n let shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\n let minutes = String(ctDate.getMinutes()).padStart(2, '0');\n let seconds = String(ctDate.getSeconds()).padStart(2, '0');\n return shortMonthName(ctDate) + ' ' +\n ctDate.getDate() + ' ' + ctDate.getFullYear() + ' ' +\n ctDate.getHours() + ':' + minutes + ':' + seconds;\n }\n}\n"],"names":["SpbcMalwareScanner","first_start","active","root","settings","states","state","offset","amount","amount_coefficient","total_scanned","scan_percent","percent_completed","paused","button","spinner","progress_overall","progressbar","progressbar_text","timeout","state_timer","constructor","properties","let","key","console","log","jQuery","length","removeClass","this","actionControl","start","resume","controller","pause","Math","round","Date","getTime","getNextState","setPercents","children","filter","addClass","show","html","spbcScaner","button_scan_pause","css","display","setTimeout","result","data","opt","button_scan_resume","end","reload","hide","button_scan_perform","plug","document","location","spbcSendAJAXRequest","action","notJson","callback","params","obj","accordion","header","heightStyle","collapsible","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","spbcScannerReloadScanInfo","insertBefore","method","type","success","successCallback","error","errorOutput","complete","context","spbcSettings","frontendAnalysisAmount","status","setCoefficients","coefficient","indexOf","percents","floor","text","response","responseText","msg","interactAccordion","total","processed_items","logRaw","logFileEntry","stage_data_for_logging","logStageEntry","undefined","cured","Number","showLinkForShuffleSalts","message","processedPercents","processed","title","hasOwnProperty","interactivity_data","update_text","refresh_data","do_refresh","control_tab","spbcReloadAccordion","xhr","tryCount","retryLimit","errorString","fadeOut","errorMsg","stage","spbcModal","open","putError","messageToLog","prepend","items","getSiteUTCShiftedTimeString","path","module","first","textContent","description","remove","after","utcShiftedTs","currentBrowserOffset","getTimezoneOffset","ctDate","timezone_shift","now","shortMonthName","Intl","DateTimeFormat","month","format","minutes","String","getMinutes","padStart","seconds","getSeconds","getDate","getFullYear","getHours"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index 1915b73c9..c92ce8e2c 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\r\nString.prototype.printf = function() { // eslint-disable-line no-extend-native\r\n let formatted = this;\r\n /* eslint-disable guard-for-in */\r\n for ( let arg in arguments ) { // eslint-disable-line prefer-rest-params\r\n let beforeFormatted = formatted.substring(0, formatted.indexOf('%s', 0));\r\n let afterFormatted = formatted.substring(formatted.indexOf('%s', 0)+2, formatted.length);\r\n formatted = beforeFormatted + arguments[arg] + afterFormatted; // eslint-disable-line prefer-rest-params\r\n }\r\n return formatted;\r\n};\r\n\r\n/**\r\n * Switching tabs\r\n *\r\n * @param {object} tab\r\n * @param {object} params\r\n */\r\nfunction spbcSwitchTab(tab, params) {\r\n let tabName = tab.classList[1].replace('spbc_tab_nav-', '');\r\n\r\n // update url\r\n let searchParams = new URLSearchParams(window.location.search);\r\n searchParams.set('spbc_tab', tabName);\r\n let hashParam = window.location.hash;\r\n let newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\r\n\r\n history.replaceState(null, '', newRelativePathQuery);\r\n\r\n // Hiding a tab 'Backups' if exist\r\n if (searchParams.get('spbc_tab') !== 'backups') {\r\n jQuery('.spbc_tab_nav-backups').hide();\r\n }\r\n\r\n // update active tab\r\n jQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\r\n jQuery('.spbc_tab').removeClass('spbc_tab--active');\r\n jQuery(tab).addClass('spbc_tab_nav--active');\r\n jQuery('.spbc_tab-' + tabName).addClass('spbc_tab--active');\r\n\r\n if (!jQuery(tab).data('loaded')) {\r\n let data = {\r\n action: 'spbc_settings__draw_elements',\r\n tab_name: tabName,\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n params = {\r\n callback: spbcDrawSettingsCallback,\r\n notJson: true,\r\n additional: params || null,\r\n };\r\n spbcSendAJAXRequest( data, params, tab );\r\n } else if (params && params.action) {\r\n switch (params.action) {\r\n case 'highlight':\r\n spbcHighlightElement(params.target, params.times);\r\n break;\r\n case 'click':\r\n setTimeout(function() {\r\n jQuery('#'+params.additional.target).click();\r\n }, 500);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Draws settings\r\n *\r\n * @param {*} result\r\n * @param {*} data\r\n * @param {*} params\r\n * @param {*} obj\r\n */\r\nfunction spbcDrawSettingsCallback(result, data, params, obj) {\r\n jQuery(obj).data('loaded', true);\r\n jQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\r\n let tab = jQuery('.spbc_tab-'+data.tab_name);\r\n tab.addClass('spbc_tab--active');\r\n\r\n jQuery(document).off( 'click', '.spbc_long_description__show');\r\n jQuery(document).on('click', '.spbc_long_description__show', function() {\r\n self = jQuery(this);\r\n spbcSettingsShowDescription(self, self.attr('setting'));\r\n });\r\n\r\n jQuery(document).off( 'click', '.spbc_long_recommendation__show');\r\n jQuery(document).on('click', '.spbc_long_recommendation__show', function() {\r\n self = jQuery(this);\r\n spbcSettingsShowRecommendation(self, self.attr('setting'));\r\n });\r\n\r\n if (params.additional) {\r\n switch (params.additional.action) {\r\n case 'highlight':\r\n spbcHighlightElement(params.additional.target, params.additional.times);\r\n break;\r\n case 'click':\r\n setTimeout(function() {\r\n jQuery('#'+params.additional.target).click();\r\n }, 500);\r\n break;\r\n }\r\n }\r\n\r\n jQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function() {\r\n jQuery('.spbc_hint-send_'+data.tab_name).hide();\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\r\n {callback: spbcSendLogsCallback},\r\n );\r\n });\r\n\r\n // scroll to anchor\r\n if (window.location.hash) {\r\n document.getElementById(window.location.hash.substring(1)).scrollIntoView();\r\n }\r\n\r\n document.dispatchEvent(\r\n new CustomEvent( 'spbctTabLoaded', {\r\n bubbles: true,\r\n detail: {tab: data.tab_name},\r\n } ),\r\n );\r\n\r\n if (typeof spbcHighlightCriticalFilesNotice === 'function') {\r\n spbcHighlightCriticalFilesNotice(false);\r\n }\r\n\r\n spbcSaveSettingsButtonMobileLayout();\r\n window.addEventListener('resize', (event) => {\r\n spbcSaveSettingsButtonMobileLayout();\r\n });\r\n}\r\n\r\n/**\r\n * A chunk to hide the custom element \"submit button\" on large screen or make sticky on mobile\r\n */\r\nfunction spbcSaveSettingsButtonMobileLayout() {\r\n const selector = document.querySelector('div[name=\"spbc_settings--save_button_custom\"]');\r\n if (selector) {\r\n if (window.innerWidth > 900) {\r\n selector.style.display = 'none';\r\n } else {\r\n selector.style.display = 'flex';\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Sends logs\r\n *\r\n * @param {*} result\r\n * @param {*} data\r\n * @param {*} params\r\n * @param {*} obj\r\n */\r\nfunction spbcSendLogsCallback(result, data, params, obj) {\r\n jQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\r\n spbcSwitchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\r\n}\r\n\r\n/**\r\n * Disables/enables settings by ID\r\n *\r\n * @param {array} settingsIDs\r\n * @param {number} enable\r\n */\r\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable) { // eslint-disable-line no-unused-vars\r\n if (typeof settingsIDs === 'string') {\r\n tmp = [];\r\n tmp.push(settingsIDs);\r\n settingsIDs = tmp;\r\n }\r\n\r\n enable = typeof enable === 'undefined' ? null : +enable;\r\n\r\n settingsIDs.forEach(function(settingID, i, arr) {\r\n let elem = document.getElementById('spbc_setting_'+settingID);\r\n let doDisable = function() {\r\n elem.setAttribute('disabled', 'disabled');\r\n };\r\n let doEnable = function() {\r\n elem.removeAttribute('disabled');\r\n };\r\n\r\n if (enable !== null) {\r\n // Set\r\n enable === 1 ? doEnable() : doDisable();\r\n } else {\r\n // Switch\r\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Recursive in case children found!\r\n *\r\n * Settings dependencies\r\n *\r\n * @param {array} settingNames\r\n * @param {number} enable\r\n */\r\nfunction spbcSettingsDependencies(settingNames, enable) { // eslint-disable-line no-unused-vars\r\n // Cast settingNames to array\r\n settingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\r\n enable = typeof enable === 'undefined' ? +event.target.checked : +enable;\r\n\r\n settingNames.forEach(function(settingName, i, arr) {\r\n document.getElementsByName('spbc_settings['+settingName+']')\r\n .forEach(function( elem, i, arr ) {\r\n let doDisable = function() {\r\n elem.setAttribute('disabled', 'disabled');\r\n };\r\n let doEnable = function() {\r\n elem.removeAttribute('disabled');\r\n };\r\n if (enable !== null) {\r\n // Set\r\n enable === 1 ? doEnable() : doDisable();\r\n } else {\r\n // Switch\r\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\r\n }\r\n\r\n let children = elem.getAttribute('children');\r\n if ( children !== null ) {\r\n spbcSettingsDependencies(children, enable && elem.checked);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Shows description\r\n *\r\n * @param {object} label\r\n * @param {string} settingId\r\n */\r\nfunction spbcSettingsShowDescription(label, settingId) {\r\n let removeDescFunc = function(e) {\r\n if (\r\n typeof e === 'undefined' ||\r\n (\r\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\r\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\r\n ) && !jQuery(e.target).hasClass('spbc_long_description__show')\r\n ) {\r\n jQuery('.spbc_long_desc').remove();\r\n jQuery(document).off('click', removeDescFunc);\r\n }\r\n };\r\n\r\n removeDescFunc();\r\n\r\n label.after('
');\r\n let obj = jQuery('#spbc_long_desc__'+settingId);\r\n obj.append('')\r\n .append('
')\r\n .css({\r\n top: label.position().top + 25,\r\n left: label.position().left + 5,\r\n });\r\n\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings__get_description', setting_id: settingId},\r\n {\r\n spinner: obj.children('img'),\r\n callback: function(result, data, params, obj) {\r\n obj.empty()\r\n .append('
')\r\n .append('')\r\n .append('

'+result.title+'

')\r\n .append('

'+result.desc+'

');\r\n\r\n jQuery(document).on('click', removeDescFunc);\r\n },\r\n },\r\n obj,\r\n );\r\n}\r\n\r\n/**\r\n * Shows recommendation\r\n *\r\n * @param {object} label\r\n * @param {string} settingId\r\n */\r\nfunction spbcSettingsShowRecommendation(label, settingId) {\r\n let removeRecommendationFunc = function(e) {\r\n if (\r\n typeof e === 'undefined' ||\r\n (\r\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\r\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\r\n ) && !jQuery(e.target).hasClass('spbc_long_recommendation__show')\r\n ) {\r\n jQuery('.spbc_long_desc').remove();\r\n jQuery(document).off('click', removeRecommendationFunc);\r\n }\r\n };\r\n\r\n removeRecommendationFunc();\r\n\r\n label.after('
');\r\n let obj = jQuery('#spbc_long_desc__'+settingId);\r\n obj.append('')\r\n .append('
')\r\n .css({\r\n top: label.position().top + 25,\r\n left: label.position().left + 5,\r\n });\r\n\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings__get_recommendation', setting_id: settingId},\r\n {\r\n spinner: obj.children('img'),\r\n callback: function(result, data, params, obj) {\r\n obj.empty()\r\n .append('
')\r\n .append('')\r\n .append('

'+result.title+'

')\r\n .append('

'+result.desc+'

');\r\n\r\n jQuery(document).on('click', removeRecommendationFunc);\r\n },\r\n },\r\n obj,\r\n );\r\n}\r\n\r\n/**\r\n * Shows/hides full text\r\n */\r\nfunction spbcStartShowHide() { // eslint-disable-line no-unused-vars\r\n jQuery('.spbcShortText')\r\n .off('mouseover' )\r\n .on('mouseover', function() {\r\n jQuery(this).next().show();\r\n })\r\n .off('mouseout' )\r\n .on('mouseout', function() {\r\n jQuery(this).next().hide();\r\n });\r\n jQuery('.spbcFullText')\r\n .off('mouseout' )\r\n .on('mouseout', function() {\r\n jQuery(this).hide();\r\n })\r\n .off('mouseover' )\r\n .on('mouseover', function() {\r\n jQuery(this).show();\r\n });\r\n}\r\n\r\n/**\r\n * Generate and save confirmation code\r\n *\r\n * @return {object}\r\n */\r\nfunction spbctGenerateConfirmationCode() {\r\n let data = {};\r\n let res = {};\r\n res.success = false;\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_generate_confirmation_code';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n res.success = true;\r\n } else {\r\n res.text = result.data;\r\n }\r\n },\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Check confirmation code\r\n *\r\n * @param {object} radioButton\r\n * @param {number} timeout\r\n * @param {object} timer\r\n */\r\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\r\n let element = radioButton;\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_check_confirmation_code';\r\n data.code = jQuery('#confirmation-code input').val();\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n jQuery('[name *= 2fa__enable]').attr('checked', '');\r\n element.checked = true;\r\n jQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\r\n jQuery('#spbc_setting_2fa__roles > option:first').attr('selected', 'selected');\r\n clearTimeout( timeout );\r\n timer.remove();\r\n jQuery('#confirmation-code').dialog( 'close' );\r\n } else {\r\n alert('Code verification failed!');\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Checking current account status for renew notice\r\n */\r\nfunction spbcBannerCheck() {\r\n let bannerChecker = setInterval( function() {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings__check_renew_banner'},\r\n {\r\n callback: function(result, data, params, obj) {\r\n if (result.close_renew_banner) {\r\n if (jQuery('#spbc_renew_notice').length) {\r\n jQuery('#spbc_renew_notice').hide('slow');\r\n }\r\n if (jQuery('#spbc_trial_notice').length) {\r\n jQuery('#spbc_trial_notice').hide('slow');\r\n }\r\n clearInterval(bannerChecker);\r\n }\r\n },\r\n },\r\n );\r\n }, 60000);\r\n}\r\n\r\njQuery(document).ready(function() {\r\n document.dispatchEvent(new CustomEvent('spbctPage', {bubbles: true}));\r\n document.dispatchEvent(new CustomEvent('spbctPageTabs', {bubbles: true}));\r\n document.dispatchEvent(new CustomEvent('spbctMobAboutCT', {bubbles: true}));\r\n\r\n jQuery('#spbc_gdpr_open_modal').on('click', function() {\r\n jQuery('#gdpr_dialog').dialog({\r\n modal: true,\r\n show: true,\r\n position: {my: 'center', at: 'center', of: window},\r\n width: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\r\n height: 'auto',\r\n title: 'GDPR compliance',\r\n draggable: false,\r\n resizable: false,\r\n closeText: 'Close',\r\n });\r\n });\r\n\r\n // Checking email receiving possibility for activation 2FA\r\n jQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e) {\r\n e.preventDefault();\r\n\r\n let view = '
' +\r\n '
';\r\n jQuery('#confirmation-code--resend').attr('disabled', 'disabled')\r\n .append(view);\r\n let enableResend = setTimeout(function() {\r\n jQuery('#confirmation-code--resend').removeAttr('disabled');\r\n jQuery('#confirmation-code--resend>.circle').remove();\r\n }, 30000);\r\n\r\n let res = spbctGenerateConfirmationCode();\r\n if ( res.success ) {\r\n jQuery('#confirmation-code input').val('');\r\n jQuery('#confirmation-code').dialog({\r\n modal: true,\r\n title: 'Confirmation code',\r\n width: 310,\r\n buttons: {\r\n Cancel: function() {\r\n jQuery( this ).dialog( 'close' );\r\n clearTimeout( enableResend );\r\n jQuery('#confirmation-code--resend>.circle').remove();\r\n },\r\n Ok: function() {\r\n let selector = '#confirmation-code--resend>.circle';\r\n spbctCheckConfirmationCode(e.target, enableResend, jQuery(selector));\r\n },\r\n },\r\n draggable: false,\r\n resizable: false,\r\n });\r\n } else {\r\n alert(res.text);\r\n }\r\n });\r\n\r\n if (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\r\n spbcBannerCheck();\r\n }\r\n\r\n // Sync button migrated to react\r\n\r\n if ( spbcSettings.key_changed ) {\r\n jQuery('#spbc_button__sync').click();\r\n }\r\n\r\n // Get Key Auto button\r\n jQuery(document).on('click', '#spbc_setting_get_key_auto', function() {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_get_key_auto', ct_admin_timezone: jQuery('#spbc_admin_timezone').val()},\r\n {\r\n timeout: 25000,\r\n button: document.getElementById('spbc_setting_get_key_auto' ),\r\n spinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n jQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);\r\n }, 2000);\r\n if (result.reload) {\r\n document.location.reload();\r\n }\r\n if (result.msg) {\r\n spbcModal.open().putError(result.msg);\r\n }\r\n if (result.getTemplates) {\r\n spbcModal.loaded = result.getTemplates;\r\n spbcModal.open();\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n // Import settings\r\n jQuery( document ).on('click', '#spbc_settings_templates_import_button', function() {\r\n jQuery('#spbc-ajax-result').remove();\r\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\r\n let templateNameInput = jQuery('#spbc_settings_templates_import_name');\r\n templateNameInput.css('border-color', 'inherit');\r\n if ( typeof optionSelected.data('id') === 'undefined' ) {\r\n console.log( 'Attribute \"data-id\" not set for the option.' );\r\n return;\r\n }\r\n let data = {\r\n 'template_id': optionSelected.data('id'),\r\n 'template_name': optionSelected.data('name'),\r\n 'settings': optionSelected.data('settings'),\r\n };\r\n let button = this;\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings_templates_import', data: data},\r\n {\r\n timeout: 25000,\r\n button: button,\r\n spinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n let selector;\r\n if (result.success) {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n jQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);\r\n }, 2000);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n setTimeout(function() {\r\n spbcModal.close();\r\n }, 2000);\r\n } else {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n // Export settings\r\n jQuery( document ).on('click', '#spbc_settings_templates_export_button', function() {\r\n jQuery('#spbc-ajax-result').remove();\r\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\r\n let templateNameInput = jQuery('#spbc_settings_templates_export_name');\r\n templateNameInput.css('border-color', 'inherit');\r\n if ( typeof optionSelected.data('id') === 'undefined' ) {\r\n console.log( 'Attribute \"data-id\" not set for the option.' );\r\n return;\r\n }\r\n let data;\r\n if ( optionSelected.data('id') === 'new_template' ) {\r\n let templateName = templateNameInput.val();\r\n if ( templateName === '' ) {\r\n templateNameInput.css('border-color', 'red');\r\n return;\r\n }\r\n data = {\r\n 'template_name': templateName,\r\n };\r\n } else {\r\n data = {\r\n 'template_id': optionSelected.data('id'),\r\n };\r\n }\r\n let button = this;\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings_templates_export', data: data},\r\n {\r\n timeout: 25000,\r\n button: button,\r\n spinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n let selector;\r\n if (result.success) {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n jQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);\r\n }, 2000);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n setTimeout(function() {\r\n spbcModal.close();\r\n }, 2000);\r\n } else {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n // Reset settings\r\n jQuery( document ).on('click', '#spbc_settings_templates_reset_button', function() {\r\n let button = this;\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_settings_templates_reset'},\r\n {\r\n timeout: 25000,\r\n button: button,\r\n spinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\r\n callback: function(result, data, params, obj) {\r\n let selector;\r\n if (result.success) {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n jQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\r\n setTimeout(function() {\r\n jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);\r\n }, 2000);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n setTimeout(function() {\r\n spbcModal.close();\r\n }, 2000);\r\n } else {\r\n selector = '

' + result.data + '

';\r\n jQuery( selector ).insertAfter( jQuery(button) );\r\n }\r\n },\r\n },\r\n );\r\n });\r\n\r\n jQuery(document).on('change', '#spbc_settings_templates_export', function() {\r\n let optionSelected = jQuery('option:selected', this);\r\n if ( optionSelected.data('id') === 'new_template' ) {\r\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\r\n } else {\r\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\r\n }\r\n });\r\n\r\n //* TAB_CONTROL\r\n // migrated to react\r\n //* / REFRESH TAB IF ctrl+F5 END\r\n\r\n /**\r\n * Change cleantalk account email\r\n */\r\n jQuery(document).on('click', '#spbc-change-account-email', function(e) {\r\n e.preventDefault();\r\n\r\n let $this = jQuery(this);\r\n let accountEmailField = jQuery('#spbc-account-email');\r\n let accountEmail = accountEmailField.text();\r\n\r\n spbcToggleClass($this, 'active');\r\n\r\n if ($this.hasClass('active')) {\r\n $this.text($this.data('save-text'));\r\n accountEmailField.attr('contenteditable', 'true');\r\n accountEmailField.focus();\r\n accountEmailField.on('keydown', function(e) {\r\n if (e.code === 'Enter') {\r\n e.preventDefault();\r\n }\r\n });\r\n accountEmailField.on('input', function(e) {\r\n if (e.inputType === 'insertParagraph') {\r\n e.preventDefault();\r\n }\r\n });\r\n } else {\r\n spbcSendAJAXRequest(\r\n {\r\n action: 'spbc_update_account_email',\r\n accountEmail: accountEmail,\r\n },\r\n {\r\n timeout: 5000,\r\n callback: function(result, data, params, obj) {\r\n if (result.success !== undefined && result.success === 'ok') {\r\n if (result.manuallyLink !== undefined) {\r\n jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink);\r\n }\r\n }\r\n\r\n if (result.error !== undefined) {\r\n jQuery('#spbc-account-email').css('border-color', 'red');\r\n }\r\n },\r\n errorOutput: function(msg) {\r\n spbcModal.loaded = msg;\r\n spbcModal.open();\r\n },\r\n },\r\n );\r\n\r\n accountEmailField.attr('contenteditable', 'false');\r\n $this.text($this.data('default-text'));\r\n }\r\n });\r\n\r\n jQuery(document).on('click', '.spbct_notice-dismiss', function(e) {\r\n let classListNotice = this.parentElement.classList;\r\n let classNoticeForClose = classListNotice[classListNotice.length - 1];\r\n\r\n document.querySelectorAll('.' + classNoticeForClose).forEach((element) => {\r\n element.parentElement.setAttribute('style', 'display:none;');\r\n spbcSetCookie(classNoticeForClose, 1, 86400 * 30);\r\n });\r\n });\r\n});\r\n\r\n/**\r\n * Toggle class for DOM elements\r\n * @param {Array} arr\r\n * @param {string} className\r\n * @return {void}\r\n */\r\nfunction spbcToggleClass(arr, className) {\r\n for (let i=0; i {\n spbcSaveSettingsButtonMobileLayout();\n });\n}\n\n/**\n * A chunk to hide the custom element \"submit button\" on large screen or make sticky on mobile\n */\nfunction spbcSaveSettingsButtonMobileLayout() {\n const selector = document.querySelector('div[name=\"spbc_settings--save_button_custom\"]');\n if (selector) {\n if (window.innerWidth > 900) {\n selector.style.display = 'none';\n } else {\n selector.style.display = 'flex';\n }\n }\n}\n\n/**\n * Sends logs\n *\n * @param {*} result\n * @param {*} data\n * @param {*} params\n * @param {*} obj\n */\nfunction spbcSendLogsCallback(result, data, params, obj) {\n jQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n spbcSwitchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n/**\n * Disables/enables settings by ID\n *\n * @param {array} settingsIDs\n * @param {number} enable\n */\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable) { // eslint-disable-line no-unused-vars\n if (typeof settingsIDs === 'string') {\n tmp = [];\n tmp.push(settingsIDs);\n settingsIDs = tmp;\n }\n\n enable = typeof enable === 'undefined' ? null : +enable;\n\n settingsIDs.forEach(function(settingID, i, arr) {\n let elem = document.getElementById('spbc_setting_'+settingID);\n let doDisable = function() {\n elem.setAttribute('disabled', 'disabled');\n };\n let doEnable = function() {\n elem.removeAttribute('disabled');\n };\n\n if (enable !== null) {\n // Set\n enable === 1 ? doEnable() : doDisable();\n } else {\n // Switch\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\n }\n });\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n * @param {array} settingNames\n * @param {number} enable\n */\nfunction spbcSettingsDependencies(settingNames, enable) { // eslint-disable-line no-unused-vars\n // Cast settingNames to array\n settingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n enable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n settingNames.forEach(function(settingName, i, arr) {\n document.getElementsByName('spbc_settings['+settingName+']')\n .forEach(function( elem, i, arr ) {\n let doDisable = function() {\n elem.setAttribute('disabled', 'disabled');\n };\n let doEnable = function() {\n elem.removeAttribute('disabled');\n };\n if (enable !== null) {\n // Set\n enable === 1 ? doEnable() : doDisable();\n } else {\n // Switch\n elem.getAttribute('disabled') === null ? doDisable() : doEnable();\n }\n\n let children = elem.getAttribute('children');\n if ( children !== null ) {\n spbcSettingsDependencies(children, enable && elem.checked);\n }\n });\n });\n}\n\n/**\n * Shows description\n *\n * @param {object} label\n * @param {string} settingId\n */\nfunction spbcSettingsShowDescription(label, settingId) {\n let removeDescFunc = function(e) {\n if (\n typeof e === 'undefined' ||\n (\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\n ) && !jQuery(e.target).hasClass('spbc_long_description__show')\n ) {\n jQuery('.spbc_long_desc').remove();\n jQuery(document).off('click', removeDescFunc);\n }\n };\n\n removeDescFunc();\n\n label.after('
');\n let obj = jQuery('#spbc_long_desc__'+settingId);\n obj.append('')\n .append('
')\n .css({\n top: label.position().top + 25,\n left: label.position().left + 5,\n });\n\n\n spbcSendAJAXRequest(\n {action: 'spbc_settings__get_description', setting_id: settingId},\n {\n spinner: obj.children('img'),\n callback: function(result, data, params, obj) {\n obj.empty()\n .append('
')\n .append('')\n .append('

'+result.title+'

')\n .append('

'+result.desc+'

');\n\n jQuery(document).on('click', removeDescFunc);\n },\n },\n obj,\n );\n}\n\n/**\n * Shows recommendation\n *\n * @param {object} label\n * @param {string} settingId\n */\nfunction spbcSettingsShowRecommendation(label, settingId) {\n let removeRecommendationFunc = function(e) {\n if (\n typeof e === 'undefined' ||\n (\n jQuery(e.target).parent('.spbc_long_desc').length == 0 ||\n jQuery(e.target).hasClass('spbc_long_desc__cancel')\n ) && !jQuery(e.target).hasClass('spbc_long_recommendation__show')\n ) {\n jQuery('.spbc_long_desc').remove();\n jQuery(document).off('click', removeRecommendationFunc);\n }\n };\n\n removeRecommendationFunc();\n\n label.after('
');\n let obj = jQuery('#spbc_long_desc__'+settingId);\n obj.append('')\n .append('
')\n .css({\n top: label.position().top + 25,\n left: label.position().left + 5,\n });\n\n\n spbcSendAJAXRequest(\n {action: 'spbc_settings__get_recommendation', setting_id: settingId},\n {\n spinner: obj.children('img'),\n callback: function(result, data, params, obj) {\n obj.empty()\n .append('
')\n .append('')\n .append('

'+result.title+'

')\n .append('

'+result.desc+'

');\n\n jQuery(document).on('click', removeRecommendationFunc);\n },\n },\n obj,\n );\n}\n\n/**\n * Shows/hides full text\n */\nfunction spbcStartShowHide() { // eslint-disable-line no-unused-vars\n jQuery('.spbcShortText')\n .off('mouseover' )\n .on('mouseover', function() {\n jQuery(this).next().show();\n })\n .off('mouseout' )\n .on('mouseout', function() {\n jQuery(this).next().hide();\n });\n jQuery('.spbcFullText')\n .off('mouseout' )\n .on('mouseout', function() {\n jQuery(this).hide();\n })\n .off('mouseover' )\n .on('mouseover', function() {\n jQuery(this).show();\n });\n}\n\n/**\n * Generate and save confirmation code\n *\n * @return {object}\n */\nfunction spbctGenerateConfirmationCode() {\n let data = {};\n let res = {};\n res.success = false;\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_generate_confirmation_code';\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n res.success = true;\n } else {\n res.text = result.data;\n }\n },\n });\n return res;\n}\n\n/**\n * Check confirmation code\n *\n * @param {object} radioButton\n * @param {number} timeout\n * @param {object} timer\n */\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n let element = radioButton;\n let data = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_check_confirmation_code';\n data.code = jQuery('#confirmation-code input').val();\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n jQuery('[name *= 2fa__enable]').attr('checked', '');\n element.checked = true;\n jQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n jQuery('#spbc_setting_2fa__roles > option:first').attr('selected', 'selected');\n clearTimeout( timeout );\n timer.remove();\n jQuery('#confirmation-code').dialog( 'close' );\n } else {\n alert('Code verification failed!');\n }\n },\n });\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbcBannerCheck() {\n let bannerChecker = setInterval( function() {\n spbcSendAJAXRequest(\n {action: 'spbc_settings__check_renew_banner'},\n {\n callback: function(result, data, params, obj) {\n if (result.close_renew_banner) {\n if (jQuery('#spbc_renew_notice').length) {\n jQuery('#spbc_renew_notice').hide('slow');\n }\n if (jQuery('#spbc_trial_notice').length) {\n jQuery('#spbc_trial_notice').hide('slow');\n }\n clearInterval(bannerChecker);\n }\n },\n },\n );\n }, 60000);\n}\n\njQuery(document).ready(function() {\n document.dispatchEvent(new CustomEvent('spbctPage', {bubbles: true}));\n document.dispatchEvent(new CustomEvent('spbctPageTabs', {bubbles: true}));\n document.dispatchEvent(new CustomEvent('spbctMobAboutCT', {bubbles: true}));\n\n jQuery('#spbc_gdpr_open_modal').on('click', function() {\n jQuery('#gdpr_dialog').dialog({\n modal: true,\n show: true,\n position: {my: 'center', at: 'center', of: window},\n width: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n height: 'auto',\n title: 'GDPR compliance',\n draggable: false,\n resizable: false,\n closeText: 'Close',\n });\n });\n\n // Checking email receiving possibility for activation 2FA\n jQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e) {\n e.preventDefault();\n\n let view = '
' +\n '
';\n jQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n .append(view);\n let enableResend = setTimeout(function() {\n jQuery('#confirmation-code--resend').removeAttr('disabled');\n jQuery('#confirmation-code--resend>.circle').remove();\n }, 30000);\n\n let res = spbctGenerateConfirmationCode();\n if ( res.success ) {\n jQuery('#confirmation-code input').val('');\n jQuery('#confirmation-code').dialog({\n modal: true,\n title: 'Confirmation code',\n width: 310,\n buttons: {\n Cancel: function() {\n jQuery( this ).dialog( 'close' );\n clearTimeout( enableResend );\n jQuery('#confirmation-code--resend>.circle').remove();\n },\n Ok: function() {\n let selector = '#confirmation-code--resend>.circle';\n spbctCheckConfirmationCode(e.target, enableResend, jQuery(selector));\n },\n },\n draggable: false,\n resizable: false,\n });\n } else {\n alert(res.text);\n }\n });\n\n if (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n spbcBannerCheck();\n }\n\n // Sync button migrated to react\n\n if ( spbcSettings.key_changed ) {\n jQuery('#spbc_button__sync').click();\n }\n\n // Get Key Auto button\n jQuery(document).on('click', '#spbc_setting_get_key_auto', function() {\n spbcSendAJAXRequest(\n {action: 'spbc_get_key_auto', ct_admin_timezone: jQuery('#spbc_admin_timezone').val()},\n {\n timeout: 25000,\n button: document.getElementById('spbc_setting_get_key_auto' ),\n spinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n jQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);\n }, 2000);\n if (result.reload) {\n document.location.reload();\n }\n if (result.msg) {\n spbcModal.open().putError(result.msg);\n }\n if (result.getTemplates) {\n spbcModal.loaded = result.getTemplates;\n spbcModal.open();\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n }\n },\n },\n );\n });\n\n // Import settings\n jQuery( document ).on('click', '#spbc_settings_templates_import_button', function() {\n jQuery('#spbc-ajax-result').remove();\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n let templateNameInput = jQuery('#spbc_settings_templates_import_name');\n templateNameInput.css('border-color', 'inherit');\n if ( typeof optionSelected.data('id') === 'undefined' ) {\n console.log( 'Attribute \"data-id\" not set for the option.' );\n return;\n }\n let data = {\n 'template_id': optionSelected.data('id'),\n 'template_name': optionSelected.data('name'),\n 'settings': optionSelected.data('settings'),\n };\n let button = this;\n spbcSendAJAXRequest(\n {action: 'spbc_settings_templates_import', data: data},\n {\n timeout: 25000,\n button: button,\n spinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n let selector;\n if (result.success) {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n jQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);\n }, 2000);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n setTimeout(function() {\n spbcModal.close();\n }, 2000);\n } else {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n }\n },\n },\n );\n });\n\n // Export settings\n jQuery( document ).on('click', '#spbc_settings_templates_export_button', function() {\n jQuery('#spbc-ajax-result').remove();\n let optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n let templateNameInput = jQuery('#spbc_settings_templates_export_name');\n templateNameInput.css('border-color', 'inherit');\n if ( typeof optionSelected.data('id') === 'undefined' ) {\n console.log( 'Attribute \"data-id\" not set for the option.' );\n return;\n }\n let data;\n if ( optionSelected.data('id') === 'new_template' ) {\n let templateName = templateNameInput.val();\n if ( templateName === '' ) {\n templateNameInput.css('border-color', 'red');\n return;\n }\n data = {\n 'template_name': templateName,\n };\n } else {\n data = {\n 'template_id': optionSelected.data('id'),\n };\n }\n let button = this;\n spbcSendAJAXRequest(\n {action: 'spbc_settings_templates_export', data: data},\n {\n timeout: 25000,\n button: button,\n spinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n let selector;\n if (result.success) {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n jQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);\n }, 2000);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n setTimeout(function() {\n spbcModal.close();\n }, 2000);\n } else {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n }\n },\n },\n );\n });\n\n // Reset settings\n jQuery( document ).on('click', '#spbc_settings_templates_reset_button', function() {\n let button = this;\n spbcSendAJAXRequest(\n {action: 'spbc_settings_templates_reset'},\n {\n timeout: 25000,\n button: button,\n spinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n callback: function(result, data, params, obj) {\n let selector;\n if (result.success) {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n jQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n setTimeout(function() {\n jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);\n }, 2000);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n setTimeout(function() {\n spbcModal.close();\n }, 2000);\n } else {\n selector = '

' + result.data + '

';\n jQuery( selector ).insertAfter( jQuery(button) );\n }\n },\n },\n );\n });\n\n jQuery(document).on('change', '#spbc_settings_templates_export', function() {\n let optionSelected = jQuery('option:selected', this);\n if ( optionSelected.data('id') === 'new_template' ) {\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n } else {\n jQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n }\n });\n\n //* TAB_CONTROL\n // migrated to react\n //* / REFRESH TAB IF ctrl+F5 END\n\n /**\n * Change cleantalk account email\n */\n jQuery(document).on('click', '#spbc-change-account-email', function(e) {\n e.preventDefault();\n\n let $this = jQuery(this);\n let accountEmailField = jQuery('#spbc-account-email');\n let accountEmail = accountEmailField.text();\n\n spbcToggleClass($this, 'active');\n\n if ($this.hasClass('active')) {\n $this.text($this.data('save-text'));\n accountEmailField.attr('contenteditable', 'true');\n accountEmailField.focus();\n accountEmailField.on('keydown', function(e) {\n if (e.code === 'Enter') {\n e.preventDefault();\n }\n });\n accountEmailField.on('input', function(e) {\n if (e.inputType === 'insertParagraph') {\n e.preventDefault();\n }\n });\n } else {\n spbcSendAJAXRequest(\n {\n action: 'spbc_update_account_email',\n accountEmail: accountEmail,\n },\n {\n timeout: 5000,\n callback: function(result, data, params, obj) {\n if (result.success !== undefined && result.success === 'ok') {\n if (result.manuallyLink !== undefined) {\n jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink);\n }\n }\n\n if (result.error !== undefined) {\n jQuery('#spbc-account-email').css('border-color', 'red');\n }\n },\n errorOutput: function(msg) {\n spbcModal.loaded = msg;\n spbcModal.open();\n },\n },\n );\n\n accountEmailField.attr('contenteditable', 'false');\n $this.text($this.data('default-text'));\n }\n });\n\n jQuery(document).on('click', '.spbct_notice-dismiss', function(e) {\n let classListNotice = this.parentElement.classList;\n let classNoticeForClose = classListNotice[classListNotice.length - 1];\n\n document.querySelectorAll('.' + classNoticeForClose).forEach((element) => {\n element.parentElement.setAttribute('style', 'display:none;');\n spbcSetCookie(classNoticeForClose, 1, 86400 * 30);\n });\n });\n});\n\n/**\n * Toggle class for DOM elements\n * @param {Array} arr\n * @param {string} className\n * @return {void}\n */\nfunction spbcToggleClass(arr, className) {\n for (let i=0; i');\r\n\r\n let spinner = jQuery('#spbc_file_view_preloader');\r\n let sizeMultiplier = (wpWrap.width() * 0.0004);\r\n\r\n spinner.height(128 * sizeMultiplier);\r\n spinner.width(128 * sizeMultiplier);\r\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\r\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\r\n\r\n const firstSelectorId = jQuery('#fswatcher__first_date').val();\r\n const secondSelectorId = jQuery('#fswatcher__second_date').val();\r\n\r\n let data = {\r\n action: 'spbct_fswatcher_view_file',\r\n fswatcher_file_path: el.dataset.path,\r\n fswatcher__first_date: firstSelectorId,\r\n fswatcher__second_date: secondSelectorId,\r\n };\r\n\r\n let callback = function(response) {\r\n let content = '';\r\n if (typeof response.error !== 'undefined') {\r\n content = response.error;\r\n } else if (typeof response.data !== 'undefined') {\r\n content = response.data;\r\n } else {\r\n content = 'Unknown error on reading file. Data is empty.';\r\n }\r\n content = content.split('\\n');\r\n let dialogWindow = jQuery('#spbc_dialog');\r\n dialogWindow.empty();\r\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\r\n let rowTemplate = '
' +\r\n '%s' +\r\n '

%s

' +\r\n '
<' +\r\n '/div>';\r\n\r\n content.forEach((line, index) => {\r\n dialogWindow.append(rowTemplate.printf(index + 1, line));\r\n });\r\n\r\n let contentHeight = Object.keys(content).length * 19 < 76 ? 76 : Object.keys(content).length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\r\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\r\n\r\n dialogWindow.css({\r\n height: height,\r\n overflow: overflow,\r\n });\r\n };\r\n\r\n spbcSendAJAXRequest(data, {callback: callback});\r\n}\r\n\r\n/**\r\n * Try to decode JSON string from site response.\r\n * @param {string} response\r\n * @return {obj} Json parsed obj or error obj.\r\n */\r\nfunction FSWDecodeJSON(response) {\r\n try {\r\n return JSON.parse(response);\r\n } catch (e) {\r\n return {'error': e};\r\n }\r\n}\r\n\r\n/**\r\n * Run rendering comparison table in dependence of response object\r\n * @param {{}} responseDataObj\r\n */\r\nfunction renderFSWatcherTableContent(responseDataObj) {\r\n fsWatcherTableBody.innerHTML = '';\r\n for (const dataSetName of availableFSWDataSetNames) {\r\n if (handleFSWDataObject(responseDataObj, dataSetName)) {\r\n noFSWChangesDetected = false;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Validate response object from site.\r\n * @param {obj} responseDataObj\r\n * @return {*|boolean}\r\n */\r\nfunction validateFSWResponse(responseDataObj) {\r\n if (\r\n !responseDataObj ||\r\n typeof responseDataObj !== 'object'\r\n ) {\r\n return fswatcherTranslations['fs_err_resp_obj'];\r\n }\r\n\r\n if (typeof responseDataObj.error !== 'undefined') {\r\n return responseDataObj.error;\r\n }\r\n\r\n for (const dataSetName of availableFSWDataSetNames) {\r\n if (\r\n !responseDataObj.hasOwnProperty(dataSetName)\r\n ) {\r\n return fswatcherTranslations['fs_err_property'];\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * @param {object} responseDataObj\r\n * @param {string|number} eventType\r\n * @return {boolean}\r\n */\r\nfunction handleFSWDataObject(responseDataObj, eventType) {\r\n const eventsArray = responseDataObj[eventType];\r\n if (eventsArray.length > 0) {\r\n for (let i = 0; i < eventsArray.length; i++) {\r\n const row = convertFSWEventToRow(eventsArray[i], eventType);\r\n renderFSWTableRow(row.path, row.event_type, row.date);\r\n }\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Convert a row of site response to the formatted data.\r\n * @param {object} event contains the date and the file path\r\n * @param {string} eventType contains event type\r\n * @return {{path: string, event_type: string, date: string}} row of the table\r\n */\r\nfunction convertFSWEventToRow(event, eventType) {\r\n let row = {\r\n 'path': 'unknown',\r\n 'event_type': eventType.toUpperCase(),\r\n 'date': 'unknown',\r\n };\r\n\r\n if (event.length === 2) {\r\n if (typeof event[0] === 'string') {\r\n row.path = event[0];\r\n if (row.event_type !== 'DELETED') {\r\n row.path += '
View'; // eslint-disable-line max-len\r\n }\r\n }\r\n if (typeof event[1] === 'string') {\r\n let d = new Date(Number(event[1]) * 1000);\r\n shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\r\n let minutes = String(d.getMinutes()).padStart(2, '0');\r\n let seconds = String(d.getSeconds()).padStart(2, '0');\r\n row.date = shortMonthName(d) +\r\n ' ' +\r\n d.getDate() +\r\n ' ' +\r\n d.getFullYear() +\r\n ' ' +\r\n d.getHours() +\r\n ':' +\r\n minutes +\r\n ':' +\r\n seconds;\r\n }\r\n }\r\n\r\n return row;\r\n}\r\n\r\n/**\r\n * Render the row of FSW table.\r\n * @param {string} path the file path\r\n * @param {string} eventType the event type\r\n * @param {string} date the date of event\r\n */\r\nfunction renderFSWTableRow(path, eventType, date) {\r\n if (eventType === 'no_changes') {\r\n let tr = document.createElement('tr');\r\n let td = document.createElement('td');\r\n td.setAttribute('name', 'fswatcher-event-no-changes');\r\n td.setAttribute('colspan', '3');\r\n td.innerText = fswatcherTranslations['fs_no_changes'];\r\n tr.appendChild(td);\r\n fsWatcherTableBody.appendChild(tr);\r\n return;\r\n }\r\n\r\n let tr = document.createElement('tr');\r\n\r\n let tdPath = document.createElement('td');\r\n tdPath.setAttribute('name', 'fswatcher-event-path');\r\n tdPath.setAttribute('data-before', 'Path');\r\n tdPath.innerHTML = path;\r\n tr.appendChild(tdPath);\r\n\r\n let tdType = document.createElement('td');\r\n tdType.setAttribute('name', 'fswatcher-event-type');\r\n tdType.setAttribute('data-before', 'Event');\r\n tdType.innerText = eventType;\r\n tr.appendChild(tdType);\r\n\r\n let tdDate = document.createElement('td');\r\n tdDate.setAttribute('name', 'fswatcher-event-date');\r\n tdDate.setAttribute('data-before', 'Changed on date');\r\n tdDate.innerText = date;\r\n tr.appendChild(tdDate);\r\n\r\n fsWatcherTableBody.appendChild(tr);\r\n}\r\n\r\n/**\r\n * Filter options for the first selector and disable it to keep it from changes.\r\n */\r\nfunction filterFSWSecondSelector() {\r\n toggleFSWSelectorsInfo(false);\r\n}\r\n\r\n/**\r\n * Filter options for the second selector and disable it to keep it from changes.\r\n */\r\nfunction filterFSWFirstSelector() {\r\n toggleFSWSelectorsInfo(false);\r\n}\r\n\r\n/**\r\n * Reset selectors to its initial statements.\r\n */\r\nfunction resetFSWSelectors() {\r\n for (let i = 0; i < firstFSWSelector.options.length; i++) {\r\n firstFSWSelector.options[i].style.display = 'inherit';\r\n }\r\n for (let i = 0; i < secondFSWSelector.options.length; i++) {\r\n secondFSWSelector.options[i].style.display = 'inherit';\r\n }\r\n secondFSWSelector.removeAttribute('disabled');\r\n firstFSWSelector.removeAttribute('disabled');\r\n}\r\n\r\n/**\r\n * Toggle info string.\r\n * @param {boolean} enable Set logs names if true, disable content if false.\r\n */\r\nfunction toggleFSWSelectorsInfo(enable) {\r\n let infoTag = document.getElementById('spbc--fs-watcher-table-handling-selects-info');\r\n if (\r\n enable &&\r\n typeof firstFSWSelector.options[firstFSWSelector.selectedIndex] !== 'undefined' &&\r\n typeof secondFSWSelector.options[secondFSWSelector.selectedIndex] !== 'undefined'\r\n ) {\r\n const changesCountOnTRS = document.querySelectorAll('#spbc-table-fs_watcher-comparison > tr').length;\r\n const hasNoChangesTD = document.getElementsByName('fswatcher-event-no-changes').length;\r\n const changesCount = hasNoChangesTD > 0 ? 0 : changesCountOnTRS;\r\n\r\n infoTag.style.display = 'inherit';\r\n infoTag.innerHTML= fswatcherTranslations['fs_comparing'] +\r\n ' ' + firstFSWSelector.options[firstFSWSelector.selectedIndex].text + ' ' +\r\n fswatcherTranslations['fs_with'] +\r\n ' ' + secondFSWSelector.options[secondFSWSelector.selectedIndex].text + ' ' +\r\n fswatcherTranslations['fs_total'] +\r\n ' ' + changesCount + '';\r\n } else {\r\n infoTag.innerText = '';\r\n infoTag.style.display = 'none';\r\n }\r\n}\r\n\r\n\r\n"],"names":["let","noFSWChangesDetected","firstFSWSelector","document","getElementById","secondFSWSelector","fsWatcherTableBody","availableFSWDataSetNames","FSWOnload","querySelector","selectedIndex","secondDate","options","length","FSWCompare","Event","e","preventDefault","currentTarget","style","display","firstDate","value","spbcSendAJAXRequest","action","fswatcher__first_date","fswatcher__second_date","callback","response","responseDataObj","FSWDecodeJSON","hasOwnProperty","alert","fswatcherTranslations","console","log","error","validateResult","validateFSWResponse","renderFSWatcherTableContent","renderFSWTableRow","resetFSWSelectors","toggleFSWSelectorsInfo","FSWCreate","button","target","timeout","FSWViewFile","el","wpWrap","jQuery","dialogWindow","spinner","dialog","modal","title","dataset","path","position","my","at","of","window","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","open","event","ui","overflow","height","documentElement","beforeClose","body","empty","append","sizeMultiplier","firstSelectorId","css","left","top","val","secondSelectorId","data","fswatcher_file_path","content","split","forEach","line","index","printf","contentHeight","Object","keys","visibleHeight","JSON","parse","innerHTML","dataSetName","handleFSWDataObject","eventType","eventsArray","i","row","convertFSWEventToRow","event_type","date","minutes","seconds","toUpperCase","d","Date","Number","shortMonthName","Intl","DateTimeFormat","month","format","String","getMinutes","padStart","getSeconds","getDate","getFullYear","getHours","tr","tdDate","createElement","td","setAttribute","innerText","appendChild","tdPath","tdType","filterFSWSecondSelector","filterFSWFirstSelector","removeAttribute","enable","infoTag","changesCountOnTRS","querySelectorAll","changesCount","getElementsByName","text","readyState","addEventListener"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--fswatcher.min.js","sources":["spbc-settings_tab--fswatcher.js"],"sourcesContent":["// if no changes detected after comparison\nlet noFSWChangesDetected = true;\n// first selector elem\nconst firstFSWSelector = document.getElementById('fswatcher__first_date');\n// second selector elem\nconst secondFSWSelector = document.getElementById('fswatcher__second_date');\n// FSW table body\nconst fsWatcherTableBody = document.getElementById('spbc-table-fs_watcher-comparison');\n// available types of events\nconst availableFSWDataSetNames = ['added', 'changed', 'deleted'];\n\nif ( document.readyState !== 'loading' ) {\n FSWOnload(); // eslint-disable-line new-cap\n} else {\n document.addEventListener('DOMContentLoaded', FSWOnload);\n}\n\n// listeners\ndocument.getElementById('fswatcher__compare').addEventListener('click', FSWCompare);\ndocument.getElementById('fswatcher__create_snapshot').addEventListener('click', FSWCreate);\nfirstFSWSelector.addEventListener('change', filterFSWSecondSelector);\nsecondFSWSelector.addEventListener('change', filterFSWFirstSelector);\n\n// eslint-disable-next-line require-jsdoc\nfunction FSWOnload() {\n document.querySelector('#fswatcher__first_date').selectedIndex = 0;\n let secondDate = document.querySelector('#fswatcher__second_date');\n secondDate.selectedIndex = secondDate.options.length - 1;\n FSWCompare(new Event({})); // eslint-disable-line new-cap\n}\n\n/**\n * Main handler function. Run this on the button click.\n * @param {Event} e click event.\n * @return {void|false}\n */\nfunction FSWCompare(e) {\n e.preventDefault();\n\n if (e.currentTarget !== null) {\n document.querySelector('#fsw_preloader_compare').style.display = 'inline';\n }\n\n if ( typeof document.getElementById('fswatcher__first_date') === 'undefined' ||\n typeof document.getElementById('fswatcher__second_date') === 'undefined' ) {\n return false;\n }\n\n let firstDate = document.getElementById('fswatcher__first_date').value;\n let secondDate = document.getElementById('fswatcher__second_date').value;\n\n let data = {\n action: 'spbct_fswatcher_compare',\n fswatcher__first_date: firstDate,\n fswatcher__second_date: secondDate,\n };\n\n let params = {\n callback: function(response) {\n let responseDataObj = {};\n noFSWChangesDetected = true;\n if (typeof response === 'object') {\n responseDataObj = response;\n } else if (typeof response === 'string') {\n responseDataObj = FSWDecodeJSON(response); // eslint-disable-line new-cap\n if (responseDataObj.hasOwnProperty('error')) {\n alert(fswatcherTranslations['fs_err_parse_json']);\n console.log('File System watcher JSON parse error: ' + responseDataObj.error);\n return;\n }\n }\n\n const validateResult = validateFSWResponse(responseDataObj);\n if (true === validateResult) {\n renderFSWatcherTableContent(responseDataObj);\n if (noFSWChangesDetected) {\n renderFSWTableRow( '', 'no_changes', '');\n }\n } else {\n alert(validateResult + ' ' + fswatcherTranslations['fs_err_valid_result'] + ' support@cleantalk.org');\n console.log('File System watcher response validating error: ' + validateResult);\n }\n resetFSWSelectors();\n toggleFSWSelectorsInfo(true);\n document.querySelector('#fsw_preloader_compare').style.display = 'none';\n },\n };\n\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Create snapshot handler.\n * @param {Event} e\n * @constructor\n */\nfunction FSWCreate(e) {\n e.preventDefault();\n\n if (e.currentTarget !== null) {\n document.querySelector('#fsw_preloader_create').style.display = 'inline';\n }\n\n let data = {\n action: 'spbct_fswatcher_create_snapshot',\n };\n\n let params = {\n callback: function(response) {\n if (typeof response === 'string') {\n FSWDecodeJSON(response); // eslint-disable-line new-cap\n }\n document.querySelector('#fsw_preloader_create').style.display = 'none';\n },\n button: e.target,\n timeout: 30000,\n };\n\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * View file content in modal window.\n * @param {HTMLElement} el\n * @constructor\n */\nfunction FSWViewFile(el) { // eslint-disable-line no-unused-vars\n let wpWrap = jQuery('#wpwrap');\n let dialogWindow = jQuery('#spbc_dialog');\n\n dialogWindow.dialog({\n modal: true,\n title: fswatcherTranslations['fs_modal'] + ' ' + el.dataset.path,\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(wpWrap.width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: false,\n resizable: false,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = 'auto';\n jQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n });\n\n dialogWindow.append('\"Wait');\n\n let spinner = jQuery('#spbc_file_view_preloader');\n let sizeMultiplier = (wpWrap.width() * 0.0004);\n\n spinner.height(128 * sizeMultiplier);\n spinner.width(128 * sizeMultiplier);\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\n\n const firstSelectorId = jQuery('#fswatcher__first_date').val();\n const secondSelectorId = jQuery('#fswatcher__second_date').val();\n\n let data = {\n action: 'spbct_fswatcher_view_file',\n fswatcher_file_path: el.dataset.path,\n fswatcher__first_date: firstSelectorId,\n fswatcher__second_date: secondSelectorId,\n };\n\n let callback = function(response) {\n let content = '';\n if (typeof response.error !== 'undefined') {\n content = response.error;\n } else if (typeof response.data !== 'undefined') {\n content = response.data;\n } else {\n content = 'Unknown error on reading file. Data is empty.';\n }\n content = content.split('\\n');\n let dialogWindow = jQuery('#spbc_dialog');\n dialogWindow.empty();\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\n let rowTemplate = '
' +\n '%s' +\n '

%s

' +\n '
<' +\n '/div>';\n\n content.forEach((line, index) => {\n dialogWindow.append(rowTemplate.printf(index + 1, line));\n });\n\n let contentHeight = Object.keys(content).length * 19 < 76 ? 76 : Object.keys(content).length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\n\n dialogWindow.css({\n height: height,\n overflow: overflow,\n });\n };\n\n spbcSendAJAXRequest(data, {callback: callback});\n}\n\n/**\n * Try to decode JSON string from site response.\n * @param {string} response\n * @return {obj} Json parsed obj or error obj.\n */\nfunction FSWDecodeJSON(response) {\n try {\n return JSON.parse(response);\n } catch (e) {\n return {'error': e};\n }\n}\n\n/**\n * Run rendering comparison table in dependence of response object\n * @param {{}} responseDataObj\n */\nfunction renderFSWatcherTableContent(responseDataObj) {\n fsWatcherTableBody.innerHTML = '';\n for (const dataSetName of availableFSWDataSetNames) {\n if (handleFSWDataObject(responseDataObj, dataSetName)) {\n noFSWChangesDetected = false;\n }\n }\n}\n\n/**\n * Validate response object from site.\n * @param {obj} responseDataObj\n * @return {*|boolean}\n */\nfunction validateFSWResponse(responseDataObj) {\n if (\n !responseDataObj ||\n typeof responseDataObj !== 'object'\n ) {\n return fswatcherTranslations['fs_err_resp_obj'];\n }\n\n if (typeof responseDataObj.error !== 'undefined') {\n return responseDataObj.error;\n }\n\n for (const dataSetName of availableFSWDataSetNames) {\n if (\n !responseDataObj.hasOwnProperty(dataSetName)\n ) {\n return fswatcherTranslations['fs_err_property'];\n }\n }\n\n return true;\n}\n\n/**\n * @param {object} responseDataObj\n * @param {string|number} eventType\n * @return {boolean}\n */\nfunction handleFSWDataObject(responseDataObj, eventType) {\n const eventsArray = responseDataObj[eventType];\n if (eventsArray.length > 0) {\n for (let i = 0; i < eventsArray.length; i++) {\n const row = convertFSWEventToRow(eventsArray[i], eventType);\n renderFSWTableRow(row.path, row.event_type, row.date);\n }\n } else {\n return false;\n }\n return true;\n}\n\n/**\n * Convert a row of site response to the formatted data.\n * @param {object} event contains the date and the file path\n * @param {string} eventType contains event type\n * @return {{path: string, event_type: string, date: string}} row of the table\n */\nfunction convertFSWEventToRow(event, eventType) {\n let row = {\n 'path': 'unknown',\n 'event_type': eventType.toUpperCase(),\n 'date': 'unknown',\n };\n\n if (event.length === 2) {\n if (typeof event[0] === 'string') {\n row.path = event[0];\n if (row.event_type !== 'DELETED') {\n row.path += '
View'; // eslint-disable-line max-len\n }\n }\n if (typeof event[1] === 'string') {\n let d = new Date(Number(event[1]) * 1000);\n shortMonthName = new Intl.DateTimeFormat('en-US', {month: 'short'}).format;\n let minutes = String(d.getMinutes()).padStart(2, '0');\n let seconds = String(d.getSeconds()).padStart(2, '0');\n row.date = shortMonthName(d) +\n ' ' +\n d.getDate() +\n ' ' +\n d.getFullYear() +\n ' ' +\n d.getHours() +\n ':' +\n minutes +\n ':' +\n seconds;\n }\n }\n\n return row;\n}\n\n/**\n * Render the row of FSW table.\n * @param {string} path the file path\n * @param {string} eventType the event type\n * @param {string} date the date of event\n */\nfunction renderFSWTableRow(path, eventType, date) {\n if (eventType === 'no_changes') {\n let tr = document.createElement('tr');\n let td = document.createElement('td');\n td.setAttribute('name', 'fswatcher-event-no-changes');\n td.setAttribute('colspan', '3');\n td.innerText = fswatcherTranslations['fs_no_changes'];\n tr.appendChild(td);\n fsWatcherTableBody.appendChild(tr);\n return;\n }\n\n let tr = document.createElement('tr');\n\n let tdPath = document.createElement('td');\n tdPath.setAttribute('name', 'fswatcher-event-path');\n tdPath.setAttribute('data-before', 'Path');\n tdPath.innerHTML = path;\n tr.appendChild(tdPath);\n\n let tdType = document.createElement('td');\n tdType.setAttribute('name', 'fswatcher-event-type');\n tdType.setAttribute('data-before', 'Event');\n tdType.innerText = eventType;\n tr.appendChild(tdType);\n\n let tdDate = document.createElement('td');\n tdDate.setAttribute('name', 'fswatcher-event-date');\n tdDate.setAttribute('data-before', 'Changed on date');\n tdDate.innerText = date;\n tr.appendChild(tdDate);\n\n fsWatcherTableBody.appendChild(tr);\n}\n\n/**\n * Filter options for the first selector and disable it to keep it from changes.\n */\nfunction filterFSWSecondSelector() {\n toggleFSWSelectorsInfo(false);\n}\n\n/**\n * Filter options for the second selector and disable it to keep it from changes.\n */\nfunction filterFSWFirstSelector() {\n toggleFSWSelectorsInfo(false);\n}\n\n/**\n * Reset selectors to its initial statements.\n */\nfunction resetFSWSelectors() {\n for (let i = 0; i < firstFSWSelector.options.length; i++) {\n firstFSWSelector.options[i].style.display = 'inherit';\n }\n for (let i = 0; i < secondFSWSelector.options.length; i++) {\n secondFSWSelector.options[i].style.display = 'inherit';\n }\n secondFSWSelector.removeAttribute('disabled');\n firstFSWSelector.removeAttribute('disabled');\n}\n\n/**\n * Toggle info string.\n * @param {boolean} enable Set logs names if true, disable content if false.\n */\nfunction toggleFSWSelectorsInfo(enable) {\n let infoTag = document.getElementById('spbc--fs-watcher-table-handling-selects-info');\n if (\n enable &&\n typeof firstFSWSelector.options[firstFSWSelector.selectedIndex] !== 'undefined' &&\n typeof secondFSWSelector.options[secondFSWSelector.selectedIndex] !== 'undefined'\n ) {\n const changesCountOnTRS = document.querySelectorAll('#spbc-table-fs_watcher-comparison > tr').length;\n const hasNoChangesTD = document.getElementsByName('fswatcher-event-no-changes').length;\n const changesCount = hasNoChangesTD > 0 ? 0 : changesCountOnTRS;\n\n infoTag.style.display = 'inherit';\n infoTag.innerHTML= fswatcherTranslations['fs_comparing'] +\n ' ' + firstFSWSelector.options[firstFSWSelector.selectedIndex].text + ' ' +\n fswatcherTranslations['fs_with'] +\n ' ' + secondFSWSelector.options[secondFSWSelector.selectedIndex].text + ' ' +\n fswatcherTranslations['fs_total'] +\n ' ' + changesCount + '';\n } else {\n infoTag.innerText = '';\n infoTag.style.display = 'none';\n }\n}\n\n\n"],"names":["let","noFSWChangesDetected","firstFSWSelector","document","getElementById","secondFSWSelector","fsWatcherTableBody","availableFSWDataSetNames","FSWOnload","querySelector","selectedIndex","secondDate","options","length","FSWCompare","Event","e","preventDefault","currentTarget","style","display","firstDate","value","spbcSendAJAXRequest","action","fswatcher__first_date","fswatcher__second_date","callback","response","responseDataObj","FSWDecodeJSON","hasOwnProperty","alert","fswatcherTranslations","console","log","error","validateResult","validateFSWResponse","renderFSWatcherTableContent","renderFSWTableRow","resetFSWSelectors","toggleFSWSelectorsInfo","FSWCreate","button","target","timeout","FSWViewFile","el","wpWrap","jQuery","dialogWindow","spinner","dialog","modal","title","dataset","path","position","my","at","of","window","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","open","event","ui","overflow","height","documentElement","beforeClose","body","empty","append","sizeMultiplier","firstSelectorId","css","left","top","val","secondSelectorId","data","fswatcher_file_path","content","split","forEach","line","index","printf","contentHeight","Object","keys","visibleHeight","JSON","parse","innerHTML","dataSetName","handleFSWDataObject","eventType","eventsArray","i","row","convertFSWEventToRow","event_type","date","minutes","seconds","toUpperCase","d","Date","Number","shortMonthName","Intl","DateTimeFormat","month","format","String","getMinutes","padStart","getSeconds","getDate","getFullYear","getHours","tr","tdDate","createElement","td","setAttribute","innerText","appendChild","tdPath","tdType","filterFSWSecondSelector","filterFSWFirstSelector","removeAttribute","enable","infoTag","changesCountOnTRS","querySelectorAll","changesCount","getElementsByName","text","readyState","addEventListener"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-settings_tab--scanner.min.js.map b/js/spbc-settings_tab--scanner.min.js.map index bac138bc8..a47cf151d 100644 --- a/js/spbc-settings_tab--scanner.min.js.map +++ b/js/spbc-settings_tab--scanner.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["/**\r\n * Show popup tip\r\n *\r\n * @param {object} showIcon\r\n */\r\nfunction spbcPopupTipShow(showIcon) { // eslint-disable-line no-unused-vars\r\n let tipTitle = showIcon.attr('spbc_tip_title') || null;\r\n let tipText = showIcon.attr('spbc_tip_text') || null;\r\n let removeDescFunc = function(e) {\r\n if (\r\n typeof e === 'undefined' ||\r\n (\r\n jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 ||\r\n jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')\r\n )\r\n ) {\r\n jQuery('.spbc_popup_tip--wrapper').hide();\r\n jQuery(document).off('click', removeDescFunc);\r\n }\r\n };\r\n\r\n removeDescFunc();\r\n\r\n showIcon.after('
');\r\n\r\n let obj = jQuery('.spbc_popup_tip--wrapper');\r\n\r\n obj.empty()\r\n .append('
')\r\n .css({\r\n top: showIcon.position().top - 2,\r\n left: showIcon.position().left + 25,\r\n });\r\n obj.append('')\r\n .append('

' + tipTitle + '

')\r\n .append('

' + tipText + '

');\r\n\r\n jQuery(document).on('click', removeDescFunc);\r\n showIcon.parents('tr').on('mouseout', removeDescFunc);\r\n}\r\n\r\n/**\r\n * View file in the scanner\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonFileViewEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_file_view',\r\n file_id: self.parents('.row-actions').attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n spbcReloadAccordion();\r\n });\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Delete file from analysis log\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerAnalysisLogDeleteFromLog(obj) { // eslint-disable-line no-unused-vars\r\n let fileIds = [];\r\n const self = jQuery(obj);\r\n let spinner;\r\n\r\n if ( jQuery(obj).hasClass('tbl-row_action') ) {\r\n fileIds.push(self.parents('.row-actions').attr('uid'));\r\n spinner = self.parent().siblings('.tbl-preloader--tiny');\r\n } else {\r\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select:checked');\r\n if (selectedItems.length === 0) {\r\n alert('Please, select elements.');\r\n return;\r\n }\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n fileIds.push(elementId);\r\n });\r\n spinner = self.children('.tbl-preloader--small');\r\n }\r\n\r\n const data = {\r\n action: 'spbc_scanner_analysis_log_delete_from_log',\r\n file_ids: fileIds,\r\n };\r\n\r\n let params = {\r\n spinner: spinner,\r\n callback: function() {\r\n window.location.reload();\r\n },\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * View page in the scanner\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonPageViewEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_page_view',\r\n page_url: self.parents('.row-actions').attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n },\r\n };\r\n\r\n let wpWrap = jQuery('#wpwrap');\r\n let dialogWindow = jQuery('#spbc_dialog');\r\n\r\n dialogWindow.dialog({\r\n modal: true,\r\n title: 'Loading..',\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(wpWrap.width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: false,\r\n resizable: false,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n });\r\n\r\n dialogWindow.append('\"Wait');\r\n\r\n let spinner = jQuery('#spbc_file_view_preloader');\r\n let sizeMultiplier = (wpWrap.width() * 0.0004);\r\n\r\n spinner.height(128 * sizeMultiplier);\r\n spinner.width(128 * sizeMultiplier);\r\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\r\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\r\n\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Callback for file view\r\n *\r\n * @param {object} result\r\n */\r\nfunction spbcScannerButtonViewCallback(result) { // eslint-disable-line no-unused-vars\r\n let dialogWindow = jQuery('#spbc_dialog');\r\n dialogWindow.empty();\r\n\r\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\r\n\r\n let rowTemplate = '
%s';\r\n rowTemplate += '

%s


';\r\n\r\n /* eslint-disable guard-for-in */\r\n for (let row in result.file) {\r\n dialogWindow.append(rowTemplate.printf(row, result.file[row]));\r\n }\r\n\r\n let contentHeight = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\r\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\r\n\r\n dialogWindow.css({\r\n height: height,\r\n overflow: overflow,\r\n });\r\n\r\n dialogWindow.dialog({\r\n modal: true,\r\n title: ('Loaded: ' + result.file_path),\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(jQuery('#wpwrap').width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: true,\r\n resizable: false,\r\n height: height,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = overflow;\r\n jQuery('#spbc_dialog').height(height);\r\n jQuery('.ui-widget-overlay').on('click', function() {\r\n jQuery('#spbc_dialog').dialog('close');\r\n });\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n });\r\n\r\n console.log('FILE_VIEWED');\r\n}\r\n\r\n/**\r\n * Event for file view bad\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonFileViewBadEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_file_view',\r\n file_id: self.parents('.row-actions').attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewBadFileCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Event for page view bad\r\n *\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonPageViewBadEvent(obj) { // eslint-disable-line no-unused-vars\r\n let self = jQuery(obj);\r\n let data = {\r\n action: 'spbc_scanner_page_view',\r\n page_url: self.parent().attr('uid'),\r\n };\r\n let params = {\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n callback: spbcScannerButtonViewBadCallback,\r\n errorOutput: function(msg) {\r\n spbcModal.open().putError( msg );\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Callback for file view bad\r\n *\r\n * @param {object} result\r\n * @param {object} data\r\n * @param {object} params\r\n */\r\nfunction spbcScannerButtonViewBadFileCallback(result, data, params) { // eslint-disable-line no-unused-vars\r\n console.log('FILE_VIEWED_BAD_CODE_FILE');\r\n jQuery('#spbc_dialog').empty();\r\n\r\n let rowTemplate = '
%s';\r\n rowTemplate += '

%s


';\r\n let rowTemplateBad = '
';\r\n rowTemplateBad += '%s';\r\n rowTemplateBad += '

%s


';\r\n let severityParts = [];\r\n let severityPartsSorted = [];\r\n let severityKeysSorted = [];\r\n\r\n result.weak_spots = JSON.parse(result.weak_spots);\r\n /* eslint-disable guard-for-in */\r\n for (let severity in result.weak_spots) {\r\n severityParts[severity] = Object.keys(result.weak_spots[severity]);\r\n }\r\n\r\n severityKeysSorted = Object.keys(severityParts).sort();\r\n\r\n /* eslint-disable guard-for-in */\r\n for (key in severityKeysSorted) {\r\n severityPartsSorted[severityKeysSorted[key]] = severityParts[severityKeysSorted[key]];\r\n }\r\n\r\n /* eslint-disable guard-for-in */\r\n for (let severityPart in severityPartsSorted) {\r\n let headerName = 'spbc-dialog-row-header-' + severityPart.toLowerCase();\r\n let headerHtml = '';\r\n headerHtml += severityPart + ' weakspots:';\r\n const dialog = jQuery('#spbc_dialog');\r\n\r\n dialog.append(rowTemplate.printf('', headerHtml));\r\n dialog.append(rowTemplate. printf('...', '...'));\r\n\r\n let header = dialog.find('#' + headerName);\r\n header.parent().parent().css('text-align', 'center');\r\n header.parent().parent().css('border', '1px dotted');\r\n header.parent().parent().css('background', 'darkgrey');\r\n\r\n /* eslint-disable guard-for-in */\r\n for (let strNum in severityParts[severityPart]) {\r\n // Sort bad line\r\n strNum = [...new Set(strNum)].sort();\r\n\r\n let row = +severityParts[severityPart][strNum];\r\n let displayDepth = 2;\r\n let temp;\r\n // Display only existing lines of file\r\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\r\n if ( typeof result.file[currRow] !== 'undefined' ) {\r\n temp = row === currRow ? rowTemplateBad : rowTemplate;\r\n dialog.append(temp.printf(currRow, result.file[currRow]));\r\n }\r\n }\r\n\r\n // Placing an empty string between results\r\n dialog.append(rowTemplate. printf('...', '...'));\r\n }\r\n }\r\n\r\n // Removing last empty string\r\n jQuery('#spbc_dialog div').last().remove();\r\n\r\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\r\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\r\n\r\n jQuery('#spbc_dialog').dialog({\r\n modal: true,\r\n title: result.file_path,\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(jQuery('#wpwrap').width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: true,\r\n resizable: false,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = overflow;\r\n jQuery('#spbc_dialog').height(height);\r\n jQuery('.ui-widget-overlay').on('click', function() {\r\n jQuery('#spbc_dialog').dialog('close');\r\n });\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Callback for file view bad\r\n *\r\n * @param {object} result\r\n * @param {object} data\r\n * @param {object} params\r\n */\r\nfunction spbcScannerButtonViewBadCallback(result, data, params) { // eslint-disable-line no-unused-vars\r\n console.log('FILE_VIEWED_BAD_CODE');\r\n\r\n let afterClose = () => {};\r\n\r\n if ( result.success == true ) {\r\n console.log(result);\r\n let rowTemplate = '
' +\r\n '%s' +\r\n '

%s

' +\r\n '
';\r\n let rowTemplateBad = '
' +\r\n '%s' +\r\n '

%s

' +\r\n '
';\r\n let strNums = [];\r\n\r\n result.weak_spots = JSON.parse(result.weak_spots);\r\n /* eslint-disable guard-for-in */\r\n for (let severity in result.weak_spots) {\r\n strNums = strNums.concat(Object.keys(result.weak_spots[severity]));\r\n }\r\n\r\n strNums = [...new Set(strNums)].sort(); // Sort bad line\r\n // get a map of bad strings\r\n // TODO: Probably there can get something else except CRITICAL in the future\r\n let badStringsMap = new Map(Object.entries(result.weak_spots.CRITICAL));\r\n /* eslint-disable guard-for-in */\r\n for (let strNum in strNums) {\r\n if (strNum == 0 && badStringsMap.get(strNums[strNum]).toLowerCase().includes('doctype')) {\r\n continue;\r\n }\r\n\r\n let row = +strNums[strNum];\r\n let displayDepth = 2;\r\n\r\n // Display only existing lines of file\r\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\r\n if ( typeof result.file[currRow] !== 'undefined' ) {\r\n let isBadString = (row === currRow);\r\n let unformattedRow;\r\n let highlitedRow;\r\n if (isBadString) {\r\n unformattedRow = rowTemplateBad;\r\n } else {\r\n unformattedRow = rowTemplate;\r\n }\r\n if (isBadString && !result.file[currRow].includes('iframe')) {\r\n highlitedRow = unformattedRow.printf(currRow, badStringsMap.get(strNums[strNum]));\r\n } else {\r\n highlitedRow = unformattedRow.printf(currRow, result.file[currRow]);\r\n }\r\n jQuery('#spbc_dialog').append(highlitedRow);\r\n }\r\n }\r\n\r\n // Placing an empty string between results\r\n jQuery('#spbc_dialog').append(rowTemplate. printf('', ''));\r\n\r\n // Removing last empty string\r\n jQuery('#spbc_dialog div').last().remove();\r\n }\r\n } else {\r\n let wrapperElement = '
%s
';\r\n jQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\r\n afterClose = () => {\r\n document.location.reload();\r\n };\r\n }\r\n\r\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\r\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\r\n let height = 'auto';\r\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\r\n\r\n jQuery('#spbc_dialog').dialog({\r\n modal: true,\r\n title: result.file_path,\r\n position: {my: 'center top', at: 'center top+100px', of: window},\r\n width: +(jQuery('#wpwrap').width() / 100 * 90),\r\n show: {effect: 'blind', duration: 500},\r\n draggable: true,\r\n resizable: false,\r\n closeText: 'X',\r\n classes: {'ui-dialog': 'spbc---top'},\r\n open: function(event, ui) {\r\n event.target.style.overflow = overflow;\r\n jQuery('#spbc_dialog').height(height);\r\n jQuery('.ui-widget-overlay').on('click', function() {\r\n jQuery('#spbc_dialog').dialog('close');\r\n });\r\n },\r\n beforeClose: function(event, ui) {\r\n document.body.style.overflow = 'auto';\r\n jQuery('#spbc_dialog').empty();\r\n },\r\n close: afterClose,\r\n });\r\n}\r\n\r\n/**\r\n * Reloads last scan info\r\n */\r\nfunction spbcScannerReloadScanInfo() { // eslint-disable-line no-unused-vars\r\n jQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\r\n const data = {\r\n action: 'spbc_scanner__last_scan_info',\r\n };\r\n const params = {\r\n callback: (result) => {\r\n document.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\r\n },\r\n };\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Cure file\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonCureFileAjaxHandler(obj) { // eslint-disable-line no-unused-vars\r\n const self = jQuery(obj);\r\n const fileFastHash = self.parents('.row-actions').attr('uid');\r\n\r\n let data = {\r\n action: 'spbc_file_cure_ajax_action',\r\n file_fast_hash: fileFastHash,\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: true,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n spbcModal.open().put(result.data);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n } else {\r\n spbcModal.open().putError(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Restore file from backup\r\n * @param {object} obj\r\n */\r\nfunction spbcScannerButtonRestoreFromBackupAjaxHandler(obj) { // eslint-disable-line no-unused-vars\r\n const self = jQuery(obj);\r\n const fileFastHash = self.parents('.row-actions').attr('uid');\r\n\r\n let data = {\r\n action: 'spbc_restore_file_from_backup_ajax_action',\r\n file_fast_hash: fileFastHash,\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: true,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n spbcModal.open().put(result.data);\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n document.location.reload();\r\n });\r\n } else {\r\n spbcModal.open().putError(result.data);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Clear scan results\r\n * @return {void}\r\n */\r\nfunction spbcScannerButtonClearScanResults() { // eslint-disable-line no-unused-vars\r\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\r\n return;\r\n }\r\n\r\n console.log('CLEAR');\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_clear'},\r\n {\r\n type: 'GET',\r\n successCallback: function() {\r\n document.location = document.location;\r\n },\r\n complete: null,\r\n errorOutput: null,\r\n context: this,\r\n timeout: 40000,\r\n success: function() {\r\n document.location.reload();\r\n },\r\n },\r\n );\r\n}\r\n\r\n/**\r\n * Show copy log to clipboard hint\r\n * @param {string} text\r\n */\r\nfunction spbcScannerCopyLogToClipboardHint(text) {\r\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').text(text);\r\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').show();\r\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').animate({opacity: 0}, 3000, function() {\r\n jQuery(this).hide();\r\n jQuery(this).css('opacity', 1);\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n // EVENT HADLING\r\n spbcTblBulkActionsListen(); // Table. Row bulk handler\r\n spbcTblRowActionsListen(); // Table. Row actions handler\r\n spbcTblPaginationListen(); // Table. Pagination handler\r\n spbcTblSortListen(); // Table. Sort handler\r\n\r\n spbcStartShowHide();\r\n\r\n // Preparing progressbar\r\n jQuery('#spbc_scaner_progress_bar').progressbar({\r\n value: 0,\r\n create: function( event, ui ) {\r\n event.target.style.position = 'relative';\r\n event.target.style.marginBottom = '12px';\r\n },\r\n change: function(event, ui) {\r\n jQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\r\n },\r\n });\r\n\r\n // Preparing accordion\r\n jQuery('#spbc_scan_accordion').accordion({\r\n header: 'h3',\r\n heightStyle: 'content',\r\n collapsible: true,\r\n active: false,\r\n activate: function( event, ui ) {\r\n jQuery('#spbc_scan_accordion')\r\n .accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom spbc-overflow--visible');\r\n },\r\n beforeActivate: function( event, ui ) {\r\n jQuery('#spbc_scan_accordion').accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom');\r\n },\r\n });\r\n\r\n // Init scanner plugin\r\n window.spbcScanner = new SpbcMalwareScanner({\r\n settings: spbcScaner.settings,\r\n states: spbcScaner.states,\r\n button: jQuery('#spbc_perform_scan'),\r\n spinner: jQuery('#spbc_perform_scan').next(),\r\n callback: null,\r\n progress_overall: jQuery('#spbc_scaner_progress_overall'),\r\n progressbar: jQuery('#spbc_scaner_progress_bar'),\r\n progressbar_text: jQuery('.spbc_progressbar_counter span'),\r\n wrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\r\n warnings: {\r\n long_scan: jQuery('.spbc_hint_warning__long_scan'),\r\n outdated: jQuery('.spbc_hint_warning__outdated'),\r\n },\r\n });\r\n\r\n jQuery(document).on('click', '.spbc_popup_tip--icon---show', function() {\r\n spbcPopupTipShow( jQuery( this ) );\r\n });\r\n\r\n jQuery('#spbc_perform_scan').on('click', function() {\r\n jQuery('#spbcscan-results-log-module').remove();\r\n spbcScanner.actionControl();\r\n\r\n if (!jQuery('.spbc_log-wrapper .panel-body').length) {\r\n jQuery('.spbc_log-wrapper').append('
');\r\n }\r\n\r\n jQuery('.spbc_log-wrapper').resizable({\r\n handles: 'n, s',\r\n containment: 'document',\r\n });\r\n });\r\n\r\n jQuery('#spbcscan-results-log-module').resizable({\r\n handles: 'n, s',\r\n containment: 'document',\r\n });\r\n\r\n // Clear scanner's tables\r\n jQuery('#spbc_scanner_clear').on('click', function() {\r\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\r\n return;\r\n }\r\n\r\n console.log('CLEAR');\r\n\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_clear'},\r\n {\r\n type: 'GET',\r\n successCallback: function() {\r\n document.location = document.location;\r\n },\r\n complete: null,\r\n errorOutput: null,\r\n context: this,\r\n timeout: 40000,\r\n success: function() {\r\n document.location.reload();\r\n },\r\n },\r\n );\r\n });\r\n\r\n jQuery('#spbc_scanner_save_to_pdf').on('click', function() {\r\n jQuery.ajax({\r\n url: spbcSettings.ajaxurl,\r\n type: 'POST',\r\n data: {\r\n action: 'spbc_scanner_save_to_pdf',\r\n security: spbcSettings.ajax_nonce,\r\n no_cache: Math.random(),\r\n },\r\n xhrFields: {\r\n responseType: 'blob',\r\n },\r\n success: function(data) {\r\n jQuery.ajax({\r\n url: spbcSettings.ajaxurl,\r\n type: 'POST',\r\n data: {\r\n action: 'spbc_scanner_get_pdf_file_name',\r\n security: spbcSettings.ajax_nonce,\r\n no_cache: Math.random(),\r\n },\r\n xhrFields: {\r\n responseType: 'text',\r\n },\r\n success: function(filename) {\r\n let blob=new Blob([data]);\r\n let link=document.createElement('a');\r\n link.href=window.URL.createObjectURL(blob);\r\n link.download=filename.data;\r\n link.click();\r\n },\r\n },\r\n );\r\n },\r\n });\r\n });\r\n\r\n jQuery('#spbc_load_more_scan_logs').on('click', function(e) {\r\n e.preventDefault();\r\n\r\n jQuery.ajax({\r\n url: spbcSettings.ajaxurl,\r\n type: 'POST',\r\n data: {\r\n action: 'spbc_scanner_load_more_scan_logs',\r\n security: spbcSettings.ajax_nonce,\r\n no_cache: Math.random(),\r\n offset: jQuery(this).data('offset') + 100,\r\n },\r\n xhrFields: {\r\n responseType: 'text',\r\n },\r\n success: function(data) {\r\n if (data.success) {\r\n jQuery('#spbcscan-results-log-module .panel-body').append(data.data);\r\n }\r\n },\r\n });\r\n });\r\n\r\n if (jQuery('#spbc_scanner_copy_log_to_clipboard').length) {\r\n jQuery('#spbc_scanner_copy_log_to_clipboard').on('click', function(e) {\r\n e.preventDefault();\r\n if (navigator.clipboard) {\r\n let log = jQuery('#spbcscan-results-log-module .panel-body').html();\r\n let formattedLog = log.replace(//g, '').replace(/<\\/b>/g, '');\r\n formattedLog = formattedLog.replace(/

/g, '\\n').replace(/<\\/p>/g, '');\r\n navigator.clipboard.writeText(formattedLog).then(() => {\r\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint);\r\n }).catch((err) => {\r\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_failed);\r\n });\r\n } else {\r\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_unsupported);\r\n }\r\n });\r\n }\r\n});\r\n"],"names":["spbcPopupTipShow","showIcon","let","tipTitle","attr","tipText","removeDescFunc","e","jQuery","target","parent","length","hasClass","hide","document","off","after","obj","empty","append","css","top","position","left","on","parents","spbcScannerButtonFileViewEvent","self","data","action","file_id","params","spinner","siblings","callback","spbcScannerButtonViewCallback","errorOutput","msg","spbcModal","open","putError","addEventListener","spbcReloadAccordion","spbcSendAJAXRequest","spbcScannerAnalysisLogDeleteFromLog","fileIds","push","selectedItems","closest","find","alert","each","index","element","elementId","val","children","file_ids","window","location","reload","spbcScannerButtonPageViewEvent","page_url","wpWrap","dialogWindow","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","sizeMultiplier","result","row","rowTemplate","display","file","printf","contentHeight","Object","keys","visibleHeight","file_path","console","log","spbcScannerButtonFileViewBadEvent","spbcScannerButtonViewBadFileCallback","spbcScannerButtonPageViewBadEvent","spbcScannerButtonViewBadCallback","severityKeysSorted","severity","severityPart","rowTemplateBad","severityParts","severityPartsSorted","weak_spots","JSON","parse","key","sort","strNum","headerName","toLowerCase","headerHtml","header","Set","temp","currRow","last","remove","afterClose","success","strNums","concat","badStringsMap","Map","entries","CRITICAL","get","includes","isBadString","unformattedRow","highlitedRow","content","close","spbcScannerReloadScanInfo","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbcScannerButtonCureFileAjaxHandler","file_fast_hash","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","put","spbcScannerButtonRestoreFromBackupAjaxHandler","spbcScannerButtonClearScanResults","confirm","successCallback","complete","context","this","timeout","spbcScannerCopyLogToClipboardHint","animate","opacity","ready","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","heightStyle","collapsible","active","activate","beforeActivate","spbcScanner","SpbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","preventDefault","offset","navigator","clipboard","formattedLog","html","replace","writeText","then","copy_log_to_clipboard_hint","catch","copy_log_to_clipboard_hint_failed","copy_log_to_clipboard_hint_unsupported"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["/**\n * Show popup tip\n *\n * @param {object} showIcon\n */\nfunction spbcPopupTipShow(showIcon) { // eslint-disable-line no-unused-vars\n let tipTitle = showIcon.attr('spbc_tip_title') || null;\n let tipText = showIcon.attr('spbc_tip_text') || null;\n let removeDescFunc = function(e) {\n if (\n typeof e === 'undefined' ||\n (\n jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 ||\n jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')\n )\n ) {\n jQuery('.spbc_popup_tip--wrapper').hide();\n jQuery(document).off('click', removeDescFunc);\n }\n };\n\n removeDescFunc();\n\n showIcon.after('

');\n\n let obj = jQuery('.spbc_popup_tip--wrapper');\n\n obj.empty()\n .append('
')\n .css({\n top: showIcon.position().top - 2,\n left: showIcon.position().left + 25,\n });\n obj.append('')\n .append('

' + tipTitle + '

')\n .append('

' + tipText + '

');\n\n jQuery(document).on('click', removeDescFunc);\n showIcon.parents('tr').on('mouseout', removeDescFunc);\n}\n\n/**\n * View file in the scanner\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonFileViewEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_file_view',\n file_id: self.parents('.row-actions').attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n document.addEventListener('spbcModalClosed', function( e ) {\n spbcReloadAccordion();\n });\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n *\n * @param {object} obj\n */\nfunction spbcScannerAnalysisLogDeleteFromLog(obj) { // eslint-disable-line no-unused-vars\n let fileIds = [];\n const self = jQuery(obj);\n let spinner;\n\n if ( jQuery(obj).hasClass('tbl-row_action') ) {\n fileIds.push(self.parents('.row-actions').attr('uid'));\n spinner = self.parent().siblings('.tbl-preloader--tiny');\n } else {\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select:checked');\n if (selectedItems.length === 0) {\n alert('Please, select elements.');\n return;\n }\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n fileIds.push(elementId);\n });\n spinner = self.children('.tbl-preloader--small');\n }\n\n const data = {\n action: 'spbc_scanner_analysis_log_delete_from_log',\n file_ids: fileIds,\n };\n\n let params = {\n spinner: spinner,\n callback: function() {\n window.location.reload();\n },\n };\n\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * View page in the scanner\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonPageViewEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_page_view',\n page_url: self.parents('.row-actions').attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n },\n };\n\n let wpWrap = jQuery('#wpwrap');\n let dialogWindow = jQuery('#spbc_dialog');\n\n dialogWindow.dialog({\n modal: true,\n title: 'Loading..',\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(wpWrap.width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: false,\n resizable: false,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = 'auto';\n jQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n });\n\n dialogWindow.append('\"Wait');\n\n let spinner = jQuery('#spbc_file_view_preloader');\n let sizeMultiplier = (wpWrap.width() * 0.0004);\n\n spinner.height(128 * sizeMultiplier);\n spinner.width(128 * sizeMultiplier);\n spinner.css({left: dialogWindow.width()/2 - (128 * sizeMultiplier / 2)});\n spinner.css({top: dialogWindow.height()/2 - (128 * sizeMultiplier / 2)});\n\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Callback for file view\n *\n * @param {object} result\n */\nfunction spbcScannerButtonViewCallback(result) { // eslint-disable-line no-unused-vars\n let dialogWindow = jQuery('#spbc_dialog');\n dialogWindow.empty();\n\n jQuery('#spbc_file_view_preloader').css({display: 'none'});\n\n let rowTemplate = '
%s';\n rowTemplate += '

%s


';\n\n /* eslint-disable guard-for-in */\n for (let row in result.file) {\n dialogWindow.append(rowTemplate.printf(row, result.file[row]));\n }\n\n let contentHeight = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let overflow = contentHeight < visibleHeight ? 'hidden' : 'scroll';\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\n\n dialogWindow.css({\n height: height,\n overflow: overflow,\n });\n\n dialogWindow.dialog({\n modal: true,\n title: ('Loaded: ' + result.file_path),\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(jQuery('#wpwrap').width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: true,\n resizable: false,\n height: height,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = overflow;\n jQuery('#spbc_dialog').height(height);\n jQuery('.ui-widget-overlay').on('click', function() {\n jQuery('#spbc_dialog').dialog('close');\n });\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n });\n\n console.log('FILE_VIEWED');\n}\n\n/**\n * Event for file view bad\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonFileViewBadEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_file_view',\n file_id: self.parents('.row-actions').attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewBadFileCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Event for page view bad\n *\n * @param {object} obj\n */\nfunction spbcScannerButtonPageViewBadEvent(obj) { // eslint-disable-line no-unused-vars\n let self = jQuery(obj);\n let data = {\n action: 'spbc_scanner_page_view',\n page_url: self.parent().attr('uid'),\n };\n let params = {\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n callback: spbcScannerButtonViewBadCallback,\n errorOutput: function(msg) {\n spbcModal.open().putError( msg );\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Callback for file view bad\n *\n * @param {object} result\n * @param {object} data\n * @param {object} params\n */\nfunction spbcScannerButtonViewBadFileCallback(result, data, params) { // eslint-disable-line no-unused-vars\n console.log('FILE_VIEWED_BAD_CODE_FILE');\n jQuery('#spbc_dialog').empty();\n\n let rowTemplate = '
%s';\n rowTemplate += '

%s


';\n let rowTemplateBad = '
';\n rowTemplateBad += '%s';\n rowTemplateBad += '

%s


';\n let severityParts = [];\n let severityPartsSorted = [];\n let severityKeysSorted = [];\n\n result.weak_spots = JSON.parse(result.weak_spots);\n /* eslint-disable guard-for-in */\n for (let severity in result.weak_spots) {\n severityParts[severity] = Object.keys(result.weak_spots[severity]);\n }\n\n severityKeysSorted = Object.keys(severityParts).sort();\n\n /* eslint-disable guard-for-in */\n for (key in severityKeysSorted) {\n severityPartsSorted[severityKeysSorted[key]] = severityParts[severityKeysSorted[key]];\n }\n\n /* eslint-disable guard-for-in */\n for (let severityPart in severityPartsSorted) {\n let headerName = 'spbc-dialog-row-header-' + severityPart.toLowerCase();\n let headerHtml = '';\n headerHtml += severityPart + ' weakspots:';\n const dialog = jQuery('#spbc_dialog');\n\n dialog.append(rowTemplate.printf('', headerHtml));\n dialog.append(rowTemplate. printf('...', '...'));\n\n let header = dialog.find('#' + headerName);\n header.parent().parent().css('text-align', 'center');\n header.parent().parent().css('border', '1px dotted');\n header.parent().parent().css('background', 'darkgrey');\n\n /* eslint-disable guard-for-in */\n for (let strNum in severityParts[severityPart]) {\n // Sort bad line\n strNum = [...new Set(strNum)].sort();\n\n let row = +severityParts[severityPart][strNum];\n let displayDepth = 2;\n let temp;\n // Display only existing lines of file\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\n if ( typeof result.file[currRow] !== 'undefined' ) {\n temp = row === currRow ? rowTemplateBad : rowTemplate;\n dialog.append(temp.printf(currRow, result.file[currRow]));\n }\n }\n\n // Placing an empty string between results\n dialog.append(rowTemplate. printf('...', '...'));\n }\n }\n\n // Removing last empty string\n jQuery('#spbc_dialog div').last().remove();\n\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\n let height = overflow === 'scroll' ? visibleHeight : contentHeight;\n\n jQuery('#spbc_dialog').dialog({\n modal: true,\n title: result.file_path,\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(jQuery('#wpwrap').width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: true,\n resizable: false,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = overflow;\n jQuery('#spbc_dialog').height(height);\n jQuery('.ui-widget-overlay').on('click', function() {\n jQuery('#spbc_dialog').dialog('close');\n });\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n });\n}\n\n/**\n * Callback for file view bad\n *\n * @param {object} result\n * @param {object} data\n * @param {object} params\n */\nfunction spbcScannerButtonViewBadCallback(result, data, params) { // eslint-disable-line no-unused-vars\n console.log('FILE_VIEWED_BAD_CODE');\n\n let afterClose = () => {};\n\n if ( result.success == true ) {\n console.log(result);\n let rowTemplate = '
' +\n '%s' +\n '

%s

' +\n '
';\n let rowTemplateBad = '
' +\n '%s' +\n '

%s

' +\n '
';\n let strNums = [];\n\n result.weak_spots = JSON.parse(result.weak_spots);\n /* eslint-disable guard-for-in */\n for (let severity in result.weak_spots) {\n strNums = strNums.concat(Object.keys(result.weak_spots[severity]));\n }\n\n strNums = [...new Set(strNums)].sort(); // Sort bad line\n // get a map of bad strings\n // TODO: Probably there can get something else except CRITICAL in the future\n let badStringsMap = new Map(Object.entries(result.weak_spots.CRITICAL));\n /* eslint-disable guard-for-in */\n for (let strNum in strNums) {\n if (strNum == 0 && badStringsMap.get(strNums[strNum]).toLowerCase().includes('doctype')) {\n continue;\n }\n\n let row = +strNums[strNum];\n let displayDepth = 2;\n\n // Display only existing lines of file\n for (let currRow = row - displayDepth; currRow <= row + displayDepth; currRow++ ) {\n if ( typeof result.file[currRow] !== 'undefined' ) {\n let isBadString = (row === currRow);\n let unformattedRow;\n let highlitedRow;\n if (isBadString) {\n unformattedRow = rowTemplateBad;\n } else {\n unformattedRow = rowTemplate;\n }\n if (isBadString && !result.file[currRow].includes('iframe')) {\n highlitedRow = unformattedRow.printf(currRow, badStringsMap.get(strNums[strNum]));\n } else {\n highlitedRow = unformattedRow.printf(currRow, result.file[currRow]);\n }\n jQuery('#spbc_dialog').append(highlitedRow);\n }\n }\n\n // Placing an empty string between results\n jQuery('#spbc_dialog').append(rowTemplate. printf('', ''));\n\n // Removing last empty string\n jQuery('#spbc_dialog div').last().remove();\n }\n } else {\n let wrapperElement = '
%s
';\n jQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n afterClose = () => {\n document.location.reload();\n };\n }\n\n let contentHeight = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19;\n let visibleHeight = (document.documentElement.clientHeight) / 100 * 75;\n let height = 'auto';\n let overflow = contentHeight < visibleHeight ? 'no_scroll' : 'scroll';\n\n jQuery('#spbc_dialog').dialog({\n modal: true,\n title: result.file_path,\n position: {my: 'center top', at: 'center top+100px', of: window},\n width: +(jQuery('#wpwrap').width() / 100 * 90),\n show: {effect: 'blind', duration: 500},\n draggable: true,\n resizable: false,\n closeText: 'X',\n classes: {'ui-dialog': 'spbc---top'},\n open: function(event, ui) {\n event.target.style.overflow = overflow;\n jQuery('#spbc_dialog').height(height);\n jQuery('.ui-widget-overlay').on('click', function() {\n jQuery('#spbc_dialog').dialog('close');\n });\n },\n beforeClose: function(event, ui) {\n document.body.style.overflow = 'auto';\n jQuery('#spbc_dialog').empty();\n },\n close: afterClose,\n });\n}\n\n/**\n * Reloads last scan info\n */\nfunction spbcScannerReloadScanInfo() { // eslint-disable-line no-unused-vars\n jQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n const data = {\n action: 'spbc_scanner__last_scan_info',\n };\n const params = {\n callback: (result) => {\n document.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n },\n };\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Cure file\n * @param {object} obj\n */\nfunction spbcScannerButtonCureFileAjaxHandler(obj) { // eslint-disable-line no-unused-vars\n const self = jQuery(obj);\n const fileFastHash = self.parents('.row-actions').attr('uid');\n\n let data = {\n action: 'spbc_file_cure_ajax_action',\n file_fast_hash: fileFastHash,\n security: spbcSettings.ajax_nonce,\n };\n\n jQuery.ajax({\n type: 'POST',\n async: true,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n spbcModal.open().put(result.data);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n } else {\n spbcModal.open().putError(result.data);\n }\n },\n });\n}\n\n/**\n * Restore file from backup\n * @param {object} obj\n */\nfunction spbcScannerButtonRestoreFromBackupAjaxHandler(obj) { // eslint-disable-line no-unused-vars\n const self = jQuery(obj);\n const fileFastHash = self.parents('.row-actions').attr('uid');\n\n let data = {\n action: 'spbc_restore_file_from_backup_ajax_action',\n file_fast_hash: fileFastHash,\n security: spbcSettings.ajax_nonce,\n };\n\n jQuery.ajax({\n type: 'POST',\n async: true,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n spbcModal.open().put(result.data);\n document.addEventListener('spbcModalClosed', function( e ) {\n document.location.reload();\n });\n } else {\n spbcModal.open().putError(result.data);\n }\n },\n });\n}\n\n/**\n * Clear scan results\n * @return {void}\n */\nfunction spbcScannerButtonClearScanResults() { // eslint-disable-line no-unused-vars\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\n return;\n }\n\n console.log('CLEAR');\n\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_clear'},\n {\n type: 'GET',\n successCallback: function() {\n document.location = document.location;\n },\n complete: null,\n errorOutput: null,\n context: this,\n timeout: 40000,\n success: function() {\n document.location.reload();\n },\n },\n );\n}\n\n/**\n * Show copy log to clipboard hint\n * @param {string} text\n */\nfunction spbcScannerCopyLogToClipboardHint(text) {\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').text(text);\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').show();\n jQuery('#spbc_scanner_copy_log_to_clipboard_hint').animate({opacity: 0}, 3000, function() {\n jQuery(this).hide();\n jQuery(this).css('opacity', 1);\n });\n}\n\njQuery(document).ready(function() {\n // EVENT HADLING\n spbcTblBulkActionsListen(); // Table. Row bulk handler\n spbcTblRowActionsListen(); // Table. Row actions handler\n spbcTblPaginationListen(); // Table. Pagination handler\n spbcTblSortListen(); // Table. Sort handler\n\n spbcStartShowHide();\n\n // Preparing progressbar\n jQuery('#spbc_scaner_progress_bar').progressbar({\n value: 0,\n create: function( event, ui ) {\n event.target.style.position = 'relative';\n event.target.style.marginBottom = '12px';\n },\n change: function(event, ui) {\n jQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n },\n });\n\n // Preparing accordion\n jQuery('#spbc_scan_accordion').accordion({\n header: 'h3',\n heightStyle: 'content',\n collapsible: true,\n active: false,\n activate: function( event, ui ) {\n jQuery('#spbc_scan_accordion')\n .accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom spbc-overflow--visible');\n },\n beforeActivate: function( event, ui ) {\n jQuery('#spbc_scan_accordion').accordion('option', 'classes.ui-accordion-content', 'ui-corner-bottom');\n },\n });\n\n // Init scanner plugin\n window.spbcScanner = new SpbcMalwareScanner({\n settings: spbcScaner.settings,\n states: spbcScaner.states,\n button: jQuery('#spbc_perform_scan'),\n spinner: jQuery('#spbc_perform_scan').next(),\n callback: null,\n progress_overall: jQuery('#spbc_scaner_progress_overall'),\n progressbar: jQuery('#spbc_scaner_progress_bar'),\n progressbar_text: jQuery('.spbc_progressbar_counter span'),\n wrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n warnings: {\n long_scan: jQuery('.spbc_hint_warning__long_scan'),\n outdated: jQuery('.spbc_hint_warning__outdated'),\n },\n });\n\n jQuery(document).on('click', '.spbc_popup_tip--icon---show', function() {\n spbcPopupTipShow( jQuery( this ) );\n });\n\n jQuery('#spbc_perform_scan').on('click', function() {\n jQuery('#spbcscan-results-log-module').remove();\n spbcScanner.actionControl();\n\n if (!jQuery('.spbc_log-wrapper .panel-body').length) {\n jQuery('.spbc_log-wrapper').append('
');\n }\n\n jQuery('.spbc_log-wrapper').resizable({\n handles: 'n, s',\n containment: 'document',\n });\n });\n\n jQuery('#spbcscan-results-log-module').resizable({\n handles: 'n, s',\n containment: 'document',\n });\n\n // Clear scanner's tables\n jQuery('#spbc_scanner_clear').on('click', function() {\n if ( ! confirm('Do you confirm to clear the scan results?') ) {\n return;\n }\n\n console.log('CLEAR');\n\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_clear'},\n {\n type: 'GET',\n successCallback: function() {\n document.location = document.location;\n },\n complete: null,\n errorOutput: null,\n context: this,\n timeout: 40000,\n success: function() {\n document.location.reload();\n },\n },\n );\n });\n\n jQuery('#spbc_scanner_save_to_pdf').on('click', function() {\n jQuery.ajax({\n url: spbcSettings.ajaxurl,\n type: 'POST',\n data: {\n action: 'spbc_scanner_save_to_pdf',\n security: spbcSettings.ajax_nonce,\n no_cache: Math.random(),\n },\n xhrFields: {\n responseType: 'blob',\n },\n success: function(data) {\n jQuery.ajax({\n url: spbcSettings.ajaxurl,\n type: 'POST',\n data: {\n action: 'spbc_scanner_get_pdf_file_name',\n security: spbcSettings.ajax_nonce,\n no_cache: Math.random(),\n },\n xhrFields: {\n responseType: 'text',\n },\n success: function(filename) {\n let blob=new Blob([data]);\n let link=document.createElement('a');\n link.href=window.URL.createObjectURL(blob);\n link.download=filename.data;\n link.click();\n },\n },\n );\n },\n });\n });\n\n jQuery('#spbc_load_more_scan_logs').on('click', function(e) {\n e.preventDefault();\n\n jQuery.ajax({\n url: spbcSettings.ajaxurl,\n type: 'POST',\n data: {\n action: 'spbc_scanner_load_more_scan_logs',\n security: spbcSettings.ajax_nonce,\n no_cache: Math.random(),\n offset: jQuery(this).data('offset') + 100,\n },\n xhrFields: {\n responseType: 'text',\n },\n success: function(data) {\n if (data.success) {\n jQuery('#spbcscan-results-log-module .panel-body').append(data.data);\n }\n },\n });\n });\n\n if (jQuery('#spbc_scanner_copy_log_to_clipboard').length) {\n jQuery('#spbc_scanner_copy_log_to_clipboard').on('click', function(e) {\n e.preventDefault();\n if (navigator.clipboard) {\n let log = jQuery('#spbcscan-results-log-module .panel-body').html();\n let formattedLog = log.replace(//g, '').replace(/<\\/b>/g, '');\n formattedLog = formattedLog.replace(/

/g, '\\n').replace(/<\\/p>/g, '');\n navigator.clipboard.writeText(formattedLog).then(() => {\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint);\n }).catch((err) => {\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_failed);\n });\n } else {\n spbcScannerCopyLogToClipboardHint(spbcScaner.copy_log_to_clipboard_hint_unsupported);\n }\n });\n }\n});\n"],"names":["spbcPopupTipShow","showIcon","let","tipTitle","attr","tipText","removeDescFunc","e","jQuery","target","parent","length","hasClass","hide","document","off","after","obj","empty","append","css","top","position","left","on","parents","spbcScannerButtonFileViewEvent","self","data","action","file_id","params","spinner","siblings","callback","spbcScannerButtonViewCallback","errorOutput","msg","spbcModal","open","putError","addEventListener","spbcReloadAccordion","spbcSendAJAXRequest","spbcScannerAnalysisLogDeleteFromLog","fileIds","push","selectedItems","closest","find","alert","each","index","element","elementId","val","children","file_ids","window","location","reload","spbcScannerButtonPageViewEvent","page_url","wpWrap","dialogWindow","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","sizeMultiplier","result","row","rowTemplate","display","file","printf","contentHeight","Object","keys","visibleHeight","file_path","console","log","spbcScannerButtonFileViewBadEvent","spbcScannerButtonViewBadFileCallback","spbcScannerButtonPageViewBadEvent","spbcScannerButtonViewBadCallback","severityKeysSorted","severity","severityPart","rowTemplateBad","severityParts","severityPartsSorted","weak_spots","JSON","parse","key","sort","strNum","headerName","toLowerCase","headerHtml","header","Set","temp","currRow","last","remove","afterClose","success","strNums","concat","badStringsMap","Map","entries","CRITICAL","get","includes","isBadString","unformattedRow","highlitedRow","content","close","spbcScannerReloadScanInfo","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbcScannerButtonCureFileAjaxHandler","file_fast_hash","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","put","spbcScannerButtonRestoreFromBackupAjaxHandler","spbcScannerButtonClearScanResults","confirm","successCallback","complete","context","this","timeout","spbcScannerCopyLogToClipboardHint","animate","opacity","ready","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","heightStyle","collapsible","active","activate","beforeActivate","spbcScanner","SpbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","preventDefault","offset","navigator","clipboard","formattedLog","html","replace","writeText","then","copy_log_to_clipboard_hint","catch","copy_log_to_clipboard_hint_failed","copy_log_to_clipboard_hint_unsupported"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-settings_tab--security_log.min.js.map b/js/spbc-settings_tab--security_log.min.js.map index ebebcae52..aa06fa92e 100644 --- a/js/spbc-settings_tab--security_log.min.js.map +++ b/js/spbc-settings_tab--security_log.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--security_log.min.js","sources":["spbc-settings_tab--security_log.js"],"sourcesContent":["/**\r\n * Show more security logs\r\n */\r\nfunction spbcSecLogsShowMoreListen() {\r\n jQuery('#spbc_show_more_button').on('click', function() {\r\n if (spbcSettingsSecLogs.clicks < 2) {\r\n spbcSettingsSecLogs.clicks++;\r\n let data = {\r\n action: 'spbc_show_more_security_logs',\r\n amount: spbcSettingsSecLogs.amount * (+spbcSettingsSecLogs.clicks+1),\r\n };\r\n let params = {\r\n button: this,\r\n spinner: this.nextElementSibling,\r\n wrapper: jQuery('#spbc_tbl__secuirty_logs').find('tbody'),\r\n callback: spbcSecLogsShowMoreCallback,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(this).hide();\r\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Callback for SHOW MORE SECURITY LOGS\r\n * @param {*} result\r\n * @param {*} data\r\n * @param {*} params\r\n */\r\nfunction spbcSecLogsShowMoreCallback(result, data, params) {\r\n if (result.size > 0) {\r\n jQuery(params.wrapper).html(result.html);\r\n spbcTblRowActionsListen();\r\n spbcStartShowHide();\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(params.button).hide();\r\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n}\r\n\r\n/**\r\n * Allow IP\r\n * @param {*} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcSecLogsAllowIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcSecLogsFilterIp( ip, 'allow');\r\n return false;\r\n}\r\n\r\n/**\r\n * Ban IP\r\n * @param {*} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcSecLogsBanIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcSecLogsFilterIp( ip, 'deny');\r\n return false;\r\n}\r\n\r\n/**\r\n * Filter IP\r\n * @param {*} ip\r\n * @param {*} status\r\n * @param {*} bulk\r\n * @return {boolean}\r\n */\r\nfunction spbcSecLogsFilterIp( ip, status, bulk = false) {\r\n const data = {\r\n action: 'spbc_tc__filter_ip',\r\n ip: ip,\r\n status: status,\r\n };\r\n const params = {\r\n status: status,\r\n };\r\n if (!bulk) {\r\n params.callback = spbcSecLogsAllowIpCallback;\r\n }\r\n spbcSendAJAXRequest( data, params );\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Callback for FILTER IP\r\n * @param {*} result\r\n * @param {*} data\r\n */\r\nfunction spbcSecLogsAllowIpCallback(result, data) {\r\n console.log(data);\r\n if (result.success) {\r\n let msg = data.status === 'allow' ? 'Allowed' : 'Banned';\r\n alert('Success. Selected IPs have been ' + msg + '. Changes will be applied within 10 minutes.');\r\n } else {\r\n alert(result.data);\r\n }\r\n}\r\n\r\njQuery(document).ready(function() {\r\n spbcTblRowActionsListen(); // Table. Row actions handler\r\n spbcTblBulkActionsListen();\r\n spbcTblPaginationListen(); // Table. Pagination handler\r\n spbcTblSortListen(); // Table. Sort handler\r\n\r\n // Handler for show more SECURITY LOGS\r\n spbcSecLogsShowMoreListen();\r\n\r\n // Start to hide long values in a table\r\n spbcStartShowHide();\r\n});\r\n"],"names":["spbcSecLogsShowMoreListen","jQuery","on","data","params","spbcSettingsSecLogs","clicks","action","amount","button","this","spinner","nextElementSibling","wrapper","find","callback","spbcSecLogsShowMoreCallback","spbcSendAJAXRequest","hide","siblings","css","result","size","html","spbcTblRowActionsListen","spbcStartShowHide","spbcSecLogsAllowIp","ip","spbcSecLogsFilterIp","spbcSecLogsBanIp","status","bulk","spbcSecLogsAllowIpCallback","console","log","success","msg","alert","document","ready","spbcTblBulkActionsListen","spbcTblPaginationListen","spbcTblSortListen"],"mappings":"AAGA,SAASA,4BACLC,OAAO,wBAAwB,EAAEC,GAAG,QAAS,WACzC,IAEQC,EAIAC,EANJC,oBAAoBC,OAAS,GAC7BD,oBAAoBC,MAAM,GACtBH,EAAO,CACPI,OAAQ,+BACRC,OAAQH,oBAAoBG,QAAU,CAACH,oBAAoBC,OAAO,EACtE,EACIF,EAAS,CACTK,OAAQC,KACRC,QAASD,KAAKE,mBACdC,QAASZ,OAAO,0BAA0B,EAAEa,KAAK,OAAO,EACxDC,SAAUC,2BACd,EACAC,oBAAqBd,EAAMC,CAAO,IAGlCH,OAAOS,IAAI,EAAEQ,KAAK,EAClBjB,OAAOS,IAAI,EAAES,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAQA,SAASJ,4BAA4BK,EAAQlB,EAAMC,GAC7B,EAAdiB,EAAOC,MACPrB,OAAOG,EAAOS,OAAO,EAAEU,KAAKF,EAAOE,IAAI,EACvCC,wBAAwB,EACxBC,kBAAkB,IAGlBxB,OAAOG,EAAOK,MAAM,EAAES,KAAK,EAC3BjB,OAAOG,EAAOK,MAAM,EAAEU,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAOA,SAASM,mBAAmBC,GAExB,OADAC,oBAAqBD,EAAI,OAAO,EACzB,CAAA,CACX,CAOA,SAASE,iBAAiBF,GAEtB,OADAC,oBAAqBD,EAAI,MAAM,EACxB,CAAA,CACX,CASA,SAASC,oBAAqBD,EAAIG,EAAQC,EAAO,CAAA,GACvC5B,EAAO,CACTI,OAAQ,qBACRoB,GAAIA,EACJG,OAAQA,CACZ,EACM1B,EAAS,CACX0B,OAAQA,CACZ,EAMA,OALKC,IACD3B,EAAOW,SAAWiB,4BAEtBf,oBAAqBd,EAAMC,CAAO,EAE3B,CAAA,CACX,CAOA,SAAS4B,2BAA2BX,EAAQlB,GACxC8B,QAAQC,IAAI/B,CAAI,EACZkB,EAAOc,SACHC,EAAsB,UAAhBjC,EAAK2B,OAAqB,UAAY,SAChDO,MAAM,mCAAqCD,EAAM,8CAA8C,GAE/FC,MAAMhB,EAAOlB,IAAI,CAEzB,CAEAF,OAAOqC,QAAQ,EAAEC,MAAM,WACnBf,wBAAwB,EACxBgB,yBAAyB,EACzBC,wBAAwB,EACxBC,kBAAkB,EAGlB1C,0BAA0B,EAG1ByB,kBAAkB,CACtB,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--security_log.min.js","sources":["spbc-settings_tab--security_log.js"],"sourcesContent":["/**\n * Show more security logs\n */\nfunction spbcSecLogsShowMoreListen() {\n jQuery('#spbc_show_more_button').on('click', function() {\n if (spbcSettingsSecLogs.clicks < 2) {\n spbcSettingsSecLogs.clicks++;\n let data = {\n action: 'spbc_show_more_security_logs',\n amount: spbcSettingsSecLogs.amount * (+spbcSettingsSecLogs.clicks+1),\n };\n let params = {\n button: this,\n spinner: this.nextElementSibling,\n wrapper: jQuery('#spbc_tbl__secuirty_logs').find('tbody'),\n callback: spbcSecLogsShowMoreCallback,\n };\n spbcSendAJAXRequest( data, params );\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(this).hide();\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n });\n}\n\n/**\n * Callback for SHOW MORE SECURITY LOGS\n * @param {*} result\n * @param {*} data\n * @param {*} params\n */\nfunction spbcSecLogsShowMoreCallback(result, data, params) {\n if (result.size > 0) {\n jQuery(params.wrapper).html(result.html);\n spbcTblRowActionsListen();\n spbcStartShowHide();\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(params.button).hide();\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n}\n\n/**\n * Allow IP\n * @param {*} ip\n * @return {boolean}\n */\nfunction spbcSecLogsAllowIp(ip) { // eslint-disable-line no-unused-vars\n spbcSecLogsFilterIp( ip, 'allow');\n return false;\n}\n\n/**\n * Ban IP\n * @param {*} ip\n * @return {boolean}\n */\nfunction spbcSecLogsBanIp(ip) { // eslint-disable-line no-unused-vars\n spbcSecLogsFilterIp( ip, 'deny');\n return false;\n}\n\n/**\n * Filter IP\n * @param {*} ip\n * @param {*} status\n * @param {*} bulk\n * @return {boolean}\n */\nfunction spbcSecLogsFilterIp( ip, status, bulk = false) {\n const data = {\n action: 'spbc_tc__filter_ip',\n ip: ip,\n status: status,\n };\n const params = {\n status: status,\n };\n if (!bulk) {\n params.callback = spbcSecLogsAllowIpCallback;\n }\n spbcSendAJAXRequest( data, params );\n\n return false;\n}\n\n/**\n * Callback for FILTER IP\n * @param {*} result\n * @param {*} data\n */\nfunction spbcSecLogsAllowIpCallback(result, data) {\n console.log(data);\n if (result.success) {\n let msg = data.status === 'allow' ? 'Allowed' : 'Banned';\n alert('Success. Selected IPs have been ' + msg + '. Changes will be applied within 10 minutes.');\n } else {\n alert(result.data);\n }\n}\n\njQuery(document).ready(function() {\n spbcTblRowActionsListen(); // Table. Row actions handler\n spbcTblBulkActionsListen();\n spbcTblPaginationListen(); // Table. Pagination handler\n spbcTblSortListen(); // Table. Sort handler\n\n // Handler for show more SECURITY LOGS\n spbcSecLogsShowMoreListen();\n\n // Start to hide long values in a table\n spbcStartShowHide();\n});\n"],"names":["spbcSecLogsShowMoreListen","jQuery","on","data","params","spbcSettingsSecLogs","clicks","action","amount","button","this","spinner","nextElementSibling","wrapper","find","callback","spbcSecLogsShowMoreCallback","spbcSendAJAXRequest","hide","siblings","css","result","size","html","spbcTblRowActionsListen","spbcStartShowHide","spbcSecLogsAllowIp","ip","spbcSecLogsFilterIp","spbcSecLogsBanIp","status","bulk","spbcSecLogsAllowIpCallback","console","log","success","msg","alert","document","ready","spbcTblBulkActionsListen","spbcTblPaginationListen","spbcTblSortListen"],"mappings":"AAGA,SAASA,4BACLC,OAAO,wBAAwB,EAAEC,GAAG,QAAS,WACzC,IAEQC,EAIAC,EANJC,oBAAoBC,OAAS,GAC7BD,oBAAoBC,MAAM,GACtBH,EAAO,CACPI,OAAQ,+BACRC,OAAQH,oBAAoBG,QAAU,CAACH,oBAAoBC,OAAO,EACtE,EACIF,EAAS,CACTK,OAAQC,KACRC,QAASD,KAAKE,mBACdC,QAASZ,OAAO,0BAA0B,EAAEa,KAAK,OAAO,EACxDC,SAAUC,2BACd,EACAC,oBAAqBd,EAAMC,CAAO,IAGlCH,OAAOS,IAAI,EAAEQ,KAAK,EAClBjB,OAAOS,IAAI,EAAES,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAQA,SAASJ,4BAA4BK,EAAQlB,EAAMC,GAC7B,EAAdiB,EAAOC,MACPrB,OAAOG,EAAOS,OAAO,EAAEU,KAAKF,EAAOE,IAAI,EACvCC,wBAAwB,EACxBC,kBAAkB,IAGlBxB,OAAOG,EAAOK,MAAM,EAAES,KAAK,EAC3BjB,OAAOG,EAAOK,MAAM,EAAEU,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAOA,SAASM,mBAAmBC,GAExB,OADAC,oBAAqBD,EAAI,OAAO,EACzB,CAAA,CACX,CAOA,SAASE,iBAAiBF,GAEtB,OADAC,oBAAqBD,EAAI,MAAM,EACxB,CAAA,CACX,CASA,SAASC,oBAAqBD,EAAIG,EAAQC,EAAO,CAAA,GACvC5B,EAAO,CACTI,OAAQ,qBACRoB,GAAIA,EACJG,OAAQA,CACZ,EACM1B,EAAS,CACX0B,OAAQA,CACZ,EAMA,OALKC,IACD3B,EAAOW,SAAWiB,4BAEtBf,oBAAqBd,EAAMC,CAAO,EAE3B,CAAA,CACX,CAOA,SAAS4B,2BAA2BX,EAAQlB,GACxC8B,QAAQC,IAAI/B,CAAI,EACZkB,EAAOc,SACHC,EAAsB,UAAhBjC,EAAK2B,OAAqB,UAAY,SAChDO,MAAM,mCAAqCD,EAAM,8CAA8C,GAE/FC,MAAMhB,EAAOlB,IAAI,CAEzB,CAEAF,OAAOqC,QAAQ,EAAEC,MAAM,WACnBf,wBAAwB,EACxBgB,yBAAyB,EACzBC,wBAAwB,EACxBC,kBAAkB,EAGlB1C,0BAA0B,EAG1ByB,kBAAkB,CACtB,CAAC"} \ No newline at end of file diff --git a/js/spbc-settings_tab--settings_general.min.js.map b/js/spbc-settings_tab--settings_general.min.js.map index 44828474f..0d3847ca4 100644 --- a/js/spbc-settings_tab--settings_general.min.js.map +++ b/js/spbc-settings_tab--settings_general.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--settings_general.min.js","sources":["spbc-settings_tab--settings_general.js"],"sourcesContent":["jQuery(document).ready(function() {\r\n // Show/Hide access key\r\n jQuery('#showHideLink').on('click', function() {\r\n jQuery('#spbc_key').val(jQuery('#spbc_key').attr('key'));\r\n jQuery('#spbc_key+div').show();\r\n jQuery(this).fadeOut(300);\r\n });\r\n\r\n // Set time zone filed value if key is bad\r\n if ( !+spbcSettings.key_is_ok ) {\r\n let d = new Date();\r\n jQuery('#spbc_admin_timezone').val(d.getTimezoneOffset()/60*(-1));\r\n }\r\n\r\n /**\r\n * Shuffle authentication unique keys and salts\r\n */\r\n function spbcShuffleSalts() {\r\n let data = {};\r\n data.security = spbcSettings.ajax_nonce;\r\n data.action = 'spbc_action_shuffle_salts';\r\n\r\n jQuery.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n success: function(result) {\r\n if (result.success) {\r\n document.location.reload();\r\n } else {\r\n alert(result.data);\r\n }\r\n },\r\n });\r\n }\r\n\r\n // Event for shuffle authentication unique keys and salts\r\n // Enabling the salt update button and repeatedly pressing\r\n let actionShuffleSaltsCountClicks = 0;\r\n\r\n jQuery('#action-shuffle-salts').click(function(e) {\r\n e.preventDefault();\r\n\r\n if (jQuery(this).hasClass('disabled')) {\r\n actionShuffleSaltsCountClicks++;\r\n if (actionShuffleSaltsCountClicks === 3) {\r\n jQuery(this).removeClass('disabled');\r\n }\r\n } else {\r\n actionShuffleSaltsCountClicks = 0;\r\n\r\n if (confirm('Are you sure?')) {\r\n spbcShuffleSalts();\r\n }\r\n }\r\n });\r\n\r\n jQuery('button[id*=\"action-adjust-change-\"]').click(function(e) {\r\n e.preventDefault();\r\n\r\n let data = {};\r\n data.action = 'spbc_action_adjust_change';\r\n data.adjust = jQuery(this).data('adjust');\r\n\r\n let params = {};\r\n params.button = document.getElementById('action-adjust-change-' + data.adjust);\r\n\r\n params.success = function() {\r\n document.location.reload();\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n });\r\n\r\n jQuery('button[id*=\"action-adjust-reverse-\"]').click(function(e) {\r\n e.preventDefault();\r\n\r\n let data = {};\r\n data.action = 'spbc_action_adjust_reverse';\r\n data.adjust = jQuery(this).data('adjust');\r\n\r\n let params = {};\r\n params.button = document.getElementById('action-adjust-reverse-' + data.adjust);\r\n\r\n params.success = function() {\r\n document.location.reload();\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n });\r\n});\r\n"],"names":["jQuery","document","ready","d","on","val","attr","show","this","fadeOut","spbcSettings","key_is_ok","Date","getTimezoneOffset","let","actionShuffleSaltsCountClicks","click","e","preventDefault","hasClass","removeClass","confirm","data","security","ajax_nonce","action","ajax","type","async","url","ajaxurl","success","result","location","reload","alert","params","adjust","button","getElementById","spbcSendAJAXRequest"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WASnB,IACQC,EARRH,OAAO,eAAe,EAAEI,GAAG,QAAS,WAChCJ,OAAO,WAAW,EAAEK,IAAIL,OAAO,WAAW,EAAEM,KAAK,KAAK,CAAC,EACvDN,OAAO,eAAe,EAAEO,KAAK,EAC7BP,OAAOQ,IAAI,EAAEC,QAAQ,GAAG,CAC5B,CAAC,EAGK,CAACC,aAAaC,YACZR,EAAI,IAAIS,KACZZ,OAAO,sBAAsB,EAAEK,IAAIF,EAAEU,kBAAkB,EAAE,GAAG,CAAE,CAAE,GA4BpEC,IAAIC,EAAgC,EAEpCf,OAAO,uBAAuB,EAAEgB,MAAM,SAASC,GAC3CA,EAAEC,eAAe,EAEblB,OAAOQ,IAAI,EAAEW,SAAS,UAAU,EAEM,IADtCJ,EAAAA,GAEIf,OAAOQ,IAAI,EAAEY,YAAY,UAAU,GAGvCL,EAAgC,EAE5BM,QAAQ,eAAe,KAlC3BC,EAAO,IACNC,SAAWb,aAAac,WAC7BF,EAAKG,OAAS,4BAEdzB,OAAO0B,KAAK,CACRC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKnB,aAAaoB,QAClBR,KAAMA,EACNS,QAAS,SAASC,GACVA,EAAOD,QACP9B,SAASgC,SAASC,OAAO,EAEzBC,MAAMH,EAAOV,IAAI,CAEzB,CACJ,CAAC,GAsBL,CAAC,EAEDtB,OAAO,qCAAqC,EAAEgB,MAAM,SAASC,GACzDA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,2BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,wBAA0BjB,EAAKe,MAAM,EAE7ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,EAEDpC,OAAO,sCAAsC,EAAEgB,MAAM,SAASC,GAC1DA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,4BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,yBAA2BjB,EAAKe,MAAM,EAE9ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,CACL,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--settings_general.min.js","sources":["spbc-settings_tab--settings_general.js"],"sourcesContent":["jQuery(document).ready(function() {\n // Show/Hide access key\n jQuery('#showHideLink').on('click', function() {\n jQuery('#spbc_key').val(jQuery('#spbc_key').attr('key'));\n jQuery('#spbc_key+div').show();\n jQuery(this).fadeOut(300);\n });\n\n // Set time zone filed value if key is bad\n if ( !+spbcSettings.key_is_ok ) {\n let d = new Date();\n jQuery('#spbc_admin_timezone').val(d.getTimezoneOffset()/60*(-1));\n }\n\n /**\n * Shuffle authentication unique keys and salts\n */\n function spbcShuffleSalts() {\n let data = {};\n data.security = spbcSettings.ajax_nonce;\n data.action = 'spbc_action_shuffle_salts';\n\n jQuery.ajax({\n type: 'POST',\n async: false,\n url: spbcSettings.ajaxurl,\n data: data,\n success: function(result) {\n if (result.success) {\n document.location.reload();\n } else {\n alert(result.data);\n }\n },\n });\n }\n\n // Event for shuffle authentication unique keys and salts\n // Enabling the salt update button and repeatedly pressing\n let actionShuffleSaltsCountClicks = 0;\n\n jQuery('#action-shuffle-salts').click(function(e) {\n e.preventDefault();\n\n if (jQuery(this).hasClass('disabled')) {\n actionShuffleSaltsCountClicks++;\n if (actionShuffleSaltsCountClicks === 3) {\n jQuery(this).removeClass('disabled');\n }\n } else {\n actionShuffleSaltsCountClicks = 0;\n\n if (confirm('Are you sure?')) {\n spbcShuffleSalts();\n }\n }\n });\n\n jQuery('button[id*=\"action-adjust-change-\"]').click(function(e) {\n e.preventDefault();\n\n let data = {};\n data.action = 'spbc_action_adjust_change';\n data.adjust = jQuery(this).data('adjust');\n\n let params = {};\n params.button = document.getElementById('action-adjust-change-' + data.adjust);\n\n params.success = function() {\n document.location.reload();\n };\n\n spbcSendAJAXRequest(data, params);\n });\n\n jQuery('button[id*=\"action-adjust-reverse-\"]').click(function(e) {\n e.preventDefault();\n\n let data = {};\n data.action = 'spbc_action_adjust_reverse';\n data.adjust = jQuery(this).data('adjust');\n\n let params = {};\n params.button = document.getElementById('action-adjust-reverse-' + data.adjust);\n\n params.success = function() {\n document.location.reload();\n };\n\n spbcSendAJAXRequest(data, params);\n });\n});\n"],"names":["jQuery","document","ready","d","on","val","attr","show","this","fadeOut","spbcSettings","key_is_ok","Date","getTimezoneOffset","let","actionShuffleSaltsCountClicks","click","e","preventDefault","hasClass","removeClass","confirm","data","security","ajax_nonce","action","ajax","type","async","url","ajaxurl","success","result","location","reload","alert","params","adjust","button","getElementById","spbcSendAJAXRequest"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WASnB,IACQC,EARRH,OAAO,eAAe,EAAEI,GAAG,QAAS,WAChCJ,OAAO,WAAW,EAAEK,IAAIL,OAAO,WAAW,EAAEM,KAAK,KAAK,CAAC,EACvDN,OAAO,eAAe,EAAEO,KAAK,EAC7BP,OAAOQ,IAAI,EAAEC,QAAQ,GAAG,CAC5B,CAAC,EAGK,CAACC,aAAaC,YACZR,EAAI,IAAIS,KACZZ,OAAO,sBAAsB,EAAEK,IAAIF,EAAEU,kBAAkB,EAAE,GAAG,CAAE,CAAE,GA4BpEC,IAAIC,EAAgC,EAEpCf,OAAO,uBAAuB,EAAEgB,MAAM,SAASC,GAC3CA,EAAEC,eAAe,EAEblB,OAAOQ,IAAI,EAAEW,SAAS,UAAU,EAEM,IADtCJ,EAAAA,GAEIf,OAAOQ,IAAI,EAAEY,YAAY,UAAU,GAGvCL,EAAgC,EAE5BM,QAAQ,eAAe,KAlC3BC,EAAO,IACNC,SAAWb,aAAac,WAC7BF,EAAKG,OAAS,4BAEdzB,OAAO0B,KAAK,CACRC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKnB,aAAaoB,QAClBR,KAAMA,EACNS,QAAS,SAASC,GACVA,EAAOD,QACP9B,SAASgC,SAASC,OAAO,EAEzBC,MAAMH,EAAOV,IAAI,CAEzB,CACJ,CAAC,GAsBL,CAAC,EAEDtB,OAAO,qCAAqC,EAAEgB,MAAM,SAASC,GACzDA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,2BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,wBAA0BjB,EAAKe,MAAM,EAE7ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,EAEDpC,OAAO,sCAAsC,EAAEgB,MAAM,SAASC,GAC1DA,EAAEC,eAAe,EAEjBJ,IAAIQ,EAAO,CACXG,OAAc,4BADF,EAIRW,GAFJd,EAAKe,OAASrC,OAAOQ,IAAI,EAAEc,KAAK,QAAQ,EAE3B,IACbc,EAAOE,OAASrC,SAASsC,eAAe,yBAA2BjB,EAAKe,MAAM,EAE9ED,EAAOL,QAAU,WACb9B,SAASgC,SAASC,OAAO,CAC7B,EAEAM,oBAAoBlB,EAAMc,CAAM,CACpC,CAAC,CACL,CAAC"} \ No newline at end of file diff --git a/js/spbc-settings_tab--summary.min.js.map b/js/spbc-settings_tab--summary.min.js.map index a5a5f7e95..58b4147e7 100644 --- a/js/spbc-settings_tab--summary.min.js.map +++ b/js/spbc-settings_tab--summary.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--summary.min.js","sources":["spbc-settings_tab--summary.js"],"sourcesContent":["jQuery(document).ready(function() {\r\n console.log('TAB - SUMMARY');\r\n});\r\n"],"names":["jQuery","document","ready","console","log"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WACnBC,QAAQC,IAAI,eAAe,CAC/B,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--summary.min.js","sources":["spbc-settings_tab--summary.js"],"sourcesContent":["jQuery(document).ready(function() {\n console.log('TAB - SUMMARY');\n});\n"],"names":["jQuery","document","ready","console","log"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,WACnBC,QAAQC,IAAI,eAAe,CAC/B,CAAC"} \ No newline at end of file diff --git a/js/spbc-settings_tab--traffic_control.min.js.map b/js/spbc-settings_tab--traffic_control.min.js.map index 859a1e569..69c0cd766 100644 --- a/js/spbc-settings_tab--traffic_control.min.js.map +++ b/js/spbc-settings_tab--traffic_control.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--traffic_control.min.js","sources":["spbc-settings_tab--traffic_control.js"],"sourcesContent":["/**\r\n * Callback for displaying Firewall logs\r\n *\r\n * @param {obj} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n */\r\nfunction spbcTcShowMoreCallback(result, data, params) {\r\n if (data.full_refresh) {\r\n jQuery(params.wrapper).html(result);\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n } else if (result.size > 0) {\r\n jQuery(params.wrapper).html(result.html);\r\n spbcTblRowActionsListen();\r\n spbcStartShowHide();\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(params.button).hide();\r\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n}\r\n\r\n/**\r\n * Listener for `Show more` button in the TC log\r\n */\r\nfunction spbcTcShowMoreListen() {\r\n jQuery('#spbc_show_more_fw_logs_button').on('click', function() {\r\n if (spbcSettingsFWLogs.clicks < 2) {\r\n spbcSettingsFWLogs.clicks++;\r\n let data = {\r\n action: 'spbc_show_more_security_firewall_logs',\r\n amount: spbcSettingsFWLogs.amount * (+spbcSettingsFWLogs.clicks+1),\r\n };\r\n let params = {\r\n button: this,\r\n spinner: this.nextElementSibling,\r\n wrapper: jQuery('#spbc_tbl__traffic_control_logs').find('tbody'),\r\n callback: spbcTcShowMoreCallback,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n } else {\r\n // Hide \"More logs\" button, show \"Control Panel\" button\r\n jQuery(this).hide();\r\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\r\n }\r\n });\r\n}\r\n\r\njQuery(document).ready(function() {\r\n spbcTblRowActionsListen(); // Table. Row actions handler\r\n spbcTblPaginationListen(); // Table. Pagination handler\r\n spbcTblSortListen(); // Table. Sort handler\r\n\r\n // Start to hide long values in a table\r\n spbcStartShowHide();\r\n\r\n // FIREWALL LOGS EVENTS\r\n\r\n // Handler for show more FIREWALL LOGS\r\n spbcTcShowMoreListen();\r\n\r\n // Timer for FireWall logs\r\n setTimeout(function spbcРeartbeat() {\r\n // Do refresh only if traffic control is enabled and tab is active\r\n if ( +spbcSettingsFWLogs.moderate && jQuery('.spbc_tab_nav-traffic_control').hasClass('spbc_tab_nav--active')) {\r\n let data = {\r\n action: 'spbc_show_more_security_firewall_logs',\r\n full_refresh: true,\r\n };\r\n let params = {\r\n wrapper: jQuery('#spbc_tbl__traffic_control_logs'),\r\n callback: spbcTcShowMoreCallback,\r\n notJson: true,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n }\r\n setTimeout(spbcРeartbeat, 60000);\r\n }, 60000);\r\n});\r\n\r\n/**\r\n * @param {string} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcTcAllowIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcTcFilterIp( ip, 'allow');\r\n return false;\r\n}\r\n\r\n/**\r\n * @param {string} ip\r\n * @return {boolean}\r\n */\r\nfunction spbcTcBanIp(ip) { // eslint-disable-line no-unused-vars\r\n spbcTcFilterIp( ip, 'deny');\r\n return false;\r\n}\r\n\r\n/**\r\n * @param {string} ip\r\n * @param {string} status 'allow'|'deny'\r\n * @return {boolean}\r\n */\r\nfunction spbcTcFilterIp(ip, status) {\r\n const data = {\r\n action: 'spbc_tc__filter_ip',\r\n ip: ip,\r\n status: status,\r\n };\r\n const params = {\r\n callback: spbcTcAllowIpCallback,\r\n };\r\n spbcSendAJAXRequest( data, params );\r\n return false;\r\n}\r\n\r\n/**\r\n * @param {obj} data\r\n */\r\nfunction spbcTcAllowIpCallback(data) {\r\n if (data.success) {\r\n alert('Success.');\r\n } else {\r\n alert(data.data);\r\n }\r\n}\r\n"],"names":["spbcTcShowMoreCallback","result","data","params","full_refresh","jQuery","wrapper","html","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","size","button","hide","siblings","css","spbcTcShowMoreListen","on","spbcSettingsFWLogs","clicks","action","amount","this","spinner","nextElementSibling","find","callback","spbcSendAJAXRequest","spbcTcAllowIp","ip","spbcTcFilterIp","spbcTcBanIp","status","spbcTcAllowIpCallback","success","alert","document","ready","setTimeout","spbcРeartbeat","moderate","hasClass","notJson"],"mappings":"AAOA,SAASA,uBAAuBC,EAAQC,EAAMC,GACtCD,EAAKE,cACLC,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,CAAM,EAClCO,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,GACG,EAAdV,EAAOW,MACdP,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,EAAOM,IAAI,EACvCC,wBAAwB,EACxBG,kBAAkB,IAGlBN,OAAOF,EAAOU,MAAM,EAAEC,KAAK,EAC3BT,OAAOF,EAAOU,MAAM,EAAEE,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAKA,SAASC,uBACLZ,OAAO,gCAAgC,EAAEa,GAAG,QAAS,WACjD,IAEQhB,EAIAC,EANJgB,mBAAmBC,OAAS,GAC5BD,mBAAmBC,MAAM,GACrBlB,EAAO,CACPmB,OAAQ,wCACRC,OAAQH,mBAAmBG,QAAU,CAACH,mBAAmBC,OAAO,EACpE,EACIjB,EAAS,CACTU,OAAQU,KACRC,QAASD,KAAKE,mBACdnB,QAASD,OAAO,iCAAiC,EAAEqB,KAAK,OAAO,EAC/DC,SAAU3B,sBACd,EACA4B,oBAAqB1B,EAAMC,CAAO,IAGlCE,OAAOkB,IAAI,EAAET,KAAK,EAClBT,OAAOkB,IAAI,EAAER,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAsCA,SAASa,cAAcC,GAEnB,OADAC,eAAgBD,EAAI,OAAO,EACpB,CAAA,CACX,CAMA,SAASE,YAAYF,GAEjB,OADAC,eAAgBD,EAAI,MAAM,EACnB,CAAA,CACX,CAOA,SAASC,eAAeD,EAAIG,GAUxB,OADAL,oBARa,CACTP,OAAQ,qBACRS,GAAIA,EACJG,OAAQA,CACZ,EACe,CACXN,SAAUO,qBACd,CACkC,EAC3B,CAAA,CACX,CAKA,SAASA,sBAAsBhC,GACvBA,EAAKiC,QACLC,MAAM,UAAU,EAEhBA,MAAMlC,EAAKA,IAAI,CAEvB,CA7EAG,OAAOgC,QAAQ,EAAEC,MAAM,WACnB9B,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAGlBC,kBAAkB,EAKlBM,qBAAqB,EAGrBsB,WAAW,SAASC,IAEhB,IACQtC,EAIAC,EALH,CAACgB,mBAAmBsB,UAAYpC,OAAO,+BAA+B,EAAEqC,SAAS,sBAAsB,IACpGxC,EAAO,CACPmB,OAAQ,wCACRjB,aAAc,CAAA,CAClB,EACID,EAAS,CACTG,QAASD,OAAO,iCAAiC,EACjDsB,SAAU3B,uBACV2C,QAAS,CAAA,CACb,EACAf,oBAAqB1B,EAAMC,CAAO,GAEtCoC,WAAWC,EAAe,GAAK,CACnC,EAAG,GAAK,CACZ,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--traffic_control.min.js","sources":["spbc-settings_tab--traffic_control.js"],"sourcesContent":["/**\n * Callback for displaying Firewall logs\n *\n * @param {obj} result\n * @param {obj} data\n * @param {obj} params\n */\nfunction spbcTcShowMoreCallback(result, data, params) {\n if (data.full_refresh) {\n jQuery(params.wrapper).html(result);\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n } else if (result.size > 0) {\n jQuery(params.wrapper).html(result.html);\n spbcTblRowActionsListen();\n spbcStartShowHide();\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(params.button).hide();\n jQuery(params.button).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n}\n\n/**\n * Listener for `Show more` button in the TC log\n */\nfunction spbcTcShowMoreListen() {\n jQuery('#spbc_show_more_fw_logs_button').on('click', function() {\n if (spbcSettingsFWLogs.clicks < 2) {\n spbcSettingsFWLogs.clicks++;\n let data = {\n action: 'spbc_show_more_security_firewall_logs',\n amount: spbcSettingsFWLogs.amount * (+spbcSettingsFWLogs.clicks+1),\n };\n let params = {\n button: this,\n spinner: this.nextElementSibling,\n wrapper: jQuery('#spbc_tbl__traffic_control_logs').find('tbody'),\n callback: spbcTcShowMoreCallback,\n };\n spbcSendAJAXRequest( data, params );\n } else {\n // Hide \"More logs\" button, show \"Control Panel\" button\n jQuery(this).hide();\n jQuery(this).siblings('.spbc__show_more_logs').css('display', 'inline-block');\n }\n });\n}\n\njQuery(document).ready(function() {\n spbcTblRowActionsListen(); // Table. Row actions handler\n spbcTblPaginationListen(); // Table. Pagination handler\n spbcTblSortListen(); // Table. Sort handler\n\n // Start to hide long values in a table\n spbcStartShowHide();\n\n // FIREWALL LOGS EVENTS\n\n // Handler for show more FIREWALL LOGS\n spbcTcShowMoreListen();\n\n // Timer for FireWall logs\n setTimeout(function spbcРeartbeat() {\n // Do refresh only if traffic control is enabled and tab is active\n if ( +spbcSettingsFWLogs.moderate && jQuery('.spbc_tab_nav-traffic_control').hasClass('spbc_tab_nav--active')) {\n let data = {\n action: 'spbc_show_more_security_firewall_logs',\n full_refresh: true,\n };\n let params = {\n wrapper: jQuery('#spbc_tbl__traffic_control_logs'),\n callback: spbcTcShowMoreCallback,\n notJson: true,\n };\n spbcSendAJAXRequest( data, params );\n }\n setTimeout(spbcРeartbeat, 60000);\n }, 60000);\n});\n\n/**\n * @param {string} ip\n * @return {boolean}\n */\nfunction spbcTcAllowIp(ip) { // eslint-disable-line no-unused-vars\n spbcTcFilterIp( ip, 'allow');\n return false;\n}\n\n/**\n * @param {string} ip\n * @return {boolean}\n */\nfunction spbcTcBanIp(ip) { // eslint-disable-line no-unused-vars\n spbcTcFilterIp( ip, 'deny');\n return false;\n}\n\n/**\n * @param {string} ip\n * @param {string} status 'allow'|'deny'\n * @return {boolean}\n */\nfunction spbcTcFilterIp(ip, status) {\n const data = {\n action: 'spbc_tc__filter_ip',\n ip: ip,\n status: status,\n };\n const params = {\n callback: spbcTcAllowIpCallback,\n };\n spbcSendAJAXRequest( data, params );\n return false;\n}\n\n/**\n * @param {obj} data\n */\nfunction spbcTcAllowIpCallback(data) {\n if (data.success) {\n alert('Success.');\n } else {\n alert(data.data);\n }\n}\n"],"names":["spbcTcShowMoreCallback","result","data","params","full_refresh","jQuery","wrapper","html","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","size","button","hide","siblings","css","spbcTcShowMoreListen","on","spbcSettingsFWLogs","clicks","action","amount","this","spinner","nextElementSibling","find","callback","spbcSendAJAXRequest","spbcTcAllowIp","ip","spbcTcFilterIp","spbcTcBanIp","status","spbcTcAllowIpCallback","success","alert","document","ready","setTimeout","spbcРeartbeat","moderate","hasClass","notJson"],"mappings":"AAOA,SAASA,uBAAuBC,EAAQC,EAAMC,GACtCD,EAAKE,cACLC,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,CAAM,EAClCO,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,GACG,EAAdV,EAAOW,MACdP,OAAOF,EAAOG,OAAO,EAAEC,KAAKN,EAAOM,IAAI,EACvCC,wBAAwB,EACxBG,kBAAkB,IAGlBN,OAAOF,EAAOU,MAAM,EAAEC,KAAK,EAC3BT,OAAOF,EAAOU,MAAM,EAAEE,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAE7F,CAKA,SAASC,uBACLZ,OAAO,gCAAgC,EAAEa,GAAG,QAAS,WACjD,IAEQhB,EAIAC,EANJgB,mBAAmBC,OAAS,GAC5BD,mBAAmBC,MAAM,GACrBlB,EAAO,CACPmB,OAAQ,wCACRC,OAAQH,mBAAmBG,QAAU,CAACH,mBAAmBC,OAAO,EACpE,EACIjB,EAAS,CACTU,OAAQU,KACRC,QAASD,KAAKE,mBACdnB,QAASD,OAAO,iCAAiC,EAAEqB,KAAK,OAAO,EAC/DC,SAAU3B,sBACd,EACA4B,oBAAqB1B,EAAMC,CAAO,IAGlCE,OAAOkB,IAAI,EAAET,KAAK,EAClBT,OAAOkB,IAAI,EAAER,SAAS,uBAAuB,EAAEC,IAAI,UAAW,cAAc,EAEpF,CAAC,CACL,CAsCA,SAASa,cAAcC,GAEnB,OADAC,eAAgBD,EAAI,OAAO,EACpB,CAAA,CACX,CAMA,SAASE,YAAYF,GAEjB,OADAC,eAAgBD,EAAI,MAAM,EACnB,CAAA,CACX,CAOA,SAASC,eAAeD,EAAIG,GAUxB,OADAL,oBARa,CACTP,OAAQ,qBACRS,GAAIA,EACJG,OAAQA,CACZ,EACe,CACXN,SAAUO,qBACd,CACkC,EAC3B,CAAA,CACX,CAKA,SAASA,sBAAsBhC,GACvBA,EAAKiC,QACLC,MAAM,UAAU,EAEhBA,MAAMlC,EAAKA,IAAI,CAEvB,CA7EAG,OAAOgC,QAAQ,EAAEC,MAAM,WACnB9B,wBAAwB,EACxBC,wBAAwB,EACxBC,kBAAkB,EAGlBC,kBAAkB,EAKlBM,qBAAqB,EAGrBsB,WAAW,SAASC,IAEhB,IACQtC,EAIAC,EALH,CAACgB,mBAAmBsB,UAAYpC,OAAO,+BAA+B,EAAEqC,SAAS,sBAAsB,IACpGxC,EAAO,CACPmB,OAAQ,wCACRjB,aAAc,CAAA,CAClB,EACID,EAAS,CACTG,QAASD,OAAO,iCAAiC,EACjDsB,SAAU3B,uBACV2C,QAAS,CAAA,CACb,EACAf,oBAAqB1B,EAAMC,CAAO,GAEtCoC,WAAWC,EAAe,GAAK,CACnC,EAAG,GAAK,CACZ,CAAC"} \ No newline at end of file diff --git a/js/spbc-table.min.js.map b/js/spbc-table.min.js.map index df3e8c5f6..3e40cc5b1 100644 --- a/js/spbc-table.min.js.map +++ b/js/spbc-table.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-table.min.js","sources":["spbc-table.js"],"sourcesContent":["let spbcBulkAction = null;\r\nconst noConfirmActions = spbcGetNoConfirmActions(spbcPublic);\r\n\r\n/**\r\n * Reloads scanner accordion and set all the listeners\r\n * @param {string|null} interactControlTab ajaxResult If is set, will use this var as interactivity data.\r\n * @param {string|null} updateText\r\n */\r\nfunction spbcReloadAccordion(interactControlTab = null, updateText = '') {\r\n spbcSendAJAXRequest(\r\n {action: 'spbc_scanner_tab__reload_accordion'},\r\n {\r\n notJson: true,\r\n callback: function(result, data, params, obj) {\r\n jQuery(obj).accordion('destroy');\r\n jQuery(obj).html(result);\r\n jQuery(obj).accordion({\r\n header: 'h3',\r\n heightStyle: 'content',\r\n collapsible: true,\r\n active: false,\r\n });\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n if (interactControlTab !== null && updateText !== null) {\r\n interactScannerTab(interactControlTab, updateText);\r\n }\r\n },\r\n },\r\n jQuery('#spbc_scan_accordion'),\r\n );\r\n}\r\n\r\n/**\r\n * Open refreshed tab after scanner reload.\r\n * @param {string} controlTab\r\n * @param {string} updateText\r\n */\r\nfunction interactScannerTab(controlTab, updateText) {\r\n let refreshControlTabSelector;\r\n let headerSelector;\r\n let headerUpdateStatus;\r\n\r\n if (\r\n typeof(controlTab) !== 'string' ||\r\n controlTab === '' ||\r\n typeof(updateText) !== 'string' ||\r\n updateText === ''\r\n ) {\r\n return;\r\n }\r\n\r\n // init refresh controlled tabs\r\n refreshControlTabSelector = jQuery('#spbc_scan_accordion div[refresh_control_tab=\"' + controlTab + '\"]')[0];\r\n\r\n // init header to click\r\n headerSelector = 'h3[aria-controls=spbc_scan_accordion_tab_' + controlTab + ']';\r\n headerSelector = jQuery(headerSelector)[0];\r\n\r\n if (\r\n typeof(refreshControlTabSelector) === 'undefined' ||\r\n typeof(headerSelector) === 'undefined'\r\n ) {\r\n return;\r\n }\r\n\r\n // show updated caption\r\n jQuery('

')\r\n .appendTo(headerSelector);\r\n headerUpdateStatus = jQuery('.spbc_accordion_header_caption__update_status');\r\n jQuery('
' + updateText + '
')\r\n .appendTo(headerUpdateStatus);\r\n\r\n // do click to open tab\r\n headerSelector.click();\r\n\r\n // highlight header\r\n refreshControlTabSelector.setAttribute(\r\n 'class',\r\n 'ui-accordion-header ui-corner-top ui-state-default ui-accordion-icons ui-accordion-header-active',\r\n );\r\n\r\n // hide all actions on partial reload\r\n jQuery('.row-actions').hide();\r\n}\r\n\r\n/**\r\n * Table bulk actions\r\n */\r\nfunction spbcTblBulkActionsListen() {\r\n jQuery('.tbl-bulk_actions-all--apply')\r\n .off('click')\r\n .on('click', function() {\r\n // @ToDo perhaps spbcScanner.active is not defined anywhere.\r\n // check this and implement `active` status in the right place\r\n if ( spbcScanner.active ) {\r\n alert(spbcTableLocalize.scannerIsActive);\r\n return;\r\n }\r\n\r\n let self = jQuery(this);\r\n let allowedBulkActions = [\r\n 'approve',\r\n 'disapprove',\r\n 'send',\r\n 'check_analysis_status',\r\n 'approve_page',\r\n 'disapprove_page',\r\n 'cure',\r\n 'delete_from_analysis_log',\r\n 'restore',\r\n ];\r\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\r\n\r\n if ( allowedBulkActions.indexOf( action ) !== -1 ) {\r\n if (!noConfirmActions.any.includes(action)) {\r\n if (!confirm(spbcTable.warning_bulk)) {\r\n return;\r\n }\r\n }\r\n let data = {\r\n action: 'spbc_tbl-action--bulk',\r\n add_action: action,\r\n status: self.parents('.tbl-root').attr('type'),\r\n };\r\n\r\n if (action === 'cure') {\r\n spbcScannerCureBulk(self, true);\r\n return;\r\n }\r\n\r\n if (action === 'restore') {\r\n spbcScannerRestoreBulk(self, true);\r\n }\r\n\r\n if (action === 'delete_from_analysis_log') {\r\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select');\r\n let fileIds = [];\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n fileIds.push(elementId);\r\n });\r\n data.file_ids = fileIds;\r\n }\r\n\r\n let params = {\r\n button: this,\r\n spinner: self.children('.tbl-preloader--small'),\r\n callback: function(out) {\r\n spbcReloadAccordion();\r\n if ( action === 'check_analysis_status' && typeof out !== 'undefined') {\r\n let html = '

Analysis status updated.' +\r\n ' Total: ' + out.counters.total +\r\n ', updated: ' + out.counters.updated +\r\n ', skipped: ' + out.counters.skipped +\r\n ', failed: ' + out.counters.failed +\r\n ', queued: ' + out.counters.queued +\r\n '

';\r\n spbcModal.open().put( html );\r\n }\r\n if ( action === 'send' && typeof out !== 'undefined') {\r\n let html = '

Files have been sent: ' +\r\n out.files_sent_counter +\r\n '

';\r\n spbcModal.open().put(html);\r\n }\r\n },\r\n errorOutput: function( errorText, comment ) {\r\n if ( comment ) {\r\n errorText = errorText + '
Additional information:
' + comment;\r\n }\r\n spbcModal.open().putError( errorText );\r\n },\r\n timeout: 60000,\r\n };\r\n\r\n spbcSendAJAXRequest(data, params);\r\n } else {\r\n alert('This action is not supported for all files yet =(');\r\n }\r\n });\r\n\r\n jQuery('.tbl-bulk_actions--apply')\r\n .off('click')\r\n .on('click', function(e) {\r\n let self = spbcBulkAction || jQuery(this);\r\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\r\n if (!spbcBulkAction && !noConfirmActions.any.includes(action) && !confirm(spbcTable.warning_bulk)) {\r\n return;\r\n }\r\n\r\n spbcBulkAction = self;\r\n\r\n if (action === 'cure') {\r\n spbcScannerCureBulk(jQuery(this), false);\r\n return;\r\n }\r\n\r\n if (action === 'restore') {\r\n spbcScannerRestoreBulk(jQuery(this), false);\r\n return;\r\n }\r\n\r\n if (action === 'delete_from_analysis_log') {\r\n spbcScannerAnalysisLogDeleteFromLog(jQuery(this));\r\n return;\r\n }\r\n\r\n if (action === 'allow' || action === 'ban') {\r\n let sendAction = action === 'ban' ? 'deny' : action;\r\n let items = self.parents('.tbl-root').find('.cb-select:checked');\r\n if (items) {\r\n self.children('.tbl-preloader--small').show();\r\n items.each(function() {\r\n let ip = jQuery(this).parents('tr').find('.tbl-row_action--'+action).data('ip');\r\n spbcSecLogsFilterIp(ip, sendAction, true);\r\n jQuery(this).prop('checked', false);\r\n });\r\n }\r\n self.children('.tbl-preloader--small').hide();\r\n let msg = action === 'allow' ? 'Allowed' : 'Banned';\r\n let html = '

Success. Selected IPs have been ' +\r\n msg +\r\n '. Changes will be applied within 10 minutes.' +\r\n '

';\r\n spbcModal.open().put( html );\r\n setTimeout(spbcReloadAccordion, 1900);\r\n\r\n return;\r\n }\r\n\r\n if ( action !== '-1' && self.parents('.tbl-root').find('.cb-select').is(':checked') ) {\r\n self.children('.tbl-preloader--small').show();\r\n // eslint-disable-next-line max-len\r\n if (self.parents('.tbl-root').find('.cb-select:checked').first().parents('tr').find('.tbl-row_action--'+action)[0]) {\r\n self\r\n .parents('.tbl-root')\r\n .find('.cb-select:checked')\r\n .first()\r\n .parents('tr')\r\n .find('.tbl-row_action--'+action)\r\n .click();\r\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\r\n } else {\r\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\r\n self.click();\r\n }\r\n } else {\r\n self.children('.tbl-preloader--small').hide();\r\n spbcBulkAction = null;\r\n if ( action === 'check_analysis_status' || action === 'disapprove' ) {\r\n let html = '

All available files are updated.' + '

';\r\n spbcModal.open().put( html );\r\n }\r\n if ( action === 'send') {\r\n let html = '

All available files are sent.' + '

';\r\n spbcModal.open().put( html );\r\n }\r\n setTimeout(spbcReloadAccordion, 1900);\r\n }\r\n // reset spbcBulkAction if action is restricted\r\n if (noConfirmActions.restricted.includes(action)) {\r\n spbcBulkAction = null;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Cure selected files\r\n * @param {obj} current\r\n * @param {boolean} allItems\r\n */\r\nfunction spbcScannerCureBulk(current, allItems = false) {\r\n let selectedIds = [];\r\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\r\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\r\n\r\n if (selectedItems.length === 0) {\r\n alert('Please, select elements.');\r\n return;\r\n }\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n selectedIds.push(elementId);\r\n });\r\n\r\n const data = {\r\n action: 'spbc_cure_selected',\r\n security: spbcSettings.ajax_nonce,\r\n selectedIds: selectedIds,\r\n };\r\n jQuery.ajax({\r\n type: 'POST',\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n beforeSend: function() {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .show();\r\n },\r\n success: function(result) {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .hide();\r\n const displayData = result.data;\r\n // prepare output\r\n let divWrapper = document.createElement('div');\r\n let pMessage = document.createElement('p');\r\n let pCounters = document.createElement('p');\r\n let divFiles = document.createElement('div');\r\n let bSeeMore = document.createElement('b');\r\n let pSeeMore = document.createElement('p');\r\n bSeeMore.innerHTML = 'See more details in the threats log.';\r\n pSeeMore.append(bSeeMore);\r\n const failedToCure = displayData.hasOwnProperty('failed_to_cure') ? displayData.failed_to_cure : [];\r\n if (failedToCure.length > 0) {\r\n divFiles.innerHTML = failedToCure.join('
');\r\n }\r\n pMessage.innerHTML = displayData.message;\r\n pCounters.innerHTML += 'Cured: ' +\r\n (\r\n displayData.hasOwnProperty('cured_on_request') ?\r\n displayData.cured_on_request :\r\n 0\r\n );\r\n pCounters.innerHTML += ', already cured: ' +\r\n (\r\n displayData.hasOwnProperty('skipped') ?\r\n displayData.skipped :\r\n 0\r\n );\r\n pCounters.innerHTML += ', failed to cure: ' + failedToCure.length;\r\n\r\n divWrapper.append(pMessage);\r\n divWrapper.append(pCounters);\r\n divWrapper.append(divFiles);\r\n if (failedToCure.length > 0) {\r\n divWrapper.append(pSeeMore);\r\n }\r\n if (result.success) {\r\n spbcModal.open().put(divWrapper.outerHTML);\r\n } else {\r\n spbcModal.open().putError(divWrapper.outerHTML);\r\n }\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n spbcReloadAccordion();\r\n });\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Restore selected files\r\n * @param {obj} current\r\n * @param {boolean} allItems\r\n */\r\nfunction spbcScannerRestoreBulk(current, allItems = false) {\r\n let selectedIds = [];\r\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\r\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\r\n\r\n if (selectedItems.length === 0) {\r\n alert('Please, select elements.');\r\n return;\r\n }\r\n\r\n selectedItems.each(function(index, element) {\r\n const elementId = jQuery(element).val();\r\n selectedIds.push(elementId);\r\n });\r\n\r\n const data = {\r\n action: 'spbc_restore_selected',\r\n security: spbcSettings.ajax_nonce,\r\n selectedIds: selectedIds,\r\n };\r\n jQuery.ajax({\r\n type: 'POST',\r\n url: spbcSettings.ajaxurl,\r\n data: data,\r\n beforeSend: function() {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .show();\r\n },\r\n success: function(result) {\r\n current\r\n .closest('#spbc_tbl__scanner_cure_log')\r\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\r\n .hide();\r\n const displayData = result.data;\r\n // prepare output\r\n let divWrapper = document.createElement('div');\r\n let pMessage = document.createElement('p');\r\n let pCounters = document.createElement('p');\r\n let divFiles = document.createElement('div');\r\n const failedToRestore = displayData.hasOwnProperty('failed_to_restore') ?\r\n displayData.failed_to_restore :\r\n [];\r\n if (failedToRestore.length > 0) {\r\n divFiles.innerHTML = failedToRestore.join('
');\r\n }\r\n pMessage.innerHTML = displayData.message;\r\n pCounters.innerHTML += 'Restored: ' +\r\n (\r\n displayData.hasOwnProperty('restored_on_request') ?\r\n displayData.restored_on_request :\r\n 0\r\n );\r\n pCounters.innerHTML += ', unchanged or already restored: ' +\r\n (\r\n displayData.hasOwnProperty('skipped') ?\r\n displayData.skipped :\r\n 0\r\n );\r\n pCounters.innerHTML += ', failed to restore: ' + failedToRestore.length;\r\n\r\n divWrapper.append(pMessage);\r\n divWrapper.append(pCounters);\r\n divWrapper.append(divFiles);\r\n\r\n if (result.success) {\r\n spbcModal.open().put(divWrapper.outerHTML);\r\n } else {\r\n spbcModal.open().putError(divWrapper.outerHTML);\r\n }\r\n document.addEventListener('spbcModalClosed', function( e ) {\r\n spbcReloadAccordion();\r\n });\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Table row actions\r\n */\r\nfunction spbcTblRowActionsListen() {\r\n jQuery('.tbl-row_action--ajax')\r\n .off('click')\r\n .on('click', function() {\r\n if ( spbcScanner.active ) {\r\n alert(spbcTableLocalize.scannerIsActive);\r\n return;\r\n }\r\n let self = jQuery(this);\r\n let data = {\r\n action: 'spbc_tbl-action--row',\r\n add_action: self.attr('row-action'),\r\n id: self.parents('.row-actions').attr('uid'),\r\n cols: self.parents('.row-actions').attr('cols_amount'),\r\n page_url: self.parent().attr('uid'),\r\n page_id: self.parent().attr('page_id'),\r\n };\r\n let params = {\r\n callback: spbcTblRowActionsCallback,\r\n errorOutput: function(msg, comment, hideSupportLink) {\r\n spbcModal.open().putError( msg, hideSupportLink );\r\n },\r\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\r\n };\r\n\r\n // @ToDo delete this timeout after ready task #10014\r\n if ( self.attr('row-action') === 'delete' ) {\r\n params.timeout = 60000;\r\n }\r\n\r\n let fileName = self.parent().parent()[0].firstChild.innerHTML;\r\n let confirmationHeader = spbcTable['warning_h_'+self.attr('row-action')] || spbcTable.warning_default;\r\n let confirmationText = spbcTable['warning_t_'+self.attr('row-action')] || '';\r\n // init row actions with no confirm required\r\n if ( spbcBulkAction || noConfirmActions.any.includes(data.add_action) ) {\r\n // do not request user confirmation if the action is excluded or if it is a bulk action\r\n spbcSendAJAXRequest(data, params, self.parents('tr'));\r\n } else {\r\n // do request confirmation otherwise\r\n const yesButtonText = self.attr('row-action') === 'quarantine' ? 'Quarantine' : 'Yes';\r\n const noButtonText = self.attr('row-action') === 'quarantine' ? 'Cancel' : 'No';\r\n spbcModal.open().confirm(confirmationHeader, confirmationText, fileName, (confirmed) => {\r\n if (confirmed) {\r\n spbcSendAJAXRequest(data, params, self.parents('tr'));\r\n }\r\n }, yesButtonText, noButtonText);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Row actions with no confirm required.\r\n * @param {object} spbcPublic Global localized SPBC object\r\n * @return {{}}\r\n */\r\nfunction spbcGetNoConfirmActions(spbcPublic) {\r\n let noConfirmActionsEmpty = {\r\n 'any': [],\r\n 'restricted': [],\r\n 'defaults': [],\r\n };\r\n let noConfirmActions = noConfirmActionsEmpty;\r\n try {\r\n if ( typeof spbcPublic !== 'undefined' && spbcPublic.hasOwnProperty('no_confirm_row_actions')) {\r\n noConfirmActions = JSON.parse(spbcPublic.no_confirm_row_actions);\r\n }\r\n if (\r\n typeof noConfirmActions.any.includes !== 'function' ||\r\n typeof noConfirmActions.restricted.includes !== 'function' ||\r\n typeof noConfirmActions.defaults.includes !== 'function'\r\n ) {\r\n noConfirmActions = noConfirmActionsEmpty;\r\n }\r\n } catch (e) {\r\n noConfirmActions = noConfirmActionsEmpty;\r\n }\r\n return noConfirmActions;\r\n}\r\n\r\n/**\r\n * Callback for table row actions\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcTblRowActionsCallback(result, data, params, obj) {\r\n if (result.color) {\r\n obj.css({background: result.background, color: result.color});\r\n }\r\n if (result.html) {\r\n obj.parent().parent().parent().prepend(result.html);\r\n setTimeout(function() {\r\n obj.fadeOut(300);\r\n }, 1500);\r\n if ( ! spbcBulkAction) {\r\n setTimeout(spbcReloadAccordion, 1900);\r\n }\r\n }\r\n\r\n if (\r\n data.add_action === 'copy_file_info'\r\n ) {\r\n if (result.success === true && result.data.file_info) {\r\n window.\r\n prompt('Copy the file info below and send it to support@cleantalk.org: ', result.data.file_info);\r\n } else {\r\n let errorText = (typeof result.data.error !== 'undefined') ?\r\n result.data.error :\r\n 'Unknown copy_file_info error';\r\n spbcModal.open().putError( errorText );\r\n }\r\n }\r\n\r\n if (result.temp_html) {\r\n let tmp=obj.html();\r\n obj.html(result.temp_html);\r\n if (result.updated_template !== undefined) {\r\n let updatedType = result.updated_template_type;\r\n let template = result.updated_template;\r\n let rowsInTemplate = jQuery(template).find('.wp-list-table tbody tr');\r\n let countRowInTemplate = rowsInTemplate.length;\r\n let targetTab = jQuery('[aria-controls=\"spbc_scan_accordion_tab_' + updatedType + '\"]');\r\n\r\n if (targetTab.length > 0) {\r\n let table = jQuery('#spbc_tbl__scanner_' + updatedType);\r\n // Count files in header\r\n jQuery('.spbc_bad_type_count.' + updatedType + '_counter').text(countRowInTemplate);\r\n // Count rows in table\r\n let countExistingRows = table.find('.wp-list-table tbody tr').length;\r\n table.remove();\r\n jQuery('#spbc_scan_accordion_tab_' + updatedType).append(template);\r\n // Marked new rows\r\n jQuery(jQuery('#spbc_scan_accordion_tab_' + updatedType)\r\n .find('.wp-list-table tbody tr'))\r\n .each(function(index, element) {\r\n if (++index > countExistingRows) {\r\n jQuery(element).css('outline', '1px solid green');\r\n }\r\n });\r\n targetTab.click();\r\n } else {\r\n if (updatedType === 'analysis_log') {\r\n // eslint-disable-next-line max-len\r\n let tabHeaderTemplate = '

Analysis Log (' + countRowInTemplate + ')

';\r\n // eslint-disable-next-line max-len\r\n let tabBodyTemplate = '

Files sent for analysis.

' +\r\n template +\r\n '
';\r\n jQuery('#spbc_scan_accordion_tab_critical').after(tabHeaderTemplate + tabBodyTemplate);\r\n targetTab.click();\r\n }\r\n }\r\n }\r\n setTimeout(function() {\r\n obj\r\n .html(tmp)\r\n .css({background: 'inherit'})\r\n .find('.column-primary .row-actions .tbl-row_action--' + data.add_action)\r\n .remove();\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcStartShowHide();\r\n }, 5000);\r\n }\r\n if (spbcBulkAction) {\r\n spbcBulkAction.click();\r\n }\r\n}\r\n\r\n/**\r\n * Table pagination actions\r\n */\r\nfunction spbcTblPaginationListen() {\r\n let data = {action: 'spbc_tbl-pagination'};\r\n let params = {callback: spbcTblPaginationCallback, notJson: true};\r\n jQuery('.tbl-pagination--button').on('click', function() {\r\n jQuery(this).parents('.tbl-root').find('.tbl-pagination--button').attr('disabled', 'disabled');\r\n });\r\n jQuery('.tbl-pagination--go').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.siblings('.tbl-pagination--curr_page').val();\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--prev').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.parents('.tbl-pagination--wrapper').attr('prev_page');\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--next').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.parents('.tbl-pagination--wrapper').attr('next_page');\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--end').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = self.parents('.tbl-pagination--wrapper').attr('last_page');\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n jQuery('.tbl-pagination--start').on('click', function() {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n data.page = 1;\r\n data.type = obj.attr('type');\r\n params.spinner = self.siblings('.tbl-preloader--small');\r\n spbcSendAJAXRequest(data, params, obj);\r\n });\r\n}\r\n\r\n/**\r\n * Callback for Table pagination actions\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcTblPaginationCallback(result, data, params, obj) {\r\n jQuery(obj)\r\n .html(result)\r\n .find('.tbl-pagination--button').removeAttr('disabled');\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcStartShowHide();\r\n}\r\n\r\n/**\r\n * Table sort actions\r\n */\r\nfunction spbcTblSortListen() {\r\n let params = {callback: spbcTblSortCallback, notJson: true};\r\n jQuery('.tbl-column-sortable').on('click', function(e) {\r\n if (e.target.classList.contains('tbl-sorting_indicator')) {\r\n let self = jQuery(this);\r\n let obj = self.parents('.tbl-root');\r\n let domain = obj.attr('type') == 'links'? jQuery('#spbc_tbl__scanner__outbound_links b').html(): '';\r\n let data = {\r\n action: 'spbc_tbl-sort',\r\n order_by: self.attr('id'),\r\n order: self.attr('sort_direction'),\r\n type: obj.attr('type'),\r\n domain: domain,\r\n };\r\n spbcSendAJAXRequest(data, params, obj);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Callback for Table sort actions\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcTblSortCallback(result, data, params, obj) {\r\n jQuery(obj).html(result);\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n}\r\n\r\njQuery(document).ready(function() {\r\n // Table. Row actions handler\r\n spbcTblBulkActionsListen();\r\n spbcTblRowActionsListen();\r\n spbcTblPaginationListen();\r\n spbcTblSortListen();\r\n spbcEATUpdateIntervalStart();\r\n});\r\n\r\n/**\r\n * Switching table handler\r\n * Using by inline php code\r\n *\r\n * @param {obj} obj\r\n * @param {obj} table\r\n *\r\n */\r\nfunction spbcScannerSwitchTable(obj, table) {/* eslint-disable-line no-unused-vars */\r\n let _obj = jQuery(obj);\r\n let domain = _obj.parents('.row-actions').attr('uid');\r\n let data = {action: 'spbc_tbl-switch', type: table, domain: domain};\r\n let params = {callback: spbcTblPaginationCallback, notJson: true};\r\n spbcSendAJAXRequest(data, params, _obj.parents('.tbl-root'));\r\n}\r\n\r\n/**\r\n * Open/close table rows handler\r\n * Using by inline php code\r\n *\r\n * @param {string} blockId\r\n * @param {string} columnKey\r\n */\r\nfunction spbcShowHideRows(blockId, columnKey) {/* eslint-disable-line no-unused-vars */\r\n let className = '.' + columnKey + '_block_' + blockId;\r\n let block = jQuery(className);\r\n if (block.hasClass('mob_table_active')) {\r\n block.removeClass('mob_table_active');\r\n } else {\r\n block.addClass('mob_table_active');\r\n }\r\n}\r\n\r\n/**\r\n * Starts an interval to update the analysis log table and stats every 6 seconds.\r\n */\r\nfunction spbcEATUpdateIntervalStart() {\r\n setInterval(() => {\r\n // Check if the analysis log tab is present\r\n if (document.querySelector('div[refresh_control_tab=\"analysis_log\"]') !== null) {\r\n // Add a spinner to the analysis log tab header\r\n spbcEATAddSpinner();\r\n // Update the analysis log table\r\n spbcUpdateTableEAT();\r\n // Update the analysis log stats\r\n spbcUpdateStatsEAT();\r\n }\r\n }, 60000);\r\n}\r\n\r\n/**\r\n * Adds a spinner to the analysis log tab header if it doesn't already exist.\r\n */\r\nfunction spbcEATAddSpinner() {\r\n if (document.getElementById('analysis_log_counter_spinner') === null) {\r\n const refreshTab = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_analysis_log\"]');\r\n if (refreshTab !== null) {\r\n const spinner = document.createElement('img');\r\n spinner.class = 'spbc_preloader';\r\n // todo Probably we need a validation function of spbcSettings object\r\n spinner.alt = spbcSettings.spbcSpinner.altText;\r\n spinner.src = spbcSettings.spbcSpinner.imgSource;\r\n spinner.id = 'analysis_log_counter_spinner';\r\n spinner.style = 'display: none; height: 13px; position: relative; top: 2px; margin-left: 5px';\r\n refreshTab.append(spinner);\r\n }\r\n }\r\n spbcEATSwitchSpinner();\r\n}\r\n\r\n/**\r\n * Toggles the display of the spinner in the analysis log tab header.\r\n */\r\nfunction spbcEATSwitchSpinner() {\r\n const spinner = document.getElementById('analysis_log_counter_spinner');\r\n if (spinner !== null) {\r\n spinner.style.display = spinner.style.display === 'none' ?\r\n spinner.style.display = 'inline' :\r\n spinner.style.display = 'none';\r\n }\r\n}\r\n\r\n/**\r\n * Sends an AJAX request to update the analysis log table.\r\n */\r\nfunction spbcUpdateTableEAT() {\r\n // Define the tab name for the request\r\n let tabName = 'scanner';\r\n // Data object containing parameters for the AJAX request\r\n let data = {\r\n action: 'spbc_settings__draw_elements',\r\n tab_name: tabName,\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n // Params object with additional settings for the AJAX request\r\n let currentParams = {\r\n callback: spbcUpdateTableCallbackEAT,\r\n notJson: true,\r\n additional: null,\r\n };\r\n // Send the AJAX request with the data and params objects\r\n spbcSendAJAXRequest( data, currentParams, null );\r\n}\r\n\r\n/**\r\n * Callback function to update the analysis log table with new HTML content.\r\n *\r\n * @param {string} allTablesHTML - The HTML content of all tables.\r\n */\r\nfunction spbcUpdateTableCallbackEAT(allTablesHTML) {\r\n // select the same table element to search in the current code and update from received\r\n const analysisTableSelector = '#spbc_tbl__scanner_analysis_log';\r\n const parser = new DOMParser();\r\n const allTablesHTMLParsed = parser.parseFromString(allTablesHTML, 'text/html');\r\n\r\n let newTabElement = null;\r\n let newTabElementInnerHTML = '';\r\n let currentTabElement = null;\r\n\r\n // get new analysis table element and its HTML\r\n newTabElement = allTablesHTMLParsed.querySelector(analysisTableSelector);\r\n if (newTabElement !== null && newTabElement.innerHTML !== '') {\r\n newTabElementInnerHTML = newTabElement.innerHTML;\r\n }\r\n\r\n // get current analysis table element and its HTML\r\n currentTabElement = document.querySelector(analysisTableSelector);\r\n if (currentTabElement !== null && currentTabElement.innerHTML === '') {\r\n currentTabElement = null;\r\n }\r\n\r\n // update analysis table element if it's changed and new data presented\r\n if (currentTabElement !== null && newTabElementInnerHTML !== '') {\r\n currentTabElement.innerHTML = newTabElementInnerHTML;\r\n }\r\n}\r\n\r\n/**\r\n * Sends an AJAX request to update the analysis log stats.\r\n */\r\nfunction spbcUpdateStatsEAT() {\r\n // Data object containing parameters for the AJAX request\r\n let data = {\r\n action: 'spbc_analysyis_files_stats__get_html',\r\n sub_action: 'give_me_html',\r\n security: spbcSettings.ajax_nonce,\r\n };\r\n // Params object with additional settings for the AJAX request\r\n let params = {\r\n callback: spbcUpdateStatsCallbackEAT,\r\n notJson: true,\r\n };\r\n // Send the AJAX request with the data and params objects\r\n spbcSendAJAXRequest(data, params);\r\n}\r\n\r\n/**\r\n * Callback function to update the analysis log stats with new HTML content.\r\n *\r\n * @param {string} newStatsHtml - The new HTML content for the stats.\r\n */\r\nfunction spbcUpdateStatsCallbackEAT(newStatsHtml) {\r\n // Get the element that displays the analysis files stats\r\n let info = document.getElementById('spbc_analysis_files_stats');\r\n // If the element exists, update its inner HTML with the new stats\r\n if (info) {\r\n info.innerHTML = newStatsHtml;\r\n }\r\n // Toggle the display of the spinner in the analysis log tab header\r\n spbcEATSwitchSpinner();\r\n}\r\n"],"names":["let","spbcBulkAction","noConfirmActions","spbcGetNoConfirmActions","spbcPublic","spbcReloadAccordion","interactControlTab","updateText","spbcSendAJAXRequest","action","notJson","callback","result","data","params","obj","jQuery","accordion","html","header","heightStyle","collapsible","active","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","interactScannerTab","controlTab","refreshControlTabSelector","headerUpdateStatus","headerSelector","appendTo","click","setAttribute","hide","off","on","spbcScanner","alert","spbcTableLocalize","scannerIsActive","self","this","siblings","children","first","selectedIndex","value","indexOf","any","includes","confirm","spbcTable","warning_bulk","add_action","status","parents","attr","spbcScannerCureBulk","spbcScannerRestoreBulk","selectedItems","closest","find","fileIds","each","index","element","elementId","val","push","file_ids","button","spinner","out","counters","total","updated","skipped","failed","queued","spbcModal","open","put","files_sent_counter","errorOutput","errorText","comment","putError","timeout","e","spbcScannerAnalysisLogDeleteFromLog","sendAction","items","msg","show","ip","spbcSecLogsFilterIp","prop","setTimeout","is","restricted","current","allItems","selectedIds","selector","length","security","spbcSettings","ajax_nonce","ajax","type","url","ajaxurl","beforeSend","success","displayData","divWrapper","document","createElement","pMessage","pCounters","divFiles","bSeeMore","pSeeMore","failedToCure","innerHTML","append","hasOwnProperty","failed_to_cure","join","message","cured_on_request","outerHTML","addEventListener","failedToRestore","failed_to_restore","restored_on_request","id","cols","page_url","parent","page_id","spbcTblRowActionsCallback","hideSupportLink","yesButtonText","noButtonText","fileName","firstChild","confirmationHeader","warning_default","confirmationText","confirmed","noConfirmActionsEmpty","defaults","JSON","parse","no_confirm_row_actions","color","css","background","prepend","fadeOut","file_info","window","prompt","error","temp_html","tmp","undefined","updated_template","updatedType","updated_template_type","template","countRowInTemplate","targetTab","table","text","countExistingRows","remove","tabHeaderTemplate","tabBodyTemplate","after","spbcTblPaginationCallback","page","removeAttr","spbcTblSortCallback","domain","target","classList","contains","order_by","order","spbcScannerSwitchTable","_obj","spbcShowHideRows","blockId","columnKey","block","hasClass","removeClass","addClass","spbcEATUpdateIntervalStart","setInterval","querySelector","spbcEATAddSpinner","spbcUpdateTableEAT","spbcUpdateStatsEAT","refreshTab","getElementById","class","alt","spbcSpinner","altText","src","imgSource","style","spbcEATSwitchSpinner","display","tab_name","spbcUpdateTableCallbackEAT","additional","allTablesHTML","analysisTableSelector","newTabElementInnerHTML","currentTabElement","newTabElement","DOMParser","parseFromString","sub_action","spbcUpdateStatsCallbackEAT","newStatsHtml","info","ready"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-table.min.js","sources":["spbc-table.js"],"sourcesContent":["let spbcBulkAction = null;\nconst noConfirmActions = spbcGetNoConfirmActions(spbcPublic);\n\n/**\n * Reloads scanner accordion and set all the listeners\n * @param {string|null} interactControlTab ajaxResult If is set, will use this var as interactivity data.\n * @param {string|null} updateText\n */\nfunction spbcReloadAccordion(interactControlTab = null, updateText = '') {\n spbcSendAJAXRequest(\n {action: 'spbc_scanner_tab__reload_accordion'},\n {\n notJson: true,\n callback: function(result, data, params, obj) {\n jQuery(obj).accordion('destroy');\n jQuery(obj).html(result);\n jQuery(obj).accordion({\n header: 'h3',\n heightStyle: 'content',\n collapsible: true,\n active: false,\n });\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n if (interactControlTab !== null && updateText !== null) {\n interactScannerTab(interactControlTab, updateText);\n }\n },\n },\n jQuery('#spbc_scan_accordion'),\n );\n}\n\n/**\n * Open refreshed tab after scanner reload.\n * @param {string} controlTab\n * @param {string} updateText\n */\nfunction interactScannerTab(controlTab, updateText) {\n let refreshControlTabSelector;\n let headerSelector;\n let headerUpdateStatus;\n\n if (\n typeof(controlTab) !== 'string' ||\n controlTab === '' ||\n typeof(updateText) !== 'string' ||\n updateText === ''\n ) {\n return;\n }\n\n // init refresh controlled tabs\n refreshControlTabSelector = jQuery('#spbc_scan_accordion div[refresh_control_tab=\"' + controlTab + '\"]')[0];\n\n // init header to click\n headerSelector = 'h3[aria-controls=spbc_scan_accordion_tab_' + controlTab + ']';\n headerSelector = jQuery(headerSelector)[0];\n\n if (\n typeof(refreshControlTabSelector) === 'undefined' ||\n typeof(headerSelector) === 'undefined'\n ) {\n return;\n }\n\n // show updated caption\n jQuery('
')\n .appendTo(headerSelector);\n headerUpdateStatus = jQuery('.spbc_accordion_header_caption__update_status');\n jQuery('
' + updateText + '
')\n .appendTo(headerUpdateStatus);\n\n // do click to open tab\n headerSelector.click();\n\n // highlight header\n refreshControlTabSelector.setAttribute(\n 'class',\n 'ui-accordion-header ui-corner-top ui-state-default ui-accordion-icons ui-accordion-header-active',\n );\n\n // hide all actions on partial reload\n jQuery('.row-actions').hide();\n}\n\n/**\n * Table bulk actions\n */\nfunction spbcTblBulkActionsListen() {\n jQuery('.tbl-bulk_actions-all--apply')\n .off('click')\n .on('click', function() {\n // @ToDo perhaps spbcScanner.active is not defined anywhere.\n // check this and implement `active` status in the right place\n if ( spbcScanner.active ) {\n alert(spbcTableLocalize.scannerIsActive);\n return;\n }\n\n let self = jQuery(this);\n let allowedBulkActions = [\n 'approve',\n 'disapprove',\n 'send',\n 'check_analysis_status',\n 'approve_page',\n 'disapprove_page',\n 'cure',\n 'delete_from_analysis_log',\n 'restore',\n ];\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\n\n if ( allowedBulkActions.indexOf( action ) !== -1 ) {\n if (!noConfirmActions.any.includes(action)) {\n if (!confirm(spbcTable.warning_bulk)) {\n return;\n }\n }\n let data = {\n action: 'spbc_tbl-action--bulk',\n add_action: action,\n status: self.parents('.tbl-root').attr('type'),\n };\n\n if (action === 'cure') {\n spbcScannerCureBulk(self, true);\n return;\n }\n\n if (action === 'restore') {\n spbcScannerRestoreBulk(self, true);\n }\n\n if (action === 'delete_from_analysis_log') {\n const selectedItems = self.closest('#spbc_tbl__scanner_analysis_log').find('.cb-select');\n let fileIds = [];\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n fileIds.push(elementId);\n });\n data.file_ids = fileIds;\n }\n\n let params = {\n button: this,\n spinner: self.children('.tbl-preloader--small'),\n callback: function(out) {\n spbcReloadAccordion();\n if ( action === 'check_analysis_status' && typeof out !== 'undefined') {\n let html = '

Analysis status updated.' +\n ' Total: ' + out.counters.total +\n ', updated: ' + out.counters.updated +\n ', skipped: ' + out.counters.skipped +\n ', failed: ' + out.counters.failed +\n ', queued: ' + out.counters.queued +\n '

';\n spbcModal.open().put( html );\n }\n if ( action === 'send' && typeof out !== 'undefined') {\n let html = '

Files have been sent: ' +\n out.files_sent_counter +\n '

';\n spbcModal.open().put(html);\n }\n },\n errorOutput: function( errorText, comment ) {\n if ( comment ) {\n errorText = errorText + '
Additional information:
' + comment;\n }\n spbcModal.open().putError( errorText );\n },\n timeout: 60000,\n };\n\n spbcSendAJAXRequest(data, params);\n } else {\n alert('This action is not supported for all files yet =(');\n }\n });\n\n jQuery('.tbl-bulk_actions--apply')\n .off('click')\n .on('click', function(e) {\n let self = spbcBulkAction || jQuery(this);\n let action = self.siblings('select').children()[self.siblings('select').first()[0].selectedIndex].value;\n if (!spbcBulkAction && !noConfirmActions.any.includes(action) && !confirm(spbcTable.warning_bulk)) {\n return;\n }\n\n spbcBulkAction = self;\n\n if (action === 'cure') {\n spbcScannerCureBulk(jQuery(this), false);\n return;\n }\n\n if (action === 'restore') {\n spbcScannerRestoreBulk(jQuery(this), false);\n return;\n }\n\n if (action === 'delete_from_analysis_log') {\n spbcScannerAnalysisLogDeleteFromLog(jQuery(this));\n return;\n }\n\n if (action === 'allow' || action === 'ban') {\n let sendAction = action === 'ban' ? 'deny' : action;\n let items = self.parents('.tbl-root').find('.cb-select:checked');\n if (items) {\n self.children('.tbl-preloader--small').show();\n items.each(function() {\n let ip = jQuery(this).parents('tr').find('.tbl-row_action--'+action).data('ip');\n spbcSecLogsFilterIp(ip, sendAction, true);\n jQuery(this).prop('checked', false);\n });\n }\n self.children('.tbl-preloader--small').hide();\n let msg = action === 'allow' ? 'Allowed' : 'Banned';\n let html = '

Success. Selected IPs have been ' +\n msg +\n '. Changes will be applied within 10 minutes.' +\n '

';\n spbcModal.open().put( html );\n setTimeout(spbcReloadAccordion, 1900);\n\n return;\n }\n\n if ( action !== '-1' && self.parents('.tbl-root').find('.cb-select').is(':checked') ) {\n self.children('.tbl-preloader--small').show();\n // eslint-disable-next-line max-len\n if (self.parents('.tbl-root').find('.cb-select:checked').first().parents('tr').find('.tbl-row_action--'+action)[0]) {\n self\n .parents('.tbl-root')\n .find('.cb-select:checked')\n .first()\n .parents('tr')\n .find('.tbl-row_action--'+action)\n .click();\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\n } else {\n self.parents('.tbl-root').find('.cb-select:checked').first().prop('checked', false);\n self.click();\n }\n } else {\n self.children('.tbl-preloader--small').hide();\n spbcBulkAction = null;\n if ( action === 'check_analysis_status' || action === 'disapprove' ) {\n let html = '

All available files are updated.' + '

';\n spbcModal.open().put( html );\n }\n if ( action === 'send') {\n let html = '

All available files are sent.' + '

';\n spbcModal.open().put( html );\n }\n setTimeout(spbcReloadAccordion, 1900);\n }\n // reset spbcBulkAction if action is restricted\n if (noConfirmActions.restricted.includes(action)) {\n spbcBulkAction = null;\n }\n });\n}\n\n/**\n * Cure selected files\n * @param {obj} current\n * @param {boolean} allItems\n */\nfunction spbcScannerCureBulk(current, allItems = false) {\n let selectedIds = [];\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\n\n if (selectedItems.length === 0) {\n alert('Please, select elements.');\n return;\n }\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n selectedIds.push(elementId);\n });\n\n const data = {\n action: 'spbc_cure_selected',\n security: spbcSettings.ajax_nonce,\n selectedIds: selectedIds,\n };\n jQuery.ajax({\n type: 'POST',\n url: spbcSettings.ajaxurl,\n data: data,\n beforeSend: function() {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .show();\n },\n success: function(result) {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .hide();\n const displayData = result.data;\n // prepare output\n let divWrapper = document.createElement('div');\n let pMessage = document.createElement('p');\n let pCounters = document.createElement('p');\n let divFiles = document.createElement('div');\n let bSeeMore = document.createElement('b');\n let pSeeMore = document.createElement('p');\n bSeeMore.innerHTML = 'See more details in the threats log.';\n pSeeMore.append(bSeeMore);\n const failedToCure = displayData.hasOwnProperty('failed_to_cure') ? displayData.failed_to_cure : [];\n if (failedToCure.length > 0) {\n divFiles.innerHTML = failedToCure.join('
');\n }\n pMessage.innerHTML = displayData.message;\n pCounters.innerHTML += 'Cured: ' +\n (\n displayData.hasOwnProperty('cured_on_request') ?\n displayData.cured_on_request :\n 0\n );\n pCounters.innerHTML += ', already cured: ' +\n (\n displayData.hasOwnProperty('skipped') ?\n displayData.skipped :\n 0\n );\n pCounters.innerHTML += ', failed to cure: ' + failedToCure.length;\n\n divWrapper.append(pMessage);\n divWrapper.append(pCounters);\n divWrapper.append(divFiles);\n if (failedToCure.length > 0) {\n divWrapper.append(pSeeMore);\n }\n if (result.success) {\n spbcModal.open().put(divWrapper.outerHTML);\n } else {\n spbcModal.open().putError(divWrapper.outerHTML);\n }\n document.addEventListener('spbcModalClosed', function( e ) {\n spbcReloadAccordion();\n });\n },\n });\n}\n\n/**\n * Restore selected files\n * @param {obj} current\n * @param {boolean} allItems\n */\nfunction spbcScannerRestoreBulk(current, allItems = false) {\n let selectedIds = [];\n const selector = allItems ? '.cb-select' : '.cb-select:checked';\n const selectedItems = current.closest('#spbc_tbl__scanner_cure_log').find(selector);\n\n if (selectedItems.length === 0) {\n alert('Please, select elements.');\n return;\n }\n\n selectedItems.each(function(index, element) {\n const elementId = jQuery(element).val();\n selectedIds.push(elementId);\n });\n\n const data = {\n action: 'spbc_restore_selected',\n security: spbcSettings.ajax_nonce,\n selectedIds: selectedIds,\n };\n jQuery.ajax({\n type: 'POST',\n url: spbcSettings.ajaxurl,\n data: data,\n beforeSend: function() {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .show();\n },\n success: function(result) {\n current\n .closest('#spbc_tbl__scanner_cure_log')\n .find('.tbl-button---white_blue .tbl-preloader--in_button')\n .hide();\n const displayData = result.data;\n // prepare output\n let divWrapper = document.createElement('div');\n let pMessage = document.createElement('p');\n let pCounters = document.createElement('p');\n let divFiles = document.createElement('div');\n const failedToRestore = displayData.hasOwnProperty('failed_to_restore') ?\n displayData.failed_to_restore :\n [];\n if (failedToRestore.length > 0) {\n divFiles.innerHTML = failedToRestore.join('
');\n }\n pMessage.innerHTML = displayData.message;\n pCounters.innerHTML += 'Restored: ' +\n (\n displayData.hasOwnProperty('restored_on_request') ?\n displayData.restored_on_request :\n 0\n );\n pCounters.innerHTML += ', unchanged or already restored: ' +\n (\n displayData.hasOwnProperty('skipped') ?\n displayData.skipped :\n 0\n );\n pCounters.innerHTML += ', failed to restore: ' + failedToRestore.length;\n\n divWrapper.append(pMessage);\n divWrapper.append(pCounters);\n divWrapper.append(divFiles);\n\n if (result.success) {\n spbcModal.open().put(divWrapper.outerHTML);\n } else {\n spbcModal.open().putError(divWrapper.outerHTML);\n }\n document.addEventListener('spbcModalClosed', function( e ) {\n spbcReloadAccordion();\n });\n },\n });\n}\n\n/**\n * Table row actions\n */\nfunction spbcTblRowActionsListen() {\n jQuery('.tbl-row_action--ajax')\n .off('click')\n .on('click', function() {\n if ( spbcScanner.active ) {\n alert(spbcTableLocalize.scannerIsActive);\n return;\n }\n let self = jQuery(this);\n let data = {\n action: 'spbc_tbl-action--row',\n add_action: self.attr('row-action'),\n id: self.parents('.row-actions').attr('uid'),\n cols: self.parents('.row-actions').attr('cols_amount'),\n page_url: self.parent().attr('uid'),\n page_id: self.parent().attr('page_id'),\n };\n let params = {\n callback: spbcTblRowActionsCallback,\n errorOutput: function(msg, comment, hideSupportLink) {\n spbcModal.open().putError( msg, hideSupportLink );\n },\n spinner: self.parent().siblings('.tbl-preloader--tiny'),\n };\n\n // @ToDo delete this timeout after ready task #10014\n if ( self.attr('row-action') === 'delete' ) {\n params.timeout = 60000;\n }\n\n let fileName = self.parent().parent()[0].firstChild.innerHTML;\n let confirmationHeader = spbcTable['warning_h_'+self.attr('row-action')] || spbcTable.warning_default;\n let confirmationText = spbcTable['warning_t_'+self.attr('row-action')] || '';\n // init row actions with no confirm required\n if ( spbcBulkAction || noConfirmActions.any.includes(data.add_action) ) {\n // do not request user confirmation if the action is excluded or if it is a bulk action\n spbcSendAJAXRequest(data, params, self.parents('tr'));\n } else {\n // do request confirmation otherwise\n const yesButtonText = self.attr('row-action') === 'quarantine' ? 'Quarantine' : 'Yes';\n const noButtonText = self.attr('row-action') === 'quarantine' ? 'Cancel' : 'No';\n spbcModal.open().confirm(confirmationHeader, confirmationText, fileName, (confirmed) => {\n if (confirmed) {\n spbcSendAJAXRequest(data, params, self.parents('tr'));\n }\n }, yesButtonText, noButtonText);\n }\n });\n}\n\n/**\n * Row actions with no confirm required.\n * @param {object} spbcPublic Global localized SPBC object\n * @return {{}}\n */\nfunction spbcGetNoConfirmActions(spbcPublic) {\n let noConfirmActionsEmpty = {\n 'any': [],\n 'restricted': [],\n 'defaults': [],\n };\n let noConfirmActions = noConfirmActionsEmpty;\n try {\n if ( typeof spbcPublic !== 'undefined' && spbcPublic.hasOwnProperty('no_confirm_row_actions')) {\n noConfirmActions = JSON.parse(spbcPublic.no_confirm_row_actions);\n }\n if (\n typeof noConfirmActions.any.includes !== 'function' ||\n typeof noConfirmActions.restricted.includes !== 'function' ||\n typeof noConfirmActions.defaults.includes !== 'function'\n ) {\n noConfirmActions = noConfirmActionsEmpty;\n }\n } catch (e) {\n noConfirmActions = noConfirmActionsEmpty;\n }\n return noConfirmActions;\n}\n\n/**\n * Callback for table row actions\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcTblRowActionsCallback(result, data, params, obj) {\n if (result.color) {\n obj.css({background: result.background, color: result.color});\n }\n if (result.html) {\n obj.parent().parent().parent().prepend(result.html);\n setTimeout(function() {\n obj.fadeOut(300);\n }, 1500);\n if ( ! spbcBulkAction) {\n setTimeout(spbcReloadAccordion, 1900);\n }\n }\n\n if (\n data.add_action === 'copy_file_info'\n ) {\n if (result.success === true && result.data.file_info) {\n window.\n prompt('Copy the file info below and send it to support@cleantalk.org: ', result.data.file_info);\n } else {\n let errorText = (typeof result.data.error !== 'undefined') ?\n result.data.error :\n 'Unknown copy_file_info error';\n spbcModal.open().putError( errorText );\n }\n }\n\n if (result.temp_html) {\n let tmp=obj.html();\n obj.html(result.temp_html);\n if (result.updated_template !== undefined) {\n let updatedType = result.updated_template_type;\n let template = result.updated_template;\n let rowsInTemplate = jQuery(template).find('.wp-list-table tbody tr');\n let countRowInTemplate = rowsInTemplate.length;\n let targetTab = jQuery('[aria-controls=\"spbc_scan_accordion_tab_' + updatedType + '\"]');\n\n if (targetTab.length > 0) {\n let table = jQuery('#spbc_tbl__scanner_' + updatedType);\n // Count files in header\n jQuery('.spbc_bad_type_count.' + updatedType + '_counter').text(countRowInTemplate);\n // Count rows in table\n let countExistingRows = table.find('.wp-list-table tbody tr').length;\n table.remove();\n jQuery('#spbc_scan_accordion_tab_' + updatedType).append(template);\n // Marked new rows\n jQuery(jQuery('#spbc_scan_accordion_tab_' + updatedType)\n .find('.wp-list-table tbody tr'))\n .each(function(index, element) {\n if (++index > countExistingRows) {\n jQuery(element).css('outline', '1px solid green');\n }\n });\n targetTab.click();\n } else {\n if (updatedType === 'analysis_log') {\n // eslint-disable-next-line max-len\n let tabHeaderTemplate = '

Analysis Log (' + countRowInTemplate + ')

';\n // eslint-disable-next-line max-len\n let tabBodyTemplate = '

Files sent for analysis.

' +\n template +\n '
';\n jQuery('#spbc_scan_accordion_tab_critical').after(tabHeaderTemplate + tabBodyTemplate);\n targetTab.click();\n }\n }\n }\n setTimeout(function() {\n obj\n .html(tmp)\n .css({background: 'inherit'})\n .find('.column-primary .row-actions .tbl-row_action--' + data.add_action)\n .remove();\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcStartShowHide();\n }, 5000);\n }\n if (spbcBulkAction) {\n spbcBulkAction.click();\n }\n}\n\n/**\n * Table pagination actions\n */\nfunction spbcTblPaginationListen() {\n let data = {action: 'spbc_tbl-pagination'};\n let params = {callback: spbcTblPaginationCallback, notJson: true};\n jQuery('.tbl-pagination--button').on('click', function() {\n jQuery(this).parents('.tbl-root').find('.tbl-pagination--button').attr('disabled', 'disabled');\n });\n jQuery('.tbl-pagination--go').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.siblings('.tbl-pagination--curr_page').val();\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--prev').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.parents('.tbl-pagination--wrapper').attr('prev_page');\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--next').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.parents('.tbl-pagination--wrapper').attr('next_page');\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--end').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = self.parents('.tbl-pagination--wrapper').attr('last_page');\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n jQuery('.tbl-pagination--start').on('click', function() {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n data.page = 1;\n data.type = obj.attr('type');\n params.spinner = self.siblings('.tbl-preloader--small');\n spbcSendAJAXRequest(data, params, obj);\n });\n}\n\n/**\n * Callback for Table pagination actions\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcTblPaginationCallback(result, data, params, obj) {\n jQuery(obj)\n .html(result)\n .find('.tbl-pagination--button').removeAttr('disabled');\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcStartShowHide();\n}\n\n/**\n * Table sort actions\n */\nfunction spbcTblSortListen() {\n let params = {callback: spbcTblSortCallback, notJson: true};\n jQuery('.tbl-column-sortable').on('click', function(e) {\n if (e.target.classList.contains('tbl-sorting_indicator')) {\n let self = jQuery(this);\n let obj = self.parents('.tbl-root');\n let domain = obj.attr('type') == 'links'? jQuery('#spbc_tbl__scanner__outbound_links b').html(): '';\n let data = {\n action: 'spbc_tbl-sort',\n order_by: self.attr('id'),\n order: self.attr('sort_direction'),\n type: obj.attr('type'),\n domain: domain,\n };\n spbcSendAJAXRequest(data, params, obj);\n }\n });\n}\n\n/**\n * Callback for Table sort actions\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcTblSortCallback(result, data, params, obj) {\n jQuery(obj).html(result);\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n}\n\njQuery(document).ready(function() {\n // Table. Row actions handler\n spbcTblBulkActionsListen();\n spbcTblRowActionsListen();\n spbcTblPaginationListen();\n spbcTblSortListen();\n spbcEATUpdateIntervalStart();\n});\n\n/**\n * Switching table handler\n * Using by inline php code\n *\n * @param {obj} obj\n * @param {obj} table\n *\n */\nfunction spbcScannerSwitchTable(obj, table) {/* eslint-disable-line no-unused-vars */\n let _obj = jQuery(obj);\n let domain = _obj.parents('.row-actions').attr('uid');\n let data = {action: 'spbc_tbl-switch', type: table, domain: domain};\n let params = {callback: spbcTblPaginationCallback, notJson: true};\n spbcSendAJAXRequest(data, params, _obj.parents('.tbl-root'));\n}\n\n/**\n * Open/close table rows handler\n * Using by inline php code\n *\n * @param {string} blockId\n * @param {string} columnKey\n */\nfunction spbcShowHideRows(blockId, columnKey) {/* eslint-disable-line no-unused-vars */\n let className = '.' + columnKey + '_block_' + blockId;\n let block = jQuery(className);\n if (block.hasClass('mob_table_active')) {\n block.removeClass('mob_table_active');\n } else {\n block.addClass('mob_table_active');\n }\n}\n\n/**\n * Starts an interval to update the analysis log table and stats every 6 seconds.\n */\nfunction spbcEATUpdateIntervalStart() {\n setInterval(() => {\n // Check if the analysis log tab is present\n if (document.querySelector('div[refresh_control_tab=\"analysis_log\"]') !== null) {\n // Add a spinner to the analysis log tab header\n spbcEATAddSpinner();\n // Update the analysis log table\n spbcUpdateTableEAT();\n // Update the analysis log stats\n spbcUpdateStatsEAT();\n }\n }, 60000);\n}\n\n/**\n * Adds a spinner to the analysis log tab header if it doesn't already exist.\n */\nfunction spbcEATAddSpinner() {\n if (document.getElementById('analysis_log_counter_spinner') === null) {\n const refreshTab = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_analysis_log\"]');\n if (refreshTab !== null) {\n const spinner = document.createElement('img');\n spinner.class = 'spbc_preloader';\n // todo Probably we need a validation function of spbcSettings object\n spinner.alt = spbcSettings.spbcSpinner.altText;\n spinner.src = spbcSettings.spbcSpinner.imgSource;\n spinner.id = 'analysis_log_counter_spinner';\n spinner.style = 'display: none; height: 13px; position: relative; top: 2px; margin-left: 5px';\n refreshTab.append(spinner);\n }\n }\n spbcEATSwitchSpinner();\n}\n\n/**\n * Toggles the display of the spinner in the analysis log tab header.\n */\nfunction spbcEATSwitchSpinner() {\n const spinner = document.getElementById('analysis_log_counter_spinner');\n if (spinner !== null) {\n spinner.style.display = spinner.style.display === 'none' ?\n spinner.style.display = 'inline' :\n spinner.style.display = 'none';\n }\n}\n\n/**\n * Sends an AJAX request to update the analysis log table.\n */\nfunction spbcUpdateTableEAT() {\n // Define the tab name for the request\n let tabName = 'scanner';\n // Data object containing parameters for the AJAX request\n let data = {\n action: 'spbc_settings__draw_elements',\n tab_name: tabName,\n security: spbcSettings.ajax_nonce,\n };\n // Params object with additional settings for the AJAX request\n let currentParams = {\n callback: spbcUpdateTableCallbackEAT,\n notJson: true,\n additional: null,\n };\n // Send the AJAX request with the data and params objects\n spbcSendAJAXRequest( data, currentParams, null );\n}\n\n/**\n * Callback function to update the analysis log table with new HTML content.\n *\n * @param {string} allTablesHTML - The HTML content of all tables.\n */\nfunction spbcUpdateTableCallbackEAT(allTablesHTML) {\n // select the same table element to search in the current code and update from received\n const analysisTableSelector = '#spbc_tbl__scanner_analysis_log';\n const parser = new DOMParser();\n const allTablesHTMLParsed = parser.parseFromString(allTablesHTML, 'text/html');\n\n let newTabElement = null;\n let newTabElementInnerHTML = '';\n let currentTabElement = null;\n\n // get new analysis table element and its HTML\n newTabElement = allTablesHTMLParsed.querySelector(analysisTableSelector);\n if (newTabElement !== null && newTabElement.innerHTML !== '') {\n newTabElementInnerHTML = newTabElement.innerHTML;\n }\n\n // get current analysis table element and its HTML\n currentTabElement = document.querySelector(analysisTableSelector);\n if (currentTabElement !== null && currentTabElement.innerHTML === '') {\n currentTabElement = null;\n }\n\n // update analysis table element if it's changed and new data presented\n if (currentTabElement !== null && newTabElementInnerHTML !== '') {\n currentTabElement.innerHTML = newTabElementInnerHTML;\n }\n}\n\n/**\n * Sends an AJAX request to update the analysis log stats.\n */\nfunction spbcUpdateStatsEAT() {\n // Data object containing parameters for the AJAX request\n let data = {\n action: 'spbc_analysyis_files_stats__get_html',\n sub_action: 'give_me_html',\n security: spbcSettings.ajax_nonce,\n };\n // Params object with additional settings for the AJAX request\n let params = {\n callback: spbcUpdateStatsCallbackEAT,\n notJson: true,\n };\n // Send the AJAX request with the data and params objects\n spbcSendAJAXRequest(data, params);\n}\n\n/**\n * Callback function to update the analysis log stats with new HTML content.\n *\n * @param {string} newStatsHtml - The new HTML content for the stats.\n */\nfunction spbcUpdateStatsCallbackEAT(newStatsHtml) {\n // Get the element that displays the analysis files stats\n let info = document.getElementById('spbc_analysis_files_stats');\n // If the element exists, update its inner HTML with the new stats\n if (info) {\n info.innerHTML = newStatsHtml;\n }\n // Toggle the display of the spinner in the analysis log tab header\n spbcEATSwitchSpinner();\n}\n"],"names":["let","spbcBulkAction","noConfirmActions","spbcGetNoConfirmActions","spbcPublic","spbcReloadAccordion","interactControlTab","updateText","spbcSendAJAXRequest","action","notJson","callback","result","data","params","obj","jQuery","accordion","html","header","heightStyle","collapsible","active","spbcTblBulkActionsListen","spbcTblRowActionsListen","spbcTblPaginationListen","spbcTblSortListen","spbcStartShowHide","interactScannerTab","controlTab","refreshControlTabSelector","headerUpdateStatus","headerSelector","appendTo","click","setAttribute","hide","off","on","spbcScanner","alert","spbcTableLocalize","scannerIsActive","self","this","siblings","children","first","selectedIndex","value","indexOf","any","includes","confirm","spbcTable","warning_bulk","add_action","status","parents","attr","spbcScannerCureBulk","spbcScannerRestoreBulk","selectedItems","closest","find","fileIds","each","index","element","elementId","val","push","file_ids","button","spinner","out","counters","total","updated","skipped","failed","queued","spbcModal","open","put","files_sent_counter","errorOutput","errorText","comment","putError","timeout","e","spbcScannerAnalysisLogDeleteFromLog","sendAction","items","msg","show","ip","spbcSecLogsFilterIp","prop","setTimeout","is","restricted","current","allItems","selectedIds","selector","length","security","spbcSettings","ajax_nonce","ajax","type","url","ajaxurl","beforeSend","success","displayData","divWrapper","document","createElement","pMessage","pCounters","divFiles","bSeeMore","pSeeMore","failedToCure","innerHTML","append","hasOwnProperty","failed_to_cure","join","message","cured_on_request","outerHTML","addEventListener","failedToRestore","failed_to_restore","restored_on_request","id","cols","page_url","parent","page_id","spbcTblRowActionsCallback","hideSupportLink","yesButtonText","noButtonText","fileName","firstChild","confirmationHeader","warning_default","confirmationText","confirmed","noConfirmActionsEmpty","defaults","JSON","parse","no_confirm_row_actions","color","css","background","prepend","fadeOut","file_info","window","prompt","error","temp_html","tmp","undefined","updated_template","updatedType","updated_template_type","template","countRowInTemplate","targetTab","table","text","countExistingRows","remove","tabHeaderTemplate","tabBodyTemplate","after","spbcTblPaginationCallback","page","removeAttr","spbcTblSortCallback","domain","target","classList","contains","order_by","order","spbcScannerSwitchTable","_obj","spbcShowHideRows","blockId","columnKey","block","hasClass","removeClass","addClass","spbcEATUpdateIntervalStart","setInterval","querySelector","spbcEATAddSpinner","spbcUpdateTableEAT","spbcUpdateStatsEAT","refreshTab","getElementById","class","alt","spbcSpinner","altText","src","imgSource","style","spbcEATSwitchSpinner","display","tab_name","spbcUpdateTableCallbackEAT","additional","allTablesHTML","analysisTableSelector","newTabElementInnerHTML","currentTabElement","newTabElement","DOMParser","parseFromString","sub_action","spbcUpdateStatsCallbackEAT","newStatsHtml","info","ready"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-upload.min.js.map b/js/spbc-upload.min.js.map index 9ccf71bac..1fde6a5a7 100644 --- a/js/spbc-upload.min.js.map +++ b/js/spbc-upload.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-upload.min.js","sources":["spbc-upload.js"],"sourcesContent":["let spbcErrorMsgCount = 0;\r\n\r\njQuery(document).ready(function() {\r\n // Count error messages each 100ms\r\n setTimeout(spbcCheckNewFiles, 1000);\r\n});\r\n\r\n/**\r\n * Check blocked file and display error message about it\r\n */\r\nfunction spbcCheckNewFiles() {\r\n // If their more messages than were, fire AJAX request to get data\r\n if (spbcErrorMsgCount < spbcGetErrorMsgs().length) {\r\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\r\n spbcGetLatestBlockedFile();\r\n spbcErrorMsgCount = spbcErrorMsgCount - 1;\r\n // If their fewer messages than were, recount\r\n } else if (spbcErrorMsgCount > spbcGetErrorMsgs().length) {\r\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\r\n }\r\n setTimeout(spbcCheckNewFiles, 1000);\r\n}\r\n\r\n/**\r\n * Array of the appear errors notices on the page\r\n *\r\n * @return {{length}|*|jQuery|HTMLElement|*[]}\r\n */\r\nfunction spbcGetErrorMsgs() {\r\n let mediaError = jQuery('#media-upload-error .error');\r\n let uploadError = jQuery('.upload-error-message');\r\n if (mediaError.length) {\r\n return mediaError;\r\n } else if (uploadError.length) {\r\n return uploadError;\r\n } else {\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Fires AJAX request to get more info about the block\r\n */\r\nfunction spbcGetLatestBlockedFile() {\r\n let data = {action: 'spbc_check_file_block', timestamp: spbcTimestamp()};\r\n let params = {callback: spbcCheckFileBlockCallback};\r\n let obj = spbcGetErrorMsgs().first();\r\n spbcSendAJAXRequest(data, params, obj);\r\n}\r\n\r\n/**\r\n * Callback. Sets correct error message with details\r\n *\r\n * @param {obj|string} result\r\n * @param {obj} data\r\n * @param {obj} params\r\n * @param {obj} obj\r\n */\r\nfunction spbcCheckFileBlockCallback(result, data, params, obj) {\r\n if (result.blocked) {\r\n let pattern = result.pattern.CRITICAL || result.pattern.DANGER || result.pattern.SUSPICIOUS;\r\n obj.html(result.warning + '
' + result.pattern_title + ' ' + pattern);\r\n }\r\n}\r\n"],"names":["let","spbcErrorMsgCount","spbcCheckNewFiles","spbcGetErrorMsgs","length","spbcGetLatestBlockedFile","setTimeout","mediaError","jQuery","uploadError","data","action","timestamp","spbcTimestamp","params","callback","spbcCheckFileBlockCallback","obj","first","spbcSendAJAXRequest","result","pattern","blocked","CRITICAL","DANGER","SUSPICIOUS","html","warning","pattern_title","document","ready"],"mappings":"AAAAA,IAAIC,kBAAoB,EAUxB,SAASC,oBAEDD,kBAAoBE,iBAAiB,EAAEC,QACvCH,kBAAoBE,iBAAiB,EAAEC,OACvCC,yBAAyB,EACzBJ,mBAAwC,GAEjCA,kBAAoBE,iBAAiB,EAAEC,SAC9CH,kBAAoBE,iBAAiB,EAAEC,QAE3CE,WAAWJ,kBAAmB,GAAI,CACtC,CAOA,SAASC,mBACLH,IAAIO,EAAaC,OAAO,4BAA4B,EAChDC,EAAcD,OAAO,uBAAuB,EAChD,OAAID,EAAWH,OACJG,EACAE,EAAYL,OACZK,EAEA,EAEf,CAKA,SAASJ,2BACLL,IAAIU,EAAO,CAACC,OAAQ,wBAAyBC,UAAWC,cAAc,CAAC,EACnEC,EAAS,CAACC,SAAUC,0BAA0B,EAC9CC,EAAMd,iBAAiB,EAAEe,MAAM,EACnCC,oBAAoBT,EAAMI,EAAQG,CAAG,CACzC,CAUA,SAASD,2BAA2BI,EAAQV,EAAMI,EAAQG,GACtD,IACQI,EADJD,EAAOE,UACHD,EAAUD,EAAOC,QAAQE,UAAYH,EAAOC,QAAQG,QAAUJ,EAAOC,QAAQI,WACjFR,EAAIS,KAAKN,EAAOO,QAAU,OAASP,EAAOQ,cAAgB,IAAMP,CAAO,EAE/E,CA7DAb,OAAOqB,QAAQ,EAAEC,MAAM,WAEnBxB,WAAWJ,kBAAmB,GAAI,CACtC,CAAC"} \ No newline at end of file +{"version":3,"file":"spbc-upload.min.js","sources":["spbc-upload.js"],"sourcesContent":["let spbcErrorMsgCount = 0;\n\njQuery(document).ready(function() {\n // Count error messages each 100ms\n setTimeout(spbcCheckNewFiles, 1000);\n});\n\n/**\n * Check blocked file and display error message about it\n */\nfunction spbcCheckNewFiles() {\n // If their more messages than were, fire AJAX request to get data\n if (spbcErrorMsgCount < spbcGetErrorMsgs().length) {\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\n spbcGetLatestBlockedFile();\n spbcErrorMsgCount = spbcErrorMsgCount - 1;\n // If their fewer messages than were, recount\n } else if (spbcErrorMsgCount > spbcGetErrorMsgs().length) {\n spbcErrorMsgCount = spbcGetErrorMsgs().length;\n }\n setTimeout(spbcCheckNewFiles, 1000);\n}\n\n/**\n * Array of the appear errors notices on the page\n *\n * @return {{length}|*|jQuery|HTMLElement|*[]}\n */\nfunction spbcGetErrorMsgs() {\n let mediaError = jQuery('#media-upload-error .error');\n let uploadError = jQuery('.upload-error-message');\n if (mediaError.length) {\n return mediaError;\n } else if (uploadError.length) {\n return uploadError;\n } else {\n return [];\n }\n}\n\n/**\n * Fires AJAX request to get more info about the block\n */\nfunction spbcGetLatestBlockedFile() {\n let data = {action: 'spbc_check_file_block', timestamp: spbcTimestamp()};\n let params = {callback: spbcCheckFileBlockCallback};\n let obj = spbcGetErrorMsgs().first();\n spbcSendAJAXRequest(data, params, obj);\n}\n\n/**\n * Callback. Sets correct error message with details\n *\n * @param {obj|string} result\n * @param {obj} data\n * @param {obj} params\n * @param {obj} obj\n */\nfunction spbcCheckFileBlockCallback(result, data, params, obj) {\n if (result.blocked) {\n let pattern = result.pattern.CRITICAL || result.pattern.DANGER || result.pattern.SUSPICIOUS;\n obj.html(result.warning + '
' + result.pattern_title + ' ' + pattern);\n }\n}\n"],"names":["let","spbcErrorMsgCount","spbcCheckNewFiles","spbcGetErrorMsgs","length","spbcGetLatestBlockedFile","setTimeout","mediaError","jQuery","uploadError","data","action","timestamp","spbcTimestamp","params","callback","spbcCheckFileBlockCallback","obj","first","spbcSendAJAXRequest","result","pattern","blocked","CRITICAL","DANGER","SUSPICIOUS","html","warning","pattern_title","document","ready"],"mappings":"AAAAA,IAAIC,kBAAoB,EAUxB,SAASC,oBAEDD,kBAAoBE,iBAAiB,EAAEC,QACvCH,kBAAoBE,iBAAiB,EAAEC,OACvCC,yBAAyB,EACzBJ,mBAAwC,GAEjCA,kBAAoBE,iBAAiB,EAAEC,SAC9CH,kBAAoBE,iBAAiB,EAAEC,QAE3CE,WAAWJ,kBAAmB,GAAI,CACtC,CAOA,SAASC,mBACLH,IAAIO,EAAaC,OAAO,4BAA4B,EAChDC,EAAcD,OAAO,uBAAuB,EAChD,OAAID,EAAWH,OACJG,EACAE,EAAYL,OACZK,EAEA,EAEf,CAKA,SAASJ,2BACLL,IAAIU,EAAO,CAACC,OAAQ,wBAAyBC,UAAWC,cAAc,CAAC,EACnEC,EAAS,CAACC,SAAUC,0BAA0B,EAC9CC,EAAMd,iBAAiB,EAAEe,MAAM,EACnCC,oBAAoBT,EAAMI,EAAQG,CAAG,CACzC,CAUA,SAASD,2BAA2BI,EAAQV,EAAMI,EAAQG,GACtD,IACQI,EADJD,EAAOE,UACHD,EAAUD,EAAOC,QAAQE,UAAYH,EAAOC,QAAQG,QAAUJ,EAAOC,QAAQI,WACjFR,EAAIS,KAAKN,EAAOO,QAAU,OAASP,EAAOQ,cAAgB,IAAMP,CAAO,EAE/E,CA7DAb,OAAOqB,QAAQ,EAAEC,MAAM,WAEnBxB,WAAWJ,kBAAmB,GAAI,CACtC,CAAC"} \ No newline at end of file