{"version":3,"file":"apbct-public-bundle.min.js","sources":["apbct-public-bundle.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 var 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(ct_js_errors, 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 * 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 console.log('%cXHR%c started', 'color: red; font-weight: bold;', 'color: grey; font-weight: normal;');\n\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 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 * @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\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 super(args[0]);\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 args.url = ApbctRest.default_route + args.route;\n args.headers = {\n 'X-WP-Nonce': ctPublicFunctions._rest_nonce,\n };\n super(args);\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_antiflood_passed',\n 'apbct_email_encoder_passed',\n ];\n\n if ( typeof cookies === 'string' && typeof value === 'string' || typeof value === 'number') {\n // eslint-disable-next-line no-unused-vars\n var skipAlt = cookies === 'ct_pointer_data';\n cookies = [[cookies, value, expires]];\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], encodeURIComponent(item[1]));\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 ) {\n // do it just once\n\n if ( typeof skipAlt === 'undefined' || !skipAlt ) {\n ctSetAlternativeCookie(cookies, {forceAltCookies: true});\n }\n } else {\n ctNoCookieAttachHiddenFieldsToForms();\n }\n\n // Using traditional cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'native' ) {\n cookies.forEach( function(item) {\n var expires = typeof item[2] !== 'undefined' ? 'expires=' + expires + '; ' : '';\n var 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' && typeof skipAlt === 'undefined' || ! 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 smartFormsSign = document.querySelectorAll('script[id*=\"smart-forms\"]').length > 0;\n\n ctPublic.force_alt_cookies = smartFormsSign || ninjaFormsSign;\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 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 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 },\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 var 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 var 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\n if (typeof (data) === 'string') {\n if ( ! _params['no_nonce'] ) {\n _params['data'] = _params['data'] + '&_ajax_nonce=' + ctPublicFunctions._ajax_nonce;\n }\n _params['data'] = _params['data'] + '&no_cache=' + Math.random();\n } else {\n if ( ! _params['no_nonce'] ) {\n _params['data']._ajax_nonce = ctPublicFunctions._ajax_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 return json.hasOwnProperty(property) ? JSON.parse(json[property]) : json;\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= 50) {\n ctMouseStopData();\n }\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 var currentEmail = e.target.value;\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 {string} pixelUrl\n */\nfunction ctSetPixelImg(pixelUrl) {\n ctSetCookie('apbct_pixel_url', pixelUrl);\n if ( +ctPublic.pixel__enabled ) {\n if ( ! document.getElementById('apbct_pixel') ) {\n let insertedImg = document.createElement('img');\n insertedImg.setAttribute('alt', '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 * 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 ctSetPixelImg(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 // 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 // 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 }\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}\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}\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 // 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 ctSetCookie('ct_has_input_focused', 'true');\n apbctLocalStorage.set('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 ctSetCookie('ct_has_key_up', 'true');\n apbctLocalStorage.set('ct_has_key_up', true);\n }\n}\n\n/**\n * ctPreloadLocalStorage\n */\nfunction ctPreloadLocalStorage() {\n if (ctPublic.data__to_local_storage) {\n let data = Object.entries(ctPublic.data__to_local_storage);\n data.forEach(([key, value]) => {\n apbctLocalStorage.set(key, value);\n });\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 * Ready function\n */\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_ready() {\n ctPreloadLocalStorage();\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 // set apbct_prev_referer\n apbctSessionStorage.set('apbct_prev_referer', document.referrer, false);\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 ctStartFieldsListening();\n // 2nd try to add listeners for delayed appears forms\n setTimeout(ctStartFieldsListening, 1000);\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', ct_date.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', ct_date.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 var cookiesArray = document.cookie.split(';');\n if ( cookiesArray.length !== 0 ) {\n for ( let i = 0; i < cookiesArray.length; i++ ) {\n var currentCookie = cookiesArray[i].trim();\n var 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 ( +ctPublic.pixel__enabled ) {\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 (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 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 for (let i = 0; i < document.forms.length; i++) {\n var form = document.forms[i];\n\n // Exclusion for forms\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.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 ) {\n continue;\n }\n\n var 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 var 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 // Call previous submit action\n if (event.target.onsubmit_prev instanceof Function) {\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 if (\n encodedEmailNodes[i].parentElement.href ||\n encodedEmailNodes[i].parentElement.parentElement.href\n ) {\n // Skip listening click on hyperlinks\n continue;\n }\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 ctPublic.data__cookies_type === 'none' &&\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 _form.apbctSearchPrevOnsubmit = _form.onsubmit;\n _form.onsubmit = (e) => {\n const noCookie = _form.querySelector('[name=\"ct_no_cookie_hidden_field\"]');\n if ( noCookie !== null ) {\n e.preventDefault();\n const callBack = () => {\n if (_form.apbctSearchPrevOnsubmit instanceof Function) {\n _form.apbctSearchPrevOnsubmit();\n } else {\n HTMLFormElement.prototype.submit.call(_form);\n }\n };\n\n const parsedCookies = atob(noCookie.value.replace('_ct_no_cookie_data_', ''));\n\n if ( parsedCookies.length !== 0 ) {\n ctSetAlternativeCookie(\n parsedCookies,\n {callback: callBack, onErrorCallback: callBack, forceAltCookies: true},\n );\n } else {\n callBack();\n }\n }\n };\n }\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\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 let waitingPopup = document.createElement('div');\n waitingPopup.setAttribute('class', 'apbct-popup');\n waitingPopup.setAttribute('id', 'apbct_popup');\n let popupText = document.createElement('p');\n popupText.setAttribute('id', 'apbct_popup_text');\n popupText.style.color = 'black';\n popupText.innerText = 'Please wait while CleanTalk is decoding the email addresses.';\n waitingPopup.append(popupText);\n document.body.append(waitingPopup);\n } else {\n encoderPopup.setAttribute('style', 'display: inherit');\n document.getElementById('apbct_popup_text').innerHTML =\n 'Please wait while CleanTalk is decoding the email addresses.';\n }\n\n apbctAjaxEmailDecodeBulk(event, ctPublic.encodedEmailNodes, clickSource);\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', '1');\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', '1');\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 for (let i = 0; i < encodedEmailNodes.length; i++) {\n // chek what is what\n let currentResultData;\n result.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 break;\n }\n // handler for mailto\n if (\n typeof encodedEmailNodes[i].href !== 'undefined' &&\n encodedEmailNodes[i].href.indexOf('mailto:') === 0) {\n let encodedEmail = encodedEmailNodes[i].href.replace('mailto:', '');\n let baseElementContent = encodedEmailNodes[i].innerHTML;\n encodedEmailNodes[i].innerHTML =\n baseElementContent.replace(encodedEmail, currentResultData.decoded_email);\n encodedEmailNodes[i].href = 'mailto:' + currentResultData.decoded_email;\n }\n // fill the nodes\n ctProcessDecodedDataResult(currentResultData, encodedEmailNodes[i]);\n // remove listeners\n encodedEmailNodes[i].removeEventListener('click', ctFillDecodedEmailHandler);\n }\n // popup remove\n let popup = document.getElementById('apbct_popup');\n if (popup !== null) {\n document.body.classList.remove('apbct-popup-fade');\n popup.setAttribute('style', 'display:none');\n // click on mailto if so\n if (ctPublic.encodedEmailNodesIsMixed) {\n clickSource.click();\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/**\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.apbct_headless = !!ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_headless');\n resultDataJson.apbct_pixel_url = ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_pixel_url');\n resultDataJson.ct_checked_emails = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checked_emails');\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\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\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_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 (\n typeof (commonCookies) === 'object' &&\n commonCookies !== []\n ) {\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 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\nif (typeof jQuery !== 'undefined') {\n // Capturing responses and output block message for unknown AJAX forms\n jQuery(document).ajaxComplete(function(event, xhr, settings) {\n if (xhr.responseText && xhr.responseText.indexOf('\"apbct') !== -1) {\n try {\n // eslint-disable-next-line no-unused-vars\n let response = JSON.parse(xhr.responseText);\n } catch (e) {\n console.log(e.toString());\n return;\n }\n ctParseBlockMessage(response);\n }\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 let noCookieDataLocal = apbctLocalStorage.getCleanTalkData();\n let noCookieDataSession = apbctSessionStorage.getCleanTalkData();\n let noCookieData = {...noCookieDataLocal, ...noCookieDataSession};\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 * @return {boolean|*}\n */\nfunction ctGetPageForms() {\n let forms = document.forms;\n if (forms) {\n return forms;\n }\n return false;\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctNoCookieFormIsExcludedFromNcField(form) {\n // ajax search pro exclusion\n let ncFieldExclusionsSign = form.parentNode;\n if (ncFieldExclusionsSign && ncFieldExclusionsSign.classList.contains('proinput')) {\n return 'ajax search pro exclusion';\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 // 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\n if ( ctNoCookieFormIsExcludedFromNcField(document.forms[i]) ) {\n return;\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 // add new set\n document.forms[i].append(ctNoCookieConstructHiddenField());\n } else if (typeof ctPublic !== 'undefined' &&\n ctPublic.settings__forms__search_test === '1' &&\n (\n document.forms[i].getAttribute('id') === 'searchform' ||\n (\n document.forms[i].getAttribute('class') !== null &&\n document.forms[i].getAttribute('class').indexOf('search-form') !== -1) ||\n (\n document.forms[i].getAttribute('role') !== null &&\n document.forms[i].getAttribute('role').indexOf('search') !== -1\n )\n )\n ) {\n document.forms[i].append(ctNoCookieConstructHiddenField('submit'));\n }\n }\n }\n}\n\nconst defaultFetch = window.fetch;\nconst defaultSend = XMLHttpRequest.prototype.send;\n\nif (document.readyState !== 'loading') {\n checkFormsExistForCatching();\n checkFormsExistForCatchingXhr();\n} else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', checkFormsExistForCatching);\n apbct_attach_event_handler(document, 'DOMContentLoaded', checkFormsExistForCatchingXhr);\n}\n\n/**\n * checkFormsExistForCatching\n */\nfunction checkFormsExistForCatching() {\n setTimeout(function() {\n if (isFormThatNeedCatch()) {\n window.fetch = function(arguments) {\n if (arguments &&\n arguments[0] &&\n typeof arguments[0].includes === 'function' &&\n arguments[0].includes('/wp-json/metform/')\n ) {\n let noCookieData = getNoCookieData();\n\n if (arguments && arguments[1] && arguments[1].body) {\n arguments[1].body.append('ct_no_cookie_hidden_field', noCookieData);\n }\n }\n\n return defaultFetch.apply(window, arguments);\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 * checkFormsExistForCatchingXhr\n */\nfunction checkFormsExistForCatchingXhr() {\n setTimeout(function() {\n if (isFormThatNeedCatchXhr()) {\n window.XMLHttpRequest.prototype.send = function(data) {\n let noCookieData = getNoCookieData();\n noCookieData = 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData + '&';\n\n defaultSend.call(this, noCookieData + data);\n };\n }\n }, 1000);\n}\n\n/**\n * @return {boolean}\n */\nfunction isFormThatNeedCatchXhr() {\n if (document.querySelector('div.elementor-widget[title=\\'Login/Signup\\']') != null) {\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/* Cleantalk Modal object */\nlet cleantalkModal = {\n\n // Flags\n loaded: false,\n loading: false,\n opened: false,\n opening: false,\n\n // Methods\n load: function( action ) {\n if ( ! this.loaded ) {\n this.loading = true;\n 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 var content = document.createElement( 'div' );\n if ( this.loaded ) {\n var urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n var serviceContentRegex = /.*\\/inc/g;\n if (serviceContentRegex.test(this.loaded)) {\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\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 if (typeof(currentForm.action) == 'string') {\n // skip excluded forms\n if ( formIsExclusion(currentForm)) {\n continue;\n }\n\n // Ajax checking for the integrated forms\n if ( isIntegratedForm(currentForm) ) {\n apbctProcessExternalForm(currentForm, i, document);\n\n // Common flow - modify form's action\n } else if (currentForm.action.indexOf('http://') !== -1 ||\n currentForm.action.indexOf('https://') !== -1) {\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 }\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 ];\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 ];\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 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 const formClass = currentForm.getAttribute('class');\n if ( formClass !== null && typeof formClass !== 'undefined' && formClass.indexOf(exclusionClass) !== -1 ) {\n result = true;\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 * 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 // skip excluded forms\n if ( formIsExclusion(currentForm)) {\n return;\n }\n\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 if ( mailerliteDetectedClass ) {\n const mailerliteSubmitButton = documentObject.querySelector('form.' + mailerliteDetectedClass)\n .querySelector('button[type=\"submit\"]');\n if ( mailerliteSubmitButton !== undefined ) {\n mailerliteSubmitButton.click(function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(event.currentTarget);\n });\n }\n } else {\n documentObject.forms[iterator].onsubmit = function( event ) {\n event.preventDefault();\n\n const prev = apbct_prev(event.currentTarget);\n const form_original = event.currentTarget.cloneNode(true);\n\n sendAjaxCheckingFormData(event.currentTarget);\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 inputsSource.forEach((elemSource) => {\n inputsTarget.forEach((elemTarget) => {\n if (elemSource.outerHTML === elemTarget.outerHTML) {\n elemTarget.value = apbctVal(elemSource);\n }\n });\n });\n}\n\nwindow.onload = function() {\n if ( ! +ctPublic.settings__forms__check_external ) {\n return;\n }\n\n setTimeout(function() {\n ctProtectExternal();\n catchDynamicRenderedForm();\n }, 1500);\n};\n\n/**\n * Checking the form integration\n * @param {HTMLElement} formObj\n * @return {boolean}\n */\nfunction isIntegratedForm(formObj) {\n const formAction = formObj.action;\n const formId = formObj.getAttribute('id') !== null ? formObj.getAttribute('id') : '';\n\n if (\n formAction.indexOf('activehosted.com') !== -1 || // ActiveCampaign form\n formAction.indexOf('app.convertkit.com') !== -1 || // ConvertKit form\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('webto.salesforce.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 ) {\n return true;\n }\n\n return false;\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, prev, formOriginal) {\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 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 if ( result.apbct === undefined || ! +result.apbct.blocked ) {\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.id.indexOf('mautic') !== -1) {\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\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 }\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 * Process dynamic rendered form\n * @param {HTMLElements} forms\n * @param {HTMLElement} documentObject\n */\nfunction catchDynamicRenderedFormHandler(forms, documentObject = document) {\n const neededFormIds = [];\n for (const form of forms) {\n if (form.id.indexOf('hsForm') !== -1) {\n neededFormIds.push(form.id);\n }\n if (form.id.indexOf('createuser') !== -1 &&\n (form.classList !== undefined && form.classList.contains('ihc-form-create-edit'))\n ) {\n neededFormIds.push(form.id);\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 setTimeout(function() {\n form.apbct_external_onsubmit_prev.call(form, formEvent);\n }, 500);\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 {\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","propName","value","html","val","data","name","is","filter","isElem","elemToCheck","match","newlyCreatedElement","createElement","Boolean","HTMLElement","HTMLUnknownElement","indexOf","isRegisteredTagName","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","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","ct_js_errors","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","console","prepare","keys","deleteDoubleJSONEncoding","convertData","open","setHeaders","onreadystatechange","onReadyStateChange","onload","onLoad","onprogress","onProgress","onError","ontimeout","onTimeout","send","setAttribute","cursor","complete","status","statusText","removeAttribute","on_ready_state_change","on_progress","response","httpCode","additionalMsg","errorString","errorOutput","errorMsg","headerName","setRequestHeader","convertDataToURL","convertDataToBody","paramsAppendix","URLSearchParams","toString","paramsPrefix","dataKey","FormData","object","objectKey","parsedValue","super","default_route","ctPublicFunctions","_rest_url","route","X-WP-Nonce","_rest_nonce","ctSetCookie","cookies","expires","listOfCookieNamesToForceAlt","skipAlt","data__cookies_type","forcedAltCookiesSet","forEach","item","apbctLocalStorage","set","encodeURIComponent","ctSetAlternativeCookie","ctPublic","force_alt_cookies","forceAltCookies","ctNoCookieAttachHiddenFieldsToForms","ctSecure","protocol","cookie","cookiePrefix","ctDetectForcedAltCookiesForms","ninjaFormsSign","smartFormsSign","isArray","getJavascriptClientData","e","apbct_force_alt_cookies","data__ajax_type","apbct_public_sendREST","apbct_public_sendAJAX","action","notJson","ctGetCookie","matches","RegExp","decodeURIComponent","undefined","ctDeleteCookie","cookieName","obj","_params","callback_context","callback_params","silent","no_nonce","_ajax_url","_ajax_nonce","no_cache","apbctGenerateUniqueID","substr","get","property","storageValue","json","hasOwnProperty","isJson","objToSave","timestamp","getTime","isAlive","maxLifetime","isSet","delete","removeItem","getCleanTalkData","apbctSessionStorage","sessionStorage","ct_date","ctTimeMs","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","ctCheckedEmails","apbct_attach_event_handler","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","ctMouseReadInterval","ctMouseWriteDataInterval","ctFunctionFirstKey","ctKeyStopStopListening","ctFunctionMouseMove","data__key_is_ok","setInterval","ctSetMouseMoved","round","clientY","clientX","ctMouseStopData","clearInterval","checkEmail","currentEmail","email","result","now","ctSetPixelImg","pixelUrl","pixel__enabled","getElementById","insertedImg","ctGetPixelUrl","localStoragePixelUrl","ctSetHasScrolled","ctStartFieldsListening","forms","ctGetPageForms","handled_fields","handledFormFields","type","ctFunctionHasInputFocused","ctFunctionHasKeyUp","ctStopFieldsListening","eventName","functionName","ctSetHasInputFocused","ctSetHasKeyUp","ctPreloadLocalStorage","data__to_local_storage","entries","apbct_ready","sessionID","referrer","URL","host","cookiesType","initCookies","getTimezoneOffset","apbctGetScreenInfo","webdriver","cookiesArray","split","trim","pixel__setting","pixel__url","data__email_check_before_post","hiddenInput","visibleFieldsToInput","form","data__visible_fields_required","contains","id","apbct_collect_visible_fields","btoa","onsubmit_prev","onsubmit","ctFormIndex","visibleFields","apbct_visible_fields_set_cookie","Function","encodedEmailNodes","ctFillDecodedEmailHandler","_form","settings__forms__search_test","getAttribute","apbctSearchPrevOnsubmit","noCookie","parsedCookies","preventDefault","callBack","HTMLFormElement","submit","atob","encodedEmailNodesIsMixed","encoderPopup","innerHTML","waitingPopup","popupText","color","innerText","apbctAjaxEmailDecodeBulk","clickSource","event_javascript_data","post_url","encodedEmails","encodedEmailsCollection","apbctTooltip","dataset","originalString","apbctEmailEncoderCallbackBulk","res","resetEncodedNodes","ctShowDecodeComment","success","is_allowed","currentResultData","row","encoded_email","encodedEmail","baseElementContent","decoded_email","ctProcessDecodedDataResult","popup","click","comment","element","commonCookies","resultDataJson","apbct_headless","apbct_pixel_url","ct_checked_emails","ct_checkjs","ct_fkp_timestamp","ct_pointer_data","ct_ps_timestamp","ct_screen_info","ct_timezone","ctMouseMovedLocalStorage","ctHasScrolledLocalStorage","ctCookiesTypeLocalStorage","apbctPageHits","apbctPrevReferer","apbctSiteReferer","ctJsErrorsLocalStorage","ctMouseMovedCookie","ctHasScrolledCookie","ctCookiesTypeCookie","ct_mouse_moved","ct_has_scrolled","ct_cookies_type","apbct_page_hits","apbct_prev_referer","apbct_site_referer","apbct_ct_js_errors","removeDoubleJsonEncoding","targetElement","ctFillDecodedEmail","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","offsetHeight","clientHeight","visibleWidth","clientWidth","visibleHeight","ctParseBlockMessage","blocked","dispatchEvent","CustomEvent","bubbles","detail","cleantalkModal","loaded","stop_script","stop","ctSetPixelUrlLocalstorage","ajaxPixelUrl","ctNoCookieConstructHiddenField","inputType","field","noCookieDataLocal","noCookieDataSession","noCookieData","ctNoCookieFormIsExcludedFromNcField","ncFieldExclusionsSign","parentNode","fields","j","outerHTML","readyState","jQuery","ajaxComplete","settings","responseText","defaultFetch","fetch","defaultSend","checkFormsExistForCatching","isFormThatNeedCatch","arguments","includes","getNoCookieData","apply","formClasses","classExists","classForm","checkFormsExistForCatchingXhr","isFormThatNeedCatchXhr","loading","opened","opening","load","apbct_admin_sendAJAX","renderCss","cssStr","styles","overlayCss","z-index","position","top","left","width","height","background","justify-content","align-items","innerCss","padding","border","border-radius","box-shadow","closeCss","right","box-sizing","closeCssBefore","transform","closeCssAfter","bodyCss","overflow","cleantalkModalStyle","overlay","inner","close","test","ctProtectExternal","cleantalk_hidden_action","cleantalk_hidden_method","currentForm","formIsExclusion","isIntegratedForm","apbctProcessExternalForm","tmp","hostname","ctAction","ctMethod","appendChild","apbctProcessIframes","exclusionId","exclusionClass","formClass","exclusionRole","formRole","table","frames","getElementsByTagName","contentDocument","iframeForms","y","iterator","documentObject","cleantalkPlaceholder","prev","insertBefore","previousSibling","formHtml","formOriginal","removeChild","placeholder","forceAction","firstElementChild","reUseCurrentForm","apbctPrev","apbctFormOriginal","mailerliteDetectedClass","mailerliteClasses","mailerliteClass","mailerliteSubmitButton","sendAjaxCheckingFormData","currentTarget","apbct_prev","cloneNode","apbctReplaceInputsValuesFromOtherForm","formSource","formTarget","inputsSource","inputsTarget","elemSource","elemTarget","apbctVal","formObj","formAction","firstChild","elems","formNew","mauticIntegration","el","submButton","catchDynamicRenderedForm","catchDynamicRenderedFormHandler","neededFormIds","apbct_external_onsubmit_prev","sendAjaxCheckingDynamicFormData","stopImmediatePropagation","formEvent","options","multiple","option","selected","map","ctCheckInternal","currForm","ctData","alert","origSubmit","ctCheckInternalIsExcludedForm","some","blog_home","settings__forms__check_external","ctCurrAction","ctCurrForm","settings__forms__check_internal","formClone","replaceChild"],"mappings":"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"}