mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-09 03:04:19 -04:00
New Wiki Launch (#2848)
This commit is contained in:
parent
83e493f2ae
commit
4194ec69d1
22
UI/Web/src/app/_models/wiki.ts
Normal file
22
UI/Web/src/app/_models/wiki.ts
Normal file
@ -0,0 +1,22 @@
|
||||
export enum WikiLink {
|
||||
Customize = 'https://wiki.kavitareader.com/guides/features/customization',
|
||||
CustomizeExternalSource = 'https://wiki.kavitareader.com/guides/features/customization#external-source',
|
||||
ReadingLists = 'https://wiki.kavitareader.com/guides/features/readinglists',
|
||||
Collections = 'https://wiki.kavitareader.com/guides/features/collections',
|
||||
SeriesRelationships = 'https://wiki.kavitareader.com/guides/features/relationships',
|
||||
Bookmarks = 'https://wiki.kavitareader.com/guides/features/bookmarks',
|
||||
DataCollection = 'https://wiki.kavitareader.com/troubleshooting/faq#q-does-kavita-collect-any-data-on-me',
|
||||
MediaIssues = 'https://wiki.kavitareader.com/guides/admin-settings/media#media-issues',
|
||||
KavitaPlusDiscordId = 'https://wiki.kavitareader.com/guides/admin-settings/kavita+#discord-id',
|
||||
KavitaPlus = 'https://wiki.kavitareader.com/guides/admin-settings/kavita+',
|
||||
KavitaPlusFAQ = 'https://wiki.kavitareader.com/kavita+/faq',
|
||||
ReadingListCBL = 'https://wiki.kavitareader.com/guides/features/readinglists#creating-a-reading-list-via-cbl',
|
||||
Donation = 'https://wiki.kavitareader.com/donating',
|
||||
Updating = 'https://wiki.kavitareader.com/guides/updating',
|
||||
ManagingFiles = 'https://wiki.kavitareader.com/guides/scanner/managefiles',
|
||||
Scanner = 'https://wiki.kavitareader.com/guides/scanner',
|
||||
ScannerExclude = 'https://wiki.kavitareader.com/guides/admin-settings/libraries#exclude-patterns',
|
||||
Library = 'https://wiki.kavitareader.com/guides/admin-settings/libraries',
|
||||
UpdateNative = 'https://wiki.kavitareader.com/guides/updating/updating-native',
|
||||
UpdateDocker = 'https://wiki.kavitareader.com/guides/updating/updating-docker'
|
||||
}
|
@ -7,6 +7,7 @@ import { LibraryService } from '../../../_services/library.service';
|
||||
import { NgIf, NgFor, NgClass } from '@angular/common';
|
||||
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
|
||||
import {TranslocoDirective} from "@ngneat/transloco";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
|
||||
export interface DirectoryPickerResult {
|
||||
@ -27,7 +28,7 @@ export class DirectoryPickerComponent implements OnInit {
|
||||
/**
|
||||
* Url to give more information about selecting directories. Passing nothing will suppress.
|
||||
*/
|
||||
@Input() helpUrl: string = 'https://wiki.kavitareader.com/en/guides/first-time-setup#adding-a-library-to-kavita';
|
||||
@Input() helpUrl: string = WikiLink.Library;
|
||||
|
||||
currentRoot = '';
|
||||
folders: DirectoryDto[] = [];
|
||||
|
@ -34,7 +34,7 @@
|
||||
<app-manage-tasks-settings></app-manage-tasks-settings>
|
||||
</ng-container>
|
||||
<ng-container *ngIf="tab.fragment === TabID.KavitaPlus">
|
||||
<p>{{t('kavita+-desc-part-1')}} <a href="https://wiki.kavitareader.com/en/kavita-plus" target="_blank" rel="noreferrer nofollow">{{t('kavita+-desc-part-2')}}</a> {{t('kavita+-desc-part-3')}} <a href="https://wiki.kavitareader.com/en/kavita-plus#faq" target="_blank" rel="noreferrer nofollow">FAQ</a></p>
|
||||
<p>{{t('kavita+-desc-part-1')}} <a [href]="WikiLink.KavitaPlus" target="_blank" rel="noreferrer nofollow">{{t('kavita+-desc-part-2')}}</a> {{t('kavita+-desc-part-3')}} <a [href]="WikiLink.KavitaPlusFAQ" target="_blank" rel="noreferrer nofollow">FAQ</a></p>
|
||||
<p>{{t('kavita+-requirement')}} <a [routerLink]="'/announcements'">{{t('kavita+-releases')}}</a></p>
|
||||
<app-license></app-license>
|
||||
</ng-container>
|
||||
|
@ -19,6 +19,7 @@ import {
|
||||
SideNavCompanionBarComponent
|
||||
} from '../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component';
|
||||
import {translate, TranslocoDirective, TranslocoService} from "@ngneat/transloco";
|
||||
import {WikiLink} from "../../_models/wiki";
|
||||
|
||||
enum TabID {
|
||||
General = '',
|
||||
@ -51,6 +52,7 @@ export class DashboardComponent implements OnInit {
|
||||
protected readonly navService = inject(NavService);
|
||||
private readonly titleService = inject(Title);
|
||||
protected readonly TabID = TabID;
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
|
||||
tabs: Array<{title: string, fragment: string}> = [
|
||||
|
@ -83,13 +83,15 @@
|
||||
<div class="form-group mb-3">
|
||||
<label for="discordId">{{t('activate-discordId-label')}}</label>
|
||||
<i class="fa fa-circle-info ms-1" aria-hidden="true" [ngbTooltip]="t('activate-discordId-tooltip')"></i>
|
||||
<a class="ms-1" href="https://wiki.kavitareader.com/en/kavita-plus#discord-id" target="_blank" rel="noopener noreferrer">Help</a>
|
||||
<a class="ms-1" [href]="WikiLink.KavitaPlusDiscordId" target="_blank" rel="noopener noreferrer">Help</a>
|
||||
<input id="discordId" type="text" class="form-control" formControlName="discordId" autocomplete="off" [class.is-invalid]="formGroup.get('discordId')?.invalid && formGroup.get('discordId')?.touched"/>
|
||||
@if (formGroup.dirty || formGroup.touched) {
|
||||
<div id="inviteForm-validations" class="invalid-feedback">
|
||||
<div *ngIf="formGroup.get('discordId')?.errors?.pattern">
|
||||
@if (formGroup.get('discordId')?.errors?.pattern) {
|
||||
<div>
|
||||
{{t('discord-validation')}}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@ -15,6 +15,7 @@ import { NgIf } from '@angular/common';
|
||||
import {environment} from "../../../environments/environment";
|
||||
import {translate, TranslocoDirective} from "@ngneat/transloco";
|
||||
import {catchError} from "rxjs";
|
||||
import {WikiLink} from "../../_models/wiki";
|
||||
|
||||
@Component({
|
||||
selector: 'app-license',
|
||||
@ -30,6 +31,7 @@ export class LicenseComponent implements OnInit {
|
||||
private readonly toastr = inject(ToastrService);
|
||||
private readonly confirmService = inject(ConfirmService);
|
||||
protected readonly accountService = inject(AccountService);
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
formGroup: FormGroup = new FormGroup({});
|
||||
isViewMode: boolean = true;
|
||||
|
@ -1,5 +1,5 @@
|
||||
<ng-container *transloco="let t; read: 'manage-alerts'">
|
||||
<p>{{t('description-part-1')}} <a rel="noopener noreferrer" target="_blank" href="https://wiki.kavitareader.com/en/guides/managing-your-files/scanner#media-errors">{{t('description-part-2')}}</a></p>
|
||||
<p>{{t('description-part-1')}} <a rel="noopener noreferrer" target="_blank" [href]="WikiLink.MediaIssues">{{t('description-part-2')}}</a></p>
|
||||
|
||||
<form [formGroup]="formGroup">
|
||||
<div class="row g-0 mb-3">
|
||||
|
@ -21,6 +21,7 @@ import { FilterPipe } from '../../_pipes/filter.pipe';
|
||||
import { LoadingComponent } from '../../shared/loading/loading.component';
|
||||
import { NgIf, NgFor } from '@angular/common';
|
||||
import {TranslocoDirective} from "@ngneat/transloco";
|
||||
import {WikiLink} from "../../_models/wiki";
|
||||
|
||||
@Component({
|
||||
selector: 'app-manage-alerts',
|
||||
@ -34,10 +35,12 @@ export class ManageAlertsComponent implements OnInit {
|
||||
|
||||
@Output() alertCount = new EventEmitter<number>();
|
||||
@ViewChildren(SortableHeader<KavitaMediaError>) headers!: QueryList<SortableHeader<KavitaMediaError>>;
|
||||
|
||||
private readonly serverService = inject(ServerService);
|
||||
private readonly messageHub = inject(MessageHubService);
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
private readonly destroyRef = inject(DestroyRef);
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
messageHubUpdate$ = this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef), filter(m => m.event === EVENTS.ScanSeries), shareReplay());
|
||||
currentSort = new BehaviorSubject<SortEvent<KavitaMediaError>>({column: 'extension', direction: 'asc'});
|
||||
@ -49,9 +52,6 @@ export class ManageAlertsComponent implements OnInit {
|
||||
filter: new FormControl('', [])
|
||||
});
|
||||
|
||||
|
||||
constructor() {}
|
||||
|
||||
ngOnInit(): void {
|
||||
|
||||
this.loadData();
|
||||
|
@ -184,7 +184,7 @@
|
||||
|
||||
<div class="mb-3 mt-3">
|
||||
<label for="stat-collection" class="form-label" aria-describedby="collection-info">{{t('allow-stats-label')}}</label>
|
||||
<p class="accent" id="collection-info">{{t('allow-stats-tooltip-part-1')}}<a href="https://wiki.kavitareader.com/en/faq" rel="noopener noreferrer" target="_blank" referrerpolicy="no-refer">wiki</a> {{t('allow-stats-tooltip-part-2')}}</p>
|
||||
<p class="accent" id="collection-info">{{t('allow-stats-tooltip-part-1')}}<a [href]="WikiLink.DataCollection" rel="noopener noreferrer" target="_blank" referrerpolicy="no-refer">wiki</a> {{t('allow-stats-tooltip-part-2')}}</p>
|
||||
<div class="form-check form-switch">
|
||||
<input id="stat-collection" type="checkbox" aria-label="Stat Collection" class="form-check-input" formControlName="allowStatCollection" role="switch">
|
||||
<label for="stat-collection" class="form-check-label">{{t('send-data')}}</label>
|
||||
|
@ -8,6 +8,7 @@ import {ServerSettings} from '../_models/server-settings';
|
||||
import {NgbTooltip} from '@ng-bootstrap/ng-bootstrap';
|
||||
import {NgFor, NgIf, NgTemplateOutlet, TitleCasePipe} from '@angular/common';
|
||||
import {TranslocoModule, TranslocoService} from "@ngneat/transloco";
|
||||
import {WikiLink} from "../../_models/wiki";
|
||||
|
||||
const ValidIpAddress = /^(\s*((([12]?\d{1,2}\.){3}[12]?\d{1,2})|(([\da-f]{0,4}\:){0,7}([\da-f]{0,4})))\s*\,)*\s*((([12]?\d{1,2}\.){3}[12]?\d{1,2})|(([\da-f]{0,4}\:){0,7}([\da-f]{0,4})))\s*$/i;
|
||||
|
||||
@ -21,15 +22,17 @@ const ValidIpAddress = /^(\s*((([12]?\d{1,2}\.){3}[12]?\d{1,2})|(([\da-f]{0,4}\:
|
||||
})
|
||||
export class ManageSettingsComponent implements OnInit {
|
||||
|
||||
private readonly translocoService = inject(TranslocoService);
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
private readonly settingsService = inject(SettingsService);
|
||||
private readonly toastr = inject(ToastrService);
|
||||
private readonly serverService = inject(ServerService);
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
serverSettings!: ServerSettings;
|
||||
settingsForm: FormGroup = new FormGroup({});
|
||||
taskFrequencies: Array<string> = [];
|
||||
logLevels: Array<string> = [];
|
||||
private readonly translocoService = inject(TranslocoService);
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
|
||||
constructor(private settingsService: SettingsService, private toastr: ToastrService,
|
||||
private serverService: ServerService) { }
|
||||
|
||||
ngOnInit(): void {
|
||||
this.settingsService.getTaskFrequencies().pipe(take(1)).subscribe(frequencies => {
|
||||
|
@ -25,7 +25,7 @@
|
||||
</ng-template>
|
||||
|
||||
<ng-template #noData>
|
||||
{{t('no-data')}} <a href="https://wiki.kavitareader.com/en/guides/get-started-using-your-library/bookmarks" rel="noopener noreferrer" target="_blank">{{t('no-data-2')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a>
|
||||
{{t('no-data')}} <a [href]="WikiLink.Bookmarks" rel="noopener noreferrer" target="_blank">{{t('no-data-2')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a>
|
||||
</ng-template>
|
||||
</app-card-detail-layout>
|
||||
</ng-container>
|
||||
|
@ -33,6 +33,7 @@ import { SideNavCompanionBarComponent } from '../../../sidenav/_components/side-
|
||||
import {translate, TranslocoDirective, TranslocoService} from "@ngneat/transloco";
|
||||
import {SeriesFilterV2} from "../../../_models/metadata/v2/series-filter-v2";
|
||||
import {Title} from "@angular/platform-browser";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
@Component({
|
||||
selector: 'app-bookmarks',
|
||||
@ -59,6 +60,8 @@ export class BookmarksComponent implements OnInit {
|
||||
public readonly bulkSelectionService = inject(BulkSelectionService);
|
||||
public readonly imageService = inject(ImageService);
|
||||
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
bookmarks: Array<PageBookmark> = [];
|
||||
series: Array<Series> = [];
|
||||
loadingBookmarks: boolean = false;
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="container-fluid">
|
||||
|
||||
<p>
|
||||
{{t('description-part-1')}} <a href="https://wiki.kavitareader.com/en/guides/get-started-using-your-library/series-relationships" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{t('description-part-2')}}</a>
|
||||
{{t('description-part-1')}} <a [href]="WikiLink.SeriesRelationships" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{t('description-part-2')}}</a>
|
||||
</p>
|
||||
|
||||
<div class="row g-0" *ngIf="relations.length > 0">
|
||||
|
@ -24,6 +24,7 @@ import {TypeaheadComponent} from "../../typeahead/_components/typeahead.componen
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {TranslocoModule} from "@ngneat/transloco";
|
||||
import {RelationshipPipe} from "../../_pipes/relationship.pipe";
|
||||
import {WikiLink} from "../../_models/wiki";
|
||||
|
||||
interface RelationControl {
|
||||
series: {id: number, name: string} | undefined; // Will add type as well
|
||||
@ -55,6 +56,7 @@ export class EditSeriesRelationComponent implements OnInit {
|
||||
private readonly searchService = inject(SearchService);
|
||||
public readonly imageService = inject(ImageService);
|
||||
protected readonly RelationKind = RelationKind;
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
@Input({required: true}) series!: Series;
|
||||
/**
|
||||
@ -188,5 +190,4 @@ export class EditSeriesRelationComponent implements OnInit {
|
||||
this.seriesService.updateRelationships(this.series.id, adaptations, characters, contains, others, prequels, sequels, sideStories, spinOffs, alternativeSettings, alternativeVersions, doujinshis, editions, annuals).subscribe(() => {});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,7 @@
|
||||
<ng-template #noData>
|
||||
{{t('no-data')}}
|
||||
@if(isAdmin$ | async) {
|
||||
{{t('create-one-part-1')}} <a href="https://wiki.kavitareader.com/en/guides/get-started-using-your-library/collections" rel="noopener noreferrer" target="_blank">{{t('create-one-part-2')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a>
|
||||
{{t('create-one-part-1')}} <a [href]="WikiLink.Collections" rel="noopener noreferrer" target="_blank">{{t('create-one-part-2')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a>
|
||||
}
|
||||
</ng-template>
|
||||
</app-card-detail-layout>
|
||||
|
@ -41,6 +41,7 @@ import {BulkSelectionService} from "../../../cards/bulk-selection.service";
|
||||
import {SeriesCardComponent} from "../../../cards/series-card/series-card.component";
|
||||
import {ActionService} from "../../../_services/action.service";
|
||||
import {KEY_CODES} from "../../../shared/_services/utility.service";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
|
||||
@Component({
|
||||
@ -69,6 +70,7 @@ export class AllCollectionsComponent implements OnInit {
|
||||
public readonly actionService = inject(ActionService);
|
||||
|
||||
protected readonly ScrobbleProvider = ScrobbleProvider;
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
isLoading: boolean = true;
|
||||
collections: UserCollection[] = [];
|
||||
|
@ -22,7 +22,7 @@
|
||||
</ng-template>
|
||||
|
||||
<ng-template #noData>
|
||||
{{t('no-data')}} {{t('create-one-part-1')}} <a href="https://wiki.kavitareader.com/en/guides/get-started-using-your-library#reading-list" rel="noopener noreferrer" target="_blank">{{t('create-one-part-2')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a>.
|
||||
{{t('no-data')}} {{t('create-one-part-1')}} <a [href]="WikiLink.ReadingLists" rel="noopener noreferrer" target="_blank">{{t('create-one-part-2')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a>.
|
||||
</ng-template>
|
||||
</app-card-detail-layout>
|
||||
|
||||
|
@ -20,6 +20,7 @@ import { SideNavCompanionBarComponent } from '../../../sidenav/_components/side-
|
||||
import {translate, TranslocoDirective, TranslocoService} from "@ngneat/transloco";
|
||||
import {CardActionablesComponent} from "../../../_single-module/card-actionables/card-actionables.component";
|
||||
import {Title} from "@angular/platform-browser";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
@Component({
|
||||
selector: 'app-reading-lists',
|
||||
@ -31,6 +32,8 @@ import {Title} from "@angular/platform-browser";
|
||||
})
|
||||
export class ReadingListsComponent implements OnInit {
|
||||
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
lists: ReadingList[] = [];
|
||||
loadingLists = false;
|
||||
pagination!: Pagination;
|
||||
|
@ -156,7 +156,7 @@
|
||||
<!-- Spacer -->
|
||||
<div class="col" aria-hidden="true"></div>
|
||||
<div class="col-auto">
|
||||
<a class="btn btn-icon" href="https://wiki.kavitareader.com/en/guides/get-started-using-your-library/reading-lists#creating-a-reading-list-via-cbl" target="_blank" rel="noopener noreferrer">Help</a>
|
||||
<a class="btn btn-icon" [href]="WikiLink.ReadingListCBL" target="_blank" rel="noopener noreferrer">Help</a>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button type="button" class="btn btn-secondary" (click)="close()">{{t('close')}}</button>
|
||||
|
@ -17,6 +17,7 @@ import {SafeHtmlPipe} from "../../../_pipes/safe-html.pipe";
|
||||
import {CblConflictReasonPipe} from "../../../_pipes/cbl-conflict-reason.pipe";
|
||||
import {CblImportResultPipe} from "../../../_pipes/cbl-import-result.pipe";
|
||||
import {translate, TranslocoDirective} from "@ngneat/transloco";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
interface FileStep {
|
||||
fileName: string;
|
||||
@ -48,6 +49,7 @@ export class ImportCblModalComponent {
|
||||
|
||||
protected readonly CblImportResult = CblImportResult;
|
||||
protected readonly Step = Step;
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
@ViewChild('fileUpload') fileUpload!: ElementRef<HTMLInputElement>;
|
||||
|
||||
|
@ -4,6 +4,7 @@ import { UpdateVersionEvent } from 'src/app/_models/events/update-version-event'
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {SafeHtmlPipe} from "../../_pipes/safe-html.pipe";
|
||||
import {TranslocoDirective} from "@ngneat/transloco";
|
||||
import {WikiLink} from "../../_models/wiki";
|
||||
|
||||
|
||||
@Component({
|
||||
@ -17,15 +18,15 @@ import {TranslocoDirective} from "@ngneat/transloco";
|
||||
export class UpdateNotificationModalComponent implements OnInit {
|
||||
|
||||
@Input({required: true}) updateData!: UpdateVersionEvent;
|
||||
updateUrl: string = 'https://wiki.kavitareader.com/en/install/windows-install#updating-kavita';
|
||||
updateUrl: string = WikiLink.UpdateNative;
|
||||
|
||||
constructor(public modal: NgbActiveModal) { }
|
||||
|
||||
ngOnInit() {
|
||||
if (this.updateData.isDocker) {
|
||||
this.updateUrl = 'https://wiki.kavitareader.com/en/install/docker-install#updating-kavita';
|
||||
this.updateUrl = WikiLink.UpdateDocker;
|
||||
} else {
|
||||
this.updateUrl = 'https://wiki.kavitareader.com/en/install/windows-install#updating-kavita';
|
||||
this.updateUrl = WikiLink.UpdateNative;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<a class="btn btn-icon" href="https://wiki.kavitareader.com/en/guides/customization" target="_blank" rel="noopener noreferrer">{{t('help')}}</a>
|
||||
<a class="btn btn-icon" [href]="WikiLink.Customize" target="_blank" rel="noopener noreferrer">{{t('help')}}</a>
|
||||
<button type="button" class="btn btn-primary" (click)="close()">{{t('close')}}</button>
|
||||
</div>
|
||||
</ng-container>
|
||||
|
@ -15,6 +15,7 @@ import {CustomizeDashboardStreamsComponent} from "../customize-dashboard-streams
|
||||
import {CustomizeSidenavStreamsComponent} from "../customize-sidenav-streams/customize-sidenav-streams.component";
|
||||
import {ManageExternalSourcesComponent} from "../manage-external-sources/manage-external-sources.component";
|
||||
import {ManageSmartFiltersComponent} from "../manage-smart-filters/manage-smart-filters.component";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
enum TabID {
|
||||
Dashboard = 'dashboard',
|
||||
@ -35,13 +36,15 @@ enum TabID {
|
||||
})
|
||||
export class CustomizeDashboardModalComponent {
|
||||
|
||||
activeTab = TabID.SideNav;
|
||||
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
public readonly utilityService = inject(UtilityService);
|
||||
private readonly modal = inject(NgbActiveModal);
|
||||
|
||||
protected readonly TabID = TabID;
|
||||
protected readonly Breakpoint = Breakpoint;
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
activeTab = TabID.SideNav;
|
||||
|
||||
close() {
|
||||
this.modal.close();
|
||||
|
@ -1,7 +1,7 @@
|
||||
<ng-container *transloco="let t; read: 'manage-external-sources'">
|
||||
<p>
|
||||
{{t('description')}}
|
||||
<a href="https://wiki.kavitareader.com/en/guides/customization#external-source" target="_blank" rel="noopener noreferrer">{{t('help-link')}}</a>
|
||||
<a [href]="WikiLink.CustomizeExternalSource" target="_blank" rel="noopener noreferrer">{{t('help-link')}}</a>
|
||||
</p>
|
||||
|
||||
|
||||
|
@ -10,6 +10,7 @@ import {ExternalSource} from "../../../_models/sidenav/external-source";
|
||||
import {ExternalSourceService} from "../../../_services/external-source.service";
|
||||
import {FilterPipe} from "../../../_pipes/filter.pipe";
|
||||
import {SmartFilter} from "../../../_models/metadata/v2/smart-filter";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
@Component({
|
||||
selector: 'app-manage-external-sources',
|
||||
@ -24,6 +25,7 @@ export class ManageExternalSourcesComponent {
|
||||
externalSources: Array<ExternalSource> = [];
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
private readonly externalSourceService = inject(ExternalSourceService);
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
listForm: FormGroup = new FormGroup({
|
||||
'filterQuery': new FormControl('', [])
|
||||
|
@ -73,6 +73,6 @@
|
||||
<div class="side-nav-overlay" (click)="toggleNavBar()" [ngClass]="{'closed' : (navService.sideNavCollapsed$ | async)}"></div>
|
||||
<div class="bottom" [ngClass]="{'closed' : (navService.sideNavCollapsed$ | async),
|
||||
'hidden': (navService.sideNavVisibility$ | async) === false || (accountService.hasValidLicense$ | async) === true}">
|
||||
<app-side-nav-item *ngIf="(accountService.hasValidLicense$ | async) === false" [ngClass]="'donate'" icon="fa-heart" [ngbTooltip]="t('donate-tooltip')" link="https://wiki.kavitareader.com/en/faq#q-i-want-to-donate-what-are-my-options" [external]="true"></app-side-nav-item>
|
||||
<app-side-nav-item *ngIf="(accountService.hasValidLicense$ | async) === false" [ngClass]="'donate'" icon="fa-heart" [ngbTooltip]="t('donate-tooltip')" [link]="WikiLink.Donation" [external]="true"></app-side-nav-item>
|
||||
</div>
|
||||
</ng-container>
|
||||
|
@ -33,6 +33,7 @@ import {SideNavStreamType} from "../../../_models/sidenav/sidenav-stream-type.en
|
||||
import {
|
||||
ImportMalCollectionModalComponent
|
||||
} from "../../../collections/_components/import-mal-collection-modal/import-mal-collection-modal.component";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
@Component({
|
||||
selector: 'app-side-nav',
|
||||
@ -44,8 +45,19 @@ import {
|
||||
})
|
||||
export class SideNavComponent implements OnInit {
|
||||
|
||||
protected readonly SideNavStreamType = SideNavStreamType;
|
||||
private readonly router = inject(Router);
|
||||
private readonly utilityService = inject(UtilityService);
|
||||
private readonly messageHub = inject(MessageHubService);
|
||||
private readonly actionService = inject(ActionService);
|
||||
public readonly navService = inject(NavService);
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
private readonly ngbModal = inject(NgbModal);
|
||||
private readonly imageService = inject(ImageService);
|
||||
public readonly accountService = inject(AccountService);
|
||||
private readonly destroyRef = inject(DestroyRef);
|
||||
private readonly actionFactoryService = inject(ActionFactoryService);
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
cachedData: SideNavStream[] | null = null;
|
||||
actions: ActionItem<Library>[] = this.actionFactoryService.getLibraryActions(this.handleAction.bind(this));
|
||||
@ -63,18 +75,6 @@ export class SideNavComponent implements OnInit {
|
||||
showAll: boolean = false;
|
||||
totalSize = 0;
|
||||
|
||||
protected readonly SideNavStreamType = SideNavStreamType;
|
||||
private readonly router = inject(Router);
|
||||
private readonly utilityService = inject(UtilityService);
|
||||
private readonly messageHub = inject(MessageHubService);
|
||||
private readonly actionService = inject(ActionService);
|
||||
public readonly navService = inject(NavService);
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
private readonly ngbModal = inject(NgbModal);
|
||||
private readonly imageService = inject(ImageService);
|
||||
public readonly accountService = inject(AccountService);
|
||||
|
||||
|
||||
private showAllSubject = new BehaviorSubject<boolean>(false);
|
||||
showAll$ = this.showAllSubject.asObservable();
|
||||
|
||||
@ -230,5 +230,4 @@ export class SideNavComponent implements OnInit {
|
||||
this.cdRef.markForCheck();
|
||||
this.showAllSubject.next(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -74,10 +74,10 @@
|
||||
</button>
|
||||
</div>
|
||||
<div class="row mt-2">
|
||||
<p>{{t('help-us-part-1')}}<a href="https://wiki.kavitareader.com/en/guides/managing-your-files" rel="noopener noreferrer" target="_blank" referrerpolicy="no-referrer">{{t('help-us-part-2')}}</a> {{t('help-us-part-3')}}</p>
|
||||
<p>{{t('help-us-part-1')}}<a [href]="WikiLink.ManagingFiles" rel="noopener noreferrer" target="_blank" referrerpolicy="no-referrer">{{t('help-us-part-2')}}</a> {{t('help-us-part-3')}}</p>
|
||||
</div>
|
||||
<div class="row mt-2">
|
||||
<p>{{t('naming-conventions-part-1')}}<a href="https://wiki.kavitareader.com/en/guides/managing-your-files/scanner#introduction" rel="noopener noreferrer" target="_blank" referrerpolicy="no-referrer">{{t('naming-conventions-part-2')}}</a> {{t('naming-conventions-part-3')}}</p>
|
||||
<p>{{t('naming-conventions-part-1')}}<a [href]="WikiLink.Scanner" rel="noopener noreferrer" target="_blank" referrerpolicy="no-referrer">{{t('naming-conventions-part-2')}}</a> {{t('naming-conventions-part-3')}}</p>
|
||||
</div>
|
||||
</ng-template>
|
||||
</li>
|
||||
@ -123,7 +123,7 @@
|
||||
<div ngbAccordionCollapse>
|
||||
<div ngbAccordionBody>
|
||||
<ng-template>
|
||||
<span >{{t('exclude-patterns-tooltip')}}<a class="ms-1" href="https://wiki.kavitareader.com/en/guides/managing-your-files/scanner/excluding-files-folders" rel="noopener noreferrer" target="_blank">{{t('help')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a></span>
|
||||
<span >{{t('exclude-patterns-tooltip')}}<a class="ms-1" [href]="WikiLink.ScannerExclude" rel="noopener noreferrer" target="_blank">{{t('help')}}<i class="fa fa-external-link-alt ms-1" aria-hidden="true"></i></a></span>
|
||||
<div class="mt-2">
|
||||
<app-edit-list [items]="excludePatterns" [label]="t('exclude-patterns-label')" (updateItems)="updateGlobs($event)"></app-edit-list>
|
||||
</div>
|
||||
|
@ -45,6 +45,7 @@ import {DefaultDatePipe} from "../../../_pipes/default-date.pipe";
|
||||
import {allFileTypeGroup, FileTypeGroup} from "../../../_models/library/file-type-group.enum";
|
||||
import {FileTypeGroupPipe} from "../../../_pipes/file-type-group.pipe";
|
||||
import {EditListComponent} from "../../../shared/edit-list/edit-list.component";
|
||||
import {WikiLink} from "../../../_models/wiki";
|
||||
|
||||
enum TabID {
|
||||
General = 'general-tab',
|
||||
@ -75,6 +76,7 @@ export class LibrarySettingsModalComponent implements OnInit {
|
||||
protected readonly LibraryType = LibraryType;
|
||||
protected readonly Breakpoint = Breakpoint;
|
||||
protected readonly TabID = TabID;
|
||||
protected readonly WikiLink = WikiLink;
|
||||
|
||||
public readonly utilityService = inject(UtilityService);
|
||||
public readonly modal = inject(NgbActiveModal);
|
||||
@ -361,5 +363,4 @@ export class LibrarySettingsModalComponent implements OnInit {
|
||||
return false; // Advanced are optional
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -576,7 +576,7 @@
|
||||
"title": "Nezůstaňte pozadu!",
|
||||
"subtitle": "Zdá se, že vaše instalace je více než {{počet}} verzí pozadu!",
|
||||
"description-1": "Zvažte prosím aktualizaci, abyste používali nejnovější verzi systému Kavita.",
|
||||
"description-2": "Podívejte se na naši <a href='https://wiki.kavitareader.com/guides/updating/' target='_blank' rel='noreferrer noopener'>wiki</a>, kde najdete pokyny k aktualizaci.",
|
||||
"description-2": "Podívejte se na naši <a href='https://wiki.kavitareader.com/guides/updating' target='_blank' rel='noreferrer noopener'>wiki</a>, kde najdete pokyny k aktualizaci.",
|
||||
"description-3": "Pokud máte nějaký konkrétní důvod, proč jste ještě neaktualizovali, rádi bychom věděli, co vás drží na zastaralé verzi! Zastavte se na našem discordu a dejte nám vědět, co vám brání v aktualizaci."
|
||||
},
|
||||
"book-line-overlay": {
|
||||
|
@ -7,7 +7,7 @@
|
||||
"name": "GPL-3.0",
|
||||
"url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE"
|
||||
},
|
||||
"version": "0.7.14.15"
|
||||
"version": "0.7.14.16"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user