{"version":3,"file":"main.js","sources":["theme-8/virtual:init-settings","theme-8/virtual:theme","theme-8/discourse/api-initializers/theme-initializer.gjs","theme-8/virtual:entrypoint:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(8, {});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(8);\n\nexport function themePrefix(key) {\n  return `theme_translations.8.${key}`;\n}\n","import { apiInitializer } from \"discourse/lib/api\";\r\n\r\nconst LEGACY_TAG = \"legacy-version\";\r\nconst CONFIRMED_TAG = \"confirmed-current\";\r\nconst BANNER_CLASS = \"dhtmlx-legacy-topic-banner\";\r\n\r\nlet discourseApi = null;\r\n\r\nconst BANNER_RULES = [\r\n  {\r\n    id: \"suite\",\r\n    match: {\r\n      paths: [\"/c/suite\"],\r\n      categoryText: [\"suite\"]\r\n    },\r\n    eyebrow: \"Warning\",\r\n    title: \"Legacy Suite topic\",\r\n    body:\r\n      \"This thread may refer to older DHTMLX Suite APIs or behavior. Before using code from this discussion, check the current Suite documentation.\",\r\n    links: [\r\n      {\r\n        label: \"Suite documentation\",\r\n        url: \"https://docs.dhtmlx.com/suite/\"\r\n      },\r\n      {\r\n        label: \"Live examples\",\r\n        url: \"https://snippet.dhtmlx.com/kw89q481?tag=suite&mode=wide\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    id: \"pivot\",\r\n    match: {\r\n      paths: [\"/c/pivot\"],\r\n      categoryText: [\"pivot\"]\r\n    },\r\n    eyebrow: \"Warning\",\r\n    title: \"Legacy Pivot topic\",\r\n    body:\r\n      \"This thread may refer to older DHTMLX Pivot APIs or behavior. Before using code from this discussion, check the current Pivot documentation.\",\r\n    links: [\r\n      {\r\n        label: \"Current Pivot docs\",\r\n        url: \"https://docs.dhtmlx.com/pivot/\"\r\n      },\r\n      {\r\n        label: \"Migration guide\",\r\n        url: \"https://docs.dhtmlx.com/pivot/news/whats-new/\"\r\n      },\r\n      {\r\n        label: \"Code snippets\",\r\n        url: \"https://snippet.dhtmlx.com/\"\r\n      }\r\n    ]\r\n  }\r\n];\r\n\r\n/*\r\nTemplate for a new widget:\r\n\r\n{\r\n  id: \"scheduler\",\r\n  match: {\r\n    paths: [\"/c/scheduler\"],\r\n    categoryText: [\"scheduler\"]\r\n  },\r\n  eyebrow: \"Warning\",\r\n  title: \"Legacy Scheduler topic\",\r\n  body:\r\n    \"This thread may refer to older DHTMLX Scheduler APIs or behavior. Before using code from this discussion, check the current Scheduler documentation.\",\r\n  links: [\r\n    {\r\n      label: \"Current Scheduler docs\",\r\n      url: \"https://docs.dhtmlx.com/scheduler/\"\r\n    },\r\n    {\r\n      label: \"Migration guide\",\r\n      url: \"https://docs.dhtmlx.com/scheduler/what_s_new.html\"\r\n    },\r\n    {\r\n      label: \"Code snippets\",\r\n      url: \"https://snippet.dhtmlx.com/\"\r\n    }\r\n  ]\r\n}\r\n*/\r\n\r\nfunction normalize(value) {\r\n  return String(value || \"\").toLowerCase().trim();\r\n}\r\n\r\nfunction escapeHtml(value) {\r\n  return String(value || \"\")\r\n    .replace(/&/g, \"&amp;\")\r\n    .replace(/</g, \"&lt;\")\r\n    .replace(/>/g, \"&gt;\")\r\n    .replace(/\"/g, \"&quot;\")\r\n    .replace(/'/g, \"&#039;\");\r\n}\r\n\r\nfunction removeBanner() {\r\n  document.querySelectorAll(\".\" + BANNER_CLASS).forEach(function (el) {\r\n    el.remove();\r\n  });\r\n}\r\n\r\nfunction getTopicModel() {\r\n  if (!discourseApi || !discourseApi.container) {\r\n    return null;\r\n  }\r\n\r\n  const controller = discourseApi.container.lookup(\"controller:topic\");\r\n\r\n  if (!controller || !controller.model) {\r\n    return null;\r\n  }\r\n\r\n  return controller.model;\r\n}\r\n\r\nfunction readTopicProp(topic, propName) {\r\n  if (!topic) {\r\n    return null;\r\n  }\r\n\r\n  if (typeof topic.get === \"function\") {\r\n    return topic.get(propName);\r\n  }\r\n\r\n  return topic[propName];\r\n}\r\n\r\nfunction normalizeTagValue(tag) {\r\n  if (!tag) {\r\n    return \"\";\r\n  }\r\n\r\n  if (typeof tag === \"string\") {\r\n    return normalize(tag);\r\n  }\r\n\r\n  return normalize(tag.name || tag.id || tag.slug || tag.text);\r\n}\r\n\r\nfunction getTopicTagsFromModel() {\r\n  const topic = getTopicModel();\r\n\r\n  if (!topic) {\r\n    return [];\r\n  }\r\n\r\n  const rawTags =\r\n    readTopicProp(topic, \"tags\") ||\r\n    readTopicProp(topic, \"tag_names\") ||\r\n    readTopicProp(topic, \"tagNames\") ||\r\n    [];\r\n\r\n  if (!Array.isArray(rawTags)) {\r\n    return [];\r\n  }\r\n\r\n  return rawTags.map(normalizeTagValue).filter(Boolean);\r\n}\r\n\r\nfunction getTopicTagsFromTitleDom() {\r\n  const title = document.querySelector(\"#topic-title\");\r\n\r\n  if (!title) {\r\n    return [];\r\n  }\r\n\r\n  const tagLinks = Array.from(\r\n    title.querySelectorAll(\r\n      \"a.discourse-tag, .discourse-tags a, a[href*='/tag/']\"\r\n    )\r\n  );\r\n\r\n  const tags = [];\r\n\r\n  tagLinks.forEach(function (el) {\r\n    const text = normalize(el.textContent);\r\n    const href = normalize(el.getAttribute(\"href\"));\r\n\r\n    if (text) {\r\n      tags.push(text);\r\n    }\r\n\r\n    if (href.indexOf(\"/tag/\") !== -1) {\r\n      const hrefTag = href.split(\"/tag/\").pop().split(/[/?#]/)[0];\r\n\r\n      if (hrefTag) {\r\n        tags.push(normalize(hrefTag));\r\n      }\r\n    }\r\n  });\r\n\r\n  return tags;\r\n}\r\n\r\nfunction getTopicTags() {\r\n  const modelTags = getTopicTagsFromModel();\r\n\r\n  if (modelTags.length) {\r\n    return modelTags;\r\n  }\r\n\r\n  return getTopicTagsFromTitleDom();\r\n}\r\n\r\nfunction hasExactTag(tagName) {\r\n  const needle = normalize(tagName);\r\n  const tags = getTopicTags();\r\n\r\n  return tags.some(function (tag) {\r\n    return normalize(tag) === needle;\r\n  });\r\n}\r\n\r\nfunction getCategoryText() {\r\n  const categoryElements = Array.from(\r\n    document.querySelectorAll(\r\n      \"a[href*='/c/'], .badge-category__name, .category-name\"\r\n    )\r\n  );\r\n\r\n  const categoryData = categoryElements\r\n    .map(function (el) {\r\n      const text = el.textContent || \"\";\r\n      const href = el.getAttribute(\"href\") || \"\";\r\n      return text + \" \" + href;\r\n    })\r\n    .join(\" \");\r\n\r\n  return normalize(categoryData + \" \" + window.location.pathname);\r\n}\r\n\r\nfunction ruleMatches(rule) {\r\n  if (!rule || !rule.match) {\r\n    return false;\r\n  }\r\n\r\n  const pageText = getCategoryText();\r\n  const path = normalize(window.location.pathname);\r\n  const paths = rule.match.paths || [];\r\n  const categoryText = rule.match.categoryText || [];\r\n\r\n  const pathMatches = paths.some(function (rulePath) {\r\n    const normalizedRulePath = normalize(rulePath);\r\n\r\n    return (\r\n      path.indexOf(normalizedRulePath) !== -1 ||\r\n      pageText.indexOf(normalizedRulePath) !== -1\r\n    );\r\n  });\r\n\r\n  const textMatches = categoryText.some(function (text) {\r\n    return pageText.indexOf(normalize(text)) !== -1;\r\n  });\r\n\r\n  return pathMatches || textMatches;\r\n}\r\n\r\nfunction findBannerRule() {\r\n  return BANNER_RULES.find(function (rule) {\r\n    return ruleMatches(rule);\r\n  });\r\n}\r\n\r\nfunction createLinksHtml(links) {\r\n  return links\r\n    .map(function (link) {\r\n      return (\r\n        '<a href=\"' +\r\n        escapeHtml(link.url) +\r\n        '\" target=\"_blank\" rel=\"noopener\">' +\r\n        escapeHtml(link.label) +\r\n        \"</a>\"\r\n      );\r\n    })\r\n    .join(\"\");\r\n}\r\n\r\nfunction createBanner(rule) {\r\n  const banner = document.createElement(\"aside\");\r\n\r\n  banner.className = BANNER_CLASS;\r\n  banner.setAttribute(\"data-ai-notice\", \"legacy-dhtmlx-topic\");\r\n  banner.setAttribute(\"data-product\", rule.id);\r\n\r\n  banner.innerHTML =\r\n    '<div class=\"dhtmlx-legacy-topic-banner__inner\">' +\r\n    '<div class=\"dhtmlx-legacy-topic-banner__eyebrow\">' +\r\n    escapeHtml(rule.eyebrow) +\r\n    \"</div>\" +\r\n    '<div class=\"dhtmlx-legacy-topic-banner__title\">' +\r\n    escapeHtml(rule.title) +\r\n    \"</div>\" +\r\n    '<div class=\"dhtmlx-legacy-topic-banner__body\">' +\r\n    escapeHtml(rule.body) +\r\n    \"</div>\" +\r\n    '<div class=\"dhtmlx-legacy-topic-banner__links\">' +\r\n    createLinksHtml(rule.links || []) +\r\n    \"</div>\" +\r\n    \"</div>\";\r\n\r\n  return banner;\r\n}\r\n\r\nfunction getBannerTarget() {\r\n  return (\r\n    document.querySelector(\"#topic-title\") ||\r\n    document.querySelector(\".topic-post:first-of-type\") ||\r\n    document.querySelector(\".post-stream\")\r\n  );\r\n}\r\n\r\nfunction shouldShowBanner() {\r\n  if (window.location.pathname.indexOf(\"/t/\") === -1) {\r\n    return false;\r\n  }\r\n\r\n  if (hasExactTag(CONFIRMED_TAG)) {\r\n    return false;\r\n  }\r\n\r\n  return hasExactTag(LEGACY_TAG);\r\n}\r\n\r\nfunction renderBanner() {\r\n  removeBanner();\r\n\r\n  if (!shouldShowBanner()) {\r\n    return false;\r\n  }\r\n\r\n  const rule = findBannerRule();\r\n\r\n  if (!rule) {\r\n    return false;\r\n  }\r\n\r\n  const target = getBannerTarget();\r\n\r\n  if (!target) {\r\n    return false;\r\n  }\r\n\r\n  target.insertAdjacentElement(\"afterend\", createBanner(rule));\r\n  return true;\r\n}\r\n\r\nfunction renderWithRetry(attempt) {\r\n  const currentAttempt = attempt || 0;\r\n  const rendered = renderBanner();\r\n\r\n  if (!rendered && currentAttempt < 5) {\r\n    window.setTimeout(function () {\r\n      renderWithRetry(currentAttempt + 1);\r\n    }, 300);\r\n  }\r\n}\r\n\r\nexport default apiInitializer(\"1.0\", function (api) {\r\n  discourseApi = api;\r\n\r\n  api.onPageChange(function () {\r\n    removeBanner();\r\n\r\n    window.setTimeout(function () {\r\n      renderWithRetry(0);\r\n    }, 100);\r\n  });\r\n});","const compatModules = {};import \"virtual:init-settings\";\nimport * as Mod1 from \"./discourse/api-initializers/theme-initializer\";\ncompatModules[\"discourse/api-initializers/theme-initializer\"] = Mod1;\n\nexport * as discourse$api__initializers$theme__initializer$$__module from \"./discourse/api-initializers/theme-initializer\";\nexport {\ndefault as discourse$api__initializers$theme__initializer$$default\n} from \"./discourse/api-initializers/theme-initializer\";\nexport default compatModules;\n"],"names":["registerSettings","getObjectForTheme","BANNER_CLASS","discourseApi","BANNER_RULES","id","match","paths","categoryText","eyebrow","title","body","links","label","url","normalize","value","String","toLowerCase","trim","escapeHtml","replace","removeBanner","document","querySelectorAll","forEach","el","remove","readTopicProp","topic","propName","get","normalizeTagValue","tag","name","slug","text","getTopicTagsFromModel","container","controller","lookup","model","getTopicModel","rawTags","Array","isArray","map","filter","Boolean","getTopicTags","modelTags","length","querySelector","tagLinks","from","tags","textContent","href","getAttribute","push","indexOf","hrefTag","split","pop","getTopicTagsFromTitleDom","hasExactTag","tagName","needle","some","ruleMatches","rule","pageText","join","window","location","pathname","path","pathMatches","rulePath","normalizedRulePath","textMatches","createBanner","banner","createElement","className","setAttribute","innerHTML","link","renderBanner","find","target","insertAdjacentElement","renderWithRetry","attempt","currentAttempt","setTimeout","themeInitializer","apiInitializer","api","onPageChange","compatModules","Mod1"],"mappings":"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"}