mirror of
https://github.com/kennethreitz/kjvstudy.org.git
synced 2026-06-05 23:00:16 +00:00
Auto-expand word studies when margin isn't crowded
Word studies now auto-expand when there's room (2+ verses since last word study), matching cross-ref behavior. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -146,15 +146,17 @@ def link_verse_references_in_text(text):
|
||||
return re.sub(pattern, replace_reference, text)
|
||||
|
||||
|
||||
def inject_word_markers(text, word_studies, verse_num):
|
||||
def inject_word_markers(text, word_studies, verse_num, auto_expand=False):
|
||||
"""Inject sidenote markers into verse text next to annotated words.
|
||||
|
||||
Word studies are collapsed by default, showing only the word and Greek/Hebrew term.
|
||||
Clicking expands to show transliteration and full definition.
|
||||
If auto_expand is True, show expanded by default.
|
||||
"""
|
||||
if not word_studies:
|
||||
return text
|
||||
|
||||
expanded_class = ' expanded' if auto_expand else ''
|
||||
for idx, study in enumerate(word_studies, 1):
|
||||
word = study['word']
|
||||
# Link the original term to Strong's page if we have a Strong's number
|
||||
@@ -167,7 +169,7 @@ def inject_word_markers(text, word_studies, verse_num):
|
||||
marker = (
|
||||
f'<label for="sn-{verse_num}-word-{idx}" class="margin-toggle sidenote-number"></label>'
|
||||
f'<input type="checkbox" id="sn-{verse_num}-word-{idx}" class="margin-toggle"/>'
|
||||
f'<span class="sidenote word-study">'
|
||||
f'<span class="sidenote word-study{expanded_class}">'
|
||||
f'<strong>{word}:</strong> {term_html}'
|
||||
f'<span class="word-study-details"> (<em>{study["translit"]}</em>). {study["note"]}</span>'
|
||||
f'</span>'
|
||||
|
||||
@@ -204,6 +204,8 @@ async def read_chapter(request: Request, book: str, chapter: int):
|
||||
cooldown_verses = 5 # Don't repeat same word within 5 verses
|
||||
last_xref_verse = 0 # Track last verse with cross-refs
|
||||
xref_cooldown = 2 # Collapse when within 2 verses
|
||||
last_word_study_verse = 0 # Track last verse with word study
|
||||
word_study_cooldown = 2 # Collapse when within 2 verses
|
||||
for verse in verses:
|
||||
commentary = generate_commentary(book, chapter, verse)
|
||||
# Filter out words shown recently (within cooldown period)
|
||||
@@ -211,6 +213,13 @@ async def read_chapter(request: Request, book: str, chapter: int):
|
||||
# Add word study sidenotes
|
||||
word_studies = generate_word_study_sidenotes(verse.text, book, chapter, verse.verse, excluded_words)
|
||||
commentary['word_studies'] = word_studies
|
||||
# Auto-expand word studies when there's room
|
||||
if word_studies:
|
||||
if verse.verse - last_word_study_verse < word_study_cooldown:
|
||||
commentary['word_study_auto_expand'] = False
|
||||
else:
|
||||
commentary['word_study_auto_expand'] = True
|
||||
last_word_study_verse = verse.verse
|
||||
# Track which words were shown
|
||||
for study in word_studies:
|
||||
recent_words[study['word'].lower()] = verse.verse
|
||||
|
||||
@@ -461,7 +461,7 @@ document.body.dataset.resourceReader = 'false';
|
||||
{% set commentary = commentaries[verse.verse] if commentaries and verse.verse in commentaries else none %}
|
||||
{% set has_commentary = commentary and (commentary.get('is_enhanced') or commentary.get('analysis')) %}
|
||||
<p id="verse-{{ verse.verse }}">
|
||||
<a href="/book/{{ book }}/chapter/{{ chapter }}/verse/{{ verse.verse }}" class="verse-number-link{% if has_commentary %} has-commentary{% endif %}">{{ verse.verse }}</a> {{ verse.text | red_letter(book, chapter, verse.verse) | inject_word_markers(commentary.word_studies if commentary else [], verse.verse) | link_names | safe }}
|
||||
<a href="/book/{{ book }}/chapter/{{ chapter }}/verse/{{ verse.verse }}" class="verse-number-link{% if has_commentary %} has-commentary{% endif %}">{{ verse.verse }}</a> {{ verse.text | red_letter(book, chapter, verse.verse) | inject_word_markers(commentary.word_studies if commentary else [], verse.verse, commentary.word_study_auto_expand if commentary else false) | link_names | safe }}
|
||||
{% if commentary %}
|
||||
{% if commentary.cross_reference_groups %}
|
||||
{% set total_refs = commentary.cross_reference_groups | sum(attribute='refs', start=[]) | length %}
|
||||
|
||||
Reference in New Issue
Block a user