Skip to content

Commit 34bb8c1

Browse files
authored
Merge branch 'master' into fix/incorrect-redirect-after-delete-v2
2 parents f7d8df0 + 07c1d3a commit 34bb8c1

29 files changed

Lines changed: 503 additions & 253 deletions

File tree

src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const RestoreConfirmationDialog: FunctionComponent<IProps> = ({ open, onClose, o
2626
</DialogTitle>
2727

2828
<DialogContent>
29-
<DialogContentText>
29+
<DialogContentText sx={{ whiteSpace: 'pre-line' }}>
3030
{globalize.translate('MessageRestoreDisclaimer')}
3131
</DialogContentText>
3232
</DialogContent>

src/components/cardbuilder/card.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,11 @@ button::-moz-focus-inner {
448448
z-index: 1;
449449
padding: 0.75em;
450450
font-size: 88%;
451+
452+
/* The "modern" layout needs additional specificity to prevent MUI styles from overriding */
453+
&.paper-icon-button-light {
454+
color: rgba(255, 255, 255, 0.76);
455+
}
451456
}
452457

453458
.cardOverlayButton-br {

src/components/metadataEditor/metadataEditor.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ function onSubmit(e) {
142142
Album: form.querySelector('#txtAlbum').value,
143143
AlbumArtists: getAlbumArtists(form),
144144
ArtistItems: getArtists(form),
145+
SeriesName: form.querySelector('#txtseriesName').value,
145146
Overview: form.querySelector('#txtOverview').value,
146147
Status: form.querySelector('#selectStatus').value,
147148
AirDays: getSelectedAirDays(form),
@@ -580,6 +581,12 @@ function setFieldVisibilities(context, item) {
580581
hideElement('#fldCriticRating', context);
581582
}
582583

584+
if (item.Type === BaseItemKind.Book) {
585+
showElement('#seriesName', context);
586+
} else {
587+
hideElement('#seriesName', context);
588+
}
589+
583590
if (item.Type === 'Series') {
584591
showElement('#fldStatus', context);
585592
showElement('#fldAirDays', context);
@@ -819,6 +826,10 @@ function fillItemInfo(context, item, parentalRatingOptions) {
819826

820827
context.querySelector('#selectDisplayOrder').value = item.DisplayOrder || '';
821828

829+
if (item.Type == 'Book') {
830+
context.querySelector('#txtseriesName').value = item.SeriesName || '';
831+
}
832+
822833
context.querySelector('#txtArtist').value = (item.ArtistItems || []).map(function (a) {
823834
return a.Name;
824835
}).join(';');

src/components/metadataEditor/metadataEditor.template.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ <h3 class="formDialogHeaderTitle">
6060
<input is="emby-input" id="txtAlbumArtist" type="text" label="${LabelAlbumArtists}" />
6161
<div class="fieldDescription">${LabelArtistsHelp}</div>
6262
</div>
63+
<div id="seriesName" class="hide inputContainer">
64+
<input is="emby-input" id="txtseriesName" type="text" label="${SeriesName}" aria-label="${SeriesName}" />
65+
</div>
6366
<div id="fldAlbum" class="hide inputContainer">
6467
<input is="emby-input" id="txtAlbum" type="text" label="${LabelAlbum}" />
6568
</div>

src/plugins/bookPlayer/BookOsd/BookOsd.scss

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
z-index: 1002;
55
display: flex;
66
justify-content: space-between;
7+
pointer-events: none;
78
flex-direction: column;
89
}
910

@@ -14,6 +15,7 @@
1415
height: 5vh;
1516
padding: 0 0.8vw;
1617
background-color: var(--jf-palette-AppBar-defaultBg);
18+
pointer-events: auto;
1719
}
1820

1921
// TODO disable landscape on mobile devices
@@ -23,6 +25,10 @@
2325
}
2426
}
2527

28+
.bookOsdSpacer {
29+
flex: 1;
30+
}
31+
2632
.bookOsdTop {
2733
padding-top: env(safe-area-inset-top);
2834
}
@@ -31,10 +37,6 @@
3137
padding-bottom: env(safe-area-inset-bottom);
3238
}
3339

34-
.bookOsdMargin {
35-
margin-left: auto;
36-
}
37-
3840
.bookOsdTitle {
3941
font-size: 1.1rem;
4042
margin-left: 0.35rem;

src/plugins/bookPlayer/BookOsd/BookOsd.tsx

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,57 @@ import React, { type FC, useCallback, useState } from 'react';
33
import './BookOsd.scss';
44
import IconButton from '../../../elements/emby-button/IconButton';
55
import globalize from 'lib/globalize';
6+
import * as userSettings from '../../../scripts/settings/userSettings';
7+
import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client';
68

79
interface BookOsdProps {
8-
title: string;
10+
item: BaseItemDto;
911
onExit: () => void;
1012
onPrevious: () => void;
1113
onNext: () => void;
1214
onOpenTableOfContents?: () => void;
1315
onRotateTheme?: () => void;
1416
onDecreaseFontSize?: () => void;
1517
onIncreaseFontSize?: () => void;
18+
onToggleDirection?: () => void;
19+
onToggleLayout?: () => void;
1620
onToggleFullscreen?: () => void;
1721
}
1822

23+
interface ComicsPlayerSettings {
24+
langDir?: string;
25+
pagesPerView?: number;
26+
}
27+
1928
const BookOsd: FC<BookOsdProps> = ({
20-
title,
29+
item,
2130
onExit,
2231
onPrevious,
2332
onNext,
2433
onOpenTableOfContents,
2534
onRotateTheme,
2635
onDecreaseFontSize,
2736
onIncreaseFontSize,
37+
onToggleDirection,
38+
onToggleLayout,
2839
onToggleFullscreen
2940
}) => {
41+
const settings = userSettings.getComicsPlayerSettings(item.Id!) as ComicsPlayerSettings;
42+
43+
const [direction, setDirection] = useState(settings.langDir === 'rtl');
44+
const [layout, setLayout] = useState(settings.pagesPerView === 2);
3045
const [fullscreen, setFullscreen] = useState(false);
3146

47+
const onClickDirection = useCallback(() => {
48+
onToggleDirection?.();
49+
setDirection(state => !state);
50+
}, [onToggleDirection]);
51+
52+
const onClickLayout = useCallback(() => {
53+
onToggleLayout?.();
54+
setLayout(state => !state);
55+
}, [onToggleLayout]);
56+
3257
const onClickFullscreen = useCallback(() => {
3358
onToggleFullscreen?.();
3459
setFullscreen(state => !state);
@@ -38,19 +63,19 @@ const BookOsd: FC<BookOsdProps> = ({
3863
<div className='bookOsd'>
3964
<div className='bookOsdRow bookOsdTop'>
4065
<IconButton onClick={onExit} icon='arrow_back' title={globalize.translate('ButtonBack')} />
41-
<span className='bookOsdTitle'>{title}</span>
66+
<span className='bookOsdTitle'>{item.Name}</span>
4267
</div>
4368

4469
<div className='bookOsdRow bookOsdBottom'>
4570
<IconButton onClick={onPrevious} icon='navigate_before' title={globalize.translate('Previous')} />
4671
<IconButton onClick={onNext} icon='navigate_next' title={globalize.translate('Next')} />
72+
<div className='bookOsdSpacer' />
4773

4874
{onOpenTableOfContents && (
4975
<IconButton
5076
onClick={onOpenTableOfContents}
5177
icon='toc'
5278
title={globalize.translate('TableOfContents')}
53-
className='bookOsdMargin'
5479
/>
5580
)}
5681

@@ -78,6 +103,22 @@ const BookOsd: FC<BookOsdProps> = ({
78103
/>
79104
)}
80105

106+
{onToggleDirection && (
107+
<IconButton
108+
onClick={onClickDirection}
109+
icon={direction ? 'arrow_circle_left' : 'arrow_circle_right'}
110+
title={globalize.translate(direction ? 'ViewRightToLeft' : 'ViewLeftToRight')}
111+
/>
112+
)}
113+
114+
{onToggleLayout && (
115+
<IconButton
116+
onClick={onClickLayout}
117+
icon={layout ? 'import_contacts' : 'devices_fold'}
118+
title={globalize.translate(layout ? 'ViewDoublePage' : 'ViewSinglePage')}
119+
/>
120+
)}
121+
81122
{onToggleFullscreen && (
82123
<IconButton
83124
onClick={onClickFullscreen}

src/plugins/bookPlayer/plugin.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,7 @@ export class BookPlayer {
192192
this.rendition?.on('keydown', this.onWindowKeyDown);
193193

194194
if (browser.safari) {
195-
const player = document.querySelector('.bookOsd');
196-
this.addSwipeGestures(player);
195+
this.addSwipeGestures(document.querySelector('#bookPlayerContainer'));
197196
} else {
198197
this.rendition?.on('rendered', (e, i) => this.addSwipeGestures(i.document.documentElement));
199198
}
@@ -298,7 +297,7 @@ export class BookPlayer {
298297

299298
this.mediaElement = elem;
300299
this.unmountBookOsd = renderComponent(BookOsd, {
301-
title: options.items[0].Name,
300+
item: options.items[0],
302301
onExit: this.onDialogClosed,
303302
onPrevious: this.previous,
304303
onNext: this.next,

0 commit comments

Comments
 (0)