{"version":3,"file":"main.2gFqMA.js","sources":["theme-12/virtual:theme","theme-12/discourse/components/category-icon.gjs","theme-12/discourse/initializers/category-icons.js","theme-12/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(12);\n\nexport function themePrefix(key) {\n  return `theme_translations.12.${key}`;\n}\n","const CategoryIcon = <template>\n  {{! the category banners theme component no longer uses this component }}\n</template>;\n\nexport default CategoryIcon;\n","import { get } from \"@ember/object\";\nimport getURL from \"discourse/lib/get-url\";\nimport CategoryHashtagType from \"discourse/lib/hashtag-types/category\";\nimport { helperContext } from \"discourse/lib/helpers\";\nimport { iconHTML } from \"discourse/lib/icon-library\";\nimport { withPluginApi } from \"discourse/lib/plugin-api\";\nimport { isRTL } from \"discourse/lib/text-direction\";\nimport { escapeExpression } from \"discourse/lib/utilities\";\nimport Category from \"discourse/models/category\";\nimport { i18n } from \"discourse-i18n\";\n\nclass CategoryHashtagTypeWithIcon extends CategoryHashtagType {\n  constructor(dict, owner) {\n    super(owner);\n    this.dict = dict;\n  }\n\n  generateIconHTML(hashtag) {\n    const opt = this.dict[hashtag.id];\n    if (opt) {\n      const newIcon = document.createElement(\"span\");\n      newIcon.classList.add(\"hashtag-category-icon\");\n      newIcon.innerHTML = iconHTML(opt.icon);\n      newIcon.style.color = opt.color;\n      return newIcon.outerHTML;\n    } else {\n      return super.generateIconHTML(hashtag);\n    }\n  }\n}\n\nexport default {\n  name: \"category-icons\",\n\n  initialize(owner) {\n    withPluginApi((api) => {\n      let categoryThemeList = settings.category_icon_list.split(\"|\");\n      let lockIcon = settings.category_lock_icon || \"lock\";\n\n      function getIconItem(categorySlug) {\n        if (!categorySlug) {\n          return;\n        }\n\n        let categoryThemeItem = categoryThemeList.find((str) =>\n          str.indexOf(\",\") > -1\n            ? categorySlug.indexOf(str.substr(0, str.indexOf(\",\"))) > -1\n            : \"\"\n        );\n\n        if (categoryThemeItem) {\n          let iconItem = categoryThemeItem.split(\",\");\n          // Test partial/exact match\n          if (iconItem[3] === \"partial\") {\n            return iconItem;\n          } else if (iconItem[0] === categorySlug) {\n            return iconItem;\n          }\n        }\n      }\n\n      function buildTopicCount(count) {\n        return `<span class=\"topic-count\" aria-label=\"${i18n(\n          \"category_row.topic_count\",\n          { count }\n        )}\">&times; ${count}</span>`;\n      }\n\n      function categoryIconsRenderer(category, opts) {\n        let siteSettings = helperContext().siteSettings;\n        let descriptionText = escapeExpression(\n          get(category, \"description_text\")\n        );\n        let restricted = get(category, \"read_restricted\");\n        let url = opts.url\n          ? opts.url\n          : getURL(`/c/${Category.slugFor(category)}/${get(category, \"id\")}`);\n        let href = opts.link === false ? \"\" : url;\n        let tagName =\n          opts.link === false || opts.link === \"false\" ? \"span\" : \"a\";\n        let extraClasses = opts.extraClasses ? \" \" + opts.extraClasses : \"\";\n        let html = \"\";\n        let parentCat = null;\n        let categoryDir = \"\";\n        let dataAttributes = category\n          ? `data-category-id=\"${get(category, \"id\")}\"`\n          : \"\";\n\n        /// Add custom category icon from theme settings\n        let iconItem = getIconItem(category.slug);\n\n        if (!opts.hideParent) {\n          parentCat = Category.findById(get(category, \"parent_category_id\"));\n        }\n\n        let classNames = `badge-category ${iconItem ? \"--has-icon\" : \"\"}`;\n        if (restricted) {\n          classNames += \" restricted\";\n        }\n\n        if (parentCat) {\n          classNames += ` --has-parent`;\n          dataAttributes += ` data-parent-category-id=\"${parentCat.id}\"`;\n        }\n\n        html += `<span \n          ${dataAttributes} \n          data-drop-close=\"true\" \n          class=\"${classNames}\" \n          ${descriptionText ? 'title=\"' + descriptionText + '\" ' : \"\"}\n        >`;\n\n        if (iconItem) {\n          let itemColor = iconItem[2] ? `style=\"color: ${iconItem[2]}\"` : \"\";\n          let itemIcon = iconItem[1] !== \"\" ? iconHTML(iconItem[1]) : \"\";\n          html += `<span ${itemColor} class=\"badge-category__icon\">${itemIcon}</span>`;\n        } else {\n          html += `<span data-category-id=\"${category.id}\" class=\"badge-category --style-square\"></span>`;\n        }\n        /// End custom category icon\n\n        let categoryName = escapeExpression(get(category, \"name\"));\n\n        if (siteSettings.support_mixed_text_direction) {\n          categoryDir = isRTL(categoryName) ? 'dir=\"rtl\"' : 'dir=\"ltr\"';\n        }\n\n        if (restricted) {\n          html += iconHTML(lockIcon);\n        }\n        html += `<span class=\"badge-category__name\" ${categoryDir}>${categoryName}</span>`;\n        html += \"</span>\";\n\n        if (opts.topicCount) {\n          html += buildTopicCount(opts.topicCount);\n        }\n\n        if (href) {\n          href = ` href=\"${href}\" `;\n        }\n\n        let afterBadgeWrapper = \"\";\n\n        if (opts.plusSubcategories && opts.lastSubcategory) {\n          afterBadgeWrapper += `<span class=\"plus-subcategories\">\n            ${i18n(\"category_row.plus_subcategories\", {\n              count: opts.plusSubcategories,\n            })}\n            </span>`;\n        }\n        return `<${tagName} class=\"badge-category__wrapper ${extraClasses}\" ${href}>${html}</${tagName}>${afterBadgeWrapper}`;\n      }\n\n      api.replaceCategoryLinkRenderer(categoryIconsRenderer);\n\n      if (api.registerCustomCategorySectionLinkLockIcon) {\n        api.registerCustomCategorySectionLinkLockIcon(lockIcon);\n      }\n\n      if (api.registerCustomCategorySectionLinkPrefix) {\n        const site = api.container.lookup(\"service:site\");\n\n        categoryThemeList.forEach((str) => {\n          const [slug, icon, color, match] = str.split(\",\");\n\n          if (slug && icon) {\n            const category = site.categories.find((cat) => {\n              if (match === \"partial\") {\n                return cat.slug.toLowerCase().includes(slug.toLowerCase());\n              } else {\n                return cat.slug.toLowerCase() === slug.toLowerCase();\n              }\n            });\n\n            if (category) {\n              const opts = {\n                categoryId: category.id,\n                prefixType: \"icon\",\n                prefixValue: icon,\n                prefixColor: color,\n              };\n\n              // Fix for legacy color declaration\n              if (color?.match(/categoryColo(u*)r/g)) {\n                opts.prefixColor = category.color;\n              }\n\n              api.registerCustomCategorySectionLinkPrefix(opts);\n            }\n          }\n        });\n      }\n\n      if (api.registerHashtagType) {\n        const site = api.container.lookup(\"service:site\");\n        const dict = {};\n        for (const str of categoryThemeList) {\n          let [slug, icon, color, match] = str.split(\",\");\n          if (slug && icon) {\n            slug = slug.toLowerCase();\n            for (const cat of site.categories) {\n              const catSlug = cat.slug.toLowerCase();\n              if (\n                match === \"partial\" ? !catSlug.includes(slug) : catSlug !== slug\n              ) {\n                continue;\n              }\n              const opts = {\n                icon,\n                color,\n              };\n              if (!color || color?.match(/categoryColo(u*)r/g)) {\n                opts.color = `#${cat.color}`;\n              }\n              dict[cat.id] = opts;\n            }\n          }\n        }\n        api.registerHashtagType(\n          \"category\",\n          new CategoryHashtagTypeWithIcon(dict, owner)\n        );\n      }\n    });\n  },\n};\n","import * as Mod1 from \"./discourse/components/category-icon\";\nimport * as Mod2 from \"./discourse/initializers/category-icons\";\nconst compatModules = {\n  \"discourse/components/category-icon\": Mod1,\n  \"discourse/initializers/category-icons\": Mod2,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","CategoryIcon","setComponentTemplate","createTemplateFactory","id","block","moduleName","isStrictMode","templateOnly","CategoryHashtagTypeWithIcon","CategoryHashtagType","constructor","dict","owner","super","this","generateIconHTML","hashtag","opt","newIcon","document","createElement","classList","add","innerHTML","iconHTML","icon","style","color","outerHTML","categoryIcons","name","initialize","withPluginApi","api","categoryThemeList","category_icon_list","split","lockIcon","category_lock_icon","replaceCategoryLinkRenderer","category","opts","siteSettings","helperContext","descriptionText","escapeExpression","get","restricted","url","getURL","Category","slugFor","href","link","tagName","extraClasses","html","parentCat","categoryDir","dataAttributes","iconItem","categorySlug","categoryThemeItem","find","str","indexOf","substr","getIconItem","slug","hideParent","findById","classNames","categoryName","count","support_mixed_text_direction","isRTL","topicCount","i18n","afterBadgeWrapper","plusSubcategories","lastSubcategory","registerCustomCategorySectionLinkLockIcon","registerCustomCategorySectionLinkPrefix","site","container","lookup","forEach","match","categories","cat","toLowerCase","includes","categoryId","prefixType","prefixValue","prefixColor","registerHashtagType","catSlug","compatModules","Mod1"],"mappings":"kpCAEaA,EAAWC,EAAkB,ICFpCC,EAAAC,EAAAC,EAAA,CAAAC,GAAA,KAAAC,MAAA,aAAAC,WAAA,4BAAAC,cAAA,IAAAC;;;;ACWN,MAAMC,UAAoCC,EACxCC,WAAAA,CAAYC,EAAMC,GAChBC,MAAMD,GACNE,KAAKH,KAAOA,CACd,CAEAI,gBAAAA,CAAiBC,GACf,MAAMC,EAAMH,KAAKH,KAAKK,EAAQb;AAC9B,GAAIc,EAAK,CACP,MAAMC,EAAUC,SAASC,cAAc;AAIvC,OAHAF,EAAQG,UAAUC,IAAI,yBACtBJ,EAAQK,UAAYC,EAASP,EAAIQ,MACjCP,EAAQQ,MAAMC,MAAQV,EAAIU,MACnBT,EAAQU,SACjB,CACE,OAAOf,MAAME,iBAAiBC,EAElC,EAGF,IAAAa,EAAe,CACbC,KAAM,iBAENC,UAAAA,CAAWnB;8BACToB,CAAeC,IACb,IAAIC,EAAoBpC,EAASqC,mBAAmBC,MAAM,KACtDC,EAAWvC,EAASwC,oBAAsB;AA0H9C,GANAL,EAAIM,4BArFJ,SAA+BC,EAAUC,GACvC,IAAIC,EAAeC,IAAgBD,aAC/BE,EAAkBC,EACpBC,EAAIN,EAAU,qBAEZO,EAAaD,EAAIN,EAAU,mBAC3BQ,EAAMP,EAAKO,IACXP,EAAKO,IACLC,EAAO,MAAMC,EAASC,QAAQX,MAAaM,EAAIN,EAAU,SACzDY,GAAqB,IAAdX,EAAKY,KAAiB,GAAKL,EAClCM,GACY,IAAdb,EAAKY,MAAgC,UAAdZ,EAAKY,KAAmB,OAAS,IACtDE,EAAed,EAAKc,aAAe,IAAMd,EAAKc,aAAe,GAC7DC,EAAO,GACPC,EAAY,KACZC,EAAc,GACdC,EAAiBnB,EACjB,qBAAqBM,EAAIN,EAAU,SACnC,GAGAoB,EAlDN,SAAqBC,GACnB,IAAKA,EACH;AAGF,IAAIC,EAAoB5B,EAAkB6B,KAAMC,GAC9CA,EAAIC,QAAQ,MAAO,EACfJ,EAAaI,QAAQD,EAAIE,OAAO,EAAGF,EAAIC,QAAQ,QAAS,EACxD;AAGN,GAAIH,EAAmB,CACrB,IAAIF,EAAWE,EAAkB1B,MAAM;AAEvC,GAAoB,YAAhBwB,EAAS,GACX,OAAOA;AACF,GAAIA,EAAS,KAAOC,EACzB,OAAOD,CAEX,CACF,CA8BiBO,CAAY3B,EAAS4B;AAE/B3B,EAAK4B,aACRZ,EAAYP,EAASoB,SAASxB,EAAIN,EAAU;AAG9C,IAAI+B,EAAa,mBAAkBX,EAAW,aAAe;AAiB7D,GAhBIb,IACFwB,GAAc,eAGZd,IACFc,GAAc,gBACdZ,GAAkB,6BAA6BF,EAAUtD,OAG3DqD,GAAQ,qBACJG,2DAEOY,kBACP3B,EAAkB,UAAYA,EAAkB,KAAO,gBAGvDgB,EAAU,CAGZJ,GAAQ,SAFQI,EAAS,GAAK,iBAAiBA,EAAS,MAAQ,mCACjC,KAAhBA,EAAS,GAAYpC,EAASoC,EAAS,IAAM,WAE9D,MACEJ,GAAQ,2BAA2BhB,EAASrC;AAI9C,IAAIqE,EAAe3B,EAAiBC,EAAIN,EAAU;AA5DpD,IAAyBiC;AA8DnB/B,EAAagC,+BACfhB,EAAciB,EAAMH,GAAgB,YAAc,aAGhDzB,IACFS,GAAQhC,EAASa,IAEnBmB,GAAQ,sCAAsCE,KAAec,WAC7DhB,GAAQ,UAEJf,EAAKmC,aACPpB,IAzEqBiB,EAyEGhC,EAAKmC,WAxExB,yCAAyCC,EAC9C,2BACA,CAAEJ,sBACUA,aAwEVrB,IACFA,EAAO,UAAUA;AAGnB,IAAI0B,EAAoB;AASxB,OAPIrC,EAAKsC,mBAAqBtC,EAAKuC,kBACjCF,GAAqB,kDACjBD,EAAK,kCAAmC,CACxCJ,MAAOhC,EAAKsC,4CAIX,IAAIzB,oCAA0CC,MAAiBH,KAAQI,MAASF,KAAWwB,GACpG,GAII7C,EAAIgD,2CACNhD,EAAIgD,0CAA0C5C,GAG5CJ,EAAIiD,wCAAyC,CAC/C,MAAMC,EAAOlD,EAAImD,UAAUC,OAAO;AAElCnD,EAAkBoD,QAAStB,IACzB,MAAOI,EAAM3C,EAAME,EAAO4D,GAASvB,EAAI5B,MAAM;AAE7C,GAAIgC,GAAQ3C,EAAM,CAChB,MAAMe,EAAW2C,EAAKK,WAAWzB,KAAM0B,GACvB,YAAVF,EACKE,EAAIrB,KAAKsB,cAAcC,SAASvB,EAAKsB,eAErCD,EAAIrB,KAAKsB,gBAAkBtB,EAAKsB;AAI3C,GAAIlD,EAAU,CACZ,MAAMC,EAAO,CACXmD,WAAYpD,EAASrC,GACrB0F,WAAY,OACZC,YAAarE,EACbsE,YAAapE;AAIXA,GAAO4D,MAAM,wBACf9C,EAAKsD,YAAcvD,EAASb,OAG9BM,EAAIiD,wCAAwCzC,EAC9C,CACF,GAEJ,CAEA,GAAIR,EAAI+D,oBAAqB,CAC3B,MAAMb,EAAOlD,EAAImD,UAAUC,OAAO,gBAC5B1E,EAAO,CAAA;AACb,IAAK,MAAMqD,KAAO9B,EAAmB,CACnC,IAAKkC,EAAM3C,EAAME,EAAO4D,GAASvB,EAAI5B,MAAM;AAC3C,GAAIgC,GAAQ3C,EAAM,CAChB2C,EAAOA,EAAKsB;AACZ,IAAK,MAAMD,KAAON,EAAKK,WAAY,CACjC,MAAMS,EAAUR,EAAIrB,KAAKsB;AACzB,GACY,YAAVH,GAAuBU,EAAQN,SAASvB,GAAQ6B,IAAY7B,EAE5D;AAEF,MAAM3B,EAAO,CACXhB,OACAE;AAEGA,IAASA,GAAO4D,MAAM,wBACzB9C,EAAKd,MAAQ,IAAI8D,EAAI9D,SAEvBhB,EAAK8E,EAAItF,IAAMsC,CACjB,CACF,CACF,CACAR,EAAI+D,oBACF,WACA,IAAIxF,EAA4BG,EAAMC,GAE1C,GAEJ;AC9NG,MAACsF,EAAgB,CACpB,qCAAsCC,EACtC;"}