From fe51469cb2a1df51cc1f583a4760b9fc3b8eaef5 Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 17:08:08 +0100 Subject: [PATCH 01/10] feat: readme update --- doc/logo.png | Bin 0 -> 2069 bytes doc/product-screenshot.png | Bin 0 -> 38177 bytes readme.md | 826 ++++++++++++++++++++++++++++++------- 3 files changed, 678 insertions(+), 148 deletions(-) create mode 100644 doc/logo.png create mode 100644 doc/product-screenshot.png diff --git a/doc/logo.png b/doc/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..35013b8f7d628e15786ec3300b23692fabef29ee GIT binary patch literal 2069 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 QSDZzMYYQZ*%9?6YtH zhhMfYQ?Qur<4;5msqqF4B^geM0L%O^6BO#(6xeir=}hDqymeW|7E(tiu?OT#Pir+O z&AtP9?LoQ7jy(>B#iayy@bDceU63}sUS*8HF)70PU*IO7E$4x3QvgQ3i$nNV2l_S{ zAd+XMsu9T#&onAfadvGH#=|Tj3ipaVNz61)lHUCO`8aMlK|IUWCDO`c@iEFdx(5a84};#O*}|%w|mXFK(S^B$ui% zWB&Q&8NF<_tVg%Rl+r&c;Q0<7(z|c68k5QiFeXW~?cX!F<8zBOkTxDKULuNM3s0=` z=_j6I@veIy4AADhcVLpNi23}UoI98*EhU0KtFHC~mKz7kNaA#?6_VG2U}lE`(@bt+-$QA&*u<(399r-RZS{DV1VJ&!7vUw=`#IQ?l>XU8k9Yg z9%H_)?^3D%HI)O&oK65BpWyrb|KfX%@Vh9h(Ly+2PRikT+21Rp-Qa@gLUm| z-WB@;_Pd_7Yrd!ii%?^aMzVWsoB=R&{XvY-*OW!f#eLPBK zPeBIdWc@aW@nHF`lxM-bv)aZ8gjs^AJ*mVuyBFr+HsKGJ-(WVlF~2@iUapn0wmrO< z64;s#acenmHJWH)uWnt~S(6NE-xGn=hx(pAg@w6Z+YkCM_y+GXvA5!G(f?e1$2e2R zd%h_`!}a4j>46rOFHjar$!=3tbPc1e#ks_7y8ATc5fOy;NZ0i^hqosh%2`J4L57xh0KS$hvc>w26JM$)+=y z{yjA+SzwZb{|#g94HWhfl}4&17LP0L+}O6?zrh*b5m~EW@a_Jrb~_X2HPZ?1eD(pX z2$8Pv-#hfsiM;@{dVNBDl^N7TaYrA*HwOi7TVEk1JAs5`My)FDrSAQ4wyCP-Ozu`W9mv@D~Zef34=b5%N~ zH?x1o`7BdUgF8G(U7Mr)Jclhyy`V5jeiwS;T74%|`!2BM2FC5kB@0Jx!3%x!K>NsmubHYVAug5L;8MV3`#sXP2wz2ceB jS0`iupWs879g1pz6!P*e_JXX~K)_?5ds(Mki$MM#8 -## How to create Parsers for new sites -For details on how to extend, see the following -* https://dteviot.github.io/Projects/webToEpub_FAQ.html#write-parser -* https://dteviot.github.io/Projects/webToEpub_FAQ.html -* http://www.codeproject.com/Articles/1060680/Web-to-EPUB-Extension-for-Chrome. + + + + + +[![Contributors][contributors-shield]][contributors-url] +[![Forks][forks-shield]][forks-url] +[![Stargazers][stars-shield]][stars-url] +[![Issues][issues-shield]][issues-url] +[![GPLv3 License][license-shield]][license-url] + + +
+
+ + Logo + + +

WebToEpub

+ +

+ Extension that converts Web Novels (and other web pages) into an EPUB for offline reading. +
+ Explore the wiki » +
+
+ Add Site Request + · + Bug Report + · + Feature Request +

+
+ + +
+ Table of Contents +
    +
  1. + About The Project + +
  2. +
  3. + Installation + +
  4. + Usage + +
  5. +
  6. + Contributing + +
  7. +
  8. License
  9. +
  10. Contact
  11. +
  12. Notes
  13. +
+
+ + + +## About The Project + +![WebToEpub Screen Shot][product-screenshot] -## How to install -### from Chrome Web Store -* Start Chrome -* Go to https://chrome.google.com/webstore/detail/webtoepub/akiljllkbielkidmammnifcnibaigelm -* Click on the "Add to Chrome" button. +© 2015 David Teviotdale -### with Firefox -* Start Firefox -* Go to https://addons.mozilla.org/en-US/firefox/addon/webtoepub-for-baka-tsuki -* Click on "Download anyway" +WebToEpub is a browser extension for Firefox and Chrome that converts web novels and other web pages into EPUB format. It supports a wide range of websites, including: -### on Android -* Caution I have not (and do not test) on Android. I've been told the following work, but I can't guarantee them. -* Get yourself `Kiwi browser`, `Yandex browser`, or `Firefox` -* Install from `Chrome web store` for Kiwi and Yandex, of from `Mozilla addons` for Firefox. +- Baka-Tsuki.org +- ArchiveOfOurOwn.org +- FanFiction.net +- Wuxiaworld.com +- Royalroad.com and many more... -## How to install from Source (for people who are not developers) +

(back to top)

+ +### Supported Sites + +
+ Full list of Supported Sites (296) +
    +
  • 230Book
  • +
  • 4ksw
  • +
  • 69shu
  • +
  • 888novel
  • +
  • 88xiaoshuo
  • +
  • ActiveTranslations
  • +
  • Adultfanfiction
  • +
  • Aerialrain
  • +
  • Akknovel
  • +
  • Alphapolis
  • +
  • Amoryaoi
  • +
  • AnythingNovel
  • +
  • ArchiveOfOurOwn
  • +
  • Asianfanfics
  • +
  • AsianHobbyist
  • +
  • Asianovel
  • +
  • Asstr
  • +
  • BabelChain
  • +
  • BakaTsuki
  • +
  • BakaTsukiSeriesPage
  • +
  • Betwixtedbutterfly
  • +
  • Blogspot
  • +
  • Bnatranslations
  • +
  • Book18
  • +
  • Bookswithqianya
  • +
  • Booktoki152
  • +
  • Botitranslation
  • +
  • BoxnovelOrg
  • +
  • Boylove
  • +
  • Bqg225
  • +
  • Cangji
  • +
  • CClawTranslations
  • +
  • Chaleuria
  • +
  • Chichipeph
  • +
  • Chickengege
  • +
  • ChineseFantasyNovels
  • +
  • Chrysanthemumgarden
  • +
  • Chyoa
  • +
  • Comrademao
  • +
  • Coronatranslation
  • +
  • CreativeNovels
  • +
  • Crimsontranslations
  • +
  • Czbooks
  • +
  • DarkNovels
  • +
  • DeviantArt
  • +
  • Dummynovels
  • +
  • Edanglarstranslations
  • +
  • EightMuses
  • +
  • Engnovel
  • +
  • Erofus
  • +
  • Exiledrebelsscanlations
  • +
  • FanFiction
  • +
  • FastNovel
  • +
  • Ffxs8
  • +
  • Fictionhunt
  • +
  • FictionMania
  • +
  • Ficwad
  • +
  • Fimfiction
  • +
  • FlyingLines
  • +
  • Foxaholic
  • +
  • Foxteller
  • +
  • Freelightnovel
  • +
  • FreeWebNovel
  • +
  • Fullnovel
  • +
  • GamefaqsGamespot
  • +
  • GenesiStudio
  • +
  • Graverobbertl
  • +
  • GravityNovels
  • +
  • GravityTales
  • +
  • Gunnerkrigg
  • +
  • GutenbergDE
  • +
  • Gzbp
  • +
  • Helheimscans
  • +
  • Hellping
  • +
  • HentaiFoundry
  • +
  • Hiscension
  • +
  • Hostednovel
  • +
  • Hui3r
  • +
  • Idleturtletranslations
  • +
  • Idnovelmyid
  • +
  • Imgur
  • +
  • Indomtl
  • +
  • Indowebnovel
  • +
  • Inkitt
  • +
  • Inoveltranslation
  • +
  • IsekaiScan
  • +
  • Isotls
  • +
  • JadeRabbit
  • +
  • Japtem
  • +
  • Jjwxc
  • +
  • Jonaxxstories
  • +
  • Jpmtl
  • +
  • Kakao
  • +
  • Kakuyomu
  • +
  • Kaystls
  • +
  • Kemonoparty
  • +
  • Kobatochan
  • +
  • Krytykal
  • +
  • Liberspark
  • +
  • Libri7
  • +
  • LightNovelBastion
  • +
  • Lightnovelbox
  • +
  • Lightnovelfr
  • +
  • Lightnovelreader
  • +
  • Lightnovelread
  • +
  • Lightnovelsme
  • +
  • LightNovelsTranslations
  • +
  • LightNovelWorld
  • +
  • Literotica
  • +
  • Lnmtl
  • +
  • MachineTranslation
  • +
  • Madara
  • +
  • Madnovel
  • +
  • MagicWizards
  • +
  • Mandarinducktales
  • +
  • Mangadex
  • +
  • MangaHere
  • +
  • Mangakakalot
  • +
  • Mangallama
  • +
  • Manganelo
  • +
  • Manganov
  • +
  • MangaRead
  • +
  • Manhwaden
  • +
  • Manhwatop
  • +
  • Marx2mao
  • +
  • Mayanovel
  • +
  • McStories
  • +
  • Meionovel
  • +
  • Metanovel
  • +
  • Midnightrambles
  • +
  • MMyWwuxiaWorld
  • +
  • MoonQuill
  • +
  • Mtlarchive
  • +
  • MtledNovels
  • +
  • Mtlnation
  • +
  • Mtlnovel
  • +
  • Mtlreader
  • +
  • Mtnovel
  • +
  • MuggleNet
  • +
  • Myxls
  • +
  • Nanodesu
  • +
  • Nanomashinonline
  • +
  • Nepustation
  • +
  • Noblemtl
  • +
  • NovelAll
  • +
  • Novelcool
  • +
  • NovelCrush
  • +
  • NovelFever
  • +
  • Novelfull
  • +
  • Novelgo
  • +
  • Novelgreat
  • +
  • Novelhall
  • +
  • Novelhi
  • +
  • Novelhold
  • +
  • Novelmania
  • +
  • Novelmao
  • +
  • Novelmedium
  • +
  • NovelNaver
  • +
  • NovelOnlineFree
  • +
  • Novelonomicon
  • +
  • Novelpassion
  • +
  • Novelplex
  • +
  • Novelsect
  • +
  • Novelsemperor
  • +
  • Novelspl
  • +
  • NovelSpread
  • +
  • NovelsRock
  • +
  • Noveltoon
  • +
  • Noveltranslatedbyc
  • +
  • NovelUniverse
  • +
  • NovelUpdatesOnline
  • +
  • NovelUpdates
  • +
  • Novelversetranslations
  • +
  • Novicetranslations
  • +
  • Nrvnqsr
  • +
  • Ntruyen
  • +
  • NyahFanfiction
  • +
  • Nyantl
  • +
  • Octopii
  • +
  • Onlinenovelbook
  • +
  • Ontimestory
  • +
  • Ossantl
  • +
  • PandaNovel
  • +
  • Patreon
  • +
  • Pawread
  • +
  • Peachblossomcodex
  • +
  • Peachpitting
  • +
  • Peachpuff
  • +
  • Ptwxz
  • +
  • Puretl
  • +
  • Qidian
  • +
  • Qinxiaoshuo
  • +
  • Qqxs
  • +
  • Quanben5
  • +
  • Quanben
  • +
  • Quotev
  • +
  • Raeitranslations
  • +
  • RainOfSnow
  • +
  • Ranobes
  • +
  • ReadComicOnline
  • +
  • Readhive
  • +
  • ReadLightNovelCc
  • +
  • ReadLightNovel
  • +
  • Readnoveldaily
  • +
  • Readnovelfullorg
  • +
  • ReadNovelFull
  • +
  • Readwn
  • +
  • RebirthOnline.js
  • +
  • Reddit
  • +
  • ReLibrary
  • +
  • RoyalRoad
  • +
  • RtdMoe
  • +
  • Rtenzo
  • +
  • Rubymaybetranslations
  • +
  • Rulate
  • +
  • Scribblehub
  • +
  • Secondlifetranslations
  • +
  • Semprot
  • +
  • SexStories
  • +
  • Shanghaifantasy
  • +
  • Shikkakutranslations
  • +
  • Shinsori
  • +
  • Shintranslations
  • +
  • Shirokuns
  • +
  • Shmtranslations
  • +
  • Shubaowb
  • +
  • Shubaow
  • +
  • Shw5
  • +
  • SitesGoogle
  • +
  • Sjks88
  • +
  • Sjuukanshu
  • +
  • Skydemonorder
  • +
  • SnowyCodex
  • +
  • Sonako
  • +
  • Soverse
  • +
  • Spacebattles
  • +
  • Spiritfanfiction
  • +
  • Sspai
  • +
  • Starlightstream
  • +
  • Stocx
  • +
  • StorySeedling
  • +
  • Sweek
  • +
  • Syosetu
  • +
  • SystemTranslation
  • +
  • Taffygirl13
  • +
  • Tapas
  • +
  • Tapread
  • +
  • Teanovel
  • +
  • Teenfic
  • +
  • Template.js
  • +
  • Tigertranslations
  • +
  • Timotxt
  • +
  • Titannovel
  • +
  • Tomotranslations
  • +
  • TranslationChicken
  • +
  • Travistranslations
  • +
  • Truyenfull
  • +
  • Truyenyy
  • +
  • Trxs
  • +
  • Tumblr
  • +
  • Ultimaguil
  • +
  • UnlimitedNovelFailures
  • +
  • UntamedAlley
  • +
  • VipNovel
  • +
  • Volarenovels
  • +
  • Wanderinginn
  • +
  • Watashiwasugoidesu
  • +
  • Wattpad
  • +
  • WebNovelOnline
  • +
  • Wenku8
  • +
  • Wfxs
  • +
  • Wikipedia
  • +
  • Wix
  • +
  • WLPublishing
  • +
  • WnmtlOrg
  • +
  • Wnmtl
  • +
  • Woopread
  • +
  • Wordexcerpt
  • +
  • WordpressBase
  • +
  • WorldnovelOnline
  • +
  • Wtrlab
  • +
  • WuxiaBlog
  • +
  • Wuxiacity
  • +
  • WuxiaworldCo
  • +
  • Wuxiaworldeu
  • +
  • Wuxiaworld
  • +
  • WuxiaworldWorld
  • +
  • Xbiquge
  • +
  • Xiaoshuogui
  • +
  • Xiaxuenovels
  • +
  • Xklxsw
  • +
  • Yushubo
  • +
  • ZenithNovels
  • +
  • Zeonicrepublic
  • +
  • Zhenhunxiaoshuo
  • +
  • ZirusMusings
  • +
+
+ +

(back to top)

+ +### Built With + +- HTML +- CSS +- JS +- jszip +- @xmldom/xmldom +- copyfiles +- eslint +- http-server + +

(back to top)

+ + + +## Installation ### Firefox + +#### From Firefox Add-ons + +Open Firefox and visit [WebToEpub on Firefox Add-ons][firefox-add-ons]. + +#### From Source (Firefox) + The easiest set of steps is using Firefox. + 1. Download prebuilt Firefox version of extension from https://github.com/dteviot/WebToEpub/releases/tag/developer-build. 2. Open Firefox and type "about:debugging#/runtime/this-firefox" into the URL bar. 3. Click "Load Temporary Add-on". 4. Click on the zip file you downloaded in step 1. -![Installing in Firefox screenshot](doc/FirefoxLoadFromSource.png?raw=true) + ![Installing in Firefox screenshot](doc/FirefoxLoadFromSource.png?raw=true) ### Chrome + +#### From Chrome Web Store + +Open Chrome (or any Chromium-based browser like Edge, Opera, etc.) and go to [WebToEpub on Chrome Web Store][chrome-web-store]. + +#### From Source (Chrome) + 1. Download prebuilt Chrome version of extension from https://github.com/dteviot/WebToEpub/releases/tag/developer-build. 2. Unpack zip file 3. Open Chrome and type "chrome://extensions" into the browser. 4. Make sure "Developer Mode" at the top of the page is checked. 5. Press the "Load unpacked extension.." button and browse to unpacked zip directory from step 2. -![wte-chrome-small](https://user-images.githubusercontent.com/20068737/136224439-57af48bd-21fb-463d-99db-74f44769327e.gif) + ![wte-chrome-small](https://user-images.githubusercontent.com/20068737/136224439-57af48bd-21fb-463d-99db-74f44769327e.gif) + +### From Source (Developers) + +1. Clone this repo. + + ```sh + git clone https://github.com/dteviot/WebToEpub.git + ``` + +2. Build extension. + + - Install [Node.js](https://nodejs.org/) (if not already installed) + - Run `npm install` to install dependencies + - Run `npm run lint` to build plugin and lint + - This will produce 3 files in the eslint directory. + - WebToEpub0.0.0.x.xpi (Firefox version of plug-in) + - WebToEpub0.0.0.x.zip (Chrome version of plug-in) + - packed.js + - Lint tests are OK if output ends with `Wrote Zip to disk; Done in XXXs.` -## How to install from Source (for developers) -1. Clone this repo -2. Build extension. See "To run Eslint (and build the plugin)" in "Other notes" below. 3. Install extension in browser of choice, using instructions above. -## License information -Licenced under GPLv3. +See [notes](#notes) for more information. + +### Android (untested) + +- Caution I have not (and do not test) on Android. I've been told the following work, but I can't guarantee them. +- Get yourself `Kiwi browser`, `Yandex browser`, or `Firefox`. +- Install from [Chrome web store][chrome-web-store] for Kiwi and Yandex, or from [Mozilla add-ons][firefox-add-ons] for Firefox. + +

(back to top)

+ + + +## Usage + +### How to use with Baka-Tsuki: + +- Browse to a Baka-Tsuki web page that has the full text of a story. +- Click on the WebToEpub icon on top right of the window. +- Check story details are correct. +- Select image to use for cover. +- Click the "Pack EPUB" button. +- Wait for progress bar to finish (indicating the images being downloaded) and the generated EPUB to be placed in your downloads directory. + +### How to use with Archive of Our Own: + +- Browse to first chapter of story you want. +- Click on the WebToEpub icon on top right of the window. +- Check story details are correct. +- Click the "Pack EPUB" button. +- Wait for progress bar to finish (indicating the additional chapters are being downloaded) and the generated EPUB to be placed in your downloads directory. + +### How to use for site that there is no specific parser for: + +See: https://dteviot.github.io/Projects/webToEpub_DefaultParser.html + +### How to create Parsers for new sites + +For details on how to extend, see the following + +- https://dteviot.github.io/Projects/webToEpub_FAQ.html#write-parser +- https://dteviot.github.io/Projects/webToEpub_FAQ.html +- http://www.codeproject.com/Articles/1060680/Web-to-EPUB-Extension-for-Chrome. + +

(back to top)

+ + + +## Contributing + +> [Note] Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. + +Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. + +If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". +Don't forget to give the project a star! Thanks again! + +1. Fork the Project +2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) +3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the Branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +### Top contributors: + + + contrib.rocks image + + +### Credits: + +
+ Credits: +
    +
  • Firefox port by Markus Vieth
  • +
  • Michael Fox (Belldandu)
  • +
  • typhoon71
  • +
  • toshiya44
  • +
  • dreamer2908
  • +
  • Parser for German Project Gutenberg by GallusMax
  • +
  • Hogesyx
  • +
  • Asif Mahmood
  • +
  • snnsnn
  • +
  • Sergii Pravdzivyi
  • +
  • Aurimas Niekis
  • +
  • Tom Goetz
  • +
  • Alen Toma (css styling)
  • +
  • JimmXinu
  • +
  • gamebeaker (additional metadata, Library)
  • +
  • Kondeeza
  • +
  • Mathnerd314
  • +
  • Sickan90
  • +
  • Miracutor
  • +
  • Kiradien
  • +
  • Synteresis
  • +
  • Lej77
  • +
  • nandakishore2009 (Parsers for madnovel.com, www.panda-novel.com)
  • +
  • courli79
  • +
  • Dimava
  • +
  • alethiophile
  • +
  • Yoanhg421
  • +
  • Leone Jacob Sunil (ImLJS)
  • +
  • xRahul
  • +
  • Oleksii Taranenko
  • +
  • Naheulf
  • +
  • perishableloc
  • +
  • praschke
  • +
  • ImmortalDreamer
  • +
  • ktrin
  • +
  • nozwock
  • +
  • Tyderion
  • +
  • Darthagnon
  • +
  • LucasFreitaslpf1
  • +
+
+ +

(back to top)

+ + + +## License + +Licensed under GPLv3. See [LICENSE][license-url] for more information. WebToEpub uses the following libraries: -* JSZip library v3.0.0: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. -* quint: http://qunitjs.com/, licensed under MIT license. - -## Other notes -### To run Eslint (and build the plugin) -* Install [Node.js](https://nodejs.org/) (if not already installed) -* Run `npm install` to install dependencies -* Run `npm run lint` to build plugin and lint -* This will produce 3 files in the eslint directory. - * WebToEpub0.0.0.x.xpi (Firefox version of plug-in.) - * WebToEpub0.0.0.x.zip (Chrome version of plug-in.) - * packed.js -* Lint tests are OK if output ends with `Wrote Zip to disk; Done in XXXs.` + +- JSZip library v3.0.0: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. +- quint: http://qunitjs.com/, licensed under MIT license. + +

(back to top)

+ + + +## Contact + +David Teviotdale - [@dteviot](https://github.com/dteviot) + +Project Link: [https://github.com/dteviot/WebToEpub](https://github.com/dteviot/WebToEpub) + +

(back to top)

+ + + +## Notes ### To run unit tests -* Install [Node.js](https://nodejs.org/) (if not already installed) -* Run `npm install` to install dependencies -* Run `npm test` -* Tests will be launched in your default browser. To open them in different browser, open the page URL in it. + +- Install [Node.js](https://nodejs.org/) (if not already installed) +- Run `npm install` to install dependencies +- Run `npm test` +- Tests will be launched in your default browser. To open them in different browser, open the page URL in it. > ### To run unit tests without Node.js -> * If you are not trying to run unit tests in `/unitTest/` folder, you do not need this -> * If you can use nodejs, see previous paragraph instead -> * If you can not install nodejs or http-server is not working when you run `npm test`, and you have no alternative ways to serve files (like [chrome Web Server app](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb) for example), you have to allow browser to run local html files to run tests. +> +> - If you are not trying to run unit tests in `/unitTest/` folder, you do not need this +> - If you can use nodejs, see previous paragraph instead +> - If you can not install nodejs or http-server is not working when you run `npm test`, and you have no alternative ways to serve files (like [chrome Web Server app](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb) for example), you have to allow browser to run local html files to run tests. +> > #### To run unit tests (without local server) under Chrome -> * Close all running copies of Chrome -> * Start Chrome with command line argument `--allow-file-access-from-files`. That is: -> * Open a command propmt -> * Browse to the directory holding Chrome -> * Type in command `chrome.exe --allow-file-access-from-files` . Press "Enter". -> * If you don't do this, some tests will fail with error messages containing the text **_Failed to execute 'send' on 'XMLHttpRequest': Failed to load_**. -> * Load `unitTest/Tests.html` -> * If you get **_Failed to read the 'localStorage' property from 'Window': Access is denied for this document_** errors -> * Type **_chrome://settings/content_** into Chrome's search bar -> * Uncheck **_Block third-party cookies and site data_** -> * Click **_Finished_** -> * Re-run unit tests -> * When finished with unit tests. -> * Restore original value of **_Block third-party cookies and site data_** (if you changed it). -> * close all running copies of Chrome -> +> +> - Close all running copies of Chrome +> - Start Chrome with command line argument `--allow-file-access-from-files`. That is: +> - Open a command propmt +> - Browse to the directory holding Chrome +> - Type in command `chrome.exe --allow-file-access-from-files` . Press "Enter". +> - If you don't do this, some tests will fail with error messages containing the text **_Failed to execute 'send' on 'XMLHttpRequest': Failed to load_**. +> - Load `unitTest/Tests.html` +> - If you get **_Failed to read the 'localStorage' property from 'Window': Access is denied for this document_** errors +> - Type **_chrome://settings/content_** into Chrome's search bar +> - Uncheck **_Block third-party cookies and site data_** +> - Click **_Finished_** +> - Re-run unit tests +> - When finished with unit tests. +> - Restore original value of **_Block third-party cookies and site data_** (if you changed it). +> - close all running copies of Chrome +> > #### To run unit tests (without local server) under Firefox -> * Start Firefox -> * Go to `about:config` -> * Find `security.fileuri.strict_origin_policy` parameter -> * Set it to false -> * Load `unitTest/Tests.html` -> * (Remember to reset `security.fileuri.strict_origin_policy` to true when done. +> +> - Start Firefox +> - Go to `about:config` +> - Find `security.fileuri.strict_origin_policy` parameter +> - Set it to false +> - Load `unitTest/Tests.html` +> - (Remember to reset `security.fileuri.strict_origin_policy` to true when done. + +

(back to top)

+ + + + +[contributors-shield]: https://img.shields.io/github/contributors/dteviot/WebToEpub.svg?style=for-the-badge +[contributors-url]: https://github.com/dteviot/WebToEpub/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/dteviot/WebToEpub.svg?style=for-the-badge +[forks-url]: https://github.com/dteviot/WebToEpub/network/members +[stars-shield]: https://img.shields.io/github/stars/dteviot/WebToEpub.svg?style=for-the-badge +[stars-url]: https://github.com/dteviot/WebToEpub/stargazers +[issues-shield]: https://img.shields.io/github/issues/dteviot/WebToEpub.svg?style=for-the-badge +[issues-url]: https://github.com/dteviot/WebToEpub/issues + + + +[license-shield]: https://img.shields.io/badge/LICENSE-GPLv3-%23555555?style=for-the-badge&label=LICENSE&color=285959 +[license-url]: /LICENSE.md +[product-screenshot]: doc/product-screenshot.png + + + +[firefox-add-ons]: https://addons.mozilla.org/en-US/firefox/addon/webtoepub-for-baka-tsuki +[chrome-web-store]: https://chrome.google.com/webstore/detail/webtoepub/akiljllkbielkidmammnifcnibaigelm From a09be44665583c9911d6aeaa72aad9ce6f321256 Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 09:23:12 -0700 Subject: [PATCH 02/10] Update readme.md --- readme.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index e866e74b..9fe4a720 100644 --- a/readme.md +++ b/readme.md @@ -547,7 +547,9 @@ For details on how to extend, see the following ## Contributing -> [Note] Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. +> [!NOTE] +> +> Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. @@ -560,16 +562,16 @@ Don't forget to give the project a star! Thanks again! 4. Push to the Branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request -### Top contributors: +### Top contributors contrib.rocks image -### Credits: +### Credits
- Credits: + Contributors (39)
  • Firefox port by Markus Vieth
  • Michael Fox (Belldandu)
  • From ed2f5cfbaf401a00913a5648798a65e6eb1a784f Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 11:09:42 -0700 Subject: [PATCH 03/10] Update readme.md --- readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 9fe4a720..5401c057 100644 --- a/readme.md +++ b/readme.md @@ -10,13 +10,15 @@ *** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use. *** https://www.markdownguide.org/basic-syntax/#reference-style-links --> - +
    + [![Contributors][contributors-shield]][contributors-url] [![Forks][forks-shield]][forks-url] [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url] [![GPLv3 License][license-shield]][license-url] +

    From c5bad3048a009c19b6b81fb35fc5b8226c2a6855 Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 19:44:00 +0100 Subject: [PATCH 04/10] added new contributor --- package.json | 3 ++- readme.md | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 99883241..f46b08df 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,8 @@ { "name": "Tyderion"}, { "name": "nozwock"}, { "name": "Darthagnon"}, - { "name": "LucasFreitaslpf1"} + { "name": "LucasFreitaslpf1"}, + { "name": "Jemeni11"} ], "license": "GPL-3.0-only", "bugs": { diff --git a/readme.md b/readme.md index 5401c057..b81a40f8 100644 --- a/readme.md +++ b/readme.md @@ -550,7 +550,7 @@ For details on how to extend, see the following ## Contributing > [!NOTE] -> +> > Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. @@ -573,7 +573,7 @@ Don't forget to give the project a star! Thanks again! ### Credits
    - Contributors (39) + Contributors (40)
    • Firefox port by Markus Vieth
    • Michael Fox (Belldandu)
    • @@ -614,6 +614,7 @@ Don't forget to give the project a star! Thanks again!
    • Tyderion
    • Darthagnon
    • LucasFreitaslpf1
    • +
    • Jemeni11
    From b04ff4fdb0480e59b3782c9bf7bd9bca045b2b08 Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Sun, 29 Sep 2024 09:56:25 +0100 Subject: [PATCH 05/10] feat: Update README with expanded site support and project details - Greatly expand and update list of supported sites - Reorganize "Built With" section: - Add Node.js, remove HTML/CSS/JS - Separate libraries used in WebToEpub from build process - Update library versions (JSZip to v3.7.1) - Update links to point to GitHub wiki for parser creation and FAQ - Remove specific contributor count - Minor text adjustments and improvements throughout --- readme.md | 775 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 467 insertions(+), 308 deletions(-) diff --git a/readme.md b/readme.md index b81a40f8..d52c5e7a 100644 --- a/readme.md +++ b/readme.md @@ -50,7 +50,12 @@ About The Project
    • Supported Sites
    • -
    • Built With
    • +
    • + Built With +
    • @@ -128,304 +133,455 @@ WebToEpub is a browser extension for Firefox and Chrome that converts web novels ### Supported Sites
      - Full list of Supported Sites (296) + Last we checked, the following sites were known to work
        -
      • 230Book
      • -
      • 4ksw
      • -
      • 69shu
      • -
      • 888novel
      • -
      • 88xiaoshuo
      • -
      • ActiveTranslations
      • -
      • Adultfanfiction
      • -
      • Aerialrain
      • -
      • Akknovel
      • -
      • Alphapolis
      • -
      • Amoryaoi
      • -
      • AnythingNovel
      • -
      • ArchiveOfOurOwn
      • -
      • Asianfanfics
      • -
      • AsianHobbyist
      • -
      • Asianovel
      • -
      • Asstr
      • -
      • BabelChain
      • -
      • BakaTsuki
      • -
      • BakaTsukiSeriesPage
      • -
      • Betwixtedbutterfly
      • -
      • Blogspot
      • -
      • Bnatranslations
      • -
      • Book18
      • -
      • Bookswithqianya
      • -
      • Booktoki152
      • -
      • Botitranslation
      • -
      • BoxnovelOrg
      • -
      • Boylove
      • -
      • Bqg225
      • -
      • Cangji
      • -
      • CClawTranslations
      • -
      • Chaleuria
      • -
      • Chichipeph
      • -
      • Chickengege
      • -
      • ChineseFantasyNovels
      • -
      • Chrysanthemumgarden
      • -
      • Chyoa
      • -
      • Comrademao
      • -
      • Coronatranslation
      • -
      • CreativeNovels
      • -
      • Crimsontranslations
      • -
      • Czbooks
      • -
      • DarkNovels
      • -
      • DeviantArt
      • -
      • Dummynovels
      • -
      • Edanglarstranslations
      • -
      • EightMuses
      • -
      • Engnovel
      • -
      • Erofus
      • -
      • Exiledrebelsscanlations
      • -
      • FanFiction
      • -
      • FastNovel
      • -
      • Ffxs8
      • -
      • Fictionhunt
      • -
      • FictionMania
      • -
      • Ficwad
      • -
      • Fimfiction
      • -
      • FlyingLines
      • -
      • Foxaholic
      • -
      • Foxteller
      • -
      • Freelightnovel
      • -
      • FreeWebNovel
      • -
      • Fullnovel
      • -
      • GamefaqsGamespot
      • -
      • GenesiStudio
      • -
      • Graverobbertl
      • -
      • GravityNovels
      • -
      • GravityTales
      • -
      • Gunnerkrigg
      • -
      • GutenbergDE
      • -
      • Gzbp
      • -
      • Helheimscans
      • -
      • Hellping
      • -
      • HentaiFoundry
      • -
      • Hiscension
      • -
      • Hostednovel
      • -
      • Hui3r
      • -
      • Idleturtletranslations
      • -
      • Idnovelmyid
      • -
      • Imgur
      • -
      • Indomtl
      • -
      • Indowebnovel
      • -
      • Inkitt
      • -
      • Inoveltranslation
      • -
      • IsekaiScan
      • -
      • Isotls
      • -
      • JadeRabbit
      • -
      • Japtem
      • -
      • Jjwxc
      • -
      • Jonaxxstories
      • -
      • Jpmtl
      • -
      • Kakao
      • -
      • Kakuyomu
      • -
      • Kaystls
      • -
      • Kemonoparty
      • -
      • Kobatochan
      • -
      • Krytykal
      • -
      • Liberspark
      • -
      • Libri7
      • -
      • LightNovelBastion
      • -
      • Lightnovelbox
      • -
      • Lightnovelfr
      • -
      • Lightnovelreader
      • -
      • Lightnovelread
      • -
      • Lightnovelsme
      • -
      • LightNovelsTranslations
      • -
      • LightNovelWorld
      • -
      • Literotica
      • -
      • Lnmtl
      • -
      • MachineTranslation
      • -
      • Madara
      • -
      • Madnovel
      • -
      • MagicWizards
      • -
      • Mandarinducktales
      • -
      • Mangadex
      • -
      • MangaHere
      • -
      • Mangakakalot
      • -
      • Mangallama
      • -
      • Manganelo
      • -
      • Manganov
      • -
      • MangaRead
      • -
      • Manhwaden
      • -
      • Manhwatop
      • -
      • Marx2mao
      • -
      • Mayanovel
      • -
      • McStories
      • -
      • Meionovel
      • -
      • Metanovel
      • -
      • Midnightrambles
      • -
      • MMyWwuxiaWorld
      • -
      • MoonQuill
      • -
      • Mtlarchive
      • -
      • MtledNovels
      • -
      • Mtlnation
      • -
      • Mtlnovel
      • -
      • Mtlreader
      • -
      • Mtnovel
      • -
      • MuggleNet
      • -
      • Myxls
      • -
      • Nanodesu
      • -
      • Nanomashinonline
      • -
      • Nepustation
      • -
      • Noblemtl
      • -
      • NovelAll
      • -
      • Novelcool
      • -
      • NovelCrush
      • -
      • NovelFever
      • -
      • Novelfull
      • -
      • Novelgo
      • -
      • Novelgreat
      • -
      • Novelhall
      • -
      • Novelhi
      • -
      • Novelhold
      • -
      • Novelmania
      • -
      • Novelmao
      • -
      • Novelmedium
      • -
      • NovelNaver
      • -
      • NovelOnlineFree
      • -
      • Novelonomicon
      • -
      • Novelpassion
      • -
      • Novelplex
      • -
      • Novelsect
      • -
      • Novelsemperor
      • -
      • Novelspl
      • -
      • NovelSpread
      • -
      • NovelsRock
      • -
      • Noveltoon
      • -
      • Noveltranslatedbyc
      • -
      • NovelUniverse
      • -
      • NovelUpdatesOnline
      • -
      • NovelUpdates
      • -
      • Novelversetranslations
      • -
      • Novicetranslations
      • -
      • Nrvnqsr
      • -
      • Ntruyen
      • -
      • NyahFanfiction
      • -
      • Nyantl
      • -
      • Octopii
      • -
      • Onlinenovelbook
      • -
      • Ontimestory
      • -
      • Ossantl
      • -
      • PandaNovel
      • -
      • Patreon
      • -
      • Pawread
      • -
      • Peachblossomcodex
      • -
      • Peachpitting
      • -
      • Peachpuff
      • -
      • Ptwxz
      • -
      • Puretl
      • -
      • Qidian
      • -
      • Qinxiaoshuo
      • -
      • Qqxs
      • -
      • Quanben5
      • -
      • Quanben
      • -
      • Quotev
      • -
      • Raeitranslations
      • -
      • RainOfSnow
      • -
      • Ranobes
      • -
      • ReadComicOnline
      • -
      • Readhive
      • -
      • ReadLightNovelCc
      • -
      • ReadLightNovel
      • -
      • Readnoveldaily
      • -
      • Readnovelfullorg
      • -
      • ReadNovelFull
      • -
      • Readwn
      • -
      • RebirthOnline.js
      • -
      • Reddit
      • -
      • ReLibrary
      • -
      • RoyalRoad
      • -
      • RtdMoe
      • -
      • Rtenzo
      • -
      • Rubymaybetranslations
      • -
      • Rulate
      • -
      • Scribblehub
      • -
      • Secondlifetranslations
      • -
      • Semprot
      • -
      • SexStories
      • -
      • Shanghaifantasy
      • -
      • Shikkakutranslations
      • -
      • Shinsori
      • -
      • Shintranslations
      • -
      • Shirokuns
      • -
      • Shmtranslations
      • -
      • Shubaowb
      • -
      • Shubaow
      • -
      • Shw5
      • -
      • SitesGoogle
      • -
      • Sjks88
      • -
      • Sjuukanshu
      • -
      • Skydemonorder
      • -
      • SnowyCodex
      • -
      • Sonako
      • -
      • Soverse
      • -
      • Spacebattles
      • -
      • Spiritfanfiction
      • -
      • Sspai
      • -
      • Starlightstream
      • -
      • Stocx
      • -
      • StorySeedling
      • -
      • Sweek
      • -
      • Syosetu
      • -
      • SystemTranslation
      • -
      • Taffygirl13
      • -
      • Tapas
      • -
      • Tapread
      • -
      • Teanovel
      • -
      • Teenfic
      • -
      • Template.js
      • -
      • Tigertranslations
      • -
      • Timotxt
      • -
      • Titannovel
      • -
      • Tomotranslations
      • -
      • TranslationChicken
      • -
      • Travistranslations
      • -
      • Truyenfull
      • -
      • Truyenyy
      • -
      • Trxs
      • -
      • Tumblr
      • -
      • Ultimaguil
      • -
      • UnlimitedNovelFailures
      • -
      • UntamedAlley
      • -
      • VipNovel
      • -
      • Volarenovels
      • -
      • Wanderinginn
      • -
      • Watashiwasugoidesu
      • -
      • Wattpad
      • -
      • WebNovelOnline
      • -
      • Wenku8
      • -
      • Wfxs
      • -
      • Wikipedia
      • -
      • Wix
      • -
      • WLPublishing
      • -
      • WnmtlOrg
      • -
      • Wnmtl
      • -
      • Woopread
      • -
      • Wordexcerpt
      • -
      • WordpressBase
      • -
      • WorldnovelOnline
      • -
      • Wtrlab
      • -
      • WuxiaBlog
      • -
      • Wuxiacity
      • -
      • WuxiaworldCo
      • -
      • Wuxiaworldeu
      • -
      • Wuxiaworld
      • -
      • WuxiaworldWorld
      • -
      • Xbiquge
      • -
      • Xiaoshuogui
      • -
      • Xiaxuenovels
      • -
      • Xklxsw
      • -
      • Yushubo
      • -
      • ZenithNovels
      • -
      • Zeonicrepublic
      • -
      • Zhenhunxiaoshuo
      • -
      • ZirusMusings
      • +
      • 230book.net
      • +
      • 38xs.com
      • +
      • 4ksw.com
      • +
      • 888novel.com
      • +
      • 88xiaoshuo.net
      • +
      • 8muses.com
      • +
      • a-t.nu
      • +
      • aerialrain.com
      • +
      • akknovel.com
      • +
      • all-novelfull.net
      • +
      • allnovel.org
      • +
      • allnovelbin.net
      • +
      • allnovelbook.com
      • +
      • allnovelfull.app
      • +
      • allnovelfull.com
      • +
      • allnovelfull.net
      • +
      • allnovelfull.org
      • +
      • allnovelnext.com
      • +
      • alphapolis.co.jp
      • +
      • alternatehistory.com
      • +
      • amor-yaoi.com
      • +
      • anythingnovel.com
      • +
      • arcanetranslations.com
      • +
      • archiveofourown.org
      • +
      • asianfanfics.com
      • +
      • asianhobbyist.com
      • +
      • asianovel.net
      • +
      • asstr.org
      • +
      • babelnovel.com
      • +
      • baka-tsuki.org
      • +
      • bakapervert.wordpress.com
      • +
      • bednovel.com
      • +
      • bestlightnovel.com
      • +
      • betwixtedbutterfly.com
      • +
      • bnatranslations.com
      • +
      • book18.org
      • +
      • bookalb.com
      • +
      • bookswithqianya.com
      • +
      • botitranslation.com
      • +
      • boxnovel.net
      • +
      • boxnovel.org
      • +
      • boxnovelfull.com
      • +
      • boylove.cc
      • +
      • bqka.cc
      • +
      • cangji.net
      • +
      • cclawtranslations.home.blog
      • +
      • chaleuria.com
      • +
      • chichipeph.com
      • +
      • chickengege.org
      • +
      • chinesewuxia.world
      • +
      • chrysanthemumgarden.com
      • +
      • chyoa.com
      • +
      • ckandawrites.online
      • +
      • comics.8muses.com
      • +
      • comrademao.com
      • +
      • coronatranslation.com
      • +
      • creativenovels.com
      • +
      • crimsonmagic.me
      • +
      • crimsontranslations.com
      • +
      • cyborg-tl.com
      • +
      • czbooks.net
      • +
      • daotranslate.com
      • +
      • daotranslate.us
      • +
      • dark-novels.ru
      • +
      • deviantart.com
      • +
      • dummynovels.com
      • +
      • edanglarstranslations.com
      • +
      • engnovel.com
      • +
      • erofus.com
      • +
      • exiledrebelsscanlations.com
      • +
      • faloomtl.com
      • +
      • fanfiction.com.br
      • +
      • fanfiction.mugglenet.com
      • +
      • fanfiction.net
      • +
      • fanmtl.com
      • +
      • fannovel.com
      • +
      • fannovels.com
      • +
      • fansmtl.com
      • +
      • fastnovel.net
      • +
      • ffxs8.com
      • +
      • fictionhunt.com
      • +
      • fictionmania.tv
      • +
      • fictionpress.com
      • +
      • fictionzone.net
      • +
      • ficwad.com
      • +
      • fimfiction.net
      • +
      • finestories.com
      • +
      • flying-lines.com
      • +
      • forum.questionablequesting.com
      • +
      • forums.nrvnqsr.com
      • +
      • forums.spacebattles.com
      • +
      • forums.sufficientvelocity.com
      • +
      • foxteller.com
      • +
      • freelightnovel.net
      • +
      • freenovelsread.com
      • +
      • freewebnovel.com
      • +
      • freewn.com
      • +
      • frostfire10.wordpress.com
      • +
      • fullnovel.co
      • +
      • gamefaqs.gamespot.com
      • +
      • genesistls.com
      • +
      • genesistudio.com
      • +
      • goblinsguide.com
      • +
      • graverobbertl.site
      • +
      • gravitynovels.com
      • +
      • gravitytales.com
      • +
      • gunnerkrigg.com
      • +
      • gutenberg.spiegel.de
      • +
      • helheimscans.com
      • +
      • hellping.org
      • +
      • hentai-foundry.com
      • +
      • hiscension.com
      • +
      • hostednovel.com
      • +
      • hoxionia.com
      • +
      • hui3r.wordpress.com
      • +
      • idleturtle-translations.com
      • +
      • idnovel.my.id
      • +
      • imgur.com
      • +
      • indomtl.com
      • +
      • indowebnovel.id
      • +
      • inkitt.com
      • +
      • innnovel.com
      • +
      • inoveltranslation.com
      • +
      • isekaicyborg.wordpress.com
      • +
      • isekaiscan.com
      • +
      • isotls.com
      • +
      • jade-rabbit.net
      • +
      • japtem.com
      • +
      • jjwxc.net
      • +
      • jobnib.com
      • +
      • jonaxxstories.com
      • +
      • jpmtl.com
      • +
      • kakuyomu.jp
      • +
      • kaystls.site
      • +
      • kemono.su
      • +
      • knoxt.space
      • +
      • kobatochan.com
      • +
      • krytykal.org
      • +
      • lazygirltranslations.com
      • +
      • liberspark.com
      • +
      • libread.com
      • +
      • libri7.com
      • +
      • lightnovelbastion.com
      • +
      • lightnovelbox.com
      • +
      • lightnovelcave.com
      • +
      • lightnovelfr.com
      • +
      • lightnovelpub.com
      • +
      • lightnovelpub.fan
      • +
      • lightnovelread.com
      • +
      • lightnovelreader.org
      • +
      • lightnovels.live
      • +
      • lightnovels.me
      • +
      • lightnovelstranslations.com
      • +
      • lightnovelworld.co
      • +
      • lightnovelworld.com
      • +
      • lightsnovel.com
      • +
      • listnovel.com
      • +
      • literotica.com
      • +
      • lnmtl.com
      • +
      • lnreader.org
      • +
      • m.88xiaoshuo.net
      • +
      • m.bqg225.com
      • +
      • m.chinesefantasynovels.com
      • +
      • m.freelightnovel.net
      • +
      • m.gzbpi.com
      • +
      • m.metanovel.org
      • +
      • m.mywuxiaworld.com
      • +
      • m.novelspread.com
      • +
      • m.qqxs.vip
      • +
      • m.tapas.io
      • +
      • m.wuxiaworld.co
      • +
      • m.xklxsw.net
      • +
      • machine-translation.org
      • +
      • madnovel.com
      • +
      • magic.wizards.com
      • +
      • mandarinducktales.com
      • +
      • mangabob.com
      • +
      • mangadex.org
      • +
      • mangahere.cc
      • +
      • mangakakalot.com
      • +
      • mangallama.com
      • +
      • manganelo.com
      • +
      • manganov.com
      • +
      • mangaread.co
      • +
      • mangasushi.net
      • +
      • manhwaden.com
      • +
      • manhwatop.com
      • +
      • marx2mao.com
      • +
      • mayanovel.com
      • +
      • mcstories.com
      • +
      • meionovel.id
      • +
      • midnightrambles.in
      • +
      • moonbunnycafe.com
      • +
      • moonlightnovel.com
      • +
      • moonquill.com
      • +
      • morenovel.net
      • +
      • mtlarchive.com
      • +
      • mtled-novels.com
      • +
      • mtlnation.com
      • +
      • mtlnovel.com
      • +
      • mtlreader.com
      • +
      • mtnovel.net
      • +
      • myxls.net
      • +
      • nanomashin.online
      • +
      • ncode.syosetu.com
      • +
      • nightcomic.com
      • +
      • noblemtl.com
      • +
      • novel-bin.com
      • +
      • novel-bin.net
      • +
      • novel-bin.org
      • +
      • novel-next.com
      • +
      • novel.babelchain.org
      • +
      • novel.naver.com
      • +
      • novel18.syosetu.com
      • +
      • novel35.com
      • +
      • novelactive.org
      • +
      • novelall.com
      • +
      • novelbin.com
      • +
      • novelbin.me
      • +
      • novelbin.net
      • +
      • novelbuddy.com
      • +
      • novelbuddy.io
      • +
      • novelcool.com
      • +
      • novelcranel.org
      • +
      • novelcrush.com
      • +
      • novelebook.net
      • +
      • novelfever.com
      • +
      • novelfire.docsachhay.net
      • +
      • novelfull.com
      • +
      • novelfull.net
      • +
      • novelfullbook.com
      • +
      • novelgate.net
      • +
      • novelgo.id
      • +
      • novelgreat.net
      • +
      • novelhall.com
      • +
      • novelhi.com
      • +
      • novelhold.com
      • +
      • novelhulk.net
      • +
      • novellive.app
      • +
      • novellive.com
      • +
      • novellive.net
      • +
      • novelmania.com.br
      • +
      • novelmao.com
      • +
      • novelmax.net
      • +
      • novelmedium.com
      • +
      • novelmt.com
      • +
      • novelmtl.com
      • +
      • novelnext.com
      • +
      • novelnext.dramanovels.io
      • +
      • novelnext.net
      • +
      • novelnextz.com
      • +
      • novelonlinefree.com
      • +
      • novelonlinefree.info
      • +
      • novelonlinefull.com
      • +
      • novelonomicon.com
      • +
      • novelpassion.com
      • +
      • novelplex.org
      • +
      • novelpub.com
      • +
      • novels.pl
      • +
      • novelsect.com
      • +
      • novelsemperor.com
      • +
      • novelsemperor.net
      • +
      • novelsknight.com
      • +
      • novelsparadise.net
      • +
      • novelspread.com
      • +
      • novelsrock.com
      • +
      • noveltoon.mobi
      • +
      • noveltop1.org
      • +
      • noveltranslatedbyc.blogspot.com
      • +
      • noveltrench.com
      • +
      • noveltrust.net
      • +
      • noveluniverse.com
      • +
      • novelupdates.cc
      • +
      • novelupdates.online
      • +
      • novelusb.com
      • +
      • novelusb.net
      • +
      • novelversetranslations.com
      • +
      • novelxo.net
      • +
      • novicetranslations.com
      • +
      • ntruyen.vn
      • +
      • nyantl.wordpress.com
      • +
      • octopii.co
      • +
      • onlinenovelbook.com
      • +
      • ontimestory.eu
      • +
      • ossantl.com
      • +
      • panda-novel.com
      • +
      • pandamtl.com
      • +
      • pandapama.com
      • +
      • pandasnovel.com
      • +
      • patreon.com
      • +
      • pawread.com
      • +
      • peachblossomcodex.com
      • +
      • peachpitting.com
      • +
      • peachpuff.in
      • +
      • pery.info
      • +
      • piaotia.com
      • +
      • puretl.com
      • +
      • qinxiaoshuo.com
      • +
      • quanben.io
      • +
      • quanben5.io
      • +
      • questionablequesting.com
      • +
      • quotev.com
      • +
      • raeitranslations.com
      • +
      • rainingtl.org
      • +
      • rainofsnow.com
      • +
      • raisingthedead.ninja
      • +
      • ranobes.net
      • +
      • ranobes.top
      • +
      • re-library.com
      • +
      • readcomiconline.li
      • +
      • reader-hub.com
      • +
      • readfreebooksonline.org
      • +
      • readhive.org
      • +
      • readlightnovel.cc
      • +
      • readlightnovel.me
      • +
      • readlightnovel.meme
      • +
      • readlightnovel.org
      • +
      • readlightnovel.today
      • +
      • readlitenovel.com
      • +
      • readnoveldaily.com
      • +
      • readnovelfull.com
      • +
      • readnovelfull.me
      • +
      • readnovelfull.org
      • +
      • readwebnovel.xyz
      • +
      • readwn.com
      • +
      • readwn.org
      • +
      • rebirth.online
      • +
      • reddit.com
      • +
      • royalroad.com
      • +
      • royalroadl.com
      • +
      • rtd.moe
      • +
      • rtenzo.net
      • +
      • rubymaybetranslations.com
      • +
      • scifistories.com
      • +
      • scribblehub.com
      • +
      • secondlifetranslations.com
      • +
      • semprot.com
      • +
      • sexstories.com
      • +
      • shalvationtranslations.wordpress.com
      • +
      • shanghaifantasy.com
      • +
      • shikkakutranslations.org
      • +
      • shinsori.com
      • +
      • shintranslations.com
      • +
      • shirokuns.com
      • +
      • shmtranslations.com
      • +
      • shubaow.net
      • +
      • shubaowb.com
      • +
      • shw5.cc
      • +
      • sites.google.com
      • +
      • sj.uukanshu.com
      • +
      • sjks88.com
      • +
      • skydemonorder.com
      • +
      • skythewoodtl.com
      • +
      • snowycodex.com
      • +
      • sonako.fandom.com
      • +
      • sonako.wikia.com
      • +
      • sousetsuka.com
      • +
      • soverse.com
      • +
      • spiritfanfiction.com
      • +
      • sspai.com
      • +
      • starlightstream.net
      • +
      • sto.cx
      • +
      • storiesonline.net
      • +
      • storyseedling.com
      • +
      • sweek.com
      • +
      • systemtranslation.com
      • +
      • taffygirl13.wordpress.com
      • +
      • tamagotl.com
      • +
      • taonovel.com
      • +
      • tapas.io
      • +
      • tapread.com
      • +
      • teanovel.com
      • +
      • teanovel.net
      • +
      • teenfic.net
      • +
      • thenovelbin.org
      • +
      • tigertranslations.org
      • +
      • timotxt.com
      • +
      • titannovel.net
      • +
      • tl.rulate.ru
      • +
      • tomotranslations.com
      • +
      • topnovelfull.com
      • +
      • translationchicken.com
      • +
      • travistranslations.com
      • +
      • truyenfull.vn
      • +
      • truyenyy.com
      • +
      • trxs.me
      • +
      • ultimaguil.org
      • +
      • universalnovel.com
      • +
      • unlimitednovelfailures.mangamatters.com
      • +
      • untamedalley.com
      • +
      • veratales.com
      • +
      • vipnovel.com
      • +
      • volarenovels.com
      • +
      • wanderertl130.id
      • +
      • wanderinginn.com
      • +
      • watashiwasugoidesu.com
      • +
      • wattpad.com
      • +
      • webnovel.com
      • +
      • webnovel.live
      • +
      • webnovelonline.com
      • +
      • webnovelpub.com
      • +
      • webnovelpub.pro
      • +
      • wenku8.net
      • +
      • wfxs.tw
      • +
      • whitemoonlightnovels.com
      • +
      • wnmtl.com
      • +
      • wnmtl.org
      • +
      • woopread.com
      • +
      • wordexcerpt.com
      • +
      • worldnovel.online
      • +
      • wtr-lab.com
      • +
      • wuxia-world.online
      • +
      • wuxia.blog
      • +
      • wuxia.city
      • +
      • wuxia.click
      • +
      • wuxiabee.com
      • +
      • wuxiabee.net
      • +
      • wuxiabee.org
      • +
      • wuxiafox.com
      • +
      • wuxiago.com
      • +
      • wuxiahere.com
      • +
      • wuxiahub.com
      • +
      • wuxiamtl.com
      • +
      • wuxiaone.com
      • +
      • wuxiap.com
      • +
      • wuxiapub.com
      • +
      • wuxiar.com
      • +
      • wuxiaspot.com
      • +
      • wuxiau.com
      • +
      • wuxiaworld.co
      • +
      • wuxiaworld.com
      • +
      • wuxiaworld.eu
      • +
      • wuxiaworld.live
      • +
      • wuxiaworld.online
      • +
      • wuxiaworld.site
      • +
      • wuxiaworld.world
      • +
      • wuxiazone.com
      • +
      • xbiquge.so
      • +
      • xiaoshuogui.com
      • +
      • xiaxuenovels.xyz
      • +
      • yoraikun.wordpress.com
      • +
      • yushubo.net
      • +
      • zenithnovels.com
      • +
      • zeonic-republic.net
      • +
      • zhenhunxiaoshuo.com
      • +
      • zinnovel.net
      • +
      • zirusmusings.com
      @@ -433,14 +589,18 @@ WebToEpub is a browser extension for Firefox and Chrome that converts web novels ### Built With -- HTML -- CSS -- JS +- Node.js +- eslint + +##### Libraries used (in WebToEpub) + - jszip + +#### Libraries used by WebToEpub build process + - @xmldom/xmldom - copyfiles -- eslint -- http-server +- quint

      (back to top)

      @@ -533,14 +693,13 @@ See [notes](#notes) for more information. ### How to use for site that there is no specific parser for: -See: https://dteviot.github.io/Projects/webToEpub_DefaultParser.html +See: https://github.com/dteviot/WebToEpub/wiki/FAQ#how-to-convert-a-new-site-using-the-default-parser ### How to create Parsers for new sites For details on how to extend, see the following -- https://dteviot.github.io/Projects/webToEpub_FAQ.html#write-parser -- https://dteviot.github.io/Projects/webToEpub_FAQ.html +- https://github.com/dteviot/WebToEpub/wiki/FAQ#how-to-write-a-new-parser - http://www.codeproject.com/Articles/1060680/Web-to-EPUB-Extension-for-Chrome.

      (back to top)

      @@ -573,7 +732,7 @@ Don't forget to give the project a star! Thanks again! ### Credits
      - Contributors (40) + Contributors
      • Firefox port by Markus Vieth
      • Michael Fox (Belldandu)
      • @@ -628,7 +787,7 @@ Licensed under GPLv3. See [LICENSE][license-url] for more information. WebToEpub uses the following libraries: -- JSZip library v3.0.0: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. +- JSZip library v3.7.1: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. - quint: http://qunitjs.com/, licensed under MIT license.

        (back to top)

        From 9a0783a53c689227dbdb6969ba2fd023a24594f4 Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 17:08:08 +0100 Subject: [PATCH 06/10] feat: readme update --- doc/logo.png | Bin 0 -> 2069 bytes doc/product-screenshot.png | Bin 0 -> 38177 bytes readme.md | 826 ++++++++++++++++++++++++++++++------- 3 files changed, 678 insertions(+), 148 deletions(-) create mode 100644 doc/logo.png create mode 100644 doc/product-screenshot.png diff --git a/doc/logo.png b/doc/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..35013b8f7d628e15786ec3300b23692fabef29ee GIT binary patch literal 2069 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 QSDZzMYYQZ*%9?6YtH zhhMfYQ?Qur<4;5msqqF4B^geM0L%O^6BO#(6xeir=}hDqymeW|7E(tiu?OT#Pir+O z&AtP9?LoQ7jy(>B#iayy@bDceU63}sUS*8HF)70PU*IO7E$4x3QvgQ3i$nNV2l_S{ zAd+XMsu9T#&onAfadvGH#=|Tj3ipaVNz61)lHUCO`8aMlK|IUWCDO`c@iEFdx(5a84};#O*}|%w|mXFK(S^B$ui% zWB&Q&8NF<_tVg%Rl+r&c;Q0<7(z|c68k5QiFeXW~?cX!F<8zBOkTxDKULuNM3s0=` z=_j6I@veIy4AADhcVLpNi23}UoI98*EhU0KtFHC~mKz7kNaA#?6_VG2U}lE`(@bt+-$QA&*u<(399r-RZS{DV1VJ&!7vUw=`#IQ?l>XU8k9Yg z9%H_)?^3D%HI)O&oK65BpWyrb|KfX%@Vh9h(Ly+2PRikT+21Rp-Qa@gLUm| z-WB@;_Pd_7Yrd!ii%?^aMzVWsoB=R&{XvY-*OW!f#eLPBK zPeBIdWc@aW@nHF`lxM-bv)aZ8gjs^AJ*mVuyBFr+HsKGJ-(WVlF~2@iUapn0wmrO< z64;s#acenmHJWH)uWnt~S(6NE-xGn=hx(pAg@w6Z+YkCM_y+GXvA5!G(f?e1$2e2R zd%h_`!}a4j>46rOFHjar$!=3tbPc1e#ks_7y8ATc5fOy;NZ0i^hqosh%2`J4L57xh0KS$hvc>w26JM$)+=y z{yjA+SzwZb{|#g94HWhfl}4&17LP0L+}O6?zrh*b5m~EW@a_Jrb~_X2HPZ?1eD(pX z2$8Pv-#hfsiM;@{dVNBDl^N7TaYrA*HwOi7TVEk1JAs5`My)FDrSAQ4wyCP-Ozu`W9mv@D~Zef34=b5%N~ zH?x1o`7BdUgF8G(U7Mr)Jclhyy`V5jeiwS;T74%|`!2BM2FC5kB@0Jx!3%x!K>NsmubHYVAug5L;8MV3`#sXP2wz2ceB jS0`iupWs879g1pz6!P*e_JXX~K)_?5ds(Mki$MM#8 -## How to create Parsers for new sites -For details on how to extend, see the following -* https://dteviot.github.io/Projects/webToEpub_FAQ.html#write-parser -* https://dteviot.github.io/Projects/webToEpub_FAQ.html -* http://www.codeproject.com/Articles/1060680/Web-to-EPUB-Extension-for-Chrome. + + + + + +[![Contributors][contributors-shield]][contributors-url] +[![Forks][forks-shield]][forks-url] +[![Stargazers][stars-shield]][stars-url] +[![Issues][issues-shield]][issues-url] +[![GPLv3 License][license-shield]][license-url] + + +
        +
        + + Logo + + +

        WebToEpub

        + +

        + Extension that converts Web Novels (and other web pages) into an EPUB for offline reading. +
        + Explore the wiki » +
        +
        + Add Site Request + · + Bug Report + · + Feature Request +

        +
        + + +
        + Table of Contents +
          +
        1. + About The Project + +
        2. +
        3. + Installation + +
        4. + Usage + +
        5. +
        6. + Contributing + +
        7. +
        8. License
        9. +
        10. Contact
        11. +
        12. Notes
        13. +
        +
        + + + +## About The Project + +![WebToEpub Screen Shot][product-screenshot] -## How to install -### from Chrome Web Store -* Start Chrome -* Go to https://chrome.google.com/webstore/detail/webtoepub/akiljllkbielkidmammnifcnibaigelm -* Click on the "Add to Chrome" button. +© 2015 David Teviotdale -### with Firefox -* Start Firefox -* Go to https://addons.mozilla.org/en-US/firefox/addon/webtoepub-for-baka-tsuki -* Click on "Download anyway" +WebToEpub is a browser extension for Firefox and Chrome that converts web novels and other web pages into EPUB format. It supports a wide range of websites, including: -### on Android -* Caution I have not (and do not test) on Android. I've been told the following work, but I can't guarantee them. -* Get yourself `Kiwi browser`, `Yandex browser`, or `Firefox` -* Install from `Chrome web store` for Kiwi and Yandex, of from `Mozilla addons` for Firefox. +- Baka-Tsuki.org +- ArchiveOfOurOwn.org +- FanFiction.net +- Wuxiaworld.com +- Royalroad.com and many more... -## How to install from Source (for people who are not developers) +

        (back to top)

        + +### Supported Sites + +
        + Full list of Supported Sites (296) +
          +
        • 230Book
        • +
        • 4ksw
        • +
        • 69shu
        • +
        • 888novel
        • +
        • 88xiaoshuo
        • +
        • ActiveTranslations
        • +
        • Adultfanfiction
        • +
        • Aerialrain
        • +
        • Akknovel
        • +
        • Alphapolis
        • +
        • Amoryaoi
        • +
        • AnythingNovel
        • +
        • ArchiveOfOurOwn
        • +
        • Asianfanfics
        • +
        • AsianHobbyist
        • +
        • Asianovel
        • +
        • Asstr
        • +
        • BabelChain
        • +
        • BakaTsuki
        • +
        • BakaTsukiSeriesPage
        • +
        • Betwixtedbutterfly
        • +
        • Blogspot
        • +
        • Bnatranslations
        • +
        • Book18
        • +
        • Bookswithqianya
        • +
        • Booktoki152
        • +
        • Botitranslation
        • +
        • BoxnovelOrg
        • +
        • Boylove
        • +
        • Bqg225
        • +
        • Cangji
        • +
        • CClawTranslations
        • +
        • Chaleuria
        • +
        • Chichipeph
        • +
        • Chickengege
        • +
        • ChineseFantasyNovels
        • +
        • Chrysanthemumgarden
        • +
        • Chyoa
        • +
        • Comrademao
        • +
        • Coronatranslation
        • +
        • CreativeNovels
        • +
        • Crimsontranslations
        • +
        • Czbooks
        • +
        • DarkNovels
        • +
        • DeviantArt
        • +
        • Dummynovels
        • +
        • Edanglarstranslations
        • +
        • EightMuses
        • +
        • Engnovel
        • +
        • Erofus
        • +
        • Exiledrebelsscanlations
        • +
        • FanFiction
        • +
        • FastNovel
        • +
        • Ffxs8
        • +
        • Fictionhunt
        • +
        • FictionMania
        • +
        • Ficwad
        • +
        • Fimfiction
        • +
        • FlyingLines
        • +
        • Foxaholic
        • +
        • Foxteller
        • +
        • Freelightnovel
        • +
        • FreeWebNovel
        • +
        • Fullnovel
        • +
        • GamefaqsGamespot
        • +
        • GenesiStudio
        • +
        • Graverobbertl
        • +
        • GravityNovels
        • +
        • GravityTales
        • +
        • Gunnerkrigg
        • +
        • GutenbergDE
        • +
        • Gzbp
        • +
        • Helheimscans
        • +
        • Hellping
        • +
        • HentaiFoundry
        • +
        • Hiscension
        • +
        • Hostednovel
        • +
        • Hui3r
        • +
        • Idleturtletranslations
        • +
        • Idnovelmyid
        • +
        • Imgur
        • +
        • Indomtl
        • +
        • Indowebnovel
        • +
        • Inkitt
        • +
        • Inoveltranslation
        • +
        • IsekaiScan
        • +
        • Isotls
        • +
        • JadeRabbit
        • +
        • Japtem
        • +
        • Jjwxc
        • +
        • Jonaxxstories
        • +
        • Jpmtl
        • +
        • Kakao
        • +
        • Kakuyomu
        • +
        • Kaystls
        • +
        • Kemonoparty
        • +
        • Kobatochan
        • +
        • Krytykal
        • +
        • Liberspark
        • +
        • Libri7
        • +
        • LightNovelBastion
        • +
        • Lightnovelbox
        • +
        • Lightnovelfr
        • +
        • Lightnovelreader
        • +
        • Lightnovelread
        • +
        • Lightnovelsme
        • +
        • LightNovelsTranslations
        • +
        • LightNovelWorld
        • +
        • Literotica
        • +
        • Lnmtl
        • +
        • MachineTranslation
        • +
        • Madara
        • +
        • Madnovel
        • +
        • MagicWizards
        • +
        • Mandarinducktales
        • +
        • Mangadex
        • +
        • MangaHere
        • +
        • Mangakakalot
        • +
        • Mangallama
        • +
        • Manganelo
        • +
        • Manganov
        • +
        • MangaRead
        • +
        • Manhwaden
        • +
        • Manhwatop
        • +
        • Marx2mao
        • +
        • Mayanovel
        • +
        • McStories
        • +
        • Meionovel
        • +
        • Metanovel
        • +
        • Midnightrambles
        • +
        • MMyWwuxiaWorld
        • +
        • MoonQuill
        • +
        • Mtlarchive
        • +
        • MtledNovels
        • +
        • Mtlnation
        • +
        • Mtlnovel
        • +
        • Mtlreader
        • +
        • Mtnovel
        • +
        • MuggleNet
        • +
        • Myxls
        • +
        • Nanodesu
        • +
        • Nanomashinonline
        • +
        • Nepustation
        • +
        • Noblemtl
        • +
        • NovelAll
        • +
        • Novelcool
        • +
        • NovelCrush
        • +
        • NovelFever
        • +
        • Novelfull
        • +
        • Novelgo
        • +
        • Novelgreat
        • +
        • Novelhall
        • +
        • Novelhi
        • +
        • Novelhold
        • +
        • Novelmania
        • +
        • Novelmao
        • +
        • Novelmedium
        • +
        • NovelNaver
        • +
        • NovelOnlineFree
        • +
        • Novelonomicon
        • +
        • Novelpassion
        • +
        • Novelplex
        • +
        • Novelsect
        • +
        • Novelsemperor
        • +
        • Novelspl
        • +
        • NovelSpread
        • +
        • NovelsRock
        • +
        • Noveltoon
        • +
        • Noveltranslatedbyc
        • +
        • NovelUniverse
        • +
        • NovelUpdatesOnline
        • +
        • NovelUpdates
        • +
        • Novelversetranslations
        • +
        • Novicetranslations
        • +
        • Nrvnqsr
        • +
        • Ntruyen
        • +
        • NyahFanfiction
        • +
        • Nyantl
        • +
        • Octopii
        • +
        • Onlinenovelbook
        • +
        • Ontimestory
        • +
        • Ossantl
        • +
        • PandaNovel
        • +
        • Patreon
        • +
        • Pawread
        • +
        • Peachblossomcodex
        • +
        • Peachpitting
        • +
        • Peachpuff
        • +
        • Ptwxz
        • +
        • Puretl
        • +
        • Qidian
        • +
        • Qinxiaoshuo
        • +
        • Qqxs
        • +
        • Quanben5
        • +
        • Quanben
        • +
        • Quotev
        • +
        • Raeitranslations
        • +
        • RainOfSnow
        • +
        • Ranobes
        • +
        • ReadComicOnline
        • +
        • Readhive
        • +
        • ReadLightNovelCc
        • +
        • ReadLightNovel
        • +
        • Readnoveldaily
        • +
        • Readnovelfullorg
        • +
        • ReadNovelFull
        • +
        • Readwn
        • +
        • RebirthOnline.js
        • +
        • Reddit
        • +
        • ReLibrary
        • +
        • RoyalRoad
        • +
        • RtdMoe
        • +
        • Rtenzo
        • +
        • Rubymaybetranslations
        • +
        • Rulate
        • +
        • Scribblehub
        • +
        • Secondlifetranslations
        • +
        • Semprot
        • +
        • SexStories
        • +
        • Shanghaifantasy
        • +
        • Shikkakutranslations
        • +
        • Shinsori
        • +
        • Shintranslations
        • +
        • Shirokuns
        • +
        • Shmtranslations
        • +
        • Shubaowb
        • +
        • Shubaow
        • +
        • Shw5
        • +
        • SitesGoogle
        • +
        • Sjks88
        • +
        • Sjuukanshu
        • +
        • Skydemonorder
        • +
        • SnowyCodex
        • +
        • Sonako
        • +
        • Soverse
        • +
        • Spacebattles
        • +
        • Spiritfanfiction
        • +
        • Sspai
        • +
        • Starlightstream
        • +
        • Stocx
        • +
        • StorySeedling
        • +
        • Sweek
        • +
        • Syosetu
        • +
        • SystemTranslation
        • +
        • Taffygirl13
        • +
        • Tapas
        • +
        • Tapread
        • +
        • Teanovel
        • +
        • Teenfic
        • +
        • Template.js
        • +
        • Tigertranslations
        • +
        • Timotxt
        • +
        • Titannovel
        • +
        • Tomotranslations
        • +
        • TranslationChicken
        • +
        • Travistranslations
        • +
        • Truyenfull
        • +
        • Truyenyy
        • +
        • Trxs
        • +
        • Tumblr
        • +
        • Ultimaguil
        • +
        • UnlimitedNovelFailures
        • +
        • UntamedAlley
        • +
        • VipNovel
        • +
        • Volarenovels
        • +
        • Wanderinginn
        • +
        • Watashiwasugoidesu
        • +
        • Wattpad
        • +
        • WebNovelOnline
        • +
        • Wenku8
        • +
        • Wfxs
        • +
        • Wikipedia
        • +
        • Wix
        • +
        • WLPublishing
        • +
        • WnmtlOrg
        • +
        • Wnmtl
        • +
        • Woopread
        • +
        • Wordexcerpt
        • +
        • WordpressBase
        • +
        • WorldnovelOnline
        • +
        • Wtrlab
        • +
        • WuxiaBlog
        • +
        • Wuxiacity
        • +
        • WuxiaworldCo
        • +
        • Wuxiaworldeu
        • +
        • Wuxiaworld
        • +
        • WuxiaworldWorld
        • +
        • Xbiquge
        • +
        • Xiaoshuogui
        • +
        • Xiaxuenovels
        • +
        • Xklxsw
        • +
        • Yushubo
        • +
        • ZenithNovels
        • +
        • Zeonicrepublic
        • +
        • Zhenhunxiaoshuo
        • +
        • ZirusMusings
        • +
        +
        + +

        (back to top)

        + +### Built With + +- HTML +- CSS +- JS +- jszip +- @xmldom/xmldom +- copyfiles +- eslint +- http-server + +

        (back to top)

        + + + +## Installation ### Firefox + +#### From Firefox Add-ons + +Open Firefox and visit [WebToEpub on Firefox Add-ons][firefox-add-ons]. + +#### From Source (Firefox) + The easiest set of steps is using Firefox. + 1. Download prebuilt Firefox version of extension from https://github.com/dteviot/WebToEpub/releases/tag/developer-build. 2. Open Firefox and type "about:debugging#/runtime/this-firefox" into the URL bar. 3. Click "Load Temporary Add-on". 4. Click on the zip file you downloaded in step 1. -![Installing in Firefox screenshot](doc/FirefoxLoadFromSource.png?raw=true) + ![Installing in Firefox screenshot](doc/FirefoxLoadFromSource.png?raw=true) ### Chrome + +#### From Chrome Web Store + +Open Chrome (or any Chromium-based browser like Edge, Opera, etc.) and go to [WebToEpub on Chrome Web Store][chrome-web-store]. + +#### From Source (Chrome) + 1. Download prebuilt Chrome version of extension from https://github.com/dteviot/WebToEpub/releases/tag/developer-build. 2. Unpack zip file 3. Open Chrome and type "chrome://extensions" into the browser. 4. Make sure "Developer Mode" at the top of the page is checked. 5. Press the "Load unpacked extension.." button and browse to unpacked zip directory from step 2. -![wte-chrome-small](https://user-images.githubusercontent.com/20068737/136224439-57af48bd-21fb-463d-99db-74f44769327e.gif) + ![wte-chrome-small](https://user-images.githubusercontent.com/20068737/136224439-57af48bd-21fb-463d-99db-74f44769327e.gif) + +### From Source (Developers) + +1. Clone this repo. + + ```sh + git clone https://github.com/dteviot/WebToEpub.git + ``` + +2. Build extension. + + - Install [Node.js](https://nodejs.org/) (if not already installed) + - Run `npm install` to install dependencies + - Run `npm run lint` to build plugin and lint + - This will produce 3 files in the eslint directory. + - WebToEpub0.0.0.x.xpi (Firefox version of plug-in) + - WebToEpub0.0.0.x.zip (Chrome version of plug-in) + - packed.js + - Lint tests are OK if output ends with `Wrote Zip to disk; Done in XXXs.` -## How to install from Source (for developers) -1. Clone this repo -2. Build extension. See "To run Eslint (and build the plugin)" in "Other notes" below. 3. Install extension in browser of choice, using instructions above. -## License information -Licenced under GPLv3. +See [notes](#notes) for more information. + +### Android (untested) + +- Caution I have not (and do not test) on Android. I've been told the following work, but I can't guarantee them. +- Get yourself `Kiwi browser`, `Yandex browser`, or `Firefox`. +- Install from [Chrome web store][chrome-web-store] for Kiwi and Yandex, or from [Mozilla add-ons][firefox-add-ons] for Firefox. + +

        (back to top)

        + + + +## Usage + +### How to use with Baka-Tsuki: + +- Browse to a Baka-Tsuki web page that has the full text of a story. +- Click on the WebToEpub icon on top right of the window. +- Check story details are correct. +- Select image to use for cover. +- Click the "Pack EPUB" button. +- Wait for progress bar to finish (indicating the images being downloaded) and the generated EPUB to be placed in your downloads directory. + +### How to use with Archive of Our Own: + +- Browse to first chapter of story you want. +- Click on the WebToEpub icon on top right of the window. +- Check story details are correct. +- Click the "Pack EPUB" button. +- Wait for progress bar to finish (indicating the additional chapters are being downloaded) and the generated EPUB to be placed in your downloads directory. + +### How to use for site that there is no specific parser for: + +See: https://dteviot.github.io/Projects/webToEpub_DefaultParser.html + +### How to create Parsers for new sites + +For details on how to extend, see the following + +- https://dteviot.github.io/Projects/webToEpub_FAQ.html#write-parser +- https://dteviot.github.io/Projects/webToEpub_FAQ.html +- http://www.codeproject.com/Articles/1060680/Web-to-EPUB-Extension-for-Chrome. + +

        (back to top)

        + + + +## Contributing + +> [Note] Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. + +Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. + +If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". +Don't forget to give the project a star! Thanks again! + +1. Fork the Project +2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) +3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the Branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +### Top contributors: + + + contrib.rocks image + + +### Credits: + +
        + Credits: +
          +
        • Firefox port by Markus Vieth
        • +
        • Michael Fox (Belldandu)
        • +
        • typhoon71
        • +
        • toshiya44
        • +
        • dreamer2908
        • +
        • Parser for German Project Gutenberg by GallusMax
        • +
        • Hogesyx
        • +
        • Asif Mahmood
        • +
        • snnsnn
        • +
        • Sergii Pravdzivyi
        • +
        • Aurimas Niekis
        • +
        • Tom Goetz
        • +
        • Alen Toma (css styling)
        • +
        • JimmXinu
        • +
        • gamebeaker (additional metadata, Library)
        • +
        • Kondeeza
        • +
        • Mathnerd314
        • +
        • Sickan90
        • +
        • Miracutor
        • +
        • Kiradien
        • +
        • Synteresis
        • +
        • Lej77
        • +
        • nandakishore2009 (Parsers for madnovel.com, www.panda-novel.com)
        • +
        • courli79
        • +
        • Dimava
        • +
        • alethiophile
        • +
        • Yoanhg421
        • +
        • Leone Jacob Sunil (ImLJS)
        • +
        • xRahul
        • +
        • Oleksii Taranenko
        • +
        • Naheulf
        • +
        • perishableloc
        • +
        • praschke
        • +
        • ImmortalDreamer
        • +
        • ktrin
        • +
        • nozwock
        • +
        • Tyderion
        • +
        • Darthagnon
        • +
        • LucasFreitaslpf1
        • +
        +
        + +

        (back to top)

        + + + +## License + +Licensed under GPLv3. See [LICENSE][license-url] for more information. WebToEpub uses the following libraries: -* JSZip library v3.0.0: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. -* quint: http://qunitjs.com/, licensed under MIT license. - -## Other notes -### To run Eslint (and build the plugin) -* Install [Node.js](https://nodejs.org/) (if not already installed) -* Run `npm install` to install dependencies -* Run `npm run lint` to build plugin and lint -* This will produce 3 files in the eslint directory. - * WebToEpub0.0.0.x.xpi (Firefox version of plug-in.) - * WebToEpub0.0.0.x.zip (Chrome version of plug-in.) - * packed.js -* Lint tests are OK if output ends with `Wrote Zip to disk; Done in XXXs.` + +- JSZip library v3.0.0: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. +- quint: http://qunitjs.com/, licensed under MIT license. + +

        (back to top)

        + + + +## Contact + +David Teviotdale - [@dteviot](https://github.com/dteviot) + +Project Link: [https://github.com/dteviot/WebToEpub](https://github.com/dteviot/WebToEpub) + +

        (back to top)

        + + + +## Notes ### To run unit tests -* Install [Node.js](https://nodejs.org/) (if not already installed) -* Run `npm install` to install dependencies -* Run `npm test` -* Tests will be launched in your default browser. To open them in different browser, open the page URL in it. + +- Install [Node.js](https://nodejs.org/) (if not already installed) +- Run `npm install` to install dependencies +- Run `npm test` +- Tests will be launched in your default browser. To open them in different browser, open the page URL in it. > ### To run unit tests without Node.js -> * If you are not trying to run unit tests in `/unitTest/` folder, you do not need this -> * If you can use nodejs, see previous paragraph instead -> * If you can not install nodejs or http-server is not working when you run `npm test`, and you have no alternative ways to serve files (like [chrome Web Server app](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb) for example), you have to allow browser to run local html files to run tests. +> +> - If you are not trying to run unit tests in `/unitTest/` folder, you do not need this +> - If you can use nodejs, see previous paragraph instead +> - If you can not install nodejs or http-server is not working when you run `npm test`, and you have no alternative ways to serve files (like [chrome Web Server app](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb) for example), you have to allow browser to run local html files to run tests. +> > #### To run unit tests (without local server) under Chrome -> * Close all running copies of Chrome -> * Start Chrome with command line argument `--allow-file-access-from-files`. That is: -> * Open a command propmt -> * Browse to the directory holding Chrome -> * Type in command `chrome.exe --allow-file-access-from-files` . Press "Enter". -> * If you don't do this, some tests will fail with error messages containing the text **_Failed to execute 'send' on 'XMLHttpRequest': Failed to load_**. -> * Load `unitTest/Tests.html` -> * If you get **_Failed to read the 'localStorage' property from 'Window': Access is denied for this document_** errors -> * Type **_chrome://settings/content_** into Chrome's search bar -> * Uncheck **_Block third-party cookies and site data_** -> * Click **_Finished_** -> * Re-run unit tests -> * When finished with unit tests. -> * Restore original value of **_Block third-party cookies and site data_** (if you changed it). -> * close all running copies of Chrome -> +> +> - Close all running copies of Chrome +> - Start Chrome with command line argument `--allow-file-access-from-files`. That is: +> - Open a command propmt +> - Browse to the directory holding Chrome +> - Type in command `chrome.exe --allow-file-access-from-files` . Press "Enter". +> - If you don't do this, some tests will fail with error messages containing the text **_Failed to execute 'send' on 'XMLHttpRequest': Failed to load_**. +> - Load `unitTest/Tests.html` +> - If you get **_Failed to read the 'localStorage' property from 'Window': Access is denied for this document_** errors +> - Type **_chrome://settings/content_** into Chrome's search bar +> - Uncheck **_Block third-party cookies and site data_** +> - Click **_Finished_** +> - Re-run unit tests +> - When finished with unit tests. +> - Restore original value of **_Block third-party cookies and site data_** (if you changed it). +> - close all running copies of Chrome +> > #### To run unit tests (without local server) under Firefox -> * Start Firefox -> * Go to `about:config` -> * Find `security.fileuri.strict_origin_policy` parameter -> * Set it to false -> * Load `unitTest/Tests.html` -> * (Remember to reset `security.fileuri.strict_origin_policy` to true when done. +> +> - Start Firefox +> - Go to `about:config` +> - Find `security.fileuri.strict_origin_policy` parameter +> - Set it to false +> - Load `unitTest/Tests.html` +> - (Remember to reset `security.fileuri.strict_origin_policy` to true when done. + +

        (back to top)

        + + + + +[contributors-shield]: https://img.shields.io/github/contributors/dteviot/WebToEpub.svg?style=for-the-badge +[contributors-url]: https://github.com/dteviot/WebToEpub/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/dteviot/WebToEpub.svg?style=for-the-badge +[forks-url]: https://github.com/dteviot/WebToEpub/network/members +[stars-shield]: https://img.shields.io/github/stars/dteviot/WebToEpub.svg?style=for-the-badge +[stars-url]: https://github.com/dteviot/WebToEpub/stargazers +[issues-shield]: https://img.shields.io/github/issues/dteviot/WebToEpub.svg?style=for-the-badge +[issues-url]: https://github.com/dteviot/WebToEpub/issues + + + +[license-shield]: https://img.shields.io/badge/LICENSE-GPLv3-%23555555?style=for-the-badge&label=LICENSE&color=285959 +[license-url]: /LICENSE.md +[product-screenshot]: doc/product-screenshot.png + + + +[firefox-add-ons]: https://addons.mozilla.org/en-US/firefox/addon/webtoepub-for-baka-tsuki +[chrome-web-store]: https://chrome.google.com/webstore/detail/webtoepub/akiljllkbielkidmammnifcnibaigelm From 2606b74a4935b279e82a49103494694455e612c3 Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 09:23:12 -0700 Subject: [PATCH 07/10] Update readme.md --- readme.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index e866e74b..9fe4a720 100644 --- a/readme.md +++ b/readme.md @@ -547,7 +547,9 @@ For details on how to extend, see the following ## Contributing -> [Note] Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. +> [!NOTE] +> +> Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. @@ -560,16 +562,16 @@ Don't forget to give the project a star! Thanks again! 4. Push to the Branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request -### Top contributors: +### Top contributors contrib.rocks image -### Credits: +### Credits
        - Credits: + Contributors (39)
        • Firefox port by Markus Vieth
        • Michael Fox (Belldandu)
        • From 183b5c4783ee2e8ac189c3b895029c06f30c64e1 Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 11:09:42 -0700 Subject: [PATCH 08/10] Update readme.md --- readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 9fe4a720..5401c057 100644 --- a/readme.md +++ b/readme.md @@ -10,13 +10,15 @@ *** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use. *** https://www.markdownguide.org/basic-syntax/#reference-style-links --> - +
          + [![Contributors][contributors-shield]][contributors-url] [![Forks][forks-shield]][forks-url] [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url] [![GPLv3 License][license-shield]][license-url] +

          From f7b14c952417aa2000474226b1519d6bcfa29c4d Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Fri, 27 Sep 2024 19:44:00 +0100 Subject: [PATCH 09/10] added new contributor --- package.json | 3 ++- readme.md | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 99883241..f46b08df 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,8 @@ { "name": "Tyderion"}, { "name": "nozwock"}, { "name": "Darthagnon"}, - { "name": "LucasFreitaslpf1"} + { "name": "LucasFreitaslpf1"}, + { "name": "Jemeni11"} ], "license": "GPL-3.0-only", "bugs": { diff --git a/readme.md b/readme.md index 5401c057..b81a40f8 100644 --- a/readme.md +++ b/readme.md @@ -550,7 +550,7 @@ For details on how to extend, see the following ## Contributing > [!NOTE] -> +> > Read [CONTRIBUTING.md](/CONTRIBUTING.md) first. Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. @@ -573,7 +573,7 @@ Don't forget to give the project a star! Thanks again! ### Credits
          - Contributors (39) + Contributors (40)
          • Firefox port by Markus Vieth
          • Michael Fox (Belldandu)
          • @@ -614,6 +614,7 @@ Don't forget to give the project a star! Thanks again!
          • Tyderion
          • Darthagnon
          • LucasFreitaslpf1
          • +
          • Jemeni11
          From c11473ff8d8cf9fbbbd1de07f62e16199326507e Mon Sep 17 00:00:00 2001 From: "Emmanuel C. Jemeni" Date: Sun, 29 Sep 2024 09:56:25 +0100 Subject: [PATCH 10/10] feat: Update README with expanded site support and project details - Greatly expand and update list of supported sites - Reorganize "Built With" section: - Add Node.js, remove HTML/CSS/JS - Separate libraries used in WebToEpub from build process - Update library versions (JSZip to v3.7.1) - Update links to point to GitHub wiki for parser creation and FAQ - Remove specific contributor count - Minor text adjustments and improvements throughout --- readme.md | 775 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 467 insertions(+), 308 deletions(-) diff --git a/readme.md b/readme.md index b81a40f8..d52c5e7a 100644 --- a/readme.md +++ b/readme.md @@ -50,7 +50,12 @@ About The Project
          • Supported Sites
          • -
          • Built With
          • +
          • + Built With +
          • @@ -128,304 +133,455 @@ WebToEpub is a browser extension for Firefox and Chrome that converts web novels ### Supported Sites
            - Full list of Supported Sites (296) + Last we checked, the following sites were known to work
              -
            • 230Book
            • -
            • 4ksw
            • -
            • 69shu
            • -
            • 888novel
            • -
            • 88xiaoshuo
            • -
            • ActiveTranslations
            • -
            • Adultfanfiction
            • -
            • Aerialrain
            • -
            • Akknovel
            • -
            • Alphapolis
            • -
            • Amoryaoi
            • -
            • AnythingNovel
            • -
            • ArchiveOfOurOwn
            • -
            • Asianfanfics
            • -
            • AsianHobbyist
            • -
            • Asianovel
            • -
            • Asstr
            • -
            • BabelChain
            • -
            • BakaTsuki
            • -
            • BakaTsukiSeriesPage
            • -
            • Betwixtedbutterfly
            • -
            • Blogspot
            • -
            • Bnatranslations
            • -
            • Book18
            • -
            • Bookswithqianya
            • -
            • Booktoki152
            • -
            • Botitranslation
            • -
            • BoxnovelOrg
            • -
            • Boylove
            • -
            • Bqg225
            • -
            • Cangji
            • -
            • CClawTranslations
            • -
            • Chaleuria
            • -
            • Chichipeph
            • -
            • Chickengege
            • -
            • ChineseFantasyNovels
            • -
            • Chrysanthemumgarden
            • -
            • Chyoa
            • -
            • Comrademao
            • -
            • Coronatranslation
            • -
            • CreativeNovels
            • -
            • Crimsontranslations
            • -
            • Czbooks
            • -
            • DarkNovels
            • -
            • DeviantArt
            • -
            • Dummynovels
            • -
            • Edanglarstranslations
            • -
            • EightMuses
            • -
            • Engnovel
            • -
            • Erofus
            • -
            • Exiledrebelsscanlations
            • -
            • FanFiction
            • -
            • FastNovel
            • -
            • Ffxs8
            • -
            • Fictionhunt
            • -
            • FictionMania
            • -
            • Ficwad
            • -
            • Fimfiction
            • -
            • FlyingLines
            • -
            • Foxaholic
            • -
            • Foxteller
            • -
            • Freelightnovel
            • -
            • FreeWebNovel
            • -
            • Fullnovel
            • -
            • GamefaqsGamespot
            • -
            • GenesiStudio
            • -
            • Graverobbertl
            • -
            • GravityNovels
            • -
            • GravityTales
            • -
            • Gunnerkrigg
            • -
            • GutenbergDE
            • -
            • Gzbp
            • -
            • Helheimscans
            • -
            • Hellping
            • -
            • HentaiFoundry
            • -
            • Hiscension
            • -
            • Hostednovel
            • -
            • Hui3r
            • -
            • Idleturtletranslations
            • -
            • Idnovelmyid
            • -
            • Imgur
            • -
            • Indomtl
            • -
            • Indowebnovel
            • -
            • Inkitt
            • -
            • Inoveltranslation
            • -
            • IsekaiScan
            • -
            • Isotls
            • -
            • JadeRabbit
            • -
            • Japtem
            • -
            • Jjwxc
            • -
            • Jonaxxstories
            • -
            • Jpmtl
            • -
            • Kakao
            • -
            • Kakuyomu
            • -
            • Kaystls
            • -
            • Kemonoparty
            • -
            • Kobatochan
            • -
            • Krytykal
            • -
            • Liberspark
            • -
            • Libri7
            • -
            • LightNovelBastion
            • -
            • Lightnovelbox
            • -
            • Lightnovelfr
            • -
            • Lightnovelreader
            • -
            • Lightnovelread
            • -
            • Lightnovelsme
            • -
            • LightNovelsTranslations
            • -
            • LightNovelWorld
            • -
            • Literotica
            • -
            • Lnmtl
            • -
            • MachineTranslation
            • -
            • Madara
            • -
            • Madnovel
            • -
            • MagicWizards
            • -
            • Mandarinducktales
            • -
            • Mangadex
            • -
            • MangaHere
            • -
            • Mangakakalot
            • -
            • Mangallama
            • -
            • Manganelo
            • -
            • Manganov
            • -
            • MangaRead
            • -
            • Manhwaden
            • -
            • Manhwatop
            • -
            • Marx2mao
            • -
            • Mayanovel
            • -
            • McStories
            • -
            • Meionovel
            • -
            • Metanovel
            • -
            • Midnightrambles
            • -
            • MMyWwuxiaWorld
            • -
            • MoonQuill
            • -
            • Mtlarchive
            • -
            • MtledNovels
            • -
            • Mtlnation
            • -
            • Mtlnovel
            • -
            • Mtlreader
            • -
            • Mtnovel
            • -
            • MuggleNet
            • -
            • Myxls
            • -
            • Nanodesu
            • -
            • Nanomashinonline
            • -
            • Nepustation
            • -
            • Noblemtl
            • -
            • NovelAll
            • -
            • Novelcool
            • -
            • NovelCrush
            • -
            • NovelFever
            • -
            • Novelfull
            • -
            • Novelgo
            • -
            • Novelgreat
            • -
            • Novelhall
            • -
            • Novelhi
            • -
            • Novelhold
            • -
            • Novelmania
            • -
            • Novelmao
            • -
            • Novelmedium
            • -
            • NovelNaver
            • -
            • NovelOnlineFree
            • -
            • Novelonomicon
            • -
            • Novelpassion
            • -
            • Novelplex
            • -
            • Novelsect
            • -
            • Novelsemperor
            • -
            • Novelspl
            • -
            • NovelSpread
            • -
            • NovelsRock
            • -
            • Noveltoon
            • -
            • Noveltranslatedbyc
            • -
            • NovelUniverse
            • -
            • NovelUpdatesOnline
            • -
            • NovelUpdates
            • -
            • Novelversetranslations
            • -
            • Novicetranslations
            • -
            • Nrvnqsr
            • -
            • Ntruyen
            • -
            • NyahFanfiction
            • -
            • Nyantl
            • -
            • Octopii
            • -
            • Onlinenovelbook
            • -
            • Ontimestory
            • -
            • Ossantl
            • -
            • PandaNovel
            • -
            • Patreon
            • -
            • Pawread
            • -
            • Peachblossomcodex
            • -
            • Peachpitting
            • -
            • Peachpuff
            • -
            • Ptwxz
            • -
            • Puretl
            • -
            • Qidian
            • -
            • Qinxiaoshuo
            • -
            • Qqxs
            • -
            • Quanben5
            • -
            • Quanben
            • -
            • Quotev
            • -
            • Raeitranslations
            • -
            • RainOfSnow
            • -
            • Ranobes
            • -
            • ReadComicOnline
            • -
            • Readhive
            • -
            • ReadLightNovelCc
            • -
            • ReadLightNovel
            • -
            • Readnoveldaily
            • -
            • Readnovelfullorg
            • -
            • ReadNovelFull
            • -
            • Readwn
            • -
            • RebirthOnline.js
            • -
            • Reddit
            • -
            • ReLibrary
            • -
            • RoyalRoad
            • -
            • RtdMoe
            • -
            • Rtenzo
            • -
            • Rubymaybetranslations
            • -
            • Rulate
            • -
            • Scribblehub
            • -
            • Secondlifetranslations
            • -
            • Semprot
            • -
            • SexStories
            • -
            • Shanghaifantasy
            • -
            • Shikkakutranslations
            • -
            • Shinsori
            • -
            • Shintranslations
            • -
            • Shirokuns
            • -
            • Shmtranslations
            • -
            • Shubaowb
            • -
            • Shubaow
            • -
            • Shw5
            • -
            • SitesGoogle
            • -
            • Sjks88
            • -
            • Sjuukanshu
            • -
            • Skydemonorder
            • -
            • SnowyCodex
            • -
            • Sonako
            • -
            • Soverse
            • -
            • Spacebattles
            • -
            • Spiritfanfiction
            • -
            • Sspai
            • -
            • Starlightstream
            • -
            • Stocx
            • -
            • StorySeedling
            • -
            • Sweek
            • -
            • Syosetu
            • -
            • SystemTranslation
            • -
            • Taffygirl13
            • -
            • Tapas
            • -
            • Tapread
            • -
            • Teanovel
            • -
            • Teenfic
            • -
            • Template.js
            • -
            • Tigertranslations
            • -
            • Timotxt
            • -
            • Titannovel
            • -
            • Tomotranslations
            • -
            • TranslationChicken
            • -
            • Travistranslations
            • -
            • Truyenfull
            • -
            • Truyenyy
            • -
            • Trxs
            • -
            • Tumblr
            • -
            • Ultimaguil
            • -
            • UnlimitedNovelFailures
            • -
            • UntamedAlley
            • -
            • VipNovel
            • -
            • Volarenovels
            • -
            • Wanderinginn
            • -
            • Watashiwasugoidesu
            • -
            • Wattpad
            • -
            • WebNovelOnline
            • -
            • Wenku8
            • -
            • Wfxs
            • -
            • Wikipedia
            • -
            • Wix
            • -
            • WLPublishing
            • -
            • WnmtlOrg
            • -
            • Wnmtl
            • -
            • Woopread
            • -
            • Wordexcerpt
            • -
            • WordpressBase
            • -
            • WorldnovelOnline
            • -
            • Wtrlab
            • -
            • WuxiaBlog
            • -
            • Wuxiacity
            • -
            • WuxiaworldCo
            • -
            • Wuxiaworldeu
            • -
            • Wuxiaworld
            • -
            • WuxiaworldWorld
            • -
            • Xbiquge
            • -
            • Xiaoshuogui
            • -
            • Xiaxuenovels
            • -
            • Xklxsw
            • -
            • Yushubo
            • -
            • ZenithNovels
            • -
            • Zeonicrepublic
            • -
            • Zhenhunxiaoshuo
            • -
            • ZirusMusings
            • +
            • 230book.net
            • +
            • 38xs.com
            • +
            • 4ksw.com
            • +
            • 888novel.com
            • +
            • 88xiaoshuo.net
            • +
            • 8muses.com
            • +
            • a-t.nu
            • +
            • aerialrain.com
            • +
            • akknovel.com
            • +
            • all-novelfull.net
            • +
            • allnovel.org
            • +
            • allnovelbin.net
            • +
            • allnovelbook.com
            • +
            • allnovelfull.app
            • +
            • allnovelfull.com
            • +
            • allnovelfull.net
            • +
            • allnovelfull.org
            • +
            • allnovelnext.com
            • +
            • alphapolis.co.jp
            • +
            • alternatehistory.com
            • +
            • amor-yaoi.com
            • +
            • anythingnovel.com
            • +
            • arcanetranslations.com
            • +
            • archiveofourown.org
            • +
            • asianfanfics.com
            • +
            • asianhobbyist.com
            • +
            • asianovel.net
            • +
            • asstr.org
            • +
            • babelnovel.com
            • +
            • baka-tsuki.org
            • +
            • bakapervert.wordpress.com
            • +
            • bednovel.com
            • +
            • bestlightnovel.com
            • +
            • betwixtedbutterfly.com
            • +
            • bnatranslations.com
            • +
            • book18.org
            • +
            • bookalb.com
            • +
            • bookswithqianya.com
            • +
            • botitranslation.com
            • +
            • boxnovel.net
            • +
            • boxnovel.org
            • +
            • boxnovelfull.com
            • +
            • boylove.cc
            • +
            • bqka.cc
            • +
            • cangji.net
            • +
            • cclawtranslations.home.blog
            • +
            • chaleuria.com
            • +
            • chichipeph.com
            • +
            • chickengege.org
            • +
            • chinesewuxia.world
            • +
            • chrysanthemumgarden.com
            • +
            • chyoa.com
            • +
            • ckandawrites.online
            • +
            • comics.8muses.com
            • +
            • comrademao.com
            • +
            • coronatranslation.com
            • +
            • creativenovels.com
            • +
            • crimsonmagic.me
            • +
            • crimsontranslations.com
            • +
            • cyborg-tl.com
            • +
            • czbooks.net
            • +
            • daotranslate.com
            • +
            • daotranslate.us
            • +
            • dark-novels.ru
            • +
            • deviantart.com
            • +
            • dummynovels.com
            • +
            • edanglarstranslations.com
            • +
            • engnovel.com
            • +
            • erofus.com
            • +
            • exiledrebelsscanlations.com
            • +
            • faloomtl.com
            • +
            • fanfiction.com.br
            • +
            • fanfiction.mugglenet.com
            • +
            • fanfiction.net
            • +
            • fanmtl.com
            • +
            • fannovel.com
            • +
            • fannovels.com
            • +
            • fansmtl.com
            • +
            • fastnovel.net
            • +
            • ffxs8.com
            • +
            • fictionhunt.com
            • +
            • fictionmania.tv
            • +
            • fictionpress.com
            • +
            • fictionzone.net
            • +
            • ficwad.com
            • +
            • fimfiction.net
            • +
            • finestories.com
            • +
            • flying-lines.com
            • +
            • forum.questionablequesting.com
            • +
            • forums.nrvnqsr.com
            • +
            • forums.spacebattles.com
            • +
            • forums.sufficientvelocity.com
            • +
            • foxteller.com
            • +
            • freelightnovel.net
            • +
            • freenovelsread.com
            • +
            • freewebnovel.com
            • +
            • freewn.com
            • +
            • frostfire10.wordpress.com
            • +
            • fullnovel.co
            • +
            • gamefaqs.gamespot.com
            • +
            • genesistls.com
            • +
            • genesistudio.com
            • +
            • goblinsguide.com
            • +
            • graverobbertl.site
            • +
            • gravitynovels.com
            • +
            • gravitytales.com
            • +
            • gunnerkrigg.com
            • +
            • gutenberg.spiegel.de
            • +
            • helheimscans.com
            • +
            • hellping.org
            • +
            • hentai-foundry.com
            • +
            • hiscension.com
            • +
            • hostednovel.com
            • +
            • hoxionia.com
            • +
            • hui3r.wordpress.com
            • +
            • idleturtle-translations.com
            • +
            • idnovel.my.id
            • +
            • imgur.com
            • +
            • indomtl.com
            • +
            • indowebnovel.id
            • +
            • inkitt.com
            • +
            • innnovel.com
            • +
            • inoveltranslation.com
            • +
            • isekaicyborg.wordpress.com
            • +
            • isekaiscan.com
            • +
            • isotls.com
            • +
            • jade-rabbit.net
            • +
            • japtem.com
            • +
            • jjwxc.net
            • +
            • jobnib.com
            • +
            • jonaxxstories.com
            • +
            • jpmtl.com
            • +
            • kakuyomu.jp
            • +
            • kaystls.site
            • +
            • kemono.su
            • +
            • knoxt.space
            • +
            • kobatochan.com
            • +
            • krytykal.org
            • +
            • lazygirltranslations.com
            • +
            • liberspark.com
            • +
            • libread.com
            • +
            • libri7.com
            • +
            • lightnovelbastion.com
            • +
            • lightnovelbox.com
            • +
            • lightnovelcave.com
            • +
            • lightnovelfr.com
            • +
            • lightnovelpub.com
            • +
            • lightnovelpub.fan
            • +
            • lightnovelread.com
            • +
            • lightnovelreader.org
            • +
            • lightnovels.live
            • +
            • lightnovels.me
            • +
            • lightnovelstranslations.com
            • +
            • lightnovelworld.co
            • +
            • lightnovelworld.com
            • +
            • lightsnovel.com
            • +
            • listnovel.com
            • +
            • literotica.com
            • +
            • lnmtl.com
            • +
            • lnreader.org
            • +
            • m.88xiaoshuo.net
            • +
            • m.bqg225.com
            • +
            • m.chinesefantasynovels.com
            • +
            • m.freelightnovel.net
            • +
            • m.gzbpi.com
            • +
            • m.metanovel.org
            • +
            • m.mywuxiaworld.com
            • +
            • m.novelspread.com
            • +
            • m.qqxs.vip
            • +
            • m.tapas.io
            • +
            • m.wuxiaworld.co
            • +
            • m.xklxsw.net
            • +
            • machine-translation.org
            • +
            • madnovel.com
            • +
            • magic.wizards.com
            • +
            • mandarinducktales.com
            • +
            • mangabob.com
            • +
            • mangadex.org
            • +
            • mangahere.cc
            • +
            • mangakakalot.com
            • +
            • mangallama.com
            • +
            • manganelo.com
            • +
            • manganov.com
            • +
            • mangaread.co
            • +
            • mangasushi.net
            • +
            • manhwaden.com
            • +
            • manhwatop.com
            • +
            • marx2mao.com
            • +
            • mayanovel.com
            • +
            • mcstories.com
            • +
            • meionovel.id
            • +
            • midnightrambles.in
            • +
            • moonbunnycafe.com
            • +
            • moonlightnovel.com
            • +
            • moonquill.com
            • +
            • morenovel.net
            • +
            • mtlarchive.com
            • +
            • mtled-novels.com
            • +
            • mtlnation.com
            • +
            • mtlnovel.com
            • +
            • mtlreader.com
            • +
            • mtnovel.net
            • +
            • myxls.net
            • +
            • nanomashin.online
            • +
            • ncode.syosetu.com
            • +
            • nightcomic.com
            • +
            • noblemtl.com
            • +
            • novel-bin.com
            • +
            • novel-bin.net
            • +
            • novel-bin.org
            • +
            • novel-next.com
            • +
            • novel.babelchain.org
            • +
            • novel.naver.com
            • +
            • novel18.syosetu.com
            • +
            • novel35.com
            • +
            • novelactive.org
            • +
            • novelall.com
            • +
            • novelbin.com
            • +
            • novelbin.me
            • +
            • novelbin.net
            • +
            • novelbuddy.com
            • +
            • novelbuddy.io
            • +
            • novelcool.com
            • +
            • novelcranel.org
            • +
            • novelcrush.com
            • +
            • novelebook.net
            • +
            • novelfever.com
            • +
            • novelfire.docsachhay.net
            • +
            • novelfull.com
            • +
            • novelfull.net
            • +
            • novelfullbook.com
            • +
            • novelgate.net
            • +
            • novelgo.id
            • +
            • novelgreat.net
            • +
            • novelhall.com
            • +
            • novelhi.com
            • +
            • novelhold.com
            • +
            • novelhulk.net
            • +
            • novellive.app
            • +
            • novellive.com
            • +
            • novellive.net
            • +
            • novelmania.com.br
            • +
            • novelmao.com
            • +
            • novelmax.net
            • +
            • novelmedium.com
            • +
            • novelmt.com
            • +
            • novelmtl.com
            • +
            • novelnext.com
            • +
            • novelnext.dramanovels.io
            • +
            • novelnext.net
            • +
            • novelnextz.com
            • +
            • novelonlinefree.com
            • +
            • novelonlinefree.info
            • +
            • novelonlinefull.com
            • +
            • novelonomicon.com
            • +
            • novelpassion.com
            • +
            • novelplex.org
            • +
            • novelpub.com
            • +
            • novels.pl
            • +
            • novelsect.com
            • +
            • novelsemperor.com
            • +
            • novelsemperor.net
            • +
            • novelsknight.com
            • +
            • novelsparadise.net
            • +
            • novelspread.com
            • +
            • novelsrock.com
            • +
            • noveltoon.mobi
            • +
            • noveltop1.org
            • +
            • noveltranslatedbyc.blogspot.com
            • +
            • noveltrench.com
            • +
            • noveltrust.net
            • +
            • noveluniverse.com
            • +
            • novelupdates.cc
            • +
            • novelupdates.online
            • +
            • novelusb.com
            • +
            • novelusb.net
            • +
            • novelversetranslations.com
            • +
            • novelxo.net
            • +
            • novicetranslations.com
            • +
            • ntruyen.vn
            • +
            • nyantl.wordpress.com
            • +
            • octopii.co
            • +
            • onlinenovelbook.com
            • +
            • ontimestory.eu
            • +
            • ossantl.com
            • +
            • panda-novel.com
            • +
            • pandamtl.com
            • +
            • pandapama.com
            • +
            • pandasnovel.com
            • +
            • patreon.com
            • +
            • pawread.com
            • +
            • peachblossomcodex.com
            • +
            • peachpitting.com
            • +
            • peachpuff.in
            • +
            • pery.info
            • +
            • piaotia.com
            • +
            • puretl.com
            • +
            • qinxiaoshuo.com
            • +
            • quanben.io
            • +
            • quanben5.io
            • +
            • questionablequesting.com
            • +
            • quotev.com
            • +
            • raeitranslations.com
            • +
            • rainingtl.org
            • +
            • rainofsnow.com
            • +
            • raisingthedead.ninja
            • +
            • ranobes.net
            • +
            • ranobes.top
            • +
            • re-library.com
            • +
            • readcomiconline.li
            • +
            • reader-hub.com
            • +
            • readfreebooksonline.org
            • +
            • readhive.org
            • +
            • readlightnovel.cc
            • +
            • readlightnovel.me
            • +
            • readlightnovel.meme
            • +
            • readlightnovel.org
            • +
            • readlightnovel.today
            • +
            • readlitenovel.com
            • +
            • readnoveldaily.com
            • +
            • readnovelfull.com
            • +
            • readnovelfull.me
            • +
            • readnovelfull.org
            • +
            • readwebnovel.xyz
            • +
            • readwn.com
            • +
            • readwn.org
            • +
            • rebirth.online
            • +
            • reddit.com
            • +
            • royalroad.com
            • +
            • royalroadl.com
            • +
            • rtd.moe
            • +
            • rtenzo.net
            • +
            • rubymaybetranslations.com
            • +
            • scifistories.com
            • +
            • scribblehub.com
            • +
            • secondlifetranslations.com
            • +
            • semprot.com
            • +
            • sexstories.com
            • +
            • shalvationtranslations.wordpress.com
            • +
            • shanghaifantasy.com
            • +
            • shikkakutranslations.org
            • +
            • shinsori.com
            • +
            • shintranslations.com
            • +
            • shirokuns.com
            • +
            • shmtranslations.com
            • +
            • shubaow.net
            • +
            • shubaowb.com
            • +
            • shw5.cc
            • +
            • sites.google.com
            • +
            • sj.uukanshu.com
            • +
            • sjks88.com
            • +
            • skydemonorder.com
            • +
            • skythewoodtl.com
            • +
            • snowycodex.com
            • +
            • sonako.fandom.com
            • +
            • sonako.wikia.com
            • +
            • sousetsuka.com
            • +
            • soverse.com
            • +
            • spiritfanfiction.com
            • +
            • sspai.com
            • +
            • starlightstream.net
            • +
            • sto.cx
            • +
            • storiesonline.net
            • +
            • storyseedling.com
            • +
            • sweek.com
            • +
            • systemtranslation.com
            • +
            • taffygirl13.wordpress.com
            • +
            • tamagotl.com
            • +
            • taonovel.com
            • +
            • tapas.io
            • +
            • tapread.com
            • +
            • teanovel.com
            • +
            • teanovel.net
            • +
            • teenfic.net
            • +
            • thenovelbin.org
            • +
            • tigertranslations.org
            • +
            • timotxt.com
            • +
            • titannovel.net
            • +
            • tl.rulate.ru
            • +
            • tomotranslations.com
            • +
            • topnovelfull.com
            • +
            • translationchicken.com
            • +
            • travistranslations.com
            • +
            • truyenfull.vn
            • +
            • truyenyy.com
            • +
            • trxs.me
            • +
            • ultimaguil.org
            • +
            • universalnovel.com
            • +
            • unlimitednovelfailures.mangamatters.com
            • +
            • untamedalley.com
            • +
            • veratales.com
            • +
            • vipnovel.com
            • +
            • volarenovels.com
            • +
            • wanderertl130.id
            • +
            • wanderinginn.com
            • +
            • watashiwasugoidesu.com
            • +
            • wattpad.com
            • +
            • webnovel.com
            • +
            • webnovel.live
            • +
            • webnovelonline.com
            • +
            • webnovelpub.com
            • +
            • webnovelpub.pro
            • +
            • wenku8.net
            • +
            • wfxs.tw
            • +
            • whitemoonlightnovels.com
            • +
            • wnmtl.com
            • +
            • wnmtl.org
            • +
            • woopread.com
            • +
            • wordexcerpt.com
            • +
            • worldnovel.online
            • +
            • wtr-lab.com
            • +
            • wuxia-world.online
            • +
            • wuxia.blog
            • +
            • wuxia.city
            • +
            • wuxia.click
            • +
            • wuxiabee.com
            • +
            • wuxiabee.net
            • +
            • wuxiabee.org
            • +
            • wuxiafox.com
            • +
            • wuxiago.com
            • +
            • wuxiahere.com
            • +
            • wuxiahub.com
            • +
            • wuxiamtl.com
            • +
            • wuxiaone.com
            • +
            • wuxiap.com
            • +
            • wuxiapub.com
            • +
            • wuxiar.com
            • +
            • wuxiaspot.com
            • +
            • wuxiau.com
            • +
            • wuxiaworld.co
            • +
            • wuxiaworld.com
            • +
            • wuxiaworld.eu
            • +
            • wuxiaworld.live
            • +
            • wuxiaworld.online
            • +
            • wuxiaworld.site
            • +
            • wuxiaworld.world
            • +
            • wuxiazone.com
            • +
            • xbiquge.so
            • +
            • xiaoshuogui.com
            • +
            • xiaxuenovels.xyz
            • +
            • yoraikun.wordpress.com
            • +
            • yushubo.net
            • +
            • zenithnovels.com
            • +
            • zeonic-republic.net
            • +
            • zhenhunxiaoshuo.com
            • +
            • zinnovel.net
            • +
            • zirusmusings.com
            @@ -433,14 +589,18 @@ WebToEpub is a browser extension for Firefox and Chrome that converts web novels ### Built With -- HTML -- CSS -- JS +- Node.js +- eslint + +##### Libraries used (in WebToEpub) + - jszip + +#### Libraries used by WebToEpub build process + - @xmldom/xmldom - copyfiles -- eslint -- http-server +- quint

            (back to top)

            @@ -533,14 +693,13 @@ See [notes](#notes) for more information. ### How to use for site that there is no specific parser for: -See: https://dteviot.github.io/Projects/webToEpub_DefaultParser.html +See: https://github.com/dteviot/WebToEpub/wiki/FAQ#how-to-convert-a-new-site-using-the-default-parser ### How to create Parsers for new sites For details on how to extend, see the following -- https://dteviot.github.io/Projects/webToEpub_FAQ.html#write-parser -- https://dteviot.github.io/Projects/webToEpub_FAQ.html +- https://github.com/dteviot/WebToEpub/wiki/FAQ#how-to-write-a-new-parser - http://www.codeproject.com/Articles/1060680/Web-to-EPUB-Extension-for-Chrome.

            (back to top)

            @@ -573,7 +732,7 @@ Don't forget to give the project a star! Thanks again! ### Credits
            - Contributors (40) + Contributors
            • Firefox port by Markus Vieth
            • Michael Fox (Belldandu)
            • @@ -628,7 +787,7 @@ Licensed under GPLv3. See [LICENSE][license-url] for more information. WebToEpub uses the following libraries: -- JSZip library v3.0.0: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. +- JSZip library v3.7.1: https://github.com/Stuk/jszip, which is dual licensed with the MIT license or GPLv3. - quint: http://qunitjs.com/, licensed under MIT license.

              (back to top)