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) {
Family tree data could not be loaded.
{% endif %} + + {% endblock %}