From cc7eca08d757679032969e33a58141ee219b77b2 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sat, 15 Feb 2025 22:37:06 +0100 Subject: [PATCH] Handle closing transition pages in paged pagers for single page chapters In case a chapter only has a single page and the previous/next transition page was visible, it was not possible to go back to the chapters page, since it just opened the previous/next chapter instead --- src/modules/reader/services/ReaderControls.ts | 60 +++++++++---------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/src/modules/reader/services/ReaderControls.ts b/src/modules/reader/services/ReaderControls.ts index 0820f472..213e621d 100644 --- a/src/modules/reader/services/ReaderControls.ts +++ b/src/modules/reader/services/ReaderControls.ts @@ -378,53 +378,47 @@ export class ReaderControls { return; } + const areContinuousPagerTransitionPagesVisible = + isContinuousReadingModeActive && isATransitionPageVisibleFlag; + const isPreviousTransitionPageVisible = + (!isContinuousReadingModeActive && transitionPageMode === ReaderTransitionPageMode.PREVIOUS) || + areContinuousPagerTransitionPagesVisible; + const isNextTransitionPageVisible = + (!isContinuousReadingModeActive && transitionPageMode === ReaderTransitionPageMode.NEXT) || + areContinuousPagerTransitionPagesVisible; + const shouldOpenPreviousChapter = - isFirstPage && isATransitionPageVisibleFlag && convertedPage === 'previous' && !!previousChapter; + isFirstPage && isPreviousTransitionPageVisible && convertedPage === 'previous' && !!previousChapter; if (shouldOpenPreviousChapter) { openChapter('previous'); return; } const shouldOpenNextChapter = - isLastPage && isATransitionPageVisibleFlag && convertedPage === 'next' && !!nextChapter; + isLastPage && isNextTransitionPageVisible && convertedPage === 'next' && !!nextChapter; if (shouldOpenNextChapter) { openChapter('next'); return; } + const isPreviousMode = convertedPage === 'previous'; + const needToHideTransitionPage = isATransitionPageVisibleFlag && !isContinuousReadingModeActive; - switch (convertedPage) { - case 'previous': - if (isFirstPage) { - setTransitionPageMode(ReaderTransitionPageMode.PREVIOUS); - return; - } - - if (needToHideTransitionPage) { - hideTransitionPage(); - setPageToScrollToIndex(indexOfLastPage); - return; - } - - setPageToScrollToIndex(previousPageIndex); - break; - case 'next': - if (isLastPage) { - setTransitionPageMode(ReaderTransitionPageMode.NEXT); - return; - } - - if (needToHideTransitionPage) { - hideTransitionPage(); - setPageToScrollToIndex(indexOfFirstPage); - return; - } - - setPageToScrollToIndex(nextPageIndex); - break; - default: - throw new Error(`Unexpected "offset" (${page})`); + if (needToHideTransitionPage) { + hideTransitionPage(); + setPageToScrollToIndex(isPreviousMode ? indexOfLastPage : indexOfFirstPage); + return; } + + const needToOpenTransitionPage = isFirstPage || isLastPage; + if (needToOpenTransitionPage) { + setTransitionPageMode( + isPreviousMode ? ReaderTransitionPageMode.PREVIOUS : ReaderTransitionPageMode.NEXT, + ); + return; + } + + setPageToScrollToIndex(isPreviousMode ? previousPageIndex : nextPageIndex); }, [ direction,