{"version":3,"file":"static/js/452.da0f2ae9.js","sources":["webpack://@jotforminc/form-widgets/../../libs/translation/src/hof.js","webpack://@jotforminc/form-widgets/../../libs/translation/src/domHelper.js","webpack://@jotforminc/form-widgets/../../libs/translation/src/Translation.js","webpack://@jotforminc/form-widgets/../../libs/translation/src/constants/index.js","webpack://@jotforminc/form-widgets/../../libs/translation/src/utils.js","webpack://@jotforminc/form-widgets/../../libs/translation/src/index.js","webpack://@jotforminc/form-widgets/../../libs/translation/src/global.js"],"sourcesContent":["import axios from 'axios';\nimport isNil from 'lodash/isNil';\n\nimport { encodeUsedTranslations, unlocalizeOriginHref } from './utils';\nimport { partialTranslations, DEFAULT_LANGUAGE } from './constants';\n\nexport const prepareT = translation => function t(str, params = {}) {\n if (!str) {\n return str;\n }\n if (typeof str !== 'string') {\n return str;\n }\n\n if ((global?.window?.location?.href || '')?.includes('rawTranslationTextMode=true')) {\n return str;\n }\n\n let translated = str;\n try {\n if (typeof translation.translate === 'function') {\n translated = translation.translate(str, params);\n } else if (typeof translation.t === 'function') {\n translated = translation.t(str, params);\n }\n if (typeof global?.window?.useTranslationScreenshots !== 'undefined') {\n return str;\n }\n if (translation.currentLocale !== DEFAULT_LANGUAGE && str !== translated && translation.controlMode) {\n return '1';\n }\n } catch (e) {\n console.error('Error on common/translate falling back with original str', e);\n }\n\n const resp = (params.branding21) ? translated.replace(/JotForm/g, 'Jotform') : translated;\n\n return resp;\n};\n\nexport const preapreTtime = translation => function ttime(str, options = {}) {\n const { hour = 'numeric', minute = 'numeric' } = options;\n const formatOptions = { hour, minute };\n let [hourVal, minuteVal] = str.replace('/am|pm/', '').split(':').map(i1 => parseInt(i1, 10)); //eslint-disable-line\n\n if (str.indexOf('pm') > 0) {\n hourVal = hourVal !== 12 ? hourVal + 12 : hourVal;\n } else if (str.indexOf('am') > 0) {\n hourVal = hourVal === 12 ? 0 : hourVal;\n }\n\n const tempDate = new Date();\n tempDate.setHours(hourVal, minuteVal);\n // eslint-disable-next-line no-restricted-globals\n if (isNaN(tempDate.getTime())) {\n return str;\n }\n return tempDate.toLocaleTimeString(translation.currentLocale, formatOptions);\n};\n\nexport const prepareTDate = translation => function tdate(str, options = {}) {\n try {\n const ttime = preapreTtime(translation);\n if (options.timeOnly) {\n return ttime(str, options);\n }\n const dateObj = new Date(str);\n // eslint-disable-next-line no-restricted-globals\n if (isNaN(dateObj.getTime())) {\n return str;\n }\n // Add undesired fields with null values to options object. Ex:{weekday : null}\n const formatOptions = {\n weekday: 'short', year: 'numeric', month: 'short', day: 'numeric'\n };\n if (options && typeof options === 'object') {\n Object.keys(options).forEach(optionName => {\n if (options[optionName] == null) {\n delete formatOptions[optionName];\n } else {\n formatOptions[optionName] = options[optionName];\n }\n });\n }\n return dateObj.toLocaleDateString(translation.currentLocale, formatOptions);\n } catch (err) {\n return str;\n }\n};\n\n// Example usage:\n/*\n translationRenderer('This is an [1[example]] string [2[for]] translation')({\n renderer1: (str) => {str}; // str is \"example\"\n fallback: (str) => {str};\n })\n - Since there is no render function given for second match, fallback function will be used as renderer.\n - Renderer functions can only have 1 parameter, which is sanitized version of delimeter.\n */\nexport const prepareTranslationRenderer = t => function translationRenderer(str, params = {}) {\n if ((global?.window?.location?.href || '')?.includes('rawTranslationTextMode=true')) {\n return () => str;\n }\n const translatedString = t(str, params);\n const getRendererIndex = delimiterStr => {\n const matches = delimiterStr.match(/\\[(\\d+)\\[/);\n if (matches && matches[1]) {\n return matches[1];\n }\n throw new Error(`Delimeter string (${delimiterStr}) format is inappropriate! Correct format is [RENDERER_NUMBER[TEXT]]`);\n };\n\n return renderFunctions => {\n try {\n const matchTemplate = /\\[\\d+\\[.*?\\]{2}/g;\n const replaceTemplate = /\\[(\\d+)\\[|\\]{2}/g;\n const matches = (translatedString && translatedString.match) ? translatedString.match(matchTemplate) : null;\n if (matches && matches.length > 0) {\n const renderers = renderFunctions || {};\n // Set a fallback renderer if it is not given in renderFunctions\n if (typeof renderers.fallback !== 'function') {\n renderers.fallback = i1 => i1;\n }\n // Create an array which includes all render functions\n const matchedStrings = matches.map(matchItem => {\n const currentKey = `renderer${getRendererIndex(matchItem)}`;\n const sanitizedValue = matchItem.replace(replaceTemplate, '');\n if (typeof renderers[currentKey] === 'function') {\n return renderers[currentKey](sanitizedValue);\n }\n return renderers.fallback(sanitizedValue);\n });\n\n return translatedString.split(matchTemplate).map((normStr, index) => (\n typeof matchedStrings[index] !== 'undefined'\n ? [normStr, matchedStrings[index]]\n : [normStr]\n ));\n }\n } catch (err) {\n console.error(err); // eslint-disable-line\n }\n return translatedString;\n };\n};\n\nexport const prepareControlModeChange = translation => function controlModeChange(controlMode) {\n return new Promise((resolve, reject) => {\n try {\n // eslint-disable-next-line no-param-reassign\n translation.controlMode = controlMode;\n resolve({ loaded: true, controlMode });\n } catch (err) {\n reject(new Error(err));\n }\n });\n};\n\nexport const prepareAddTranslationToDictionary = translation => function addTranslationToDictionary(code, translationData) {\n const dictionary = translationData;\n // remove untranslated keys\n const clearedDic = Object.keys(dictionary).reduce((dic, key) => {\n const entry = dictionary[key];\n if (!entry) {\n return dic;\n }\n return Object.assign(dic, { [key]: entry });\n }, {});\n\n if (dictionary) {\n translation.add(code, clearedDic);\n }\n return ({ loaded: true, code });\n};\n\nexport const generateDictionaryURL = ({ path, code = DEFAULT_LANGUAGE }) => {\n const sanitizedCode = code?.length !== 5 ? DEFAULT_LANGUAGE : code;\n return `/js/${path}/locale_${sanitizedCode}.js?${Math.floor((Math.random() * (9999 - 1001)) + 1000)}`;\n};\n\nexport const loadDictionaryViaTag = ({ code, path }) => new Promise((resolve, reject) => {\n try {\n const tmpScriptTag = global.document.createElement('script');\n tmpScriptTag.src = generateDictionaryURL({ code, path });\n tmpScriptTag.onload = () => resolve(global.Locale.language);\n tmpScriptTag.onerror = () => reject(new Error('Language dictionary load failed.'));\n\n if (!global.Locale) {\n global.Locale = {};\n }\n\n global.document.body.appendChild(tmpScriptTag);\n } catch (e) {\n reject(e);\n }\n});\n\nexport const loadDictionaryViaFetch = ({ code, path }) => fetch(generateDictionaryURL({ code, path }), {\n headers: { 'Content-Type': 'text/plain' }\n}).then(r => r.text()).then(r => r.replace('Locale.language=', '')).then(r => JSON.parse(r));\n\nexport const prepareAddDictionary = translation => function addDictionary(code, partialDictionaryName) {\n const addTranslationToDictionary = prepareAddTranslationToDictionary(translation);\n const url = unlocalizeOriginHref(global?.window?.location?.href);\n const partialDictionaryPath = partialDictionaryName || Object.keys(partialTranslations).find(q => partialTranslations[q](url));\n const loadMethod = global?.document ? loadDictionaryViaTag : loadDictionaryViaFetch;\n const path = partialDictionaryPath ? `locale/partial-translations/${partialDictionaryPath}` : 'locale';\n return new Promise((resolve, reject) => {\n loadMethod({ path, code: code?.length !== 5 ? DEFAULT_LANGUAGE : code })\n .then(translationData => resolve(addTranslationToDictionary(code, translationData)))\n .catch(err => reject(new Error(err)));\n });\n};\n\nexport const sendUsedTranslationsInterval = () => {\n if (isNil(global.Translations.processUsedTranslationsInterval) && !global.Translations.forceStopCollecting) {\n console.log('[Translations] :: Collecting used translation strings.');\n\n global.Translations.processUsedTranslationsInterval = setInterval(() => {\n const finishInterval = global.Translations.encodedAndProcessedStrings?.length >= global.Translations.usedTranslations?.length;\n\n if (global.Translations.forceStopCollecting) {\n return;\n }\n\n if (finishInterval) {\n clearInterval(global.Translations.processUsedTranslationsInterval);\n global.Translations.processUsedTranslationsInterval = null;\n global.Translations.forceStopCollecting = true;\n\n return axios.post('/API/translation/track-translated-strings', {\n url: global.location?.href,\n hashes: global.Translations.encodedAndProcessedStrings\n }).then(res => {\n if (res?.data?.responseCode === 200) {\n console.log(`[Translations] :: ${global.Translations.encodedAndProcessedStrings?.length} used translations collected.`);\n }\n }).catch(() => {\n console.log('[Translations] :: Error while collect used translations.');\n });\n }\n\n encodeUsedTranslations(global.Translations.usedTranslations);\n }, 1500);\n }\n};\n","// Clear translation visibility classes\nexport const clearTranslationMarkup = () => {\n // Get elements with the class\n const elements = global.document.body.querySelectorAll('.js-translationBlocker');\n\n // Get direct parents of translation texts\n const textParents = global.document.body.querySelectorAll('.js-translationText');\n\n // Get select parents of translation texts\n const selectParents = global.document.body.querySelectorAll('.js-translationSelect');\n\n // Convert node list to array and remove class from each element\n Object.values(elements).forEach(el => el && el.classList && el.classList.remove('js-translationBlocker'));\n // Object.values(textParents).forEach(el => el && el.classList && el.classList.remove('js-translationText'));\n Object.values(textParents).forEach(el => {\n // eslint-disable-next-line no-unused-expressions\n if (el && el.classList) {\n const elc = el;\n elc.style.outline = 'none';\n elc.style.position = 'initial';\n elc.style.zIndex = 'initial';\n el.classList.remove('js-translationText');\n }\n });\n Object.values(selectParents).forEach(el => {\n // Return if not a valid dom element\n if (!el || !el.classList) {\n return false;\n }\n\n // Get original size and multiple values of element if there were exist\n const originalSize = el.getAttribute('data-tempsize');\n const originalMultiple = el.getAttribute('data-tempmultiple');\n\n // Remove temporary attributes\n el.removeAttribute('data-tempsize');\n el.removeAttribute('data-tempmultiple');\n\n // If any one of them was setted then add them again; otherwise remove them\n if (originalSize !== 'null') {\n el.setAttribute('size', originalSize);\n } else {\n el.removeAttribute('size');\n }\n\n if (originalMultiple !== 'null') {\n el.setAttribute('multiple', originalMultiple);\n } else {\n el.removeAttribute('multiple');\n }\n\n // Lastly remove translation class\n el.classList.remove('js-translationSelect');\n });\n};\n\nexport const addTranslationMarkup = (el, initial = true) => {\n // If element is body or global then no need to process further\n if (el === global || el === global.document || el === global.document.body) return true;\n\n // If element or style belongs to it is undefined then terminate the process\n if (!el) return false;\n\n // Put text class at initial call\n if (initial) {\n el.parentElement.classList.add('js-translationText');\n\n const parent = el.parentElement;\n parent.style.outline = '3px solid #F00';\n parent.style.position = 'relative';\n parent.style.zIndex = '1000';\n }\n\n // Process if style is defined\n if (el.style) {\n // Get current style values of the element\n const currentStyle = global.getComputedStyle(el);\n\n // Check if one of the invisibility requirements it satisfied\n if (currentStyle.display === 'none' || currentStyle.opacity === '0' || currentStyle.visibility === 'hidden' || currentStyle.maxHeight === '0px') {\n // Add visibility class of translation\n el.classList.add('js-translationBlocker');\n }\n }\n\n if (el.tagName === 'SELECT') { // Handle select to show all options\n // Keep size and multiple attributes temporarily\n el.setAttribute('data-tempsize', el.getAttribute('size'));\n el.setAttribute('data-tempmultiple', el.getAttribute('multiple'));\n\n // Add size attribute temporarly to show all options\n el.setAttribute('size', el.length);\n el.setAttribute('multiple', 'multiple');\n\n // Add translation class to set height and mark select as dirty to clear later\n el.classList.add('js-translationSelect');\n }\n\n return addTranslationMarkup(el.parentElement, false);\n};\n\n// Finds elements that contains one of the texts passed\nexport const searchTextInDOM = (el, texts) => {\n // No need to parse the dom if it belongs to one of the given tags\n if (['SCRIPT', 'SVG', 'IMG', 'STYLE', 'INPUT', 'PATH'].indexOf(el.tagName) !== -1) {\n return null;\n }\n\n // If classList is defined for given element\n if (el.classList && el.classList.value) {\n // Define classes that we do not want to search\n // const classesToBeFiltered = [/hideOnDesktop/, /hide-on-builder/, /tabMenu/, /toggleText-mobile/, /hide-on-crawler/];\n const classesToBeFiltered = [/hideOnDesktop/, /toggleText-mobile/, /hide-on-crawler/];\n\n // Check if classList contains one of the unwanted classes\n if (classesToBeFiltered.some(rgx => rgx.test(el.classList.value))) {\n return null;\n }\n }\n\n // If still a child exist then parse tree deeper\n if (el.childNodes && el.childNodes.length !== 0) {\n return Object.values(el.childNodes) // Convert nodeList to array\n .filter(child => typeof child === 'object') // Remove numbers and functions to take only nodes(objects)\n .map(child => searchTextInDOM(child, texts)) // Call every node element with parseTree (recursive)\n .reduce((prev, curr) => (curr !== null ? prev.concat(curr) : prev), []); // Reduce results to one array\n }\n\n // Check if text content is one of the strings we are searching\n if (el.textContent && texts.indexOf(el.textContent.trim()) > -1) {\n return el;\n }\n\n return null;\n};\n\n// Checks if element is in viewport\nexport const isInViewport = el => {\n if (el === null) {\n return false;\n }\n if (typeof el.offsetTop === 'undefined') {\n return isInViewport(el.parentNode);\n }\n\n // Get recteangle information of element\n const elementRect = el.getBoundingClientRect();\n\n // Get window height and width\n const windowHeight = global.window.innerHeight;\n const windowWidth = global.window.innerWidth;\n\n // Get scrolling x and y\n const scrollX = global.window.pageXOffset;\n const scrollY = global.window.pageYOffset;\n\n // eslint-disable-next-line max-len\n if (elementRect.top + elementRect.height < windowHeight + scrollY && elementRect.left + elementRect.width < windowWidth + scrollX && elementRect.top + elementRect.height > 0 && elementRect.left + elementRect.width > 0) {\n return true;\n // eslint-disable-next-line no-else-return\n } else {\n // eslint-disable-next-line no-lonely-if\n if (global.window.casperJsTest) {\n el.scrollIntoView({ behavior: 'auto', block: 'center' });\n return true;\n // eslint-disable-next-line no-else-return\n } else {\n return false;\n }\n }\n};\n\n// Get text contents of dom elements\nexport const getTextContents = elements => elements.map(el => el.textContent.trim());\n","import qs from 'qs';\nimport Axios from 'axios';\nimport Polyglot from 'node-polyglot';\nimport domtoimage from 'dom-to-image-more';\nimport isUndefined from 'lodash/isUndefined';\n\nimport {\n isInViewport,\n getTextContents,\n searchTextInDOM,\n addTranslationMarkup,\n clearTranslationMarkup\n} from './domHelper';\n\nclass Translation {\n constructor() {\n // Default value settings\n this.defaultLang = 'en-US';\n this.processedStrings = {};\n this.usedTranslations = [];\n this.untranslatedStrings = {};\n this.currentLocale = this.defaultLang;\n this.filterClasses = [\n 'ace_editor',\n 'ace-solarized-dark',\n 'ace_dark',\n 'input-group',\n 'isAvatar',\n 'jfHeader-userAvatar',\n 'themesListItem-img',\n 'themesListItem-imgAspect',\n 'prevUploads-list',\n 'card-leftSide',\n 'jfQuestion-fields-contentVisible',\n 'appBox-image'\n ];\n this.filterTags = [\n 'IFRAME',\n 'IMG'\n ];\n this.dictionaries = {\n [this.defaultLang]: new Polyglot({\n phrases: {},\n locale: this.defaultLang.split('-')[0],\n allowMissing: true\n })\n };\n\n this.interpolation = { templateSyntax: /\\{.\\}*\\w+\\}/g, eraseTemplate: /\\{|\\}/g };\n // Variables related to delayed submitNotTranslated function\n this.callTimer = null;\n\n // Number of elements to be processed and send to server at once\n this.processLimit = 1;\n\n // Debounce time for process function\n this.debounceTime = 1000;\n\n // Function binds\n this.setLocale = this.setLocale.bind(this);\n this.resetProcess = this.resetProcess.bind(this);\n this.limitElements = this.limitElements.bind(this);\n this.orderElements = this.orderElements.bind(this);\n this.takeScreenShot = this.takeScreenShot.bind(this);\n this.debounceProcess = this.debounceProcess.bind(this);\n this.handleMissingKey = this.handleMissingKey.bind(this);\n this.submitNotTranslated = this.submitNotTranslated.bind(this);\n this.processNotTranslated = this.processNotTranslated.bind(this);\n this.updateProcessedStrings = this.updateProcessedStrings.bind(this);\n this.rotateUntranslatedStrings = this.rotateUntranslatedStrings.bind(this);\n this.filterUntranslatedStrings = this.filterUntranslatedStrings.bind(this);\n this.translate = this.translate.bind(this);\n this.initServerSideDictionary = this.initServerSideDictionary.bind(this);\n }\n\n // Getter for getting untranslated string list of current language\n get currentLocaleUntranslated() {\n return Array.isArray(this.untranslatedStrings[this.currentLocale]) ? this.untranslatedStrings[this.currentLocale] : [];\n }\n\n // Get processed elements in this session\n get currentProcessed() {\n return Array.isArray(this.processedStrings[this.currentLocale]) ? this.processedStrings[this.currentLocale] : [];\n }\n\n // Get single array that contains all untranslated strings\n get allUntranslatedStrings() {\n return Object.keys(this.untranslatedStrings).reduce(\n (prev, curr) => prev.concat(this.untranslatedStrings[curr]),\n []\n );\n }\n\n initServerSideDictionary(langCode, dictionary) {\n this.add(langCode, dictionary);\n }\n\n // Sets current locale and fetch untranslated list if it still does not exist\n setLocale(code) {\n // Set locale of objectcurrentLocale\n this.currentLocale = code;\n }\n\n // Update untranslatedStrings array by removing sended strings\n filterUntranslatedStrings(langCode, strings) {\n this.untranslatedStrings = {\n\n ...this.untranslatedStrings,\n [langCode]: this.untranslatedStrings[langCode].filter(str => strings.indexOf(str) === -1)\n };\n }\n\n // Update unprocessedStrings by adding sended strings\n updateProcessedStrings(langCode, strings) {\n // Add processed words to processed list\n this.processedStrings = {\n\n ...this.processedStrings,\n [langCode]: this.processedStrings[langCode] ? this.processedStrings[langCode].concat(strings) : strings\n };\n }\n\n // Add sended str to the untranslatedStrIngs array of current locale\n addUntranslatedString(str) {\n this.untranslatedStrings = {\n\n ...this.untranslatedStrings,\n [this.currentLocale]: this.currentLocaleUntranslated.concat([str])\n };\n }\n\n // Move given strings to the end of their respective array\n rotateUntranslatedStrings(strings) {\n // For each key filter given strings and append found ones to the end\n this.untranslatedStrings = Object.keys(this.untranslatedStrings).reduce((prev, curr) => {\n // Get matched strings array of given locale\n const foundStrings = this.untranslatedStrings[curr].filter(str => strings.indexOf(str) > -1);\n\n // First filter given strings and then append them afterward\n return {\n\n ...prev,\n [curr]: this.untranslatedStrings[curr].filter(str => foundStrings.indexOf(str) < 0).concat(foundStrings)\n };\n }, {});\n }\n\n // Order given dom elements respect to their position as strings in untranslated array\n orderElements(elements) {\n // No need to order if only one is found\n if (elements.length <= 1) {\n return elements;\n }\n\n // Get strings of elements\n const textContents = getTextContents(elements);\n\n // Order elements by looking their string positions\n return this.allUntranslatedStrings.filter(str => textContents.indexOf(str) > -1).map(str => elements[textContents.indexOf(str)]);\n }\n\n // Initializes locale and the dictionary belongs to it\n add(code = '', dictionary = {}) {\n // Initialize locale\n this.setLocale(code);\n\n if (isUndefined(this.dictionaries[code])) {\n // Add sended dictionary to the current list\n this.dictionaries = {\n\n ...this.dictionaries,\n [code]: new Polyglot({\n phrases: dictionary,\n locale: code.split('-')[0],\n onMissingKey: this.handleMissingKey // This function will be triggered if the text does not exist in translation list\n })\n };\n }\n }\n\n // Translate string using Polyglot api\n translate(str, params) {\n let translated = str;\n if (typeof params === 'object' && Object.keys(params).length) {\n const variables = str.match(this.interpolation.templateSyntax);\n variables?.forEach(strVar => {\n // Remove template string characters and get variable name.\n const variableName = strVar.replace(this.interpolation.eraseTemplate, '');\n // If there is a value for given key, replace the key with given value\n if (params[variableName]) {\n translated = translated.replace(strVar, params[variableName]);\n }\n });\n }\n\n if (!this.usedTranslations.includes(str)) {\n this.usedTranslations.push(str);\n }\n\n return this.dictionaries[this.currentLocale].t(translated, params);\n }\n\n // Handler for texts that does not have translation\n handleMissingKey(str, options) {\n // Further process is limited to certain users\n if (!(global.window.useTranslationScreenshots === true)) {\n return Polyglot.transformPhrase(str, options);\n }\n\n // If it is already in processed list then skip processing it\n if (this.currentProcessed.indexOf(str) > -1) {\n return Polyglot.transformPhrase(str, options);\n }\n\n // Do not try to process if string is empty or only contains space\n if (/^\\s+$/.test(str)) {\n return '';\n }\n\n // Add founded word to untranslated texts if it does not exist\n if (this.currentLocaleUntranslated.indexOf(str) === -1) {\n this.addUntranslatedString(str);\n }\n\n // Call debounced process (works every n seconds where n is this.processLimit)\n this.debounceProcess();\n }\n\n // Delays the call of submitNotTranslated\n debounceProcess() {\n // If a timer is already started\n if (this.callTimer !== null) {\n // Do not process any further\n return;\n }\n\n // Restart timer\n this.callTimer = setTimeout(this.processNotTranslated, this.debounceTime);\n }\n\n // Limits sended dom elements according to the constants set in class\n limitElements(elements) {\n // Limit the elements based on the processLimit variable\n return elements.slice(0, this.processLimit);\n }\n\n // Filters false positive translations by looking their screenshot values\n filterFalseTranslations(strings, screenshots) {\n // Indexes of false screenshots\n const emptyIndexes = screenshots.reduce((prev, curr, index) => { return curr === false ? prev.concat([index]) : prev; }, []);\n\n // Filter strings that matched with false screenshot results\n const filteredStrings = {\n\n ...strings,\n [this.currentLocale]: strings[this.currentLocale].filter((str, index) => emptyIndexes.indexOf(index) < 0)\n };\n\n // Filter false screenshots\n const filteredScreenshots = screenshots.filter((ss, index) => emptyIndexes.indexOf(index) < 0);\n\n // Return filtered strings and screenshots\n return {\n filteredStrings,\n filteredScreenshots\n };\n }\n\n // Prepares object for next translation process\n resetProcess(strings = []) {\n // Clear timer as the submit promises are resolved\n clearTimeout(this.callTimer);\n this.callTimer = null;\n\n // If there is still an untranslated string in the list\n if (this.currentLocaleUntranslated.length !== 0) {\n if (strings.length !== 0) {\n // Rotate strings that tried to be translated before if they still exist\n this.rotateUntranslatedStrings(strings);\n }\n\n // Try to call process again\n this.debounceProcess();\n }\n }\n\n // Filter and screenshot process\n processNotTranslated() {\n // Get body for dom earch\n let node = '';\n if (global.window.casperjsTestDomParam) {\n node = global.document.querySelector(decodeURI(global.window.casperjsTestDomParam));\n /* eslint-disable no-console */\n console.log('global.window.casperjsTestDomParam', global.window.casperjsTestDomParam);\n /* eslint-enable no-console */\n } else {\n node = global.document.body;\n }\n\n // Search all texts accross dom elements to find their containers\n const foundElements = searchTextInDOM(node, this.allUntranslatedStrings);\n\n /* eslint-disable no-console */\n console.log('this.allUntranslatedStrings', this.allUntranslatedStrings);\n console.log('foundElements', foundElements);\n /* eslint-enable no-console */\n\n // If could not found any element then reset the process\n if (!foundElements || foundElements.length === 0) {\n if (global.window.casperJsTest) {\n global.window.captureInProcess = false;\n /* eslint-disable no-console */\n console.log('capture process finished!');\n /* eslint-enable no-console */\n }\n // Clear timer\n return this.resetProcess();\n }\n\n // Order these elements to match with their respected string positions in untranslated strings array\n const orderedFoundElements = this.orderElements(foundElements);\n\n // Limit the number of elements to be processed\n const elementsToProcess = this.limitElements(orderedFoundElements);\n\n // Get strings of found elements\n const foundStrings = getTextContents(elementsToProcess);\n\n // Get only matched strings from unstranslated list\n const untranslatedToPost = Object.keys(this.untranslatedStrings).reduce((prev, curr) => ({\n\n ...prev,\n [curr]: this.untranslatedStrings[curr].filter(str => foundStrings.indexOf(str) > -1)\n }), {});\n\n // Create promise for each screenshot\n const ssPromises = Object.values(elementsToProcess).reduce((prev, curr) => { return typeof curr === 'object' ? prev.concat([this.takeScreenShot(node, curr)]) : prev; }, []);\n\n Promise.all(ssPromises) // After all screenshots taken\n .then(ssDataAll => this.filterFalseTranslations(untranslatedToPost, ssDataAll)) // Filter false positive translations\n // After resolving all of the promises just pass them to the not transalted submission\n .then(({ filteredStrings, filteredScreenshots }) => this.submitNotTranslated(filteredStrings, filteredScreenshots))\n // Reset required variables and do post process jobs to prepare object for next translation after submissions\n .then(submitPromises => Promise.all(submitPromises).then(() => this.resetProcess(foundStrings)));\n }\n\n // Submit not translated strings\n submitNotTranslated(untranslatedToPost, ssDataAll) {\n // Send translation request for each key separately\n return Object.keys(untranslatedToPost).map(langCode => {\n // Get strings to send\n const strings = untranslatedToPost[langCode];\n\n let depthCount = 0;\n let depthLabel = '';\n if (global.window.casperJsTest) {\n if (global.window.depthCount) {\n depthCount = global.window.depthCount;\n }\n if (global.window.depthLabel) {\n depthLabel = global.window.depthLabel;\n }\n }\n\n // No need to send data if one of them is empty or their lengths are not equal to each other\n if (strings.length === 0 || ssDataAll.length === 0 || strings.length !== ssDataAll.length) {\n if (global.window.casperJsTest) {\n global.window.captureInProcess = false;\n /* eslint-disable no-console */\n console.log('capture process finished!');\n /* eslint-enable no-console */\n }\n return false;\n }\n\n Axios.post('/server.php', qs.stringify({\n action: 'submitNotTranslated',\n lang_code: langCode,\n raw: untranslatedToPost[langCode].join('__NOT_TRANSLATED__'),\n autoSuggestion: false,\n depthCount,\n depthLabel,\n screenshot: ssDataAll.join('|||')\n }), {\n 'Content-Type': 'application/x-www-form-urlencoded'\n })\n .then(() => {\n // Move processed strings to processed list\n this.updateProcessedStrings(langCode, untranslatedToPost[langCode]);\n\n // Filter them from untranslated list\n this.filterUntranslatedStrings(langCode, untranslatedToPost[langCode]);\n });\n\n return true;\n });\n }\n\n // Take screenshot of given node if foundElement is visible in that dom\n takeScreenShot(node, foundElement) {\n // Try to make every element visible on found elements\n const visibilityResult = addTranslationMarkup(foundElement);\n if (global.window.casperJsTest) {\n /* eslint-disable no-console */\n console.log('foundElement', foundElement.wholeText);\n /* eslint-enable no-console */\n }\n // Do not need to take ss if element is invisible or not in viewport\n if (!visibilityResult || !isInViewport(foundElement)) {\n /* eslint-disable no-console */\n console.log('the element is invisible or not in viewport');\n /* eslint-enable no-console */\n // Clear visibility\n clearTranslationMarkup();\n\n // Return false due to it does not exist on screen\n return false;\n }\n\n // If the page is loaded by casperjs\n if (global.window.casperJsTest) {\n // Send capture command to casperjs as error\n /* eslint-disable no-console */\n console.log('capture');\n /* eslint-enable no-console */\n\n // Resolve with base64 encoded ss data\n return new Promise(resolve => {\n setTimeout(() => {\n // Take ss data\n const capturedData = global.window.tempCaptureData;\n\n // Clear temporary data\n global.window.tempCaptureData = null;\n\n // Clear visibility classes\n clearTranslationMarkup();\n\n // Return screenshot\n resolve(capturedData);\n }, 2000);\n });\n }\n\n // Take screenshot and return base64 encoded form using visibility css\n return new Promise(resolve => domtoimage.toPng(\n node,\n {\n filter: el => {\n // Return if element is not valid to check\n if (!el || !el.className || !el.tagName || typeof el.className !== 'string') {\n return true;\n }\n\n // If element is one of the tags to be filtered from screenshot\n if (this.filterTags.indexOf(el.tagName) > -1) {\n return false;\n }\n\n const filteredNodeClass = el.className.split(' ').filter(classStr => this.filterClasses.indexOf(classStr) !== -1);\n\n return filteredNodeClass.length === 0;\n }\n }\n )\n .then(dataUrl => {\n // Clear visibility classes\n clearTranslationMarkup();\n\n // Return screenshot\n resolve(dataUrl);\n }));\n }\n}\n\nexport const translation = global.Translations || new Translation();\n\nexport default Translation;\n","export const langCodes = {\n tr: 'tr-TR',\n en: 'en-US',\n es: 'es-ES',\n pt: 'pt-PT',\n fr: 'fr-FR',\n de: 'de-DE',\n it: 'it-IT',\n bg: 'bg-BG',\n sr: 'sr-BA',\n hu: 'hu-HU',\n fi: 'fi-FI',\n ka: 'ka-GE',\n nl: 'nl-NL',\n uk: 'uk-UA',\n ua: 'uk-UA',\n id: 'id-ID',\n ko: 'ko-KR',\n ar: 'ar-AR',\n ja: 'ja-JP',\n pl: 'pl-PL',\n ca: 'ca-ES',\n sv: 'sv-SE',\n no: 'no-NO',\n da: 'da-DA',\n ro: 'ro-RO',\n ru: 'ru-RU',\n zh: 'zh-CN',\n 'zh-CN': 'zh-CN',\n 'zh-HK': 'zh-HK',\n af: 'af-ZA',\n he: 'he-IL'\n};\n\nexport const partialTranslations = {\n 'animal-shelter': path => /(jotform.com|jform.co.kr|jotform.pro)(\\/){1}(animal-shelter){1}/g.test(path)\n};\n\n/**\n * Returns Jotform translation files suffix (locale/locale_SUFFIX.js)\n * @param {string} localeCode - lang-[country] (en-US, pt-BR, en)\n * @return {string} A value from langCodes object.\n */\nexport const getLangFileSuffix = localeCode => {\n const lang = localeCode.split('-')[0];\n return langCodes[localeCode] || langCodes[lang];\n};\n\nexport const DEFAULT_LANGUAGE = 'en-US';\n","import { langCodes } from './constants';\n\nexport const getApp = () => global.window.__jfrouter?.ACTIVE_ALIAS || global.window.location.pathname?.replace(/\\//g, '');\nexport const isProduction = () => global.window?.__jfrouter?.JOTFORM_ENV === 'PRODUCTION' || global.window?.JOTFORM_ENV === 'PRODUCTION';\n\nconst encodedAndProcessedStrings = [];\n\nconst processTranslation = async string => {\n const transformPhrase = string?.replace(/JotForm|Jform/gm, 'Jotform')?.trim();\n const buffer = new TextEncoder('utf-8').encode(transformPhrase);\n const digest = await global.crypto.subtle.digest('SHA-1', buffer);\n return {\n raw: transformPhrase,\n encoded: Array.from(new Uint8Array(digest)).map(x => x.toString(16).padStart(2, '0')).join('')\n };\n};\n\nexport const encodeUsedTranslations = translations => {\n translations.forEach(translation => {\n processTranslation(translation)\n .then(({ encoded, raw }) => {\n if (!global.Translations.encodedAndProcessedStrings.some(q => Object.keys(q).includes(encoded))) {\n global.Translations.encodedAndProcessedStrings.push({\n [encoded]: raw\n });\n }\n })\n .catch(error => console.error(error));\n });\n\n return encodedAndProcessedStrings;\n};\n\nexport const collectionTimer = () => {\n const year = new Date().getFullYear();\n const month = new Date().getMonth();\n const day = new Date().getDate();\n const hours = new Date().getHours();\n const minutes = new Date().getMinutes();\n const now = Date.UTC(year, month, day, hours, minutes, 0);\n const startDate = Date.UTC(year, month, day, hours, 0, 0);\n const endDate = Date.UTC(year, month, day, hours, 15, 0);\n\n // Between HH:00 and HH:15\n return startDate < now && endDate > now;\n};\n\nexport const unlocalizeOriginHref = url => {\n const shortLangCodes = Object.keys(langCodes)?.join('|');\n const exp = RegExp(`(\\\\/)(${shortLangCodes})(\\\\/)`, 'g');\n\n return url?.replace(exp, '/');\n};\n","import { translation } from './Translation';\nimport { initializeTranslationFromGlobal } from './global';\nimport { prepareT, prepareTranslationRenderer, prepareTDate } from './hof';\nimport { langCodes, getLangFileSuffix } from './constants';\nimport { TranslateProvider } from './components/TranslateProvider';\nimport { setDatepickerLocale } from './setDatepickerLocale';\n\nconst t = prepareT(translation);\nconst tdate = prepareTDate(translation);\nconst translationRenderer = prepareTranslationRenderer(t);\n\ninitializeTranslationFromGlobal(translation, t);\n\nexport {\n t,\n tdate,\n translation,\n translationRenderer,\n langCodes,\n getLangFileSuffix,\n TranslateProvider,\n setDatepickerLocale\n};\n\nexport default translation;\n","import {\n prepareAddDictionary,\n prepareControlModeChange,\n prepareAddTranslationToDictionary,\n sendUsedTranslationsInterval\n} from './hof';\n\nimport { isProduction, collectionTimer } from './utils';\n\n/* eslint-disable no-param-reassign, no-extend-native */\nexport function initializeTranslationFromGlobal(translation, t) {\n const addDictionary = prepareAddDictionary(translation);\n const controlModeChange = prepareControlModeChange(translation);\n const addTranslationToDictionary = prepareAddTranslationToDictionary(translation);\n\n // Overriding all strings and adding locale method\n String.prototype.locale = function locale() {\n return t(this);\n };\n\n if (!global.Translations) {\n global.__t = t;\n global.Translations = translation;\n global.Translations.t = t;\n global.Translations.addDictionary = addDictionary;\n global.Translations.addTranslationToDictionary = addTranslationToDictionary;\n global.Translations.controlModeChange = controlModeChange;\n global.Translations.processUsedTranslationsInterval = null;\n global.Translations.encodedAndProcessedStrings = [];\n global.Translations.startCollectUsedTranslationsInterval = sendUsedTranslationsInterval;\n global.Translations.forceStopCollecting = false;\n }\n\n if (global.window && global.window.useLocaleDictionary && global.window?.Locale?.language) {\n addTranslationToDictionary(global.window.currentLocale, global.window.Locale.language);\n }\n\n if (isProduction() && collectionTimer() && global.Translations.currentLocale !== 'en-US') {\n sendUsedTranslationsInterval();\n }\n}\n"],"names":["translation","t","clearTranslationMarkup","elements","global","textParents","selectParents","Object","el","elc","originalSize","originalMultiple","addTranslationMarkup","initial","parent","currentStyle","searchTextInDOM","texts","classesToBeFiltered","rgx","child","prev","curr","isInViewport","elementRect","windowHeight","windowWidth","scrollX","scrollY","getTextContents","Translation","Array","langCode","dictionary","code","strings","str","foundStrings","textContents","isUndefined","Polyglot","params","translated","variables","strVar","variableName","options","setTimeout","screenshots","emptyIndexes","index","filteredStrings","filteredScreenshots","ss","clearTimeout","node","decodeURI","console","foundElements","orderedFoundElements","elementsToProcess","untranslatedToPost","Promise","ssDataAll","submitPromises","depthCount","depthLabel","Axios","qs","foundElement","visibilityResult","resolve","capturedData","domtoimage","filteredNodeClass","classStr","dataUrl","langCodes","partialTranslations","path","DEFAULT_LANGUAGE","isProduction","_global_window___jfrouter","_global_window1","encodedAndProcessedStrings","processTranslation","string","_string_replace","transformPhrase","buffer","TextEncoder","Uint8Array","x","encodeUsedTranslations","translations","encoded","raw","q","error","collectionTimer","year","Date","month","day","hours","now","startDate","endDate","unlocalizeOriginHref","url","_Object_keys","shortLangCodes","exp","RegExp","preapreTtime","hour","minute","hourVal","minuteVal","i1","parseInt","tempDate","isNaN","prepareControlModeChange","controlMode","reject","err","Error","prepareAddTranslationToDictionary","translationData","clearedDic","dic","key","entry","generateDictionaryURL","sanitizedCode","Math","loadDictionaryViaTag","tmpScriptTag","e","loadDictionaryViaFetch","fetch","r","JSON","prepareAddDictionary","partialDictionaryName","_global_window_location","_global1","addTranslationToDictionary","partialDictionaryPath","loadMethod","sendUsedTranslationsInterval","isNil","setInterval","_global_Translations_encodedAndProcessedStrings","_global_Translations_usedTranslations","_global_location","finishInterval","clearInterval","axios","res","_res_data","_this","initializeTranslationFromGlobal","_global_window_Locale","addDictionary","controlModeChange","String"],"mappings":"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"}