mirror of
https://github.com/gotson/komga.git
synced 2025-12-20 23:45:11 +01:00
fix(webreader): incorrect double pages display
This commit is contained in:
parent
3e1bf89bdb
commit
ece981345f
2 changed files with 63 additions and 10 deletions
|
|
@ -1,21 +1,18 @@
|
|||
import {PageDtoWithUrl} from "@/types/komga-books"
|
||||
import {PagedReaderLayout} from "@/types/enum-reader"
|
||||
import {isPageLandscape} from "@/functions/page"
|
||||
import {cloneDeep, drop, dropRight} from 'lodash'
|
||||
import {cloneDeep} from 'lodash'
|
||||
|
||||
|
||||
export function buildSpreads(pages: PageDtoWithUrl[], pageLayout: PagedReaderLayout): PageDtoWithUrl[][] {
|
||||
if (pages.length === 0) return []
|
||||
if (pageLayout !== PagedReaderLayout.SINGLE_PAGE) {
|
||||
const spreads = []
|
||||
let pagesClone: PageDtoWithUrl[]
|
||||
let lastPage = undefined
|
||||
const spreads = [] as PageDtoWithUrl[][]
|
||||
const pagesClone = cloneDeep(pages)
|
||||
let lastPages = undefined
|
||||
if (pageLayout === PagedReaderLayout.DOUBLE_PAGES) {
|
||||
spreads.push([pages[0]])
|
||||
pagesClone = drop(pages)
|
||||
if (pagesClone.length > 0) lastPage = dropRight(pagesClone)
|
||||
} else {
|
||||
pagesClone = cloneDeep(pages)
|
||||
spreads.push([pagesClone.shift()] as PageDtoWithUrl[])
|
||||
if (pagesClone.length > 0) lastPages = [pagesClone.pop()] as PageDtoWithUrl[]
|
||||
}
|
||||
while (pagesClone.length > 0) {
|
||||
const p = pagesClone.shift() as PageDtoWithUrl
|
||||
|
|
@ -35,7 +32,7 @@ export function buildSpreads(pages: PageDtoWithUrl[], pageLayout: PagedReaderLay
|
|||
}
|
||||
}
|
||||
}
|
||||
if (lastPage) spreads.push(lastPage)
|
||||
if (lastPages) spreads.push(lastPages)
|
||||
return spreads
|
||||
} else {
|
||||
return pages.map(p => [p])
|
||||
|
|
|
|||
|
|
@ -52,6 +52,62 @@ describe("Double Pages", () => {
|
|||
expect(spreads[0].length).toEqual(1)
|
||||
expect(spreads[0][0].number).toEqual(1)
|
||||
})
|
||||
|
||||
test("given even pages then it should return correct spreads", () => {
|
||||
const pages = [
|
||||
{number: 1} as PageDtoWithUrl,
|
||||
{number: 2} as PageDtoWithUrl,
|
||||
{number: 3} as PageDtoWithUrl,
|
||||
{number: 4} as PageDtoWithUrl,
|
||||
{number: 5} as PageDtoWithUrl,
|
||||
{number: 6} as PageDtoWithUrl,
|
||||
] as PageDtoWithUrl[]
|
||||
|
||||
const spreads = buildSpreads(pages, pageLayout)
|
||||
|
||||
expect(spreads.length).toEqual(4)
|
||||
|
||||
expect(spreads[0].length).toEqual(1)
|
||||
expect(spreads[0][0].number).toEqual(1)
|
||||
|
||||
expect(spreads[1].length).toEqual(2)
|
||||
expect(spreads[1][0].number).toEqual(2)
|
||||
expect(spreads[1][1].number).toEqual(3)
|
||||
|
||||
expect(spreads[2].length).toEqual(2)
|
||||
expect(spreads[2][0].number).toEqual(4)
|
||||
expect(spreads[2][1].number).toEqual(5)
|
||||
|
||||
expect(spreads[3].length).toEqual(1)
|
||||
expect(spreads[3][0].number).toEqual(6)
|
||||
})
|
||||
|
||||
test("given odd pages then it should return correct spreads", () => {
|
||||
const pages = [
|
||||
{number: 1} as PageDtoWithUrl,
|
||||
{number: 2} as PageDtoWithUrl,
|
||||
{number: 3} as PageDtoWithUrl,
|
||||
{number: 4} as PageDtoWithUrl,
|
||||
{number: 5} as PageDtoWithUrl,
|
||||
] as PageDtoWithUrl[]
|
||||
|
||||
const spreads = buildSpreads(pages, pageLayout)
|
||||
|
||||
expect(spreads.length).toEqual(4)
|
||||
|
||||
expect(spreads[0].length).toEqual(1)
|
||||
expect(spreads[0][0].number).toEqual(1)
|
||||
|
||||
expect(spreads[1].length).toEqual(2)
|
||||
expect(spreads[1][0].number).toEqual(2)
|
||||
expect(spreads[1][1].number).toEqual(3)
|
||||
|
||||
expect(spreads[2].length).toEqual(1)
|
||||
expect(spreads[2][0].number).toEqual(4)
|
||||
|
||||
expect(spreads[3].length).toEqual(1)
|
||||
expect(spreads[3][0].number).toEqual(5)
|
||||
})
|
||||
})
|
||||
|
||||
describe("Double Pages No Cover", () => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue