{"version":3,"file":"main.CjaMqp.js","sources":["theme-13/virtual:theme","theme-13/discourse/components/versatile-banner-column.gjs","theme-13/discourse/components/versatile-banner.gjs","theme-13/discourse/initializers/discourse-versatile-banner.js","theme-13/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(13);\n\nexport function themePrefix(key) {\n  return `theme_translations.13.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { htmlSafe } from \"@ember/template\";\nimport icon from \"discourse/helpers/d-icon\";\nimport { or } from \"discourse/truth-helpers\";\n\nexport default class VersatileBannerColumn extends Component {\n  get isHttpLink() {\n    return this.args.icon.startsWith(\"http\");\n  }\n\n  <template>\n    {{#if (or @icon @columnContent)}}\n      <div class=\"{{@columnClass}} single-box\">\n        {{#if @icon}}\n          <div class=\"icon\">\n            {{#if this.isHttpLink}}\n              <img class=\"responsive-img\" src={{@icon}} alt=\"Icon\" />\n            {{else}}\n              {{icon @icon}}\n            {{/if}}\n          </div>\n        {{/if}}\n        {{#if @columnContent}}\n          <div>\n            {{htmlSafe @columnContent}}\n          </div>\n        {{/if}}\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport { htmlSafe } from \"@ember/template\";\nimport DButton from \"discourse/components/d-button\";\nimport cookie, { removeCookie } from \"discourse/lib/cookie\";\nimport { convertIconClass } from \"discourse/lib/icon-library\";\nimport { defaultHomepage } from \"discourse/lib/utilities\";\nimport { and } from \"discourse/truth-helpers\";\nimport { i18n } from \"discourse-i18n\";\nimport VersatileBannerColumn from \"./versatile-banner-column\";\n\nfunction readBannerCookie(name) {\n  const value = cookie(name);\n\n  if (!value) {\n    return null;\n  }\n\n  if (settings.cookie_lifespan === \"none\") {\n    removeCookie(name, { path: \"/\" });\n    return null;\n  }\n\n  let state;\n  try {\n    state = JSON.parse(value);\n  } catch {\n    removeCookie(name, { path: \"/\" });\n    return null;\n  }\n\n  if (state?.name !== settings.cookie_name) {\n    removeCookie(name, { path: \"/\" });\n    return null;\n  }\n\n  return state;\n}\n\nfunction readBannerCollapsed() {\n  const state = readBannerCookie(\"banner_collapsed\");\n\n  if (!state) {\n    return null;\n  }\n\n  return state.collapsed === true || state.collapsed === \"true\";\n}\n\nexport default class VersatileBanner extends Component {\n  @service router;\n  @service currentUser;\n\n  @tracked bannerClosed = readBannerCookie(\"banner_closed\")?.closed === \"true\";\n  @tracked\n  bannerCollapsed =\n    readBannerCollapsed() ?? settings.default_collapsed_state === \"collapsed\";\n\n  columnData = [\n    {\n      content: settings.first_column_content,\n      class: \"first_column\",\n      icon: convertIconClass(settings.first_column_icon),\n    },\n    {\n      content: settings.second_column_content,\n      class: \"second_column\",\n      icon: convertIconClass(settings.second_column_icon),\n    },\n    {\n      content: settings.third_column_content,\n      class: \"third_column\",\n      icon: convertIconClass(settings.third_column_icon),\n    },\n    {\n      content: settings.fourth_column_content,\n      class: \"fourth_column\",\n      icon: convertIconClass(settings.fourth_column_icon),\n    },\n    {\n      content: settings.fifth_column_content,\n      class: \"fifth_column\",\n      icon: convertIconClass(settings.fifth_column_icon),\n    },\n  ];\n\n  get cookieExpirationDate() {\n    if (settings.cookie_lifespan === \"none\") {\n      return null;\n    }\n\n    return moment().add(1, settings.cookie_lifespan).toDate();\n  }\n\n  get displayForUser() {\n    return (\n      (settings.show_for_members && this.currentUser) ||\n      (settings.show_for_anon && !this.currentUser)\n    );\n  }\n\n  get showOnRoute() {\n    const path = this.router.currentURL;\n\n    if (\n      settings.display_on_homepage &&\n      this.router.currentRouteName === `discovery.${defaultHomepage()}`\n    ) {\n      return true;\n    }\n\n    if (settings.url_must_contain.length) {\n      const allowedPaths = settings.url_must_contain.split(\"|\");\n      return allowedPaths.some((allowedPath) => {\n        if (allowedPath.slice(-1) === \"*\") {\n          return path.indexOf(allowedPath.slice(0, -1)) === 0;\n        }\n        return path === allowedPath;\n      });\n    }\n  }\n\n  get shouldShow() {\n    return this.displayForUser && this.showOnRoute;\n  }\n\n  get toggleLabel() {\n    return this.bannerCollapsed\n      ? i18n(themePrefix(\"toggle.expand_label\"))\n      : i18n(themePrefix(\"toggle.collapse_label\"));\n  }\n\n  get toggleIcon() {\n    return this.bannerCollapsed ? \"chevron-down\" : \"chevron-up\";\n  }\n\n  @action\n  closeBanner() {\n    this.bannerClosed = true;\n\n    if (this.cookieExpirationDate) {\n      const bannerState = { name: settings.cookie_name, closed: \"true\" };\n      cookie(\"banner_closed\", JSON.stringify(bannerState), {\n        expires: this.cookieExpirationDate,\n        path: \"/\",\n      });\n    }\n  }\n\n  @action\n  toggleBanner() {\n    this.bannerCollapsed = !this.bannerCollapsed;\n\n    if (this.cookieExpirationDate) {\n      const bannerState = {\n        name: settings.cookie_name,\n        collapsed: this.bannerCollapsed,\n      };\n\n      cookie(\"banner_collapsed\", JSON.stringify(bannerState), {\n        expires: this.cookieExpirationDate,\n        path: \"/\",\n      });\n    }\n  }\n\n  <template>\n    {{#if this.shouldShow}}\n      {{#unless this.bannerClosed}}\n        <div class=\"banner-box\">\n          <div class=\"container\">\n            <div class=\"button-container\">\n              {{#if settings.dismissible}}\n                <DButton\n                  @action={{this.closeBanner}}\n                  @translatedLabel={{i18n (themePrefix \"close.label\")}}\n                  @translatedTitle={{i18n (themePrefix \"close.title\")}}\n                  @icon=\"xmark\"\n                  class=\"close\"\n                />\n              {{/if}}\n              {{#if settings.collapsible}}\n                <DButton\n                  @action={{this.toggleBanner}}\n                  @translatedLabel={{this.toggleLabel}}\n                  @translatedTitle={{i18n (themePrefix \"toggle.title\")}}\n                  @icon={{this.toggleIcon}}\n                  class=\"toggle\"\n                />\n              {{/if}}\n            </div>\n            <div class=\"section-header\">\n              {{htmlSafe settings.main_heading_content}}\n            </div>\n            <div\n              id=\"banner-content_wrap\"\n              class={{if\n                (and settings.collapsible this.bannerCollapsed)\n                \"--banner-collapsed\"\n              }}\n            >\n              <div class=\"row\">\n                {{#each this.columnData as |data|}}\n                  <VersatileBannerColumn\n                    @columnContent={{data.content}}\n                    @icon={{data.icon}}\n                    @columnClass={{data.class}}\n                  />\n                {{/each}}\n              </div>\n            </div>\n          </div>\n        </div>\n      {{/unless}}\n    {{/if}}\n  </template>\n}\n","import { apiInitializer } from \"discourse/lib/api\";\nimport VersatileBanner from \"../components/versatile-banner\";\n\nexport default apiInitializer((api) => {\n  api.renderInOutlet(settings.plugin_outlet, VersatileBanner);\n});\n","import * as Mod1 from \"./discourse/components/versatile-banner-column\";\nimport * as Mod2 from \"./discourse/components/versatile-banner\";\nimport * as Mod3 from \"./discourse/initializers/discourse-versatile-banner\";\nconst compatModules = {\n  \"discourse/components/versatile-banner-column\": Mod1,\n  \"discourse/components/versatile-banner\": Mod2,\n  \"discourse/initializers/discourse-versatile-banner\": Mod3,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","themePrefix","key","VersatileBannerColumn","Component","isHttpLink","this","args","icon","startsWith","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","or","htmlSafe","isStrictMode","readBannerCookie","name","value","cookie","cookie_lifespan","removeCookie","path","state","JSON","parse","cookie_name","VersatileBanner","dt7948","g","prototype","service","router","i","currentUser","tracked","closed","bannerClosed","collapsed","readBannerCollapsed","default_collapsed_state","bannerCollapsed","columnData","content","first_column_content","class","convertIconClass","first_column_icon","second_column_content","second_column_icon","third_column_content","third_column_icon","fourth_column_content","fourth_column_icon","fifth_column_content","fifth_column_icon","cookieExpirationDate","moment","add","toDate","displayForUser","show_for_members","show_for_anon","showOnRoute","currentURL","display_on_homepage","currentRouteName","defaultHomepage","url_must_contain","length","split","some","allowedPath","slice","indexOf","shouldShow","toggleLabel","i18n","toggleIcon","closeBanner","bannerState","stringify","expires","n","action","toggleBanner","DButton","and","discourseVersatileBanner","apiInitializer","api","renderInOutlet","plugin_outlet","compatModules","Mod1","Mod2"],"mappings":"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"}