{ "version": 3, "sources": ["src/app/cards/entity-title/entity-title.component.ts", "src/app/cards/entity-title/entity-title.component.html"], "sourcesContent": ["import {ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnInit} from '@angular/core';\r\nimport { UtilityService } from 'src/app/shared/_services/utility.service';\r\nimport { Chapter, LooseLeafOrDefaultNumber } from 'src/app/_models/chapter';\r\nimport { LibraryType } from 'src/app/_models/library/library';\r\nimport { Volume } from 'src/app/_models/volume';\r\nimport {translate, TranslocoModule} from \"@jsverse/transloco\";\r\nimport {DefaultValuePipe} from \"../../_pipes/default-value.pipe\";\r\n\r\n/**\r\n * This is primarily used for list item\r\n */\r\n@Component({\r\n selector: 'app-entity-title',\r\n standalone: true,\r\n imports: [\r\n TranslocoModule,\r\n DefaultValuePipe\r\n ],\r\n templateUrl: './entity-title.component.html',\r\n styleUrls: ['./entity-title.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EntityTitleComponent implements OnInit {\r\n\r\n private readonly utilityService = inject(UtilityService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n\r\n protected readonly LooseLeafOrSpecial = LooseLeafOrDefaultNumber + \"\";\r\n protected readonly LibraryType = LibraryType;\r\n\r\n /**\r\n * Library type for which the entity belongs\r\n */\r\n @Input() libraryType: LibraryType = LibraryType.Manga;\r\n @Input({required: true}) entity!: Volume | Chapter;\r\n /**\r\n * When generating the title, should this prepend 'Volume number' before the Chapter wording\r\n */\r\n @Input() includeVolume: boolean = false;\r\n /**\r\n * When generating the title, should this prepend 'Chapter number' before the Chapter titlename\r\n */\r\n @Input() includeChapter: boolean = false;\r\n /**\r\n * When a titleName (aka a title) is available on the entity, show it over Volume X Chapter Y\r\n */\r\n @Input() prioritizeTitleName: boolean = true;\r\n /**\r\n * When there is no meaningful title to display and the chapter is just a single volume, show the volume number\r\n */\r\n @Input() fallbackToVolume: boolean = true;\r\n\r\n isChapter = false;\r\n titleName: string = '';\r\n volumeTitle: string = '';\r\n number: string = '';\r\n renderText: string = '';\r\n\r\n\r\n ngOnInit(): void {\r\n this.isChapter = this.utilityService.isChapter(this.entity);\r\n\r\n if (this.isChapter) {\r\n const c = (this.entity as Chapter);\r\n this.volumeTitle = c.volumeTitle || '';\r\n this.titleName = c.titleName || '';\r\n this.number = c.range;\r\n } else {\r\n const v = this.utilityService.asVolume(this.entity);\r\n this.volumeTitle = v.name || '';\r\n this.titleName = v.name || '';\r\n if (v.chapters[0].titleName) {\r\n this.titleName += ' - ' + v.chapters[0].titleName;\r\n }\r\n this.number = v.name;\r\n }\r\n\r\n this.calculateRenderText();\r\n\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n private calculateRenderText() {\r\n switch (this.libraryType) {\r\n case LibraryType.Manga:\r\n this.renderText = this.calculateMangaRenderText();\r\n break;\r\n case LibraryType.Comic:\r\n this.renderText = this.calculateComicRenderText();\r\n break;\r\n case LibraryType.Book:\r\n this.renderText = this.calculateBookRenderText();\r\n break;\r\n case LibraryType.Images:\r\n this.renderText = this.calculateImageRenderText();\r\n break;\r\n case LibraryType.LightNovel:\r\n this.renderText = this.calculateLightNovelRenderText();\r\n break;\r\n case LibraryType.ComicVine:\r\n this.renderText = this.calculateComicRenderText();\r\n break;\r\n }\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n private calculateBookRenderText() {\r\n let renderText = '';\r\n if (this.titleName !== '' && this.prioritizeTitleName) {\r\n renderText = this.titleName;\r\n } else if (this.fallbackToVolume && this.isChapter) { // (his is a single volume on volume detail page\r\n renderText = translate('entity-title.single-volume');\r\n } else if (this.number === this.LooseLeafOrSpecial) {\r\n renderText = '';\r\n } else {\r\n renderText = translate('entity-title.book-num', {num: this.volumeTitle});\r\n }\r\n return renderText;\r\n }\r\n\r\n private calculateLightNovelRenderText() {\r\n let renderText = '';\r\n if (this.titleName !== '' && this.prioritizeTitleName) {\r\n renderText = this.titleName;\r\n } else if (this.fallbackToVolume && this.isChapter) { // (his is a single volume on volume detail page\r\n renderText = translate('entity-title.single-volume');\r\n } else if (this.number === this.LooseLeafOrSpecial) {\r\n renderText = '';\r\n } else {\r\n const bookNum = this.isChapter ? this.number : this.volumeTitle;\r\n renderText = translate('entity-title.book-num', {num: bookNum});\r\n }\r\n return renderText;\r\n }\r\n\r\n private calculateMangaRenderText() {\r\n let renderText = '';\r\n\r\n if (this.titleName !== '' && this.prioritizeTitleName) {\r\n if (this.isChapter && this.includeChapter) {\r\n if (this.number === this.LooseLeafOrSpecial) {\r\n renderText = translate('entity-title.chapter') + ' - ';\r\n } else {\r\n renderText = translate('entity-title.chapter') + ' ' + this.number + ' - ';\r\n }\r\n }\r\n\r\n renderText += this.titleName;\r\n } else {\r\n if (this.includeVolume && this.volumeTitle !== '') {\r\n if (this.number !== this.LooseLeafOrSpecial && this.isChapter && this.includeVolume) {\r\n renderText = this.volumeTitle;\r\n }\r\n }\r\n\r\n if (this.number !== this.LooseLeafOrSpecial) {\r\n if (this.isChapter) {\r\n renderText = translate('entity-title.chapter') + ' ' + this.number;\r\n } else {\r\n renderText = this.volumeTitle;\r\n }\r\n } else if (this.fallbackToVolume && this.isChapter && this.volumeTitle) {\r\n renderText = translate('entity-title.vol-num', {num: this.volumeTitle});\r\n } else if (this.fallbackToVolume && this.isChapter) { // this.volumeTitle === '' (this is a single volume on volume detail page)\r\n renderText = translate('entity-title.single-volume');\r\n } else {\r\n renderText = translate('entity-title.special');\r\n }\r\n }\r\n\r\n\r\n return renderText;\r\n }\r\n\r\n private calculateImageRenderText() {\r\n let renderText = '';\r\n\r\n if (this.number !== this.LooseLeafOrSpecial) {\r\n if (this.isChapter) {\r\n renderText = translate('entity-title.chapter') + ' ' + this.number;\r\n } else {\r\n renderText = this.volumeTitle;\r\n }\r\n } else {\r\n renderText = translate('entity-title.special');\r\n }\r\n\r\n return renderText;\r\n }\r\n\r\n\r\n private calculateComicRenderText() {\r\n let renderText = '';\r\n\r\n // If titleName is provided and prioritized\r\n if (this.titleName && this.prioritizeTitleName) {\r\n if (this.isChapter && this.includeChapter) {\r\n renderText = translate('entity-title.issue-num') + ' ' + this.number + ' - ';\r\n }\r\n renderText += this.titleName;\r\n } else {\r\n // Otherwise, check volume and number logic\r\n if (this.includeVolume && this.volumeTitle) {\r\n if (this.number !== this.LooseLeafOrSpecial) {\r\n renderText = this.isChapter ? this.volumeTitle : '';\r\n }\r\n }\r\n // Render either issue number or volume title, or \"special\" if applicable\r\n renderText += this.number !== this.LooseLeafOrSpecial\r\n ? (this.isChapter ? translate('entity-title.issue-num') + ' ' + this.number : this.volumeTitle)\r\n : translate('entity-title.special');\r\n }\r\n\r\n return renderText;\r\n }\r\n}\r\n", "\r\n {{renderText | defaultValue}}\r\n\r\n"], "mappings": "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", "names": ["\u0275\u0275elementContainerStart", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind1", "ctx_r0", "renderText", "EntityTitleComponent", "constructor", "utilityService", "inject", "UtilityService", "cdRef", "ChangeDetectorRef", "LooseLeafOrSpecial", "LooseLeafOrDefaultNumber", "LibraryType", "libraryType", "Manga", "includeVolume", "includeChapter", "prioritizeTitleName", "fallbackToVolume", "isChapter", "titleName", "volumeTitle", "number", "ngOnInit", "entity", "c", "range", "v", "asVolume", "name", "chapters", "calculateRenderText", "markForCheck", "calculateMangaRenderText", "Comic", "calculateComicRenderText", "Book", "calculateBookRenderText", "Images", "calculateImageRenderText", "LightNovel", "calculateLightNovelRenderText", "ComicVine", "translate", "num", "bookNum", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "EntityTitleComponent_ng_container_0_Template", "\u0275\u0275property", "TranslocoModule", "TranslocoDirective", "DefaultValuePipe", "changeDetection"] }