{"version":3,"file":"main.BLHUcD.js","sources":["theme-85/virtual:theme","theme-85/discourse/lib/setting-util.js","theme-85/discourse/components/custom-new-topic-button.gjs","theme-85/discourse/components/custom-post-reply-button.gjs","theme-85/discourse/components/custom-topic-reply-button.gjs","theme-85/discourse/connectors/before-create-topic-button/custom-new-topic-button-connector.gjs","theme-85/discourse/connectors/topic-footer-main-buttons-before-create/custom-reply-button-connector.gjs","theme-85/discourse/initializers/customize-new-topic-text.js","theme-85/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(85);\n\nexport function themePrefix(key) {\n  return `theme_translations.85.${key}`;\n}\n","const formatFilter = (filter) =>\n  filter?.toLowerCase().trim().replace(/\\s+/g, \"-\");\n\n// TODO(https://github.com/discourse/discourse/pull/36678): The string check can be\n// removed using .discourse-compatibility once the PR is merged.\nexport function getTagName(tag) {\n  return typeof tag === \"string\" ? tag : tag.name;\n}\n\nconst settingFilter = (\n  categoryID,\n  categoryParentID,\n  tagId,\n  parsedSetting,\n  inheritParentCategory\n) => {\n  let filteredSetting;\n\n  // precedence: tag > category > parent category\n  if (tagId) {\n    filteredSetting = parsedSetting.find(\n      (entry) => entry && formatFilter(entry.filter) === tagId\n    );\n  }\n\n  if (!filteredSetting && categoryID) {\n    filteredSetting = parsedSetting.find(\n      (entry) => entry && parseInt(entry.filter, 10) === categoryID\n    );\n  }\n\n  if (inheritParentCategory) {\n    if (!filteredSetting && categoryParentID) {\n      filteredSetting = parsedSetting.find(\n        (entry) => entry && parseInt(entry.filter, 10) === categoryParentID\n      );\n    }\n  }\n\n  return filteredSetting;\n};\n\nexport function getFilteredSetting(args, settingsText) {\n  const parsedSetting = JSON.parse(settingsText);\n  const category = args.topic?.category || args.category;\n  const categoryID = category?.id;\n  const categoryParentID = category?.parentCategory?.id;\n  let filteredSetting;\n\n  let tags = [];\n\n  // If args.tag is present (string or object)\n  if (args.tag) {\n    tags.push(formatFilter(getTagName(args.tag)));\n  }\n\n  // If args.tags is a string (composer with one tag)\n  if (typeof args.tags === \"string\") {\n    tags.push(formatFilter(args.tags));\n  }\n\n  // If args.tags is an array (composer with multiple tags)\n  else if (Array.isArray(args.tags)) {\n    tags = tags.concat(args.tags.map((tag) => formatFilter(getTagName(tag))));\n  }\n\n  // If args.topic.tags is present\n  if (Array.isArray(args.topic?.tags)) {\n    tags = tags.concat(\n      args.topic.tags.map((tag) => formatFilter(getTagName(tag)))\n    );\n  }\n\n  for (let tag of tags) {\n    filteredSetting = settingFilter(\n      categoryID,\n      categoryParentID,\n      tag,\n      parsedSetting\n    );\n\n    if (filteredSetting) {\n      break;\n    }\n  }\n\n  // Use category settings if no tag setting is found\n  if (!filteredSetting) {\n    filteredSetting = settingFilter(\n      categoryID,\n      categoryParentID,\n      null,\n      parsedSetting\n    );\n  }\n\n  return filteredSetting;\n}\n","// This component creates a new duplicate \"New Topic\" button\n// which avoids modifying the existing button/translations in core\nimport Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\nimport DTooltip from \"discourse/float-kit/components/d-tooltip\";\nimport Composer from \"discourse/models/composer\";\nimport { and, or } from \"discourse/truth-helpers\";\nimport { i18n } from \"discourse-i18n\";\nimport { getFilteredSetting, getTagName } from \"../lib/setting-util\";\n\nexport default class CustomNewTopicButton extends Component {\n  @service currentUser;\n  @service composer;\n\n  get filteredSetting() {\n    const setting = getFilteredSetting(\n      this.args,\n      settings.custom_new_topic_text\n    );\n\n    if (!setting?.button_text) {\n      return;\n    }\n\n    return setting;\n  }\n\n  get customCreateTopicLabel() {\n    return this.filteredSetting?.button_text;\n  }\n\n  get customCreateTopicIcon() {\n    return this.filteredSetting?.icon;\n  }\n\n  @action\n  customCreateTopic() {\n    this.composer.open({\n      action: Composer.CREATE_TOPIC,\n      draftKey: Composer.NEW_TOPIC_KEY,\n      categoryId: this.args.category?.id,\n      tags: Array.isArray(this.args.tag)\n        ? this.args.tag.map((tag) => getTagName(tag))\n        : this.args.tag\n          ? [getTagName(this.args.tag)]\n          : [],\n    });\n  }\n\n  <template>\n    {{#if (and this.filteredSetting (or @category @tag))}}\n      {{#if @canCreateTopic}}\n        <DButton\n          @action={{this.customCreateTopic}}\n          @icon={{this.customCreateTopicIcon}}\n          @translatedLabel={{this.customCreateTopicLabel}}\n          @disabled={{@createTopicDisabled}}\n          id=\"custom-create-topic\"\n          class=\"btn-default btn-icon-text\"\n        >\n          {{#if @createTopicDisabled}}\n            <DTooltip>{{i18n \"topic.create_disabled_category\"}}</DTooltip>\n          {{/if}}\n        </DButton>\n      {{/if}}\n    {{/if}}\n  </template>\n}\n","import DButton from \"discourse/components/d-button\";\nimport PostMenuReplyButton from \"discourse/components/post/menu/buttons/reply\";\nimport concatClass from \"discourse/helpers/concat-class\";\nimport { i18n } from \"discourse-i18n\";\nimport { getFilteredSetting } from \"../lib/setting-util\";\n\nexport default class CustomPostReplyButton extends PostMenuReplyButton {\n  get filteredSetting() {\n    return getFilteredSetting(this.args.post, settings.custom_new_topic_text);\n  }\n\n  get customReplyLabel() {\n    return this.filteredSetting?.reply_button_text;\n  }\n\n  get label() {\n    return this.customReplyLabel || i18n(\"topic.reply.title\");\n  }\n\n  <template>\n    <DButton\n      class={{concatClass\n        \"post-action-menu__reply\"\n        \"reply\"\n        (if this.showLabel \"create fade-out\")\n        (if this.customReplyLabel \"custom-reply-button\")\n      }}\n      ...attributes\n      @action={{@buttonActions.replyToPost}}\n      @icon=\"reply\"\n      @translatedLabel={{if this.showLabel this.label}}\n      @title=\"post.controls.reply\"\n      @translatedAriaLabel={{i18n\n        \"post.sr_reply_to\"\n        post_number=@post.post_number\n        username=@post.username\n      }}\n    />\n  </template>\n}\n","// This component creates a new duplicate \"Reply\" button\n// which avoids modifying the existing button/translations in core\nimport Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\nimport bodyClass from \"discourse/helpers/body-class\";\nimport Composer from \"discourse/models/composer\";\nimport { and } from \"discourse/truth-helpers\";\nimport { i18n } from \"discourse-i18n\";\nimport { getFilteredSetting } from \"../lib/setting-util\";\n\nexport default class CustomTopicReplyButton extends Component {\n  @service composer;\n\n  get filteredSetting() {\n    return getFilteredSetting(this.args, settings.custom_new_topic_text);\n  }\n\n  get customReplyLabel() {\n    return this.filteredSetting?.reply_button_text || i18n(\"topic.reply.title\");\n  }\n\n  @action\n  customReply() {\n    this.composer.open({\n      action: Composer.REPLY,\n      draftKey: this.args.topic.get(\"draft_key\"),\n      draftSequence: this.args.topic.get(\"draft_sequence\"),\n      topic: this.args.topic,\n    });\n  }\n\n  <template>\n    {{#if\n      (and\n        @topic.details.can_create_post this.filteredSetting.reply_button_text\n      )\n    }}\n      {{bodyClass \"custom-reply-button\"}}\n      <DButton\n        @icon=\"reply\"\n        @translatedLabel={{this.customReplyLabel}}\n        @action={{this.customReply}}\n        @title=\"topic.reply.help\"\n        class=\"btn-primary create custom-create\"\n      />\n    {{/if}}\n  </template>\n}\n","/* eslint-disable ember/no-classic-components */\nimport Component from \"@ember/component\";\nimport { tagName } from \"@ember-decorators/component\";\nimport CustomNewTopicButton from \"../../components/custom-new-topic-button\";\n\n@tagName(\"\")\nexport default class CustomNewTopicButtonConnector extends Component {\n  <template>\n    <CustomNewTopicButton\n      @category={{@outletArgs.category}}\n      @tag={{@outletArgs.tag}}\n      @createTopicLabel={{@outletArgs.createTopicLabel}}\n      @createTopicDisabled={{@outletArgs.createTopicDisabled}}\n      @canCreateTopic={{@outletArgs.canCreateTopic}}\n    />\n  </template>\n}\n","/* eslint-disable ember/no-classic-components, ember/require-tagless-components */\nimport Component from \"@ember/component\";\nimport { classNames, tagName } from \"@ember-decorators/component\";\nimport CustomTopicReplyButton from \"../../components/custom-topic-reply-button\";\n\n@tagName(\"span\")\n@classNames(\n  \"topic-footer-main-buttons-before-create-outlet\",\n  \"custom-reply-button-connector\"\n)\nexport default class CustomReplyButtonConnector extends Component {\n  <template><CustomTopicReplyButton @topic={{@outletArgs.topic}} /></template>\n}\n","import { withPluginApi } from \"discourse/lib/plugin-api\";\nimport I18n from \"discourse-i18n\";\nimport CustomPostReplyButton from \"../components/custom-post-reply-button\";\nimport { getFilteredSetting } from \"../lib/setting-util\";\n\nexport default {\n  name: \"customize-new-topic-text\",\n  before: \"inject-objects\",\n\n  initialize() {\n    withPluginApi((api) => {\n      api.customizeComposerText({\n        actionTitle(model) {\n          if (!model.topic) {\n            const filteredSetting = getFilteredSetting(\n              model,\n              settings.custom_new_topic_text\n            );\n            return filteredSetting?.composer_action_text;\n          }\n        },\n\n        saveLabel(model) {\n          const currentLocale = I18n.currentLocale();\n          const topicKey = I18n.translations[currentLocale].js.topic;\n\n          const filteredSetting = getFilteredSetting(\n            model,\n            settings.custom_new_topic_text\n          );\n\n          if (!model.topic) {\n            // New topic\n            if (filteredSetting?.composer_button_text) {\n              topicKey.custom_composer_save_label =\n                filteredSetting.composer_button_text;\n              return \"topic.custom_composer_save_label\";\n            }\n          } else {\n            // Reply\n            if (filteredSetting?.reply_button_text) {\n              topicKey.custom_reply_label = filteredSetting.reply_button_text;\n              return \"topic.custom_reply_label\";\n            }\n          }\n        },\n      });\n\n      api.registerValueTransformer(\n        \"post-menu-buttons\",\n        ({ value: dag, context: { buttonKeys } }) => {\n          dag.replace(buttonKeys.REPLY, CustomPostReplyButton);\n        }\n      );\n    });\n  },\n};\n","import * as Mod1 from \"./discourse/components/custom-new-topic-button\";\nimport * as Mod2 from \"./discourse/components/custom-post-reply-button\";\nimport * as Mod3 from \"./discourse/components/custom-topic-reply-button\";\nimport * as Mod4 from \"./discourse/connectors/before-create-topic-button/custom-new-topic-button-connector.gjs\";\nimport * as Mod5 from \"./discourse/connectors/topic-footer-main-buttons-before-create/custom-reply-button-connector.gjs\";\nimport * as Mod6 from \"./discourse/initializers/customize-new-topic-text\";\nimport * as Mod7 from \"./discourse/lib/setting-util\";\nconst compatModules = {\n  \"discourse/components/custom-new-topic-button\": Mod1,\n  \"discourse/components/custom-post-reply-button\": Mod2,\n  \"discourse/components/custom-topic-reply-button\": Mod3,\n  \"discourse/connectors/before-create-topic-button/custom-new-topic-button-connector\": Mod4,\n  \"discourse/connectors/topic-footer-main-buttons-before-create/custom-reply-button-connector\": Mod5,\n  \"discourse/initializers/customize-new-topic-text\": Mod6,\n  \"discourse/lib/setting-util\": Mod7,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","formatFilter","filter","toLowerCase","trim","replace","getTagName","tag","name","settingFilter","categoryID","categoryParentID","tagId","parsedSetting","inheritParentCategory","filteredSetting","find","entry","parseInt","getFilteredSetting","args","settingsText","JSON","parse","category","topic","id","tags","push","Array","isArray","concat","map","CustomNewTopicButton","Component","dt7948","g","this","prototype","service","currentUser","i","composer","setting","custom_new_topic_text","button_text","customCreateTopicLabel","customCreateTopicIcon","icon","customCreateTopic","open","action","Composer","CREATE_TOPIC","draftKey","NEW_TOPIC_KEY","categoryId","n","setComponentTemplate","createTemplateFactory","block","moduleName","scope","and","or","DButton","DTooltip","i18n","isStrictMode","CustomPostReplyButton","PostMenuReplyButton","post","customReplyLabel","reply_button_text","label","concatClass","CustomTopicReplyButton","customReply","REPLY","get","draftSequence","bodyClass","CustomNewTopicButtonConnector","c","tagName","CustomReplyButtonConnector","classNames","customizeNewTopicText","before","initialize","withPluginApi","api","customizeComposerText","actionTitle","model","composer_action_text","saveLabel","currentLocale","I18n","topicKey","translations","js","custom_reply_label","composer_button_text","custom_composer_save_label","registerValueTransformer","value","dag","context","buttonKeys","compatModules","Mod1","Mod2","Mod3","Mod4","Mod5","Mod7"],"mappings":"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"}