Created
April 3, 2025 17:02
-
-
Save orangerdev/58c0a2115f40f1ddb6b69c634d372cef to your computer and use it in GitHub Desktop.
Hubspot modification for Wix to receive any URL params then parse them to the fields
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| !(function () { | |
| ("use strict"); | |
| const e = { | |
| RECEIVED_ANALYTICS: "HS_CTA_PARENT_RECEIVED_ANALYTICS", | |
| DEVICE_TYPE: "HS_CTA_PARENT_DEVICE_TYPE", | |
| PROXY_ANALYTICS_FN_CALLBACK: "HS_CTA_PARENT_PROXY_ANALYTICS_FN", | |
| INIT: "HS_CTA_PARENT_INIT", | |
| SHOWING_CTA: "HS_CTA_SHOWING_CTA", | |
| SEND_EXTRACTED_STYLES: "HS_SEND_EXTRACTED_STYLES", | |
| STARTED: "HS_CTA_STARTED", | |
| NAVIGATE_PAGE: "HS_CTA_NAVIGATE_PAGE", | |
| CLICK_EVENT: "HS_CTA_CLICK_EVENT", | |
| CLOSE_INTERACTIVE: "HS_CTA_CLOSE_INTERACTIVE", | |
| HAS_CLOSED: "HS_CTA_HAS_CLOSED", | |
| NEW_HEIGHT: "HS_CTA_NEW_HEIGHT", | |
| DISPLAY_CALL_TO_ACTION: "HS_DISPLAY_CALL_TO_ACTION", | |
| PROXY_ANALYTICS: "HS_CTA_PROXY_ANALYTICS", | |
| PROXY_ANALYTICS_FN: "HS_CTA_PROXY_ANALYTICS_FN", | |
| SEND_FORM_DEFINITION: "HS_SEND_FORM_DEFINITION", | |
| SEND_CTA_CONFIG: "HS_SEND_CTA_CONFIG", | |
| SEND_EMBED_CONTEXT: "HS_SEND_EMBED_CONTEXT", | |
| RECEIVE_FILTERED_STYLESHEETS: "RECEIVE_FILTERED_STYLESHEETS", | |
| SEND_STYLESHEETS: "SEND_STYLESHEETS", | |
| RENDER_RECAPTCHA: "RENDER_RECAPTCHA", | |
| EXECUTE_RECAPTCHA: "EXECUTE_RECAPTCHA", | |
| RESET_RECAPTCHA: "RESET_RECAPTCHA", | |
| RECAPTCHA_SUCCESS: "RECAPTCHA_SUCCESS", | |
| RECAPTCHA_EXPIRED: "RECAPTCHA_EXPIRED", | |
| TRIGGER_CTA: "HS_CTA_TRIGGER_CTA", | |
| CTA_FORM_SUBMITTED: "HS_CTA_FORM_SUBMITTED", | |
| V4_FORM_READY: "HS_V4_FORM_READY", | |
| SEND_FORM_EXTRA_SUBMISSION_METADATA: | |
| "HS_SEND_FORM_EXTRA_SUBMISSION_METADATA", | |
| SEND_FORM_SUBMISSION_SUCCESS_INFO: "HS_SEND_FORM_SUBMISSION_SUCCESS_INFO", | |
| SEND_FORM_SUBMISSION_SUCCESS: "HS_SEND_FORM_SUBMISSION_SUCCESS", | |
| SEND_FORM_SUBMISSION_FAILED: "HS_SEND_FORM_SUBMISSION_FAILED", | |
| SEND_FORM_INTERACTION_NAVIGATE: "HS_SEND_FORM_INTERACTION_NAVIGATE", | |
| GET_FORM_FIELD_VALUES: "HS_GET_FORM_FIELD_VALUES", | |
| SEND_FORM_FIELD_VALUES: "HS_SEND_FORM_FIELD_VALUES", | |
| GET_FIELD_VALUE: "HS_GET_FIELD_VALUE", | |
| SET_FIELD_VALUE: "HS_SET_FIELD_VALUE", | |
| SEND_FIELD_VALUE: "HS_SEND_FIELD_VALUE", | |
| MEETINGS_BOOKING_SUCCESS: "HS_CTA_MEETINGS_BOOKING_SUCCESS", | |
| }; | |
| function t(e, t = {}) { | |
| for (const s in t) Object.hasOwnProperty.call(t, s) && (e.style[s] = t[s]); | |
| } | |
| function s(...e) { | |
| if ( | |
| window.location.search.indexOf("hs_debug_interactive") > -1 || | |
| window.location.host.includes("local.hsappstatic") | |
| ) { | |
| console.log("[web-interactives-embed]", ...e); | |
| window.location.search.indexOf("hs_is_selenium") > -1 && | |
| console.log(...[...e].map((e) => JSON.stringify(e))); | |
| } | |
| } | |
| class n { | |
| constructor() { | |
| this.listeners = new Map(); | |
| } | |
| on(e, t) { | |
| if (!this.listeners.has(e)) { | |
| this.listeners.set(e, [t]); | |
| return; | |
| } | |
| const s = this.listeners.get(e); | |
| this.listeners.set(e, [...s, t]); | |
| } | |
| off(e) { | |
| this.listeners.delete(e); | |
| } | |
| emit(e, t) { | |
| const s = this.listeners.get(e); | |
| s && s.length && s.forEach((e) => e(t)); | |
| } | |
| reset() { | |
| this.listeners = new Map(); | |
| } | |
| } | |
| function i() { | |
| return new n(); | |
| } | |
| const r = (...e) => { | |
| s("[GlobalIframeCommunication]", ...e); | |
| }; | |
| class o { | |
| constructor() { | |
| this.iframeCommunicators = new Map(); | |
| this.eventEmitter = i(); | |
| this.reset = () => { | |
| this.eventEmitter.reset(); | |
| this.iframeCommunicators = new Map(); | |
| }; | |
| } | |
| registerHandler(e, t) { | |
| this.eventEmitter.on(e, t); | |
| } | |
| registerHandlers(e) { | |
| r("Registering handlers", e); | |
| Object.keys(e).forEach((t) => { | |
| const s = t, | |
| n = e[s]; | |
| n && this.registerHandler(s, n); | |
| }); | |
| } | |
| registerCommunicator(e, t) { | |
| r("Registering communicator", t); | |
| const s = this.iframeCommunicators.get(t) || []; | |
| this.iframeCommunicators.set(t, [...s, e]); | |
| } | |
| removeCommunicator(e) { | |
| r("Removing Iframe Communicator from GlobalCommunication: ", e); | |
| this.iframeCommunicators.delete(e); | |
| } | |
| emit(e, t) { | |
| r("Emitting event", { event: e, messagePayload: t }); | |
| this.eventEmitter.emit(e, t); | |
| } | |
| broadcast(e, t) { | |
| const s = this.iframeCommunicators.get(e); | |
| if (s) { | |
| r("Broadcasting", s); | |
| s.forEach((e) => { | |
| e.sendMessage(t); | |
| }); | |
| } else r("Cannot find communcators array, not broadcasting", e, t); | |
| } | |
| broadcastAll(e) { | |
| r("Broadcasting", e, "to all", this.iframeCommunicators); | |
| for (const [t, s] of this.iframeCommunicators) this.broadcast(t, e); | |
| } | |
| } | |
| var a = new o(); | |
| function c() { | |
| return new MessageChannel(); | |
| } | |
| const l = (...e) => { | |
| s("[iframeCommunication]", ...e); | |
| }; | |
| class d { | |
| constructor(t, s) { | |
| this.queue = []; | |
| this.initialised = !1; | |
| this.events = new Map(); | |
| this.eventEmitter = i(); | |
| this.handleMessage = (e) => { | |
| if (!e.data || !e.data.type) return; | |
| const { type: t, payload: s } = e.data; | |
| l("Handling message", { type: t, payload: s }); | |
| this.eventEmitter.emit(t, s); | |
| a.emit(t, Object.assign({}, s, { id: this.id })); | |
| }; | |
| this.handleFrameLoaded = () => { | |
| if (this.iframe.contentWindow) { | |
| l("Iframe loaded", this.iframe); | |
| this.iframe.contentWindow.postMessage({ type: e.INIT }, "*", [ | |
| this.channel.port2, | |
| ]); | |
| this.initialised = !0; | |
| this.flushQueue(); | |
| } else l("Content window not there, not loading"); | |
| }; | |
| this.iframe = t; | |
| this.id = s; | |
| this.channel = c(); | |
| this.channel.port1.onmessage = this.handleMessage; | |
| this.iframe.addEventListener("load", this.handleFrameLoaded); | |
| l("Iframe communication set up", s, t); | |
| } | |
| sendMessage({ type: e, payload: t }) { | |
| if (this.initialised) { | |
| l("Posting message", { type: e, payload: t }); | |
| this.channel.port1.postMessage({ type: e, payload: t }); | |
| } else { | |
| l("Queueing message", { type: e, payload: t }); | |
| this.queue.push({ type: e, payload: t }); | |
| } | |
| } | |
| registerHandler(e, t) { | |
| this.eventEmitter.on(e, t); | |
| } | |
| registerHandlers(e) { | |
| l("Registering handlers in IframeCommunication", e); | |
| Object.keys(e).forEach((t) => { | |
| const s = t, | |
| n = e[s]; | |
| n && this.registerHandler(s, n); | |
| }); | |
| } | |
| removeHandler(e) { | |
| l("Removing handler", e); | |
| this.eventEmitter.off(e); | |
| } | |
| remove() { | |
| l("Removing frame communicator:", this.id); | |
| this.channel.port1.close(); | |
| a.removeCommunicator(this.id); | |
| } | |
| flushQueue() { | |
| if (this.initialised) { | |
| l("Flushing queue", this.queue); | |
| this.queue.forEach((e) => { | |
| this.sendMessage(e); | |
| }); | |
| } else l("Not flushing queue, not initialised"); | |
| } | |
| } | |
| function h(e, t) { | |
| l("Creating iframe communication"); | |
| const s = new d(e, t); | |
| a.registerCommunicator(s, t); | |
| return s; | |
| } | |
| function u(e) { | |
| const t = window.location.origin.startsWith("http:") | |
| ? "http://" | |
| : "https://"; | |
| return e.startsWith(t) ? e : `${t}${e.replace(/http(s)?:\/\//, "")}`; | |
| } | |
| function m(e) { | |
| e.style.border = "none"; | |
| e.style.height = "100%"; | |
| e.style.width = "100%"; | |
| e.style.visibility = "hidden"; | |
| } | |
| function p(e, t) { | |
| const s = document.createElement("iframe"); | |
| s.src = u(e); | |
| Object.keys(t).forEach((e) => { | |
| s.setAttribute(e, t[e]); | |
| }); | |
| m(s); | |
| return s; | |
| } | |
| function f(e, t, s) { | |
| e.startsWith("http") || (e = `https://${e}`); | |
| const n = new URL(e); | |
| n.searchParams.set(t, s); | |
| return n.href; | |
| } | |
| const E = (...e) => { | |
| s("[FrameComponent]", ...e); | |
| }, | |
| g = () => {}; | |
| class S { | |
| constructor({ | |
| id: e, | |
| container: t, | |
| iframeSrc: s, | |
| resizeHeight: n, | |
| onFrameReady: i, | |
| useResponsiveStyling: r, | |
| extraAttributes: o = {}, | |
| }) { | |
| this.onFrameReady = g; | |
| this.resizeHeight = !0; | |
| this.handleHeightChange = ({ height: e }) => { | |
| if (!this.resizeHeight) return; | |
| const t = | |
| e + 2 * parseInt(getComputedStyle(this.iframe).borderTopWidth, 10); | |
| E("Handle height change", this.id, { adjustedHeight: t, height: e }); | |
| this.setContainerStyle({ height: `${t}px` }); | |
| }; | |
| this.id = e; | |
| this.resizeHeight = n; | |
| if (r) { | |
| E("Responsive styling is enabled", e); | |
| s = f(s, "enableResponsiveStyles", "true"); | |
| } | |
| this.iframe = p(s, o); | |
| this.container = t; | |
| this.iframeCommunicator = h(this.iframe, e); | |
| i && (this.onFrameReady = i); | |
| t.appendChild(this.iframe); | |
| this.registerHandlers(); | |
| } | |
| registerHandlers() { | |
| this.iframeCommunicator.registerHandlers({ | |
| [e.STARTED]: this.onFrameReady, | |
| [e.NEW_HEIGHT]: this.handleHeightChange, | |
| }); | |
| } | |
| setStyle(e) { | |
| E("Set style", this.id, e); | |
| t(this.iframe, e); | |
| } | |
| setShouldResize(e) { | |
| this.resizeHeight = e; | |
| } | |
| setContainerStyle(e) { | |
| t(this.container, e); | |
| } | |
| } | |
| function _(e) { | |
| return new S(e); | |
| } | |
| class I { | |
| constructor(e, t) { | |
| this.listeners = new Set(); | |
| this.batching = !1; | |
| this.queue = []; | |
| this.subscribe = (e) => { | |
| this.listeners.add(e); | |
| let t = () => {}; | |
| this.options && | |
| this.options.onSubscribe && | |
| (t = this.options.onSubscribe(e, this)); | |
| return () => { | |
| this.listeners.delete(e); | |
| t(); | |
| }; | |
| }; | |
| this.setState = (e) => { | |
| const t = this.state; | |
| this.options && this.options.updateFn | |
| ? (this.state = this.options.updateFn(t)(e)) | |
| : (this.state = e(t)); | |
| if (this.state !== t) { | |
| this.queue.push(() => { | |
| this.listeners.forEach((e) => e(this.state, t)); | |
| this.options && | |
| this.options.onUpdate && | |
| this.options.onUpdate(this.state, t); | |
| }); | |
| this._flush(); | |
| } | |
| }; | |
| this._flush = () => { | |
| if (!this.batching) { | |
| this.queue.forEach((e) => e()); | |
| this.queue = []; | |
| } | |
| }; | |
| this.batch = (e) => { | |
| this.batching = !0; | |
| e(); | |
| this.batching = !1; | |
| this._flush(); | |
| }; | |
| this.state = e; | |
| this.options = t; | |
| } | |
| } | |
| function b(e, t = !1) { | |
| !window.navigator.userAgent.includes("Firefox") && t | |
| ? window.open(e, "_blank", "noopener") | |
| : window.location.assign(e); | |
| } | |
| const C = "hubspotutk", | |
| w = "__hstc", | |
| A = "__hssc", | |
| y = (e) => { | |
| const t = document.cookie.match(`(^|[^;]+)\\s*${e}\\s*=\\s*([^;]+)`); | |
| return t ? t.pop() : ""; | |
| }, | |
| v = () => y(C), | |
| F = () => y(w), | |
| T = () => y(A), | |
| R = (...e) => { | |
| s("[models/Analytics]", ...e); | |
| }; | |
| class O { | |
| constructor() { | |
| this._handleFetchSucceded = (e) => { | |
| this.store.setState((t) => { | |
| const s = {}; | |
| s.path = e.path; | |
| s.referrerPath = e.referrerPath; | |
| s.referrer = ""; | |
| s.analyticsPageId = e.pageId; | |
| s.hsfp = e._getFingerprint(); | |
| s.canonicalUrl = e.canonicalUrl; | |
| s.contentType = e.contentType; | |
| s.pageId = O.getPageId() || e.pageId; | |
| e.session && (s.hssc = e.session.get()); | |
| if (e.utk) { | |
| s.hstc = e.utk.get(); | |
| s.hutk = e.utk.visitor; | |
| } | |
| return Object.assign({}, t, s, { isLoaded: !0 }); | |
| }); | |
| }; | |
| window._hsq = window._hsq || []; | |
| const e = { | |
| isLoaded: !1, | |
| pageUrl: window.location.href, | |
| pageTitle: window.document.title, | |
| referrer: window.document.referrer, | |
| userAgent: window.navigator.userAgent, | |
| hutk: v(), | |
| hssc: T(), | |
| hstc: F(), | |
| pageId: O.getPageId(), | |
| }; | |
| this.store = new I(e); | |
| this.fetchAnalytics(); | |
| } | |
| fetchAnalytics() { | |
| this._analyticsQueue.push(this._handleFetchSucceded); | |
| } | |
| subscribe(e) { | |
| return this.store.subscribe(e); | |
| } | |
| get analytics() { | |
| return this.store.state; | |
| } | |
| track(e) { | |
| R("Tracking analytics", e); | |
| this._analyticsQueue.push(e); | |
| } | |
| get _analyticsQueue() { | |
| return window._hsq; | |
| } | |
| static getPageId() { | |
| const e = window.hsVars; | |
| return e && e.analytics_page_id | |
| ? e.analytics_page_id | |
| : e && e.page_id | |
| ? e.page_id | |
| : null; | |
| } | |
| static getLanguage() { | |
| const e = window.hsVars; | |
| return e && e.language ? e.language : null; | |
| } | |
| } | |
| var N = new O(); | |
| const D = (...e) => { | |
| s("[AnalyticsProxyController]", ...e); | |
| }, | |
| M = ["trackFormView", "trackFormVisible", "trackFormInteraction"]; | |
| class P { | |
| constructor({ applicationController: e, analyticsStore: t }) { | |
| this.viewQueue = new Map(); | |
| this.applicationController = e; | |
| this.analyticsStore = t; | |
| this.listenForAnalyticsUpdate(); | |
| this.listenForProxyMessage(); | |
| } | |
| listenForAnalyticsUpdate() { | |
| this.analyticsStore.subscribe((t, s) => { | |
| !s.isLoaded && | |
| t.isLoaded && | |
| a.broadcastAll({ type: e.RECEIVED_ANALYTICS, payload: t }); | |
| }); | |
| } | |
| flushViewQueue(e) { | |
| const t = this.viewQueue.get(e) || []; | |
| for (const e of t) this.analyticsStore.track(e); | |
| this.viewQueue.delete(e); | |
| } | |
| handleFormView(e, t) { | |
| const s = this.applicationController.viewedStore; | |
| if (s && s.hasBeenViewed(e)) { | |
| this.analyticsStore.track(t); | |
| return; | |
| } | |
| const n = this.viewQueue.get(e) || []; | |
| D("Adding form view to analytics queue", { id: e, analytics: t }); | |
| this.viewQueue.set(e, [...n, t]); | |
| } | |
| listenForProxyMessage() { | |
| a.registerHandlers({ | |
| [e.PROXY_ANALYTICS]: ({ analytics: e, id: t }) => { | |
| P.isFormView(e) | |
| ? this.handleFormView(t, e) | |
| : this.analyticsStore.track(e); | |
| }, | |
| }); | |
| } | |
| static isFormView(e) { | |
| const [t] = e; | |
| return M.includes(t); | |
| } | |
| } | |
| class x { | |
| constructor({ applicationController: e }) { | |
| this.applicationController = e; | |
| this.listenForNavigation(); | |
| } | |
| listenForNavigation() { | |
| a.registerHandlers({ | |
| [e.NAVIGATE_PAGE]: ({ url: e, openNewTab: t, id: s }) => { | |
| const n = this.applicationController.getNavigationUrl( | |
| { url: e, openNewTab: t }, | |
| s, | |
| ); | |
| if (t) return; | |
| b( | |
| n, | |
| this.applicationController.getShouldOpenNewTab( | |
| { url: e, openNewTab: t }, | |
| s, | |
| ), | |
| ); | |
| }, | |
| }); | |
| } | |
| } | |
| class H { | |
| constructor() { | |
| this.extractedStyles = { rules: {}, keyframes: {} }; | |
| this.crossOriginStyleSheets = new Set(); | |
| } | |
| extractStyles() { | |
| const e = { rules: {}, keyframes: {} }; | |
| for (const t of document.styleSheets) | |
| if (!this.crossOriginStyleSheets.has(t)) | |
| try { | |
| const s = t.cssRules || t.rules; | |
| for (const t of s) | |
| t instanceof CSSStyleRule | |
| ? (e.rules[t.selectorText] = this.extractProperties(t.style)) | |
| : t instanceof CSSKeyframesRule && | |
| (e.keyframes[t.name] = this.extractKeyframes(t)); | |
| } catch (e) { | |
| this.crossOriginStyleSheets.add(t); | |
| } | |
| this.extractedStyles = e; | |
| } | |
| extractProperties(e) { | |
| const t = {}; | |
| for (const s of Array.from(e)) t[s] = e.getPropertyValue(s); | |
| return t; | |
| } | |
| extractKeyframes(e) { | |
| const t = []; | |
| for (const s of e.cssRules) { | |
| if (!(s instanceof CSSKeyframeRule)) continue; | |
| const e = this.extractProperties(s.style); | |
| t.push({ keyText: s.keyText, style: e }); | |
| } | |
| return t; | |
| } | |
| } | |
| class U { | |
| constructor() { | |
| this.analyticsStore = N; | |
| this.analyticsProxyController = new P({ | |
| analyticsStore: this.analyticsStore, | |
| applicationController: this, | |
| }); | |
| this.navigationProxyController = new x({ applicationController: this }); | |
| this.styleExtractorController = new H(); | |
| } | |
| getNavigationUrl(e, t) { | |
| return e.url; | |
| } | |
| getShouldOpenNewTab(e, t) { | |
| return e.openNewTab; | |
| } | |
| } | |
| class L { | |
| constructor() { | |
| this.handleIntersection = (e) => { | |
| e.forEach((e) => { | |
| if (e.isIntersecting) { | |
| const t = e.target; | |
| this.onElementAppear(t); | |
| this.observedElements.delete(t); | |
| this.observer.unobserve(t); | |
| } | |
| }); | |
| }; | |
| this.observer = new IntersectionObserver(this.handleIntersection, { | |
| threshold: 0.5, | |
| }); | |
| this.observedElements = new Map(); | |
| } | |
| onElementAppear(e) { | |
| const t = this.observedElements.get(e); | |
| t && t(e); | |
| } | |
| observe(e, t) { | |
| if ( | |
| (() => { | |
| const t = e.getBoundingClientRect(), | |
| s = window.innerHeight; | |
| return t.bottom >= 0 && t.top < s; | |
| })() | |
| ) | |
| t(e); | |
| else if (!this.observedElements.has(e)) { | |
| this.observedElements.set(e, t); | |
| this.observer.observe(e); | |
| } | |
| } | |
| unobserve(e) { | |
| if (this.observedElements.has(e)) { | |
| this.observedElements.delete(e); | |
| this.observer.unobserve(e); | |
| } | |
| } | |
| } | |
| function V() { | |
| return new L(); | |
| } | |
| function k(e, t) { | |
| const s = new Set(e.keys()), | |
| n = new Set(t.keys()); | |
| return new Set([...n].filter((e) => !s.has(e))); | |
| } | |
| function j(e, t) { | |
| const s = new Map(e); | |
| for (const [e, n] of t) s.set(e, n); | |
| return s; | |
| } | |
| const $ = (e) => null === e, | |
| B = (e) => void 0 === e, | |
| q = (e) => "object" == typeof e, | |
| G = (e) => "string" == typeof e, | |
| Y = (e) => q(e) && 0 === Object.keys(e).length, | |
| z = (e) => G(e) && 0 === e.trim().length, | |
| X = (e) => $(e) || B(e) || z(e) || Y(e); | |
| const W = "hs-form-frame", | |
| Q = "data-env", | |
| K = "data-form-id", | |
| J = "data-portal-id", | |
| Z = "data-region", | |
| ee = "data-sfdc-campaign-id", | |
| te = "data-go-to-webinar-webinar-key", | |
| se = "data-webinar-id", | |
| ne = "data-webinar-source", | |
| ie = "data-test-id", | |
| re = "embedded-form-", | |
| oe = "title"; | |
| var ae = () => Array.from(document.getElementsByClassName(W)); | |
| const ce = "na1", | |
| le = "prod", | |
| de = "forms-embed-v3-frame", | |
| he = (e, t) => e.getAttribute(t) || ""; | |
| var ue = (e) => ({ | |
| formId: he(e, K), | |
| portalId: Number(he(e, J)), | |
| region: he(e, Z) || ce, | |
| env: he(e, Q) || le, | |
| sfdcCampaignId: he(e, ee), | |
| goToWebinarWebinarKey: he(e, te), | |
| webinarId: he(e, se), | |
| webinarSource: he(e, ne), | |
| }); | |
| function me(e) { | |
| const t = new MutationObserver((t) => { | |
| const s = []; | |
| for (const e of t) | |
| if ("childList" === e.type) | |
| for (const t of e.addedNodes) | |
| t instanceof HTMLElement && t.classList.contains(W) && s.push(t); | |
| s.length && e(s); | |
| }); | |
| t.observe(document.body, { childList: !0, subtree: !0 }); | |
| return () => { | |
| t.disconnect(); | |
| }; | |
| } | |
| const pe = /^[{]?[0-9a-fA-F]{8}-?([0-9a-fA-F]{4}-?){3}[0-9a-fA-F]{12}[}]?$/, | |
| fe = ["qa", "prod"]; | |
| var Ee = (e) => { | |
| const { portalId: t, formId: s, region: n, env: i } = e; | |
| return !(t < 1) && !!pe.test(s) && !!n && !!fe.includes(i); | |
| }; | |
| function ge(e = ae()) { | |
| const t = new Map(), | |
| s = new Map(); | |
| e.forEach((e) => { | |
| const n = ue(e); | |
| if (!Ee(n)) { | |
| console.error(`${n} has missing or invalid data attributes.`); | |
| return; | |
| } | |
| const { formId: i } = n; | |
| t.set(i, [...(t.get(i) || []), e]); | |
| s.set(e, n); | |
| }); | |
| return { formContainerElementsMap: t, embedContextsMap: s }; | |
| } | |
| const Se = a; | |
| class _e { | |
| constructor({ embedContext: t, container: s, iframeSrc: n }) { | |
| this.handleLoad = () => { | |
| this.frameComponent.setStyle({ visibility: "" }); | |
| }; | |
| this.sendEmbedContextWithInstanceId = (t) => { | |
| this.frameComponent.iframeCommunicator.sendMessage({ | |
| type: e.SEND_EMBED_CONTEXT, | |
| payload: t, | |
| }); | |
| }; | |
| this.listenForV4FormReadyEvent = () => { | |
| Se.registerHandlers({ | |
| [e.V4_FORM_READY]: ({ instanceId: e }) => { | |
| this.sendEmbedContextWithInstanceId( | |
| Object.assign({ instanceId: e }, this.embedContext), | |
| ); | |
| }, | |
| }); | |
| }; | |
| this.listenForLoad(); | |
| this.container = s; | |
| this.initContainer(); | |
| this.embedContext = t; | |
| this.frameComponent = _({ | |
| iframeSrc: n, | |
| container: s, | |
| id: t.formId, | |
| onFrameReady: this.resolveFrameload, | |
| resizeHeight: !0, | |
| extraAttributes: { | |
| [ie]: `${re}${t.formId}`, | |
| [oe]: "Form", | |
| scrolling: "no", | |
| }, | |
| }); | |
| this.listenForV4FormReadyEvent(); | |
| } | |
| initContainer() { | |
| this.container.style.height = "0"; | |
| this.container.replaceChildren(); | |
| } | |
| listenForLoad() { | |
| const e = new Promise((e) => { | |
| this.resolveFrameload = e; | |
| }); | |
| Promise.all([e]) | |
| .then(() => { | |
| this.handleLoad(); | |
| }) | |
| .catch(() => {}); | |
| } | |
| } | |
| function Ie({ embedContext: e, container: t, iframeSrc: s }) { | |
| return new _e({ embedContext: e, container: t, iframeSrc: s }); | |
| } | |
| const be = { APP: "app", APP_API: "app-api" }; | |
| function Ce(e, t) { | |
| const s = t && t.hubletOverride ? t.hubletOverride : e; | |
| return s === ce ? "" : `-${s}`; | |
| } | |
| function we(e, t, s) { | |
| if (s && s.hubletPostfixLocation && "domain" === s.hubletPostfixLocation) | |
| return t; | |
| t === be.APP_API && (t = be.APP); | |
| return `${t}${Ce(e, s)}`; | |
| } | |
| function Ae(e, t, s) { | |
| return `${ve(s)}${ye(t, s)}${Fe(e, s)}`; | |
| } | |
| function ye(e, t) { | |
| return "qa" === (t && t.envOverride ? t.envOverride : e) ? "qa" : ""; | |
| } | |
| function ve(e) { | |
| return e && e.domainOverride ? e.domainOverride : "hubspot"; | |
| } | |
| function Fe(e, t) { | |
| return t && t.hubletPostfixLocation && "domain" === t.hubletPostfixLocation | |
| ? Ce(e, t) | |
| : ""; | |
| } | |
| function Te(e) { | |
| return e && e.tldOverride ? e.tldOverride : "com"; | |
| } | |
| function Re(e) { | |
| return e === be.APP_API ? "/api" : ""; | |
| } | |
| function Oe(e, t, s, n) { | |
| return `https://${we(t, e, n)}.${Ae(t, s, n)}.${Te(n)}${Re(e)}`; | |
| } | |
| var Ne = ({ | |
| subDomainPrefix: e, | |
| hublet: t, | |
| isQa: s, | |
| pathname: n = "", | |
| pathValues: i = {}, | |
| domainOverride: r, | |
| tldOverride: o, | |
| query: a, | |
| }) => { | |
| const c = Object.keys(i).reduce( | |
| (e, t) => e.replace(RegExp(`{{${t}}}`, "g"), i[t]), | |
| n, | |
| ), | |
| l = Oe(e, t || ce, s ? "qa" : "prod", { | |
| domainOverride: r, | |
| tldOverride: o, | |
| }), | |
| d = new URL(c, l); | |
| if (a) for (const [e, t] of Object.entries(a)) d.searchParams.append(e, t); | |
| return d.href; | |
| }; | |
| const De = new URLSearchParams(window.location.search).get("isLocal"), | |
| Me = () => window.location.search; | |
| function Pe({ | |
| portalId: e, | |
| formId: t, | |
| region: s, | |
| env: n, | |
| hutk: i, | |
| editorVersion: r, | |
| }) { | |
| const o = { | |
| hublet: "true" === De ? ce : s, | |
| isQa: "true" !== De && "qa" === n, | |
| subDomainPrefix: "true" === De ? "local" : "js", | |
| domainOverride: "true" === De ? "hsappstatic" : "hsforms", | |
| tldOverride: "net", | |
| }; | |
| return Ne( | |
| "2.0" === r | |
| ? Object.assign({}, o, { | |
| pathname: | |
| "true" === De | |
| ? "ui-forms-embed-components-app/static/html/frame.html" | |
| : "ui-forms-embed-components-app/frame.html", | |
| query: Object.assign( | |
| { | |
| _hsPortalId: `${e || ""}`, | |
| _hsFormId: t || "", | |
| _hsIsQa: `${"qa" === n}`, | |
| _hsHublet: s || ce, | |
| _hsDisableScriptloader: "true", | |
| _hsDisableRedirect: "true", | |
| }, | |
| i && { _hsUtk: i }, | |
| Object.fromEntries(new URLSearchParams(Me())), | |
| ), | |
| }) | |
| : Object.assign({}, o, { | |
| pathname: | |
| "true" === De | |
| ? "forms-embed/static/html/{{env}}-na-iframe-page.html" | |
| : "forms/embed/iframe.html", | |
| pathValues: { env: "prod" === n ? "" : "qa" }, | |
| query: Object.assign( | |
| {}, | |
| Object.fromEntries(new URLSearchParams(Me())), | |
| ), | |
| }), | |
| ); | |
| } | |
| class xe { | |
| constructor({ | |
| embeddedContainers: e, | |
| environment: t, | |
| handleView: s, | |
| formStore: n, | |
| analyticsStore: i, | |
| }) { | |
| this.elementObserver = V(); | |
| this.embedComponents = new Map(); | |
| this.embeddedContainers = e; | |
| this.environment = t; | |
| this.handleView = s; | |
| this.formStore = n; | |
| this.analyticsStore = i; | |
| this.listenForEmbeddedContainers(); | |
| } | |
| listenForEmbeddedContainers() { | |
| this.embeddedContainers.subscribe((e, t) => { | |
| const s = k(t.embedContextsMap, e.embedContextsMap); | |
| this.createViews([...s]); | |
| this.listenForElementViews([...s]); | |
| }); | |
| } | |
| listenForElementViews(e) { | |
| for (const t of e) { | |
| const e = this.embeddedContainers.embedContextsMap.get(t); | |
| if (!e) return; | |
| this.elementObserver.observe(t, () => this.handleView(e.formId)); | |
| } | |
| } | |
| createViews(e) { | |
| for (const t of e) { | |
| const e = this.embeddedContainers.embedContextsMap.get(t); | |
| if (!e) continue; | |
| if (this.embedComponents.has(t)) continue; | |
| const s = this.analyticsStore.analytics.hutk, | |
| n = Ie({ | |
| embedContext: Object.assign( | |
| {}, | |
| e, | |
| this.environment.propsForContext(), | |
| s && { hutk: s }, | |
| ), | |
| container: t, | |
| iframeSrc: Pe({ | |
| hutk: s, | |
| portalId: e.portalId, | |
| formId: e.formId, | |
| region: e.region, | |
| env: e.env, | |
| editorVersion: this.formStore.formEditorVersion, | |
| }), | |
| }); | |
| this.embedComponents.set(t, n); | |
| } | |
| } | |
| } | |
| function He(e) { | |
| return new xe(e); | |
| } | |
| const Ue = "www.recaptcha.net", | |
| Le = "www.google.com", | |
| Ve = () => | |
| (window && window.grecaptcha && window.grecaptcha.enterprise) || void 0, | |
| ke = (e) => `https://${"CN" === e ? Ue : Le}/recaptcha`, | |
| je = ({ callbackId: e, countryCode: t, locale: s }) => { | |
| const n = () => { | |
| const n = window.document.createElement("script"); | |
| n.async = !0; | |
| n.defer = !0; | |
| n.id = "recaptcha"; | |
| n.onerror = (e) => { | |
| throw e; | |
| }; | |
| n.src = `${ke(t)}/enterprise.js?&onload=${e}&render=explicit&hl=${s}`; | |
| n.type = "text/javascript"; | |
| window.document.head.appendChild(n); | |
| }; | |
| "complete" === window.document.readyState | |
| ? n() | |
| : window.addEventListener("load", n); | |
| }, | |
| $e = "hs-forms-embed-frame-recaptcha"; | |
| class Be { | |
| constructor() { | |
| this.registerRecaptchaHandlers = () => { | |
| Se.registerHandlers({ | |
| [e.RENDER_RECAPTCHA]: (e) => { | |
| this.handleRenderRecaptcha(e); | |
| }, | |
| [e.EXECUTE_RECAPTCHA]: ({ UUID: e }) => { | |
| this.handleExecuteRecaptcha(e); | |
| }, | |
| [e.RESET_RECAPTCHA]: ({ UUID: e }) => { | |
| this.handleResetRecaptcha(e); | |
| }, | |
| }); | |
| }; | |
| this.handleRenderRecaptcha = ({ | |
| UUID: e, | |
| callbackId: t, | |
| countryCode: s, | |
| locale: n, | |
| sitekey: i, | |
| size: r, | |
| badge: o, | |
| inherit: a, | |
| }) => { | |
| this.renderRecaptchaInTarget({ | |
| sitekey: i, | |
| UUID: e, | |
| callbackId: t, | |
| size: r, | |
| badge: o, | |
| inherit: a, | |
| }); | |
| je({ callbackId: t, countryCode: s, locale: n }); | |
| }; | |
| this.createRecaptchaTarget = (e) => { | |
| const t = `${$e}_${e}`, | |
| s = document.createElement("div"); | |
| s.setAttribute("id", t); | |
| s.style.setProperty("display", "none"); | |
| s.style.setProperty("width", "0px"); | |
| s.style.setProperty("height", "0px"); | |
| document.body.append(s); | |
| this.recaptchas.set(e, { target: s }); | |
| return s; | |
| }; | |
| this.renderRecaptchaInTarget = ({ | |
| sitekey: e, | |
| UUID: t, | |
| callbackId: s, | |
| size: n, | |
| badge: i, | |
| inherit: r, | |
| }) => { | |
| window[s] = () => { | |
| const s = this.createRecaptchaTarget(t), | |
| o = Ve(), | |
| a = this.recaptchas.get(t); | |
| if (o && s && a) { | |
| const c = o.render( | |
| s, | |
| { | |
| sitekey: e, | |
| callback: (e) => { | |
| this.onSuccess(e, t); | |
| }, | |
| "expired-callback": () => { | |
| this.onExpired(t); | |
| }, | |
| size: n, | |
| badge: i, | |
| }, | |
| r, | |
| ); | |
| this.recaptchas.set(t, Object.assign({}, a, { widgetId: c })); | |
| } | |
| }; | |
| }; | |
| this.onSuccess = (t, s) => { | |
| Se.broadcastAll({ | |
| type: e.RECAPTCHA_SUCCESS, | |
| payload: { token: t, UUID: s }, | |
| }); | |
| }; | |
| this.onExpired = (t) => { | |
| Se.broadcastAll({ type: e.RECAPTCHA_EXPIRED, payload: { UUID: t } }); | |
| }; | |
| this.recaptchas = new Map(); | |
| this.registerRecaptchaHandlers(); | |
| } | |
| handleExecuteRecaptcha(e) { | |
| const t = this.recaptchas.get(e); | |
| if (t) { | |
| const e = t.widgetId, | |
| s = Ve(); | |
| void 0 !== e && s && s.execute(e); | |
| } | |
| } | |
| handleResetRecaptcha(e) { | |
| const t = this.recaptchas.get(e); | |
| if (t) { | |
| const e = t.widgetId, | |
| s = Ve(); | |
| void 0 !== e && s && s.reset(e); | |
| } | |
| } | |
| } | |
| function qe() { | |
| return new Be(); | |
| } | |
| class Ge { | |
| constructor() { | |
| this.markAsViewed = (e) => { | |
| this.store.setState((t) => | |
| Object.assign({}, t, { viewed: new Set([...t.viewed, e]) }), | |
| ); | |
| }; | |
| const e = { viewed: new Set() }; | |
| this.store = new I(e); | |
| } | |
| subscribe(e) { | |
| this.store.subscribe(e); | |
| } | |
| hasBeenViewed(e) { | |
| return this.store.state.viewed.has(e); | |
| } | |
| get viewed() { | |
| return this.store.state.viewed; | |
| } | |
| } | |
| function Ye() { | |
| return new Ge(); | |
| } | |
| class ze extends U { | |
| constructor({ formsStore: e, environment: t, embededContainers: s }) { | |
| super(); | |
| this.handleView = (e) => { | |
| this.viewedStore.markAsViewed(e); | |
| this.analyticsProxyController.flushViewQueue(e); | |
| }; | |
| this.formsStore = e; | |
| this.environment = t; | |
| this.embededContainers = s; | |
| this.viewedStore = Ye(); | |
| this.embeddedFormsController = He({ | |
| embeddedContainers: this.embededContainers, | |
| environment: this.environment, | |
| handleView: this.handleView, | |
| formStore: this.formsStore, | |
| analyticsStore: this.analyticsStore, | |
| }); | |
| this.recaptchaController = qe(); | |
| } | |
| initFormController() { | |
| this.embededContainers.addElements(ge()); | |
| this.listenForAddedEmbeddedContainers(); | |
| } | |
| listenForAddedEmbeddedContainers() { | |
| me((e) => { | |
| const t = ge(e); | |
| this.embededContainers.addElements(t); | |
| }); | |
| } | |
| } | |
| var Xe = ze; | |
| const We = "__HS__FORMS__EMBED__", | |
| Qe = "HubspotFormsV4", | |
| Ke = "__SECRET_INTERNAL_DO_NOT_USE", | |
| Je = "DEFINITION_NOT_FOUND", | |
| Ze = "DEFINITION_FAILURE", | |
| et = "INVALID_FORM_GUID", | |
| tt = "IP_ADDRESS_IS_PROBABLY_A_BOT", | |
| st = "NON_EMBEDDABLE_FORM", | |
| nt = "UNCAUGHT_JS_ERROR", | |
| it = "DEFINITION_SUCCESS", | |
| rt = "FALLBACK_DEFINITION_SUCCESS", | |
| ot = "FALLBACK_DEFINITION_FAILURE", | |
| at = "SUBMISSION_PERIOD_ENDED", | |
| ct = "RATE_LIMIT_EXCEEDED"; | |
| var lt = (e) => | |
| Object.keys(e || {}).reduce( | |
| (t, s) => Object.assign({}, t, X(e[s]) ? {} : { [s]: e[s] }), | |
| {}, | |
| ); | |
| var dt = () => | |
| "randomUUID" in crypto | |
| ? crypto.randomUUID() | |
| : ([1e7] + -1e3 + -4e3 + 8e3 + -1e11).replace(/[018]/g, (e) => | |
| ( | |
| e ^ | |
| (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (e / 4))) | |
| ).toString(16), | |
| ); | |
| const ht = "?"; | |
| function ut() { | |
| return "undefined" == typeof document || null == document.location | |
| ? "" | |
| : document.location.href; | |
| } | |
| function mt() { | |
| return "undefined" == typeof document || null == document.location | |
| ? "" | |
| : document.location.origin | |
| ? document.location.origin | |
| : `${document.location.protocol}//${document.location.hostname}${ | |
| document.location.port ? `:${document.location.port}` : "" | |
| }`; | |
| } | |
| function pt(e) { | |
| if (void 0 === e.stack || !e.stack) return null; | |
| const t = | |
| /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, | |
| s = | |
| /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i, | |
| n = | |
| /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i, | |
| i = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, | |
| r = /\((\S*)(?::(\d+))(?::(\d+))\)/, | |
| o = e.stack.split("\n"), | |
| a = []; | |
| let c, l, d; | |
| for (let h = 0, u = o.length; h < u; ++h) { | |
| if ((l = t.exec(o[h]))) { | |
| const e = l[2] && 0 === l[2].indexOf("native"); | |
| if (l[2] && 0 === l[2].indexOf("eval") && (c = r.exec(l[2]))) { | |
| l[2] = c[1]; | |
| l[3] = c[2]; | |
| l[4] = c[3]; | |
| } | |
| d = { | |
| filename: e ? null : l[2], | |
| function: l[1] || ht, | |
| args: e ? [l[2]] : [], | |
| lineno: l[3] ? +l[3] : null, | |
| colno: l[4] ? +l[4] : null, | |
| }; | |
| } else if ((l = s.exec(o[h]))) | |
| d = { | |
| filename: l[2], | |
| function: l[1] || ht, | |
| args: [], | |
| lineno: +l[3], | |
| colno: l[4] ? +l[4] : null, | |
| }; | |
| else { | |
| if (!(l = n.exec(o[h]))) continue; | |
| if (l[3] && l[3].indexOf(" > eval") > -1 && (c = i.exec(l[3]))) { | |
| l[3] = c[1]; | |
| l[4] = c[2]; | |
| l[5] = null; | |
| } else | |
| 0 !== h || | |
| l[5] || | |
| void 0 === e.columnNumber || | |
| (a[0].column = e.columnNumber + 1); | |
| d = { | |
| filename: l[3], | |
| function: l[1] || ht, | |
| args: l[2] ? l[2].split(",") : [], | |
| lineno: l[4] ? +l[4] : null, | |
| colno: l[5] ? +l[5] : null, | |
| }; | |
| } | |
| !d.function && d.line && (d.function = ht); | |
| if (d.filename && "blob:" === d.filename.substr(0, 5)) { | |
| const e = new XMLHttpRequest(); | |
| e.open("GET", d.filename, !1); | |
| e.send(null); | |
| if (200 === e.status) { | |
| let t = e.responseText || ""; | |
| t = t.slice(-300); | |
| const s = t.match(/\/\/# sourceMappingURL=(.*)$/); | |
| if (s) { | |
| let e = s[1]; | |
| "~" === e.charAt(0) && (e = mt() + e.slice(1)); | |
| d.url = e.slice(0, -4); | |
| } | |
| } | |
| } | |
| a.push(d); | |
| } | |
| return a.length | |
| ? { name: e.name, message: e.message, url: ut(), stack: a } | |
| : null; | |
| } | |
| function ft(e, t, s) { | |
| const n = { filename: t, lineno: s }; | |
| if (n.filename && n.lineno) { | |
| e.incomplete = !1; | |
| n.function || (n.function = ht); | |
| if (e.stack.length > 0 && e.stack[0].filename === n.filename) { | |
| if (e.stack[0].lineno === n.lineno) return !1; | |
| if (!e.stack[0].lineno && e.stack[0].function === n.function) { | |
| e.stack[0].lineno = n.lineno; | |
| return !1; | |
| } | |
| } | |
| e.stack.unshift(n); | |
| e.partial = !0; | |
| return !0; | |
| } | |
| e.incomplete = !0; | |
| return !1; | |
| } | |
| function Et(e, t) { | |
| const s = | |
| /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, | |
| n = [], | |
| i = {}; | |
| let r, | |
| o, | |
| a = !1; | |
| for (let e = Et.caller; e && !a; e = e.caller) | |
| if (e !== gt) { | |
| o = { filename: null, function: ht, lineno: null, colno: null }; | |
| e.name | |
| ? (o.function = e.name) | |
| : (r = s.exec(e.toString())) && (o.function = r[1]); | |
| if (void 0 === o.function) | |
| try { | |
| o.function = r.input.substring(0, r.input.indexOf("{")); | |
| } catch (e) {} | |
| i[`${e}`] ? (a = !0) : (i[`${e}`] = !0); | |
| n.push(o); | |
| } | |
| t && n.splice(0, t); | |
| const c = { name: e.name, message: e.message, filename: ut(), stack: n }; | |
| ft( | |
| c, | |
| e.sourceURL || e.fileName, | |
| e.line || e.lineNumber, | |
| e.message || e.description, | |
| ); | |
| return c; | |
| } | |
| function gt(e, t) { | |
| if ("string" == typeof e) | |
| return { name: "Error", message: e, filename: ut() }; | |
| let s = null; | |
| t = null == t ? 0 : +t; | |
| try { | |
| s = pt(e); | |
| if (s) return s; | |
| } catch (e) {} | |
| try { | |
| s = Et(e, t + 1); | |
| if (s) return s; | |
| } catch (e) {} | |
| return { name: e.name, message: e.message, filename: ut() }; | |
| } | |
| var St = (e) => { | |
| new Image().src = e; | |
| }; | |
| const _t = [ | |
| /timeout exceeded/, | |
| /Request aborted/, | |
| /Network Error/, | |
| /Failed to execute 'send' on 'XMLHttpRequest'/, | |
| /Unexpected end of JSON input/, | |
| /Unexpected token/, | |
| /IP_ADDRESS_IS_PROBABLY_A_BOT/, | |
| /SUBMISSION_PERIOD_ENDED/, | |
| /RATE_LIMIT_EXCEEDED/, | |
| ], | |
| It = [/\/OtAutoBlock\.js/, /\/mootools\.js/], | |
| bt = [/\/?forms\/embed\/frame(-v2)?\.js/], | |
| Ct = (e, t) => { | |
| const s = gt(e), | |
| n = s.stack ? s.stack[0].filename : s.filename; | |
| return ( | |
| bt.some((t) => t.test(e.stack || "")) && | |
| (!!t || bt.some((e) => e.test(n))) | |
| ); | |
| }; | |
| var wt = (e, t = !1) => { | |
| if (!e) return !1; | |
| const { message: s = "", stack: n = "" } = e || {}; | |
| return Boolean( | |
| Ct(e, t) && !_t.find((e) => e.test(s)) && !It.find((e) => e.test(n)), | |
| ); | |
| }; | |
| const At = | |
| "https://exceptions{{region}}.hs-embed-reporting{{env}}.com/outpost/developer-forms-embed", | |
| yt = ({ region: e, env: t }) => { | |
| const s = e ? `-${e}` : "", | |
| n = "qa" === t ? "qa" : ""; | |
| return At.replace("{{region}}", s).replace("{{env}}", n); | |
| }, | |
| vt = ( | |
| e, | |
| t, | |
| { | |
| env: s = "PROD", | |
| url: n = "", | |
| query: i = "", | |
| version: r = "", | |
| region: o = "", | |
| tags: a = {}, | |
| user: c = {}, | |
| extra: l = {}, | |
| }, | |
| ) => { | |
| const d = Date.now() / 1e3, | |
| h = gt(t); | |
| return { | |
| environment: s, | |
| tags: Object.assign({ region: o }, a), | |
| logger: "javascript", | |
| platform: "javascript", | |
| request: { | |
| headers: { "User-Agent": navigator.userAgent }, | |
| url: n || window.location.href, | |
| queryString: i.replace(/^\?/, ""), | |
| }, | |
| event_id: dt().replace(/-/g, ""), | |
| transaction: h.stack ? h.stack[0].filename : h.filename, | |
| level: e, | |
| exception: { | |
| values: [ | |
| { | |
| mechanism: { handled: !0, type: "generic" }, | |
| type: h.name, | |
| value: h.message, | |
| stacktrace: { frames: h.stack ? h.stack.reverse() : [] }, | |
| }, | |
| ], | |
| }, | |
| timestamp: d, | |
| version: r, | |
| user: c, | |
| extra: lt(l), | |
| }; | |
| }, | |
| Ft = (e = "", t = "", s = {}) => { | |
| const n = vt(e, t, s); | |
| St( | |
| `${yt(s)}/raw/error.gif?url=${ | |
| n.request.url | |
| }&report=${encodeURIComponent(JSON.stringify(n))}`, | |
| ); | |
| }; | |
| const Tt = "https://forms{{region}}.hsforms{{env}}.com/embed/v3", | |
| Rt = ({ env: e, region: t }) => { | |
| const s = t ? `-${t}` : "", | |
| n = "qa" === e ? "qa" : ""; | |
| return Tt.replace("{{region}}", s).replace("{{env}}", n); | |
| }; | |
| var Ot = { | |
| reportError: ({ | |
| key: e, | |
| error: t, | |
| data: s, | |
| requestParams: n, | |
| projectVersion: i, | |
| renderVersion: r, | |
| module: o, | |
| }) => { | |
| wt(t) && | |
| Ft("error", t, { | |
| type: "Error", | |
| env: n.env, | |
| region: n.region, | |
| url: window.location.href, | |
| query: window.location.search, | |
| tags: { key: e, projectVersion: i, renderVersion: r, module: o }, | |
| extra: { | |
| key: e, | |
| data: JSON.stringify(s), | |
| formId: n.formId, | |
| portalId: n.portalId, | |
| }, | |
| }); | |
| }, | |
| reportAnalyticCount: (e = "", t = 1, s = { env: "", region: "" }) => { | |
| St(`${Rt(s)}/counters.gif?key=${e}&count=${t}`); | |
| }, | |
| }; | |
| var Nt = (e) => { | |
| const { response: { status: t, data: s = {} } = {} } = e || {}, | |
| n = s.message || s.error; | |
| if (404 === t) return Je; | |
| if (400 === t) { | |
| if (/form guid/i.test(n)) return et; | |
| if (/you cannot (embed|fetch) this type of form/i.test(n)) return st; | |
| if (/IP_ADDRESS_IS_PROBABLY_A_BOT/i.test(n)) return tt; | |
| if (/SUBMISSION_PERIOD_ENDED/i.test(n)) return at; | |
| } | |
| return 429 === t && /RATE_LIMIT_EXCEEDED/i.test(n) ? ct : null; | |
| }; | |
| const Dt = (e = [], t = "") => { | |
| const s = e.find(({ name: e }) => e === t) || {}; | |
| return "true" === s.value || ("false" !== s.value && s.value); | |
| }; | |
| var Mt = Dt; | |
| var Pt = ({ form: { metaData: e = [] } = {} }) => | |
| Mt(e, "definitionS3WriteDate") ? rt : it; | |
| const xt = "1.0", | |
| Ht = "2.0", | |
| Ut = (e) => /^[0-9]+$/.test(e.toString()), | |
| Lt = (e) => | |
| /^[{]?[0-9a-fA-F]{8}-?([0-9a-fA-F]{4}-?){3}[0-9a-fA-F]{12}[}]?$/.test(e); | |
| class Vt { | |
| constructor() { | |
| const e = { forms: new Map() }; | |
| this.store = new I(e); | |
| this.editorVersion = xt; | |
| } | |
| has(e) { | |
| return this.store.state.forms.has(e); | |
| } | |
| get(e) { | |
| return this.store.state.forms.get(e); | |
| } | |
| subscribe(e) { | |
| return this.store.subscribe(e); | |
| } | |
| fetchForm(e, t) { | |
| if (!Ut(t.portalId)) throw new Error("Missing required portalId"); | |
| if (!Lt(t.formId)) throw new Error("Missing required formId"); | |
| const { formId: s, portalId: n, region: i, env: r, hutk: o = "" } = t, | |
| a = Ne({ | |
| hublet: i, | |
| isQa: "qa" === r, | |
| subDomainPrefix: "forms", | |
| domainOverride: "hsforms", | |
| pathname: | |
| this.editorVersion && this.editorVersion === Ht | |
| ? "embed/v4/render-definition/{{portalId}}/{{formId}}" | |
| : "embed/v3/form/{{portalId}}/{{formId}}/json", | |
| pathValues: { formId: s, portalId: `${n}` }, | |
| query: Object.assign({}, o && { hutk: o }), | |
| }); | |
| fetch(a, { mode: "cors", signal: e }) | |
| .then((e) => this.handleResponseSuccess(e, t)) | |
| .catch((e) => { | |
| const s = Nt(e), | |
| n = this.getDefinitionError(Ze, s, t); | |
| if (s) this.handleResponseError(n); | |
| else { | |
| this.handleResponseError(n, !0); | |
| this.fetchFormFallback(t); | |
| } | |
| }); | |
| } | |
| get formEditorVersion() { | |
| return this.editorVersion; | |
| } | |
| set formEditorVersion(e) { | |
| this.editorVersion = e; | |
| } | |
| fetchFormFallback(e) { | |
| const { formId: t, portalId: s, env: n } = e, | |
| i = Ne({ | |
| subDomainPrefix: "hubspot-forms-static-embed", | |
| domainOverride: "s3.amazonaws", | |
| pathname: "{{env}}/{{portalId}}/{{formId}}.json.gz", | |
| pathValues: { formId: t, portalId: `${s}`, env: n }, | |
| }); | |
| fetch(i, { mode: "cors" }) | |
| .then((t) => this.handleResponseSuccess(t, e)) | |
| .catch((t) => | |
| this.handleResponseError(this.getDefinitionError(ot, t, e)), | |
| ); | |
| } | |
| handleResponseSuccess(e, t) { | |
| e.ok | |
| ? e | |
| .json() | |
| .then((s) => { | |
| const n = Pt(s); | |
| Ot.reportAnalyticCount(`${de}-${n}`, 1, { | |
| env: t.env, | |
| region: t.region, | |
| }); | |
| this.store.setState((n) => ({ | |
| forms: n.forms.set( | |
| t.formId, | |
| Object.assign({}, s, { | |
| definitionHublet: e.headers.get("x-origin-hublet") || "", | |
| }), | |
| ), | |
| })); | |
| }) | |
| .catch((e) => | |
| this.handleResponseError(this.getDefinitionError(nt, e, t)), | |
| ) | |
| : e | |
| .text() | |
| .then((e) => | |
| this.handleResponseError(this.getDefinitionError(Ze, e, t)), | |
| ) | |
| .catch((e) => | |
| this.handleResponseError(this.getDefinitionError(nt, e, t)), | |
| ); | |
| } | |
| getDefinitionError(e, t, s) { | |
| return { | |
| key: e, | |
| error: t, | |
| data: t && t.response && t.response.data ? [t.response.data] : [], | |
| requestParams: s, | |
| projectVersion: window[We].app, | |
| module: window[We].projectName, | |
| renderVersion: "v3-frame", | |
| }; | |
| } | |
| handleResponseError(e, t = !1) { | |
| Ot.reportError(e); | |
| Ot.reportAnalyticCount(`${de}-${e.key}`, 1, { | |
| env: e.requestParams.env, | |
| region: e.requestParams.region, | |
| }); | |
| if (!t) throw new Error(e.error); | |
| } | |
| } | |
| var kt = new Vt(); | |
| class jt { | |
| constructor() { | |
| this.pageUrl = window.location.href; | |
| this.pageTitle = window.document.title; | |
| this.pageId = null; | |
| this.referrer = window.document.referrer; | |
| this.isHubSpotCmsGeneratedPage = !1; | |
| this.pageId = this._getPageId(); | |
| this.isHubSpotCmsGeneratedPage = this._getIsHubSpotCmsGeneratedPage(); | |
| } | |
| _getPageId() { | |
| const { analytics_page_id: e, page_id: t } = window.hsVars || {}; | |
| return e || t || null; | |
| } | |
| _getIsHubSpotCmsGeneratedPage() { | |
| const e = window.document; | |
| return Boolean( | |
| e && | |
| e.querySelector && | |
| e.querySelector('meta[name="generator"][content="HubSpot"]'), | |
| ); | |
| } | |
| propsForContext() { | |
| return { | |
| pageUrl: this.pageUrl, | |
| pageTitle: this.pageTitle, | |
| referrer: this.referrer, | |
| pageId: this.pageId, | |
| isHubSpotCmsGeneratedPage: this.isHubSpotCmsGeneratedPage, | |
| }; | |
| } | |
| } | |
| var $t = new jt(); | |
| class Bt { | |
| constructor() { | |
| const e = { | |
| formContainerElementsMap: new Map(), | |
| embedContextsMap: new Map(), | |
| }; | |
| this.store = new I(e); | |
| } | |
| subscribe(e) { | |
| return this.store.subscribe(e); | |
| } | |
| get formContainerElements() { | |
| return this.store.state.formContainerElementsMap; | |
| } | |
| get embedContextsMap() { | |
| return this.store.state.embedContextsMap; | |
| } | |
| addElements(e) { | |
| this.store.setState((t) => ({ | |
| formContainerElementsMap: j( | |
| t.formContainerElementsMap, | |
| e.formContainerElementsMap, | |
| ), | |
| embedContextsMap: j(t.embedContextsMap, e.embedContextsMap), | |
| })); | |
| } | |
| } | |
| class qt { | |
| constructor(e) { | |
| this.formData = e; | |
| this.attachToWindow(); | |
| } | |
| init(e) { | |
| const { instanceId: t, formId: s } = e; | |
| this.createFormInstanceMethods(e); | |
| this.formData.setFormInstanceInfo({ | |
| instanceId: t, | |
| formInfo: { formId: s }, | |
| }); | |
| } | |
| attachToWindow() { | |
| window[Qe] = { | |
| [Ke]: { | |
| _forms: new Map(), | |
| _setForm({ instanceId: e, instanceMethods: t }) { | |
| this[Ke]._forms.set(e, t); | |
| }, | |
| _getFormByInstanceId(e) { | |
| return this[Ke]._forms.get(e); | |
| }, | |
| }, | |
| getForms() { | |
| return Array.from(this[Ke]._forms.values()); | |
| }, | |
| getFormFromEvent({ detail: { instanceId: e } }) { | |
| return this[Ke]._getFormByInstanceId.call(this, e); | |
| }, | |
| }; | |
| } | |
| createFormInstanceMethods(e) { | |
| const { instanceId: t, formId: s } = e, | |
| { clientApi: n, __internalApi: i } = this.getFormInternalApi() || {}; | |
| n && | |
| i && | |
| !i._getFormByInstanceId.call(n, t) && | |
| i._setForm.call(n, { | |
| instanceId: t, | |
| instanceMethods: { | |
| getFormId: () => s, | |
| getInstanceId: () => t, | |
| getRedirectUrl: () => this.formData.getRedirectUrl(t), | |
| getConversionId: () => this.formData.getConversionId(t), | |
| getFormFieldValues: () => this.getFormFieldValues(e), | |
| getFieldValue: (t) => this.getFieldValue(e, t), | |
| setFieldValue: (t, s) => | |
| this.setFieldValue({ | |
| baseFormInfo: e, | |
| propertyReference: t, | |
| value: s, | |
| }), | |
| setExtraSubmissionMetadata: (e) => | |
| this.sendExtraSubmissionMetadata({ | |
| formId: s, | |
| instanceId: t, | |
| metadata: e, | |
| }), | |
| }, | |
| }); | |
| } | |
| sendExtraSubmissionMetadata(t) { | |
| const { formId: s } = t; | |
| Se.broadcast(s, { | |
| type: e.SEND_FORM_EXTRA_SUBMISSION_METADATA, | |
| payload: t, | |
| }); | |
| } | |
| setFieldValue({ baseFormInfo: t, propertyReference: s, value: n }) { | |
| const { formId: i, instanceId: r } = t; | |
| Se.broadcast(i, { | |
| type: e.SET_FIELD_VALUE, | |
| payload: { instanceId: r, propertyReference: s, value: n }, | |
| }); | |
| } | |
| async getFormFieldValues(t) { | |
| let s; | |
| const { formId: n } = t, | |
| i = new Promise((e) => { | |
| s = e; | |
| }); | |
| this.listenForSendFormFieldValues(s); | |
| Se.broadcast(n, { type: e.GET_FORM_FIELD_VALUES, payload: t }); | |
| return await i.then((e) => e); | |
| } | |
| async getFieldValue(t, s) { | |
| let n; | |
| const { formId: i, instanceId: r } = t, | |
| o = new Promise((e) => { | |
| n = e; | |
| }); | |
| this.listenForSendFieldValue(n); | |
| Se.broadcast(i, { | |
| type: e.GET_FIELD_VALUE, | |
| payload: { instanceId: r, propertyReference: s }, | |
| }); | |
| return await o.then((e) => e); | |
| } | |
| listenForSendFormFieldValues(t) { | |
| Se.registerHandlers({ | |
| [e.SEND_FORM_FIELD_VALUES]: ({ formFieldValues: e }) => { | |
| null == t || t(e); | |
| }, | |
| }); | |
| } | |
| listenForSendFieldValue(t) { | |
| Se.registerHandlers({ | |
| [e.SEND_FIELD_VALUE]: ({ fieldValue: e }) => { | |
| null == t || t(e); | |
| }, | |
| }); | |
| } | |
| getFormInternalApi() { | |
| const e = window[Qe]; | |
| if (e && e[Ke]) return { clientApi: e, __internalApi: e[Ke] }; | |
| } | |
| } | |
| function Gt(e) { | |
| return new qt(e); | |
| } | |
| const Yt = { | |
| ON_FORM_READY: "hs-form-event:on-ready", | |
| ON_FORM_SUBMISSION_SUCCESS: "hs-form-event:on-submission:success", | |
| ON_FORM_SUBMISSION_FAILED: "hs-form-event:on-submission:failed", | |
| ON_FORM_INTERACTION_NAVIGATE: "hs-form-event:on-interaction:navigate", | |
| }; | |
| class zt { | |
| constructor(e) { | |
| this.formData = e; | |
| } | |
| init({ initialiseThirdPartyApi: e }) { | |
| this.listenForFormReadyEvent({ initialiseThirdPartyApi: e }); | |
| this.listenForFormNavigationEvent(); | |
| this.listenForSubmissionSuccessEvent(); | |
| this.listenForSubmissionFailedEvent(); | |
| } | |
| listenForFormReadyEvent({ initialiseThirdPartyApi: t }) { | |
| Se.registerHandlers({ | |
| [e.V4_FORM_READY]: (e) => { | |
| t(e); | |
| this.triggerGlobalEvent( | |
| Object.assign({}, e, { type: Yt.ON_FORM_READY }), | |
| ); | |
| }, | |
| }); | |
| } | |
| listenForSubmissionSuccessEvent() { | |
| Se.registerHandlers({ | |
| [e.SEND_FORM_SUBMISSION_SUCCESS]: ({ formId: e, instanceId: t }) => { | |
| this.triggerGlobalEvent({ | |
| type: Yt.ON_FORM_SUBMISSION_SUCCESS, | |
| instanceId: t, | |
| formId: e, | |
| }); | |
| }, | |
| }); | |
| } | |
| listenForFormNavigationEvent() { | |
| Se.registerHandlers({ | |
| [e.SEND_FORM_INTERACTION_NAVIGATE]: (e) => { | |
| this.triggerGlobalEvent( | |
| Object.assign({}, e, { type: Yt.ON_FORM_INTERACTION_NAVIGATE }), | |
| ); | |
| }, | |
| }); | |
| } | |
| listenForSubmissionFailedEvent() { | |
| Se.registerHandlers({ | |
| [e.SEND_FORM_SUBMISSION_FAILED]: ({ formId: e, instanceId: t }) => { | |
| this.triggerGlobalEvent({ | |
| type: Yt.ON_FORM_SUBMISSION_FAILED, | |
| instanceId: t, | |
| formId: e, | |
| }); | |
| }, | |
| }); | |
| } | |
| triggerGlobalEvent({ type: e, instanceId: t, formId: s }) { | |
| if ( | |
| document && | |
| void 0 !== typeof window && | |
| window && | |
| window.CustomEvent | |
| ) { | |
| const n = new CustomEvent(e, { | |
| bubbles: !0, | |
| cancelable: !0, | |
| detail: { formId: s, instanceId: t }, | |
| }); | |
| document.dispatchEvent(n); | |
| } | |
| } | |
| } | |
| function Xt(e) { | |
| return new zt(e); | |
| } | |
| class Wt { | |
| constructor() { | |
| this.formDataMap = new Map(); | |
| } | |
| setFormInstanceInfo({ instanceId: e, formInfo: t }) { | |
| const s = this.formDataMap.get(e) || {}; | |
| this.formDataMap.set(e, Object.assign({}, s, t)); | |
| } | |
| getRedirectUrl(e) { | |
| var t; | |
| return ( | |
| (null === (t = this.formDataMap.get(e)) || void 0 === t | |
| ? void 0 | |
| : t.redirectUrl) || "" | |
| ); | |
| } | |
| getConversionId(e) { | |
| var t; | |
| return ( | |
| (null === (t = this.formDataMap.get(e)) || void 0 === t | |
| ? void 0 | |
| : t.conversionId) || "" | |
| ); | |
| } | |
| } | |
| var Qt = Wt; | |
| class Kt extends Xe { | |
| constructor(e) { | |
| super(e); | |
| this.initialiseThirdPartyApi = (e) => { | |
| this.thirdPartyApiController.init(e); | |
| }; | |
| this.formData = new Qt(); | |
| this.thirdPartyApiController = Gt(this.formData); | |
| this.globalEventController = Xt(this.formData); | |
| } | |
| init() { | |
| this.formsStore.formEditorVersion = Ht; | |
| this.globalEventController.init({ | |
| initialiseThirdPartyApi: this.initialiseThirdPartyApi, | |
| }); | |
| this.listenForSubmissionSuccessInfo(); | |
| this.initFormController(); | |
| } | |
| listenForSubmissionSuccessInfo() { | |
| Se.registerHandlers({ | |
| [e.SEND_FORM_SUBMISSION_SUCCESS_INFO]: ({ | |
| instanceId: e, | |
| redirectUrl: t, | |
| conversionId: s, | |
| }) => { | |
| this.formData.setFormInstanceInfo({ | |
| instanceId: e, | |
| formInfo: { redirectUrl: t, conversionId: s }, | |
| }); | |
| }, | |
| }); | |
| } | |
| } | |
| var Jt = new Kt({ | |
| formsStore: kt, | |
| environment: $t, | |
| embededContainers: new Bt(), | |
| }), | |
| Zt = { | |
| mode: "compressed", | |
| staticDomainPrefix: "//static.hsappstatic.net", | |
| bender: { | |
| depVersions: { | |
| "forms-embed-parent": "static-1.2962", | |
| "hs-lodash": "static-4.9", | |
| "hs-test-utils": "static-1.5430", | |
| HubStyleTokens: "static-2.8983", | |
| "jasmine-runner": "static-1.3797", | |
| quartz: "static-1.3935", | |
| react: "static-7.133", | |
| "web-interactives-embed-framework": "static-2.2956", | |
| "hubspot-url-utils": "static-1.1941", | |
| outpost: "static-1.1764", | |
| "bend-plugin-trellis-migration": "static-1.1006", | |
| "foundations-components": "static-1.4075", | |
| "foundations-theming": "static-1.1294", | |
| "framer-motion": "static-1.29", | |
| "hs-test-utils-bend-plugin": "static-1.541", | |
| "hub-http": "static-1.2732", | |
| "hub-http-janus": "static-1.582", | |
| "hub-http-rxjs": "static-1.546", | |
| immutable: "static-2.19", | |
| msw: "static-1.39", | |
| "react-dom": "static-7.85", | |
| "react-redux": "static-7.16", | |
| "react-utils": "static-2.3120", | |
| redux: "static-4.16", | |
| "redux-mock-store": "static-1.8", | |
| "redux-thunk": "static-2.17", | |
| "testing-library": "static-1.112", | |
| transmute: "static-2.29", | |
| UIComponents: "static-3.5933", | |
| jasmine: "static-4.1708", | |
| "browserslist-config-hubspot": "static-1.144", | |
| enviro: "static-4.273", | |
| PortalIdParser: "static-2.252", | |
| "quartz-core-utils": "static-1.802", | |
| StyleGuideUI: "static-3.431", | |
| csstype: "static-1.8", | |
| "bend-plugin-foundations-components": "static-1.343", | |
| "floating-ui": "static-1.19", | |
| "foundations-assets": "static-1.2193", | |
| "hs-story-utils": "static-1.6375", | |
| I18n: "static-7.1297", | |
| "metrics-js": "static-1.6993", | |
| moment: "static-3.26", | |
| "react-aria": "static-1.31", | |
| "react-select-plus": "static-1.65", | |
| "react-virtualized": "static-2.66", | |
| "styled-components": "static-2.40", | |
| "tanstack-table": "static-1.10", | |
| "ui-fonts": "static-1.327", | |
| "ui-images": "static-2.762", | |
| "foundations-theming-base": "static-1.279", | |
| rxjs: "static-5.10", | |
| "hoist-non-react-statics": "static-3.9", | |
| classnames: "static-2.10", | |
| cssUtils: "static-1.319", | |
| "head-dlb": "static-1.2378", | |
| HubStyle: "static-2.9293", | |
| icons: "static-2.585", | |
| "i18n-data": "static-1.187", | |
| "moment-timezone": "static-5.17", | |
| "react-input-autosize": "static-2.17", | |
| sassPrefix: "static-1.120", | |
| HeadJS: "static-2.514", | |
| "hs-promise-rejection-tracking": "static-1.2850", | |
| raven: "static-3.3177", | |
| "raven-hubspot": "static-1.3484", | |
| }, | |
| depPathPrefixes: { | |
| "forms-embed-parent": "/forms-embed-parent/static-1.2962", | |
| "hs-lodash": "/hs-lodash/static-4.9", | |
| "hs-test-utils": "/hs-test-utils/static-1.5430", | |
| HubStyleTokens: "/HubStyleTokens/static-2.8983", | |
| "jasmine-runner": "/jasmine-runner/static-1.3797", | |
| quartz: "/quartz/static-1.3935", | |
| react: "/react/static-7.133", | |
| "web-interactives-embed-framework": | |
| "/web-interactives-embed-framework/static-2.2956", | |
| "hubspot-url-utils": "/hubspot-url-utils/static-1.1941", | |
| outpost: "/outpost/static-1.1764", | |
| "bend-plugin-trellis-migration": | |
| "/bend-plugin-trellis-migration/static-1.1006", | |
| "foundations-components": "/foundations-components/static-1.4075", | |
| "foundations-theming": "/foundations-theming/static-1.1294", | |
| "framer-motion": "/framer-motion/static-1.29", | |
| "hs-test-utils-bend-plugin": | |
| "/hs-test-utils-bend-plugin/static-1.541", | |
| "hub-http": "/hub-http/static-1.2732", | |
| "hub-http-janus": "/hub-http-janus/static-1.582", | |
| "hub-http-rxjs": "/hub-http-rxjs/static-1.546", | |
| immutable: "/immutable/static-2.19", | |
| msw: "/msw/static-1.39", | |
| "react-dom": "/react-dom/static-7.85", | |
| "react-redux": "/react-redux/static-7.16", | |
| "react-utils": "/react-utils/static-2.3120", | |
| redux: "/redux/static-4.16", | |
| "redux-mock-store": "/redux-mock-store/static-1.8", | |
| "redux-thunk": "/redux-thunk/static-2.17", | |
| "testing-library": "/testing-library/static-1.112", | |
| transmute: "/transmute/static-2.29", | |
| UIComponents: "/UIComponents/static-3.5933", | |
| jasmine: "/jasmine/static-4.1708", | |
| "browserslist-config-hubspot": | |
| "/browserslist-config-hubspot/static-1.144", | |
| enviro: "/enviro/static-4.273", | |
| PortalIdParser: "/PortalIdParser/static-2.252", | |
| "quartz-core-utils": "/quartz-core-utils/static-1.802", | |
| StyleGuideUI: "/StyleGuideUI/static-3.431", | |
| csstype: "/csstype/static-1.8", | |
| "bend-plugin-foundations-components": | |
| "/bend-plugin-foundations-components/static-1.343", | |
| "floating-ui": "/floating-ui/static-1.19", | |
| "foundations-assets": "/foundations-assets/static-1.2193", | |
| "hs-story-utils": "/hs-story-utils/static-1.6375", | |
| I18n: "/I18n/static-7.1297", | |
| "metrics-js": "/metrics-js/static-1.6993", | |
| moment: "/moment/static-3.26", | |
| "react-aria": "/react-aria/static-1.31", | |
| "react-select-plus": "/react-select-plus/static-1.65", | |
| "react-virtualized": "/react-virtualized/static-2.66", | |
| "styled-components": "/styled-components/static-2.40", | |
| "tanstack-table": "/tanstack-table/static-1.10", | |
| "ui-fonts": "/ui-fonts/static-1.327", | |
| "ui-images": "/ui-images/static-2.762", | |
| "foundations-theming-base": "/foundations-theming-base/static-1.279", | |
| rxjs: "/rxjs/static-5.10", | |
| "hoist-non-react-statics": "/hoist-non-react-statics/static-3.9", | |
| classnames: "/classnames/static-2.10", | |
| cssUtils: "/cssUtils/static-1.319", | |
| "head-dlb": "/head-dlb/static-1.2378", | |
| HubStyle: "/HubStyle/static-2.9293", | |
| icons: "/icons/static-2.585", | |
| "i18n-data": "/i18n-data/static-1.187", | |
| "moment-timezone": "/moment-timezone/static-5.17", | |
| "react-input-autosize": "/react-input-autosize/static-2.17", | |
| sassPrefix: "/sassPrefix/static-1.120", | |
| HeadJS: "/HeadJS/static-2.514", | |
| "hs-promise-rejection-tracking": | |
| "/hs-promise-rejection-tracking/static-1.2850", | |
| raven: "/raven/static-3.3177", | |
| "raven-hubspot": "/raven-hubspot/static-1.3484", | |
| }, | |
| project: "forms-embed-parent", | |
| staticDomain: "//static.hsappstatic.net", | |
| staticDomainPrefix: "//static.hsappstatic.net", | |
| }, | |
| }; | |
| const es = () => window[We], | |
| ts = () => "loading" === document.readyState, | |
| ss = () => { | |
| window[We] = { | |
| projectName: `${Zt.bender.project}`, | |
| app: `${Zt.bender.project}-${Zt.bender.depVersions[Zt.bender.project]}`, | |
| mountedAt: window.performance.now(), | |
| mountedBy: document.currentScript, | |
| instance: Xe, | |
| numAttemptedScriptInits: 1, | |
| }; | |
| }, | |
| ns = (e) => { | |
| document.removeEventListener("DOMContentLoaded", () => ns(e)); | |
| e(); | |
| }; | |
| function is(e) { | |
| const t = es(); | |
| if (t) { | |
| 1 === t.numAttemptedScriptInits && | |
| document.currentScript && | |
| console.warn( | |
| `The script ${document.currentScript.getAttribute( | |
| "src", | |
| )} only needs to be included once on the page`, | |
| ); | |
| t.numAttemptedScriptInits++; | |
| } else { | |
| ss(); | |
| ts() ? document.addEventListener("DOMContentLoaded", () => ns(e)) : e(); | |
| } | |
| } | |
| // Fungsi untuk mengambil semua parameter UTM dari URL | |
| function getUTMParams() { | |
| const urlParams = new URLSearchParams(window.location.search); | |
| return { | |
| utm_campaign: urlParams.get("utm_campaign"), | |
| utm_source: urlParams.get("utm_source"), | |
| utm_medium: urlParams.get("utm_medium"), | |
| utm_term: urlParams.get("utm_term"), | |
| utm_content: urlParams.get("utm_content"), | |
| }; | |
| } | |
| // Fungsi untuk mengisi field form dengan data UTM | |
| function populateUTMFields(instanceId, utmParams) { | |
| Object.entries(utmParams).forEach(([field, value]) => { | |
| if (value) { | |
| // Gunakan fungsi setFieldValue untuk mengisi field | |
| window.HubspotFormsV4.__SECRET_INTERNAL_DO_NOT_USE | |
| ._getFormByInstanceId(instanceId) | |
| .setFieldValue(field, value); | |
| } | |
| }); | |
| } | |
| // Modifikasi event listener untuk menangani form ready | |
| document.addEventListener("hs-form-event:on-ready", (event) => { | |
| const { instanceId } = event.detail; | |
| // Ambil data UTM dari URL | |
| const utmParams = getUTMParams(); | |
| // Isi field form dengan data UTM | |
| populateUTMFields(instanceId, utmParams); | |
| }); | |
| is(() => Jt.init()); | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment