From d2a44ca2373a26ba03b4ab4a790bb42ed102262b Mon Sep 17 00:00:00 2001 From: Sivan Ratson <89018301+Sivan22@users.noreply.github.com> Date: Sat, 11 Jan 2025 23:54:23 +0200 Subject: [PATCH] fix: better Toc navigation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * when searching a reference in the Table-Of-Content navigation screen, the full text of the refereence will show. (before, you could some time get סימן א, סימן א, סימן א. now you will get חושן משפט סימן א, אבן העזר סימן א, etc.) --- .../data_providers/file_system_data_provider.dart | 5 +++-- lib/models/books.dart | 11 +++++++++++ lib/screens/reading/text/toc_navigator_screen.dart | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/data/data_providers/file_system_data_provider.dart b/lib/data/data_providers/file_system_data_provider.dart index 3ef6db70..f098174c 100644 --- a/lib/data/data_providers/file_system_data_provider.dart +++ b/lib/data/data_providers/file_system_data_provider.dart @@ -429,13 +429,14 @@ class FileSystemData { final int level = int.parse(line[2]); // Extract heading level final String text = stripHtmlIfNeeded(line); - TocEntry entry = TocEntry(text: text, index: i, level: level); - if (level == 1) { // Add h1 headings as root nodes + TocEntry entry = TocEntry(text: text, index: i, level: level); toc.add(entry); parents[level] = entry; } else { + TocEntry entry = TocEntry( + text: text, index: i, level: level, parent: parents[level - 1]); // Add other headings under their parent final TocEntry? parent = parents[level - 1]; if (parent != null) { diff --git a/lib/models/books.dart b/lib/models/books.dart index 182e70a2..79ee5d79 100644 --- a/lib/models/books.dart +++ b/lib/models/books.dart @@ -120,13 +120,24 @@ class TocEntry { String text; final int index; final int level; + final TocEntry? parent; List children = []; + String get fullText => () { + TocEntry? parent = this.parent; + String text = this.text; + while (parent != null && parent.level > 1) { + text = '${parent!.text}, $text'; + parent = parent.parent; + } + return text; + }(); ///creats [TocEntry] TocEntry({ required this.text, required this.index, this.level = 1, + this.parent, }); } diff --git a/lib/screens/reading/text/toc_navigator_screen.dart b/lib/screens/reading/text/toc_navigator_screen.dart index a52a6430..5e5dd7c0 100644 --- a/lib/screens/reading/text/toc_navigator_screen.dart +++ b/lib/screens/reading/text/toc_navigator_screen.dart @@ -48,7 +48,7 @@ class _TocViewerState extends State padding: EdgeInsets.fromLTRB( 0, 0, 10 * allEntries[index].level.toDouble(), 0), child: ListTile( - title: Text(allEntries[index].text), + title: Text(allEntries[index].fullText), onTap: () { widget.scrollController.scrollTo( index: allEntries[index].index,