mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-06-03 21:54:47 -04:00
* Instead of augmenting prefetcher to move across chapter bounds, let's try to instead just load 5 images (which the browser will cache) from next/prev so when it loads, it's much faster. * Trialing loading next/prev chapters 5 pages to have better next page loading experience. * Tweaked GetChapterInfo API to actually apply conditional includeDimensions parameter. * added a basic language file for upcoming work * Moved the bottom menu up a bit for iOS devices with handlebars. * Fixed fit to width on phones still having a horizontal scrollbar * Fixed a bug where there is extra space under the image when fit to width and on a phone due to pagination going to far. * Changed which variable we use for right pagination calculation * Fixing fit to height - Fixing height calc to account for horizontal scroll bar height. * Added a comment for the height scrollbar fix * Adding screenfull package # Added: - Added screenfull package to handle cross-platform browser fullscreen code # Removed: - Removed custom fullscreen code * Fixed a bug where switching from webtoon reader to other layout modes wouldn't render anything. Webtoon continuous scroll down is now broken. * Fixed it back to how it was and all is good. Need to call detectChanges explicitly. * Removed an additional undeeded save progress call on loadPage * Laid out the test case to move the page snapping to the backend with full unit tests. Current code is broken just like UI layer. * Refactored the snap points into the backend and ensure that it works correctly. * Fixed a broken unit test * Filter out spammy hubs/messages calls in the logs * Swallow all noisy messages that are from RequestLoggingMiddleware when the log level is on Information or above. * Added a common loading component to the app. Have yet to refactor all screens to use this. * Bump json5 from 2.2.0 to 2.2.3 in /UI/Web Bumps [json5](https://github.com/json5/json5) from 2.2.0 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.2.0...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Alrigned all the loading messages and styles throughout the app * Webtoon reader will use max width of all images to ensure images align well. * On Original scaling mode, users can use the keyboard to scroll around the images without pagination kicking off. * Removed console logs * Fixed a public vs private issue * Fixed an issue around some cached files getting locked due to NetVips holding them during file size calculations. Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Robbie Davis <robbie@therobbiedavis.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
import { Component, Input, OnInit } from '@angular/core';
|
|
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
|
|
import { Library } from 'src/app/_models/library';
|
|
import { Member } from 'src/app/_models/auth/member';
|
|
import { LibraryService } from 'src/app/_services/library.service';
|
|
import { SelectionModel } from 'src/app/typeahead/_components/typeahead.component';
|
|
|
|
// TODO: Change to OnPush
|
|
@Component({
|
|
selector: 'app-library-access-modal',
|
|
templateUrl: './library-access-modal.component.html',
|
|
styleUrls: ['./library-access-modal.component.scss']
|
|
})
|
|
export class LibraryAccessModalComponent implements OnInit {
|
|
|
|
@Input() member: Member | undefined;
|
|
allLibraries: Library[] = [];
|
|
selectedLibraries: Array<{selected: boolean, data: Library}> = [];
|
|
selections!: SelectionModel<Library>;
|
|
selectAll: boolean = false;
|
|
|
|
get hasSomeSelected() {
|
|
return this.selections != null && this.selections.hasSomeSelected();
|
|
}
|
|
|
|
constructor(public modal: NgbActiveModal, private libraryService: LibraryService) { }
|
|
|
|
ngOnInit(): void {
|
|
this.libraryService.getLibraries().subscribe(libs => {
|
|
this.allLibraries = libs;
|
|
this.setupSelections();
|
|
});
|
|
}
|
|
|
|
close() {
|
|
this.modal.dismiss();
|
|
}
|
|
|
|
save() {
|
|
if (this.member?.username === undefined) {
|
|
return;
|
|
}
|
|
|
|
const selectedLibraries = this.selections.selected();
|
|
this.libraryService.updateLibrariesForMember(this.member?.username, selectedLibraries).subscribe(() => {
|
|
this.modal.close(true);
|
|
});
|
|
}
|
|
|
|
setupSelections() {
|
|
this.selections = new SelectionModel<Library>(false, this.allLibraries);
|
|
|
|
// If a member is passed in, then auto-select their libraries
|
|
if (this.member !== undefined) {
|
|
this.member.libraries.forEach(lib => {
|
|
this.selections.toggle(lib, true, (a, b) => a.name === b.name);
|
|
});
|
|
this.selectAll = this.selections.selected().length === this.allLibraries.length;
|
|
}
|
|
}
|
|
|
|
reset() {
|
|
this.setupSelections();
|
|
}
|
|
|
|
toggleAll() {
|
|
this.selectAll = !this.selectAll;
|
|
this.allLibraries.forEach(s => this.selections.toggle(s, this.selectAll));
|
|
}
|
|
|
|
handleSelection(item: Library) {
|
|
this.selections.toggle(item);
|
|
const numberOfSelected = this.selections.selected().length;
|
|
if (numberOfSelected == 0) {
|
|
this.selectAll = false;
|
|
} else if (numberOfSelected == this.selectedLibraries.length) {
|
|
this.selectAll = true;
|
|
}
|
|
}
|
|
|
|
}
|