Fixed search

This commit is contained in:
h202-wq
2026-08-19 08:33:56 -04:00
parent 35630dd41f
commit 5f526a9007
3 changed files with 26 additions and 10 deletions
+6 -4
View File
@@ -1,8 +1,7 @@
import { useCallback, useEffect, useState } from 'react' import { useCallback, useEffect, useState } from 'react'
import { Link } from 'react-router-dom' import { Link } from 'react-router-dom'
import CandleCanvas from './Candle' import CandleCanvas from './Candle'
import { type Verse } from './bible' import { daySeed, loadKJV, msUntilRollover, pickForDay, type DailyVerse } from './verse'
import { daySeed, loadKJV, msUntilRollover, pickForDay } from './verse'
type Phase = 'sealed' | 'revealing' | 'revealed' type Phase = 'sealed' | 'revealing' | 'revealed'
@@ -16,7 +15,7 @@ function formatCountdown(ms: number): string {
export default function Home() { export default function Home() {
const [phase, setPhase] = useState<Phase>('sealed') const [phase, setPhase] = useState<Phase>('sealed')
const [verse, setVerse] = useState<Verse | null>(null) const [verse, setVerse] = useState<DailyVerse | null>(null)
const [countdown, setCountdown] = useState('') const [countdown, setCountdown] = useState('')
const [error, setError] = useState(false) const [error, setError] = useState(false)
@@ -92,7 +91,10 @@ export default function Home() {
<div className="verse"> <div className="verse">
<p className="verse-text">{verse.text}</p> <p className="verse-text">{verse.text}</p>
<p className="verse-ref"> <p className="verse-ref">
<Link to={`/read/${verse.reference.split(' ')[0]}/1`}>{verse.reference}</Link> {' '}
<Link to={`/read/${encodeURIComponent(verse.book)}/${verse.chapter}#v${verse.verse}`}>
{verse.reference}
</Link>
</p> </p>
</div> </div>
</section> </section>
+10 -2
View File
@@ -39,6 +39,7 @@ interface IndexEntry {
verse: number verse: number
text: string text: string
lower: string lower: string
refLower: string
} }
let loaded = false let loaded = false
@@ -61,7 +62,14 @@ export function loadBible(): Promise<void> {
for (const ch of b.chapters) { for (const ch of b.chapters) {
const cn = Number(ch.chapter) const cn = Number(ch.chapter)
for (const v of ch.verses) { for (const v of ch.verses) {
index.push({ book: b.book, chapter: cn, verse: v.verse, text: v.text, lower: v.text.toLowerCase() }) index.push({
book: b.book,
chapter: cn,
verse: v.verse,
text: v.text,
lower: v.text.toLowerCase(),
refLower: `${displayName(b.book)} ${cn}:${v.verse}`.toLowerCase(),
})
} }
} }
} }
@@ -99,7 +107,7 @@ export function searchBible(query: string, limit = 60): SearchOutcome {
const results: SearchResult[] = [] const results: SearchResult[] = []
let total = 0 let total = 0
for (const e of index) { for (const e of index) {
if (e.lower.includes(q)) { if (e.lower.includes(q) || e.refLower.includes(q)) {
total++ total++
if (results.length < limit) { if (results.length < limit) {
results.push({ text: e.text, reference: `${displayName(e.book)} ${e.chapter}:${e.verse}`, book: e.book, chapter: e.chapter, verse: e.verse }) results.push({ text: e.text, reference: `${displayName(e.book)} ${e.chapter}:${e.verse}`, book: e.book, chapter: e.chapter, verse: e.verse })
+10 -4
View File
@@ -2,7 +2,13 @@ import { getBooks, loadBible, type Verse } from './bible'
const ROLLOVER_LOCAL_HOUR = 2 const ROLLOVER_LOCAL_HOUR = 2
let flatNT: Verse[] | null = null export interface DailyVerse extends Verse {
book: string
chapter: number
verse: number
}
let flatNT: DailyVerse[] | null = null
export function daySeed(now: Date = new Date()): number { export function daySeed(now: Date = new Date()): number {
const shifted = new Date(now.getTime() - ROLLOVER_LOCAL_HOUR * 3600_000) const shifted = new Date(now.getTime() - ROLLOVER_LOCAL_HOUR * 3600_000)
@@ -26,13 +32,13 @@ function mulberry32(seed: number): () => number {
} }
} }
export function pickForDay(verses: Verse[], seed: number): Verse { export function pickForDay(verses: DailyVerse[], seed: number): DailyVerse {
const rand = mulberry32(seed) const rand = mulberry32(seed)
const index = Math.floor(rand() * verses.length) const index = Math.floor(rand() * verses.length)
return verses[index] return verses[index]
} }
export async function loadKJV(): Promise<Verse[]> { export async function loadKJV(): Promise<DailyVerse[]> {
if (flatNT) return flatNT if (flatNT) return flatNT
await loadBible() await loadBible()
flatNT = [] flatNT = []
@@ -44,7 +50,7 @@ export async function loadKJV(): Promise<Verse[]> {
for (const chapter of book.chapters) { for (const chapter of book.chapters) {
const chapterNumber = Number(chapter.chapter) const chapterNumber = Number(chapter.chapter)
for (const v of chapter.verses) { for (const v of chapter.verses) {
flatNT.push({ text: v.text, reference: `${name} ${chapterNumber}:${v.verse}` }) flatNT.push({ text: v.text, reference: `${name} ${chapterNumber}:${v.verse}`, book: book.book, chapter: chapterNumber, verse: v.verse })
} }
} }
} }