{"version":3,"file":"discourse-translator.js","names":["define","_exports","_component","_object","_service","_dButton","_concatClass","_ajaxError","_component2","_templateFactory","Object","defineProperty","value","default","ToggleTranslationButton","shouldRender","args","post","can_translate","dt7948","g","this","prototype","service","translator","i","isTranslating","isTranslated","showButton","title","hideTranslation","clearPostTranslation","n","action","toggleTranslation","translate","translatePost","error","popupAjaxError","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","isStrictMode","_discourseI18n","_dTooltip","TranslatedPostIndicator","tooltip","i18n","language","data","detectedLanguage","_template","_conditionalLoadingSpinner","TranslatedPost","siteSettings","loading","outletArgs","translatedText","translatedTitle","htmlSafe","_pluginApi","_toggleTranslationButton","_translatedPost","initializeTranslation","api","container","lookup","translator_enabled","registerValueTransformer","dag","context","firstButtonKey","add","before","addTrackedPostProperties","renderBeforeWrapperOutlet","customizePostMenu","name","initialize","withPluginApi","_ajax","TranslatorService","response","ajax","type","post_id","detectedLang","detected_lang","translation","title_translation"],"sources":["discourse/plugins/discourse-translator/discourse/components/post-menu/toggle-translation-button.js","discourse/plugins/discourse-translator/discourse/components/translated-post-indicator.js","discourse/plugins/discourse-translator/discourse/components/translated-post.js","discourse/plugins/discourse-translator/discourse/initializers/extend-for-translate-button.js","discourse/plugins/discourse-translator/discourse/services/translator.js"],"sourcesContent":["define(\"discourse/plugins/discourse-translator/discourse/components/post-menu/toggle-translation-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax-error\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _concatClass, _ajaxError, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ToggleTranslationButton extends _component.default {\n    static shouldRender(args) {\n      return args.post.can_translate;\n    }\n    static {\n      dt7948.g(this.prototype, \"translator\", [_service.service]);\n    }\n    #translator = (dt7948.i(this, \"translator\"), void 0);\n    get isTranslating() {\n      return this.args.post.isTranslating;\n    }\n    get isTranslated() {\n      return this.args.post.isTranslated;\n    }\n    get showButton() {\n      return this.args.post.can_translate;\n    }\n    get title() {\n      if (this.isTranslating) {\n        return \"translator.translating\";\n      }\n      return this.isTranslated ? \"translator.hide_translation\" : \"translator.view_translation\";\n    }\n    hideTranslation() {\n      this.args.post.isTranslated = false;\n      this.args.post.isTranslating = false;\n      this.translator.clearPostTranslation(this.args.post);\n    }\n    static {\n      dt7948.n(this.prototype, \"hideTranslation\", [_object.action]);\n    }\n    toggleTranslation() {\n      return this.args.post.isTranslated ? this.hideTranslation() : this.translate();\n    }\n    static {\n      dt7948.n(this.prototype, \"toggleTranslation\", [_object.action]);\n    }\n    async translate() {\n      const post = this.args.post;\n      post.isTranslating = true;\n      try {\n        await this.translator.translatePost(post);\n        post.isTranslated = true;\n      } catch (error) {\n        this.translator.clearPostTranslation(this.args.post);\n        post.isTranslated = false;\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        post.isTranslating = false;\n      }\n    }\n    static {\n      dt7948.n(this.prototype, \"translate\", [_object.action]);\n    }\n    static {\n      (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n      /*\n        \n          {{#if this.showButton}}\n            <DButton\n              class={{concatClass\n                \"post-action-menu__translate\"\n                (if this.isTranslated \"translated\")\n              }}\n              ...attributes\n              @action={{this.toggleTranslation}}\n              @disabled={{this.isTranslating}}\n              @icon=\"globe\"\n              @label={{if @showLabel this.title}}\n              @title={{this.title}}\n            />\n          {{/if}}\n        \n      */\n      {\n        \"id\": \"mtePXXjo\",\n        \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[16,0,[28,[32,1],[\\\"post-action-menu__translate\\\",[52,[30,0,[\\\"isTranslated\\\"]],\\\"translated\\\"]],null]],[17,1]],[[\\\"@action\\\",\\\"@disabled\\\",\\\"@icon\\\",\\\"@label\\\",\\\"@title\\\"],[[30,0,[\\\"toggleTranslation\\\"]],[30,0,[\\\"isTranslating\\\"]],\\\"globe\\\",[52,[30,2],[30,0,[\\\"title\\\"]]],[30,0,[\\\"title\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"&attrs\\\",\\\"@showLabel\\\"],[\\\"if\\\"]]\",\n        \"moduleName\": \"/var/www/discourse/frontend/discourse/discourse/plugins/discourse-translator/discourse/components/post-menu/toggle-translation-button.js\",\n        \"scope\": () => [_dButton.default, _concatClass.default],\n        \"isStrictMode\": true\n      }), this);\n    }\n  }\n  _exports.default = ToggleTranslationButton;\n});","define(\"discourse/plugins/discourse-translator/discourse/components/translated-post-indicator\", [\"exports\", \"@glimmer/component\", \"discourse-i18n\", \"discourse/float-kit/components/d-tooltip\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _discourseI18n, _dTooltip, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class TranslatedPostIndicator extends _component.default {\n    get tooltip() {\n      return (0, _discourseI18n.i18n)(\"translator.originally_written_in\", {\n        language: this.args.data.detectedLanguage\n      });\n    }\n    static {\n      (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n      /*\n        \n          <DTooltip\n            @identifier=\"discourse-translator_translated-post-indicator\"\n            @icon=\"language\"\n            @content={{this.tooltip}}\n          />\n        \n      */\n      {\n        \"id\": \"fFqDRPIQ\",\n        \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@identifier\\\",\\\"@icon\\\",\\\"@content\\\"],[\\\"discourse-translator_translated-post-indicator\\\",\\\"language\\\",[30,0,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[],[]]\",\n        \"moduleName\": \"/var/www/discourse/frontend/discourse/discourse/plugins/discourse-translator/discourse/components/translated-post-indicator.js\",\n        \"scope\": () => [_dTooltip.default],\n        \"isStrictMode\": true\n      }), this);\n    }\n  }\n  _exports.default = TranslatedPostIndicator;\n});","define(\"discourse/plugins/discourse-translator/discourse/components/translated-post\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"@ember/template\", \"discourse/components/conditional-loading-spinner\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _template, _conditionalLoadingSpinner, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class TranslatedPost extends _component.default {\n    static shouldRender(args) {\n      return args.post.isTranslated || args.post.isTranslating;\n    }\n    static {\n      dt7948.g(this.prototype, \"siteSettings\", [_service.service]);\n    }\n    #siteSettings = (dt7948.i(this, \"siteSettings\"), void 0);\n    get loading() {\n      return this.post.isTranslating;\n    }\n    get isTranslated() {\n      return this.post.isTranslated;\n    }\n    get post() {\n      return this.args.outletArgs.post;\n    }\n    get translatedText() {\n      return this.post.translatedText;\n    }\n    get translatedTitle() {\n      return this.post.translatedTitle;\n    }\n    static {\n      (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n      /*\n        \n          <div class=\"post-translation\">\n            <ConditionalLoadingSpinner\n              class=\"post-translation\"\n              @condition={{this.loading}}\n              @size=\"small\"\n            >\n              <hr />\n              {{#if this.translatedTitle}}\n                <div class=\"topic-attribution\">\n                  {{this.translatedTitle}}\n                </div>\n              {{/if}}\n              <div class=\"post-attribution\">\n                {{i18n\n                  \"translator.translated_from\"\n                  language=this.post.detectedLang\n                  translator=this.siteSettings.translator_provider\n                }}\n              </div>\n              <div class=\"cooked\">\n                {{htmlSafe this.post.translatedText}}\n              </div>\n            </ConditionalLoadingSpinner>\n          </div>\n        \n      */\n      {\n        \"id\": \"shv73Onq\",\n        \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"post-translation\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"post-translation\\\"]],[[\\\"@condition\\\",\\\"@size\\\"],[[30,0,[\\\"loading\\\"]],\\\"small\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"translatedTitle\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"topic-attribution\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"translatedTitle\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,0],[14,0,\\\"post-attribution\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"translator.translated_from\\\"],[[\\\"language\\\",\\\"translator\\\"],[[30,0,[\\\"post\\\",\\\"detectedLang\\\"]],[30,0,[\\\"siteSettings\\\",\\\"translator_provider\\\"]]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"cooked\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,2],[[30,0,[\\\"post\\\",\\\"translatedText\\\"]]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],[\\\"if\\\"]]\",\n        \"moduleName\": \"/var/www/discourse/frontend/discourse/discourse/plugins/discourse-translator/discourse/components/translated-post.js\",\n        \"scope\": () => [_conditionalLoadingSpinner.default, _discourseI18n.i18n, _template.htmlSafe],\n        \"isStrictMode\": true\n      }), this);\n    }\n  }\n  _exports.default = TranslatedPost;\n});","define(\"discourse/plugins/discourse-translator/discourse/initializers/extend-for-translate-button\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-translator/discourse/components/post-menu/toggle-translation-button\", \"discourse/plugins/discourse-translator/discourse/components/translated-post\"], function (_exports, _pluginApi, _toggleTranslationButton, _translatedPost) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function initializeTranslation(api) {\n    const siteSettings = api.container.lookup(\"service:site-settings\");\n    if (!siteSettings.translator_enabled) {\n      return;\n    }\n    customizePostMenu(api);\n  }\n  function customizePostMenu(api) {\n    api.registerValueTransformer(\"post-menu-buttons\", ({\n      value: dag,\n      context: {\n        firstButtonKey\n      }\n    }) => {\n      dag.add(\"translate\", _toggleTranslationButton.default, {\n        before: firstButtonKey\n      });\n    });\n\n    // the plugin outlet is not updated when the post instance is modified unless we register the new properties as\n    // tracked\n    api.addTrackedPostProperties(\"detectedLang\", \"isTranslating\", \"isTranslated\", \"translatedText\", \"translatedTitle\");\n    api.renderBeforeWrapperOutlet(\"post-menu\", _translatedPost.default);\n  }\n  var _default = _exports.default = {\n    name: \"extend-for-translate-button\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(api => initializeTranslation(api));\n    }\n  };\n});","define(\"discourse/plugins/discourse-translator/discourse/services/translator\", [\"exports\", \"@ember/service\", \"discourse/lib/ajax\"], function (_exports, _service, _ajax) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class TranslatorService extends _service.default {\n    async translatePost(post) {\n      const response = await (0, _ajax.ajax)(\"/translator/translate\", {\n        type: \"POST\",\n        data: {\n          post_id: post.id\n        }\n      });\n      post.detectedLang = response.detected_lang;\n      post.translatedText = response.translation;\n      post.translatedTitle = response.title_translation;\n    }\n    clearPostTranslation(post) {\n      post.detectedLang = null;\n      post.translatedText = null;\n      post.translatedTitle = null;\n    }\n  }\n  _exports.default = TranslatorService;\n});"],"mappings":"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","ignoreList":[]}