Reftagger 主题组件

Reftagger 库允许您将 Discourse 论坛中的圣经引用转换为带有悬停预览的链接。

@outofthebox 的要求,我们基于此代码制作了一个主题组件。

我添加了一个设置,允许您选择要使用的翻译版本,并且该组件扩展了内容安全策略,以允许包含 Reftagger 库。

仓库位于此处

13 个赞

@RGJ,我们的社区非常喜爱这个功能。感谢您以安全且可定制的方式进行开发。我感激您慷慨地将这项工作回馈给 Discourse 社区。

5 个赞

我们过去 18 个月左右一直在使用它,效果非常好。很高兴看到它得到了改进,并且更容易获取了!

3 个赞

哇,太酷了。

我很希望能看到一个类似的组件,允许自定义关键词和预览。这对于创建术语表等场景会非常有用。

1 个赞

有一个 自动缩写单词 主题组件可以实现此功能。

3 个赞

我非常感谢你以及所有在 Meta 上参与原始讨论、探讨如何实现此功能的人!

2 个赞

大家好,Reftagger 之前运行得很顺利,持续了几个月,然后突然就停止了。它仍然会自动为“书/章/节”格式的文本生成外部链接,但悬停预览无法加载。

看起来它也是最新版本。有什么建议吗?

1 个赞

您正在运行哪个版本的 Discourse?

1 个赞

我该如何查找这些信息?

它应该在 /admin 的管理员仪表板中的某个位置。

它只是显示已更新:

1 个赞

在我这里,Discourse 2.7.7(至少在 Safari 中)运行正常。

现已恢复正常。Reftagger 似乎已切换到不同的 CDN(reftagger.bibliacdn.com),该内容需在内容安全策略中设为白名单。我已将其添加并推送了主题组件的新版本。您只需更新该组件即可。

3 个赞

找到了,谢谢您 :slightly_smiling_face:

1 个赞

理查德,你好:

我在翻看一个旧帖子。我安装了这个主题组件,出现了两个问题。

首先是组件需要更新的消息。
[管理员通知] 主题 ‘Reftagger’ 包含需要更新的代码。(ID:discourse.script-tag-discourse-plugin)([了解更多](Modernizing inline script tags for templates & JS API)

第二个问题可能与第一个组件需要更新的通知有关。引用没有被标记,页面在浏览器标签中显示加载圆圈并卡住。

是否可以更新此组件?

我用 ChatGPT 在这方面取得了一些进展,并为 Logos RefTagger 和 Blue Letter Bible 制作了可用的 reftaggers。

如果可以将它们捆绑成一个主题组件供社区使用,那就太好了,如果不行,主题组件只是为了方便。您只需要获取您喜欢的任何代码,然后将其放入新主题组件的 JS 选项卡中。您需要删除 Discourse 中 JS 选项卡中的默认代码。

如果有人有改进意见,欢迎提出。我的技能仅限于指导大型语言模型。

使用 Logos RefTagger

import { apiInitializer } from "discourse/lib/api";
import loadScript from "discourse/lib/load-script";

export default apiInitializer("0.1", (api) => {
  // 1. 在加载脚本之前,在 window 上定义 RefTagger 设置
  window.refTagger = {
    settings: {
      bibleVersion: "ESV", // 例如:默认圣经版本
      tagChapters: true, // 也标记章节引用
      convertHyperlinks: false, // 不重新标记现有链接
      roundCorners: true,
      socialSharing: [],
    },
  };

  // 2. 挂钩到 Discourse 帖子渲染:
  api.decorateCooked((element) => {
    // 加载外部 RefTagger 脚本(如果尚未加载)
    loadScript("https://api.reftagger.com/v2/RefTagger.js").then(() => {
      // 在新内容元素上运行标记
      window.refTagger.tag(element);
    });
  });
});

使用 BLB ScriptTagger

import { apiInitializer } from "discourse/lib/api";
import loadScript from "discourse/lib/load-script";

export default apiInitializer("0.1", (api) => {
  // 可选地在加载之前设置 BLB ScriptTagger 设置(显示默认值)
  window.BLB ||= {}; // 确保全局 BLB 对象存在
  window.BLB.Tagger ||= {};
  window.BLB.Tagger.Translation = "NKJV"; // 默认翻译版本
  window.BLB.Tagger.HyperLinks = "all"; // 标记甚至已链接的引用
  window.BLB.Tagger.TargetNewWindow = true; // 链接在新标签页中打开
  // ... (根据需要设置其他设置,如 DarkTheme 等)

  api.decorateCooked((elem) => {
    loadScript("https://www.blueletterbible.org/assets/scripts/blbToolTip/BLB_ScriptTagger-min.js")
      .then(() => {
        if (window.BLB && window.BLB.Tagger) {
          window.BLB.Tagger.pageInit(); // 重新扫描新内容中的经文引用
        }
      });
  });
});

这现在已经解决了。

即使在解决上述问题之前,我也无法重现这一点——那仅仅是一个警告,而不是一个错误。

3 个赞

非常感谢这次更新!

2 个赞