Remove all !important declarations (override via selector specificity
instead) and replace the partially-supported text-indent on indented
passage lines with padding-left.
- Add ESVApiService.toBibleApiResponse() as the single ESV-response ->
BiblePassage converter, used by both downloadFromESVApi and
BibleContentService (removes the duplicated logic).
- Merge BibleChapterFiles into BibleFiles: BibleFiles now owns the static
path/file lookups plus instance openChapterNote/createChapterNote/
scrollToVerse. Keeping lookups static avoids a circular dependency.
- openChapterNote now takes a BibleReference instead of a string, so call
sites pass references directly with no toString()/re-parse round-trip.
- Drop dead getFullContentPath() and stale TODOs; mark FOLLOWUP #5 resolved.
Resolves FOLLOWUP.md #4. openChapterNote delegated scroll-to-verse to a
scrollToVerse helper that scrolls immediately when the verse element is
already present and otherwise observes the view container with a
MutationObserver, scrolling the instant .verse-N renders, then
disconnecting. A 5s win.setTimeout fallback (using the leaf's
WorkspaceContainer.win for pop-out correctness) disconnects the observer
if the verse never appears, replacing the magic 300ms setTimeout.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Resolves FOLLOWUP.md #3. All four sites in BibleReferenceRenderer that
assigned the ESV API response to innerHTML now run it through Obsidian's
sanitizeHTMLToDom() and append the resulting DocumentFragment, dropping
the inline no-unsanitized/property and no-inner-html eslint-disable
comments. The verse-preview extraction queries/clones paragraphs off the
sanitized fragment instead of a temporary innerHTML div.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Resolves FOLLOWUP.md #2. Replaces vault.adapter.* usage with the
intended Obsidian APIs:
- ESVApiService.saveESVApiResponseAsMdNote: Vault.create() for the note
body + FileManager.processFrontMatter() for frontmatter; folder
creation via getAbstractFileByPath/createFolder.
- DisciplesJournalPlugin.updateAllBibleNoteFrontmatter: reads canonical
from metadataCache and updates via processFrontMatter.
- FrontmatterUtil: buildFrontmatterString/mergeCustomFrontmatterIntoExisting
replaced by applyCustomFrontmatter, which mutates the frontmatter object
directly (drops stringifyYaml round-tripping).
- BibleFiles.fileExistsForPassage uses getAbstractFileByPath (now sync);
clearData deletes via FileManager.trashFile() to respect trash settings.
- All passage/content paths run through normalizePath().
- eslint config ignores .devbox/ tooling artifacts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>