Old: v1.11.4 - 2016-10-14 - fixed japscan.com
New: v1.11.5 - 2016-10-27 - update thanks to @nobody123: "Added cartoomad.com, ikanman.com, tw.ikanman.com, mangamint.com, reader.manga-download.org (foolslide), titaniascans.com (uses spinyback impl), komikstation.com, manga-ar.net (foolslide), and gmanga.me Fixed mangastream.com/read/* urls (credit: Snorlax)"
- @@ -1,7 +1,7 @@
- // ==UserScript==
- // @name Manga Loader
- // @namespace http://www.fuzetsu.com/MangaLoader
-// @version 1.11.4
- +// @version 1.11.5
- // @description Support for over 70 sites! Loads manga chapter into one page in a long strip format, supports switching chapters, minimal script with no dependencies, easy to implement new sites, loads quickly and works on mobile devices through bookmarklet
- // @copyright 2016+, fuzetsu
- // @noframes
- @@ -12,6 +12,7 @@
- // @match *://mangafox.me/manga/*/*/*
- // @match *://readms.com/r/*/*/*/*
- // @match *://mangastream.com/r/*/*/*/*
- +// @match *://mangastream.com/read/*/*/*/*
- // @match *://www.mangareader.net/*/*
- // @match *://*.mangahere.co/manga/*/*
- // @match *://www.mangapanda.com/*/*
- @@ -68,6 +69,12 @@
- // @match *://*.otakusmash.com/*/*
- // @match *://*.mangahome.com/manga/*/*
- // @match *://*.readcomics.tv/*/chapter*
- +// @match *://*.cartoomad.com/comic/*
- +// @match *://*.ikanman.com/comic/*/*
- +// @match *://*.mangamint.com/*
- +// @match *://*.titaniascans.com/reader/*/*
- +// @match *://*.komikstation.com/*/*/*
- +// @match *://*.gmanga.me/mangas/*/*/*
- // -- FOOLSLIDE START
- // @match *://manga.redhawkscans.com/reader/read/*
- // @match *://reader.s2smanga.com/read/*
- @@ -95,6 +102,8 @@
- // @match *://jaiminisbox.com/reader/read/*
- // @match *://reader.sensescans.com/read/*
- // @match *://*.gomanga.co/reader/read/*
- +// @match *://reader.manga-download.org/read/*/*
- +// @match *://*.manga-ar.net/manga/*/*/*
- // -- FOOLSLIDE END
- // ==/UserScript==
-
- @@ -387,7 +396,8 @@
- curpage: '#pages',
- nextchap: '#next_chapter',
- prevchap: '#back_chapter'
-}, { // pecintakomik
- +}, {
- + name: 'pecintakomik',
- match: "^https?://www\\.pecintakomik\\.com/manga/[^/]*/[^/]*",
- img: '.picture',
- next: '.pager a:nth-child(3)',
- @@ -660,7 +670,9 @@
- "jaiminisbox.com/reader/read/.+",
- "abandonedkittenscans.mokkori.fr/reader/read/.+",
- "reader.sensescans.com/read/.+",
- "gomanga.co/reader/read/.+"
- + "gomanga.co/reader/read/.+",
- + "reader\.manga-download\.org/read/.+",
- + "(www\.)?manga-ar\.net/manga/.+/.+/.+"
- ].join('|') + ")",
- img: function() {
- return W.pages[W.current_page].url;
- @@ -676,7 +688,7 @@
- },
- nextchap: function(prev) {
- var desired;
- var dropdown = getEls('ul.dropdown')[1] || getEls('ul.uk-nav')[1];
- + var dropdown = getEls('ul.dropdown')[1] || getEls('ul.uk-nav')[1] || getEls('ul.dropdown-menu')[3];
- if(!dropdown) return;
- getEls('a', dropdown).forEach(function(chap, idx, arr) {
- if(location.href.indexOf(chap.href) === 0) desired = arr[idx + (prev ? 1 : -1)];
- @@ -908,10 +920,10 @@
- curpage: '.viewerPage',
- numpages: '.viewerPage'
- }, {
- name: 'spinybackmanga',
- match: '^https?://spinybackmanga.com/\\?manga=[^&]+&chapter=.+',
- + name: 'spinybackmanga and titaniascans',
- + match: '^https?://(spinybackmanga.com/\\?manga=[^&]+&chapter=.+|www\.titaniascans\.com/reader/.+/.+)',
- img: '#thePicLink img',
- next: '#thePicLink img',
- + next: '#thePicLink',
- curpage: function() {
- return W.current;
- },
- @@ -940,7 +952,8 @@
- return this.nextchap(true);
- },
- pages: function(url, num, cb, ex) {
- cb(W.imageArray[num - 1], num);
- + var next = url.replace(/(?:(\/)2\/|[0-9]*)$/, '$1' + (num + 1));
- + cb(W.imageArray[num - 1], next);
- }
- }, {
- name: 'manga.ae',
- @@ -1110,6 +1123,131 @@
- curchap: 'select[name=chapter_select]',
- numchaps: 'select[name=chapter_select]',
- wait: 'select[name=page_select]'
- +}, {
- + name: 'cartoomad',
- + match: "https?://(www\\.)?cartoomad\.com/comic/[0-9]+\.html",
- + img: 'tr:nth-child(5) > td > a > img',
- + next: 'tr:nth-child(5) > td > a',
- + curpage: 'a.onpage',
- + numpages: function() {
- + return extractInfo('select[name=jump]') - 1;
- + }
- +}, {
- + name: 'ikanman',
- + match: "https?://(www|tw)\.ikanman\.com/comic/[0-9]+/[0-9]+\.html",
- + img: '#mangaFile',
- + next: function() {
- + return W._next;
- + },
- + curpage: '#page',
- + numpages: '#pageSelect',
- + nextchap: function(prev) {
- + var chap = prev ? W._prevchap : W._nextchap;
- + if (chap > 0) {
- + return location.href.replace(/(\/comic\/[0-9]+\/)[0-9]+\.html.*/, "$1" + chap + ".html");
- + } else {
- + return false;
- + }
- + },
- + prevchap: function() {
- + return this.nextchap(true);
- + },
- + wait: function() {
- + // fetch chapter IDs via ajax
- + if (!W._ajaxdone) {
- + W._ajaxdone = -1;
- + ajax({
- + method: 'GET',
- + async: false,
- + url: '/support/chapter.ashx?' + 'bid=' + W.cInfo.bid + '&cid=' + W.cInfo.cid,
- + responseType: 'json',
- + onload: function (e) {
- + var res = e.target.response;
- + console.log('res', res);
- + if (!res) return log('failed to load ikanman chapters, site has probably been updated, report on forums', 'error');
- + W._nextchap = res.n;
- + W._prevchap = res.p;
- + W._ajaxdone = 1;
- + }
- + });
- + }
- + if (W._ajaxdone == 1 && getEl('#mangaFile')) {
- + var ex = extractInfo.bind(this);
- + W._next = location.href.replace(/(_p[0-9]+)?\.html.*/, '_p' + (ex('curpage') + 1) + '.html');
- + W._base = ex('img').replace(/[^\/]+$/, '');
- + return true;
- + }
- + },
- + pages: function(url, num, cb, ex) {
- + var nexturl = url.replace(/(_p[0-9]+)?\.html.*/, '_p' + (num + 1) + '.html');
- + var imgurl = W._base + W.cInfo.files[num - 1];
- + cb(imgurl, nexturl);
- + }
- +}, {
- + name: 'mangamint',
- + match: 'https?://www\.mangamint\.com/[^/]+$',
- + img: '#images img',
- + next: '#images a',
- + curpage: '#manga_page',
- + numpages: '#manga_page',
- + nextchap: function(prev) {
- + return location.origin + '/node/' + extractInfo('#select_node', {type: 'value', val: prev ? -1 : 1});
- + },
- + prevchap: function() {
- + return this.nextchap(true);
- + },
- + curchap: '#select_node',
- + numchaps: '#select_node'
- +}, {
- + name: 'komikstation',
- + match: "^https?://www\.komikstation\.com/.+/.+/.+",
- + img: '#mainpage',
- + next: function() {
- + return W._base + '?page=' + (W.glbCurrentpage + 1);
- + },
- + numpages: '#index select',
- + curpage: '#index select',
- + pages: function(url, num, cb, ex) {
- + next = W._base + '?page=' + (num + 1);
- + cb(W.pages[num - 1], next);
- + },
- + wait: function() {
- + W._base = location.href.replace(/[?#].+$/, '');
- + return W.pages;
- + }
- +}, {
- + name: 'gmanga',
- + match: "^https?://gmanga.me/mangas/",
- + img: function() {
- + return W.pages[W.firstImg - 1];
- + },
- + next: function() {
- + return location.href + '#' + (W.firstImg + 1);
- + },
- + numpages: function() {
- + return W.totalImgs;
- + },
- + curpage: function() {
- + return W.firstImg;
- + },
- + nextchap: function(prev) {
- + var num = parseInt(extractInfo('#chapter', {type: 'value', val: prev ? 1 : -1}));
- + return num && location.href.replace(/(\/mangas\/[^\/]+\/)[0-9]+(\/[^\/]+)/, '$1' + num + '$2');
- + },
- + prevchap: function() {
- + return this.nextchap(true);
- + },
- + numchaps: '#chapter',
- + curchap: '#chapter',
- + invchap: true,
- + pages: function(url, num, cb, ex) {
- + var nexturl = location.href + '#' + (num + 1);
- + cb(W.pages[num - 1], nexturl);
- + },
- + wait: function() {
- + W.pages = W.release_pages && W.release_pages[1];
- + return W.pages;
- + }
- }];
- // END OF IMPL
-