{"version":3,"file":"discourse-gpc-compliance.js","names":["define","_exports","_pluginApi","Object","defineProperty","value","default","CUSTOM_ELEMENT_ID","TRANSLATION_NAMESPACE","TRANSLATION_KEYS","translationCache","translationCachePromise","LOCALE_MAP","en","en_us","es","es_es","pt","pt_br","fr","fr_fr","de","de_de","it","it_it","ja","ja_jp","ko","ko_kr","zh_cn","zh_tw","async","fetchTranslations","siteSettings","user","cdnPath","react_bootstrapper_cdn","releaseName","react_bootstrapper_release_commit_sha","locale","discourseLocale","toLowerCase","e","getLocale","ADName","localStorage","getItem","localePath","response","fetch","ok","translations","json","FALLBACK_TRANSLATIONS","getTranslation","key","hasUserMadeCookieChanges","hasConsentCookie","some","cookieName","cookie","document","split","find","c","trim","startsWith","equalIndex","indexOf","cookieValue","substring","length","decoded","decodeURIComponent","groupsMatch","match","groupValues","val","trimmed","parts","purposesMatch","purposeValues","parsed","JSON","parse","consent","Array","isArray","vendors","v","accepted","vendorValues","values","nestedVal","categories","categoryValues","groups","g","consented","jsonError","lowerDecoded","includes","consentData","window","evidon","notice","getConsentData","vendorsObj","categoriesObj","hasAcceptedVendor","vendor","consentStorageKeys","keys","concat","sessionStorage","filter","lowerValue","error","injectGpcHtml","getElementById","undefined","userGpcEnabled","gpcEnabled","navigatorGpc","navigator","globalPrivacyControl","evidonGpc","Boolean","isGpcEnabled","userMadeChanges","setConsent","forEach","id","declineAll","autoDeclineAll","htmlToInsert","containerStyle","statusStyle","generateGpcHtml","insertBeforeElement","messageDiv","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","node","nextNode","tagName","textContent","test","allH2s","querySelectorAll","i","findRequestDataElement","afterElement","customWrapper","createElement","innerHTML","elementToInsert","firstElementChild","insertAdjacentElement","setupGpcHtmlInjection","intervalId","timeoutId","observer","pollForGpcStatus","clearInterval","clearTimeout","MutationObserver","observe","body","childList","subtree","attributes","characterData","setInterval","setTimeout","disconnect","addPrivacyChoicesLink","checkFooter","targetElement","footerEntrypoint","querySelector","belowFooterOutlet","footerRbx","privacyLink","href","className","style","cursor","icon","fallbackBase64","src","alt","marginLeft","verticalAlign","height","width","onerror","this","appendChild","container","addEventListener","preventDefault","showOptions","name","initialize","withPluginApi","api","lookup","gpc_compliance_enabled","getCurrentUser","readyState","_templateFactory","createTemplateFactory","block","moduleName","isStrictMode"],"sources":["discourse/plugins/discourse-gpc-compliance/discourse/initializers/gpc-compliance.js","discourse/plugins/discourse-gpc-compliance/discourse/templates/connectors/below-footer.js"],"sourcesContent":["define(\"discourse/plugins/discourse-gpc-compliance/discourse/initializers/gpc-compliance\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // GPC Compliance for Evidon Cookie Consent Banner\n\n  const INTERVAL_500 = 500;\n  const INTERVAL_10000 = 10000;\n  const EVIDON_PRE_ELEMENT = 'prc-tp-cat-message';\n  const CUSTOM_ELEMENT_ID = 'gpc-status-container';\n  const TRANSLATION_NAMESPACE = 'Feature.Privacy';\n  const DEV_SESSION_STORAGE_KEY = 'rbx-dev-session';\n\n  // Translation keys matching PR pattern\n  const TRANSLATION_KEYS = {\n    NO_OPT_OUT_SIGNAL: 'Title.NoOptOutSignal',\n    OPT_OUT_SIGNAL_DETECTED: 'Title.OptOutSignalDetected',\n    OPT_OUT_REQUEST_HONORED: 'Body.OptOutRequestHonored',\n    PAST_CHOICES_CONFIGURED: 'Body.PastChoicesConfigured',\n    YOUR_PRIVACY_CHOICES: 'Link.YourPrivacyChoices'\n  };\n  let translationCache = null;\n  let translationCachePromise = null;\n  const LOCALE_MAP = {\n    'en': 'en-us',\n    'en_us': 'en-us',\n    'es': 'es-es',\n    'es_es': 'es-es',\n    'pt': 'pt-br',\n    'pt_br': 'pt-br',\n    'fr': 'fr-fr',\n    'fr_fr': 'fr-fr',\n    'de': 'de-de',\n    'de_de': 'de-de',\n    'it': 'it-it',\n    'it_it': 'it-it',\n    'ja': 'ja-jp',\n    'ja_jp': 'ja-jp',\n    'ko': 'ko-kr',\n    'ko_kr': 'ko-kr',\n    'zh_cn': 'zh-cn',\n    'zh_tw': 'zh-tw'\n  };\n  function getLocale(user) {\n    try {\n      if (user?.locale) {\n        const discourseLocale = user.locale.toLowerCase();\n        return LOCALE_MAP[discourseLocale] || 'en-us';\n      }\n    } catch (e) {\n      // Ignore errors\n    }\n    return 'en-us';\n  }\n  async function fetchTranslations(siteSettings, user) {\n    if (translationCache) {\n      return translationCache;\n    }\n    if (translationCachePromise) {\n      return translationCachePromise;\n    }\n    translationCachePromise = (async () => {\n      try {\n        const cdnPath = siteSettings?.react_bootstrapper_cdn || '';\n        const releaseName = siteSettings?.react_bootstrapper_release_commit_sha || '';\n        const locale = getLocale(user);\n        const ADName = localStorage.getItem(DEV_SESSION_STORAGE_KEY);\n        const localePath = ADName === null ? `${cdnPath}/locales/${releaseName}/${locale}/${TRANSLATION_NAMESPACE}.json` : `${cdnPath}/dev/${ADName}/locales/${locale}/${TRANSLATION_NAMESPACE}.json`;\n        const response = await fetch(localePath);\n        if (response.ok) {\n          const translations = await response.json();\n          translationCache = translations;\n          return translations;\n        }\n      } catch (e) {\n        // Ignore fetch errors, will fall back to Discourse i18n\n      }\n      return null;\n    })();\n    return translationCachePromise;\n  }\n\n  // Hardcoded fallback translations (should only be used if CDN fetch fails)\n  const FALLBACK_TRANSLATIONS = {\n    'Title.NoOptOutSignal': 'No Opt-out Signal Detected',\n    'Title.OptOutSignalDetected': 'Opt-Out Signal Detected',\n    'Body.OptOutRequestHonored': 'Opt-Out Request Honored',\n    'Body.PastChoicesConfigured': 'Based on your past choices, your cookies have been configured as shown below',\n    'Link.YourPrivacyChoices': 'Your Privacy Choices'\n  };\n  function getTranslation(key, translations) {\n    if (translations && translations[key]) {\n      return translations[key];\n    }\n\n    // Fallback to hardcoded English translations if CDN fetch failed\n    return FALLBACK_TRANSLATIONS[key] || key;\n  }\n  function isGpcEnabled() {\n    const navigatorGpc = navigator.globalPrivacyControl;\n    const evidonGpc = window.evidon?.notice?.userGpcEnabled;\n    return Boolean(navigatorGpc || evidonGpc);\n  }\n  function hasUserMadeCookieChanges() {\n    try {\n      const consentCookies = ['OptanonConsent', 'evidon-consent', 'evidon_consent_cookie', '_evidon_consent_cookie'];\n      const hasConsentCookie = consentCookies.some(cookieName => {\n        let cookie = document.cookie.split(';').find(c => c.trim().startsWith(cookieName + '='));\n        if (!cookie && !cookieName.startsWith('_')) {\n          cookie = document.cookie.split(';').find(c => c.trim().startsWith('_' + cookieName + '='));\n        }\n        if (cookie) {\n          const equalIndex = cookie.indexOf('=');\n          const cookieValue = equalIndex >= 0 ? cookie.substring(equalIndex + 1) : '';\n          if (!cookieValue || cookieValue.length < 10) {\n            return false;\n          }\n          if (cookieName === 'OptanonConsent') {\n            try {\n              const decoded = decodeURIComponent(cookieValue);\n              const groupsMatch = decoded.match(/groups[=:]([^&,]*)/i);\n              if (groupsMatch && groupsMatch[1] && groupsMatch[1].trim().length > 0) {\n                const groupValues = groupsMatch[1].split(',');\n                const hasAcceptedGroup = groupValues.some(val => {\n                  const trimmed = val.trim();\n                  if (!trimmed) return false;\n                  const parts = trimmed.split(':');\n                  if (parts.length >= 2) {\n                    const consentValue = parts[parts.length - 1].trim();\n                    if (consentValue === '1') {\n                      return true;\n                    }\n                  }\n                  return false;\n                });\n                if (hasAcceptedGroup) {\n                  return true;\n                }\n              }\n              const purposesMatch = decoded.match(/purposes[=:]([^&,]*)/i);\n              if (purposesMatch && purposesMatch[1] && purposesMatch[1].trim().length > 0) {\n                const purposeValues = purposesMatch[1].split(',');\n                const hasAcceptedPurpose = purposeValues.some(val => {\n                  const trimmed = val.trim();\n                  if (!trimmed) return false;\n                  const parts = trimmed.split(':');\n                  if (parts.length >= 2) {\n                    const purposeValue = parts[parts.length - 1].trim();\n                    return purposeValue === '1';\n                  }\n                  return false;\n                });\n                if (hasAcceptedPurpose) {\n                  return true;\n                }\n              }\n              return false;\n            } catch (e) {\n              return false;\n            }\n          }\n          try {\n            const decoded = decodeURIComponent(cookieValue);\n            try {\n              const parsed = JSON.parse(decoded);\n              if (typeof parsed === 'object') {\n                if (parsed.consent === true) {\n                  return true;\n                }\n                if (Array.isArray(parsed.vendors)) {\n                  const hasAcceptedVendor = parsed.vendors.some(v => v.consent === true || v.accepted === true);\n                  if (hasAcceptedVendor) {\n                    return true;\n                  }\n                }\n                if (parsed.vendors && typeof parsed.vendors === 'object' && !Array.isArray(parsed.vendors)) {\n                  const vendorValues = Object.values(parsed.vendors);\n                  const hasAcceptedVendor = vendorValues.some(v => {\n                    if (typeof v === 'object' && v !== null) {\n                      if (v.consent === true || v.accepted === true) {\n                        return true;\n                      }\n                      const nestedValues = Object.values(v);\n                      return nestedValues.some(nestedVal => nestedVal === true);\n                    }\n                    return v === true || v === 1;\n                  });\n                  if (hasAcceptedVendor) {\n                    return true;\n                  }\n                }\n                if (parsed.categories && typeof parsed.categories === 'object' && !Array.isArray(parsed.categories)) {\n                  const categoryValues = Object.values(parsed.categories);\n                  const hasAcceptedCategory = categoryValues.some(c => {\n                    if (typeof c === 'object' && c !== null) {\n                      if (c.consent === true || c.accepted === true) {\n                        return true;\n                      }\n                      const nestedValues = Object.values(c);\n                      return nestedValues.some(nestedVal => nestedVal === true);\n                    }\n                    return c === true || c === 1;\n                  });\n                  if (hasAcceptedCategory) {\n                    return true;\n                  }\n                }\n                if (Array.isArray(parsed.groups)) {\n                  const hasAcceptedGroup = parsed.groups.some(g => g.consent === true || g.consented === true);\n                  if (hasAcceptedGroup) {\n                    return true;\n                  }\n                }\n              }\n            } catch (jsonError) {\n              const lowerDecoded = decoded.toLowerCase();\n              if (lowerDecoded.includes('consent=true') || lowerDecoded.includes('accepted=true') || lowerDecoded.includes('consented=1')) {\n                return true;\n              }\n            }\n          } catch (e) {\n            return false;\n          }\n        }\n        return false;\n      });\n      let consentData = null;\n      try {\n        consentData = window.evidon?.notice?.getConsentData?.();\n      } catch (e) {\n        // Ignore errors\n      }\n      if (consentData) {\n        let vendors = [];\n        let vendorsObj = null;\n        let categoriesObj = null;\n        if (Array.isArray(consentData.vendors)) {\n          vendors = consentData.vendors;\n        } else if (consentData.value && Array.isArray(consentData.value.vendors)) {\n          vendors = consentData.value.vendors;\n        } else if (consentData.value && typeof consentData.value === 'object') {\n          if (consentData.value.vendors && typeof consentData.value.vendors === 'object' && !Array.isArray(consentData.value.vendors)) {\n            vendorsObj = consentData.value.vendors;\n          }\n          if (consentData.value.categories && typeof consentData.value.categories === 'object' && !Array.isArray(consentData.value.categories)) {\n            categoriesObj = consentData.value.categories;\n          }\n          if (consentData.value.consentData && Array.isArray(consentData.value.consentData.vendors)) {\n            vendors = consentData.value.consentData.vendors;\n          }\n        }\n        let hasAcceptedVendor = false;\n        if (vendors.length > 0) {\n          hasAcceptedVendor = vendors.some(vendor => {\n            if (vendor.consent === true || vendor.accepted === true) {\n              return true;\n            }\n            return false;\n          });\n        }\n        if (!hasAcceptedVendor && vendorsObj) {\n          const vendorValues = Object.values(vendorsObj);\n          hasAcceptedVendor = vendorValues.some(v => {\n            if (typeof v === 'object' && v !== null) {\n              if (v.consent === true || v.accepted === true) {\n                return true;\n              }\n              const nestedValues = Object.values(v);\n              return nestedValues.some(nestedVal => nestedVal === true);\n            }\n            return v === true || v === 1;\n          });\n        }\n        if (!hasAcceptedVendor && categoriesObj) {\n          const categoryValues = Object.values(categoriesObj);\n          hasAcceptedVendor = categoryValues.some(c => {\n            if (typeof c === 'object' && c !== null) {\n              if (c.consent === true || c.accepted === true) {\n                return true;\n              }\n              const nestedValues = Object.values(c);\n              return nestedValues.some(nestedVal => nestedVal === true);\n            }\n            return c === true || c === 1;\n          });\n        }\n        if (hasAcceptedVendor) {\n          return true;\n        }\n      }\n      try {\n        const storageKeys = Object.keys(localStorage).concat(Object.keys(sessionStorage));\n        const consentStorageKeys = storageKeys.filter(key => key.toLowerCase().includes('consent') || key.toLowerCase().includes('evidon') || key.toLowerCase().includes('optanon'));\n        if (consentStorageKeys.length > 0) {\n          const hasStorageData = consentStorageKeys.some(key => {\n            const value = localStorage.getItem(key) || sessionStorage.getItem(key);\n            if (!value || value.length < 5) {\n              return false;\n            }\n            try {\n              const parsed = JSON.parse(value);\n              if (typeof parsed === 'object') {\n                if (parsed.consent === true) {\n                  return true;\n                }\n                if (Array.isArray(parsed.vendors)) {\n                  const hasAcceptedVendor = parsed.vendors.some(v => v.consent === true || v.accepted === true);\n                  if (hasAcceptedVendor) {\n                    return true;\n                  }\n                }\n                if (Array.isArray(parsed.groups)) {\n                  const hasAcceptedGroup = parsed.groups.some(g => g.consent === true || g.consented === true);\n                  if (hasAcceptedGroup) {\n                    return true;\n                  }\n                }\n              }\n            } catch (e) {\n              const lowerValue = value.toLowerCase();\n              if (lowerValue.includes('consent=true') || lowerValue.includes('accepted=true') || lowerValue.includes('consented=1') || lowerValue.includes('\"consent\":true')) {\n                return true;\n              }\n            }\n            return false;\n          });\n          if (hasStorageData) {\n            return true;\n          }\n        }\n      } catch (e) {\n        // Ignore storage errors\n      }\n      return hasConsentCookie;\n    } catch (error) {\n      return false;\n    }\n  }\n  function autoDeclineAll() {\n    if (!window.evidon?.notice) {\n      return;\n    }\n    try {\n      if (window.evidon.notice.setConsent) {\n        const consentData = window.evidon.notice.getConsentData?.();\n        if (consentData && consentData.vendors) {\n          consentData.vendors.forEach(vendor => {\n            try {\n              window.evidon.notice.setConsent(vendor.id, false);\n            } catch (error) {\n              // Ignore individual vendor errors\n            }\n          });\n        }\n      }\n      if (window.evidon.notice.declineAll) {\n        window.evidon.notice.declineAll();\n      }\n    } catch (error) {\n      // Ignore errors\n    }\n  }\n  function generateGpcHtml(gpcEnabled, userMadeChanges, translations) {\n    const redColor = '#d13212';\n    const containerStyle = 'margin-top: 22px;';\n    const statusStyle = `color: ${redColor}; margin: 0; padding: 0;`;\n    if (!gpcEnabled) {\n      return `\n      <div class=\"gpc-status-container\" id=\"${CUSTOM_ELEMENT_ID}\" style=\"${containerStyle}\">\n        <p aria-live=\"polite\" role=\"status\" class=\"gpc-status\" style=\"${statusStyle}\">${getTranslation(TRANSLATION_KEYS.NO_OPT_OUT_SIGNAL, translations)}</p>\n      </div>\n    `;\n    } else if (!userMadeChanges) {\n      return `\n      <div class=\"gpc-status-container\" id=\"${CUSTOM_ELEMENT_ID}\" style=\"${containerStyle}\">\n        <p aria-live=\"polite\" role=\"status\" class=\"gpc-status\" style=\"${statusStyle}\">${getTranslation(TRANSLATION_KEYS.OPT_OUT_SIGNAL_DETECTED, translations)}</p>\n        <p aria-live=\"polite\" role=\"status\" class=\"gpc-status\" style=\"${statusStyle}\">${getTranslation(TRANSLATION_KEYS.OPT_OUT_REQUEST_HONORED, translations)}</p>\n      </div>\n    `;\n    } else {\n      return `\n      <div class=\"gpc-status-container\" id=\"${CUSTOM_ELEMENT_ID}\" style=\"${containerStyle}\">\n        <p aria-live=\"polite\" role=\"status\" class=\"gpc-status\" style=\"${statusStyle}\">${getTranslation(TRANSLATION_KEYS.OPT_OUT_SIGNAL_DETECTED, translations)}</p>\n        <p aria-live=\"polite\" role=\"status\" class=\"gpc-status\" style=\"${statusStyle}\">${getTranslation(TRANSLATION_KEYS.PAST_CHOICES_CONFIGURED, translations)}</p>\n      </div>\n    `;\n    }\n  }\n  function findRequestDataElement() {\n    const messageDiv = document.getElementById('prc-tp-cat-message');\n    if (!messageDiv) {\n      return null;\n    }\n    const walker = document.createTreeWalker(messageDiv, NodeFilter.SHOW_ELEMENT, null, false);\n    let node;\n    while (node = walker.nextNode()) {\n      if (node.tagName === 'H2' && node.textContent && /request.*your.*data/i.test(node.textContent)) {\n        return node;\n      }\n    }\n    const allH2s = messageDiv.querySelectorAll('h2');\n    for (let i = 0; i < allH2s.length; i++) {\n      if (allH2s[i].textContent && /request.*your.*data/i.test(allH2s[i].textContent)) {\n        return allH2s[i];\n      }\n    }\n    return null;\n  }\n  async function injectGpcHtml(siteSettings, user) {\n    if (document.getElementById(CUSTOM_ELEMENT_ID)) {\n      return true;\n    }\n    if (window.evidon?.notice?.userGpcEnabled === undefined) {\n      return false;\n    }\n    const translations = await fetchTranslations(siteSettings, user);\n    const gpcEnabled = isGpcEnabled();\n    let userMadeChanges = false;\n    try {\n      let consentData = null;\n      try {\n        consentData = window.evidon?.notice?.getConsentData?.();\n      } catch (e) {\n        // Ignore errors\n      }\n      if (consentData) {\n        let vendors = [];\n        let vendorsObj = null;\n        let categoriesObj = null;\n        if (Array.isArray(consentData.vendors)) {\n          vendors = consentData.vendors;\n        } else if (consentData.value && Array.isArray(consentData.value.vendors)) {\n          vendors = consentData.value.vendors;\n        } else if (consentData.value && typeof consentData.value === 'object') {\n          if (!userMadeChanges && consentData.value.vendors && typeof consentData.value.vendors === 'object' && !Array.isArray(consentData.value.vendors)) {\n            vendorsObj = consentData.value.vendors;\n          }\n          if (!userMadeChanges && consentData.value.categories && typeof consentData.value.categories === 'object' && !Array.isArray(consentData.value.categories)) {\n            categoriesObj = consentData.value.categories;\n          }\n          if (!userMadeChanges && consentData.value.consentData && Array.isArray(consentData.value.consentData.vendors)) {\n            vendors = consentData.value.consentData.vendors;\n          }\n        }\n        if (!userMadeChanges && vendors.length > 0) {\n          userMadeChanges = vendors.some(vendor => {\n            if (vendor.consent === true || vendor.accepted === true) {\n              return true;\n            }\n            return false;\n          });\n        }\n        if (!userMadeChanges && vendorsObj) {\n          const vendorValues = Object.values(vendorsObj);\n          userMadeChanges = vendorValues.some(v => {\n            if (typeof v === 'object' && v !== null) {\n              if (v.consent === true || v.accepted === true) {\n                return true;\n              }\n              const nestedValues = Object.values(v);\n              return nestedValues.some(nestedVal => nestedVal === true);\n            }\n            return v === true || v === 1;\n          });\n        }\n        if (!userMadeChanges && categoriesObj) {\n          const categoryValues = Object.values(categoriesObj);\n          userMadeChanges = categoryValues.some(c => {\n            if (typeof c === 'object' && c !== null) {\n              if (c.consent === true || c.accepted === true) {\n                return true;\n              }\n              const nestedValues = Object.values(c);\n              return nestedValues.some(nestedVal => nestedVal === true);\n            }\n            return c === true || c === 1;\n          });\n        }\n      }\n      if (!userMadeChanges) {\n        userMadeChanges = hasUserMadeCookieChanges();\n      }\n    } catch (e) {\n      userMadeChanges = hasUserMadeCookieChanges();\n    }\n    if (gpcEnabled) {\n      autoDeclineAll();\n    }\n    const htmlToInsert = generateGpcHtml(gpcEnabled, userMadeChanges, translations);\n    const insertBeforeElement = findRequestDataElement();\n    if (!insertBeforeElement) {\n      const afterElement = document.getElementById(EVIDON_PRE_ELEMENT);\n      if (!afterElement) {\n        return false;\n      }\n      const customWrapper = document.createElement('div');\n      customWrapper.innerHTML = htmlToInsert;\n      const elementToInsert = customWrapper.firstElementChild;\n      if (elementToInsert) {\n        afterElement.insertAdjacentElement('afterend', elementToInsert);\n      }\n      return true;\n    }\n    const customWrapper = document.createElement('div');\n    customWrapper.innerHTML = htmlToInsert;\n    const elementToInsert = customWrapper.firstElementChild;\n    if (elementToInsert) {\n      insertBeforeElement.insertAdjacentElement('beforebegin', elementToInsert);\n    }\n    return true;\n  }\n  function setupGpcHtmlInjection(siteSettings, user) {\n    let intervalId;\n    let timeoutId;\n    let observer = null;\n    const pollForGpcStatus = async () => {\n      if (await injectGpcHtml(siteSettings, user)) {\n        if (intervalId) {\n          clearInterval(intervalId);\n        }\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n      }\n    };\n    observer = new MutationObserver(() => {\n      pollForGpcStatus();\n    });\n    observer.observe(document.body, {\n      childList: true,\n      subtree: true,\n      attributes: false,\n      characterData: false\n    });\n    pollForGpcStatus();\n    intervalId = setInterval(pollForGpcStatus, INTERVAL_500);\n    timeoutId = setTimeout(() => {\n      if (intervalId) {\n        clearInterval(intervalId);\n      }\n      if (observer) {\n        observer.disconnect();\n      }\n    }, INTERVAL_10000);\n    return () => {\n      if (intervalId) {\n        clearInterval(intervalId);\n      }\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n      if (observer) {\n        observer.disconnect();\n      }\n    };\n  }\n  async function addPrivacyChoicesLink(siteSettings, user) {\n    const translations = await fetchTranslations(siteSettings, user);\n    const checkFooter = setInterval(() => {\n      let targetElement = null;\n      const footerEntrypoint = document.querySelector('.footer-rbx-entrypoint') || document.querySelector('[class*=\"footer-rbx-entrypoint\"]');\n      if (footerEntrypoint) {\n        targetElement = footerEntrypoint;\n      } else {\n        const belowFooterOutlet = document.querySelector('.below-footer-outlet');\n        if (belowFooterOutlet) {\n          const footerRbx = belowFooterOutlet.querySelector('#footer_rbx');\n          if (footerRbx) {\n            targetElement = footerRbx;\n          } else {\n            targetElement = belowFooterOutlet;\n          }\n        } else {\n          const footerRbx = document.getElementById('footer_rbx');\n          if (footerRbx) {\n            targetElement = footerRbx;\n          }\n        }\n      }\n      if (!targetElement) {\n        return;\n      }\n      if (document.getElementById('gpc-privacy-choices-link')) {\n        clearInterval(checkFooter);\n        return;\n      }\n      const privacyLink = document.createElement('a');\n      privacyLink.id = 'gpc-privacy-choices-link';\n      privacyLink.href = '#';\n      privacyLink.className = 'gpc-privacy-choices-link';\n      privacyLink.style.cursor = 'pointer';\n      privacyLink.textContent = getTranslation(TRANSLATION_KEYS.YOUR_PRIVACY_CHOICES, translations);\n      const icon = document.createElement('img');\n      const cdnPath = siteSettings?.react_bootstrapper_cdn || '';\n      const fallbackBase64 = 'data:image/png;base64,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';\n      icon.src = cdnPath ? `${cdnPath}/images/Privacy_Icon.png` : fallbackBase64;\n      icon.alt = '';\n      icon.style.marginLeft = '8px';\n      icon.style.verticalAlign = 'middle';\n      icon.style.height = '14px';\n      icon.style.width = 'auto';\n      icon.onerror = function () {\n        this.src = fallbackBase64;\n      };\n      privacyLink.appendChild(icon);\n      const container = document.createElement('div');\n      container.className = 'gpc-privacy-choices-container';\n      container.appendChild(privacyLink);\n      privacyLink.addEventListener('click', e => {\n        e.preventDefault();\n        if (window.evidon?.notice?.showOptions) {\n          window.evidon.notice.showOptions();\n        }\n      });\n      targetElement.insertAdjacentElement('afterend', container);\n      clearInterval(checkFooter);\n    }, 500);\n    setTimeout(() => {\n      clearInterval(checkFooter);\n    }, 10000);\n  }\n  var _default = _exports.default = {\n    name: 'gpc-compliance',\n    initialize() {\n      (0, _pluginApi.withPluginApi)('2.0.0', api => {\n        const siteSettings = api.container.lookup('service:site-settings');\n        if (!siteSettings.gpc_compliance_enabled) {\n          return;\n        }\n        const user = api.getCurrentUser();\n        if (document.readyState === 'loading') {\n          document.addEventListener('DOMContentLoaded', () => {\n            setupGpcHtmlInjection(siteSettings, user);\n            addPrivacyChoicesLink(siteSettings, user);\n          });\n        } else {\n          setupGpcHtmlInjection(siteSettings, user);\n          addPrivacyChoicesLink(siteSettings, user);\n        }\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-gpc-compliance/discourse/templates/connectors/below-footer\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{below-footer name=\"below-footer\"}}\n  \n  \n  \n  */\n  {\n    \"id\": \"IymbUxa5\",\n    \"block\": \"[[[1,[28,[35,0],null,[[\\\"name\\\"],[\\\"below-footer\\\"]]]],[1,\\\"\\\\n\\\\n\\\\n\\\"]],[],false,[\\\"below-footer\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-gpc-compliance/discourse/templates/connectors/below-footer.hbs\",\n    \"isStrictMode\": false\n  });\n});"],"mappings":"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","ignoreList":[]}