{"version":3,"file":"apbct-public-bundle_full-protection.min.js","sources":["apbct-public-bundle_full-protection.js"],"sourcesContent":["/**\n * Base class\n */\nclass ApbctCore {\n ajax_parameters = {};\n restParameters = {};\n\n selector = null;\n elements = [];\n\n // Event properties\n eventCallback;\n eventSelector;\n event;\n\n /**\n * Default constructor\n * @param {string} selector\n */\n constructor(selector) {\n this.select(selector);\n }\n\n /**\n * Get elements by CSS selector\n *\n * @param {string} selector\n * @return {*}\n */\n select(selector) {\n if (selector instanceof HTMLCollection) {\n this.selector = null;\n this.elements = [];\n this.elements = Array.prototype.slice.call(selector);\n } else if ( typeof selector === 'object' ) {\n this.selector = null;\n this.elements = [];\n this.elements[0] = selector;\n } else if ( typeof selector === 'string' ) {\n this.selector = selector;\n this.elements = Array.prototype.slice.call(document.querySelectorAll(selector));\n // this.elements = document.querySelectorAll(selector)[0];\n } else {\n this.deselect();\n }\n\n return this;\n }\n\n /**\n * @param {object|string} elemToAdd\n */\n addElement(elemToAdd) {\n if ( typeof elemToAdd === 'object' ) {\n this.elements.push(elemToAdd);\n } else if ( typeof elemToAdd === 'string' ) {\n this.selector = elemToAdd;\n this.elements = Array.prototype.slice.call(document.querySelectorAll(elemToAdd));\n } else {\n this.deselect();\n }\n }\n\n /**\n * @param {object} elem\n */\n push(elem) {\n this.elements.push(elem);\n }\n\n /**\n * reduce\n */\n reduce() {\n this.elements = this.elements.slice(0, -1);\n }\n\n /**\n * deselect\n */\n deselect() {\n this.elements = [];\n }\n\n /**\n * Set or get CSS for/of currently selected element\n *\n * @param {object|string} style\n * @param {boolean} getRaw\n *\n * @return {boolean|*}\n */\n css(style, getRaw) {\n getRaw = getRaw || false;\n\n // Set style\n if (typeof style === 'object') {\n const stringToCamelCase = (str) =>\n str.replace(/([-_][a-z])/g, (group) =>\n group\n .toUpperCase()\n .replace('-', '')\n .replace('_', ''),\n );\n\n // Apply multiple styles\n for (const styleName in style) {\n if (Object.hasOwn(style, styleName)) {\n const DomStyleName = stringToCamelCase(styleName);\n\n // Apply to multiple elements (currently selected)\n for (let i=0; i= 0; i-- ) {\n if ( ! this.isElem(this.elements[i], filter) ) {\n this.elements.splice(Number(i), 1);\n }\n }\n\n return this;\n }\n\n /**\n * NODES\n */\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n parent(filter) {\n this.select(this.elements[0].parentElement);\n\n if ( typeof filter !== 'undefined' && ! this.is(filter) ) {\n this.deselect();\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n parents(filter) {\n this.select(this.elements[0]);\n\n for ( ; this.elements[this.elements.length - 1].parentElement !== null; ) {\n this.push(this.elements[this.elements.length - 1].parentElement);\n }\n\n this.elements.splice(0, 1); // Deleting initial element from the set\n\n if ( typeof filter !== 'undefined' ) {\n this.filter(filter);\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n children(filter) {\n this.select(this.elements[0].children);\n\n if ( typeof filter !== 'undefined' ) {\n this.filter(filter);\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n siblings(filter) {\n let current = this.elements[0]; // Remember current to delete it later\n\n this.parent();\n this.children(filter);\n this.elements.splice(this.elements.indexOf(current), 1); // Remove current element\n\n return this;\n }\n\n /** ************ DOM MANIPULATIONS **************/\n remove() {\n for (let elem of this.elements) {\n elem.remove();\n }\n }\n\n /**\n * @param {string} content\n */\n after(content) {\n for (let elem of this.elements) {\n elem.after(content);\n }\n }\n\n /**\n * @param {string} content\n */\n append(content) {\n for (let elem of this.elements) {\n elem.append(content);\n }\n }\n\n /** ************ ANIMATION **************/\n /**\n * @param {number} time\n */\n fadeIn(time) {\n for (let elem of this.elements) {\n elem.style.opacity = 0;\n elem.style.display = 'block';\n\n let last = +new Date();\n const tick = function() {\n elem.style.opacity = +elem.style.opacity + (new Date() - last) / time;\n last = +new Date();\n\n if (+elem.style.opacity < 1) {\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n }\n };\n\n tick();\n }\n }\n\n /**\n * @param {number} time\n */\n fadeOut(time) {\n for (let elem of this.elements) {\n elem.style.opacity = 1;\n\n let last = +new Date();\n const tick = function() {\n elem.style.opacity = +elem.style.opacity - (new Date() - last) / time;\n last = +new Date();\n\n if (+elem.style.opacity > 0) {\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n } else {\n elem.style.display = 'none';\n }\n };\n\n tick();\n }\n }\n}\n\n/**\n * Hack\n *\n * Make a proxy to keep both properties and methods from:\n * - the native object and\n * - the new one from ApbctCore for selected element.\n *\n * For example:\n * apbct('#id).innerHTML = 'some';\n * apbct('#id).css({'backgorund-color': 'black'});\n */\n// apbct = new Proxy(\n// apbct,\n// {\n// get(target, prop) {\n// if (target.elements.length) {\n// return target.elements[0][prop];\n// } else {\n// return null;\n// }\n// },\n// set(target, prop, value){\n// if (target.elements.length) {\n// target.elements[0][prop] = value;\n// return true;\n// } else {\n// return false;\n// }\n// },\n// apply(target, thisArg, argArray) {\n//\n// }\n// }\n// );\n\n/**\n * @param {mixed} msg\n * @param {string} url\n */\nfunction ctProcessError(msg, url) {\n let log = {};\n if (msg && msg.message) {\n log.err = {\n 'msg': msg.message,\n 'file': !!msg.fileName ? msg.fileName : false,\n 'ln': !!msg.lineNumber ? msg.lineNumber : !!lineNo ? lineNo : false,\n 'col': !!msg.columnNumber ? msg.columnNumber : !!columnNo ? columnNo : false,\n 'stacktrace': !!msg.stack ? msg.stack : false,\n 'cause': !!url ? JSON.stringify(url) : false,\n 'errorObj': !!error ? error : false,\n };\n } else {\n log.err = {\n 'msg': msg,\n };\n\n if (!!url) {\n log.err.file = url;\n }\n }\n\n log.url = window.location.href;\n log.userAgent = window.navigator.userAgent;\n\n let ctJsErrors = 'ct_js_errors';\n let errArray = localStorage.getItem(ctJsErrors);\n if (errArray === null) errArray = '[]';\n errArray = JSON.parse(errArray);\n for (let i = 0; i < errArray.length; i++) {\n if (errArray[i].err.msg === log.err.msg) {\n return;\n }\n }\n\n errArray.push(log);\n localStorage.setItem(ctJsErrors, JSON.stringify(errArray));\n}\n\nif (Math.floor(Math.random() * 100) === 1) {\n window.onerror = function(exception, url) {\n let filterWords = ['apbct', 'ctPublic'];\n let length = filterWords.length;\n while (length--) {\n if (exception.indexOf(filterWords[length]) !== -1) {\n ctProcessError(exception, url);\n }\n }\n\n return false;\n };\n}\n\n/**\n * Select actual WP nonce depending on the ajax type and the fresh nonce provided.\n * @return {string} url\n */\nfunction selectActualNonce() {\n let defaultNonce = '';\n // return fresh nonce immediately if persists\n if (\n ctPublicFunctions.hasOwnProperty('_fresh_nonce') &&\n typeof ctPublicFunctions._fresh_nonce === 'string' &&\n ctPublicFunctions._fresh_nonce.length > 0\n ) {\n return ctPublicFunctions._fresh_nonce;\n }\n // select from default rest/ajax nonces\n if (\n ctPublicFunctions.data__ajax_type === 'admin_ajax' &&\n ctPublicFunctions.hasOwnProperty('_ajax_nonce') &&\n typeof ctPublicFunctions._ajax_nonce === 'string' &&\n ctPublicFunctions._ajax_nonce.length > 0\n ) {\n defaultNonce = ctPublicFunctions._ajax_nonce;\n }\n if (\n ctPublicFunctions.data__ajax_type === 'rest' &&\n ctPublicFunctions.hasOwnProperty('_rest_nonce') &&\n typeof ctPublicFunctions._rest_nonce === 'string' &&\n ctPublicFunctions._rest_nonce.length > 0\n ) {\n defaultNonce = ctPublicFunctions._rest_nonce;\n }\n\n return defaultNonce;\n}\n\n/**\n * Enter point to ApbctCore class\n *\n * @param {array|object} params\n * @return {*}\n */\n// eslint-disable-next-line no-unused-vars, require-jsdoc\nfunction apbct(params) {\n return new ApbctCore()\n .select(params);\n}\n\n/**\n * ApbctXhr\n */\nclass ApbctXhr {\n xhr = new XMLHttpRequest();\n\n // Base parameters\n method = 'POST'; // HTTP-request type\n url = ''; // URL to send the request\n async = true;\n user = null; // HTTP-authorization username\n password = null; // HTTP-authorization password\n data = {}; // Data to send\n\n // Optional params\n button = null; // Button that should be disabled when request is performing\n spinner = null; // Spinner that should appear when request is in process\n progressbar = null; // Progress bar for the current request\n context = this; // Context\n callback = null;\n onErrorCallback = null;\n\n responseType = 'json'; // Expected data type from server\n headers = {};\n timeout = 15000; // Request timeout in milliseconds\n\n methods_to_convert_data_to_URL = [\n 'GET',\n 'HEAD',\n ];\n\n body = null;\n http_code = 0;\n status_text = '';\n\n // eslint-disable-next-line require-jsdoc\n constructor(parameters) {\n // Set class properties\n for ( let key in parameters ) {\n if ( typeof this[key] !== 'undefined' ) {\n this[key] = parameters[key];\n }\n }\n\n // Modifying DOM-elements\n this.prepare();\n\n // Modify URL with data for GET and HEAD requests\n if ( Object.keys(this.data).length ) {\n this.deleteDoubleJSONEncoding(this.data);\n this.convertData();\n }\n\n if ( ! this.url ) {\n console.log('%cXHR%c not URL provided',\n 'color: red; font-weight: bold;', 'color: grey; font-weight: normal;');\n return false;\n }\n\n // Configure the request\n this.xhr.open(this.method, this.url, this.async, this.user, this.password);\n this.setHeaders();\n\n this.xhr.responseType = this.responseType;\n this.xhr.timeout = this.timeout;\n\n /* EVENTS */\n // Monitoring status\n this.xhr.onreadystatechange = function() {\n if (this.isWpNonceError()) {\n this.getFreshNonceAndRerunXHR(parameters);\n return;\n }\n this.onReadyStateChange();\n }.bind(this);\n\n // Run callback\n this.xhr.onload = function() {\n this.onLoad();\n }.bind(this);\n\n // On progress\n this.xhr.onprogress = function(event) {\n this.onProgress(event);\n }.bind(this);\n\n // On error\n this.xhr.onerror = function() {\n this.onError();\n }.bind(this);\n\n this.xhr.ontimeout = function() {\n this.onTimeout();\n }.bind(this);\n\n // Send the request\n this.xhr.send(this.body);\n }\n\n /**\n * prepare\n */\n prepare() {\n // Disable button\n if (this.button) {\n this.button.setAttribute('disabled', 'disabled');\n this.button.style.cursor = 'not-allowed';\n }\n\n // Enable spinner\n if (this.spinner) {\n this.spinner.style.display = 'inline';\n }\n }\n\n /**\n * complete\n */\n complete() {\n this.http_code = this.xhr.status;\n this.status_text = this.xhr.statusText;\n\n // Disable button\n if (this.button) {\n this.button.removeAttribute('disabled');\n this.button.style.cursor = 'auto';\n }\n\n // Enable spinner\n if (this.spinner) {\n this.spinner.style.display = 'none';\n }\n\n if ( this.progressbar ) {\n this.progressbar.fadeOut('slow');\n }\n }\n\n /**\n * onReadyStateChange\n */\n onReadyStateChange() {\n if (this.on_ready_state_change !== null && typeof this.on_ready_state_change === 'function') {\n this.on_ready_state_change();\n }\n }\n\n /**\n * @param {object} event\n */\n onProgress(event) {\n if (this.on_progress !== null && typeof this.on_progress === 'function') {\n this.on_progress();\n }\n }\n\n /**\n * onError\n */\n onError() {\n console.log('error');\n\n this.complete();\n this.error(\n this.http_code,\n this.status_text,\n );\n\n if (this.onErrorCallback !== null && typeof this.onErrorCallback === 'function') {\n this.onErrorCallback(this.status_text);\n }\n }\n\n /**\n * onTimeout\n */\n onTimeout() {\n this.complete();\n this.error(\n 0,\n 'timeout',\n );\n\n if (this.onErrorCallback !== null && typeof this.onErrorCallback === 'function') {\n this.onErrorCallback('Timeout');\n }\n }\n\n /**\n * @return {boolean}\n */\n onLoad() {\n this.complete();\n\n if (this.responseType === 'json' ) {\n if (this.xhr.response === null) {\n this.error(this.http_code, this.status_text, 'No response');\n return false;\n } else if ( typeof this.xhr.response.error !== 'undefined') {\n this.error(this.http_code, this.status_text, this.xhr.response.error);\n return false;\n }\n }\n\n if (this.callback !== null && typeof this.callback === 'function') {\n this.callback.call(this.context, this.xhr.response, this.data);\n }\n }\n\n /**\n * Check if 403 code of WP nonce error\n * @return {bool}\n */\n isWpNonceError() {\n let restErrror = false;\n let ajaxErrror = false;\n // check rest error\n if (this.xhr.readyState == 4) {\n restErrror = (\n typeof this.xhr.response === 'object' && this.xhr.response !== null &&\n this.xhr.response.hasOwnProperty('data') &&\n this.xhr.response.data.hasOwnProperty('status') &&\n this.xhr.response.data.status === 403\n );\n ajaxErrror = this.xhr.response === '-1' && this.xhr.status === 403;\n }\n // todo check AJAX error\n return restErrror || ajaxErrror;\n }\n\n /**\n * Get the fresh nonce and rerun the initial XHR with params\n * @param {[]} initialRequestParams\n */\n getFreshNonceAndRerunXHR(initialRequestParams) {\n let noncePrev = '';\n\n // Check if initialRequestParams['headers']['X-WP-Nonce'] exists.\n if (\n initialRequestParams.hasOwnProperty('headers') &&\n initialRequestParams.headers.hasOwnProperty('X-WP-Nonce')\n ) {\n noncePrev = initialRequestParams['headers']['X-WP-Nonce'];\n }\n\n // Check if initialRequestParams['data']['_ajax_nonce'] exists.\n if (\n initialRequestParams.hasOwnProperty('data') &&\n initialRequestParams.data.hasOwnProperty('_ajax_nonce')\n ) {\n noncePrev = initialRequestParams['data']['_ajax_nonce'];\n }\n\n // Nonce is not provided. Exit.\n if ( noncePrev === '' ) {\n return;\n }\n\n // prepare params for refreshing nonce\n let params = {};\n params.method = 'POST';\n params.data = {\n 'spbc_remote_call_action': 'get_fresh_wpnonce',\n 'plugin_name': 'antispam',\n 'nonce_prev': noncePrev,\n 'initial_request_params': initialRequestParams,\n };\n params.notJson = true;\n params.url = ctPublicFunctions.host_url;\n // this callback will rerun the XHR with initial params\n params.callback = function(...args) {\n // the refresh result itself\n let freshNonceResult = args[0];\n let newRequestParams = false;\n // provided initial params\n if (args[1] !== undefined && args[1].hasOwnProperty('initial_request_params')) {\n newRequestParams = args[1].initial_request_params;\n }\n if (newRequestParams && freshNonceResult.hasOwnProperty('wpnonce')) {\n ctPublicFunctions._fresh_nonce = freshNonceResult.wpnonce;\n if (ctPublicFunctions.data__ajax_type === 'rest') {\n new ApbctCore().rest(newRequestParams);\n } else {\n new ApbctCore().ajax(newRequestParams);\n }\n }\n };\n // run the nonce refreshing call\n new ApbctXhr(params);\n }\n\n /**\n * @param {number} httpCode\n * @param {string} statusText\n * @param {string} additionalMsg\n */\n error(httpCode, statusText, additionalMsg) {\n let errorString = '';\n\n if ( statusText === 'timeout' ) {\n errorString += 'Server response timeout';\n } else if ( httpCode === 200 ) {\n if ( statusText === 'parsererror' ) {\n errorString += 'Unexpected response from server. See console for details.';\n } else {\n errorString += 'Unexpected error. Status: ' + statusText + '.';\n if ( typeof additionalMsg !== 'undefined' ) {\n errorString += ' Additional error info: ' + additionalMsg;\n }\n }\n } else if (httpCode === 500) {\n errorString += 'Internal server error.';\n } else {\n errorString += 'Unexpected response code:' + httpCode;\n }\n\n this.errorOutput( errorString );\n\n if (this.onErrorCallback !== null && typeof this.onErrorCallback === 'function') {\n this.onErrorCallback(this.status_text);\n }\n }\n\n /**\n * @param {string} errorMsg\n */\n errorOutput(errorMsg) {\n console.log( '%c ctXHR error: %c' + errorMsg, 'color: red;', 'color: grey;' );\n }\n\n /**\n * setHeaders\n */\n setHeaders() {\n // Set headers if passed\n for ( let headerName in this.headers ) {\n if ( typeof this.headers[headerName] !== 'undefined' ) {\n this.xhr.setRequestHeader(headerName, this.headers[headerName]);\n }\n }\n }\n\n /**\n * @return {string|*}\n */\n convertData() {\n // GET, HEAD request-type\n if ( ~this.methods_to_convert_data_to_URL.indexOf( this.method ) ) {\n return this.convertDataToURL();\n\n // POST request-type\n } else {\n return this.convertDataToBody();\n }\n }\n\n /**\n * @return {string}\n */\n convertDataToURL() {\n let paramsAppendix = new URLSearchParams(this.data).toString();\n let paramsPrefix = this.url.match(/^(https?:\\/{2})?[a-z0-9.]+\\?/) ? '&' : '?';\n this.url += paramsPrefix + paramsAppendix;\n\n return this.url;\n }\n\n /**\n * @return {null}\n */\n convertDataToBody() {\n this.body = new FormData();\n for (let dataKey in this.data) {\n if (Object.hasOwn(this.data, dataKey)) {\n this.body.append(\n dataKey,\n typeof this.data[dataKey] === 'object' ?\n JSON.stringify(this.data[dataKey]) :\n this.data[dataKey],\n );\n }\n }\n\n return this.body;\n }\n\n /**\n * Recursive\n *\n * Recursively decode JSON-encoded properties\n *\n * @param {object} object\n * @return {*}\n */\n deleteDoubleJSONEncoding(object) {\n if ( typeof object === 'object') {\n for (let objectKey in object) {\n if (Object.hasOwn(object, objectKey)) {\n // Recursion\n if ( typeof object[objectKey] === 'object') {\n object[objectKey] = this.deleteDoubleJSONEncoding(object[objectKey]);\n }\n\n // Common case (out)\n if (\n typeof object[objectKey] === 'string' &&\n object[objectKey].match(/^[\\[{].*?[\\]}]$/) !== null // is like JSON\n ) {\n let parsedValue = JSON.parse(object[objectKey]);\n if ( typeof parsedValue === 'object' ) {\n object[objectKey] = parsedValue;\n }\n }\n }\n }\n }\n\n return object;\n }\n}\n// eslint-disable-next-line require-jsdoc\nclass ApbctAjax extends ApbctXhr {\n // eslint-disable-next-line require-jsdoc\n constructor(...args) {\n args = args[0];\n args.data._ajax_nonce = selectActualNonce();\n super(args);\n }\n}\n// eslint-disable-next-line require-jsdoc\nclass ApbctRest extends ApbctXhr {\n static default_route = ctPublicFunctions._rest_url + 'cleantalk-antispam/v1/';\n route = '';\n\n // eslint-disable-next-line require-jsdoc\n constructor(...args) {\n args = args[0];\n const nonce = selectActualNonce();\n args.url = ApbctRest.default_route + args.route;\n args.headers = {\n 'X-WP-Nonce': nonce,\n };\n super(args);\n }\n}\n\n// add hasOwn\nif (!Object.prototype.hasOwn) {\n Object.defineProperty(Object.prototype, 'hasOwn', { // eslint-disable-line\n value: function(property) {\n return Object.prototype.hasOwnProperty.call(this, property);\n },\n enumerable: false,\n configurable: true,\n writable: true,\n });\n}\n\n/**\n * Form skin class\n *\n */\n// eslint-disable-next-line no-unused-vars, require-jsdoc\nclass ApbctFormDecorator {\n elements = [];\n\n /**\n * Constructor\n */\n constructor() {\n this.getElements();\n this.setListeners();\n }\n\n /**\n * Get elements\n */\n getElements() {\n const elements = document.querySelectorAll('*');\n const regexId = /^apbct-trusted-text--label/;\n const regexClass = /apbct_form_decoration--/;\n\n this.setDecorationBackground();\n\n // Collect elements with id or class that contains apbct-trusted-text--label or apbct_form_decoration--\n // id\n let matchingElements = Array.from(elements).filter((element) => {\n return regexId.test(element.id);\n });\n matchingElements.forEach((element) => {\n this.elements.push(element);\n });\n\n // class\n matchingElements = Array.from(elements).filter((element) => {\n return regexClass.test(element.className);\n });\n\n matchingElements.forEach((element) => {\n this.elements.push(element);\n });\n\n const flagWrap = document.querySelector('.apbct_form_decoration');\n if (flagWrap) {\n const flagLeft = window.getComputedStyle(flagWrap, '::before');\n const flagRight = window.getComputedStyle(flagWrap, '::after');\n if (flagLeft && flagRight) {\n this.elements.push(flagWrap);\n }\n }\n }\n\n /**\n * Set decoration background\n */\n setDecorationBackground() {\n let blockForms = document.querySelectorAll('#respond');\n\n if (document.querySelector('[class*=\"apbct_form_decoration\"]')) {\n let classHeaderWrapper = document.querySelector('[class*=\"apbct_form_decoration\"]').getAttribute('class');\n let endPosition = classHeaderWrapper.indexOf('_header__wrapper');\n let classTemplate = classHeaderWrapper.substring(0, endPosition);\n\n blockForms.forEach((blockForm) => {\n blockForm.className += ' ' + classTemplate;\n });\n }\n }\n\n /**\n * Set listeners\n */\n setListeners() {\n this.elements.forEach((element) => {\n if (!element) {\n return;\n }\n\n element.addEventListener('click', (event) => {\n if (element.className.indexOf('apbct_form_decoration') !== -1) {\n if (element.className.indexOf('header__wrapper') !== -1) {\n this.addClicks();\n return;\n }\n\n const clickX = event.offsetX;\n const clickY = event.offsetY;\n const flagLeftWidth = parseFloat(window.getComputedStyle(element, '::before').width) / 2;\n const flagLeftHeight = parseFloat(window.getComputedStyle(element, '::before').height) / 2;\n const flagRightWidth = parseFloat(window.getComputedStyle(element, '::after').width) / 2;\n const flagRightHeight = parseFloat(window.getComputedStyle(element, '::after').height) / 2;\n\n if (element.className.indexOf('christmas') !== -1) {\n if (\n clickY < flagLeftHeight / 3 && clickX < flagLeftWidth ||\n clickY < flagRightHeight / 3 && clickX > flagRightWidth\n ) {\n this.addClicks();\n return;\n }\n }\n\n if (\n (element.className.indexOf('new-year') !== -1) ||\n (element.className.indexOf('fourth-july') !== -1)\n ) {\n if (\n clickY > flagLeftHeight && clickX < flagLeftWidth ||\n clickY > flagRightHeight && clickX > flagRightWidth\n ) {\n this.addClicks();\n }\n }\n\n if (element.className.indexOf('signature')) {\n this.addClicks();\n }\n\n return;\n }\n\n this.addClicks();\n });\n\n element.addEventListener('mouseup', (event) => {\n setTimeout(() => {\n const selectedText = window.getSelection().toString();\n if (selectedText) {\n this.addSelected();\n }\n }, 100);\n });\n\n element.addEventListener('mousemove', (event) => {\n if (element.className.indexOf('apbct_form_decoration') !== -1) {\n const mouseX = event.offsetX;\n const mouseY = event.offsetY;\n const flagLeftWidth = parseFloat(window.getComputedStyle(element, '::before').width) / 2;\n const flagLeftHeight = parseFloat(window.getComputedStyle(element, '::before').height) / 2;\n const flagRightWidth = parseFloat(window.getComputedStyle(element, '::after').width) / 2;\n const flagRightHeight = parseFloat(window.getComputedStyle(element, '::after').height) / 2;\n\n if (mouseY > flagLeftHeight && mouseX < flagLeftWidth ||\n mouseY > flagRightHeight && mouseX > flagRightWidth\n ) {\n this.trackMouseMovement();\n }\n return;\n }\n\n this.trackMouseMovement();\n });\n });\n }\n\n /**\n * Add clicks\n */\n addClicks() {\n if (document.ctFormDecorationMouseData) {\n if (document.ctFormDecorationMouseData.clicks) {\n document.ctFormDecorationMouseData.clicks++;\n } else {\n document.ctFormDecorationMouseData.clicks = 1;\n }\n return;\n }\n\n document.ctFormDecorationMouseData = {clicks: 1};\n }\n\n /**\n * Add selected\n */\n addSelected() {\n if (document.ctFormDecorationMouseData) {\n if (document.ctFormDecorationMouseData.selected) {\n document.ctFormDecorationMouseData.selected++;\n } else {\n document.ctFormDecorationMouseData.selected = 1;\n }\n return;\n }\n\n document.ctFormDecorationMouseData = {selected: 1};\n }\n\n /**\n * Track mouse movement\n */\n trackMouseMovement() {\n if (!document.ctFormDecorationMouseData) {\n document.ctFormDecorationMouseData = {};\n }\n if (!document.ctFormDecorationMouseData.mouseMovements) {\n document.ctFormDecorationMouseData.mouseMovements = [];\n }\n\n document.ctFormDecorationMouseData.mouseMovements.push({timestamp: Date.now()});\n\n if (document.ctFormDecorationMouseData.mouseMovements.length > 1) {\n const index = document.ctFormDecorationMouseData.mouseMovements.length - 1;\n const lastMovement = document.ctFormDecorationMouseData.mouseMovements[index];\n const firstMovement = document.ctFormDecorationMouseData.mouseMovements[0];\n const timeDiff = lastMovement.timestamp - firstMovement.timestamp;\n document.ctFormDecorationMouseData.hovering = timeDiff;\n }\n }\n}\n\n/**\n * @param {object|array|string} cookies\n * @param {object|array|string} value\n * @param {string|number} expires\n */\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctSetCookie( cookies, value, expires ) {\n let listOfCookieNamesToForceAlt = [\n 'ct_sfw_pass_key',\n 'ct_sfw_passed',\n 'wordpress_apbct_antibot',\n 'apbct_anticrawler_passed',\n 'apbct_bot_detector_exist',\n 'apbct_antiflood_passed',\n 'apbct_email_encoder_passed',\n ];\n\n let skipAlt = false;\n\n if ( typeof cookies === 'string') {\n skipAlt = cookies === 'ct_pointer_data';\n if ( typeof value === 'string' || typeof value === 'number' ) {\n cookies = [[cookies, value, expires]];\n }\n }\n\n // Cookies disabled\n if ( ctPublicFunctions.data__cookies_type === 'none' ) {\n let forcedAltCookiesSet = [];\n cookies.forEach( function(item) {\n if (listOfCookieNamesToForceAlt.indexOf(item[0]) !== -1) {\n forcedAltCookiesSet.push(item);\n } else {\n apbctLocalStorage.set(item[0], item[1]);\n }\n });\n\n // if cookies from list found use alt cookies for this selection set\n if ( forcedAltCookiesSet.length > 0 ) {\n ctSetAlternativeCookie(forcedAltCookiesSet);\n }\n\n // If problem integration forms detected use alt cookies for whole cookies set\n if ( ctPublic.force_alt_cookies && !skipAlt) {\n // do it just once\n ctSetAlternativeCookie(cookies, {forceAltCookies: true});\n } else {\n ctNoCookieAttachHiddenFieldsToForms();\n }\n\n // Using traditional cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'native' ) {\n // If problem integration forms detected use alt cookies for whole cookies set\n if ( ctPublic.force_alt_cookies && !skipAlt) {\n // do it just once\n ctSetAlternativeCookie(cookies, {forceAltCookies: true});\n }\n cookies.forEach( function(item) {\n const _expires = typeof item[2] !== 'undefined' ? 'expires=' + expires + '; ' : '';\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = ctPublicFunctions.cookiePrefix +\n item[0] +\n '=' +\n encodeURIComponent(item[1]) +\n '; ' +\n _expires +\n 'path=/; samesite=lax' +\n ctSecure;\n });\n\n // Using alternative cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'alternative' && !skipAlt ) {\n ctSetAlternativeCookie(cookies);\n }\n}\n\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctDetectForcedAltCookiesForms() {\n let ninjaFormsSign = document.querySelectorAll('#tmpl-nf-layout').length > 0;\n let elementorUltimateAddonsRegister = document.querySelectorAll('.uael-registration-form-wrapper').length > 0;\n let smartFormsSign = document.querySelectorAll('script[id*=\"smart-forms\"]').length > 0;\n let jetpackCommentsForm = document.querySelectorAll('iframe[name=\"jetpack_remote_comment\"]').length > 0;\n let cwginstockForm = document.querySelectorAll('.cwginstock-subscribe-form').length > 0;\n let userRegistrationProForm = document.querySelectorAll('div[id^=\"user-registration-form\"]').length > 0;\n let etPbDiviSubscriptionForm = document.querySelectorAll('div[class^=\"et_pb_newsletter_form\"]').length > 0;\n let fluentBookingApp = document.querySelectorAll('div[class^=\"fluent_booking_app\"]').length > 0;\n let bloomPopup = document.querySelectorAll('div[class^=\"et_bloom_form_container\"]').length > 0;\n let pafeFormsFormElementor = document.querySelectorAll('div[class*=\"pafe-form\"]').length > 0;\n let otterForm = document.querySelectorAll('div [class*=\"otter-form\"]').length > 0;\n ctPublic.force_alt_cookies = smartFormsSign ||\n ninjaFormsSign ||\n jetpackCommentsForm ||\n elementorUltimateAddonsRegister ||\n cwginstockForm ||\n userRegistrationProForm ||\n etPbDiviSubscriptionForm ||\n fluentBookingApp ||\n pafeFormsFormElementor ||\n bloomPopup ||\n otterForm;\n\n setTimeout(function() {\n if (!ctPublic.force_alt_cookies) {\n let bookingPress = document.querySelectorAll('main[id^=\"bookingpress_booking_form\"]').length > 0;\n ctPublic.force_alt_cookies = bookingPress;\n }\n }, 1000);\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctSetAlternativeCookie(cookies, params) {\n if (typeof (getJavascriptClientData) === 'function' ) {\n // reprocess already gained cookies data\n if (Array.isArray(cookies)) {\n cookies = getJavascriptClientData(cookies);\n }\n } else {\n console.log('APBCT ERROR: getJavascriptClientData() is not loaded');\n }\n\n try {\n cookies = JSON.parse(cookies);\n } catch (e) {\n console.log('APBCT ERROR: JSON parse error:' + e);\n return;\n }\n\n if (!cookies.apbct_site_referer) {\n cookies.apbct_site_referer = location.href;\n }\n\n const callback = params && params.callback || null;\n const onErrorCallback = params && params.onErrorCallback || null;\n\n if ( params && params.forceAltCookies ) {\n cookies.apbct_force_alt_cookies = true;\n }\n\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n // fix for url encoded cookie apbct_pixel_url on REST route\n if (typeof cookies.apbct_pixel_url === 'string' &&\n cookies.apbct_pixel_url.indexOf('%3A') !== -1\n ) {\n cookies.apbct_pixel_url = decodeURIComponent(cookies.apbct_pixel_url);\n }\n apbct_public_sendREST(\n 'alt_sessions',\n {\n method: 'POST',\n data: {cookies: cookies},\n callback: callback,\n onErrorCallback: onErrorCallback,\n },\n );\n\n // Using AJAX request and handler\n } else if ( ctPublicFunctions.data__ajax_type === 'admin_ajax' ) {\n apbct_public_sendAJAX(\n {\n action: 'apbct_alt_session__save__AJAX',\n cookies: cookies,\n },\n {\n notJson: 1,\n callback: callback,\n onErrorCallback: onErrorCallback,\n beforeSend: function(xhr) {\n xhr.setRequestHeader('X-Robots-Tag', 'noindex, nofollow');\n },\n },\n );\n }\n}\n\n/**\n * Get cookie by name\n * @param name\n * @return {string|undefined}\n */\n// eslint-disable-next-line require-jsdoc,no-unused-vars\nfunction ctGetCookie(name) {\n let matches = document.cookie.match(new RegExp(\n '(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)',\n ));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n}\n\n// eslint-disable-next-line require-jsdoc,no-unused-vars\nfunction ctDeleteCookie(cookieName) {\n // Cookies disabled\n if ( ctPublicFunctions.data__cookies_type === 'none' ) {\n return;\n\n // Using traditional cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'native' ) {\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = cookieName + '=\"\"; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; samesite=lax' + ctSecure;\n\n // Using alternative cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'alternative' ) {\n // @ToDo implement this logic\n }\n}\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_public_sendAJAX(data, params, obj) {\n // Default params\n let _params = [];\n _params['callback'] = params.callback || null;\n _params['onErrorCallback'] = params.onErrorCallback || null;\n _params['callback_context'] = params.callback_context || null;\n _params['callback_params'] = params.callback_params || null;\n _params['async'] = params.async || true;\n _params['notJson'] = params.notJson || null;\n _params['responseType']= params.notJson ? 'text' : 'json';\n _params['timeout'] = params.timeout || 15000;\n _params['obj'] = obj || null;\n _params['button'] = params.button || null;\n _params['spinner'] = params.spinner || null;\n _params['progressbar'] = params.progressbar || null;\n _params['silent'] = params.silent || null;\n _params['no_nonce'] = params.no_nonce || null;\n _params['data'] = data;\n _params['url'] = ctPublicFunctions._ajax_url;\n const nonce = selectActualNonce();\n\n if (typeof (data) === 'string') {\n if ( ! _params['no_nonce'] ) {\n _params['data'] = _params['data'] + '&_ajax_nonce=' + nonce;\n }\n _params['data'] = _params['data'] + '&no_cache=' + Math.random();\n } else {\n if ( ! _params['no_nonce'] ) {\n _params['data']._ajax_nonce = nonce;\n }\n _params['data'].no_cache = Math.random();\n }\n\n new ApbctCore().ajax(_params);\n}\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_public_sendREST( route, params ) {\n let _params = [];\n _params['route'] = route;\n _params['callback'] = params.callback || null;\n _params['onErrorCallback'] = params.onErrorCallback || null;\n _params['data'] = params.data || [];\n _params['method'] = params.method || 'POST';\n\n new ApbctCore().rest(_params);\n}\n\n/**\n * Generate unique ID\n * @return {string}\n */\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction apbctGenerateUniqueID() {\n return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);\n}\n\nlet apbctLocalStorage = {\n get: function(key, property) {\n if ( typeof property === 'undefined' ) {\n property = 'value';\n }\n const storageValue = localStorage.getItem(key);\n if ( storageValue !== null ) {\n try {\n const json = JSON.parse(storageValue);\n if ( json.hasOwnProperty(property) ) {\n try {\n // if property can be parsed as JSON - do it\n return JSON.parse( json[property] );\n } catch (e) {\n // if not - return string of value\n return json[property].toString();\n }\n } else {\n return json;\n }\n } catch (e) {\n return storageValue;\n }\n }\n return false;\n },\n set: function(key, value, isJson = true) {\n if (isJson) {\n let objToSave = {'value': JSON.stringify(value), 'timestamp': Math.floor(new Date().getTime() / 1000)};\n localStorage.setItem(key, JSON.stringify(objToSave));\n } else {\n localStorage.setItem(key, value);\n }\n },\n isAlive: function(key, maxLifetime) {\n if ( typeof maxLifetime === 'undefined' ) {\n maxLifetime = 86400;\n }\n const keyTimestamp = this.get(key, 'timestamp');\n return keyTimestamp + maxLifetime > Math.floor(new Date().getTime() / 1000);\n },\n isSet: function(key) {\n return localStorage.getItem(key) !== null;\n },\n delete: function(key) {\n localStorage.removeItem(key);\n },\n getCleanTalkData: function() {\n let data = {};\n for (let i=0; i this.checkBotCallback(result),\n });\n } else if (ctPublicFunctions.data__ajax_type === 'admin_ajax') {\n data.action = 'apbct_force_protection_check_bot';\n apbct_public_sendAJAX(data, {callback: (result) => this.checkBotCallback(result)});\n }\n }\n\n /**\n * Check bot callback\n * @param {Object} result\n * @return {void}\n */\n checkBotCallback(result) {\n // if error occurred\n if (result.data && result.data.status && result.data.status !== 200) {\n console.log('ApbctForceProtection connection error occurred');\n this.decodeForms();\n return;\n }\n\n if (typeof result === 'string') {\n try {\n result = JSON.parse(result);\n } catch (e) {\n console.log('ApbctForceProtection decodeForms error', e);\n this.decodeForms();\n return;\n }\n }\n\n if (typeof result === 'object' && result.allow && result.allow === 1) {\n this.decodeForms();\n } else {\n this.showMessageForBot(result.message);\n }\n }\n\n /**\n * Decode forms\n * @return {void}\n */\n decodeForms() {\n let form;\n\n this.wrappers.forEach((wrapper) => {\n form = wrapper.querySelector('div.ct-encoded-form').dataset.encodedForm;\n\n try {\n if (form && typeof(form) == 'string') {\n wrapper.outerHTML = atob(form);\n }\n } catch (error) {\n console.log(error);\n }\n });\n }\n\n /**\n * Show message for bot\n * @param {string} message\n * @return {void}\n */\n showMessageForBot(message) {\n let form;\n\n this.wrappers.forEach((wrapper) => {\n form = wrapper.querySelector('div.ct-encoded-form').dataset.encodedForm;\n if (form) {\n wrapper.outerHTML = '
' + message + '
';\n }\n });\n }\n}\n\n/**\n * Force protection\n */\nfunction apbctForceProtect() {\n if (ctPublic.settings__forms__force_protection && typeof ApbctForceProtection !== 'undefined') {\n new ApbctForceProtection();\n }\n}\n\nif (ctPublic.data__key_is_ok) {\n if (document.readyState !== 'loading') {\n apbctForceProtect();\n } else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', apbctForceProtect);\n }\n}\n\n/**\n * Class for gathering data about user typing.\n *\n * ==============================\n * isAutoFill - only person can use auto fill\n * isUseBuffer - use buffer for fill current field\n * ==============================\n * lastKeyTimestamp - timestamp of last key press in current field\n * speedDelta - change for each key press in current field,\n * as difference between current and previous key press timestamps,\n * robots in general have constant speed of typing.\n * If speedDelta is constant for each key press in current field,\n * so, speedDelta will be roughly to 0, then it is robot.\n * ==============================\n */\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nclass CTTypoData {\n fieldData = {\n isAutoFill: false,\n isUseBuffer: false,\n speedDelta: 0,\n firstKeyTimestamp: 0,\n lastKeyTimestamp: 0,\n lastDelta: 0,\n countOfKey: 0,\n };\n\n fields = document.querySelectorAll('textarea[name=comment]');\n\n data = [];\n\n /**\n * Gather fields.\n */\n gatheringFields() {\n let fieldSet = Array.prototype.slice.call(this.fields);\n fieldSet.forEach((field, i) => {\n this.data.push(Object.assign({}, this.fieldData));\n });\n }\n\n /**\n * Set listeners.\n */\n setListeners() {\n this.fields.forEach((field, i) => {\n field.addEventListener('paste', () => {\n this.data[i].isUseBuffer = true;\n });\n });\n\n this.fields.forEach((field, i) => {\n field.addEventListener('onautocomplete', () => {\n this.data[i].isAutoFill = true;\n });\n });\n\n this.fields.forEach((field, i) => {\n field.addEventListener('input', () => {\n this.data[i].countOfKey++;\n let time = + new Date();\n let currentDelta = 0;\n\n if (this.data[i].countOfKey === 1) {\n this.data[i].lastKeyTimestamp = time;\n this.data[i].firstKeyTimestamp = time;\n return;\n }\n\n currentDelta = time - this.data[i].lastKeyTimestamp;\n if (this.data[i].countOfKey === 2) {\n this.data[i].lastKeyTimestamp = time;\n this.data[i].lastDelta = currentDelta;\n return;\n }\n\n if (this.data[i].countOfKey > 2) {\n this.data[i].speedDelta += Math.abs(this.data[i].lastDelta - currentDelta);\n this.data[i].lastKeyTimestamp = time;\n this.data[i].lastDelta = currentDelta;\n }\n });\n });\n }\n}\n\n// eslint-disable-next-line camelcase\nconst ctDate = new Date();\nconst ctTimeMs = new Date().getTime();\nlet ctMouseEventTimerFlag = true; // Reading interval flag\nlet ctMouseData = [];\nlet ctMouseDataCounter = 0;\nlet ctCheckedEmails = {};\nlet ctCheckedEmailsExist = {};\nlet ctMouseReadInterval;\nlet ctMouseWriteDataInterval;\nlet tokenCheckerIntervalId;\nlet botDetectorLogLastUpdate = 0;\nlet botDetectorLogEventTypesCollected = [];\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_attach_event_handler(elem, event, callback) {\n if (typeof window.addEventListener === 'function') elem.addEventListener(event, callback);\n else elem.attachEvent(event, callback);\n}\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_remove_event_handler(elem, event, callback) {\n if (typeof window.removeEventListener === 'function') elem.removeEventListener(event, callback);\n else elem.detachEvent(event, callback);\n}\n\n// Writing first key press timestamp\nconst ctFunctionFirstKey = function output(event) {\n let KeyTimestamp = Math.floor(new Date().getTime() / 1000);\n ctSetCookie('ct_fkp_timestamp', KeyTimestamp);\n ctKeyStopStopListening();\n};\n\n/**\n * Run cron jobs\n */\n// forms handler cron\ncronFormsHandler(2000);\n\n// bot_detector frontend_data log alt session saving cron\nif (\n ctPublicFunctions.hasOwnProperty('data__bot_detector_enabled') &&\n ctPublicFunctions.data__bot_detector_enabled == 1 &&\n ctPublicFunctions.hasOwnProperty('data__frontend_data_log_enabled') &&\n ctPublicFunctions.data__frontend_data_log_enabled == 1\n) {\n sendBotDetectorLogToAltSessions(1000);\n}\n/**\n * Cron jobs end.\n */\n\n// mouse read\nif (ctPublic.data__key_is_ok) {\n // Reading interval\n ctMouseReadInterval = setInterval(function() {\n ctMouseEventTimerFlag = true;\n }, 150);\n\n // Writting interval\n ctMouseWriteDataInterval = setInterval(function() {\n ctSetCookie('ct_pointer_data', JSON.stringify(ctMouseData));\n }, 1200);\n}\n\n// Logging mouse position each 150 ms\nconst ctFunctionMouseMove = function output(event) {\n ctSetMouseMoved();\n if (ctMouseEventTimerFlag === true) {\n ctMouseData.push([\n Math.round(event.clientY),\n Math.round(event.clientX),\n Math.round(new Date().getTime() - ctTimeMs),\n ]);\n\n ctMouseDataCounter++;\n ctMouseEventTimerFlag = false;\n if (ctMouseDataCounter >= 50) {\n ctMouseStopData();\n }\n }\n};\n\n/**\n * Do handle periodical actions.\n * @param {int} cronStartTimeout Time to go before cron start.\n */\nfunction cronFormsHandler(cronStartTimeout = 2000) {\n setTimeout(function() {\n setInterval(function() {\n restartFieldsListening();\n restartBotDetectorEventTokenAttach();\n }, 2000);\n }, cronStartTimeout);\n}\n\n/**\n * Send BotDetector logs data to alternative sessions.\n * If log_last_update has changed and log contains new event types, the log will be sent to the alternative sessions.\n * @param {int} cronStartTimeout delay before cron start\n * @param {int} interval check fires on interval\n */\nfunction sendBotDetectorLogToAltSessions(cronStartTimeout = 3000, interval = 1000) {\n setTimeout(function() {\n setInterval(function() {\n const currentLog = apbctLocalStorage.get('ct_bot_detector_frontend_data_log');\n if (needsSaveLogToAltSessions(currentLog)) {\n botDetectorLogLastUpdate = currentLog.log_last_update;\n // the log will be taken from javascriptclientdata\n ctSetAlternativeCookie([], {forceAltCookies: true});\n }\n }, interval);\n }, cronStartTimeout);\n}\n\n/**\n * Check if the log needs to be saved to the alt sessions. If the log has new event types, it will be saved.\n * @param {object} currentLog\n * @return {boolean}\n */\nfunction needsSaveLogToAltSessions(currentLog) {\n if (\n currentLog && currentLog.hasOwnProperty('log_last_update') &&\n botDetectorLogLastUpdate !== currentLog.log_last_update\n ) {\n try {\n for (let i = 0; i < currentLog.records.length; i++) {\n const currentType = currentLog.records[i].frontend_data.js_event;\n // check if this event type was already collected\n if (currentType !== undefined && botDetectorLogEventTypesCollected.includes(currentType)) {\n continue;\n }\n // add new event type to collection, this type will be sent to the alt sessions further\n botDetectorLogEventTypesCollected.push(currentType);\n return true;\n }\n } catch (e) {\n console.log('APBCT: bot detector log collection error: ' . e.toString());\n }\n }\n return false;\n}\n\n/**\n * Restart event_token attachment if some forms load after document ready.\n */\nfunction restartBotDetectorEventTokenAttach() {\n // List there any new conditions, right now it works only for LatePoint forms.\n // Probably, we can remove this condition at all, because setEventTokenField()\n // checks all the forms without the field\n const doAttach = (\n document.getElementsByClassName('latepoint-form').length > 0 ||\n document.getElementsByClassName('mec-booking-form-container').length > 0 ||\n document.getElementById('login-form-popup') !== null\n );\n\n try {\n if ( doAttach ) {\n // get token from LS\n const token = apbctLocalStorage.get('bot_detector_event_token');\n if (typeof setEventTokenField === 'function' && token !== undefined && token.length === 64) {\n setEventTokenField(token);\n }\n // probably there we could use a new botDetectorInit if token is not found\n }\n } catch (e) {\n console.log(e.toString());\n }\n}\n\n/**\n * Stop mouse observing function\n */\nfunction ctMouseStopData() {\n apbct_remove_event_handler(document, 'mousemove', ctFunctionMouseMove);\n clearInterval(ctMouseReadInterval);\n clearInterval(ctMouseWriteDataInterval);\n}\n\n/**\n * Stop key listening function\n */\nfunction ctKeyStopStopListening() {\n apbct_remove_event_handler(document, 'mousedown', ctFunctionFirstKey);\n apbct_remove_event_handler(document, 'keydown', ctFunctionFirstKey);\n}\n\n/**\n * @param {mixed} e\n */\nfunction checkEmail(e) {\n let currentEmail = e.target.value;\n\n if (! /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(currentEmail)) {\n return;\n }\n\n if (currentEmail && !(currentEmail in ctCheckedEmails)) {\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'check_email_before_post',\n {\n method: 'POST',\n data: {'email': currentEmail},\n callback: function(result) {\n if (result.result) {\n ctCheckedEmails[currentEmail] = {\n 'result': result.result,\n 'timestamp': Date.now() / 1000 |0,\n };\n ctSetCookie('ct_checked_emails', JSON.stringify(ctCheckedEmails));\n }\n },\n },\n );\n // Using AJAX request and handler\n } else if ( ctPublicFunctions.data__ajax_type === 'admin_ajax' ) {\n apbct_public_sendAJAX(\n {\n action: 'apbct_email_check_before_post',\n email: currentEmail,\n },\n {\n callback: function(result) {\n if (result.result) {\n ctCheckedEmails[currentEmail] = {\n 'result': result.result,\n 'timestamp': Date.now() / 1000 |0,\n };\n ctSetCookie('ct_checked_emails', JSON.stringify(ctCheckedEmails));\n }\n },\n },\n );\n }\n }\n}\n\n/**\n * @param {mixed} e\n */\nfunction checkEmailExist(e) {\n let currentEmail = e.target.value;\n let result;\n\n if (!currentEmail || !currentEmail.length) {\n let envelope = document.getElementById('apbct-check_email_exist-block');\n if (envelope) {\n envelope.remove();\n }\n let hint = document.getElementById('apbct-check_email_exist-popup_description');\n if (hint) {\n hint.remove();\n }\n return;\n }\n\n if (! /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(currentEmail)) {\n return;\n }\n\n if (currentEmail in ctCheckedEmailsExist) {\n result = ctCheckedEmailsExist[currentEmail];\n getResultCheckEmailExist(e, result, currentEmail);\n\n return;\n }\n\n viewCheckEmailExist(e, 'load');\n\n // Using REST API handler\n ctPublicFunctions.data__ajax_type = 'rest';\n if (ctPublicFunctions.data__ajax_type === 'rest') {\n apbct_public_sendREST(\n 'check_email_exist_post',\n {\n method: 'POST',\n data: {'email': currentEmail},\n callback: function(result) {\n getResultCheckEmailExist(e, result, currentEmail);\n },\n },\n );\n\n return;\n }\n\n if (ctPublicFunctions.data__ajax_type === 'admin_ajax') {\n apbct_public_sendAJAX(\n {\n action: 'apbct_email_check_exist_post',\n email: currentEmail,\n },\n {\n callback: function(result) {\n getResultCheckEmailExist(e, result, currentEmail);\n },\n },\n );\n }\n}\n\n/**\n * @param {mixed} e\n * @param {mixed} result\n * @param {string} currentEmail\n */\nfunction getResultCheckEmailExist(e, result, currentEmail) {\n if (!result || !result.result) {\n return;\n }\n\n result = result.result;\n\n ctCheckedEmailsExist[currentEmail] = {\n 'result': result,\n 'timestamp': Date.now() / 1000 |0,\n };\n\n if (result.result == 'EXISTS') {\n viewCheckEmailExist(e, 'good_email', result.text_result);\n } else {\n viewCheckEmailExist(e, 'bad_email', result.text_result);\n }\n\n ctSetCookie('ct_checked_emails_exist', JSON.stringify(ctCheckedEmailsExist));\n}\n\n/**\n * @param {mixed} e\n * @param {string} state\n * @param {string} textResult\n */\nfunction viewCheckEmailExist(e, state, textResult) {\n let parentElement = e.target.parentElement;\n let inputEmail = parentElement.querySelector('[name*=\"email\"]');\n\n if (!inputEmail) {\n return;\n }\n\n let envelope;\n let hint;\n\n // envelope\n if (document.getElementById('apbct-check_email_exist-block')) {\n envelope = document.getElementById('apbct-check_email_exist-block');\n } else {\n envelope = document.createElement('div');\n envelope.setAttribute('class', 'apbct-check_email_exist-block');\n envelope.setAttribute('id', 'apbct-check_email_exist-block');\n window.addEventListener('scroll', function() {\n envelope.style.top = inputEmail.getBoundingClientRect().top + 'px';\n });\n parentElement.after(envelope);\n }\n\n // hint\n if (document.getElementById('apbct-check_email_exist-popup_description')) {\n hint = document.getElementById('apbct-check_email_exist-popup_description');\n } else {\n hint = document.createElement('div');\n hint.setAttribute('class', 'apbct-check_email_exist-popup_description');\n hint.setAttribute('id', 'apbct-check_email_exist-popup_description');\n window.addEventListener('scroll', function() {\n hint.style.top = envelope.getBoundingClientRect().top + 'px';\n });\n\n envelope.after(hint);\n }\n\n ctEmailExistSetElementsPositions();\n\n window.addEventListener('resize', function(event) {\n ctEmailExistSetElementsPositions();\n });\n\n switch (state) {\n case 'load':\n envelope.classList.remove('apbct-check_email_exist-good_email', 'apbct-check_email_exist-bad_email');\n envelope.classList.add('apbct-check_email_exist-load');\n break;\n\n case 'good_email':\n envelope.classList.remove('apbct-check_email_exist-load', 'apbct-check_email_exist-bad_email');\n envelope.classList.add('apbct-check_email_exist-good_email');\n\n envelope.onmouseover = function() {\n hint.textContent = textResult;\n hint.style.display = 'block';\n hint.style.top = inputEmail.getBoundingClientRect().top - hint.getBoundingClientRect().height + 'px';\n hint.style.color = '#1C7129';\n };\n\n envelope.onmouseout = function() {\n hint.style.display = 'none';\n };\n\n break;\n\n case 'bad_email':\n envelope.classList.remove('apbct-check_email_exist-load', 'apbct-check_email_exist-good_email');\n envelope.classList.add('apbct-check_email_exist-bad_email');\n\n envelope.onmouseover = function() {\n hint.textContent = textResult;\n hint.style.display = 'block';\n hint.style.top = inputEmail.getBoundingClientRect().top - hint.getBoundingClientRect().height + 'px';\n hint.style.color = '#E01111';\n };\n\n envelope.onmouseout = function() {\n hint.style.display = 'none';\n };\n\n break;\n\n default:\n break;\n }\n}\n\n/**\n * Shift the envelope to the input field on resizing the window\n * @param {object} envelope\n * @param {object} inputEmail\n */\nfunction ctEmailExistSetElementsPositions() {\n const envelopeWidth = 35;\n const inputEmail = document.querySelector('comment-form input[name*=\"email\"], input#email');\n if (!inputEmail) {\n return;\n }\n const envelope = document.getElementById('apbct-check_email_exist-block');\n if (envelope) {\n envelope.style.top = inputEmail.getBoundingClientRect().top + 'px';\n envelope.style.left = inputEmail.getBoundingClientRect().right - envelopeWidth - 10 + 'px';\n envelope.style.height = inputEmail.offsetHeight + 'px';\n envelope.style.width = envelopeWidth + 'px';\n }\n\n const hint = document.getElementById('apbct-check_email_exist-popup_description');\n if (hint) {\n hint.style.width = inputEmail.offsetWidth + 'px';\n hint.style.left = inputEmail.getBoundingClientRect().left + 'px';\n }\n}\n\n/**\n * @return {bool}\n */\nfunction ctIsDrawPixel() {\n return +ctPublic.pixel__enabled ||\n (ctPublic.data__cookies_type === 'none' && document.querySelectorAll('img#apbct_pixel').length === 0) ||\n (ctPublic.data__cookies_type === 'alternative' && document.querySelectorAll('img#apbct_pixel').length === 0);\n}\n\n/**\n * @param {string} pixelUrl\n */\nfunction ctSetPixelImg(pixelUrl) {\n ctSetCookie('apbct_pixel_url', pixelUrl);\n if ( ctIsDrawPixel() ) {\n if ( ! document.getElementById('apbct_pixel') ) {\n let insertedImg = document.createElement('img');\n insertedImg.setAttribute('alt', 'CleanTalk Pixel');\n insertedImg.setAttribute('title', 'CleanTalk Pixel');\n insertedImg.setAttribute('id', 'apbct_pixel');\n insertedImg.setAttribute('style', 'display: none; left: 99999px;');\n insertedImg.setAttribute('src', pixelUrl);\n apbct('body').append(insertedImg);\n }\n }\n}\n\n/**\n * @param {string} pixelUrl\n */\nfunction ctSetPixelImgFromLocalstorage(pixelUrl) {\n if ( ctIsDrawPixel() ) {\n if ( ! document.getElementById('apbct_pixel') ) {\n let insertedImg = document.createElement('img');\n insertedImg.setAttribute('alt', 'CleanTalk Pixel');\n insertedImg.setAttribute('title', 'CleanTalk Pixel');\n insertedImg.setAttribute('id', 'apbct_pixel');\n insertedImg.setAttribute('style', 'display: none; left: 99999px;');\n insertedImg.setAttribute('src', decodeURIComponent(pixelUrl));\n apbct('body').append(insertedImg);\n }\n }\n}\n\n/**\n * ctGetPixelUrl\n */\nfunction ctGetPixelUrl() {\n // Check if pixel is already in localstorage and is not outdated\n let localStoragePixelUrl = apbctLocalStorage.get('apbct_pixel_url');\n if ( localStoragePixelUrl !== false ) {\n if ( ! apbctLocalStorage.isAlive('apbct_pixel_url', 3600 * 3) ) {\n apbctLocalStorage.delete('apbct_pixel_url');\n } else {\n // if so - load pixel from localstorage and draw it skipping AJAX\n ctSetPixelImgFromLocalstorage(localStoragePixelUrl);\n return;\n }\n }\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'apbct_get_pixel_url',\n {\n method: 'POST',\n callback: function(result) {\n if (result &&\n (typeof result === 'string' || result instanceof String) && result.indexOf('https') === 0) {\n // set pixel url to localstorage\n if ( ! apbctLocalStorage.get('apbct_pixel_url') ) {\n // set pixel to the storage\n apbctLocalStorage.set('apbct_pixel_url', result);\n // update pixel data in the hidden fields\n ctNoCookieAttachHiddenFieldsToForms();\n }\n // then run pixel drawing\n ctSetPixelImg(result);\n }\n },\n },\n );\n // Using AJAX request and handler\n } else {\n apbct_public_sendAJAX(\n {\n action: 'apbct_get_pixel_url',\n },\n {\n notJson: true,\n callback: function(result) {\n if (result &&\n (typeof result === 'string' || result instanceof String) && result.indexOf('https') === 0) {\n // set pixel url to localstorage\n if ( ! apbctLocalStorage.get('apbct_pixel_url') ) {\n // set pixel to the storage\n apbctLocalStorage.set('apbct_pixel_url', result);\n // update pixel data in the hidden fields\n ctNoCookieAttachHiddenFieldsToForms();\n }\n // then run pixel drawing\n ctSetPixelImg(result);\n }\n },\n beforeSend: function(xhr) {\n xhr.setRequestHeader('X-Robots-Tag', 'noindex, nofollow');\n },\n },\n );\n }\n}\n\n/**\n * ctSetHasScrolled\n */\nfunction ctSetHasScrolled() {\n if ( ! apbctLocalStorage.isSet('ct_has_scrolled') || ! apbctLocalStorage.get('ct_has_scrolled') ) {\n ctSetCookie('ct_has_scrolled', 'true');\n apbctLocalStorage.set('ct_has_scrolled', true);\n }\n if (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_scrolled') === undefined\n ) {\n ctSetCookie('ct_has_scrolled', 'true');\n }\n}\n\n/**\n * ctSetMouseMoved\n */\nfunction ctSetMouseMoved() {\n if ( ! apbctLocalStorage.isSet('ct_mouse_moved') || ! apbctLocalStorage.get('ct_mouse_moved') ) {\n ctSetCookie('ct_mouse_moved', 'true');\n apbctLocalStorage.set('ct_mouse_moved', true);\n }\n if (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_mouse_moved') === undefined\n ) {\n ctSetCookie('ct_mouse_moved', 'true');\n }\n}\n\n/**\n * Restart listen fields to set ct_has_input_focused or ct_has_key_up\n */\nfunction restartFieldsListening() {\n if (!apbctLocalStorage.isSet('ct_has_input_focused') && !apbctLocalStorage.isSet('ct_has_key_up')) {\n ctStartFieldsListening();\n }\n}\n\n/**\n * init listeners for keyup and focus events\n */\nfunction ctStartFieldsListening() {\n if (\n (apbctLocalStorage.isSet('ct_has_key_up') || apbctLocalStorage.get('ct_has_key_up')) &&\n (apbctLocalStorage.isSet('ct_has_input_focused') || apbctLocalStorage.get('ct_has_input_focused')) &&\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_input_focused') !== undefined &&\n ctGetCookie('ct_has_key_up') !== undefined\n )\n ) {\n // already set\n return;\n }\n\n let forms = ctGetPageForms();\n ctPublic.handled_fields = [];\n\n if (forms.length > 0) {\n for (let i = 0; i < forms.length; i++) {\n // handle only inputs and textareas\n const handledFormFields = forms[i].querySelectorAll('input,textarea');\n for (let i = 0; i < handledFormFields.length; i++) {\n if (handledFormFields[i].type !== 'hidden') {\n // collect handled fields to remove handler in the future\n ctPublic.handled_fields.push(handledFormFields[i]);\n // do attach handlers\n apbct_attach_event_handler(handledFormFields[i], 'focus', ctFunctionHasInputFocused);\n apbct_attach_event_handler(handledFormFields[i], 'keyup', ctFunctionHasKeyUp);\n }\n }\n }\n }\n}\n\n/**\n * stop listening keyup and focus\n * @param {string} eventName\n * @param {string} functionName\n */\nfunction ctStopFieldsListening(eventName, functionName) {\n if (typeof ctPublic.handled_fields !== 'undefined' && ctPublic.handled_fields.length > 0) {\n for (let i = 0; i < ctPublic.handled_fields.length; i++) {\n apbct_remove_event_handler(ctPublic.handled_fields[i], eventName, functionName);\n }\n }\n}\n\nlet ctFunctionHasInputFocused = function output(event) {\n ctSetHasInputFocused();\n ctStopFieldsListening('focus', ctFunctionHasInputFocused);\n};\n\nlet ctFunctionHasKeyUp = function output(event) {\n ctSetHasKeyUp();\n ctStopFieldsListening('keyup', ctFunctionHasKeyUp);\n};\n\n/**\n * set ct_has_input_focused ct_has_key_up cookies on session period\n */\nfunction ctSetHasInputFocused() {\n if ( ! apbctLocalStorage.isSet('ct_has_input_focused') || ! apbctLocalStorage.get('ct_has_input_focused') ) {\n apbctLocalStorage.set('ct_has_input_focused', true);\n }\n if (\n (\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_input_focused') === undefined\n ) ||\n ctPublic.data__cookies_type === 'alternative'\n ) ||\n (\n ctPublic.data__cookies_type === 'none' &&\n (\n typeof ctPublic.force_alt_cookies !== 'undefined' ||\n (ctPublic.force_alt_cookies !== undefined && ctPublic.force_alt_cookies)\n )\n )\n ) {\n ctSetCookie('ct_has_input_focused', 'true');\n }\n}\n\n/**\n * ctSetHasKeyUp\n */\nfunction ctSetHasKeyUp() {\n if ( ! apbctLocalStorage.isSet('ct_has_key_up') || ! apbctLocalStorage.get('ct_has_key_up') ) {\n apbctLocalStorage.set('ct_has_key_up', true);\n }\n if (\n (\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_key_up') === undefined\n ) ||\n ctPublic.data__cookies_type === 'alternative'\n ) ||\n (\n ctPublic.data__cookies_type === 'none' &&\n (\n typeof ctPublic.force_alt_cookies !== 'undefined' ||\n (ctPublic.force_alt_cookies !== undefined && ctPublic.force_alt_cookies)\n )\n )\n ) {\n ctSetCookie('ct_has_key_up', 'true');\n }\n}\n\nif (ctPublic.data__key_is_ok) {\n apbct_attach_event_handler(document, 'mousemove', ctFunctionMouseMove);\n apbct_attach_event_handler(document, 'mousedown', ctFunctionFirstKey);\n apbct_attach_event_handler(document, 'keydown', ctFunctionFirstKey);\n apbct_attach_event_handler(document, 'scroll', ctSetHasScrolled);\n}\n\n/**\n * Prepare block to intercept AJAX response\n */\nfunction apbctPrepareBlockForAjaxForms() {\n // eslint-disable-next-line require-jsdoc\n function ctPrepareBlockMessage(xhr) {\n if (xhr.responseText &&\n xhr.responseText.indexOf('\"apbct') !== -1 &&\n xhr.responseText.indexOf('DOCTYPE') === -1\n ) {\n try {\n ctParseBlockMessage(JSON.parse(xhr.responseText));\n } catch (e) {\n console.log(e.toString());\n }\n }\n }\n\n if (typeof jQuery !== 'undefined') {\n // Capturing responses and output block message for unknown AJAX forms\n if (typeof jQuery(document).ajaxComplete() !== 'function') {\n jQuery(document).on('ajaxComplete', function(event, xhr, settings) {\n ctPrepareBlockMessage(xhr);\n });\n } else {\n jQuery(document).ajaxComplete( function(event, xhr, settings) {\n ctPrepareBlockMessage(xhr);\n });\n }\n } else {\n // if Jquery is not avaliable try to use xhr\n if (typeof XMLHttpRequest !== 'undefined') {\n // Capturing responses and output block message for unknown AJAX forms\n document.addEventListener('readystatechange', function(event) {\n if (event.target.readyState === 4) {\n ctPrepareBlockMessage(event.target);\n }\n });\n }\n }\n}\n\n/**\n * For forced alt cookies.\n * If token is not added to the LS on apbc_ready, check every second if so and send token to the alt sessions.\n */\nfunction startForcedAltEventTokenChecker() {\n tokenCheckerIntervalId = setInterval( function() {\n if (apbctLocalStorage.get('event_token_forced_set') === '1') {\n clearInterval(tokenCheckerIntervalId);\n return;\n }\n let eventToken = apbctLocalStorage.get('bot_detector_event_token');\n if (eventToken) {\n ctSetAlternativeCookie([['ct_bot_detector_event_token', eventToken]], {forceAltCookies: true});\n apbctLocalStorage.set('event_token_forced_set', '1');\n clearInterval(tokenCheckerIntervalId);\n } else {\n }\n }, 1000);\n}\n\n\n/**\n * Ready function\n */\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_ready() {\n document.addEventListener('gform_page_loaded', function() {\n if (\n typeof ctPublic.force_alt_cookies === 'undefined' ||\n (ctPublic.force_alt_cookies !== 'undefined' && !ctPublic.force_alt_cookies)\n ) {\n ctNoCookieAttachHiddenFieldsToForms();\n if (typeof setEventTokenField === 'function' && typeof botDetectorLocalStorage === 'function') {\n setEventTokenField(botDetectorLocalStorage.get('bot_detector_event_token'));\n }\n }\n });\n if ( ! ctPublic.wc_ajax_add_to_cart ) {\n apbctCheckAddToCartByGet();\n }\n\n apbctPrepareBlockForAjaxForms();\n\n // set session ID\n if (!apbctSessionStorage.isSet('apbct_session_id')) {\n const sessionID = apbctGenerateUniqueID();\n apbctSessionStorage.set('apbct_session_id', sessionID, false);\n apbctLocalStorage.set('apbct_page_hits', 1);\n if (document.referrer) {\n let urlReferer = new URL(document.referrer);\n if (urlReferer.host !== location.host) {\n apbctSessionStorage.set('apbct_site_referer', document.referrer, false);\n }\n }\n } else {\n apbctLocalStorage.set('apbct_page_hits', Number(apbctLocalStorage.get('apbct_page_hits')) + 1);\n }\n\n apbctWriteReferrersToSessionStorage();\n\n const cookiesType = apbctLocalStorage.get('ct_cookies_type');\n if ( ! cookiesType || cookiesType !== ctPublic.data__cookies_type ) {\n apbctLocalStorage.set('ct_cookies_type', ctPublic.data__cookies_type);\n apbctLocalStorage.delete('ct_mouse_moved');\n apbctLocalStorage.delete('ct_has_scrolled');\n }\n\n if (ctPublic.data__cookies_type !== 'alternative') {\n ctStartFieldsListening();\n // 2nd try to add listeners for delayed appears forms\n setTimeout(ctStartFieldsListening, 1000);\n }\n\n window.addEventListener('animationstart', apbctOnAnimationStart, true);\n window.addEventListener('input', apbctOnInput, true);\n document.ctTypoData = new CTTypoData();\n document.ctTypoData.gatheringFields();\n document.ctTypoData.setListeners();\n\n // Collect scrolling info\n const initCookies = [\n ['ct_ps_timestamp', Math.floor(new Date().getTime() / 1000)],\n ['ct_fkp_timestamp', '0'],\n ['ct_pointer_data', '0'],\n // eslint-disable-next-line camelcase\n ['ct_timezone', ctDate.getTimezoneOffset()/60*(-1)],\n ['ct_screen_info', apbctGetScreenInfo()],\n ['apbct_headless', navigator.webdriver],\n ];\n\n apbctLocalStorage.set('ct_ps_timestamp', Math.floor(new Date().getTime() / 1000));\n apbctLocalStorage.set('ct_fkp_timestamp', '0');\n apbctLocalStorage.set('ct_pointer_data', '0');\n // eslint-disable-next-line camelcase\n apbctLocalStorage.set('ct_timezone', ctDate.getTimezoneOffset()/60*(-1) );\n apbctLocalStorage.set('ct_screen_info', apbctGetScreenInfo());\n apbctLocalStorage.set('apbct_headless', navigator.webdriver);\n\n if ( ctPublic.data__cookies_type !== 'native' ) {\n initCookies.push(['apbct_visible_fields', '0']);\n } else {\n // Delete all visible fields cookies on load the page\n let cookiesArray = document.cookie.split(';');\n if ( cookiesArray.length !== 0 ) {\n for ( let i = 0; i < cookiesArray.length; i++ ) {\n let currentCookie = cookiesArray[i].trim();\n let cookieName = currentCookie.split('=')[0];\n if ( cookieName.indexOf('apbct_visible_fields_') === 0 ) {\n ctDeleteCookie(cookieName);\n }\n }\n }\n }\n\n if ( +ctPublic.pixel__setting ) {\n if ( ctIsDrawPixel() ) {\n ctGetPixelUrl();\n } else {\n initCookies.push(['apbct_pixel_url', ctPublic.pixel__url]);\n }\n }\n\n if ( +ctPublic.data__email_check_before_post) {\n initCookies.push(['ct_checked_emails', '0']);\n apbct('input[type = \\'email\\'], #email').on('blur', checkEmail);\n }\n\n if ( +ctPublic.data__email_check_exist_post) {\n initCookies.push(['ct_checked_emails_exist', '0']);\n apbct('comment-form input[name = \\'email\\'], input#email').on('blur', checkEmailExist);\n }\n\n if (apbctLocalStorage.isSet('ct_checkjs')) {\n initCookies.push(['ct_checkjs', apbctLocalStorage.get('ct_checkjs')]);\n } else {\n initCookies.push(['ct_checkjs', 0]);\n }\n\n // detect integrated forms that need to be handled via alternative cookies\n ctDetectForcedAltCookiesForms();\n\n // send bot detector event token to alt cookies on problem forms\n let tokenForForceAlt = apbctLocalStorage.get('bot_detector_event_token');\n if (typeof ctPublic.force_alt_cookies !== 'undefined' &&\n ctPublic.force_alt_cookies &&\n ctPublic.settings__data__bot_detector_enabled\n ) {\n apbctLocalStorage.set('event_token_forced_set', '0');\n if (tokenForForceAlt) {\n initCookies.push(['ct_bot_detector_event_token', tokenForForceAlt]);\n apbctLocalStorage.set('event_token_forced_set', '1');\n } else {\n startForcedAltEventTokenChecker();\n }\n }\n\n ctSetCookie(initCookies);\n\n setTimeout(function() {\n if (\n typeof ctPublic.force_alt_cookies == 'undefined' ||\n (ctPublic.force_alt_cookies !== 'undefined' && !ctPublic.force_alt_cookies)\n ) {\n ctNoCookieAttachHiddenFieldsToForms();\n }\n\n if (\n typeof ctPublic.data__cookies_type !== 'undefined' &&\n ctPublic.data__cookies_type === 'none'\n ) {\n ctAjaxSetupAddCleanTalkDataBeforeSendAjax();\n ctAddWCMiddlewares();\n }\n\n for (let i = 0; i < document.forms.length; i++) {\n let form = document.forms[i];\n\n // Exclusion for forms\n if (ctCheckHiddenFieldsExclusions(document.forms[i], 'visible_fields')) {\n continue;\n }\n\n // The Form has hidden field like apbct_visible_fields\n if (\n document.forms[i].elements.apbct_visible_fields !== undefined &&\n document.forms[i].elements.apbct_visible_fields.length > 0\n ) {\n continue;\n }\n\n if (form.querySelector('input[name=\"apbct_visible_fields\"]')) {\n let visibleFields = form.querySelector('input[name=\"apbct_visible_fields\"]');\n form.removeChild(visibleFields);\n }\n\n let hiddenInput = document.createElement( 'input' );\n hiddenInput.setAttribute( 'type', 'hidden' );\n hiddenInput.setAttribute( 'id', 'apbct_visible_fields_' + i );\n hiddenInput.setAttribute( 'name', 'apbct_visible_fields');\n let visibleFieldsToInput = {};\n visibleFieldsToInput[0] = apbct_collect_visible_fields(form);\n hiddenInput.value = btoa(JSON.stringify(visibleFieldsToInput));\n form.append( hiddenInput );\n\n form.onsubmit_prev = form.onsubmit;\n\n form.ctFormIndex = i;\n form.onsubmit = function(event) {\n if ( ctPublic.data__cookies_type !== 'native' && typeof event.target.ctFormIndex !== 'undefined' ) {\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(this);\n apbct_visible_fields_set_cookie( visibleFields, event.target.ctFormIndex );\n }\n\n if (ctPublic.data__cookies_type === 'none' && isFormThatNeedCatchXhr(event.target)) {\n window.XMLHttpRequest.prototype.send = function(data) {\n let noCookieData = getNoCookieData();\n noCookieData = 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData + '&';\n defaultSend.call(this, noCookieData + data);\n setTimeout(() => {\n window.XMLHttpRequest.prototype.send = defaultSend;\n }, 0);\n };\n }\n\n // Call previous submit action\n if (event.target.onsubmit_prev instanceof Function && !ctOnsubmitPrevCallExclude(event.target)) {\n setTimeout(function() {\n event.target.onsubmit_prev.call(event.target, event);\n }, 500);\n }\n };\n }\n }, 1000);\n\n // Listen clicks on encoded emails\n let encodedEmailNodes = document.querySelectorAll('[data-original-string]');\n ctPublic.encodedEmailNodes = encodedEmailNodes;\n if (encodedEmailNodes.length) {\n for (let i = 0; i < encodedEmailNodes.length; ++i) {\n encodedEmailNodes[i].addEventListener('click', ctFillDecodedEmailHandler);\n }\n }\n\n // WordPress Search form processing\n for (const _form of document.forms) {\n if (\n typeof ctPublic !== 'undefined' &&\n + ctPublic.settings__forms__search_test === 1 &&\n (\n _form.getAttribute('id') === 'searchform' ||\n (_form.getAttribute('class') !== null && _form.getAttribute('class').indexOf('search-form') !== -1) ||\n (_form.getAttribute('role') !== null && _form.getAttribute('role').indexOf('search') !== -1)\n )\n ) {\n // fibosearch integration\n if (_form.querySelector('input.dgwt-wcas-search-input')) {\n continue;\n }\n\n // this handles search forms onsubmit process\n _form.apbctSearchPrevOnsubmit = _form.onsubmit;\n _form.onsubmit = (e) => ctSearchFormOnSubmitHandler(e, _form);\n }\n }\n\n // Check any XMLHttpRequest connections\n apbctCatchXmlHttpRequest();\n\n // Init form skin\n if (ctPublic.settings__comments__form_decoration) {\n new ApbctFormDecorator();\n }\n\n // Set important paramaters via ajax if problematic cache solutions found\n // todo These AJAX calls removed untill we find a better solution, reason is a lot of requests to the server.\n // apbctAjaxSetImportantParametersOnCacheExist(ctPublic.advancedCacheExists || ctPublic.varnishCacheExists);\n\n // Checking that the bot detector has loaded and received the event token for Anti-Crawler\n if (ctPublic.settings__sfw__anti_crawler) {\n checkBotDetectorExist();\n }\n}\n\n/**\n * Checking that the bot detector has loaded and received the event token\n */\nfunction checkBotDetectorExist() {\n if (ctPublic.settings__data__bot_detector_enabled) {\n const botDetectorIntervalSearch = setInterval(() => {\n let botDetectorEventToken = localStorage.bot_detector_event_token ? true : false;\n\n if (botDetectorEventToken) {\n ctSetCookie('apbct_bot_detector_exist', '1', '3600');\n clearInterval(botDetectorIntervalSearch);\n }\n }, 500);\n }\n}\n\n/**\n * Insert no_cookies_data to rest request\n */\nfunction ctAddWCMiddlewares() {\n const ctPinDataToRequest = (options, next) => {\n if (typeof options !== 'object' || options === null ||\n !options.hasOwnProperty('data') || !options.hasOwnProperty('path')\n ) {\n return next(options);\n }\n\n // add to cart\n if (options.data.hasOwnProperty('requests') &&\n options.data.requests.length > 0 &&\n options.data.requests[0].hasOwnProperty('path') &&\n options.data.requests[0].path === '/wc/store/v1/cart/add-item'\n ) {\n options.data.requests[0].data.ct_no_cookie_hidden_field = getNoCookieData();\n }\n\n // checkout\n if (options.path === '/wc/store/v1/checkout') {\n options.data.ct_no_cookie_hidden_field = getNoCookieData();\n }\n\n return next(options);\n };\n\n if (window.hasOwnProperty('wp') &&\n window.wp.hasOwnProperty('apiFetch') &&\n typeof window.wp.apiFetch.use === 'function'\n ) {\n window.wp.apiFetch.use(ctPinDataToRequest);\n }\n}\n\n/**\n * Insert event_token and no_cookies_data to some ajax request\n */\nfunction apbctCatchXmlHttpRequest() {\n // 1) Check the page if it needed to catch XHR\n if ( document.querySelector('div.wfu_container') !== null ) {\n const originalSend = XMLHttpRequest.prototype.send;\n XMLHttpRequest.prototype.send = function(body) {\n // 2) Check the caught request fi it needed to modify\n if (\n body &&\n typeof body === 'string' &&\n (\n body.indexOf('action=wfu_ajax_action_ask_server') !== -1\n )\n ) {\n let addidionalCleantalkData = '';\n let eventToken = localStorage.getItem('bot_detector_event_token');\n try {\n eventToken = JSON.parse(eventToken);\n } catch {\n eventToken = false;\n }\n if (\n eventToken !== null &&\n eventToken !== false &&\n eventToken.hasOwnProperty('value') &&\n eventToken.value !== ''\n ) {\n eventToken = eventToken.value;\n addidionalCleantalkData += '&' + 'data%5Bct_bot_detector_event_token%5D=' + eventToken;\n }\n\n let noCookieData = getNoCookieData();\n addidionalCleantalkData += '&' + 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData;\n\n body += addidionalCleantalkData;\n\n return originalSend.apply(this, [body]);\n }\n return originalSend.apply(this, [body]);\n };\n }\n}\n\n/**\n * Run AJAX to set important_parameters on the site backend if problematic cache solutions are defined.\n * @param {boolean} cacheExist\n */\nfunction apbctAjaxSetImportantParametersOnCacheExist(cacheExist) { // eslint-disable-line no-unused-vars\n // Set important parameters via ajax\n if ( cacheExist ) {\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST('apbct_set_important_parameters', {});\n } else if ( ctPublicFunctions.data__ajax_type === 'admin_ajax' ) {\n apbct_public_sendAJAX({action: 'apbct_set_important_parameters'}, {});\n }\n }\n}\n\n/**\n * Prepare jQuery.ajaxSetup to add nocookie data to the jQuery ajax request.\n * Notes:\n * - Do it just once, the ajaxSetup.beforeSend will be overwritten for any calls.\n * - Signs of forms need to be caught will be checked during ajaxSetup.settings.data process on send.\n * - Any sign of the form HTML of the caller is insignificant in this process.\n * @return {void}\n */\nfunction ctAjaxSetupAddCleanTalkDataBeforeSendAjax() {\n // jquery ajax call intercept\n // this is the only place where we can found hard dependency on jQuery, if the form use it - the script\n // will work independing if jQuery is loaded by CleanTalk or not\n let eventToken = false;\n if ( typeof jQuery !== 'undefined' && typeof jQuery.ajaxSetup === 'function') {\n jQuery.ajaxSetup({\n beforeSend: function(xhr, settings) {\n let sourceSign = false;\n // settings data is string (important!)\n if ( typeof settings.data === 'string' ) {\n if (settings.data.indexOf('twt_cc_signup') !== -1) {\n sourceSign = 'twt_cc_signup';\n }\n\n if (settings.data.indexOf('action=mailpoet') !== -1) {\n sourceSign = 'action=mailpoet';\n }\n\n if (\n settings.data.indexOf('action=user_registration') !== -1 &&\n settings.data.indexOf('ur_frontend_form_nonce') !== -1\n ) {\n sourceSign = 'action=user_registration';\n }\n\n if (settings.data.indexOf('action=happyforms_message') !== -1) {\n sourceSign = 'action=happyforms_message';\n }\n\n if (settings.data.indexOf('action=new_activity_comment') !== -1) {\n sourceSign = 'action=new_activity_comment';\n }\n }\n if ( typeof settings.url === 'string' ) {\n if (settings.url.indexOf('wc-ajax=add_to_cart') !== -1) {\n sourceSign = 'wc-ajax=add_to_cart';\n if (localStorage.getItem('bot_detector_event_token') !== null) {\n eventToken = localStorage.getItem('bot_detector_event_token');\n try {\n eventToken = JSON.parse(eventToken);\n } catch {\n eventToken = false;\n }\n if (eventToken !== false && eventToken.hasOwnProperty('value') && eventToken.value !== '') {\n eventToken = eventToken.value;\n }\n }\n }\n }\n\n if (sourceSign) {\n let noCookieData = getNoCookieData();\n if (typeof eventToken === 'string') {\n eventToken = 'data%5Bct_bot_detector_event_token%5D=' + eventToken + '&';\n } else {\n eventToken = '';\n }\n noCookieData = 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData + '&';\n\n settings.data = noCookieData + eventToken + settings.data;\n }\n },\n });\n }\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctOnsubmitPrevCallExclude(form) {\n if (form.classList.contains('hb-booking-search-form')) {\n return true;\n }\n\n return false;\n}\n\nif (ctPublic.data__key_is_ok) {\n if (document.readyState !== 'loading') {\n apbct_ready();\n } else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', apbct_ready);\n }\n\n apbctLocalStorage.set('ct_checkjs', ctPublic.ct_checkjs_key, true );\n}\n\n/**\n * @param {SubmitEvent} e\n * @param {object} targetForm\n */\nfunction ctSearchFormOnSubmitHandler(e, targetForm) {\n try {\n // get honeypot field and it's value\n const honeyPotField = targetForm.querySelector('[id*=\"apbct__email_id__\"]');\n let hpValue = null;\n let hpEventId = null;\n if (\n honeyPotField !== null &&\n honeyPotField.value !== null &&\n honeyPotField.getAttribute('apbct_event_id') !== null\n ) {\n hpValue = honeyPotField.value;\n hpEventId = honeyPotField.getAttribute('apbct_event_id');\n }\n\n // get cookie data from storages\n let cleantalkStorageDataArray = getCleanTalkStorageDataArray();\n\n // get event token from storage\n let eventTokenLocalStorage = apbctLocalStorage.get('bot_detector_event_token');\n\n // if noCookie data or honeypot data is set, proceed handling\n if ( cleantalkStorageDataArray !== null || honeyPotField !== null || eventTokenLocalStorage !== null ) {\n e.preventDefault();\n const callBack = () => {\n if (honeyPotField !== null) {\n honeyPotField.parentNode.removeChild(honeyPotField);\n }\n if (typeof targetForm.apbctSearchPrevOnsubmit === 'function') {\n targetForm.apbctSearchPrevOnsubmit();\n } else {\n HTMLFormElement.prototype.submit.call(targetForm);\n }\n };\n\n let cookiesArray = cleantalkStorageDataArray;\n\n // if honeypot data provided add the fields to the parsed data\n if ( hpValue !== null && hpEventId !== null ) {\n cookiesArray.apbct_search_form__honeypot_value = hpValue;\n cookiesArray.apbct_search_form__honeypot_id = hpEventId;\n }\n\n // set event token\n cookiesArray.ct_bot_detector_event_token = eventTokenLocalStorage;\n\n // if the pixel needs to be decoded\n if (\n typeof cookiesArray.apbct_pixel_url === 'string' &&\n cookiesArray.apbct_pixel_url.indexOf('%3A') !== -1\n ) {\n cookiesArray.apbct_pixel_url = decodeURIComponent(cookiesArray.apbct_pixel_url);\n }\n\n // data to JSON\n const parsedCookies = JSON.stringify(cookiesArray);\n\n // if any data provided, proceed data to xhr\n if ( typeof parsedCookies !== 'undefined' && parsedCookies.length !== 0 ) {\n ctSetAlternativeCookie(\n parsedCookies,\n {callback: callBack, onErrorCallback: callBack, forceAltCookies: true},\n );\n } else {\n callBack();\n }\n }\n } catch (error) {\n console.warn('APBCT search form onsubmit handler error. ' + error);\n }\n}\n\n/**\n * @param {mixed} event\n */\nfunction ctFillDecodedEmailHandler(event) {\n this.removeEventListener('click', ctFillDecodedEmailHandler);\n // remember clickSource\n let clickSource = this;\n // globally remember if emails is mixed with mailto\n ctPublic.encodedEmailNodesIsMixed = false;\n // get fade\n document.body.classList.add('apbct-popup-fade');\n // popup show\n let encoderPopup = document.getElementById('apbct_popup');\n if (!encoderPopup) {\n // construct popup\n let waitingPopup = document.createElement('div');\n waitingPopup.setAttribute('class', 'apbct-popup apbct-email-encoder-popup');\n waitingPopup.setAttribute('id', 'apbct_popup');\n\n // construct text header\n let popupHeaderWrapper = document.createElement('span');\n popupHeaderWrapper.classList = 'apbct-email-encoder-elements_center';\n let popupHeader = document.createElement('p');\n popupHeader.innerText = ctPublic.wl_brandname;\n popupHeader.setAttribute('class', 'apbct-email-encoder--popup-header');\n popupHeaderWrapper.append(popupHeader);\n\n // construct text wrapper\n let popupTextWrapper = document.createElement('div');\n popupTextWrapper.setAttribute('id', 'apbct_popup_text');\n popupTextWrapper.setAttribute('class', 'apbct-email-encoder-elements_center');\n popupTextWrapper.style.color = 'black';\n\n // construct text first node\n // todo make translatable\n let popupTextWaiting = document.createElement('p');\n popupTextWaiting.id = 'apbct_email_ecoder__popup_text_node_first';\n popupTextWaiting.innerText = 'The magic is on the way, please wait for a few seconds!';\n popupTextWaiting.setAttribute('class', 'apbct-email-encoder-elements_center');\n\n // construct text second node\n // todo make translatable\n let popupTextDecoding = document.createElement('p');\n popupTextDecoding.id = 'apbct_email_ecoder__popup_text_node_second';\n popupTextDecoding.innerText = 'Decoding process to the original data.';\n\n // appending\n popupTextWrapper.append(popupTextWaiting);\n popupTextWrapper.append(popupTextDecoding);\n waitingPopup.append(popupHeaderWrapper);\n waitingPopup.append(popupTextWrapper);\n waitingPopup.append(apbctSetEmailDecoderPopupAnimation());\n document.body.append(waitingPopup);\n } else {\n encoderPopup.setAttribute('style', 'display: inherit');\n document.getElementById('apbct_popup_text').innerHTML =\n 'Please wait while ' + ctPublic.wl_brandname + ' is decoding the email addresses.';\n }\n\n apbctAjaxEmailDecodeBulk(event, ctPublic.encodedEmailNodes, clickSource);\n}\n/**\n * @return {HTMLElement} event\n */\nfunction apbctSetEmailDecoderPopupAnimation() {\n const animationElements = ['apbct_dog_one', 'apbct_dog_two', 'apbct_dog_three'];\n const animationWrapper = document.createElement('div');\n animationWrapper.classList = 'apbct-ee-animation-wrapper';\n for (let i = 0; i < animationElements.length; i++) {\n const apbctEEAnimationDogOne = document.createElement('span');\n apbctEEAnimationDogOne.classList = 'apbct_dog ' + animationElements[i];\n apbctEEAnimationDogOne.innerText = '@';\n animationWrapper.append(apbctEEAnimationDogOne);\n }\n return animationWrapper;\n}\n\n/**\n * @param {mixed} event\n * @param {mixed} encodedEmailNodes\n * @param {mixed} clickSource\n */\nfunction apbctAjaxEmailDecodeBulk(event, encodedEmailNodes, clickSource) {\n // collect data\n const javascriptClientData = getJavascriptClientData();\n let data = {\n event_javascript_data: javascriptClientData,\n post_url: document.location.href,\n referrer: document.referrer,\n encodedEmails: '',\n };\n let encodedEmailsCollection = {};\n for (let i = 0; i < encodedEmailNodes.length; i++) {\n // disable click for mailto\n if (typeof encodedEmailNodes[i].href !== 'undefined' && encodedEmailNodes[i].href.indexOf('mailto:') === 0) {\n event.preventDefault();\n ctPublic.encodedEmailNodesIsMixed = true;\n }\n\n // Adding a tooltip\n let apbctTooltip = document.createElement('div');\n apbctTooltip.setAttribute('class', 'apbct-tooltip');\n apbct(encodedEmailNodes[i]).append(apbctTooltip);\n\n // collect encoded email strings\n encodedEmailsCollection[i] = encodedEmailNodes[i].dataset.originalString;\n }\n\n // JSONify encoded email strings\n data.encodedEmails = JSON.stringify(encodedEmailsCollection);\n\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'apbct_decode_email',\n {\n data: data,\n method: 'POST',\n callback: function(result) {\n // set alternative cookie to skip next pages encoding\n ctSetCookie('apbct_email_encoder_passed', ctPublic.emailEncoderPassKey);\n apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource);\n },\n onErrorCallback: function(res) {\n resetEncodedNodes();\n ctShowDecodeComment(res);\n },\n },\n );\n\n // Using AJAX request and handler\n } else {\n data.action = 'apbct_decode_email';\n apbct_public_sendAJAX(\n data,\n {\n notJson: false,\n callback: function(result) {\n // set alternative cookie to skip next pages encoding\n ctSetCookie('apbct_email_encoder_passed', ctPublic.emailEncoderPassKey);\n apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource);\n },\n onErrorCallback: function(res) {\n resetEncodedNodes();\n ctShowDecodeComment(res);\n },\n },\n );\n }\n}\n\n/**\n * @param {mixed} result\n * @param {mixed} encodedEmailNodes\n * @param {mixed} clickSource\n */\nfunction apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource) {\n if (result.success && result.data[0].is_allowed === true) {\n // start process of visual decoding\n setTimeout(function() {\n // popup remove\n let popup = document.getElementById('apbct_popup');\n if (popup !== null) {\n let currentResultData;\n result.data.forEach((row) => {\n if (row.encoded_email === clickSource.dataset.originalString) {\n currentResultData = row;\n }\n });\n\n let email = currentResultData.decoded_email.split(/[&?]/)[0];\n // handle first node\n let firstNode = popup.querySelector('#apbct_email_ecoder__popup_text_node_first');\n // get email selectable by click\n let selectableEmail = document.createElement('b');\n selectableEmail.setAttribute('class', 'apbct-email-encoder-select-whole-email');\n selectableEmail.innerText = email;\n selectableEmail.title = 'Click to select the whole data';\n // add email to the first node\n if (firstNode) {\n firstNode.innerHTML = 'The original one is ' + selectableEmail.outerHTML;\n firstNode.setAttribute('style', 'flex-direction: row;');\n }\n // remove animation\n let wrapper = popup.querySelector('.apbct-ee-animation-wrapper');\n if (wrapper) {\n wrapper.remove();\n }\n // remove second node\n let secondNode = popup.querySelector('#apbct_email_ecoder__popup_text_node_second');\n if (secondNode) {\n secondNode.remove();\n }\n // add button\n let buttonWrapper = document.createElement('span');\n buttonWrapper.classList = 'apbct-email-encoder-elements_center top-margin-long';\n if (!document.querySelector('.apbct-email-encoder-got-it-button')) {\n let button = document.createElement('button');\n button.innerText = 'Got it';\n button.classList = 'apbct-email-encoder-got-it-button';\n button.addEventListener('click', function() {\n document.body.classList.remove('apbct-popup-fade');\n popup.setAttribute('style', 'display:none');\n fillDecodedEmails(encodedEmailNodes, result);\n // click on mailto if so\n if (ctPublic.encodedEmailNodesIsMixed) {\n clickSource.click();\n }\n });\n buttonWrapper.append(button);\n popup.append(buttonWrapper);\n }\n }\n }, 3000);\n } else {\n if (result.success) {\n resetEncodedNodes();\n ctShowDecodeComment('Blocked: ' + result.data[0].comment);\n } else {\n resetEncodedNodes();\n ctShowDecodeComment('Cannot connect with CleanTalk server: ' + result.data[0].comment);\n }\n }\n}\n/**\n * Run filling for every node with decoding result.\n * @param {mixed} encodedEmailNodes\n * @param {mixed} decodingResult\n */\nfunction fillDecodedEmails(encodedEmailNodes, decodingResult) {\n for (let i = 0; i < encodedEmailNodes.length; i++) {\n // chek what is what\n let currentResultData;\n decodingResult.data.forEach((row) => {\n if (row.encoded_email === encodedEmailNodes[i].dataset.originalString) {\n currentResultData = row;\n }\n });\n // quit case on cloud block\n if (currentResultData.is_allowed === false) {\n return;\n }\n // handler for mailto\n if (\n typeof encodedEmailNodes[i].href !== 'undefined' &&\n encodedEmailNodes[i].href.indexOf('mailto:') === 0\n ) {\n let encodedEmail = encodedEmailNodes[i].href.replace('mailto:', '');\n let baseElementContent = encodedEmailNodes[i].innerHTML;\n encodedEmailNodes[i].innerHTML = baseElementContent.replace(encodedEmail, currentResultData.decoded_email);\n encodedEmailNodes[i].href = 'mailto:' + currentResultData.decoded_email;\n\n encodedEmailNodes[i].querySelectorAll('span.apbct-email-encoder').forEach((el) => {\n let encodedEmailTextInsideMailto = '';\n decodingResult.data.forEach((row) => {\n if (row.encoded_email === el.dataset.originalString) {\n encodedEmailTextInsideMailto = row.decoded_email;\n }\n });\n el.innerHTML = encodedEmailTextInsideMailto;\n });\n } else {\n encodedEmailNodes[i].classList.add('no-blur');\n // fill the nodes\n setTimeout(() => {\n ctProcessDecodedDataResult(currentResultData, encodedEmailNodes[i]);\n }, 2000);\n }\n // remove listeners\n encodedEmailNodes[i].removeEventListener('click', ctFillDecodedEmailHandler);\n }\n}\n/**\n * resetEncodedNodes\n */\nfunction resetEncodedNodes() {\n if (typeof ctPublic.encodedEmailNodes !== 'undefined') {\n ctPublic.encodedEmailNodes.forEach(function(element) {\n element.addEventListener('click', ctFillDecodedEmailHandler);\n });\n }\n}\n\n/**\n * @param {mixed} commonCookies\n * @return {string}\n */\nfunction getJavascriptClientData(commonCookies = []) {\n let resultDataJson = {};\n\n resultDataJson.ct_checked_emails = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checked_emails');\n resultDataJson.ct_checked_emails_exist = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checked_emails_exist');\n resultDataJson.ct_checkjs = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checkjs');\n resultDataJson.ct_fkp_timestamp = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_fkp_timestamp');\n resultDataJson.ct_pointer_data = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_pointer_data');\n resultDataJson.ct_ps_timestamp = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_ps_timestamp');\n resultDataJson.ct_screen_info = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_screen_info');\n resultDataJson.ct_timezone = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_timezone');\n\n // collecting data from localstorage\n const ctMouseMovedLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_mouse_moved');\n const ctHasScrolledLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_has_scrolled');\n const ctCookiesTypeLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_cookies_type');\n const apbctPageHits = apbctLocalStorage.get('apbct_page_hits');\n const apbctPrevReferer = apbctSessionStorage.get('apbct_prev_referer');\n const apbctSiteReferer = apbctSessionStorage.get('apbct_site_referer');\n const ctJsErrorsLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_js_errors');\n const ctPixelUrl = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'apbct_pixel_url');\n const apbctHeadless = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'apbct_headless');\n const ctBotDetectorFrontendDataLog = apbctLocalStorage.get(\n ctPublicFunctions.cookiePrefix + 'ct_bot_detector_frontend_data_log',\n );\n\n // collecting data from cookies\n const ctMouseMovedCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_mouse_moved');\n const ctHasScrolledCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_has_scrolled');\n const ctCookiesTypeCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_cookies_type');\n const ctCookiesPixelUrl = ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_pixel_url');\n const apbctHeadlessNative = !!ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_headless');\n\n\n resultDataJson.ct_mouse_moved = ctMouseMovedLocalStorage !== undefined ?\n ctMouseMovedLocalStorage : ctMouseMovedCookie;\n resultDataJson.ct_has_scrolled = ctHasScrolledLocalStorage !== undefined ?\n ctHasScrolledLocalStorage : ctHasScrolledCookie;\n resultDataJson.ct_cookies_type = ctCookiesTypeLocalStorage !== undefined ?\n ctCookiesTypeLocalStorage : ctCookiesTypeCookie;\n resultDataJson.apbct_pixel_url = ctPixelUrl !== undefined ?\n ctPixelUrl : ctCookiesPixelUrl;\n resultDataJson.apbct_headless = apbctHeadless !== undefined ?\n apbctHeadless : apbctHeadlessNative;\n resultDataJson.ct_bot_detector_frontend_data_log = ctBotDetectorFrontendDataLog !== undefined ?\n ctBotDetectorFrontendDataLog : '';\n if (resultDataJson.apbct_pixel_url && typeof(resultDataJson.apbct_pixel_url) == 'string') {\n if (resultDataJson.apbct_pixel_url.indexOf('%3A%2F')) {\n resultDataJson.apbct_pixel_url = decodeURIComponent(resultDataJson.apbct_pixel_url);\n }\n }\n\n resultDataJson.apbct_page_hits = apbctPageHits;\n resultDataJson.apbct_prev_referer = apbctPrevReferer;\n resultDataJson.apbct_site_referer = apbctSiteReferer;\n resultDataJson.apbct_ct_js_errors = ctJsErrorsLocalStorage;\n\n if (!resultDataJson.apbct_pixel_url) {\n resultDataJson.apbct_pixel_url = ctPublic.pixel__url;\n }\n\n if ( typeof (commonCookies) === 'object') {\n for (let i = 0; i < commonCookies.length; ++i) {\n if ( typeof (commonCookies[i][1]) === 'object' ) {\n // this is for handle SFW cookies\n resultDataJson[commonCookies[i][1][0]] = commonCookies[i][1][1];\n } else {\n resultDataJson[commonCookies[i][0]] = commonCookies[i][1];\n }\n }\n } else {\n console.log('APBCT JS ERROR: Collecting data type mismatch');\n }\n\n // Parse JSON properties to prevent double JSON encoding\n resultDataJson = removeDoubleJsonEncoding(resultDataJson);\n\n\n return JSON.stringify(resultDataJson);\n}\n\n/**\n * Recursive\n *\n * Recursively decode JSON-encoded properties\n *\n * @param {mixed} object\n * @return {*}\n */\nfunction removeDoubleJsonEncoding(object) {\n if ( typeof object === 'object') {\n // eslint-disable-next-line guard-for-in\n for (let objectKey in object) {\n // Recursion\n if ( typeof object[objectKey] === 'object') {\n object[objectKey] = removeDoubleJsonEncoding(object[objectKey]);\n }\n\n // Common case (out)\n if (\n typeof object[objectKey] === 'string' &&\n object[objectKey].match(/^[\\[{].*?[\\]}]$/) !== null // is like JSON\n ) {\n const parsedValue = JSON.parse(object[objectKey]);\n if ( typeof parsedValue === 'object' ) {\n object[objectKey] = parsedValue;\n }\n }\n }\n }\n\n return object;\n}\n\n/**\n * @param {mixed} response\n * @param {mixed} targetElement\n */\nfunction ctProcessDecodedDataResult(response, targetElement) {\n targetElement.setAttribute('title', '');\n targetElement.removeAttribute('style');\n ctFillDecodedEmail(targetElement, response.decoded_email);\n}\n\n/**\n * @param {mixed} target\n * @param {string} email\n */\nfunction ctFillDecodedEmail(target, email) {\n apbct(target).html(\n apbct(target)\n .html()\n .replace(/.+?(
)/, email + '$1'),\n );\n}\n\n/**\n * @param {string} comment\n */\nfunction ctShowDecodeComment(comment) {\n if ( ! comment ) {\n comment = 'Can not decode email. Unknown reason';\n }\n\n let popup = document.getElementById('apbct_popup');\n let popupText = document.getElementById('apbct_popup_text');\n if (popup !== null) {\n document.body.classList.remove('apbct-popup-fade');\n popupText.innerText = 'CleanTalk email decoder: ' + comment;\n setTimeout(function() {\n popup.setAttribute('style', 'display:none');\n }, 3000);\n }\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_collect_visible_fields( form ) {\n // Get only fields\n let inputs = [];\n let inputsVisible = '';\n let inputsVisibleCount = 0;\n let inputsInvisible = '';\n let inputsInvisibleCount = 0;\n let inputsWithDuplicateNames = [];\n\n for (let key in form.elements) {\n if (!isNaN(+key)) {\n inputs[key] = form.elements[key];\n }\n }\n\n // Filter fields\n inputs = inputs.filter(function(elem) {\n // Filter already added fields\n if ( inputsWithDuplicateNames.indexOf( elem.getAttribute('name') ) !== -1 ) {\n return false;\n }\n // Filter inputs with same names for type == radio\n if ( -1 !== ['radio', 'checkbox'].indexOf( elem.getAttribute('type') )) {\n inputsWithDuplicateNames.push( elem.getAttribute('name') );\n return false;\n }\n return true;\n });\n\n // Visible fields\n inputs.forEach(function(elem, i, elements) {\n // Unnecessary fields\n if (\n elem.getAttribute('type') === 'submit' || // type == submit\n elem.getAttribute('name') === null ||\n elem.getAttribute('name') === 'ct_checkjs'\n ) {\n return;\n }\n // Invisible fields\n if (\n getComputedStyle(elem).display === 'none' || // hidden\n getComputedStyle(elem).visibility === 'hidden' || // hidden\n getComputedStyle(elem).opacity === '0' || // hidden\n elem.getAttribute('type') === 'hidden' // type == hidden\n ) {\n if ( elem.classList.contains('wp-editor-area') ) {\n inputsVisible += ' ' + elem.getAttribute('name');\n inputsVisibleCount++;\n } else {\n inputsInvisible += ' ' + elem.getAttribute('name');\n inputsInvisibleCount++;\n }\n // eslint-disable-next-line brace-style\n }\n // Visible fields\n else {\n inputsVisible += ' ' + elem.getAttribute('name');\n inputsVisibleCount++;\n }\n });\n\n inputsInvisible = inputsInvisible.trim();\n inputsVisible = inputsVisible.trim();\n\n return {\n visible_fields: inputsVisible,\n visible_fields_count: inputsVisibleCount,\n invisible_fields: inputsInvisible,\n invisible_fields_count: inputsInvisibleCount,\n };\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_visible_fields_set_cookie( visibleFieldsCollection, formId ) {\n let collection = typeof visibleFieldsCollection === 'object' && visibleFieldsCollection !== null ?\n visibleFieldsCollection : {};\n\n if ( ctPublic.data__cookies_type === 'native' ) {\n // eslint-disable-next-line guard-for-in\n for ( let i in collection ) {\n if ( i > 10 ) {\n // Do not generate more than 10 cookies\n return;\n }\n let collectionIndex = formId !== undefined ? formId : i;\n ctSetCookie('apbct_visible_fields_' + collectionIndex, JSON.stringify( collection[i] ) );\n }\n } else {\n if (ctPublic.data__cookies_type === 'none') {\n ctSetCookie('apbct_visible_fields', JSON.stringify( collection[0] ) );\n } else {\n ctSetCookie('apbct_visible_fields', JSON.stringify( collection ) );\n }\n }\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc,no-unused-vars\nfunction apbct_js_keys__set_input_value(result, data, params, obj) {\n if ( document.querySelectorAll('[name^=ct_checkjs]').length > 0 ) {\n let elements = document.querySelectorAll('[name^=ct_checkjs]');\n for ( let i = 0; i < elements.length; i++ ) {\n elements[i].value = result.js_key;\n }\n }\n}\n\n/**\n * @return {string}\n */\nfunction apbctGetScreenInfo() {\n return JSON.stringify({\n fullWidth: document.documentElement.scrollWidth,\n fullHeight: Math.max(\n document.body.scrollHeight, document.documentElement.scrollHeight,\n document.body.offsetHeight, document.documentElement.offsetHeight,\n document.body.clientHeight, document.documentElement.clientHeight,\n ),\n visibleWidth: document.documentElement.clientWidth,\n visibleHeight: document.documentElement.clientHeight,\n });\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctParseBlockMessage(response) {\n if (typeof response.apbct !== 'undefined') {\n response = response.apbct;\n if (response.blocked) {\n document.dispatchEvent(\n new CustomEvent( 'apbctAjaxBockAlert', {\n bubbles: true,\n detail: {message: response.comment},\n } ),\n );\n\n // Show the result by modal\n cleantalkModal.loaded = response.comment;\n cleantalkModal.open();\n\n if (+response.stop_script === 1) {\n window.stop();\n }\n }\n }\n}\n\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctSetPixelUrlLocalstorage(ajaxPixelUrl) {\n // set pixel to the storage\n ctSetCookie('apbct_pixel_url', ajaxPixelUrl);\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctNoCookieConstructHiddenField(type) {\n let inputType = 'hidden';\n if (type === 'submit') {\n inputType = 'submit';\n }\n let field = '';\n\n let noCookieData = getCleanTalkStorageDataArray();\n noCookieData = JSON.stringify(noCookieData);\n noCookieData = '_ct_no_cookie_data_' + btoa(noCookieData);\n field = document.createElement('input');\n field.setAttribute('name', 'ct_no_cookie_hidden_field');\n field.setAttribute('value', noCookieData);\n field.setAttribute('type', inputType);\n field.classList.add('apbct_special_field');\n field.classList.add('ct_no_cookie_hidden_field');\n return field;\n}\n\n/**\n * Retrieves the clentalk \"cookie\" data from starages.\n * Contains {...noCookieDataLocal, ...noCookieDataSession, ...noCookieDataTypo, ...noCookieDataFromDecoration}.\n * @return {string}\n */\nfunction getCleanTalkStorageDataArray() {\n let noCookieDataLocal = apbctLocalStorage.getCleanTalkData();\n let noCookieDataSession = apbctSessionStorage.getCleanTalkData();\n\n let noCookieDataTypo = {typo: []};\n if (document.ctTypoData && document.ctTypoData.data) {\n noCookieDataTypo = {typo: document.ctTypoData.data};\n }\n\n let noCookieDataFromDecoration = {form_decoration_mouse_data: []};\n if (document.ctFormDecorationMouseData) {\n let formDecorationMouseData = JSON.parse(JSON.stringify(document.ctFormDecorationMouseData));\n if (formDecorationMouseData.mouseMovements) {\n delete formDecorationMouseData.mouseMovements;\n }\n noCookieDataFromDecoration = {form_decoration_mouse_data: formDecorationMouseData};\n }\n return {...noCookieDataLocal, ...noCookieDataSession, ...noCookieDataTypo, ...noCookieDataFromDecoration};\n}\n\n/**\n * @return {boolean|*}\n */\nfunction ctGetPageForms() {\n let forms = document.forms;\n if (forms) {\n return forms;\n }\n return false;\n}\n\n/**\n * Get type of the field should be excluded. Return exclusion signs via object.\n * @param {object} form Form dom object.\n * @return {object} {'no_cookie': 1|0, 'visible_fields': 1|0}\n */\nfunction ctGetHiddenFieldExclusionsType(form) {\n // visible fields\n let result = {'no_cookie': 0, 'visible_fields': 0};\n if (\n +ctPublic.data__visible_fields_required === 0 ||\n (form.method.toString().toLowerCase() === 'get' &&\n form.querySelectorAll('.nf-form-content').length === 0 &&\n form.id !== 'twt_cc_signup') ||\n form.classList.contains('slp_search_form') || // StoreLocatorPlus form\n form.parentElement.classList.contains('mec-booking') ||\n form.action.toString().indexOf('activehosted.com') !== -1 || // Active Campaign\n (form.id && form.id === 'caspioform') || // Caspio Form\n (form.classList && form.classList.contains('tinkoffPayRow')) || // TinkoffPayForm\n (form.classList && form.classList.contains('give-form')) || // GiveWP\n (form.id && form.id === 'ult-forgot-password-form') || // ult forgot password\n (form.id && form.id.toString().indexOf('calculatedfields') !== -1) || // CalculatedFieldsForm\n (form.id && form.id.toString().indexOf('sac-form') !== -1) || // Simple Ajax Chat\n (form.id &&\n form.id.toString().indexOf('cp_tslotsbooking_pform') !== -1) || // WP Time Slots Booking Form\n (form.name &&\n form.name.toString().indexOf('cp_tslotsbooking_pform') !== -1) || // WP Time Slots Booking Form\n form.action.toString() === 'https://epayment.epymtservice.com/epay.jhtml' || // Custom form\n (form.name && form.name.toString().indexOf('tribe-bar-form') !== -1) || // The Events Calendar\n (form.id && form.id === 'ihf-login-form') || // Optima Express login\n (form.id &&\n form.id === 'subscriberForm' &&\n form.action.toString().indexOf('actionType=update') !== -1) || // Optima Express update\n (form.id && form.id === 'ihf-main-search-form') || // Optima Express search\n (form.id && form.id === 'frmCalc') || // nobletitle-calc\n form.action.toString().indexOf('property-organizer-delete-saved-search-submit') !== -1 ||\n form.querySelector('a[name=\"login\"]') !== null // digimember login form\n ) {\n result.visible_fields = 1;\n }\n\n // ajax search pro exclusion\n let ncFieldExclusionsSign = form.parentNode;\n if (\n ncFieldExclusionsSign && ncFieldExclusionsSign.classList.contains('proinput') ||\n (form.name === 'options' && form.classList.contains('asp-fss-flex'))\n ) {\n result.no_cookie = 1;\n }\n\n // woocommerce login form\n if (\n form && form.classList.contains('woocommerce-form-login')\n ) {\n result.visible_fields = 1;\n result.no_cookie = 1;\n }\n\n return result;\n}\n\n/**\n * Check if the form should be skipped from hidden field attach.\n * Return exclusion description if it is found, false otherwise.\n * @param {object} form Form dom object.\n * @param {string} hiddenFieldType Type of hidden field that needs to be checked.\n * Possible values: 'no_cookie'|'visible_fields'.\n * @return {boolean}\n */\nfunction ctCheckHiddenFieldsExclusions(form, hiddenFieldType) {\n const formAction = typeof(form.action) == 'string' ? form.action : '';\n // Ajax Search Lite\n if (Boolean(form.querySelector('fieldset.asl_sett_scroll'))) {\n return true;\n }\n // Super WooCommerce Product Filter\n if (form.classList.contains('swpf-instant-filtering')) {\n return true;\n }\n // PayU 3-rd party service forms\n if (formAction.indexOf('secure.payu.com') !== -1 ) {\n return true;\n }\n\n if (formAction.indexOf('hsforms') !== -1 ) {\n return true;\n }\n\n if (typeof (hiddenFieldType) === 'string' &&\n ['visible_fields', 'no_cookie'].indexOf(hiddenFieldType) !== -1) {\n const exclusions = ctGetHiddenFieldExclusionsType(form);\n return exclusions[hiddenFieldType] === 1;\n }\n\n return false;\n}\n\n/**\n * ctNoCookieAttachHiddenFieldsToForms\n */\nfunction ctNoCookieAttachHiddenFieldsToForms() {\n if (ctPublic.data__cookies_type !== 'none') {\n return;\n }\n\n let forms = ctGetPageForms();\n\n if (forms) {\n for ( let i = 0; i < forms.length; i++ ) {\n if ( ctCheckHiddenFieldsExclusions(document.forms[i], 'no_cookie') ) {\n continue;\n }\n\n // ignore forms with get method @todo We need to think about this\n if (document.forms[i].getAttribute('method') === null ||\n document.forms[i].getAttribute('method').toLowerCase() === 'post') {\n // remove old sets\n let fields = forms[i].querySelectorAll('.ct_no_cookie_hidden_field');\n for ( let j = 0; j < fields.length; j++ ) {\n fields[j].outerHTML = '';\n }\n // add new set\n document.forms[i].append(ctNoCookieConstructHiddenField());\n }\n }\n }\n}\n\nconst defaultFetch = window.fetch;\nconst defaultSend = XMLHttpRequest.prototype.send;\n\nif (document.readyState !== 'loading') {\n checkFormsExistForCatching();\n} else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', checkFormsExistForCatching);\n}\n\n/**\n * checkFormsExistForCatching\n */\nfunction checkFormsExistForCatching() {\n setTimeout(function() {\n if (isFormThatNeedCatch()) {\n window.fetch = function(...args) {\n if (args &&\n args[0] &&\n typeof args[0].includes === 'function' &&\n args[0].includes('/wp-json/metform/')\n ) {\n let noCookieData = getNoCookieData();\n\n if (args && args[1] && args[1].body) {\n args[1].body.append('ct_no_cookie_hidden_field', noCookieData);\n }\n }\n\n return defaultFetch.apply(window, args);\n };\n }\n }, 1000);\n}\n\n/**\n * @return {boolean}\n */\nfunction isFormThatNeedCatch() {\n const formClasses = [\n 'metform-form-content',\n ];\n let classExists = false;\n\n const forms = document.forms;\n for (let form of forms) {\n formClasses.forEach(function(classForm) {\n if (form.classList.contains(classForm)) {\n classExists = true;\n }\n });\n }\n\n return classExists;\n}\n\n/**\n * @param {HTMLElement} form\n * @return {boolean}\n */\nfunction isFormThatNeedCatchXhr(form) {\n if (document.querySelector('div.elementor-widget[title=\\'Login/Signup\\']') != null) {\n return false;\n }\n if (form && form.action && form.action.toString().indexOf('mailpoet_subscription_form') !== -1) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @return {string}\n */\nfunction getNoCookieData() {\n let noCookieDataLocal = apbctLocalStorage.getCleanTalkData();\n let noCookieDataSession = apbctSessionStorage.getCleanTalkData();\n let noCookieData = {...noCookieDataLocal, ...noCookieDataSession};\n noCookieData = JSON.stringify(noCookieData);\n\n return '_ct_no_cookie_data_' + btoa(noCookieData);\n}\n\n/**\n * Set three statements to the sessions storage: apbct_session_current_page, apbct_prev_referer.\n * @return {void}\n */\nfunction apbctWriteReferrersToSessionStorage() {\n const sessionCurrentPage = apbctSessionStorage.get('apbct_session_current_page');\n\n // set session apbct_referer\n if (sessionCurrentPage!== false && document.location.href !== sessionCurrentPage) {\n apbctSessionStorage.set('apbct_prev_referer', sessionCurrentPage, false);\n }\n\n // set session current page to know referrer\n apbctSessionStorage.set('apbct_session_current_page', document.location.href, false);\n}\n\n/**\n * WooCommerce add to cart by GET request params collecting\n */\nfunction apbctCheckAddToCartByGet() {\n // 1) Collect all links with add_to_cart_button class\n document.querySelectorAll('a.add_to_cart_button:not(.product_type_variable):not(.wc-interactive)').forEach((el) => {\n el.addEventListener('click', function(e) {\n let href = el.getAttribute('href');\n // 2) Add to href attribute additional parameter ct_bot_detector_event_token gathered from apbctLocalStorage\n let eventToken = apbctLocalStorage.get('bot_detector_event_token');\n if ( eventToken ) {\n if ( href.indexOf('?') === -1 ) {\n href += '?';\n } else {\n href += '&';\n }\n href += 'ct_bot_detector_event_token=' + eventToken;\n el.setAttribute('href', href);\n }\n });\n });\n}\n\n/* Cleantalk Modal object */\nlet cleantalkModal = {\n\n // Flags\n loaded: false,\n loading: false,\n opened: false,\n opening: false,\n ignoreURLConvert: false,\n\n // Methods\n load: function( action ) {\n if ( ! this.loaded ) {\n this.loading = true;\n let callback = function( result, data, params, obj ) {\n cleantalkModal.loading = false;\n cleantalkModal.loaded = result;\n document.dispatchEvent(\n new CustomEvent( 'cleantalkModalContentLoaded', {\n bubbles: true,\n } ),\n );\n };\n // eslint-disable-next-line camelcase\n if ( typeof apbct_admin_sendAJAX === 'function' ) {\n apbct_admin_sendAJAX( {'action': action}, {'callback': callback, 'notJson': true} );\n } else {\n apbct_public_sendAJAX( {'action': action}, {'callback': callback, 'notJson': true} );\n }\n }\n },\n\n open: function() {\n /* Cleantalk Modal CSS start */\n let renderCss = function() {\n let cssStr = '';\n // eslint-disable-next-line guard-for-in\n for ( const key in this.styles ) {\n cssStr += key + ':' + this.styles[key] + ';';\n }\n return cssStr;\n };\n let overlayCss = {\n styles: {\n 'z-index': '9999999999',\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': '30px',\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 'box-sizing': 'content-box',\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 bodyCss = {\n styles: {\n 'overflow': 'hidden',\n },\n toString: renderCss,\n };\n let cleantalkModalStyle = document.createElement( 'style' );\n cleantalkModalStyle.setAttribute( 'id', 'cleantalk-modal-styles' );\n cleantalkModalStyle.innerHTML = 'body.cleantalk-modal-opened{' + bodyCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-overlay{' + overlayCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close{' + closeCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:before{' + closeCssBefore + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:after{' + closeCssAfter + '}';\n document.body.append( cleantalkModalStyle );\n /* Cleantalk Modal CSS end */\n\n let overlay = document.createElement( 'div' );\n overlay.setAttribute( 'id', 'cleantalk-modal-overlay' );\n document.body.append( overlay );\n\n document.body.classList.add( 'cleantalk-modal-opened' );\n\n let inner = document.createElement( 'div' );\n inner.setAttribute( 'id', 'cleantalk-modal-inner' );\n inner.setAttribute( 'style', innerCss );\n overlay.append( inner );\n\n let close = document.createElement( 'div' );\n close.setAttribute( 'id', 'cleantalk-modal-close' );\n inner.append( close );\n\n let content = document.createElement( 'div' );\n if ( this.loaded ) {\n const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n const serviceContentRegex = /.*\\/inc/g;\n if (serviceContentRegex.test(this.loaded) || this.ignoreURLConvert) {\n content.innerHTML = this.loaded;\n } else {\n content.innerHTML = this.loaded.replace(urlRegex, '$1');\n }\n } else {\n content.innerHTML = 'Loading...';\n // @ToDo Here is hardcoded parameter. Have to get this from a 'data-' attribute.\n this.load( 'get_options_template' );\n }\n content.setAttribute( 'id', 'cleantalk-modal-content' );\n inner.append( content );\n\n this.opened = true;\n },\n\n close: function() {\n document.body.classList.remove( 'cleantalk-modal-opened' );\n document.getElementById( 'cleantalk-modal-overlay' ).remove();\n document.getElementById( 'cleantalk-modal-styles' ).remove();\n document.dispatchEvent(\n new CustomEvent( 'cleantalkModalClosed', {\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 === 'cleantalk-modal-overlay' || e.target.id === 'cleantalk-modal-close') ) {\n cleantalkModal.close();\n }\n});\ndocument.addEventListener('cleantalkModalContentLoaded', function( e ) {\n if ( cleantalkModal.opened && cleantalkModal.loaded ) {\n document.getElementById( 'cleantalk-modal-content' ).innerHTML = cleantalkModal.loaded;\n }\n});\n\ndocument.addEventListener('DOMContentLoaded', function() {\n let ctTrpLocalize = undefined;\n let ctTrpIsAdminCommentsList = false;\n\n if ( typeof ctPublic !== 'undefined' || typeof ctTrpAdminLocalize !== 'undefined' ) {\n if ( typeof ctPublic !== 'undefined' && ctPublic.theRealPerson ) {\n ctTrpLocalize = ctPublic.theRealPerson;\n }\n if (\n typeof ctTrpLocalize === 'undefined' &&\n typeof ctTrpAdminLocalize !== 'undefined' &&\n ctTrpAdminLocalize.theRealPerson\n ) {\n ctTrpLocalize = ctTrpAdminLocalize.theRealPerson;\n ctTrpIsAdminCommentsList = true;\n }\n }\n\n if ( ! ctTrpLocalize ) {\n return;\n }\n\n // Selectors. Try to handle the WIDE range of themes.\n let themesCommentsSelector = '.apbct-trp *[class*=\"comment-author\"]';\n if ( document.querySelector('.apbct-trp .comment-author .comment-author-link') ) {\n // For Spacious theme\n themesCommentsSelector = '.apbct-trp *[class*=\"comment-author-link\"]';\n }\n let woocommerceReviewsSelector = '.apbct-trp *[class*=\"review__author\"]';\n let adminCommentsListSelector = '.apbct-trp td[class*=\"column-author\"] > strong';\n const trpComments = document.querySelectorAll(\n themesCommentsSelector + ',' +\n woocommerceReviewsSelector + ',' +\n adminCommentsListSelector);\n\n if ( trpComments.length === 0 ) {\n return;\n }\n\n trpComments.forEach(( element, index ) => {\n // Exceptions for items that are included in the selection\n if (\n typeof pagenow == 'undefined' &&\n element.parentElement.className.indexOf('group') < 0 &&\n element.tagName != 'DIV'\n ) {\n return;\n }\n\n let trpLayout = document.createElement('div');\n trpLayout.setAttribute('class', 'apbct-real-user-badge');\n\n let trpImage = document.createElement('img');\n trpImage.setAttribute('src', ctTrpLocalize.imgPersonUrl);\n trpImage.setAttribute('class', 'apbct-real-user-popup-img');\n\n let trpDescription = document.createElement('div');\n trpDescription.setAttribute('class', 'apbct-real-user-popup');\n\n let trpDescriptionHeading = document.createElement('p');\n trpDescriptionHeading.setAttribute('class', 'apbct-real-user-popup-header');\n trpDescriptionHeading.append(ctTrpLocalize.phrases.trpHeading);\n\n let trpDescriptionContent = document.createElement('div');\n trpDescriptionContent.setAttribute('class', 'apbct-real-user-popup-content_row');\n\n let trpDescriptionContentSpan = document.createElement('span');\n trpDescriptionContentSpan.append(ctTrpLocalize.phrases.trpContent1 + ' ');\n trpDescriptionContentSpan.append(ctTrpLocalize.phrases.trpContent2);\n\n if ( ctTrpIsAdminCommentsList ) {\n let learnMoreLink = document.createElement('a');\n learnMoreLink.setAttribute('href', ctTrpLocalize.trpContentLink);\n learnMoreLink.setAttribute('target', '_blank');\n learnMoreLink.text = ctTrpLocalize.phrases.trpContentLearnMore;\n trpDescriptionContentSpan.append(' '); // Need one space\n trpDescriptionContentSpan.append(learnMoreLink);\n }\n\n trpDescriptionContent.append(trpDescriptionContentSpan);\n trpDescription.append(trpDescriptionHeading, trpDescriptionContent);\n trpLayout.append(trpImage);\n element.append(trpLayout);\n element.append(trpDescription);\n });\n\n const badges = document.querySelectorAll('.apbct-real-user-badge');\n\n badges.forEach((badge) => {\n let hideTimeout = undefined;\n\n badge.addEventListener('click', function() {\n const popup = this.nextElementSibling;\n if (popup && popup.classList.contains('apbct-real-user-popup')) {\n popup.classList.toggle('visible');\n }\n });\n\n badge.addEventListener('mouseenter', function() {\n const popup = this.nextElementSibling;\n if (popup && popup.classList.contains('apbct-real-user-popup')) {\n popup.classList.add('visible');\n }\n });\n\n badge.addEventListener('mouseleave', function() {\n hideTimeout = setTimeout(() => {\n const popup = this.nextElementSibling;\n if (popup && popup.classList.contains('apbct-real-user-popup')) {\n popup.classList.remove('visible');\n }\n }, 1000);\n });\n\n const popup = badge.nextElementSibling;\n popup.addEventListener('mouseenter', function() {\n clearTimeout(hideTimeout);\n popup.classList.add('visible');\n });\n\n popup.addEventListener('mouseleave', function() {\n hideTimeout = setTimeout(() => {\n if (popup.classList.contains('apbct-real-user-popup')) {\n popup.classList.remove('visible');\n }\n }, 1000);\n });\n\n // For mobile devices\n badge.addEventListener('touchend', function() {\n hideTimeout = setTimeout(() => {\n const popup = this.nextElementSibling;\n const selection = window.getSelection();\n // Check if no text is selected\n if (popup && selection && popup.classList.contains('apbct-real-user-popup') &&\n selection.toString().length === 0\n ) {\n popup.classList.remove('visible');\n } else {\n clearTimeout(hideTimeout);\n document.addEventListener('selectionchange', function onSelectionChange() {\n const selection = window.getSelection();\n if (selection && selection.toString().length === 0) {\n // Restart the hide timeout when selection is cleared\n hideTimeout = setTimeout(() => {\n const popup = badge.nextElementSibling;\n if (popup && popup.classList.contains('apbct-real-user-popup')) {\n popup.classList.remove('visible');\n }\n }, 3000);\n document.removeEventListener('selectionchange', onSelectionChange);\n }\n });\n }\n }, 3000);\n });\n });\n});\n\n/**\n * Handle external forms\n */\nfunction ctProtectExternal() {\n for (let i = 0; i < document.forms.length; i++) {\n if (document.forms[i].cleantalk_hidden_action === undefined &&\n document.forms[i].cleantalk_hidden_method === undefined) {\n // current form\n const currentForm = document.forms[i];\n\n // skip excluded forms\n if ( formIsExclusion(currentForm)) {\n continue;\n }\n\n // Ajax checking for the integrated forms - will be changed the whole form object to make protection\n if ( isIntegratedForm(currentForm) ) {\n apbctProcessExternalForm(currentForm, i, document);\n\n // Ajax checking for the integrated forms - will be changed only submit button to make protection\n } else if (\n // MooForm 3rd party service\n currentForm.dataset.mailingListId !== undefined ||\n (typeof(currentForm.action) == 'string' &&\n (currentForm.action.indexOf('webto.salesforce.com') !== -1)) ||\n (typeof(currentForm.action) == 'string' &&\n currentForm.querySelector('[href*=\"activecampaign\"]')) ||\n (currentForm.action.indexOf('hsforms.com') !== -1 && currentForm.getAttribute('data-hs-cf-bound'))\n ) {\n apbctProcessExternalFormByFakeButton(currentForm, i, document);\n // Common flow - modify form's action\n } else if (\n typeof(currentForm.action) == 'string' &&\n ( currentForm.action.indexOf('http://') !== -1 ||\n currentForm.action.indexOf('https://') !== -1 )\n ) {\n let tmp = currentForm.action.split('//');\n tmp = tmp[1].split('/');\n const host = tmp[0].toLowerCase();\n\n if (host !== location.hostname.toLowerCase()) {\n const ctAction = document.createElement('input');\n ctAction.name = 'cleantalk_hidden_action';\n ctAction.value = currentForm.action;\n ctAction.type = 'hidden';\n currentForm.appendChild(ctAction);\n\n const ctMethod = document.createElement('input');\n ctMethod.name = 'cleantalk_hidden_method';\n ctMethod.value = currentForm.method;\n ctMethod.type = 'hidden';\n\n currentForm.method = 'POST';\n\n currentForm.appendChild(ctMethod);\n\n currentForm.action = document.location;\n }\n }\n }\n }\n // Trying to process external form into an iframe\n apbctProcessIframes();\n // if form is still not processed by fields listening, do it here\n ctStartFieldsListening();\n}\n\n/**\n * Exclusion forms\n * @param {HTMLElement} currentForm\n * @return {boolean}\n */\nfunction formIsExclusion(currentForm) {\n const exclusionsById = [\n 'give-form', // give form exclusion because of direct integration\n 'frmCalc', // nobletitle-calc\n 'ihf-contact-request-form',\n 'wpforms', // integration with wpforms\n ];\n\n const exclusionsByRole = [\n 'search', // search forms\n ];\n\n const exclusionsByClass = [\n 'search-form', // search forms\n 'hs-form', // integrated hubspot plugin through dynamicRenderedForms logic\n 'ihc-form-create-edit', // integrated Ultimate Membership Pro plugin through dynamicRenderedForms logic\n 'nf-form-content', // integration with Ninja Forms for js events\n 'elementor-form', // integration with elementor-form\n 'wpforms', // integration with wpforms\n 'et_pb_searchform', // integration with elementor-search-form\n ];\n\n const exclusionsByAction = [\n 'paypal.com/cgi-bin/webscr', // search forms\n ];\n\n let result = false;\n\n try {\n // mewto forms exclusion\n if (currentForm.parentElement &&\n currentForm.parentElement.classList.length > 0 &&\n currentForm.parentElement.classList[0].indexOf('mewtwo') !== -1) {\n result = true;\n }\n\n if (currentForm.getAttribute('action') !== null) {\n exclusionsByAction.forEach(function(exclusionAction) {\n if (currentForm.getAttribute('action').indexOf(exclusionAction) !== -1) {\n result = true;\n }\n });\n }\n\n exclusionsById.forEach(function(exclusionId) {\n const formId = currentForm.getAttribute('id');\n if ( formId !== null && typeof (formId) !== 'undefined' && formId.indexOf(exclusionId) !== -1 ) {\n result = true;\n }\n });\n\n exclusionsByClass.forEach(function(exclusionClass) {\n let foundClass = '';\n if (currentForm.getAttribute('class')) {\n foundClass = currentForm.getAttribute('class');\n } else {\n foundClass = apbctGetFormClass(currentForm, exclusionClass);\n }\n const formClass = foundClass;\n if ( formClass !== null && typeof formClass !== 'undefined' && formClass.indexOf(exclusionClass) !== -1 ) {\n if (currentForm.getAttribute('data-hs-cf-bound')) {\n result = false;\n } else {\n result = true;\n }\n }\n });\n\n exclusionsByRole.forEach(function(exclusionRole) {\n const formRole = currentForm.getAttribute('id');\n if ( formRole !== null && typeof formRole !== 'undefined'&& formRole.indexOf(exclusionRole) !== -1 ) {\n result = true;\n }\n });\n } catch (e) {\n console.table('APBCT ERROR: formIsExclusion() - ', e);\n }\n\n return result;\n}\n\n/**\n * Gets the form class if it is not in
\n * @param {HTMLElement} currentForm\n * @param {string} exclusionClass\n * @return {string}\n */\nfunction apbctGetFormClass(currentForm, exclusionClass) {\n if (typeof(currentForm) == 'object' && currentForm.querySelector('.' + exclusionClass)) {\n return exclusionClass;\n }\n}\n\n/**\n * Handle external forms in iframes\n */\nfunction apbctProcessIframes() {\n const frames = document.getElementsByTagName('iframe');\n\n if ( frames.length > 0 ) {\n for ( let j = 0; j < frames.length; j++ ) {\n if ( frames[j].contentDocument == null ) {\n continue;\n }\n\n const iframeForms = frames[j].contentDocument.forms;\n if ( iframeForms.length === 0 ) {\n continue;\n }\n\n for ( let y = 0; y < iframeForms.length; y++ ) {\n const currentForm = iframeForms[y];\n if ( formIsExclusion(currentForm)) {\n continue;\n }\n apbctProcessExternalForm(currentForm, y, frames[j].contentDocument);\n }\n }\n }\n}\n\n/**\n * Process external forms\n * @param {HTMLElement} currentForm\n * @param {int} iterator\n * @param {HTMLElement} documentObject\n */\nfunction apbctProcessExternalForm(currentForm, iterator, documentObject) {\n const cleantalkPlaceholder = document.createElement('i');\n cleantalkPlaceholder.className = 'cleantalk_placeholder';\n cleantalkPlaceholder.style = 'display: none';\n\n currentForm.parentElement.insertBefore(cleantalkPlaceholder, currentForm);\n\n // Deleting form to prevent submit event\n const prev = currentForm.previousSibling;\n const formHtml = currentForm.outerHTML;\n const formOriginal = currentForm;\n\n // Remove the original form\n currentForm.parentElement.removeChild(currentForm);\n\n // Insert a clone\n const placeholder = document.createElement('div');\n placeholder.innerHTML = formHtml;\n prev.after(placeholder.firstElementChild);\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n\n const reUseCurrentForm = documentObject.forms[iterator];\n\n reUseCurrentForm.appendChild(forceAction);\n reUseCurrentForm.apbctPrev = prev;\n reUseCurrentForm.apbctFormOriginal = formOriginal;\n\n // mailerlite integration - disable click on submit button\n let mailerliteDetectedClass = false;\n if (reUseCurrentForm.classList !== undefined) {\n // list there all the mailerlite classes\n const mailerliteClasses = ['newsletterform', 'ml-block-form'];\n mailerliteClasses.forEach(function(mailerliteClass) {\n if (reUseCurrentForm.classList.contains(mailerliteClass)) {\n mailerliteDetectedClass = mailerliteClass;\n }\n });\n }\n\n let mailerliteSubmitButton = null;\n if ( mailerliteDetectedClass ) {\n mailerliteSubmitButton = reUseCurrentForm.querySelector('button[type=\"submit\"]');\n if ( mailerliteSubmitButton !== null && mailerliteSubmitButton !== undefined ) {\n mailerliteSubmitButton.addEventListener('click', function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(reUseCurrentForm);\n });\n }\n return;\n }\n\n documentObject.forms[iterator].onsubmit = function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(event.currentTarget);\n };\n}\n\n/**\n * Process external forms via fake button replacing\n * @param {HTMLElement} currentForm\n * @param {int} iterator\n * @param {HTMLElement} documentObject\n */\nfunction apbctProcessExternalFormByFakeButton(currentForm, iterator, documentObject) {\n const submitButtonOriginal = currentForm.querySelector('[type=\"submit\"]');\n const onsubmitOriginal = currentForm.querySelector('[type=\"submit\"]').form.onsubmit;\n\n if ( ! submitButtonOriginal ) {\n return;\n }\n\n const parent = submitButtonOriginal.parentElement;\n const submitButtonHtml = submitButtonOriginal.outerHTML;\n\n // Remove the original submit button\n submitButtonOriginal.remove();\n\n // Insert a clone of the submit button\n const placeholder = document.createElement('div');\n placeholder.innerHTML = submitButtonHtml;\n parent.appendChild(placeholder.firstElementChild);\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n\n const reUseCurrentForm = documentObject.forms[iterator];\n\n reUseCurrentForm.appendChild(forceAction);\n reUseCurrentForm.apbctParent = parent;\n reUseCurrentForm.submitButtonOriginal = submitButtonOriginal;\n reUseCurrentForm.onsubmitOriginal = onsubmitOriginal;\n\n documentObject.forms[iterator].onsubmit = function(event) {\n event.preventDefault();\n\n // MooSend spinner activate\n apbctMoosendSpinnerToggle(event.currentTarget);\n\n sendAjaxCheckingFormData(event.currentTarget);\n };\n}\n\n/**\n * Activate or deactivate spinner for Moosend form during request checking\n * @param {HTMLElement} form\n */\nfunction apbctMoosendSpinnerToggle(form) {\n const buttonElement = form.querySelector('button[type=\"submit\"]');\n if ( buttonElement ) {\n const spinner = buttonElement.querySelector('i');\n const submitText = buttonElement.querySelector('span');\n if (spinner && submitText) {\n if ( spinner.style.zIndex == 1 ) {\n submitText.style.opacity = 1;\n spinner.style.zIndex = -1;\n spinner.style.opacity = 0;\n } else {\n submitText.style.opacity = 0;\n spinner.style.zIndex = 1;\n spinner.style.opacity = 1;\n }\n }\n }\n}\n\n/**\n * Process external forms\n * @param {HTMLElement} formSource\n * @param {HTMLElement} formTarget\n */\nfunction apbctReplaceInputsValuesFromOtherForm(formSource, formTarget) {\n const inputsSource = formSource.querySelectorAll('button, input, textarea, select');\n const inputsTarget = formTarget.querySelectorAll('button, input, textarea, select');\n\n if (formSource.outerHTML.indexOf('action=\"https://www.kulahub.net') !== -1 ||\n isFormHasDiviRedirect(formSource) ||\n formSource.outerHTML.indexOf('class=\"et_pb_contact_form') !== -1 ||\n formSource.outerHTML.indexOf('action=\"https://api.kit.com') !== -1\n ) {\n inputsSource.forEach((elemSource) => {\n inputsTarget.forEach((elemTarget) => {\n if (elemSource.name === elemTarget.name) {\n if (elemTarget.type === 'checkbox' || elemTarget.type === 'radio') {\n elemTarget.checked = apbctVal(elemSource);\n } else {\n elemTarget.value = apbctVal(elemSource);\n }\n }\n });\n });\n\n return;\n }\n\n inputsSource.forEach((elemSource) => {\n inputsTarget.forEach((elemTarget) => {\n if (elemSource.outerHTML === elemTarget.outerHTML) {\n if (elemTarget.type === 'checkbox' || elemTarget.type === 'radio') {\n elemTarget.checked = apbctVal(elemSource);\n } else {\n elemTarget.value = apbctVal(elemSource);\n }\n }\n });\n });\n}\n// clear protected iframes list\napbctLocalStorage.set('apbct_iframes_protected', []);\nwindow.addEventListener('load', function() {\n if ( ! +ctPublic.settings__forms__check_external ) {\n return;\n }\n\n setTimeout(function() {\n ctProtectExternal();\n catchDynamicRenderedForm();\n catchNextendSocialLoginForm();\n ctProtectOutsideIframe();\n }, 2000);\n\n ctProtectKlaviyoForm();\n});\n\n/**\n * Protect klaviyo forms\n */\nfunction ctProtectKlaviyoForm() {\n if (!document.querySelector('link[rel=\"dns-prefetch\"][href=\"//static.klaviyo.com\"]')) {\n return;\n }\n\n let i = setInterval(() => {\n const klaviyoForms = document.querySelectorAll('form.klaviyo-form');\n if (klaviyoForms.length) {\n clearInterval(i);\n klaviyoForms.forEach((form, index) => {\n apbctProcessExternalFormKlaviyo(form, index, document);\n });\n }\n }, 500);\n}\n\n/**\n * Protect klaviyo forms\n * @param {HTMLElement} form\n * @param {int} iterator\n * @param {HTMLElement} documentObject\n */\nfunction apbctProcessExternalFormKlaviyo(form, iterator, documentObject) {\n const btn = form.querySelector('button[type=\"button\"].needsclick');\n if (!btn) {\n return;\n }\n btn.disabled = true;\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n form.appendChild(forceAction);\n\n let cover = document.createElement('div');\n cover.id = 'apbct-klaviyo-cover';\n cover.style.width = '100%';\n cover.style.height = '100%';\n cover.style.background = 'black';\n cover.style.opacity = 0;\n cover.style.position = 'absolute';\n cover.style.top = 0;\n cover.style.cursor = 'pointer';\n cover.onclick = function(e) {\n sendAjaxCheckingFormData(form);\n };\n btn.parentNode.style.position = 'relative';\n btn.parentNode.appendChild(cover);\n}\n\n/**\n * Protect forms placed in iframe with outside src\n */\nfunction ctProtectOutsideIframe() {\n let iframes = document.querySelectorAll('iframe');\n if (iframes.length > 0) {\n iframes.forEach(function(iframe) {\n if (iframe.src.indexOf('form.typeform.com') !== -1 ||\n iframe.src.indexOf('forms.zohopublic.com') !== -1 ||\n iframe.src.indexOf('link.surepathconnect.com') !== -1 ||\n iframe.src.indexOf('hello.dubsado.com') !== -1 ||\n iframe.classList.contains('hs-form-iframe') ||\n ( iframe.src.indexOf('facebook.com') !== -1 && iframe.src.indexOf('plugins/comments.php') !== -1)\n ) {\n // pass if is already protected\n if (false !== apbctLocalStorage.get('apbct_iframes_protected') &&\n apbctLocalStorage.get('apbct_iframes_protected').length > 0 &&\n typeof iframe.id !== 'undefined' &&\n apbctLocalStorage.get('apbct_iframes_protected').indexOf[iframe.id] !== -1\n ) {\n return;\n }\n ctProtectOutsideIframeHandler(iframe);\n }\n });\n }\n}\n\nlet ctProtectOutsideIframeCheck;\n/**\n * Protect forms placed in iframe with outside src handler\n * @param {HTMLElement} iframe\n */\nfunction ctProtectOutsideIframeHandler(iframe) {\n let cover = document.createElement('div');\n cover.style.width = '100%';\n cover.style.height = '100%';\n cover.style.background = 'black';\n cover.style.opacity = 0;\n cover.style.position = 'absolute';\n cover.style.top = 0;\n cover.onclick = function(e) {\n if (ctProtectOutsideIframeCheck === undefined) {\n let currentDiv = e.currentTarget;\n currentDiv.style.opacity = 0.5;\n let preloader = document.createElement('div');\n preloader.className = 'apbct-iframe-preloader';\n currentDiv.appendChild(preloader);\n let botDetectorToken = '';\n if (document.querySelector('[name*=\"ct_bot_detector_event_token\"]')) {\n botDetectorToken = document.querySelector('[name*=\"ct_bot_detector_event_token\"]').value;\n }\n\n let data = {\n 'action': 'cleantalk_outside_iframe_ajax_check',\n 'ct_no_cookie_hidden_field': getNoCookieData(),\n 'ct_bot_detector_event_token': botDetectorToken,\n };\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n ctProtectOutsideIframeCheck = true;\n if (result.apbct.blocked === false) {\n document.querySelectorAll('div.apbct-iframe-preloader').forEach(function(el) {\n el.parentNode.remove();\n });\n } else {\n document.querySelectorAll('div.apbct-iframe-preloader').forEach((el) => {\n el.parentNode.style.color = 'white';\n el.parentNode.innerHTML += result.apbct.comment;\n });\n document.querySelectorAll('div.apbct-iframe-preloader').forEach((el) => {\n el.remove();\n });\n }\n },\n },\n );\n }\n };\n iframe.parentNode.style.position = 'relative';\n iframe.parentNode.appendChild(cover);\n let iframes = apbctLocalStorage.get('apbct_iframes_protected');\n if (false === iframes) {\n iframes = [];\n }\n if (typeof iframe.id !== 'undefined') {\n iframes.push(iframe.id);\n apbctLocalStorage.set('apbct_iframes_protected', iframes);\n }\n}\n\n/**\n * Catch NSL form integration\n */\nfunction catchNextendSocialLoginForm() {\n let blockNSL = document.getElementById('nsl-custom-login-form-main');\n if (blockNSL) {\n blockBtnNextendSocialLogin(blockNSL);\n }\n}\n\n/**\n * Blocking NSL plugin buttons\n * @param {HTMLElement} blockNSL\n */\nfunction blockBtnNextendSocialLogin(blockNSL) {\n let parentBtnsNSL = blockNSL.querySelectorAll('.nsl-container-buttons a');\n let childBtnsNSL = blockNSL.querySelectorAll('a[data-plugin=\"nsl\"] .nsl-button');\n parentBtnsNSL.forEach((el) => {\n el.setAttribute('data-oauth-login-blocked', 'true');\n el.addEventListener('click', (event) => {\n event.preventDefault();\n });\n });\n childBtnsNSL.forEach((el) => {\n el.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n ctCheckAjax(el);\n });\n });\n}\n\n/**\n * Unlocking the button and clicking on it after an ajax response\n * @param {HTMLElement} childBtn\n */\nfunction allowAjaxNextendSocialLogin(childBtn) {\n childBtn.parentElement.setAttribute('data-oauth-login-blocked', 'false');\n childBtn.parentElement.click();\n}\n\n/**\n * Locking the button and entering a message after an ajax response\n * @param {HTMLElement} childBtn\n * @param {string} msg\n */\nfunction forbiddenAjaxNextendSocialLogin(childBtn, msg) {\n let parentElement = childBtn.parentElement;\n if (parentElement.getAttribute('data-oauth-login-blocked') == 'false') {\n parentElement.setAttribute('data-oauth-login-blocked', 'true');\n }\n if (!document.querySelector('.ct-forbidden-msg')) {\n let elemForMsg = document.createElement('div');\n elemForMsg.className = 'ct-forbidden-msg';\n elemForMsg.style.background = 'red';\n elemForMsg.style.color = 'white';\n elemForMsg.style.padding = '5px';\n elemForMsg.innerHTML = msg;\n parentElement.insertAdjacentElement('beforebegin', elemForMsg);\n }\n}\n\n/**\n * User verification using user data and ajax\n * @param {HTMLElement} elem\n */\nfunction ctCheckAjax(elem) {\n let data = {\n 'action': 'cleantalk_nsl_ajax_check',\n 'ct_no_cookie_hidden_field': document.getElementsByName('ct_no_cookie_hidden_field')[0].value,\n };\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n if (result.apbct.blocked === false) {\n allowAjaxNextendSocialLogin(elem);\n } else {\n forbiddenAjaxNextendSocialLogin(elem, result.apbct.comment);\n }\n },\n },\n );\n}\n\n/**\n * Checking the form integration\n * @param {HTMLElement} formObj\n * @return {boolean}\n */\nfunction isIntegratedForm(formObj) {\n const formAction = typeof(formObj.action) == 'string' ? formObj.action : '';\n const formId = formObj.getAttribute('id') !== null ? formObj.getAttribute('id') : '';\n\n if (\n (\n formAction.indexOf('app.convertkit.com') !== -1 || // ConvertKit form\n formAction.indexOf('app.kit.com') !== -1 || // ConvertKit new form\n formAction.indexOf('api.kit.com') !== -1 // ConvertKit new form\n ) ||\n ( formObj.firstChild.classList !== undefined &&\n formObj.firstChild.classList.contains('cb-form-group') ) || // Convertbox form\n formAction.indexOf('mailerlite.com') !== -1 || // Mailerlite integration\n formAction.indexOf('colcolmail.co.uk') !== -1 || // colcolmail.co.uk integration\n formAction.indexOf('paypal.com') !== -1 ||\n formAction.indexOf('infusionsoft.com') !== -1 ||\n formAction.indexOf('secure2.convio.net') !== -1 ||\n formAction.indexOf('hookb.in') !== -1 ||\n formAction.indexOf('external.url') !== -1 ||\n formAction.indexOf('tp.media') !== -1 ||\n formAction.indexOf('flodesk.com') !== -1 ||\n formAction.indexOf('sendfox.com') !== -1 ||\n formAction.indexOf('aweber.com') !== -1 ||\n formAction.indexOf('secure.payu.com') !== -1 ||\n formAction.indexOf('mautic') !== -1 || formId.indexOf('mauticform_') !== -1 ||\n formId.indexOf('ihf-contact-request-form') !== -1 ||\n formAction.indexOf('crm.zoho.com') !== -1 ||\n formId.indexOf('delivra-external-form') !== -1 ||\n // todo Return to Hubspot for elementor in the future, disabled of reason https://doboard.com/1/task/9227\n // ( formObj.classList !== undefined &&\n // !formObj.classList.contains('woocommerce-checkout') &&\n // formObj.hasAttribute('data-hs-cf-bound')\n // ) || // Hubspot integration in Elementor form// Hubspot integration in Elementor form\n formAction.indexOf('eloqua.com') !== -1 || // Eloqua integration\n formAction.indexOf('kulahub.net') !== -1 || // Kulahub integration\n isFormHasDiviRedirect(formObj) || // Divi contact form\n formAction.indexOf('eocampaign1.com') !== -1 || // EmailOctopus Campaign form\n formAction.indexOf('wufoo.com') !== -1 || // Wufoo form\n formAction.indexOf('publisher.copernica.com') !== -1 || // publisher.copernica\n ( formObj.classList !== undefined &&\n formObj.classList.contains('sp-element-container') ) // Sendpulse form\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * This function detect if the form has DIVI redirect. If so, the form will work as external.\n * @param {HTMLElement} formObj\n * @return {boolean}\n */\nfunction isFormHasDiviRedirect(formObj) {\n let result = false;\n const diviRedirectedSignSet = document.querySelector('div[id^=\"et_pb_contact_form\"]');\n if (\n typeof formObj === 'object' && formObj !== null &&\n diviRedirectedSignSet !== null &&\n diviRedirectedSignSet.hasAttribute('data-redirect_url') &&\n diviRedirectedSignSet.getAttribute('data-redirect_url') !== '' &&\n diviRedirectedSignSet.querySelector('form[class^=\"et_pb_contact_form\"]') !== null\n ) {\n result = formObj === diviRedirectedSignSet.querySelector('form[class^=\"et_pb_contact_form\"]');\n }\n return result;\n}\n\n/**\n * Sending Ajax for checking form data\n * @param {HTMLElement} form\n * @param {HTMLElement} prev\n * @param {HTMLElement} formOriginal\n */\nfunction sendAjaxCheckingFormData(form) {\n // Get visible fields and set cookie\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(form);\n apbct_visible_fields_set_cookie( visibleFields );\n\n const data = {\n 'ct_bot_detector_event_token': apbctLocalStorage.get('bot_detector_event_token'),\n };\n let elems = form.elements;\n elems = Array.prototype.slice.call(elems);\n\n elems.forEach( function( elem, y ) {\n if ( elem.name === '' ) {\n data['input_' + y] = elem.value;\n } else {\n data[elem.name] = elem.value;\n }\n });\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function( result, data, params, obj ) {\n // MooSend spinner deactivate\n apbctMoosendSpinnerToggle(form);\n // hubspot flag\n const isHubSpotEmbedForm = (\n form.hasAttribute('action') &&\n form.getAttribute('action').indexOf('hsforms') !== -1\n );\n if ( result.apbct === undefined || ! +result.apbct.blocked ) {\n // Clear service fields\n for (const el of form.querySelectorAll('input[name=\"apbct_visible_fields\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[value=\"cleantalk_force_ajax_check\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[name=\"ct_no_cookie_hidden_field\"]')) {\n el.remove();\n }\n\n // Klaviyo integration\n if (form.classList !== undefined && form.classList.contains('klaviyo-form')) {\n const cover = document.getElementById('apbct-klaviyo-cover');\n if (cover) {\n cover.remove();\n }\n const btn = form.querySelector('button[type=\"button\"].needsclick');\n if (btn) {\n btn.disabled = false;\n btn.click();\n }\n return;\n }\n\n // MooSend integration\n if ( form.dataset.mailingListId !== undefined ) {\n let submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.remove();\n const parent = form.apbctParent;\n parent.appendChild(form.submitButtonOriginal);\n submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.click();\n return;\n }\n\n // Salesforce integration\n if (form.hasAttribute('action') &&\n (form.getAttribute('action').indexOf('webto.salesforce.com') !== -1)\n ) {\n let submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.remove();\n const parent = form.apbctParent;\n parent.appendChild(form.submitButtonOriginal);\n form.onsubmit = form.onsubmitOriginal;\n submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.click();\n return;\n }\n\n\n if (\n // Active Campaign integration\n form.querySelector('[href*=\"activecampaign\"]') ||\n // Hubspot bounded integration\n isHubSpotEmbedForm\n ) {\n let submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.remove();\n const parent = form.apbctParent;\n parent.appendChild(form.submitButtonOriginal);\n form.onsubmit = form.onsubmitOriginal;\n submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.click();\n return;\n }\n\n const formNew = form;\n form.parentElement.removeChild(form);\n const prev = form.apbctPrev;\n const formOriginal = form.apbctFormOriginal;\n let mauticIntegration = false;\n\n apbctReplaceInputsValuesFromOtherForm(formNew, formOriginal);\n\n // mautic forms integration\n if (formOriginal &&\n typeof formOriginal.id === 'string' &&\n formOriginal.id.indexOf('mautic') !== -1\n ) {\n mauticIntegration = true;\n }\n\n prev.after( formOriginal );\n\n // Clear visible_fields input\n for (const el of formOriginal.querySelectorAll('input[name=\"apbct_visible_fields\"]')) {\n el.remove();\n }\n\n for (const el of formOriginal.querySelectorAll('input[value=\"cleantalk_force_ajax_check\"]')) {\n el.remove();\n }\n\n // Common click event\n let submButton = formOriginal.querySelectorAll('button[type=submit]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n if (mauticIntegration) {\n setTimeout(function() {\n ctProtectExternal();\n }, 1500);\n }\n return;\n }\n\n submButton = formOriginal.querySelectorAll('input[type=submit]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n return;\n }\n\n // ConvertKit direct integration\n submButton = formOriginal.querySelectorAll('button[data-element=\"submit\"]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n return;\n }\n submButton = formOriginal.querySelectorAll('button#ck_subscribe_button');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n return;\n }\n\n // Paypal integration\n submButton = formOriginal.querySelectorAll('input[type=\"image\"][name=\"submit\"]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n }\n }\n if (result.apbct !== undefined && +result.apbct.blocked) {\n ctParseBlockMessage(result);\n // hubspot embed form needs to reload page to prevent forms mishandling\n if (isHubSpotEmbedForm) {\n setTimeout(function() {\n document.location.reload();\n }, 3000);\n }\n }\n },\n });\n}\n\n/**\n * Handle dynamic rendered form\n */\nfunction catchDynamicRenderedForm() {\n const forms = document.getElementsByTagName('form');\n\n catchDynamicRenderedFormHandler(forms);\n\n const frames = document.getElementsByTagName('iframe');\n if ( frames.length > 0 ) {\n for ( let j = 0; j < frames.length; j++ ) {\n if ( frames[j].contentDocument == null ) {\n continue;\n }\n\n const iframeForms = frames[j].contentDocument.forms;\n\n if ( iframeForms.length === 0 ) {\n return;\n }\n\n catchDynamicRenderedFormHandler(iframeForms, frames[j].contentDocument);\n }\n }\n}\n\n/**\n * Handles dynamic rendered forms by attaching an onsubmit event handler to them.\n *\n * @param {HTMLCollection} forms - A collection of form elements to be processed.\n * @param {Document} [documentObject=document] - The document object to use for querying elements.\n */\nfunction catchDynamicRenderedFormHandler(forms, documentObject = document) {\n const neededFormIds = [];\n for (const form of forms) {\n const formIdAttr = form.getAttribute('id');\n if (formIdAttr && formIdAttr.indexOf('hsForm') !== -1) {\n neededFormIds.push(formIdAttr);\n }\n if (formIdAttr && formIdAttr.indexOf('createuser') !== -1 &&\n (form.classList !== undefined && form.classList.contains('ihc-form-create-edit'))\n ) {\n neededFormIds.push(formIdAttr);\n }\n }\n\n for (const formId of neededFormIds) {\n const form = documentObject.getElementById(formId);\n form.apbct_external_onsubmit_prev = form.onsubmit;\n form.onsubmit = sendAjaxCheckingDynamicFormData;\n }\n}\n\n/**\n * Sending Ajax for checking form data on dynamic rendered form\n * @param {HTMLElement} form\n */\nfunction sendAjaxCheckingDynamicFormData(form) {\n form.preventDefault();\n form.stopImmediatePropagation();\n const formEvent = form;\n form = form.target;\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n form.appendChild(forceAction);\n\n // Get visible fields and set cookie\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(form);\n apbct_visible_fields_set_cookie(visibleFields);\n form.append(ctNoCookieConstructHiddenField('hidden'));\n\n const data = {};\n let elems = form.elements;\n elems = Array.prototype.slice.call(elems);\n\n elems.forEach( function( elem, y ) {\n if ( elem.name === '' ) {\n data['input_' + y] = elem.value;\n } else {\n data[elem.name] = elem.value;\n }\n });\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n if ( result.apbct === undefined || ! +result.apbct.blocked ) {\n form.onsubmit = null;\n\n // Clear service fields\n for (const el of form.querySelectorAll('input[name=\"apbct_visible_fields\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[value=\"cleantalk_force_ajax_check\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[name=\"ct_no_cookie_hidden_field\"]')) {\n el.remove();\n }\n\n // Call previous submit action\n if (form.apbct_external_onsubmit_prev instanceof Function) {\n let timerId = setTimeout(function() {\n form.apbct_external_onsubmit_prev.call(form, formEvent);\n }, 500);\n clearTimeout(timerId);\n }\n\n const submButton = form.querySelector('input[type=\"submit\"]');\n if (submButton) {\n submButton.click();\n return;\n }\n }\n\n if (result.apbct !== undefined && +result.apbct.blocked) {\n ctParseBlockMessage(result);\n }\n },\n });\n}\n\n/**\n * Implement jQuery val() function\n * @param {HTMLElement} el\n * @return {HTMLElements}\n */\nfunction apbctVal(el) {\n if (el.options && el.multiple) {\n return el.options\n .filter((option) => option.selected)\n .map((option) => option.value);\n } else if (el.type === 'checkbox' || el.type === 'radio') {\n return el.checked ? el.checked : null;\n } else {\n return el.value;\n }\n}\n\n/**\n * Check form as internal.\n * @param {int} currForm Current form.\n */\nfunction ctCheckInternal(currForm) {\n // Gathering data\n const ctData = {};\n const elems = currForm.elements;\n let key;\n\n for (key in elems) {\n if (elems[key].type !== 'submit' &&\n elems[key].value !== undefined &&\n elems[key].value !== '') {\n ctData[elems[key].name] = currForm.elements[key].value;\n }\n }\n ctData.action = 'ct_check_internal';\n\n // AJAX Request\n apbct_public_sendAJAX(\n ctData,\n {\n url: ctPublicFunctions._ajax_url,\n callback: function(data) {\n if (data.success === true) {\n currForm.origSubmit();\n } else {\n alert(data.data);\n return false;\n }\n },\n },\n );\n}\n\ndocument.addEventListener('DOMContentLoaded', function() {\n let ctCurrAction = '';\n let ctCurrForm = '';\n\n if ( ! +ctPublic.settings__forms__check_internal ) {\n return;\n }\n\n setTimeout(() => {\n for ( let i = 0; i < document.forms.length; i++ ) {\n if ( typeof(document.forms[i].action) == 'string' ) {\n ctCurrForm = document.forms[i];\n ctCurrAction = ctCurrForm.action;\n if (\n ctCurrAction.indexOf('https?://') !== null && // The protocol is obligatory\n ctCurrAction.match(ctPublic.blog_home + '.*?\\.php') !== null && // Main check\n ! ctCheckInternalIsExcludedForm(ctCurrAction) // Exclude WordPress native scripts from processing\n ) {\n const formClone = ctCurrForm.cloneNode(true);\n ctCurrForm.parentNode.replaceChild(formClone, ctCurrForm);\n\n formClone.origSubmit = ctCurrForm.submit;\n formClone.submit = null;\n\n formClone.addEventListener('submit', function(event) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n ctCheckInternal(event.target);\n return false;\n });\n }\n }\n }\n }, 500);\n});\n\n/**\n * Check by action to exclude the form checking\n * @param {string} action\n * @return {boolean}\n */\nfunction ctCheckInternalIsExcludedForm(action) {\n // An array contains forms action need to be excluded.\n const ctInternalScriptExclusions = [\n 'wp-login.php', // WordPress login page\n 'wp-comments-post.php', // WordPress Comments Form\n ];\n\n return ctInternalScriptExclusions.some((item) => {\n return action.match(new RegExp(ctPublic.blog_home + '.*' + item)) !== null;\n });\n}\n"],"names":["ApbctCore","ajax_parameters","restParameters","selector","elements","eventCallback","eventSelector","event","constructor","this","select","HTMLCollection","Array","prototype","slice","call","document","querySelectorAll","deselect","addElement","elemToAdd","push","elem","reduce","css","style","getRaw","styleName","Object","hasOwn","DomStyleName","replace","group","toUpperCase","let","i","length","computedStyle","getComputedStyle","Number","hide","prop","display","show","addClass","classList","add","className","removeClass","remove","toggleClass","toggle","ajax","ajaxParameters","ApbctAjax","rest","ApbctRest","on","args","addEventListener","onChecker","bind","target","querySelector","stopPropagation","ready","callback","change","attr","attrName","outputValue","getAttribute","propName","value","html","val","data","name","is","filter","isElem","elemToCheck","match","newlyCreatedElement","createElement","Boolean","HTMLElement","HTMLUnknownElement","indexOf","tagName","toLowerCase","isWithoutSelector","splice","parent","parentElement","parents","children","siblings","current","after","content","append","fadeIn","time","opacity","last","Date","tick","window","requestAnimationFrame","setTimeout","fadeOut","ctProcessError","msg","url","log","ctJsErrors","message","err","file","fileName","ln","lineNumber","lineNo","col","columnNumber","columnNo","stacktrace","stack","cause","JSON","stringify","errorObj","error","location","href","userAgent","navigator","errArray","localStorage","getItem","parse","setItem","selectActualNonce","defaultNonce","ctPublicFunctions","hasOwnProperty","_fresh_nonce","data__ajax_type","_ajax_nonce","_rest_nonce","apbct","params","Math","floor","random","onerror","exception","filterWords","ApbctXhr","xhr","XMLHttpRequest","method","async","user","password","button","spinner","progressbar","context","onErrorCallback","responseType","headers","timeout","methods_to_convert_data_to_URL","body","http_code","status_text","parameters","key","prepare","keys","deleteDoubleJSONEncoding","convertData","console","open","setHeaders","onreadystatechange","isWpNonceError","getFreshNonceAndRerunXHR","onReadyStateChange","onload","onLoad","onprogress","onProgress","onError","ontimeout","onTimeout","send","setAttribute","cursor","complete","status","statusText","removeAttribute","on_ready_state_change","on_progress","response","restErrror","ajaxErrror","readyState","initialRequestParams","noncePrev","spbc_remote_call_action","plugin_name","nonce_prev","initial_request_params","notJson","host_url","freshNonceResult","newRequestParams","undefined","wpnonce","httpCode","additionalMsg","errorString","errorOutput","errorMsg","headerName","setRequestHeader","convertDataToURL","convertDataToBody","paramsAppendix","URLSearchParams","toString","paramsPrefix","dataKey","FormData","object","objectKey","parsedValue","super","default_route","_rest_url","route","nonce","X-WP-Nonce","defineProperty","property","enumerable","configurable","writable","ApbctFormDecorator","getElements","setListeners","regexId","regexClass","matchingElements","setDecorationBackground","from","test","element","id","forEach","flagLeft","flagRight","flagWrap","blockForms","classHeaderWrapper","endPosition","classTemplate","substring","blockForm","clickX","flagLeftWidth","flagLeftHeight","flagRightWidth","flagRightHeight","offsetX","clickY","offsetY","parseFloat","width","height","addClicks","getSelection","addSelected","mouseX","mouseY","trackMouseMovement","ctFormDecorationMouseData","clicks","selected","firstMovement","timeDiff","mouseMovements","timestamp","now","index","lastMovement","hovering","ctSetCookie","cookies","expires","listOfCookieNamesToForceAlt","skipAlt","data__cookies_type","forcedAltCookiesSet","item","apbctLocalStorage","set","ctSetAlternativeCookie","ctPublic","force_alt_cookies","forceAltCookies","ctNoCookieAttachHiddenFieldsToForms","_expires","ctSecure","protocol","cookie","cookiePrefix","encodeURIComponent","ctDetectForcedAltCookiesForms","ninjaFormsSign","elementorUltimateAddonsRegister","smartFormsSign","jetpackCommentsForm","cwginstockForm","userRegistrationProForm","etPbDiviSubscriptionForm","fluentBookingApp","bloomPopup","pafeFormsFormElementor","otterForm","bookingPress","isArray","getJavascriptClientData","e","apbct_site_referer","apbct_force_alt_cookies","apbct_pixel_url","decodeURIComponent","apbct_public_sendREST","apbct_public_sendAJAX","action","beforeSend","ctGetCookie","matches","RegExp","ctDeleteCookie","cookieName","obj","_params","callback_context","callback_params","silent","no_nonce","_ajax_url","no_cache","apbctGenerateUniqueID","substr","get","storageValue","json","isJson","objToSave","getTime","isAlive","maxLifetime","isSet","delete","removeItem","getCleanTalkData","apbctSessionStorage","sessionStorage","apbctOnAnimationStart","animationName","apbctAutocomplete","apbctCancelAutocomplete","apbctOnInput","inputType","hasAttribute","CustomEvent","bubbles","cancelable","detail","dispatchEvent","ApbctForceProtection","wrappers","findWrappers","checkBot","event_javascript_data","post_url","referrer","checkBotCallback","result","decodeForms","allow","showMessageForBot","form","wrapper","dataset","encodedForm","outerHTML","atob","apbctForceProtect","settings__forms__force_protection","data__key_is_ok","apbct_attach_event_handler","CTTypoData","fieldData","isAutoFill","isUseBuffer","speedDelta","firstKeyTimestamp","lastKeyTimestamp","lastDelta","countOfKey","fields","gatheringFields","field","assign","currentDelta","abs","ctDate","ctTimeMs","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","ctCheckedEmails","ctCheckedEmailsExist","ctMouseReadInterval","ctMouseWriteDataInterval","tokenCheckerIntervalId","botDetectorLogLastUpdate","botDetectorLogEventTypesCollected","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","ctFunctionFirstKey","ctKeyStopStopListening","ctFunctionMouseMove","cronFormsHandler","data__bot_detector_enabled","data__frontend_data_log_enabled","sendBotDetectorLogToAltSessions","setInterval","ctSetMouseMoved","round","clientY","clientX","ctMouseStopData","cronStartTimeout","restartFieldsListening","restartBotDetectorEventTokenAttach","interval","currentLog","needsSaveLogToAltSessions","log_last_update","records","currentType","frontend_data","js_event","includes","token","doAttach","getElementsByClassName","getElementById","setEventTokenField","clearInterval","checkEmail","currentEmail","email","checkEmailExist","hint","getResultCheckEmailExist","viewCheckEmailExist","envelope","text_result","state","textResult","inputEmail","top","getBoundingClientRect","ctEmailExistSetElementsPositions","onmouseover","textContent","color","onmouseout","left","right","offsetHeight","envelopeWidth","offsetWidth","ctIsDrawPixel","pixel__enabled","ctSetPixelImg","pixelUrl","insertedImg","ctSetPixelImgFromLocalstorage","ctGetPixelUrl","localStoragePixelUrl","String","ctSetHasScrolled","ctStartFieldsListening","forms","ctGetPageForms","handled_fields","handledFormFields","type","ctFunctionHasInputFocused","ctFunctionHasKeyUp","ctStopFieldsListening","eventName","functionName","ctSetHasInputFocused","ctSetHasKeyUp","apbctPrepareBlockForAjaxForms","ctPrepareBlockMessage","responseText","ctParseBlockMessage","jQuery","ajaxComplete","settings","startForcedAltEventTokenChecker","eventToken","apbct_ready","botDetectorLocalStorage","wc_ajax_add_to_cart","apbctCheckAddToCartByGet","sessionID","URL","host","apbctWriteReferrersToSessionStorage","cookiesType","initCookies","ctTypoData","getTimezoneOffset","apbctGetScreenInfo","webdriver","cookiesArray","split","trim","pixel__setting","pixel__url","data__email_check_before_post","data__email_check_exist_post","tokenForForceAlt","encodedEmailNodes","settings__data__bot_detector_enabled","ctAjaxSetupAddCleanTalkDataBeforeSendAjax","ctAddWCMiddlewares","hiddenInput","visibleFieldsToInput","ctCheckHiddenFieldsExclusions","apbct_visible_fields","visibleFields","removeChild","apbct_collect_visible_fields","btoa","onsubmit_prev","onsubmit","ctFormIndex","apbct_visible_fields_set_cookie","isFormThatNeedCatchXhr","noCookieData","getNoCookieData","defaultSend","Function","ctOnsubmitPrevCallExclude","ctFillDecodedEmailHandler","_form","settings__forms__search_test","apbctSearchPrevOnsubmit","ctSearchFormOnSubmitHandler","apbctCatchXmlHttpRequest","settings__comments__form_decoration","settings__sfw__anti_crawler","checkBotDetectorExist","botDetectorIntervalSearch","bot_detector_event_token","wp","apiFetch","use","options","next","requests","path","ct_no_cookie_hidden_field","originalSend","addidionalCleantalkData","apply","apbctAjaxSetImportantParametersOnCacheExist","cacheExist","ajaxSetup","sourceSign","contains","targetForm","honeyPotField","hpValue","hpEventId","callBack","parsedCookies","cleantalkStorageDataArray","getCleanTalkStorageDataArray","eventTokenLocalStorage","preventDefault","parentNode","HTMLFormElement","submit","apbct_search_form__honeypot_value","apbct_search_form__honeypot_id","ct_bot_detector_event_token","warn","encodedEmailNodesIsMixed","popupHeaderWrapper","popupTextWrapper","popupTextWaiting","popupTextDecoding","encoderPopup","innerHTML","wl_brandname","waitingPopup","popupHeader","innerText","apbctSetEmailDecoderPopupAnimation","apbctAjaxEmailDecodeBulk","animationElements","animationWrapper","apbctEEAnimationDogOne","clickSource","encodedEmails","encodedEmailsCollection","apbctTooltip","originalString","emailEncoderPassKey","apbctEmailEncoderCallbackBulk","res","resetEncodedNodes","ctShowDecodeComment","success","is_allowed","popup","currentResultData","row","encoded_email","decoded_email","firstNode","selectableEmail","title","secondNode","buttonWrapper","fillDecodedEmails","click","comment","decodingResult","encodedEmail","baseElementContent","encodedEmailTextInsideMailto","el","ctProcessDecodedDataResult","commonCookies","resultDataJson","ct_checked_emails","ct_checked_emails_exist","ct_checkjs","ct_fkp_timestamp","ct_pointer_data","ct_ps_timestamp","ct_screen_info","ct_timezone","ctMouseMovedLocalStorage","ctHasScrolledLocalStorage","ctCookiesTypeLocalStorage","apbctPageHits","apbctPrevReferer","apbctSiteReferer","ctJsErrorsLocalStorage","ctPixelUrl","apbctHeadless","ctBotDetectorFrontendDataLog","ctMouseMovedCookie","ctHasScrolledCookie","ctCookiesTypeCookie","ctCookiesPixelUrl","apbctHeadlessNative","ct_mouse_moved","ct_has_scrolled","ct_cookies_type","apbct_headless","ct_bot_detector_frontend_data_log","apbct_page_hits","apbct_prev_referer","apbct_ct_js_errors","removeDoubleJsonEncoding","targetElement","ctFillDecodedEmail","popupText","inputs","inputsVisible","inputsVisibleCount","inputsInvisible","inputsInvisibleCount","inputsWithDuplicateNames","isNaN","visibility","visible_fields","visible_fields_count","invisible_fields","invisible_fields_count","visibleFieldsCollection","formId","collection","apbct_js_keys__set_input_value","js_key","fullWidth","documentElement","scrollWidth","fullHeight","max","scrollHeight","clientHeight","visibleWidth","clientWidth","visibleHeight","blocked","cleantalkModal","loaded","stop_script","stop","ctSetPixelUrlLocalstorage","ajaxPixelUrl","ctNoCookieConstructHiddenField","formDecorationMouseData","noCookieDataLocal","noCookieDataSession","noCookieDataTypo","typo","noCookieDataFromDecoration","form_decoration_mouse_data","ctGetHiddenFieldExclusionsType","no_cookie","ncFieldExclusionsSign","data__visible_fields_required","hiddenFieldType","formAction","j","ct_checkjs_key","defaultFetch","fetch","checkFormsExistForCatching","isFormThatNeedCatch","formClasses","classExists","classForm","sessionCurrentPage","loading","opened","opening","ignoreURLConvert","load","apbct_admin_sendAJAX","renderCss","cssStr","styles","overlayCss","z-index","position","background","justify-content","align-items","innerCss","padding","border","border-radius","box-shadow","closeCss","box-sizing","closeCssBefore","transform","closeCssAfter","bodyCss","overflow","cleantalkModalStyle","overlay","inner","close","urlRegex","ctProtectExternal","cleantalk_hidden_action","cleantalk_hidden_method","ctMethod","currentForm","formIsExclusion","isIntegratedForm","apbctProcessExternalForm","mailingListId","apbctProcessExternalFormByFakeButton","tmp","hostname","ctAction","appendChild","apbctProcessIframes","exclusionAction","exclusionId","exclusionClass","foundClass","formClass","apbctGetFormClass","exclusionRole","formRole","table","frames","getElementsByTagName","contentDocument","iframeForms","y","iterator","documentObject","cleantalkPlaceholder","prev","insertBefore","previousSibling","formHtml","formOriginal","placeholder","forceAction","firstElementChild","reUseCurrentForm","mailerliteDetectedClass","apbctPrev","apbctFormOriginal","mailerliteClass","mailerliteSubmitButton","sendAjaxCheckingFormData","currentTarget","submitButtonOriginal","onsubmitOriginal","submitButtonHtml","apbctParent","apbctMoosendSpinnerToggle","buttonElement","submitText","zIndex","apbctReplaceInputsValuesFromOtherForm","formSource","formTarget","inputsSource","inputsTarget","isFormHasDiviRedirect","elemSource","elemTarget","checked","apbctVal","ctProtectKlaviyoForm","klaviyoForms","apbctProcessExternalFormKlaviyo","cover","btn","disabled","onclick","ctProtectOutsideIframe","iframes","iframe","src","ctProtectOutsideIframeHandler","ctTrpLocalize","ctTrpIsAdminCommentsList","ctTrpAdminLocalize","theRealPerson","themesCommentsSelector","trpComments","trpLayout","trpImage","trpDescription","trpDescriptionHeading","trpDescriptionContent","trpDescriptionContentSpan","learnMoreLink","pagenow","imgPersonUrl","phrases","trpHeading","trpContent1","trpContent2","trpContentLink","text","trpContentLearnMore","hideTimeout","badge","nextElementSibling","clearTimeout","selection","onSelectionChange","settings__forms__check_external","catchDynamicRenderedForm","catchNextendSocialLoginForm","ctProtectOutsideIframeCheck","currentDiv","preloader","botDetectorToken","blockNSL","blockBtnNextendSocialLogin","parentBtnsNSL","childBtnsNSL","ctCheckAjax","allowAjaxNextendSocialLogin","childBtn","forbiddenAjaxNextendSocialLogin","elemForMsg","insertAdjacentElement","getElementsByName","formObj","firstChild","diviRedirectedSignSet","elems","isHubSpotEmbedForm","submitButton","formNew","mauticIntegration","submButton","reload","catchDynamicRenderedFormHandler","neededFormIds","formIdAttr","apbct_external_onsubmit_prev","sendAjaxCheckingDynamicFormData","stopImmediatePropagation","formEvent","timerId","multiple","option","map","ctCheckInternal","currForm","ctData","alert","origSubmit","ctCheckInternalIsExcludedForm","some","blog_home","ctCurrAction","ctCurrForm","settings__forms__check_internal","formClone","cloneNode","replaceChild"],"mappings":"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"}