From 1e83a252f13f6fc912d6b649860cfb327688e4b3 Mon Sep 17 00:00:00 2001
From: svfcode "+t+" '+t+"
"+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+"
' + 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 postNoticeText +\n '
' + 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 postNoticeText +\r\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 = '' + 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 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 'Clear scanner logs
' +\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 ''+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.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 = '' + 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'+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.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 = '' + 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%s
' +\n '%s
' +\r\n '' + 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('%s
%s
%s
%s
' +\n '%s
' +\n '/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('' + 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('%s
%s
%s
%s
' +\r\n '%s
' +\r\n '/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('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 + '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 = 'Files sent for analysis.
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 + '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 = 'Files sent for analysis.
' + 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 postNoticeText +\r\n '
' + 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 postNoticeText +\r\n '
' + 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 postNoticeText +\r\n '
' + 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 postNoticeText +\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 = '' + 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":"AACAA,UAAY,CAGRC,OAAQ,CAAA,EACRC,QAAS,CAAA,EACTC,OAAQ,CAAA,EACRC,QAAS,CAAA,EAGTC,KAAM,SAAUC,GACLC,KAAKN,SACRM,KAAKL,QAAU,CAAA,EACfM,SAAW,SAAUC,EAAQC,EAAMC,EAAQC,GACvCZ,UAAUE,QAAU,CAAA,EACpBF,UAAUC,OAASQ,EACnBI,SAASC,cACL,IAAIC,YAAa,yBAA0B,CACvCC,QAAS,CAAA,CACb,CAAE,CACN,CACJ,EACoC,YAA/B,OAAOC,qBACRA,oBAAqB,CAACX,OAAUA,CAAM,EAAG,CAACE,SAAYA,SAAUU,QAAW,CAAA,CAAI,CAAE,EAG7F,EAEAC,SAAU,SAAUC,EAAWC,EAAkB,CAAA,GAC7CC,IAAIC,EAAO,uBACCH,EAAY,OACnBC,IACDE,GAAQ,gKAIZhB,KAAKiB,IAAID,CAAI,CACjB,EAEAC,IAAK,SAAUD,GACXvB,UAAUE,QAAU,CAAA,EACpBF,UAAUC,OAASsB,EACnBV,SAASC,cACL,IAAIC,YAAa,yBAA0B,CACvCC,QAAS,CAAA,CACb,CAAE,CACN,CACJ,EAEAS,QAAS,SAASC,EAAQC,EAAO,GAAIC,EAAW,GAAIpB,EAAUqB,EAAgB,MAAOC,EAAe,MAChG9B,UAAUE,QAAU,CAAA,EACpBoB,IA4BUS,EAoBAC,EAhDNC,EAAepB,SAASqB,eAAe,oBAAoB,EAC3DD,IACAA,EAAaE,UAAY,IAEnBC,EAAcvB,SAASwB,cAAc,KAAK,GACpCC,UAAY,oBACxBF,EAAYG,YAAcb,EAC1BO,EAAaO,OAAOJ,CAAW,GAGzBK,EAAY5B,SAASwB,cAAc,KAAK,GACpCC,UAAY,wBACtBL,EAAaO,OAAOC,CAAS,GAEvBC,EAAed,IAEa,GAAlBA,EAASe,SACrBf,EAAW,MAAQA,EAASgB,MAAMhB,EAASe,OAAS,EAAE,IAGpDE,EAAWhC,SAASwB,cAAc,KAAK,GACpCC,UAAY,kBACrBO,EAASN,YAAcZ,EACvBc,EAAUD,OAAOK,CAAQ,GAEnBC,EAAkBjC,SAASwB,cAAc,KAAK,GACpCC,UAAY,+BAC5BG,EAAUD,OAAOM,CAAe,GAC1Bf,EAAWlB,SAASwB,cAAc,MAAM,GACrCC,UAAY,uBACrBP,EAASQ,YAAcX,GAAsB,GAC7CG,EAASgB,MAAQL,EACjBI,EAAgBN,OAAOT,CAAQ,GAGzBiB,EAAenC,SAASwB,cAAc,KAAK,GACpCC,UAAY,2BACzBL,EAAaO,OAAOQ,CAAY,GAE1BC,EAAYpC,SAASwB,cAAc,QAAQ,GACvCC,UAAY,qCACtBW,EAAUV,YAAcV,EACxBoB,EAAUC,QAAU,WAChB1C,EAAS,CAAA,CAAI,EACbR,UAAUmD,MAAM,CACpB,EACAH,EAAaR,OAAOS,CAAS,GAEvBjB,EAAWnB,SAASwB,cAAc,QAAQ,GACvCC,UAAY,qCACrBN,EAASO,YAAcT,EACvBE,EAASkB,QAAU,WACflD,UAAUmD,MAAM,CACpB,EACAH,EAAaR,OAAOR,CAAQ,GAEhCnB,SAASC,cACL,IAAIC,YAAa,yBAA0B,CACvCC,QAAS,CAAA,CACb,CAAE,CACN,CACJ,EAEAoC,KAAM,WAEc,SAAZC,IACA/B,IAAIgC,EAAS,GACb,IAAMC,OAAOhD,KAAKiD,OACVD,MACAD,GAAUC,IAAM,IAAMhD,KAAKiD,OAAOD,KAAO,KAGjD,OAAOD,CACX,CARAhC,IASImC,EAAa,CACbD,OAAQ,CACJE,UAAW,OACXC,SAAY,QACZC,IAAO,IACPC,KAAQ,IACRC,MAAS,OACTC,OAAU,OACVC,WAAc,kBACdC,QAAW,OACXC,kBAAmB,SACnBC,cAAe,QACnB,EACAC,SAAUf,CACd,EACIgB,EAAW,CACXb,OAAQ,CACJG,SAAY,WACZW,QAAW,OACXC,OAAU,OACVC,YAAa,QACbR,WAAc,OACdS,OAAU,6BACVC,gBAAiB,MACjBC,aAAc,qCAClB,EACAP,SAAUf,CACd,EACIuB,EAAW,CACXpB,OAAQ,CACJG,SAAY,WACZK,WAAc,OACdF,MAAS,OACTC,OAAU,OACVU,OAAU,6BACVC,gBAAiB,OACjBG,OAAU,UACVjB,IAAO,OACPkB,MAAS,MACb,EACAV,SAAUf,CACd,EACI0B,EAAiB,CACjBvB,OAAQ,CACJwB,QAAW,KACXf,QAAW,QACXN,SAAY,WACZK,WAAc,OACdU,gBAAiB,MACjBZ,MAAS,MACTC,OAAU,OACVH,IAAO,MACPC,KAAQ,MACRoB,UAAa,eACjB,EACAb,SAAUf,CACd,EACI6B,EAAgB,CAChB1B,OAAQ,CACJwB,QAAW,KACXf,QAAW,QACXN,SAAY,WACZK,WAAc,OACdU,gBAAiB,MACjBZ,MAAS,MACTC,OAAU,OACVH,IAAO,MACPC,KAAQ,MACRoB,UAAa,gBACjB,EACAb,SAAUf,CACd,EACI8B,EAAa,CACb3B,OAAQ,CACJS,QAAW,OACXmB,IAAO,OACPC,aAAc,OACdC,aAAc,QAClB,EACAlB,SAAUf,CACd,EACIkC,EAAU,CACV/B,OAAQ,CACJgC,SAAY,QAChB,EACApB,SAAUf,CACd,EACIoC,EAAiB5E,SAASwB,cAAe,OAAQ,EAWjDqD,GAVJD,EAAeE,aAAc,KAAM,mBAAoB,EACvDF,EAAetD,UAAY,0BAA4BoD,EAAU,IACjEE,EAAetD,WAAa,uBAAyBsB,EAAa,IAClEgC,EAAetD,WAAa,qBAAuByC,EAAW,IAC9Da,EAAetD,WAAa,4BAA8B4C,EAAiB,IAC3EU,EAAetD,WAAa,2BAA6B+C,EAAgB,IACzEO,EAAetD,WAAa,uBAAyBgD,EAAa,IAClEtE,SAAS+E,KAAKpD,OAAQiD,CAAe,EAGvB5E,SAASwB,cAAe,KAAM,GAMxCwD,GALJH,EAAQC,aAAc,KAAM,oBAAqB,EACjD9E,SAAS+E,KAAKpD,OAAQkD,CAAQ,EAE9B7E,SAAS+E,KAAKE,UAAUC,IAAK,mBAAoB,EAErClF,SAASwB,cAAe,KAAM,GAKtCc,GAJJ0C,EAAMF,aAAc,KAAM,kBAAmB,EAC7CE,EAAMF,aAAc,QAAStB,CAAS,EACtCqB,EAAQlD,OAAQqD,CAAM,EAEVhF,SAASwB,cAAe,KAAM,GAItC2C,GAHJ7B,EAAMwC,aAAc,KAAM,kBAAmB,EAC7CE,EAAMrD,OAAQW,CAAM,EAENtC,SAASwB,cAAe,KAAM,GAW5C,OAVK9B,KAAKN,OACN+E,EAAQ7C,UAAY5B,KAAKN,OAEzB+E,EAAQ7C,UAAY,aAExB6C,EAAQW,aAAc,KAAM,oBAAqB,EACjDE,EAAMrD,OAAQwC,CAAQ,EAEtBzE,KAAKJ,OAAS,CAAA,EAEPI,IACX,EAEA4C,MAAO,WACHnD,UAAUC,OAAS,GACnBD,UAAUE,QAAU,CAAA,EACpBW,SAAS+E,KAAKE,UAAUE,OAAQ,mBAAoB,EACpDnF,SAASqB,eAAgB,oBAAqB,EAAE8D,OAAO,EACvDnF,SAASqB,eAAgB,mBAAoB,EAAE8D,OAAO,EACtDnF,SAASC,cACL,IAAIC,YAAa,kBAAmB,CAChCC,QAAS,CAAA,CACb,CAAE,CACN,CACJ,CAEJ,EAGAH,SAASoF,iBAAiB,QAAS,SAAUC,IACpCA,EAAEC,QAA0B,uBAAhBD,EAAEC,OAAOC,IAA+C,qBAAhBF,EAAEC,OAAOC,KAC9DpG,UAAUmD,MAAM,CAExB,CAAC,EACDtC,SAASoF,iBAAiB,yBAA0B,SAAUC,GACrDlG,UAAUG,QAAUH,UAAUC,SAC/BY,SAASqB,eAAgB,oBAAqB,EAAEC,UAAYnC,UAAUC,OAE9E,CAAC"} \ 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 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 'Clear scanner logs
' +\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 ''+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.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 = '' + 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'+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.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 = '' + 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%s
' +\r\n '%s
' +\n '' + 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('%s
%s
%s
%s
' +\r\n '%s
' +\r\n '/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('' + 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('%s
%s
%s
%s
' +\n '%s
' +\n '/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('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 + '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 = 'Files sent for analysis.
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 + '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 = 'Files sent for analysis.