{"version":3,"file":"virtual_main.js","sources":["theme-106/virtual:init-settings","theme-106/virtual:theme","theme-106/discourse/initializers/theme-field-1646-common-html-script-1.js","theme-106/virtual:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(106, {});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(106);\n\nexport function themePrefix(key) {\n  return `theme_translations.106.${key}`;\n}\n","import { withPluginApi } from \"discourse/lib/plugin-api\";\nimport deprecated from \"discourse/lib/deprecated\";\n\nexport default {\n  name: \"theme-field-1646-common-html-script-1\",\n  after: \"inject-objects\",\n\n  initialize() {\n    deprecated(\n      \"Adding JS code using <script type='text/discourse-plugin'> is deprecated. Move this code to a dedicated JavaScript file.\",\n      {\n        id: \"discourse.script-tag-discourse-plugin\",\n        url: \"https://meta.discourse.org/t/366482\",\n      }\n    )\n    withPluginApi(\"0.8\", (api) => {\n      \n  let denHeroRenderTimer;\n\n  async function getDenAboutStats() {\n    try {\n      const res = await fetch(\"/about.json\", {\n        credentials: \"same-origin\",\n        headers: { Accept: \"application/json\" }\n      });\n\n      const json = await res.json();\n      const about = json.about || {};\n      const stats = about.stats || json.stats || {};\n\n      return {\n        members:\n          stats.user_count ??\n          stats.users_count ??\n          stats.users ??\n          about.user_count ??\n          about.users_count ??\n          json.user_count ??\n          json.users_count,\n\n        topics:\n          stats.topic_count ??\n          stats.topics_count ??\n          stats.topics ??\n          about.topic_count ??\n          about.topics_count ??\n          json.topic_count ??\n          json.topics_count,\n\n        posts:\n          stats.post_count ??\n          stats.posts_count ??\n          stats.posts ??\n          about.post_count ??\n          about.posts_count ??\n          json.post_count ??\n          json.posts_count\n      };\n    } catch (error) {\n      console.warn(\"[Den Hero] Failed to fetch /about.json\", error);\n      return {};\n    }\n  }\n\n  function getOnlineData(limit = 18) {\n    const whosOnline = document.querySelector(\"#whos-online\");\n    const label = whosOnline?.querySelector(\"span\")?.textContent || \"\";\n    const match = label.match(/\\((\\d+)\\)/);\n\n    const avatars = [...document.querySelectorAll(\"#whos-online img.avatar\")]\n      .slice(0, limit)\n      .map((img) => ({\n        src: img.getAttribute(\"src\"),\n        title: img.getAttribute(\"title\") || \"\"\n      }));\n\n    return {\n      count: match ? Number(match[1]) : avatars.length,\n      avatars\n    };\n  }\n\n  function formatStat(value) {\n    const num = Number(value);\n    if (!Number.isFinite(num)) return \"—\";\n    if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n    if (num >= 1000) return `${(num / 1000).toFixed(1)}k`;\n    return String(num);\n  }\n\n  function buildHeroShell() {\n    const hero = document.createElement(\"section\");\n    hero.className = \"den-hero\";\n\n    hero.innerHTML = `\n      <div class=\"den-hero-main\">\n        <div class=\"den-hero-kicker\">Welcome back to</div>\n        <h1>The Den</h1>\n        <p>An online haven for local and displaced Detroit Lions fans since 1998.</p>\n      </div>\n\n      <div class=\"den-hero-stats\">\n        <div class=\"den-hero-stat den-online-stat\">\n          <strong data-den-stat=\"online\">—</strong>\n          <span>Online Now</span>\n        </div>\n        <div class=\"den-hero-stat\">\n          <strong data-den-stat=\"members\">—</strong>\n          <span>Members</span>\n        </div>\n        <div class=\"den-hero-stat\">\n          <strong data-den-stat=\"topics\">—</strong>\n          <span>Topics</span>\n        </div>\n        <div class=\"den-hero-stat\">\n          <strong data-den-stat=\"posts\">—</strong>\n          <span>Posts</span>\n        </div>\n      </div>\n\n      <div class=\"den-hero-online\">\n        <span data-den-online-label>Online (—):</span>\n        <div class=\"den-hero-avatars\"></div>\n      </div>\n    `;\n\n    return hero;\n  }\n\n  function insertHero(hero) {\n    const listContainer = document.querySelector(\".list-container.--topic-list\");\n    if (!listContainer) return false;\n\n    const mainOutlet = document.querySelector(\"#main-outlet\");\n    const globalNotice = document.querySelector(\"#global-notice-alert-global-notice\");\n\n    if (globalNotice) {\n      const noticeContainer = globalNotice.closest(\".row\") || globalNotice.parentElement;\n      noticeContainer.after(hero);\n      return true;\n    }\n\n    if (mainOutlet) {\n      mainOutlet.prepend(hero);\n      return true;\n    }\n\n    listContainer.before(hero);\n    return true;\n  }\n\n  async function updateHeroData(hero) {\n    const online = getOnlineData();\n    const stats = await getDenAboutStats();\n\n    hero.querySelector('[data-den-stat=\"online\"]').textContent = formatStat(online.count);\n    hero.querySelector('[data-den-stat=\"members\"]').textContent = formatStat(stats.members);\n    hero.querySelector('[data-den-stat=\"topics\"]').textContent = formatStat(stats.topics);\n    hero.querySelector('[data-den-stat=\"posts\"]').textContent = formatStat(stats.posts);\n\n    hero.querySelector(\"[data-den-online-label]\").textContent =\n      `Online (${formatStat(online.count)}):`;\n\n    const avatars = hero.querySelector(\".den-hero-avatars\");\n\n    avatars.innerHTML = `\n      ${online.avatars.map((avatar) => `\n        <img class=\"avatar\" src=\"${avatar.src}\" title=\"${avatar.title}\" alt=\"\">\n      `).join(\"\")}\n      ${\n        online.count > online.avatars.length\n          ? `<span class=\"den-hero-more\">+${online.count - online.avatars.length}</span>`\n          : \"\"\n      }\n    `;\n  }\n\n  async function renderDenHero() {\n    const currentUser = api.getCurrentUser();\n\n    if (!currentUser) {\n      document.querySelector(\".den-hero\")?.remove();\n      return;\n    }\n\n    let hero = document.querySelector(\".den-hero\");\n\n    if (!hero) {\n      hero = buildHeroShell();\n\n      if (!insertHero(hero)) {\n        return;\n      }\n    }\n\n    await updateHeroData(hero);\n  }\n\n  function scheduleDenHeroRender() {\n    clearTimeout(denHeroRenderTimer);\n\n    renderDenHero();\n\n    denHeroRenderTimer = setTimeout(() => {\n      renderDenHero();\n    }, 1000);\n  }\n\n  api.onPageChange(scheduleDenHeroRender);\n\n    });\n  }\n};\n","import \"virtual:init-settings\";\n\nconst themeCompatModules = {};\nimport * as Mod1 from \"./discourse/initializers/theme-field-1646-common-html-script-1\";\nthemeCompatModules[\"discourse/initializers/theme-field-1646-common-html-script-1\"] = Mod1;\n\nexport default themeCompatModules;\n"],"names":["registerSettings","getObjectForTheme","themeField1646CommonHtmlScript1","name","after","initialize","deprecated","id","url","withPluginApi","api","denHeroRenderTimer","formatStat","value","num","Number","isFinite","toFixed","String","async","updateHeroData","hero","online","limit","arguments","length","undefined","whosOnline","document","querySelector","match","textContent","avatars","querySelectorAll","slice","map","img","src","getAttribute","title","count","getOnlineData","stats","res","fetch","credentials","headers","Accept","json","about","members","user_count","users_count","users","topics","topic_count","topics_count","posts","post_count","posts_count","error","console","warn","getDenAboutStats","innerHTML","avatar","join","renderDenHero","getCurrentUser","remove","createElement","className","buildHeroShell","listContainer","mainOutlet","globalNotice","closest","parentElement","prepend","before","insertHero","onPageChange","clearTimeout","setTimeout","themeCompatModules","Mod1"],"mappings":"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"}