{"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":"+RAAO,SAASA,EAAaC,CAAM,EACjC,OAAOA,EAAOC,GAAG,CAACC,IAChB,IAAMC,EAAeD,EAAEE,SAAS,CAACF,EAAEG,OAAO,CAAC,KAAO,GAC5CC,EAAeC,mBAAmBC,mBAAmBL,IAC3D,OAAOD,EAAEO,OAAO,CAACN,EAAcG,EACjC,GAAGI,IAAI,CAAC,IACV,C,OCsEAC,OAAOC,mBAAmB,CA1E1B,SAAsBC,CAAc,CAAEC,CAAO,EAqE3CC,CApEA,WACE,IAAMC,EAAMC,SAASC,aAAa,CAACL,GACnC,GAAIG,EAAK,CACP,GAAI,CAAEG,IAAAA,CAAG,CAAE,CAAGH,EACd,GAAIG,EAAIC,QAAQ,CAAC,eACf,OAEF,IAAMC,EAAYV,OAAOW,QAAQ,CAACC,IAAI,CAClCC,EAAkB,GAMtB,GALIH,GAAaA,EAAUhB,OAAO,CAAC,KAAO,IAExCmB,CAAAA,EAAkBzB,EADlByB,EAAkBH,EAAUjB,SAAS,CAACiB,EAAUhB,OAAO,CAAC,KAAO,GAAGoB,KAAK,CAAC,KAC1B,EAG5CN,GAAOA,EAAId,OAAO,CAAC,KAAO,GAAI,CAChC,IAAIqB,EAAeP,EAAIQ,MAAM,CAACR,EAAId,OAAO,CAAC,KAAO,GAAGoB,KAAK,CAAC,KAC1DC,EAAe3B,EAAa2B,GAC5BF,GAAmB,CAAC,CAAC,EAAEE,EAAa,CAAC,CACrCP,EAAMA,EAAIf,SAAS,CAAC,EAAGe,EAAId,OAAO,CAAC,KACrC,CACAmB,GAAmB,CAAC,2BAA2B,EAAEjB,mBAAmBc,GAAW,CAAC,CAChFL,EAAIG,GAAG,CAAG,CAAC,EAAEA,EAAI,CAAC,EAAEK,EAAgB,CAAC,CAEzC,KA8CAb,OAAOiB,WAAW,CApBlB,SAAqBC,CAAS,CAAEC,CAAkB,EAChD,IAAMC,EAAMd,SAASe,aAAa,CAAC,IACnCD,CAAAA,EAAIR,IAAI,CAAGM,EACX,GAAM,CAAEI,SAAAA,CAAQ,CAAE,CAAGF,EACjBG,EAAS,GACb,GAAI,KAAoB,IAAbD,EAST,OARAH,EAAmBK,OAAO,CAACC,IAEvBH,CAAAA,EAASI,KAAK,CAAC,GAAKD,EAAQE,MAAM,CAAG,KAAO,IAAIC,MAAM,CAACH,IACpDH,IAAaG,CAAM,GAEtBF,CAAAA,EAAS,EAAG,CAEhB,GACOA,CAEX,EAKAvB,OAAO6B,gBAAgB,CAAC,UA7CxB,SAA6BC,CAAC,EAC5B,GAAI,iBAAOA,EAAEC,IAAI,CACf,OAEF,IAAMC,EAAOF,EAAEC,IAAI,CAACjB,KAAK,CAAC,KACpBmB,EAAS3B,SAASC,aAAa,CAACL,GACtC,GAAI,CAAC+B,EACH,OAIF,IAAIC,EAAmB,EAAE,CACzB,GAAI/B,EAAS,CACX,GAAM,CAAEmB,SAAAA,CAAQ,CAAE,CAAG,IAAIa,IAAIhC,GAC7B+B,EAAmB,CAACZ,EAAS,MAE7BY,EAAmB,CAAC,cAAe,cAAc,CAGnDE,CDZG,SAA4BJ,CAAI,CAAEF,CAAC,CAAEI,CAAgB,CAAEhC,CAAc,EAC1E,IAAM+B,EAAS3B,SAASC,aAAa,CAACL,GACtC,OAAQ8B,CAAI,CAAC,EAAE,EACb,IAAK,iBACHC,EAAOI,cAAc,GACrB,KACF,KAAK,YACHJ,EAAOK,KAAK,CAACC,MAAM,CAAG,CAAC,EAAEP,CAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAElC,CAACQ,OAAOC,KAAK,CAACT,CAAI,CAAC,EAAE,GAChBU,SAAST,EAAOK,KAAK,CAACK,SAAS,CAAE,IAAMD,SAASV,CAAI,CAAC,EAAE,CAAE,KAE9DC,CAAAA,EAAOK,KAAK,CAACK,SAAS,CAAG,CAAC,EAAEX,CAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAEzC,KACF,KAAK,eACHC,EAAOK,KAAK,CAACK,SAAS,CAAG,CAAC,EAAEX,CAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CACvC,KACF,KAAK,oBACCC,EAAOW,YAAY,CAAG5C,OAAO6C,WAAW,EAC1CZ,CAAAA,EAAOK,KAAK,CAACC,MAAM,CAAG,CAAC,EAAEvC,OAAO6C,WAAW,CAAC,EAAE,CAAC,EAEjD,KACF,KAAK,aACH7C,OAAOW,QAAQ,CAACmC,MAAM,GACtB,KACF,KAAK,yBACHb,EAAOc,eAAe,CAAC,UACvB,KACF,KAAK,aACH,GAAI,CAAC/C,OAAOiB,WAAW,CAACa,EAAEkB,MAAM,CAAEd,GAChC,MAEF,IAAMe,EAAS3C,SAASe,aAAa,CAAC,SACtC4B,CAAAA,EAAOzC,GAAG,CAAIwB,EAAKL,MAAM,CAAG,EAAK,CAAC,EAAEK,CAAI,CAAC,EAAE,CAAC,CAAC,EAAEA,CAAI,CAAC,EAAE,CAAC,CAAC,CAAGA,CAAI,CAAC,EAAE,CAClEiB,EAAOC,IAAI,CAAG,kBACd5C,SAAS6C,IAAI,CAACC,WAAW,CAACH,GAC1B,KACF,KAAK,iBA7CHjD,OAAOM,QAAQ,CAAC+C,cAAc,CAAErD,OAAOM,QAAQ,CAAC+C,cAAc,GACzDrD,OAAOM,QAAQ,CAACgD,mBAAmB,CAAEtD,OAAOM,QAAQ,CAACgD,mBAAmB,GACxEtD,OAAOM,QAAQ,CAACiD,mBAAmB,CAAEvD,OAAOM,QAAQ,CAACgD,mBAAmB,GACxEtD,OAAOM,QAAQ,CAACkD,oBAAoB,CAAExD,OAAOM,QAAQ,CAACkD,oBAAoB,GAC1ExD,OAAOM,QAAQ,CAACmD,gBAAgB,EAAEzD,OAAOM,QAAQ,CAACmD,gBAAgB,GA2CvE,KACF,KAAK,gBACH,GAAM,EAAGC,EAAW,CAAG1B,CACvBhC,CAAAA,OAAO2D,YAAY,CAAGD,EACtB,KACF,KAAK,mBAEHE,IAD6BC,gBAAgB7B,CAAI,CAAC,EAAE,EACnCR,OAAO,CAAC,CAACsC,EAAOC,KAC/B9B,EAAOK,KAAK,CAACyB,EAAI,CAAGD,CACtB,GAEAE,CADY/B,EAAOgC,eAAe,CAAGhC,EAAOgC,eAAe,CAAIhC,EAAOiC,aAAa,CAAC5D,QAAQ,EAAI2B,EAAO3B,QAAQ,EAC3G6D,eAAe,CAAC7B,KAAK,CAAC8B,UAAU,CAAG,MAI3C,CACF,GC5CuBpC,EAAMF,EAAGI,EAAkBhC,GAE9CmE,SDxCiCvC,CAAC,CAAEG,CAAM,CAAEC,CAAgB,EAE9D,GACEoC,OAFuBrD,WAAW,CAACa,EAAEkB,MAAM,CAAEd,IAGxC,kBAAmBD,GACnB,gBAAiBA,EAAOiC,aAAa,CAC1C,CACA,IAAMK,EAAO,CACXC,OAAQ5E,mBAAmBU,SAAS6B,GAAG,EACvCsC,SAAU7E,mBAAmBU,SAASmE,QAAQ,CAChD,EACAxC,EAAOiC,aAAa,CAACQ,WAAW,CAC9BC,KAAKC,SAAS,CAAC,CAAE1B,KAAM,OAAQY,MAAOS,CAAK,GAC3C,IAEJ,CACF,ECwByBzC,EAAGG,EAAQC,EAClC,EAuBwD,GAC1D,E"}