Fix preserving scroll position for rtl reading direction and ltr theme direction
This commit is contained in:
@@ -54,6 +54,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||
- (**Reader**) Fix jumping back to the first page on window resize
|
||||
- (**Reader**) Fix chapter not getting marked as read in continuous reading mode in case the last page is not big enough to get marked as the current page
|
||||
- (**Reader**) Fix infinite scrolling sometimes not opening previous/next chapter
|
||||
- (**Reader**) Fix preserving scroll position with RTL reading direction and a language that is read RTL
|
||||
- (**Browse**) Fix showing only nsfw sources in the browse source page when the "show nsfw" setting is disabled
|
||||
|
||||
## [20260509.01] (r3147) - 2026-05-09
|
||||
|
||||
@@ -230,6 +230,7 @@ const BaseReaderViewer = ({
|
||||
pageScaleMode,
|
||||
shouldStretchPage,
|
||||
readerWidth,
|
||||
themeDirection,
|
||||
);
|
||||
|
||||
useLayoutEffect(() => {
|
||||
|
||||
@@ -12,9 +12,9 @@ import type {
|
||||
IReaderSettingsManga,
|
||||
ReaderPageScaleMode,
|
||||
ReaderStateChapters,
|
||||
ReadingDirection,
|
||||
ReadingMode,
|
||||
} from '@/features/reader/Reader.types.ts';
|
||||
import { ReadingDirection } from '@/features/reader/Reader.types.ts';
|
||||
import {
|
||||
isContinuousReadingMode,
|
||||
isContinuousVerticalReadingMode,
|
||||
@@ -24,6 +24,7 @@ import {
|
||||
import { getPreviousNextChapterVisibility } from '@/features/reader/Reader.utils.ts';
|
||||
import type { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts';
|
||||
import { getReaderPagesStore, getReaderSettingsStore } from '@/features/reader/stores/ReaderStore.ts';
|
||||
import type { Direction } from '@mui/material/styles';
|
||||
|
||||
const shouldPreserveOnResizeChange = (
|
||||
readingMode: ReadingMode,
|
||||
@@ -177,7 +178,12 @@ const useScrollPreservationData = (
|
||||
return dataRef;
|
||||
};
|
||||
|
||||
const usePreserveOnLeadingPageRender = (scrollElementRef: RefObject<HTMLElement | null>, readingMode: ReadingMode) => {
|
||||
const usePreserveOnLeadingPageRender = (
|
||||
scrollElementRef: RefObject<HTMLElement | null>,
|
||||
readingMode: ReadingMode,
|
||||
readingDirection: ReadingDirection,
|
||||
themeDirection: Direction,
|
||||
) => {
|
||||
const preservationDataRef = useScrollPreservationData(scrollElementRef);
|
||||
|
||||
const isContinuousReadingModeActive = isContinuousReadingMode(readingMode);
|
||||
@@ -212,7 +218,13 @@ const usePreserveOnLeadingPageRender = (scrollElementRef: RefObject<HTMLElement
|
||||
return entry.target.offsetTop < top;
|
||||
}
|
||||
|
||||
if (themeDirection === 'rtl') {
|
||||
return entry.target.offsetLeft < left;
|
||||
}
|
||||
|
||||
return readingDirection === ReadingDirection.LTR
|
||||
? entry.target.offsetLeft < left
|
||||
: entry.target.offsetLeft > left;
|
||||
});
|
||||
|
||||
const includesElementsBeforeScrollPosition = !!entriesBeforeScrollPosition.length;
|
||||
@@ -364,6 +376,7 @@ export const useReaderPreserveScrollPosition = (
|
||||
pageScaleMode: ReaderPageScaleMode,
|
||||
shouldStretchPage: boolean,
|
||||
readerWidth: IReaderSettingsManga['readerWidth'],
|
||||
themeDirection: Direction,
|
||||
) => {
|
||||
usePreserveOnInfiniteScrollPreviousChapterInitialRender(
|
||||
scrollElementRef,
|
||||
@@ -374,7 +387,7 @@ export const useReaderPreserveScrollPosition = (
|
||||
visibleChapters,
|
||||
isContinuousReadingMode(readingMode),
|
||||
);
|
||||
usePreserveOnLeadingPageRender(scrollElementRef, readingMode);
|
||||
usePreserveOnLeadingPageRender(scrollElementRef, readingMode, readingDirection, themeDirection);
|
||||
usePreserveOnWindowResize(readingMode, pageScaleMode, currentPageIndex);
|
||||
usePreserveOnValueChange(readingDirection, currentPageIndex);
|
||||
usePreserveOnValueChange(readingMode, currentPageIndex);
|
||||
|
||||
Reference in New Issue
Block a user