{"version":3,"file":"for-form-embed-handler.js","sources":["webpack://@jotforminc/umd-bundler/../../cdns/for-form-embed-handler/src/utils.js","webpack://@jotforminc/umd-bundler/../../cdns/for-form-embed-handler/src/index.js"],"sourcesContent":["export function encodeParams(params) {\n return params.map(x => {\n const initialValue = x.substring(x.indexOf('=') + 1);\n const encodedValue = encodeURIComponent(decodeURIComponent(initialValue));\n return x.replace(initialValue, encodedValue);\n }).join('&');\n}\n\n// send message for get form page url and get referrer widgets\nexport function sendMessageToWidgets(e, iframe, permittedDomains) {\n const isJotForm = window.isPermitted(e.origin, permittedDomains);\n if (\n isJotForm\n && 'contentWindow' in iframe\n && 'postMessage' in iframe.contentWindow\n ) {\n const urls = {\n docurl: encodeURIComponent(document.URL),\n referrer: encodeURIComponent(document.referrer)\n };\n iframe.contentWindow.postMessage(\n JSON.stringify({ type: 'urls', value: urls }),\n '*'\n );\n }\n}\n\nfunction exitFullscreen() {\n if (window.document.exitFullscreen) window.document.exitFullscreen();\n else if (window.document.mozCancelFullScreen) window.document.mozCancelFullScreen();\n else if (window.document.mozCancelFullscreen) window.document.mozCancelFullScreen();\n else if (window.document.webkitExitFullscreen) window.document.webkitExitFullscreen();\n else if (window.document.msExitFullscreen) window.document.msExitFullscreen();\n}\n\nexport function handleMessageTypes(args, e, permittedDomains, iframeSelector) {\n const iframe = document.querySelector(iframeSelector);\n switch (args[0]) {\n case 'scrollIntoView':\n iframe.scrollIntoView();\n break;\n case 'setHeight':\n iframe.style.height = `${args[1]}px`;\n if (\n !Number.isNaN(args[1])\n && parseInt(iframe.style.minHeight, 10) > parseInt(args[1], 10)\n ) {\n iframe.style.minHeight = `${args[1]}px`;\n }\n break;\n case 'setMinHeight':\n iframe.style.minHeight = `${args[1]}px`;\n break;\n case 'collapseErrorPage':\n if (iframe.clientHeight > window.innerHeight) {\n iframe.style.height = `${window.innerHeight}px`;\n }\n break;\n case 'reloadPage':\n window.location.reload();\n break;\n case 'removeIframeOnloadAttr':\n iframe.removeAttribute('onload');\n break;\n case 'loadScript':\n if (!window.isPermitted(e.origin, permittedDomains)) {\n break;\n }\n const script = document.createElement('script');\n script.src = (args.length > 3) ? `${args[1]}:${args[2]}` : args[1];\n script.type = 'text/javascript';\n document.body.appendChild(script);\n break;\n case 'exitFullscreen':\n exitFullscreen();\n break;\n case 'setDeviceType':\n const [, deviceType] = args;\n window.jfDeviceType = deviceType;\n break;\n case 'backgroundStyles':\n const backgroundStyles = new URLSearchParams(args[1]);\n backgroundStyles.forEach((value, key) => {\n iframe.style[key] = value;\n });\n const doc = iframe.contentDocument ? iframe.contentDocument : (iframe.contentWindow.document || iframe.document);\n doc.documentElement.style.background = 'none';\n break;\n default:\n break;\n }\n}\n","import { encodeParams, sendMessageToWidgets, handleMessageTypes } from './utils';\n\nfunction embedHandler(iframeSelector, baseUrl) {\n function addIframeParams() {\n const ifr = document.querySelector(iframeSelector);\n if (ifr) {\n let { src } = ifr;\n if (src.includes('jsForm=true')) {\n return;\n }\n const parentURL = window.location.href;\n let queryParameters = '';\n if (parentURL && parentURL.indexOf('?') > -1) {\n queryParameters = parentURL.substring(parentURL.indexOf('?') + 1).split('&');\n queryParameters = encodeParams(queryParameters);\n }\n\n if (src && src.indexOf('?') > -1) {\n let iframeParams = src.substr(src.indexOf('?') + 1).split('&');\n iframeParams = encodeParams(iframeParams);\n queryParameters += `&${iframeParams}`;\n src = src.substring(0, src.indexOf('?'));\n }\n queryParameters += `&isIframeEmbed=1&parentURL=${encodeURIComponent(parentURL)}`;\n ifr.src = `${src}?${queryParameters}`;\n }\n }\n\n function handleIFrameMessage(e) {\n if (typeof e.data === 'object') {\n return;\n }\n const args = e.data.split(':');\n const iframe = document.querySelector(iframeSelector);\n if (!iframe) {\n return;\n }\n\n // add base url to permitted domains\n let permittedDomains = [];\n if (baseUrl) {\n const { hostname } = new URL(baseUrl);\n permittedDomains = [hostname];\n } else {\n permittedDomains = ['jotform.com', 'jotform.pro'];\n }\n\n handleMessageTypes(args, e, permittedDomains, iframeSelector);\n\n sendMessageToWidgets(e, iframe, permittedDomains);\n }\n\n function isPermitted(originUrl, whitelistedDomains) {\n const url = document.createElement('a');\n url.href = originUrl;\n const { hostname } = url;\n let result = false;\n if (typeof hostname !== 'undefined') {\n whitelistedDomains.forEach(element => {\n if (\n hostname.slice(-1 * element.length - 1) === '.'.concat(element)\n || hostname === element\n ) {\n result = true;\n }\n });\n return result;\n }\n }\n\n // use functions\n addIframeParams();\n window.isPermitted = isPermitted;\n window.addEventListener('message', handleIFrameMessage, false);\n}\n\nwindow.jotformEmbedHandler = embedHandler;\n"],"names":["encodeParams","params","map","x","initialValue","substring","indexOf","encodedValue","encodeURIComponent","decodeURIComponent","replace","join","window","jotformEmbedHandler","iframeSelector","baseUrl","addIframeParams","ifr","document","querySelector","src","includes","parentURL","location","href","queryParameters","split","iframeParams","substr","isPermitted","originUrl","whitelistedDomains","url","createElement","hostname","result","forEach","element","slice","length","concat","addEventListener","e","data","args","iframe","permittedDomains","URL","handleMessageTypes","scrollIntoView","style","height","Number","isNaN","parseInt","minHeight","clientHeight","innerHeight","reload","removeAttribute","origin","script","type","body","appendChild","exitFullscreen","mozCancelFullScreen","mozCancelFullscreen","webkitExitFullscreen","msExitFullscreen","deviceType","jfDeviceType","backgroundStyles","URLSearchParams","value","key","doc","contentDocument","contentWindow","documentElement","background","sendMessageToWidgets","isJotForm","urls","docurl","referrer","postMessage","JSON","stringify"],"mappings":"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"}