修复预加载页数未正确生效的 bug\`);
const migrationOption = async (name, editFn) => {
try {
const option = await GM.getValue(name);
@@ -7463,7 +7420,7 @@ const handleVersionUpdate = async () => {
_el$.firstChild;
web.insert(_el$, () => GM.info.script.version, null);
return _el$;
- })(), _tmpl$2(), _tmpl$3(), _tmpl$4(), _tmpl$5()], {
+ })(), _tmpl$2(), _tmpl$3()], {
id: 'Version Tip',
type: 'custom',
duration: Number.POSITIVE_INFINITY,
@@ -7486,6 +7443,17 @@ const getHotkeys = async () => ({
...(await GM.getValue('Hotkeys', {}))
});
+/** 清理多余的配置项 */
+const clear = (options, defaultOptions) => {
+ let isClear = false;
+ for (const key of Object.keys(options)) {
+ if (Reflect.has(defaultOptions, key)) continue;
+ Reflect.deleteProperty(options, key);
+ isClear = true;
+ }
+ return isClear;
+};
+
/**
* 对修改站点配置的相关方法的封装
* @param name 站点名
@@ -7493,6 +7461,8 @@ const getHotkeys = async () => ({
*/
const useSiteOptions = async (name, defaultOptions = {}) => {
const _defaultOptions = {
+ option: undefined,
+ defaultOption: undefined,
autoShow: true,
hiddenFAB: false,
...defaultOptions
@@ -7500,7 +7470,7 @@ const useSiteOptions = async (name, defaultOptions = {}) => {
const saveOptions = await GM.getValue(name);
const options = store$2.createMutable(assign(_defaultOptions, saveOptions));
const setOptions = async newValue => {
- Object.assign(options, newValue);
+ if (newValue) Object.assign(options, newValue);
// 只保存和默认设置不同的部分
return GM.setValue(name, difference(options, _defaultOptions));
};
@@ -7508,6 +7478,8 @@ const useSiteOptions = async (name, defaultOptions = {}) => {
const isStored = saveOptions !== undefined;
// 如果当前站点没有存储配置,就补充上去
if (!isStored) await GM.setValue(name, {});
+ // 否则检查是否有多余的配置
+ else if (clear(options, _defaultOptions)) await setOptions();
return {
/** 站点配置 */
options,
@@ -9655,8 +9627,8 @@ const updateTagColor = async () => {
}
css += `
/* 禁用 eh 的变色效果 */
- #taglist a { color: #DDDDDD !important; position: relative; }
- #taglist a:hover { color: #EEEEEE !important; }
+ #taglist a { color: var(--tag) !important; position: relative; }
+ #taglist a:hover { color: var(--tag-hover) !important; }
#taglist a::after {
content: "";
@@ -9667,30 +9639,41 @@ const updateTagColor = async () => {
height: 2px;
bottom: -7px;
}
- .tup { --color: #00E639; }
- .tdn { --color: #FF3333; }
+ .tup { --color: var(--tup) }
+ .tdn { --color: var(--tdn) }
#taglist a[style="color: blue;"] { --color: blue; }
`;
await GM.setValue('ehTagColorizeCss', css);
return css;
};
+const getTagColorizeCss = async () => {
+ let colorizeCss = await GM.getValue('ehTagColorizeCss');
+ colorizeCss ||= await updateTagColor();
+ return colorizeCss;
+};
/** 标签染色 */
const colorizeTag = async pageType => {
switch (pageType) {
case 'gallery':
{
- let colorizeCss = await GM.getValue('ehTagColorizeCss');
- colorizeCss ||= await updateTagColor();
- return GM_addStyle(colorizeCss);
+ let css = location.origin === 'https://exhentai.org' ? '--tag: #DDDDDD; --tag-hover: #EEEEEE; --tup: #00E639; --tdn: #FF3333;' : '--tag: #5C0D11; --tag-hover: #8F4701; --tup: green; --tdn: red;';
+ css = `#taglist { ${css} }\n\n${await getTagColorizeCss()}`;
+ return GM_addStyle(css);
}
case 'mytags':
{
// 进入时更新
updateTagColor();
+ let oldCss = await getTagColorizeCss();
+ /** 不断循环直至获取到新数据 */
+ const waitUpdate = main.singleThreaded(async () => {
+ const newCss = await getTagColorizeCss();
+ if (newCss === oldCss) setTimeout(waitUpdate, 1000);else oldCss = newCss;
+ });
// 点击保存按钮时更新
- document.addEventListener('click', e => e.target.tagName === 'BUTTON' && e.target.id.startsWith('tagsave_') && updateTagColor());
+ document.addEventListener('click', e => e.target.tagName === 'BUTTON' && e.target.id.startsWith('tagsave_') && waitUpdate());
}
// 除了在 mytags 里更新外,还可以在列表页检查高亮的标签和脚本存储的标签颜色数据是否对应,
@@ -10422,8 +10405,7 @@ const main = require('main');
// #[禁漫天堂](https://18comic.vip)
case 'jmcomic.me':
- case '18comic-erdtree.xyz':
- case '18-comicstellar.xyz':
+ case '18comic-erdtree.cc':
case '18comic.org':
case '18comic.vip':
{
diff --git a/ComicRead.user.js b/ComicRead.user.js
index 5bfe8958..bd4490ce 100644
--- a/ComicRead.user.js
+++ b/ComicRead.user.js
@@ -1,7 +1,7 @@
// ==UserScript==
// @name ComicRead
// @namespace ComicRead
-// @version 9.3.0
+// @version 9.3.1
// @description 为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、动漫之家(解锁隐藏漫画)、E-Hentai(关联 nhentai、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录)、PonpomuYuri、明日方舟泰拉记事社、禁漫天堂、漫画柜(manhuagui)、漫画DB(manhuadb)、动漫屋(dm5)、绅士漫画(wnacg)、mangabz、komiic、无限动漫、新新漫画、hitomi、Anchira、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, Detect advertise page, etc.) | nhentai (Totally block comics, Auto page turning) | hitomi | Anchira | kemono | nekohouse | welovemanga.
// @description:ru Добавляет расширенные функции для удобства на сайт, такие как двухстраничный режим и перевод.
@@ -4332,7 +4332,7 @@ const handleWheel = e => {
if ((e.ctrlKey || e.altKey) && store.option.scrollMode.enabled && store.zoom.scale === 100) {
e.preventDefault();
if (store.option.scrollMode.fitToWidth) return;
- return zoomScrollModeImg(isWheelDown ? -0.1 : 0.1);
+ return zoomScrollModeImg(isWheelDown ? -0.05 : 0.05);
}
if (e.ctrlKey || e.altKey || store.zoom.scale !== 100) {
e.preventDefault();
@@ -4566,7 +4566,7 @@ const checkImgSize = (i, e) => {
};
/** 图片加载完毕的回调 */
-const handleImgLoaded = (i, e) => () => {
+const handleImgLoaded = (i, e) => async () => {
setState(state => {
const img = state.imgList[i];
if (!img) return;
@@ -4576,6 +4576,7 @@ const handleImgLoaded = (i, e) => () => {
});
setLoadLock(false);
loadingImgMap.delete(i);
+ await e.decode();
};
/** 图片加载出错的次数 */
@@ -4671,8 +4672,8 @@ const updateImgLoadType = singleThreaded(() => {
loadRangeImg(preloadNum().back) ||
// 再加载前面几页
loadRangeImg(-preloadNum().front) ||
- // 根据图片总数和设置决定是否要继续加载其余图片
- !store.option.alwaysLoadAllImg && store.imgList.length > 60 ||
+ // 根据设置决定是否要继续加载其余图片
+ !store.option.alwaysLoadAllImg ||
// 加载当前页后面的图片
loadRangeImg(Number.POSITIVE_INFINITY, 5) ||
// 加载当前页前面的图片
@@ -4845,9 +4846,8 @@ const EmptyTip = () => {
var _tmpl$$B = /*#__PURE__*/web.template(\`\`),
_tmpl$2$a = /*#__PURE__*/web.template(\`
\`),
- _tmpl$3$4 = /*#__PURE__*/web.template(\`