Trying to inject HTML in {sentence} field of my card

I’m writing an addon that modifies the HTML content of {{sentence}} field by higlighting the {{vocab}} in it. I am trying to wrap vocab in a span tag but for some reason the HTML isn’t injected in the card.

init.py

from aqt import gui_hooks
from .highlighter import highlight_vocab

def on_add_note(note, _card):
    if not note:
        return
    
    try: 
        vocab = note["vocab"]
        sentence = note["sentence"]

        highligted = highlight_vocab(vocab, sentence)
            
        if highligted != sentence:
                note["sentence"] = highligted
    except Exception as e:
        print(f"[Vocab highlighter] Error: {e}")

gui_hooks.add_cards_will_add_note.append(on_add_note)

highlighter.py


def highlight_vocab(vocab, sentence) :
    vocab = vocab.strip()
    sentence = sentence.strip()
    if vocab and sentence :
        if vocab in sentence:
            return sentence.replace(vocab, f'<span class = "highlight">{vocab}</span>')
        else:
            return sentence
    else:
        return sentence


Have you tried using JS in the card template itself? Give the place you are modifying an id (wrapped in a span) and then add a highlight span to the vocab words.

Yes , Initially I was using javascript to do this but it was not working after researching a little I found out that javascript isn’t consistent in anki and breaks more often than not. So I decided to make an addon via python but somehow this is also not working

Does it? I use quite a bit of JS code in my own templates and it works fine across multiple devices and OSes.

I cannot help with addon development but maybe I could help with your template, if you provide your existing code and a summary of what you want to achieve.

(It would also be very weird if the JS code would break “more often than not”. Anki uses a real bundled browser to display all of it’s cards – if JS would break, then the entire browser it is build upon would be pretty much useless – and if I remember correctly, it uses the chromium browser, which is one of the post successful browsers in the world)

Whenever I have used JS, it seems to be working perfectly fine almost all of the time. What exactly doesn’t consistently work?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.