From 46fb97dd97ef047a50b39b8c6458f6182158015e Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Fri, 28 Nov 2025 16:21:05 -0500 Subject: [PATCH] Group cross-references by description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross-references are now organized by their thematic description instead of being listed individually. This creates a cleaner display: Before: Colossians 3:10 — Parallel theme; Ephesians 4:24 — References God; Genesis 3:22 — References God; Psalms 100:3 — References God... After: **References God:** Ephesians 4:24; Genesis 3:22; Psalms 100:3 **Parallel theme:** Colossians 3:10; 2 Corinthians 3:18 Much more readable and scannable! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- kjvstudy_org/server.py | 23 ++++++++++++++++------- kjvstudy_org/templates/chapter.html | 10 +++++++--- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/kjvstudy_org/server.py b/kjvstudy_org/server.py index 0781d26..c6866c5 100644 --- a/kjvstudy_org/server.py +++ b/kjvstudy_org/server.py @@ -2148,15 +2148,24 @@ def read_chapter(request: Request, book: str, chapter: int): # Track which words were shown for study in word_studies: shown_words.add(study['word'].lower()) - # Add cross-references with proper URLs + # Add cross-references with proper URLs, grouped by description cross_refs = get_cross_references(book, chapter, verse.verse) - commentary['cross_references'] = [ - { + + # Group cross-references by their description/note + from collections import defaultdict + grouped_refs = defaultdict(list) + for ref in cross_refs: + description = ref['note'] if ref['note'] else 'Related' + url = f"/book/{ref['ref'].rsplit(' ', 1)[0]}/chapter/{ref['ref'].rsplit(' ', 1)[1].split(':')[0]}/verse/{ref['ref'].rsplit(' ', 1)[1].split(':')[1]}" if ' ' in ref['ref'] and ':' in ref['ref'] else '#' + grouped_refs[description].append({ 'text': ref['ref'], - 'url': f"/book/{ref['ref'].rsplit(' ', 1)[0]}/chapter/{ref['ref'].rsplit(' ', 1)[1].split(':')[0]}/verse/{ref['ref'].rsplit(' ', 1)[1].split(':')[1]}" if ' ' in ref['ref'] and ':' in ref['ref'] else '#', - 'context': ref['note'] - } - for ref in cross_refs + 'url': url + }) + + # Convert to list of groups for template + commentary['cross_reference_groups'] = [ + {'description': desc, 'refs': refs} + for desc, refs in grouped_refs.items() ] commentaries[verse.verse] = commentary diff --git a/kjvstudy_org/templates/chapter.html b/kjvstudy_org/templates/chapter.html index 12a8921..886177e 100644 --- a/kjvstudy_org/templates/chapter.html +++ b/kjvstudy_org/templates/chapter.html @@ -266,12 +266,16 @@ hr::before {

{{ verse.verse }} {{ verse.text | red_letter(book, chapter, verse.verse) | inject_word_markers(commentary.word_studies if commentary else [], verse.verse) | link_names | safe }} {% if commentary %} - {% if commentary.cross_references %} + {% if commentary.cross_reference_groups %} - {% for ref in commentary.cross_references %} - {{ ref.text }}{% if ref.context %} — {{ ref.context }}{% endif %}{% if not loop.last %}; {% endif %} + {% for group in commentary.cross_reference_groups %} + {{ group.description }}: + {% for ref in group.refs %} + {{ ref.text }}{% if not loop.last %}; {% endif %} + {% endfor %} + {% if not loop.last %}
{% endif %} {% endfor %}
{% endif %}