From 51468862a25e0061b88ce2ff3628ff8b54e3a404 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Thu, 26 Feb 2026 18:08:21 +0800 Subject: [PATCH] fix(ui): show progress 100% at the last page, closes #3383 (#3390) --- .../readest-app/src/app/reader/components/ProgressInfo.tsx | 5 +++-- apps/readest-app/src/types/view.ts | 2 ++ apps/readest-app/src/utils/progress.ts | 7 ++++++- packages/foliate-js | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/readest-app/src/app/reader/components/ProgressInfo.tsx b/apps/readest-app/src/app/reader/components/ProgressInfo.tsx index 6c6c6b82..4a8de801 100644 --- a/apps/readest-app/src/app/reader/components/ProgressInfo.tsx +++ b/apps/readest-app/src/app/reader/components/ProgressInfo.tsx @@ -46,12 +46,13 @@ const ProgressInfoView: React.FC = ({ : '{current} / {total}' : '{percent}%'; + const { page = 0, pages = 0, atEnd = false } = view?.renderer || {}; const lang = localStorage?.getItem('i18nextLng') || ''; const localize = isVertical && lang.toLowerCase().startsWith('zh'); const pageInfo = bookData?.isFixedLayout ? section : pageinfo; - const progressInfo = formatProgress(pageInfo?.current, pageInfo?.total, template, localize, lang); + const currentPage = atEnd && pageInfo?.total ? pageInfo.total - 1 : pageInfo?.current; + const progressInfo = formatProgress(currentPage, pageInfo?.total, template, localize, lang); - const { page = 0, pages = 0 } = view?.renderer || {}; const current = page; const total = pages; const pagesLeft = Math.max(total - current - 1, 0); diff --git a/apps/readest-app/src/types/view.ts b/apps/readest-app/src/types/view.ts index 39f87846..443f49b6 100644 --- a/apps/readest-app/src/types/view.ts +++ b/apps/readest-app/src/types/view.ts @@ -61,6 +61,8 @@ export interface FoliateView extends HTMLElement { end: number; page: number; pages: number; + atStart: boolean; + atEnd: boolean; containerPosition: number; sideProp: 'width' | 'height'; setAttribute: (name: string, value: string | number) => void; diff --git a/apps/readest-app/src/utils/progress.ts b/apps/readest-app/src/utils/progress.ts index de0518eb..b70649eb 100644 --- a/apps/readest-app/src/utils/progress.ts +++ b/apps/readest-app/src/utils/progress.ts @@ -14,7 +14,12 @@ export function formatProgress( return template .replace('{current}', currentStr) .replace('{total}', totalStr) - .replace('{percent}', (((current + 1) / total) * 100).toFixed(fractionDigits)); + .replace( + '{percent}', + (((current + 1) / total) * 100).toFixed( + current + 1 < total && total > 100 ? fractionDigits : 0, + ), + ); } else { return ''; } diff --git a/packages/foliate-js b/packages/foliate-js index 6f4a5177..53a91489 160000 --- a/packages/foliate-js +++ b/packages/foliate-js @@ -1 +1 @@ -Subproject commit 6f4a5177bc7704a956686e509de2efc3197feef8 +Subproject commit 53a914894a21b8509955cd50cd678b4d25468e17