{"version":3,"sources":["utils/requests.tsx","config.ts","types/reader.types.ts","pages/Home.tsx","components/Loader.tsx","types/theme.types.ts","hooks/useTheme.ts","components/Icons.tsx","components/Modal.tsx","components/HotKeys.tsx","components/Share.tsx","components/MangaControl.tsx","pages/Reader.tsx","pages/Manga.tsx","assets/logo/logo.svg","components/Layout.tsx","pages/NotFound.tsx","App.tsx","index.tsx"],"names":["getPages","mangafile","chapter","a","url","API_URL","axios","get","pages","data","map","page","name","getChapters","chapters","reduce","result","includes","push","getImage","responseType","b64","Buffer","from","toString","getMetadata","response","getTitleNames","titles","title","type","PLACEHOLDER_IMG","ReaderMode","ImageSizing","StorageKey","Home","props","queryTitles","titleNames","i","length","titleName","metadata","group","image","cover_image","console","log","setState","state","this","className","Object","keys","key","index","item","to","src","React","Component","withRouter","Loader","ref","refImg","classProps","colourThemes","useTheme","useState","localStorage","getItem","carrotTheme","theme","setTheme","themeSet","setItem","useEffect","applyTheme","colours","document","documentElement","style","setProperty","primaryText","secondaryText","background","panelBackground","BookmarkIcon","width","height","viewBox","fill","xmlns","d","strokeWidth","strokeLinecap","strokeLinejoin","BookOpenIcon","CheckMarkIcon","ColorSwatchIcon","fillRule","clipRule","PhotographIcon","LeftArrowIcon","RightArrowIcon","DownloadIcon","ShareIcon","RssIcon","TitleIcon","classNames","ChevronLeftIcon","ChevronRightIcon","CopyLinkIcon","stroke","CopyLinkSuccessIcon","Modal","children","isOpen","setIsOpen","buttonMsg","appear","show","as","Fragment","open","onClose","Overlay","Child","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Title","onClick","HotKeys","settings","previousPage","nextPage","previousChapter","nextChapter","Share","copySuccess","setCopySuccess","sleep","ms","Promise","resolve","setTimeout","handleOnClick","navigator","clipboard","writeText","window","location","href","MangaControl","useHistory","readerSettings","updateReaderSettings","keyBindings","setKeyBindings","updateChapter","updatePage","mangaType","setColourMode","colourThemeValues","isOpenHotKeys","setIsOpenHotKeys","isOpenShare","setIsOpenShare","menuOpen","mangaName","onChange","event","currentTarget","value","values","readerMode","imageSizing","colourTheme","setSettings","id","checked","autoLoadChapter","htmlFor","Reader","myRef","loadImage","img","Image","queryManga","history","loadPage","images","promises","imageFiles","loadFunction","file","loaded","current","scrollIntoView","task","scrollDown","scrollBy","top","innerHeight","left","behavior","scrollUp","newReaderSettings","updateLocalStorage","curState","longStrip","carrotSettings","JSON","stringify","newChapter","newPage","previousPages","go","scroll","replace","pathname","match","params","clicked","checkVisible","inView","ind","toClasses","classes","options","original","split","join","singlePage","handleMouseEvent","e","pageX","innerWidth","newKeyBindings","handleHotKeys","fitHeight","savedSettings","parsedSettings","parse","err","keyBindingsLocal","keyBindingsParsed","zipped","pageCount","createRef","addEventListener","removeEventListener","onMouseDown","threshold","entry","Manga","alt","description","Layout","notReader","setReader","listen","substring","Logo","NotFound","App","exact","path","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.0adb4cc4.chunk.js","sourcesContent":["import axios from 'axios';\nimport { Chapter, Page, Metadata } from 'types/reader.types';\nimport { API_URL } from 'config'\n\nexport const getPages = async (mangafile: string, chapter: string): Promise => {\n\n const url = `${API_URL}/${mangafile}/jpg/${chapter}`;\n let { data: pages } = await axios.get(url);\n\n // filter out useless stuff\n pages = pages.map((page: Record) => (\n {\n name: page.name,\n }\n ));\n return pages;\n};\n\nexport const getChapters = async (mangafile: string): Promise => {\n\n const url = `${API_URL}/${mangafile}/jpg`;\n let { data: chapters } = await axios.get(url);\n\n // filter out useless stuff\n chapters = chapters.reduce((result: Chapter[], chapter: Record) => {\n const name = chapter.name as string;\n if (!name.includes('.zip')) {\n result.push({ name: name })\n }\n return result;\n }, []);\n return chapters;\n};\n\nexport const getImage = async (url: string): Promise => {\n\n const { data } = await axios.get(url, { responseType: 'arraybuffer' });\n\n const b64 = Buffer.from(data, 'binary').toString('base64');\n\n return b64;\n\n};\n\nexport const getMetadata = async (mangafile: string): Promise => {\n const url = `${API_URL}/${mangafile}/.metadata`\n const response = await axios.get(url)\n\n return response.data;\n}\n\nexport const getTitleNames = async (): Promise => {\n const url = API_URL;\n let { data: titles } = await axios.get(url);\n // filter out useless stuff\n titles = titles.reduce((result: string[], title: Record) => {\n const type = title.type;\n if (type === 'directory') {\n result.push(title.name)\n }\n return result;\n }, []);\n return titles;\n}\n","export const API_URL = 'https://files.karatsubascans.com'\nexport const PLACEHOLDER_IMG = 'https://media.istockphoto.com/vectors/thumbnail-image-vector-graphic-vector-id1147544807?k=20&m=1147544807&s=612x612&w=0&h=pBhz1dkwsCMq37Udtp9sfxbjaMl27JUapoyYpQm0anc='","\nexport interface ReaderSettings {\n readerMode: ReaderMode,\n imageSizing: ImageSizing,\n colourTheme: string,\n menuOpen: boolean,\n autoLoadChapter: boolean,\n}\n\nexport enum ReaderMode {\n longStrip = \"Long Strip\",\n singlePage = \"Single Page\"\n}\n\nexport enum ImageSizing {\n original = \"Original\",\n fitWidth = \"Fit Width\",\n fitHeight = \"Fit Height\"\n}\n\nexport type Page = {\n name: string\n};\nexport type Chapter = {\n name: string\n};\n\nexport interface KeyBindings {\n previousPage: string,\n nextPage: string,\n previousChapter: string,\n nextChapter: string\n}\n\nexport enum StorageKey {\n carrotSettings = \"carrotSettings\",\n carrotTheme = \"carrotTheme\"\n}\n\nexport interface Metadata {\n title: string,\n group?: string,\n author?: string,\n description?: string,\n cover_image?: string,\n url: string,\n type: string,\n original: boolean,\n}","import React from 'react';\r\nimport { Link, withRouter } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet-async'\r\nimport Loader from 'components/Loader'\r\n\r\nimport { Title } from 'types/home.types'\r\nimport { getTitleNames, getMetadata } from 'utils/requests'\r\nimport { PLACEHOLDER_IMG } from 'config';\r\n\r\ninterface State {\r\n titles: Record\r\n}\r\nclass Home extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n titles: {}\r\n }\r\n }\r\n\r\n queryTitles = async () => {\r\n const titles: Record = {};\r\n const titleNames = await getTitleNames();\r\n for (let i = 0; i < titleNames.length; i += 1 ) {\r\n const titleName = titleNames[i];\r\n try {\r\n const metadata = await getMetadata(titleName);\r\n const group = metadata.group || 'Other';\r\n if (!titles[group]) {\r\n titles[group] = [];\r\n }\r\n titles[group].push({\r\n title: metadata.title || 'Unknown',\r\n url: metadata.url,\r\n image: metadata.cover_image || PLACEHOLDER_IMG,\r\n group: group,\r\n mangafile: titleName\r\n })\r\n } catch (err) {\r\n console.log(`Could not find metadata for ${titleName}`)\r\n }\r\n }\r\n\r\n this.setState({titles})\r\n }\r\n\r\n async componentDidMount() {\r\n await this.queryTitles();\r\n }\r\n render() {\r\n return (\r\n
\r\n \r\n Home | Carrot Reader\r\n \r\n\r\n
\r\n

Home

\r\n
\r\n {\r\n Object.keys(this.state.titles).map((key, index) => {\r\n return (\r\n
\r\n

{key}

\r\n
\r\n {\r\n this.state.titles[key].map((item, index) => {\r\n return (\r\n \r\n
\r\n \r\n
\r\n {item.title}\r\n
\r\n
\r\n \r\n )\r\n })\r\n }\r\n
\r\n
\r\n )\r\n })\r\n }\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(Home);","import React, { Component } from 'react';\nimport './Loader.css'\ntype Props = {\n refImg?: React.RefObject | undefined\n classProps?: string,\n}\nconst Loader = (props: Props) => {\n\n return (\n
\n
\n
\n
\n
\n );\n\n}\n\nexport default Loader;\n","\nexport type Themes = {\n [themeName: string]: ThemeSettings\n}\n\nexport type ThemeSettings = {\n [themeOption: string]: string\n}\n\nconst colourThemes: Themes = {\n 'Light': {\n 'panelBackground': '#F3F4F6',\n 'primaryText': '#374151',\n 'background': '#FFF',\n 'secondaryText': '#374151',\n 'link1': '#eebeb0',\n 'link2': '#eebeb0',\n 'link3': '#eebeb0',\n 'link4': '#eebeb0'\n },\n 'Dark': {\n 'panelBackground': '#1e293b',\n 'primaryText': '#FFF',\n 'background': '#0f172a',\n 'secondaryText': '#FFF',\n 'link1': '#eebeb0',\n 'link2': '#eebeb0',\n 'link3': '#eebeb0',\n 'link4': '#eebeb0'\n },\n 'Olivia': {\n 'panelBackground': '#2b2b2b',\n 'primaryText': '#eebeb0',\n 'background': '#f1ede9',\n 'secondaryText': '#2b2b2b',\n 'link1': '#eebeb0',\n 'link2': '#eebeb0',\n 'link3': '#eebeb0',\n 'link4': '#eebeb0'\n },\n 'Mizu': {\n 'panelBackground': '#253646',\n 'primaryText': '#f9f6f3',\n 'background': '#b6d9eb',\n 'secondaryText': '#253646',\n 'link1': '#f9f6f3',\n 'link2': '#f9f6f3',\n 'link3': '#f9f6f3',\n 'link4': '#f9f6f3'\n },\n 'Oblivion Hagoromo': {\n 'panelBackground': '#464647',\n 'primaryText': '#e3dcd0',\n 'background': '#e3dcd0',\n 'secondaryText': '#464647',\n 'link1': '#008aba',\n 'link2': '#79c23c',\n 'link3': '#ad98c7',\n 'link4': '#fe4321'\n },\n 'Modo Light': {\n 'panelBackground': '#737576',\n 'primaryText': '#56585a',\n 'background': '#d1d1cf',\n 'secondaryText': '#56585a',\n 'link1': '#a0c6bc',\n 'link2': '#a0c6bc',\n 'link3': '#a0c6bc',\n 'link4': '#a0c6bc'\n },\n 'Oblivion': {\n 'panelBackground': '#464647',\n 'primaryText': '#e3dcd0',\n 'background': '#636b6b',\n 'secondaryText': '#e3dcd0',\n 'link1': '#008aba',\n 'link2': '#79c23c',\n 'link3': '#ad98c7',\n 'link4': '#fe4321'\n },\n 'Botanical': {\n 'panelBackground': '#3E5D58',\n 'primaryText': '#92ACA0',\n 'background': '#DDE5ED',\n 'secondaryText': '#3E5D58',\n 'link1': '#92ACA0',\n 'link2': '#92ACA0',\n 'link3': '#92ACA0',\n 'link4': '#92ACA0'\n },\n 'Patisserie': {\n 'panelBackground': '#f6dfd8',\n 'primaryText': '#da7157',\n 'background': '#f7f2ea',\n 'secondaryText': '#da7157',\n 'link1': '#da7157',\n 'link2': '#da7157',\n 'link3': '#da7157',\n 'link4': '#da7157'\n },\n 'Serika': {\n 'panelBackground': '#FFCD00',\n 'primaryText': '#171718',\n 'background': '#ece4d0',\n 'secondaryText': '#171718',\n 'link1': '#171718',\n 'link2': '#171718',\n 'link3': '#171718',\n 'link4': '#171718'\n },\n 'Sumi': {\n 'panelBackground': '#f7f2ea',\n 'primaryText': '#191e28',\n 'background': '#191e28',\n 'secondaryText': '#f7f2ea',\n 'link1': '#cc2c24',\n 'link2': '#cc2c24',\n 'link3': '#cc2c24',\n 'link4': '#cc2c24'\n },\n 'Shoko': {\n 'panelBackground': '#7A99AC',\n 'primaryText': '#DDE5ED',\n 'background': '#DDE5ED',\n 'secondaryText': '#7A99AC',\n 'link1': '#99D6EA',\n 'link2': '#99D6EA',\n 'link3': '#99D6EA',\n 'link4': '#99D6EA'\n },\n 'Tuzi': {\n 'panelBackground': '#8d8bb2',\n 'primaryText': '#e1dfed',\n 'background': '#e1dfed',\n 'secondaryText': '#8d8bb2',\n 'link1': '#7e4f7b',\n 'link2': '#7e4f7b',\n 'link3': '#7e4f7b',\n 'link4': '#7e4f7b'\n },\n 'Bingsu': {\n 'panelBackground': '#533d44',\n 'primaryText': '#e1dbd1',\n 'background': '#946877',\n 'secondaryText': '#e1dbd1',\n 'link1': '#e1dbd1',\n 'link2': '#e1dbd1',\n 'link3': '#e1dbd1',\n 'link4': '#e1dbd1'\n },\n 'Muted Sleeves': {\n 'panelBackground': '#B1B3B3',\n 'primaryText': '#171718',\n 'background': '#D9D9D6',\n 'secondaryText': '#171718',\n 'link1': '#ABCAE9',\n 'link2': '#ABCAE9',\n 'link3': '#ABCAE9',\n 'link4': '#ABCAE9',\n 'logo': '#ECC3B2'\n },\n 'Minimal sleeves': {\n 'panelBackground': '#f7f2ea',\n 'primaryText': '#171718',\n 'background': '#f7f2ea',\n 'secondaryText': '#171718',\n 'link1': '#ABCAE9',\n 'link2': '#ABCAE9',\n 'link3': '#ABCAE9',\n 'link4': '#ABCAE9',\n 'logo': '#ECC3B2'\n },\n 'Nimbus': {\n 'panelBackground': '#e1dbd1',\n 'primaryText': '#393b3b',\n 'background': '#ACDCF1',\n 'secondaryText': '#393b3b',\n 'link1': '#393b3b',\n 'link2': '#393b3b',\n 'link3': '#393b3b',\n 'link4': '#393b3b',\n 'logo': '#393b3b'\n },\n 'Yuru': {\n 'panelBackground': '#712F3E',\n 'primaryText': '#E1DBD1',\n 'background': '#E1DBD1',\n 'secondaryText': '#712F3E',\n 'link1': '#88D4CC',\n 'link2': '#88D4CC',\n 'link3': '#88D4CC',\n 'link4': '#88D4CC',\n 'logo': '#88D4CC'\n },\n 'Cafe': {\n 'panelBackground': '#3d3635',\n 'primaryText': '#d8d2c3',\n 'background': '#d8d2c3',\n 'secondaryText': '#3d3635',\n 'link1': '#d0b084',\n 'link2': '#d0b084',\n 'link3': '#d0b084',\n 'link4': '#d0b084',\n 'logo': '#d0b084'\n },\n 'Metaverse': {\n 'panelBackground': '#171718',\n 'primaryText': '#f7f2ea',\n 'background': '#f7f2ea',\n 'secondaryText': '#171718',\n 'link1': '#dd1126',\n 'link2': '#dd1126',\n 'link3': '#dd1126',\n 'link4': '#dd1126',\n 'logo': '#dd1126'\n },\n 'November Fog': {\n 'panelBackground': '#94A59E',\n 'primaryText': '#58534B',\n 'background': '#D9E1E2',\n 'secondaryText': '#58534B',\n 'link1': '#58534B',\n 'link2': '#58534B',\n 'link3': '#58534B',\n 'link4': '#58534B',\n 'logo': '#58534B'\n }\n}\n\nexport default colourThemes;\n","import { useEffect, useState } from 'react'\r\nimport { StorageKey } from 'types/reader.types'\r\nimport colourThemes, { ThemeSettings } from 'types/theme.types'\r\n\r\nexport default function useTheme(): [string, (theme: string) => void] {\r\n const [theme, setTheme] = useState(localStorage.getItem(StorageKey.carrotTheme) || 'Light');\r\n const themeSet = (theme: string) => {\r\n setTheme(theme)\r\n localStorage.setItem(StorageKey.carrotTheme, theme)\r\n }\r\n useEffect(() => {\r\n const applyTheme = localStorage.getItem(StorageKey.carrotTheme) || 'Light'\r\n setTheme(applyTheme)\r\n const colours: ThemeSettings = colourThemes[applyTheme] || colourThemes['Light']\r\n\r\n document.documentElement.style.setProperty(`--primaryColour`, colours.primaryText)\r\n document.documentElement.style.setProperty(`--secondaryColour`, colours.secondaryText)\r\n document.documentElement.style.setProperty(`--backgroundColour`, colours.background)\r\n document.documentElement.style.setProperty(`--panelBackgroundColour`, colours.panelBackground)\r\n }, [theme, themeSet])\r\n return [theme, themeSet]\r\n}\r\n","import React from 'react';\nimport classNames from 'classnames';\n\ninterface IconProps {\n className?: string\n}\n\nexport const BookmarkIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const BookOpenIcon = ({ className }: IconProps) => {\n return (\n \n \n \n\n )\n}\n\nexport const CheckMarkIcon = ({ className }: IconProps) => {\n return (\n \n \n \n\n )\n}\n\nexport const ColorSwatchIcon = ({ className }: IconProps) => {\n return (\n \n \n \n\n )\n}\n\nexport const PhotographIcon = ({ className }: IconProps) => {\n return (\n \n \n \n\n )\n}\n\nexport const LeftArrowIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const RightArrowIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const DownloadIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const ShareIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const RssIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const TitleIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const ChevronLeftIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const ChevronRightIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const MoonIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const SunIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const CopyLinkIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}\n\nexport const CopyLinkSuccessIcon = ({ className }: IconProps) => {\n return (\n \n \n \n )\n}","import React, { useState, Fragment } from 'react';\nimport { Dialog, Transition } from '@headlessui/react'\n\ntype Props = {\n title: string,\n isOpen: boolean,\n setIsOpen: (open: boolean) => void,\n children: JSX.Element,\n buttonMsg: string\n}\n\nconst Modal: React.FunctionComponent = (props: Props) => {\n const { title, children, isOpen, setIsOpen, buttonMsg } = props;\n\n return (\n \n setIsOpen(false)} as=\"div\" className=\"fixed inset-0 z-40 overflow-y-auto\">\n\n
\n \n\n\n \n ​\n \n \n
\n \n {title}\n \n
\n {children}\n
\n\n
\n setIsOpen(false)}\n >\n {buttonMsg}\n \n
\n
\n \n
\n
\n
\n )\n}\n\nexport default Modal;","import React, { useState } from 'react';\nimport { KeyBindings } from 'types/reader.types'\n\ntype Props = {\n settings: KeyBindings,\n setSettings: (newSettings: KeyBindings) => void\n}\n\nconst HotKeys: React.FunctionComponent = (props: Props) => {\n const { settings } = props;\n\n return (\n
\n
\n

Previous Page:

\n

{settings.previousPage}

\n
\n
\n

Next Page:

\n

{settings.nextPage}

\n
\n
\n

Previous Chapter:

\n

{settings.previousChapter}

\n
\n
\n

Next Chapter:

\n

{settings.nextChapter}

\n
\n
\n )\n}\n\nexport default HotKeys;","import React, { useState } from 'react';\nimport { CopyLinkIcon, CopyLinkSuccessIcon } from './Icons';\n\nconst Share: React.FunctionComponent = () => {\n\n const [copySuccess, setCopySuccess] = useState(false);\n\n function sleep(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n const handleOnClick = async () => {\n setCopySuccess(true);\n navigator.clipboard.writeText(window.location.href)\n await sleep(2000);\n setCopySuccess(false);\n }\n\n return (\n <>\n \n \n );\n}\n\nexport default Share;\n","import React, { useState } from 'react';\r\nimport { Link, useHistory } from 'react-router-dom'\r\n\r\nimport { ReaderSettings, ReaderMode, KeyBindings, ImageSizing, Chapter, Page } from 'types/reader.types';\r\nimport useTheme from 'hooks/useTheme'\r\nimport colourThemes from 'types/theme.types'\r\nimport 'components/MangaControl.css';\r\nimport {\r\n TitleIcon,\r\n BookmarkIcon,\r\n BookOpenIcon,\r\n CheckMarkIcon,\r\n ColorSwatchIcon,\r\n PhotographIcon,\r\n LeftArrowIcon,\r\n RightArrowIcon,\r\n DownloadIcon,\r\n ShareIcon,\r\n RssIcon,\r\n ChevronLeftIcon,\r\n ChevronRightIcon,\r\n} from 'components/Icons'\r\nimport Logo from 'assets/logo/logo.svg'\r\n\r\nimport Modal from './Modal';\r\nimport HotKeys from './HotKeys';\r\nimport Share from './Share';\r\n\r\ntype Props = {\r\n mangaName: string,\r\n mangafile: string,\r\n mangaType: string,\r\n readerSettings: ReaderSettings,\r\n updateReaderSettings: (newReaderSettings: Partial) => void,\r\n keyBindings: KeyBindings,\r\n setKeyBindings: (newKeyBindings: KeyBindings) => void,\r\n chapters: Chapter[],\r\n chapter: number,\r\n nextChapter: () => void,\r\n previousChapter: () => void,\r\n updateChapter: (newChapter: number) => void,\r\n page: number,\r\n pages: Page[],\r\n nextPage: () => void,\r\n previousPage: () => void,\r\n updatePage: (newPage: number) => void,\r\n}\r\n\r\nconst MangaControl: React.FunctionComponent = (props: Props) => {\r\n const history = useHistory();\r\n const { readerSettings, updateReaderSettings, keyBindings, setKeyBindings, chapter, chapters, updateChapter, page, pages, updatePage, mangaType } = props;\r\n\r\n const [colourMode, setColourMode] = useTheme();\r\n const colourThemeValues = Object.keys(colourThemes)\r\n const toggleMenuState = () => {\r\n updateReaderSettings({ menuOpen: !readerSettings.menuOpen, });\r\n };\r\n const changeReaderMode = (event: React.ChangeEvent) => {\r\n updateReaderSettings({ readerMode: event.currentTarget.value as ReaderMode });\r\n };\r\n const changeImageSizing = (event: React.ChangeEvent) => {\r\n updateReaderSettings({ imageSizing: event.currentTarget.value as ImageSizing });\r\n };\r\n const changeColourTheme = (event: React.ChangeEvent) => {\r\n setColourMode(event.currentTarget.value)\r\n updateReaderSettings({ colourTheme: event.currentTarget.value });\r\n };\r\n const toggleAutoLoadChapter = () => {\r\n updateReaderSettings({ autoLoadChapter: !readerSettings.autoLoadChapter })\r\n }\r\n\r\n const changeChapter = (event: React.ChangeEvent) => {\r\n updateChapter(+event.currentTarget.value);\r\n };\r\n const changePage = (event: React.ChangeEvent) => {\r\n updatePage(+event.currentTarget.value);\r\n };\r\n\r\n const [isOpenHotKeys, setIsOpenHotKeys] = useState(false);\r\n\r\n const [isOpenShare, setIsOpenShare] = useState(false);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n {props.mangaName}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
Chapter
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
Page
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
Reading Mode
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
Image Size
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
Colour Theme
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n toggleAutoLoadChapter()} />\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default MangaControl;\r\n","import React, { useRef, MouseEvent } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { Helmet } from 'react-helmet-async';\nimport { InView } from 'react-intersection-observer';\n\nimport Loader from 'components/Loader'\nimport MangaControl from 'components/MangaControl';\nimport 'pages/Reader.css';\n\nimport { ReaderSettings, KeyBindings, ReaderMode, ImageSizing, Page, Chapter, StorageKey, Metadata } from 'types/reader.types';\n\nimport { fetchZip, extractZip, ZipInfo } from 'services/archive.service';\nimport { getPages, getChapters, getImage, getMetadata } from 'utils/requests';\nimport queryString from 'query-string';\nimport { API_URL } from 'config';\n\ninterface State {\n zipped: ZipInfo[],\n images: string[],\n imageFiles: string[],\n pageCount: number,\n mangafile: string,\n chapter: number,\n chapters: Chapter[],\n page: number,\n pages: Page[],\n metadata: Metadata | Record,\n loaded: boolean,\n readerSettings: ReaderSettings,\n keyBindings: KeyBindings,\n}\n\nclass Reader extends React.Component {\n myRef: React.RefObject; // fix typing up\n\n constructor(props: any) {\n super(props);\n let readerSettings = {\n readerMode: ReaderMode.longStrip,\n imageSizing: ImageSizing.fitHeight,\n colourTheme: 'Light',\n menuOpen: true,\n autoLoadChapter: true,\n }\n\n const savedSettings = localStorage.getItem(StorageKey.carrotSettings);\n if (savedSettings) {\n try {\n const parsedSettings: Partial = JSON.parse(savedSettings)\n readerSettings = { ...readerSettings, ...parsedSettings }\n }\n catch (err) {\n console.log('No settings found.')\n }\n }\n\n let keyBindings = {\n previousPage: \"k\",\n nextPage: \"j\",\n previousChapter: \"h\",\n nextChapter: \"l\",\n }\n const keyBindingsLocal = localStorage.getItem('carrotKeyBindings')\n if (keyBindingsLocal) {\n try {\n const keyBindingsParsed: Partial = JSON.parse(keyBindingsLocal);\n keyBindings = { ...keyBindings, ...keyBindingsParsed }\n } catch (err) {\n console.log('Key Binding settings not found.')\n }\n }\n\n this.state = {\n zipped: [],\n images: [],\n imageFiles: [],\n pageCount: 0,\n mangafile: this.props.match.params.mangafile,\n chapter: this.props.match.params.chapter - 1,\n chapters: [],\n page: this.props.match.params.page - 1,\n pages: [],\n metadata: {},\n loaded: false,\n readerSettings,\n keyBindings,\n };\n\n this.myRef = React.createRef();\n }\n\n loadImage = async (src: string) => {\n const img = new Image();\n img.src = src;\n return img;\n }\n\n queryManga = async () => {\n let metadata: Metadata | Record= {};\n try {\n metadata = await getMetadata(this.state.mangafile);\n } catch (err) {\n this.props.history.push('/404');\n }\n let chapters: Chapter[] = [];\n try {\n chapters = await getChapters(this.state.mangafile);\n } catch (err) {\n this.props.history.push('/404');\n return;\n }\n const pages = await getPages(this.state.mangafile, chapters[this.state.chapter].name);\n this.setState({\n chapters,\n pages,\n metadata,\n });\n }\n\n loadPage = async (pageNumber = -1) => {\n if (pageNumber === -1) {\n // load everything\n const images: string[] = [];\n const promises: (() => void)[] = [];\n const imageFiles = []\n for (let i = 0; i < this.state.pages.length; i += 1) {\n images.push(`${API_URL}/${this.state.mangafile}/jpg/` +\n `${this.state.chapters[this.state.chapter].name}/` +\n `${this.state.pages[i].name}`);\n imageFiles.push('')\n const loadFunction = async (url: string, index: number) => {\n const file = await getImage(url);\n const imageFiles = this.state.imageFiles\n imageFiles[index] = `data:image/png;base64,${file}`;\n this.setState({\n imageFiles\n })\n }\n promises.push(() => loadFunction(images[i], i))\n }\n\n this.setState({\n images,\n imageFiles,\n loaded: true,\n }, () => {\n this.myRef?.current?.scrollIntoView()\n promises.map(task => task())\n });\n }\n }\n\n scrollDown = () => {\n window.scrollBy({top: window.innerHeight*0.8, left: 0, behavior: 'smooth'}) \n }\n\n scrollUp = () => {\n window.scrollBy({top: (window.innerHeight) * -0.8, left: 0, behavior: 'smooth'}) \n }\n\n updateReaderSettings = (newReaderSettings: Partial, updateLocalStorage = true) => {\n const readerSettings = { ...this.state.readerSettings, ...newReaderSettings }\n this.setState(curState => ({\n ...curState,\n readerSettings,\n }), () => {\n if (newReaderSettings.readerMode === ReaderMode.longStrip) {\n this.myRef.current?.scrollIntoView()\n }\n });\n if (updateLocalStorage) {\n localStorage.setItem(StorageKey.carrotSettings, JSON.stringify(readerSettings))\n }\n }\n\n updateChapter = async (newChapter: number, previousPage = false) => {\n let newPage = 1;\n if (previousPage) {\n const previousPages = await getPages(this.state.mangafile, this.state.chapters[this.state.chapter - 1].name)\n newPage = previousPages.length\n }\n this.props.history.push(`/read/${this.state.mangafile}/${newChapter + 1}/${newPage}`);\n this.props.history.go(0);\n }\n\n updatePage = (newPage: number, scroll = false) => {\n this.props.history.replace({ pathname: `/read/${this.state.mangafile}/${this.props.match.params.chapter}/${newPage + 1}` })\n this.setState(curState => ({\n ...curState,\n page: newPage,\n }), () => {\n if (!scroll && this.state.loaded) {\n this.myRef?.current?.scrollIntoView()\n }\n })\n }\n\n nextChapter = () => {\n if (this.state.chapter + 1 < this.state.chapters.length) {\n this.updateChapter(this.state.chapter + 1)\n }\n };\n\n previousChapter = (previousPage = false) => {\n if (this.state.chapter - 1 >= 0) {\n this.updateChapter(this.state.chapter - 1, previousPage)\n }\n };\n\n nextPage = (clicked = false) => {\n if (this.state.page + 1 < this.state.pages.length) {\n if (this.state.metadata.type !== 'manga' && clicked) {\n this.scrollDown()\n } else {\n this.updatePage(this.state.page + 1)\n }\n }\n else if (this.state.readerSettings.autoLoadChapter) {\n this.nextChapter();\n }\n };\n\n previousPage = (clicked = false) => {\n if (this.state.page - 1 >= 0) {\n if (this.state.metadata.type !== 'manga' && clicked) {\n this.scrollUp()\n } else {\n this.updatePage(this.state.page - 1)\n }\n }\n else if (this.state.readerSettings.autoLoadChapter) {\n this.previousChapter(true);\n }\n };\n\n checkVisible = (inView: boolean, ind: number) => {\n if (inView) {\n this.updatePage(ind, true)\n }\n }\n\n toClasses = (index: number) => {\n let classes = '';\n const options = [];\n if (this.state.metadata.type !== 'manga') {\n options.push(ReaderMode.longStrip)\n options.push(ImageSizing.original)\n } else {\n options.push(this.state.readerSettings.readerMode)\n options.push(this.state.readerSettings.imageSizing)\n }\n\n for (let i = 0; i < options.length; i += 1) {\n classes += options[i].split(' ').join('') + ' ';\n }\n if (this.state.readerSettings.readerMode === ReaderMode.singlePage && index !== this.state.page && this.state.metadata.type === 'manga') {\n classes += 'hidden'\n }\n return classes;\n }\n\n handleMouseEvent = (e: MouseEvent) => {\n if (e.pageX < window.innerWidth * 0.5) {\n this.previousPage(true);\n } else {\n this.nextPage(true);\n }\n }\n\n setKeyBindings = (newKeyBindings: Partial) => {\n const keyBindings = { ...this.state.keyBindings, ...newKeyBindings }\n this.setState(curState => ({\n ...curState,\n keyBindings\n }));\n localStorage.setItem(\"carrotKeyBindings\", JSON.stringify(keyBindings))\n }\n\n handleHotKeys = (event: KeyboardEvent) => {\n const key = event.key;\n if (key === this.state.keyBindings.previousPage || key === \"ArrowLeft\") {\n this.previousPage()\n }\n if (key === this.state.keyBindings.nextPage || key === \"ArrowRight\") {\n this.nextPage()\n }\n if (key === this.state.keyBindings.previousChapter) {\n this.previousChapter()\n }\n if (key === this.state.keyBindings.nextChapter) {\n this.nextChapter()\n }\n }\n\n async componentDidMount() {\n await this.queryManga();\n await this.loadPage();\n document.addEventListener(\"keydown\", this.handleHotKeys, false)\n }\n\n componentWillUnmount() {\n document.removeEventListener(\"keydown\", this.handleHotKeys, false)\n }\n\n render() {\n return (\n
\n \n {this.state.metadata.title || 'Manga'} | Carrot Reader\n \n \n\n
\n {\n this.state.pages.map((page, ind) => {\n let ref;\n if (this.state.page === ind) {\n ref = this.myRef;\n }\n return (\n this.checkVisible(inView, ind)}\n className={this.toClasses(ind)}\n >\n {\n (this.state.imageFiles[ind] !== \"\") ?\n \n :\n \n }\n\n \n )\n })\n }\n
\n
\n )\n }\n}\n\nexport default withRouter(Reader);\n","import React, { Fragment } from 'react';\r\nimport { Link, withRouter } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet-async'\r\n\r\nimport { Metadata, Chapter } from 'types/reader.types'\r\nimport { getMetadata, getChapters } from 'utils/requests'\r\nimport { PLACEHOLDER_IMG } from 'config';\r\nimport Loader from 'components/Loader';\r\n\r\ninterface State {\r\n mangafile: string,\r\n metadata: Metadata | Record ,\r\n chapters: Chapter[],\r\n}\r\nclass Manga extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n mangafile: this.props.match.params.mangafile,\r\n metadata: {},\r\n chapters: [],\r\n }\r\n }\r\n\r\n queryManga = async () => {\r\n let metadata: Metadata | Record= {};\r\n try {\r\n metadata = await getMetadata(this.state.mangafile);\r\n } catch (err) {\r\n this.props.history.push('/404');\r\n }\r\n let chapters: Chapter[] = [];\r\n try {\r\n chapters = await getChapters(this.state.mangafile);\r\n } catch (err) {\r\n this.props.history.push('/404');\r\n return;\r\n }\r\n this.setState({\r\n chapters,\r\n metadata,\r\n });\r\n }\r\n\r\n\r\n async componentDidMount() {\r\n await this.queryManga();\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n {this.state.metadata.title || 'Manga'} | Carrot Reader\r\n \r\n\r\n
\r\n {\r\n this.state.metadata.title ? \r\n

{this.state.metadata.title || 'Manga'}

:\r\n
\r\n }\r\n
\r\n {\r\n this.state.metadata.title ? \r\n (\r\n \r\n \"Cover\r\n

{this.state.metadata.description || 'No description available.'}

\r\n
\r\n ):\r\n (\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n
\r\n
\r\n {\r\n this.state.chapters.map((chapter, index) => {\r\n return (\r\n Chapter {index+1}\r\n )\r\n })\r\n }\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(Manga);","export default __webpack_public_path__ + \"static/media/logo.be72ee23.svg\";","import React, { Component, useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router';\r\n\r\nimport Logo from 'assets/logo/logo.svg'\r\nimport './Layout.css'\r\nimport useTheme from 'hooks/useTheme'\r\nimport { SunIcon, MoonIcon } from 'components/Icons'\r\nimport { Link } from 'react-router-dom'\r\n\r\ntype layoutProps = {\r\n children: JSX.Element\r\n}\r\n\r\nconst Layout = (props: layoutProps) => {\r\n const history = useHistory();\r\n\r\n const [colorTheme, setTheme] = useTheme()\r\n const [notReader, setReader] = useState(false)\r\n\r\n history.listen(() => {\r\n if (history.location.pathname.substring(0, 5) == \"/read\") {\r\n setReader(false)\r\n } else {\r\n setReader(true)\r\n }\r\n })\r\n\r\n return (\r\n
\r\n {\r\n notReader &&\r\n
\r\n \r\n \r\n \r\n

Karatsuba Scan's Carrot Reader

\r\n
\r\n }\r\n {/*\r\n\r\n \r\n\r\n */}\r\n\r\n\r\n
{props.children}
\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default Layout;\r\n","import React from 'react';\n\nconst NotFound: React.FunctionComponent = () => {\n return (\n
\n

\n Sorry, but we could not find what you asked for.\n

\n
\n )\n}\n\nexport default NotFound;","import React from 'react';\r\nimport './App.css';\r\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\r\nimport { HelmetProvider } from 'react-helmet-async'\r\n\r\nimport Home from 'pages/Home';\r\nimport Reader from 'pages/Reader';\r\nimport Manga from 'pages/Manga';\r\nimport Layout from './components/Layout'\r\nimport NotFound from 'pages/NotFound'\r\n\r\nfunction App() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}