2023-01-06 17:34:16 +01:00
|
|
|
/*
|
|
|
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
|
|
|
*
|
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
|
|
*/
|
|
|
|
|
|
2024-04-14 15:50:12 +02:00
|
|
|
import List from '@mui/material/List';
|
|
|
|
|
import ListItem from '@mui/material/ListItem';
|
|
|
|
|
import ListItemText from '@mui/material/ListItemText';
|
|
|
|
|
import Switch from '@mui/material/Switch';
|
2023-01-06 17:34:16 +01:00
|
|
|
import MenuItem from '@mui/material/MenuItem';
|
2023-03-23 13:59:32 +01:00
|
|
|
import { useTranslation } from 'react-i18next';
|
2024-01-21 13:33:13 -08:00
|
|
|
import { AllowedMetadataValueTypes, IReaderSettings } from '@/typings';
|
2024-10-05 16:09:34 +02:00
|
|
|
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
2024-01-26 11:51:08 -08:00
|
|
|
import { isHorizontalReaderType } from '@/components/reader/Page.tsx';
|
2024-10-05 16:09:34 +02:00
|
|
|
import { Select } from '@/modules/core/components/inputs/Select.tsx';
|
2023-01-06 17:34:16 +01:00
|
|
|
|
|
|
|
|
interface IProps extends IReaderSettings {
|
2024-03-18 10:35:35 -07:00
|
|
|
setSettingValue: (key: keyof IReaderSettings, value: AllowedMetadataValueTypes, persist?: boolean) => void;
|
2023-01-06 17:34:16 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-28 00:32:02 +02:00
|
|
|
export function ReaderSettingsOptions({
|
2023-02-06 10:06:33 +01:00
|
|
|
staticNav,
|
|
|
|
|
loadNextOnEnding,
|
|
|
|
|
readerType,
|
|
|
|
|
showPageNumber,
|
2023-04-05 13:37:12 +02:00
|
|
|
skipDupChapters,
|
2023-02-06 10:06:33 +01:00
|
|
|
setSettingValue,
|
2023-06-03 20:53:52 +02:00
|
|
|
fitPageToWindow,
|
2024-02-21 02:42:07 +01:00
|
|
|
scalePage,
|
2023-09-27 18:36:47 -04:00
|
|
|
offsetFirstPage,
|
2024-01-21 13:33:13 -08:00
|
|
|
readerWidth,
|
2023-01-06 17:34:16 +01:00
|
|
|
}: IProps) {
|
2023-03-23 13:59:32 +01:00
|
|
|
const { t } = useTranslation();
|
2024-01-26 11:51:08 -08:00
|
|
|
const fitPageToWindowEligible = !isHorizontalReaderType(readerType);
|
2023-01-06 17:34:16 +01:00
|
|
|
return (
|
2024-09-05 00:34:13 +02:00
|
|
|
<List sx={{ pt: 0 }}>
|
2023-03-11 18:05:58 +01:00
|
|
|
<ListItem>
|
2023-03-23 13:59:32 +01:00
|
|
|
<ListItemText primary={t('reader.settings.label.static_navigation')} />
|
2023-12-09 14:16:59 +01:00
|
|
|
<Switch
|
|
|
|
|
edge="end"
|
|
|
|
|
checked={staticNav}
|
|
|
|
|
onChange={(e) => setSettingValue('staticNav', e.target.checked)}
|
|
|
|
|
/>
|
2023-03-11 18:05:58 +01:00
|
|
|
</ListItem>
|
|
|
|
|
<ListItem>
|
2023-03-23 13:59:32 +01:00
|
|
|
<ListItemText primary={t('reader.settings.label.show_page_number')} />
|
2023-12-09 14:16:59 +01:00
|
|
|
<Switch
|
|
|
|
|
edge="end"
|
|
|
|
|
checked={showPageNumber}
|
|
|
|
|
onChange={(e) => setSettingValue('showPageNumber', e.target.checked)}
|
|
|
|
|
/>
|
2023-03-11 18:05:58 +01:00
|
|
|
</ListItem>
|
|
|
|
|
<ListItem>
|
2023-03-23 13:59:32 +01:00
|
|
|
<ListItemText primary={t('reader.settings.label.load_next_chapter')} />
|
2023-12-09 14:16:59 +01:00
|
|
|
<Switch
|
|
|
|
|
edge="end"
|
|
|
|
|
checked={loadNextOnEnding}
|
|
|
|
|
onChange={(e) => setSettingValue('loadNextOnEnding', e.target.checked)}
|
|
|
|
|
/>
|
2023-03-11 18:05:58 +01:00
|
|
|
</ListItem>
|
2023-04-05 13:37:12 +02:00
|
|
|
<ListItem>
|
|
|
|
|
<ListItemText primary={t('reader.settings.label.skip_dup_chapters')} />
|
2023-12-09 14:16:59 +01:00
|
|
|
<Switch
|
|
|
|
|
edge="end"
|
|
|
|
|
checked={skipDupChapters}
|
|
|
|
|
onChange={(e) => setSettingValue('skipDupChapters', e.target.checked)}
|
|
|
|
|
/>
|
2023-04-05 13:37:12 +02:00
|
|
|
</ListItem>
|
2024-01-21 13:33:13 -08:00
|
|
|
{fitPageToWindowEligible && (
|
2023-06-03 20:53:52 +02:00
|
|
|
<ListItem>
|
|
|
|
|
<ListItemText primary={t('reader.settings.label.fit_page_to_window')} />
|
2023-12-09 14:16:59 +01:00
|
|
|
<Switch
|
|
|
|
|
edge="end"
|
|
|
|
|
checked={fitPageToWindow}
|
|
|
|
|
onChange={(e) => setSettingValue('fitPageToWindow', e.target.checked)}
|
|
|
|
|
/>
|
2023-06-03 20:53:52 +02:00
|
|
|
</ListItem>
|
2024-01-21 13:33:13 -08:00
|
|
|
)}
|
2024-02-21 02:42:07 +01:00
|
|
|
{fitPageToWindowEligible && fitPageToWindow && (
|
|
|
|
|
<ListItem>
|
|
|
|
|
<ListItemText primary={t('reader.settings.label.scale_page')} />
|
|
|
|
|
<Switch
|
|
|
|
|
edge="end"
|
|
|
|
|
checked={scalePage}
|
|
|
|
|
onChange={(e) => setSettingValue('scalePage', e.target.checked)}
|
|
|
|
|
/>
|
|
|
|
|
</ListItem>
|
|
|
|
|
)}
|
2024-01-21 13:33:13 -08:00
|
|
|
{(readerType === 'DoubleLTR' || readerType === 'DoubleRTL') && (
|
2023-09-27 18:36:47 -04:00
|
|
|
<ListItem>
|
|
|
|
|
<ListItemText primary={t('reader.settings.label.offset_first_page')} />
|
2023-12-09 14:16:59 +01:00
|
|
|
<Switch
|
|
|
|
|
edge="end"
|
|
|
|
|
checked={offsetFirstPage}
|
|
|
|
|
onChange={(e) => setSettingValue('offsetFirstPage', e.target.checked)}
|
|
|
|
|
/>
|
2023-09-27 18:36:47 -04:00
|
|
|
</ListItem>
|
2024-01-21 13:33:13 -08:00
|
|
|
)}
|
|
|
|
|
{fitPageToWindowEligible && !fitPageToWindow && (
|
|
|
|
|
<NumberSetting
|
|
|
|
|
settingTitle={t('reader.settings.label.reader_width')}
|
|
|
|
|
settingValue={`${readerWidth}%`}
|
|
|
|
|
value={readerWidth}
|
|
|
|
|
minValue={10}
|
|
|
|
|
maxValue={100}
|
2024-01-29 20:55:16 +01:00
|
|
|
defaultValue={50}
|
2024-01-21 13:33:13 -08:00
|
|
|
valueUnit="%"
|
|
|
|
|
showSlider
|
|
|
|
|
handleUpdate={(width: number) => setSettingValue('readerWidth', width)}
|
2024-03-18 10:35:35 -07:00
|
|
|
handleLiveUpdate={(width: number) => setSettingValue('readerWidth', width, false)}
|
2024-01-21 13:33:13 -08:00
|
|
|
listItemTextSx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
2023-03-11 18:05:58 +01:00
|
|
|
<ListItem>
|
2023-03-23 13:59:32 +01:00
|
|
|
<ListItemText primary={t('reader.settings.label.reader_type')} />
|
2023-03-11 18:05:58 +01:00
|
|
|
<Select
|
|
|
|
|
variant="standard"
|
|
|
|
|
value={readerType}
|
|
|
|
|
onChange={(e) => setSettingValue('readerType', e.target.value)}
|
|
|
|
|
sx={{ p: 0 }}
|
|
|
|
|
>
|
2023-03-23 13:59:32 +01:00
|
|
|
<MenuItem value="SingleLTR">{t('reader.settings.reader_type.label.single_page_ltr')}</MenuItem>
|
|
|
|
|
<MenuItem value="SingleRTL">{t('reader.settings.reader_type.label.single_page_rtl')}</MenuItem>
|
2023-03-11 18:05:58 +01:00
|
|
|
{/* <MenuItem value="SingleVertical">
|
2023-01-06 17:34:16 +01:00
|
|
|
Vertical(WIP)
|
|
|
|
|
</MenuItem> */}
|
2023-03-23 13:59:32 +01:00
|
|
|
<MenuItem value="DoubleLTR">{t('reader.settings.reader_type.label.double_page_ltr')}</MenuItem>
|
|
|
|
|
<MenuItem value="DoubleRTL">{t('reader.settings.reader_type.label.double_page_rtl')}</MenuItem>
|
|
|
|
|
<MenuItem value="Webtoon">{t('reader.settings.reader_type.label.webtoon')}</MenuItem>
|
|
|
|
|
<MenuItem value="ContinuesVertical">
|
|
|
|
|
{t('reader.settings.reader_type.label.continuous_vertical')}
|
|
|
|
|
</MenuItem>
|
|
|
|
|
<MenuItem value="ContinuesHorizontalLTR">
|
|
|
|
|
{t('reader.settings.reader_type.label.continuous_horizontal_ltr')}
|
|
|
|
|
</MenuItem>
|
|
|
|
|
<MenuItem value="ContinuesHorizontalRTL">
|
|
|
|
|
{t('reader.settings.reader_type.label.continuous_horizontal_rtl')}
|
|
|
|
|
</MenuItem>
|
2023-03-11 18:05:58 +01:00
|
|
|
</Select>
|
|
|
|
|
</ListItem>
|
|
|
|
|
</List>
|
2023-01-06 17:34:16 +01:00
|
|
|
);
|
|
|
|
|
}
|