|
12 | 12 | // @description:ja 画像を強力に閲覧できるツール。ポップアップ表示、拡大・縮小、回転、一括保存などの機能を自動で実行できます |
13 | 13 | // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente |
14 | 14 | // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения |
15 | | -// @version 2026.1.17.1 |
| 15 | +// @version 2026.1.23.1 |
16 | 16 | // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== |
17 | 17 | // @namespace https://github.com/hoothin/UserScripts |
18 | 18 | // @homepage https://pv.hoothin.com/ |
|
47 | 47 | // @grant unsafeWindow |
48 | 48 | // @require https://update.greasyfork.org/scripts/6158/23710/GM_config%20CN.js |
49 | 49 | // @require https://update.greasyfork.org/scripts/438080/1738227/pvcep_rules.js |
50 | | -// @require https://update.greasyfork.org/scripts/440698/1733533/pvcep_lang.js |
| 50 | +// @require https://update.greasyfork.org/scripts/440698/1740314/pvcep_lang.js |
51 | 51 | // @match *://*/* |
52 | 52 | // @exclude http://www.toodledo.com/tasks/* |
53 | 53 | // @exclude http*://maps.google.com*/* |
@@ -28254,6 +28254,30 @@ ImgOps | https://imgops.com/#b#`; |
28254 | 28254 | document.head.removeChild(hideIconStyle); |
28255 | 28255 | } |
28256 | 28256 | }); |
| 28257 | + function buildDisableKeyPattern() { |
| 28258 | + let originPattern = location.origin.replace(/^https?/, "https?").replace(/\./g, "\\."); |
| 28259 | + let pathBase = location.pathname.replace(/[^\/]*$/, ""); |
| 28260 | + return "^" + originPattern + pathBase; |
| 28261 | + } |
| 28262 | + function isDisableKeyPatternMatched() { |
| 28263 | + let pattern = buildDisableKeyPattern(); |
| 28264 | + let list = normalizeDisableKeySites(prefs.floatBar.disableKeySites); |
| 28265 | + return list.indexOf(pattern) !== -1; |
| 28266 | + } |
| 28267 | + _GM_registerMenuCommand( |
| 28268 | + isDisableKeyPatternMatched() ? i18n("restoreKeyForHost") : i18n("disableKeyForHost"), |
| 28269 | + () => { |
| 28270 | + let pattern = buildDisableKeyPattern(); |
| 28271 | + let list = normalizeDisableKeySites(prefs.floatBar.disableKeySites); |
| 28272 | + if (list.indexOf(pattern) === -1) { |
| 28273 | + list.unshift(pattern); |
| 28274 | + saveDisableKeySites(list); |
| 28275 | + } else { |
| 28276 | + let nextList = list.filter(item => item !== pattern); |
| 28277 | + saveDisableKeySites(nextList); |
| 28278 | + } |
| 28279 | + } |
| 28280 | + ); |
28257 | 28281 | _GM_registerMenuCommand(i18n("ruleRequest"), () => { |
28258 | 28282 | _GM_openInTab("https://github.com/hoothin/UserScripts/issues/new?labels=Picviewer%20CE%2B&template=custom-rule-request.md&title=Request%20Picviewer%20CE%2B%20support%20for%20" + location.hostname, {active:true}); |
28259 | 28283 | }); |
@@ -28346,19 +28370,47 @@ ImgOps | https://imgops.com/#b#`; |
28346 | 28370 | } |
28347 | 28371 |
|
28348 | 28372 | // 注册按键 |
28349 | | - let disableKey = false; |
28350 | | - if (prefs.floatBar.disableKeySites) { |
28351 | | - let sitesArr = prefs.floatBar.disableKeySites.split("\n"); |
28352 | | - for(let s = 0; s < sitesArr.length; s++) { |
28353 | | - let siteReg = sitesArr[s].trim(); |
28354 | | - if (new RegExp(siteReg).test(_URL)) { |
28355 | | - disableKey = true; |
28356 | | - break; |
| 28373 | + function normalizeDisableKeySites(value) { |
| 28374 | + if (!value) return []; |
| 28375 | + return value.split("\n").map(s => s.trim()).filter(Boolean); |
| 28376 | + } |
| 28377 | + |
| 28378 | + function isKeyDisabledForUrl(url, host, list) { |
| 28379 | + for (let i = 0; i < list.length; i++) { |
| 28380 | + let siteReg = list[i]; |
| 28381 | + try { |
| 28382 | + let reg = new RegExp(siteReg); |
| 28383 | + if (reg.test(url) || reg.test(host)) return true; |
| 28384 | + } catch (e) { |
28357 | 28385 | } |
28358 | 28386 | } |
| 28387 | + return false; |
28359 | 28388 | } |
28360 | | - if (!disableKey) { |
28361 | | - document.addEventListener('keydown', keydown, true); |
| 28389 | + |
| 28390 | + let keydownBound = false; |
| 28391 | + function updateKeydownListener() { |
| 28392 | + let list = normalizeDisableKeySites(prefs.floatBar.disableKeySites); |
| 28393 | + let disableKey = isKeyDisabledForUrl(_URL, location.hostname, list); |
| 28394 | + if (!disableKey && !keydownBound) { |
| 28395 | + document.addEventListener('keydown', keydown, true); |
| 28396 | + keydownBound = true; |
| 28397 | + } else if (disableKey && keydownBound) { |
| 28398 | + document.removeEventListener('keydown', keydown, true); |
| 28399 | + keydownBound = false; |
| 28400 | + } |
| 28401 | + } |
| 28402 | + updateKeydownListener(); |
| 28403 | + |
| 28404 | + function saveDisableKeySites(list) { |
| 28405 | + let value = list.join("\n"); |
| 28406 | + prefs.floatBar.disableKeySites = value; |
| 28407 | + if (GM_config && GM_config.set) { |
| 28408 | + GM_config.set('floatBar.disableKeySites', value); |
| 28409 | + let field = GM_config.fields && GM_config.fields['floatBar.disableKeySites']; |
| 28410 | + if (field && field.node) field.node.value = value; |
| 28411 | + GM_config.save(); |
| 28412 | + } |
| 28413 | + updateKeydownListener(); |
28362 | 28414 | } |
28363 | 28415 |
|
28364 | 28416 | let canImport = false; |
|
0 commit comments