diff --git a/ComicRead-AdGuard.user.js b/ComicRead-AdGuard.user.js index 6625615b..ba5272c9 100644 --- a/ComicRead-AdGuard.user.js +++ b/ComicRead-AdGuard.user.js @@ -1,8 +1,8 @@ // ==UserScript== // @name ComicRead // @namespace ComicRead -// @version 10.10.2 -// @description 为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、动漫之家(解锁隐藏漫画)、E-Hentai(关联 nhentai、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录、解锁隐藏漫画)、PonpomuYuri、再漫画、明日方舟泰拉记事社、禁漫天堂、漫画柜(manhuagui)、漫画DB(manhuadb)、动漫屋(dm5)、绅士漫画(wnacg)、mangabz、komiic、MangaDex、無限動漫、新新漫画、熱辣漫畫、hitomi、SchaleNetwork、kemono、nekohouse、welovemanga +// @version 10.11.0 +// @description 为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、动漫之家(解锁隐藏漫画)、E-Hentai(关联 nhentai、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录、解锁隐藏漫画)、PonpomuYuri、再漫画、明日方舟泰拉记事社、禁漫天堂、漫画柜(manhuagui)、漫画DB(manhuadb)、动漫屋(dm5)、绅士漫画(wnacg)、mangabz、komiic、MangaDex、NoyAcg、無限動漫、新新漫画、熱辣漫畫、hitomi、SchaleNetwork、kemono、nekohouse、welovemanga // @description:en Add enhanced features to the comic site for optimized experience, including dual-page reading and translation. E-Hentai (Associate nhentai, Quick favorite, Colorize tags, Floating tag list, etc.) | nhentai (Totally block comics, Auto page turning) | hitomi | Anchira | kemono | nekohouse | welovemanga. // @description:ru Добавляет расширенные функции для удобства на сайт, такие как двухстраничный режим и перевод. // @author hymbz @@ -59,6 +59,7 @@ // @match *://mangabz.com/* // @match *://komiic.com/* // @match *://mangadex.org/* +// @match *://noy1.top/* // @match *://8.twobili.com/* // @match *://a.twobili.com/* // @match *://articles.onemoreplace.tw/* @@ -1177,14 +1178,18 @@ const request = async (url, details, retryNum = 0, errorNum = 0) => { }; } if (typeof GM_xmlhttpRequest === 'undefined') throw new Error(helper.t('pwa.alert.userscript_not_installed')); + let targetUrl = url; + // https://github.com/hymbz/ComicReadScript/issues/195 + // 在某些情况下 Tampermonkey 无法正确处理相对协议的 url + // 实际 finalUrl 会变成 \`///xxx.xxx\` 莫名多了一个斜杠 + // 然而在修改代码发出正确的请求后,就再也无法复现了 + // 不过以防万一还是在这里手动处理下 + if (url.startsWith('//')) targetUrl = \`http:\${url}\`; + // stay 没法处理相对路径,也得转换一下 + else if (url.startsWith('/')) targetUrl = \`\${window.location.origin}\${url}\`; const res = await xmlHttpRequest({ method: 'GET', - // https://github.com/hymbz/ComicReadScript/issues/195 - // 在某些情况下 Tampermonkey 无法正确处理相对协议的 url - // 实际 finalUrl 会变成 \`///xxx.xxx\` 莫名多了一个斜杠 - // 然而在修改代码发出正确的请求后,就再也无法复现了 - // 不过以防万一还是在这里手动处理下 - url: url.startsWith('//') ? \`http:\${url}\` : url, + url: targetUrl, headers, timeout: 1000 * 10, ...details @@ -1193,6 +1198,13 @@ const request = async (url, details, retryNum = 0, errorNum = 0) => { helper.log.error(errorText, res); throw new Error(errorText); } + + // stay 好像没有正确处理 json,只能再单独判断处理一下 + if (details?.responseType === 'json' && (typeof res.response !== 'object' || Object.keys(res.response).length === 0)) { + try { + Reflect.set(res, 'response', JSON.parse(res.responseText)); + } catch {} + } return res; } catch (error) { if (errorNum >= retryNum) { @@ -1944,6 +1956,12 @@ const handleDragAnima$1 = () => { animationId$2 = requestAnimationFrame(handleDragAnima$1); }; +/** 一段时间没有移动后应该将速率归零 */ +const resetVelocity = helper.debounce(() => { + velocity.x = 0; + velocity.y = 0; +}, 200); + /** 是否正在双指捏合缩放中 */ let pinchZoom = false; @@ -1968,10 +1986,13 @@ const handleZoomDrag = ({ mouse.x += x - lx; mouse.y += y - ly; if (animationId$2 === null) animationId$2 = requestAnimationFrame(handleDragAnima$1); + resetVelocity(); break; } case 'up': { + resetVelocity.clear(); + // 当双指捏合结束,一个手指抬起时,将剩余的指针当作刚点击来处理 if (pinchZoom) { pinchZoom = false; @@ -3987,6 +4008,7 @@ const ComicImgFlow = () => { return (() => { var _el$ = web.template(\`
修复放大后拖拽不跟手的 bug
修复拷贝漫画解锁隐藏漫画不支持移动端的 bug\`)(), web.createComponent(VersionTip, { v1: version, v2: '10.8.0', get children() { @@ -11843,7 +11865,7 @@ const handleLastChapter = comicName => { }; // 生成目录 -const buildChapters = async (comicName, rootDom) => { +const buildChapters = async (comicName, isMobile) => { // 拷贝有些漫画虽然可以通过 api 获取到数据,但网页上的目录被隐藏了 // 举例:https://mangacopy.com/comic/yueguangxiadeyishijiezhilv @@ -11854,7 +11876,8 @@ const buildChapters = async (comicName, rootDom) => { } = await main.request(`/comicdetail/${comicName}/chapters`, { responseType: 'json', errorText: '加載漫畫目錄失敗', - headers + headers, + fetch: false }); // 解码 api 返回的数据 const decryptData = async (cipher, key, iv) => { @@ -11879,81 +11902,146 @@ const buildChapters = async (comicName, rootDom) => { id }) => [id, []])); for (const chapter of props.chapters) chapters[chapter.type].push(chapter); + if (isMobile) { + // 删掉占位置的分隔线 + for (const dom of helper.querySelectorAll('.van-divider')) dom.remove(); + return (() => { + var _el$ = web.template(`