{ "version": 3, "sources": ["src/app/_models/library/library.ts", "src/app/_models/pagination.ts", "src/app/shared/_services/utility.service.ts"], "sourcesContent": ["import {FileTypeGroup} from \"./file-type-group.enum\";\n\nexport enum LibraryType {\n Manga = 0,\n Comic = 1,\n Book = 2,\n Images = 3\n}\n\nexport interface Library {\n id: number;\n name: string;\n lastScanned: string;\n type: LibraryType;\n folders: string[];\n coverImage?: string | null;\n folderWatching: boolean;\n includeInDashboard: boolean;\n includeInRecommended: boolean;\n includeInSearch: boolean;\n manageCollections: boolean;\n manageReadingLists: boolean;\n allowScrobbling: boolean;\n collapseSeriesRelationships: boolean;\n libraryFileTypes: Array;\n excludePatterns: Array;\n}\n", "export class Pagination {\n currentPage: number;\n itemsPerPage: number;\n totalItems: number;\n totalPages: number;\n\n constructor() {\n this.currentPage = 0;\n this.itemsPerPage = 0;\n this.totalItems = 0;\n this.totalPages = 0;\n }\n}\n\nexport class PaginatedResult {\n result!: T;\n pagination!: Pagination;\n}\n", "import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Chapter } from 'src/app/_models/chapter';\nimport { LibraryType } from 'src/app/_models/library/library';\nimport { MangaFormat } from 'src/app/_models/manga-format';\nimport { PaginatedResult } from 'src/app/_models/pagination';\nimport { Series } from 'src/app/_models/series';\nimport { Volume } from 'src/app/_models/volume';\nimport {TranslocoService} from \"@ngneat/transloco\";\n\nexport enum KEY_CODES {\n RIGHT_ARROW = 'ArrowRight',\n LEFT_ARROW = 'ArrowLeft',\n DOWN_ARROW = 'ArrowDown',\n UP_ARROW = 'ArrowUp',\n ESC_KEY = 'Escape',\n SPACE = ' ',\n ENTER = 'Enter',\n G = 'g',\n B = 'b',\n F = 'f',\n H = 'h',\n BACKSPACE = 'Backspace',\n DELETE = 'Delete',\n SHIFT = 'Shift'\n}\n\nexport enum Breakpoint {\n Mobile = 768,\n Tablet = 1280,\n Desktop = 1440\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilityService {\n\n mangaFormatKeys: string[] = [];\n\n constructor(private translocoService: TranslocoService) { }\n\n\n sortChapters = (a: Chapter, b: Chapter) => {\n return parseFloat(a.number) - parseFloat(b.number);\n }\n\n mangaFormatToText(format: MangaFormat): string {\n if (this.mangaFormatKeys === undefined || this.mangaFormatKeys.length === 0) {\n this.mangaFormatKeys = Object.keys(MangaFormat);\n }\n\n return this.mangaFormatKeys.filter(item => MangaFormat[format] === item)[0];\n }\n\n /**\n * Formats a Chapter name based on the library it's in\n * @param libraryType\n * @param includeHash For comics only, includes a # which is used for numbering on cards\n * @param includeSpace Add a space at the end of the string. if includeHash and includeSpace are true, only hash will be at the end.\n * @returns\n */\n formatChapterName(libraryType: LibraryType, includeHash: boolean = false, includeSpace: boolean = false) {\n switch(libraryType) {\n case LibraryType.Book:\n return this.translocoService.translate('common.book-num') + (includeSpace ? ' ' : '');\n case LibraryType.Comic:\n if (includeHash) {\n return this.translocoService.translate('common.issue-hash-num');\n }\n return this.translocoService.translate('common.issue-num') + (includeSpace ? ' ' : '');\n case LibraryType.Images:\n case LibraryType.Manga:\n return this.translocoService.translate('common.chapter-num') + (includeSpace ? ' ' : '');\n }\n }\n\n\n filter(input: string, filter: string): boolean {\n if (input === null || filter === null || input === undefined || filter === undefined) return false;\n const reg = /[_\\.\\-]/gi;\n return input.toUpperCase().replace(reg, '').includes(filter.toUpperCase().replace(reg, ''));\n }\n\n filterMatches(input: string, filter: string): boolean {\n if (input === null || filter === null || input === undefined || filter === undefined) return false;\n const reg = /[_\\.\\-]/gi;\n return input.toUpperCase().replace(reg, '') === filter.toUpperCase().replace(reg, '');\n }\n\n isVolume(d: any) {\n return d != null && d.hasOwnProperty('chapters');\n }\n\n isChapter(d: any) {\n return d != null && d.hasOwnProperty('volumeId');\n }\n\n isSeries(d: any) {\n return d != null && d.hasOwnProperty('originalName');\n }\n\n asVolume(d: any) {\n return d;\n }\n\n asChapter(d: any) {\n return d;\n }\n\n asSeries(d: any) {\n return d;\n }\n\n getActiveBreakpoint(): Breakpoint {\n if (window.innerWidth <= Breakpoint.Mobile) return Breakpoint.Mobile;\n else if (window.innerWidth > Breakpoint.Mobile && window.innerWidth <= Breakpoint.Tablet) return Breakpoint.Tablet;\n else if (window.innerWidth > Breakpoint.Tablet) return Breakpoint.Desktop\n\n return Breakpoint.Desktop;\n }\n\n isInViewport(element: Element, additionalTopOffset: number = 0) {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= additionalTopOffset &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n }\n\n deepEqual(object1: any, object2: any) {\n if ((object1 === null || object1 === undefined) && (object2 !== null || object2 !== undefined)) return false;\n if ((object2 === null || object2 === undefined) && (object1 !== null || object1 !== undefined)) return false;\n if (object1 === null && object2 === null) return true;\n if (object1 === undefined && object2 === undefined) return true;\n\n\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (const key of keys1) {\n const val1 = object1[key];\n const val2 = object2[key];\n const areObjects = this.isObject(val1) && this.isObject(val2);\n if (\n areObjects && !this.deepEqual(val1, val2) ||\n !areObjects && val1 !== val2\n ) {\n return false;\n }\n }\n return true;\n }\n\n private isObject(object: any) {\n return object != null && typeof object === 'object';\n }\n\n addPaginationIfExists(params: HttpParams, pageNum?: number, itemsPerPage?: number) {\n if (pageNum !== null && pageNum !== undefined && itemsPerPage !== null && itemsPerPage !== undefined) {\n params = params.append('pageNumber', pageNum + '');\n params = params.append('pageSize', itemsPerPage + '');\n }\n return params;\n }\n\n createPaginatedResult(response: any, paginatedVariable: PaginatedResult | undefined = undefined) {\n if (paginatedVariable === undefined) {\n paginatedVariable = new PaginatedResult();\n }\n if (response.body === null) {\n paginatedVariable.result = [];\n } else {\n paginatedVariable.result = response.body;\n }\n\n const pageHeader = response.headers?.get('Pagination');\n if (pageHeader !== null) {\n paginatedVariable.pagination = JSON.parse(pageHeader);\n }\n\n return paginatedVariable;\n }\n\n getWindowDimensions() {\n const windowWidth = window.innerWidth\n || document.documentElement.clientWidth\n || document.body.clientWidth;\n const windowHeight = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n return [windowWidth, windowHeight];\n }\n}\n"], "mappings": "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", "names": ["LibraryType", "Pagination", "constructor", "currentPage", "itemsPerPage", "totalItems", "totalPages", "PaginatedResult", "KEY_CODES", "Breakpoint", "UtilityService", "constructor", "translocoService", "mangaFormatKeys", "sortChapters", "a", "b", "parseFloat", "number", "mangaFormatToText", "format", "undefined", "length", "Object", "keys", "MangaFormat", "filter", "item", "formatChapterName", "libraryType", "includeHash", "includeSpace", "LibraryType", "Book", "translate", "Comic", "Images", "Manga", "input", "reg", "toUpperCase", "replace", "includes", "filterMatches", "isVolume", "d", "hasOwnProperty", "isChapter", "isSeries", "asVolume", "asChapter", "asSeries", "getActiveBreakpoint", "window", "innerWidth", "Mobile", "Tablet", "Desktop", "isInViewport", "element", "additionalTopOffset", "rect", "getBoundingClientRect", "top", "left", "bottom", "innerHeight", "document", "documentElement", "clientHeight", "right", "clientWidth", "deepEqual", "object1", "object2", "keys1", "keys2", "key", "val1", "val2", "areObjects", "isObject", "object", "addPaginationIfExists", "params", "pageNum", "itemsPerPage", "append", "createPaginatedResult", "response", "paginatedVariable", "PaginatedResult", "body", "result", "pageHeader", "headers", "get", "pagination", "JSON", "parse", "getWindowDimensions", "windowWidth", "windowHeight", "\u0275\u0275inject", "TranslocoService", "factory", "\u0275fac", "providedIn", "_UtilityService"] }