通过 URL 打开回复窗口

我在自己的实例中使用了一个简单的主题组件来实现这个功能。下面是我的一个改编版本——除了 #reply 之外,它还支持 #upload(在桌面端打开上传窗口的新回复)和 #edit(用于 Wiki 的原始发帖)。

它还需要一些改进,比如避免使用 setTimeout,并正确管理 draftSequence(我认为 topic.draft_sequence 可能不正确),我也不确定这里的最佳实践是什么。不过,目前对我来说运行正常。

访问任何主题,例如 /t/[slug]/[id]#reply,将打开编辑器并创建一个新的空回复。

如果你需要预填文本,可以通过传递给 composer.open 的对象设置 reply 属性来实现。此外,如果该主题已有草稿,系统会在创建新回复之前询问你是否要保存或丢弃该草稿——如果希望恢复该草稿,draftSequence 必须正确。

<script type="text/discourse-plugin" version="0.4">
  if (/.*#reply$/g.test(document.URL)) {
    const { REPLY } = require('discourse/models/composer').default;
    
    const composer = Discourse.__container__.lookup('controller:composer');
    
    setTimeout(function() {
      const topic = Discourse.__container__.lookup("controller:topic").get("model");
      if (topic) {
        composer.open({
            action: REPLY,
            draftKey: topic.draft_key,
            draftSequence: topic.draft_sequence,
            topic,
        });
      }
    }, 0)
  }
</script>

希望这能帮到你。

13 个赞