Extract reader pages wrapper styling
This commit is contained in:
@@ -129,7 +129,7 @@ const BaseReaderPage = ({
|
|||||||
...getImageMarginStyling(doublePage, position),
|
...getImageMarginStyling(doublePage, position),
|
||||||
}}
|
}}
|
||||||
imgStyle={{
|
imgStyle={{
|
||||||
...getReaderImageStyling(readingMode, shouldStretchPage, pageScaleMode, doublePage, readerWidth, true),
|
...getReaderImageStyling(readingMode, shouldStretchPage, pageScaleMode, doublePage, readerWidth),
|
||||||
display: 'block',
|
display: 'block',
|
||||||
...applyStyles(!display, {
|
...applyStyles(!display, {
|
||||||
display: 'none',
|
display: 'none',
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import { memo, ReactNode, useCallback, useEffect, useMemo, useRef } from 'react';
|
import { memo, ReactNode, useCallback, useEffect, useMemo, useRef } from 'react';
|
||||||
import Box, { BoxProps } from '@mui/material/Box';
|
import Box, { BoxProps } from '@mui/material/Box';
|
||||||
import { ReaderService } from '@/modules/reader/services/ReaderService.ts';
|
import { ReaderService } from '@/modules/reader/services/ReaderService.ts';
|
||||||
import { getReaderImageStyling, getPageIndexesToLoad } from '@/modules/reader/utils/ReaderPager.utils.tsx';
|
import { getPageIndexesToLoad, getReaderImageWrapperStyling } from '@/modules/reader/utils/ReaderPager.utils.tsx';
|
||||||
import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types.ts';
|
import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types.ts';
|
||||||
import { IReaderSettings, ReaderPagerProps, ReaderTransitionPageMode } from '@/modules/reader/types/Reader.types.ts';
|
import { IReaderSettings, ReaderPagerProps, ReaderTransitionPageMode } from '@/modules/reader/types/Reader.types.ts';
|
||||||
import { ReaderTransitionPage } from '@/modules/reader/components/viewer/ReaderTransitionPage.tsx';
|
import { ReaderTransitionPage } from '@/modules/reader/components/viewer/ReaderTransitionPage.tsx';
|
||||||
@@ -70,7 +70,7 @@ const BaseBasePager = ({
|
|||||||
{...slots?.boxProps}
|
{...slots?.boxProps}
|
||||||
sx={[
|
sx={[
|
||||||
...(Array.isArray(slots?.boxProps?.sx) ? (slots?.boxProps?.sx ?? []) : [slots?.boxProps?.sx]),
|
...(Array.isArray(slots?.boxProps?.sx) ? (slots?.boxProps?.sx ?? []) : [slots?.boxProps?.sx]),
|
||||||
getReaderImageStyling(readingMode, shouldStretchPage, pageScaleMode, false, readerWidth),
|
getReaderImageWrapperStyling(readingMode, shouldStretchPage, pageScaleMode, readerWidth),
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<ReaderTransitionPage type={ReaderTransitionPageMode.PREVIOUS} />
|
<ReaderTransitionPage type={ReaderTransitionPageMode.PREVIOUS} />
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ type CSSObject = ReturnType<Theme['applyStyles']>;
|
|||||||
|
|
||||||
const getPageWidth = (
|
const getPageWidth = (
|
||||||
pageScaleMode: IReaderSettings['pageScaleMode'],
|
pageScaleMode: IReaderSettings['pageScaleMode'],
|
||||||
isDoublePage?: boolean,
|
isDoublePage: boolean,
|
||||||
readerWidth?: IReaderSettings['readerWidth'],
|
readerWidth: IReaderSettings['readerWidth'],
|
||||||
shouldStretchPage?: IReaderSettings['shouldStretchPage'],
|
shouldStretchPage: IReaderSettings['shouldStretchPage'],
|
||||||
isImage?: boolean,
|
isImage: boolean,
|
||||||
): string => {
|
): string => {
|
||||||
// only return 50% in case pages should get stretched, otherwise, pages might unintentionally shrink in size (e.g. 2 pages with different dimensions, the bigger page will shrink due to taking up more than 50%)
|
// only return 50% in case pages should get stretched, otherwise, pages might unintentionally shrink in size (e.g. 2 pages with different dimensions, the bigger page will shrink due to taking up more than 50%)
|
||||||
if (isImage && isDoublePage && shouldStretchPage) {
|
if (isImage && isDoublePage && shouldStretchPage) {
|
||||||
@@ -137,22 +137,12 @@ export const getImagePlaceholderStyling = (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getReaderImageStyling = (
|
const getReaderDimensionStyling = (
|
||||||
|
width: string,
|
||||||
readingMode: IReaderSettings['readingMode'],
|
readingMode: IReaderSettings['readingMode'],
|
||||||
shouldStretchPage: IReaderSettings['shouldStretchPage'],
|
shouldStretchPage: IReaderSettings['shouldStretchPage'],
|
||||||
pageScaleMode: IReaderSettings['pageScaleMode'],
|
pageScaleMode: IReaderSettings['pageScaleMode'],
|
||||||
isDoublePage?: boolean,
|
|
||||||
readerWidth?: IReaderSettings['readerWidth'],
|
|
||||||
isImage?: boolean,
|
|
||||||
): CSSObject => {
|
): CSSObject => {
|
||||||
const width = getPageWidth(pageScaleMode, isDoublePage, readerWidth, shouldStretchPage, isImage);
|
|
||||||
|
|
||||||
// setting the "width" of the wrapper is required for being able to properly size the image placeholders
|
|
||||||
const staticReaderWidthForWrapper = applyStyles(!isImage && shouldApplyReaderWidth(readerWidth, pageScaleMode), {
|
|
||||||
width,
|
|
||||||
});
|
|
||||||
const readerWidthStretchForWrapper = applyStyles(!isImage && shouldStretchPage, { width: '100%' });
|
|
||||||
|
|
||||||
switch (pageScaleMode) {
|
switch (pageScaleMode) {
|
||||||
case ReaderPageScaleMode.WIDTH:
|
case ReaderPageScaleMode.WIDTH:
|
||||||
return {
|
return {
|
||||||
@@ -162,9 +152,7 @@ export const getReaderImageStyling = (
|
|||||||
}),
|
}),
|
||||||
...applyStyles(shouldStretchPage, {
|
...applyStyles(shouldStretchPage, {
|
||||||
minWidth: width,
|
minWidth: width,
|
||||||
...readerWidthStretchForWrapper,
|
|
||||||
}),
|
}),
|
||||||
...staticReaderWidthForWrapper,
|
|
||||||
maxWidth: width,
|
maxWidth: width,
|
||||||
};
|
};
|
||||||
case ReaderPageScaleMode.HEIGHT:
|
case ReaderPageScaleMode.HEIGHT:
|
||||||
@@ -197,9 +185,7 @@ export const getReaderImageStyling = (
|
|||||||
minWidth: width,
|
minWidth: width,
|
||||||
minHeight: 'unset',
|
minHeight: 'unset',
|
||||||
}),
|
}),
|
||||||
...readerWidthStretchForWrapper,
|
|
||||||
}),
|
}),
|
||||||
...staticReaderWidthForWrapper,
|
|
||||||
maxWidth: width,
|
maxWidth: width,
|
||||||
maxHeight: `100%`,
|
maxHeight: `100%`,
|
||||||
};
|
};
|
||||||
@@ -210,6 +196,49 @@ export const getReaderImageStyling = (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getReaderImageWrapperStyling = (
|
||||||
|
readingMode: IReaderSettings['readingMode'],
|
||||||
|
shouldStretchPage: IReaderSettings['shouldStretchPage'],
|
||||||
|
pageScaleMode: IReaderSettings['pageScaleMode'],
|
||||||
|
readerWidth: IReaderSettings['readerWidth'],
|
||||||
|
): CSSObject => {
|
||||||
|
const width = getPageWidth(pageScaleMode, false, readerWidth, shouldStretchPage, false);
|
||||||
|
const readerImageStyling = getReaderDimensionStyling(width, readingMode, shouldStretchPage, pageScaleMode);
|
||||||
|
|
||||||
|
switch (pageScaleMode) {
|
||||||
|
case ReaderPageScaleMode.WIDTH:
|
||||||
|
case ReaderPageScaleMode.SCREEN:
|
||||||
|
return {
|
||||||
|
...readerImageStyling,
|
||||||
|
...applyStyles(shouldStretchPage, {
|
||||||
|
width: '100%',
|
||||||
|
}),
|
||||||
|
// setting the "width" of the wrapper is required for being able to properly size the image placeholders
|
||||||
|
...applyStyles(shouldApplyReaderWidth(readerWidth, pageScaleMode), {
|
||||||
|
width,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
case ReaderPageScaleMode.HEIGHT:
|
||||||
|
case ReaderPageScaleMode.ORIGINAL:
|
||||||
|
return {
|
||||||
|
...readerImageStyling,
|
||||||
|
};
|
||||||
|
default:
|
||||||
|
throw new Error(`Unexpected "PageScaleMode" (${pageScaleMode})`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getReaderImageStyling = (
|
||||||
|
readingMode: IReaderSettings['readingMode'],
|
||||||
|
shouldStretchPage: IReaderSettings['shouldStretchPage'],
|
||||||
|
pageScaleMode: IReaderSettings['pageScaleMode'],
|
||||||
|
isDoublePage: boolean,
|
||||||
|
readerWidth: IReaderSettings['readerWidth'],
|
||||||
|
): CSSObject => {
|
||||||
|
const width = getPageWidth(pageScaleMode, isDoublePage, readerWidth, shouldStretchPage, true);
|
||||||
|
return getReaderDimensionStyling(width, readingMode, shouldStretchPage, pageScaleMode);
|
||||||
|
};
|
||||||
|
|
||||||
export const getImageMarginStyling = (doublePage: boolean, objectFitPosition?: 'left' | 'right'): CSSObject => ({
|
export const getImageMarginStyling = (doublePage: boolean, objectFitPosition?: 'left' | 'right'): CSSObject => ({
|
||||||
m: 'auto',
|
m: 'auto',
|
||||||
...applyStyles(doublePage, {
|
...applyStyles(doublePage, {
|
||||||
|
|||||||
Reference in New Issue
Block a user