{"version":3,"file":"virtual_entrypoint_main.js","sources":["theme-22/virtual:init-settings","theme-22/virtual:theme","theme-22/discourse/initializers/theme-field-513-common-html-script-1.js","theme-22/virtual:entrypoint:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(22, {});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(22);\n\nexport function themePrefix(key) {\n  return `theme_translations.22.${key}`;\n}\n","import { withPluginApi } from \"discourse/lib/plugin-api\";\nimport deprecated from \"discourse/lib/deprecated\";\n\nexport default {\n  name: \"theme-field-513-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(\"1.0.0\", (api) => {\n      \n// === WikiPrépa — mise en avant des serveurs Discord ===\n// Injection DOM vanilla (même approche que le composant \"style2\" déjà en place),\n// volontairement sans API Ember de rendu pour rester stable entre versions.\n\nconst WP_DISCORDS = [\n  {\n    name: \"Discord WikiPrépa\",\n    desc: \"Entraide, cours et annales entre prépas\",\n    url: \"https://discord.gg/2s7SG5uaNv\",\n    key: \"wikiprepa\"\n  },\n  {\n    name: \"Salon des Grandes Écoles\",\n    desc: \"Échanger avec les écoles et les étudiants\",\n    url: \"https://discord.gg/adhG99Kyua\",\n    key: \"sge\"\n  }\n];\n\nconst WP_DISMISS_KEY = \"wp_discord_banner_dismissed_until\";\nconst WP_DISMISS_DAYS = 30;\n\nconst WP_DISCORD_SVG =\n  '<svg class=\"wp-discord-glyph\" viewBox=\"0 0 127.14 96.36\" aria-hidden=\"true\" focusable=\"false\">' +\n  '<path fill=\"currentColor\" d=\"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z\"/>' +\n  '</svg>';\n\nfunction wpBannerDismissed() {\n  try {\n    const until = parseInt(localStorage.getItem(WP_DISMISS_KEY) || \"0\", 10);\n    return until > new Date().getTime();\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction wpDismissBanner() {\n  try {\n    const until = new Date().getTime() + WP_DISMISS_DAYS * 86400000;\n    localStorage.setItem(WP_DISMISS_KEY, String(until));\n  } catch (e) {}\n  document.querySelectorAll(\".wp-discord-banner\").forEach((el) => el.remove());\n}\n\nfunction wpCard(d, compact) {\n  const a = document.createElement(\"a\");\n  a.className = \"wp-discord-card\";\n  a.href = d.url;\n  a.target = \"_blank\";\n  a.rel = \"noopener\";\n  a.setAttribute(\"data-discord\", d.key);\n  a.innerHTML =\n    '<span class=\"wp-discord-icon\">' + WP_DISCORD_SVG + \"</span>\" +\n    '<span class=\"wp-discord-text\">' +\n    '<span class=\"wp-discord-name\"></span>' +\n    (compact ? \"\" : '<span class=\"wp-discord-desc\"></span>') +\n    \"</span>\" +\n    '<span class=\"wp-discord-cta\">Rejoindre</span>';\n  a.querySelector(\".wp-discord-name\").textContent = d.name;\n  if (!compact) {\n    a.querySelector(\".wp-discord-desc\").textContent = d.desc;\n  }\n  return a;\n}\n\nfunction wpBuildBanner(compact) {\n  const wrap = document.createElement(\"div\");\n  wrap.className = \"wp-discord-banner\" + (compact ? \" wp-discord-banner--compact\" : \"\");\n\n  const head = document.createElement(\"div\");\n  head.className = \"wp-discord-head\";\n  const title = document.createElement(\"span\");\n  title.className = \"wp-discord-title\";\n  title.textContent = compact\n    ? \"Rejoins la communauté sur Discord\"\n    : \"Rejoins la communauté WikiPrépa sur Discord\";\n  head.appendChild(title);\n\n  const close = document.createElement(\"button\");\n  close.type = \"button\";\n  close.className = \"wp-discord-close\";\n  close.setAttribute(\"aria-label\", \"Masquer cette bannière\");\n  close.textContent = \"✕\";\n  close.addEventListener(\"click\", wpDismissBanner);\n  head.appendChild(close);\n\n  wrap.appendChild(head);\n\n  const grid = document.createElement(\"div\");\n  grid.className = \"wp-discord-grid\";\n  WP_DISCORDS.forEach((d) => grid.appendChild(wpCard(d, compact)));\n  wrap.appendChild(grid);\n\n  return wrap;\n}\n\n// --- Bannière / encart dans la liste des sujets -------------------------------\nfunction wpInjectBanner() {\n  if (wpBannerDismissed()) return;\n  if (document.querySelector(\".wp-discord-banner\")) return;\n\n  const path = window.location.pathname.replace(/\\/forum/, \"\") || \"/\";\n  const isTopic = /^\\/t\\//.test(path);\n  if (isTopic) return; // pas dans les sujets, seulement les listes\n\n  const isHome = path === \"/\" || path === \"\" || path.indexOf(\"/categories\") === 0;\n  const compact = !isHome;\n\n  const target =\n    document.querySelector(\"#main-outlet .list-container\") ||\n    document.querySelector(\"#main-outlet .contents\") ||\n    document.querySelector(\"#main-outlet\");\n  if (!target) return;\n\n  target.insertBefore(wpBuildBanner(compact), target.firstChild);\n}\n\n// --- Liens permanents dans le header -----------------------------------------\nfunction wpInjectHeaderLinks() {\n  const icons =\n    document.querySelector(\".d-header .d-header-icons\") ||\n    document.querySelector(\".d-header ul.icons\");\n  if (!icons) return;\n  if (icons.querySelector(\".wp-discord-header-link\")) return;\n\n  // Insérés en fin de liste, sans la classe `header-dropdown-toggle`\n  // (réservée aux menus du header : elle casse le positionnement).\n  WP_DISCORDS.slice().reverse().forEach((d) => {\n    const li = document.createElement(\"li\");\n    li.className = \"wp-discord-header-link\";\n    const a = document.createElement(\"a\");\n    a.href = d.url;\n    a.target = \"_blank\";\n    a.rel = \"noopener\";\n    a.className = \"icon btn-flat\";\n    a.title = d.name;\n    a.setAttribute(\"aria-label\", d.name);\n    a.innerHTML = WP_DISCORD_SVG;\n    li.appendChild(a);\n    icons.insertBefore(li, icons.firstChild);\n  });\n}\n\nfunction wpRefresh() {\n  wpInjectHeaderLinks();\n  wpInjectBanner();\n}\n\napi.onPageChange(() => {\n  setTimeout(wpRefresh, 250);\n});\n\n// Le header et les listes sont rendus de façon asynchrone : on ré-essaie via observer.\nconst wpObserver = new MutationObserver(() => {\n  wpInjectHeaderLinks();\n});\nif (document.body) {\n  wpObserver.observe(document.body, { childList: true, subtree: true });\n}\n\nsetTimeout(wpRefresh, 500);\n\n    });\n  }\n};\n","import \"virtual:init-settings\";\n\nconst compatModules = {};\nimport * as Mod1 from \"./discourse/initializers/theme-field-513-common-html-script-1\";\ncompatModules[\"discourse/initializers/theme-field-513-common-html-script-1\"] = Mod1;\n\nexport default compatModules;\n"],"names":["registerSettings","getObjectForTheme","themeField513CommonHtmlScript1","name","after","initialize","deprecated","id","url","withPluginApi","api","WP_DISCORDS","desc","key","WP_DISMISS_KEY","WP_DISCORD_SVG","wpDismissBanner","until","Date","getTime","WP_DISMISS_DAYS","localStorage","setItem","String","e","document","querySelectorAll","forEach","el","remove","wpBuildBanner","compact","wrap","createElement","className","head","title","textContent","appendChild","close","type","setAttribute","addEventListener","grid","d","a","href","target","rel","innerHTML","querySelector","wpCard","wpInjectBanner","parseInt","getItem","wpBannerDismissed","path","window","location","pathname","replace","test","indexOf","insertBefore","firstChild","wpInjectHeaderLinks","icons","slice","reverse","li","wpRefresh","onPageChange","setTimeout","wpObserver","MutationObserver","body","observe","childList","subtree","compatModules","Mod1"],"mappings":"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"}