This commit is contained in:
kanjieater 2025-12-01 14:18:37 +08:00 committed by GitHub
commit 778d3e5d40
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 21 deletions

View file

@ -9,20 +9,12 @@ export function buildSpreads(pages: PageDtoWithUrl[], pageLayout: PagedReaderLay
if (pageLayout !== PagedReaderLayout.SINGLE_PAGE) {
const spreads = [] as PageDtoWithUrl[][]
const pagesClone = cloneDeep(pages)
let lastPages = undefined
if (pageLayout === PagedReaderLayout.DOUBLE_PAGES) {
const firstPage = pagesClone.shift() as PageDtoWithUrl
if (isPageLandscape(firstPage))
spreads.push([firstPage] as PageDtoWithUrl[])
else
spreads.push([createEmptyPage(firstPage), firstPage] as PageDtoWithUrl[])
if (pagesClone.length > 0) {
const lastPage = pagesClone.pop() as PageDtoWithUrl
if(isPageLandscape(lastPage))
lastPages = [lastPage] as PageDtoWithUrl[]
else
lastPages = [lastPage, createEmptyPage(lastPage)] as PageDtoWithUrl[]
}
}
while (pagesClone.length > 0) {
const p = pagesClone.shift() as PageDtoWithUrl
@ -30,19 +22,23 @@ export function buildSpreads(pages: PageDtoWithUrl[], pageLayout: PagedReaderLay
spreads.push([p])
} else {
if (pagesClone.length > 0) {
const p2 = pagesClone.shift() as PageDtoWithUrl
if (isPageLandscape(p2)) {
spreads.push([p, createEmptyPage(p)])
spreads.push([p2])
const [prevPage] = spreads.length > 0 ? (spreads[spreads.length - 1] as PageDtoWithUrl[]) : []
if (pageLayout === PagedReaderLayout.DOUBLE_NO_COVER && isPageLandscape(prevPage)){
spreads.push([createEmptyPage(p), p])
} else {
spreads.push([p, p2])
const p2 = pagesClone.shift() as PageDtoWithUrl
if (isPageLandscape(p2)) {
spreads.push([p, createEmptyPage(p)])
spreads.push([p2])
} else {
spreads.push([p, p2])
}
}
} else {
spreads.push([p, createEmptyPage(p)])
}
}
}
if (lastPages) spreads.push(lastPages)
return spreads
} else {
return pages.map(p => [p])

View file

@ -95,12 +95,12 @@ describe('Double Pages', () => {
] as PageDtoWithUrl[]
const spreads = buildSpreads(pages, pageLayout)
expect(spreads.length).toEqual(4)
// Expecting [E, 1], [2, 3], [4, 5]
expect(spreads.length).toEqual(3)
expect(spreads[0].length).toEqual(2)
expect(spreads[0][1].number).toEqual(1)
expect(spreads[0][0].number).toEqual(0) // empty page
expect(spreads[0][1].number).toEqual(1)
expect(spreads[1].length).toEqual(2)
expect(spreads[1][0].number).toEqual(2)
@ -108,10 +108,7 @@ describe('Double Pages', () => {
expect(spreads[2].length).toEqual(2)
expect(spreads[2][0].number).toEqual(4)
expect(spreads[3].length).toEqual(2)
expect(spreads[3][0].number).toEqual(5)
expect(spreads[3][1].number).toEqual(0) // empty page
expect(spreads[2][1].number).toEqual(5)
})
})