1212// @description:ja オンラインで画像を強力に閲覧できるツール。ポップアップ表示、拡大・縮小、回転、一括保存などの機能を自動で実行できます
1313// @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
1414// @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
15- // @version 2024.6.8.1
15+ // @version 2024.6.8.2
1616// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
1717// @namespace https://github.com/hoothin/UserScripts
1818// @homepage https://www.hoothin.com
4646// @grant GM.notification
4747// @grant unsafeWindow
4848// @require https://update.greasyfork.org/scripts/6158/23710/GM_config%20CN.js
49- // @require https://update.greasyfork.org/scripts/438080/1384302 /pvcep_rules.js
50- // @require https://update.greasyfork.org/scripts/440698/1389981 /pvcep_lang.js
49+ // @require https://update.greasyfork.org/scripts/438080/1391020 /pvcep_rules.js
50+ // @require https://update.greasyfork.org/scripts/440698/1391048 /pvcep_lang.js
5151// @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js
5252// @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js
5353// @match *://*/*
@@ -12389,6 +12389,8 @@ ImgOps | https://imgops.com/#b#`;
1238912389 sidebarSize: 120,//侧栏的高(如果是水平放置)或者宽(如果是垂直放置)
1239012390 backgroundColor: 'rgba(20,20,20,0.75)',
1239112391 formatConversion: "webp>png",
12392+ aria2Host: "http://localhost:6800",
12393+ aria2Token: "",
1239212394 sidebarToggle: true, // 是否显示隐藏按钮
1239312395 transition:true,//大图片区的动画。
1239412396 preload:true,//对附近的图片进行预读。
@@ -13649,6 +13651,7 @@ ImgOps | https://imgops.com/#b#`;
1364913651 '<span class="pv-gallery-head-command-drop-list-item" data-command="enterCollection" title="'+i18n("viewCollectionTip")+'">'+i18n("viewCollection")+'</span>'+
1365013652 '<span class="pv-gallery-head-command-drop-list-item" data-command="psImage" title="'+i18n("onlineEditTip"," " + prefs.gallery.editSite + " ")+'">'+i18n("onlineEdit")+'</span>'+
1365113653 '<span class="pv-gallery-head-command-drop-list-item" data-command="downloadImage" title="'+i18n("downloadImageTip")+'">'+i18n("downloadImage")+'</span>'+
13654+ '<span class="pv-gallery-head-command-drop-list-item" data-command="postImagesToAria2" title="'+i18n("post2Aria2")+'">'+i18n("post2Aria2")+'</span>'+
1365213655 '<span class="pv-gallery-head-command-drop-list-item" data-command="exportImages" title="'+i18n("exportImagesTip")+'">'+i18n("exportImages")+'</span>'+
1365313656 '<span class="pv-gallery-head-command-drop-list-item" data-command="copyImages" title="'+i18n("copyImagesUrlTip")+'">'+i18n("copyImagesUrl")+'</span>'+
1365413657 '<span class="pv-gallery-head-command-drop-list-item" data-command="scrollIntoView" title="'+i18n("findInPageTip")+'">'+i18n("findInPage")+'</span>'+
@@ -14407,12 +14410,38 @@ ImgOps | https://imgops.com/#b#`;
1440714410
1440814411 prefs.gallery.scrollEndAndLoad = !!storage.getListItem("scrollEndAndLoad", location.hostname);
1440914412 eleMaps['head-command-drop-list-others'].querySelector('input[data-command="scrollToEndAndReload"]').checked = prefs.gallery.scrollEndAndLoad;
14410- var srcSplit,downloading=false;
14413+ let srcSplit, downloading=false, saveParams;
14414+ function getSaveParams() {
14415+ let nodes = self.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]');
14416+ let saveParams = [],saveIndex=0;
14417+ [].forEach.call(nodes, function(node){
14418+ if(unsafeWindow.getComputedStyle(node).display!="none"){
14419+ saveIndex++;
14420+ if (node.dataset.src.indexOf('data') === 0) srcSplit = "";
14421+ else {
14422+ srcSplit=node.dataset.src || '';
14423+ }
14424+ let title = node.title.indexOf('\n') !== -1 ? node.title.split('\n')[0] : node.title;
14425+ title = title.indexOf('http') === 0 || title.indexOf('data') === 0 ? '' : title;
14426+ title = getRightSaveName(srcSplit, title, prefs.saveName);
14427+ let picName = (saveIndex < 10 ? "00" + saveIndex : (saveIndex < 100 ? "0" + saveIndex : saveIndex)) + (title ? "-" + title : ""), hostArr = location.host.split(".");
14428+ let host = hostArr[hostArr.length-2];
14429+ saveParams.push([node.dataset.src, picName]);
14430+ if (node.dataset.srcs) {
14431+ node.dataset.srcs.split(",").forEach(src => {
14432+ saveParams.push([src, picName]);
14433+ });
14434+ }
14435+ //saveAs(node.dataset.src, location.host+"-"+srcSplit[srcSplit.length-1]);
14436+ }
14437+ });
14438+ return saveParams;
14439+ }
1441114440 //命令下拉列表的点击处理
1441214441 eleMaps['head-command-drop-list-others'].addEventListener('click',function(e){
1441314442 if(e.button!=0)return;//左键
14414- var target=e.target;
14415- var command=dataset(target,'command');
14443+ let target=e.target;
14444+ let command=dataset(target,'command');
1441614445 if(!command)return;
1441714446 switch(command){
1441814447 case 'openInNewWindow':{
@@ -14429,9 +14458,9 @@ ImgOps | https://imgops.com/#b#`;
1442914458 self.showTips(i18n("inCollection"));
1443014459 return;
1443114460 };
14432- var relatedThumb=self.relatedThumb;
14433- var index=arrayFn.indexOf.call(self.imgSpans,relatedThumb);
14434- var targetImg=self.data[index].img;
14461+ let relatedThumb=self.relatedThumb;
14462+ let index=arrayFn.indexOf.call(self.imgSpans,relatedThumb);
14463+ let targetImg=self.data[index].img;
1443514464
1443614465 if(targetImg){
1443714466 if(!document.documentElement.contains(targetImg) || unsafeWindow.getComputedStyle(targetImg).display=='none'){//图片不存在文档中,或者隐藏了。
@@ -14470,32 +14499,36 @@ ImgOps | https://imgops.com/#b#`;
1447014499 case 'exportImages':
1447114500 self.exportImages();
1447214501 break;
14502+ case 'postImagesToAria2':
14503+ if (!prefs.gallery.aria2Host) {
14504+ self.showTips("Configure aria2 first!", 1000);
14505+ return;
14506+ }
14507+ saveParams = getSaveParams();
14508+ [].forEach.call(saveParams, function(param){
14509+ _GM_xmlhttpRequest({
14510+ method: 'POST',
14511+ url: prefs.gallery.aria2Host + "/jsonrpc",
14512+ data: JSON.stringify({
14513+ params: [
14514+ "token:" + (prefs.gallery.aria2Token || ""),
14515+ [param[0]],
14516+ {"out": param[1]}
14517+ ],
14518+ jsonrpc: "2.0",
14519+ method: "aria2.addUri",
14520+ id: Math.random()
14521+ }),
14522+ onload: function(d) {
14523+ }
14524+ });
14525+ });
14526+ self.showTips("Completed!", 1000);
14527+ break;
1447314528 case 'downloadImage':
1447414529 if(downloading)break;
1447514530 downloading=true;
14476- var nodes = self.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]');
14477- var saveParams = [],saveIndex=0;
14478- [].forEach.call(nodes, function(node){
14479- if(unsafeWindow.getComputedStyle(node).display!="none"){
14480- saveIndex++;
14481- if (node.dataset.src.indexOf('data') === 0) srcSplit = "";
14482- else {
14483- srcSplit=node.dataset.src || '';
14484- }
14485- var title = node.title.indexOf('\n') !== -1 ? node.title.split('\n')[0] : node.title;
14486- title = title.indexOf('http') === 0 || title.indexOf('data') === 0 ? '' : title;
14487- title = getRightSaveName(srcSplit, title, prefs.saveName);
14488- var picName = (saveIndex < 10 ? "00" + saveIndex : (saveIndex < 100 ? "0" + saveIndex : saveIndex)) + (title ? "-" + title : ""), hostArr = location.host.split(".");
14489- var host = hostArr[hostArr.length-2];
14490- saveParams.push([node.dataset.src, picName]);
14491- if (node.dataset.srcs) {
14492- node.dataset.srcs.split(",").forEach(src => {
14493- saveParams.push([src, picName]);
14494- });
14495- }
14496- //saveAs(node.dataset.src, location.host+"-"+srcSplit[srcSplit.length-1]);
14497- }
14498- });
14531+ saveParams = getSaveParams();
1449914532 self.batchDownload(saveParams, ()=>{
1450014533 downloading=false;
1450114534 self.showTips("Completed!", 1000);
@@ -14579,7 +14612,7 @@ ImgOps | https://imgops.com/#b#`;
1457914612 }
1458014613 break;
1458114614 case 'addImageUrls':
14582- var urls = window.prompt(i18n('addImageUrls') + ": White space to split multi-image, '[01-09]' to generate nine urls from 01 to 09, '$http://xxx' to fetch images from page","https://xxx.xxx/pic-[20-99].jpg https://xxx.xxx/pic-[01-10].png");
14615+ let urls = window.prompt(i18n('addImageUrls') + ": White space to split multi-image, '[01-09]' to generate nine urls from 01 to 09, '$http://xxx' to fetch images from page","https://xxx.xxx/pic-[20-99].jpg https://xxx.xxx/pic-[01-10].png");
1458314616 if (!urls) return;
1458414617 self.addImageUrls(urls);
1458514618 break;
@@ -14742,7 +14775,7 @@ ImgOps | https://imgops.com/#b#`;
1474214775 }
1474314776 }
1474414777 addWheelEvent(eleMaps['body'],function(e){//wheel事件
14745- if(e.deltaZ!=0)return;//z轴
14778+ if(e.deltaZ!=0 || e.target.nodeName=="TEXTAREA" )return;//z轴
1474614779 if(eleMaps['sidebar-toggle'].style.visibility == 'hidden')return;
1474714780 var target=e.target;
1474814781 //e.preventDefault();
@@ -19014,6 +19047,7 @@ ImgOps | https://imgops.com/#b#`;
1901419047 height: 80vh;\
1901519048 border: 10px solid #272727;\
1901619049 background: #ffffffee;\
19050+ color: black;\
1901719051 }\
1901819052 span.pv-gallery-urls-textarea-close,\
1901919053 span.pv-gallery-urls-textarea-download{\
@@ -25333,6 +25367,17 @@ ImgOps | https://imgops.com/#b#`;
2533325367 type: 'textarea',
2533425368 "default": prefs.gallery.formatConversion || ''
2533525369 },
25370+ 'gallery.aria2Host': {
25371+ label: i18n("aria2Host"),
25372+ type: 'text',
25373+ className: 'order',
25374+ "default": prefs.gallery.aria2Host || 'http://localhost:6800'
25375+ },
25376+ 'gallery.aria2Token': {
25377+ label: i18n("aria2Token"),
25378+ type: 'text',
25379+ "default": prefs.gallery.aria2Token || ''
25380+ },
2533625381 'gallery.scaleSmallSize': {
2533725382 label: i18n("galleryScaleSmallSize1"),
2533825383 type: 'int',
0 commit comments