{"version":3,"file":"main.BlRHLw.js","sources":["theme-186/virtual:theme","theme-186/discourse/initializers/discourse-quick-whisper.js","theme-186/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(186);\n\nexport function themePrefix(key) {\n  return `theme_translations.186.${key}`;\n}\n","import { debounce } from \"@ember/runloop\";\nimport { popupAjaxError } from \"discourse/lib/ajax-error\";\nimport { getAbsoluteURL } from \"discourse/lib/get-url\";\nimport { withPluginApi } from \"discourse/lib/plugin-api\";\nimport { cook } from \"discourse/lib/text\";\n\nexport default {\n  name: \"discourse-quick-whisper\",\n\n  initialize() {\n    withPluginApi((api) => {\n      const currentUser = api.getCurrentUser();\n\n      const canUseFeature = currentUser?.whisperer || currentUser?.can_assign;\n\n      if (!canUseFeature) {\n        return;\n      }\n\n      function fetchCurrentTopic() {\n        const topicController = api.container.lookup(\"controller:topic\");\n        if (topicController) {\n          const topic = topicController.get(\"model\");\n          if (topic) {\n            return topic;\n          }\n        }\n      }\n\n      // Prior to any other work, if at the bottom of the topic\n      // attempt to destroy any assign/unassign message related to currentUser\n      // and remove previous quick whisper done by currentUser in the last 20 posts\n      function cleanTopic(topic) {\n        return cook(settings.message).then((cooked) => {\n          if (topic.postStream && !topic.postStream.lastPostNotLoaded) {\n            const posts = topic.postStream.posts.slice().reverse().slice(0, 20);\n\n            posts.forEach((post) => {\n              if (\n                (post.action_code === \"assigned\" ||\n                  post.action_code === \"unassigned\") &&\n                post.action_code_who === currentUser.username\n              ) {\n                post.destroy(currentUser);\n              } else if (\n                cooked.string ===\n                  post.cooked.replace(\n                    getAbsoluteURL(\"\").replace(/http(s)?:/g, \"\"),\n                    \"\"\n                  ) &&\n                post.user_id === currentUser.id\n              ) {\n                post.destroy(currentUser);\n              }\n            });\n          }\n        });\n      }\n\n      function debouncedTrackTopic() {\n        debounce(api, trackTopic, 5000, true);\n      }\n\n      function trackTopic() {\n        const topic = fetchCurrentTopic();\n        if (!topic) {\n          return;\n        }\n\n        return cleanTopic(topic, currentUser).then(() => {\n          if (currentUser.can_assign) {\n            const taskActions = api.container.lookup(\"service:task-actions\");\n            const assignedUser = topic.get(\"assigned_to_user.username\");\n\n            if (assignedUser) {\n              if (currentUser && assignedUser === currentUser.username) {\n                return taskActions.unassign(topic.id);\n              } else {\n                return createWhisper(api.container, topic.id);\n              }\n            } else if (taskActions) {\n              return taskActions\n                .reassignUserToTopic(currentUser, topic)\n                .catch(popupAjaxError);\n            }\n          } else {\n            return createWhisper(api.container, topic.id);\n          }\n        });\n      }\n\n      function createWhisper(container, topicId) {\n        const siteSettings = container.lookup(\"service:site-settings\");\n        if (!siteSettings.enable_whispers) {\n          return;\n        }\n\n        return container\n          .lookup(\"service:store\")\n          .createRecord(\"post\", {\n            raw: settings.message,\n            topic_id: topicId,\n            whisper: true,\n            archetype: \"regular\",\n            nested_post: true,\n          })\n          .save();\n      }\n\n      api.addKeyboardShortcut(\"ctrl+shift+l\", debouncedTrackTopic, {\n        global: true,\n      });\n\n      function buttonLabel() {\n        const topic = fetchCurrentTopic(),\n          assignedUser = topic.get(\"assigned_to_user.username\"),\n          siteSettings = api.container.lookup(\"service:site-settings\");\n\n        if (assignedUser && assignedUser === currentUser.username) {\n          return \"\";\n        }\n\n        if (assignedUser && assignedUser !== currentUser.username) {\n          return siteSettings.enable_whispers\n            ? themePrefix(\"looking_into_this\")\n            : \"\";\n        }\n\n        return themePrefix(\"self_assign\");\n      }\n\n      api.registerTopicFooterButton({\n        id: \"quick-whisper\",\n        icon: \"bolt\",\n        label() {\n          return buttonLabel();\n        },\n        title() {\n          return buttonLabel();\n        },\n        action() {\n          debouncedTrackTopic();\n        },\n        dropdown: true,\n        classNames: [\"quick-whisper\"],\n        displayed() {\n          return this.site.mobileView && buttonLabel() !== \"\";\n        },\n      });\n    });\n  },\n};\n","import * as Mod1 from \"./discourse/initializers/discourse-quick-whisper\";\nconst compatModules = {\n  \"discourse/initializers/discourse-quick-whisper\": Mod1,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","themePrefix","key","discourseQuickWhisper","name","initialize","withPluginApi","api","currentUser","getCurrentUser","fetchCurrentTopic","topicController","container","lookup","topic","get","debouncedTrackTopic","debounce","trackTopic","cook","message","then","cooked","postStream","lastPostNotLoaded","posts","slice","reverse","forEach","post","action_code","action_code_who","username","string","replace","getAbsoluteURL","user_id","id","destroy","cleanTopic","can_assign","createWhisper","taskActions","assignedUser","unassign","reassignUserToTopic","catch","popupAjaxError","topicId","enable_whispers","createRecord","raw","topic_id","whisper","archetype","nested_post","save","buttonLabel","siteSettings","whisperer","addKeyboardShortcut","global","registerTopicFooterButton","icon","label","title","action","dropdown","classNames","displayed","this","site","mobileView","compatModules"],"mappings":"mfAEaA,EAAWC,EAAkB;AAEnC,SAASC,EAAYC,GAC1B,MAAO,0BAA0BA,GACnC;ACAA,IAAAC,EAAe,CACbC,KAAM,0BAENC,UAAAA;8BACEC,CAAeC,IACb,MAAMC,EAAcD,EAAIE;AAQxB,SAASC,IACP,MAAMC,EAAkBJ,EAAIK,UAAUC,OAAO;AAC7C,GAAIF,EAAiB,CACnB,MAAMG,EAAQH,EAAgBI,IAAI;AAClC,GAAID,EACF,OAAOA,CAEX,CACF,CAgCA,SAASE,IACPC,EAASV,EAAKW,EAAY,KAAM,EAClC,CAEA,SAASA,IACP,MAAMJ,EAAQJ;AACd,GAAKI,EAIL,OArCF,SAAoBA,GAClB,OAAOK,EAAKpB,EAASqB,SAASC,KAAMC,IAC9BR,EAAMS,aAAeT,EAAMS,WAAWC,mBAC1BV,EAAMS,WAAWE,MAAMC,QAAQC,UAAUD,MAAM,EAAG,IAE1DE,QAASC,IAEW,aAArBA,EAAKC,aACiB,eAArBD,EAAKC,aACPD,EAAKE,kBAAoBvB,EAAYwB,SAIrCV,EAAOW,SACLJ,EAAKP,OAAOY,QACVC,EAAe,IAAID,QAAQ,aAAc,IACzC,KAEJL,EAAKO,UAAY5B,EAAY6B,IAE7BR,EAAKS,QAAQ9B,GATbqB,EAAKS,QAAQ9B,MAcvB,CAYS+B,CAAWzB,GAAoBO,KAAK,KACzC,IAAIb,EAAYgC,WAgBd,OAAOC,EAAclC,EAAIK,UAAWE,EAAMuB;AAhBhB,CAC1B,MAAMK,EAAcnC,EAAIK,UAAUC,OAAO,wBACnC8B,EAAe7B,EAAMC,IAAI;AAE/B,GAAI4B,EACF,OAAInC,GAAemC,IAAiBnC,EAAYwB,SACvCU,EAAYE,SAAS9B,EAAMuB,IAE3BI,EAAclC,EAAIK,UAAWE,EAAMuB;AAEvC,GAAIK,EACT,OAAOA,EACJG,oBAAoBrC,EAAaM,GACjCgC,MAAMC,EAEb,GAIJ,CAEA,SAASN,EAAc7B,EAAWoC,GAEhC,GADqBpC,EAAUC,OAAO,yBACpBoC,gBAIlB,OAAOrC,EACJC,OAAO,iBACPqC,aAAa,OAAQ,CACpBC,IAAKpD,EAASqB,QACdgC,SAAUJ,EACVK,SAAS,EACTC,UAAW,UACXC,aAAa,IAEdC,MACL,CAMA,SAASC,IACP,MACEd,EADYjC,IACSK,IAAI,6BACzB2C,EAAenD,EAAIK,UAAUC,OAAO;AAEtC,OAAI8B,GAAgBA,IAAiBnC,EAAYwB,SACxC,GAGLW,GAAgBA,IAAiBnC,EAAYwB,SACxC0B,EAAaT,gBAChBhD,EAAY,qBACZ,GAGCA,EAAY,cACrB,EApHsBO,GAAamD,WAAanD,GAAagC,cAgG7DjC,EAAIqD,oBAAoB,eAAgB5C,EAAqB,CAC3D6C,QAAQ,IAqBVtD,EAAIuD,0BAA0B,CAC5BzB,GAAI,gBACJ0B,KAAM,OACNC,MAAKA,IACIP,IAETQ,MAAKA,IACIR,IAETS,MAAAA,GACElD,GACF,EACAmD,UAAU,EACVC,WAAY,CAAC,iBACbC,SAAAA,GACE,OAAOC,KAAKC,KAAKC,YAAgC,KAAlBf,GACjC,MAGN;ACrJG,MAACgB,EAAgB,CACpB;"}