Kavita+ Overhaul & New Changelog (#3507)

This commit is contained in:
Joe Milazzo 2025-01-20 08:14:57 -06:00 committed by GitHub
parent d880c1690c
commit a5707617f2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
249 changed files with 14775 additions and 2300 deletions

View file

@ -731,18 +731,6 @@
<div [ngbNavOutlet]="nav" class="tab-content {{utilityService.getActiveBreakpoint() === Breakpoint.Mobile ? 'mt-3' : 'ms-4 flex-fill'}}"></div>
</div>
<div class="modal-footer">
@if (accountService.hasValidLicense$ | async) {
<button type="button" class="btn btn-light" (click)="forceScan()" position="above"
[ngbTooltip]="t('force-refresh-tooltip')">
@if (forceIsLoading) {
<div class="spinner-border spinner-border-sm text-primary" role="status">
<span class="visually-hidden">loading...</span>
</div>
} @else {
{{t('force-refresh')}}
}
</button>
}
<button type="button" class="btn btn-secondary" (click)="close()">{{t('close')}}</button>
<button type="submit" class="btn btn-primary" [disabled]="!editSeriesForm.valid" (click)="save()">{{t('save')}}</button>
</div>

View file

@ -62,6 +62,7 @@ import {ActionService} from "../../../_services/action.service";
import {DownloadService} from "../../../shared/_services/download.service";
import {SettingItemComponent} from "../../../settings/_components/setting-item/setting-item.component";
import {ReadTimePipe} from "../../../_pipes/read-time.pipe";
import {LicenseService} from "../../../_services/license.service";
enum TabID {
General = 0,
@ -134,6 +135,7 @@ export class EditSeriesModalComponent implements OnInit {
private readonly metadataService = inject(MetadataService);
private readonly cdRef = inject(ChangeDetectorRef);
public readonly accountService = inject(AccountService);
protected readonly licenseService = inject(LicenseService);
private readonly destroyRef = inject(DestroyRef);
private readonly toastr = inject(ToastrService);
private readonly actionFactoryService = inject(ActionFactoryService);

View file

@ -45,7 +45,7 @@
<div class="card-overlay"></div>
@if (showReadButton) {
@if (showReadButton && !bulkSelectionService.hasSelections()) {
<div class="series overlay-information">
<div class="overlay-information--centered">
<span class="card-title library mx-auto" style="width: auto;">

View file

@ -44,16 +44,19 @@
}
<div class="card-overlay"></div>
<div class="chapter overlay-information">
<div class="overlay-information--centered">
<span class="card-title library mx-auto" style="width: auto;" (click)="read($event)">
<!-- Card Image -->
<div>
<i class="fa-solid fa-book" aria-hidden="true"></i>
</div>
</span>
@if (!bulkSelectionService.hasSelections()) {
<div class="chapter overlay-information">
<div class="overlay-information--centered">
<span class="card-title library mx-auto" style="width: auto;" (click)="read($event)">
<!-- Card Image -->
<div>
<i class="fa-solid fa-book" aria-hidden="true"></i>
</div>
</span>
</div>
</div>
</div>
}
</div>
@if (chapter.isSpecial) {

View file

@ -1,4 +1,55 @@
<ng-container *transloco="let t; read: 'edit-chapter-progress'">
<!-- <ngx-datatable-->
<!-- class="bootstrap"-->
<!-- [rows]="items.controls"-->
<!-- [columnMode]="ColumnMode.flex"-->
<!-- rowHeight="auto"-->
<!-- [footerHeight]="50"-->
<!-- [limit]="15"-->
<!-- >-->
<!-- <ngx-datatable-column name="" [sortable]="false" [draggable]="false" [resizeable]="false" [flexGrow]="3">-->
<!-- <ng-template let-column="column" ngx-datatable-header-template>-->
<!-- {{t('user-header')}}-->
<!-- </ng-template>-->
<!-- <ng-template let-item="row" let-idx="index" ngx-datatable-cell-template>-->
<!-- {{progressEvents[idx].userName | sentenceCase}}-->
<!-- </ng-template>-->
<!-- </ngx-datatable-column>-->
<!-- <ngx-datatable-column name="" [sortable]="false" [draggable]="false" [resizeable]="false" [flexGrow]="1">-->
<!-- <ng-template let-column="column" ngx-datatable-header-template>-->
<!-- {{t('page-read-header')}}-->
<!-- </ng-template>-->
<!-- <ng-template let-item="row" let-idx="index" ngx-datatable-cell-template>-->
<!-- @if(editMode[idx]) {-->
<!-- <input type="number" formControlName="pagesRead" class="form-control" inputmode="numeric"/>-->
<!-- } @else {-->
<!-- {{progressEvents[idx].pagesRead}}-->
<!-- }-->
<!-- </ng-template>-->
<!-- </ngx-datatable-column>-->
<!-- <ngx-datatable-column name="" [sortable]="false" [draggable]="false" [resizeable]="false" [flexGrow]="1">-->
<!-- <ng-template let-column="column" ngx-datatable-header-template>-->
<!-- {{t('date-created-header')}}-->
<!-- </ng-template>-->
<!-- <ng-template let-item="row" let-idx="index" ngx-datatable-cell-template>-->
<!-- {{progressEvents[idx].createdUtc | utcToLocalTime | date:'shortDate' | defaultDate}}-->
<!-- </ng-template>-->
<!-- </ngx-datatable-column>-->
<!-- <ngx-datatable-column name="" [sortable]="false" [draggable]="false" [resizeable]="false" [flexGrow]="1">-->
<!-- <ng-template let-column="column" ngx-datatable-header-template>-->
<!-- {{t('date-updated-header')}}-->
<!-- </ng-template>-->
<!-- <ng-template let-item="row" let-idx="index" ngx-datatable-cell-template>-->
<!-- {{progressEvents[idx].lastModifiedUtc | utcToLocalTime | date:'shortDate' | defaultDate}}-->
<!-- </ng-template>-->
<!-- </ngx-datatable-column>-->
<!-- </ngx-datatable>-->
<table class="table table-striped" [formGroup]="formGroup">
<thead>
<tr>

View file

@ -9,6 +9,7 @@ import {TranslocoDirective} from "@jsverse/transloco";
import {FormArray, FormBuilder, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms";
import {SentenceCasePipe} from "../../_pipes/sentence-case.pipe";
import {DefaultDatePipe} from "../../_pipes/default-date.pipe";
import {ColumnMode, NgxDatatableModule} from "@siemens/ngx-datatable";
@Component({
selector: 'app-edit-chapter-progress',
@ -23,7 +24,8 @@ import {DefaultDatePipe} from "../../_pipes/default-date.pipe";
ReactiveFormsModule,
SentenceCasePipe,
DatePipe,
DefaultDatePipe
DefaultDatePipe,
NgxDatatableModule
],
templateUrl: './edit-chapter-progress.component.html',
styleUrl: './edit-chapter-progress.component.scss',
@ -82,4 +84,5 @@ export class EditChapterProgressComponent implements OnInit {
this.cdRef.markForCheck();
}
protected readonly ColumnMode = ColumnMode;
}

View file

@ -44,16 +44,19 @@
}
<div class="card-overlay"></div>
<div class="series overlay-information">
<div class="overlay-information--centered">
@if (!bulkSelectionService.hasSelections()) {
<div class="series overlay-information">
<div class="overlay-information--centered">
<span class="card-title library mx-auto" style="width: auto;" (click)="read($event)">
<!-- Card Image -->
<div>
<i class="fa-solid fa-book" aria-hidden="true"></i>
</div>
</span>
</div>
</div>
</div>
}
</div>
<div class="card-body meta-title" [ngbTooltip]="series.localizedName.length > 34 ? series.localizedName : null">
<div class="card-content d-flex justify-content-center align-items-center text-center" style="width:100%;min-height:58px;">

View file

@ -38,16 +38,18 @@
}
<div class="card-overlay"></div>
<div class="volume overlay-information" (click)="read($event)">
<div class="overlay-information--centered">
<span class="card-title library mx-auto" style="width: auto;">
<!-- Card Image -->
<div>
<i class="fa-solid fa-book" aria-hidden="true"></i>
</div>
</span>
@if (!bulkSelectionService.hasSelections()) {
<div class="volume overlay-information" (click)="read($event)">
<div class="overlay-information--centered">
<span class="card-title library mx-auto" style="width: auto;">
<!-- Card Image -->
<div>
<i class="fa-solid fa-book" aria-hidden="true"></i>
</div>
</span>
</div>
</div>
</div>
}
</div>
@if (libraryType === LibraryType.LightNovel || libraryType === LibraryType.Book) {