{"version":3,"file":"main.DbSaPc.js","sources":["theme-59/virtual:theme","theme-59/discourse/api-initializers/theme-initializer.gjs","theme-59/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(59);\n\nexport function themePrefix(key) {\n  return `theme_translations.59.${key}`;\n}\n","import { apiInitializer } from \"discourse/lib/api\";\n\nexport default apiInitializer((api) => {\n  const DNSS_LINK_ID = \"transcend-do-not-sell\";\n  const COOKIE_PREFS_LINK_ID = \"transcend-cookie-preferences\";\n\n  const TRANSCEND_SRC =\n    \"https://transcend-cdn.com/cm/1f0cf102-c592-4eb4-834f-e07f2fe68ef1/airgap.js\";\n\n  const TRANSCEND_ATTRS = {\n    \"data-px\": \"<!-- Transcend -->\",\n    \"data-cfasync\": \"false\",\n    \"data-local-sync\": \"allow-network-observable\",\n    \"data-sites\": \"postman.com api-first-world.com\",\n    async: \"true\",\n  };\n\n  const GPC_STORAGE_KEY = \"gpc-banner-dismissed\";\n  \n  // US-safe defaults; updated when airgap regimes resolve.\n  let consentViewState = \"AcceptOrRejectAllOrMoreChoices\";\n  let showDnss = true;\n\n  let transcendLoadingPromise = null;\n\n  function hasTranscend() {\n    return !!(\n      window.transcend &&\n      typeof window.transcend.showConsentManager === \"function\"\n    );\n  }\n\n  function injectTranscendScriptOnce() {\n    if (transcendLoadingPromise) return transcendLoadingPromise;\n\n    transcendLoadingPromise = new Promise((resolve, reject) => {\n      const existing = document.querySelector(\n        `script[src=\"${TRANSCEND_SRC}\"]`\n      );\n      if (existing) {\n        resolve();\n        return;\n      }\n\n      const s = document.createElement(\"script\");\n      s.src = TRANSCEND_SRC;\n\n      Object.entries(TRANSCEND_ATTRS).forEach(([k, v]) =>\n        s.setAttribute(k, v)\n      );\n\n      s.onload = () => resolve();\n      s.onerror = () =>\n        reject(new Error(\"Failed to load Transcend script\"));\n\n      (document.head || document.body || document.documentElement).appendChild(\n        s\n      );\n    });\n\n    return transcendLoadingPromise;\n  }\n\n  async function waitForTranscendReady(timeoutMs = 4000) {\n    const start = Date.now();\n    while (Date.now() - start < timeoutMs) {\n      if (hasTranscend()) return true;\n      await new Promise((r) => setTimeout(r, 100));\n    }\n    return hasTranscend();\n  }\n\n  async function handleDNSSClick(e) {\n    if (hasTranscend()) {\n      e.preventDefault();\n      e.stopPropagation();\n      window.transcend.showConsentManager({\n        viewState: \"DoNotSellExplainer\",\n      });\n      return;\n    }\n\n    try {\n      await injectTranscendScriptOnce();\n      const ready = await waitForTranscendReady(4000);\n      if (ready) {\n        e.preventDefault();\n        e.stopPropagation();\n        window.transcend.showConsentManager({\n          viewState: \"DoNotSellExplainer\",\n        });\n      }\n    } catch {\n      // Injection failed -- allow fallback navigation\n    }\n  }\n\n  async function handleCookiePrefsClick(e) {\n    if (hasTranscend()) {\n      e.preventDefault();\n      e.stopPropagation();\n      window.transcend.showConsentManager({ viewState: consentViewState });\n      return;\n    }\n\n    try {\n      await injectTranscendScriptOnce();\n      const ready = await waitForTranscendReady(4000);\n      if (ready) {\n        e.preventDefault();\n        e.stopPropagation();\n        window.transcend.showConsentManager();\n      }\n    } catch {\n      // Injection failed -- allow fallback navigation\n    }\n  }\n  \n  // Hide/show DNSS link AND clear the preceding \" &middot; \" text-node separator\n  // so we don't leave \"Privacy Policy ·  · Cookie Preferences\" when DNSS is hidden.\n  function applyDnssVisibility() {\n    const link = document.getElementById(DNSS_LINK_ID);\n    if (!link) return;\n    link.style.display = showDnss ? \"\" : \"none\";\n\n    const prev = link.previousSibling;\n    if (prev && prev.nodeType === Node.TEXT_NODE) {\n      if (showDnss) {\n        if (prev._transcendOriginalText !== undefined) {\n          prev.textContent = prev._transcendOriginalText;\n        }\n      } else {\n        if (prev._transcendOriginalText === undefined) {\n          prev._transcendOriginalText = prev.textContent;\n        }\n        prev.textContent = \"\";\n      }\n    }\n  }\n  \n  // Resolve viewState + DNSS visibility from airgap regimes.\n  // Eagerly injects Transcend so the click handlers don't have to wait at click time.\n  async function resolveRegime() {\n    try {\n      await injectTranscendScriptOnce();\n      await waitForAirgap(10000);\n\n      if (typeof window.airgap.getRegimes !== \"function\") return;\n      const regimes = window.airgap.getRegimes();\n      if (regimes === undefined) return; // empty Set is also terminal (non-US)\n\n      let hasUS = false;\n      if (regimes && typeof regimes.forEach === \"function\") {\n        regimes.forEach((r) => {\n          const name = String(r).toUpperCase();\n          if (name === \"US\" || name.indexOf(\"US-\") === 0) hasUS = true;\n        });\n      }\n\n      if (hasUS) {\n        consentViewState = \"AcceptOrRejectAllOrMoreChoices\";\n        showDnss = true;\n      } else {\n        consentViewState = \"CompleteOptionsToggles\";\n        showDnss = false;\n      }\n\n      applyDnssVisibility();\n    } catch {\n      // airgap didn't load -- keep US-safe defaults\n    }\n  }\n\n  function wireFooterLinks() {\n    const dnssLink = document.getElementById(DNSS_LINK_ID);\n    if (dnssLink && dnssLink.dataset.transcendBound !== \"true\") {\n      dnssLink.dataset.transcendBound = \"true\";\n      dnssLink.addEventListener(\"click\", handleDNSSClick);\n    }\n\n    const cookieLink = document.getElementById(COOKIE_PREFS_LINK_ID);\n    if (cookieLink && cookieLink.dataset.transcendBound !== \"true\") {\n      cookieLink.dataset.transcendBound = \"true\";\n      cookieLink.addEventListener(\"click\", handleCookiePrefsClick);\n    }\n    \n    // Re-apply DNSS visibility on every page change in case the footer just re-rendered\n    applyDnssVisibility();\n  }\n\n  // --- GPC Banner ---\n\n  function waitForAirgap(timeout = 10000, interval = 200) {\n    return new Promise((resolve, reject) => {\n      const start = Date.now();\n      const check = () => {\n        if (window.airgap && window.airgap.getPrivacySignals) return resolve();\n        if (Date.now() - start > timeout) return reject(new Error(\"airgap timeout\"));\n        setTimeout(check, interval);\n      };\n      check();\n    });\n  }\n\n  function showGPCBanner() {\n    if (document.getElementById(\"gpc-banner\")) return;\n\n    const banner = document.createElement(\"div\");\n    banner.id = \"gpc-banner\";\n    banner.className = \"gpc-banner\";\n    banner.setAttribute(\"role\", \"status\");\n    banner.innerHTML =\n      'Global Privacy Control Honored ' +\n      '<button class=\"gpc-banner__dismiss\" aria-label=\"Dismiss GPC notice\">&times;</button>';\n\n    banner.querySelector(\".gpc-banner__dismiss\").addEventListener(\"click\", () => {\n      banner.remove();\n      try {\n        sessionStorage.setItem(GPC_STORAGE_KEY, \"1\");\n      } catch {\n        // sessionStorage unavailable\n      }\n    });\n\n    document.body.appendChild(banner);\n  }\n\n  async function checkGPC() {\n    try {\n      if (sessionStorage.getItem(GPC_STORAGE_KEY)) return;\n    } catch {\n      // sessionStorage unavailable\n    }\n\n    try {\n      await injectTranscendScriptOnce();\n      await waitForAirgap(10000);\n\n      const hasGPC = window.airgap.getPrivacySignals().has(\"GPC\");\n      if (!hasGPC) return;\n\n      const purposes = [...window.airgap.getRegimePurposes()];\n      const types = window.airgap.getPurposeTypes();\n      const affected = purposes.some((p) => types[p]?.optOutSignals?.includes(\"GPC\"));\n      if (!affected) return;\n\n      showGPCBanner();\n    } catch {\n      // airgap didn't load -- don't show banner\n    }\n  }\n\n  // Wire everything up\n  wireFooterLinks();\n  resolveRegime();\n  checkGPC();\n  api.onPageChange(() => {\n    wireFooterLinks();\n  });\n});","import * as Mod1 from \"./discourse/api-initializers/theme-initializer\";\nconst compatModules = {\n  \"discourse/api-initializers/theme-initializer\": Mod1,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["getObjectForTheme","themeInitializer","apiInitializer","api","DNSS_LINK_ID","TRANSCEND_SRC","TRANSCEND_ATTRS","async","GPC_STORAGE_KEY","consentViewState","showDnss","transcendLoadingPromise","hasTranscend","window","transcend","showConsentManager","injectTranscendScriptOnce","Promise","resolve","reject","document","querySelector","s","createElement","src","Object","entries","forEach","k","v","setAttribute","onload","onerror","Error","head","body","documentElement","appendChild","waitForTranscendReady","timeoutMs","start","Date","now","r","setTimeout","handleDNSSClick","e","preventDefault","stopPropagation","viewState","handleCookiePrefsClick","applyDnssVisibility","link","getElementById","style","display","prev","previousSibling","nodeType","Node","TEXT_NODE","undefined","_transcendOriginalText","textContent","wireFooterLinks","dnssLink","dataset","transcendBound","addEventListener","cookieLink","waitForAirgap","timeout","interval","check","airgap","getPrivacySignals","getRegimes","regimes","hasUS","name","String","toUpperCase","indexOf","resolveRegime","sessionStorage","getItem","has","purposes","getRegimePurposes","types","getPurposeTypes","some","p","optOutSignals","includes","banner","id","className","innerHTML","remove","setItem","showGPCBanner","checkGPC","onPageChange","compatModules"],"mappings":"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"}