Epub improvements (#160)
* Improved navigation and search result highlighting in the EPUB reader * refactor: implement JIT chunk restoration for robust navigation - Fixes search and bookmark navigation failing in same-chapter transitions. - Introduced JIT (Just-in-Time) HTML restoration in `epub_reader.js` to re-populate virtualized chunks before CFI resolution or search scrolling. - Synchronized search highlighting and user highlights within newly-restored chunk segments. - Improved search navigation accuracy by mapping occurrences to relative chunk indices. * Implemented a custom text selection engine for the paginated EPUB reader to support cross-page selection and improved handle interaction. * Implemented management of external file behavior and improved library filtering. * Added support for toolbar customization in the EPUB reader. * Added support for toolbar customization in the PDF reader. * fix: rendering during auto-scroll and navigation on long pages * Added a "Scroll to Top" feature to the auto-scroll controls in both EPUB and PDF readers.
This commit is contained in:
parent
db7e05ce63
commit
6a60aec0ef
17 changed files with 3045 additions and 2060 deletions
|
|
@ -1878,22 +1878,28 @@ fun LibraryFilterSheet(
|
|||
}
|
||||
}
|
||||
|
||||
if (syncedFolders.isNotEmpty()) {
|
||||
Text(stringResource(R.string.filter_source_folder), style = MaterialTheme.typography.titleMedium)
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth().horizontalScroll(rememberScrollState()),
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
syncedFolders.forEach { folder ->
|
||||
FilterChip(
|
||||
selected = folder.uriString in currentFilters.sourceFolders,
|
||||
onClick = {
|
||||
val newSet = if (folder.uriString in currentFilters.sourceFolders) currentFilters.sourceFolders - folder.uriString else currentFilters.sourceFolders + folder.uriString
|
||||
currentFilters = currentFilters.copy(sourceFolders = newSet)
|
||||
},
|
||||
label = { Text(folder.name) }
|
||||
)
|
||||
}
|
||||
Text(stringResource(R.string.filter_source_folder), style = MaterialTheme.typography.titleMedium)
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth().horizontalScroll(rememberScrollState()),
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
FilterChip(
|
||||
selected = "IN_APP_STORAGE" in currentFilters.sourceFolders,
|
||||
onClick = {
|
||||
val newSet = if ("IN_APP_STORAGE" in currentFilters.sourceFolders) currentFilters.sourceFolders - "IN_APP_STORAGE" else currentFilters.sourceFolders + "IN_APP_STORAGE"
|
||||
currentFilters = currentFilters.copy(sourceFolders = newSet)
|
||||
},
|
||||
label = { Text(stringResource(R.string.filter_in_app_storage)) }
|
||||
)
|
||||
syncedFolders.forEach { folder ->
|
||||
FilterChip(
|
||||
selected = folder.uriString in currentFilters.sourceFolders,
|
||||
onClick = {
|
||||
val newSet = if (folder.uriString in currentFilters.sourceFolders) currentFilters.sourceFolders - folder.uriString else currentFilters.sourceFolders + folder.uriString
|
||||
currentFilters = currentFilters.copy(sourceFolders = newSet)
|
||||
},
|
||||
label = { Text(folder.name) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue