{"version":3,"sources":["node_modules/nosleep.js/src/media.js","node_modules/nosleep.js/src/index.js","node_modules/screenfull/index.js","src/app/_services/reader.service.ts"],"sourcesContent":["module.exports = {\n webm: \"data:video/webm;base64,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\",\n mp4: \"data:video/mp4;base64,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\"\n};","const {\n webm,\n mp4\n} = require(\"./media.js\");\n\n// Detect iOS browsers < version 10\nconst oldIOS = () => typeof navigator !== \"undefined\" && parseFloat((\"\" + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, \"\"])[1]).replace(\"undefined\", \"3_2\").replace(\"_\", \".\").replace(\"_\", \"\")) < 10 && !window.MSStream;\n\n// Detect native Wake Lock API support\nconst nativeWakeLock = () => \"wakeLock\" in navigator;\nclass NoSleep {\n constructor() {\n this.enabled = false;\n if (nativeWakeLock()) {\n this._wakeLock = null;\n const handleVisibilityChange = () => {\n if (this._wakeLock !== null && document.visibilityState === \"visible\") {\n this.enable();\n }\n };\n document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n document.addEventListener(\"fullscreenchange\", handleVisibilityChange);\n } else if (oldIOS()) {\n this.noSleepTimer = null;\n } else {\n // Set up no sleep video element\n this.noSleepVideo = document.createElement(\"video\");\n this.noSleepVideo.setAttribute(\"title\", \"No Sleep\");\n this.noSleepVideo.setAttribute(\"playsinline\", \"\");\n this._addSourceToVideo(this.noSleepVideo, \"webm\", webm);\n this._addSourceToVideo(this.noSleepVideo, \"mp4\", mp4);\n this.noSleepVideo.addEventListener(\"loadedmetadata\", () => {\n if (this.noSleepVideo.duration <= 1) {\n // webm source\n this.noSleepVideo.setAttribute(\"loop\", \"\");\n } else {\n // mp4 source\n this.noSleepVideo.addEventListener(\"timeupdate\", () => {\n if (this.noSleepVideo.currentTime > 0.5) {\n this.noSleepVideo.currentTime = Math.random();\n }\n });\n }\n });\n }\n }\n _addSourceToVideo(element, type, dataURI) {\n var source = document.createElement(\"source\");\n source.src = dataURI;\n source.type = `video/${type}`;\n element.appendChild(source);\n }\n get isEnabled() {\n return this.enabled;\n }\n enable() {\n if (nativeWakeLock()) {\n return navigator.wakeLock.request(\"screen\").then(wakeLock => {\n this._wakeLock = wakeLock;\n this.enabled = true;\n console.log(\"Wake Lock active.\");\n this._wakeLock.addEventListener(\"release\", () => {\n // ToDo: Potentially emit an event for the page to observe since\n // Wake Lock releases happen when page visibility changes.\n // (https://web.dev/wakelock/#wake-lock-lifecycle)\n console.log(\"Wake Lock released.\");\n });\n }).catch(err => {\n this.enabled = false;\n console.error(`${err.name}, ${err.message}`);\n throw err;\n });\n } else if (oldIOS()) {\n this.disable();\n console.warn(`\n NoSleep enabled for older iOS devices. This can interrupt\n active or long-running network requests from completing successfully.\n See https://github.com/richtr/NoSleep.js/issues/15 for more details.\n `);\n this.noSleepTimer = window.setInterval(() => {\n if (!document.hidden) {\n window.location.href = window.location.href.split(\"#\")[0];\n window.setTimeout(window.stop, 0);\n }\n }, 15000);\n this.enabled = true;\n return Promise.resolve();\n } else {\n let playPromise = this.noSleepVideo.play();\n return playPromise.then(res => {\n this.enabled = true;\n return res;\n }).catch(err => {\n this.enabled = false;\n throw err;\n });\n }\n }\n disable() {\n if (nativeWakeLock()) {\n if (this._wakeLock) {\n this._wakeLock.release();\n }\n this._wakeLock = null;\n } else if (oldIOS()) {\n if (this.noSleepTimer) {\n console.warn(`\n NoSleep now disabled for older iOS devices.\n `);\n window.clearInterval(this.noSleepTimer);\n this.noSleepTimer = null;\n }\n } else {\n this.noSleepVideo.pause();\n }\n this.enabled = false;\n }\n}\nmodule.exports = NoSleep;","/* eslint-disable promise/prefer-await-to-then */\n\nconst methodMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],\n// New WebKit\n['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'],\n// Old WebKit\n['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'], ['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'], ['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']];\nconst nativeAPI = (() => {\n if (typeof document === 'undefined') {\n return false;\n }\n const unprefixedMethods = methodMap[0];\n const returnValue = {};\n for (const methodList of methodMap) {\n const exitFullscreenMethod = methodList?.[1];\n if (exitFullscreenMethod in document) {\n for (const [index, method] of methodList.entries()) {\n returnValue[unprefixedMethods[index]] = method;\n }\n return returnValue;\n }\n }\n return false;\n})();\nconst eventNameMap = {\n change: nativeAPI.fullscreenchange,\n error: nativeAPI.fullscreenerror\n};\n\n// eslint-disable-next-line import/no-mutable-exports\nlet screenfull = {\n // eslint-disable-next-line default-param-last\n request(element = document.documentElement, options) {\n return new Promise((resolve, reject) => {\n const onFullScreenEntered = () => {\n screenfull.off('change', onFullScreenEntered);\n resolve();\n };\n screenfull.on('change', onFullScreenEntered);\n const returnPromise = element[nativeAPI.requestFullscreen](options);\n if (returnPromise instanceof Promise) {\n returnPromise.then(onFullScreenEntered).catch(reject);\n }\n });\n },\n exit() {\n return new Promise((resolve, reject) => {\n if (!screenfull.isFullscreen) {\n resolve();\n return;\n }\n const onFullScreenExit = () => {\n screenfull.off('change', onFullScreenExit);\n resolve();\n };\n screenfull.on('change', onFullScreenExit);\n const returnPromise = document[nativeAPI.exitFullscreen]();\n if (returnPromise instanceof Promise) {\n returnPromise.then(onFullScreenExit).catch(reject);\n }\n });\n },\n toggle(element, options) {\n return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options);\n },\n onchange(callback) {\n screenfull.on('change', callback);\n },\n onerror(callback) {\n screenfull.on('error', callback);\n },\n on(event, callback) {\n const eventName = eventNameMap[event];\n if (eventName) {\n document.addEventListener(eventName, callback, false);\n }\n },\n off(event, callback) {\n const eventName = eventNameMap[event];\n if (eventName) {\n document.removeEventListener(eventName, callback, false);\n }\n },\n raw: nativeAPI\n};\nObject.defineProperties(screenfull, {\n isFullscreen: {\n get: () => Boolean(document[nativeAPI.fullscreenElement])\n },\n element: {\n enumerable: true,\n get: () => document[nativeAPI.fullscreenElement] ?? undefined\n },\n isEnabled: {\n enumerable: true,\n // Coerce to boolean in case of old WebKit.\n get: () => Boolean(document[nativeAPI.fullscreenEnabled])\n }\n});\nif (!nativeAPI) {\n screenfull = {\n isEnabled: false\n };\n}\nexport default screenfull;","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport {DestroyRef, Inject, inject, Injectable} from '@angular/core';\r\nimport {DOCUMENT, Location} from '@angular/common';\r\nimport { Router } from '@angular/router';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ChapterInfo } from '../manga-reader/_models/chapter-info';\r\nimport { Chapter } from '../_models/chapter';\r\nimport { HourEstimateRange } from '../_models/series-detail/hour-estimate-range';\r\nimport { MangaFormat } from '../_models/manga-format';\r\nimport { BookmarkInfo } from '../_models/manga-reader/bookmark-info';\r\nimport { PageBookmark } from '../_models/readers/page-bookmark';\r\nimport { ProgressBookmark } from '../_models/readers/progress-bookmark';\r\nimport { FileDimension } from '../manga-reader/_models/file-dimension';\r\nimport screenfull from 'screenfull';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { AccountService } from './account.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {PersonalToC} from \"../_models/readers/personal-toc\";\r\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\r\nimport NoSleep from 'nosleep.js';\r\nimport {FullProgress} from \"../_models/readers/full-progress\";\r\nimport {Volume} from \"../_models/volume\";\r\nimport {UtilityService} from \"../shared/_services/utility.service\";\r\nimport {translate} from \"@jsverse/transloco\";\r\nimport {ToastrService} from \"ngx-toastr\";\r\n\r\n\r\nexport const CHAPTER_ID_DOESNT_EXIST = -1;\r\nexport const CHAPTER_ID_NOT_FETCHED = -2;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReaderService {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly utilityService = inject(UtilityService);\r\n private readonly router = inject(Router);\r\n private readonly location = inject(Location);\r\n private readonly accountService = inject(AccountService);\r\n private readonly toastr = inject(ToastrService);\r\n\r\n baseUrl = environment.apiUrl;\r\n encodedKey: string = '';\r\n\r\n // Override background color for reader and restore it onDestroy\r\n private originalBodyColor!: string;\r\n\r\n private noSleep = new NoSleep();\r\n\r\n constructor(private httpClient: HttpClient, @Inject(DOCUMENT) private document: Document) {\r\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\r\n if (user) {\r\n this.encodedKey = encodeURIComponent(user.apiKey);\r\n }\r\n });\r\n }\r\n\r\n enableWakeLock(element?: Element | Document) {\r\n // Enable wake lock.\r\n // (must be wrapped in a user input event handler e.g. a mouse or touch handler)\r\n\r\n if (!element) element = this.document;\r\n\r\n const enableNoSleepHandler = () => {\r\n element!.removeEventListener('click', enableNoSleepHandler, false);\r\n element!.removeEventListener('touchmove', enableNoSleepHandler, false);\r\n element!.removeEventListener('mousemove', enableNoSleepHandler, false);\r\n this.noSleep!.enable();\r\n };\r\n\r\n // Enable wake lock.\r\n // (must be wrapped in a user input event handler e.g. a mouse or touch handler)\r\n element.addEventListener('click', enableNoSleepHandler, false);\r\n element.addEventListener('touchmove', enableNoSleepHandler, false);\r\n element.addEventListener('mousemove', enableNoSleepHandler, false);\r\n }\r\n\r\n disableWakeLock() {\r\n this.noSleep.disable();\r\n }\r\n\r\n\r\n getNavigationArray(libraryId: number, seriesId: number, chapterId: number, format: MangaFormat) {\r\n if (format === undefined) format = MangaFormat.ARCHIVE;\r\n\r\n if (format === MangaFormat.EPUB) {\r\n return ['library', libraryId, 'series', seriesId, 'book', chapterId];\r\n } else if (format === MangaFormat.PDF) {\r\n return ['library', libraryId, 'series', seriesId, 'pdf', chapterId];\r\n } else {\r\n return ['library', libraryId, 'series', seriesId, 'manga', chapterId];\r\n }\r\n }\r\n\r\n downloadPdf(chapterId: number) {\r\n return `${this.baseUrl}reader/pdf?chapterId=${chapterId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n bookmark(seriesId: number, volumeId: number, chapterId: number, page: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/bookmark', {seriesId, volumeId, chapterId, page});\r\n }\r\n\r\n unbookmark(seriesId: number, volumeId: number, chapterId: number, page: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/unbookmark', {seriesId, volumeId, chapterId, page});\r\n }\r\n\r\n getAllBookmarks(filter: SeriesFilterV2 | undefined) {\r\n return this.httpClient.post(this.baseUrl + 'reader/all-bookmarks', filter);\r\n }\r\n\r\n getBookmarks(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/chapter-bookmarks?chapterId=' + chapterId);\r\n }\r\n\r\n getBookmarksForVolume(volumeId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/volume-bookmarks?volumeId=' + volumeId);\r\n }\r\n\r\n getBookmarksForSeries(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/series-bookmarks?seriesId=' + seriesId);\r\n }\r\n\r\n clearBookmarks(seriesId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/remove-bookmarks', {seriesId}, TextResonse);\r\n }\r\n clearMultipleBookmarks(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/bulk-remove-bookmarks', {seriesIds}, TextResonse);\r\n }\r\n\r\n /**\r\n * Used exclusively for reading multiple bookmarks from a series\r\n * @param seriesId\r\n */\r\n getBookmarkInfo(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/bookmark-info?seriesId=' + seriesId);\r\n }\r\n\r\n getProgress(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/get-progress?chapterId=' + chapterId);\r\n }\r\n\r\n getPageUrl(chapterId: number, page: number) {\r\n return `${this.baseUrl}reader/image?chapterId=${chapterId}&apiKey=${this.encodedKey}&page=${page}`;\r\n }\r\n\r\n getThumbnailUrl(chapterId: number, page: number) {\r\n return `${this.baseUrl}reader/thumbnail?chapterId=${chapterId}&apiKey=${this.encodedKey}&page=${page}`;\r\n }\r\n\r\n getBookmarkPageUrl(seriesId: number, apiKey: string, page: number) {\r\n return this.baseUrl + 'reader/bookmark-image?seriesId=' + seriesId + '&page=' + page + '&apiKey=' + encodeURIComponent(apiKey);\r\n }\r\n\r\n getChapterInfo(chapterId: number, includeDimensions = false) {\r\n return this.httpClient.get(this.baseUrl + 'reader/chapter-info?chapterId=' + chapterId + '&includeDimensions=' + includeDimensions);\r\n }\r\n\r\n getFileDimensions(chapterId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'reader/file-dimensions?chapterId=' + chapterId);\r\n }\r\n\r\n saveProgress(libraryId: number, seriesId: number, volumeId: number, chapterId: number, page: number, bookScrollId: string | null = null) {\r\n return this.httpClient.post(this.baseUrl + 'reader/progress', {libraryId, seriesId, volumeId, chapterId, pageNum: page, bookScrollId});\r\n }\r\n\r\n getAllProgressForChapter(chapterId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'reader/all-chapter-progress?chapterId=' + chapterId);\r\n }\r\n\r\n markVolumeRead(seriesId: number, volumeId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-volume-read', {seriesId, volumeId});\r\n }\r\n\r\n markMultipleRead(seriesId: number, volumeIds: Array, chapterIds?: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-read', {seriesId, volumeIds, chapterIds});\r\n }\r\n\r\n markMultipleUnread(seriesId: number, volumeIds: Array, chapterIds?: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-unread', {seriesId, volumeIds, chapterIds});\r\n }\r\n\r\n markMultipleSeriesRead(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-series-read', {seriesIds});\r\n }\r\n\r\n markMultipleSeriesUnread(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-series-unread', {seriesIds});\r\n }\r\n\r\n markVolumeUnread(seriesId: number, volumeId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-volume-unread', {seriesId, volumeId});\r\n }\r\n\r\n\r\n getNextChapter(seriesId: number, volumeId: number, currentChapterId: number, readingListId: number = -1) {\r\n if (readingListId > 0) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist/next-chapter?seriesId=' + seriesId + '¤tChapterId=' + currentChapterId + '&readingListId=' + readingListId);\r\n }\r\n return this.httpClient.get(this.baseUrl + 'reader/next-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId);\r\n }\r\n\r\n getPrevChapter(seriesId: number, volumeId: number, currentChapterId: number, readingListId: number = -1) {\r\n if (readingListId > 0) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist/prev-chapter?seriesId=' + seriesId + '¤tChapterId=' + currentChapterId + '&readingListId=' + readingListId);\r\n }\r\n return this.httpClient.get(this.baseUrl + 'reader/prev-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId);\r\n }\r\n\r\n hasSeriesProgress(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/has-progress?seriesId=' + seriesId);\r\n }\r\n\r\n getCurrentChapter(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/continue-point?seriesId=' + seriesId);\r\n }\r\n\r\n getTimeLeft(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/time-left?seriesId=' + seriesId);\r\n }\r\n\r\n /**\r\n * Captures current body color and forces background color to be black. Call @see resetOverrideStyles() on destroy of component to revert changes\r\n */\r\n setOverrideStyles(backgroundColor: string = 'black') {\r\n const bodyNode = document.querySelector('body');\r\n if (bodyNode !== undefined && bodyNode !== null) {\r\n this.originalBodyColor = bodyNode.style.background;\r\n bodyNode.setAttribute('style', 'background-color: ' + backgroundColor + ' !important');\r\n }\r\n }\r\n\r\n resetOverrideStyles() {\r\n const bodyNode = document.querySelector('body');\r\n if (bodyNode !== undefined && bodyNode !== null && this.originalBodyColor !== undefined) {\r\n bodyNode.style.background = this.originalBodyColor;\r\n }\r\n }\r\n\r\n /**\r\n * Parses out the page number from a Image src url\r\n * @param imageSrc Src attribute of Image\r\n * @returns\r\n */\r\n imageUrlToPageNum(imageSrc: string) {\r\n if (imageSrc === undefined || imageSrc === '') { return -1; }\r\n const params = new URLSearchParams(new URL(imageSrc).search);\r\n return parseInt(params.get('page') || '-1', 10);\r\n }\r\n\r\n imageUrlToChapterId(imageSrc: string) {\r\n if (imageSrc === undefined || imageSrc === '') { return -1; }\r\n const params = new URLSearchParams(new URL(imageSrc).search);\r\n return parseInt(params.get('chapterId') || '-1', 10);\r\n }\r\n\r\n getNextChapterUrl(url: string, nextChapterId: number, incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\r\n const lastSlashIndex = url.lastIndexOf('/');\r\n let newRoute = url.substring(0, lastSlashIndex + 1) + nextChapterId + '';\r\n newRoute += this.getQueryParams(incognitoMode, readingListMode, readingListId);\r\n return newRoute;\r\n }\r\n\r\n\r\n getQueryParamsObject(incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\r\n let params: {[key: string]: any} = {};\r\n if (incognitoMode) {\r\n params['incognitoMode'] = true;\r\n }\r\n if (readingListMode) {\r\n params['readingListId'] = readingListId;\r\n }\r\n return params;\r\n }\r\n\r\n getQueryParams(incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\r\n let params = '';\r\n if (incognitoMode) {\r\n params += '?incognitoMode=true';\r\n }\r\n if (readingListMode) {\r\n if (params.indexOf('?') > 0) {\r\n params += '&readingListId=' + readingListId;\r\n } else {\r\n params += '?readingListId=' + readingListId;\r\n }\r\n }\r\n return params;\r\n }\r\n\r\n toggleFullscreen(el: Element, callback?: VoidFunction) {\r\n\r\n if (screenfull.isEnabled) {\r\n screenfull.toggle();\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @returns If document is in fullscreen mode\r\n */\r\n checkFullscreenMode() {\r\n return document.fullscreenElement != null;\r\n }\r\n\r\n /**\r\n * Closes the reader and causes a redirection\r\n */\r\n closeReader(readingListMode: boolean = false, readingListId: number = 0) {\r\n if (readingListMode) {\r\n this.router.navigateByUrl('lists/' + readingListId);\r\n } else {\r\n // TODO: back doesn't always work, it might be nice to check the pattern of the url and see if we can be smart before just going back\r\n this.location.back();\r\n }\r\n }\r\n\r\n removePersonalToc(chapterId: number, pageNumber: number, title: string) {\r\n return this.httpClient.delete(this.baseUrl + `reader/ptoc?chapterId=${chapterId}&pageNum=${pageNumber}&title=${encodeURIComponent(title)}`);\r\n }\r\n\r\n getPersonalToC(chapterId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'reader/ptoc?chapterId=' + chapterId);\r\n }\r\n\r\n createPersonalToC(libraryId: number, seriesId: number, volumeId: number, chapterId: number, pageNumber: number, title: string, bookScrollId: string | null) {\r\n return this.httpClient.post(this.baseUrl + 'reader/create-ptoc', {libraryId, seriesId, volumeId, chapterId, pageNumber, title, bookScrollId});\r\n }\r\n\r\n getElementFromXPath(path: string) {\r\n const node = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\r\n if (node?.nodeType === Node.ELEMENT_NODE) {\r\n return node as Element;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n *\r\n * @param element\r\n * @param pureXPath Will ignore shortcuts like id('')\r\n */\r\n getXPathTo(element: any, pureXPath = false): string {\r\n if (element === null) return '';\r\n if (!pureXPath) {\r\n if (element.id !== '') { return 'id(\"' + element.id + '\")'; }\r\n if (element === document.body) { return element.tagName; }\r\n }\r\n\r\n\r\n let ix = 0;\r\n const siblings = element.parentNode?.childNodes || [];\r\n for (let sibling of siblings) {\r\n if (sibling === element) {\r\n return this.getXPathTo(element.parentNode) + '/' + element.tagName + '[' + (ix + 1) + ']';\r\n }\r\n if (sibling.nodeType === 1 && sibling.tagName === element.tagName) {\r\n ix++;\r\n }\r\n\r\n }\r\n return '';\r\n }\r\n\r\n readVolume(libraryId: number, seriesId: number, volume: Volume, incognitoMode: boolean = false) {\r\n if (volume.pagesRead < volume.pages && volume.pagesRead > 0) {\r\n // Find the continue point chapter and load it\r\n const unreadChapters = volume.chapters.filter(item => item.pagesRead < item.pages);\r\n if (unreadChapters.length > 0) {\r\n this.readChapter(libraryId, seriesId, unreadChapters[0], incognitoMode);\r\n return;\r\n }\r\n this.readChapter(libraryId, seriesId, volume.chapters[0], incognitoMode);\r\n return;\r\n }\r\n\r\n // Sort the chapters, then grab first if no reading progress\r\n this.readChapter(libraryId, seriesId, [...volume.chapters].sort(this.utilityService.sortChapters)[0], incognitoMode);\r\n }\r\n\r\n readChapter(libraryId: number, seriesId: number, chapter: Chapter, incognitoMode: boolean = false) {\r\n if (chapter.pages === 0) {\r\n this.toastr.error(translate('series-detail.no-pages'));\r\n return;\r\n }\r\n\r\n this.router.navigate(this.getNavigationArray(libraryId, seriesId, chapter.id, chapter.files[0].format),\r\n {queryParams: {incognitoMode}});\r\n }\r\n}\r\n"],"mappings":"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","names":["require_media","__commonJSMin","exports","module","require_src","__commonJSMin","exports","module","webm","mp4","oldIOS","nativeWakeLock","NoSleep","handleVisibilityChange","element","type","dataURI","source","wakeLock","err","res","methodMap","nativeAPI","unprefixedMethods","returnValue","methodList","index","method","eventNameMap","screenfull","element","options","resolve","reject","onFullScreenEntered","returnPromise","onFullScreenExit","callback","event","eventName","screenfull_default","import_nosleep","CHAPTER_ID_DOESNT_EXIST","CHAPTER_ID_NOT_FETCHED","ReaderService","constructor","httpClient","document","destroyRef","inject","DestroyRef","utilityService","UtilityService","router","Router","location","Location","accountService","AccountService","toastr","ToastrService","baseUrl","environment","apiUrl","encodedKey","noSleep","NoSleep","currentUser$","pipe","takeUntilDestroyed","subscribe","user","encodeURIComponent","apiKey","enableWakeLock","element","enableNoSleepHandler","removeEventListener","enable","addEventListener","disableWakeLock","disable","getNavigationArray","libraryId","seriesId","chapterId","format","undefined","MangaFormat","ARCHIVE","EPUB","PDF","downloadPdf","bookmark","volumeId","page","post","unbookmark","getAllBookmarks","filter","getBookmarks","get","getBookmarksForVolume","getBookmarksForSeries","clearBookmarks","TextResonse","clearMultipleBookmarks","seriesIds","getBookmarkInfo","getProgress","getPageUrl","getThumbnailUrl","getBookmarkPageUrl","getChapterInfo","includeDimensions","getFileDimensions","saveProgress","bookScrollId","pageNum","getAllProgressForChapter","markVolumeRead","markMultipleRead","volumeIds","chapterIds","markMultipleUnread","markMultipleSeriesRead","markMultipleSeriesUnread","markVolumeUnread","getNextChapter","currentChapterId","readingListId","getPrevChapter","hasSeriesProgress","getCurrentChapter","getTimeLeft","setOverrideStyles","backgroundColor","bodyNode","querySelector","originalBodyColor","style","background","setAttribute","resetOverrideStyles","imageUrlToPageNum","imageSrc","params","URLSearchParams","URL","search","parseInt","imageUrlToChapterId","getNextChapterUrl","url","nextChapterId","incognitoMode","readingListMode","lastSlashIndex","lastIndexOf","newRoute","substring","getQueryParams","getQueryParamsObject","indexOf","toggleFullscreen","el","callback","screenfull","isEnabled","toggle","checkFullscreenMode","fullscreenElement","closeReader","navigateByUrl","back","removePersonalToc","pageNumber","title","delete","getPersonalToC","createPersonalToC","getElementFromXPath","path","node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","nodeType","Node","ELEMENT_NODE","getXPathTo","pureXPath","id","body","tagName","ix","siblings","parentNode","childNodes","sibling","readVolume","volume","pagesRead","pages","unreadChapters","chapters","item","length","readChapter","sort","sortChapters","chapter","error","translate","navigate","files","queryParams","ɵɵinject","HttpClient","DOCUMENT","factory","ɵfac","providedIn","_ReaderService"],"x_google_ignoreList":[0,1,2]}