Reftagger theme component

The Reftagger library allows you to convert bible references on your Discourse forum into links with a hover-preview.

By request of @outofthebox we made a theme component based on this code.

I’ve added a setting that allows you to select the translation you want to use, and the component extends the content security policy to allow for the reftagger library to be included.

Repository here.

12 Likes

@RGJ, our community loves this feature. Thank you for developing in a secure and customizable manner. I appreciate your generosity in sharing this work back to the Discourse community.

5 Likes

We’ve been using that for the last 18 months or so, and it’s worked like a charm. Happy to see it improved and made more easily available!

3 Likes

Wow, that’s super cool.

I would love to see a similar component in which custom keywords and previews can be defined.
That would be super useful to create a glossary for example

1 Like

There is the auto abbrify words theme component which does such a thing.

3 Likes

I really appreciate you and everyone who contributed to the original conversation on Meta about how to make this feature work!

2 Likes

Hello everyone, Reftagger was working swimmingly for a few months, and then it just stopped. It will still automatically generate an external link for the book/chapter/verse format, but it will not load the hover preview.

It appears to be up to date too. Any ideas?

1 Like

What Discourse version are you running?

1 Like

How can I find this info?

It should be somewhere in the admin dashboard at /admin

It just says that it is up to date:

1 Like

Seems to be working fine on Discourse 2.7.7 (at least in Safari) for me.

It’s working again now.
Reftagger apparently switched to a different CDN (reftagger.bibliacdn.com) which had to be whitelisted in the content security policy. I have added it and pushed a new version of the theme component. All you need to do is update the component.

3 Likes

There it is, thank you sir :slightly_smiling_face:

1 Like

Hey Richard,

Kicking the tires on an older thread. I installed this them component and two things are going on.

First is the message that component needs updating.
[Admin Notice] Theme ‘Reftagger’ contains code which needs updating. (id:discourse.script-tag-discourse-plugin) (learn more)

Second may be related to the first notice where the component needs updating. References are not being tagged and pages seem to hand showing the loading circle in the browser tab.

Would it be possible to have this component updated?

I made some headway with this using ChatGPT and have working reftaggers for both using Logos RefTagger and Blue Letter Bible.

If these could be bundled into a theme component for community use that is great if not the theme component is simply to make. You just need to take the code for whichever you prefer and put in the JS tab of a new theme component. You need to remove the default code is in the JS tab from Discourse.

If anyone has feedback how to improve that is welcome. My skills only go as far as guiding the LLM.

using Logos RefTagger:

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

export default apiInitializer(“0.1”, (api) => {
// 1. Define RefTagger settings on window BEFORE loading the script
window.refTagger = {
settings: {
bibleVersion: “ESV”, // e.g. default Bible version
tagChapters: true, // tag chapter references as well
convertHyperlinks: false, // don’t retag existing links
roundCorners: true,
socialSharing: ,
}
};

// 2. Hook into Discourse post rendering:
api.decorateCooked((element) => {
// Load the external RefTagger script (if not already loaded)
loadScript(“https://api.reftagger.com/v2/RefTagger.js”).then(() => {
// Run the tagging on the new content element
window.refTagger.tag(element);
});
});
});

using BLB ScriptTagger:

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

export default apiInitializer(“0.1”, (api) => {
// Optionally set BLB ScriptTagger settings before loading (defaults shown)
window.BLB ||= {}; // ensure global BLB object exists
window.BLB.Tagger ||= {};
window.BLB.Tagger.Translation = “NKJV”; // default translation version
window.BLB.Tagger.HyperLinks = “all”; // tag even already-linked refs
window.BLB.Tagger.TargetNewWindow = true; // links open in new tab
// … (other settings like DarkTheme, etc., as needed)

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(); // re-scan new content for verses:contentReference[oaicite:6]{index=6}
}
});
});
});