diff --git a/package.json b/package.json index cb83b1d..b698b16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jumble-imwald", - "version": "16.0.0", + "version": "16.1.0", "description": "A user-friendly Nostr client focused on relay feed browsing and relay discovery, forked from Jumble", "private": true, "type": "module", diff --git a/src/components/Bookstr/BookstrContent.tsx b/src/components/Bookstr/BookstrContent.tsx index f837994..81a7fe9 100644 --- a/src/components/Bookstr/BookstrContent.tsx +++ b/src/components/Bookstr/BookstrContent.tsx @@ -533,11 +533,17 @@ export function BookstrContent({ wikilink, sourceUrl, className, skipWebPreview setSections(updatedSections) - // Set initial selected versions + // Set initial selected versions - prioritize version from parsed wikilink const initialVersions = new Map() updatedSections.forEach((section, index) => { - if (section.versions.length > 0) { - initialVersions.set(index, section.versions[0]) + // Priority: 1) version from reference (parsed wikilink), 2) parsed.versions[0], 3) section.versions[0] + const versionFromRef = section.reference.version?.toUpperCase() + const versionFromParsed = parsed?.versions?.[0]?.toUpperCase() + const versionFromSection = section.versions.length > 0 ? section.versions[0] : '' + + const initialVersion = versionFromRef || versionFromParsed || versionFromSection + if (initialVersion) { + initialVersions.set(index, initialVersion) } }) setSelectedVersions(initialVersions) @@ -816,12 +822,21 @@ export function BookstrContent({ wikilink, sourceUrl, className, skipWebPreview return updated }) - // Update selected versions + // Update selected versions - prioritize version from parsed wikilink setSelectedVersions(prevVersions => { const updated = new Map(prevVersions) newSections.forEach((section, index) => { - if (section.versions.length > 0 && !updated.has(index)) { - updated.set(index, section.versions[0]) + // Only set if not already set (preserve user selection) + if (!updated.has(index)) { + // Priority: 1) version from reference (parsed wikilink), 2) parsed.versions[0], 3) section.versions[0] + const versionFromRef = section.reference.version?.toUpperCase() + const versionFromParsed = parsed?.versions?.[0]?.toUpperCase() + const versionFromSection = section.versions.length > 0 ? section.versions[0] : '' + + const initialVersion = versionFromRef || versionFromParsed || versionFromSection + if (initialVersion) { + updated.set(index, initialVersion) + } } }) return updated @@ -898,7 +913,10 @@ export function BookstrContent({ wikilink, sourceUrl, className, skipWebPreview
{sections.map((section, sectionIndex) => { - const selectedVersion = selectedVersions.get(sectionIndex) || section.versions[0] || '' + // Priority for selected version: 1) user-selected, 2) version from reference, 3) parsed.versions[0], 4) section.versions[0] + const versionFromRef = section.reference.version?.toUpperCase() + const versionFromParsed = parsed?.versions?.[0]?.toUpperCase() + const selectedVersion = selectedVersions.get(sectionIndex) || versionFromRef || versionFromParsed || section.versions[0] || '' const filteredEvents = selectedVersion ? section.events.filter(event => { const metadata = extractBookMetadata(event) @@ -970,7 +988,9 @@ export function BookstrContent({ wikilink, sourceUrl, className, skipWebPreview return null } - const externalUrl = buildExternalUrl(section.reference, bookType, selectedVersion) + // Priority for Bible Gateway version: 1) version from reference, 2) selectedVersion, 3) parsed.versions[0], 4) DRA (default) + const versionForUrl = versionFromRef || selectedVersion || versionFromParsed || undefined + const externalUrl = buildExternalUrl(section.reference, bookType, versionForUrl) if (!externalUrl) return null diff --git a/src/components/Note/MarkdownArticle/MarkdownArticle.tsx b/src/components/Note/MarkdownArticle/MarkdownArticle.tsx index 7aadd55..df2009d 100644 --- a/src/components/Note/MarkdownArticle/MarkdownArticle.tsx +++ b/src/components/Note/MarkdownArticle/MarkdownArticle.tsx @@ -1100,7 +1100,8 @@ function parseMarkdownContent( }) // Wikilinks ([[link]] or [[link|display]]) - but not inside markdown links - // Exclude citations ([[citation::...]]) and bookstr links ([[book::...]]) from wikilink processing + // Exclude citations ([[citation::...]]) from wikilink processing + // Note: bookstr links ([[book::...]]) are included as wikilink type and handled in rendering const wikilinkRegex = /\[\[([^\]]+)\]\]/g const wikilinkMatches = Array.from(content.matchAll(wikilinkRegex)) wikilinkMatches.forEach(match => { @@ -1114,11 +1115,7 @@ function parseMarkdownContent( return } - // Skip bookstr links - they're handled separately - if (linkContent.startsWith('book::')) { - return - } - + // Include bookstr links as wikilink type - they'll be handled in rendering // Only add if not already covered by another pattern and not in block pattern const isInOther = patterns.some(p => start >= p.index &&