+
{{item.name}} ({{libraryNames[item.libraryId]}})
@@ -21,13 +21,13 @@
-
+
-
+
diff --git a/UI/Web/src/app/manga-reader/_components/canvas-renderer/canvas-renderer.component.ts b/UI/Web/src/app/manga-reader/_components/canvas-renderer/canvas-renderer.component.ts
index cfc3ec99d..b759d5f68 100644
--- a/UI/Web/src/app/manga-reader/_components/canvas-renderer/canvas-renderer.component.ts
+++ b/UI/Web/src/app/manga-reader/_components/canvas-renderer/canvas-renderer.component.ts
@@ -251,4 +251,8 @@ export class CanvasRendererComponent implements OnInit, AfterViewInit, OnDestroy
this.imageHeight.emit(this.canvas.nativeElement.height);
this.cdRef.markForCheck();
}
+
+ getBookmarkPageCount(): number {
+ return 1;
+ }
}
diff --git a/UI/Web/src/app/manga-reader/_components/double-renderer/double-renderer.component.ts b/UI/Web/src/app/manga-reader/_components/double-renderer/double-renderer.component.ts
index 4243531c0..302036754 100644
--- a/UI/Web/src/app/manga-reader/_components/double-renderer/double-renderer.component.ts
+++ b/UI/Web/src/app/manga-reader/_components/double-renderer/double-renderer.component.ts
@@ -282,6 +282,10 @@ export class DoubleRendererComponent implements OnInit, OnDestroy, ImageRenderer
}
reset(): void {}
+ getBookmarkPageCount(): number {
+ return this.shouldRenderDouble() ? 2 : 1;
+ }
+
debugLog(message: string, extraData?: any) {
if (!(this.debugMode & DEBUG_MODES.Logs)) return;
diff --git a/UI/Web/src/app/manga-reader/_components/double-reverse-renderer/double-reverse-renderer.component.ts b/UI/Web/src/app/manga-reader/_components/double-reverse-renderer/double-reverse-renderer.component.ts
index f0db97b85..08b236a70 100644
--- a/UI/Web/src/app/manga-reader/_components/double-reverse-renderer/double-reverse-renderer.component.ts
+++ b/UI/Web/src/app/manga-reader/_components/double-reverse-renderer/double-reverse-renderer.component.ts
@@ -296,6 +296,10 @@ export class DoubleReverseRendererComponent implements OnInit, OnDestroy, ImageR
}
reset(): void {}
+ getBookmarkPageCount(): number {
+ return this.shouldRenderDouble() ? 2 : 1;
+ }
+
debugLog(message: string, extraData?: any) {
if (!(this.debugMode & DEBUG_MODES.Logs)) return;
diff --git a/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts b/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts
index 9a43f5c7b..f16bcb3c2 100644
--- a/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts
+++ b/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts
@@ -627,11 +627,14 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy {
* Gets a page from cache else gets a brand new Image
* @param pageNum Page Number to load
* @param forceNew Forces to fetch a new image
- * @param chapterId ChapterId to fetch page from. Defaults to current chapterId
+ * @param chapterId ChapterId to fetch page from. Defaults to current chapterId. Not used when in bookmark mode
* @returns
*/
getPage(pageNum: number, chapterId: number = this.chapterId, forceNew: boolean = false) {
- let img = this.cachedImages.find(img => this.readerService.imageUrlToPageNum(img.src) === pageNum
+
+ let img = undefined;
+ if (this.bookmarkMode) img = this.cachedImages.find(img => this.readerService.imageUrlToPageNum(img.src) === pageNum);
+ else img = this.cachedImages.find(img => this.readerService.imageUrlToPageNum(img.src) === pageNum
&& (this.readerService.imageUrlToChapterId(img.src) == chapterId || this.readerService.imageUrlToChapterId(img.src) === -1)
);
if (!img || forceNew) {
@@ -1273,7 +1276,8 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy {
if (this.bookmarkMode) return;
const pageNum = this.pageNum;
- const isDouble = this.layoutMode === LayoutMode.Double || this.layoutMode === LayoutMode.DoubleReversed;
+ const isDouble = Math.max(this.canvasRenderer.getBookmarkPageCount(), this.singleRenderer.getBookmarkPageCount(),
+ this.doubleRenderer.getBookmarkPageCount(), this.doubleReverseRenderer.getBookmarkPageCount()) > 1;
if (this.CurrentPageBookmarked) {
let apis = [this.readerService.unbookmark(this.seriesId, this.volumeId, this.chapterId, pageNum)];
diff --git a/UI/Web/src/app/manga-reader/_components/single-renderer/single-renderer.component.ts b/UI/Web/src/app/manga-reader/_components/single-renderer/single-renderer.component.ts
index 89228bf7b..7f5137289 100644
--- a/UI/Web/src/app/manga-reader/_components/single-renderer/single-renderer.component.ts
+++ b/UI/Web/src/app/manga-reader/_components/single-renderer/single-renderer.component.ts
@@ -143,4 +143,8 @@ export class SingleRendererComponent implements OnInit, OnDestroy, ImageRenderer
return 1;
}
reset(): void {}
+
+ getBookmarkPageCount(): number {
+ return 1;
+ }
}
diff --git a/UI/Web/src/app/manga-reader/_models/renderer.ts b/UI/Web/src/app/manga-reader/_models/renderer.ts
index 52da21122..c6c2da799 100644
--- a/UI/Web/src/app/manga-reader/_models/renderer.ts
+++ b/UI/Web/src/app/manga-reader/_models/renderer.ts
@@ -55,4 +55,8 @@ export interface ImageRenderer {
* This should reset any needed state, but not unset the image.
*/
reset(): void;
+ /**
+ * Returns the number of pages that are currently rendererd on screen and thus should be bookmarked.
+ */
+ getBookmarkPageCount(): number;
}
\ No newline at end of file
diff --git a/UI/Web/src/app/metadata-filter/metadata-filter.component.ts b/UI/Web/src/app/metadata-filter/metadata-filter.component.ts
index d3e85596d..c45963c4d 100644
--- a/UI/Web/src/app/metadata-filter/metadata-filter.component.ts
+++ b/UI/Web/src/app/metadata-filter/metadata-filter.component.ts
@@ -3,7 +3,7 @@ import { FormControl, FormGroup, Validators } from '@angular/forms';
import { NgbCollapse } from '@ng-bootstrap/ng-bootstrap';
import { distinctUntilChanged, forkJoin, map, Observable, of, ReplaySubject, Subject, takeUntil } from 'rxjs';
import { FilterUtilitiesService } from '../shared/_services/filter-utilities.service';
-import { UtilityService } from '../shared/_services/utility.service';
+import { Breakpoint, UtilityService } from '../shared/_services/utility.service';
import { TypeaheadSettings } from '../typeahead/_models/typeahead-settings';
import { CollectionTag } from '../_models/collection-tag';
import { Genre } from '../_models/metadata/genre';
@@ -630,6 +630,11 @@ export class MetadataFilterComponent implements OnInit, OnDestroy {
apply() {
this.applyFilter.emit({filter: this.filter, isFirst: this.updateApplied === 0});
this.updateApplied++;
+
+ if (this.utilityService.getActiveBreakpoint() === Breakpoint.Mobile) {
+ this.toggleSelected();
+ }
+
this.cdRef.markForCheck();
}
diff --git a/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.html b/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.html
index 6e5dad93f..7534b3a9d 100644
--- a/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.html
+++ b/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.html
@@ -4,8 +4,8 @@
Top Readers
diff --git a/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.ts b/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.ts
index 49d101d8a..b66d247a4 100644
--- a/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.ts
+++ b/UI/Web/src/app/statistics/_components/read-by-day-and/read-by-day-and.component.ts
@@ -6,6 +6,7 @@ import { Member } from 'src/app/_models/auth/member';
import { MemberService } from 'src/app/_services/member.service';
import { StatisticsService } from 'src/app/_services/statistics.service';
import { PieDataItem } from '../../_models/pie-data-item';
+import { TimePeriods } from '../top-readers/top-readers.component';
const options: Intl.DateTimeFormatOptions = { month: "short", day: "numeric" };
const mangaFormatPipe = new MangaFormatPipe();
@@ -26,14 +27,16 @@ export class ReadByDayAndComponent implements OnInit, OnDestroy {
view: [number, number] = [0, 400];
formGroup: FormGroup = new FormGroup({
'users': new FormControl(-1, []),
+ 'days': new FormControl(TimePeriods[0].value, []),
});
users$: Observable