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