From 9504fead9c5eba8bb8ebf4c9cd4bf5f3a0b77b28 Mon Sep 17 00:00:00 2001 From: Ftbom Date: Sat, 4 May 2024 14:11:32 +0000 Subject: [PATCH] fix bugs --- javascript/icon/zh.manhuadb.png | Bin 0 -> 9932 bytes javascript/manga/src/zh/77mh.js | 483 +++++----- javascript/manga/src/zh/manhuadb.js | 1310 +++++++++++++------------- javascript/manga/src/zh/manhuagui.js | 1125 +++++++++++----------- 4 files changed, 1465 insertions(+), 1453 deletions(-) create mode 100644 javascript/icon/zh.manhuadb.png diff --git a/javascript/icon/zh.manhuadb.png b/javascript/icon/zh.manhuadb.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4a76b72e2981ee76fb6650c0598839dfdfe9b1 GIT binary patch literal 9932 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 KMNUMnLSTZ32z8GD literal 0 HcmV?d00001 diff --git a/javascript/manga/src/zh/77mh.js b/javascript/manga/src/zh/77mh.js index 6edec437..47a8f139 100644 --- a/javascript/manga/src/zh/77mh.js +++ b/javascript/manga/src/zh/77mh.js @@ -1,258 +1,259 @@ const mangayomiSources = [{ - "name": "新新漫画", - "lang": "zh", - "baseUrl": "https://www.77mh.nl", - "apiUrl": "", - "iconUrl": "https://www.77mh.nl/favicon.ico", - "typeSource": "single", - "isManga": true, - "isNsfw": false, - "version": "0.0.1", - "apiUrl": "", - "dateFormat": "", - "dateFormatLocale": "", - "pkgName": "manga/src/zh/77mh.js" - }]; - - class DefaultExtension extends MProvider { - StringResolve1(p, a, c, k, e, d) { - e = function(c) { - return c.toString(36) - }; - if (!''.replace(/^/, String)) { - while (c--) { - d[c.toString(a)] = k[c] || c.toString(a) - } - k = [function(e) { - return d[e] - }]; - e = function() { - return '\\w+' - }; - c = 1 - }; + "name": "新新漫画", + "lang": "zh", + "baseUrl": "https://www.77mh.nl", + "apiUrl": "", + "iconUrl": "https://www.77mh.nl/favicon.ico", + "typeSource": "single", + "isManga": true, + "isNsfw": false, + "version": "0.0.1", + "apiUrl": "", + "dateFormat": "", + "dateFormatLocale": "", + "pkgName": "manga/src/zh/77mh.js" +}]; + +class DefaultExtension extends MProvider { + StringResolve1(p, a, c, k, e, d) { + e = function(c) { + return c.toString(36) + }; + if (!''.replace(/^/, String)) { while (c--) { - if (k[c]) { - p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) - } + d[c.toString(a)] = k[c] || c.toString(a) + } + k = [function(e) { + return d[e] + }]; + e = function() { + return '\\w+' + }; + c = 1 + }; + while (c--) { + if (k[c]) { + p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) } - return p } - - StringResolve2(p, a, c, k, e, d) { - e = function(c) { - return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) - }; - if (!''.replace(/^/, String)) { - while (c--) { - d[e(c)] = k[c] || e(c) - } - k = [function(e) { - return d[e] - }]; - e = function() { - return '\\w+' - }; - c = 1 - }; + return p + } + + StringResolve2(p, a, c, k, e, d) { + e = function(c) { + return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) + }; + if (!''.replace(/^/, String)) { while (c--) { - if (k[c]) { - p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) - } + d[e(c)] = k[c] || e(c) } - return p - } - - async getIndex1(url) { - const res = await new Client().get(url); - const doc = new Document(res.body); - const elements = doc.select("div.ar_list_co li"); - const mangas = []; - for (const element of elements) { - const title = element.selectFirst("span a").text; - const url = element.selectFirst("span a").attr("href"); - const cover = element.selectFirst("img").attr("src"); - mangas.push({ - name: title, - link: url, - imageUrl: cover - }); - } - return { - list: mangas, - hasNextPage: true + k = [function(e) { + return d[e] + }]; + e = function() { + return '\\w+' }; - - } - - async getIndex2(url) { - const res = await new Client().get(url); - const doc = new Document(res.body); - const elements = doc.select("div.ar_list_co dl"); - const mangas = []; - for (const element of elements) { - const title = element.selectFirst("h1 a").text.replace("", "").replace("", ""); - const url = element.selectFirst("h1 a").attr("href"); - const cover = element.selectFirst("img").attr("src"); - mangas.push({ - name: title, - link: url, - imageUrl: cover - }); + c = 1 + }; + while (c--) { + if (k[c]) { + p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) } - return { - list: mangas, - hasNextPage: true - }; - } - - async getPopular(page) { - return await this.getIndex1(this.source.baseUrl + "/new_coc.html"); - } - - async getLatestUpdates(page) { - return await this.getIndex1(`${this.source.baseUrl}/lianzai/index_${page - 1}.html`); - } - - async search(query, page, filters) { - var url; - if (query == "") { - url = `${this.source.baseUrl}${filters[0]["values"][filters[0]["state"]]["value"]}/index_${page-1}.html` - } else { - url = `${this.source.baseUrl.replace("www","so")}/k.php?k=${query}&p=${page}`; - } - return await this.getIndex2(url); - } - - async getDetail(url) { - const res = await new Client().get(this.source.baseUrl + url); - const doc = new Document(res.body); - const info = doc.selectFirst("div.ar_list_coc"); - const cover = info.selectFirst("img").attr("src"); - const title = info.selectFirst("h1").text; - const info_other = info.selectFirst("ul.ar_list_coc"); - const author = info_other.selectFirst("a").text; - const status_str = info_other.select("a")[1].text; - var status; - if (status_str == "已完结") { - status = 1; - } else { - status = 0; - } - const desc = info.selectFirst("i#det").text; - const elements = doc.select("ul.ar_rlos_bor li a"); - const chapters = []; - for (const element of elements) { - chapters.push({ - name: element.text, - url: element.attr("href") - }); - } - return { + return p + } + + async getIndex1(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const elements = doc.select("div.ar_list_co li"); + const mangas = []; + for (const element of elements) { + const title = element.selectFirst("span a").text; + const url = element.selectFirst("span a").attr("href"); + const cover = element.selectFirst("img").attr("src"); + mangas.push({ name: title, - imageUrl: cover, - description: desc, - author: author, - status: status, - episodes: chapters - }; + link: url, + imageUrl: cover + }); } + return { + list: mangas, + hasNextPage: true + }; + + } + + async getIndex2(url) { + const res = await new Client().get(url); + const doc = new Document(res.body); + const elements = doc.select("div.ar_list_co dl"); + const mangas = []; + for (const element of elements) { + const title = element.selectFirst("h1 a").text.replace("", "").replace("", ""); + const url = element.selectFirst("h1 a").attr("href"); + const cover = element.selectFirst("img").attr("src"); + mangas.push({ + name: title, + link: url, + imageUrl: cover + }); + } + return { + list: mangas, + hasNextPage: true + }; + + } - async getPageList(url) { - const preference = new SharedPreferences(); - const image_host = preference.get("imghost"); - const res = await new Client().get(this.source.baseUrl + url); - const strs = res.body.match(/return p}\('(.*?)'.split\('/)[1].split(','); - var result; - try { - result = this.StringResolve1(strs[0], strs[1], strs[2], strs[3].split('|'), 0, {}).replaceAll("'", ""); - } catch { - result = this.StringResolve2(strs[0], strs[1], strs[2], strs[3].split('|'), 0, {}).replaceAll("'", ""); - } - const url_part = result.match(/var img_s=(.*?);var preLink_b/)[1]; - const urls = result.match(/var msg=(.*?);var maxPage/)[1].replaceAll("\\", "").split('|'); - const pages = []; - for (const url of urls) { - pages.push(image_host + `/h${url_part}/` + url); - } - return pages; + async getPopular(page) { + return await this.getIndex1(this.source.baseUrl + "/new_coc.html"); + } + + async getLatestUpdates(page) { + return await this.getIndex1(`${this.source.baseUrl}/lianzai/index_${page - 1}.html`); + } + + async search(query, page, filters) { + var url; + if (query == "") { + url = `${this.source.baseUrl}${filters[0]["values"][filters[0]["state"]]["value"]}/index_${page-1}.html` + } else { + url = `${this.source.baseUrl.replace("www","so")}/k.php?k=${query}&p=${page}`; } - - getFilterList() { - return [{ - type: "category", - name: "分类", - type_name: "SelectFilter", - values: [{ - value: "/rexue", - name: "热血机战", - type_name: "SelectOption" - }, - { - value: "/kehuan", - name: "科幻未来", - type_name: "SelectOption" - }, - { - value: "/kongbu", - name: "恐怖惊悚", - type_name: "SelectOption" - }, - { - value: "/xuanyi", - name: "推理悬疑", - type_name: "SelectOption" - }, - { - value: "/gaoxiao", - name: "滑稽搞笑", - type_name: "SelectOption" - }, - { - value: "/love", - name: "恋爱生活", - type_name: "SelectOption" - }, - { - value: "/danmei", - name: "耽美人生", - type_name: "SelectOption" - }, - { - value: "/tiyu", - name: "体育竞技", - type_name: "SelectOption" - }, - { - value: "/chunqing", - name: "纯情少女", - type_name: "SelectOption" - }, - { - value: "/qihuan", - name: "魔法奇幻", - type_name: "SelectOption" - }, - { - value: "/wuxia", - name: "武侠经典", - type_name: "SelectOption" - } - ] - }]; + return await this.getIndex2(url); + } + + async getDetail(url) { + const res = await new Client().get(this.source.baseUrl + url); + const doc = new Document(res.body); + const info = doc.selectFirst("div.ar_list_coc"); + const cover = info.selectFirst("img").attr("src"); + const title = info.selectFirst("h1").text; + const info_other = info.selectFirst("ul.ar_list_coc"); + const author = info_other.selectFirst("a").text; + const status_str = info_other.select("a")[1].text; + var status; + if (status_str == "已完结") { + status = 1; + } else { + status = 0; } + const desc = info.selectFirst("i#det").text; + const elements = doc.select("ul.ar_rlos_bor li a"); + const chapters = []; + for (const element of elements) { + chapters.push({ + name: element.text, + url: element.attr("href") + }); + } + chapters.reverse(); + return { + name: title, + imageUrl: cover, + description: desc, + author: author, + status: status, + episodes: chapters + }; + } + + async getPageList(url) { + const preference = new SharedPreferences(); + const image_host = preference.get("imghost"); + const res = await new Client().get(this.source.baseUrl + url); + const strs = res.body.match(/return p}\('(.*?)'.split\('/)[1].split(','); + var result; + try { + result = this.StringResolve1(strs[0], strs[1], strs[2], strs[3].split('|'), 0, {}).replaceAll("'", ""); + } catch { + result = this.StringResolve2(strs[0], strs[1], strs[2], strs[3].split('|'), 0, {}).replaceAll("'", ""); + } + const url_part = result.match(/var img_s=(.*?);var preLink_b/)[1]; + const urls = result.match(/var msg=(.*?);var maxPage/)[1].replaceAll("\\", "").split('|'); + const pages = []; + for (const url of urls) { + pages.push(image_host + `/h${url_part}/` + url); + } + return pages; + } - getSourcePreferences() { - return [{ - "key": "imghost", - "listPreference": { - "title": "图片服务器", - "summary": "", - "valueIndex": 0, - "entries": ["服务器1", "服务器2"], - "entryValues": ["https://picsh.77dm.top", "https://imgsh.dm365.top"], + getFilterList() { + return [{ + type: "category", + name: "分类", + type_name: "SelectFilter", + values: [{ + value: "/rexue", + name: "热血机战", + type_name: "SelectOption" + }, + { + value: "/kehuan", + name: "科幻未来", + type_name: "SelectOption" + }, + { + value: "/kongbu", + name: "恐怖惊悚", + type_name: "SelectOption" + }, + { + value: "/xuanyi", + name: "推理悬疑", + type_name: "SelectOption" + }, + { + value: "/gaoxiao", + name: "滑稽搞笑", + type_name: "SelectOption" + }, + { + value: "/love", + name: "恋爱生活", + type_name: "SelectOption" + }, + { + value: "/danmei", + name: "耽美人生", + type_name: "SelectOption" + }, + { + value: "/tiyu", + name: "体育竞技", + type_name: "SelectOption" + }, + { + value: "/chunqing", + name: "纯情少女", + type_name: "SelectOption" + }, + { + value: "/qihuan", + name: "魔法奇幻", + type_name: "SelectOption" + }, + { + value: "/wuxia", + name: "武侠经典", + type_name: "SelectOption" } - }]; - } + ] + }]; + } + + getSourcePreferences() { + return [{ + "key": "imghost", + "listPreference": { + "title": "图片服务器", + "summary": "", + "valueIndex": 0, + "entries": ["服务器1", "服务器2"], + "entryValues": ["https://picsh.77dm.top", "https://imgsh.dm365.top"], + } + }]; + } } \ No newline at end of file diff --git a/javascript/manga/src/zh/manhuadb.js b/javascript/manga/src/zh/manhuadb.js index 80dcb4b2..496b1095 100644 --- a/javascript/manga/src/zh/manhuadb.js +++ b/javascript/manga/src/zh/manhuadb.js @@ -1,668 +1,668 @@ const mangayomiSources = [{ - "name": "漫画DB", - "lang": "zh", - "baseUrl": "https://www.manhuadb.com", - "apiUrl": "", - "iconUrl": "https://www.manhuadb.com/assets/www/img/favicon.png", - "typeSource": "single", - "isManga": true, - "isNsfw": false, - "version": "0.0.1", - "dateFormat": "", - "dateFormatLocale": "", - "pkgPath": "manga/src/zh/manhuadb.js" - }]; - - class DefaultExtension extends MProvider { - base64decode(str) { - var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); - var c1, c2, c3, c4; - var i, len, out; - len = str.length; - i = 0; - out = ""; - while (i < len) { - do { - c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff] - } while (i < len && c1 == -1); - if (c1 == -1) - break; - do { - c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff] - } while (i < len && c2 == -1); - if (c2 == -1) - break; - out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); - do { - c3 = str.charCodeAt(i++) & 0xff; - if (c3 == 61) - return out; - c3 = base64DecodeChars[c3] - } while (i < len && c3 == -1); - if (c3 == -1) - break; - out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); - do { - c4 = str.charCodeAt(i++) & 0xff; - if (c4 == 61) - return out; - c4 = base64DecodeChars[c4] - } while (i < len && c4 == -1); - if (c4 == -1) - break; - out += String.fromCharCode(((c3 & 0x03) << 6) | c4) - } - return out + "name": "漫画DB", + "lang": "zh", + "baseUrl": "https://www.manhuadb.com", + "apiUrl": "", + "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.manhuadb.png", + "typeSource": "single", + "isManga": true, + "isNsfw": false, + "version": "0.0.1", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "manga/src/zh/manhuadb.js" +}]; + +class DefaultExtension extends MProvider { + base64decode(str) { + var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); + var c1, c2, c3, c4; + var i, len, out; + len = str.length; + i = 0; + out = ""; + while (i < len) { + do { + c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff] + } while (i < len && c1 == -1); + if (c1 == -1) + break; + do { + c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff] + } while (i < len && c2 == -1); + if (c2 == -1) + break; + out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); + do { + c3 = str.charCodeAt(i++) & 0xff; + if (c3 == 61) + return out; + c3 = base64DecodeChars[c3] + } while (i < len && c3 == -1); + if (c3 == -1) + break; + out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); + do { + c4 = str.charCodeAt(i++) & 0xff; + if (c4 == 61) + return out; + c4 = base64DecodeChars[c4] + } while (i < len && c4 == -1); + if (c4 == -1) + break; + out += String.fromCharCode(((c3 & 0x03) << 6) | c4) } - - coverUrlConvert(cover_url) { - if (cover_url.search("com") == -1) { - return this.source.baseUrl + cover_url; - } - return cover_url; + return out + } + + coverUrlConvert(cover_url) { + if (cover_url.search("com") == -1) { + return this.source.baseUrl + cover_url; } - - async getMangas(url, search) { - const res = await new Client().get(this.source.baseUrl + url); - const doc = new Document(res.body); - var str; + return cover_url; + } + + async getMangas(url, search) { + const res = await new Client().get(this.source.baseUrl + url); + const doc = new Document(res.body); + var str; + if (search) { + str = "div.comicbook-index"; + } else { + str = "div.media"; + } + const items = doc.select(str); + const mangas = []; + for (const item of items) { + const cover = this.coverUrlConvert(item.selectFirst("a.d-block img").attr("src")); + var title; if (search) { - str = "div.comicbook-index"; + title = item.selectFirst("a.d-block").attr("title"); } else { - str = "div.media"; + title = item.selectFirst("a.d-block img").attr("alt"); + title = title.replace("的封面图", ""); } - const items = doc.select(str); - const mangas = []; - for (const item of items) { - const cover = this.coverUrlConvert(item.selectFirst("a.d-block img").attr("src")); - var title; - if (search) { - title = item.selectFirst("a.d-block").attr("title"); - } else { - title = item.selectFirst("a.d-block img").attr("alt"); - title = title.replace("的封面图", ""); - } - const url = item.selectFirst("a.d-block").attr("href"); - mangas.push({ - name: title, - link: url, - imageUrl: cover - }); - } - return { - list: mangas, - hasNextPage: true - } - } - - async getPopular(page) { - const res = await new Client().get(this.source.baseUrl); - const doc = new Document(res.body); - const items = doc.select("div.comicbook-index"); - var mangas = []; - for (let item of items) { - const cover = this.coverUrlConvert(item.selectFirst("a img").attr("src")); - const title = item.selectFirst("a img").attr("alt"); - const url = item.selectFirst("a").attr("href") - mangas.push({ - name: title.replace("封面", ""), - link: url, - imageUrl: cover - }); - } - return { - list: mangas, - hasNextPage: false - }; - } - - async getLatestUpdates(page) { - return await this.getMangas(`/manhua/list-page-${page}.html`, false); - } - - async search(query, page, filters) { - if (query == "") { - var locations, readers, status, categories; - for (const filter of filters) { - if (filter["type"] == "locations") { - locations = filter["values"][filter["state"]]["value"]; - } else if (filter["type"] == "readers") { - readers = filter["values"][filter["state"]]["value"]; - } else if (filter["type"] == "status") { - status = filter["values"][filter["state"]]["value"]; - } else if (filter["type"] == "categories") { - categories = filter["values"][filter["state"]]["value"]; - } - } - const url = `/manhua/list${locations}${readers}${status}${categories}-page-${page}.html`; - return await this.getMangas(url.replaceAll("all", ""), false); - } else { - return await this.getMangas(`/search?q=${query}&p=${page}`, true); - } - } - - async getDetail(url) { - const res = await new Client().get(this.source.baseUrl + url); - const doc = new Document(res.body); - const title = doc.selectFirst("h1.comic-title").text; - const cover = this.coverUrlConvert(doc.selectFirst("td.comic-cover img").attr("src")); - const desc = doc.selectFirst("p.comic_story").text; - const author = doc.selectFirst("ul.creators a").text; - var tags = doc.select("ul.tags a").map(e => e.text); - var status = 5; - if (tags[0] == "已完结") { - status = 1; - tags.shift(); - } - if (tags[0] == "连载中") { - status = 0; - tags.shift(); - } - const items = doc.select("ol.links-of-books"); - const episodes = []; - const ep_names = doc.select("span.h3"); - const ep_titles = []; - for (const ep_name of ep_names) { - ep_titles.push(ep_name.text); - } - var index = 0; - for (const lists of items) { - const chapters = lists.select("li"); - for (const chapter of chapters) { - const name = chapter.selectFirst("a").attr("title"); - const url = chapter.selectFirst("a").attr("href"); - episodes.push({ - name: `[[${ep_titles[index]}]]${name}`, - url: url - }); - } - index = index + 1; - } - return { + const url = item.selectFirst("a.d-block").attr("href"); + mangas.push({ name: title, - imageUrl: cover, - description: desc, - episodes: episodes, - genre: tags, - author: author, - status: status - }; + link: url, + imageUrl: cover + }); } - - async getPageList(url) { - const res = await new Client().get(this.source.baseUrl + url); - const html = res.body; - const doc = new Document(html); - const urls = []; - var script_str = html.match(/