{"version":3,"file":"50.3ba35202ceae820f.js","mappings":"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","names":["BulkSelectionService","constructor","router","actionFactory","this","debug","prevIndex","selectedCards","dataSourceMax","isShiftDown","actionsSource","ReplaySubject","actions$","asObservable","selectionsSource","selections$","events","pipe","filter","event","NavigationStart","subscribe","deselectAll","handleCardSelection","dataSource","index","maxIndex","wasSelected","prevDataSource","debugLog","selectCards","next","getActions","isCardSelected","hasOwnProperty","from","to","value","totalSelections","i","hasSelections","Object","keys","key","values","item","length","sum","forEach","getSelectedCardsForSource","ret","k","push","callback","allowedActions","Action","AddToReadingList","MarkAsRead","MarkAsUnread","AddToCollection","Delete","AddToWantToReadList","RemoveFromWantToReadList","applyFilterToList","getSeriesActions","getBookmarkActions","getVolumeActions","message","extraData","undefined","console","log","applyFilter","action","Submenu","includes","children","childAction","list","map","a","t","i0","i1","i2","_angular_core__WEBPACK_IMPORTED_MODULE_4__","Yz7","factory","ɵfac","providedIn","ctx_r2","imageUrl","ctx_r3","imageService","errorImage","ctx_r4","read","total","t_r1","$event","_r13","ctx_r12","handleSelection","ctx_r7","bulkSelectionService","title","entity","id","selected","_c0","ctx_r8","count","ctx_r9","overlayInformation","ctx_r19","format","formatString_r18","CardItemComponent_ng_container_0_div_15_ng_container_4_i_1_Template","ctx_r15","MangaFormat","UNKNOWN","ctx_r16","subtitle","_c1","ctx_r17","libraryId","libraryName","_r22","ctx_r21","handleClick","CardItemComponent_ng_container_0_div_15_span_3_Template","CardItemComponent_ng_container_0_div_15_ng_container_4_Template","ctx_r23","performAction","CardItemComponent_ng_container_0_div_15_span_9_Template","CardItemComponent_ng_container_0_div_15_a_10_Template","ctx_r10","tooltipTitle","isPromoted","actions","suppressLibraryLink","_r25","ctx_r24","CardItemComponent_ng_container_0_ng_container_3_Template","CardItemComponent_ng_container_0_ng_container_4_Template","CardItemComponent_ng_container_0_p_6_Template","CardItemComponent_ng_container_0_div_9_Template","CardItemComponent_ng_container_0_ng_container_10_Template","CardItemComponent_ng_container_0_div_11_Template","CardItemComponent_ng_container_0_div_12_Template","CardItemComponent_ng_container_0_div_14_Template","CardItemComponent_ng_container_0_div_15_Template","ctx_r0","suppressArchiveWarning","download$","allowSelection","CardItemComponent","libraryService","utilityService","downloadService","messageHub","accountService","scrollService","cdRef","actionFactoryService","clicked","EventEmitter","selection","prevTouchTime","prevOffset","selectionInProgress","destroyRef","inject","DestroyRef","ngOnInit","markForCheck","getLibraryName","takeUntilDestroyed","name","isChapter","chapterTitle","asChapter","titleName","volumeTitle","trim","isVolume","vol","asVolume","chapters","isSeries","asSeries","filterSendTo","currentUser$","user","messages$","EVENTS","UserProgressUpdate","evt","payload","updateEvent","username","chapterId","volumeId","seriesId","pagesRead","v","c","chapter","detectChanges","activeDownloads$","find","e","entityType","subTitle","downloadSubtitle","onTouchMove","onTouchStart","timeStamp","scrollPosition","onTouchEnd","delta","stopPropagation","preventDefault","emit","preventClick","Download","volume","download","series","tag","promoted","filterSendToAction","i3","i4","i5","i6","i7","i8","i9","_angular_core__WEBPACK_IMPORTED_MODULE_13__","Xpm","selectors","hostBindings","rf","ctx","CardItemComponent_ng_container_0_Template","CommonModule","i10","ImageComponent","NgbProgressbar","DownloadIndicatorComponent","FormsModule","i11","NgbTooltip","MangaFormatPipe","MangaFormatIconPipe","CardActionablesComponent","SentenceCasePipe","RouterLink","TranslocoModule","i12","styles","changeDetection","download_r3","progress","DownloadIndicatorComponent_ng_container_0_span_1_Template","_angular_core__WEBPACK_IMPORTED_MODULE_0__","inputs","standalone","features","decls","vars","consts","template","DownloadIndicatorComponent_ng_container_0_Template","CircularLoaderComponent","TranslocoDirective"],"sourceRoot":"webpack:///","sources":["./src/app/cards/bulk-selection.service.ts","./src/app/cards/card-item/card-item.component.html","./src/app/cards/card-item/card-item.component.ts","./src/app/cards/download-indicator/download-indicator.component.html","./src/app/cards/download-indicator/download-indicator.component.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { ReplaySubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { Action, ActionFactoryService, ActionItem } from '../_services/action-factory.service';\n\ntype DataSource = 'volume' | 'chapter' | 'special' | 'series' | 'bookmark';\n\n/**\n * Responsible for handling selections on cards. Can handle multiple card sources next to each other in different loops.\n * This will clear selections between pages.\n *\n * Remakrs: Page which renders cards is responsible for listening for shift keydown/keyup and updating our state variable.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BulkSelectionService {\n\n private debug: boolean = false;\n private prevIndex: number = 0;\n private prevDataSource!: DataSource;\n private selectedCards: { [key: string]: {[key: number]: boolean} } = {};\n private dataSourceMax: { [key: string]: number} = {};\n public isShiftDown: boolean = false;\n\n private actionsSource = new ReplaySubject[]>(1);\n public actions$ = this.actionsSource.asObservable();\n\n private selectionsSource = new ReplaySubject(1);\n /**\n * Number of active selections\n */\n public selections$ = this.selectionsSource.asObservable();\n\n constructor(router: Router, private actionFactory: ActionFactoryService) {\n router.events\n .pipe(filter(event => event instanceof NavigationStart))\n .subscribe(() => {\n this.deselectAll();\n this.dataSourceMax = {};\n this.prevIndex = 0;\n });\n }\n\n handleCardSelection(dataSource: DataSource, index: number, maxIndex: number, wasSelected: boolean) {\n if (this.isShiftDown) {\n\n if (dataSource === this.prevDataSource) {\n this.debugLog('Selecting ' + dataSource + ' cards from ' + this.prevIndex + ' to ' + index);\n this.selectCards(dataSource, this.prevIndex, index, !wasSelected);\n } else {\n const isForwardSelection = index > this.prevIndex;\n\n if (isForwardSelection) {\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + this.prevIndex + ' to ' + this.dataSourceMax[this.prevDataSource]);\n this.selectCards(this.prevDataSource, this.prevIndex, this.dataSourceMax[this.prevDataSource], !wasSelected);\n this.debugLog('Selecting ' + dataSource + ' cards from ' + 0 + ' to ' + index);\n this.selectCards(dataSource, 0, index, !wasSelected);\n } else {\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + 0 + ' to ' + this.prevIndex);\n this.selectCards(this.prevDataSource, this.prevIndex, 0, !wasSelected);\n this.debugLog('Selecting ' + dataSource + ' cards from ' + index + ' to ' + maxIndex);\n this.selectCards(dataSource, index, maxIndex, !wasSelected);\n }\n }\n } else {\n this.debugLog('Selecting ' + dataSource + ' cards at ' + index);\n this.selectCards(dataSource, index, index, !wasSelected);\n }\n this.prevIndex = index;\n this.prevDataSource = dataSource;\n this.dataSourceMax[dataSource] = maxIndex;\n this.actionsSource.next(this.getActions(() => {}));\n }\n\n isCardSelected(dataSource: DataSource, index: number) {\n if (this.selectedCards.hasOwnProperty(dataSource) && this.selectedCards[dataSource].hasOwnProperty(index)) {\n return this.selectedCards[dataSource][index];\n }\n return false;\n }\n\n selectCards(dataSource: DataSource, from: number, to: number, value: boolean) {\n if (!this.selectedCards.hasOwnProperty(dataSource)) {\n this.selectedCards[dataSource] = {};\n }\n\n if (from === to) {\n this.selectedCards[dataSource][to] = value;\n this.selectionsSource.next(this.totalSelections());\n return;\n }\n\n if (from > to) {\n for (let i = to; i <= from; i++) {\n this.selectedCards[dataSource][i] = value;\n }\n }\n\n for (let i = from; i <= to; i++) {\n this.selectedCards[dataSource][i] = value;\n }\n this.selectionsSource.next(this.totalSelections());\n }\n\n deselectAll() {\n this.selectedCards = {};\n this.selectionsSource.next(0);\n }\n\n hasSelections() {\n const keys = Object.keys(this.selectedCards);\n return keys.filter(key => {\n return Object.values(this.selectedCards[key]).filter(item => item).length > 0;\n }).length > 0;\n }\n\n totalSelections() {\n let sum = 0;\n const keys = Object.keys(this.selectedCards);\n keys.forEach(key => {\n sum += Object.values(this.selectedCards[key]).filter(item => item).length;\n });\n return sum;\n }\n\n getSelectedCardsForSource(dataSource: DataSource) {\n if (!this.selectedCards.hasOwnProperty(dataSource)) return [];\n\n let ret = [];\n for(let k in this.selectedCards[dataSource]) {\n if (this.selectedCards[dataSource][k]) {\n ret.push(k);\n }\n }\n\n return ret;\n }\n\n getActions(callback: (action: ActionItem, data: any) => void) {\n // checks if series is present. If so, returns only series actions\n // else returns volume/chapter items\n const allowedActions = [Action.AddToReadingList, Action.MarkAsRead, Action.MarkAsUnread, Action.AddToCollection,\n Action.Delete, Action.AddToWantToReadList, Action.RemoveFromWantToReadList];\n if (Object.keys(this.selectedCards).filter(item => item === 'series').length > 0) {\n return this.applyFilterToList(this.actionFactory.getSeriesActions(callback), allowedActions);\n }\n\n if (Object.keys(this.selectedCards).filter(item => item === 'bookmark').length > 0) {\n return this.actionFactory.getBookmarkActions(callback);\n }\n\n return this.applyFilterToList(this.actionFactory.getVolumeActions(callback), allowedActions);\n }\n\n private debugLog(message: string, extraData?: any) {\n if (!this.debug) return;\n\n if (extraData !== undefined) {\n console.log(message, extraData);\n } else {\n console.log(message);\n }\n }\n\n private applyFilter(action: ActionItem, allowedActions: Array) {\n\n var ret = false;\n if (action.action === Action.Submenu || allowedActions.includes(action.action)) {\n // Do something\n ret = true;\n }\n\n if (action.children === null || action.children?.length === 0) return ret;\n\n action.children = action.children.filter((childAction) => this.applyFilter(childAction, allowedActions));\n\n return ret;\n }\n\n\tprivate applyFilterToList(list: Array>, allowedActions: Array): Array> {\n\t\tconst actions = list.map((a) => {\n\t\t\treturn { ...a };\n\t\t});\n return actions.filter(action => this.applyFilter(action, allowedActions));\n\t}\n}\n","\n
\n
\n 0 || suppressArchiveWarning\">\n \n \n \n \n \n\n
\n

0 && read !== total\" ngbTooltip=\"{{((read / total) * 100) | number:'1.0-1'}}% Read\">\n \n

\n \n \n \n
\n
\n {{t('cannot-read')}}\n
\n\n 0\">\n
\n
\n
\n
\n\n
\n \n
\n\n
1\">\n {{count}}\n
\n
\n
\n
\n {{overlayInformation}}\n
\n
\n
\n\n
0 || actions.length > 0\">\n
\n \n \n \n (promoted)\n \n \n \n {{formatString}}\n \n {{title}}\n \n \n \n \n
\n 0\">{{subtitle}}\n \n {{libraryName | sentenceCase}}\n \n
\n
\n\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, DestroyRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { DownloadEvent, DownloadService } from 'src/app/shared/_services/download.service';\nimport { UtilityService } from 'src/app/shared/_services/utility.service';\nimport { Chapter } from 'src/app/_models/chapter';\nimport { CollectionTag } from 'src/app/_models/collection-tag';\nimport { UserProgressUpdateEvent } from 'src/app/_models/events/user-progress-update-event';\nimport { MangaFormat } from 'src/app/_models/manga-format';\nimport { PageBookmark } from 'src/app/_models/readers/page-bookmark';\nimport { RecentlyAddedItem } from 'src/app/_models/recently-added-item';\nimport { Series } from 'src/app/_models/series';\nimport { User } from 'src/app/_models/user';\nimport { Volume } from 'src/app/_models/volume';\nimport { AccountService } from 'src/app/_services/account.service';\nimport { Action, ActionFactoryService, ActionItem } from 'src/app/_services/action-factory.service';\nimport { ImageService } from 'src/app/_services/image.service';\nimport { LibraryService } from 'src/app/_services/library.service';\nimport { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';\nimport { ScrollService } from 'src/app/_services/scroll.service';\nimport { BulkSelectionService } from '../bulk-selection.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {ImageComponent} from \"../../shared/image/image.component\";\nimport {NgbProgressbar, NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\nimport {DownloadIndicatorComponent} from \"../download-indicator/download-indicator.component\";\nimport {FormsModule} from \"@angular/forms\";\nimport {MangaFormatPipe} from \"../../pipe/manga-format.pipe\";\nimport {MangaFormatIconPipe} from \"../../pipe/manga-format-icon.pipe\";\nimport {SentenceCasePipe} from \"../../pipe/sentence-case.pipe\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterLink} from \"@angular/router\";\nimport {TranslocoModule} from \"@ngneat/transloco\";\nimport {CardActionablesComponent} from \"../../_single-module/card-actionables/card-actionables.component\";\n\n@Component({\n selector: 'app-card-item',\n standalone: true,\n imports: [\n CommonModule,\n ImageComponent,\n NgbProgressbar,\n DownloadIndicatorComponent,\n FormsModule,\n NgbTooltip,\n MangaFormatPipe,\n MangaFormatIconPipe,\n CardActionablesComponent,\n SentenceCasePipe,\n RouterLink,\n TranslocoModule\n ],\n templateUrl: './card-item.component.html',\n styleUrls: ['./card-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardItemComponent implements OnInit {\n\n /**\n * Card item url. Will internally handle error and missing covers\n */\n @Input() imageUrl = '';\n /**\n * Name of the card\n */\n @Input() title = '';\n /**\n * Shows below the title. Defaults to not visible\n */\n @Input() subtitle = '';\n /**\n * Any actions to perform on the card\n */\n @Input() actions: ActionItem[] = [];\n /**\n * Pages Read\n */\n @Input() read = 0;\n /**\n * Total Pages\n */\n @Input() total = 0;\n /**\n * Suppress library link\n */\n @Input() suppressLibraryLink = false;\n /**\n * This is the entity we are representing. It will be returned if an action is executed.\n */\n @Input({required: true}) entity!: Series | Volume | Chapter | CollectionTag | PageBookmark | RecentlyAddedItem;\n /**\n * If the entity is selected or not.\n */\n @Input() selected: boolean = false;\n /**\n * If the entity should show selection code\n */\n @Input() allowSelection: boolean = false;\n /**\n * This will suppress the cannot read archive warning when total pages is 0\n */\n @Input() suppressArchiveWarning: boolean = false;\n /**\n * The number of updates/items within the card. If less than 2, will not be shown.\n */\n @Input() count: number = 0;\n /**\n * Additional information to show on the overlay area. Will always render.\n */\n @Input() overlayInformation: string = '';\n /**\n * Event emitted when item is clicked\n */\n @Output() clicked = new EventEmitter();\n /**\n * When the card is selected.\n */\n @Output() selection = new EventEmitter();\n /**\n * Library name item belongs to\n */\n libraryName: string | undefined = undefined;\n libraryId: number | undefined = undefined;\n /**\n * Format of the entity (only applies to Series)\n */\n format: MangaFormat = MangaFormat.UNKNOWN;\n tooltipTitle: string = this.title;\n\n /**\n * This is the download we get from download service.\n */\n download$: Observable | null = null;\n\n /**\n * Handles touch events for selection on mobile devices\n */\n prevTouchTime: number = 0;\n /**\n * Handles touch events for selection on mobile devices to ensure you aren't touch scrolling\n */\n prevOffset: number = 0;\n selectionInProgress: boolean = false;\n\n private user: User | undefined;\n private readonly destroyRef = inject(DestroyRef);\n\n get MangaFormat(): typeof MangaFormat {\n return MangaFormat;\n }\n\n\n constructor(public imageService: ImageService, private libraryService: LibraryService,\n public utilityService: UtilityService, private downloadService: DownloadService,\n public bulkSelectionService: BulkSelectionService,\n private messageHub: MessageHubService, private accountService: AccountService,\n private scrollService: ScrollService, private readonly cdRef: ChangeDetectorRef,\n private actionFactoryService: ActionFactoryService) {}\n\n ngOnInit(): void {\n\n if (this.entity.hasOwnProperty('promoted') && this.entity.hasOwnProperty('title')) {\n this.suppressArchiveWarning = true;\n this.cdRef.markForCheck();\n }\n\n if (!this.suppressLibraryLink) {\n if (this.entity !== undefined && this.entity.hasOwnProperty('libraryId')) {\n this.libraryId = (this.entity as Series).libraryId;\n this.cdRef.markForCheck();\n }\n\n if (this.libraryId !== undefined && this.libraryId > 0) {\n this.libraryService.getLibraryName(this.libraryId).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(name => {\n this.libraryName = name;\n this.cdRef.markForCheck();\n });\n }\n }\n this.format = (this.entity as Series).format;\n\n if (this.utilityService.isChapter(this.entity)) {\n const chapterTitle = this.utilityService.asChapter(this.entity).titleName;\n if (chapterTitle === '' || chapterTitle === null || chapterTitle === undefined) {\n const volumeTitle = this.utilityService.asChapter(this.entity).volumeTitle\n if (volumeTitle === '' || volumeTitle === null || volumeTitle === undefined) {\n this.tooltipTitle = (this.title).trim();\n } else {\n this.tooltipTitle = (this.utilityService.asChapter(this.entity).volumeTitle + ' ' + this.title).trim();\n }\n } else {\n this.tooltipTitle = chapterTitle;\n }\n } else if (this.utilityService.isVolume(this.entity)) {\n const vol = this.utilityService.asVolume(this.entity);\n if (vol.chapters !== undefined && vol.chapters.length > 0) {\n this.tooltipTitle = vol.chapters[0].titleName;\n }\n if (this.tooltipTitle === '') {\n this.tooltipTitle = vol.name;\n }\n } else if (this.utilityService.isSeries(this.entity)) {\n this.tooltipTitle = this.title || (this.utilityService.asSeries(this.entity).name);\n }\n\n this.filterSendTo();\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\n this.user = user;\n });\n\n this.messageHub.messages$.pipe(filter(event => event.event === EVENTS.UserProgressUpdate),\n map(evt => evt.payload as UserProgressUpdateEvent), takeUntilDestroyed(this.destroyRef)).subscribe(updateEvent => {\n if (this.user === undefined || this.user.username !== updateEvent.username) return;\n if (this.utilityService.isChapter(this.entity) && updateEvent.chapterId !== this.entity.id) return;\n if (this.utilityService.isVolume(this.entity) && updateEvent.volumeId !== this.entity.id) return;\n if (this.utilityService.isSeries(this.entity) && updateEvent.seriesId !== this.entity.id) return;\n\n // For volume or Series, we can't just take the event\n if (this.utilityService.isChapter(this.entity)) {\n const c = this.utilityService.asChapter(this.entity);\n c.pagesRead = updateEvent.pagesRead;\n this.read = updateEvent.pagesRead;\n }\n if (this.utilityService.isVolume(this.entity) || this.utilityService.isSeries(this.entity)) {\n if (this.utilityService.isVolume(this.entity)) {\n const v = this.utilityService.asVolume(this.entity);\n let sum = 0;\n const chapters = v.chapters.filter(c => c.volumeId === updateEvent.volumeId);\n chapters.forEach(chapter => {\n chapter.pagesRead = updateEvent.pagesRead;\n sum += chapter.pagesRead;\n });\n v.pagesRead = sum;\n this.read = sum;\n } else {\n return;\n }\n }\n\n this.cdRef.detectChanges();\n });\n\n this.download$ = this.downloadService.activeDownloads$.pipe(takeUntilDestroyed(this.destroyRef), map((events) => {\n if(this.utilityService.isSeries(this.entity)) return events.find(e => e.entityType === 'series' && e.subTitle === this.downloadService.downloadSubtitle('series', (this.entity as Series))) || null;\n if(this.utilityService.isVolume(this.entity)) return events.find(e => e.entityType === 'volume' && e.subTitle === this.downloadService.downloadSubtitle('volume', (this.entity as Volume))) || null;\n if(this.utilityService.isChapter(this.entity)) return events.find(e => e.entityType === 'chapter' && e.subTitle === this.downloadService.downloadSubtitle('chapter', (this.entity as Chapter))) || null;\n // Is PageBookmark[]\n if(this.entity.hasOwnProperty('length')) return events.find(e => e.entityType === 'bookmark' && e.subTitle === this.downloadService.downloadSubtitle('bookmark', [(this.entity as PageBookmark)])) || null;\n return null;\n }));\n\n }\n\n\n @HostListener('touchmove', ['$event'])\n onTouchMove(event: TouchEvent) {\n if (!this.allowSelection) return;\n\n this.selectionInProgress = false;\n this.cdRef.markForCheck();\n }\n\n @HostListener('touchstart', ['$event'])\n onTouchStart(event: TouchEvent) {\n if (!this.allowSelection) return;\n\n this.prevTouchTime = event.timeStamp;\n this.prevOffset = this.scrollService.scrollPosition;\n this.selectionInProgress = true;\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(event: TouchEvent) {\n if (!this.allowSelection) return;\n const delta = event.timeStamp - this.prevTouchTime;\n const verticalOffset = this.scrollService.scrollPosition;\n\n if (delta >= 300 && delta <= 1000 && (verticalOffset === this.prevOffset) && this.selectionInProgress) {\n this.handleSelection();\n event.stopPropagation();\n event.preventDefault();\n }\n this.prevTouchTime = 0;\n this.selectionInProgress = false;\n }\n\n\n handleClick(event?: any) {\n if (this.bulkSelectionService.hasSelections()) {\n this.handleSelection();\n return;\n }\n this.clicked.emit(this.title);\n }\n\n preventClick(event: any) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n performAction(action: ActionItem) {\n if (action.action == Action.Download) {\n if (this.utilityService.isVolume(this.entity)) {\n const volume = this.utilityService.asVolume(this.entity);\n this.downloadService.download('volume', volume);\n } else if (this.utilityService.isChapter(this.entity)) {\n const chapter = this.utilityService.asChapter(this.entity);\n this.downloadService.download('chapter', chapter);\n } else if (this.utilityService.isSeries(this.entity)) {\n const series = this.utilityService.asSeries(this.entity);\n this.downloadService.download('series', series);\n }\n return; // Don't propagate the download from a card\n }\n\n if (typeof action.callback === 'function') {\n action.callback(action, this.entity);\n }\n }\n\n\n isPromoted() {\n const tag = this.entity as CollectionTag;\n return tag.hasOwnProperty('promoted') && tag.promoted;\n }\n\n\n handleSelection(event?: any) {\n if (event) {\n event.stopPropagation();\n }\n this.selection.emit(this.selected);\n this.cdRef.detectChanges();\n }\n\n filterSendTo() {\n if (!this.actions || this.actions.length === 0) return;\n\n if (this.utilityService.isChapter(this.entity)) {\n this.actions = this.actionFactoryService.filterSendToAction(this.actions, this.entity as Chapter);\n } else if (this.utilityService.isVolume(this.entity)) {\n const vol = this.utilityService.asVolume(this.entity);\n this.actions = this.actionFactoryService.filterSendToAction(this.actions, vol.chapters[0]);\n } else if (this.utilityService.isSeries(this.entity)) {\n const series = (this.entity as Series);\n // if (series.format === MangaFormat.EPUB || series.format === MangaFormat.PDF) {\n // this.actions = this.actions.filter(a => a.title !== 'Send To');\n // }\n }\n }\n}\n","\n \n \n \n {{t('progress',{percentage: download.progress})}}\n \n \n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Download } from 'src/app/shared/_models/download';\nimport { DownloadEvent } from 'src/app/shared/_services/download.service';\nimport {CommonModule} from \"@angular/common\";\nimport {CircularLoaderComponent} from \"../../shared/circular-loader/circular-loader.component\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n@Component({\n selector: 'app-download-indicator',\n standalone: true,\n imports: [CommonModule, CircularLoaderComponent, TranslocoDirective],\n templateUrl: './download-indicator.component.html',\n styleUrls: ['./download-indicator.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DownloadIndicatorComponent {\n\n /**\n * Observable that represents when the download completes\n */\n @Input({required: true}) download$!: Observable | null;\n\n constructor() { }\n}\n"],"x_google_ignoreList":[]}