diff --git a/kjvstudy_org/routes/family_tree.py b/kjvstudy_org/routes/family_tree.py index 4c69528..ee116ab 100644 --- a/kjvstudy_org/routes/family_tree.py +++ b/kjvstudy_org/routes/family_tree.py @@ -14,6 +14,8 @@ from typing import List, Dict, Optional from fastapi import APIRouter, Request, HTTPException, Query from fastapi.responses import HTMLResponse, RedirectResponse, Response +from ..utils.helpers import get_verse_text + try: from ged4py import GedcomReader except ImportError: @@ -73,7 +75,6 @@ def expand_book_abbreviation(abbrev): def get_biblical_verses(name: str) -> list: """Get biblical verses related to a person by name.""" - # This is a simplified version - main verses come from GEDCOM notes return [] @@ -103,9 +104,11 @@ def parse_verses_from_notes(note_text: str) -> list: else: reference = f"{full_book} {chapter}:{start_verse}-{end_verse}" + verse_text = get_verse_text(full_book, chapter, start_verse) or "" + verses.append({ "reference": reference, - "text": "" # Text would need to be fetched from Bible + "text": verse_text }) return verses @@ -384,6 +387,14 @@ def family_tree_page(request: Request): "books": get_books(), "family_tree_data": family_tree_data, "generations": generations, + "person_names": sorted( + { + person["name"].strip() + for person in family_tree_data.values() + if person.get("name") + }, + key=lambda name: name.lower() + ), "breadcrumbs": [ {"text": "Home", "url": "/"}, {"text": "Family Tree", "url": None} diff --git a/kjvstudy_org/templates/family_tree.html b/kjvstudy_org/templates/family_tree.html index 0dfb578..c18de5a 100644 --- a/kjvstudy_org/templates/family_tree.html +++ b/kjvstudy_org/templates/family_tree.html @@ -81,6 +81,7 @@ section:nth-of-type(3) { .search-form { max-width: 55%; margin: 0.5rem 0; + position: relative; } .search-form input { @@ -95,6 +96,41 @@ section:nth-of-type(3) { outline: none; border-color: #666; } + +.search-dropdown { + position: absolute; + top: 100%; + left: 0; + right: 0; + background: var(--bg-color, #fff); + border: 1px solid var(--border-color, #ddd); + border-top: none; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08); + max-height: 240px; + overflow-y: auto; + display: none; + z-index: 10; +} + +.search-dropdown.open { + display: block; +} + +.search-dropdown button { + display: block; + width: 100%; + padding: 0.5rem 0.75rem; + border: none; + background: transparent; + text-align: left; + font-size: 0.95rem; + cursor: pointer; +} + +.search-dropdown button:hover, +.search-dropdown button.active { + background: var(--code-bg, #f6f6f6); +} {% endblock %} @@ -108,14 +144,16 @@ section:nth-of-type(3) {
-
+
+
@@ -223,4 +261,103 @@ section:nth-of-type(3) {

Family tree data could not be loaded.

{% endif %} + + {% endblock %}