From 9ed2473994a3733e57bc5e75e0ec05fee7fa3934 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 13:24:48 +0800 Subject: [PATCH 001/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 67 ++++++++++++++--------------- 1 file changed, 32 insertions(+), 35 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index babf1bf5510..1273e992e54 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.10.1 +// @version 2023.10.11.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11665,7 +11665,8 @@ WhatAnime | https://trace.moe/?url=#t# Ascii2D | https://ascii2d.net/search/url/#t# Trace Moe | https://trace.moe/?url=#t# KarmaDecay | http://karmadecay.com/#t# -ZXing QRCode | https://zxing.org/w/decode?full=true&u=#t# +ZXing QRCode decode | https://zxing.org/w/decode?full=true&u=#t# +QRCode | https://hoothin.com/qrcode/##t# ImgOps | https://imgops.com/#b#`; var _GM_openInTab,_GM_setClipboard,_GM_xmlhttpRequest,_GM_registerMenuCommand,_GM_notification,GM_fetch; @@ -12115,7 +12116,7 @@ ImgOps | https://imgops.com/#b#`; gallery:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAP1BMVEUAAAD///94eHgZGRn39/fz8/POzs6xsbGSkpJ9fX1UVFQpKSnb29vJycmmpqafn5+UlJSNjY0/Pz8hISENDQ2fWpEMAAAAcUlEQVQoz43SWQrEIBRE0Xe7M8/T/tcaNSKCKUh95nCDiIaYYa9zUDQRiiaCalANqkE0n6BuBLArWBTUAsa2/3yqfwYdzAl+GeCWAN9YM7nvo4chgoXmgjP8CdoEvqmA/oCQRHgat2p7YM2gvHb9GMRu7acCGLmlyNoAAAAASUVORK5CYII=', search:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAXVBMVEUAAAD///+MjIwmJibNzc2UlJTd3d2lpaUKCgrT09O/v78YGBjj4+MvLy8PDw/IyMh5eXn5+fn29vby8vLo6OjDw8O7u7u3t7ewsLCcnJx1dXVubm4+Pj43NzdkZGStc/JSAAAA4ElEQVQoz52RWW7DMAxE9bR635fYcXr/Y5aW7TYIGqDI/EjUAzRDUvFGCvWn/gHMOnmfNeYFJLonqnPVM8hrIA3B7of5BXkK47bXWwbe/ACp3OWqwSYnaI73+zStSST6AKYjE/sbQCZkpi0j0HSlUl/gPdwleM8SgSfIRzd8laRkcl0oIihYIkiVqhnl6hgicPRGrMHW0Ej4gXCYt8xiPoIw6TtANL8CVtpanSu1xvARJHYnpxpIq6tzU8D8UKIywHCNZCcpUDuXteDL57HngVMhf1nUQ9uisG47y492/kbfyJQHZ5yu1AMAAAAASUVORK5CYII=', download:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAASFBMVEUAAAD///86Ojq8vLxXV1ciIiKcnJympqZjY2MxMTHc3NywsLBDQ0NPT08VFRV5eXn39/fw8PDZ2dnV1dXKysqUlJTl5eUNDQ1EnTQhAAAAtUlEQVQoz33QWRKDIBAE0Gl2AXFP7n/TDKIEk5j+wKp+ZQ0D4SYE+pkDkrMe3rr0ATEYpUkrE+IFouyppJexgRR6IQQAPodlAqeAMyRoByIyjo8DrGpA2Td43YD2FfJHokR2hOsf8uy1v87oZOnrjHorFu7rreoexKLzhiFlqJsPxJL7dcZagWU532oG0ABNzj7y6wpwVAOgJ8AztgyhhTRyM0TsUQ0MuRi3AqaBayp85T/c5AVMKwUv6mnXTQAAAABJRU5ErkJggg==', - downloadSvgBtn:'', + downloadSvgBtn:'Download', retry:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzIyMjhBQTUzNjdDMTFFMkI3QThBNTAwQUMxRDJGREMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzIyMjhBQTYzNjdDMTFFMkI3QThBNTAwQUMxRDJGREMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozMjIyOEFBMzM2N0MxMUUyQjdBOEE1MDBBQzFEMkZEQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozMjIyOEFBNDM2N0MxMUUyQjdBOEE1MDBBQzFEMkZEQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pj9mTMsAAALCSURBVHjadFJLSFRhFD73v4+5d+4dmgkkEcxFOOo4OQ90FgVJ2lhihFk5ozWKGxeBBEWFmA/GzFVFu1xFRrVrHbiJaGVqCDUZEdKAi1mkQjWv++r817kXW/hfzv1f53zfOf93mNraWjhoMIQBQsiiaZjXDcP4s/8um81aMzHh4I/neJBlOSUr8meWY9tpgH1nD2KtbcPBEjYmCMIbSZR+u91u0+PxAFqdoijveIF/yDCMsC8eONM07XQFZJyS3NK4y+UiCAIcxwHP83vALEv3N/N/813FYjGBRxkHAOsEURSfSpI0IrtlQCYrANkcJgpI96FwqO5K/2WPk4H147gOTHlEkRXgeA7CkTAkBxLgb/BD34VLQFisFImSA0lIDibeY8iGA0BRa2pqZstq2XJsamqEqZnJt3g3fepE+7LiUUzfYR/cun0LotHIdFskli6Xy7C1tVUBQKlUXW2lZaiqCr19vatt0Vh3qVSy0g4EAzCTntmtrj7SH2mJLmmqBva72RmwxUJRwPotAJ/Pd6dULIGu66ARDR4/efQJ73pbmkNZerZfAUvGtfVVQIkAGwU0TYMHc/M56khZKCAGnww2Hs/qmi4h2ShmOopzwgEIBcN6vb9epcEUZHNzc9ZqFQQwdAOa6gMFeo4NdVd0iQuiJC6g/5gDQNnOdZ9dozN90EK+cBFVWQAGDlVqFVDSCWS+hz1C5YaxG2P5/wDiXfHJM/FOR2+UdBSbaRfXPwWXUELW+9gbLO2NnvM90NF5Ou08Ik2zuSG4tLq+slhVVTX06uVrwCDA3qdlHKVZ0UBqV68NQmo49Qz9P+Ryub0O9vq8QBgC335sCLifynzJjC8+f0FWPq4A1Ztm1NrWCkPDKSPQHJhHn7T/WEN5+9d2BcDr3VtUmL5+z8RwO4EWR5PQCmhLaHP4oMu2Qjs7O1bcPwEGAErKEckpB5KiAAAAAElFTkSuQmCC', loading:'data:image/gif;base64,R0lGODlhGAAYALMPACgoKOnp6cnJyaamppmZmVhYWGdnZ3d3d4aGhgEBAdnZ2UNDQ/b29r29vbGxsf///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU5MTZGNDMxQ0E4MTFFMkE1Q0NEMTFGODU0MkUzNzUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU5MTZGNDQxQ0E4MTFFMkE1Q0NEMTFGODU0MkUzNzUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBRTkxNkY0MTFDQTgxMUUyQTVDQ0QxMUY4NTQyRTM3NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBRTkxNkY0MjFDQTgxMUUyQTVDQ0QxMUY4NTQyRTM3NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUFAA8ALAAAAAAYABgAAATMMMlJq710GQQAMgBmLYMSKMuirMQiSocZnOlqH68h06qtFJhPomASEDoEwQpYMFQWM2fhEJoADkyBwDVxMBgBp6igVBAm0C8D8YqtBFWDWlHFABo2MQLMGLwkCFoCbAkAKQt1IoaLEh2Of4WOVQUDBANiL4ENAjgJJAOViRYADoJAhZagpxgGgg11BqAtLwWbgxQABLMaiQAGLrUNXGguJA4EVB4DDQ7AmE8DDtIDHQ4N18200dIO1dfMq3YI0dSkDQMckI1NHb+i6vARACH5BAUFAA8ALAAAAAABAAEAAAQC8EUAIfkEBQUADwAsAQABABYAFgAABJbwySkPoYtq6gILEzhsmsd8YQCS4YlK6roVmeEpY0gdE0AQNQRLolBMDoMBcEiUjHzJQYFJUSwW0QtVQCkoBwbqg1A0PgBo8SSj3mRqjjhPLVAI444cs1EOD/BhQwdlXA8HcXpDdQpaD0lMcw8ChRJTEg4NiQ4CDZYsmA0NDhINk5yeG6ANE6WTq0MZmKMPpa9tcweoFBEAIfkEBQUADwAsAAAAAAEAAQAABALwRQAh+QQFBQAPACwBAAEAFQAVAAAEgvDJ+cAykhzKJzjEQABPwARONxXhIJImc6rP0r6lfGKqLfIDxe7Bk7gki0IHgSlKHI4BjRMIGKGpqaRqfWC1FK4BuwGbz+gOqfFgmwkKhaRBPws4dPdZ3m5ktXwUWUoqhHEdBQ0CDggZDYGFigICbgJxCncqBpKUEpZxAk4dipWYHREAIfkEBQUADwAsAAAAAAEAAQAABALwRQAh+QQFBQAPACwBAAEAFgAWAAAEn/DJKcs0C9A9FxrO8ADEQBzcBjrhWA6mlT5rS8Lmwhky+KAPQ4mgeyA6LFmqUAwEZIhGw6FMGQIMBkXaMMwkiKz2UeCKvhKFGNUAoyUDBpbwrkuK9oXuIGgIjnYTBQKEDnZOARJ+hEAzCIgPOgiEDVUzTmcPUjKNE4AzMgIKbRMCDwoSBp2lCq2mC6hpaKKukbF2BKICerFEdQsGgJ8cEQAh+QQFBQAPACwAAAAAAQABAAAEAvBFACH5BAUFAA8ALAEAAQAWABYAAASU8Mk5zyw0a9ecHM6AABrFNd3nrEMpFWf6gKz7eq10gPmCTaiJwbYgEEgSgaBhkxQHA8ujoRQ0HwUolFT1XAnagoV6lRgG4GE5A2hTkGuKQvEglAeMAMM+VzCvCgyCUn1lgnkTc1ZNBnoMXg9KV0ONARRqDwoBAnYSmg+YJXQBAXQSpJahGZ+lE6imTXQKSK1rcGYuEQAh+QQFBQAPACwAAAAAAQABAAAEAvBFACH5BAUFAA8ALAEAAQAWABYAAASV8MlJ5amYkiaadI3zLJlkcEL3NaxYPqj6gO0rcQ5ChUWWSj2MYTIYkB4EhUJgkwwcOYlAqbjYoK4H1dOcQaVMQvfgeEpIx25lwVY/APCHTqs2DAiD4YTZxBdJfHI2BUV3AEgSCk0LflYkihJzGYwEhxV6FAMPDAFnQRRDnWcPAQymohlWoiSlpg9WJZqdrAwPml1pTREAIfkEBQUADwAsAAAAAAEAAQAABALwRQAh+QQFBQAPACwBAAEAFgAWAAAEi/DJKQ2iOFOhhGxCo2Gc0n1C2hjjU54PqBbZMXGihDjhxE6mloT2cDgAGIVQ4mjkHsplxdlwPH5SyYAqMUWzVpsEmS2bywfHwGoIuL9Co4OmcAek8sHEnV1bgVeBGQULWnoUPwEMCocGBAMEhS2KDAx3AI8DkJIalJYPmJqbcYqXjwQGZEsHBEOcGBEAIfkEBQUADwAsAAAAAAEAAQAABALwRQAh+QQFBQAPACwBAAEAFgAWAAAEk/DJSSUyNc+hnlqPoAiENh2dlIrKaKrTF7auhnlhKTV1YUuHTPBRaDRAj0Eg8JoUBQLKktkMQRuSabTqgEYR1KpF0NhKkOK0mhFgDNSOR5BBTw+MWAmdUTXgN3QBNy8ORghSZz4Vgw5xJ2cEAwQ3BwMOby8LkQOSAEmNly8Fm5yelo0DihoAB5EEppdDVQALN4MZEQAh+QQFBQAPACwAAAAAAQABAAAEAvBFADs=', @@ -15038,7 +15039,6 @@ ImgOps | https://imgops.com/#b#`; var topP=document.createElement('p'); topP.className="pv-top-banner"; topP.innerHTML=createHTML(img.naturalWidth+' x '+img.naturalHeight); - topP.title=img.src; var checkBox=document.createElement('input'); checkBox.type="checkbox"; let self=this; @@ -15823,7 +15823,7 @@ ImgOps | https://imgops.com/#b#`; if (title.indexOf('http') === 0 || title.indexOf('data') === 0) title = ''; else title += '\n'; } - spanMark.title = title + item.src.slice(0, 200); + spanMark.title = title + item.src.length > 150 ? item.src.slice(0, 110) + " ... " + item.src.slice(-30) : item.src; spanMark.innerHTML=createHTML('' + ''); }catch(e){}; @@ -16663,7 +16663,6 @@ ImgOps | https://imgops.com/#b#`; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - let node=document.createElement("IMG"); node.src=match[1]; total.push(node); } @@ -16672,7 +16671,6 @@ ImgOps | https://imgops.com/#b#`; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - let node=document.createElement("IMG"); node.src=match[1]; total.push(node); } @@ -16763,7 +16761,7 @@ ImgOps | https://imgops.com/#b#`; var arr=[]; for (i = 0; i < nodes.length; ++i) { if(unsafeWindow.getComputedStyle(nodes[i]).display=="none")arr.push(""); - else arr.push('
'); + else arr.push('

'); } var title = document.title; @@ -16777,7 +16775,7 @@ ImgOps | https://imgops.com/#b#`; .toTop>span{height:28px;line-height:28px;display:block;color:#FFF;text-align:center;font-size:20px;}\ .grid{-moz-column-count:4;-webkit-column-count:4;column-count:4;-moz-column-gap: 1em;-webkit-column-gap: 1em;column-gap: 1em;}\ .grid>div{padding: 1em;margin: 0 0 1em 0;-moz-page-break-inside: avoid;-webkit-column-break-inside: avoid;break-inside: avoid;}\ - .grid>div>img{width: 100%;margin-bottom:10px;}\ + .grid>div>img{width: 100%;}\ .list>div {text-align:center;}\ .list>div>img { max-width: 100%; }\ .gridBig{margin: 0px;}\ @@ -16785,8 +16783,9 @@ ImgOps | https://imgops.com/#b#`; .gridBig>div>img { max-width: 100%; }\ .select{opacity: 0.8;border: 5px solid red!important;}\ body>div{border: 5px solid black;margin: 1px;}\ - body>div:hover{border: 5px solid #dbdbdb;}\ - body>div{position:relative;}\ + body>div:hover{border: 5px solid #dbdbdb; background: #80808060;}\ + body>div{position: relative; cursor: pointer}\ + body>div>p{position: absolute; margin: 0; background: #ffffff80; top: 0;}\ \ \ \ @@ -16807,12 +16806,13 @@ ImgOps | https://imgops.com/#b#`; });\ var bigImg=document.querySelector("#bigImg"),body=document.body;\ [].forEach.call(document.querySelectorAll("div>img"),function(i){\ - i.onerror=function(e){i.style.display="none";i.parentNode.style.cursor="pointer";i.parentNode.title="reload"};\ - i.onload=function(e){i.style.display="";i.parentNode.style.cursor="pointer";i.parentNode.title=""};\ + if(i.naturalWidth&&i.naturalHeight)i.nextElementSibling.innerText=i.naturalWidth+" x "+i.naturalHeight;\ + i.onerror=function(e){i.style.display="none";i.parentNode.title="Reload"};\ + i.onload=function(e){i.style.display="";i.parentNode.title="";if(i.naturalWidth&&i.naturalHeight)i.nextElementSibling.innerText=i.naturalWidth+" x "+i.naturalHeight};\ i.onmouseover=i.onmousemove=function(e){bigImg.style.top=(this.width/this.height>body.clientWidth/body.clientHeight?10+(body.clientHeight*0.95-body.clientWidth*this.height/this.width)*e.offsetY/this.height:10-(body.clientWidth*this.height/this.width-body.clientHeight*0.95)*e.offsetY/this.height);bigImg.src=e.ctrlKey?this.src:"";bigImg.style.display=e.ctrlKey?"":"none";};\ });\ [].forEach.call(document.querySelectorAll("body>div"),function(i){\ - i.onclick=function(e){if(i.firstChild.style.display=="none"){i.firstChild.src=i.firstChild.src;return;}if(e.ctrlKey&&i.firstChild.src){window.open(i.firstChild.src,"_blank")}else{this.classList.toggle("select")}}\ + i.onclick=function(e){if(i.firstChild.style.display=="none"){i.firstChild.style.display="";i.firstChild.src=i.firstChild.src;return;}if(e.ctrlKey&&i.firstChild.src){window.open(i.firstChild.src,"_blank")}else{this.classList.toggle("select")}}\ });\ '; _GM_openInTab('data:text/html;charset=utf-8,' + encodeURIComponent(html),{active:true}); @@ -17591,7 +17591,7 @@ ImgOps | https://imgops.com/#b#`; max-height: 40%;\ font-size: 18px;\ text-align: center;\ - background: #000;\ + background: #00000080;\ color: #fff;\ left: 0;\ user-select: none;\ @@ -17617,7 +17617,7 @@ ImgOps | https://imgops.com/#b#`; height: 25px;\ }\ .pv-gallery-maximize-container span:hover>p{\ - opacity: 0.6;\ + opacity: 1;\ }\ .pv-gallery-maximize-container span>p.pv-bottom-banner:hover{\ color:red;\ @@ -18517,7 +18517,7 @@ ImgOps | https://imgops.com/#b#`; this.addStyle(); var img=this.img; - img.className='pv-pic-window-pic pv-pic-ignored transition-transform'; + img.className='pv-pic-window-pic pv-pic-ignored'; img.style.cssText='\ top:0px;\ left:0px;\ @@ -18540,7 +18540,7 @@ ImgOps | https://imgops.com/#b#`; '; container.className='pv-pic-window-container'; container.innerHTML=createHTML( - ''+ + ''+ ''+ ''+ ''+ @@ -19969,24 +19969,11 @@ ImgOps | https://imgops.com/#b#`; img.parentNode.style[support.cssTransform] = ' rotate(' + radians + 'rad) ' + iTransform; } else { img.parentNode.classList.remove("transition-transform"); - if(Math.abs(self.rotatedRadians-radians)==1.5*PI){ - //img.style[support.cssTransform] = ' rotate('+ (self.rotatedRadians{ - //img.classList.add("transition-all"); - //img.classList.add("transition-transform"); - //},0); - }else{ - //img.classList.add("transition-all"); - img.parentNode.style[support.cssTransform] = ' rotate('+ radians +'rad) ' + iTransform;//旋转图片 - } + img.parentNode.style[support.cssTransform] = ' rotate('+ radians +'rad) ' + iTransform; setTimeout(()=>{ img.parentNode.classList.add("transition-transform"); },0); } - //setTimeout(()=>{ - //img.classList.remove("transition-all"); - //},300); self.rotateIPointer.style[support.cssTransform]='rotate('+ radians +'rad)';//旋转指示器 self.rotatedRadians=radians; @@ -20038,10 +20025,10 @@ ImgOps | https://imgops.com/#b#`; self.rotateIndicator.style.display='none'; document.removeEventListener('mousemove',moveHandler,true); document.removeEventListener('mouseup',mouseupHandler,true); - self.img.classList.add("transition-transform"); + self.img.parentNode.classList.add("transition-transform"); }; - self.img.classList.remove("transition-transform"); + self.img.parentNode.classList.remove("transition-transform"); document.addEventListener('mousemove',moveHandler,true); document.addEventListener('mouseup',mouseupHandler,true); }, @@ -21943,7 +21930,17 @@ ImgOps | https://imgops.com/#b#`; imgSrc = img.currentSrc||img.dataset.lazySrc||img.src, // img 节点的 src xhr, description; // 图片的注释 - var imgCStyle=unsafeWindow.getComputedStyle(img); + var imgCStyle = unsafeWindow.getComputedStyle(img); + if (!/IMG/i.test(img.nodeName) && imgCStyle) { + let sh = imgCStyle.height, sw = imgCStyle.width; + if (imgCStyle.backgroundRepeatX == "repeat") { + sw = 10; + } + if (imgCStyle.backgroundRepeatY == "repeat") { + sh = 10; + } + imgCStyle = {height:sh, width:sw}; + } var imgCS={ h: parseFloat(imgCStyle.height)||img.height||img.offsetHeight, w: parseFloat(imgCStyle.width)||img.width||img.offsetWidth, From 096a4f6eaa171c639be70f4f3442ac7bf2470a76 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 17:17:07 +0800 Subject: [PATCH 002/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 83 +++++++++++++++-------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 1273e992e54..f8245be0a90 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.11.1 +// @version 2023.10.11.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -12057,15 +12057,16 @@ ImgOps | https://imgops.com/#b#`; debug: false, customLang:'auto', customRules:`[ -// { -// name: "Example, can be safely deleted", -// url: /https?:\\/\\/www.google(\\.\\w{1,3}){1,3}\\/search\\?.*/, -// getImage: function(a) { -// }, -// src: /avatar/i, -// r: /\\?.*$/i, -// s: '' -// } +/* + { + name: "Example, can be deleted safely", + url: /https?:\\/\\/www\\.google\\.com\\/search\\?.*$/, + getImage: function(a) {}, + src: /avatar/i, + r: /\\?.*$/i, + s: '' + } +*/ ]`, firstEngine:"Tineye" }; @@ -15034,7 +15035,6 @@ ImgOps | https://imgops.com/#b#`; dlSpan.className="pv-bottom-banner"; dlSpan.innerHTML=createHTML(prefs.icons.downloadSvgBtn+' '+i18n("download")); dlSpan.src=curNode.dataset.src; - dlSpan.title=curNode.title||document.title; dlSpan.onclick=clickCb; var topP=document.createElement('p'); topP.className="pv-top-banner"; @@ -16781,9 +16781,11 @@ ImgOps | https://imgops.com/#b#`; .gridBig{margin: 0px;}\ .gridBig>div { float: left;margin: 0px 0px 1px 1px;}\ .gridBig>div>img { max-width: 100%; }\ - .select{opacity: 0.8;border: 5px solid red!important;}\ - body>div{border: 5px solid black;margin: 1px;}\ - body>div:hover{border: 5px solid #dbdbdb; background: #80808060;}\ + .select{border: 5px solid red!important;}\ + body>div{border: 5px solid black;margin: 1px; overflow: hidden;}\ + .select>img{transform: scale3d(1.1, 1.1, 1.1);}\ + body>div>img{transition: transform .3s ease 0s;}\ + body>div:hover{border: 5px solid #dbdbdb; background: #80808020;}\ body>div{position: relative; cursor: pointer}\ body>div>p{position: absolute; margin: 0; background: #ffffff80; top: 0;}\ \ @@ -22060,45 +22062,44 @@ ImgOps | https://imgops.com/#b#`; MatchedRuleC.prototype={ init:function(){ - if(!isunsafe()){ - try{ - if(unsafeWindow.pvcepRules && Array.isArray(unsafeWindow.pvcepRules)){ - unsafeWindow.pvcepRules.forEach(rule=>{ - let hasRule = false; - for(let s in siteInfo){ - if(siteInfo[s].name == rule.name){ - hasRule = true; - for(let si in rule){ - siteInfo[s][si]=rule[si]; - } - break; - } - } - if(!hasRule)siteInfo.unshift(rule); - }) - } - var customRules=unsafeWindow.eval(createScript(prefs.customRules)); - if(Array.isArray(customRules)){ - customRules.forEach(rule=>{ + if (prefs.customRules && !isunsafe()) { + try { + var customRules = unsafeWindow.eval(createScript(prefs.customRules)); + if (Array.isArray(customRules)) { + customRules.forEach(rule => { let hasRule = false; - for(let s in siteInfo){ - if(siteInfo[s].name == rule.name){ + for (let s in siteInfo) { + if (siteInfo[s].name == rule.name) { hasRule = true; - for(let si in rule){ - siteInfo[s][si]=rule[si]; + for (let si in rule) { + siteInfo[s][si] = rule[si]; } break; } } - if(!hasRule)siteInfo.unshift(rule); + if (!hasRule) siteInfo.unshift(rule); }) - //siteInfo=customRules.concat(siteInfo); } - }catch(e){ + } catch(e) { console.log("Wrong rule for Picviewer CE+"); console.log(e); } } + if (unsafeWindow.pvcepRules && Array.isArray(unsafeWindow.pvcepRules)) { + unsafeWindow.pvcepRules.forEach(rule => { + let hasRule = false; + for (let s in siteInfo) { + if (siteInfo[s].name == rule.name) { + hasRule = true; + for (let si in rule) { + siteInfo[s][si] = rule[si]; + } + break; + } + } + if (!hasRule) siteInfo.unshift(rule); + }) + } var self=this,r=0; self.rules=[]; From 1ae315985b9a7f4df7f4015d620d4b334cbf0f06 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 17:24:17 +0800 Subject: [PATCH 003/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index f8245be0a90..176d7a83e8e 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -15035,6 +15035,7 @@ ImgOps | https://imgops.com/#b#`; dlSpan.className="pv-bottom-banner"; dlSpan.innerHTML=createHTML(prefs.icons.downloadSvgBtn+' '+i18n("download")); dlSpan.src=curNode.dataset.src; + dlSpan.title=curNode.title||document.title; dlSpan.onclick=clickCb; var topP=document.createElement('p'); topP.className="pv-top-banner"; @@ -15134,7 +15135,6 @@ ImgOps | https://imgops.com/#b#`; } }); }); - imgSpan.title=curNode.title; let curSrc=curNode.dataset.src; let defaultDl=()=>{ if(img.width>=88 && img.height>=88){ @@ -17583,7 +17583,7 @@ ImgOps | https://imgops.com/#b#`; transform: scale3d(1, 1, 1);\ cursor: zoom-in;\ }\ - .pv-gallery-maximize-container img:hover {\ + .pv-gallery-maximize-container>.maximizeChild:hover img {\ transform: scale3d(1.1, 1.1, 1.1);\ filter: brightness(1.1) !important;\ }\ From f34dbc2ed72d035bda9f57b9972f4ab809826df2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 17:36:47 +0800 Subject: [PATCH 004/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 176d7a83e8e..346ab205154 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -15056,6 +15056,10 @@ ImgOps | https://imgops.com/#b#`; } e.stopPropagation(); }; + topP.onclick=function(e){ + e.stopPropagation(); + checkBox.click(); + }; imgSpan.appendChild(topP); imgSpan.appendChild(checkBox); imgSpan.appendChild(dlSpan); @@ -17617,6 +17621,7 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-maximize-container span>p.pv-top-banner{\ top: 0;\ height: 25px;\ + cursor: pointer;\ }\ .pv-gallery-maximize-container span:hover>p{\ opacity: 1;\ @@ -17633,6 +17638,7 @@ ImgOps | https://imgops.com/#b#`; opacity: 0;\ left: 0;\ display: inline;\ + cursor: pointer;\ }\ .pv-gallery-maximize-container.checked span>input{\ opacity: 1;\ From 10903bc90eb5443c53f8f75b27e19ea14b678b9a Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 17:42:26 +0800 Subject: [PATCH 005/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 346ab205154..5a725891992 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -15141,13 +15141,11 @@ ImgOps | https://imgops.com/#b#`; }); let curSrc=curNode.dataset.src; let defaultDl=()=>{ - if(img.width>=88 && img.height>=88){ - self.addDlSpan(img, imgSpan, curNode, e=>{ - e.stopPropagation(); - _GM_download(curNode.dataset.src, curNode.title, prefs.saveName); - return true; - }); - } + self.addDlSpan(img, imgSpan, curNode, e=>{ + e.stopPropagation(); + _GM_download(curNode.dataset.src, curNode.title, prefs.saveName); + return true; + }); }; if(curSrc.indexOf("data")===0){ defaultDl(); @@ -17586,6 +17584,7 @@ ImgOps | https://imgops.com/#b#`; transition: transform .3s ease 0s;\ transform: scale3d(1, 1, 1);\ cursor: zoom-in;\ + min-height: 88px;\ }\ .pv-gallery-maximize-container>.maximizeChild:hover img {\ transform: scale3d(1.1, 1.1, 1.1);\ From d844bbfb2deabd668e4290e38e1cd83d4acdf23e Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 17:48:10 +0800 Subject: [PATCH 006/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 5a725891992..12a1636f9b7 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -21938,7 +21938,7 @@ ImgOps | https://imgops.com/#b#`; xhr, description; // 图片的注释 var imgCStyle = unsafeWindow.getComputedStyle(img); - if (!/IMG/i.test(img.nodeName) && imgCStyle) { + if (!/(IMG|SVG)/i.test(img.nodeName) && imgCStyle) { let sh = imgCStyle.height, sw = imgCStyle.width; if (imgCStyle.backgroundRepeatX == "repeat") { sw = 10; From 0868000c50c2785b69c6f280489f13665b6d0db3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 17:51:03 +0800 Subject: [PATCH 007/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 12a1636f9b7..0cfba769103 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -21938,7 +21938,7 @@ ImgOps | https://imgops.com/#b#`; xhr, description; // 图片的注释 var imgCStyle = unsafeWindow.getComputedStyle(img); - if (!/(IMG|SVG)/i.test(img.nodeName) && imgCStyle) { + if (!/IMG/i.test(img.nodeName) && imgCStyle && imgCStyle.backgroundImage && imgCStyle.backgroundImage != "none") { let sh = imgCStyle.height, sw = imgCStyle.width; if (imgCStyle.backgroundRepeatX == "repeat") { sw = 10; From a85d1f3daac85205110d93727d783e9babf9069f Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 17:58:07 +0800 Subject: [PATCH 008/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 0cfba769103..32abf0f6829 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -16680,7 +16680,7 @@ ImgOps | https://imgops.com/#b#`; } return total; }, []); - if(bgImgs)imgs=imgs.concat(bgImgs); + if(bgImgs)imgs=imgs.concat(bgImgs.reverse()); var svgImgs=Array.from(getBody(document).querySelectorAll('svg')).reduceRight((total, svg) => { if (svg.clientHeight != 0 && (!svg.classList || !svg.classList.contains("pagetual"))) { try { @@ -16692,7 +16692,7 @@ ImgOps | https://imgops.com/#b#`; } return total; }, []); - if(svgImgs)imgs=imgs.concat(svgImgs); + if(svgImgs)imgs=imgs.concat(svgImgs.reverse()); var canvasImgs=Array.from(getBody(document).querySelectorAll('canvas')).reduceRight((total, canvas) => { if (canvas.clientHeight != 0) { try { @@ -16709,7 +16709,7 @@ ImgOps | https://imgops.com/#b#`; } return total; }, []); - if(canvasImgs)imgs=imgs.concat(canvasImgs); + if(canvasImgs)imgs=imgs.concat(canvasImgs.reverse()); // 排除库里面的图片 imgs = imgs.filter(function(img){ if (img.parentNode) { From 542de01943aad73040cc85d4bedf653d812fd794 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 21:14:34 +0800 Subject: [PATCH 009/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 32abf0f6829..3ac3b1cb59a 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -13337,6 +13337,8 @@ ImgOps | https://imgops.com/#b#`; container.querySelector("#minsizeH").value=minsizeH; self.changeMinView(); }; + var sizeInputH=container.querySelector("#minsizeH"); + var sizeInputW=container.querySelector("#minsizeW"); container.querySelector(".pv-gallery-head-left-lock-icon").onclick=function(){ if(self.lockMaxSize){ self.lockMaxSize=null; @@ -13344,9 +13346,9 @@ ImgOps | https://imgops.com/#b#`; this.style.filter=""; this.title=i18n("lockSizeTip"); }else{ - var maxsizeW=window.prompt("Width:"); + var maxsizeW=window.prompt("Max Width:", sizeInputW.max); if(!maxsizeW)return; - var maxsizeH=window.prompt("Height:"); + var maxsizeH=window.prompt("Max Height:", sizeInputH.max); if(!maxsizeH)return; self.lockMaxSize={w:maxsizeW,h:maxsizeH}; self.changeMinView(); @@ -14023,17 +14025,18 @@ ImgOps | https://imgops.com/#b#`; }); break; case 'urlFilter': - if(self.urlFilter){ - self.urlFilter=""; - target.style.color=""; - target.title=i18n("urlFilterTip"); - self.changeMinView(); - }else{ - let regStr=prompt(i18n("urlFilterTip")); - if(regStr){ - self.urlFilter=regStr; - target.style.color="#e9cccc"; - target.title=regStr; + { + let filterStr = prompt(i18n("urlFilterTip"), self.urlFilter || "") || ""; + if (filterStr != self.urlFilter) { + self.urlFilter = filterStr; + if (self.urlFilter) { + target.style.color = "#e9cccc"; + target.title = self.urlFilter; + self.changeMinView(); + } else { + target.style.color = ""; + target.title = i18n("urlFilterTip"); + } self.changeMinView(); } } From 7ca0d145d2a3350859d8343480de6b56bdd23ffa Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 21:30:09 +0800 Subject: [PATCH 010/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 3ac3b1cb59a..84512842e7a 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -11665,7 +11665,7 @@ WhatAnime | https://trace.moe/?url=#t# Ascii2D | https://ascii2d.net/search/url/#t# Trace Moe | https://trace.moe/?url=#t# KarmaDecay | http://karmadecay.com/#t# -ZXing QRCode decode | https://zxing.org/w/decode?full=true&u=#t# +QRCode decode | https://zxing.org/w/decode?full=true&u=#t# QRCode | https://hoothin.com/qrcode/##t# ImgOps | https://imgops.com/#b#`; From bcb8a8af6bcabd51e32a8d29ff4dd25531663bfe Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 11 Oct 2023 21:44:28 +0800 Subject: [PATCH 011/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 84512842e7a..9b0434e9fe1 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -15511,7 +15511,7 @@ ImgOps | https://imgops.com/#b#`; return; }; - if(this.img){ + if(this.img && this.img.parentNode){ this.img.parentNode.removeChild(this.img); }; @@ -16653,7 +16653,7 @@ ImgOps | https://imgops.com/#b#`; } } }); - var bgReg=/.*url\(\s*["']?(.+?)["']?\s*\)/i; + var bgReg=/.*url\(\s*["']?(.+?)["']?\s*\)([^'"]|$)/i; var bgImgs=Array.from(getBody(document).querySelectorAll('*')).reduceRight((total, node) => { if(node.nodeName.toUpperCase() != "IMG" && (!node.className || !node.className.indexOf || node.className.indexOf("pv-")==-1)){ let prop = getComputedStyle(node).backgroundImage; @@ -22590,7 +22590,7 @@ ImgOps | https://imgops.com/#b#`; } else if (target.nodeName.toUpperCase() != 'IMG') { if (target.nodeName.toUpperCase() == "AREA") target = target.parentNode; var targetBg; - var bgReg = /.*url\(\s*["']?(.+?)["']?\s*\).*/i; + var bgReg = /.*url\(\s*["']?(.+?)["']?\s*\)([^'"].*|$)/i; var broEle = target.previousElementSibling, broImg; while (broEle) { if (broEle.nodeName == "IMG") broImg = broEle; From 14d91f0f8b379ad0f8d114b451d53dd4c5f0951c Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 12 Oct 2023 09:44:27 +0800 Subject: [PATCH 012/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 29edae79dfe..34d5df1b2f4 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9690,6 +9690,16 @@ "pinUrl": true, "loadMore": ".load-more-btn>button" }, +{ + "name": "E-Katalog 5.0", + "url": "^https?://e-katalog\\.lkpp\\.go\\.id/pengumuman", + "example": "https://e-katalog.lkpp.go.id/pengumuman", + "insert": "#usulanList", + "insertPos": 2, + "wait": 500, + "pageBar": 0, + "pageElementByJs": "let url='',params=[],form=document.getElementById('form');let formData=new FormData(form);for (let [key, value] of formData) { params.push(key + '=' + encodeURIComponent(value)); } params = params.join('&');url=form.action + (form.action.indexOf('?') == -1 ? '?' : '&') + params;fetch(url.replace(/&offset=\\d+/,'')+'&offset='+(pageNum+1), { headers: {'X-Requested-With': 'XMLHttpRequest'}}).then(res=>res.json()).then(res=>{let eles=[];res.data.items.forEach(item=>{let ele=document.createElement('div');ele.innerHTML=`
\"E-Katalog

Etalase Produk : ${item.komoditas}

Tanggal Mulai: ${item.started_date_str}

Tanggal Akhir: ${item.finished_date_str||'-'}

${item.komoditas_kategori}
`;ele.className='col-sm-6 col-md-3 col-lg-3 col-md-3-custom';eles.push(ele)});over(eles) })" +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From e538652bc8b3bf32fced05972ff2150ec6c95992 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 12 Oct 2023 12:46:29 +0800 Subject: [PATCH 013/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index 253abf2079a..09ec94ea0c7 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -1299,5 +1299,11 @@ var siteInfo = [ if(saveEle) return saveEle.href; } } +}, +{ + name: "blogger", + src: /blogger\.googleusercontent\.com\/img/, + r: /\/[sw]\d+\/.*/, + s: "/s0" } ]; From b9d604ec584ba1ca4debec79b30445d4121b9726 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 12 Oct 2023 12:48:54 +0800 Subject: [PATCH 014/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 9b0434e9fe1..a3a36a5aea3 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.11.2 +// @version 2023.10.12.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -42,7 +42,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1211491 +// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1263401 // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js From dca6fc3f9942dee323a1e118068fbb58b1270cdd Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 12 Oct 2023 13:29:42 +0800 Subject: [PATCH 015/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index a8caabc7d3c..92244f1b75d 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.64 +// @version 1.9.36.65 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -54,6 +54,8 @@ // @connect hoothin.github.io // @run-at document-idle // @connect * +// @contributionURL https://ko-fi.com/hoothin +// @contributionAmount 1 // ==/UserScript== (function() { @@ -3225,7 +3227,7 @@ } else { this.addedElePool.push(ele); } - if (this.curSiteRule.insertPos == 2) { + if (this.curSiteRule.insertPos == 2 || this.curSiteRule.insertPos == "in") { this.insert.appendChild(ele); } else { this.insert.parentNode.insertBefore(ele, this.insert); @@ -6624,7 +6626,7 @@ } if (rulesData.opacity == 0 || ruleParser.curSiteRule.pageBar === 0) return null; url = url.replace(/#p{.*/, ""); - let example = ruleParser.curSiteRule.insertPos == 2 ? insert.children[0] : (insert.parentNode.children[0] || insert); + let example = (ruleParser.curSiteRule.insertPos == 2 || ruleParser.curSiteRule.insertPos == "in") ? insert.children[0] : (insert.parentNode.children[0] || insert); while (example && (/^(SCRIPT|STYLE)$/i.test(example.nodeName) || example.className == "pagetual_pageBar")) { example = example.nextElementSibling; } @@ -7753,7 +7755,6 @@ sideController.setup(); /*if (curPage == 1) { window.postMessage({ - insert: geneSelector(ruleParser.curSiteRule.insertPos == 2 ? insert : insert.parentNode, true), command: 'pagetual.insert' }, '*'); }*/ From fa2129d593f7178d2ab8c43c86f8c7cafbccfd1c Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 12 Oct 2023 13:30:08 +0800 Subject: [PATCH 016/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index c24f70afe50..4ed8194e46f 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.64](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.65](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From 61b1b37df9660fbeea6f13da3b2dde8cf88587b0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 12 Oct 2023 20:50:58 +0800 Subject: [PATCH 017/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 35 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index a3a36a5aea3..8c9c4336a8b 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.12.1 +// @version 2023.10.12.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -12060,7 +12060,7 @@ ImgOps | https://imgops.com/#b#`; /* { name: "Example, can be deleted safely", - url: /https?:\\/\\/www\\.google\\.com\\/search\\?.*$/, + url: /^https?:\\/\\/www\\.google\\.com\\/search\\?/, getImage: function(a) {}, src: /avatar/i, r: /\\?.*$/i, @@ -14062,7 +14062,7 @@ ImgOps | https://imgops.com/#b#`; var btn = document.getElementById("pv-gallery-fullscreenbtn"); if (btn) { btn.textContent = i18n("enterFullsc"); - btn.removeClass('fullscreenbtn'); + btn.classList.remove('fullscreenbtn'); } } } @@ -15079,7 +15079,7 @@ ImgOps | https://imgops.com/#b#`; if (nodeStyle.display == "none") imgSpan.style.display = "none"; let popupImgWin = (i) => { let imgwin=new ImgWindowC(i); - self.selectViewmore(imgSpan, curNode.dataset.src); + self.selectViewmore(imgSpan, curNode.dataset.thumbSrc || curNode.dataset.src); if(prefs.imgWindow.overlayer.shown){ imgwin.blur(true); self.curImgWin=imgwin; @@ -15102,7 +15102,7 @@ ImgOps | https://imgops.com/#b#`; let imgwin=new ImgWindowC(curImgEle); imgwin.blur(true); self.curImgWin=imgwin; - self.selectViewmore(targetImgSpan, curImgEle.src); + self.selectViewmore(targetImgSpan, imgNode.src); targetImgSpan.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); setTimeout(() => {targetImgSpan.scrollIntoView({block: "center", inline: "nearest"})}, 300); self.canScroll=true; @@ -18708,17 +18708,19 @@ ImgOps | https://imgops.com/#b#`; self.following=true; self.followPos(uniqueImgWinInitX, uniqueImgWinInitY); } else { - if (!self.imgWindow.classList.contains("pv-pic-window-scroll")) { - self.zoomLevel=0; - self.zoom(1); - } - if (prefs.imgWindow.fitToScreen) { - self.fitToScreen(); + if (!self.zoomed) { + if (!self.imgWindow.classList.contains("pv-pic-window-scroll")) { + self.zoomLevel=0; + self.zoom(1); + } + if (prefs.imgWindow.fitToScreen) { + self.fitToScreen(); + } + if (self.initPos) { + self.imgWindow.style.left = self.initPos.left; + self.imgWindow.style.top = self.initPos.top; + } else self.center(true, true); } - if (self.initPos) { - self.imgWindow.style.left = self.initPos.left; - self.imgWindow.style.top = self.initPos.top; - } else self.center(true, true); } self.imgWindow.style.opacity = 1; self.keepScreenInside(); @@ -18901,7 +18903,7 @@ ImgOps | https://imgops.com/#b#`; self.remove(); }; e.preventDefault(); - e.stopPropagation(); + //e.stopPropagation(); }; container.addEventListener('dblclick',dblClickImgWindow,true); }; @@ -20760,6 +20762,7 @@ ImgOps | https://imgops.com/#b#`; }); var level=this.getNextZoomLevel(); + this.zoomed=true; this.zoom(level,ratio); this.zoomOut=oriZoomOut; From f56666d6a4b693f0f9b1d05103d163eddf9adbcc Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 12 Oct 2023 20:54:50 +0800 Subject: [PATCH 018/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 8c9c4336a8b..7cd26c10639 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -18901,9 +18901,9 @@ ImgOps | https://imgops.com/#b#`; var target=e.target; if(target==container || target==img || target.className=='pv-pic-window-center' || target==self.imgState || target==self.rotateOverlayer){ self.remove(); + e.stopPropagation(); }; e.preventDefault(); - //e.stopPropagation(); }; container.addEventListener('dblclick',dblClickImgWindow,true); }; From 28b6b2445baccac9c73ed1436678870b104a1a66 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 08:47:34 +0800 Subject: [PATCH 019/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 92244f1b75d..ec1c37caa2f 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6183,7 +6183,6 @@ function isInViewPort(element) { if (!getBody(document).contains(element)) return false; - if (_unsafeWindow.getComputedStyle(element).display == "none") return false; const viewWidth = window.innerWidth || document.documentElement.clientWidth; const viewHeight = window.innerHeight || document.documentElement.clientHeight; const { @@ -6197,7 +6196,8 @@ top >= 0 && left >= 0 && right <= viewWidth + 1 && - top <= viewHeight * (ruleParser.curSiteRule.rate || rulesData.rate || 1) + top <= viewHeight * (ruleParser.curSiteRule.rate || rulesData.rate || 1) && + isVisible(element, _unsafeWindow) ); } From 55fa64559473b94aa9bb8957faf63dd5b47bae75 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 13 Oct 2023 01:52:32 +0000 Subject: [PATCH 020/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 5919ac76de2..36c5015c6bc 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -2558,19 +2558,18 @@ "updated_at": "2022-09-07T19:46:59+09:00" }, { + "resource_url": "http://wedata.net/items/85918", "data": { - "insertBefore": "", - "pageElement": "//div[@class=\"articleDetailTxtTit\"]", - "nextLink": "//a[@class=\"articleDetailNext\"]", + "pageElement": "//div[contains(concat(' ', normalize-space(@class), ' '), ' articleDetailTxt ')]", + "nextLink": "//li[contains(concat(' ', @class, ' '), ' pager-active ')]/following-sibling::li[1]/a", "url": "^https?://cinema\\.ne\\.jp/article/", "exampleUrl": "https://cinema.ne.jp/article/detail/49610" }, - "resource_url": "http://wedata.net/items/85918", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "brib2", "name": "cinemas PLUS", "created_at": "2022-05-17T08:47:09+09:00", - "updated_at": "2022-05-17T08:47:09+09:00", - "database_resource_url": "http://wedata.net/databases/AutoPagerize" + "updated_at": "2023-10-12T20:16:36+09:00" }, { "resource_url": "http://wedata.net/items/85916", @@ -25963,7 +25962,8 @@ { "resource_url": "http://wedata.net/items/74948", "data": { - "pageElement": "//li[./div[@class='productitem']]", + "pageElement": "//ul[@data-productgrid-items]", + "comment": "ページ下部に作られる『最近閲覧した商品』を取得しないように修正", "nextLink": "//li[@class='pagination--next']/a", "url": "^https?://www\\.switch-science\\.com/", "exampleUrl": "https://www.switch-science.com/collections/marketplace" @@ -25972,7 +25972,7 @@ "created_by": "rei tanaka", "name": "スイッチサイエンス", "created_at": "2014-07-05T16:24:26+09:00", - "updated_at": "2023-10-08T06:15:28+09:00" + "updated_at": "2023-10-12T20:29:41+09:00" }, { "resource_url": "http://wedata.net/items/74947", From b102b4cfde6fd39a85bbbb066a7a3e9e5fba8bd6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 10:02:20 +0800 Subject: [PATCH 021/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 46 ++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 7cd26c10639..8475f3aba1c 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.12.2 +// @version 2023.10.13.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -13854,6 +13854,8 @@ ImgOps | https://imgops.com/#b#`; self.switchThumbVisible();//切换图片类别显隐; },true); + prefs.gallery.scrollEndAndLoad = !!storage.getItem("scrollEndAndLoad"); + eleMaps['head-command-drop-list-others'].querySelector('input[data-command="scrollToEndAndReload"]').checked = prefs.gallery.scrollEndAndLoad; var srcSplit,downloading=false; //命令下拉列表的点击处理 eleMaps['head-command-drop-list-others'].addEventListener('click',function(e){ @@ -13920,7 +13922,7 @@ ImgOps | https://imgops.com/#b#`; case 'downloadImage': if(downloading)break; downloading=true; - var nodes = document.querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); + var nodes = this.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); var saveParams = [],saveIndex=0; [].forEach.call(nodes, function(node){ if(unsafeWindow.getComputedStyle(node).display!="none"){ @@ -13958,6 +13960,7 @@ ImgOps | https://imgops.com/#b#`; } prefs.gallery.scrollEndAndLoad = checkbox.checked; + storage.setItem("scrollEndAndLoad", checkbox.checked); break; case 'fullScreen': if (target.classList.contains('fullscreenbtn')) { @@ -14479,12 +14482,21 @@ ImgOps | https://imgops.com/#b#`; eleMaps['maximize-container'].classList.add("pv-gallery-flex-maximize"); } - if(prefs.gallery.viewmoreEndless){ + if(prefs.gallery.viewmoreEndless || prefs.gallery.scrollEndAndLoad){ + var isScrolling = false; addWheelEvent(eleMaps['maximize-container'],function(e){ - if(!self.haveMorePage)return; + if (isScrolling) return; + isScrolling = true; + setTimeout(() => { + isScrolling = false; + }, 300); let scrollCon=self.eleMaps['maximize-container'].parentNode; let scrollPercent=scrollCon.scrollTop / (scrollCon.scrollHeight - scrollCon.clientHeight); if(scrollPercent>0.8){ + if (prefs.gallery.scrollEndAndLoad) { + self.scrollToEndAndReload(); + } + if(!self.haveMorePage)return; var textSpan=self.eleMaps['head-command-nextPage'].querySelector("span"); if(textSpan.innerHTML==i18n("loading")){ return; @@ -15203,7 +15215,7 @@ ImgOps | https://imgops.com/#b#`; viewmoreBar.innerHTML = createHTML('✖'); viewmoreBar.parentNode.classList.add("showmore");//.backgroundColor = "#2a2a2a"; - var nodes = document.querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); + var nodes = this.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); this.addViewmoreItem(nodes); } }, @@ -16555,9 +16567,17 @@ ImgOps | https://imgops.com/#b#`; if (this.selected.clientWidth == 0) return false; if (!span) return true; - var index = Array.prototype.slice.call(this.imgSpans).indexOf(span); + var nodes = this.eleMaps['sidebar-thumbnails-container'].children; + var imgSpans = []; + [].forEach.call(nodes, function(node){ + if(unsafeWindow.getComputedStyle(node).display!="none"){ + imgSpans.push(node); + } + }); + + var index = Array.prototype.slice.call(imgSpans).indexOf(span); if (index != -1) { - var total = this.imgSpans.length; + var total = imgSpans.length; if (total - index < prefs.gallery.scrollEndAndLoad_num) { return true; } @@ -16581,7 +16601,7 @@ ImgOps | https://imgops.com/#b#`; }; // 最后几张图片,滚到底部添加新的图片 - if (prefs.gallery.scrollEndAndLoad && this._isLastSpan(nextSpan)) { + if (nextSpan && prefs.gallery.scrollEndAndLoad && this._isLastSpan(nextSpan)) { this.scrollToEndAndReload(); } @@ -16746,8 +16766,12 @@ ImgOps | https://imgops.com/#b#`; return validImgs; }, scrollToEndAndReload: function() {// 滚动主窗口到最底部,然后自动重载库的图片 - + var des=document.documentElement.style; + des.overflow=''; window.scrollTo(0, 9999999); + setTimeout(() => { + des.overflow='hidden'; + }, 0); var self = this; clearTimeout(self.reloadTimeout); @@ -16757,7 +16781,7 @@ ImgOps | https://imgops.com/#b#`; }, 1000); }, exportImages: function () {// 导出所有图片到新窗口 - var nodes = document.querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'),i; + var nodes = this.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'),i; //var arr = Array.prototype.map.call(nodes, function(node){ // if(unsafeWindow.getComputedStyle(node).display=="none")return ""; // else return '
' @@ -16825,7 +16849,7 @@ ImgOps | https://imgops.com/#b#`; _GM_openInTab('data:text/html;charset=utf-8,' + encodeURIComponent(html),{active:true}); }, copyImages: function(isAlert) { - var nodes = document.querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); + var nodes = this.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); var urls = []; [].forEach.call(nodes, function(node){ if(unsafeWindow.getComputedStyle(node).display!="none"){ From 88f5b465c3d5b417cea76ab45098236f31efb20d Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 10:17:21 +0800 Subject: [PATCH 022/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 8475f3aba1c..ace00b3a713 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -13317,6 +13317,10 @@ ImgOps | https://imgops.com/#b#`; '
'); getBody(document).appendChild(container); + this.hideScrollStyle = document.createElement("style"); + this.hideScrollStyle.textContent = "html {-ms-overflow-style: none; scrollbar-width: none;}html::-webkit-scrollbar { width: 0 !important; height: 0 !important; }"; + this.hideScrollStyle.type = 'text/css'; + var self=this; var hideBodyStyle=document.createElement('style'); @@ -16768,9 +16772,11 @@ ImgOps | https://imgops.com/#b#`; scrollToEndAndReload: function() {// 滚动主窗口到最底部,然后自动重载库的图片 var des=document.documentElement.style; des.overflow=''; + document.head.appendChild(this.hideScrollStyle); window.scrollTo(0, 9999999); setTimeout(() => { des.overflow='hidden'; + document.head.removeChild(this.hideScrollStyle); }, 0); var self = this; From b4b89ccd363c60119a75d57248ac5dca900b5fde Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 10:28:06 +0800 Subject: [PATCH 023/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 65 ++++++++++++++++------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index ace00b3a713..eb84275dfa0 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -14493,23 +14493,23 @@ ImgOps | https://imgops.com/#b#`; isScrolling = true; setTimeout(() => { isScrolling = false; - }, 300); - let scrollCon=self.eleMaps['maximize-container'].parentNode; - let scrollPercent=scrollCon.scrollTop / (scrollCon.scrollHeight - scrollCon.clientHeight); - if(scrollPercent>0.8){ - if (prefs.gallery.scrollEndAndLoad) { - self.scrollToEndAndReload(); - } - if(!self.haveMorePage)return; - var textSpan=self.eleMaps['head-command-nextPage'].querySelector("span"); - if(textSpan.innerHTML==i18n("loading")){ - return; + let scrollCon=self.eleMaps['maximize-container'].parentNode; + let scrollPercent=scrollCon.scrollTop / (scrollCon.scrollHeight - scrollCon.clientHeight); + if(scrollPercent>0.8){ + if (prefs.gallery.scrollEndAndLoad) { + self.scrollToEndAndReload(); + } + if(!self.haveMorePage)return; + var textSpan=self.eleMaps['head-command-nextPage'].querySelector("span"); + if(textSpan.innerHTML==i18n("loading")){ + return; + } + textSpan.innerHTML=createHTML(i18n("loading")); + self.completePages=[]; + self.pageAllReady=false; + self.pageAction(true, true); } - textSpan.innerHTML=createHTML(i18n("loading")); - self.completePages=[]; - self.pageAllReady=false; - self.pageAction(true, true); - } + }, 100); }) } self.urlFilter=""; @@ -16770,21 +16770,26 @@ ImgOps | https://imgops.com/#b#`; return validImgs; }, scrollToEndAndReload: function() {// 滚动主窗口到最底部,然后自动重载库的图片 - var des=document.documentElement.style; - des.overflow=''; - document.head.appendChild(this.hideScrollStyle); - window.scrollTo(0, 9999999); - setTimeout(() => { - des.overflow='hidden'; - document.head.removeChild(this.hideScrollStyle); - }, 0); - + if (this.isScrollToEndAndReloading) return; + this.isScrollToEndAndReloading = true; var self = this; - clearTimeout(self.reloadTimeout); - self.reloadTimeout = setTimeout(function(){ - // self.reload(); - self.reloadNew(); - }, 1000); + setTimeout(() => { + self.isScrollToEndAndReloading = false; + var des=document.documentElement.style; + des.overflow=''; + document.head.appendChild(self.hideScrollStyle); + window.scrollTo(0, 9999999); + setTimeout(() => { + des.overflow='hidden'; + document.head.removeChild(self.hideScrollStyle); + }, 0); + + clearTimeout(self.reloadTimeout); + self.reloadTimeout = setTimeout(function(){ + // self.reload(); + self.reloadNew(); + }, 1000); + }, 300); }, exportImages: function () {// 导出所有图片到新窗口 var nodes = this.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'),i; From a27a4fca91c9f84b6323951b475297eb48049867 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 11:07:00 +0800 Subject: [PATCH 024/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index ec1c37caa2f..10f9cbc59ba 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.65 +// @version 1.9.36.66 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2258,16 +2258,16 @@ if (aTag.dataset && aTag.dataset.preview) continue; let ariaLabel = aTag.getAttribute("aria-label"); if (ariaLabel && /slick|slide|gallery/i.test(ariaLabel)) continue; - if (aTag.parentNode) { - if (aTag.parentNode.className && /slick|slide|gallery/i.test(aTag.parentNode.className)) continue; - if (aTag.parentNode.parentNode) { - if (/slick|slide|gallery/i.test(aTag.parentNode.parentNode.className)) continue; - if (aTag.parentNode.parentNode.parentNode && /slick|slide|gallery/i.test(aTag.parentNode.parentNode.parentNode.className)) continue; - } - if (aTag.parentNode.classList && aTag.parentNode.classList.contains('disabled')) continue; - if (aTag.parentNode.classList && aTag.parentNode.classList.contains('active')) continue; - if (/^BLOCKQUOTE$/i.test(aTag.parentNode.nodeName)) continue; + + if (aTag.parentNode.className && /slick|slide|gallery/i.test(aTag.parentNode.className)) continue; + if (aTag.parentNode.parentNode) { + if (/slick|slide|gallery/i.test(aTag.parentNode.parentNode.className)) continue; + if (aTag.parentNode.parentNode.parentNode && /slick|slide|gallery/i.test(aTag.parentNode.parentNode.parentNode.className)) continue; } + if (aTag.parentNode.classList && aTag.parentNode.classList.contains('disabled')) continue; + if (aTag.parentNode.classList && aTag.parentNode.classList.contains('active')) continue; + if (/^BLOCKQUOTE$/i.test(aTag.parentNode.nodeName)) continue; + if (aTag.previousElementSibling && /\b(play|volume)\b/.test(aTag.previousElementSibling.className)) continue; if (aTag.nextElementSibling && /\b(play|volume)\b/.test(aTag.nextElementSibling.className)) continue; let isJs = this.linkHasNoHref(aTag); @@ -2296,7 +2296,7 @@ } } if (!next3) { - if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(innerText)) { + if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(innerText) && !aTag.parentNode.getAttribute("jsaction")) { if (isJs) { if (!nextJs3) nextJs3 = aTag; } else { @@ -2395,7 +2395,7 @@ next = null; } else { let top = getElementTop(next); - if (top < 20) { + if (top < 20 || (left < window.innerWidth / 3 && top < window.innerHeight / 3)) { next = null; } else { let bottom = top + next.offsetHeight || 0; @@ -2861,7 +2861,7 @@ var doc = null; try { doc = document.implementation.createHTMLDocument(''); - doc.documentElement.innerHTML = res.response; + doc.documentElement.innerHTML = createHTML(res.response); var body = getBody(doc); if (body && body.firstChild) { self.lazyImgAction(body.children); @@ -6659,10 +6659,10 @@ } pageBar.style.cssText = pageBarStyle; pageBar.title = i18n(isPause ? "enable" : "disable"); - upSpan.innerHTML = upSvg; + upSpan.innerHTML = createHTML(upSvg); upSpan.children[0].style.cssText = upSvgCSS; upSpan.title = i18n("toTop"); - downSpan.innerHTML = downSvg; + downSpan.innerHTML = createHTML(downSvg); downSpan.children[0].style.cssText = downSvgCSS; downSpan.title = i18n("toBottom"); upSpan.style.cssText = initStyle; @@ -6696,14 +6696,14 @@ getBody(document).addEventListener("touchstart", touchBodyHandler, { passive: false, capture: false }); }, { passive: false, capture: false }); if (ruleParser.nextTitle) { - pageText.innerHTML = ruleParser.nextTitle + " "; + pageText.innerHTML = createHTML(ruleParser.nextTitle + " "); pageText.title = ruleParser.nextTitle; } if (ruleParser.curSiteRule.pageNum || pageNumReg.test(url)) { - pageText.innerHTML += i18n("page"); + pageText.innerHTML = createHTML(pageText.innerHTML + i18n("page")); pageNum = document.createElement("span"); let num = ruleParser.getPageNumFromUrl(url, curPage); - pageNum.innerHTML = num; + pageNum.innerHTML = createHTML(num); pageNum.className = "pagetual_pageNum"; pageNum.title = i18n("inputPageNum"); pageNum.style.cssText = pageTextStyle; @@ -6728,15 +6728,15 @@ }); pageBar.appendChild(pageNum); } else { - pageText.innerHTML += i18n("page") + curPage; + pageText.innerHTML = createHTML(pageText.innerHTML + i18n("page") + curPage); } let preBtn = document.createElement("span"); - preBtn.innerHTML = "∧"; + preBtn.innerHTML = createHTML("∧"); preBtn.title = i18n("prevPage"); preBtn.className = "prevScreen"; preBtn.style.cssText = "display: none;text-align: center;right: unset; float: left; width: 40px; background: rgba(240, 240, 240, 0.8); position: absolute; z-index: 9999999; box-shadow: rgb(0 0 0 / 50%) 0px -5px 5px; border-radius: 20px 20px 0 0; margin-top: -30px; "; let nextBtn = document.createElement("span"); - nextBtn.innerHTML = "∨"; + nextBtn.innerHTML = createHTML("∨"); nextBtn.title = i18n("nextPage"); nextBtn.className = "nextScreen"; nextBtn.style.cssText = "display: none;text-align: center;right: unset; float: left; width: 40px; background: rgba(240, 240, 240, 0.8); position: absolute; z-index: 9999999; box-shadow: rgb(0 0 0 / 50%) 0px 5px 5px; border-radius: 0 0 20px 20px; margin-top: 30px; "; From fbb1f3f8b1a5d5133cf4d61c45fba51d0079bc5a Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 11:07:20 +0800 Subject: [PATCH 025/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 4ed8194e46f..8e0482e24f8 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.65](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.66](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From 5974cd86f0e22ab67ebc5cbc5dc5f9f9d8af5641 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 11:35:02 +0800 Subject: [PATCH 026/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index eb84275dfa0..fd9f3a48772 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -16788,6 +16788,7 @@ ImgOps | https://imgops.com/#b#`; self.reloadTimeout = setTimeout(function(){ // self.reload(); self.reloadNew(); + self.loadThumb(); }, 1000); }, 300); }, @@ -16915,6 +16916,8 @@ ImgOps | https://imgops.com/#b#`; }\ .pv-gallery-container * {\ font-size: 14px;\ + display: initial;\ + flex-direction: row;\ }\ /*点击还原的工具条*/\ .pv-gallery-maximize-trigger{\ From e1ebe724d43962780cf94467bfee96cd6f241969 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 12:26:31 +0800 Subject: [PATCH 027/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 10f9cbc59ba..d7d645692da 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2296,7 +2296,7 @@ } } if (!next3) { - if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(innerText) && !aTag.parentNode.getAttribute("jsaction")) { + if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(innerText) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) { if (isJs) { if (!nextJs3) nextJs3 = aTag; } else { From c9a4dba1ba1be589fedea43a9cf8155bd5a417a8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 14:22:19 +0800 Subject: [PATCH 028/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 3f6c831308d..76aa993f25b 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.1 +// @version 0.6.2 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -88,7 +88,7 @@ /*-------------------------------------------------------------------------------------------------------------------------------------------*/ - if (helper.inurl('/htm_data/')) { + if (helper.inurl('/htm_data/') || helper.inurl('read.php?')) { // 移除图片viidii跳转 & 图片自动缩放 var imgList = new Array(0); var maxWidth = parseInt($("div#main").width() - 200) + 'px'; @@ -130,6 +130,27 @@ }); $('body').append('
' + tmpNode + '
'); } + helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 0; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child { height: 200px; }'); + var submitBtn = $('form[name="FORM"] .btn[name="Submit"]'); + var textarea = $('form[name="FORM"] [name="atc_content"]'); + if (submitBtn.length && textarea.length) { + var quickReply = $( '' ); + quickReply.insertAfter( "form .btn" ); + var replyStr = "1024"; + if (document.title.indexOf("打卡签到") !== -1) { + var spaceStr = ""; + var spaceLen = Math.floor(Math.random() * 10); + for (var i = 0; i < spaceLen; i++) { + spaceStr += " "; + } + replyStr = "今日签到" + spaceStr; + } + quickReply.attr('title', replyStr); + quickReply.click(function() { + textarea.val(replyStr); + submitBtn.click(); + }); + } } /*-------------------------------------------------------------------------------------------------------------------------------------------*/ From 1292dccdc6c7d817559ea6ef98cc07331c516722 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 15:11:52 +0800 Subject: [PATCH 029/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index 09ec94ea0c7..a11d401ece8 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -782,7 +782,7 @@ var siteInfo = [ if(p[2] && this.classList.contains('ytd-moving-thumbnail-renderer')){ newsrc = p[2].querySelector("img").src; } - if(!newsrc || newsrc.indexOf("ytimg.com") == -1) return; + if(!newsrc || newsrc.indexOf("i.ytimg.com") == -1) return; return newsrc.replace(/\?.*$/i,""); } }, From 505b5efda3ea9c7ab60cd6f1d1c5efc5fc4834d0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 16:07:57 +0800 Subject: [PATCH 030/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 76aa993f25b..e8887194faa 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -130,11 +130,12 @@ }); $('body').append('
' + tmpNode + '
'); } - helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 0; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child { height: 200px; }'); + helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 50px; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child { height: 200px; }'); var submitBtn = $('form[name="FORM"] .btn[name="Submit"]'); var textarea = $('form[name="FORM"] [name="atc_content"]'); if (submitBtn.length && textarea.length) { - var quickReply = $( '' ); + var quickReplyStr = '快速回复'; + var quickReply = $( `` ); quickReply.insertAfter( "form .btn" ); var replyStr = "1024"; if (document.title.indexOf("打卡签到") !== -1) { @@ -146,9 +147,30 @@ replyStr = "今日签到" + spaceStr; } quickReply.attr('title', replyStr); - quickReply.click(function() { - textarea.val(replyStr); - submitBtn.click(); + + helper.getScript('//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js', e => { + var lastReplyTime = $.cookie('lastReplyTime'); + if (lastReplyTime && Date.now() - parseFloat(lastReplyTime) < 1024000 + 1000) { + quickReply.attr("disabled", true); + quickReply.css("background", "initial"); + quickReply.val(quickReplyStr + ": " + parseInt((lastReplyTime - Date.now()) / 1000 + 1025) + "s"); + var countTimer = setInterval(() => { + var leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); + if (leftTime <= 0) { + quickReply.val(quickReplyStr); + quickReply.removeAttr("disabled"); + quickReply.css("background", ""); + clearInterval(countTimer); + } else { + quickReply.val(quickReplyStr + ": " + leftTime + "s"); + } + }, 1000); + } + quickReply.click(function() { + textarea.val(replyStr); + submitBtn.click(); + $.cookie('lastReplyTime', Date.now(), { expires: 7, path: '/' }); + }); }); } } From 41fe168d9a6be50b4dc984bc34ea346e59a74620 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 17:57:00 +0800 Subject: [PATCH 031/812] Update README.md --- Picviewer CE+/README.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/README.md b/Picviewer CE+/README.md index 0ccdbe9c0d6..2c20fe42991 100644 --- a/Picviewer CE+/README.md +++ b/Picviewer CE+/README.md @@ -28,7 +28,7 @@ If you wish to add more rules for peculiar sites, come to [my Github](https://gi ### Custom rules example for config: -**1.** +1. This can add click-to-open for existing asiansister rule. Place it into the '[]' of rule textarea.
 {
@@ -51,6 +51,32 @@ This can add large-image rule for dmm to view high-definition original images or
  s: "pl.jpg"
 }
 
+3. +Using a standalone script, you have the ability to manage all of your custom rule. + +``` +// ==UserScript== +// @name Picviewer CE+ custom rules +// @namespace hoothin +// @version 0.1 +// @description Picviewer CE+ custom rules +// @author You +// @match *://*/* +// @grant none +// ==/UserScript== + +(function() { + 'use strict'; + window.pvcepRules = [ + { + name: "dmm", + src: /pics\.dmm\.co\.jp/i, + r: "ps.jpg", + s: "pl.jpg" + } + ]; +})(); +``` ### [📍Gallery page](https://hoothin.github.io/UserScripts/Picviewer%20CE+/gallery.html) *A blank Gallery page designed for viewing pictures, showcasing every image you have imported.* From 4ac92450011e72e1a8238f74986a0882b1d60457 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 17:57:25 +0800 Subject: [PATCH 032/812] Update README.md --- Picviewer CE+/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/README.md b/Picviewer CE+/README.md index 2c20fe42991..36f4969a35d 100644 --- a/Picviewer CE+/README.md +++ b/Picviewer CE+/README.md @@ -52,7 +52,7 @@ This can add large-image rule for dmm to view high-definition original images or } 3. -Using a standalone script, you have the ability to manage all of your custom rule. +Using a standalone script, you have the ability to manage all of your custom rules. ``` // ==UserScript== From 1a337cc908bc3aec373979d3b4df57ae49cd6b61 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 18:00:53 +0800 Subject: [PATCH 033/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 282725ed280..1539a0014ea 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -67,7 +67,7 @@ 某個章節名 / CSS 選擇器【選擇器後可跟 >> 傳入 item 處理】 **@@** 抓取到 URL 的正則匹配 **@@** 正則替換 URL **@@** 根據爬取返回內容 data 處理並返回最終文本 -### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用 [❤️ Youtube 有聲小説](https://www.youtube.com/channel/UCe1lxuf0FrJc8Lr48Iw9wAw) +### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用 [💗 Youtube 有聲小説](https://www.youtube.com/channel/UCe1lxuf0FrJc8Lr48Iw9wAw) 1. [📕po18](https://www.po18.tw/books/755779/articles),章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 `.l_chaptname>a@@articles@@articlescontent` 粘貼進命令菜單即可下載。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 ``` css .l_chaptname>a @@ articles @@ articlescontent From a3d707700534ccf3ea1dc002b4e5845377109430 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 18:07:50 +0800 Subject: [PATCH 034/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- ...tch Traditional Chinese and Simplified Chinese.user.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 0a50237b921..831f8561a5d 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.6.41 +// @version 1.2.6.42 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -62,8 +62,8 @@ var pinyinMetaKey = false; var disablePinyin = false; //此處為單字轉換,scStr 為簡體字列表,tcStr 為正體字列表,一簡對多繁時,可能有多個對應組合,以第一個組合爲準 - var scStr = '万与丑专业丛东丝丢两严丧个丰临为为丽举么么义乌乐乔习乡书买乱争于亏云亘亚产产亩亲亵亸亿仅仆从仑仓仪们价众众优伙会伛伞伟传伡伣伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬侭俣俦俨俩俪俫俭借债倾偬偻偾偿傤傥傧储傩儿克兑兖党兰关兴兹养兽冁内冈册冗写军农冢冯冲冲决况冻净凄准凉凌减凑凛几凤处凫凭凯凶击凿刍划刘则刚创删别刬刭制刹刽刾刿剀剂剐剑剥剥剧劝办务劢动励劲劳势勋勖勚匀匦匮区医华协单卖卜卢卤卧卫却卷厂厅历历厉压厌厍厐厕厘厠厢厣厦厨厩厮县叁参叆叇双发发变叙叠只台叶号叹叹叽吁后吓吕吗吨听启启吴呆呐呒呓呕呖呗员呙呛呜周咏咙咛咝咤咨咸响哑哒哓哔哕哗哙哜哝哟唇唉唛唝唠唡唢唤啓啧啬啭啮啯啰啴啸喂喷喽喾嗫嗳嘘嘤嘱噜嚣团园囱围囵国图圆圣圹场坏块坚坛坜坝坞坟坠垄垅垆垒垦垩垫垭垯垱垲垴埘埙埚堑堕塆墙墻壊壮声壳壶壸処备复复够头夸夹夺奁奂奋奖奥奬妆妇妈妩妪妫姗姜姹娄娅娆娇娈娱娲娴婳婴婵婶媪媭嫒嫔嫱嬀嬷孙学孪宁宁宝实宠审宪宫宽宽宾寝对寻导寿将尔尘尝尧尴尸尽尽层屃屉届属屡屦屿岁岂岖岗岘岚岛岩岭岳岽岿峃峄峡峣峤峥峦峰崂崃崄崭嵘嵚嵝巅巨巩巯币布帅师帏帐帘帜带帧帮帱帻帼幂干干并并广庄庆床庐庑库应庙庞废庼廏廪开异弃弑张弥弪弯弹强归当录彝彟彦彨彻征径徕御忆忏志忧念忾怀态怂怃怄怅怆怜总怼怿恋恒恳恶恶恸恹恺恻恼恽悦悫悬悭悮悯惊惧惨惩惫惬惭惮惯愠愤愦愿慑慭懑懒懔戆戋戏戗战戬户扎扑托扦执扩扪扫扬扰抚抛抟抠抡抢护报抬抻担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捂捝捞损捡换捣据捻掳掴掷掸掺掼揽揾揿搀搁搂搄搅携摄摅摆摇摈摊撄撑撵撷撸撺擜擞攒敌敍敚敛敩数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权杠条来杨杩杰松板极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桠桡桢档桤桥桦桧桨桩桪梁梦梼梾梿检棁棂棱椁椝椟椠椢椤椫椭椮楼榄榅榇榈榉榝槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴殻毁毂毕毙毡毵氇气氢氩氲汇汇汉污汤汹沟没沣沤沥沦沧沨沩沪泄泞注泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涚涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溁溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪潆潇潋潍潙潜潨潴澛澜濑濒灏灭灯灵灶灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烟烦烧烨烩烫烬热焕焖焘煴爱爲爷牍牦牵牺犊状犷犸犹狈狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珐珑珰珲琎琏琐琼瑶瑷瑸璎瓒瓮瓯産电画畅畴疖疗疟疠疡疬疭疮疯疱疴痈痉痒痖痨痪痫痴痹瘅瘆瘉瘗瘘瘪瘫瘾瘿癞癣癫皋皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑睾瞆瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硵硷碍碛碜碱礼祃祎祢祯祷祸禀禄禅离秃秆种秘积称秸秽秾稆税稣稳穑穞穷窃窍窎窑窜窝窥窦窭竖竞竪笃笋笔笕笺笼笾筑筚筛筜筝筹筼签签筿简箓箦箧箨箩箪箫篑篓篮篯篱簖籁籴类籼粜粝粤粪粮糁糇糍系系紧绝絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络絶绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡群翘翙翚翱耢耧耸耻聂聋职聍联聩聪肃肠肤肮肴肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑膻臜致舆舍舣舰舱舻艰艳艺节芈芗芜芦苁苇苈苋苌苍苎苏苧苹范茎茏茑茔茕茧荆荐荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒀蒇蒉蒋蒌蒏蓝蓟蓠蓣蓥蓦蔂蔷蔹蔺蔼蕰蕲蕴薮藓蘖虏虑虚虫虬虮虱虽虾虿蚀蚁蚂蚃蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衆衔补表衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯訚詟誉誊说谣讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞跡践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯軆輼车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辟辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郏郐郑郓郦郧郸酂酝酦酱酽酾酿采释里里鈎鉴鉴銮鋭録錾钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链链铿销锁锂锃锄锅锆锇锈锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶长閲门闩闪闫闬闭问闯闰闱闲闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陦陧陨险随隐隶隽难雇雏雠雳雾霁霉霡霭靓靔静面靥鞑鞒鞯鞲韦韧韨韩韪韫韬韵頽顔页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕駡马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓鬶魇魉鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鷀鷄鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹾麦麸麹麽黄黉黡黩黪黾鼋鼌鼍鼹齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟酸幸'; - var tcStr = '萬與醜專業叢東絲丟兩嚴喪個豐臨爲為麗舉麽麼義烏樂喬習鄉書買亂爭於虧雲亙亞産產畝親褻嚲億僅僕從侖倉儀們價衆眾優夥會傴傘偉傳俥俔傷倀倫傖僞佇體餘傭僉俠侶僥偵側僑儈儕儂儘俁儔儼倆儷倈儉藉債傾傯僂僨償儎儻儐儲儺兒剋兌兗黨蘭關興茲養獸囅內岡冊宂寫軍農塚馮沖衝決況凍淨淒準涼淩減湊凜幾鳳處鳧憑凱兇擊鑿芻劃劉則剛創刪別剗剄製剎劊㓨劌剴劑剮劍剝褫劇勸辦務勱動勵勁勞勢勳勗勩勻匭匱區醫華協單賣蔔盧鹵臥衛卻捲廠廳曆歷厲壓厭厙龎廁釐廁廂厴廈廚廄廝縣叄參靉靆雙發髮變敘疊隻臺葉號歎嘆嘰籲後嚇呂嗎噸聽啓啟吳獃吶嘸囈嘔嚦唄員咼嗆嗚週詠嚨嚀噝吒諮鹹響啞噠嘵嗶噦嘩噲嚌噥喲脣欸嘜嗊嘮啢嗩喚啟嘖嗇囀齧嘓囉嘽嘯餵噴嘍嚳囁噯噓嚶囑嚕囂團園囪圍圇國圖圓聖壙場壞塊堅壇壢壩塢墳墜壟壠壚壘墾堊墊埡墶壋塏堖塒壎堝塹墮壪牆牆壞壯聲殼壺壼處備複復夠頭誇夾奪奩奐奮獎奧獎妝婦媽嫵嫗媯姍薑奼婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬃嬡嬪嬙媯嬤孫學孿甯寧寶實寵審憲宮寬寛賓寢對尋導壽將爾塵嘗堯尷屍盡儘層屭屜屆屬屢屨嶼歲豈嶇崗峴嵐島巖嶺嶽崬巋嶨嶧峽嶢嶠崢巒峯嶗崍嶮嶄嶸嶔嶁巔鉅鞏巰幣佈帥師幃帳簾幟帶幀幫幬幘幗冪幹乾並併廣莊慶牀廬廡庫應廟龐廢廎廄廩開異棄弒張彌弳彎彈強歸當錄彜彠彥彲徹徵徑徠禦憶懺誌憂唸愾懷態慫憮慪悵愴憐總懟懌戀恆懇惡噁慟懨愷惻惱惲悅愨懸慳悞憫驚懼慘懲憊愜慚憚慣慍憤憒願懾憖懣懶懍戇戔戲戧戰戩戶紮撲託扡執擴捫掃揚擾撫拋摶摳掄搶護報擡捵擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏摀挩撈損撿換搗據撚擄摑擲撣摻摜攬搵撳攙擱摟揯攪攜攝攄擺搖擯攤攖撐攆擷擼攛㩵擻攢敵敘敓斂斆數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權槓條來楊榪傑鬆闆極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒椏橈楨檔榿橋樺檜槳樁樳樑夢檮棶槤檢梲櫺稜槨槼櫝槧槶欏樿橢槮樓欖榲櫬櫚櫸樧檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆殼毀轂畢斃氈毿氌氣氫氬氳彙匯漢汙湯洶溝沒灃漚瀝淪滄渢溈滬洩濘註淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧涗濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕濚潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦瀠瀟瀲濰溈潛潀瀦瀂瀾瀨瀕灝滅燈靈竈災燦煬爐燉煒熗點煉熾爍爛烴燭煙菸煩燒燁燴燙燼熱煥燜燾熅愛為爺牘犛牽犧犢狀獷獁猶狽獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽琺瓏璫琿璡璉瑣瓊瑤璦璸瓔瓚甕甌產電畫暢疇癤療瘧癘瘍癧瘲瘡瘋皰痾癰痙癢瘂癆瘓癇癡痺癉瘮癒瘞瘻癟癱癮癭癩癬癲臯皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼睪瞶瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確磠鹼礙磧磣堿禮禡禕禰禎禱禍稟祿禪離禿稈種祕積稱稭穢穠穭稅穌穩穡穭窮竊竅窵窯竄窩窺竇窶豎競豎篤筍筆筧箋籠籩築篳篩簹箏籌篔簽籤篠簡籙簀篋籜籮簞簫簣簍籃籛籬籪籟糴類秈糶糲粵糞糧糝餱餈係繫緊絕縶糹糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線綫紺紲紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏縧繼綈績緒綾緓續綺緋綽鞝緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨羣翹翽翬翺耮耬聳恥聶聾職聹聯聵聰肅腸膚骯餚腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏羶臢緻輿捨艤艦艙艫艱豔藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇薴蘋範莖蘢蔦塋煢繭荊薦薘莢蕘蓽萴蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蒕蕆蕢蔣蔞醟藍薊蘺蕷鎣驀虆薔蘞藺藹薀蘄蘊藪蘚櫱虜慮虛蟲虯蟣蝨雖蝦蠆蝕蟻螞蠁蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁眾銜補錶襯袞襖裊褘襪襲襏裝襠褌褳襝褲襉褸襤襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶誾讋譽謄説謡訁計訂訃認譏訐訌討讓訕訖託訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談讅誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗謚謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶贓貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗贊讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒蹟踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀體轀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭闢辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郟鄶鄭鄆酈鄖鄲酇醞醱醬釅釃釀採釋裏裡鉤鑒鑑鑾銳錄鏨釒釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鉅鈍鈔鍾鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鈎鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鉋鈰鉉鉈鉍鈮鈹鐸鉶銬銠鉺鋩錏銪鋮鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鎩鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鍊鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銹銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺鍩錯錨錛錡鍀錁錕錩錫錮鑼錘錐錦鑕鍁錈鍃錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鐨鎇鏌鎮鎛鎘鑷钂鐫鎳鎿鎦鎬鎊鎰鎵鑌鎔鏢鏜鏝鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔钀鑞鑱鑲長閱門閂閃閆閈閉問闖閏闈閑閒閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隯隉隕險隨隱隸雋難僱雛讎靂霧霽黴霢靄靚靝靜麵靨韃鞽韉韝韋韌韍韓韙韞韜韻頹顏頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顔顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飈飛饗饜飠飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢罵馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢鬹魘魎魚魛魢魷魨魯魴䰾魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鰺鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鼈鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣䲘鶿雞鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鷽鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鵾鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶖鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺䴉鸇鷹鸌鸏鸛鸘鹺麥麩麴麼黃黌黶黷黲黽黿鼂鼉鼴齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜痠倖'; + var scStr = '万与丑专业丛东丝丢两严丧个丰临为为丽举么么义乌乐乔习乡书买乱争于亏云亘亚产产亩亲亵亸亿仅仆从仑仓仪们价众众优伙会伛伞伟传伡伣伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬侭俣俦俨俩俪俫俭借债倾偬偻偾偿傤傥傧储傩儿克兑兖党兰关兴兹养兽冁内冈册冗写军农冢冯冲冲决况冻净凄准凉凌减凑凛几凤处凫凭凯凶击凿刍划刘则刚创删别刬刭制刹刽刾刿剀剂剐剑剥剥剧劝办务劢动励劲劳势勋勖勚匀匦匮区医华协单卖卜卢卤卧卫却卷厂厅历历厉压厌厍厐厕厘厠厢厣厦厨厩厮县叁参叆叇双发发变叙叠只台叶号叹叹叽吁后吓吕吗吨听听听启启吴呆呐呒呓呕呖呗员呙呛呜周咏咙咛咝咤咨咸响哑哒哓哔哕哗哙哜哝哟唇唉唛唝唠唡唢唤啓啧啬啭啮啯啰啴啸喂喷喽喾嗫嗳嘘嘤嘱噜嚣团园囱围囵国图圆圣圹场坏块坚坛坜坝坞坟坠垄垅垆垒垦垩垫垭垯垱垲垴埘埙埚堑堕塆墙墻壊壮声壳壶壸処备复复够头夸夹夺奁奂奋奖奥奬妆妇妈妩妪妫姗姜姹娄娅娆娇娈娱娲娴婳婴婵婶媪媭嫒嫔嫱嬀嬷孙学孪宁宁宝实宠审宪宫宽宽宾寝对寻导寿将尔尘尝尧尴尸尽尽层屃屉届属屡屦屿岁岂岖岗岘岚岛岩岭岳岽岿峃峄峡峣峤峥峦峰崂崃崄崭嵘嵚嵝巅巨巩巯币布帅师帏帐帘帜带帧帮帱帻帼幂干干并并广庄庆床庐庑库应庙庞废庼廏廪开异弃弑张弥弪弯弹强归当录彝彟彦彨彻征径徕御忆忏志忧念忾怀态怂怃怄怅怆怜总怼怿恋恒恳恶恶恸恹恺恻恼恽悦悫悬悭悮悯惊惧惨惩惫惬惭惮惯愠愤愦愿慑慭懑懒懔戆戋戏戗战戬户扎扑托扦执扩扪扫扬扰抚抛抟抠抡抢护报抬抻担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捂捝捞损捡换捣据捻掳掴掷掸掺掼揽揾揿搀搁搂搄搅携摄摅摆摇摈摊撄撑撵撷撸撺擜擞攒敌敍敚敛敩数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权杠条来杨杩杰松板极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桠桡桢档桤桥桦桧桨桩桪梁梦梼梾梿检棁棂棱椁椝椟椠椢椤椫椭椮楼榄榅榇榈榉榝槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴殻毁毂毕毙毡毵氇气氢氩氲汇汇汉污汤汹沟没沣沤沥沦沧沨沩沪泄泞注泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涚涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溁溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪潆潇潋潍潙潜潨潴澛澜濑濒灏灭灯灵灶灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烟烦烧烨烩烫烬热焕焖焘煴爱爲爷牍牦牵牺犊状犷犸犹狈狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珐珑珰珲琎琏琐琼瑶瑷瑸璎瓒瓮瓯産电画畅畴疖疗疟疠疡疬疭疮疯疱疴痈痉痒痖痨痪痫痴痹瘅瘆瘉瘗瘘瘪瘫瘾瘿癞癣癫皋皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑睾瞆瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硵硷碍碛碜碱礼祃祎祢祯祷祸禀禄禅离秃秆种秘积称秸秽秾稆税稣稳穑穞穷窃窍窎窑窜窝窥窦窭竖竞竪笃笋笔笕笺笼笾筑筚筛筜筝筹筼签签筿简箓箦箧箨箩箪箫篑篓篮篯篱簖籁籴类籼粜粝粤粪粮糁糇糍系系紧绝絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络絶绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡群翘翙翚翱耢耧耸耻聂聋职聍联聩聪肃肠肤肮肴肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑膻臜致舆舍舣舰舱舻艰艳艺节芈芗芜芦苁苇苈苋苌苍苎苏苧苹范茎茏茑茔茕茧荆荐荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒀蒇蒉蒋蒌蒏蓝蓟蓠蓣蓥蓦蔂蔷蔹蔺蔼蕰蕲蕴薮藓蘖虏虑虚虫虬虮虱虽虾虿蚀蚁蚂蚃蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衆衔补表衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯訚詟誉誊说谣讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞跡践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯軆輼车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辟辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郏郐郑郓郦郧郸酂酝酦酱酽酾酿采释里里鈎鉴鉴銮鋭録錾钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链链铿销锁锂锃锄锅锆锇锈锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶长閲门闩闪闫闬闭问闯闰闱闲闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陦陧陨险随隐隶隽难雇雏雠雳雾霁霉霡霭靓靔静面靥鞑鞒鞯鞲韦韧韨韩韪韫韬韵頽顔页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕駡马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓鬶魇魉鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鷀鷄鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹾麦麸麹麽黄黉黡黩黪黾鼋鼌鼍鼹齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟酸幸'; + var tcStr = '萬與醜專業叢東絲丟兩嚴喪個豐臨爲為麗舉麽麼義烏樂喬習鄉書買亂爭於虧雲亙亞産產畝親褻嚲億僅僕從侖倉儀們價衆眾優夥會傴傘偉傳俥俔傷倀倫傖僞佇體餘傭僉俠侶僥偵側僑儈儕儂儘俁儔儼倆儷倈儉藉債傾傯僂僨償儎儻儐儲儺兒剋兌兗黨蘭關興茲養獸囅內岡冊宂寫軍農塚馮沖衝決況凍淨淒準涼淩減湊凜幾鳳處鳧憑凱兇擊鑿芻劃劉則剛創刪別剗剄製剎劊㓨劌剴劑剮劍剝褫劇勸辦務勱動勵勁勞勢勳勗勩勻匭匱區醫華協單賣蔔盧鹵臥衛卻捲廠廳曆歷厲壓厭厙龎廁釐廁廂厴廈廚廄廝縣叄參靉靆雙發髮變敘疊隻臺葉號歎嘆嘰籲後嚇呂嗎噸聽聼聴啓啟吳獃吶嘸囈嘔嚦唄員咼嗆嗚週詠嚨嚀噝吒諮鹹響啞噠嘵嗶噦嘩噲嚌噥喲脣欸嘜嗊嘮啢嗩喚啟嘖嗇囀齧嘓囉嘽嘯餵噴嘍嚳囁噯噓嚶囑嚕囂團園囪圍圇國圖圓聖壙場壞塊堅壇壢壩塢墳墜壟壠壚壘墾堊墊埡墶壋塏堖塒壎堝塹墮壪牆牆壞壯聲殼壺壼處備複復夠頭誇夾奪奩奐奮獎奧獎妝婦媽嫵嫗媯姍薑奼婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬃嬡嬪嬙媯嬤孫學孿甯寧寶實寵審憲宮寬寛賓寢對尋導壽將爾塵嘗堯尷屍盡儘層屭屜屆屬屢屨嶼歲豈嶇崗峴嵐島巖嶺嶽崬巋嶨嶧峽嶢嶠崢巒峯嶗崍嶮嶄嶸嶔嶁巔鉅鞏巰幣佈帥師幃帳簾幟帶幀幫幬幘幗冪幹乾並併廣莊慶牀廬廡庫應廟龐廢廎廄廩開異棄弒張彌弳彎彈強歸當錄彜彠彥彲徹徵徑徠禦憶懺誌憂唸愾懷態慫憮慪悵愴憐總懟懌戀恆懇惡噁慟懨愷惻惱惲悅愨懸慳悞憫驚懼慘懲憊愜慚憚慣慍憤憒願懾憖懣懶懍戇戔戲戧戰戩戶紮撲託扡執擴捫掃揚擾撫拋摶摳掄搶護報擡捵擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏摀挩撈損撿換搗據撚擄摑擲撣摻摜攬搵撳攙擱摟揯攪攜攝攄擺搖擯攤攖撐攆擷擼攛㩵擻攢敵敘敓斂斆數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權槓條來楊榪傑鬆闆極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒椏橈楨檔榿橋樺檜槳樁樳樑夢檮棶槤檢梲櫺稜槨槼櫝槧槶欏樿橢槮樓欖榲櫬櫚櫸樧檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆殼毀轂畢斃氈毿氌氣氫氬氳彙匯漢汙湯洶溝沒灃漚瀝淪滄渢溈滬洩濘註淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧涗濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕濚潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦瀠瀟瀲濰溈潛潀瀦瀂瀾瀨瀕灝滅燈靈竈災燦煬爐燉煒熗點煉熾爍爛烴燭煙菸煩燒燁燴燙燼熱煥燜燾熅愛為爺牘犛牽犧犢狀獷獁猶狽獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽琺瓏璫琿璡璉瑣瓊瑤璦璸瓔瓚甕甌產電畫暢疇癤療瘧癘瘍癧瘲瘡瘋皰痾癰痙癢瘂癆瘓癇癡痺癉瘮癒瘞瘻癟癱癮癭癩癬癲臯皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼睪瞶瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確磠鹼礙磧磣堿禮禡禕禰禎禱禍稟祿禪離禿稈種祕積稱稭穢穠穭稅穌穩穡穭窮竊竅窵窯竄窩窺竇窶豎競豎篤筍筆筧箋籠籩築篳篩簹箏籌篔簽籤篠簡籙簀篋籜籮簞簫簣簍籃籛籬籪籟糴類秈糶糲粵糞糧糝餱餈係繫緊絕縶糹糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線綫紺紲紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏縧繼綈績緒綾緓續綺緋綽鞝緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨羣翹翽翬翺耮耬聳恥聶聾職聹聯聵聰肅腸膚骯餚腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏羶臢緻輿捨艤艦艙艫艱豔藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇薴蘋範莖蘢蔦塋煢繭荊薦薘莢蕘蓽萴蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蒕蕆蕢蔣蔞醟藍薊蘺蕷鎣驀虆薔蘞藺藹薀蘄蘊藪蘚櫱虜慮虛蟲虯蟣蝨雖蝦蠆蝕蟻螞蠁蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁眾銜補錶襯袞襖裊褘襪襲襏裝襠褌褳襝褲襉褸襤襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶誾讋譽謄説謡訁計訂訃認譏訐訌討讓訕訖託訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談讅誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗謚謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶贓貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗贊讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒蹟踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀體轀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭闢辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郟鄶鄭鄆酈鄖鄲酇醞醱醬釅釃釀採釋裏裡鉤鑒鑑鑾銳錄鏨釒釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鉅鈍鈔鍾鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鈎鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鉋鈰鉉鉈鉍鈮鈹鐸鉶銬銠鉺鋩錏銪鋮鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鎩鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鍊鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銹銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺鍩錯錨錛錡鍀錁錕錩錫錮鑼錘錐錦鑕鍁錈鍃錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鐨鎇鏌鎮鎛鎘鑷钂鐫鎳鎿鎦鎬鎊鎰鎵鑌鎔鏢鏜鏝鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔钀鑞鑱鑲長閱門閂閃閆閈閉問闖閏闈閑閒閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隯隉隕險隨隱隸雋難僱雛讎靂霧霽黴霢靄靚靝靜麵靨韃鞽韉韝韋韌韍韓韙韞韜韻頹顏頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顔顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飈飛饗饜飠飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢罵馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢鬹魘魎魚魛魢魷魨魯魴䰾魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鰺鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鼈鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣䲘鶿雞鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鷽鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鵾鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶖鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺䴉鸇鷹鸌鸏鸛鸘鹺麥麩麴麼黃黌黶黷黲黽黿鼂鼉鼴齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜痠倖'; //此處為匹配上具體詞語就優先轉換的單字,簡體與正體分開處理。可以用來處理異體字,或者同字替換,以取消單字匹配時的轉換操作 //簡轉繁,單向轉換 var sc2tc = {'为':'為', @@ -82,6 +82,8 @@ '緑':'綠', '径':'徑', '幸':'幸', + '聼':'聽', + '聴':'聽', '巨':[ '巨', ['鉅','巨款','巨富','巨细靡遗','巨子'] From be36cf99da519b558c8cb51bc7eca75c724e5ce8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 22:07:59 +0800 Subject: [PATCH 035/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index a11d401ece8..052470a4d3d 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -992,8 +992,8 @@ var siteInfo = [ }, { name: "duitang", - src: /duitang\.com\//i, - r: /.thumb.(\d+_)?\d*\./i, + url: /duitang\.com\//i, + r: /.thumb.(\d+_)?\d*(_c)?\./i, s: '.' }, { From 29536f82c834271885264e0f528cff69c07af5f6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 13 Oct 2023 22:09:58 +0800 Subject: [PATCH 036/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index fd9f3a48772..ec3f725d1a5 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.13.1 +// @version 2023.10.13.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -42,7 +42,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1263401 +// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1264243 // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js @@ -16906,6 +16906,7 @@ ImgOps | https://imgops.com/#b#`; border: none;\ z-index:'+prefs.imgWindow.zIndex+';\ background-color: transparent;\ + display: initial;\ }\ /*全局border-box*/\ .pv-gallery-container span{\ @@ -17778,7 +17779,7 @@ ImgOps | https://imgops.com/#b#`; background-color:rgb(0,0,0);\ padding:5px;\ border:none;\ - margin:none;\ + margin:0;\ text-align:center;\ line-height:0;\ white-space:nowrap;\ @@ -19163,6 +19164,7 @@ ImgOps | https://imgops.com/#b#`; overscroll-behavior: none;\ box-shadow: 0 0 10px 5px rgba(0,0,0,0.35);\ box-sizing: content-box;\ + display: initial;\ }\ .pv-pic-window-transition-all{\ -webkit-transition: top 0.2s ease, left 0.2s ease;\ @@ -23846,7 +23848,7 @@ ImgOps | https://imgops.com/#b#`; } if (!news) return; let newsEle = document.createElement("div"); - newsEle.innerHTML = news; + newsEle.innerHTML = createHTML(news); header.appendChild(newsEle); } }, @@ -23948,6 +23950,9 @@ ImgOps | https://imgops.com/#b#`; // 注册按键 document.addEventListener('keydown', keydown, true); + var configStyle = document.createElement("style"); + configStyle.textContent = "#pv-prefs { display: initial; }"; + configStyle.type = 'text/css'; function openPrefs() { let fieldsSearchData = GM_config.fields["gallery.searchData"]; if (fieldsSearchData && fieldsSearchData.value) { @@ -23957,7 +23962,9 @@ ImgOps | https://imgops.com/#b#`; if (fieldsCustomRules && fieldsCustomRules.value) { fieldsCustomRules.value = fieldsCustomRules.value.replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&").replace(/>/g, ">").replace(/{ if(GM_config.frame && GM_config.frame.style && GM_config.frame.style.display=="none"){ GM_config.frame.src=""; From a958f023e8af5964528fe8f415909a18835f5f1f Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 00:06:38 +0800 Subject: [PATCH 037/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d7d645692da..270c86c546b 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1543,7 +1543,7 @@ if (h === 0 && ele.parentNode && ele.parentNode.children.length === 1) { h = ele.parentNode.scrollHeight; } - if (h === 0 && ele.children && ele.children.length === 1) { + while (h === 0 && ele.children && ele.children.length === 1) { h = ele.children[0].scrollHeight; } const maxNum = 2147483647; @@ -1554,7 +1554,7 @@ } moreChild = moreChild.nextElementSibling; } - if (minOffsetTop != maxNum && minOffsetTop > 0) { + if (h && minOffsetTop != maxNum && minOffsetTop > 0) { h -= minOffsetTop; } return h; @@ -1786,6 +1786,11 @@ return checkElement(curMaxEle); } } + if (ele.nodeName == "APP-ROOT") { + isPause = true; + debug(ele, "Angular root"); + return null; + } if (ele.parentNode.children.length == 1 && curWin.getComputedStyle(ele.parentNode).float == 'none') ele = ele.parentNode; else if (/^(P|BR|TD)$/i.test(ele.nodeName)) ele = ele.parentNode; else if (/^TBODY$/i.test(ele.nodeName)) { From 214285c43756a13b6fe6cb02fbdcc79a76d72bda Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 00:10:57 +0800 Subject: [PATCH 038/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 270c86c546b..8fa35f9e2ea 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1544,7 +1544,8 @@ h = ele.parentNode.scrollHeight; } while (h === 0 && ele.children && ele.children.length === 1) { - h = ele.children[0].scrollHeight; + ele = ele.children[0]; + h = ele.scrollHeight; } const maxNum = 2147483647; let moreChild = ele.children[0], minOffsetTop = maxNum; From 55c5969ad0ac528de23e87539954d1a78db42d5a Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 10:52:41 +0800 Subject: [PATCH 039/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 76 +++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 8fa35f9e2ea..932822af255 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.66 +// @version 1.9.36.67 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1534,10 +1534,14 @@ } } - getValidHeight(ele, win) { - if (!ele.offsetParent) return 0; + getValidSize(ele, win) { + if (!win) return {h: 0, w: 0}; + let eleStyle = win.getComputedStyle(ele); + if (!ele.offsetParent && (eleStyle.position != "fixed" || eleStyle.opacity == 0)) { + return {h: 0, w: 0}; + } let h = ele.scrollHeight; - if (win && win.getComputedStyle(ele).overflow == "hidden") { + if (eleStyle.overflow == "hidden") { h = ele.offsetHeight; } if (h === 0 && ele.parentNode && ele.parentNode.children.length === 1) { @@ -1547,6 +1551,14 @@ ele = ele.children[0]; h = ele.scrollHeight; } + if (h === 0 && ele.children && ele.children.length) { + let maxChildSize = {h: 0}, self = this; + [].forEach.call(ele.children, el => { + let childSize = self.getValidSize(el, win); + if (childSize.h > maxChildSize.h) maxChildSize = childSize; + }); + if (maxChildSize.h != 0) return maxChildSize; + } const maxNum = 2147483647; let moreChild = ele.children[0], minOffsetTop = maxNum; while (moreChild) { @@ -1558,18 +1570,12 @@ if (h && minOffsetTop != maxNum && minOffsetTop > 0) { h -= minOffsetTop; } - return h; + return {h: h, w: parseInt(ele.offsetWidth || ele.scrollWidth)}; } getPageElement(doc, curWin, dontFind) { - if (doc == document && this.docPageElement) { - let parent = this.docPageElement && this.docPageElement[0]; - while (parent && !/^BODY$/i.test(parent.nodeName)) { - parent = parent.parentNode; - } - if (parent && /^BODY$/i.test(parent.nodeName)) { - return this.docPageElement; - } + if (doc == document && this.docPageElement && document.documentElement.contains(this.docPageElement[0])) { + return this.docPageElement; } let pageElement = null; let self = this; @@ -1664,8 +1670,9 @@ } if (!hasText) { ele = ele.children[0]; - curHeight = self.getValidHeight(ele, curWin); - curWidth = parseInt(ele.offsetWidth || ele.scrollWidth); + let validSize = self.getValidSize(ele, curWin); + curHeight = validSize.h; + curWidth = validSize.w; } } if (/^PICTURE$/i.test(ele.nodeName) || !ele.innerText || ele.innerText.trim() == '') { @@ -1709,14 +1716,18 @@ for (i = 0; i < ele.children.length; i++) { let curNode = ele.children[i]; if (/^(CANVAS|NAV)$/i.test(curNode.nodeName)) continue; - if (!curNode.offsetParent) continue; + let curStyle = curWin.getComputedStyle(curNode); + if (!curNode.offsetParent && (curStyle.position != "fixed" || curStyle.opacity == 0)) { + continue; + } if (!/^IMG$/i.test(curNode.nodeName) && curNode.querySelector('img') == null && /^\s*$/.test(curNode.innerText)) continue; if (needCheckNext && !curNode.contains(self.initNext) && getElementTop(curNode) > windowHeight) { continue; } if (/^ARTICLE$/i.test(curNode.nodeName)) articleNum++; - let h = self.getValidHeight(curNode, curWin); - let w = curNode.scrollWidth; + let validSize = self.getValidSize(curNode, curWin); + let h = validSize.h; + let w = validSize.w; if (isNaN(h) || isNaN(w)) continue; isHori = Math.abs(preOffsetTop - curNode.offsetTop) <= 20 ? true : (preOffsetTop == -1 && curNode.nextElementSibling && curNode.nextElementSibling.offsetTop == curNode.offsetTop); if (isHori && h <= 50) continue; @@ -1728,8 +1739,9 @@ } let a = h * w, moreChild = curNode.children[0]; while (moreChild) { - let ch = self.getValidHeight(moreChild, curWin); - let cw = moreChild.scrollWidth; + let validSize = self.getValidSize(moreChild, curWin); + let ch = validSize.h; + let cw = validSize.w; if (h < ch) { h = ch; } @@ -6318,9 +6330,28 @@ }); } + let scrollContainer; function distToBottom () { let scrolly = window.scrollY; let windowHeight = window.innerHeight || document.documentElement.clientHeight; + if (!scrollContainer || !document.documentElement.contains(scrollContainer)) { + let pageEle = ruleParser.getPageElement(document); + if (pageEle && pageEle.length) { + let parent = pageEle[0].parentNode, pageScrollY = parent.scrollTop;; + while (parent && pageScrollY == 0) { + parent = parent.parentNode; + pageScrollY = parent.scrollTop; + } + if (pageScrollY) { + scrollContainer = parent; + return scrollContainer.scrollHeight - pageScrollY - windowHeight; + } + } + } + if (scrollContainer) { + return scrollContainer.scrollHeight - scrollContainer.scrollTop - windowHeight; + } + let scrollH = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); return scrollH - scrolly - windowHeight; } @@ -7092,7 +7123,7 @@ let doc = iframe.contentDocument || iframe.contentWindow.document; let base = doc.querySelector("base"); ruleParser.basePath = base ? base.href : url; - let eles = ruleParser.getPageElement(doc, iframe.contentWindow, tryTimes < 10); + let eles = ruleParser.getPageElement(doc, iframe.contentWindow, tryTimes < 25); if (checkEval && !checkEval(doc)) { setTimeout(() => { checkIframe(); @@ -7698,7 +7729,6 @@ function loadPageOver() { isLoading = false; stopScroll = true; - let dist = distToBottom(); setTimeout(() => {stopScroll = false}, 300); if (loadingDiv.parentNode) { loadingDiv.parentNode.removeChild(loadingDiv); @@ -7706,7 +7736,7 @@ let rate = (ruleParser.curSiteRule.rate || rulesData.rate || 1); if (rate != 1 && !clickMode) { setTimeout(() => { - if (dist < bottomGap) { + if (distToBottom() < bottomGap) { nextPage(); } }, 1); From 49bbc35e0b9c64a58748672080171f42628c3e10 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 10:53:10 +0800 Subject: [PATCH 040/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 8e0482e24f8..f0041f3a02b 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.66](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.67](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From c39e70d876c8e8d005f31cd2a00a2d7546580286 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 10:54:35 +0800 Subject: [PATCH 041/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 34d5df1b2f4..795790123dd 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9700,6 +9700,16 @@ "pageBar": 0, "pageElementByJs": "let url='',params=[],form=document.getElementById('form');let formData=new FormData(form);for (let [key, value] of formData) { params.push(key + '=' + encodeURIComponent(value)); } params = params.join('&');url=form.action + (form.action.indexOf('?') == -1 ? '?' : '&') + params;fetch(url.replace(/&offset=\\d+/,'')+'&offset='+(pageNum+1), { headers: {'X-Requested-With': 'XMLHttpRequest'}}).then(res=>res.json()).then(res=>{let eles=[];res.data.items.forEach(item=>{let ele=document.createElement('div');ele.innerHTML=`
\"E-Katalog

Etalase Produk : ${item.komoditas}

Tanggal Mulai: ${item.started_date_str}

Tanggal Akhir: ${item.finished_date_str||'-'}

${item.komoditas_kategori}
`;ele.className='col-sm-6 col-md-3 col-lg-3 col-md-3-custom';eles.push(ele)});over(eles) })" }, +{ + "name": "ArtStation - Human to wolf transformation study", + "enable": 0, + "url": "^https?://www\\.artstation\\.com/artwork/", + "example": "https://www.artstation.com/artwork/EvDNGN", + "nextLink": "li.next>a", + "pageElement": "main.justify-content-center .project-assets-list>.asset", + "waitElement": "li.next>a", + "action": 1 +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From 466b8fbc56727a6cf1f6884af9edc05d678b746a Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 11:26:55 +0800 Subject: [PATCH 042/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 932822af255..69927c7bb03 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1281,7 +1281,6 @@ this.curSiteRule = this.possibleRule; return callback(); } - return; } this.curSiteRule = {}; var self = this; From 91c6b0f8d54e0e18a0678fb6557480c7dfbb98bd Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 13:10:19 +0800 Subject: [PATCH 043/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 69927c7bb03..3db791cb570 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -841,7 +841,7 @@ cb(value); } }; - var rulesData = {uninited: true}, ruleUrls, updateDate; + var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; const configPage = ["https://github.com/hoothin/UserScripts/tree/master/Pagetual", "https://hoothin.github.io/UserScripts/Pagetual/"]; const guidePage = /^https?:\/\/.*pagetual.*rule\.html/i; @@ -2650,7 +2650,7 @@ parent = parent.parentNode; } if (doc == document) { - if (this.linkHasNoHref(nextLink) && !isVisible(nextLink, _unsafeWindow)) { + if (this.linkHasNoHref(nextLink) && (clickedSth || !isVisible(nextLink, _unsafeWindow))) { this.nextLinkHref = false; return null; } else { @@ -6323,6 +6323,14 @@ checkUrlTimer = setTimeout(checkFunc, checkUrlTime); document.addEventListener("click", e => { + if (!clickedSth && e.target && e.target.nodeName) { + if (/^(A|BUTTON)$/i.test(e.target.nodeName)) { + clickedSth = true; + } else { + let targetStyle = _unsafeWindow.getComputedStyle(e.target); + if (targetStyle.cursor == "pointer") clickedSth = true; + } + } checkUrlTime = 100; clearTimeout(checkUrlTimer); checkUrlTimer = setTimeout(checkFunc, checkUrlTime); From 7ef328284bf8e276e21bb4d61c072cb071ad694c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 13:12:49 +0800 Subject: [PATCH 044/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 3db791cb570..aae5c2a2faa 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6318,6 +6318,7 @@ var e = new Event('pagetual_pushState'); e.arguments = arguments; window.dispatchEvent(e); + clickedSth = false; } }; checkUrlTimer = setTimeout(checkFunc, checkUrlTime); From 3552a9485d7c4ce56cf526a99595bf4ed7d5565d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 14:28:53 +0800 Subject: [PATCH 045/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index aae5c2a2faa..e84b04f7666 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6303,7 +6303,19 @@ var prevSearch = window.location.search; var checkUrlTime = 100; var checkUrlTimer; + var checkClickedEle = null; var checkFunc = () => { + if (checkClickedEle) { + if (!clickedSth && checkClickedEle && checkClickedEle.nodeName) { + if (/^(A|BUTTON)$/i.test(checkClickedEle.nodeName)) { + clickedSth = true; + } else { + let targetStyle = _unsafeWindow.getComputedStyle(checkClickedEle); + if (targetStyle.cursor == "pointer") clickedSth = true; + } + } + checkClickedEle = null; + } if (forceState == 1) return; if (checkUrlTime < 5000) { checkUrlTime += checkUrlTime>>1; @@ -6324,17 +6336,12 @@ checkUrlTimer = setTimeout(checkFunc, checkUrlTime); document.addEventListener("click", e => { - if (!clickedSth && e.target && e.target.nodeName) { - if (/^(A|BUTTON)$/i.test(e.target.nodeName)) { - clickedSth = true; - } else { - let targetStyle = _unsafeWindow.getComputedStyle(e.target); - if (targetStyle.cursor == "pointer") clickedSth = true; - } + if (!checkClickedEle) { + checkClickedEle = e.target; + checkUrlTime = 100; + clearTimeout(checkUrlTimer); + checkUrlTimer = setTimeout(checkFunc, checkUrlTime); } - checkUrlTime = 100; - clearTimeout(checkUrlTimer); - checkUrlTimer = setTimeout(checkFunc, checkUrlTime); }); } From 2fa577bbf7e9dc93695d9f88314621d52172a0ac Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 15:09:07 +0800 Subject: [PATCH 046/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e84b04f7666..ebc59282dd0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6305,6 +6305,7 @@ var checkUrlTimer; var checkClickedEle = null; var checkFunc = () => { + if (forceState == 1) return; if (checkClickedEle) { if (!clickedSth && checkClickedEle && checkClickedEle.nodeName) { if (/^(A|BUTTON)$/i.test(checkClickedEle.nodeName)) { @@ -6316,7 +6317,6 @@ } checkClickedEle = null; } - if (forceState == 1) return; if (checkUrlTime < 5000) { checkUrlTime += checkUrlTime>>1; } From 9dca5d6a7037cc477105ced08d6744035c7a644d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 15:27:38 +0800 Subject: [PATCH 047/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index ebc59282dd0..883b92072bf 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6338,7 +6338,7 @@ document.addEventListener("click", e => { if (!checkClickedEle) { checkClickedEle = e.target; - checkUrlTime = 100; + checkUrlTime = 300; clearTimeout(checkUrlTimer); checkUrlTimer = setTimeout(checkFunc, checkUrlTime); } From b05a65ad15eceb722e825e0d5fcddf5dfe38c4b9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 16:53:27 +0800 Subject: [PATCH 048/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 41 +++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index e8887194faa..ec84911ed8f 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.2 +// @version 0.6.3 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -146,11 +146,13 @@ } replyStr = "今日签到" + spaceStr; } - quickReply.attr('title', replyStr); helper.getScript('//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js', e => { var lastReplyTime = $.cookie('lastReplyTime'); - if (lastReplyTime && Date.now() - parseFloat(lastReplyTime) < 1024000 + 1000) { + var customReplyStr = $.cookie('customReplyStr'); + if (customReplyStr) replyStr = customReplyStr; + quickReply.attr('title', replyStr + "(右击修改)"); + function setCountdown() { quickReply.attr("disabled", true); quickReply.css("background", "initial"); quickReply.val(quickReplyStr + ": " + parseInt((lastReplyTime - Date.now()) / 1000 + 1025) + "s"); @@ -166,10 +168,41 @@ } }, 1000); } + if (lastReplyTime && Date.now() - parseFloat(lastReplyTime) < 1024000 + 1000) { + setCountdown(); + } + let form = $('form[name="FORM"]'); + document.FORM.onsubmit = function(event) { + if (checkpost(document.FORM)) { + $.ajax({ + type: form.attr('method'), + url: form.attr('action'), + data: form.serialize(), + success: function () { + quickReply.val("回复成功"); + submitBtn.val("提 交"); + setCountdown(); + } + }); + } + event.preventDefault(); + return false; + }; quickReply.click(function() { textarea.val(replyStr); submitBtn.click(); - $.cookie('lastReplyTime', Date.now(), { expires: 7, path: '/' }); + lastReplyTime = Date.now(); + $.cookie('lastReplyTime', lastReplyTime, { expires: 7, path: '/' }); + }); + quickReply.on('contextmenu', function(e) { + e.stopPropagation(); + e.preventDefault(); + customReplyStr = prompt("输入自定义回复内容", replyStr || "1024"); + if (customReplyStr) { + replyStr = customReplyStr; + quickReply.attr('title', replyStr + "(右击修改)"); + $.cookie('customReplyStr', customReplyStr, { expires: 2147483647, path: '/' }); + } }); }); } From 4be5fd757f861f7eb353bd48d236e3f3fb816c12 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 18:04:20 +0800 Subject: [PATCH 049/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index ec84911ed8f..d92933f59ed 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -182,6 +182,10 @@ quickReply.val("回复成功"); submitBtn.val("提 交"); setCountdown(); + }, + fail: function () { + submitBtn.val("提 交"); + quickReply.removeAttr("disabled"); } }); } @@ -193,6 +197,7 @@ submitBtn.click(); lastReplyTime = Date.now(); $.cookie('lastReplyTime', lastReplyTime, { expires: 7, path: '/' }); + quickReply.attr("disabled", true); }); quickReply.on('contextmenu', function(e) { e.stopPropagation(); From 9485e58288b5acef4cdea2befe9c4f6c08ef79ff Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 18:09:24 +0800 Subject: [PATCH 050/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index d92933f59ed..07f41a334ad 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -179,12 +179,18 @@ url: form.attr('action'), data: form.serialize(), success: function () { - quickReply.val("回复成功"); submitBtn.val("提 交"); - setCountdown(); + quickReply.val("回复成功"); + setTimeout(() => { + setCountdown(); + }, 2000); }, fail: function () { submitBtn.val("提 交"); + quickReply.val("回复失败"); + setTimeout(() => { + quickReply.val(quickReplyStr); + }, 2000); quickReply.removeAttr("disabled"); } }); From 52ef09899917ec2b1961b3d95854fde9618cae6e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 18:47:09 +0800 Subject: [PATCH 051/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 07f41a334ad..833c6f8b509 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -181,6 +181,7 @@ success: function () { submitBtn.val("提 交"); quickReply.val("回复成功"); + quickReply.css("background", "yellow"); setTimeout(() => { setCountdown(); }, 2000); @@ -188,8 +189,10 @@ fail: function () { submitBtn.val("提 交"); quickReply.val("回复失败"); + quickReply.css("background", "rgb(244, 67, 54)"); setTimeout(() => { quickReply.val(quickReplyStr); + quickReply.css("background", ""); }, 2000); quickReply.removeAttr("disabled"); } From f07552e0ae6ca0e2afb1800e3d5e553e02c14c53 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 19:14:16 +0800 Subject: [PATCH 052/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index ec3f725d1a5..2fe035e027f 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.13.2 +// @version 2023.10.14.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -13926,7 +13926,7 @@ ImgOps | https://imgops.com/#b#`; case 'downloadImage': if(downloading)break; downloading=true; - var nodes = this.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); + var nodes = self.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); var saveParams = [],saveIndex=0; [].forEach.call(nodes, function(node){ if(unsafeWindow.getComputedStyle(node).display!="none"){ From 906def58ec07126656d3a7ade655fd30964f890e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 19:31:44 +0800 Subject: [PATCH 053/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 2fe035e027f..0cbfac1008e 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -16858,7 +16858,13 @@ ImgOps | https://imgops.com/#b#`; i.onclick=function(e){if(i.firstChild.style.display=="none"){i.firstChild.style.display="";i.firstChild.src=i.firstChild.src;return;}if(e.ctrlKey&&i.firstChild.src){window.open(i.firstChild.src,"_blank")}else{this.classList.toggle("select")}}\ });\ '; - _GM_openInTab('data:text/html;charset=utf-8,' + encodeURIComponent(html),{active:true}); + if (navigator.userAgent.indexOf("Firefox") != -1) { + let c = unsafeWindow.open("", "_blank"); + c.document.write(html); + c.document.close(); + } else { + _GM_openInTab('data:text/html;charset=utf-8,' + encodeURIComponent(html),{active:true}); + } }, copyImages: function(isAlert) { var nodes = this.eleMaps['sidebar-thumbnails-container'].querySelectorAll('.pv-gallery-sidebar-thumb-container[data-src]'); From f76ed1d1ef65943b240e4c2df2f1c05971ad9671 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 14 Oct 2023 19:47:38 +0800 Subject: [PATCH 054/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 0cbfac1008e..77fb4024866 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -17543,6 +17543,7 @@ ImgOps | https://imgops.com/#b#`; text-align: center;\ pointer-events: none;\ margin-bottom: 45px;\ + left: 0;\ bottom: 0;\ opacity: 0;\ transition: all .3s ease;\ From 7b602c5564d535184639d485d6f96a6727ad375c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 09:20:48 +0800 Subject: [PATCH 055/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 883b92072bf..3ff5ffb6e01 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.67 +// @version 1.9.36.68 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2242,13 +2242,17 @@ for (let i = 0; i < pageDivs.length; i++) { let p = pageDivs[i]; if (/(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)/i.test(p.title || p.value || '')) { - next = p; + next = p.querySelector('a') || p; break; } else if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test((p.innerText || '').trim())) { - next = p; + next = p.querySelector('a') || p; break; } } + if (next && this.linkHasNoHref(next)) { + if (!jsNext) jsNext = next; + next = null; + } } } if (!next) { @@ -7565,7 +7569,7 @@ scrollingToResize = true; let resizeHandler = () => { let touched = 0; - for (let i in resizePool) { + for (let i = 0; i < resizePool.length; i++) { let resizeArr = resizePool[i]; let iframe = resizeArr[1](); if (isTouchViewPort(iframe)) { From 150b9e56db886ea8fbd34b1443198376ea327c21 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 09:20:51 +0800 Subject: [PATCH 056/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index f0041f3a02b..d8b07cb6e97 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.67](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.68](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From 60c56a13b43c44f3e7ab0181cb8835dd21a3e48a Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 10:54:00 +0800 Subject: [PATCH 057/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 3ff5ffb6e01..90ae53b851d 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -7510,7 +7510,7 @@ let curScroll = getBody(document).scrollTop || document.documentElement.scrollTop; if (ruleParser.curSiteRule.singleUrl || forceState === 2) { let height = (getBody(frameDoc).scrollHeight || getBody(frameDoc).offsetHeight || 500); - if (!iframe.style.height || height - parseInt(iframe.style.height) > 50) { + if (!iframe.style.height || height - parseInt(iframe.style.height) > window.innerHeight) { iframe.style.height = height + "px"; iframe.style.minHeight = iframe.style.height; } From 686479b47407a728ab2b377ef6c174ad41a272a1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 11:12:00 +0800 Subject: [PATCH 058/812] Update DownloadAllContentSavaAsZIP.user.js --- DownloadAllContent/DownloadAllContentSavaAsZIP.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js index 71aea8f2d18..6164b0f392d 100644 --- a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js +++ b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js @@ -3,7 +3,7 @@ // @name:zh-CN 怠惰小说下载器 ZIP 扩展 // @name:zh-TW 怠惰小説下載器 ZIP 擴充 // @namespace hoothin -// @version 0.1 +// @version 0.2 // @description Save content as ZIP for DownloadAllContent // @description:zh-CN 下载时分章节保存 TXT 并打包为 ZIP // @description:zh-TW 下載時分章節儲存 TXT 並打包為 ZIP @@ -36,7 +36,7 @@ let catTitle = cat.match(/.*?\r\n/); if (!catTitle) return; catTitle = catTitle[0].trim(); - zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "") + ".txt", cat.replace(catTitle, "").trim()); + zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "").slice(0, 50) + ".txt", cat.replace(catTitle, "").trim()); }); zip.generateAsync({type: "blob", compression: "DEFLATE"}, meta => {zipTips.innerText = "percent: " + ((meta && meta.percent && meta.percent.toFixed(2)) || "100") + "%"}).then(function(content){ callback(content); From 2d2c2784b9ecba70e5b6d147cf62164f4bd56a00 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 14:03:11 +0800 Subject: [PATCH 059/812] Update README.md --- DownloadAllContent/README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 1539a0014ea..dc8bd9f1fa0 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -140,6 +140,35 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` javascript .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` + 18. [📕豆瓣閲讀](https://read.douban.com/column/64079189/) + > 礙於法律問題,不會給出具體規則。只是因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下 +``` javascript +function decode(t) { + const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) + , r = (new TextDecoder).decode(new Uint8Array([99, 114, 121, 112, 116, 111])) + , o = (new TextDecoder).decode(new Uint8Array([115, 117, 98, 116, 108, 101])) + , a = (new TextDecoder).decode(new Uint8Array([100, 105, 103, 101, 115, 116])) + , h = (new TextDecoder).decode(new Uint8Array([83, 72, 65, 45, 50, 53, 54])) + , l = (new TextDecoder).decode(new Uint8Array([105, 109, 112, 111, 114, 116, 75, 101, 121])) + , c = (new TextDecoder).decode(new Uint8Array([100, 101, 99, 114, 121, 112, 116])) + , u = (new TextDecoder).decode(new Uint8Array([105, 118])); + const e = Uint8Array.from(window.atob(t), (t=>t.charCodeAt(0))) + , i = e.buffer + , d = e.length - 16 - 13 + , p = new Uint8Array(i,d,16) + , f = new Uint8Array(i,0,d) + , g = {}; + return g.name = s, + g[u] = p, + function() { + const t = Ark.user + , e = t.isAnonymous ? document.cookie.replace(/.*bid=(\w+).*/,"$1") : t.id + , i = (new TextEncoder).encode(e); + return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c]))) + }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) +} +``` + > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 通過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。 ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html From 9ca27ccc52a87f8e8024bf53d492d4d17ef25474 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 14:04:39 +0800 Subject: [PATCH 060/812] Update README.md --- DownloadAllContent/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index dc8bd9f1fa0..3ad1b49cdc4 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -141,7 +141,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` 18. [📕豆瓣閲讀](https://read.douban.com/column/64079189/) - > 礙於法律問題,不會給出具體規則。只是因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下 + > 礙於法律問題,不會給出具體規則。只是因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。後期豆瓣如若更新則不再更進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下 ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) @@ -168,7 +168,7 @@ function decode(t) { }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } ``` - > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 通過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。 + > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。 ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html From 368259c77901a8bd72982242c6517d04433f9824 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 14:10:56 +0800 Subject: [PATCH 061/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 3ad1b49cdc4..3f091fcb36f 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -168,7 +168,7 @@ function decode(t) { }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } ``` - > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。 + > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html From 1d86e920425bb2c3c596caad386b708f6f7ea1a1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 15 Oct 2023 19:31:59 +0800 Subject: [PATCH 062/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 77fb4024866..24e4c29bffd 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.14.1 +// @version 2023.10.15.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16051,7 +16051,7 @@ ImgOps | https://imgops.com/#b#`; for(var i=0,ii=data.length;i Date: Mon, 16 Oct 2023 08:31:54 +0800 Subject: [PATCH 063/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- ...nal Chinese and Simplified Chinese.user.js | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 831f8561a5d..d90ff349fa5 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.6.42 +// @version 1.2.6.43 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -21,6 +21,7 @@ // @grant GM_deleteValue // @grant GM_openInTab // @grant GM_getResourceText +// @grant GM_info // @grant GM.setValue // @grant GM.getValue // @grant GM.registerMenuCommand @@ -29,6 +30,7 @@ // @grant GM.deleteValue // @grant GM.openInTab // @grant GM.getResourceText +// @grant GM.info // @grant unsafeWindow // @resource pinyinTree https://hoothin.github.io/UserScripts/Switch%20Traditional%20Chinese%20and%20Simplified%20Chinese/pinyinTree.json // @contributionURL https://ko-fi.com/hoothin @@ -62,8 +64,8 @@ var pinyinMetaKey = false; var disablePinyin = false; //此處為單字轉換,scStr 為簡體字列表,tcStr 為正體字列表,一簡對多繁時,可能有多個對應組合,以第一個組合爲準 - var scStr = '万与丑专业丛东丝丢两严丧个丰临为为丽举么么义乌乐乔习乡书买乱争于亏云亘亚产产亩亲亵亸亿仅仆从仑仓仪们价众众优伙会伛伞伟传伡伣伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬侭俣俦俨俩俪俫俭借债倾偬偻偾偿傤傥傧储傩儿克兑兖党兰关兴兹养兽冁内冈册冗写军农冢冯冲冲决况冻净凄准凉凌减凑凛几凤处凫凭凯凶击凿刍划刘则刚创删别刬刭制刹刽刾刿剀剂剐剑剥剥剧劝办务劢动励劲劳势勋勖勚匀匦匮区医华协单卖卜卢卤卧卫却卷厂厅历历厉压厌厍厐厕厘厠厢厣厦厨厩厮县叁参叆叇双发发变叙叠只台叶号叹叹叽吁后吓吕吗吨听听听启启吴呆呐呒呓呕呖呗员呙呛呜周咏咙咛咝咤咨咸响哑哒哓哔哕哗哙哜哝哟唇唉唛唝唠唡唢唤啓啧啬啭啮啯啰啴啸喂喷喽喾嗫嗳嘘嘤嘱噜嚣团园囱围囵国图圆圣圹场坏块坚坛坜坝坞坟坠垄垅垆垒垦垩垫垭垯垱垲垴埘埙埚堑堕塆墙墻壊壮声壳壶壸処备复复够头夸夹夺奁奂奋奖奥奬妆妇妈妩妪妫姗姜姹娄娅娆娇娈娱娲娴婳婴婵婶媪媭嫒嫔嫱嬀嬷孙学孪宁宁宝实宠审宪宫宽宽宾寝对寻导寿将尔尘尝尧尴尸尽尽层屃屉届属屡屦屿岁岂岖岗岘岚岛岩岭岳岽岿峃峄峡峣峤峥峦峰崂崃崄崭嵘嵚嵝巅巨巩巯币布帅师帏帐帘帜带帧帮帱帻帼幂干干并并广庄庆床庐庑库应庙庞废庼廏廪开异弃弑张弥弪弯弹强归当录彝彟彦彨彻征径徕御忆忏志忧念忾怀态怂怃怄怅怆怜总怼怿恋恒恳恶恶恸恹恺恻恼恽悦悫悬悭悮悯惊惧惨惩惫惬惭惮惯愠愤愦愿慑慭懑懒懔戆戋戏戗战戬户扎扑托扦执扩扪扫扬扰抚抛抟抠抡抢护报抬抻担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捂捝捞损捡换捣据捻掳掴掷掸掺掼揽揾揿搀搁搂搄搅携摄摅摆摇摈摊撄撑撵撷撸撺擜擞攒敌敍敚敛敩数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权杠条来杨杩杰松板极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桠桡桢档桤桥桦桧桨桩桪梁梦梼梾梿检棁棂棱椁椝椟椠椢椤椫椭椮楼榄榅榇榈榉榝槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴殻毁毂毕毙毡毵氇气氢氩氲汇汇汉污汤汹沟没沣沤沥沦沧沨沩沪泄泞注泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涚涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溁溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪潆潇潋潍潙潜潨潴澛澜濑濒灏灭灯灵灶灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烟烦烧烨烩烫烬热焕焖焘煴爱爲爷牍牦牵牺犊状犷犸犹狈狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珐珑珰珲琎琏琐琼瑶瑷瑸璎瓒瓮瓯産电画畅畴疖疗疟疠疡疬疭疮疯疱疴痈痉痒痖痨痪痫痴痹瘅瘆瘉瘗瘘瘪瘫瘾瘿癞癣癫皋皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑睾瞆瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硵硷碍碛碜碱礼祃祎祢祯祷祸禀禄禅离秃秆种秘积称秸秽秾稆税稣稳穑穞穷窃窍窎窑窜窝窥窦窭竖竞竪笃笋笔笕笺笼笾筑筚筛筜筝筹筼签签筿简箓箦箧箨箩箪箫篑篓篮篯篱簖籁籴类籼粜粝粤粪粮糁糇糍系系紧绝絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络絶绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡群翘翙翚翱耢耧耸耻聂聋职聍联聩聪肃肠肤肮肴肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑膻臜致舆舍舣舰舱舻艰艳艺节芈芗芜芦苁苇苈苋苌苍苎苏苧苹范茎茏茑茔茕茧荆荐荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒀蒇蒉蒋蒌蒏蓝蓟蓠蓣蓥蓦蔂蔷蔹蔺蔼蕰蕲蕴薮藓蘖虏虑虚虫虬虮虱虽虾虿蚀蚁蚂蚃蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衆衔补表衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯訚詟誉誊说谣讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞跡践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯軆輼车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辟辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郏郐郑郓郦郧郸酂酝酦酱酽酾酿采释里里鈎鉴鉴銮鋭録錾钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链链铿销锁锂锃锄锅锆锇锈锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶长閲门闩闪闫闬闭问闯闰闱闲闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陦陧陨险随隐隶隽难雇雏雠雳雾霁霉霡霭靓靔静面靥鞑鞒鞯鞲韦韧韨韩韪韫韬韵頽顔页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕駡马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓鬶魇魉鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鷀鷄鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹾麦麸麹麽黄黉黡黩黪黾鼋鼌鼍鼹齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟酸幸'; - var tcStr = '萬與醜專業叢東絲丟兩嚴喪個豐臨爲為麗舉麽麼義烏樂喬習鄉書買亂爭於虧雲亙亞産產畝親褻嚲億僅僕從侖倉儀們價衆眾優夥會傴傘偉傳俥俔傷倀倫傖僞佇體餘傭僉俠侶僥偵側僑儈儕儂儘俁儔儼倆儷倈儉藉債傾傯僂僨償儎儻儐儲儺兒剋兌兗黨蘭關興茲養獸囅內岡冊宂寫軍農塚馮沖衝決況凍淨淒準涼淩減湊凜幾鳳處鳧憑凱兇擊鑿芻劃劉則剛創刪別剗剄製剎劊㓨劌剴劑剮劍剝褫劇勸辦務勱動勵勁勞勢勳勗勩勻匭匱區醫華協單賣蔔盧鹵臥衛卻捲廠廳曆歷厲壓厭厙龎廁釐廁廂厴廈廚廄廝縣叄參靉靆雙發髮變敘疊隻臺葉號歎嘆嘰籲後嚇呂嗎噸聽聼聴啓啟吳獃吶嘸囈嘔嚦唄員咼嗆嗚週詠嚨嚀噝吒諮鹹響啞噠嘵嗶噦嘩噲嚌噥喲脣欸嘜嗊嘮啢嗩喚啟嘖嗇囀齧嘓囉嘽嘯餵噴嘍嚳囁噯噓嚶囑嚕囂團園囪圍圇國圖圓聖壙場壞塊堅壇壢壩塢墳墜壟壠壚壘墾堊墊埡墶壋塏堖塒壎堝塹墮壪牆牆壞壯聲殼壺壼處備複復夠頭誇夾奪奩奐奮獎奧獎妝婦媽嫵嫗媯姍薑奼婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬃嬡嬪嬙媯嬤孫學孿甯寧寶實寵審憲宮寬寛賓寢對尋導壽將爾塵嘗堯尷屍盡儘層屭屜屆屬屢屨嶼歲豈嶇崗峴嵐島巖嶺嶽崬巋嶨嶧峽嶢嶠崢巒峯嶗崍嶮嶄嶸嶔嶁巔鉅鞏巰幣佈帥師幃帳簾幟帶幀幫幬幘幗冪幹乾並併廣莊慶牀廬廡庫應廟龐廢廎廄廩開異棄弒張彌弳彎彈強歸當錄彜彠彥彲徹徵徑徠禦憶懺誌憂唸愾懷態慫憮慪悵愴憐總懟懌戀恆懇惡噁慟懨愷惻惱惲悅愨懸慳悞憫驚懼慘懲憊愜慚憚慣慍憤憒願懾憖懣懶懍戇戔戲戧戰戩戶紮撲託扡執擴捫掃揚擾撫拋摶摳掄搶護報擡捵擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏摀挩撈損撿換搗據撚擄摑擲撣摻摜攬搵撳攙擱摟揯攪攜攝攄擺搖擯攤攖撐攆擷擼攛㩵擻攢敵敘敓斂斆數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權槓條來楊榪傑鬆闆極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒椏橈楨檔榿橋樺檜槳樁樳樑夢檮棶槤檢梲櫺稜槨槼櫝槧槶欏樿橢槮樓欖榲櫬櫚櫸樧檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆殼毀轂畢斃氈毿氌氣氫氬氳彙匯漢汙湯洶溝沒灃漚瀝淪滄渢溈滬洩濘註淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧涗濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕濚潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦瀠瀟瀲濰溈潛潀瀦瀂瀾瀨瀕灝滅燈靈竈災燦煬爐燉煒熗點煉熾爍爛烴燭煙菸煩燒燁燴燙燼熱煥燜燾熅愛為爺牘犛牽犧犢狀獷獁猶狽獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽琺瓏璫琿璡璉瑣瓊瑤璦璸瓔瓚甕甌產電畫暢疇癤療瘧癘瘍癧瘲瘡瘋皰痾癰痙癢瘂癆瘓癇癡痺癉瘮癒瘞瘻癟癱癮癭癩癬癲臯皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼睪瞶瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確磠鹼礙磧磣堿禮禡禕禰禎禱禍稟祿禪離禿稈種祕積稱稭穢穠穭稅穌穩穡穭窮竊竅窵窯竄窩窺竇窶豎競豎篤筍筆筧箋籠籩築篳篩簹箏籌篔簽籤篠簡籙簀篋籜籮簞簫簣簍籃籛籬籪籟糴類秈糶糲粵糞糧糝餱餈係繫緊絕縶糹糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線綫紺紲紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏縧繼綈績緒綾緓續綺緋綽鞝緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨羣翹翽翬翺耮耬聳恥聶聾職聹聯聵聰肅腸膚骯餚腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏羶臢緻輿捨艤艦艙艫艱豔藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇薴蘋範莖蘢蔦塋煢繭荊薦薘莢蕘蓽萴蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蒕蕆蕢蔣蔞醟藍薊蘺蕷鎣驀虆薔蘞藺藹薀蘄蘊藪蘚櫱虜慮虛蟲虯蟣蝨雖蝦蠆蝕蟻螞蠁蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁眾銜補錶襯袞襖裊褘襪襲襏裝襠褌褳襝褲襉褸襤襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶誾讋譽謄説謡訁計訂訃認譏訐訌討讓訕訖託訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談讅誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗謚謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶贓貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗贊讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒蹟踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀體轀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭闢辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郟鄶鄭鄆酈鄖鄲酇醞醱醬釅釃釀採釋裏裡鉤鑒鑑鑾銳錄鏨釒釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鉅鈍鈔鍾鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鈎鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鉋鈰鉉鉈鉍鈮鈹鐸鉶銬銠鉺鋩錏銪鋮鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鎩鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鍊鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銹銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺鍩錯錨錛錡鍀錁錕錩錫錮鑼錘錐錦鑕鍁錈鍃錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鐨鎇鏌鎮鎛鎘鑷钂鐫鎳鎿鎦鎬鎊鎰鎵鑌鎔鏢鏜鏝鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔钀鑞鑱鑲長閱門閂閃閆閈閉問闖閏闈閑閒閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隯隉隕險隨隱隸雋難僱雛讎靂霧霽黴霢靄靚靝靜麵靨韃鞽韉韝韋韌韍韓韙韞韜韻頹顏頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顔顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飈飛饗饜飠飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢罵馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢鬹魘魎魚魛魢魷魨魯魴䰾魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鰺鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鼈鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣䲘鶿雞鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鷽鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鵾鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶖鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺䴉鸇鷹鸌鸏鸛鸘鹺麥麩麴麼黃黌黶黷黲黽黿鼂鼉鼴齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜痠倖'; + var scStr = '万与丑专业丛东丝丢两严丧个丰临为为丽举么么义乌乐乔习乡书买乱争于亏云亘亚产产亩亲亵亸亿仅仆从仑仓仪们价众众优伙会伛伞伟传伡伣伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬侭俣俦俨俩俪俫俭借债倾偬偻偾偿傤傥傧储傩儿克兑兖党兰关兴兹养兽冁内冈册冗写军农冢冯冲冲决况冻净凄准凉凌减凑凛几凤处凫凭凯凶击凿刍划刘则刚创删别刬刭制刹刽刾刿剀剂剐剑剥剥剧劝办务劢动励劲劳势勋勖勚匀匦匮区医华协单卖卜卢卤卧卫却卷厂厅历历厉压厌厍厐厕厘厠厢厣厦厨厩厮县叁参叆叇双发发变叙叠只台叶号叹叹叽吁后吓吕吗吨听听听启启吴呆呐呒呓呕呖呗员呙呛呜周咏咙咛咝咤咨咸响哑哒哓哔哕哗哙哜哝哟唇唉唛唝唠唡唢唤啓啧啬啭啮啯啰啴啸喂喷喽喾嗫嗳嘘嘤嘱噜嚣团园囱围囵国图圆圣圹场坏块坚坛坜坝坞坟坠垄垅垆垒垦垩垫垭垯垱垲垴埘埙埚堑堕塆墙墻壊壮声壳壶壸処备复复够头夸夹夺奁奂奋奖奥奬妆妇妈妩妪妫姗姜姹娄娅娆娇娈娱娲娴婳婴婵婶媪媭嫒嫔嫱嬀嬷孙学孪宁宁宝实宠审宪宫宽宽宾寝对寻导寿将尔尘尝尧尴尸尽尽层屃屉届属屡屦屿岁岂岖岗岘岚岛岩岭岳岽岿峃峄峡峣峤峥峦峰崂崃崄崭嵘嵚嵝巅巨巩巯币布帅师帏帐帘帜带帧帮帱帻帼幂干干并并广庄庆床庐庑库应庙庞废庼廏廪开异弃弑张弥弪弯弹强归当录彝彟彦彨彻征径徕御忆忏志忧念忾怀态怂怃怄怅怆怜总怼怿恋恒恳恶恶恸恹恺恻恼恽悦悫悬悭悮悯惊惧惨惩惫惬惭惮惯愠愤愦愿慑慭懑懒懔戆戋戏戗战戬户扎扑托扦执扩扪扫扬扰抚抛抟抠抡抢护报抬抻担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捂捝捞损捡换捣据捻掳掴掷掸掺掼揽揾揿搀搁搂搄搅携摄摅摆摇摈摊撄撑撵撷撸撺擜擞攒敌敍敚敛敩数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权杠条来杨杩杰松板极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桠桡桢档桤桥桦桧桨桩桪梁梦梼梾梿检棁棂棱椁椝椟椠椢椤椫椭椮楼榄榅榇榈榉榝槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴殻毁毂毕毙毡毵氇气氢氩氲汇汇汉污汤汹沟没沣沤沥沦沧沨沩沪泄泞注泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涚涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溁溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪潆潇潋潍潙潜潨潴澛澜濑濒灏灭灯灵灶灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烟烦烧烨烩烫烬热焕焖焘煴爱爲爷牍牦牵牺犊状犷犸犹狈狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珐珑珰珲琎琏琐琼瑶瑷瑸璎瓒瓮瓯産电画畅畴疖疗疟疠疡疬疭疮疯疱疴痈痉痒痖痨痪痫痴痹瘅瘆瘉瘗瘘瘪瘫瘾瘿癞癣癫皋皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑睾瞆瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硵硷碍碛碜碱礼祃祎祢祯祷祸禀禄禅离秃秆种秘积称秸秽秾稆税稣稳穑穞穷窃窍窎窑窜窝窥窦窭竖竞竪笃笋笔笕笺笼笾筑筚筛筜筝筹筼签签筿简箓箦箧箨箩箪箫篑篓篮篯篱簖籁籴类籼粜粝粤粪粮糁糇糍系系紧绝絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络絶绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡群翘翙翚翱耢耧耸耻聂聋职聍联聩聪肃肠肤肮肴肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑膻臜致舆舍舣舰舱舻艰艳艺节芈芗芜芦苁苇苈苋苌苍苎苏苧苹范茎茏茑茔茕茧荆荐荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒀蒇蒉蒋蒌蒏蓝蓟蓠蓣蓥蓦蔂蔷蔹蔺蔼蕰蕲蕴薮藓蘖虏虑虚虫虬虮虱虽虾虿蚀蚁蚂蚃蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衆衔补表衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯訚詟誉誊说说谣讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞跡践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯軆輼车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辟辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郏郐郑郓郦郧郸酂酝酦酱酽酾酿采释里里鈎鉴鉴銮鋭録錾钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链链铿销锁锂锃锄锅锆锇锈锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶长閲门闩闪闫闬闭问闯闰闱闲闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陦陧陨险随隐隶隽难雇雏雠雳雾霁霉霡霭靓靔静面靥鞑鞒鞯鞲韦韧韨韩韪韫韬韵頽顔页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕駡马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓鬶魇魉鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鷀鷄鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹾麦麸麹麽黄黉黡黩黪黾鼋鼌鼍鼹齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟酸幸'; + var tcStr = '萬與醜專業叢東絲丟兩嚴喪個豐臨爲為麗舉麽麼義烏樂喬習鄉書買亂爭於虧雲亙亞産產畝親褻嚲億僅僕從侖倉儀們價衆眾優夥會傴傘偉傳俥俔傷倀倫傖僞佇體餘傭僉俠侶僥偵側僑儈儕儂儘俁儔儼倆儷倈儉藉債傾傯僂僨償儎儻儐儲儺兒剋兌兗黨蘭關興茲養獸囅內岡冊宂寫軍農塚馮沖衝決況凍淨淒準涼淩減湊凜幾鳳處鳧憑凱兇擊鑿芻劃劉則剛創刪別剗剄製剎劊㓨劌剴劑剮劍剝褫劇勸辦務勱動勵勁勞勢勳勗勩勻匭匱區醫華協單賣蔔盧鹵臥衛卻捲廠廳曆歷厲壓厭厙龎廁釐廁廂厴廈廚廄廝縣叄參靉靆雙發髮變敘疊隻臺葉號歎嘆嘰籲後嚇呂嗎噸聽聼聴啓啟吳獃吶嘸囈嘔嚦唄員咼嗆嗚週詠嚨嚀噝吒諮鹹響啞噠嘵嗶噦嘩噲嚌噥喲脣欸嘜嗊嘮啢嗩喚啟嘖嗇囀齧嘓囉嘽嘯餵噴嘍嚳囁噯噓嚶囑嚕囂團園囪圍圇國圖圓聖壙場壞塊堅壇壢壩塢墳墜壟壠壚壘墾堊墊埡墶壋塏堖塒壎堝塹墮壪牆牆壞壯聲殼壺壼處備複復夠頭誇夾奪奩奐奮獎奧獎妝婦媽嫵嫗媯姍薑奼婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬃嬡嬪嬙媯嬤孫學孿甯寧寶實寵審憲宮寬寛賓寢對尋導壽將爾塵嘗堯尷屍盡儘層屭屜屆屬屢屨嶼歲豈嶇崗峴嵐島巖嶺嶽崬巋嶨嶧峽嶢嶠崢巒峯嶗崍嶮嶄嶸嶔嶁巔鉅鞏巰幣佈帥師幃帳簾幟帶幀幫幬幘幗冪幹乾並併廣莊慶牀廬廡庫應廟龐廢廎廄廩開異棄弒張彌弳彎彈強歸當錄彜彠彥彲徹徵徑徠禦憶懺誌憂唸愾懷態慫憮慪悵愴憐總懟懌戀恆懇惡噁慟懨愷惻惱惲悅愨懸慳悞憫驚懼慘懲憊愜慚憚慣慍憤憒願懾憖懣懶懍戇戔戲戧戰戩戶紮撲託扡執擴捫掃揚擾撫拋摶摳掄搶護報擡捵擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏摀挩撈損撿換搗據撚擄摑擲撣摻摜攬搵撳攙擱摟揯攪攜攝攄擺搖擯攤攖撐攆擷擼攛㩵擻攢敵敘敓斂斆數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權槓條來楊榪傑鬆闆極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒椏橈楨檔榿橋樺檜槳樁樳樑夢檮棶槤檢梲櫺稜槨槼櫝槧槶欏樿橢槮樓欖榲櫬櫚櫸樧檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆殼毀轂畢斃氈毿氌氣氫氬氳彙匯漢汙湯洶溝沒灃漚瀝淪滄渢溈滬洩濘註淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧涗濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕濚潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦瀠瀟瀲濰溈潛潀瀦瀂瀾瀨瀕灝滅燈靈竈災燦煬爐燉煒熗點煉熾爍爛烴燭煙菸煩燒燁燴燙燼熱煥燜燾熅愛為爺牘犛牽犧犢狀獷獁猶狽獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽琺瓏璫琿璡璉瑣瓊瑤璦璸瓔瓚甕甌產電畫暢疇癤療瘧癘瘍癧瘲瘡瘋皰痾癰痙癢瘂癆瘓癇癡痺癉瘮癒瘞瘻癟癱癮癭癩癬癲臯皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼睪瞶瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確磠鹼礙磧磣堿禮禡禕禰禎禱禍稟祿禪離禿稈種祕積稱稭穢穠穭稅穌穩穡穭窮竊竅窵窯竄窩窺竇窶豎競豎篤筍筆筧箋籠籩築篳篩簹箏籌篔簽籤篠簡籙簀篋籜籮簞簫簣簍籃籛籬籪籟糴類秈糶糲粵糞糧糝餱餈係繫緊絕縶糹糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線綫紺紲紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏縧繼綈績緒綾緓續綺緋綽鞝緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨羣翹翽翬翺耮耬聳恥聶聾職聹聯聵聰肅腸膚骯餚腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏羶臢緻輿捨艤艦艙艫艱豔藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇薴蘋範莖蘢蔦塋煢繭荊薦薘莢蕘蓽萴蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蒕蕆蕢蔣蔞醟藍薊蘺蕷鎣驀虆薔蘞藺藹薀蘄蘊藪蘚櫱虜慮虛蟲虯蟣蝨雖蝦蠆蝕蟻螞蠁蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁眾銜補錶襯袞襖裊褘襪襲襏裝襠褌褳襝褲襉褸襤襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶誾讋譽謄說説謡訁計訂訃認譏訐訌討讓訕訖託訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談讅誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗謚謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶贓貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗贊讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒蹟踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀體轀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭闢辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郟鄶鄭鄆酈鄖鄲酇醞醱醬釅釃釀採釋裏裡鉤鑒鑑鑾銳錄鏨釒釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鉅鈍鈔鍾鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鈎鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鉋鈰鉉鉈鉍鈮鈹鐸鉶銬銠鉺鋩錏銪鋮鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鎩鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鍊鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銹銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺鍩錯錨錛錡鍀錁錕錩錫錮鑼錘錐錦鑕鍁錈鍃錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鐨鎇鏌鎮鎛鎘鑷钂鐫鎳鎿鎦鎬鎊鎰鎵鑌鎔鏢鏜鏝鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔钀鑞鑱鑲長閱門閂閃閆閈閉問闖閏闈閑閒閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隯隉隕險隨隱隸雋難僱雛讎靂霧霽黴霢靄靚靝靜麵靨韃鞽韉韝韋韌韍韓韙韞韜韻頹顏頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顔顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飈飛饗饜飠飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢罵馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢鬹魘魎魚魛魢魷魨魯魴䰾魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鰺鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鼈鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣䲘鶿雞鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鷽鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鵾鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶖鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺䴉鸇鷹鸌鸏鸛鸘鹺麥麩麴麼黃黌黶黷黲黽黿鼂鼉鼴齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜痠倖'; //此處為匹配上具體詞語就優先轉換的單字,簡體與正體分開處理。可以用來處理異體字,或者同字替換,以取消單字匹配時的轉換操作 //簡轉繁,單向轉換 var sc2tc = {'为':'為', @@ -86,7 +88,7 @@ '聴':'聽', '巨':[ '巨', - ['鉅','巨款','巨富','巨细靡遗','巨子'] + ['鉅','巨款','巨富','巨细','巨子'] ], '折':[ '折', @@ -704,6 +706,7 @@ } const inConfigPage = location.host == 'greasyfork.org' && /scripts\/24300(\-[^\/]*)?$/.test(location.pathname); + var _GM_listValues, _GM_registerMenuCommand, _GM_notification, _GM_openInTab, _GM_getResourceText, _GM_info; var isSimple = (lang === "zh-cn" || lang === "zh-hans" || lang === "zh-sg" || lang === "zh-my"); var action = 0;//1:noChange, 2:showSimplified, 3:showTraditional @@ -1059,7 +1062,6 @@ } } - var _GM_listValues, _GM_registerMenuCommand, _GM_notification, _GM_openInTab, _GM_getResourceText; _GM_listValues = (cb) => { if (typeof GM_listValues != 'undefined') { cb(GM_listValues()); @@ -1104,6 +1106,13 @@ } else { _GM_getResourceText = (s) => {}; } + if (typeof GM_info != 'undefined') { + _GM_info = GM_info; + } else if (typeof GM != 'undefined' && typeof GM.info != 'undefined') { + _GM_info = GM.info; + } else { + _GM_info = {script: {}}; + } //將接口暴露出去 var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; @@ -1794,7 +1803,20 @@ return false; } - getMulValue(["auto", "shortcutKey", "ctrlKey", "altKey", "shiftKey", "metaKey", "disablePinyin", "pinyinShortcutKey", "pinyinCtrlKey", "pinyinAltKey", "pinyinShiftKey", "pinyinMetaKey", "sc2tcCombConfig", "illiteracyConfig", "notification", "isSimple", "sc2tcCombTree", "tc2scCombTree", "fuckIlliteracyTree", "stDict", "tsDict", currentAction], async values => { + getMulValue(["version", "auto", "shortcutKey", "ctrlKey", "altKey", "shiftKey", "metaKey", "disablePinyin", "pinyinShortcutKey", "pinyinCtrlKey", "pinyinAltKey", "pinyinShiftKey", "pinyinMetaKey", "sc2tcCombConfig", "illiteracyConfig", "notification", "isSimple", "sc2tcCombTree", "tc2scCombTree", "fuckIlliteracyTree", "stDict", "tsDict", currentAction], async values => { + if (_GM_info.script && _GM_info.script.version && _GM_info.script.version !== '1.0.0' && values.version != _GM_info.script.version) { + storage.setItem('version', _GM_info.script.version); + storage.setItem('stDict', ""); + storage.setItem('tsDict', ""); + storage.setItem('sc2tcCombTree', ""); + storage.setItem('tc2scCombTree', ""); + storage.setItem('fuckIlliteracyTree', ""); + values.stDict = ""; + values.tsDict = ""; + values.sc2tcCombTree = ""; + values.tc2scCombTree = ""; + values.fuckIlliteracyTree = ""; + } let href = location.href.slice(0, 500); if (values.sc2tcCombConfig) { auto = values.auto; From fdce6343d4cce4d1b2280827a213c3f19e3dc94b Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 16 Oct 2023 08:54:47 +0800 Subject: [PATCH 064/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 833c6f8b509..6b31fb7d5cc 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.3 +// @version 0.6.4 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -152,19 +152,24 @@ var customReplyStr = $.cookie('customReplyStr'); if (customReplyStr) replyStr = customReplyStr; quickReply.attr('title', replyStr + "(右击修改)"); + var formTitle = $("form td.h>b").text(); function setCountdown() { quickReply.attr("disabled", true); quickReply.css("background", "initial"); - quickReply.val(quickReplyStr + ": " + parseInt((lastReplyTime - Date.now()) / 1000 + 1025) + "s"); + var leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); + quickReply.val(quickReplyStr + ": " + leftTime + "s"); + $("form td.h>b").text(`${formTitle}(${leftTime + "s"})`); var countTimer = setInterval(() => { - var leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); + leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); if (leftTime <= 0) { quickReply.val(quickReplyStr); + $("form td.h>b").text(formTitle); quickReply.removeAttr("disabled"); quickReply.css("background", ""); clearInterval(countTimer); } else { quickReply.val(quickReplyStr + ": " + leftTime + "s"); + $("form td.h>b").text(`${formTitle}(${leftTime + "s"})`); } }, 1000); } @@ -182,17 +187,21 @@ submitBtn.val("提 交"); quickReply.val("回复成功"); quickReply.css("background", "yellow"); + $("form td.h").css("background", "yellow"); setTimeout(() => { setCountdown(); + $("form td.h").css("background", ""); }, 2000); }, fail: function () { submitBtn.val("提 交"); quickReply.val("回复失败"); quickReply.css("background", "rgb(244, 67, 54)"); + $("form td.h").css("background", "rgb(244, 67, 54)"); setTimeout(() => { quickReply.val(quickReplyStr); quickReply.css("background", ""); + $("form td.h").css("background", ""); }, 2000); quickReply.removeAttr("disabled"); } From 714927cb839b72db3c21f237f16fec0f0b1d6564 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 16 Oct 2023 09:24:15 +0800 Subject: [PATCH 065/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 90ae53b851d..1a4bc2aa08c 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.68 +// @version 1.9.36.69 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1561,8 +1561,11 @@ const maxNum = 2147483647; let moreChild = ele.children[0], minOffsetTop = maxNum; while (moreChild) { - if ((moreChild.offsetParent == ele || moreChild.offsetParent == ele.offsetParent) && moreChild.offsetTop < minOffsetTop) { - minOffsetTop = moreChild.offsetTop; + if ((moreChild.offsetParent == ele || moreChild.offsetParent == ele.offsetParent)) { + let curOffsetTop = moreChild.offsetParent == ele.offsetParent ? moreChild.offsetTop - ele.offsetTop : moreChild.offsetTop; + if (curOffsetTop < minOffsetTop) { + minOffsetTop = curOffsetTop; + } } moreChild = moreChild.nextElementSibling; } From a48fb5d7a246c278f7356482eddfcc97dbaccb0b Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 16 Oct 2023 09:24:18 +0800 Subject: [PATCH 066/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index d8b07cb6e97..9ddd87f0916 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.68](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.69](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From 2b91c3c339e3b2b968fbba1904a22754ed138eed Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 16 Oct 2023 09:49:37 +0800 Subject: [PATCH 067/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 6b31fb7d5cc..238e5499da6 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -13,6 +13,7 @@ (function() { 'use strict'; + const defaultReply = "1024 感謝分享"; var helper = { addCss: function(css) { var style = document.createElement('style'); @@ -220,7 +221,7 @@ quickReply.on('contextmenu', function(e) { e.stopPropagation(); e.preventDefault(); - customReplyStr = prompt("输入自定义回复内容", replyStr || "1024"); + customReplyStr = prompt("输入自定义回复内容", replyStr || defaultReply); if (customReplyStr) { replyStr = customReplyStr; quickReply.attr('title', replyStr + "(右击修改)"); From b7bdf1e10400435cc80e6be441fb9c2d4293e352 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 16 Oct 2023 13:34:46 +0800 Subject: [PATCH 068/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 946abbcf522..330fd55606a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.8 +// @version 1.6.30.9 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -219,7 +219,7 @@ url: "https://cli.im/text#p{#text-content=%s&click(#click-create)}" }, { name: "💲 USD to RMB", - url: "showTips:https://api.exchangerate.host/convert?from=USD&to=CNY&amount=1 \n{name}
%s USD = {json.result|*%s.replace(/\D/,'')} RMB", + url: "showTips:http://apilayer.net/api/convert?from=USD&to=CNY&amount=1&access_key=%template{apilayer key} \n{name}
%s USD = {json.result|*%s.replace(/\D/,'')} RMB", kwFilter: "\\d\\$|\\$\\d" } ] }, @@ -566,7 +566,8 @@ Wednesday: '星期三 (水)', Thursday: '星期四 (木)', Friday: '星期五 (金)', - Saturday: '星期六 (土)' + Saturday: '星期六 (土)', + template: '请设置【#t#】的值' }; break; case "zh-TW": @@ -668,7 +669,8 @@ Wednesday: '星期三 (水)', Thursday: '星期四 (木)', Friday: '星期五 (金)', - Saturday: '星期六 (土)' + Saturday: '星期六 (土)', + template: '請設置【#t#】的值' }; break; default: @@ -762,7 +764,8 @@ sleepPrompt: 'Wait time (milliseconds)', startCache: 'Start cache icons of engines, do not close this page!', cacheOver: 'All icons cached!', - cspDisabled: 'The style of SearchJumper is blocked by the CSP of current site, please try to install the Allow CSP: Content-Security-Policy extension to obtain permission' + cspDisabled: 'The style of SearchJumper is blocked by the CSP of current site, please try to install the Allow CSP: Content-Security-Policy extension to obtain permission', + template: 'Please set the value of "#t#"' }; break; } @@ -2592,7 +2595,7 @@ } mark.searchJumper, a.searchJumper { - visibility: visible; + visibility: inherit; font-style: normal; box-shadow: rgba(0, 0, 0, 0.3) 1px 1px 3px; border-radius: 3px; @@ -7448,6 +7451,21 @@ if (targetElement.textContent.trim()) keywords = targetElement.textContent.trim(); } } + while (resultUrl.indexOf('%template{') !== -1) { + let inputMatch = resultUrl.match(/%template{(.*?[^\\])}/); + if (!inputMatch) return false; + let templateName = inputMatch[1]; + if (!searchData.prefConfig.templateData) searchData.prefConfig.templateData = {}; + let templateResult = searchData.prefConfig.templateData[templateName]; + if (!templateResult) { + templateResult = window.prompt(i18n("template", templateName)) || ""; + if (templateResult) { + searchData.prefConfig.templateData[templateName] = templateResult; + storage.setItem("searchData", searchData); + } else return false; + } + resultUrl = resultUrl.replace(inputMatch[0], templateResult); + } while (resultUrl.indexOf('%input{') !== -1) { let inputMatch = resultUrl.match(/%input{(.*?[^\\])}/); if (!inputMatch) return false; From 4249b573bffba9d5bcaa167822ee065514458048 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 16 Oct 2023 16:46:28 +0800 Subject: [PATCH 069/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 3f091fcb36f..ba3de545505 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -67,7 +67,7 @@ 某個章節名 / CSS 選擇器【選擇器後可跟 >> 傳入 item 處理】 **@@** 抓取到 URL 的正則匹配 **@@** 正則替換 URL **@@** 根據爬取返回內容 data 處理並返回最終文本 -### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用 [💗 Youtube 有聲小説](https://www.youtube.com/channel/UCe1lxuf0FrJc8Lr48Iw9wAw) +### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用 1. [📕po18](https://www.po18.tw/books/755779/articles),章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 `.l_chaptname>a@@articles@@articlescontent` 粘貼進命令菜單即可下載。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 ``` css .l_chaptname>a @@ articles @@ articlescontent From 0aa7d26d7589a5ea75406e94081c42bc00048bd5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 16 Oct 2023 20:27:42 +0800 Subject: [PATCH 070/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 1a4bc2aa08c..aef383a20c2 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -7775,7 +7775,7 @@ } } - var tryTimes = 0; + var tryTimes = 0, showedLastPageTips = false; async function nextPage() { if (typeof ruleParser.curSiteRule.manualMode == 'undefined' ? rulesData.manualMode : ruleParser.curSiteRule.manualMode) return; if (clickMode) return; @@ -7798,13 +7798,15 @@ if (!nextLink) { if (curPage == 1 && (ruleParser.curSiteRule.pinUrl || tryTimes++ <= 3)) { setTimeout(() => {isLoading = false}, 500); - } else if (curPage > 1 && rulesData.lastPageTips) { + } else if (curPage > 1 && rulesData.lastPageTips && !showedLastPageTips) { showTips(i18n("lastPage")); + showedLastPageTips = true; } return; } isLoading = false; } + showedLastPageTips = false; let pvGallery = document.querySelector("span.pv-gallery-container"); if (pvGallery && pvGallery.style.display != "none") return; let insert = ruleParser.getInsert(); From 6707b41a4fd914233d074a9bfa79e3e0dfa5659c Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 17 Oct 2023 09:32:42 +0800 Subject: [PATCH 071/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index 052470a4d3d..a6a0be8b8d1 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -961,7 +961,7 @@ var siteInfo = [ }, { name: "ytimg", - src: /\.ytimg\.com/i, + src: /i\.ytimg\.com/i, exclude: /mqdefault_6s/i, r: /\?.*$/i, s: '' From 8265b608a8a5b82247b9b2ee28de752875fe8a12 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 17 Oct 2023 01:50:19 +0000 Subject: [PATCH 072/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 47 +++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 36c5015c6bc..f48ea0c7161 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,34 @@ [ +{ + "resource_url": "http://wedata.net/items/86178", + "data": { + "insertBefore": "", + "pageElement": "//div[@data-a-name=\"orders\"]", + "nextLink": "//a[@aria-current='page']/parent::node()/following-sibling::li[1]/a", + "url": "^https://www.amazon.co.jp/vine/orders", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "OHM_79", + "name": "Amazon Vine 注文", + "created_at": "2023-10-16T18:54:49+09:00", + "updated_at": "2023-10-16T18:54:49+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86177", + "data": { + "insertBefore": "", + "pageElement": "//div[@data-a-name=\"vine-reviews\"]", + "nextLink": "//a[@aria-current='page']/parent::node()/following-sibling::li[1]/a", + "url": "^https://www.amazon.co.jp/vine/vine-reviews", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "OHM_79", + "name": "Amazon Vine レビュー", + "created_at": "2023-10-16T18:53:18+09:00", + "updated_at": "2023-10-16T18:53:18+09:00" +}, { "resource_url": "http://wedata.net/items/86176", "data": { @@ -10615,18 +10645,17 @@ }, { "resource_url": "http://wedata.net/items/82101", - "name": "キミラノ", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2019-03-19T17:46:08+09:00", "data": { - "exampleUrl": "https://kimirano.jp/tag/15", + "pageElement": "//ul[@class=\"std_lists\" or @class=\"read_lists\"]/li", + "nextLink": "//div[@class=\"pagination\"]/div[@class=\"ctr_next\"]/a", "url": "^https://kimirano\\.jp/", - "pageElement": "//ul[@class=\"std_lists\"]/li", - "insertBefore": "", - "nextLink": "//div[@class=\"pagination\"]/div[@class=\"ctr_next\"]/a" + "exampleUrl": "https://kimirano.jp/tag/15\r\nhttps://kimirano.jp/kakuyomu_contents/" }, - "created_at": "2019-03-19T17:46:08+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "キミラノ", + "created_at": "2019-03-19T17:46:08+09:00", + "updated_at": "2023-10-16T15:55:42+09:00" }, { "resource_url": "http://wedata.net/items/82099", From 835314cd47a511224bdd7516078b7a02cfe0cc1e Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 17 Oct 2023 11:52:49 +0800 Subject: [PATCH 073/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 126 +++++++++++++++++++--------- 1 file changed, 87 insertions(+), 39 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 24e4c29bffd..fc6dba14289 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.15.1 +// @version 2023.10.17.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -42,7 +42,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1264243 +// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1265774 // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js @@ -13119,6 +13119,11 @@ ImgOps | https://imgops.com/#b#`; ''+ ''+ + ''+ + '

'+ + ''+ + '
'+ + ''+ ''+i18n("exitCollection")+''+ ''+ @@ -13343,21 +13348,32 @@ ImgOps | https://imgops.com/#b#`; }; var sizeInputH=container.querySelector("#minsizeH"); var sizeInputW=container.querySelector("#minsizeW"); - container.querySelector(".pv-gallery-head-left-lock-icon").onclick=function(){ + var headMaxLock=container.querySelector(".pv-gallery-head-left-lock-icon"); + headMaxLock.onclick=function(){ if(self.lockMaxSize){ self.lockMaxSize=null; self.changeMinView(); - this.style.filter=""; - this.title=i18n("lockSizeTip"); + headMaxLock.style.filter=""; + headMaxLock.title=i18n("lockSizeTip"); }else{ - var maxsizeW=window.prompt("Max Width:", sizeInputW.max); - if(!maxsizeW)return; - var maxsizeH=window.prompt("Max Height:", sizeInputH.max); - if(!maxsizeH)return; - self.lockMaxSize={w:maxsizeW,h:maxsizeH}; - self.changeMinView(); - this.style.filter="brightness(5)"; - this.title=maxsizeW+" x "+maxsizeH; + var maxsizeW, maxsizeH; + maxsizeW = window.prompt("Max Width:", sizeInputW.max); + if(maxsizeW) { + maxsizeH = window.prompt("Max Height:", sizeInputH.max); + } + if (maxsizeH) { + self.lockMaxSize={w:maxsizeW,h:maxsizeH}; + self.changeMinView(); + headMaxLock.style.filter="brightness(5)"; + headMaxLock.title=maxsizeW+" x "+maxsizeH; + } + } + if (self.lockMaxSize) { + storage.setItem("lockMaxSize" + location.hostname, self.lockMaxSize); + storage.setItem("curDefaultSize" + location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); + } else { + storage.setItem("lockMaxSize" + location.hostname, ""); + storage.setItem("curDefaultSize" + location.hostname, ""); } }; @@ -13410,6 +13426,7 @@ ImgOps | https://imgops.com/#b#`; 'head-command-slide-show-countdown', 'head-command-collect', 'head-command-exit-collection', + 'head-command-urlFilter', 'head-command-drop-list-category', 'head-command-drop-list-others', @@ -13829,6 +13846,37 @@ ImgOps | https://imgops.com/#b#`; slideShow.setCountdown(slideShow.opts.interval);; this.slideShow=slideShow; + let urlFilterHeadItem = self.eleMaps['head-command-urlFilter']; + function filterUrl() { + let filterStr = prompt(i18n("urlFilterTip"), self.urlFilter || "www.img.com/img") || ""; + if (filterStr != self.urlFilter) { + self.urlFilter = filterStr; + storage.setItem("urlFilter" + location.hostname, filterStr); + if (self.urlFilter) { + urlFilterHeadItem.title = self.urlFilter; + urlFilterHeadItem.style.display = "inline-block"; + self.changeMinView(); + } else { + urlFilterHeadItem.style.display = ""; + } + self.changeMinView(); + } + } + + var urlFilter = storage.getItem("urlFilter" + location.hostname) || false; + var lockMaxSize = storage.getItem("lockMaxSize" + location.hostname) || false; + if (urlFilter) { + self.urlFilter = urlFilter; + urlFilterHeadItem.title = self.urlFilter; + urlFilterHeadItem.style.display = "inline-block"; + } + if (lockMaxSize) { + self.lockMaxSize=lockMaxSize; + headMaxLock.style.filter="brightness(5)"; + headMaxLock.title=lockMaxSize.w+" x "+lockMaxSize.h; + } + self.curDefaultSize = storage.getItem("curDefaultSize" + location.hostname) || false; + //幻灯片播放下拉列表change事件的处理 eleMaps['head-command-drop-list-slide-show'].addEventListener('change',function(e){ var target=e.target; @@ -14032,21 +14080,7 @@ ImgOps | https://imgops.com/#b#`; }); break; case 'urlFilter': - { - let filterStr = prompt(i18n("urlFilterTip"), self.urlFilter || "") || ""; - if (filterStr != self.urlFilter) { - self.urlFilter = filterStr; - if (self.urlFilter) { - target.style.color = "#e9cccc"; - target.title = self.urlFilter; - self.changeMinView(); - } else { - target.style.color = ""; - target.title = i18n("urlFilterTip"); - } - self.changeMinView(); - } - } + filterUrl(); break; case 'enterCollection': //进入管理模式 @@ -14581,7 +14615,6 @@ ImgOps | https://imgops.com/#b#`; }; cancelBtn.onclick=function(e){ checkBoxs=maximizeContainer.querySelectorAll(".maximizeChild>input:checked"); - if(checkBoxs.length<1)return; [].forEach.call(checkBoxs, i=>{ i.checked=false; }); @@ -14640,6 +14673,8 @@ ImgOps | https://imgops.com/#b#`; }; }else if(eleMaps['head-command-exit-collection'].contains(target)){ collection.exit(); + }else if(eleMaps['head-command-urlFilter'].contains(target)){ + filterUrl(); }else if(eleMaps['head-command-slide-show'].contains(target)){ slideShow.switchStatus(); slideShow.check(); @@ -14958,14 +14993,19 @@ ImgOps | https://imgops.com/#b#`; }); sizeInputH.max=maxSizeH; sizeInputH.min=minSizeH; - sizeInputH.value=prefs.gallery.defaultSizeLimit.h; + sizeInputW.max=maxSizeW; + sizeInputW.min=minSizeW; + if (self.curDefaultSize) { + sizeInputH.value = self.curDefaultSize.h; + sizeInputW.value = self.curDefaultSize.w; + } else { + sizeInputH.value = prefs.gallery.defaultSizeLimit.h; + sizeInputW.value = prefs.gallery.defaultSizeLimit.w; + } sizeInputH.title="min height: "+sizeInputH.value+"px"; var sizeInputHSpan=this.gallery.querySelector("#minsizeHSpan"); sizeInputHSpan.innerHTML=createHTML("H: "+Math.floor(sizeInputH.value)+"px"); - sizeInputW.max=maxSizeW; - sizeInputW.min=minSizeW; - sizeInputW.value=prefs.gallery.defaultSizeLimit.w; sizeInputW.title="min width: "+sizeInputW.value+"px"; var sizeInputWSpan=this.gallery.querySelector("#minsizeWSpan"); sizeInputWSpan.innerHTML=createHTML("W: "+Math.floor(sizeInputW.value)+"px"); @@ -15039,7 +15079,7 @@ ImgOps | https://imgops.com/#b#`; //viewmoreBar.parentNode.style.backgroundColor = "#000000"; toggleBarContent.innerHTML = createHTML('▼'); - this.changeSizeInputReset(); + //this.changeSizeInputReset(); }, selectViewmore: function(imgSpan, src) { if(this.curImgSpan)this.curImgSpan.classList.remove("selected"); @@ -15799,9 +15839,11 @@ ImgOps | https://imgops.com/#b#`; var sizeInputW=this.gallery.querySelector("#minsizeW"); var thumbnails=this.eleMaps['sidebar-thumbnails-container']; var selectData, selectSpan; + if (index != -1) { + selectData = this.data[index]; + } // 如果是新的,则添加,否则重置并添加。 if (!data){ - selectData=this.data[index]; if(selectData){ let spanMark=this._spanMarkPool[selectData.imgSrc]; if(spanMark && spanMark.dataset.naturalSize){ @@ -15826,7 +15868,6 @@ ImgOps | https://imgops.com/#b#`; this._dataCache = {}; this.eleMaps['maximize-container'].innerHTML = createHTML(""); } - if (!selectData) selectData = this.data[index]; var createSpanMark = item => { var spanMark=self._spanMarkPool[item.imgSrc]; if(!spanMark){ @@ -15976,9 +16017,10 @@ ImgOps | https://imgops.com/#b#`; },true); }; - var unique=this.unique(data); - data=unique.data; - var index=unique.index; + var hasTarget = !!data.target; + var unique = this.unique(data); + data = unique.data; + var index = hasTarget ? unique.index : -1; if (reload && this.data.length >= data.length) { // alert('没有新增的图片'); @@ -17194,6 +17236,10 @@ ImgOps | https://imgops.com/#b#`; color:#939300 !important;\ display:none;\ }\ + .pv-gallery-head-command-urlFilter{\ + color:#e9cccc !important;\ + display:none;\ + }\ .pv-gallery-head-command:hover{\ background-color:#272727;\ color:#ccc;\ @@ -21462,6 +21508,8 @@ ImgOps | https://imgops.com/#b#`; style.textContent='\ #pv-float-bar-container {\ position: absolute;\ + top: 0px;\ + left: 0px;\ z-index:9999999998;\ padding: 5px;\ margin: 0;\ From c0ed771fac527b4dec98606e0037a576b93f263c Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 17 Oct 2023 12:01:50 +0800 Subject: [PATCH 074/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index fc6dba14289..9da298467ff 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.17.1 +// @version 2023.10.17.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -13855,7 +13855,6 @@ ImgOps | https://imgops.com/#b#`; if (self.urlFilter) { urlFilterHeadItem.title = self.urlFilter; urlFilterHeadItem.style.display = "inline-block"; - self.changeMinView(); } else { urlFilterHeadItem.style.display = ""; } @@ -13863,6 +13862,8 @@ ImgOps | https://imgops.com/#b#`; } } + this.urlFilter = ""; + this.lockMaxSize = false; var urlFilter = storage.getItem("urlFilter" + location.hostname) || false; var lockMaxSize = storage.getItem("lockMaxSize" + location.hostname) || false; if (urlFilter) { @@ -14546,7 +14547,6 @@ ImgOps | https://imgops.com/#b#`; }, 100); }) } - self.urlFilter=""; self.batchDl=document.createElement('p'); From 0b16082a5cb47bb63be1e9bb495ec5dc2d57ae15 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 18 Oct 2023 08:55:52 +0800 Subject: [PATCH 075/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 9da298467ff..8ef62d8e83f 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.17.2 +// @version 2023.10.18.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -15868,6 +15868,7 @@ ImgOps | https://imgops.com/#b#`; this._dataCache = {}; this.eleMaps['maximize-container'].innerHTML = createHTML(""); } + var urlReg=new RegExp(this.urlFilter); var createSpanMark = item => { var spanMark=self._spanMarkPool[item.imgSrc]; if(!spanMark){ @@ -15898,9 +15899,9 @@ ImgOps | https://imgops.com/#b#`; } if (item.sizeW == 0 && item.sizeH == 0 && item.img.complete) { spanMark.style.display="none"; - } else if(item.sizeW && item.sizeH && (item.sizeWself.lockMaxSize.w || item.sizeH>self.lockMaxSize.h)))){ spanMark.style.display="none"; - }else{ + } else { spanMark.style.display=""; } thumbnails.appendChild(spanMark); From e53fb6b5022a928e8801bb30a0141c4eb7e0c3bb Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 18 Oct 2023 15:18:48 +0800 Subject: [PATCH 076/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 795790123dd..f5799f74d5d 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8166,8 +8166,11 @@ "action": 1, "url": "^https://.*\\.bing\\.com/", "nextLink": "a[title='Next page'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl", - "pageElement": "ol#b_results>li.b_algo", - "wait": "if(doc==document)return true;doc.documentElement.scrollTop=99999;return doc.querySelector('a[title=\\'Next page\\'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl')", + "pageElement": "body>style,ol#b_results>li.b_algo", + "waitElement": [ + "a[title='Next page'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl", + ".siteicon>div,div.rms_iac" + ], "pageBar": "pageBar.className='b_pageBar'" }, { From 9b494c9eb9fb6dd57f99e6f4eea8849a35358e24 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 18 Oct 2023 21:40:29 +0800 Subject: [PATCH 077/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index f5799f74d5d..0e137228090 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9848,5 +9848,10 @@ "name": "imgur", "url": "^https?://imgur\\.com/", "enable": 0 +}, +{ + "name": "pexels", + "url": "^https?://www\\.pexels\\.com/", + "enable": 0 } ] From fcb46e2e2993f4cd743947ec3d143c20df3a28e0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 08:22:12 +0800 Subject: [PATCH 078/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 0e137228090..448072dd8ac 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9713,6 +9713,15 @@ "waitElement": "li.next>a", "action": 1 }, +{ + "name": "AliExpress", + "url": "^https?://www\\.aliexpress\\.com/", + "example": "https://www.aliexpress.com/w/wholesale-Pants.html", + "nextLink": ".comet-pagination-next>button", + "pageElement": "#card-list>div", + "waitElement": "!.lazy-load", + "include": ".comet-pagination-next>button" +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From b8fc358b9275871a5aa4f48be0f7f3ce60b113cd Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 19 Oct 2023 01:49:25 +0000 Subject: [PATCH 079/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index f48ea0c7161..31ba9262ca4 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -13794,17 +13794,18 @@ }, { "resource_url": "http://wedata.net/items/81586", - "name": "Ecosia.org Search", - "created_by": "WolframH", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-08-06T18:20:54+09:00", "data": { - "exampleUrl": "https://www.ecosia.org/search?q=hallo", - "url": "^https://(www\\.)?ecosia\\.org/search", - "pageElement": "//div[@class='card-desktop card-web']/*", - "nextLink": "//a[contains(@class, 'pagination-next')]" + "pageElement": "//section[@data-test-id='mainline']/div[.//article]", + "insertBefore": "//div[@class='pagination']", + "nextLink": "//a[@data-test-id='next-button']", + "url": "^https://www\\.ecosia\\.org/search\\?", + "exampleUrl": "https://www.ecosia.org/search?q=hallo" }, - "created_at": "2017-10-06T02:06:47+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "WolframH", + "name": "Ecosia.org Search", + "created_at": "2017-10-06T02:06:47+09:00", + "updated_at": "2023-10-18T21:08:00+09:00" }, { "resource_url": "http://wedata.net/items/81585", From a3b9b268484dbc323634d9702b164f62aad0b4c6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 10:39:34 +0800 Subject: [PATCH 080/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 204 ++++++++++++++++++++------------------ 1 file changed, 108 insertions(+), 96 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index aef383a20c2..72c88e7496a 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.69 +// @version 1.9.36.70 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -841,7 +841,13 @@ cb(value); } }; - var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; + async function getData(key) { + return new Promise((resolve) => { + storage.getItem(key, value => { + resolve(value); + }); + }) + } const configPage = ["https://github.com/hoothin/UserScripts/tree/master/Pagetual", "https://hoothin.github.io/UserScripts/Pagetual/"]; const guidePage = /^https?:\/\/.*pagetual.*rule\.html/i; @@ -851,6 +857,8 @@ const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u0020\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007cВперед", "i"); const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u4e2a\u500b\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; + var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; + var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; @@ -1033,21 +1041,17 @@ this.curSiteRule = {}; } - initSavedRules(callback) { + async initSavedRules(callback) { var self = this; - storage.getItem("smartRules", smartRules => { - if (smartRules) self.smartRules = smartRules; - storage.getItem("hpRules", hpRules => { - if (hpRules) self.hpRules = hpRules; - storage.getItem("customRules", customRules => { - if (customRules) self.customRules = customRules; - storage.getItem("rules", rules => { - if (rules) self.rules = rules; - callback(); - }); - }); - }); - }); + let smartRules = await getData("smartRules"); + if (smartRules) self.smartRules = smartRules; + let hpRules = await getData("hpRules"); + if (hpRules) self.hpRules = hpRules; + let customRules = await getData("customRules"); + if (customRules) self.customRules = customRules; + let rules = await getData("rules"); + if (rules) self.rules = rules; + callback(); } saveCurSiteRule() { @@ -2380,6 +2384,8 @@ if (parent && parent.contains(otherPageEle) && !/^\d+$/.test(otherPageEle.innerText.trim())) { next4 = null; } + } else { + next4 = null; } } } @@ -3128,7 +3134,7 @@ let base = document.querySelector("base"); this.basePath = base ? base.href : location.href; this.getRule(async () => { - isPause = false; + isPause = manualPause; if (self.curSiteRule.enable == 0) { debug("Stop as rule disable"); isPause = true; @@ -3211,10 +3217,13 @@ } callback(); let initRun = typeof self.curSiteRule.initRun == 'undefined' ? rulesData.initRun : self.curSiteRule.initRun; - if (initRun && initRun != false && self.nextLinkHref) { - setTimeout(() => { - nextPage(); - }, 500); + if (self.nextLinkHref) { + sideController.setup(); + if (initRun && initRun != false) { + setTimeout(() => { + nextPage(); + }, 500); + } } }); } @@ -3480,6 +3489,7 @@
`); + frame.classList.add("stop"); let top = frame.querySelector("#pagetual-sideController-top"); let pre = frame.querySelector("#pagetual-sideController-pre"); let move = frame.querySelector("#pagetual-sideController-move"); @@ -3550,6 +3560,7 @@ }, true); let initX, initY, moving = false; + let removeTimer; move.addEventListener("click", e => { if (!moving) { changeStop(!isPause); @@ -3571,7 +3582,6 @@ e.preventDefault(); picker.start(); }; - let removeTimer; let mouseMoveHandler = e => { if (moving) { @@ -5684,7 +5694,7 @@ _GM_registerMenuCommand(i18n("editCurrent"), () => { picker.start(); }); - ruleParser.initSavedRules(() => { + ruleParser.initSavedRules(async () => { let upBtnImg = rulesData.upBtnImg, downBtnImg = rulesData.downBtnImg, _sideControllerIcon = rulesData.sideControllerIcon; if (upBtnImg && downBtnImg) { downSvgCSS = downSvgCSS.replace("transform: rotate(180deg);", ""); @@ -5759,72 +5769,72 @@ } openInNewTab = rulesData.openInNewTab ? 1 : 0; enableDebug = rulesData.enableDebug; - storage.getItem("nextSwitch_" + location.host, i => { - storage.getItem("forceState_" + location.host, v => { - storage.getItem("autoScroll_" + location.host + location.pathname, _autoScroll => { - storage.getItem("ruleLastUpdate", date => { - autoScroll = _autoScroll || 0; - if (typeof(i) !== "undefined") { - nextIndex = i; - } - if (typeof(v) == "undefined") { - v = (rulesData.enableWhiteList ? 1 : 0); - } - forceState = v; - updateDate = date; - let href = location.href.slice(0, 100); - try { - if (_unsafeWindow.initedPagetual) { - if (ruleImportUrlReg.test(href)) { - showTips(i18n('duplicate')); - } - return; - } - _unsafeWindow.initedPagetual = true; - } catch(e) {showTips(e)} - listenUrl(); - _GM_registerMenuCommand(i18n("update"), () => { - showTips(i18n("beginUpdate"), "", 60000); - updateRules(() => { - showTips(i18n("updateSucc")); - location.reload(); - },(rule, err) => { - showTips(`Failed to update ${rule.url} rules!`); - debug(err); - }); - }); - _GM_registerMenuCommand(i18n(forceState == 1 ? "enable" : "disableSite"), () => { - forceState = (forceState == 1 ? 0 : 1); - storage.setItem("forceState_" + location.host, forceState); - showTips(i18n(forceState == 1 ? "disableSiteTips" : "enableSiteTips")); - if (!ruleParser.curSiteRule.url) location.reload(); - }); - _GM_registerMenuCommand(i18n("toggleAutoScroll"), () => { - autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; - autoScroll = parseInt(autoScroll) || 0; - if (autoScroll < 0) autoScroll = 0; - else if (autoScroll > 1000) autoScroll = 1000; - storage.setItem("autoScroll_" + location.host + location.pathname, autoScroll); - startAutoScroll(); - }); - startAutoScroll(); + let _nextSwitch = await getData("nextSwitch_" + location.host); + if (typeof(_nextSwitch) !== "undefined") { + nextIndex = _nextSwitch; + } + let _forceState = await getData("forceState_" + location.host); + if (typeof(_forceState) == "undefined") { + _forceState = (rulesData.enableWhiteList ? 1 : 0); + } + forceState = _forceState; - if (initConfig(href)) return; - pageReady = true; - if (forceState == 1) return; - let now = new Date().getTime(); - if (!date || now - date > 2 * 24 * 60 * 60 * 1000) { - updateRules(() => { - }, (rule, err) => {}, true); - storage.setItem("ruleLastUpdate", now); - } - callback(); - }); - }); + autoScroll = await getData("autoScroll_" + location.host + location.pathname) || 0; + + updateDate = await getData("ruleLastUpdate"); + + manualPause = !!await getData("pauseState_" + location.host); + + let href = location.href.slice(0, 100); + try { + if (_unsafeWindow.initedPagetual) { + if (ruleImportUrlReg.test(href)) { + showTips(i18n('duplicate')); + } + return; + } + _unsafeWindow.initedPagetual = true; + } catch(e) {showTips(e)} + listenUrl(); + _GM_registerMenuCommand(i18n("update"), () => { + showTips(i18n("beginUpdate"), "", 60000); + updateRules(() => { + showTips(i18n("updateSucc")); + location.reload(); + },(rule, err) => { + showTips(`Failed to update ${rule.url} rules!`); + debug(err); }); }); + _GM_registerMenuCommand(i18n(forceState == 1 ? "enable" : "disableSite"), () => { + forceState = (forceState == 1 ? 0 : 1); + storage.setItem("forceState_" + location.host, forceState); + showTips(i18n(forceState == 1 ? "disableSiteTips" : "enableSiteTips")); + if (!ruleParser.curSiteRule.url) location.reload(); + }); + _GM_registerMenuCommand(i18n("toggleAutoScroll"), () => { + autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; + autoScroll = parseInt(autoScroll) || 0; + if (autoScroll < 0) autoScroll = 0; + else if (autoScroll > 1000) autoScroll = 1000; + storage.setItem("autoScroll_" + location.host + location.pathname, autoScroll); + startAutoScroll(); + }); + startAutoScroll(); + + + if (initConfig(href)) return; + pageReady = true; + if (forceState == 1) return; + let now = new Date().getTime(); + if (!updateDate || now - updateDate > 2 * 24 * 60 * 60 * 1000) { + updateRules(() => { + }, (rule, err) => {}, true); + storage.setItem("ruleLastUpdate", now); + } + callback(); }); }); } @@ -6179,19 +6189,22 @@ var tipsWords = document.createElement("div"); tipsWords.className = "pagetual_tipsWords"; - var isPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false; - var openInNewTab = 0; - + var changeStopTimer; function changeStop(stop) { isPause = stop; - [].forEach.call(getBody(document).querySelectorAll(".pagetual_pageBar,#pagetual-sideController"), bar => { - if (isPause) { - bar.classList.add("stop"); - } else { - bar.classList.remove("stop"); - } - }); - if (!isPause) ruleParser.showAddedElements(); + clearTimeout(changeStopTimer); + changeStopTimer = setTimeout(() => { + [].forEach.call(getBody(document).querySelectorAll(".pagetual_pageBar,#pagetual-sideController"), bar => { + if (isPause) { + bar.classList.add("stop"); + } else { + bar.classList.remove("stop"); + } + }); + if (!isPause) ruleParser.showAddedElements(); + manualPause = isPause; + storage.setItem("pauseState_" + location.host, isPause ? true : ""); + }, 350); } function changeHideBar(hide) { @@ -7812,7 +7825,6 @@ let insert = ruleParser.getInsert(); if (insert) { if (curPage == 1) initView(); - sideController.setup(); /*if (curPage == 1) { window.postMessage({ command: 'pagetual.insert' From 001e4f237c0f41b6a2842c11cf971bfe7e15b3ac Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 10:39:47 +0800 Subject: [PATCH 081/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 9ddd87f0916..600b77521f4 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.69](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.70](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From 3e6f35811e6b7e0f46a5584fe594f177513e2764 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 10:53:45 +0800 Subject: [PATCH 082/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 72c88e7496a..e81a2bd766e 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4520,6 +4520,8 @@ getBody(document).addEventListener("mousemove", this.moveHandler, true); getBody(document).addEventListener("click", this.clickHandler, true); this.xpath.checked = isXPath(ruleParser.curSiteRule.pageElement); + this.tempRule.value = ""; + this.tempRule.style.display = "none"; this.loadNow.style.display = ruleParser.nextLinkHref ? "block" : "none"; if (ruleParser.curSiteRule.nextLink && Array && Array.isArray && Array.isArray(ruleParser.curSiteRule.nextLink)) { From c4e369d5d564f0e8510b041b7214ec72d524a308 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 11:08:38 +0800 Subject: [PATCH 083/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e81a2bd766e..4f732a678ec 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -3990,7 +3990,7 @@ float: initial; margin-top: 10px; } - #pagetual-picker #showDetail.showDetail { + #pagetual-picker.showDetail #showDetail { float: right; } #pagetual-picker #showDetail>svg { @@ -3998,21 +3998,25 @@ -webkit-transition:transform 0.3s ease; transition:transform 0.3 ease; } - #pagetual-picker #showDetail.showDetail>svg { + #pagetual-picker.showDetail #showDetail>svg { transform: rotate(180deg); } #pagetual-picker .tempRule { + display: none; margin-top: 10px; height: 300px; min-height: 150px; } + #pagetual-picker.showDetail .tempRule { + display: inline-block; + } #pagetual-picker #saveDetail { display: none; position: absolute; bottom: 10px; right: 8px; } - #pagetual-picker .showDetail~#saveDetail { + #pagetual-picker.showDetail #saveDetail { display: inline-block; } #pagetual-picker #saveDetail svg { @@ -4026,7 +4030,7 @@ bottom: 45px; right: 12px; } - #pagetual-picker .showDetail~.addProp { + #pagetual-picker.showDetail .addProp { display: flex; } #pagetual-picker .addProp>button { @@ -4083,7 +4087,7 @@
- + @@ -4187,13 +4191,7 @@ self.tempRule.value = JSON.stringify(editTemp, null, 4); }, true); showDetailBtn.addEventListener("click", e => { - if (tempRule.style.display == "none") { - tempRule.style.display = ""; - showDetailBtn.classList.add("showDetail"); - } else { - tempRule.style.display = "none"; - showDetailBtn.classList.remove("showDetail"); - } + frame.classList.toggle("showDetail"); }, true); saveDetailBtn.addEventListener("click", e => { let editTemp = self.getTempRule(true); @@ -4382,7 +4380,7 @@ delete this.editTemp.type; delete this.editTemp.updatedAt; } - if (this.selectorInput.value && this.tempRule.style.display == "none") { + if (this.selectorInput.value && !this.frame.classList.contains("showDetail")) { this.editTemp.pageElement = this.selectorInput.value; } return this.editTemp; @@ -4434,7 +4432,7 @@ } fillTempRuleTextarea() { - if (this.tempRule.style.display == "none") this.tempRule.value = JSON.stringify(this.getTempRule(), null, 4); + if (!this.frame.classList.contains("showDetail")) this.tempRule.value = JSON.stringify(this.getTempRule(), null, 4); } setSelectorDiv(selector) { @@ -4521,7 +4519,8 @@ getBody(document).addEventListener("click", this.clickHandler, true); this.xpath.checked = isXPath(ruleParser.curSiteRule.pageElement); this.tempRule.value = ""; - this.tempRule.style.display = "none"; + this.editTemp = null; + this.frame.classList.remove("showDetail"); this.loadNow.style.display = ruleParser.nextLinkHref ? "block" : "none"; if (ruleParser.curSiteRule.nextLink && Array && Array.isArray && Array.isArray(ruleParser.curSiteRule.nextLink)) { From dc41d23199e4b00a3ad1ccc8341a306c224a1bde Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 11:09:56 +0800 Subject: [PATCH 084/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 448072dd8ac..ccd876df562 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9722,6 +9722,14 @@ "waitElement": "!.lazy-load", "include": ".comet-pagination-next>button" }, +{ + "name": "Orion Public Issue Tracker", + "url": "^https?://orionfeedback\\.org/t/", + "example": "https://orionfeedback.org/t/desktop", + "nextLink": ".Orion-DiscussionListPagination > a.Button.Button--icon.hasIcon:last-child", + "action": 3, + "pageElement": "ul.DiscussionList-discussions>li" +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From 7ba2357714bbe615d47845667e3964406c54c815 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 13:17:26 +0800 Subject: [PATCH 085/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 62 ++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 8ef62d8e83f..0f44a1eda9f 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.18.1 +// @version 2023.10.19.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -13332,22 +13332,24 @@ ImgOps | https://imgops.com/#b#`; this.hideBodyStyle=hideBodyStyle; hideBodyStyle.textContent=`body>*:not([class^="pv-"]) img,body>img{display:none}`; - container.querySelector("#minsizeW").oninput=function(){self.changeMinView();}; - container.querySelector("#minsizeH").oninput=function(){self.changeMinView();}; + var sizeInputH=container.querySelector("#minsizeH"); + var sizeInputW=container.querySelector("#minsizeW"); + this.sizeInputH = sizeInputH; + this.sizeInputW = sizeInputW; + sizeInputW.oninput=function(){self.changeMinView();}; + sizeInputH.oninput=function(){self.changeMinView();}; container.querySelector("#minsizeWSpan").onclick=function(){ var minsizeW=window.prompt("Width:",this.value); if(!minsizeW)return; - container.querySelector("#minsizeW").value=minsizeW; + sizeInputW.value=minsizeW; self.changeMinView(); }; container.querySelector("#minsizeHSpan").onclick=function(){ var minsizeH=window.prompt("Height:",this.value); if(!minsizeH)return; - container.querySelector("#minsizeH").value=minsizeH; + sizeInputH.value=minsizeH; self.changeMinView(); }; - var sizeInputH=container.querySelector("#minsizeH"); - var sizeInputW=container.querySelector("#minsizeW"); var headMaxLock=container.querySelector(".pv-gallery-head-left-lock-icon"); headMaxLock.onclick=function(){ if(self.lockMaxSize){ @@ -13848,7 +13850,7 @@ ImgOps | https://imgops.com/#b#`; let urlFilterHeadItem = self.eleMaps['head-command-urlFilter']; function filterUrl() { - let filterStr = prompt(i18n("urlFilterTip"), self.urlFilter || "www.img.com/img") || ""; + let filterStr = prompt(i18n("urlFilterTip"), self.urlFilter || location.hostname) || ""; if (filterStr != self.urlFilter) { self.urlFilter = filterStr; storage.setItem("urlFilter" + location.hostname, filterStr); @@ -13858,6 +13860,7 @@ ImgOps | https://imgops.com/#b#`; } else { urlFilterHeadItem.style.display = ""; } + self.urlFilterReg = null; self.changeMinView(); } } @@ -13907,7 +13910,7 @@ ImgOps | https://imgops.com/#b#`; self.switchThumbVisible();//切换图片类别显隐; },true); - prefs.gallery.scrollEndAndLoad = !!storage.getItem("scrollEndAndLoad"); + prefs.gallery.scrollEndAndLoad = !!storage.getItem("scrollEndAndLoad" + location.hostname); eleMaps['head-command-drop-list-others'].querySelector('input[data-command="scrollToEndAndReload"]').checked = prefs.gallery.scrollEndAndLoad; var srcSplit,downloading=false; //命令下拉列表的点击处理 @@ -14013,7 +14016,7 @@ ImgOps | https://imgops.com/#b#`; } prefs.gallery.scrollEndAndLoad = checkbox.checked; - storage.setItem("scrollEndAndLoad", checkbox.checked); + storage.setItem("scrollEndAndLoad" + location.hostname, checkbox.checked); break; case 'fullScreen': if (target.classList.contains('fullscreenbtn')) { @@ -14896,8 +14899,8 @@ ImgOps | https://imgops.com/#b#`; }, changeMinView:function(){ var urlReg=new RegExp(this.urlFilter); - var sizeInputH=this.gallery.querySelector("#minsizeH"); - var sizeInputW=this.gallery.querySelector("#minsizeW"); + var sizeInputH=this.sizeInputH; + var sizeInputW=this.sizeInputW; var sizeInputHSpan=this.gallery.querySelector("#minsizeHSpan"); var sizeInputWSpan=this.gallery.querySelector("#minsizeWSpan"); sizeInputH.title="min height: "+sizeInputH.value+"px"; @@ -14914,7 +14917,7 @@ ImgOps | https://imgops.com/#b#`; if(spanMark && !spanMark.dataset.naturalSize && item.naturalWidth && item.naturalHeight){ spanMark.dataset.naturalSize=JSON.stringify({w:item.naturalWidth,h:item.naturalHeight}); } - if(item.naturalWidthself.lockMaxSize.w || item.naturalHeight>self.lockMaxSize.h))){ + if(!self.filterImage(item.naturalWidth || item.sizeW, item.naturalHeight || item.sizeH, item.src)){ item.parentNode.style.display="none"; if(spanMark)spanMark.style.display="none"; }else{ @@ -14955,7 +14958,7 @@ ImgOps | https://imgops.com/#b#`; //itemW=99999; //itemH=99999; } - if(itemWself.lockMaxSize.w || itemH>self.lockMaxSize.h))){ + if(!self.filterImage(itemW, itemH, item.src)){ spanMark.style.display="none"; }else{ spanMark.style.display=""; @@ -14967,8 +14970,8 @@ ImgOps | https://imgops.com/#b#`; }, changeSizeInputReset:function(){ var maxSizeH=0,minSizeH=0,maxSizeW=0,minSizeW=0; - var sizeInputH=this.gallery.querySelector("#minsizeH"); - var sizeInputW=this.gallery.querySelector("#minsizeW"); + var sizeInputH=this.sizeInputH; + var sizeInputW=this.sizeInputW; let self=this; this.data.forEach(function(item) { if(!item)return; @@ -15826,6 +15829,27 @@ ImgOps | https://imgops.com/#b#`; _dataCache: {}, _spanMarkPool: {}, + filterImage: function(itemW, itemH, src) { + if (!itemW || !itemH) return true; + if (itemW < this.sizeInputW.value || itemH < this.sizeInputH.value) { + return false; + } + if (this.urlFilter && src) { + src = src.replace(/^(data:[^;]*;).*/, "$1"); + if (!this.urlFilterReg) { + try { + this.urlFilterReg = new RegExp(this.urlFilter); + } catch(e) {} + } + if (this.urlFilterReg && !this.urlFilterReg.test(src)) { + return false; + } + } + if (this.lockMaxSize && (itemW > this.lockMaxSize.w || itemH > this.lockMaxSize.h)) { + return false; + } + return true; + }, _appendThumbSpans: function(data, index) { // 添加缩略图栏的 spans var iStatisCopy = this.iStatisCopy; @@ -15835,8 +15859,8 @@ ImgOps | https://imgops.com/#b#`; } else index = 0; } - var sizeInputH=this.gallery.querySelector("#minsizeH"); - var sizeInputW=this.gallery.querySelector("#minsizeW"); + var sizeInputH=this.sizeInputH; + var sizeInputW=this.sizeInputW; var thumbnails=this.eleMaps['sidebar-thumbnails-container']; var selectData, selectSpan; if (index != -1) { @@ -15899,7 +15923,7 @@ ImgOps | https://imgops.com/#b#`; } if (item.sizeW == 0 && item.sizeH == 0 && item.img.complete) { spanMark.style.display="none"; - } else if (item.sizeW && item.sizeH && (item.sizeWself.lockMaxSize.w || item.sizeH>self.lockMaxSize.h)))){ + } else if (!this.filterImage(item.sizeW, item.sizeH, item.src)){ spanMark.style.display="none"; } else { spanMark.style.display=""; From bc8077eac551b3406f326a55aa43533d0c567756 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 14:46:25 +0800 Subject: [PATCH 086/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 238e5499da6..b5c91bfe020 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -138,7 +138,7 @@ var quickReplyStr = '快速回复'; var quickReply = $( `` ); quickReply.insertAfter( "form .btn" ); - var replyStr = "1024"; + var replyStr = defaultReply; if (document.title.indexOf("打卡签到") !== -1) { var spaceStr = ""; var spaceLen = Math.floor(Math.random() * 10); @@ -225,7 +225,7 @@ if (customReplyStr) { replyStr = customReplyStr; quickReply.attr('title', replyStr + "(右击修改)"); - $.cookie('customReplyStr', customReplyStr, { expires: 2147483647, path: '/' }); + $.cookie('customReplyStr', customReplyStr, { expires: 365, path: '/' }); } }); }); From 12588f8611c82e6a2af2bb8d83c2b41487cd3a24 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 15:26:48 +0800 Subject: [PATCH 087/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 0f44a1eda9f..c6ff85cf79d 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -16779,10 +16779,12 @@ ImgOps | https://imgops.com/#b#`; if (svg.clientHeight != 0 && (!svg.classList || !svg.classList.contains("pagetual"))) { try { const xml = new XMLSerializer().serializeToString(svg); - const ImgBase64 = `data:image/svg+xml;base64,${window.btoa(xml)}`; + const ImgBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(xml)))}`; svg.src = ImgBase64; total.push(svg); - } catch(e) {} + } catch(e) { + debug(e); + } } return total; }, []); @@ -22066,6 +22068,8 @@ ImgOps | https://imgops.com/#b#`; var imgCStyle = unsafeWindow.getComputedStyle(img); if (!/IMG/i.test(img.nodeName) && imgCStyle && imgCStyle.backgroundImage && imgCStyle.backgroundImage != "none") { let sh = imgCStyle.height, sw = imgCStyle.width; + if (!img.offsetWidth) sw = 10; + if (!img.offsetHeight) sh = 10; if (imgCStyle.backgroundRepeatX == "repeat") { sw = 10; } From 24d2a0be7ad6b00ebd8ad54add0802b23aff02c8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 15:32:51 +0800 Subject: [PATCH 088/812] Update BingBgForBaidu.user.js --- BingBgForBaidu/BingBgForBaidu.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BingBgForBaidu/BingBgForBaidu.user.js b/BingBgForBaidu/BingBgForBaidu.user.js index 48ac7eb7e2e..35c75b127f7 100644 --- a/BingBgForBaidu/BingBgForBaidu.user.js +++ b/BingBgForBaidu/BingBgForBaidu.user.js @@ -126,7 +126,7 @@ var skinContainer=document.querySelector(".s-skin-container"); if(!skinContainer){ skinContainer=document.getElementsByTagName("body")[0]; - GM_addStyle(".hot-refresh{padding-bottom:7px;}.hot-title>div,.hot-refresh{background-color: #f0f8ff95; border-radius: 3px 3px 0 0}.s-hotsearch-content{position: absolute; background-color: #f0f8ff95; border-radius: 0 0 5px 5px;padding-right: 2px;}.s_ipt{margin:0!important;}.s_ipt_wr{border-radius: 10px 4px 4px 10px;border-radius: 10px 0 0 10px;background: #fff!important;}#qrcodeCon{display:none}body{position:fixed;_position:absolute;top:0;left:0;height:100%;width:100%;min-width:1000px;z-index:-10;background-position:center 0;background-repeat:no-repeat;background-size:cover;-webkit-background-size:cover;-o-background-size:cover;zoom:1;}"); + GM_addStyle(".s-top-right .ai-entry-right-nologin{right:auto;}.hot-refresh{padding-bottom:7px;}.hot-title>div,.hot-refresh{background-color: #f0f8ff95; border-radius: 3px 3px 0 0}.s-hotsearch-content{position: absolute; background-color: #f0f8ff95; border-radius: 0 0 5px 5px;padding-right: 2px;}.s_ipt{margin:0!important;}.s_ipt_wr{border-radius: 10px 4px 4px 10px;border-radius: 10px 0 0 10px;background: #fff!important;}#qrcodeCon{display:none}body{position:fixed;_position:absolute;top:0;left:0;height:100%;width:100%;min-width:1000px;z-index:-10;background-position:center 0;background-repeat:no-repeat;background-size:cover;-webkit-background-size:cover;-o-background-size:cover;zoom:1;}"); var inputsu=document.querySelector("input#su"); var clickHandler=e=>{ if(skinContainer)skinContainer.style.backgroundImage=""; From 373a4208f8e8f63184071cfcfbf662cab885bcc2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 20:20:01 +0800 Subject: [PATCH 089/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 4f732a678ec..edf21497a03 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4900,6 +4900,7 @@ let url = document.createElement("a"); url.href = ruleUrl.url; url.innerHTML = ruleUrl.url; + url.title = ruleUrl.url; let up = document.createElement("span"); up.innerHTML = "↑ "; up.title = i18n("sortTitle"); @@ -4922,11 +4923,12 @@ this.item.appendChild(del); this.item.appendChild(url); if (ruleParser.rules) { - url.style.maxWidth = "80%"; + url.style.maxWidth = "calc(100% - 140px)"; url.style.overflow = "hidden"; url.style.display = "inline-block"; url.style.textOverflow = "ellipsis"; url.style.verticalAlign = "bottom"; + url.style.whiteSpace = "nowrap"; let rulesLength = ruleParser.rules.reduce((acc, cur) => acc + (cur.from == id ? 1 : 0), 0); let idSpan = document.createElement("span"); idSpan.style.float = "right"; From 4c3970c1d467c612cfc7d29e246c9e96d3e5a513 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 20:39:48 +0800 Subject: [PATCH 090/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index a6a0be8b8d1..5da62f5104b 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -1305,5 +1305,17 @@ var siteInfo = [ src: /blogger\.googleusercontent\.com\/img/, r: /\/[sw]\d+\/.*/, s: "/s0" +}, +{ + name: "煎蛋", + url: /^https:\/\/jandan\.net\//, + r: /\/(thumb\d+|mw\d+)\//, + s: "/large/" +}, +{ + name:"辉夜白兔", + url:/47\.101\.137\.235/, + r:"thumb", + s:"regular" } ]; From e595ec18cb39a62777ed269ba926dab2535ff441 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 19 Oct 2023 20:41:06 +0800 Subject: [PATCH 091/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index c6ff85cf79d..9a6529cc010 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -42,7 +42,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1265774 +// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1267210 // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js From c1a4c231c2313483024b6c55bbd5fc526e52d9c1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 20 Oct 2023 10:32:47 +0800 Subject: [PATCH 092/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 153 +++++++++++++++++++++++--------------- 1 file changed, 95 insertions(+), 58 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index edf21497a03..27b0207823e 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.70 +// @version 1.9.36.71 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -957,20 +957,35 @@ } let parent = ele.parentElement; if (parent) { - selector = geneSelector(parent, addID) + ' > ' + selector; if (!className && !hasId && parent.children.length > 1 && !/^HTML$/i.test(parent.nodeName)) { - let i, nth = 0, all = 0; - for (i = 0; i < parent.children.length; i++) { - if (parent.children[i].nodeName == ele.nodeName) { - all++; - if (parent.children[i] == ele) { - nth = all; + let prevE = ele.previousElementSibling; + if (prevE && prevE.className) { + let classList = prevE.classList, i = 0; + for (let i = 0; i < classList.length; i++) { + let c = classList[i]; + if (/^[\w\-_]+$/.test(c) && !/\d{4,}/.test(c)) { + className += '.' + c; } - if (nth > 0 && all > 1) break; + } + if (className) { + selector = prevE.nodeName.toLowerCase() + className + "+" + selector; } } - selector += (all == 1 ? "" : `:nth-of-type(${nth})`); + if (!className) { + let i, nth = 0, all = 0; + for (i = 0; i < parent.children.length; i++) { + if (parent.children[i].nodeName == ele.nodeName) { + all++; + if (parent.children[i] == ele) { + nth = all; + } + if (nth > 0 && all > 1) break; + } + } + selector += (all == 1 ? "" : `:nth-of-type(${nth})`); + } } + selector = geneSelector(parent, addID) + ' > ' + selector; } } } @@ -1049,6 +1064,12 @@ if (hpRules) self.hpRules = hpRules; let customRules = await getData("customRules"); if (customRules) self.customRules = customRules; + if (_unsafeWindow.pagetualRules && _unsafeWindow.pagetualRules.length) { + _unsafeWindow.pagetualRules.forEach(rule => { + rule.isScript = true; + }); + self.customRules = _unsafeWindow.pagetualRules.concat(self.customRules); + } let rules = await getData("rules"); if (rules) self.rules = rules; callback(); @@ -1264,6 +1285,36 @@ return true; } + runPageBar(pageBar) { + if (this.curSiteRule.pageBar && this.curSiteRule.pageBar !== 0) { + try { + ((typeof this.curSiteRule.pageBar == 'function') ? this.curSiteRule.pageBar : Function("pageBar",'"use strict";' + this.curSiteRule.pageBar))(pageBar); + } catch(e) { + debug(e); + } + } + } + + runWait(cb) { + let checkEval = null, waitTime = 0; + if (this.curSiteRule.waitElement) { + checkEval = doc => { + return this.waitElement(doc); + }; + } else if(this.curSiteRule.wait) { + if (isNaN(this.curSiteRule.wait)) { + try { + checkEval = (typeof this.curSiteRule.wait == 'function') ? this.curSiteRule.wait : Function("doc", '"use strict";' + this.curSiteRule.wait); + } catch(e) { + debug(e); + } + } else { + waitTime = this.curSiteRule.wait; + } + } + cb(checkEval, waitTime); + } + getRule(callback) { if(noRuleTest) { this.curSiteRule = {}; @@ -1272,6 +1323,11 @@ callback(); return; } + if (_unsafeWindow.pagetualRule) { + this.curSiteRule = _unsafeWindow.pagetualRule; + if (!this.curSiteRule.url) this.curSiteRule.url = "."; + this.curSiteRule.isScript = true; + } var href = location.href.slice(0, 500); if (this.curSiteRule && this.curSiteRule.url && !this.curSiteRule.singleUrl) { let urlReg = new RegExp(this.curSiteRule.url, "i"); @@ -1333,7 +1389,7 @@ let waitTime = 500, checkEval, maxCheckTimes = 50; if (isNaN(r.wait)) { try { - checkEval = (typeof _unsafeWindow.pagetualWait == 'undefined') ? Function("doc",'"use strict";' + r.wait) : _unsafeWindow.pagetualWait; + checkEval = (typeof r.wait == 'function') ? r.wait : Function("doc",'"use strict";' + r.wait); } catch(e) { debug(e, 'Error when checkeval'); } @@ -1448,11 +1504,12 @@ addToHpRules(instead) { try { + if (this.curSiteRule.isScript) return; if (!this.hpRules) this.hpRules = []; let url = this.curSiteRule && this.curSiteRule.url, self = this; let href = location.href.slice(0, 500); let matchedRules = this.hpRules.filter(rule => rule != self.curSiteRule && new RegExp(rule.url, "i").test(href) && self.ruleMatch(rule)); - if (url) matchedRules.push(this.curSiteRule); + if (url) matchedRules.unshift(this.curSiteRule); matchedRules.sort((a, b) => { if ((a.include || a.exclude) && (!b.include && !b.exclude)) { return -1; @@ -2554,7 +2611,7 @@ try { let over = _url => { }; - let targetUrl = await ((typeof _unsafeWindow.pagetualNextLinkByJs == 'undefined') ? new AsyncFunction("doc", '"use strict";' + this.curSiteRule.nextLinkByJs) : _unsafeWindow.pagetualNextLinkByJs)(doc); + let targetUrl = await ((typeof this.curSiteRule.nextLinkByJs == 'function') ? this.curSiteRule.nextLinkByJs : new AsyncFunction("doc", '"use strict";' + this.curSiteRule.nextLinkByJs))(doc); if (targetUrl) nextLink = {href: targetUrl}; } catch(e) { debug(e); @@ -2853,7 +2910,7 @@ } } else { try { - let stopSign = ((typeof _unsafeWindow.stopSign == 'undefined') ? Function("doc", "nextLink", '"use strict";' + this.curSiteRule.stopSign) : _unsafeWindow.stopSign)(doc, nextLink); + let stopSign = ((typeof this.curSiteRule.stopSign == 'function') ? this.curSiteRule.stopSign : Function("doc", "nextLink", '"use strict";' + this.curSiteRule.stopSign))(doc, nextLink); if (stopSign) { isPause = true; this.nextLinkHref = false; @@ -2967,7 +3024,7 @@ pageInit(doc, eles) { let code = this.curSiteRule.pageInit; if (code) { - let initFunc = ((typeof _unsafeWindow.pagetualPageInit == 'undefined') ? Function("doc", "eles", '"use strict";' + code) : _unsafeWindow.pagetualPageInit); + let initFunc = ((typeof code == 'function') ? code : Function("doc", "eles", '"use strict";' + code)); let checkInit = (resolve) => { try { if (initFunc(doc, eles) === false) { @@ -2994,7 +3051,7 @@ let code = this.curSiteRule.pageAction; if (code) { try { - ((typeof _unsafeWindow.pagetualPageAction == 'undefined') ? Function("doc", "eles", '"use strict";' + code) : _unsafeWindow.pagetualPageAction)(doc, eles); + ((typeof code == 'function') ? code : Function("doc", "eles", '"use strict";' + code))(doc, eles); } catch(e) { debug(e); } @@ -3191,7 +3248,7 @@ let code = self.curSiteRule.init; if (code) { try { - ((typeof _unsafeWindow.pagetualInit == 'undefined') ? new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', '"use strict";' + code) : _unsafeWindow.pagetualInit)(null, null, null, sel => {clickAction(sel, document)}, sel => {enterAction(sel, document)}, (sel, v) =>{inputAction(sel, v, document)}); + ((typeof code == 'function') ? code : new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', '"use strict";' + code))(null, null, null, sel => {clickAction(sel, document)}, sel => {enterAction(sel, document)}, (sel, v) =>{inputAction(sel, v, document)}); } catch(e) { debug(e); } @@ -3285,7 +3342,7 @@ this.nextTitle = doc.title; } else { try { - this.nextTitle = ((typeof _unsafeWindow.pagetualPageBarText == 'undefined') ? Function("doc",'"use strict";' + this.curSiteRule.pageBarText) : _unsafeWindow.pagetualPageBarText)(doc); + this.nextTitle = ((typeof this.curSiteRule.pageBarText == 'function') ? this.curSiteRule.pageBarText : Function("doc",'"use strict";' + this.curSiteRule.pageBarText))(doc); } catch(e) { debug(e); } @@ -5885,8 +5942,8 @@ let preCode = ruleParser.curSiteRule.pageElementPre || ruleParser.curSiteRule.pagePre; if (preCode) { try { - if (typeof _unsafeWindow.pagetualPagePre != 'undefined') { - response = _unsafeWindow.pagetualPagePre(response); + if (typeof preCode == 'function') { + response = preCode(response); } else if (preCode.length == 2) { response = response.replace(new RegExp(preCode[0], "gi"), preCode[1]); } else { @@ -6948,13 +7005,7 @@ pageBar.title = i18n(isPause ? "enable" : "disable"); }); ruleParser.insertElement(pageBar); - if (ruleParser.curSiteRule.pageBar && ruleParser.curSiteRule.pageBar !== 0) { - try { - ((typeof _unsafeWindow.pagetualPageBar == 'undefined') ? Function("pageBar",'"use strict";' + ruleParser.curSiteRule.pageBar) : _unsafeWindow.pagetualPageBar)(pageBar); - } catch(e) { - debug(e); - } - } + ruleParser.runPageBar(pageBar); return pageBar; } @@ -7125,21 +7176,14 @@ } iframe.style.cssText = 'margin:0!important;padding:0!important;visibility:hidden!important;flex:0;opacity:0!important;pointer-events:none!important;position:fixed;top:0px;left:0px;z-index:-2147483647;'; let waitTime = 100, checkEval; - if (ruleParser.curSiteRule.waitElement) { - checkEval = doc => { - return ruleParser.waitElement(doc); - }; - } else if (ruleParser.curSiteRule.wait) { - if (isNaN(ruleParser.curSiteRule.wait)) { - try { - checkEval = (typeof _unsafeWindow.pagetualWait == 'undefined') ? Function("doc",'"use strict";' + ruleParser.curSiteRule.wait) : _unsafeWindow.pagetualWait; - } catch(e) { - debug(e); - } - } else { - waitTime = ruleParser.curSiteRule.wait; + ruleParser.runWait((_checkEval, _waitTime) => { + if (_checkEval) { + checkEval = _checkEval; } - } + if (_waitTime) { + waitTime = _waitTime; + } + }); if (checkRemoveIntv) clearInterval(checkRemoveIntv); checkRemoveIntv = setInterval(() => { if (!iframe || !getBody(document).contains(iframe)) { @@ -7260,21 +7304,14 @@ } let waitTime = 200, checkEval; - if (ruleParser.curSiteRule.waitElement) { - checkEval = doc => { - return ruleParser.waitElement(doc); - }; - } else if(ruleParser.curSiteRule.wait) { - if (isNaN(ruleParser.curSiteRule.wait)) { - try { - checkEval = (typeof _unsafeWindow.pagetualWait == 'undefined') ? Function("doc", '"use strict";' + ruleParser.curSiteRule.wait) : _unsafeWindow.pagetualWait; - } catch(e) { - debug(e); - } - } else { - waitTime = ruleParser.curSiteRule.wait; + ruleParser.runWait((_checkEval, _waitTime) => { + if (_checkEval) { + checkEval = _checkEval; } - } + if (_waitTime) { + waitTime = _waitTime; + } + }); if (!orgPage) { if (!loadmoreEnd) { @@ -7745,7 +7782,7 @@ let body = getBody(document); let curScroll = body.scrollTop || document.documentElement.scrollTop; if (forceState == 2) { - body.appendChild(loadingDiv); + document.documentElement.appendChild(loadingDiv); body.appendChild(curIframe); let bodyStyle = getComputedStyle(body); if (bodyStyle.display == "flex" || bodyStyle.display == "inline-flex") { @@ -7798,7 +7835,7 @@ if (isPause || isLoading || forceState == 1) return; if (ruleParser.curSiteRule.delay) { try { - let checkDelay = ((typeof _unsafeWindow.pagetualDelay=='undefined') ? Function('"use strict";' + ruleParser.curSiteRule.delay) : _unsafeWindow.pagetualDelay)(); + let checkDelay = ((typeof ruleParser.curSiteRule.delay == 'function') ? ruleParser.curSiteRule.delay : Function('"use strict";' + ruleParser.curSiteRule.delay))(); if (!checkDelay) return; } catch(e) { debug(e); @@ -7865,7 +7902,7 @@ } }; try { - ((typeof _unsafeWindow.pagetualPageElementByJs == 'undefined') ? Function("over", "pageNum",'"use strict";' + ruleParser.curSiteRule.pageElementByJs) : _unsafeWindow.pagetualPageElementByJs)(over, curPage); + ((typeof ruleParser.curSiteRule.pageElementByJs == 'function') ? ruleParser.curSiteRule.pageElementByJs : Function("over", "pageNum",'"use strict";' + ruleParser.curSiteRule.pageElementByJs))(over, curPage); } catch(e) { debug(e); } From 9ad6df2f8932862e026bf07acdd0657459dff2a8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 20 Oct 2023 10:33:01 +0800 Subject: [PATCH 093/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 600b77521f4..bb1a4aae9e7 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.70](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.71](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From 6615c1bca2c15917b2a6fd8dd747095f9b3a2f83 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 20 Oct 2023 12:04:13 +0800 Subject: [PATCH 094/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 9a6529cc010..deb9cde304a 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.19.1 +// @version 2023.10.20.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -12071,7 +12071,7 @@ ImgOps | https://imgops.com/#b#`; firstEngine:"Tineye" }; - const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; + const lazyImgAttr = ["data-lazy-src", "org_src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var tprules = [ function(a) { if (this.currentSrc && !this.src) this.src = this.currentSrc; @@ -21780,7 +21780,7 @@ ImgOps | https://imgops.com/#b#`; }, center:function() { var left = targetPosi.left + scrolled.x + offsetX; - fbs.left = left + img.width / 2 + 'px'; + fbs.left = left + targetPosi.width / 2 + 'px'; }, hide:function(){ var top=targetPosi.top + scrolled.y; From f584767ad25ea5b7c6fa670cf1d27f355e58a3ee Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 20 Oct 2023 13:54:30 +0800 Subject: [PATCH 095/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- ...nal Chinese and Simplified Chinese.user.js | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index d90ff349fa5..20d29b0924c 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.6.43 +// @version 1.2.7.1 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -64,28 +64,28 @@ var pinyinMetaKey = false; var disablePinyin = false; //此處為單字轉換,scStr 為簡體字列表,tcStr 為正體字列表,一簡對多繁時,可能有多個對應組合,以第一個組合爲準 - var scStr = '万与丑专业丛东丝丢两严丧个丰临为为丽举么么义乌乐乔习乡书买乱争于亏云亘亚产产亩亲亵亸亿仅仆从仑仓仪们价众众优伙会伛伞伟传伡伣伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬侭俣俦俨俩俪俫俭借债倾偬偻偾偿傤傥傧储傩儿克兑兖党兰关兴兹养兽冁内冈册冗写军农冢冯冲冲决况冻净凄准凉凌减凑凛几凤处凫凭凯凶击凿刍划刘则刚创删别刬刭制刹刽刾刿剀剂剐剑剥剥剧劝办务劢动励劲劳势勋勖勚匀匦匮区医华协单卖卜卢卤卧卫却卷厂厅历历厉压厌厍厐厕厘厠厢厣厦厨厩厮县叁参叆叇双发发变叙叠只台叶号叹叹叽吁后吓吕吗吨听听听启启吴呆呐呒呓呕呖呗员呙呛呜周咏咙咛咝咤咨咸响哑哒哓哔哕哗哙哜哝哟唇唉唛唝唠唡唢唤啓啧啬啭啮啯啰啴啸喂喷喽喾嗫嗳嘘嘤嘱噜嚣团园囱围囵国图圆圣圹场坏块坚坛坜坝坞坟坠垄垅垆垒垦垩垫垭垯垱垲垴埘埙埚堑堕塆墙墻壊壮声壳壶壸処备复复够头夸夹夺奁奂奋奖奥奬妆妇妈妩妪妫姗姜姹娄娅娆娇娈娱娲娴婳婴婵婶媪媭嫒嫔嫱嬀嬷孙学孪宁宁宝实宠审宪宫宽宽宾寝对寻导寿将尔尘尝尧尴尸尽尽层屃屉届属屡屦屿岁岂岖岗岘岚岛岩岭岳岽岿峃峄峡峣峤峥峦峰崂崃崄崭嵘嵚嵝巅巨巩巯币布帅师帏帐帘帜带帧帮帱帻帼幂干干并并广庄庆床庐庑库应庙庞废庼廏廪开异弃弑张弥弪弯弹强归当录彝彟彦彨彻征径徕御忆忏志忧念忾怀态怂怃怄怅怆怜总怼怿恋恒恳恶恶恸恹恺恻恼恽悦悫悬悭悮悯惊惧惨惩惫惬惭惮惯愠愤愦愿慑慭懑懒懔戆戋戏戗战戬户扎扑托扦执扩扪扫扬扰抚抛抟抠抡抢护报抬抻担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捂捝捞损捡换捣据捻掳掴掷掸掺掼揽揾揿搀搁搂搄搅携摄摅摆摇摈摊撄撑撵撷撸撺擜擞攒敌敍敚敛敩数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权杠条来杨杩杰松板极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桠桡桢档桤桥桦桧桨桩桪梁梦梼梾梿检棁棂棱椁椝椟椠椢椤椫椭椮楼榄榅榇榈榉榝槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴殻毁毂毕毙毡毵氇气氢氩氲汇汇汉污汤汹沟没沣沤沥沦沧沨沩沪泄泞注泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涚涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溁溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪潆潇潋潍潙潜潨潴澛澜濑濒灏灭灯灵灶灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烟烦烧烨烩烫烬热焕焖焘煴爱爲爷牍牦牵牺犊状犷犸犹狈狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珐珑珰珲琎琏琐琼瑶瑷瑸璎瓒瓮瓯産电画畅畴疖疗疟疠疡疬疭疮疯疱疴痈痉痒痖痨痪痫痴痹瘅瘆瘉瘗瘘瘪瘫瘾瘿癞癣癫皋皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑睾瞆瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硵硷碍碛碜碱礼祃祎祢祯祷祸禀禄禅离秃秆种秘积称秸秽秾稆税稣稳穑穞穷窃窍窎窑窜窝窥窦窭竖竞竪笃笋笔笕笺笼笾筑筚筛筜筝筹筼签签筿简箓箦箧箨箩箪箫篑篓篮篯篱簖籁籴类籼粜粝粤粪粮糁糇糍系系紧绝絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络絶绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡群翘翙翚翱耢耧耸耻聂聋职聍联聩聪肃肠肤肮肴肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑膻臜致舆舍舣舰舱舻艰艳艺节芈芗芜芦苁苇苈苋苌苍苎苏苧苹范茎茏茑茔茕茧荆荐荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒀蒇蒉蒋蒌蒏蓝蓟蓠蓣蓥蓦蔂蔷蔹蔺蔼蕰蕲蕴薮藓蘖虏虑虚虫虬虮虱虽虾虿蚀蚁蚂蚃蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衆衔补表衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯訚詟誉誊说说谣讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞跡践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯軆輼车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辟辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郏郐郑郓郦郧郸酂酝酦酱酽酾酿采释里里鈎鉴鉴銮鋭録錾钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链链铿销锁锂锃锄锅锆锇锈锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶长閲门闩闪闫闬闭问闯闰闱闲闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陦陧陨险随隐隶隽难雇雏雠雳雾霁霉霡霭靓靔静面靥鞑鞒鞯鞲韦韧韨韩韪韫韬韵頽顔页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕駡马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓鬶魇魉鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鷀鷄鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹾麦麸麹麽黄黉黡黩黪黾鼋鼌鼍鼹齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟酸幸'; - var tcStr = '萬與醜專業叢東絲丟兩嚴喪個豐臨爲為麗舉麽麼義烏樂喬習鄉書買亂爭於虧雲亙亞産產畝親褻嚲億僅僕從侖倉儀們價衆眾優夥會傴傘偉傳俥俔傷倀倫傖僞佇體餘傭僉俠侶僥偵側僑儈儕儂儘俁儔儼倆儷倈儉藉債傾傯僂僨償儎儻儐儲儺兒剋兌兗黨蘭關興茲養獸囅內岡冊宂寫軍農塚馮沖衝決況凍淨淒準涼淩減湊凜幾鳳處鳧憑凱兇擊鑿芻劃劉則剛創刪別剗剄製剎劊㓨劌剴劑剮劍剝褫劇勸辦務勱動勵勁勞勢勳勗勩勻匭匱區醫華協單賣蔔盧鹵臥衛卻捲廠廳曆歷厲壓厭厙龎廁釐廁廂厴廈廚廄廝縣叄參靉靆雙發髮變敘疊隻臺葉號歎嘆嘰籲後嚇呂嗎噸聽聼聴啓啟吳獃吶嘸囈嘔嚦唄員咼嗆嗚週詠嚨嚀噝吒諮鹹響啞噠嘵嗶噦嘩噲嚌噥喲脣欸嘜嗊嘮啢嗩喚啟嘖嗇囀齧嘓囉嘽嘯餵噴嘍嚳囁噯噓嚶囑嚕囂團園囪圍圇國圖圓聖壙場壞塊堅壇壢壩塢墳墜壟壠壚壘墾堊墊埡墶壋塏堖塒壎堝塹墮壪牆牆壞壯聲殼壺壼處備複復夠頭誇夾奪奩奐奮獎奧獎妝婦媽嫵嫗媯姍薑奼婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬃嬡嬪嬙媯嬤孫學孿甯寧寶實寵審憲宮寬寛賓寢對尋導壽將爾塵嘗堯尷屍盡儘層屭屜屆屬屢屨嶼歲豈嶇崗峴嵐島巖嶺嶽崬巋嶨嶧峽嶢嶠崢巒峯嶗崍嶮嶄嶸嶔嶁巔鉅鞏巰幣佈帥師幃帳簾幟帶幀幫幬幘幗冪幹乾並併廣莊慶牀廬廡庫應廟龐廢廎廄廩開異棄弒張彌弳彎彈強歸當錄彜彠彥彲徹徵徑徠禦憶懺誌憂唸愾懷態慫憮慪悵愴憐總懟懌戀恆懇惡噁慟懨愷惻惱惲悅愨懸慳悞憫驚懼慘懲憊愜慚憚慣慍憤憒願懾憖懣懶懍戇戔戲戧戰戩戶紮撲託扡執擴捫掃揚擾撫拋摶摳掄搶護報擡捵擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏摀挩撈損撿換搗據撚擄摑擲撣摻摜攬搵撳攙擱摟揯攪攜攝攄擺搖擯攤攖撐攆擷擼攛㩵擻攢敵敘敓斂斆數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權槓條來楊榪傑鬆闆極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒椏橈楨檔榿橋樺檜槳樁樳樑夢檮棶槤檢梲櫺稜槨槼櫝槧槶欏樿橢槮樓欖榲櫬櫚櫸樧檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆殼毀轂畢斃氈毿氌氣氫氬氳彙匯漢汙湯洶溝沒灃漚瀝淪滄渢溈滬洩濘註淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧涗濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕濚潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦瀠瀟瀲濰溈潛潀瀦瀂瀾瀨瀕灝滅燈靈竈災燦煬爐燉煒熗點煉熾爍爛烴燭煙菸煩燒燁燴燙燼熱煥燜燾熅愛為爺牘犛牽犧犢狀獷獁猶狽獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽琺瓏璫琿璡璉瑣瓊瑤璦璸瓔瓚甕甌產電畫暢疇癤療瘧癘瘍癧瘲瘡瘋皰痾癰痙癢瘂癆瘓癇癡痺癉瘮癒瘞瘻癟癱癮癭癩癬癲臯皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼睪瞶瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確磠鹼礙磧磣堿禮禡禕禰禎禱禍稟祿禪離禿稈種祕積稱稭穢穠穭稅穌穩穡穭窮竊竅窵窯竄窩窺竇窶豎競豎篤筍筆筧箋籠籩築篳篩簹箏籌篔簽籤篠簡籙簀篋籜籮簞簫簣簍籃籛籬籪籟糴類秈糶糲粵糞糧糝餱餈係繫緊絕縶糹糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線綫紺紲紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏縧繼綈績緒綾緓續綺緋綽鞝緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨羣翹翽翬翺耮耬聳恥聶聾職聹聯聵聰肅腸膚骯餚腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏羶臢緻輿捨艤艦艙艫艱豔藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇薴蘋範莖蘢蔦塋煢繭荊薦薘莢蕘蓽萴蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蒕蕆蕢蔣蔞醟藍薊蘺蕷鎣驀虆薔蘞藺藹薀蘄蘊藪蘚櫱虜慮虛蟲虯蟣蝨雖蝦蠆蝕蟻螞蠁蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁眾銜補錶襯袞襖裊褘襪襲襏裝襠褌褳襝褲襉褸襤襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶誾讋譽謄說説謡訁計訂訃認譏訐訌討讓訕訖託訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談讅誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗謚謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶贓貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗贊讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒蹟踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀體轀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭闢辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郟鄶鄭鄆酈鄖鄲酇醞醱醬釅釃釀採釋裏裡鉤鑒鑑鑾銳錄鏨釒釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鉅鈍鈔鍾鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鈎鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鉋鈰鉉鉈鉍鈮鈹鐸鉶銬銠鉺鋩錏銪鋮鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鎩鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鍊鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銹銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺鍩錯錨錛錡鍀錁錕錩錫錮鑼錘錐錦鑕鍁錈鍃錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鐨鎇鏌鎮鎛鎘鑷钂鐫鎳鎿鎦鎬鎊鎰鎵鑌鎔鏢鏜鏝鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔钀鑞鑱鑲長閱門閂閃閆閈閉問闖閏闈閑閒閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隯隉隕險隨隱隸雋難僱雛讎靂霧霽黴霢靄靚靝靜麵靨韃鞽韉韝韋韌韍韓韙韞韜韻頹顏頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顔顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飈飛饗饜飠飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢罵馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢鬹魘魎魚魛魢魷魨魯魴䰾魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鰺鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鼈鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣䲘鶿雞鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鷽鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鵾鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶖鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺䴉鸇鷹鸌鸏鸛鸘鹺麥麩麴麼黃黌黶黷黲黽黿鼂鼉鼴齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜痠倖'; + const scStr = '万与丑专业丛东丝丢两严丧个丰临为为丽举么么义乌乐乔习乡书买乱争于亏云亘亚产产亩亲亵亸亿仅仆从仑仓仪们价众众优伙会伛伞伟传伡伣伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬侭俣俦俨俩俪俫俭借债倾偬偻偾偿傤傥傧储傩儿克兑兖党兰关兴兹养兽冁内冈册冗写军农冢冯冲冲决况冻净凄准凉凌减凑凛几凤处凫凭凯凶击凿刍划刘则刚创删别刬刭制刹刽刾刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勖勚匀匦匮区医华协单卖卜卢卤卧卫却卷厂厅历历厉压厌厍厐厕厘厠厢厣厦厨厩厮县叁参叆叇双发发变叙叠只台叶号叹叽吁后吓吕吗吨听启吴呆呐呒呓呕呖呗员呙呛呜周咏咙咛咝咤咨咸响哑哒哓哔哕哗哙哜哝哟唇唉唛唝唠唡唢唤啧啬啭啮啯啰啴啸喂喷喽喾嗫嗳嘘嘤嘱噜嚣团园囱围囵国图圆圣圹场坏块坚坛坜坝坞坟坠垄垅垆垒垦垩垫垭垯垱垲垴埘埙埚堑堕塆墙墻壊壮声壳壶壸処备复复够头夸夹夺奁奂奋奖奥奬妆妇妈妩妪妫姗姜姹娄娅娆娇娈娱娲娴婳婴婵婶媪媭嫒嫔嫱嬀嬷孙学孪宁宁宝实宠审宪宫宽宽宾寝对寻导寿将尔尘尝尧尴尸尽尽层屃屉届属屡屦屿岁岂岖岗岘岚岛岩岭岳岽岿峃峄峡峣峤峥峦峰崂崃崄崭嵘嵚嵝巅巨巩巯币布帅师帏帐帘帜带帧帮帱帻帼幂干干并并广庄庆庐庑库应庙庞废庼廏廪开异弃弑张弥弪弯弹强归当录彝彟彦彨彻征径徕御忆忏志忧念忾怀态怂怃怄怅怆怜总怼怿恋恒恳恶恶恸恹恺恻恼恽悦悫悬悭悮悯惊惧惨惩惫惬惭惮惯愠愤愦愿慑慭懑懒懔戆戋戏戗战戬户扎扑托扦执扩扪扫扬扰抚抛抟抠抡抢护报抬抻担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捂捝捞损捡换捣据捻掳掴掷掸掺掼揽揾揿搀搁搂搄搅携摄摅摆摇摈摊撄撑撵撷撸撺擜擞攒敌敍敚敛敩数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权杠条来杨杩杰松板极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桠桡桢档桤桥桦桧桨桩桪梁梦梼梾梿检棁棂棱椁椝椟椠椢椤椫椭椮楼榄榅榇榈榉榝槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴殻毁毂毕毙毡毵氇气氢氩氲汇汇汉污汤汹沟没沣沤沥沦沧沨沩沪泄泞注泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涚涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溁溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪潆潇潋潍潙潜潨潴澛澜濑濒灏灭灯灵灶灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烟烦烧烨烩烫烬热焕焖焘煴爱爷牍牦牵牺犊状犷犸犹狈狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珐珑珰珲琎琏琐琼瑶瑷瑸璎瓒瓮瓯産电画畅畴疖疗疟疠疡疬疭疮疯疱疴痈痉痒痖痨痪痫痴痹瘅瘆瘉瘗瘘瘪瘫瘾瘿癞癣癫皋皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑睾瞆瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硵硷碍碛碜碱礼祃祎祢祯祷祸禀禄禅离秃秆种秘积称秸秽秾稆税稣稳穑穞穷窃窍窎窑窜窝窥窦窭竖竞竪笃笋笔笕笺笼笾筑筚筛筜筝筹筼签签筿简箓箦箧箨箩箪箫篑篓篮篯篱簖籁籴类籼粜粝粤粪粮糁糇糍系系紧绝絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络絶绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡群翘翙翚翱耢耧耸耻聂聋职聍联聩聪肃肠肤肮肴肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑膻臜致舆舍舣舰舱舻艰艳艺节芈芗芜芦苁苇苈苋苌苍苎苏苧苹范茎茏茑茔茕茧荆荐荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒀蒇蒉蒋蒌蒏蓝蓟蓠蓣蓥蓦蔂蔷蔹蔺蔼蕰蕲蕴薮藓蘖虏虑虚虫虬虮虱虽虾虿蚀蚁蚂蚃蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衆衔补表衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯訚詟誉誊说说谣讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞跡践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯軆輼车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辟辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郏郐郑郓郦郧郸酂酝酦酱酽酾酿采释里里鈎鉴鉴銮鋭録錾钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链链铿销锁锂锃锄锅锆锇锈锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶长门闩闪闫闬闭问闯闰闱闲闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陦陧陨险随隐隶隽难雇雏雠雳雾霁霉霡霭靓靔静面靥鞑鞒鞯鞲韦韧韨韩韪韫韬韵頽页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕駡马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓鬶魇魉鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鷀鷄鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹾麦麸麹麽黄黉黡黩黪黾鼋鼌鼍鼹齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟酸'; + const tcStr = '萬與醜專業叢東絲丟兩嚴喪個豐臨為爲麗舉麽麼義烏樂喬習鄉書買亂爭於虧雲亙亞産產畝親褻嚲億僅僕從侖倉儀們價衆眾優夥會傴傘偉傳俥俔傷倀倫傖僞佇體餘傭僉俠侶僥偵側僑儈儕儂儘俁儔儼倆儷倈儉藉債傾傯僂僨償儎儻儐儲儺兒剋兌兗黨蘭關興茲養獸囅內岡冊宂寫軍農塚馮沖衝決況凍淨淒準涼淩減湊凜幾鳳處鳧憑凱兇擊鑿芻劃劉則剛創刪別剗剄製剎劊㓨劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳勗勩勻匭匱區醫華協單賣蔔盧鹵臥衛卻捲廠廳曆歷厲壓厭厙龎廁釐廁廂厴廈廚廄廝縣叄參靉靆雙發髮變敘疊隻臺葉號嘆嘰籲後嚇呂嗎噸聽啟吳獃吶嘸囈嘔嚦唄員咼嗆嗚週詠嚨嚀噝吒諮鹹響啞噠嘵嗶噦嘩噲嚌噥喲脣欸嘜嗊嘮啢嗩喚嘖嗇囀齧嘓囉嘽嘯餵噴嘍嚳囁噯噓嚶囑嚕囂團園囪圍圇國圖圓聖壙場壞塊堅壇壢壩塢墳墜壟壠壚壘墾堊墊埡墶壋塏堖塒壎堝塹墮壪牆牆壞壯聲殼壺壼處備複復夠頭誇夾奪奩奐奮獎奧獎妝婦媽嫵嫗媯姍薑奼婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬃嬡嬪嬙媯嬤孫學孿寧甯寶實寵審憲宮寬寛賓寢對尋導壽將爾塵嘗堯尷屍盡儘層屭屜屆屬屢屨嶼歲豈嶇崗峴嵐島巖嶺嶽崬巋嶨嶧峽嶢嶠崢巒峯嶗崍嶮嶄嶸嶔嶁巔鉅鞏巰幣佈帥師幃帳簾幟帶幀幫幬幘幗冪幹乾並併廣莊慶廬廡庫應廟龐廢廎廄廩開異棄弒張彌弳彎彈強歸當錄彜彠彥彲徹徵徑徠禦憶懺誌憂唸愾懷態慫憮慪悵愴憐總懟懌戀恆懇惡噁慟懨愷惻惱惲悅愨懸慳悞憫驚懼慘懲憊愜慚憚慣慍憤憒願懾憖懣懶懍戇戔戲戧戰戩戶紮撲託扡執擴捫掃揚擾撫拋摶摳掄搶護報擡捵擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏摀挩撈損撿換搗據撚擄摑擲撣摻摜攬搵撳攙擱摟揯攪攜攝攄擺搖擯攤攖撐攆擷擼攛㩵擻攢敵敘敓斂斆數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權槓條來楊榪傑鬆闆極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒椏橈楨檔榿橋樺檜槳樁樳樑夢檮棶槤檢梲櫺稜槨槼櫝槧槶欏樿橢槮樓欖榲櫬櫚櫸樧檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆殼毀轂畢斃氈毿氌氣氫氬氳彙匯漢汙湯洶溝沒灃漚瀝淪滄渢溈滬洩濘註淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧涗濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕濚潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦瀠瀟瀲濰溈潛潀瀦瀂瀾瀨瀕灝滅燈靈竈災燦煬爐燉煒熗點煉熾爍爛烴燭煙菸煩燒燁燴燙燼熱煥燜燾熅愛爺牘犛牽犧犢狀獷獁猶狽獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽琺瓏璫琿璡璉瑣瓊瑤璦璸瓔瓚甕甌產電畫暢疇癤療瘧癘瘍癧瘲瘡瘋皰痾癰痙癢瘂癆瘓癇癡痺癉瘮癒瘞瘻癟癱癮癭癩癬癲臯皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼睪瞶瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確磠鹼礙磧磣堿禮禡禕禰禎禱禍稟祿禪離禿稈種祕積稱稭穢穠穭稅穌穩穡穭窮竊竅窵窯竄窩窺竇窶豎競豎篤筍筆筧箋籠籩築篳篩簹箏籌篔簽籤篠簡籙簀篋籜籮簞簫簣簍籃籛籬籪籟糴類秈糶糲粵糞糧糝餱餈係繫緊絕縶糹糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺紲紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏縧繼綈績緒綾緓續綺緋綽鞝緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨羣翹翽翬翺耮耬聳恥聶聾職聹聯聵聰肅腸膚骯餚腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏羶臢緻輿捨艤艦艙艫艱豔藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇薴蘋範莖蘢蔦塋煢繭荊薦薘莢蕘蓽萴蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蒕蕆蕢蔣蔞醟藍薊蘺蕷鎣驀虆薔蘞藺藹薀蘄蘊藪蘚櫱虜慮虛蟲虯蟣蝨雖蝦蠆蝕蟻螞蠁蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁眾銜補錶襯袞襖裊褘襪襲襏裝襠褌褳襝褲襉褸襤襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶誾讋譽謄說説謡訁計訂訃認譏訐訌討讓訕訖託訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談讅誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗謚謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶贓貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗贊讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒蹟踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀體轀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭闢辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郟鄶鄭鄆酈鄖鄲酇醞醱醬釅釃釀採釋裏裡鉤鑒鑑鑾銳錄鏨釒釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鉅鈍鈔鍾鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鈎鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鉋鈰鉉鉈鉍鈮鈹鐸鉶銬銠鉺鋩錏銪鋮鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鎩鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鍊鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銹銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺鍩錯錨錛錡鍀錁錕錩錫錮鑼錘錐錦鑕鍁錈鍃錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鐨鎇鏌鎮鎛鎘鑷钂鐫鎳鎿鎦鎬鎊鎰鎵鑌鎔鏢鏜鏝鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔钀鑞鑱鑲長門閂閃閆閈閉問闖閏闈閑閒閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隯隉隕險隨隱隸雋難僱雛讎靂霧霽黴霢靄靚靝靜麵靨韃鞽韉韝韋韌韍韓韙韞韜韻頹頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顔顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飈飛饗饜飠飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢罵馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢鬹魘魎魚魛魢魷魨魯魴䰾魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鰺鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鼈鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣䲘鶿雞鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鷽鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鵾鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶖鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺䴉鸇鷹鸌鸏鸛鸘鹺麥麩麴麼黃黌黶黷黲黽黿鼂鼉鼴齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜痠'; + //異體字規範,格式為【正體: 異體列表】 + const oc2tc = { + "床": "牀", + "為": "爲", + "產": "産", + '眾': '衆', + '寧': '甯', + '啟': '啓', + '鏽': '銹', + '閱': '閲', + '顏': '顔', + '嘆': '歎', + '線': '缐綫', + '綠': '緑', + '幸': '倖', + '聽': '聼聴' + }; //此處為匹配上具體詞語就優先轉換的單字,簡體與正體分開處理。可以用來處理異體字,或者同字替換,以取消單字匹配時的轉換操作 //簡轉繁,單向轉換 - var sc2tc = {'为':'為', - '剥':'剝', - '衆':'眾', - '产':'產', - '産':'產', - '宁':'寧', - '启':'啟', - '锈':'鏽', - '阅':'閱', - '颜':'顏', - '叹':'嘆', - '线':'線', - '綫':'線', - '緑':'綠', - '径':'徑', - '幸':'幸', - '聼':'聽', - '聴':'聽', + var sc2tc = { '巨':[ '巨', ['鉅','巨款','巨富','巨细','巨子'] @@ -1346,7 +1346,7 @@ }; let autoInput = createCheckbox('總是自動切換', auto); let notificationInput = createCheckbox('切換成功通知', notification); - let enablePinyinInput = createCheckbox('啓用拼音顯示', !disablePinyin); + let enablePinyinInput = createCheckbox('啟用拼音顯示', !disablePinyin); let defaultSimple = document.createElement('select'); let cnOption = document.createElement('option'); @@ -1931,6 +1931,14 @@ if(!stDict[_sc])stDict[_sc]=_tc; if(!tsDict[_tc])tsDict[_tc]=_sc; } + Object.keys(oc2tc).forEach(key => { + let ocList=oc2tc[key]; + for(let i=0;i Date: Fri, 20 Oct 2023 16:02:22 +0800 Subject: [PATCH 096/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index ba3de545505..64ee194bed6 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -141,7 +141,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` 18. [📕豆瓣閲讀](https://read.douban.com/column/64079189/) - > 礙於法律問題,不會給出具體規則。只是因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。後期豆瓣如若更新則不再更進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下 + > 礙於法律問題,不會給出具體規則。只是因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再更進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) From 798381cf6dcfdab5331a72edc9098665a9ff2ba5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 20 Oct 2023 16:09:24 +0800 Subject: [PATCH 097/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 64ee194bed6..3d1087741cb 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -141,7 +141,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` 18. [📕豆瓣閲讀](https://read.douban.com/column/64079189/) - > 礙於法律問題,不會給出具體規則。只是因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再更進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: + > 礙於法律問題,不會給出具體規則。因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) From 18ac01d49d026a43a6e466fefc170544efa382ba Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 09:14:33 +0800 Subject: [PATCH 098/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index 5da62f5104b..168e13a2cec 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -768,7 +768,7 @@ var siteInfo = [ }, getExtSrc: function() { let newsrc = ""; - if (this.id == "thumbnail-container") { + if (this.id == "thumbnail-container" && this.hasAttribute("loaded")) { let img = this.querySelector('img'); if (!img) return; newsrc = img.src; From e00f7f1c3cb9da524d6836b51c426a553baa9f6c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 09:18:01 +0800 Subject: [PATCH 099/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index deb9cde304a..5b76fd044fd 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -42,7 +42,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1267210 +// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1267985 // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js From 079f94fa9c4db17e186b6c66ae29959fe4f59492 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 09:32:22 +0800 Subject: [PATCH 100/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index 168e13a2cec..822158d79e9 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -768,12 +768,10 @@ var siteInfo = [ }, getExtSrc: function() { let newsrc = ""; - if (this.id == "thumbnail-container" && this.hasAttribute("loaded")) { + if (this.id == "thumbnail-container" && this.children[0].hasAttribute("loaded")) { let img = this.querySelector('img'); if (!img) return; newsrc = img.src; - } else if (this.parentNode && this.parentNode.className == "ytp-inline-preview-ui") { - newsrc = this.parentNode.parentNode.querySelector(".ytp-cued-thumbnail-overlay-image").style.backgroundImage.replace(/url\("(.*)"\)/,"$1"); } return newsrc.replace(/\?.*$/i,""); }, From cf53c42410937194b0f1b58027a24c17a6eab0cd Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 09:33:35 +0800 Subject: [PATCH 101/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 5b76fd044fd..f8da135ab60 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -42,7 +42,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1267985 +// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1267991 // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js From 0204dac3033d6f9f0334576a08a37f8ffe3bdf7c Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 21 Oct 2023 01:43:32 +0000 Subject: [PATCH 102/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 31ba9262ca4..65a500d1ef5 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -91,17 +91,17 @@ { "resource_url": "http://wedata.net/items/86172", "data": { - "insertBefore": "", - "pageElement": "//div[@class='p2s1-banner-v__main']/ul|//ul[@class='p1s1-list-v__main']", + "pageElement": "//div[@class='p2s1-banner-v']|//ul[@class='p1s1-list-v__main']", + "insertBefore": "//div[@class='content__main']/div[not(@class)]/following-sibling::node()[1]", "nextLink": "//li[contains(@class, 'current')][number()>0]/following-sibling::li[1]/a", "url": "^https://websunday\\.net/(news|comics)/", - "exampleUrl": "https://websunday.net/comics/" + "exampleUrl": "https://websunday.net/comics/\r\nhttps://websunday.net/news/\r\n" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Griever3", - "name": "少年サンデー", + "name": "少年サンデー [WEBサンデー]", "created_at": "2023-10-03T19:52:49+09:00", - "updated_at": "2023-10-03T19:52:49+09:00" + "updated_at": "2023-10-20T16:06:03+09:00" }, { "resource_url": "http://wedata.net/items/86171", From 9b3289b3e4d4e3defad9304ece38ef84bdaf6242 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 15:52:23 +0800 Subject: [PATCH 103/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index f8da135ab60..777eb5004ea 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.20.1 +// @version 2023.10.21.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -13386,6 +13386,12 @@ ImgOps | https://imgops.com/#b#`; getBody(document).appendChild(maximizeTrigger); + container.querySelector("#galleryRotate").addEventListener('focus',function(e) { + eleMaps['head-command-drop-list-others'].classList.add("focus"); + }); + container.querySelector("#galleryRotate").addEventListener('blur',function(e){ + eleMaps['head-command-drop-list-others'].classList.remove("focus"); + }); container.querySelector("#galleryRotate").addEventListener('change',function(e) { self.galleryRotate = e.target.value; self.fitToScreen(); From 686163b57756b6108bbce3c2bdd7b40988bfd223 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 16:18:01 +0800 Subject: [PATCH 104/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 27b0207823e..e656806cb07 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.71 +// @version 1.9.36.72 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1890,7 +1890,7 @@ let paStyle = curWin.getComputedStyle(ele.parentNode); let paDisplay = paStyle.display; let paOverflow = paStyle.overflow; - pf = paDisplay.indexOf('flex') !== -1 || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; + pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; } let curStyle = curWin.getComputedStyle(ele); if (ele.children.length > 1) { @@ -1914,7 +1914,7 @@ ele = ele.children; } else { let middleChild = ele.children[parseInt(ele.children.length / 2)]; - if (curStyle.display === 'flex' || (rulesData.opacity != 0 && !pf)) { + if ((curStyle.display === 'flex' && curStyle.flexDirection == "row") || (rulesData.opacity != 0 && !pf)) { ele = [ele]; } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || /^UL$/i.test(ele.nodeName) || curHeight == 0) { ele = [ele]; From fc8be46f87320cb441f559ae91aec190ed043ad4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 16:18:12 +0800 Subject: [PATCH 105/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index bb1a4aae9e7..aa10308ad35 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.71](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.72](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* From 1da5a949b8fc792507f76e6ed32a57ef16f36eaf Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 17:08:34 +0800 Subject: [PATCH 106/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e656806cb07..38165746b8d 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2473,7 +2473,10 @@ verifyNext(next, doc) { if (!next) return null; if (next.previousElementSibling && /^BR$/i.test(next.previousElementSibling.nodeName)) return null; - let eles = getAllElements(`//${next.nodeName}[text()='${next.innerText}']`, doc); + let eles = []; + if (next.innerText && next.innerText.indexOf("\n") == -1) { + eles = getAllElements(`//${next.nodeName}[text()='${next.innerText}']`, doc); + } if (eles.length >= 2 && eles[0].href != eles[1].href) { next = null; } else if (doc == document) { From ff6d9e650b6ba8543eb601b5f67a8d71014b7ce6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 19:26:19 +0800 Subject: [PATCH 107/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 777eb5004ea..0b038438107 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -14810,7 +14810,7 @@ ImgOps | https://imgops.com/#b#`; self.loadThumb(); }, rotateBigImg:function(){ - this.img.style[support.cssTransform] = 'rotate(' + (this.galleryRotate || 0) + 'deg)'; + if (this.img) this.img.style[support.cssTransform] = 'rotate(' + (this.galleryRotate || 0) + 'deg)'; }, showTips:function(content, time){ var tipsWords=this.eleMaps["tipsWords"]; @@ -16995,6 +16995,8 @@ ImgOps | https://imgops.com/#b#`; box-sizing: border-box;\ line-height: 1.6;\ text-overflow: unset;\ + background-image: initial;\ + float: initial;\ }\ .pv-gallery-container * {\ font-size: 14px;\ @@ -17002,7 +17004,7 @@ ImgOps | https://imgops.com/#b#`; flex-direction: row;\ }\ /*点击还原的工具条*/\ - .pv-gallery-maximize-trigger{\ + span.pv-gallery-maximize-trigger{\ position:fixed;\ bottom:15px;\ left:15px;\ @@ -17020,7 +17022,7 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-maximize-trigger:hover{\ opacity:0.9;\ }\ - .pv-gallery-maximize-trigger-close{\ + span.pv-gallery-maximize-trigger-close{\ display:inline-block;\ padding-left:10px;\ vertical-align:middle;\ @@ -17062,7 +17064,7 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-maximize-container span>p{\ opacity: 0.6;\ }\ - .pv-gallery-head-command-close {\ + span.pv-gallery-head-command-close {\ position: fixed!important;\ right: 0!important;\ height: 29px!important;\ @@ -17141,7 +17143,7 @@ ImgOps | https://imgops.com/#b#`; vertical-align:middle;\ }\ /*顶栏左边*/\ - .pv-gallery-head-float-left{\ + span.pv-gallery-head-float-left{\ float:left;\ height:100%;\ text-align:left;\ @@ -17210,7 +17212,7 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-head-command > *{\ vertical-align:middle;\ }\ - .pv-gallery-head-command-close{\ + span.pv-gallery-head-command-close{\ position:absolute;\ top:0;\ width:40px;\ @@ -17243,13 +17245,13 @@ ImgOps | https://imgops.com/#b#`; border-color:#757575;\ margin-left: 0px;\ }\ - .pv-gallery-head-command-collect-icon{\ + span.pv-gallery-head-command-collect-icon{\ display:inline-block;\ height:20px;\ width:20px;\ background:transparent url("' + prefs.icons.fivePointedStar + '") 0 0 no-repeat;\ }\ - .pv-gallery-head-left-lock-icon{\ + span.pv-gallery-head-left-lock-icon{\ display:inline-block;\ height:20px;\ width:20px;\ @@ -17430,11 +17432,11 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-sidebar-toggle-hide .pv-gallery-img-controler{\ opacity:0;\ }\ - .pv-gallery-img-controler-pre{\ + span.pv-gallery-img-controler-pre{\ background:rgba(70,70,70,0.8) url("'+prefs.icons.arrowLeft+'") no-repeat center;\ left:10px;\ }\ - .pv-gallery-img-controler-next{\ + span.pv-gallery-img-controler-next{\ background:rgba(70,70,70,0.8) url("'+prefs.icons.arrowRight+'") no-repeat center;\ right:10px;\ }\ @@ -17924,7 +17926,7 @@ ImgOps | https://imgops.com/#b#`; border-top: 40px solid transparent;\ border-bottom: 40px solid transparent;\ }\ - .pv-gallery-sidebar-controler{\ + span.pv-gallery-sidebar-controler{\ cursor:pointer;\ position:absolute;\ background:rgba(255,255,255,0.1) no-repeat center;\ @@ -17996,7 +17998,7 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-sidebar-thumbnails-container-left {\ padding-right:5px;\ }\ - .pv-gallery-sidebar-thumb-container {\ + span.pv-gallery-sidebar-thumb-container {\ display:inline-block;\ text-align: center;\ border:2px solid rgb(52,52,52);\ @@ -18044,7 +18046,7 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-sidebar-thumb_selected-left {\ left:5px;\ }\ - .pv-gallery-sidebar-thumb-loading{\ + span.pv-gallery-sidebar-thumb-loading{\ position:absolute;\ top:0;\ left:0;\ From 6003313e72283da0523146449de8fdc89f2bb4f0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 19:35:10 +0800 Subject: [PATCH 108/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 50 ++++++++++++++++------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 0b038438107..215b5771753 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -19241,6 +19241,7 @@ ImgOps | https://imgops.com/#b#`; .pv-pic-window-container {\ ' + (prefs.imgWindow.fixed ? 'position: fixed;' : 'position: absolute;') + '\ background-color: rgba(40,40,40,0.65);\ + background-image: initial;\ padding: 8px;\ border: 0;\ border-radius: 1px;\ @@ -19254,6 +19255,10 @@ ImgOps | https://imgops.com/#b#`; box-sizing: content-box;\ display: initial;\ }\ + .pv-pic-window-container span {\ + background-image: initial;\ + float: initial;\ + }\ .pv-pic-window-transition-all{\ -webkit-transition: top 0.2s ease, left 0.2s ease;\ transition: top 0.2s ease, left 0.2s ease;\ @@ -19348,7 +19353,7 @@ ImgOps | https://imgops.com/#b#`; .pv-pic-window-container_focus>.pv-pic-window-toolbar {\ display: block;\ }\ - .pv-pic-window-close {\ + span.pv-pic-window-close {\ cursor: pointer;\ position: absolute;\ right: 0px;\ @@ -19371,7 +19376,7 @@ ImgOps | https://imgops.com/#b#`; .pv-pic-window-container_focus>.pv-pic-window-close {\ display: block;\ }\ - .pv-pic-window-search {\ + span.pv-pic-window-search {\ cursor: pointer;\ position: absolute;\ right: 50px;\ @@ -19386,7 +19391,7 @@ ImgOps | https://imgops.com/#b#`; background-color:#1771FF;\ display: none;\ }\ - .pv-pic-window-max {\ + span.pv-pic-window-max {\ cursor: pointer;\ position: absolute;\ right: 46px;\ @@ -19421,8 +19426,8 @@ ImgOps | https://imgops.com/#b#`; margin-top: 20px;\ min-height: 20px;\ }\ - .pv-pic-window-pre,\ - .pv-pic-window-next{\ + span.pv-pic-window-pre,\ + span.pv-pic-window-next{\ -webkit-transition: opacity 0.3s ease;\ transition: opacity 0.3s ease;\ position: absolute;\ @@ -19434,11 +19439,11 @@ ImgOps | https://imgops.com/#b#`; cursor: pointer;\ pointer-events: none;\ }\ - .pv-pic-window-pre {\ + span.pv-pic-window-pre {\ left: 8px;\ background-image: url("'+prefs.icons.arrowLeft+'");\ }\ - .pv-pic-window-next {\ + span.pv-pic-window-next {\ right: 8px;\ background-image: url("'+prefs.icons.arrowRight+'");\ }\ @@ -19482,7 +19487,7 @@ ImgOps | https://imgops.com/#b#`; .pv-pic-window-container>span.pv-pic-search-state:hover>svg{\ display: block;\ }\ - .pv-pic-search-state {\ + span.pv-pic-search-state {\ top: -10px;\ left: 8px;\ display: block;\ @@ -19506,7 +19511,7 @@ ImgOps | https://imgops.com/#b#`; white-space: nowrap;\ overflow: hidden;\ }\ - .pv-pic-search-state>.pv-icon {\ + span.pv-pic-search-state>.pv-icon {\ width: 20px;\ height: 20px;\ vertical-align: middle;\ @@ -19592,13 +19597,13 @@ ImgOps | https://imgops.com/#b#`; .pv-pic-window-container_focus .pv-pic-window-imgbox {\ box-shadow: 0 0 6px black;\ }\ - .pv-pic-window-container_focus .pv-pic-window-pic {\ + span.pv-pic-window-container_focus .pv-pic-window-pic {\ background: linear-gradient( 45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.4) 75%, rgba(255, 255, 255, 0.4) 100% ), linear-gradient( 45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.4) 75%, rgba(255, 255, 255, 0.4) 100% );\ background-size: 20px 20px;\ background-position: 0 0, 10px 10px;\ }\ - .pv-pic-window-tb-tool,\ - .pv-pic-window-tb-command{\ + span.pv-pic-window-tb-tool,\ + span.pv-pic-window-tb-command{\ box-sizing:content-box;\ -moz-box-sizing:content-box;\ -webkit-box-sizing:content-box;\ @@ -19626,29 +19631,29 @@ ImgOps | https://imgops.com/#b#`; box-shadow: inset 0 21px 0 rgba(255,255,255,0.3) ,inset 0 -21px 0 rgba(0,0,0,0.3);\ border-left:2px solid #1771FF;\ }\ - .pv-pic-window-tb-hand {\ + span.pv-pic-window-tb-hand {\ background-image: url("'+prefs.icons.hand+'");\ }\ - .pv-pic-window-tb-rotate {\ + span.pv-pic-window-tb-rotate {\ background-image: url("'+prefs.icons.rotate+'");\ }\ - .pv-pic-window-tb-zoom {\ + span.pv-pic-window-tb-zoom {\ background-image: url("'+prefs.icons.zoom+'");\ }\ - .pv-pic-window-tb-flip-horizontal {\ + span.pv-pic-window-tb-flip-horizontal {\ background-image: url("'+prefs.icons.flipHorizontal+'");\ }\ - .pv-pic-window-tb-flip-vertical {\ + span.pv-pic-window-tb-flip-vertical {\ background-image: url("'+prefs.icons.flipVertical+'");\ }\ - .pv-pic-window-tb-compare {\ + span.pv-pic-window-tb-compare {\ background-image: url("'+prefs.icons.compare+'");\ }\ .pv-pic-window-tb-tool-badge-container {\ display: block;\ position: relative;\ }\ - .pv-pic-window-tb-tool-badge {\ + span.pv-pic-window-tb-tool-badge {\ position: absolute;\ top: -3px;\ right: 1px;\ @@ -19660,7 +19665,7 @@ ImgOps | https://imgops.com/#b#`; opacity: 0.5;\ color: black;\ }\ - .pv-pic-window-tb-tool-extend-menu{\ + span.pv-pic-window-tb-tool-extend-menu{\ position:absolute;\ top:0;\ margin-left:-1px;\ @@ -19726,7 +19731,7 @@ ImgOps | https://imgops.com/#b#`; left:0;\ z-index: '+prefs.imgWindow.zIndex+';\ }\ - .pv-pic-window-rotate-indicator{\ + span.pv-pic-window-rotate-indicator{\ display:none;\ position:fixed;\ width:250px;\ @@ -19736,7 +19741,7 @@ ImgOps | https://imgops.com/#b#`; margin-left:-135px;\ background:transparent url("'+ prefs.icons.rotateIndicatorBG +'") no-repeat center;\ }\ - .pv-pic-window-rotate-indicator-pointer{\ + span.pv-pic-window-rotate-indicator-pointer{\ display:block;\ margin-left:auto;\ margin-right:auto;\ @@ -21543,6 +21548,7 @@ ImgOps | https://imgops.com/#b#`; style.textContent='\ #pv-float-bar-container {\ position: absolute;\ + background-image: initial;\ top: 0px;\ left: 0px;\ z-index:9999999998;\ From 9147b9642eabef938a225d9e066fc232545c0411 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 19:44:43 +0800 Subject: [PATCH 109/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 330fd55606a..c9261788c97 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.9 +// @version 1.6.30.10 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1499,6 +1499,7 @@ margin: 20px; pointer-events: none; text-shadow: 0 0 3px black; + background-image: initial; } #search-jumper-alllist>.dayInAll { left: 0; @@ -1808,6 +1809,7 @@ min-width: ${32 * this.scale}px; min-height: ${32 * this.scale}px; text-align: center; + background-image: initial; } a.search-jumper-btn:not(.search-jumper-word)>span { position: absolute; @@ -2135,6 +2137,7 @@ line-height: unset; text-align: center; text-shadow: 0 0 0.7px #787878dd; + background-image: initial; } .search-jumper-type img { width: ${32 * this.scale}px; @@ -10792,6 +10795,8 @@ font-size: 12px; line-height: normal; overflow: visible; + background-image: initial; + float: initial; } #searchJumperWrapper { position: fixed; From cce7d509043cf773469d493eb30291382404bd48 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 21 Oct 2023 20:03:32 +0800 Subject: [PATCH 110/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 215b5771753..bcbc97264df 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -18031,7 +18031,7 @@ ImgOps | https://imgops.com/#b#`; .pv-gallery-sidebar-thumb-container:hover {\ border:2px solid rgb(57,149,211);\ }\ - .pv-gallery-sidebar-thumb_selected {\ + span.pv-gallery-sidebar-thumb_selected {\ border:2px solid rgb(229,59,62);\ }\ .pv-gallery-sidebar-thumb_selected-top {\ From 5f685a685850648b0b9b24338a13a45f29087bf3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 22 Oct 2023 09:00:35 +0800 Subject: [PATCH 111/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index bcbc97264df..3a58f1b589b 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -17946,19 +17946,19 @@ ImgOps | https://imgops.com/#b#`; width:100%;\ height:36px;\ }\ - .pv-gallery-sidebar-controler-pre-h {\ + span.pv-gallery-sidebar-controler-pre-h {\ left: -40px;\ background-image: url("'+prefs.icons.arrowLeft+'");\ }\ - .pv-gallery-sidebar-controler-next-h {\ + span.pv-gallery-sidebar-controler-next-h {\ right: -40px;\ background-image: url("'+prefs.icons.arrowRight+'");\ }\ - .pv-gallery-sidebar-controler-pre-v {\ + span.pv-gallery-sidebar-controler-pre-v {\ top: -40px;\ background-image: url("'+prefs.icons.arrowTop+'");\ }\ - .pv-gallery-sidebar-controler-next-v {\ + span.pv-gallery-sidebar-controler-next-v {\ bottom: -40px;\ background-image: url("'+prefs.icons.arrowBottom+'");\ }\ From 5c92e1e3c983a7717b5522df9d1f5964a7a73e72 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 22 Oct 2023 11:11:55 +0800 Subject: [PATCH 112/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c9261788c97..306c356f1d8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -233,7 +233,7 @@ url: "https://www.google.com/searchbyimage?sbisrc=cr_1_0_0&image_url=%T" }, { name: "Google translate image", - url: "https://translate.google.com/?op=images#p{input#ucj-11=%i}" + url: "https://translate.google.com/?op=images#p{input[accept^\\=\"image\"]=%i}" }, { name: "SauceNAO", url: "https://saucenao.com/search.php?db=999&url=%t" From c7eb98f5d25c059e3b4ca423e14f4751ff53e1f4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 22 Oct 2023 18:05:41 +0800 Subject: [PATCH 113/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 160 ++++++++++++++---- 1 file changed, 130 insertions(+), 30 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index bc6f046808c..4070010727b 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.3.26 +// @version 2.7.4.1 // @description Fetch and download main content on current page, provide special support for novel // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -223,16 +223,21 @@ downloading:"已下载完成 %s 段,剩余 %s 段
正在下载 %s", complete:"已全部下载完成,共 %s 段", del:"设置文本干扰码的CSS选择器", - custom:"自定义下载", + custom:"自定规则下载", customInfo:"输入网址或者章节CSS选择器", - reSort:"按标题名重新排序", - reSortUrl:"按网址重新排序", - setting:"选项设置", + reSort:"按标题名重新排序章节", + reSortUrl:"按网址重新排序章节", + setting:"选项参数设置", searchRule:"搜索网站规则", abort:"跳过此章", save:"保存当前", saveAsMd:"存为 Markdown", - downThreadNum:"设置同时下载的线程数" + downThreadNum:"设置同时下载的线程数", + customTitle:"自定义章节标题,输入内页文字对应选择器", + reSortDefault:"默认按页面中位置排序章节", + reverse:"反转章节排序", + saveBtn:"保存设置", + saveOk:"保存成功" }; break; case "zh-TW": @@ -244,16 +249,21 @@ downloading:"已下載完成 %s 段,剩餘 %s 段
正在下載 %s", complete:"已全部下載完成,共 %s 段", del:"設置文本干擾碼的CSS選擇器", - custom:"自定義下載", + custom:"自訂規則下載", customInfo:"輸入網址或者章節CSS選擇器", - reSort:"按標題名重新排序", - reSortUrl:"按網址重新排序", - setting:"選項設置", + reSort:"按標題名重新排序章節", + reSortUrl:"按網址重新排序章節", + setting:"選項參數設定", searchRule:"搜尋網站規則", abort:"跳過此章", save:"保存當前", saveAsMd:"存爲 Markdown", - downThreadNum:"設置同時下載的綫程數" + downThreadNum:"設置同時下載的綫程數", + customTitle:"自訂章節標題,輸入內頁文字對應選擇器", + reSortDefault:"預設依頁面中位置排序章節", + reverse:"反轉章節排序", + saveBtn:"儲存設定", + saveOk:"儲存成功" }; break; default: @@ -273,7 +283,12 @@ abort:"Abort", save:"Save", saveAsMd:"Save as Markdown", - downThreadNum:"Set threadNum for download" + downThreadNum:"Set threadNum for download", + customTitle: "Customize the chapter title, enter the selector on inner page", + reSortDefault: "Default sort by position in the page", + reverse:"Reverse chapter ordering", + saveBtn:"Save Setting", + saveOk:"Save Over" }; break; } @@ -292,7 +307,7 @@ Analysing......

- +
@@ -358,7 +373,11 @@ return parseInt(a.href.replace(/[^0-9]/ig,"")) - parseInt(b.href.replace(/[^0-9]/ig,"")); }); } + if(GM_getValue("reverse")){ + aEles=aEles.reverse(); + } rCats=[]; + var customTitle=!!GM_getValue("customTitle"); var insertSigns=[]; // var j=0,rCats=[]; var downIndex=0,downNum=0,downOnce=function(wait){ @@ -416,6 +435,16 @@ if (result.status >= 400) { console.warn("error:", `status: ${result.status} from: ${aTag.href}`); } + if (customTitle) { + try { + let title = doc.querySelector(customTitle); + if (title && title.innerText) { + aTag.innerText = title.innerText; + } + } catch(e) { + console.warn(e); + } + } processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:"")); if (wait) { setTimeout(() => { @@ -766,17 +795,6 @@ } } - function setDel(){ - var selValue=GM_getValue("selectors"); - var selectors=prompt(i18n.del,selValue?selValue:""); - GM_setValue("selectors",selectors); - selValue=GM_getValue("downThreadNum"); - var downThreadNum=prompt(i18n.downThreadNum,selValue?selValue:"20"); - GM_setValue("downThreadNum",downThreadNum); - var sortByUrl=window.confirm(i18n.reSortUrl); - GM_setValue("contentSortUrl",sortByUrl); - if(!sortByUrl)GM_setValue("contentSort",window.confirm(i18n.reSort)); - } function customDown(){ processFunc=null; var customRules=GM_getValue("DACrules_"+document.domain); @@ -937,7 +955,7 @@ const configPage = "https://hoothin.github.io/UserScripts/DownloadAllContent/"; const copySvg = ''; function searchRule(){ - GM_openInTab(configPage + "#" + location.hostname, {active: true}); + GM_openInTab(configPage + "#@" + location.hostname, {active: true}); } if (location.origin + location.pathname == configPage) { let exampleNode = document.getElementById("example"); @@ -990,11 +1008,14 @@ searchByInput(); }); if (location.hash) { - setTimeout(() => { - exampleNode.scrollIntoView(); - }, 500); - searchInput.value = location.hash.slice(1); - searchByInput(); + let hash = location.hash.slice(1); + if (hash.indexOf("@") == 0) { + setTimeout(() => { + exampleNode.scrollIntoView(); + }, 500); + searchInput.value = hash.slice(1); + searchByInput(); + } } [].forEach.call(ruleList.querySelectorAll("div.highlight"), highlight => { highlight.style.position = "relative"; @@ -1009,9 +1030,88 @@ }); }); exampleNode.parentNode.insertBefore(searchInput, ruleList); + + + let donateNode = document.querySelector("[alt='donate']"); + if (!donateNode) return; + let insertPos = donateNode.parentNode.nextElementSibling; + let radioIndex = 0; + function createOption(_name, _value, _type) { + if (!_type) _type = "input"; + let con = document.createElement("div"); + let option = document.createElement("input"); + let cap = document.createElement("b"); + option.type = _type; + option.value = _value; + option.checked = _value; + cap.style.margin = "10px 10px 10px 0px"; + if (_type == "radio") { + let label = document.createElement("label"); + label.innerText = _name; + radioIndex++; + option.id = "radio" + radioIndex; + label.setAttribute("for", option.id); + cap.appendChild(label); + } else { + cap.innerText = _name; + } + con.style.margin = "10px 0"; + con.appendChild(cap); + con.appendChild(option); + insertPos.parentNode.insertBefore(con, insertPos); + return option; + } + let delSelector = createOption(i18n.del, GM_getValue("selectors") || ""); + delSelector.setAttribute("placeHolder", ".mask,.ksam"); + let downThreadNum = createOption(i18n.downThreadNum, GM_getValue("downThreadNum") || "20"); + let customTitle = createOption(i18n.customTitle, GM_getValue("customTitle") || ""); + customTitle.setAttribute("placeHolder", "title"); + let contentSortUrlValue = GM_getValue("contentSortUrl") || false; + let contentSortValue = GM_getValue("contentSort") || false; + let reSortDefault = createOption(i18n.reSortDefault, !contentSortUrlValue && !contentSortValue, "radio"); + let reSortUrl = createOption(i18n.reSortUrl, contentSortUrlValue || false, "radio"); + let contentSort = createOption(i18n.reSort, contentSortValue || false, "radio"); + reSortDefault.name = "sort"; + reSortUrl.name = "sort"; + contentSort.name = "sort"; + let reverse = createOption(i18n.reverse, GM_getValue("reverse") || false, "checkbox"); + let saveBtn = document.createElement("button"); + saveBtn.innerText = i18n.saveBtn; + insertPos.parentNode.insertBefore(saveBtn, insertPos); + saveBtn.onclick = e => { + GM_setValue("selectors", delSelector.value || ""); + GM_setValue("downThreadNum", downThreadNum.value || 20); + GM_setValue("customTitle", customTitle.value || ""); + if (reSortUrl.checked) { + GM_setValue("contentSortUrl", true); + GM_setValue("contentSort", false); + } else if (contentSort.checked) { + GM_setValue("contentSortUrl", false); + GM_setValue("contentSort", true); + } else { + GM_setValue("contentSortUrl", false); + GM_setValue("contentSort", false); + } + GM_setValue("reverse", reverse.checked); + alert(i18n.saveOk); + }; return; } + function setDel(){ + GM_openInTab(configPage + "#操作說明", {active: true}); + return; + /*var selValue=GM_getValue("selectors"); + var selectors=prompt(i18n.del,selValue?selValue:""); + GM_setValue("selectors",selectors); + selValue=GM_getValue("downThreadNum"); + var downThreadNum=prompt(i18n.downThreadNum,selValue?selValue:"20"); + GM_setValue("downThreadNum",downThreadNum); + var sortByUrl=window.confirm(i18n.reSortUrl); + GM_setValue("contentSortUrl",sortByUrl); + if(!sortByUrl)GM_setValue("contentSort",window.confirm(i18n.reSort));*/ + } + document.addEventListener("keydown", function(e) { if(e.keyCode == 120 && e.ctrlKey) { fetch(e.shiftKey); From 5607feaadfae04451137a3bbf8be862951aeb1ee Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 22 Oct 2023 18:07:36 +0800 Subject: [PATCH 114/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 3d1087741cb..8847f4317c8 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -141,7 +141,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` 18. [📕豆瓣閲讀](https://read.douban.com/column/64079189/) - > 礙於法律問題,不會給出具體規則。因爲有朋友詢問,因此手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: + > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) From 28ea433e4535f67f85dd61675e0e9b6ca6133cee Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 22 Oct 2023 20:58:11 +0800 Subject: [PATCH 115/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 71 ++++++++++++++----- 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 4070010727b..a3e707fc957 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.4.1 +// @version 2.7.4.2 // @description Fetch and download main content on current page, provide special support for novel // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -237,7 +237,9 @@ reSortDefault:"默认按页面中位置排序章节", reverse:"反转章节排序", saveBtn:"保存设置", - saveOk:"保存成功" + saveOk:"保存成功", + nextPage:"嗅探章节内分页", + nextPageReg:"自定义分页正则" }; break; case "zh-TW": @@ -263,7 +265,9 @@ reSortDefault:"預設依頁面中位置排序章節", reverse:"反轉章節排序", saveBtn:"儲存設定", - saveOk:"儲存成功" + saveOk:"儲存成功", + nextPage:"嗅探章節內分頁", + nextPageReg:"自訂分頁正規" }; break; default: @@ -288,7 +292,9 @@ reSortDefault: "Default sort by position in the page", reverse:"Reverse chapter ordering", saveBtn:"Save Setting", - saveOk:"Save Over" + saveOk:"Save Over", + nextPage:"Check next page in chapter", + nextPageReg:"Custom RegExp of next page" }; break; } @@ -377,7 +383,16 @@ aEles=aEles.reverse(); } rCats=[]; - var customTitle=!!GM_getValue("customTitle"); + var customTitle=GM_getValue("customTitle"); + var disableNextPage=!!GM_getValue("disableNextPage"); + var customNextPageReg=GM_getValue("nextPageReg"); + if (customNextPageReg) { + try { + innerNextPage = new RegExp(customNextPageReg, "i"); + } catch(e) { + console.warn(e); + } + } var insertSigns=[]; // var j=0,rCats=[]; var downIndex=0,downNum=0,downOnce=function(wait){ @@ -400,7 +415,7 @@ downNum++; let doc = getDocEle(result.responseText); let base = doc.querySelector("base"); - let nextPage=checkNextPage(doc, base ? base.href : aTag.href); + let nextPage = !disableNextPage && checkNextPage(doc, base ? base.href : aTag.href); if(nextPage){ var inArr=false; for(var ai=0;ai { + nextPageReg.parentNode.style.display = nextPage.checked ? "flex" : "none"; + } let saveBtn = document.createElement("button"); saveBtn.innerText = i18n.saveBtn; + saveBtn.style.margin = "0 0 20px 0"; insertPos.parentNode.insertBefore(saveBtn, insertPos); saveBtn.onclick = e => { GM_setValue("selectors", delSelector.value || ""); @@ -1093,6 +1128,8 @@ GM_setValue("contentSort", false); } GM_setValue("reverse", reverse.checked); + GM_setValue("disableNextPage", !nextPage.checked); + GM_setValue("nextPageReg", nextPageReg.value || ""); alert(i18n.saveOk); }; return; From 13cfd79e3fe7b571128d402a2f160260a04fc15c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 22 Oct 2023 21:08:11 +0800 Subject: [PATCH 116/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index a3e707fc957..fd780cba002 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -388,7 +388,7 @@ var customNextPageReg=GM_getValue("nextPageReg"); if (customNextPageReg) { try { - innerNextPage = new RegExp(customNextPageReg, "i"); + innerNextPage = new RegExp(customNextPageReg); } catch(e) { console.warn(e); } From 81c8f2d95b8f7b13ec59dca5c4ccba02e8b03639 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 22 Oct 2023 21:17:23 +0800 Subject: [PATCH 117/812] Update README.md --- DownloadAllContent/README.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 8847f4317c8..35f785a9232 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -176,17 +176,19 @@ function decode(t) { + http://tieba.baidu.com/p/4871634479 ### FAQ -- 章節沒有「第幾章第幾節」的字樣怎麼辦?
+- 章節沒有「第幾章第幾節」的字樣怎麼辦?
參考第二層心法輸入其中一個章節名即可 -- 下載一定章節後失敗怎麼辦?
-可能是網站限製了並發數,在設置中調低線程數即可 -- 按下快捷鍵無效怎麼辦?
-可能是快捷鍵被其他應用接管了,使用腳本管理器中的命令菜單下載即可 -- 有無關幹擾字符怎麼辦?
-設置裡輸入幹擾碼css選擇器即可,多個選擇器用逗號分隔 -- 章節順序不對怎麼辦?
-默認是按網頁內出現位置排序。點擊設置,嘗試更改為“按網址重新排序”或者“按章節名重新排序”即可 -- 其他問題歡迎通過 email 聯繫我,有空可幫你解決。 +- 下載一定數量章節後抓取超時失敗怎麼辦?
+可能是網站限制了並發數,在設定中調低執行緒數即可。 設為正數代表執行緒數,負數則代表間隔x秒下載一章,例如`-2`代表每隔2秒下載一章 +- 按下快捷鍵沒有反應怎麼辦?
+可能是快捷鍵被其他應用程式接管了,使用腳本管理器中的命令選單下載即可 +- 有無關幹擾字元怎麼辦?
+設定裡輸入乾擾碼css選擇器即可,多個選擇器以逗號分隔 +- 章節順序不對怎麼辦?
+預設是按網頁內出現位置排序。 點擊設置,嘗試更改為“按網址重新排序”或“按章節名重新排序”即可 +- 章節標題有誤怎麼辦?
+預設是取章節連結文字為標題,可以在設定中自訂章節標題,輸入 title 即為抓取分頁頁面的標題,輸入 h1 即為抓取分頁頁面 h1 等級的文章標題 +- 其他問題歡迎透過 email 聯絡我,有空可幫你解決。 ### 為啥要寫這個腳本? 主要是怠惰啊 From 1537c223a5eddda17f489a4ac37c8098424fef40 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 08:25:10 +0800 Subject: [PATCH 118/812] Update README.md --- Pagetual/README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index aa10308ad35..8d0f5313ff1 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -11,23 +11,6 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu --- -[Rules example](https://pagetual.hoothin.com/en/rule.html) -== -``` json -[ - { - "name":"beauty", - "url":"^https://www\\.jpmn8\\.com/", - "pageElement":"p>img" - }, - { - "name":"Expreview", - "url":"^https://www\\.expreview\\.com/", - "loadMore":"span.load" - } -] -``` - @@ -45,6 +28,23 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu ![donate](https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg) +[Rules example](https://pagetual.hoothin.com/en/rule.html) +== +``` json +[ + { + "name":"beauty", + "url":"^https://www\\.jpmn8\\.com/", + "pageElement":"p>img" + }, + { + "name":"Expreview", + "url":"^https://www\\.expreview\\.com/", + "loadMore":"span.load" + } +] +``` + name -- Name of the target site From 4a6b7a663e701df0e4d77a958de24eafddddcc91 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 08:36:55 +0800 Subject: [PATCH 119/812] Update README.md --- Pagetual/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 8d0f5313ff1..719348e4af0 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -13,10 +13,11 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu
Buy me a coffee if it helps you💞
- + - + + @@ -26,7 +27,6 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu
Buy me a coffee if it helps you💞Buy me a coffee if it helps you💞
PayPal.MeKo-fi愛發電PayPalKo-fi愛發電donate
Send me an email for help
-![donate](https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg) [Rules example](https://pagetual.hoothin.com/en/rule.html) == From 36022cd3d28521d0e04a67561abb1c8b1730e6ac Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 08:38:24 +0800 Subject: [PATCH 120/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 719348e4af0..6add1a78c81 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,6 +1,6 @@ [☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.72](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == -*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Wiki**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* +*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* 🔧CONFIGURATION PAGE From 63a164bf93c79766357d036aa9392c36fc272d31 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 08:39:54 +0800 Subject: [PATCH 121/812] Update README.md --- Pagetual/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 6add1a78c81..3895fba5b83 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -34,12 +34,12 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu [ { "name":"beauty", - "url":"^https://www\\.jpmn8\\.com/", + "url":"^https://www\\.jpmn-demo\\.com/", "pageElement":"p>img" }, { "name":"Expreview", - "url":"^https://www\\.expreview\\.com/", + "url":"^https://www\\.expreview-demo\\.com/", "loadMore":"span.load" } ] From 565ac97513d24048c0af6d163d24e80d28b59127 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 08:51:46 +0800 Subject: [PATCH 122/812] Update README.md --- Pagetual/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 3895fba5b83..fb89f9d8c99 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -16,11 +16,11 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu Buy me a coffee if it helps you💞 - PayPalKo-fi愛發電 +
PayPal

Ko-fi

愛發電
donate - Send me an email for help + 📧Send me an email for help Made with ♥ by Hoothin From 70547c4d642241391d28f1e8528867b933c84609 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 11:01:18 +0800 Subject: [PATCH 123/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 98 ++++++++++++++++++----------- 1 file changed, 60 insertions(+), 38 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 3a58f1b589b..a6ff6d2e609 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.21.1 +// @version 2023.10.23.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11669,7 +11669,7 @@ QRCode decode | https://zxing.org/w/decode?full=true&u=#t# QRCode | https://hoothin.com/qrcode/##t# ImgOps | https://imgops.com/#b#`; - var _GM_openInTab,_GM_setClipboard,_GM_xmlhttpRequest,_GM_registerMenuCommand,_GM_notification,GM_fetch; + var _GM_openInTab,_GM_setClipboard,_GM_xmlhttpRequest,_GM_registerMenuCommand,_GM_notification,GM_fetch,_GM_addStyle; if(typeof GM_openInTab!='undefined'){ _GM_openInTab=GM_openInTab; }else if(typeof GM!='undefined' && typeof GM.openInTab!='undefined'){ @@ -11714,6 +11714,18 @@ ImgOps | https://imgops.com/#b#`; } else { _GM_xmlhttpRequest = (f) => {fetch(f.url, {method: f.method || 'GET', body: f.data || '', headers: f.headers}).then(response => response.text()).then(data => {f.onload({response: data})}).catch(f.onerror())}; } + if (typeof GM_addStyle != 'undefined') { + _GM_addStyle = GM_addStyle; + } else if (typeof GM != 'undefined' && typeof GM.addStyle != 'undefined') { + _GM_addStyle = GM.addStyle; + } else { + _GM_addStyle = cssStr => { + let styleEle = document.createElement("style"); + styleEle.innerHTML = cssStr; + document.head.appendChild(styleEle); + return styleEle; + }; + } if (GM_fetch) { GM_fetch = async (url, option) => { if (!url) return null; @@ -16182,6 +16194,7 @@ ImgOps | https://imgops.com/#b#`; }, show:function(reload){ this.shown=true; + this.addStyle(); galleryMode=true; if (!reload) { @@ -16970,9 +16983,14 @@ ImgOps | https://imgops.com/#b#`; }, addStyle:function(){ - var style=document.createElement('style'); - style.type='text/css'; - style.textContent='\ + if (GalleryC.style) { + if (!GalleryC.style.parentNode) { + GalleryC.style = _GM_addStyle(GalleryC.style.innerText); + this.globalSSheet = GalleryC.style.sheet; + } + return; + } + GalleryC.style=_GM_addStyle('\ /*最外层容器*/\ .pv-gallery-container {\ position: fixed;\ @@ -18080,11 +18098,10 @@ ImgOps | https://imgops.com/#b#`; white-space:nowrap;\ background-color:red;\ }\ - '; - var head=document.head; - head.appendChild(style); - this.globalSSheet=style.sheet; + '); + this.globalSSheet=GalleryC.style.sheet; + var head=document.head; var style2=document.createElement('style'); this.thumbVisibleStyle=style2; style2.type='text/css'; @@ -18454,11 +18471,13 @@ ImgOps | https://imgops.com/#b#`; document.addEventListener('mouseup',this._clickOut,true); }, addStyle:function(){ - if(MagnifierC.style)return; - var style=document.createElement('style'); - style.type='text/css'; - MagnifierC.style=style; - style.textContent='\ + if (MagnifierC.style) { + if (!MagnifierC.style.parentNode) { + MagnifierC.style = _GM_addStyle(MagnifierC.style.innerText); + } + return; + } + MagnifierC.style=_GM_addStyle('\ .pv-magnifier-container{\ position:absolute;\ padding:0;\ @@ -18475,8 +18494,7 @@ ImgOps | https://imgops.com/#b#`; .pv-magnifier-container_pause{\ border-color:red;\ }\ - '; - document.head.appendChild(style); + '); }, clickOut:function(e){ if(!this.magnifier.classList.contains("pv-magnifier-container_focus")){ @@ -19234,10 +19252,13 @@ ImgOps | https://imgops.com/#b#`; } }, addStyle:function(){ - if(ImgWindowC.style)return; - var style=document.createElement('style'); - ImgWindowC.style=style; - style.textContent='\ + if (ImgWindowC.style) { + if (!ImgWindowC.style.parentNode) { + ImgWindowC.style = _GM_addStyle(ImgWindowC.style.innerText); + } + return; + } + ImgWindowC.style=_GM_addStyle('\ .pv-pic-window-container {\ ' + (prefs.imgWindow.fixed ? 'position: fixed;' : 'position: absolute;') + '\ background-color: rgba(40,40,40,0.65);\ @@ -19773,8 +19794,7 @@ ImgOps | https://imgops.com/#b#`; }\ .pv-pic-window-container::-webkit-scrollbar { width: 0 !important }\ .pv-pic-window-container { -ms-overflow-style: none;overflow: -moz-scrollbars-none; }\ - '; - document.head.appendChild(style); + '); }, firstOpen:function(){ @@ -21179,11 +21199,13 @@ ImgOps | https://imgops.com/#b#`; } }, addStyle:function(){ - if(LoadingAnimC.styleAdded)return; - LoadingAnimC.styleAdded=true; - var style=document.createElement('style'); - style.type='text/css'; - style.textContent='\ + if (LoadingAnimC.style) { + if (!LoadingAnimC.style.parentNode) { + LoadingAnimC.style = _GM_addStyle(LoadingAnimC.style.innerText); + } + return; + } + LoadingAnimC.style=_GM_addStyle('\ .pv-loading-container {\ position: absolute;\ z-index:999999997;\ @@ -21240,8 +21262,7 @@ ImgOps | https://imgops.com/#b#`; .pv-loading-container_error .pv-loading-retry{\ display:block;\ }\ - '; - document.head.appendChild(style); + '); }, remove:function(){ if(!this.removed){ @@ -21543,9 +21564,13 @@ ImgOps | https://imgops.com/#b#`; this._scrollHandler=this.scrollHandler.bind(this); }, addStyle:function(){ - var style=document.createElement('style'); - style.type='text/css'; - style.textContent='\ + if (FloatBarC.style) { + if (!FloatBarC.style.parentNode) { + FloatBarC.style = _GM_addStyle(FloatBarC.style.innerText); + } + return; + } + FloatBarC.style=_GM_addStyle('\ #pv-float-bar-container {\ position: absolute;\ background-image: initial;\ @@ -21621,8 +21646,7 @@ ImgOps | https://imgops.com/#b#`; #pv-float-bar-container .pv-float-bar-button-download {\ background-image:url("'+ prefs.icons.download +'");\ }\ - '; - document.head.appendChild(style); + '); }, start:function(data){ @@ -21829,6 +21853,7 @@ ImgOps | https://imgops.com/#b#`; show:function(){ if(this.setPosition())return; this.shown=true; + this.addStyle(); this.setButton(); if(prefs.floatBar.position!=="hide"){ this.floatBar.style.transition=""; @@ -22261,11 +22286,8 @@ ImgOps | https://imgops.com/#b#`; if (site.enabled != false && (!site.url || toRE(site.url).test(_URL))) { if(site.url){ if(site.css){ - var style = document.createElement('style'); - style.type = 'text/css'; + var style = _GM_addStyle(site.css); style.id = 'gm-picviewer-site-style'; - style.textContent = site.css; - document.head.appendChild(style); } if(site.xhr){ self._xhr=site.xhr; From 400a5fa7a6c2ca641e91a3a651988776c5ebe949 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 13:47:30 +0800 Subject: [PATCH 124/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index fb89f9d8c99..59e6200281f 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -23,7 +23,7 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu 📧Send me an email for help - Made with ♥ by Hoothin + Made with ❤️ by Hoothin From 5ac84ce54ea51372bab3fdb951463ee05ea28cda Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 14:45:38 +0800 Subject: [PATCH 125/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 110 +++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 9 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index a6ff6d2e609..c0fa741c48c 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -23270,6 +23270,27 @@ ImgOps | https://imgops.com/#b#`; } } + function createEleFromJson(json) { + let collection = document.createDocumentFragment(); + json.forEach(data => { + let ele = document.createElement(data.node); + if (data.text) { + ele.innerText = data.text; + } + if (data.attr) { + Object.keys(data.attr).forEach(key => { + ele.setAttribute(key, data.attr[key]); + }); + } + if (data.children) { + let children = createEleFromJson(data.children); + ele.appendChild(children); + } + collection.appendChild(ele); + }); + return collection; + } + window.addEventListener('message', handleMessage, true); addPageScript(); @@ -23346,7 +23367,7 @@ ImgOps | https://imgops.com/#b#`; for(let key in editSitesFunc){ editSitesName[key]=key; } - var newsInited = false, news = ""; + var newsInited = false, newsNode = null; initLang(); var customLangOption={ @@ -23949,7 +23970,7 @@ ImgOps | https://imgops.com/#b#`; let closeBtn=doc.querySelector("#"+this.id+"_closeBtn"); let resetLink=doc.querySelector("#"+this.id+"_resetLink"); let customInput=doc.querySelector("#"+this.id+"_field_customRules"); - customInput.style.height="500px"; + customInput.style.height="188px"; saveBtn.textContent=i18n("saveBtn"); saveBtn.title=i18n("saveBtnTips"); closeBtn.textContent=i18n("closeBtn"); @@ -23960,16 +23981,87 @@ ImgOps | https://imgops.com/#b#`; if(searchData && searchData.value==""){ searchData.value=defaultSearchData; } - let header=doc.getElementById(this.id+"_header"); - if(header && header.children.length==1){ + let about = doc.getElementById(this.id + "_section_4"); + if (about) { + if (!newsNode) { + newsNode = document.createElement("div"); + let newsEles = createEleFromJson([ + { + node: "div", + text: "Made with ❤️ by ", + attr: { + style: "width: calc(100% - 8px); text-align: center;" + }, + children: [ + { + node: "a", + text: "Hoothin", + attr: { + "href": "mailto:rixixi@gmail.com" + } + } + ] + }, + { + node: "img", + attr: { + src: "https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg", + style: "width: calc(100% - 8px); margin-top: 5px" + } + }, + { + node: "div", + attr: { + style: "width: calc(100% - 8px); display: flex; align-items: center; justify-content: center; margin-top: 5px;" + }, + children: [ + { + node: "img", + attr: { + src: "https://ko-fi.com/favicon-32x32.png", + style: "margin-right: 5px;" + } + }, + { + node: "a", + text: "Ko-fi", + attr: { + href: "https://ko-fi.com/hoothin", + style: "margin-right: 10px;" + } + }, + { + node: "img", + attr: { + src: "https://static.afdiancdn.com/favicon.ico", + style: "margin-right: 5px; height: 25px;" + } + }, + { + node: "a", + text: "爱发电", + attr: { + href: "https://afdian.net/@hoothin" + } + } + ] + } + ]); + newsNode.appendChild(newsEles); + about.appendChild(newsNode); + } if (!newsInited) { - news = await GM_fetch(`https://www.hoothin.com/news.php?from=pvcep&lang=${lang}`).then(response => response.text()).catch(e => {}); + let news = await GM_fetch(`https://hoothin.com/scripts/pvcep/${lang}`).then(response => response.json()).catch(e => {}); newsInited = true; + if (!news) return; + let newsEles = createEleFromJson(news); + if (newsEles && newsEles.childElementCount) { + if (newsNode) about.removeChild(newsNode); + newsNode = document.createElement("div"); + newsNode.appendChild(newsEles); + } } - if (!news) return; - let newsEle = document.createElement("div"); - newsEle.innerHTML = createHTML(news); - header.appendChild(newsEle); + about.appendChild(newsNode); } }, save: function() { From 516bf5baec65c5b577bac0162352064d56b59829 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 14:47:48 +0800 Subject: [PATCH 126/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 59e6200281f..978c43e7380 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,6 +1,6 @@ [☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.72](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == -*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")* +*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") 🔧CONFIGURATION PAGE From 7d6f8537014e70170eb550eb12ee6dd48a670fc2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 23 Oct 2023 14:49:25 +0800 Subject: [PATCH 127/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 978c43e7380..fd1967e5d3e 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -2,7 +2,7 @@ == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") -🔧CONFIGURATION PAGE +🔧CONFIGURATION PAGE🔧


From 2c4a7619e4d65c747498389de055795181b22906 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Mon, 23 Oct 2023 16:09:31 +0800
Subject: [PATCH 128/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index c0fa741c48c..1ca64394056 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -24012,14 +24012,14 @@ ImgOps | https://imgops.com/#b#`;
                                 {
                                     node: "div",
                                     attr: {
-                                        style: "width: calc(100% - 8px); display: flex; align-items: center; justify-content: center; margin-top: 5px;"
+                                        style: "width: calc(100% - 8px); display: flex; align-items: center; justify-content: center; margin-top: 5px;font-size: 14px;"
                                     },
                                     children: [
                                         {
                                             node: "img",
                                             attr: {
                                                 src: "https://ko-fi.com/favicon-32x32.png",
-                                                style: "margin-right: 5px;"
+                                                style: "margin-right: 5px; height: 25px;"
                                             }
                                         },
                                         {
@@ -24034,7 +24034,7 @@ ImgOps | https://imgops.com/#b#`;
                                             node: "img",
                                             attr: {
                                                 src: "https://static.afdiancdn.com/favicon.ico",
-                                                style: "margin-right: 5px; height: 25px;"
+                                                style: "margin-right: 5px; height: 20px;"
                                             }
                                         },
                                         {

From 8708abaf04c6e294368ba8b5e88df8270929554b Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Mon, 23 Oct 2023 16:58:16 +0800
Subject: [PATCH 129/812] Update pagetual.user.js

---
 Pagetual/pagetual.user.js | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js
index 38165746b8d..3cb5d5d078f 100644
--- a/Pagetual/pagetual.user.js
+++ b/Pagetual/pagetual.user.js
@@ -123,7 +123,7 @@
                 firstUpdate: "Click here to initialize the rules",
                 update: "Update online rules",
                 click2update: "Click to update rules from url now",
-                loadNow: "Load next page automatically",
+                loadNow: "Load next automatically",
                 loadConfirm: "How much pages do you want to load? (0 means infinite)",
                 noNext: "No next link found, please create a new rule",
                 passSec: "Updated #t# seconds ago",
@@ -3890,6 +3890,7 @@
               color: #161616;
               z-index: 2147483646;
               font-size: 16px;
+              overflow: hidden;
               box-shadow: rgb(0 0 0) 0px 0px 10px;
              }
              #pagetual-picker * {
@@ -5872,9 +5873,17 @@
                     });
                 });
                 _GM_registerMenuCommand(i18n(forceState == 1 ? "enable" : "disableSite"), () => {
-                    forceState = (forceState == 1 ? 0 : 1);
+                    if (forceState == 1) {
+                        forceState = 0;
+                        showTips(i18n("enableSiteTips"));
+                        changeStop(false);
+                    } else {
+                        forceState = 1;
+                        showTips(i18n("disableSiteTips"));
+                        changeStop(true);
+                        sideController.remove();
+                    }
                     storage.setItem("forceState_" + location.host, forceState);
-                    showTips(i18n(forceState == 1 ? "disableSiteTips" : "enableSiteTips"));
                     if (!ruleParser.curSiteRule.url) location.reload();
                 });
                 _GM_registerMenuCommand(i18n("toggleAutoScroll"), () => {
@@ -6594,8 +6603,16 @@
                 }
                 var key = e.key.toLowerCase();
                 if (rulesData.dbClick2StopKey.toLowerCase() == key) {
-                    forceState = (forceState == 1 ? 0 : 1);
-                    showTips(i18n(forceState == 1 ? "disableSiteTips" : "enableSiteTips"));
+                    if (forceState == 1) {
+                        forceState = 0;
+                        showTips(i18n("enableSiteTips"));
+                        changeStop(false);
+                    } else {
+                        forceState = 1;
+                        showTips(i18n("disableSiteTips"));
+                        changeStop(true);
+                        sideController.remove();
+                    }
                     if (!ruleParser.curSiteRule.url) {
                         storage.setItem("forceState_" + location.host, forceState);
                         location.reload();

From 147962a04471c22adfcee887858a1b370ab9f891 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Mon, 23 Oct 2023 20:03:28 +0800
Subject: [PATCH 130/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index 1ca64394056..7085ef264fc 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -23403,7 +23403,9 @@ ImgOps | https://imgops.com/#b#`;
                 "#pv-prefs input.order { width: 250px; }",
                 "#pv-prefs .config_header>a { border-bottom: solid 2px; }",
                 "#pv-prefs .config_header>a:hover { color: #9f9f9f; }",
-                "#pv-prefs .nav-tabs { text-wrap: nowrap; width: 95vw; display: flex; overflow-x: auto; overflow-y: visible; }",
+                "#pv-prefs .section_header_holder { padding-right: 10px; }",
+                "#pv-prefs textarea { width: 100%; }",
+                "#pv-prefs .nav-tabs { text-wrap: nowrap; width: fit-content; max-width: 100%; margin: 20 auto; display: flex; overflow-x: auto; overflow-y: visible; }",
             ].join('\n'),
             fields: {
                 // 浮动工具栏
@@ -24006,13 +24008,13 @@ ImgOps | https://imgops.com/#b#`;
                                     node: "img",
                                     attr: {
                                         src: "https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg",
-                                        style: "width: calc(100% - 8px); margin-top: 5px"
+                                        style: "width: 100%; margin-top: 5px"
                                     }
                                 },
                                 {
                                     node: "div",
                                     attr: {
-                                        style: "width: calc(100% - 8px); display: flex; align-items: center; justify-content: center; margin-top: 5px;font-size: 14px;"
+                                        style: "width: 100%; display: flex; align-items: center; justify-content: center; margin-top: 5px; font-size: 14px;"
                                     },
                                     children: [
                                         {
@@ -24047,6 +24049,7 @@ ImgOps | https://imgops.com/#b#`;
                                     ]
                                 }
                             ]);
+                            newsNode.style.padding = "5px";
                             newsNode.appendChild(newsEles);
                             about.appendChild(newsNode);
                         }

From d15bcceaba6841f172219e35ef1f18cb0baa5209 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Mon, 23 Oct 2023 20:32:51 +0800
Subject: [PATCH 131/812] Update README.md

---
 DownloadAllContent/README.md | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md
index 35f785a9232..bb6159ce79a 100644
--- a/DownloadAllContent/README.md
+++ b/DownloadAllContent/README.md
@@ -144,7 +144,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for
   > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下:
 ``` javascript
 function decode(t) {
-	const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67]))
+    const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67]))
     	, r = (new TextDecoder).decode(new Uint8Array([99, 114, 121, 112, 116, 111]))
     	, o = (new TextDecoder).decode(new Uint8Array([115, 117, 98, 116, 108, 101]))
         , a = (new TextDecoder).decode(new Uint8Array([100, 105, 103, 101, 115, 116]))
@@ -153,19 +153,19 @@ function decode(t) {
         , c = (new TextDecoder).decode(new Uint8Array([100, 101, 99, 114, 121, 112, 116]))
         , u = (new TextDecoder).decode(new Uint8Array([105, 118]));
     const e = Uint8Array.from(window.atob(t), (t=>t.charCodeAt(0)))
-      , i = e.buffer
-      , d = e.length - 16 - 13
-      , p = new Uint8Array(i,d,16)
-      , f = new Uint8Array(i,0,d)
-      , g = {};
+        , i = e.buffer
+        , d = e.length - 16 - 13
+        , p = new Uint8Array(i,d,16)
+        , f = new Uint8Array(i,0,d)
+        , g = {};
     return g.name = s,
-    g[u] = p,
-    function() {
-        const t = Ark.user
-          , e = t.isAnonymous ? document.cookie.replace(/.*bid=(\w+).*/,"$1") : t.id
-          , i = (new TextEncoder).encode(e);
-        return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c])))
-    }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t))))
+    	g[u] = p,
+    	function() {
+            const t = Ark.user
+                , e = t.isAnonymous ? document.cookie.replace(/.*bid=(\w+).*/,"$1") : t.id
+                , i = (new TextEncoder).encode(e);
+            return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c])))
+        }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t))))
 }
 ```
   > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可

From 9d0338db5cd2369dc6616cfca3dfd8d3aa29c05d Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Mon, 23 Oct 2023 20:54:38 +0800
Subject: [PATCH 132/812] Update searchJumper.user.js

---
 SearchJumper/searchJumper.user.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js
index 306c356f1d8..198b2b591f1 100644
--- a/SearchJumper/searchJumper.user.js
+++ b/SearchJumper/searchJumper.user.js
@@ -7254,7 +7254,9 @@
                             if (ele.dataset.current && imgSrc.indexOf(location.host) != -1) {
                                 img.dataset.src = imgSrc;
                                 cacheIcon[imgSrc] = '';
-                                if (!isBookmark && !cacheIcon[imgSrc]) cachePool.push(img);
+                                if (!isBookmark) {
+                                    cacheAction(img);
+                                }
                             }
                         } else if (cache) {
                             img.dataset.src = cache;

From 3143ada6557a3bd96bcc45767150f40adcd82822 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Mon, 23 Oct 2023 21:12:08 +0800
Subject: [PATCH 133/812] Update searchJumper.user.js

---
 SearchJumper/searchJumper.user.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js
index 198b2b591f1..c044c1b9c93 100644
--- a/SearchJumper/searchJumper.user.js
+++ b/SearchJumper/searchJumper.user.js
@@ -10147,8 +10147,8 @@
                     clearTimeout(sendMessageTimer);
                     if (cachePool.length > 0 && searchData.prefConfig.cacheSwitch) {
                         debug(`Start cache ${cachePool.length} icons!`);
+                        cacheImgManager();
                     }
-                    cacheImgManager();
                 });
 
                 document.addEventListener('downloadCache', e => {
@@ -10244,14 +10244,16 @@
                         });
                         storage.setItem("cacheIcon", newCache);
                         if (searchData.prefConfig.cacheSwitch) {
-                            _GM_notification(i18n('startCache'));
                             searchBar.con.classList.add("in-input");
                             searchBar.con.style.visibility = "hidden";
                             searchBar.appendBar();
                             setTimeout(() => {
                                 cacheFontManager(true);
                             }, 2000);
-                            cacheImgManager(true);
+                            if (cachePool.length > 0) {
+                                _GM_notification(i18n('startCache'));
+                                cacheImgManager(true);
+                            }
                         }
                     }
                     preSwitch = searchData.prefConfig.cacheSwitch;

From 03ffb6f75fb15b5233e0f479e5d3d7f5cfd463a5 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 09:10:03 +0800
Subject: [PATCH 134/812] Update DownloadAllContentSavaAsZIP.user.js

---
 DownloadAllContent/DownloadAllContentSavaAsZIP.user.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js
index 6164b0f392d..ee5194a58c4 100644
--- a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js
+++ b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js
@@ -3,7 +3,7 @@
 // @name:zh-CN   怠惰小说下载器 ZIP 扩展
 // @name:zh-TW   怠惰小説下載器 ZIP 擴充
 // @namespace    hoothin
-// @version      0.2
+// @version      0.3
 // @description  Save content as ZIP for DownloadAllContent
 // @description:zh-CN  下载时分章节保存 TXT 并打包为 ZIP
 // @description:zh-TW  下載時分章節儲存 TXT 並打包為 ZIP
@@ -36,7 +36,7 @@
             let catTitle = cat.match(/.*?\r\n/);
             if (!catTitle) return;
             catTitle = catTitle[0].trim();
-            zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "").slice(0, 50) + ".txt", cat.replace(catTitle, "").trim());
+            zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "").slice(0, 50) + ".txt", cat.replace(catTitle, "").replace(/^[\n\r]+/, ""));
         });
         zip.generateAsync({type: "blob", compression: "DEFLATE"}, meta => {zipTips.innerText = "percent: " + ((meta && meta.percent && meta.percent.toFixed(2)) || "100") + "%"}).then(function(content){
             callback(content);

From 5f13118840391f9f2bc41fed480425cfbdc6100f Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 09:16:47 +0800
Subject: [PATCH 135/812] Update pvcep_rules.js

---
 Picviewer CE+/pvcep_rules.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js
index 822158d79e9..2c7a7e1d51b 100644
--- a/Picviewer CE+/pvcep_rules.js	
+++ b/Picviewer CE+/pvcep_rules.js	
@@ -1307,8 +1307,8 @@ var siteInfo = [
 {
  name: "煎蛋",
  url: /^https:\/\/jandan\.net\//,
- r: /\/(thumb\d+|mw\d+)\//,
- s: "/large/"
+ r: [/\/(thumb\d+|mw\d+)\//, /!square/],
+ s: ["/large/", ""]
 },
 {
  name:"辉夜白兔",

From abc91b82cd7094b98a5f079f6702aa1cc8d1c5ef Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 09:18:06 +0800
Subject: [PATCH 136/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index 7085ef264fc..326072ee647 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -10,7 +10,7 @@
 // @description:zh-TW    線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存
 // @description:pt-BR    Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
 // @description:ru       Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
-// @version              2023.10.23.1
+// @version              2023.10.24.1
 // @icon                 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
 // @namespace            https://github.com/hoothin/UserScripts
 // @homepage             https://www.hoothin.com
@@ -21,7 +21,7 @@
 // @connect              ipv4.google.com
 // @connect              image.baidu.com
 // @connect              www.tineye.com
-// @connect              www.hoothin.com
+// @connect              hoothin.com
 // @connect              *
 // @grant                GM_getValue
 // @grant                GM_setValue
@@ -42,7 +42,7 @@
 // @grant                GM.notification
 // @grant                unsafeWindow
 // @require              https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710
-// @require              https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1267991
+// @require              https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1269250
 // @require              https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309
 // @downloadURL          https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js
 // @updateURL            https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js

From 823dc8b71fb7a5a727bd87dab68c69161f00bc7c Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 10:25:07 +0800
Subject: [PATCH 137/812] Update DownloadAllContentSavaAsZIP.user.js

---
 DownloadAllContent/DownloadAllContentSavaAsZIP.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js
index ee5194a58c4..9098f477f31 100644
--- a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js
+++ b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js
@@ -36,7 +36,7 @@
             let catTitle = cat.match(/.*?\r\n/);
             if (!catTitle) return;
             catTitle = catTitle[0].trim();
-            zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "").slice(0, 50) + ".txt", cat.replace(catTitle, "").replace(/^[\n\r]+/, ""));
+            zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "_").slice(0, 50) + ".txt", cat.replace(catTitle, "").replace(/^[\n\r]+/, ""));
         });
         zip.generateAsync({type: "blob", compression: "DEFLATE"}, meta => {zipTips.innerText = "percent: " + ((meta && meta.percent && meta.percent.toFixed(2)) || "100") + "%"}).then(function(content){
             callback(content);

From 9f60e015ca9b12fe15dd5b0d4b14f561f2c955f4 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 12:55:23 +0800
Subject: [PATCH 138/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index 326072ee647..05e18f9b9fa 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -10,7 +10,7 @@
 // @description:zh-TW    線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存
 // @description:pt-BR    Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
 // @description:ru       Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
-// @version              2023.10.24.1
+// @version              2023.10.24.2
 // @icon                 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
 // @namespace            https://github.com/hoothin/UserScripts
 // @homepage             https://www.hoothin.com
@@ -12955,7 +12955,7 @@ ImgOps | https://imgops.com/#b#`;
                 //ready必须在load之前触发。
 
                 if(img.complete){//图片已经加载完成.
-                    if(typeof img.width=='number' && img.width && img.height){//图片
+                    if(/^data/.test(img.src) || (typeof img.width=='number' && img.width && img.height)){//图片
                         setTimeout(function(){
                             if(aborted)return;
                             go('load',{
@@ -14722,9 +14722,9 @@ ImgOps | https://imgops.com/#b#`;
                 this._keyUpListener=this.keyUpListener.bind(this);
 
                 //插入动态生成的css数据。
-                this.globalSSheet.insertRule('.pv-gallery-sidebar-thumb-container{'+
+                _GM_addStyle('.pv-gallery-sidebar-thumb-container{'+
                                              ((isHorizontal ? 'width' : 'height') + ':'  + (isHorizontal ?  unsafeWindow.getComputedStyle(eleMaps['sidebar-thumbnails-container']).height : unsafeWindow.getComputedStyle(eleMaps['sidebar-thumbnails-container']).width)) +
-                                             '}',this.globalSSheet.cssRules.length);
+                                             '}');
 
                 this.forceRepaintTimes=0;
 

From 526ff0685102f26f3e6548698e8262c5a608fef7 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 13:41:27 +0800
Subject: [PATCH 139/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 51 ++++++++++++++-----
 1 file changed, 38 insertions(+), 13 deletions(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index fd780cba002..ee699311485 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -4,7 +4,7 @@
 // @name:zh-TW   怠惰小説下載器
 // @name:ja      怠惰者小説ダウンロードツール
 // @namespace    hoothin
-// @version      2.7.4.2
+// @version      2.7.4.3
 // @description  Fetch and download main content on current page, provide special support for novel
 // @description:zh-CN  通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档
 // @description:zh-TW  通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔
@@ -239,7 +239,8 @@
                 saveBtn:"保存设置",
                 saveOk:"保存成功",
                 nextPage:"嗅探章节内分页",
-                nextPageReg:"自定义分页正则"
+                nextPageReg:"自定义分页正则",
+                retainImage:"保留正文中图片的网址"
             };
             break;
         case "zh-TW":
@@ -267,7 +268,8 @@
                 saveBtn:"儲存設定",
                 saveOk:"儲存成功",
                 nextPage:"嗅探章節內分頁",
-                nextPageReg:"自訂分頁正規"
+                nextPageReg:"自訂分頁正規",
+                retainImage:"保留內文圖片的網址"
             };
             break;
         default:
@@ -294,7 +296,8 @@
                 saveBtn:"Save Setting",
                 saveOk:"Save Over",
                 nextPage:"Check next page in chapter",
-                nextPageReg:"Custom RegExp of next page"
+                nextPageReg:"Custom RegExp of next page",
+                retainImage:"Keep the URL if there are images in the text"
             };
             break;
     }
@@ -408,14 +411,14 @@
                         referer:aTag.href,
                         "Content-Type":"text/html;charset="+document.charset
                     },
-                    timeout:15000,
+                    timeout:10000,
                     overrideMimeType:"text/html;charset="+document.charset,
                     onload: function(result) {
                         downIndex++;
                         downNum++;
                         let doc = getDocEle(result.responseText);
                         let base = doc.querySelector("base");
-                        let nextPage = !disableNextPage && checkNextPage(doc, base ? base.href : aTag.href);
+                        let nextPage = !disableNextPage && !processFunc && checkNextPage(doc, base ? base.href : aTag.href);
                         if(nextPage){
                             var inArr=false;
                             for(var ai=0;ai= 400) {
                             console.warn("error:", `status: ${result.status} from: ${aTag.href}`);
+                        } else {
+                            console.log(result.status);
                         }
                         if (customTitle) {
                             try {
@@ -569,7 +574,7 @@
             };
             let contentResult=getPageContent(doc, content=>{
                 cbFunc(content);
-            });
+            }, aTag.href);
             if(contentResult!==false){
                 cbFunc(contentResult);
             }
@@ -648,7 +653,7 @@
         return a;
     }
 
-    function getPageContent(doc, cb){
+    function getPageContent(doc, cb, url){
         if(!doc)return i18n.error;
         if(processFunc){
             return processFunc(doc, cb);
@@ -678,12 +683,13 @@
         var largestContent,contents=pageData.querySelectorAll("span,div,article,p,td"),largestNum=0;
         for(i=0;i=0;j--){
                 item=content.childNodes[j];
                 if(item.nodeType==3){
-                    if(/^\s*$/.test(item.data))
+                    if(/^\s*$/.test(item.data)){
                         item.innerHTML="";
-                    else hasText=true;
+                    }else hasText=true;
                 }else if(/^(I|A|STRONG|B|FONT|P|DL|DD|H\d)$/.test(item.nodeName)){
                     hasText=true;
                 }else if(item.nodeType==1&&item.children.length==1&&/^(I|A|STRONG|B|FONT|P|DL|DD|H\d)$/.test(item.children[0].nodeName)){
@@ -692,8 +698,9 @@
             }
             for(j=content.childNodes.length-1;j>=0;j--){
                 item=content.childNodes[j];
-                if(item.nodeType==1 && !/^(I|A|STRONG|B|FONT|BR)$/.test(item.nodeName) && /^[\s\-\_\?\>\|]*$/.test(item.innerHTML))
+                if(item.nodeType==1 && !/^(I|A|STRONG|B|FONT|BR)$/.test(item.nodeName) && /^[\s\-\_\?\>\|]*$/.test(item.innerHTML)){
                     item.innerHTML="";
+                }
             }
             if(content.childNodes.length>1){
                 let indexItem=0;
@@ -718,8 +725,9 @@
             if(!allSingle && !hasText){
                 continue;
             }else {
-                if(pageData==document && content.offsetWidth<=0 && content.offsetHeight<=0)
+                if(pageData==document && content.offsetWidth<=0 && content.offsetHeight<=0){
                     continue;
+                }
                 [].forEach.call(content.childNodes,function(item){
                     if(item.nodeType==3)curNum+=item.data.trim().length;
                     else if(endEle(item) || (item.nodeType == 1 && item.children.length == 1 && endEle(item.children[0]))) curNum += (firefox ? item.textContent.trim().length : item.innerText.trim().length);
@@ -731,8 +739,15 @@
             }
         }
         if(!largestContent)return i18n.error+" : NO TEXT CONTENT";
+        var retainImage=!!GM_getValue("retainImage");
         var childlist=pageData.querySelectorAll(largestContent.nodeName);//+(largestContent.className?"."+largestContent.className.replace(/(^\s*)|(\s*$)/g, '').replace(/\s+/g, '.'):""));
         function getRightStr(ele, noTextEnable){
+            if(retainImage){
+                [].forEach.call(ele.querySelectorAll("img[src]"), img => {
+                    let imgTxtNode=document.createTextNode(`![img](${canonicalUri(img.getAttribute("src"), url || location.href)})`);
+                    img.parentNode.replaceChild(imgTxtNode, img);
+                });
+            }
             let childNodes=ele.childNodes,cStr="\r\n",hasText=false;
             [].forEach.call(ele.querySelectorAll("a[href]"), a => {
                 a.parentNode && a.parentNode.removeChild(a);
@@ -746,7 +761,7 @@
                 if(childNode.textContent){
                     cStr+=childNode.textContent.replace(/ +/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2");
                 }
-                if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT)$/.test(childNode.nodeName))cStr+="\r\n";
+                if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT|IMG)$/.test(childNode.nodeName))cStr+="\r\n";
             }
             if(hasText || noTextEnable || ele==largestContent)rStr+=cStr+"\r\n";
         }
@@ -940,12 +955,20 @@
                     ele.href=ele.href.replace(new RegExp(urlsArr[1]), urlsArr[2]);
                 });
             }
+            var retainImage=!!GM_getValue("retainImage");
             if(urlsArr[3]){
                 processFunc=(data, cb)=>{
                     let doc=data;
                     if(urlsArr[3].indexOf("return ")==-1){
                         if(urlsArr[3].indexOf("@")==0){
                             let content="";
+                            if(retainImage){
+                                [].forEach.call(data.querySelectorAll("img[src]"), img => {
+                                    let imgTxt=`![img](${canonicalUri(img.getAttribute("src"), location.href)})`;
+                                    let imgTxtNode=document.createTextNode(imgTxt);
+                                    img.parentNode.replaceChild(imgTxtNode, img);
+                                });
+                            }
                             [].forEach.call(data.querySelectorAll(urlsArr[3].slice(1)), ele=>{
                                 [].forEach.call(ele.childNodes, child=>{
                                     if(child.innerHTML){
@@ -1099,6 +1122,7 @@
         reSortUrl.name = "sort";
         contentSort.name = "sort";
         let reverse = createOption(i18n.reverse, !!GM_getValue("reverse"), "checkbox");
+        let retainImage = createOption(i18n.retainImage, !!GM_getValue("retainImage"), "checkbox");
         let disableNextPage = !!GM_getValue("disableNextPage");
         let nextPage = createOption(i18n.nextPage, !disableNextPage, "checkbox");
         let nextPageReg = createOption(i18n.nextPageReg, GM_getValue("nextPageReg") || "");
@@ -1128,6 +1152,7 @@
                 GM_setValue("contentSort", false);
             }
             GM_setValue("reverse", reverse.checked);
+            GM_setValue("retainImage", retainImage.checked);
             GM_setValue("disableNextPage", !nextPage.checked);
             GM_setValue("nextPageReg", nextPageReg.value || "");
             alert(i18n.saveOk);

From 9e70ded50d4ec8f6d3a9f14d09aecff702d131da Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 13:42:07 +0800
Subject: [PATCH 140/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index ee699311485..79e1c56d504 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -297,7 +297,7 @@
                 saveOk:"Save Over",
                 nextPage:"Check next page in chapter",
                 nextPageReg:"Custom RegExp of next page",
-                retainImage:"Keep the URL if there are images in the text"
+                retainImage:"Keep the URL of image if there are images in the text"
             };
             break;
     }

From 4fada9df1636c090fe47056b954ffca50ce0b639 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 14:18:31 +0800
Subject: [PATCH 141/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index 05e18f9b9fa..25011f299d1 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -10,7 +10,7 @@
 // @description:zh-TW    線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存
 // @description:pt-BR    Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
 // @description:ru       Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
-// @version              2023.10.24.2
+// @version              2023.10.24.3
 // @icon                 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
 // @namespace            https://github.com/hoothin/UserScripts
 // @homepage             https://www.hoothin.com
@@ -16027,6 +16027,7 @@ ImgOps | https://imgops.com/#b#`;
                             return;
                         }
                     }
+                    if(!selectSpan && this.imgSpans.length)selectSpan=this.imgSpans[0];
                 }
                 this.select(selectSpan, true);
             },
@@ -21727,8 +21728,9 @@ ImgOps | https://imgops.com/#b#`;
                     return true;
                 };
                 var targetPosi=getContentClientRect(this.data.img);
-                if (this.data.img.parentNode && this.data.img.parentNode.scrollHeight > 20 && this.data.img.parentNode.scrollWidth > 20) {
-                    var paPosi=getContentClientRect(this.data.img.parentNode);
+                var pa=this.data.img.parentNode;
+                if (pa && unsafeWindow.getComputedStyle(pa).overflow=='hidden' && pa.scrollHeight > 20 && pa.scrollWidth > 20) {
+                    var paPosi=getContentClientRect(pa);
                     if (paPosi.width > 20 && paPosi.height > 20) {
                         if (paPosi.width < targetPosi.width) {
                             targetPosi.left = paPosi.left;

From 53f88d850e75833c67f2f85e2b04afe673854e26 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 14:22:45 +0800
Subject: [PATCH 142/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index 25011f299d1..b4ee1672dba 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -17150,7 +17150,7 @@ ImgOps | https://imgops.com/#b#`;
                     display: block;\
                     overflow-x: visible;\
                     overflow-y: auto;\
-                    text-wrap: nowrap;\
+                    white-space: nowrap;\
                     -ms-overflow-style: none;\
                     scrollbar-width: none;\
                     }\

From 3f5e68bf4321103ad76976258727fd558ea30fb2 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 14:23:32 +0800
Subject: [PATCH 143/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index b4ee1672dba..4c7b32e82ed 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -23407,7 +23407,7 @@ ImgOps | https://imgops.com/#b#`;
                 "#pv-prefs .config_header>a:hover { color: #9f9f9f; }",
                 "#pv-prefs .section_header_holder { padding-right: 10px; }",
                 "#pv-prefs textarea { width: 100%; }",
-                "#pv-prefs .nav-tabs { text-wrap: nowrap; width: fit-content; max-width: 100%; margin: 20 auto; display: flex; overflow-x: auto; overflow-y: visible; }",
+                "#pv-prefs .nav-tabs { white-space: nowrap; width: fit-content; max-width: 100%; margin: 20 auto; display: flex; overflow-x: auto; overflow-y: visible; }",
             ].join('\n'),
             fields: {
                 // 浮动工具栏

From 35717986d8ad7f68f0abb1c6a40ab68e3eb77a01 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 16:15:05 +0800
Subject: [PATCH 144/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index 79e1c56d504..d50508c4f19 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -28,6 +28,17 @@
 // @contributionURL https://ko-fi.com/hoothin
 // @contributionAmount 1
 // ==/UserScript==
+
+if (window.top != window.self) {
+    try {
+        if (window.self.innerWidth < 250 || window.self.innerHeight < 250) {
+            return;
+        }
+    } catch(e) {
+        return;
+    }
+}
+
 (function (global, factory) {
   if (typeof define === "function" && define.amd) {
     define([], factory);

From 5ef90039d0585fdb5415b39f90e1134e4daeaacd Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 17:01:11 +0800
Subject: [PATCH 145/812] Update searchJumper.user.js

---
 SearchJumper/searchJumper.user.js | 33 +++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js
index c044c1b9c93..439b867f1de 100644
--- a/SearchJumper/searchJumper.user.js
+++ b/SearchJumper/searchJumper.user.js
@@ -4,7 +4,7 @@
 // @name:zh-TW   搜尋醬
 // @name:ja      検索ちゃん - SearchJumper
 // @namespace    hoothin
-// @version      1.6.30.10
+// @version      1.6.30.11
 // @description  Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts.
 // @description:zh-CN  高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等
 // @description:zh-TW  高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等
@@ -2582,7 +2582,7 @@
                      transition: top 0.25s ease;
                  }
                  #navMarks {
-                     height: 100%;
+                     height: calc(100% - 16px);
                      width: 100%;
                      position: absolute;
                  }
@@ -3988,10 +3988,6 @@
             focusHighlight(ele) {
                 if (!ele) return;
                 if (this.focusMark) this.focusMark.removeAttribute('data-current');
-                setTimeout(() => {
-                    ele.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"});
-                    ele.dataset.current = true;
-                }, 0);
                 this.focusMark = ele;
                 if (!this.wPosBar) {
                     this.wPosBar = document.createElement("div");
@@ -4013,9 +4009,26 @@
 
                 this.wPosBar.style.animationName = "";
                 this.hPosBar.style.animationName = "";
-                setTimeout(() => {
+                setTimeout(async () => {
+                    ele.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"});
+                    ele.dataset.current = true;
                     this.wPosBar.style.animationName = "fadeit";
                     this.hPosBar.style.animationName = "fadeit";
+                    await new Promise(resolve => {
+                        new IntersectionObserver(
+                            (entries, observer) => {
+                                for (const entry of entries) {
+                                    if (entry.target === ele && entry.intersectionRatio >= 0.90) {
+                                        observer.disconnect();
+                                        resolve();
+                                    }
+                                }
+                            }
+                        ).observe(ele)
+                    });
+                    let rect = ele.getBoundingClientRect();
+                    this.wPosBar.style.top = rect.top + document.documentElement.scrollTop + getBody(document).scrollTop + "px";
+                    this.hPosBar.style.left = rect.left + "px";
                 }, 0);
 
             }
@@ -4245,7 +4258,7 @@
                                     self.focusHighlight(node);
                                     self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length);
                                     self.navPointer.style.display = "";
-                                    self.navPointer.style.top = navMark.offsetTop + 16 + "px";
+                                    self.navPointer.style.top = navMark.offsetTop + 18 + "px";
                                     return false;
                                 }, true);
                                 self.navMarks.appendChild(navMark);
@@ -4314,7 +4327,7 @@
                                     self.focusHighlight(node);
                                     self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length);
                                     self.navPointer.style.display = "";
-                                    self.navPointer.style.top = navMark.offsetTop + 16 + "px";
+                                    self.navPointer.style.top = navMark.offsetTop + 18 + "px";
                                     return false;
                                 }, true);
                                 self.navMarks.appendChild(navMark);
@@ -4422,7 +4435,7 @@
                                 self.focusHighlight(spannode);
                                 self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length);
                                 self.navPointer.style.display = "";
-                                self.navPointer.style.top = navMark.offsetTop + 16 + "px";
+                                self.navPointer.style.top = navMark.offsetTop + 18 + "px";
                                 return false;
                             }, true);
                             self.navMarks.appendChild(navMark);

From df34eb390e2b2d75abfa8d643b77cf7ff96c91a0 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 19:26:35 +0800
Subject: [PATCH 146/812] Update pagetual.user.js

---
 Pagetual/pagetual.user.js | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js
index 3cb5d5d078f..1ee5f116359 100644
--- a/Pagetual/pagetual.user.js
+++ b/Pagetual/pagetual.user.js
@@ -10,7 +10,7 @@
 // @name:fr      Pagetual
 // @name:it      Pagetual
 // @namespace    hoothin
-// @version      1.9.36.72
+// @version      1.9.36.73
 // @description  Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule.
 // @description:zh-CN  终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页
 // @description:zh-TW  終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁
@@ -1368,7 +1368,7 @@
                 let urlReg = new RegExp(r.url, "i");
                 if (urlReg.test(href)) {
                     if (!self.ruleMatchPre(r)) return false;
-                    if (r.url.length > 15) {
+                    if (r.url.length > 15 && r.from != 1) {
                         self.possibleRule = r;
                     }
                     if (r.waitElement) {
@@ -2381,7 +2381,7 @@
                                     }
                                 }
                                 if (!next3) {
-                                    if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(innerText) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) {
+                                    if (/^(next\s*(»|>>|>|›|→|❯)|>|▶|>|›|→|❯)$/i.test(innerText) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) {
                                         if (isJs) {
                                             if (!nextJs3) nextJs3 = aTag;
                                         } else {
@@ -3267,7 +3267,7 @@
                 if (self.curSiteRule.singleUrl && self.nextLinkHref == false && self.possibleRule) {
                     setTimeout(() => {
                         self.initPage(() => {});
-                    }, 1000);
+                    }, 3000);
                 }
                 self.refreshByClick();
 

From 645709aba07e9e9c9178fada431dcb2b703212d2 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 19:26:50 +0800
Subject: [PATCH 147/812] Update README.md

---
 Pagetual/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Pagetual/README.md b/Pagetual/README.md
index fd1967e5d3e..02848afb9bc 100644
--- a/Pagetual/README.md
+++ b/Pagetual/README.md
@@ -1,4 +1,4 @@
-[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.72](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version")
+[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.73](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version")
 ==
 *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")
 

From 1c1bd8946bc34ebef6cd079988a034c12bc2d9c2 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 19:48:13 +0800
Subject: [PATCH 148/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index d50508c4f19..f7c86aafc60 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -769,8 +769,10 @@ if (window.top != window.self) {
                 if(childNode.innerHTML){
                     childNode.innerHTML=childNode.innerHTML.replace(/\<\s*br\s*\>/gi,"\r\n").replace(/\n+/gi,"\n").replace(/\r+/gi,"\r");
                 }
-                if(childNode.textContent){
-                    cStr+=childNode.textContent.replace(/ +/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2");
+                let content=childNode.textContent;
+                if(content){
+                    if(!content.trim())continue;
+                    cStr+=content.replace(/ +/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2");
                 }
                 if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT|IMG)$/.test(childNode.nodeName))cStr+="\r\n";
             }
@@ -892,6 +894,7 @@ if (window.top != window.self) {
                     eles=[];
                     var eleTxts=urlsArr[0].split(/(?<=[^\\])[,,]/),exmpEles=[],excludeTxts={};
                     [].forEach.call(document.querySelectorAll("a"),function(item){
+                        if(!item.offsetParent)return;
                         eleTxts.forEach(txt=>{
                             var txtArr=txt.split("!");
                             if(item.innerText.indexOf(txtArr[0])!=-1){
@@ -907,7 +910,9 @@ if (window.top != window.self) {
                             cssSelStr=pa.nodeName+">"+cssSelStr;
                             pa=pa.parentNode;
                         }
+                        cssSelStr="body>"+cssSelStr;;
                         [].forEach.call(document.querySelectorAll(cssSelStr),function(item){
+                            if(!item.offsetParent)return;
                             var isExclude=false;
                             for(var t in excludeTxt){
                                 if(item.innerText.indexOf(excludeTxt[t])!=-1){

From 88380505ac3f0bdee8a015dbc2c2a6f0a5cef0e8 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 20:13:53 +0800
Subject: [PATCH 149/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 34 ++++++++++++++-----
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index f7c86aafc60..391e110c4c1 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -4,7 +4,7 @@
 // @name:zh-TW   怠惰小説下載器
 // @name:ja      怠惰者小説ダウンロードツール
 // @namespace    hoothin
-// @version      2.7.4.3
+// @version      2.7.4.4
 // @description  Fetch and download main content on current page, provide special support for novel
 // @description:zh-CN  通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档
 // @description:zh-TW  通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔
@@ -251,7 +251,8 @@ if (window.top != window.self) {
                 saveOk:"保存成功",
                 nextPage:"嗅探章节内分页",
                 nextPageReg:"自定义分页正则",
-                retainImage:"保留正文中图片的网址"
+                retainImage:"保留正文中图片的网址",
+                minTxtLength:"当检测到的正文字数小于此数,则尝试重新抓取"
             };
             break;
         case "zh-TW":
@@ -280,7 +281,8 @@ if (window.top != window.self) {
                 saveOk:"儲存成功",
                 nextPage:"嗅探章節內分頁",
                 nextPageReg:"自訂分頁正規",
-                retainImage:"保留內文圖片的網址"
+                retainImage:"保留內文圖片的網址",
+                minTxtLength:"當偵測到的正文字數小於此數,則嘗試重新抓取"
             };
             break;
         default:
@@ -308,7 +310,8 @@ if (window.top != window.self) {
                 saveOk:"Save Over",
                 nextPage:"Check next page in chapter",
                 nextPageReg:"Custom RegExp of next page",
-                retainImage:"Keep the URL of image if there are images in the text"
+                retainImage:"Keep the URL of image if there are images in the text",
+                minTxtLength:"Try to crawl again when the length of content is less than this"
             };
             break;
     }
@@ -397,6 +400,7 @@ if (window.top != window.self) {
             aEles=aEles.reverse();
         }
         rCats=[];
+        var minTxtLength=GM_getValue("minTxtLength");
         var customTitle=GM_getValue("customTitle");
         var disableNextPage=!!GM_getValue("disableNextPage");
         var customNextPageReg=GM_getValue("nextPageReg");
@@ -413,6 +417,7 @@ if (window.top != window.self) {
             if(downNum>=aEles.length)return;
             let curIndex=downIndex;
             let aTag=aEles[curIndex];
+            let validTimes=0;
             let request=(aTag, curIndex)=>{
                 let tryTimes=0;
                 let requestBody={
@@ -476,7 +481,12 @@ if (window.top != window.self) {
                                 console.warn(e);
                             }
                         }
-                        processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:""));
+                        let validData = processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:""), validTimes < 3);
+                        if (!validData && validTimes++ < 3) {
+                            downIndex--;
+                            downNum--;
+                            return GM_xmlhttpRequest(requestBody);
+                        }
                         if (wait) {
                             setTimeout(() => {
                                 downOnce(wait);
@@ -566,7 +576,7 @@ if (window.top != window.self) {
             rCats = rCats.filter(function(e){return e!=null});
         }
         var waitForComplete;
-        function processDoc(i, aTag, doc, cause){
+        function processDoc(i, aTag, doc, cause, check){
             let cbFunc=content=>{
                 rCats[i]=(aTag.innerText.replace(/[\r\n\t]/g, "") + "\r\n" + (cause || '') + content.replace(/\s*$/, ""));
                 curRequests = curRequests.filter(function(e){return e[0]!=i});
@@ -587,8 +597,12 @@ if (window.top != window.self) {
                 cbFunc(content);
             }, aTag.href);
             if(contentResult!==false){
+                if(check && contentResult.length{
+                processFunc=(data, cb, url)=>{
                     let doc=data;
                     if(urlsArr[3].indexOf("return ")==-1){
                         if(urlsArr[3].indexOf("@")==0){
@@ -999,7 +1013,7 @@ if (window.top != window.self) {
                             return content;
                         }else return eval(urlsArr[3]);
                     }else{
-                        return Function("data", "doc", "cb",urlsArr[3])(data, doc, cb);
+                        return Function("data", "doc", "cb", "url",urlsArr[3])(data, doc, cb, url);
                     }
                 };
             }else{
@@ -1129,6 +1143,7 @@ if (window.top != window.self) {
         let downThreadNum = createOption(i18n.downThreadNum, GM_getValue("downThreadNum") || "20", "number");
         let customTitle = createOption(i18n.customTitle, GM_getValue("customTitle") || "");
         customTitle.setAttribute("placeHolder", "title");
+        let minTxtLength = createOption(i18n.minTxtLength, GM_getValue("minTxtLength") || "100", "number");
         let contentSortUrlValue = GM_getValue("contentSortUrl") || false;
         let contentSortValue = GM_getValue("contentSort") || false;
         let reSortDefault = createOption(i18n.reSortDefault, !contentSortUrlValue && !contentSortValue, "radio");
@@ -1156,6 +1171,7 @@ if (window.top != window.self) {
         saveBtn.onclick = e => {
             GM_setValue("selectors", delSelector.value || "");
             GM_setValue("downThreadNum", downThreadNum.value || 20);
+            GM_setValue("minTxtLength", minTxtLength.value || 100);
             GM_setValue("customTitle", customTitle.value || "");
             if (reSortUrl.checked) {
                 GM_setValue("contentSortUrl", true);

From 66cded229d11cf65a90e9910d5870bc769d6dd68 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 20:17:11 +0800
Subject: [PATCH 150/812] Update pagetual.user.js

---
 Pagetual/pagetual.user.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js
index 1ee5f116359..34cc72227c5 100644
--- a/Pagetual/pagetual.user.js
+++ b/Pagetual/pagetual.user.js
@@ -2200,6 +2200,7 @@
                 "[class^=pag] a[rel=next]",
                 "[class^=Pag] [aria-label=next]",
                 "[aria-label='Next page']",
+                "[aria-label='next page']",
                 ".pagination-nav__item--next>a",
                 "a.pageright",
                 ".page-numbers.current+a",

From 4acab5a2a764633d8907d1ae305ff2c22b87f8be Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 20:41:20 +0800
Subject: [PATCH 151/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index 391e110c4c1..c8cbcca0c07 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -217,7 +217,7 @@ if (window.top != window.self) {
 
 (function() {
     'use strict';
-    var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*言|^序\s*章|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^[第(]?[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i;
+    var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*言|^序\s*章|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i;
     var innerNextPage=/^\s*(下一[页頁张張]|next\s*page|次のページ)/i;
     var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage;
     var i18n={};

From 763d9e683287bb8b4dd5cc1995aecc4b7be23929 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 20:46:49 +0800
Subject: [PATCH 152/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index c8cbcca0c07..8ee676b531f 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -400,7 +400,7 @@ if (window.top != window.self) {
             aEles=aEles.reverse();
         }
         rCats=[];
-        var minTxtLength=GM_getValue("minTxtLength");
+        var minTxtLength=GM_getValue("minTxtLength") || 100;
         var customTitle=GM_getValue("customTitle");
         var disableNextPage=!!GM_getValue("disableNextPage");
         var customNextPageReg=GM_getValue("nextPageReg");

From 4700ec0287915655325ace6c6a0e6661070de1ae Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 21:02:05 +0800
Subject: [PATCH 153/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index 8ee676b531f..82ea62e641b 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -481,11 +481,14 @@ if (window.top != window.self) {
                                 console.warn(e);
                             }
                         }
-                        let validData = processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:""), validTimes < 3);
-                        if (!validData && validTimes++ < 3) {
+                        let validData = processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:""), validTimes < 5);
+                        if (!validData && validTimes++ < 5) {
                             downIndex--;
                             downNum--;
-                            return GM_xmlhttpRequest(requestBody);
+                            setTimeout(() => {
+                                GM_xmlhttpRequest(requestBody);
+                            }, 500);
+                            return;
                         }
                         if (wait) {
                             setTimeout(() => {
@@ -597,7 +600,7 @@ if (window.top != window.self) {
                 cbFunc(content);
             }, aTag.href);
             if(contentResult!==false){
-                if(check && contentResult.length
Date: Tue, 24 Oct 2023 21:07:10 +0800
Subject: [PATCH 154/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index 82ea62e641b..a2bd3fa0e1b 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -498,8 +498,11 @@ if (window.top != window.self) {
                     },
                     onerror: function(e) {
                         console.warn("error:", e);
-                        if(++tryTimes<3){
-                            return GM_xmlhttpRequest(requestBody);
+                        if(tryTimes++ < 5){
+                            setTimeout(() => {
+                                GM_xmlhttpRequest(requestBody);
+                            }, 500);
+                            return;
                         }
                         downIndex++;
                         downNum++;
@@ -513,8 +516,11 @@ if (window.top != window.self) {
                     ontimeout: function(e) {
                         console.warn("timeout: times="+tryTimes+" url="+aTag.href);
                         //console.log(e);
-                        if(++tryTimes<3){
-                            return GM_xmlhttpRequest(requestBody);
+                        if(tryTimes++ < 5){
+                            setTimeout(() => {
+                                GM_xmlhttpRequest(requestBody);
+                            }, 500);
+                            return;
                         }
                         downIndex++;
                         downNum++;

From 488a66f4ce5d57f58cc6c384a28318fec7584c8e Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 21:09:23 +0800
Subject: [PATCH 155/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index a2bd3fa0e1b..ac1cccbfb11 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -417,9 +417,9 @@ if (window.top != window.self) {
             if(downNum>=aEles.length)return;
             let curIndex=downIndex;
             let aTag=aEles[curIndex];
-            let validTimes=0;
             let request=(aTag, curIndex)=>{
                 let tryTimes=0;
+                let validTimes=0;
                 let requestBody={
                     method: 'GET',
                     url: aTag.href,

From f999799c886711e473f17a8f4524f3e89165c306 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Tue, 24 Oct 2023 21:18:24 +0800
Subject: [PATCH 156/812] Update DownloadAllContent.user.js

---
 DownloadAllContent/DownloadAllContent.user.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js
index ac1cccbfb11..091c51ea7a0 100644
--- a/DownloadAllContent/DownloadAllContent.user.js
+++ b/DownloadAllContent/DownloadAllContent.user.js
@@ -606,7 +606,7 @@ if (window.top != window.self) {
                 cbFunc(content);
             }, aTag.href);
             if(contentResult!==false){
-                if(check && contentResult && contentResult.trim().length
Date: Wed, 25 Oct 2023 08:49:26 +0800
Subject: [PATCH 157/812] Update Picviewer CE+.user.js

---
 Picviewer CE+/Picviewer CE+.user.js | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js
index 4c7b32e82ed..b6812eacfef 100644
--- a/Picviewer CE+/Picviewer CE+.user.js	
+++ b/Picviewer CE+/Picviewer CE+.user.js	
@@ -10,7 +10,7 @@
 // @description:zh-TW    線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存
 // @description:pt-BR    Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
 // @description:ru       Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
-// @version              2023.10.24.3
+// @version              2023.10.25.1
 // @icon                 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
 // @namespace            https://github.com/hoothin/UserScripts
 // @homepage             https://www.hoothin.com
@@ -21751,7 +21751,7 @@ ImgOps | https://imgops.com/#b#`;
 
 
                 var scrolled=getScrolled();
-                targetPosi.top -= bodyPosi.top + scrolled.y;
+                targetPosi.top -= bodyPosi.top + scrolled.y - (parseInt(unsafeWindow.getComputedStyle(document.documentElement).marginTop) || 0);
                 targetPosi.left -= bodyPosi.left + scrolled.x;
 
                 var fbs = this.floatBar.style;
@@ -24010,7 +24010,8 @@ ImgOps | https://imgops.com/#b#`;
                                     node: "img",
                                     attr: {
                                         src: "https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg",
-                                        style: "width: 100%; margin-top: 5px"
+                                        style: "width: 100%; margin-top: 5px; max-height: 180px; display: none;",
+                                        onload: "this.style.display=''"
                                     }
                                 },
                                 {
@@ -24023,7 +24024,8 @@ ImgOps | https://imgops.com/#b#`;
                                             node: "img",
                                             attr: {
                                                 src: "https://ko-fi.com/favicon-32x32.png",
-                                                style: "margin-right: 5px; height: 25px;"
+                                                style: "margin-right: 5px; height: 25px; display: none;",
+                                                onload: "this.style.display=''"
                                             }
                                         },
                                         {
@@ -24038,7 +24040,8 @@ ImgOps | https://imgops.com/#b#`;
                                             node: "img",
                                             attr: {
                                                 src: "https://static.afdiancdn.com/favicon.ico",
-                                                style: "margin-right: 5px; height: 20px;"
+                                                style: "margin-right: 5px; height: 20px; display: none;",
+                                                onload: "this.style.display=''"
                                             }
                                         },
                                         {

From 187a8474c9ca3b8682c35631fd0473002c6397f9 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Wed, 25 Oct 2023 08:58:36 +0800
Subject: [PATCH 158/812] Update pagetual.user.js

---
 Pagetual/pagetual.user.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js
index 34cc72227c5..561cd714248 100644
--- a/Pagetual/pagetual.user.js
+++ b/Pagetual/pagetual.user.js
@@ -10,7 +10,7 @@
 // @name:fr      Pagetual
 // @name:it      Pagetual
 // @namespace    hoothin
-// @version      1.9.36.73
+// @version      1.9.36.74
 // @description  Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule.
 // @description:zh-CN  终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页
 // @description:zh-TW  終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁
@@ -1778,6 +1778,10 @@
                     let articleNum = 0;
                     for (i = 0; i < ele.children.length; i++) {
                         let curNode = ele.children[i];
+                        if (/^H\d$/i.test(curNode.nodeName)) {
+                            curMaxEle = null;
+                            break;
+                        }
                         if (/^(CANVAS|NAV)$/i.test(curNode.nodeName)) continue;
                         let curStyle = curWin.getComputedStyle(curNode);
                         if (!curNode.offsetParent && (curStyle.position != "fixed" || curStyle.opacity == 0)) {

From 993d159fcf8ddce33473a8d6d4e9c20f3289ec38 Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Wed, 25 Oct 2023 08:58:40 +0800
Subject: [PATCH 159/812] Update README.md

---
 Pagetual/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Pagetual/README.md b/Pagetual/README.md
index 02848afb9bc..286f6a91182 100644
--- a/Pagetual/README.md
+++ b/Pagetual/README.md
@@ -1,4 +1,4 @@
-[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.73](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version")
+[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.74](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version")
 ==
 *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual")
 

From c1782db4ee49446ab37fd22f90d8c9d7d2317ef4 Mon Sep 17 00:00:00 2001
From: hoothin-update 
Date: Wed, 25 Oct 2023 01:49:27 +0000
Subject: [PATCH 160/812] Update items_all.json from
 http://wedata.net/databases/AutoPagerize/items_all.json

---
 Pagetual/items_all.json | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json
index 65a500d1ef5..15fa54de3fe 100644
--- a/Pagetual/items_all.json
+++ b/Pagetual/items_all.json
@@ -21410,17 +21410,17 @@
 },
 {
   "resource_url": "http://wedata.net/items/77246",
-  "name": "Vivaldi.net Forum",
-  "created_by": "Wolfram",
-  "database_resource_url": "http://wedata.net/databases/AutoPagerize",
-  "updated_at": "2017-08-20T14:09:41+09:00",
   "data": {
-    "exampleUrl": "https://forum.vivaldi.net/category/82/team-blog\r\nhttps://forum.vivaldi.net/topic/20015/vivaldi-1-11-focus-on-accessibility",
-    "url": "^https://forum\\.vivaldi\\.net/",
     "pageElement": "//ul[@class='topic-list' or @class='posts']/li",
-    "nextLink": "//a[i/@class='fa fa-chevron-right']"
+    "nextLink": "//li[not(contains(@class, 'disabled'))]/a[i/@class='fa fa-chevron-right']",
+    "url": "^https://forum\\.vivaldi\\.net/",
+    "exampleUrl": "https://forum.vivaldi.net/category/82/team-blog\r\nhttps://forum.vivaldi.net/topic/20015/vivaldi-1-11-focus-on-accessibility"
   },
-  "created_at": "2015-05-22T00:07:46+09:00"
+  "database_resource_url": "http://wedata.net/databases/AutoPagerize",
+  "created_by": "Wolfram",
+  "name": "Vivaldi.net Forum",
+  "created_at": "2015-05-22T00:07:46+09:00",
+  "updated_at": "2023-10-24T19:21:10+09:00"
 },
 {
   "resource_url": "http://wedata.net/items/77245",
@@ -53288,17 +53288,17 @@
 },
 {
   "resource_url": "http://wedata.net/items/510",
-  "name": "CodeZine、EnterpriseZine、MarkeZine、MONEYzine(記事一覧、個別記事)",
   "data": {
-    "url": "^https?://(?:c(?:areer|ode)|enterprise|m(?:arke|oney))zine\\.jp/(?:a(?:rticle|uthor)/|\\w+online/|iti/)",
-    "pageElement": "//ul[@class='catList' or @class='catTopList result cf']/li|//div[@class='article']",
-    "exampleUrl": "http://codezine.jp/article/tag/169\r\nhttp://enterprisezine.jp/article/corner/120\r\nhttp://enterprisezine.jp/article/detail/2221\r\nhttp://markezine.jp/article/\r\nhttp://enterprisezine.jp/article/detail/1991\r\nhttp://codezine.jp/article/corner/210\r\nhttp://codezine.jp/article/detail/2979\r\nhttp://enterprisezine.jp/author/133\r\nhttp://enterprisezine.jp/dbonline/detail/6123\r\nhttp://enterprisezine.jp/iti/detail/5752\r\n",
-    "nextLink": "//a[@rel='next' or ../@class='nextBtn']"
+    "pageElement": "//ul[@class='c-articleindex_list']/ancestor-or-self::*[position()=1 or @class='c-primarysection -level2'][last()]|id('c-article_content')",
+    "nextLink": "//a[@rel='next']|//div[@class='c-pager_next']/a[not(//div[@class='c-article_wall'])]",
+    "url": "^https?://(?:code|enterprise|marke|ec|biz|hr|edtech|product)zine\\.jp/",
+    "exampleUrl": "https://codezine.jp/article/tag/169\r\nhttps://enterprisezine.jp/article/corner/120\r\nhttps://enterprisezine.jp/article/detail/2221\r\nhttps://markezine.jp/article/\r\nhttps://enterprisezine.jp/article/detail/1991\r\nhttps://codezine.jp/article/corner/210\r\nhttps://enterprisezine.jp/author/133\r\nhttps://eczine.jp/article/detail/13259\r\nhttps://bizzine.jp/article/detail/9498\r\nhttps://hrzine.jp/article/detail/5133\r\nhttps://edtechzine.jp/article/detail/9930\r\nhttps://productzine.jp/article/detail/2005"
   },
   "database_resource_url": "http://wedata.net/databases/AutoPagerize",
   "created_by": "swdyh",
+  "name": "CodeZine、EnterpriseZine、MarkeZine、他(記事一覧、個別記事)",
   "created_at": "2008-04-16T12:35:45+09:00",
-  "updated_at": "2020-03-26T04:55:15+09:00"
+  "updated_at": "2023-10-24T20:34:11+09:00"
 },
 {
   "resource_url": "http://wedata.net/items/503",

From f796cd754f4e1bc667a5353c0bfba0237e484b7a Mon Sep 17 00:00:00 2001
From: hoothin 
Date: Wed, 25 Oct 2023 13:10:03 +0800
Subject: [PATCH 161/812] Update pagetual.user.js

---
 Pagetual/pagetual.user.js | 103 ++++++++++++++++++++++++++++++--------
 1 file changed, 83 insertions(+), 20 deletions(-)

diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js
index 561cd714248..9f0775ac347 100644
--- a/Pagetual/pagetual.user.js
+++ b/Pagetual/pagetual.user.js
@@ -6129,6 +6129,34 @@
            margin-top: -${rulesData.opacity == 1 ? 31 : 30}px!important;
            pointer-events: all;
          }
+         .pagetual_pageBar span.refreshRing {
+           position: absolute;
+           top: 0;
+           opacity: 0;
+           height: 30px;
+           margin-left: calc(50% - 23px);
+           display: block!important;
+         }
+         .pagetual_pageBar a:hover>span.refreshRing {
+           opacity: 0.3;
+           -webkit-animation: pagetual_ring 2.0s infinite linear;
+           animation: pagetual_ring 2.0s infinite linear;
+         }
+         @-webkit-keyframes pagetual_ring {
+           0% { -webkit-transform: rotate(0deg) }
+           100% {
+             -webkit-transform: rotate(360deg);
+           }
+         }
+         @keyframes pagetual_ring {
+           0% {
+             transform: rotate(0deg);
+             -webkit-transform: rotate(0deg);
+           } 100% {
+             transform: rotate(360deg);
+             -webkit-transform: rotate(360deg);
+           }
+         }
          .pagetual_pageBar a:hover>span.nextScreen {
            margin-top: 30px!important;
            pointer-events: all;
@@ -6249,7 +6277,7 @@
     var loadingDiv = document.createElement("div");
     loadingDiv.style.cssText = "text-indent: initial;cy: initial;d: initial;dominant-baseline: initial;empty-cells: initial;fill: initial;fill-opacity: initial;fill-rule: initial;filter: initial;flex: initial;flex-flow: initial;float: initial;flood-color: initial;flood-opacity: initial;grid: initial;grid-area: initial;height: initial;hyphens: initial;image-orientation: initial;image-rendering: initial;inline-size: initial;inset-block: initial;inset-inline: initial;isolation: initial;letter-spacing: initial;lighting-color: initial;line-break: initial;list-style: initial;margin-block: initial;margin: 0px auto;margin-inline: initial;marker: initial;mask: initial;mask-type: initial;max-block-size: initial;max-height: initial;max-inline-size: initial;max-width: initial;min-block-size: initial;min-height: initial;min-inline-size: initial;min-width: initial;mix-blend-mode: initial;object-fit: initial;object-position: initial;offset: initial;opacity: initial;order: initial;origin-trial-test-property: initial;orphans: initial;outline: initial;outline-offset: initial;overflow-anchor: initial;overflow-clip-margin: initial;overflow-wrap: initial;overflow: initial;overscroll-behavior-block: initial;overscroll-behavior-inline: initial;overscroll-behavior: initial;padding-block: initial;padding: initial;padding-inline: initial;page: initial;page-orientation: initial;paint-order: initial;perspective: initial;perspective-origin: initial;pointer-events: initial;position: initial;quotes: initial;r: initial;resize: initial;ruby-position: initial;rx: initial;ry: initial;scroll-behavior: initial;scroll-margin-block: initial;scroll-margin: initial;scroll-margin-inline: initial;scroll-padding-block: initial;scroll-padding: initial;scroll-padding-inline: initial;scroll-snap-align: initial;scroll-snap-stop: initial;scroll-snap-type: initial;scrollbar-gutter: initial;shape-image-threshold: initial;shape-margin: initial;shape-outside: initial;shape-rendering: initial;size: initial;speak: initial;stop-color: initial;stop-opacity: initial;stroke: initial;stroke-dasharray: initial;stroke-dashoffset: initial;stroke-linecap: initial;stroke-linejoin: initial;stroke-miterlimit: initial;stroke-opacity: initial;stroke-width: initial;tab-size: initial;table-layout: initial;text-align: initial;text-align-last: initial;text-anchor: initial;text-combine-upright: initial;text-decoration: initial;text-decoration-skip-ink: initial;text-indent: initial;text-overflow: initial;text-shadow: initial;text-size-adjust: initial;text-transform: initial;text-underline-offset: initial;text-underline-position: initial;touch-action: initial;transform: initial;transform-box: initial;transform-origin: initial;transform-style: initial;transition: initial;user-select: initial;vector-effect: initial;vertical-align: initial;visibility: initial;border-spacing: initial;-webkit-border-image: initial;-webkit-box-align: initial;-webkit-box-decoration-break: initial;-webkit-box-direction: initial;-webkit-box-flex: initial;-webkit-box-ordinal-group: initial;-webkit-box-orient: initial;-webkit-box-pack: initial;-webkit-box-reflect: initial;-webkit-highlight: initial;-webkit-hyphenate-character: initial;-webkit-line-break: initial;-webkit-line-clamp: initial;-webkit-mask-box-image: initial;-webkit-mask: initial;-webkit-mask-composite: initial;-webkit-perspective-origin-x: initial;-webkit-perspective-origin-y: initial;-webkit-print-color-adjust: initial;-webkit-rtl-ordering: initial;-webkit-ruby-position: initial;-webkit-tap-highlight-color: initial;-webkit-text-combine: initial;-webkit-text-decorations-in-effect: initial;-webkit-text-emphasis: initial;-webkit-text-emphasis-position: initial;-webkit-text-fill-color: initial;-webkit-text-security: initial;-webkit-text-stroke: initial;-webkit-transform-origin-x: initial;-webkit-transform-origin-y: initial;-webkit-transform-origin-z: initial;-webkit-user-drag: initial;-webkit-user-modify: initial;white-space: initial;widows: initial;width: initial;will-change: initial;word-break: initial;word-spacing: initial;x: initial;y: initial;z-index: 2147483647;";
 
-    const loadingCSS = `text-indent: unset; display: block; position: initial; margin: auto auto 5px auto; shape-rendering: auto; vertical-align: middle; visibility: visible; width: initial; height: initial; text-align: center; color: #6e6e6e; flex: 0;`;
+    const loadingCSS = `font-size: initial; text-indent: unset; display: block; position: initial; margin: auto auto 5px auto; shape-rendering: auto; vertical-align: middle; visibility: visible; width: initial; height: initial; text-align: center; color: #6e6e6e; flex: 0;`;
     function setLoadingDiv(loadingText) {
         loadingDiv.innerHTML = createHTML(`

${loadingText}

${rulesData.hideLoadingIcon ? "" : `
`}`); } @@ -6830,14 +6858,6 @@ if (openInNewTab == 1) pageText.target = "_blank"; pageBar.appendChild(upSpan); pageBar.appendChild(pageText); - if (rulesData.pageBarMenu) { - pageText.addEventListener("click", e => { - e.stopPropagation(); - if (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) return; - e.preventDefault(); - picker.start(); - }); - } let touched = false; let touchBodyHandler = e => { touched = false; @@ -6924,6 +6944,33 @@ pageText.insertBefore(preBtn, pageText.firstChild); pageText.insertBefore(nextBtn, pageText.firstChild); } + if (curForceIframe) { + let bgRing = document.createElement("span"); + bgRing.className = "refreshRing"; + bgRing.style.display = "none"; + bgRing.innerHTML = createHTML(upSvg); + pageText.title = "Refresh"; + pageText.appendChild(bgRing); + pageText.addEventListener("click", e => { + e.stopPropagation(); + if (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) return; + e.preventDefault(); + let nextEle = pageBar && pageBar.nextElementSibling; + if (nextEle && nextEle.name == 'pagetual-iframe') { + if (curForceIframe == nextEle) { + nextEle.setAttribute("loaded", "refresh"); + } + nextEle.src = nextEle.src; + } + }); + } else if (rulesData.pageBarMenu) { + pageText.addEventListener("click", e => { + e.stopPropagation(); + if (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) return; + e.preventDefault(); + picker.start(); + }); + } pageBar.appendChild(downSpan); if (forceState == 2) { pageBar.style.width = "99%"; @@ -7239,6 +7286,8 @@ } else if (eles && eles.length > 0) { callback(doc, eles); } else if (tryTimes++ < 100) { + getBody(doc).scrollTop = 9999999; + doc.documentElement.scrollTop = 9999999; setTimeout(() => { checkIframe(); }, waitTime); @@ -7370,6 +7419,8 @@ if (!nextLink || !nextLink.offsetParent) nextLink = await ruleParser.getNextLink(iframeDoc, true); if (nextLink) pageEle = ruleParser.getPageElement(iframeDoc, emuIframe.contentWindow, true); if (!pageEle || pageEle.length == 0 || !nextLink) { + getBody(iframeDoc).scrollTop = 9999999; + iframeDoc.documentElement.scrollTop = 9999999; if (waitTimes-- > 0) { setTimeout(() => { checkPage(); @@ -7640,8 +7691,11 @@ } } } - getBody(document).scrollTop = curScroll; - document.documentElement.scrollTop = curScroll; + let newScroll = getBody(document).scrollTop || document.documentElement.scrollTop; + if (newScroll != curScroll) { + getBody(document).scrollTop = curScroll; + document.documentElement.scrollTop = curScroll; + } } function scrollToResize(e) { @@ -7678,9 +7732,10 @@ } } + var curForceIframe; function forceIframe(url, callback) { url = url.indexOf('=') == -1 ? url.replace(/#[^#]*/,"") : url; - let curIframe = document.createElement('iframe'), iframeDoc, pageElement = null, isloaded = false, inAction = true; + let curIframe = document.createElement('iframe'), iframeDoc, pageElement = null, inAction = true; let loadedHandler = () => { let getPageEle = () => { if (ruleParser.curSiteRule.singleUrl) { @@ -7693,8 +7748,11 @@ } }; resizeIframe(curIframe, iframeDoc, getPageEle()); - if (isloaded) return; - isloaded = true; + let loaded = curIframe.getAttribute("loaded"); + if (loaded == "true") { + return; + } + curIframe.setAttribute("loaded", "true"); let getIframe = () => { return curIframe; }; @@ -7702,15 +7760,17 @@ return iframeDoc; }; ruleParser.insertPage(iframeDoc, [], url, ele => { - callback(curIframe); + callback(curIframe, loaded == "refresh"); inAction = false; }, true); - resizePool.push([getPageEle, getIframe, getFrameDoc]); + if (!loaded) { + resizePool.push([getPageEle, getIframe, getFrameDoc]); + } }; let checkIframeTimer = setInterval(() => { if (!curIframe.parentNode) { clearInterval(checkIframeTimer); - return isloaded || callback(false); + return curIframe.getAttribute("loaded") == "true" || callback(false); } }, 500); let code = ruleParser.curSiteRule.iframeInit; @@ -7803,6 +7863,7 @@ }; document.addEventListener("scroll", forceRefresh); curIframe.src = url; + curForceIframe = curIframe; let insert = ruleParser.getInsert(); let body = getBody(document); let curScroll = body.scrollTop || document.documentElement.scrollTop; @@ -7932,13 +7993,15 @@ debug(e); } } else if ((forceState == 2 || ruleParser.curSiteRule.action == 2) && !isJs) { - forceIframe(nextLink, (iframe) => { + forceIframe(nextLink, (iframe, refresh) => { if (urlChanged || isPause) { loadPageOver(); return; } - let pageBar = createPageBar(nextLink); - if (pageBar && iframe && iframe.parentNode) iframe.parentNode.insertBefore(pageBar, iframe); + if (!refresh) { + let pageBar = createPageBar(nextLink); + if (pageBar && iframe && iframe.parentNode) iframe.parentNode.insertBefore(pageBar, iframe); + } loadPageOver(); checkAutoLoadNum(); }); From bc8fe4ee87269cf8e1b1153cf778d2681cf34c07 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 25 Oct 2023 13:18:15 +0800 Subject: [PATCH 162/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 9f0775ac347..bffc750d6e2 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1339,6 +1339,7 @@ let urlReg = new RegExp(this.possibleRule.url, "i"); if (urlReg.test(href) && this.ruleMatch(this.possibleRule)) { this.curSiteRule = this.possibleRule; + debug(this.curSiteRule, 'Match rule'); return callback(); } } From 4c05ebec5de7092fdacd3a52096fb89ed993b3ab Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 25 Oct 2023 17:30:04 +0800 Subject: [PATCH 163/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index bffc750d6e2..788c4b1de7e 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6309,7 +6309,7 @@ }); if (!isPause) ruleParser.showAddedElements(); manualPause = isPause; - storage.setItem("pauseState_" + location.host, isPause ? true : ""); + if (sideController.inited || !isPause) storage.setItem("pauseState_" + location.host, isPause ? true : ""); }, 350); } From 561acd6b662dcc2178a9ea1f813406044a1b0ce3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 12:05:01 +0800 Subject: [PATCH 164/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 562 ++++++++++++++++-- 1 file changed, 514 insertions(+), 48 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 091c51ea7a0..b099cff665d 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.4.4 +// @version 2.7.5.1 // @description Fetch and download main content on current page, provide special support for novel // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -19,6 +19,7 @@ // @grant GM_getValue // @grant GM_openInTab // @grant GM_setClipboard +// @grant GM_addStyle // @grant unsafeWindow // @license MIT License // @compatible chrome @@ -252,7 +253,17 @@ if (window.top != window.self) { nextPage:"嗅探章节内分页", nextPageReg:"自定义分页正则", retainImage:"保留正文中图片的网址", - minTxtLength:"当检测到的正文字数小于此数,则尝试重新抓取" + minTxtLength:"当检测到的正文字数小于此数,则尝试重新抓取", + showFilterList:"下载前显示章节筛选排序窗口", + ok:"确定", + close:"关闭", + dacSortByPos:"按页内位置排序", + dacSortByUrl:"按网址排序", + dacSortByName:"按章节名排序", + dacUseIframe:"使用 iframe 后台加载内容(慢速)", + dacSetCustomRule:"修改规则", + dacAddUrl:"添加章节", + dacStartDownload:"下载选中" }; break; case "zh-TW": @@ -282,7 +293,17 @@ if (window.top != window.self) { nextPage:"嗅探章節內分頁", nextPageReg:"自訂分頁正規", retainImage:"保留內文圖片的網址", - minTxtLength:"當偵測到的正文字數小於此數,則嘗試重新抓取" + minTxtLength:"當偵測到的正文字數小於此數,則嘗試重新抓取", + showFilterList:"下載前顯示章節篩選排序視窗", + ok:"確定", + close:"關閉", + dacSortByPos:"依頁內位置排序", + dacSortByUrl:"依網址排序", + dacSortByName:"依章節名排序", + dacUseIframe:"使用 iframe 背景載入內容(慢速)", + dacSetCustomRule:"修改規則", + dacAddUrl:"新增章節", + dacStartDownload:"下載選取" }; break; default: @@ -311,21 +332,350 @@ if (window.top != window.self) { nextPage:"Check next page in chapter", nextPageReg:"Custom RegExp of next page", retainImage:"Keep the URL of image if there are images in the text", - minTxtLength:"Try to crawl again when the length of content is less than this" + minTxtLength:"Try to crawl again when the length of content is less than this", + showFilterList: "Show chapter filtering and sorting window before downloading", + ok:"OK", + close:"Close", + dacSortByPos:"Sort by position", + dacSortByUrl:"Sort by URL", + dacSortByName:"Sort by name", + dacUseIframe: "Use iframe to load content in the background (slow)", + dacSetCustomRule:"Modify rules", + dacAddUrl:"Add Chapter", + dacStartDownload:"Download selected" }; break; } - var firefox=navigator.userAgent.toLowerCase().indexOf('firefox')!=-1,curRequests=[]; - var rocketContent,txtDownContent,txtDownWords,txtDownQuit,txtDownDivInited=false; + var firefox=navigator.userAgent.toLowerCase().indexOf('firefox')!=-1,curRequests=[],useIframe=false,iframeSandbox=false,iframeInit=false; + var filterListContainer,txtDownContent,txtDownWords,txtDownQuit,dacLinksCon,dacUseIframe; + + const escapeHTMLPolicy = (win.trustedTypes && win.trustedTypes.createPolicy) ? win.trustedTypes.createPolicy('dac_default', { + createHTML: (string, sink) => string + }) : null; + + function createHTML(html) { + return escapeHTMLPolicy ? escapeHTMLPolicy.createHTML(html) : html; + } + + function str2Num(str) { + str = str.replace(/[一①Ⅰ壹]/g, "1").replace(/[二②Ⅱ贰]/g, "2").replace(/[三③Ⅲ叁]/g, "3").replace(/[四④Ⅳ肆]/g, "4").replace(/[五⑤Ⅴ伍]/g, "5").replace(/[六⑥Ⅵ陆]/g, "6").replace(/[七⑦Ⅶ柒]/g, "7").replace(/[八⑧Ⅷ捌]/g, "8").replace(/[九⑨Ⅸ玖]/g, "9").replace(/[十⑩Ⅹ拾]/g, "*10+").replace(/[百佰]/g, "*100+").replace(/[千仟]/g, "*1000+").replace(/[万萬]/g, "*10000+").replace(/\s/g, "").match(/[\d\*\+]+/); + if (!str) return 0; + str = str[0]; + let mul = str.match(/(\d*)\*(\d+)/); + while(mul) { + let result = parseInt(mul[1] || 1) * parseInt(mul[2]); + str = str.replace(mul[0], result); + mul = str.match(/(\d+)\*(\d+)/); + } + let plus = str.match(/(\d+)\+(\d+)/); + while(plus) { + let result = parseInt(plus[1]) + parseInt(plus[2]); + str = str.replace(plus[0], result); + plus = str.match(/(\d+)\*(\d+)/); + } + return parseInt(str); + } + + var dragOverItem, dragFrom; + function createLinkItem(aEle) { + let item = document.createElement("div"); + item.innerHTML = createHTML(` + + ${aEle.innerText || "📄"} + 🖱️ + `); + item.title = aEle.innerText; + item.setAttribute("draggable", "true"); + item.addEventListener("dragover", e => { + e.preventDefault(); + }); + item.addEventListener("dragenter", e => { + if (dragOverItem) dragOverItem.style.opacity = ""; + item.style.opacity = 0.3; + dragOverItem = item; + }); + item.addEventListener('dragstart', e => { + dragFrom = item; + }); + item.addEventListener('drop', e => { + if (!dragFrom) return; + if (e.clientX < item.getBoundingClientRect().left + 142) { + dacLinksCon.insertBefore(dragFrom, item); + } else { + if (item.nextElementSibling) { + dacLinksCon.insertBefore(dragFrom, item.nextElementSibling); + } else { + dacLinksCon.appendChild(dragFrom); + } + } + e.preventDefault(); + }); + dacLinksCon.appendChild(item); + } + + function filterList(list) { + if (!GM_getValue("showFilterList")) { + indexDownload(list); + return; + } + if (filterListContainer) { + filterListContainer.style.display = ""; + filterListContainer.classList.remove("customRule"); + dacLinksCon.innerHTML = createHTML(""); + } else { + document.addEventListener('dragend', e => { + if (dragOverItem) dragOverItem.style.opacity = ""; + }, true); + filterListContainer = document.createElement("div"); + filterListContainer.id = "filterListContainer"; + document.body.appendChild(filterListContainer); + filterListContainer.innerHTML = createHTML(` +
+
+
+ ${i18n.custom} + +
+ + +
+
+
+ + + +
+
+

+
+ + + + +
+
`); + let dacSortByPos = filterListContainer.querySelector("#dacSortByPos"); + let dacSortByUrl = filterListContainer.querySelector("#dacSortByUrl"); + let dacSortByName = filterListContainer.querySelector("#dacSortByName"); + let dacSetCustomRule = filterListContainer.querySelector("#dacSetCustomRule"); + let dacCustomInput = filterListContainer.querySelector("#dacCustomInput"); + let dacConfirmRule = filterListContainer.querySelector("#dacConfirmRule"); + let dacCustomClose = filterListContainer.querySelector("#dacCustomClose"); + let dacAddUrl = filterListContainer.querySelector("#dacAddUrl"); + let dacStartDownload = filterListContainer.querySelector("#dacStartDownload"); + let dacLinksClose = filterListContainer.querySelector("#dacLinksClose"); + let dacFilterBg = filterListContainer.querySelector("#dacFilterBg"); + dacUseIframe = filterListContainer.querySelector("#dacUseIframe"); + dacSortByPos.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + if (linkList[0].children[1].href != list[0].href) { + list.reverse().forEach(a => { + for (let i = 0; i < linkList.length; i++) { + let link = linkList[i]; + if (link.children[1].href == a.href) { + dacLinksCon.insertBefore(link, dacLinksCon.children[0]); + } + } + }); + } else { + list.forEach(a => { + for (let i = 0; i < linkList.length; i++) { + let link = linkList[i]; + if (link.children[1].href == a.href) { + dacLinksCon.insertBefore(link, dacLinksCon.children[0]); + } + } + }); + } + }; + dacSortByUrl.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + linkList.sort((a, b) => { + const nameA = a.children[1].href.toUpperCase(); + const nameB = b.children[1].href.toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + }); + if (linkList[0] == dacLinksCon.children[0]) { + linkList = linkList.reverse(); + } + linkList.forEach(link => { + dacLinksCon.appendChild(link); + }); + }; + dacSortByName.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + linkList.sort((a, b) => { + return str2Num(a.innerText) - str2Num(b.innerText); + }); + if (linkList[0] == dacLinksCon.children[0]) { + linkList = linkList.reverse(); + } + linkList.forEach(link => { + dacLinksCon.appendChild(link); + }); + }; + dacSetCustomRule.onclick = e => { + filterListContainer.classList.add("customRule"); + dacCustomInput.value = GM_getValue("DACrules_" + document.domain) || ""; + }; + dacConfirmRule.onclick = e => { + if (dacCustomInput.value) { + customDown(dacCustomInput.value); + } + }; + dacCustomClose.onclick = e => { + filterListContainer.classList.remove("customRule"); + }; + dacAddUrl.onclick = e => { + let addUrls = window.prompt(i18n.customInfo, "https://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html"); + if (!addUrls || !/^http|^ftp/.test(addUrls)) return; + let index = 1; + [].forEach.call(addUrls.split(","), function(i) { + var curEle; + var varNum = /\[\d+\-\d+\]/.exec(i); + if (varNum) { + varNum = varNum[0].trim(); + } else { + curEle = document.createElement("a"); + curEle.href = i; + curEle.innerText = "Added Url"; + createLinkItem(curEle); + return; + } + var num1 = /\[(\d+)/.exec(varNum)[1].trim(); + var num2 = /(\d+)\]/.exec(varNum)[1].trim(); + var num1Int = parseInt(num1); + var num2Int = parseInt(num2); + var numLen = num1.length; + var needAdd = num1.charAt(0) == "0"; + if (num1Int >= num2Int) return; + for (var j = num1Int; j <= num2Int; j++) { + var urlIndex = j.toString(); + if (needAdd) { + while(urlIndex.length < numLen) urlIndex = "0" + urlIndex; + } + var curUrl = i.replace(/\[\d+\-\d+\]/, urlIndex).trim(); + curEle = document.createElement("a"); + curEle.href = curUrl; + curEle.innerText = "Added Url " + index++; + createLinkItem(curEle); + } + }); + }; + dacStartDownload.onclick = e => { + let linkList = [].slice.call(dacLinksCon.querySelectorAll(".dacLink")); + useIframe = !!dacUseIframe.checked; + indexDownload(linkList, true); + filterListContainer.style.display = "none"; + }; + dacLinksClose.onclick = e => { + filterListContainer.style.display = "none"; + }; + dacFilterBg.onclick = e => { + filterListContainer.style.display = "none"; + }; + GM_addStyle(` + #filterListContainer * { + font-size: 13px; + float: initial; + background-image: initial; + } + #filterListContainer.customRule .dacCustomRule { + display: flex; + } + #filterListContainer .dacCustomRule>textarea { + height: 300px; + width: 100%; + border: 1px #DADADA solid; + background: #ededed70; + margin: 5px; + } + #filterListContainer.customRule .dacCustomRule~* { + display: none!important; + } + #dacLinksCon>div { + padding: 5px 0; + display: flex; + } + #dacLinksCon>div>a { + max-width: 245px; + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + } + #dacLinksCon>div>input { + margin-right: 5px; + } + #filterListContainer .dacCustomRule { + border-radius: 8px; + font-weight: bold; + font-size: 16px; + outline: none; + align-items: center; + flex-wrap: nowrap; + white-space: nowrap; + flex-direction: column; + display: none; + } + #filterListContainer input { + border-width: 2px; + border-style: outset; + border-color: buttonface; + border-image: initial; + border: 1px #DADADA solid; + padding: 5px; + border-radius: 8px; + font-weight: bold; + font-size: 9pt; + outline: none; + cursor: pointer; + } + #dacLinksCon>div:nth-of-type(odd) { + background: #ffffff; + } + #dacLinksCon>div:nth-of-type(even) { + background: #f5f5f5; + } + #filterListContainer .fun,#filterListContainer .sort { + display: flex; + justify-content: space-around; + flex-wrap: nowrap; + width: 100%; + } + #filterListContainer input[type=button]:hover { + border: 1px #C6C6C6 solid; + box-shadow: 1px 1px 1px #EAEAEA; + color: #333333; + background: #F7F7F7; + } + #filterListContainer input[type=button]:active { + box-shadow: inset 1px 1px 1px #DFDFDF; + } + `); + dacLinksCon = filterListContainer.querySelector("#dacLinksCon"); + } + list.forEach(a => { + createLinkItem(a); + }); + dacUseIframe.checked = useIframe; + } function initTxtDownDiv(){ - if(txtDownDivInited)return; - txtDownDivInited=true; - rocketContent=document.createElement("div"); - document.body.appendChild(rocketContent); - rocketContent.outerHTML=` -
-
+ if(txtDownContent){ + txtDownContent.style.display=""; + return; + } + txtDownContent=document.createElement("div"); + txtDownContent.id="txtDownContent"; + document.body.appendChild(txtDownContent); + txtDownContent.innerHTML=createHTML(` +
Analysing......
@@ -337,14 +687,11 @@ if (window.top != window.self) {
-
-
`; - txtDownContent=document.querySelector("#txtDownContent"); - txtDownWords=document.querySelector("#txtDownWords"); - txtDownQuit=document.querySelector("#txtDownQuit"); +
`); + txtDownWords=txtDownContent.querySelector("#txtDownWords"); + txtDownQuit=txtDownContent.querySelector("#txtDownQuit"); txtDownQuit.onclick=function(){ txtDownContent.style.display="none"; - txtDownContent.parentNode.removeChild(txtDownContent); }; initTempSave(); } @@ -383,21 +730,31 @@ if (window.top != window.self) { } } - function indexDownload(aEles){ + function indexDownload(aEles, noSort){ if(aEles.length<1)return; initTxtDownDiv(); - if(GM_getValue("contentSort")){ - aEles.sort(function(a,b){ - return parseInt(a.innerText.replace(/[^0-9]/ig,"")) - parseInt(b.innerText.replace(/[^0-9]/ig,"")); - }); - } - if(GM_getValue("contentSortUrl")){ - aEles.sort(function(a,b){ - return parseInt(a.href.replace(/[^0-9]/ig,"")) - parseInt(b.href.replace(/[^0-9]/ig,"")); - }); - } - if(GM_getValue("reverse")){ - aEles=aEles.reverse(); + if(!noSort) { + if(GM_getValue("contentSort")){ + aEles.sort((a, b) => { + return str2Num(a.innerText) - str2Num(b.innerText); + }); + } + if(GM_getValue("contentSortUrl")){ + aEles.sort((a, b) => { + const nameA = a.href.toUpperCase(); + const nameB = b.href.toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + }); + } + if(GM_getValue("reverse")){ + aEles=aEles.reverse(); + } } rCats=[]; var minTxtLength=GM_getValue("minTxtLength") || 100; @@ -532,7 +889,85 @@ if (window.top != window.self) { } else downOnce(); } }; - return [curIndex, GM_xmlhttpRequest(requestBody), aTag.href]; + if (useIframe) { + let iframe = document.createElement('iframe'); + iframe.name = 'pagetual-iframe'; + iframe.width = '100%'; + iframe.height = '1000'; + iframe.frameBorder = '0'; + iframe.sandbox = iframeSandbox || "allow-same-origin allow-scripts allow-popups allow-forms"; + iframe.style.cssText = 'margin:0!important;padding:0!important;visibility:hidden!important;flex:0;opacity:0!important;pointer-events:none!important;position:fixed;top:0px;left:0px;z-index:-2147483647;'; + iframe.addEventListener('load', e => { + if (e.data != 'pagetual-iframe:DOMLoaded' && e.type != 'load') return; + let tryTimes = 0; + function checkIframe() { + try { + let doc = iframe.contentDocument || iframe.contentWindow.document; + doc.body.scrollTop = 9999999; + doc.documentElement.scrollTop = 9999999; + if (validTimes++ > 10) { + iframe.src = iframe.src; + validTimes = 0; + return; + } + if (customTitle) { + try { + let title = doc.querySelector(customTitle); + if (title && title.innerText) { + aTag.innerText = title.innerText; + } + } catch(e) { + console.warn(e); + } + } + downIndex++; + downNum++; + let validData = processDoc(curIndex, aTag, doc, "", true); + if (!validData) { + downIndex--; + downNum--; + setTimeout(() => { + checkIframe(); + }, 500); + return; + } + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); + } catch(e) { + console.debug("Stop as cors"); + } + if (iframe && iframe.parentNode) iframe.parentNode.removeChild(iframe); + } + setTimeout(() => { + checkIframe(); + }, 500); + }, false); + let checkReady = setInterval(() => { + let doc; + try { + doc = iframe.contentDocument || (iframe.contentWindow && iframe.contentWindow.document); + } catch(e) { + clearInterval(checkReady); + return; + } + if (doc) { + try { + Function('win', 'iframe', '"use strict";' + (iframeInit || "win.self=win.top;"))(iframe.contentWindow, iframe); + clearInterval(checkReady); + } catch(e) { + console.debug(e); + } + } + }, 50); + iframe.src = aTag.href; + document.body.appendChild(iframe); + return [curIndex, null, aTag.href]; + } else { + return [curIndex, GM_xmlhttpRequest(requestBody), aTag.href]; + } } if(!aTag){ let waitAtagReadyInterval=setInterval(function(){ @@ -615,6 +1050,9 @@ if (window.top != window.self) { } var downThreadNum = parseInt(GM_getValue("downThreadNum")); downThreadNum = downThreadNum || 20; + if (useIframe && downThreadNum > 5) { + downThreadNum = 5; + } if (downThreadNum > 0) { for (var i = 0; i < downThreadNum; i++) { downOnce(); @@ -712,7 +1150,7 @@ if (window.top != window.self) { [].forEach.call(pageData.querySelectorAll("script,style,link,img,noscript,iframe"),function(item){delList.push(item);}); [].forEach.call(delList,function(item){item.innerHTML="";}); var endEle = ele => { - return /^(I|STRONG|B|FONT|P|DL|DD|H\d)$/.test(ele.nodeName) && ele.children.length == 0; + return /^(I|STRONG|B|FONT|P|DL|DD|H\d)$/.test(ele.nodeName) && ele.children.length <= 1; }; var largestContent,contents=pageData.querySelectorAll("span,div,article,p,td"),largestNum=0; for(i=0;i2 && !forceSingle){ - indexDownload(list); + useIframe = false; + filterList(list); }else{ var blob = new Blob([i18n.info+"\r\n\r\n"+document.title+"\r\n\r\n"+getPageContent(document)], {type: "text/plain;charset=utf-8"}); saveAs(blob, document.title+".txt"); } } - function customDown(){ - processFunc=null; - var customRules=GM_getValue("DACrules_"+document.domain); - var urls=window.prompt(i18n.customInfo,customRules?customRules:"https://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html"); + function customDown(urls){ + processFunc = null; + useIframe = false; if(urls){ urls=decodeURIComponent(urls.replace(/%/g,'%25')); GM_setValue("DACrules_"+document.domain, urls); @@ -883,6 +1321,7 @@ if (window.top != window.self) { }else{ curEle=document.createElement("a"); curEle.href=i; + curEle.innerText="Added Url"; processEles.push(curEle); return; } @@ -901,7 +1340,7 @@ if (window.top != window.self) { var curUrl=i.replace(/\[\d+\-\d+\]/,urlIndex).trim(); curEle=document.createElement("a"); curEle.href=curUrl; - curEle.innerText=processEles.length.toString(); + curEle.innerText="Added Url " + processEles.length.toString(); processEles.push(curEle); } }); @@ -995,11 +1434,30 @@ if (window.top != window.self) { }); } var retainImage=!!GM_getValue("retainImage"); - if(urlsArr[3]){ + var evalCode = urlsArr[3]; + if (evalCode && /^iframe:/.test(evalCode.trim())) { + evalCode = evalCode.trim().replace("iframe:", ""); + useIframe = true; + iframeSandbox = false; + iframeInit = false; + while (/^(sandbox|init):/.test(evalCode)) { + iframeSandbox = evalCode.match(/^sandbox:{(.*?)}/); + if (iframeSandbox) { + iframeSandbox = iframeSandbox[1]; + evalCode = evalCode.replace(/^sandbox:{(.*?)}/, ""); + } + iframeInit = evalCode.match(/^init:{(.*?)}/); + if (iframeInit) { + iframeInit = iframeInit[1]; + evalCode = evalCode.replace(/^init:{(.*?)}/, ""); + } + } + } + if(evalCode){ processFunc=(data, cb, url)=>{ let doc=data; - if(urlsArr[3].indexOf("return ")==-1){ - if(urlsArr[3].indexOf("@")==0){ + if(evalCode.indexOf("return ")==-1){ + if(evalCode.indexOf("@")==0){ let content=""; if(retainImage){ [].forEach.call(data.querySelectorAll("img[src]"), img => { @@ -1008,7 +1466,7 @@ if (window.top != window.self) { img.parentNode.replaceChild(imgTxtNode, img); }); } - [].forEach.call(data.querySelectorAll(urlsArr[3].slice(1)), ele=>{ + [].forEach.call(data.querySelectorAll(evalCode.slice(1)), ele=>{ [].forEach.call(ele.childNodes, child=>{ if(child.innerHTML){ child.innerHTML=child.innerHTML.replace(/\<\s*br\s*\>/gi,"\r\n").replace(/\n+/gi,"\n").replace(/\r+/gi,"\r"); @@ -1020,9 +1478,9 @@ if (window.top != window.self) { content+="\r\n"; }); return content; - }else return eval(urlsArr[3]); + }else return eval(evalCode); }else{ - return Function("data", "doc", "cb", "url",urlsArr[3])(data, doc, cb, url); + return Function("data", "doc", "cb", "url", evalCode)(data, doc, cb, url); } }; }else{ @@ -1030,7 +1488,7 @@ if (window.top != window.self) { processFunc=win.dacProcess; } } - indexDownload(processEles); + filterList(processEles); } } const configPage = "https://hoothin.github.io/UserScripts/DownloadAllContent/"; @@ -1163,6 +1621,7 @@ if (window.top != window.self) { contentSort.name = "sort"; let reverse = createOption(i18n.reverse, !!GM_getValue("reverse"), "checkbox"); let retainImage = createOption(i18n.retainImage, !!GM_getValue("retainImage"), "checkbox"); + let showFilterList = createOption(i18n.showFilterList, !!GM_getValue("showFilterList"), "checkbox"); let disableNextPage = !!GM_getValue("disableNextPage"); let nextPage = createOption(i18n.nextPage, !disableNextPage, "checkbox"); let nextPageReg = createOption(i18n.nextPageReg, GM_getValue("nextPageReg") || ""); @@ -1194,6 +1653,7 @@ if (window.top != window.self) { } GM_setValue("reverse", reverse.checked); GM_setValue("retainImage", retainImage.checked); + GM_setValue("showFilterList", showFilterList.checked); GM_setValue("disableNextPage", !nextPage.checked); GM_setValue("nextPageReg", nextPageReg.value || ""); alert(i18n.saveOk); @@ -1221,7 +1681,13 @@ if (window.top != window.self) { } }); GM_registerMenuCommand(i18n.fetch, fetch); - GM_registerMenuCommand(i18n.custom, customDown); + GM_registerMenuCommand(i18n.custom, () => { + var customRules = GM_getValue("DACrules_" + document.domain); + var urls = window.prompt(i18n.customInfo, customRules ? customRules : "https://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html"); + if (urls) { + customDown(urls); + } + }); GM_registerMenuCommand(i18n.setting, setDel); GM_registerMenuCommand(i18n.searchRule, searchRule); })(); From b9bfebcc0cbc53c36b15bf0f793da150a917aad5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 12:10:40 +0800 Subject: [PATCH 165/812] Update README.md --- DownloadAllContent/README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index bb6159ce79a..6227e6f790f 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -141,8 +141,11 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` 18. [📕豆瓣閲讀](https://read.douban.com/column/64079189/) + ``` css + a.chapter-item + ``` > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: -``` javascript + ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) , r = (new TextDecoder).decode(new Uint8Array([99, 114, 121, 112, 116, 111])) @@ -167,7 +170,7 @@ function decode(t) { return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c]))) }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } -``` + ``` > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 ### 測試網頁 @@ -188,6 +191,8 @@ function decode(t) { 預設是按網頁內出現位置排序。 點擊設置,嘗試更改為“按網址重新排序”或“按章節名重新排序”即可 - 章節標題有誤怎麼辦?
預設是取章節連結文字為標題,可以在設定中自訂章節標題,輸入 title 即為抓取分頁頁面的標題,輸入 h1 即為抓取分頁頁面 h1 等級的文章標題 +- 下載内容不全怎麽辦?
+可能因爲頁内正文是動態加載的,可嘗試在設置頁勾選“下載前打開篩選窗口”,然後選中“使用 iframe 後臺加載内容” - 其他問題歡迎透過 email 聯絡我,有空可幫你解決。 ### 為啥要寫這個腳本? From c3b7b49825f3f836577c49ba5aff6136a2f7190c Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 13:10:49 +0800 Subject: [PATCH 166/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 90 ++++++++++++++--------------- 1 file changed, 42 insertions(+), 48 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index b6812eacfef..5cafb69b969 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.25.1 +// @version 2023.10.26.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16747,26 +16747,39 @@ ImgOps | https://imgops.com/#b#`; }, getAllValidImgs:function(newer){ var validImgs = []; - var imgs = getBody(document).getElementsByTagName('img'), - container = document.querySelector('.pv-gallery-container'), + var container = document.querySelector('.pv-gallery-container'), preloadContainer = document.querySelector('.pv-gallery-preloaded-img-container'); - imgs = Array.prototype.slice.call(imgs); - arrayFn.forEach.call(getBody(document).querySelectorAll("iframe"),function(iframe){ - if (iframe.name == "pagetual-iframe") return; - if (!iframe.src || (iframe.src && (iframe.src == "about:blank" || iframe.src.replace(/\/[^\/]*$/,"").indexOf(location.hostname) != -1))) { - try{ - arrayFn.forEach.call(iframe.contentWindow.document.getElementsByTagName('img'),function(img){ - imgs.push(img); - }); - }catch(e){ - debug(e.toString()); - } - } - }); var bgReg=/.*url\(\s*["']?(.+?)["']?\s*\)([^'"]|$)/i; - var bgImgs=Array.from(getBody(document).querySelectorAll('*')).reduceRight((total, node) => { - if(node.nodeName.toUpperCase() != "IMG" && (!node.className || !node.className.indexOf || node.className.indexOf("pv-")==-1)){ + var imgs=Array.from(getBody(document).querySelectorAll('*')).reduceRight((total, node) => { + if(/^img$/i.test(node.nodeName)){ + total.push(node); + }else if(/^svg$/i.test(node.nodeName)){ + if (node.clientHeight != 0 && (!node.classList || !node.classList.contains("pagetual"))) { + try { + const xml = new XMLSerializer().serializeToString(node); + const ImgBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(xml)))}`; + node.src = ImgBase64; + total.push(node); + } catch(e) { + debug(e); + } + } + }else if(/^canvas$/i.test(node.nodeName)){ + if (node.clientHeight != 0) { + try { + if (!node.src) { + node.src = node.toDataURL("image/png"); + } + total.push(node); + } catch(e) {} + } + if (!node.src && node.dataset.src) { + node.src = node.dataset.src; + delete node.dataset.src; + total.push(node); + } + }else if(!node.className || !node.className.indexOf || node.className.indexOf("pv-")==-1){ let prop = getComputedStyle(node).backgroundImage; if (prop != "none") { let match = bgReg.exec(prop); @@ -16794,38 +16807,19 @@ ImgOps | https://imgops.com/#b#`; } return total; }, []); - if(bgImgs)imgs=imgs.concat(bgImgs.reverse()); - var svgImgs=Array.from(getBody(document).querySelectorAll('svg')).reduceRight((total, svg) => { - if (svg.clientHeight != 0 && (!svg.classList || !svg.classList.contains("pagetual"))) { - try { - const xml = new XMLSerializer().serializeToString(svg); - const ImgBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(xml)))}`; - svg.src = ImgBase64; - total.push(svg); - } catch(e) { - debug(e); + imgs = imgs.reverse(); + arrayFn.forEach.call(getBody(document).querySelectorAll("iframe"),function(iframe){ + if (iframe.name == "pagetual-iframe") return; + if (!iframe.src || (iframe.src && (iframe.src == "about:blank" || iframe.src.replace(/\/[^\/]*$/,"").indexOf(location.hostname) != -1))) { + try{ + arrayFn.forEach.call(iframe.contentWindow.document.getElementsByTagName('img'),function(img){ + imgs.push(img); + }); + }catch(e){ + debug(e.toString()); } } - return total; - }, []); - if(svgImgs)imgs=imgs.concat(svgImgs.reverse()); - var canvasImgs=Array.from(getBody(document).querySelectorAll('canvas')).reduceRight((total, canvas) => { - if (canvas.clientHeight != 0) { - try { - if (!canvas.src) { - canvas.src = canvas.toDataURL("image/png"); - } - total.push(canvas); - } catch(e) {} - } - if (!canvas.src && canvas.dataset.src) { - canvas.src = canvas.dataset.src; - delete canvas.dataset.src; - total.push(canvas); - } - return total; - }, []); - if(canvasImgs)imgs=imgs.concat(canvasImgs.reverse()); + }); // 排除库里面的图片 imgs = imgs.filter(function(img){ if (img.parentNode) { From c875391500078bfab73acc48309b9eb9e0ed611e Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 14:12:10 +0800 Subject: [PATCH 167/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index b099cff665d..4813bbbf2e5 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -569,7 +569,7 @@ if (window.top != window.self) { }); }; dacStartDownload.onclick = e => { - let linkList = [].slice.call(dacLinksCon.querySelectorAll(".dacLink")); + let linkList = [].slice.call(dacLinksCon.querySelectorAll("input:checked+.dacLink")); useIframe = !!dacUseIframe.checked; indexDownload(linkList, true); filterListContainer.style.display = "none"; From b891e24b8e701af114db1d4a263650205f557041 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 15:15:05 +0800 Subject: [PATCH 168/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 4813bbbf2e5..34a127ed649 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.1 +// @version 2.7.5.2 // @description Fetch and download main content on current page, provide special support for novel // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -358,7 +358,7 @@ if (window.top != window.self) { } function str2Num(str) { - str = str.replace(/[一①Ⅰ壹]/g, "1").replace(/[二②Ⅱ贰]/g, "2").replace(/[三③Ⅲ叁]/g, "3").replace(/[四④Ⅳ肆]/g, "4").replace(/[五⑤Ⅴ伍]/g, "5").replace(/[六⑥Ⅵ陆]/g, "6").replace(/[七⑦Ⅶ柒]/g, "7").replace(/[八⑧Ⅷ捌]/g, "8").replace(/[九⑨Ⅸ玖]/g, "9").replace(/[十⑩Ⅹ拾]/g, "*10+").replace(/[百佰]/g, "*100+").replace(/[千仟]/g, "*1000+").replace(/[万萬]/g, "*10000+").replace(/\s/g, "").match(/[\d\*\+]+/); + str = str.replace(/^番\s*外/, "99999+").replace(/[一①Ⅰ壹]/g, "1").replace(/[二②Ⅱ贰]/g, "2").replace(/[三③Ⅲ叁]/g, "3").replace(/[四④Ⅳ肆]/g, "4").replace(/[五⑤Ⅴ伍]/g, "5").replace(/[六⑥Ⅵ陆]/g, "6").replace(/[七⑦Ⅶ柒]/g, "7").replace(/[八⑧Ⅷ捌]/g, "8").replace(/[九⑨Ⅸ玖]/g, "9").replace(/[十⑩Ⅹ拾]/g, "*10+").replace(/[百佰]/g, "*100+").replace(/[千仟]/g, "*1000+").replace(/[万萬]/g, "*10000+").replace(/\s/g, "").match(/[\d\*\+]+/); if (!str) return 0; str = str[0]; let mul = str.match(/(\d*)\*(\d+)/); @@ -371,7 +371,7 @@ if (window.top != window.self) { while(plus) { let result = parseInt(plus[1]) + parseInt(plus[2]); str = str.replace(plus[0], result); - plus = str.match(/(\d+)\*(\d+)/); + plus = str.match(/(\d+)\+(\d+)/); } return parseInt(str); } From b8f4f179e6ac539801e422a576b72a8ebeaaaa07 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 15:27:53 +0800 Subject: [PATCH 169/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 34a127ed649..f9e350ea699 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -890,7 +890,7 @@ if (window.top != window.self) { } }; if (useIframe) { - let iframe = document.createElement('iframe'); + let iframe = document.createElement('iframe'), inited = false; iframe.name = 'pagetual-iframe'; iframe.width = '100%'; iframe.height = '1000'; @@ -899,10 +899,17 @@ if (window.top != window.self) { iframe.style.cssText = 'margin:0!important;padding:0!important;visibility:hidden!important;flex:0;opacity:0!important;pointer-events:none!important;position:fixed;top:0px;left:0px;z-index:-2147483647;'; iframe.addEventListener('load', e => { if (e.data != 'pagetual-iframe:DOMLoaded' && e.type != 'load') return; - let tryTimes = 0; + if (inited) return; + inited = true; function checkIframe() { try { let doc = iframe.contentDocument || iframe.contentWindow.document; + if (!doc || !doc.body) { + setTimeout(() => { + checkIframe(); + }, 1000); + return; + } doc.body.scrollTop = 9999999; doc.documentElement.scrollTop = 9999999; if (validTimes++ > 10) { From 28e7af8e7ede8cb9ac98c2b91a00b8b730c63fff Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 19:40:24 +0800 Subject: [PATCH 170/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 439b867f1de..79069e52fb8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.11 +// @version 1.6.30.12 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4732,8 +4732,7 @@ this.contentContainer.appendChild(this.filterSites); if (this.filterSitesTab.checked) { this.con.classList.remove("in-find"); - if (!this.initShowPicker && searchData.prefConfig.defaultPicker) { - this.initShowPicker = true; + if (searchData.prefConfig.defaultPicker) { this.togglePicker(); } if (this.bar.classList.contains("search-jumper-isInPage")) { @@ -9905,6 +9904,7 @@ } targetElement = e.target; if (targetElement.getAttribute && targetElement.getAttribute("draggable") == "true") return; + if (targetElement.parentNode && targetElement.parentNode.getAttribute && targetElement.parentNode.getAttribute("draggable") == "true") return; showDragSearch(e.clientX, e.clientY); searchBar.waitForHide(1); if (clickHandler) document.removeEventListener('click', clickHandler, true); @@ -10984,7 +10984,7 @@ removeFrame(); searchBar.appendBar(); searchBar.showAllSites(); - }, 800); + }, 1000); }, true); let geneSector = (className, deg, spanTransform) => { let sector = document.createElement("div"); From ff473316888ac7fdfe2b9dc1a8eb7b8999d02688 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 26 Oct 2023 20:31:00 +0800 Subject: [PATCH 171/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 788c4b1de7e..66a221cf05b 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -3965,6 +3965,7 @@ margin-right: 5px; resize: both; box-shadow: 0 1px 5px 1px #ddd; + overflow-wrap: anywhere; } #pagetual-picker textarea:focus { color: black; @@ -3984,6 +3985,13 @@ display: inline-block; position: initial; } + #pagetual-picker [type=checkbox]:after, + #pagetual-picker [type=radio]:after, + #pagetual-picker [type=checkbox]:before, + #pagetual-picker [type=radio]:before { + border: none; + background: none; + } #pagetual-picker label { font-size: 18px; line-height: 25px; From 2cd19f6c49dabbcf4227184d3d053ecbdb34b6cb Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 09:32:07 +0800 Subject: [PATCH 172/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 66a221cf05b..08390b06c64 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.74 +// @version 1.9.36.75 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2334,7 +2334,7 @@ } let aTag = aTags[i]; if (aTag.style.display == "none") continue; - let innerText = (aTag.innerText || aTag.value || aTag.title || ''); + let innerText = (aTag.title || aTag.innerText || aTag.value || ''); if (innerText) { if (innerText == "§") continue; innerText = innerText.trim(); @@ -2387,7 +2387,7 @@ } } if (!next3) { - if (/^(next\s*(»|>>|>|›|→|❯)|>|▶|>|›|→|❯)$/i.test(innerText) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) { + if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(innerText) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) { if (isJs) { if (!nextJs3) nextJs3 = aTag; } else { From 39610be84a5403273bb0779ce3f3fac68dc51d4d Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 09:32:22 +0800 Subject: [PATCH 173/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 286f6a91182..302cef18439 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.74](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.75](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From dbb01e7703941a0cfc5709ac5000b566eb7c02bd Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 27 Oct 2023 01:46:32 +0000 Subject: [PATCH 174/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 15fa54de3fe..f6df42e6b66 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -18483,17 +18483,17 @@ }, { "resource_url": "http://wedata.net/items/77846", - "name": "All About News Dig", - "created_by": "iwakuma2828", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-08-26T11:08:28+09:00", "data": { - "exampleUrl": "https://news.allabout.co.jp/articles/d/73598/", + "pageElement": "id('sys_gtm_url')/*[not(@class='aa-article-content-related-article' or starts-with(@id, 'logly-lift-') or self::script)]", + "nextLink": "//link[@rel=\"next\"]", "url": "^https://news\\.allabout\\.co\\.jp/", - "pageElement": "id('sys_mtx_url')/*", - "nextLink": "//link[@rel=\"next\"]" + "exampleUrl": "https://news.allabout.co.jp/articles/d/73598/\r\nhttps://news.allabout.co.jp/articles/o/69926/" }, - "created_at": "2016-02-05T11:29:30+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "iwakuma2828", + "name": "All About NEWS", + "created_at": "2016-02-05T11:29:30+09:00", + "updated_at": "2023-10-26T21:35:03+09:00" }, { "resource_url": "http://wedata.net/items/77845", @@ -26121,7 +26121,7 @@ { "resource_url": "http://wedata.net/items/74923", "data": { - "pageElement": "//div[contains(@class,'a-archive-grid__story')]|descendant::*[div[contains(@class,'o-card')]][1]|//div[@class='story_list_blk']/*|//li[@class='l-list__item'][article]|id('main')/article[@id]", + "pageElement": "//div[contains(@class,'a-archive-grid__story')]|//section[@class='pmc-u-margin-tb-1']//*[div[contains(@class,'o-card')]][1]|//div[@class='story_list_blk']/*|//li[@class='l-list__item'][article]|id('main')/article[@id]", "nextLink": "descendant::a[contains(@class,'next')][last()]|//div[@class='nav-previous']/a|//div[contains(@class,'more-stories')]/a[contains(@class,'a-icon-right-arrow')]", "url": "^https?://.*(?:bollywoodlife|deadline|footwearnews)\\.com", "exampleUrl": "https://www.deadline.com/ https://deadline.com/vcategory/the-contenders-emmys/page/2/ https://deadline.com/tag/caa/page/2/ https://www.bollywoodlife.com/ https://footwearnews.com/page/2/" @@ -26130,7 +26130,7 @@ "created_by": "Tanookirby", "name": "PMC Brands", "created_at": "2014-06-26T02:58:29+09:00", - "updated_at": "2023-06-10T10:44:45+09:00" + "updated_at": "2023-10-27T05:46:11+09:00" }, { "resource_url": "http://wedata.net/items/74912", From 5339b2bef93f6a6fdabce6bc29a447095e3d9fb1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 10:32:34 +0800 Subject: [PATCH 175/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 08390b06c64..20ef97a6f52 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.75 +// @version 1.9.36.76 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -858,7 +858,7 @@ const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u4e2a\u500b\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; - var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0; + var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8"; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; @@ -2946,11 +2946,11 @@ url: url, method: postParams ? 'POST' : 'GET', data: postParams, - overrideMimeType: 'text/html;charset=' + (document.characterSet || document.charset || document.inputEncoding), + overrideMimeType: 'text/html;charset=' + charset, headers: { 'Referer': location.href, 'User-Agent': navigator.userAgent, - "Content-Type": (postParams ? "application/x-www-form-urlencoded" : "text/html") + ";charset=" + (document.characterSet || document.charset || document.inputEncoding), + "Content-Type": (postParams ? "application/x-www-form-urlencoded" : "text/html") + ";charset=" + charset, }, timeout: 10000, onload: function(res) { @@ -5711,6 +5711,7 @@ let pageReady = false; function initRules(callback) { + charset = (document.characterSet || document.charset || document.inputEncoding); storage.getItem("rulesData", data => { /*0 wedata格式,1 pagetual格式*/ ruleUrls = [{ @@ -5925,7 +5926,7 @@ }); } - function requestDoc(url, callback){ + function requestDoc(url, callback) { let postParams = url.match(/#p{(.*)}$/); if (postParams) { postParams = postParams[1]; @@ -5936,7 +5937,7 @@ 'Referer': location.href, 'User-Agent': navigator.userAgent, 'accept': 'text/html,application/xhtml+xml,application/xml', - "Content-Type": (postParams ? "application/x-www-form-urlencoded" : "text/html") + ";charset=" + (document.characterSet || document.charset || document.inputEncoding), + "Content-Type": (postParams ? "application/x-www-form-urlencoded" : "text/html") + ";charset=" + charset, }; if (ruleHeaders) { if (ruleHeaders.referer) { @@ -5959,7 +5960,7 @@ url: url, method: postParams ? 'POST' : 'GET', data: postParams, - overrideMimeType: 'text/html;charset=' + (document.characterSet || document.charset || document.inputEncoding), + overrideMimeType: 'text/html;charset=' + charset, headers: headers, timeout: 20000, onload: async function(res) { @@ -5984,10 +5985,17 @@ doc.documentElement.innerHTML = response; let base = doc.querySelector("base"); ruleParser.basePath = base ? base.href : url; - } - catch (e) { + } catch (e) { debug('parse error:' + e.toString()); } + let equiv = doc.querySelector('[http-equiv="Content-Type"]'); + if (equiv && equiv.content) { + let innerCharSet = equiv.content.match(/charset\=([^;]+)/); + if (innerCharSet && innerCharSet[1].replace("-", "").toLowerCase() != charset.replace("-", "").toLowerCase()) { + charset = innerCharSet[1]; + return requestDoc(url, callback); + } + } let pageElement = ruleParser.getPageElement(doc); if ((!pageElement || pageElement.length == 0) && res.status >= 400) { debug(res.status, "Error status"); From f55f830887fda645bdeffc639d0dfc2f36005354 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 10:32:37 +0800 Subject: [PATCH 176/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 302cef18439..33aae33cfdb 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.75](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.76](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From ac09870a5d31dcdceca3c1e42c7d9d685dd5e2d5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 10:58:30 +0800 Subject: [PATCH 177/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 20ef97a6f52..266af65deb8 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -5490,7 +5490,7 @@ let pos = e && e.message && e.message.match(/position (\d+)/); if (pos && !editor) { pos = parseInt(pos[1]); - customRulesInput.value = customRulesInput.value.slice(0, pos) + "➡️" + customRulesInput.value[pos] + "⬅️" + customRulesInput.value.slice(pos + 1); + customRulesInput.value = customRulesInput.value.slice(0, pos) + "➡️" + customRulesInput.value.slice(pos); } showTips(i18n("errorJson")); return; From de0bbf1ce959ccf10f5e2dc858d1a6fe29c47fa1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 12:11:26 +0800 Subject: [PATCH 178/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 266af65deb8..b414d67cbc0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.76 +// @version 1.9.36.77 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1895,7 +1895,7 @@ let paStyle = curWin.getComputedStyle(ele.parentNode); let paDisplay = paStyle.display; let paOverflow = paStyle.overflow; - pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; + pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || /^UL$/i.test(ele.parentNode.nodeName) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; } let curStyle = curWin.getComputedStyle(ele); if (ele.children.length > 1) { @@ -1946,6 +1946,7 @@ debug("Stop as too long between next & page element"); isPause = true; pageElement = []; + sideController.remove(); } else { if (pageElement.length == 1 && /^IMG$/i.test(pageElement[0].nodeName)) { self.curSiteRule.pageBar = 0; @@ -7450,11 +7451,12 @@ returnFalse("Stop as no page when emu"); return; } - if (/^UL$/i.test(pageEle[0].nodeName)) pageEle = pageEle[0].children; - pageEle = pageEle[parseInt((pageEle.length - 1) / 2)]; - while(pageEle && ((pageEle.scrollHeight && pageEle.scrollHeight < 50) || !pageEle.offsetParent || (!/^IMG$/i.test(pageEle.nodeName) && !pageEle.innerHTML.trim()))) { - if (pageEle.nextElementSibling) pageEle = pageEle.nextElementSibling; - else break; + pageEle = [].filter.call(pageEle, ele => {return ele && !/^(style|script|meta)$/i.test(ele.nodeName)}); + if (/^UL$/i.test(pageEle[0].nodeName) || pageEle.length == 1) pageEle = pageEle[0]; + else if (pageEle[0].parentNode == pageEle[1].parentNode) { + pageEle = pageEle[0].parentNode; + } else { + pageEle = pageEle[0]; } if (ruleParser.curSiteRule.singleUrl && orgContent != pageEle.innerHTML) { orgContent = pageEle.innerHTML; @@ -7503,12 +7505,12 @@ } let eles = ruleParser.getPageElement(iframeDoc, emuIframe.contentWindow, true), checkItem; if (eles && eles.length > 0) { - checkItem = eles; - if (/^UL$/i.test(eles[0].nodeName)) checkItem = eles[0].children; - checkItem = checkItem[parseInt((checkItem.length - 1) / 2)]; - while(checkItem && ((checkItem.scrollHeight && checkItem.scrollHeight < 50) || !checkItem.offsetParent || (!/^IMG$/i.test(checkItem.nodeName) && !checkItem.innerHTML.trim()))) { - if (checkItem.nextElementSibling) checkItem = checkItem.nextElementSibling; - else break; + eles = [].filter.call(eles, ele => {return ele && !/^(style|script|meta)$/i.test(ele.nodeName)}); + if (/^UL$/i.test(eles[0].nodeName) || eles.length == 1) checkItem = eles[0]; + else if (eles[0].parentNode == eles[1].parentNode) { + checkItem = eles[0].parentNode; + } else { + checkItem = eles[0]; } } if (!checkItem || (checkEval && !checkEval(iframeDoc))) { From b43f16aa457e1e73bcea04a74c45a9d6cb491354 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 12:11:29 +0800 Subject: [PATCH 179/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 33aae33cfdb..37317caa47f 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.76](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.77](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From e571eab0ecf4732016ae14e9576dd5c54f6e6e5f Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 15:33:30 +0800 Subject: [PATCH 180/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index b414d67cbc0..45ea93d468b 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -211,7 +211,7 @@ outOfDate: "The script is outdated, update to the latest version in time!", hideBarTips: "Hide the pagination bar, toggle immersive experience", setConfigPage: "Set current page as the default configuration page", - wedata2github: "Change the wedate address to the mirror address in the github repository", + wedata2github: "Change the wedata address to the mirror address in the github repository", addOtherProp: "Add rule property", addNextSelector: "Add selector content as nextLink", addPageSelector: "Add selector content as pageElement", @@ -5396,7 +5396,7 @@ }, (rule, err) => { if (rule.id == 1) { showTips(`Failed to update wedata rules! Try to switch to wedata mirror!`); - wedata2githubInput.scrollIntoView(); + wedata2githubInput.scrollIntoView({ behavior: "smooth" }); } else { showTips(`Failed to update ${rule.url} rules!`); } From ab9c2b49e9a31cdbcc6591ad824522e9f969d65d Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 15:42:17 +0800 Subject: [PATCH 181/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 45ea93d468b..117b9f2a647 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4435,7 +4435,7 @@ let pos = e && e.message && e.message.match(/position (\d+)/); if (pos) { pos = parseInt(pos[1]); - this.tempRule.value = this.tempRule.value.slice(0, pos) + "➡️" + this.tempRule.value[pos] + "⬅️" + this.tempRule.value.slice(pos + 1); + this.tempRule.value = this.tempRule.value.slice(0, pos) + "➡️" + this.tempRule.value.slice(pos); } showTips(i18n("errorJson")); return null; From 93323dcc81049b58a331342e9688cc7bb820677a Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 15:51:15 +0800 Subject: [PATCH 182/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index ccd876df562..fb52625ffbc 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9686,6 +9686,23 @@ "include": ".explore-more>button", "loadMore": ".explore-more>button" }, +{ + "name": "SoftArchive", + "url": "^https?://sanet\\.st/search/", + "example": "https://sanet.st/search/?q=too", + "nextLink": ".pagination>.active+li>a", + "pageElement": "tr.filerow", + "pageAction": "eles.forEach(ele=>{if(ele.classList.contains('show_poster_preview')){ele.onmouseenter=e=>{document.querySelector('#pop_poster_preview_box').innerHTML=``;document.getElementById('pop_poster_preview_box').style.display='block'};ele.onmouseleave=e=>{document.getElementById('pop_poster_preview_box').style.display='none'}}})" +}, +{ + "name": "观察者网", + "url": "^https?://www\\.guancha\\.cn/", + "example": "https://www.guancha.cn/economy/2023_10_27_713575_2.shtml", + "nextLink": "a.next", + "pageElement": ".comment-list > ul.list-body.list-body-all > li.comment-item.cmt-item", + "include": "#comments-container", + "waitElement": "a.next" +}, { "name": "威锋", "url": "^https?://www\\.feng\\.com/", From 27c658034789675ef35a6686f22ddea9c2e07bac Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 27 Oct 2023 18:11:24 +0800 Subject: [PATCH 183/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 117b9f2a647..0aa993de9fe 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -3142,6 +3142,9 @@ img.src = realSrc; img.removeAttribute("srcset"); img.removeAttribute(lazyAttr); + if (img.classList && img.classList.contains && img.classList.contains("lazy")) { + img.classList.remove("lazy"); + } if (img.style.display == "none") { img.style.display = ""; } From 575a81b3030bb619c82f86c20cf5794f479c4f76 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 08:22:02 +0800 Subject: [PATCH 184/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 37317caa47f..532f7e8e322 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.77](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.78](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 94511408019e7090f7facb7931619cf72c59ef61 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 08:22:28 +0800 Subject: [PATCH 185/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0aa993de9fe..f7c41d3699d 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.77 +// @version 1.9.36.78 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -3204,7 +3204,9 @@ let base = document.querySelector("base"); this.basePath = base ? base.href : location.href; this.getRule(async () => { - isPause = manualPause; + if (self.curSiteRule.sideController === true || (self.curSiteRule.sideController !== false && rulesData.sideController)) { + isPause = manualPause; + } if (self.curSiteRule.enable == 0) { debug("Stop as rule disable"); isPause = true; @@ -6329,7 +6331,7 @@ }); if (!isPause) ruleParser.showAddedElements(); manualPause = isPause; - if (sideController.inited || !isPause) storage.setItem("pauseState_" + location.host, isPause ? true : ""); + if (sideController.inited) storage.setItem("pauseState_" + location.host, isPause ? true : ""); }, 350); } From e5b99a3e3d1ca359ac81fec23ef072e4e58c85f6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 08:39:18 +0800 Subject: [PATCH 186/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index f9e350ea699..cd5d4e81553 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -636,10 +636,12 @@ if (window.top != window.self) { outline: none; cursor: pointer; } - #dacLinksCon>div:nth-of-type(odd) { + #dacLinksCon>div:nth-of-type(4n), + #dacLinksCon>div:nth-of-type(4n+1) { background: #ffffff; } - #dacLinksCon>div:nth-of-type(even) { + #dacLinksCon>div:nth-of-type(4n+2), + #dacLinksCon>div:nth-of-type(4n+3) { background: #f5f5f5; } #filterListContainer .fun,#filterListContainer .sort { From 915f6b83aff72c6a8a001d2b0af90962d2d5b12b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 17:17:48 +0800 Subject: [PATCH 187/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index f7c41d3699d..0fa8a6cf0fc 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.78 +// @version 1.9.36.79 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1779,7 +1779,7 @@ let articleNum = 0; for (i = 0; i < ele.children.length; i++) { let curNode = ele.children[i]; - if (/^H\d$/i.test(curNode.nodeName)) { + if (/^H\d$/i.test(curNode.nodeName) && curNode.offsetParent) { curMaxEle = null; break; } @@ -1851,6 +1851,16 @@ preOffsetTop = curNode.offsetTop; } } + if (curMaxEle && curHeight / bodyHeight <= 0.2) { + let article = doc.querySelectorAll(mainSel); + if (article && article.length == 1) { + article = article[0]; + self.curSiteRule.pageElement = article.nodeName.toLowerCase() + (article.id ? "#" + article.id : "") + (article.className ? "." + article.className.replace(/ /g, ".") : "") + ">*"; + debug(self.curSiteRule.pageElement, 'Page element'); + return article.children; + } + curMaxEle = null; + } if (curMaxEle) { let sameClassNum = 0, hasDifferent = false; if (curMaxEle.className) { @@ -4046,6 +4056,10 @@ cursor: pointer; } #pagetual-picker .allpath>span.path:hover { + opacity: 0.6; + } + #pagetual-picker .allpath>span.path:hover, + #pagetual-picker .allpath>span.path.checked { color: orangered; } #pagetual-picker .moreConfig { @@ -4555,6 +4569,11 @@ } self.selectorInput.value = selector; self.checkInputSelector(); + if (self.checkedPath) { + self.checkedPath.classList.remove("checked"); + } + span.classList.add("checked"); + self.checkedPath = span; }, true); this.allpath.appendChild(span); } From bdbdd1abd61c20531298eb7e95c09ec2f7f8f74e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 17:18:00 +0800 Subject: [PATCH 188/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 532f7e8e322..2919146a637 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.78](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.79](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From d47c6b08cae68dc2fc615c54e6e0f789db25a840 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 18:37:41 +0800 Subject: [PATCH 189/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 79069e52fb8..8b325e2ef92 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -9744,8 +9744,6 @@ }; let mouseDownHandler = e => { if ((waitForMouse && e.type === 'mousedown' && e.button === 0) || - e.target.nodeName.toUpperCase() === 'CANVAS' || - e.target.nodeName.toUpperCase() === 'HTML' || (e.target.classList && e.target.classList.contains('search-jumper-btn')) || searchBar.bar.contains(e.target)) { return; From 7392f2fdb52362c30a957677ea4f4fce995d68ad Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 19:02:28 +0800 Subject: [PATCH 190/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 8b325e2ef92..e487081b754 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -7109,6 +7109,7 @@ let showTips = false; let tipsData; let pointer = !isBookmark && /^\[/.test(data.url); + let description = data.description; if (pointer) { ele.dataset.pointer = true; let siteNames = JSON.parse(data.url); @@ -7126,6 +7127,7 @@ ele.dataset.oriName = siteData.name; data = siteData; if (data.icon && icon !== "0") icon = data.icon; + if (data.description) description = data.description; break; } } @@ -7144,7 +7146,7 @@ let isPage = /^(https?|ftp):/.test(data.url); if (isPage) ele.dataset.isPage = isPage; ele.className = "search-jumper-btn"; - if (typeof data.description !== 'undefined') ele.title = name + " - " + data.description; + if (typeof description !== 'undefined') ele.title = name + " - " + description; ele.dataset.name = name; ele.classList.add("search-jumper-word"); ele.dataset.inPagePost = (data.url.indexOf("#p{") != -1) ? 't' : 'f'; From 86445fd59fb67178bdf2db3c6fa4c1224df6e5ee Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 19:33:22 +0800 Subject: [PATCH 191/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e487081b754..e6c351bec4b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -7836,6 +7836,9 @@ _unsafeWindow.targetElement = targetElement; _unsafeWindow.keywords = getKeywords(); targetUrlData = targetUrlData.replace(/^javascript:/, ''); + try { + targetUrlData = decodeURIComponent(targetUrlData); + } catch(e) {} let func = (/^[_a-zA-Z0-9]+$/.test(targetUrlData) && window[targetUrlData]) || new AsyncFunction(targetUrlData); if (func) func(); return false; From ebc7bda0bc07853e388052872c82efccb58c4f5e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 19:47:28 +0800 Subject: [PATCH 192/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e6c351bec4b..76aea4119aa 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -453,7 +453,7 @@ expandType: false, rightMouse: true, shiftLastUsedType: true, - mouseLeaveToHide: true, + mouseLeaveToHide: false, currentTypeFirst: true, switchSitesPreKey: 'ArrowLeft', switchSitesNextKey: 'ArrowRight', From 68815a766b6bc6a674492586db3f91d0bb4b0d70 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 20:15:21 +0800 Subject: [PATCH 193/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 2919146a637..7f7e8e9d925 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.79](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.80](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 33d903780838f80f4875be7978c19be8132fd698 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 28 Oct 2023 20:18:25 +0800 Subject: [PATCH 194/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0fa8a6cf0fc..5be75544589 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.79 +// @version 1.9.36.80 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -858,7 +858,7 @@ const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u4e2a\u500b\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; - var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8"; + var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", urlWillChange = false; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; @@ -2418,6 +2418,7 @@ } } } + if (urlWillChange) continue; if (!next4 && availableHref) { if (aTag.href.indexOf(location.hostname) === -1) continue; let _aHref = aTag.href.replace("?&", "?").replace("index.php?", "?").toLowerCase(); @@ -2458,8 +2459,6 @@ if (parent && parent.contains(otherPageEle) && !/^\d+$/.test(otherPageEle.innerText.trim())) { next4 = null; } - } else { - next4 = null; } } } @@ -6492,13 +6491,14 @@ if (document.hidden) return; if ((prevPathname !== window.location.pathname || prevSearch !== window.location.search) && window.location.href != ruleParser.historyUrl) { checkUrlTime = 2000; - prevPathname = window.location.pathname; - prevSearch = window.location.search; + urlWillChange = true; var e = new Event('pagetual_pushState'); e.arguments = arguments; window.dispatchEvent(e); clickedSth = false; } + prevPathname = window.location.pathname; + prevSearch = window.location.search; }; checkUrlTimer = setTimeout(checkFunc, checkUrlTime); From c02e6b51f8d38ca5d776c47e2a807a941c5f0a4c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 29 Oct 2023 08:05:02 +0800 Subject: [PATCH 195/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 7f7e8e9d925..74d0c35ac19 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.80](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.81](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 866e6ff47017e6456f51f3d38faeef8a16d3a794 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 29 Oct 2023 08:06:50 +0800 Subject: [PATCH 196/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 5be75544589..30fc955d9b1 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.80 +// @version 1.9.36.81 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -858,7 +858,7 @@ const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u4e2a\u500b\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; - var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", urlWillChange = false; + var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; @@ -5736,6 +5736,15 @@ let pageReady = false; function initRules(callback) { charset = (document.characterSet || document.charset || document.inputEncoding); + let equiv = document.querySelector('[http-equiv="Content-Type"]'); + if (equiv && equiv.content) { + let innerCharSet = equiv.content.match(/charset\=([^;]+)/); + if (!innerCharSet) { + charsetValid = false; + } else if (innerCharSet[1].replace("-", "").toLowerCase() != charset.replace("-", "").toLowerCase()) { + charsetValid = false; + } + } else charsetValid = false; storage.getItem("rulesData", data => { /*0 wedata格式,1 pagetual格式*/ ruleUrls = [{ @@ -6012,12 +6021,14 @@ } catch (e) { debug('parse error:' + e.toString()); } - let equiv = doc.querySelector('[http-equiv="Content-Type"]'); - if (equiv && equiv.content) { - let innerCharSet = equiv.content.match(/charset\=([^;]+)/); - if (innerCharSet && innerCharSet[1].replace("-", "").toLowerCase() != charset.replace("-", "").toLowerCase()) { - charset = innerCharSet[1]; - return requestDoc(url, callback); + if (charsetValid) { + let equiv = doc.querySelector('[http-equiv="Content-Type"]'); + if (equiv && equiv.content) { + let innerCharSet = equiv.content.match(/charset\=([^;]+)/); + if (innerCharSet && innerCharSet[1].replace("-", "").toLowerCase() != charset.replace("-", "").toLowerCase()) { + charset = innerCharSet[1]; + return requestDoc(url, callback); + } } } let pageElement = ruleParser.getPageElement(doc); From aafeb6b9fccb1f2a926fb032f9c327859957e25c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 29 Oct 2023 09:43:49 +0800 Subject: [PATCH 197/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 30fc955d9b1..95591364c78 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -5984,6 +5984,8 @@ } if (ruleHeaders.contentType) { headers.contentType = ruleHeaders.contentType; + let ruleCharset = ruleHeaders.contentType.match(/charset\=([^;]+)/); + if (ruleCharset) charset = ruleCharset[1]; } if (ruleHeaders.cookie) { headers.cookie = ruleHeaders.cookie; @@ -6021,7 +6023,7 @@ } catch (e) { debug('parse error:' + e.toString()); } - if (charsetValid) { + if (charsetValid && !ruleHeaders) { let equiv = doc.querySelector('[http-equiv="Content-Type"]'); if (equiv && equiv.content) { let innerCharSet = equiv.content.match(/charset\=([^;]+)/); From be83cfdfd998877cb3dc3f89682018c29b468556 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 29 Oct 2023 01:51:57 +0000 Subject: [PATCH 198/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index f6df42e6b66..510ec403256 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -25098,7 +25098,7 @@ "data": { "pageElement": "//div[@class='article-contents']|//li[.//p[@class='txt-update']]", "considerationUrl": "https://japan.zdnet.com/article/35148978/", - "nextLink": "descendant::a[@rel='next'][1][not(@href='#')]", + "nextLink": "descendant::a[@rel='next'][not(@href='#')]", "url": "^https://japan\\.zdnet\\.com/", "exampleUrl": "https://japan.zdnet.com/article/35011766/ https://japan.zdnet.com/archives/foreign/\r\n\r\n" }, @@ -25106,7 +25106,7 @@ "created_by": "bimi", "name": "ZDNet Japan", "created_at": "2014-09-09T15:49:10+09:00", - "updated_at": "2023-10-04T12:07:23+09:00" + "updated_at": "2023-10-29T07:03:15+09:00" }, { "resource_url": "http://wedata.net/items/76302", From 428ba422393b4ec55098e2eeeea560e494daa571 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 30 Oct 2023 01:50:43 +0000 Subject: [PATCH 199/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 510ec403256..4a1391517cb 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -20647,14 +20647,14 @@ "data": { "pageElement": "descendant::*[./article][1]/article", "nextLink": "//a[@class='next']", - "url": "^https?://screenrant\\.com/.+", - "exampleUrl": "https://screenrant.com/search/?q=masked%20singer&page=2" + "url": "^https?://(screen|game)rant\\.com/.+", + "exampleUrl": "https://screenrant.com/search/?q=masked%20singer&page=2\r\nhttps://gamerant.com/search/?q=rpg" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Tanookirby", - "name": "Screen Rant", + "name": "Screen Rant, Game Rant", "created_at": "2015-08-04T04:56:30+09:00", - "updated_at": "2023-02-12T10:11:58+09:00" + "updated_at": "2023-10-30T06:35:51+09:00" }, { "resource_url": "http://wedata.net/items/77437", From 1aa2790a932c30f35ed8e9258fa369d296acbd9a Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 30 Oct 2023 17:23:04 +0800 Subject: [PATCH 200/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 95591364c78..b8610bb20e1 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6633,7 +6633,7 @@ } }; dblclickHandler = e => { - if (forceState == 1 || /^(INPUT|TEXTAREA|SELECT)$/i.test(e.target.nodeName)) return; + if (forceState == 1 || /^(INPUT|TEXTAREA|SELECT|A|BUTTON|SVG|USE|IMG|PATH)$/i.test(e.target.nodeName)) return; if (!rulesData.dbClick2StopKey) { if ((rulesData.dbClick2StopCtrl && !e.ctrlKey) || (rulesData.dbClick2StopAlt && !e.altKey) || From 4382fd47cb13d234c1f8b99caa281f1427d0bcd0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 30 Oct 2023 17:51:09 +0800 Subject: [PATCH 201/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 5cafb69b969..03c0c23b476 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.26.1 +// @version 2023.10.30.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -19206,7 +19206,7 @@ ImgOps | https://imgops.com/#b#`; if (i != allData.length - 1) { i++; imgData = allData[i]; - while (imgData && imgData.img && imgData.img.parentNode && imgData.img.parentNode.classList.contains("pv-pic-window-container")) { + while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src)) { i++; if (i == allData.length) return; imgData = allData[i]; @@ -19221,7 +19221,7 @@ ImgOps | https://imgops.com/#b#`; if (i != 0) { i--; imgData = allData[i]; - while (imgData && imgData.img && imgData.img.parentNode && imgData.img.parentNode.classList.contains("pv-pic-window-container")) { + while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src)) { i--; if (i == -1) return; imgData = allData[i]; From ca2d58a9f1d5580d41262108401f779d7c02a3e9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 30 Oct 2023 20:27:25 +0800 Subject: [PATCH 202/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 47 ++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 76aea4119aa..f3cca3018f9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.12 +// @version 1.6.30.13 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -7460,11 +7460,11 @@ if (targetElement.nodeName.toUpperCase() == 'IMG' && /%i\b/.test(data.url)) { if (targetElement.src) { if (/^data/.test(targetElement.src)) { - resultUrl = resultUrl.replace(/%i\b/g, targetElement.src); + imgBase64 = targetElement.src; } else { imgBase64 = await image2Base64(targetElement); - resultUrl = resultUrl.replace(/%i\b/g, imgBase64); } + resultUrl = resultUrl.replace(/%i\b/g, imgBase64); } } else if ((targetElement.nodeName.toUpperCase() == 'A' || (targetElement.parentNode && targetElement.parentNode.nodeName.toUpperCase() == 'A')) && hasWordParam && !keywords) { if (targetElement.textContent.trim()) keywords = targetElement.textContent.trim(); @@ -7508,14 +7508,41 @@ } let targetBaseUrl = targetUrl.replace(/^https?:\/\//i, ""); if (!keywords) keywords = (currentSite && cacheKeywords); - if (!keywords && hasWordParam && typeof navigator.clipboard.readText !== "undefined") { - try { - keywords = await navigator.clipboard.readText(); - if (keywords && !_keyWords) { - inputString = keywords; + if (typeof navigator.clipboard.readText !== "undefined") { + if (!keywords && hasWordParam) { + try { + keywords = await navigator.clipboard.readText(); + if (keywords && !_keyWords) { + inputString = keywords; + } + } catch(e) { + return false; + } + } + if (!imgBase64 && /%i\b/.test(data.url)) { + try { + const permission = await navigator.permissions.query({ + name: "clipboard-read", + }); + if (permission.state !== "denied") { + const clipboardContents = await navigator.clipboard.read(); + for (const item of clipboardContents) { + if (item.types.includes("image/png")) { + const blob = await item.getType("image/png"); + imgBase64 = await new Promise(resolve => { + const reader = new FileReader(); + reader.onload = function (e) { + resolve(e.target && e.target.result); + }; + reader.readAsDataURL(blob); + }); + if (imgBase64) resultUrl = resultUrl.replace(/%i\b/g, imgBase64); + } + } + } + } catch (error) { + console.error(error.message); } - } catch(e) { - return false; } } if (!keywords && hasWordParam) { From 85643cf528ffa621e7d672f567b9e371add3fc3f Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 12:22:21 +0800 Subject: [PATCH 203/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 96 ++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 33 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f3cca3018f9..2853b346264 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.13 +// @version 1.6.30.14 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -167,11 +167,6 @@ type: "Search", icon: "search", sites: [ { - name: "🔍 Google", - url: "https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8", - match: "https://www\\.google\\..*/search", - icon: "0" - }, { name: "Bing", url: "https://www.bing.com/search?q=%s", match: "^https://(www|cn|global)\\.bing\\.com/search" @@ -193,8 +188,9 @@ selectTxt: true, openInNewTab: true, sites: [ { - name: "Google ", - url: "[\"Google\"]" + name: "Google", + url: "https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8", + match: "https://www\\.google\\..*/search", }, { name: "Wikipedia ", url: "[\"Wikipedia\"]" @@ -2604,6 +2600,7 @@ border-radius: 3px; text-decoration: none; padding: 1px 0; + -webkit-text-fill-color: initial; } mark.searchJumper[data-current=true], a.searchJumper[data-current=true] { @@ -2756,7 +2753,6 @@ } `; if (searchData.prefConfig.cssText) cssText += searchData.prefConfig.cssText; - mainStyleEle = _GM_addStyle(cssText); let logoCon = document.createElement("span"); logoCon.className = "search-jumper-logo"; @@ -4811,6 +4807,9 @@ } appendBar() { + if (!mainStyleEle || !mainStyleEle.parentNode) { + mainStyleEle = _GM_addStyle(cssText); + } if (!this.con.parentNode) { document.documentElement.appendChild(this.con); setTimeout(() => { @@ -7388,12 +7387,34 @@ let selector = customMatch[1]; let prop = customMatch[3]; let value = ""; - let ele = getElement(selector); - if (ele) { - if (prop) { - value = ele.getAttribute(prop) || ele[prop]; - } else { - value = ele.innerText; + if (!selector) { + try { + let selectEles = window.getSelection().getRangeAt(0).cloneContents(); + for (let i = 0; i < selectEles.childNodes.length; i++) { + let childNode = selectEles.childNodes[i]; + if (prop) { + if (childNode.nodeType == 1) { + value += childNode.getAttribute(prop) || childNode[prop]; + value += "\n"; + } + } else { + if (childNode.nodeType == 3) { + value += childNode.nodeValue; + } else { + var nodeHtml = childNode.outerHTML; + value += childNode.outerHTML; + } + } + } + } catch(e) {} + } else { + let ele = getElement(selector); + if (ele) { + if (prop) { + value = ele.getAttribute(prop) || ele[prop]; + } else { + value = ele.innerText; + } } } str = customReplaceSingle(str, customMatch[0], value); @@ -7508,19 +7529,15 @@ } let targetBaseUrl = targetUrl.replace(/^https?:\/\//i, ""); if (!keywords) keywords = (currentSite && cacheKeywords); - if (typeof navigator.clipboard.readText !== "undefined") { - if (!keywords && hasWordParam) { - try { + try { + if (typeof navigator.clipboard.readText !== "undefined") { + if (!keywords && hasWordParam) { keywords = await navigator.clipboard.readText(); if (keywords && !_keyWords) { inputString = keywords; } - } catch(e) { - return false; } - } - if (!imgBase64 && /%i\b/.test(data.url)) { - try { + if (!imgBase64 && /%i\b/.test(data.url)) { const permission = await navigator.permissions.query({ name: "clipboard-read", }); @@ -7540,10 +7557,10 @@ } } } - } catch (error) { - console.error(error.message); } } + } catch(e) { + console.error(e.message); } if (!keywords && hasWordParam) { self.customInput = true; @@ -8295,7 +8312,9 @@ firstType.style.height = "auto"; } if (firstType != this.bar.firstElementChild) { - firstType.scrollIntoView(noSmooth ? {} : {behavior: "smooth"}); + setTimeout(() => { + firstType.scrollIntoView(noSmooth ? {} : {behavior: "smooth"}); + }, 0); } } } @@ -8312,7 +8331,7 @@ if (this.con && this.con.classList.contains("search-jumper-showall")) return; if (searchData.prefConfig.hidePopup) _funcKeyCall = false; if (!targetElement) targetElement = getBody(document); - else if (targetElement != getBody(document) && (targetElement.className != "searchJumper" || !/^MARK$/i.test(targetElement.nodeName))) { + else if (!selectStr && targetElement != getBody(document) && (targetElement.className != "searchJumper" || !/^MARK$/i.test(targetElement.nodeName))) { let _targetElement = targetElement, children; while (_targetElement && _targetElement.nodeName) { if (_targetElement.nodeName.toUpperCase() == 'IMG' || _targetElement.nodeName.toUpperCase() == 'AUDIO' || _targetElement.nodeName.toUpperCase() == 'VIDEO' || _targetElement.nodeName.toUpperCase() == 'A') break; @@ -8673,12 +8692,21 @@ self.checkScroll(false, true); setTimeout(() => { if (!searchData.prefConfig.disableAutoOpen) { - if (self.currentType && self.currentType.classList.contains('search-jumper-open')) { - self.currentType.style.width = self.currentType.scrollWidth + "px"; - self.currentType.style.height = self.currentType.scrollHeight + "px"; + let openType = self.bar.querySelector('.search-jumper-type.search-jumper-open'); + if (openType) { + openType.style.transition = "none"; + openType.style.width = "auto"; + openType.style.height = "auto"; + setTimeout(() => { + openType.style.width = openType.scrollWidth + "px"; + openType.style.height = openType.scrollHeight + "px"; + setTimeout(() => { + openType.style.transition = ""; + }, 1); + self.checkScroll(false, true); + }, 0); } } - self.checkScroll(false, true); }, 251); } } @@ -8686,7 +8714,6 @@ class Picker { //static picker; constructor() { - this.init(); } /*static getInstance() { @@ -8703,6 +8730,8 @@ } init() { + if (this.inited) return; + this.inited = true; let self = this; this.clickedIndex = 0; this.signList = [];//所有标记 @@ -8962,6 +8991,7 @@ } toggle() { + this.init(); if (this.inPicker) { this.close(); return; @@ -11825,7 +11855,7 @@ iconShow.src = icons[0]; } } else { - iconShow.style.display = "none"; + iconShow.src = location.origin + "/favicon.ico"; } iconsCon.innerHTML = createHTML(); if (icons && icons.length > 1) { From 784e318016f9506051a024a79dfe22020fa2ab84 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 13:22:33 +0800 Subject: [PATCH 204/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 2853b346264..031ea881154 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -7393,7 +7393,10 @@ for (let i = 0; i < selectEles.childNodes.length; i++) { let childNode = selectEles.childNodes[i]; if (prop) { - if (childNode.nodeType == 1) { + if (childNode.nodeType == 3) { + value += childNode.nodeValue; + value += "\n"; + } else if (childNode.nodeType == 1) { value += childNode.getAttribute(prop) || childNode[prop]; value += "\n"; } @@ -7401,12 +7404,29 @@ if (childNode.nodeType == 3) { value += childNode.nodeValue; } else { - var nodeHtml = childNode.outerHTML; - value += childNode.outerHTML; + [].forEach.call(childNode.querySelectorAll("img"), img => { + if (!img.src) return; + let textNode = document.createTextNode(`![${img.alt || ""}](${img.src || ""})`); + img.parentNode.replaceChild(textNode, img); + }); + [].forEach.call(childNode.querySelectorAll("a"), a => { + if (!a.href) return; + let textNode = document.createTextNode(`[${a.innerText || ""}](${a.href || ""})`); + a.parentNode.replaceChild(textNode, a); + }); + if (/^A$/i.test(childNode.nodeName)) { + value += `[${childNode.innerText}](${childNode.href})`; + } else if (/^IMG$/i.test(childNode.nodeName)) { + value += `![${childNode.alt || ""}](${childNode.src})`; + } else { + value += childNode.innerText; + } } } } - } catch(e) {} + } catch(e) { + console.error(e); + } } else { let ele = getElement(selector); if (ele) { From 27cf7aef430c98246bb01f7807e45dd19d4578d8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 13:40:15 +0800 Subject: [PATCH 205/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 74d0c35ac19..139a2dc695e 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.81](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +🌼🕯[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.81](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From e0169a2f5afd45b9b811522054b1346833769136 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 13:58:26 +0800 Subject: [PATCH 206/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index b8610bb20e1..7ff7fb8e246 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -3565,7 +3565,7 @@

-
+
@@ -4140,17 +4140,17 @@ frame.id = "pagetual-picker"; frame.innerHTML = createHTML(`
${i18n("picker")}
@@ -4183,7 +4183,7 @@
@@ -4191,7 +4191,7 @@
`); @@ -6333,12 +6333,12 @@ const loadingCSS = `font-size: initial; text-indent: unset; display: block; position: initial; margin: auto auto 5px auto; shape-rendering: auto; vertical-align: middle; visibility: visible; width: initial; height: initial; text-align: center; color: #6e6e6e; flex: 0;`; function setLoadingDiv(loadingText) { - loadingDiv.innerHTML = createHTML(`

${loadingText}

${rulesData.hideLoadingIcon ? "" : `
`}`); + loadingDiv.innerHTML = createHTML(`

${loadingText}

${rulesData.hideLoadingIcon ? "" : `
`}`); } - var upSvg = ``; + var upSvg = ``; var upSvgCSS = `text-align: center;display: initial;position: relative;cursor: pointer;margin: 0 8px;width: 30px;height: 30px;vertical-align: baseline;fill: currentColor;overflow: hidden;`; - var downSvg = ``; + var downSvg = ``; var downSvgCSS = `text-align: center;display: initial;position: relative;cursor: pointer;margin: 0 8px;width: 30px;height: 30px;vertical-align: baseline;fill: currentColor;overflow: hidden;transform: rotate(180deg);`; const initStyle = `text-indent: initial;display: contents;right: unset;left: unset;top: unset;bottom: unset;inset: unset;clear: both;cy: initial;d: initial;dominant-baseline: initial;empty-cells: initial;fill: initial;fill-opacity: initial;fill-rule: initial;filter: initial;flex: initial;flex-flow: initial;float: initial;flood-color: initial;flood-opacity: initial;grid: initial;grid-area: initial;height: initial;hyphens: initial;image-orientation: initial;image-rendering: initial;inline-size: initial;inset-block: initial;inset-inline: initial;isolation: initial;letter-spacing: initial;lighting-color: initial;line-break: initial;list-style: initial;margin-block: initial;margin: 0px 5px;margin-inline: initial;marker: initial;mask: initial;mask-type: initial;max-block-size: initial;max-height: initial;max-inline-size: initial;max-width: initial;min-block-size: initial;min-height: initial;min-inline-size: initial;min-width: initial;mix-blend-mode: initial;object-fit: initial;object-position: initial;offset: initial;opacity: initial;order: initial;orphans: initial;outline: initial;outline-offset: initial;overflow-anchor: initial;overflow-clip-margin: initial;overflow-wrap: initial;overflow: initial;overscroll-behavior-block: initial;overscroll-behavior-inline: initial;overscroll-behavior: initial;padding-block: initial;padding: initial;padding-inline: initial;page: initial;page-orientation: initial;paint-order: initial;perspective: initial;perspective-origin: initial;pointer-events: initial;position: relative;quotes: initial;r: initial;resize: initial;ruby-position: initial;rx: initial;ry: initial;scroll-behavior: initial;scroll-margin-block: initial;scroll-margin: initial;scroll-margin-inline: initial;scroll-padding-block: initial;scroll-padding: initial;scroll-padding-inline: initial;scroll-snap-align: initial;scroll-snap-stop: initial;scroll-snap-type: initial;scrollbar-gutter: initial;shape-image-threshold: initial;shape-margin: initial;shape-outside: initial;shape-rendering: initial;size: initial;speak: initial;stop-color: initial;stop-opacity: initial;stroke: initial;stroke-dasharray: initial;stroke-dashoffset: initial;stroke-linecap: initial;stroke-linejoin: initial;stroke-miterlimit: initial;stroke-opacity: initial;stroke-width: initial;tab-size: initial;table-layout: initial;text-align: initial;text-align-last: initial;text-anchor: initial;text-combine-upright: initial;text-decoration: initial;text-decoration-skip-ink: initial;text-indent: initial;text-overflow: initial;text-shadow: initial;text-size-adjust: initial;text-transform: initial;text-underline-offset: initial;text-underline-position: initial;touch-action: initial;transform: initial;transform-box: initial;transform-origin: initial;transform-style: initial;transition: initial;user-select: initial;vector-effect: initial;vertical-align: initial;visibility: initial;border-spacing: initial;-webkit-border-image: initial;-webkit-box-align: initial;-webkit-box-decoration-break: initial;-webkit-box-direction: initial;-webkit-box-flex: initial;-webkit-box-ordinal-group: initial;-webkit-box-orient: initial;-webkit-box-pack: initial;-webkit-box-reflect: initial;-webkit-highlight: initial;-webkit-hyphenate-character: initial;-webkit-line-break: initial;-webkit-line-clamp: initial;-webkit-mask-box-image: initial;-webkit-mask: initial;-webkit-mask-composite: initial;-webkit-perspective-origin-x: initial;-webkit-perspective-origin-y: initial;-webkit-print-color-adjust: initial;-webkit-rtl-ordering: initial;-webkit-ruby-position: initial;-webkit-tap-highlight-color: initial;-webkit-text-combine: initial;-webkit-text-decorations-in-effect: initial;-webkit-text-emphasis: initial;-webkit-text-emphasis-position: initial;-webkit-text-fill-color: initial;-webkit-text-security: initial;-webkit-text-stroke: initial;-webkit-transform-origin-x: initial;-webkit-transform-origin-y: initial;-webkit-transform-origin-z: initial;-webkit-user-drag: initial;-webkit-user-modify: initial;white-space: initial;widows: initial;width: initial;will-change: initial;word-break: initial;word-spacing: initial;x: initial;y: initial;`; From ab70a30133e69582a49d3a60f68f89c01296502e Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 14:28:49 +0800 Subject: [PATCH 207/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 031ea881154..0b908c75cf1 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.14 +// @version 1.6.30.15 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -8734,6 +8734,9 @@ class Picker { //static picker; constructor() { + this.clickedIndex = 0; + this.signList = [];//所有标记 + this.clickedEles = {};//点击的元素 } /*static getInstance() { @@ -8753,9 +8756,6 @@ if (this.inited) return; this.inited = true; let self = this; - this.clickedIndex = 0; - this.signList = [];//所有标记 - this.clickedEles = {};//点击的元素 let cssText = ` body.searchJumper-picker, body.searchJumper-picker *:hover, @@ -8860,6 +8860,7 @@ } close() { + if (!this.mainSignDiv) return; this.callback = null; this.clearSigns(); this.clickedEles = {}; From beea484107163d1992350ba93d1b90bc453294a3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 15:27:24 +0800 Subject: [PATCH 208/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 0b908c75cf1..7f42911fade 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.15 +// @version 1.6.30.16 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1705,6 +1705,7 @@ } .search-jumper-left:not(.search-jumper-showall) { width: initial; + width: -webkit-fill-available; } .search-jumper-right { left: unset; @@ -8315,6 +8316,7 @@ if (!this.con.classList.contains("search-jumper-scroll")) { this.bar.style.cssText = ""; this.con.classList.add("search-jumper-scroll"); + this.con.style.display = ""; } } else { if (this.con.classList.contains("search-jumper-scroll")) { @@ -8709,9 +8711,10 @@ searchData.prefConfig.position.y = relY; searchData.prefConfig.offset.x = posX; searchData.prefConfig.offset.y = posY; - self.checkScroll(false, true); - setTimeout(() => { - if (!searchData.prefConfig.disableAutoOpen) { + if (searchData.prefConfig.disableAutoOpen) { + self.checkScroll(false, true); + } else { + setTimeout(() => { let openType = self.bar.querySelector('.search-jumper-type.search-jumper-open'); if (openType) { openType.style.transition = "none"; @@ -8726,8 +8729,8 @@ self.checkScroll(false, true); }, 0); } - } - }, 251); + }, 251); + } } } From 382c2590a379b88141f8ebf099fc638840eddaf2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 16:02:40 +0800 Subject: [PATCH 209/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 7f42911fade..6f365686371 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -3177,6 +3177,7 @@ this.showModifyWindow(word, wordSpan); }, true); wordSpan.addEventListener("mousedown", e => { + if (e.target.nodeName.toUpperCase() !== 'EM') return; if (e.button === 0) { this.focusHighlightByText(word.showWords, true, wordSpan); } else if (e.button === 2){ @@ -3720,7 +3721,7 @@ ${i18n("modifyWord")}
${i18n("wordContent")}
- +
@@ -4263,7 +4264,7 @@ skip = 1; } } - } else if (!word.link && !node.innerText && node.value && /^(INPUT|TEXTAREA)$/i.test(node.nodeName) && !/(^wd|^kw|^q$|query)/i.test(node.name) && !/(^wd|^kw|^q$|query)/i.test(node.id)) { + } else if (!word.link && !node.innerText && node.value && /^(INPUT|TEXTAREA)$/i.test(node.nodeName) && !/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id)) { let wordMatch = false; if (word.isRe) { let wordMatch = node.value.match(new RegExp(word.content, word.reCase)); From bc25ae89bb8d7ddc2ed11b9db5b193794e74232d Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 16:27:38 +0800 Subject: [PATCH 210/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index b5c91bfe020..56bbee3f518 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -118,6 +118,8 @@ var newHref = href.replace('https://to.redircdn.com/?', '').replace(/______/g, '.').replace(/&z/g, ''); $(this).attr('href', newHref); }); + $("#conttpc").prepend($(".t_like").clone()); + // 种子链接转磁力链 var torLink = $("a[href*=\'?hash\=\']"); @@ -253,7 +255,7 @@ helper.addCss('.viewer{position:fixed; top:7px; right:7px; cursor:pointer;}'); helper.addScript('function Viewer(){ $("#lightgallery").lightGallery(); $("html,body").animate({scrollTop:0}, 500); $("div#viewer,div#main,div#footer").fadeToggle(300); }'); - $('body').append(``); + $('body').append(``); } /*-------------------------------------------------------------------------------------------------------------------------------------------*/ From db102c8aa2268dc65ee601ecda43b9273eeae827 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 17:09:25 +0800 Subject: [PATCH 211/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 03c0c23b476..e9c202dfad2 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.30.1 +// @version 2023.10.31.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16837,7 +16837,9 @@ ImgOps | https://imgops.com/#b#`; // 已经在图库里面的 var self = this; imgs.forEach(function(img) { - pretreatment(img); + if (!/^(SVG|CANVAS)$/i.test(img.nodeName)) { + pretreatment(img); + } if(!img.src || (img.nodeName=='IMG' && img.getAttribute && !img.getAttribute("src"))) return; if (newer && self._dataCache[img.src]) return; @@ -22166,7 +22168,7 @@ ImgOps | https://imgops.com/#b#`; if(src)type='tpRule'; } - if(!src && iPASrc){//链接可能是一张图片... + if(!/^(SVG|CANVAS)$/i.test(img.nodeName) && !src && iPASrc){//链接可能是一张图片... if(iPASrc!=img.src && /\.(jpg|jpeg|png|gif|bmp)(\?[^\?]*)?$/i.test(iPASrc)){ src=iPASrc; } From 6ce7cb591c4a7c206adef58d61c0089b57a932cc Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 17:20:48 +0800 Subject: [PATCH 212/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 7ff7fb8e246..cad7cdad447 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6071,7 +6071,7 @@ } else { debug("Stop as no page element"); ruleParser.noValidContent(url); - isPause = true; + changeStop(true); callback(false); } }, @@ -7351,7 +7351,7 @@ if (failFromIframe++ > 2) { failFromIframe = 0; debug("Stop as failFromIframe"); - isPause = true; + changeStop(true); callback(false, false); } else { ruleParser.noValidContent(url); From 335617a5e71a233a01f742144db1d7f66d626a46 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 17:34:30 +0800 Subject: [PATCH 213/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 56bbee3f518..7457d0e73aa 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -118,7 +118,27 @@ var newHref = href.replace('https://to.redircdn.com/?', '').replace(/______/g, '.').replace(/&z/g, ''); $(this).attr('href', newHref); }); - $("#conttpc").prepend($(".t_like").clone()); + + $.fn.isInViewport = function() { + var elementTop = $(this).offset().top; + var elementBottom = elementTop + $(this).outerHeight(); + var viewportTop = $(window).scrollTop(); + var viewportBottom = viewportTop + $(window).height(); + return elementBottom > viewportTop && elementTop < viewportBottom; + }; + var $tLike = $(".t_like"); + var $tLikeClone = $tLike.clone(); + if (!$tLike.isInViewport()) { + $("#conttpc").prepend($tLikeClone); + } + + $(window).on("resize scroll", function() { + if ($tLike.isInViewport()) { + if ($tLikeClone.parent().length) $tLikeClone.detach(); + } else { + if ($tLikeClone.parent().length == 0) $("#conttpc").prepend($tLikeClone); + } + }); // 种子链接转磁力链 From d5313dc64a911dab5600b41ecc8bdf4af63757d4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 17:36:30 +0800 Subject: [PATCH 214/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 7457d0e73aa..c9b072424a3 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -127,18 +127,20 @@ return elementBottom > viewportTop && elementTop < viewportBottom; }; var $tLike = $(".t_like"); - var $tLikeClone = $tLike.clone(); - if (!$tLike.isInViewport()) { - $("#conttpc").prepend($tLikeClone); - } - - $(window).on("resize scroll", function() { - if ($tLike.isInViewport()) { - if ($tLikeClone.parent().length) $tLikeClone.detach(); - } else { - if ($tLikeClone.parent().length == 0) $("#conttpc").prepend($tLikeClone); + if ($tLike.length) { + var $tLikeClone = $tLike.clone(); + if (!$tLike.isInViewport()) { + $("#conttpc").prepend($tLikeClone); } - }); + + $(window).on("resize scroll", function() { + if ($tLike.isInViewport()) { + if ($tLikeClone.parent().length) $tLikeClone.detach(); + } else { + if ($tLikeClone.parent().length == 0) $("#conttpc").prepend($tLikeClone); + } + }); + } // 种子链接转磁力链 From c39063814d674bf43dd049b340e91166b1aa6adf Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 17:49:56 +0800 Subject: [PATCH 215/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index e9c202dfad2..3e79ca93550 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -16837,10 +16837,11 @@ ImgOps | https://imgops.com/#b#`; // 已经在图库里面的 var self = this; imgs.forEach(function(img) { - if (!/^(SVG|CANVAS)$/i.test(img.nodeName)) { + let isImg = /^IMG$/i.test(img.nodeName); + if (isImg) { pretreatment(img); } - if(!img.src || (img.nodeName=='IMG' && img.getAttribute && !img.getAttribute("src"))) return; + if(!img.src || (isImg && img.getAttribute && !img.getAttribute("src"))) return; if (newer && self._dataCache[img.src]) return; var result = findPic(img); @@ -22168,7 +22169,7 @@ ImgOps | https://imgops.com/#b#`; if(src)type='tpRule'; } - if(!/^(SVG|CANVAS)$/i.test(img.nodeName) && !src && iPASrc){//链接可能是一张图片... + if(/^IMG$/i.test(img.nodeName) && !src && iPASrc){//链接可能是一张图片... if(iPASrc!=img.src && /\.(jpg|jpeg|png|gif|bmp)(\?[^\?]*)?$/i.test(iPASrc)){ src=iPASrc; } From d685a26ae22322c2b1f2218633183ffc2f828acc Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 31 Oct 2023 18:40:32 +0800 Subject: [PATCH 216/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 6f365686371..14ed0470ea0 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.16 +// @version 1.6.30.17 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -5965,7 +5965,7 @@ let typeBtn = this.bar.querySelector(`.search-jumper-type[data-type="${typeData.type}"]>span`); if (typeBtn && !typeBtn.classList.contains("search-jumper-open")) { this.bar.insertBefore(typeBtn.parentNode, this.bar.children[0]); - if (!searchData.prefConfig.disableAutoOpen) { + if (!searchData.prefConfig.disableAutoOpen && !searchData.prefConfig.disableTypeOpen) { if (typeBtn.onmousedown) { typeBtn.onmousedown(); } else { @@ -6465,6 +6465,7 @@ img.onload = e => { img.style.display = ""; iEle.innerText = ''; + iEle.style.display = 'none'; }; if (/^[a-z\- ]+$/.test(icon)) { let cache = searchData.prefConfig.cacheSwitch && cacheIcon[icon.trim().replace(/ /g, '_')]; @@ -6772,7 +6773,7 @@ } else { self.bar.insertBefore(ele, self.bar.children[self.bar.children.length - 1]); } - if (!searchData.prefConfig.disableAutoOpen) { + if (!searchData.prefConfig.disableAutoOpen && !searchData.prefConfig.disableTypeOpen) { ele.classList.add("search-jumper-open"); if (sites.length > (searchData.prefConfig.expandTypeLength || 12) && !searchData.prefConfig.expandType) { ele.classList.add("not-expand"); @@ -8463,7 +8464,7 @@ } self.setFuncKeyCall(false); if (firstType) { - if (!searchData.prefConfig.disableAutoOpen || _funcKeyCall) { + if ((!searchData.prefConfig.disableAutoOpen && !searchData.prefConfig.disableTypeOpen) || _funcKeyCall) { let mouseEvent = new PointerEvent("mousedown"); if (firstType.parentNode.classList.contains('search-jumper-open')) { if (firstType.onmousedown) firstType.onmousedown(); @@ -8478,7 +8479,7 @@ self.insertHistory(firstType.parentNode); } } - if (!_funcKeyCall && searchData.prefConfig.disableAutoOpen) { + if (!_funcKeyCall && (searchData.prefConfig.disableAutoOpen || searchData.prefConfig.disableTypeOpen)) { let openType = this.bar.querySelector('.search-jumper-type.search-jumper-open>span'); if (openType) { if (openType.onmousedown) { @@ -8712,7 +8713,7 @@ searchData.prefConfig.position.y = relY; searchData.prefConfig.offset.x = posX; searchData.prefConfig.offset.y = posY; - if (searchData.prefConfig.disableAutoOpen) { + if (searchData.prefConfig.disableAutoOpen || searchData.prefConfig.disableTypeOpen) { self.checkScroll(false, true); } else { setTimeout(() => { From a52080e6b1e80880d070ead754759acf5ad07249 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 1 Nov 2023 19:29:24 +0800 Subject: [PATCH 217/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- .../Switch Traditional Chinese and Simplified Chinese.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 20d29b0924c..415da563bb5 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.7.1 +// @version 1.2.7.2 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -681,7 +681,7 @@ var tc2sc = { '著':[ '着', - ['著','著名','著作','巨著','著稱','顯著','昭著','卓著','所著','著述','編著','著書','名著','原著','遺著','譯著','著:','著:'] + ['著','著名','著作','巨著','著稱','顯著','昭著','卓著','所著','著述','編著','著書','名著','原著','遺著','譯著','著譯','著:','著:','土著','論著','專著','日新月著','著有','合著','知著','著錄','著者','較著','頗著','文著','著文','自著','著成','著《','撰著','著撰','拙著','著明','著論','新著','著於','而著','雜著','著足','著花','醫著','聲著'] ] }; From 0632520ce9a85b3cb99dccbb1c37091e8c919d50 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 1 Nov 2023 21:22:59 +0800 Subject: [PATCH 218/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index cd5d4e81553..8ca0177d3e1 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.2 +// @version 2.7.5.3 // @description Fetch and download main content on current page, provide special support for novel // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -635,6 +635,13 @@ if (window.top != window.self) { font-size: 9pt; outline: none; cursor: pointer; + line-height: initial; + width: initial; + min-width: initial; + max-width: initial; + height: initial; + min-height: initial; + max-height: initial; } #dacLinksCon>div:nth-of-type(4n), #dacLinksCon>div:nth-of-type(4n+1) { From 843d71733dfaefcec1c42b68955e77caf06909a8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 1 Nov 2023 22:09:20 +0800 Subject: [PATCH 219/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 49 ++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 14ed0470ea0..5e6bf8f1277 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.17 +// @version 1.6.30.18 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -5126,9 +5126,7 @@ typeEle.style.width = scrollSize; typeEle.style.height = ""; } - self.bar.style.pointerEvents = "none"; setTimeout(() => { - self.bar.style.pointerEvents = ""; self.checkScroll(); }, 251); }, showTimer; @@ -7409,24 +7407,32 @@ } else { [].forEach.call(childNode.querySelectorAll("img"), img => { if (!img.src) return; - let textNode = document.createTextNode(`![${img.alt || ""}](${img.src || ""})`); + let textNode = document.createTextNode(` ![${(img.alt || "").replace(/[\n\r]/g, "").trim()}](${img.src || ""}) `); img.parentNode.replaceChild(textNode, img); }); [].forEach.call(childNode.querySelectorAll("a"), a => { if (!a.href) return; - let textNode = document.createTextNode(`[${a.innerText || ""}](${a.href || ""})`); + let innerText = (a.innerText || "").replace(/[\n\r]/g, "").trim(); + if (!innerText) return; + let textNode = document.createTextNode(` [${innerText}](${a.href || ""}) `); a.parentNode.replaceChild(textNode, a); }); if (/^A$/i.test(childNode.nodeName)) { - value += `[${childNode.innerText}](${childNode.href})`; + let innerText = (childNode.innerText || "").replace(/[\n\r]/g, "").trim(); + if (innerText) { + value += ` [${innerText}](${childNode.href}) `; + } } else if (/^IMG$/i.test(childNode.nodeName)) { - value += `![${childNode.alt || ""}](${childNode.src})`; + value += ` ![${(childNode.alt || "").replace(/[\n\r]/g, "").trim()}](${childNode.src}) `; } else { value += childNode.innerText; } } } } + if (value) { + value = value.replace(/[\n\r]\s*/g, "\n"); + } } catch(e) { console.error(e); } @@ -10115,6 +10121,33 @@ bodyObserver.observe(getBody(document), bodyObserverOptions); } + function canonicalUri(src) { + if (!src) { + return ""; + } + if (src.charAt(0) == "#") return location.href + src; + if (src.charAt(0) == "?") return location.href.replace(/^([^\?#]+).*/, "$1" + src); + let origin = location.protocol + '//' + location.host; + let base = document.querySelector("base"); + let basePath = base ? base.href : location.href; + let url = basePath || origin; + url = url.replace(/(\?|#).*/, ""); + if (/https?:\/\/[^\/]+$/.test(url)) url = url + '/'; + if (url.indexOf("http") !== 0) url = origin + url; + var root_page = /^[^\?#]*\//.exec(url)[0], + root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0], + absolute_regex = /^\w+\:\/\//; + while (src.indexOf("../") === 0) { + src = src.substr(3); + root_page = root_page.replace(/\/[^\/]+\/$/, "/"); + } + src = src.replace(/\.\//, ""); + if (/^\/\/\/?/.test(src)) { + src = location.protocol + src; + } + return (absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src)); + } + function quickAddByInput(input) { let parentForm, url = location.href, showCrawl = false; if (input && input.name) { @@ -10142,7 +10175,7 @@ return true; } if (parentForm) { - url = parentForm.action; + url = canonicalUri(parentForm.getAttribute("action")); let params = []; let formData = new FormData(parentForm); for (let [key, value] of formData) { From 85bf81688ef9ec9fe53aecce54fb0b05c7e3769c Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 1 Nov 2023 22:22:36 +0800 Subject: [PATCH 220/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 8ca0177d3e1..430819da1dd 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -431,7 +431,7 @@ if (window.top != window.self) { document.body.appendChild(filterListContainer); filterListContainer.innerHTML = createHTML(`
-
+
${i18n.custom} @@ -446,7 +446,7 @@ if (window.top != window.self) {
-

+

@@ -656,6 +656,7 @@ if (window.top != window.self) { justify-content: space-around; flex-wrap: nowrap; width: 100%; + height: 28px; } #filterListContainer input[type=button]:hover { border: 1px #C6C6C6 solid; From 7bc7b1ea4e621e4f7a5cf6157b485764764123cb Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 1 Nov 2023 22:28:40 +0800 Subject: [PATCH 221/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index c9b072424a3..46d801b6993 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -163,19 +163,19 @@ var quickReply = $( `` ); quickReply.insertAfter( "form .btn" ); var replyStr = defaultReply; - if (document.title.indexOf("打卡签到") !== -1) { - var spaceStr = ""; - var spaceLen = Math.floor(Math.random() * 10); - for (var i = 0; i < spaceLen; i++) { - spaceStr += " "; - } - replyStr = "今日签到" + spaceStr; - } helper.getScript('//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js', e => { var lastReplyTime = $.cookie('lastReplyTime'); var customReplyStr = $.cookie('customReplyStr'); if (customReplyStr) replyStr = customReplyStr; + if (document.title.indexOf("打卡签到") !== -1) { + var spaceStr = ""; + var spaceLen = Math.floor(Math.random() * 10); + for (var i = 0; i < spaceLen; i++) { + spaceStr += " "; + } + replyStr = "今日签到" + spaceStr; + } quickReply.attr('title', replyStr + "(右击修改)"); var formTitle = $("form td.h>b").text(); function setCountdown() { From 7e973ebe19135dee851642f10d663177c1db4820 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 1 Nov 2023 22:34:00 +0800 Subject: [PATCH 222/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index cad7cdad447..c13b8423af9 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.81 +// @version 1.9.36.82 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -3173,8 +3173,8 @@ [].forEach.call(ele.querySelectorAll("img,picture>source"), img => { setLazyImg(img); }); - [].forEach.call(ele.querySelectorAll("div[data-src][data-thumb],div.img[data-src],div.lazy[data-src]"), div => { - div.style.setProperty("background-image", "url(" + div.dataset.src + ")", "important"); + [].forEach.call(ele.querySelectorAll("div[data-src][data-thumb],div.img[data-src],div.lazy[data-src],a.lazy[data-bg]"), div => { + div.style.setProperty("background-image", "url(" + (div.dataset.src || div.dataset.bg) + ")", "important"); }); } if (/^A$/i.test(ele.nodeName) && ele.classList.contains("lazyload")) { From f9a143496e0a1103667a872c1108504986517b1d Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 1 Nov 2023 22:34:23 +0800 Subject: [PATCH 223/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 139a2dc695e..9284ee8f1b0 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -🌼🕯[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.81](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +🌼🕯[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.82](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 6deeeb91d1ca0af7228ef655731a025ec5184a67 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 2 Nov 2023 01:49:07 +0000 Subject: [PATCH 224/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 4a1391517cb..b29e95e007c 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -557,18 +557,18 @@ "updated_at": "2023-09-28T18:34:32+09:00" }, { - "resource_url": "http://wedata.net/items/86108", "data": { - "pageElement": "//div[contains(concat(' ', @class, ' '), ' viewableWrapper ')]/ul[li]", + "pageElement": "id('comment-main')/ul[.//article]", "nextLink": "//a[contains(@href, 'page=') and text()='次へ']", "url": "^https://news\\.yahoo\\.co\\.jp/articles/.+?/comments", "exampleUrl": "https://news.yahoo.co.jp/articles/009828f57dc6e4b74f4be1505978e2544fcace52/comments" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Griever3", + "resource_url": "http://wedata.net/items/86108", "name": "コメント一覧 - Yahoo!ニュース", "created_at": "2023-04-22T22:14:36+09:00", - "updated_at": "2023-07-25T19:37:06+09:00" + "updated_at": "2023-11-01T17:36:30+09:00" }, { "resource_url": "http://wedata.net/items/86107", @@ -20645,7 +20645,7 @@ { "resource_url": "http://wedata.net/items/77441", "data": { - "pageElement": "descendant::*[./article][1]/article", + "pageElement": "//div[@class='sentinel-search-latestArticles']", "nextLink": "//a[@class='next']", "url": "^https?://(screen|game)rant\\.com/.+", "exampleUrl": "https://screenrant.com/search/?q=masked%20singer&page=2\r\nhttps://gamerant.com/search/?q=rpg" @@ -20654,7 +20654,7 @@ "created_by": "Tanookirby", "name": "Screen Rant, Game Rant", "created_at": "2015-08-04T04:56:30+09:00", - "updated_at": "2023-10-30T06:35:51+09:00" + "updated_at": "2023-11-01T17:43:50+09:00" }, { "resource_url": "http://wedata.net/items/77437", From e16ad6e2d346545d7ba8882ca5564084bab649b7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 2 Nov 2023 10:40:53 +0800 Subject: [PATCH 225/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 84 ++++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5e6bf8f1277..cc256d448e3 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.18 +// @version 1.6.30.19 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2499,7 +2499,7 @@ #searchInPage>.lockWords>span { position: relative; padding: 5px; - cursor: alias; + cursor: pointer; user-select: none; background: yellow; color: black; @@ -2510,6 +2510,9 @@ white-space: nowrap; max-width: 100%; } + #searchInPage>.lockWords>span>em { + cursor: alias; + } #searchInPage>.lockWords .removeWord { position: absolute; right: 0; @@ -3177,7 +3180,6 @@ this.showModifyWindow(word, wordSpan); }, true); wordSpan.addEventListener("mousedown", e => { - if (e.target.nodeName.toUpperCase() !== 'EM') return; if (e.button === 0) { this.focusHighlightByText(word.showWords, true, wordSpan); } else if (e.button === 2){ @@ -3979,6 +3981,23 @@ } else this.focusIndex = curList.length - 1; } } + let newIndex = this.focusIndex; + if (fw) { + while (!curList[newIndex].offsetParent) { + if (newIndex != curList.length - 1) { + newIndex = newIndex + 1; + } else newIndex = 0; + if (newIndex == this.focusIndex) break; + } + } else { + while (!curList[newIndex].offsetParent) { + if (newIndex != 0) { + newIndex = newIndex - 1; + } else newIndex = curList.length - 1; + if (newIndex == this.focusIndex) break; + } + } + this.focusIndex = newIndex; this.focusHighlight(curList[this.focusIndex]); this.setHighlightSpan(span, this.focusIndex, curList.length); } @@ -4582,13 +4601,15 @@ this.touched = false; if (currentSite && !currentSite.hideNotMatch) { this.initPos(); - let firstType = this.bar.querySelector('.search-jumper-type:nth-child(1)>span'); - if (firstType && !firstType.classList.contains("search-jumper-open")) { - if (firstType.onmousedown) { - firstType.onmousedown(); - } else { - let mouseEvent = new PointerEvent("mousedown"); - firstType.dispatchEvent(mouseEvent); + if (!searchData.prefConfig.disableAutoOpen && !searchData.prefConfig.disableTypeOpen) { + let firstType = this.bar.querySelector('.search-jumper-type:nth-child(1)>span'); + if (firstType && !firstType.classList.contains("search-jumper-open")) { + if (firstType.onmousedown) { + firstType.onmousedown(); + } else { + let mouseEvent = new PointerEvent("mousedown"); + firstType.dispatchEvent(mouseEvent); + } } } this.bar.style.display = '' @@ -4992,11 +5013,42 @@ let spans = this.submitInPageWords(); if (spans && spans.length > 0) { let lastSpan = spans.pop(); - var mouseEvent = new PointerEvent("mousedown", {button: 0}); + if (this.currentSearchInPageLockWords) { + this.currentSearchInPageLockWords.firstChild.style.transform = ""; + } + this.currentSearchInPageLockWords = lastSpan; + let mouseEvent = new PointerEvent("mousedown", {button: e.shiftKey ? 2 : 0}); lastSpan.dispatchEvent(mouseEvent); + } else if (this.lockWords) { + if (!this.currentSearchInPageLockWords) { + this.currentSearchInPageLockWords = this.searchInPageLockWords.lastChild; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } + let mouseEvent = new PointerEvent("mousedown", {button: e.shiftKey ? 2 : 0}); + this.currentSearchInPageLockWords.dispatchEvent(mouseEvent); } } break; + case 37://← + if (!this.currentSearchInPageLockWords) { + this.currentSearchInPageLockWords = this.searchInPageLockWords.lastChild; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } else if (this.currentSearchInPageLockWords.previousElementSibling){ + this.currentSearchInPageLockWords.firstChild.style.transform = ""; + this.currentSearchInPageLockWords = this.currentSearchInPageLockWords.previousElementSibling; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } + break; + case 39://→ + if (!this.currentSearchInPageLockWords) { + this.currentSearchInPageLockWords = this.searchInPageLockWords.lastChild; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } else if (this.currentSearchInPageLockWords.nextElementSibling){ + this.currentSearchInPageLockWords.firstChild.style.transform = ""; + this.currentSearchInPageLockWords = this.currentSearchInPageLockWords.nextElementSibling; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } + break; default: break; } @@ -6569,7 +6621,9 @@ } if (!ele.classList.contains("search-jumper-open")) { self.recoveHistory(); - ele.classList.add("search-jumper-open"); + if (!searchData.prefConfig.disableTypeOpen) { + ele.classList.add("search-jumper-open"); + } if (searchData.prefConfig.minSizeMode) { //self.bar.classList.add("minSizeMode"); self.bar.classList.remove("minSizeModeClose"); @@ -7393,6 +7447,12 @@ let selectEles = window.getSelection().getRangeAt(0).cloneContents(); for (let i = 0; i < selectEles.childNodes.length; i++) { let childNode = selectEles.childNodes[i]; + if (childNode.nodeType == 1) { + [].forEach.call(childNode.querySelectorAll("style,script,svg,canvas"), ele => { + let textNode = document.createTextNode(''); + ele.parentNode.replaceChild(textNode, ele); + }); + } if (prop) { if (childNode.nodeType == 3) { value += childNode.nodeValue; From c60f7c3a597af3a89d0f6e5bd046b233b86ab4ee Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 2 Nov 2023 14:58:04 +0800 Subject: [PATCH 226/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 67 +++++++++++++------------------ 1 file changed, 28 insertions(+), 39 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index cc256d448e3..c79babd42c3 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.19 +// @version 1.6.30.20 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -7444,51 +7444,40 @@ let value = ""; if (!selector) { try { - let selectEles = window.getSelection().getRangeAt(0).cloneContents(); - for (let i = 0; i < selectEles.childNodes.length; i++) { - let childNode = selectEles.childNodes[i]; - if (childNode.nodeType == 1) { - [].forEach.call(childNode.querySelectorAll("style,script,svg,canvas"), ele => { - let textNode = document.createTextNode(''); - ele.parentNode.replaceChild(textNode, ele); - }); - } - if (prop) { + let selectEles = window.getSelection(); + let container = document.createElement('div'); + for (let i = 0, len = selectEles.rangeCount; i < len; ++i) { + container.appendChild(selectEles.getRangeAt(i).cloneContents()); + } + [].forEach.call(container.querySelectorAll("style,script,svg,canvas"), ele => { + let textNode = document.createTextNode(''); + ele.parentNode.replaceChild(textNode, ele); + }); + if (prop) { + for (let i = 0; i < container.childNodes.length; i++) { + let childNode = container.childNodes[i]; if (childNode.nodeType == 3) { value += childNode.nodeValue; value += "\n"; } else if (childNode.nodeType == 1) { - value += childNode.getAttribute(prop) || childNode[prop]; + value += childNode.getAttribute(prop) || childNode[prop] || ""; value += "\n"; } - } else { - if (childNode.nodeType == 3) { - value += childNode.nodeValue; - } else { - [].forEach.call(childNode.querySelectorAll("img"), img => { - if (!img.src) return; - let textNode = document.createTextNode(` ![${(img.alt || "").replace(/[\n\r]/g, "").trim()}](${img.src || ""}) `); - img.parentNode.replaceChild(textNode, img); - }); - [].forEach.call(childNode.querySelectorAll("a"), a => { - if (!a.href) return; - let innerText = (a.innerText || "").replace(/[\n\r]/g, "").trim(); - if (!innerText) return; - let textNode = document.createTextNode(` [${innerText}](${a.href || ""}) `); - a.parentNode.replaceChild(textNode, a); - }); - if (/^A$/i.test(childNode.nodeName)) { - let innerText = (childNode.innerText || "").replace(/[\n\r]/g, "").trim(); - if (innerText) { - value += ` [${innerText}](${childNode.href}) `; - } - } else if (/^IMG$/i.test(childNode.nodeName)) { - value += ` ![${(childNode.alt || "").replace(/[\n\r]/g, "").trim()}](${childNode.src}) `; - } else { - value += childNode.innerText; - } - } } + } else { + [].forEach.call(container.querySelectorAll("img"), img => { + if (!img.src) return; + let textNode = document.createTextNode(` ![${(img.alt || "").replace(/[\n\r]/g, "").trim()}](${img.src || ""}) `); + img.parentNode.replaceChild(textNode, img); + }); + [].forEach.call(container.querySelectorAll("a"), a => { + if (!a.href) return; + let innerText = (a.innerText || "").replace(/[\n\r]/g, "").trim(); + if (!innerText) return; + let textNode = document.createTextNode(` [${innerText}](${a.href || ""}) `); + a.parentNode.replaceChild(textNode, a); + }); + value = container.innerText; } if (value) { value = value.replace(/[\n\r]\s*/g, "\n"); From 24edabd06c91fdbd68577d039ab0d5efda41e5cf Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 2 Nov 2023 15:44:34 +0800 Subject: [PATCH 227/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c79babd42c3..cabdd6501e4 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -6621,9 +6621,7 @@ } if (!ele.classList.contains("search-jumper-open")) { self.recoveHistory(); - if (!searchData.prefConfig.disableTypeOpen) { - ele.classList.add("search-jumper-open"); - } + ele.classList.add("search-jumper-open"); if (searchData.prefConfig.minSizeMode) { //self.bar.classList.add("minSizeMode"); self.bar.classList.remove("minSizeModeClose"); From 298e6fc58cdde891db52410324e07d7ff979f1a4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 08:32:37 +0800 Subject: [PATCH 228/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index cabdd6501e4..00dfc9d6a3f 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.20 +// @version 1.6.30.21 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -7451,6 +7451,7 @@ let textNode = document.createTextNode(''); ele.parentNode.replaceChild(textNode, ele); }); + document.body.appendChild(container); if (prop) { for (let i = 0; i < container.childNodes.length; i++) { let childNode = container.childNodes[i]; @@ -7465,12 +7466,12 @@ } else { [].forEach.call(container.querySelectorAll("img"), img => { if (!img.src) return; - let textNode = document.createTextNode(` ![${(img.alt || "").replace(/[\n\r]/g, "").trim()}](${img.src || ""}) `); + let textNode = document.createTextNode(` ![${(img.alt || "").replace(/[\n\r]/g, " ").trim()}](${img.src || ""}) `); img.parentNode.replaceChild(textNode, img); }); [].forEach.call(container.querySelectorAll("a"), a => { if (!a.href) return; - let innerText = (a.innerText || "").replace(/[\n\r]/g, "").trim(); + let innerText = (a.innerText || "").replace(/[\n\r]/g, " ").trim(); if (!innerText) return; let textNode = document.createTextNode(` [${innerText}](${a.href || ""}) `); a.parentNode.replaceChild(textNode, a); @@ -7480,6 +7481,7 @@ if (value) { value = value.replace(/[\n\r]\s*/g, "\n"); } + document.body.removeChild(container); } catch(e) { console.error(e); } From 8122f66c58c6bdebf9e8619fb5c87b61dcd4e9e0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 09:59:22 +0800 Subject: [PATCH 229/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 00dfc9d6a3f..09595a18bcf 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.21 +// @version 1.6.30.22 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -7471,10 +7471,17 @@ }); [].forEach.call(container.querySelectorAll("a"), a => { if (!a.href) return; - let innerText = (a.innerText || "").replace(/[\n\r]/g, " ").trim(); + let innerText = (a.innerText || "").replace(/[\n\r]+/g, "\n").trim(); if (!innerText) return; - let textNode = document.createTextNode(` [${innerText}](${a.href || ""}) `); - a.parentNode.replaceChild(textNode, a); + innerText = ` [${innerText}](${a.href || ""}) `; + let newNode; + if (innerText.indexOf("\n") == -1) { + newNode = document.createTextNode(innerText); + } else { + newNode = document.createElement("pre"); + newNode.innerHTML = createHTML(innerText); + } + a.parentNode.replaceChild(newNode, a); }); value = container.innerText; } From 44460811485f4a28525d54a3e785b2c9a7e25a58 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 10:53:51 +0800 Subject: [PATCH 230/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 430819da1dd..f0c8b553e5b 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.3 +// @version 2.7.5.4 // @description Fetch and download main content on current page, provide special support for novel // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -428,7 +428,6 @@ if (window.top != window.self) { }, true); filterListContainer = document.createElement("div"); filterListContainer.id = "filterListContainer"; - document.body.appendChild(filterListContainer); filterListContainer.innerHTML = createHTML(`
@@ -580,7 +579,7 @@ if (window.top != window.self) { dacFilterBg.onclick = e => { filterListContainer.style.display = "none"; }; - GM_addStyle(` + let listStyle = GM_addStyle(` #filterListContainer * { font-size: 13px; float: initial; @@ -669,6 +668,11 @@ if (window.top != window.self) { } `); dacLinksCon = filterListContainer.querySelector("#dacLinksCon"); + let shadowContainer = document.createElement("div"); + document.body.appendChild(shadowContainer); + let shadow = shadowContainer.attachShadow({ mode: "open" }); + shadow.appendChild(listStyle); + shadow.appendChild(filterListContainer); } list.forEach(a => { createLinkItem(a); @@ -683,7 +687,10 @@ if (window.top != window.self) { } txtDownContent=document.createElement("div"); txtDownContent.id="txtDownContent"; - document.body.appendChild(txtDownContent); + let shadowContainer = document.createElement("div"); + document.body.appendChild(shadowContainer); + let shadow = shadowContainer.attachShadow({ mode: "open" }); + shadow.appendChild(txtDownContent); txtDownContent.innerHTML=createHTML(`
@@ -703,7 +710,7 @@ if (window.top != window.self) { txtDownQuit.onclick=function(){ txtDownContent.style.display="none"; }; - initTempSave(); + initTempSave(txtDownContent); } function saveContent() { @@ -717,10 +724,10 @@ if (window.top != window.self) { } } - function initTempSave(){ - var tempSavebtn = document.getElementById('tempSaveTxt'); - var abortbtn = document.getElementById('abortRequest'); - var saveAsMd = document.getElementById('saveAsMd'); + function initTempSave(txtDownContent){ + var tempSavebtn = txtDownContent.querySelector('#tempSaveTxt'); + var abortbtn = txtDownContent.querySelector('#abortRequest'); + var saveAsMd = txtDownContent.querySelector('#saveAsMd'); tempSavebtn.onclick = function(){ saveContent(); console.log(curRequests); From 42a810854635d3de2efa8efe2e8a1e8437c261de Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 12:25:58 +0800 Subject: [PATCH 231/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 3e79ca93550..aa7db029cda 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.10.31.1 +// @version 2023.11.3.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -19209,7 +19209,7 @@ ImgOps | https://imgops.com/#b#`; if (i != allData.length - 1) { i++; imgData = allData[i]; - while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src)) { + while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src || (imgData.src && /^data:/.test(imgData.src) && imgData.src.length < 250))) { i++; if (i == allData.length) return; imgData = allData[i]; @@ -19224,7 +19224,7 @@ ImgOps | https://imgops.com/#b#`; if (i != 0) { i--; imgData = allData[i]; - while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src)) { + while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src || (imgData.src && /^data:/.test(imgData.src) && imgData.src.length < 250))) { i--; if (i == -1) return; imgData = allData[i]; From 64ae1f6dd0f3d98bf395251d0bbad6e9d0a19ac7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 15:34:43 +0800 Subject: [PATCH 232/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 37 ++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 09595a18bcf..cd689f56fb8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.22 +// @version 1.6.30.23 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -3023,19 +3023,16 @@ } } - anylizeInPageWords(words, add, init) { + anylizeInPageWords(words, init) { if (!words) return []; let self = this; let result = []; - if (!add) { + if (!this.lockWords) { if (words.indexOf("$c") === 0 && words.length > 2) { - this.splitSep = words.substr(2, 1); words = words.substr(3).trim(); } else if (words.indexOf("$o") === 0) { - this.splitSep = null; words = words.substr(2).trim(); - } else this.splitSep = " "; - this.curWordIndex = 0; + } } if (this.splitSep) { words.split(this.splitSep).forEach(word => { @@ -3119,7 +3116,7 @@ }); } else { this.curWordIndex = 0; - let word = (add || "").replace(/^\$o/, "") + words; + let word = (this.lockWords || "").replace(/^\$o/, "") + words; result = [{content: word, isRe: false, reCase: "", title: "", style: ""}]; } return result; @@ -3143,7 +3140,18 @@ } return wordSpans; } - let targetWords = this.anylizeInPageWords(words, this.lockWords, !!init); + if (!this.lockWords) { + if (words.indexOf("$c") === 0 && words.length > 2) { + this.splitSep = words.substr(2, 1); + } else if (words.indexOf("$o") === 0) { + this.splitSep = null; + } else this.splitSep = " "; + this.curWordIndex = 0; + } + if (this.splitSep && words.indexOf(this.splitSep) == -1) { + words = words.replace(/^\/?(.+?)(\/i?)?$/, "/$1/i"); + } + let targetWords = this.anylizeInPageWords(words, !!init); if (!targetWords || targetWords.length == 0) return wordSpans; if (this.lockWords) { this.lockWords += this.splitSep + words; @@ -4352,7 +4360,7 @@ skip = 1; } } - } else if (!word.link && node.nodeType == 3 && node.data && (typeof word.hideParent !== 'undefined' || /^BODY$/i.test(pa.nodeName) || pa.offsetParent || (pa.scrollHeight && pa.scrollWidth))) { + } else if (!word.link && node.nodeType == 3 && node.data && (typeof word.hideParent !== 'undefined' || /^(BODY|#document\-fragment)$/i.test(pa.nodeName) || pa.offsetParent || (pa.scrollHeight && pa.scrollWidth))) { if (word.isRe) { let wordMatch = node.data.match(new RegExp(word.content, word.reCase)); if (wordMatch) { @@ -4460,7 +4468,7 @@ skip = 1; } } else if ((!root || node === ele) && - node.nodeType == 1 && + (node.nodeType == 1 || node.nodeType == 11) && node.childNodes && !/^(SCRIPT|STYLE|MARK)$/i.test(node.nodeName) && node.ariaHidden != 'true' && @@ -4472,6 +4480,13 @@ for (var child = 0; child < node.childNodes.length; ++child) { child = child + searchWithinNode(node.childNodes[child], word); } + try { + if (node.shadowRoot) { + child = child + searchWithinNode(node.shadowRoot, word); + } + } catch(e) { + debug(e); + } } } return skip; From 5578ac8908a3274a7b99dfc532ee223339f05057 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 17:09:52 +0800 Subject: [PATCH 233/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- ...nal Chinese and Simplified Chinese.user.js | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 415da563bb5..03f821b2c2e 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.7.2 +// @version 1.2.7.3 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -1639,12 +1639,16 @@ } }); }); + let buttonCon = document.createElement('div'); let saveBtn = document.createElement('button'); saveBtn.innerText = '保存設置'; saveBtn.style.display = 'block'; - saveBtn.style.fontSize = 'large'; + saveBtn.style.fontSize = 'x-large'; + saveBtn.style.fontWeight = 'bold'; saveBtn.style.float = 'left'; saveBtn.style.marginRight = '5px'; + saveBtn.style.pointerEvents = 'all'; + saveBtn.style.cursor = 'pointer'; saveBtn.addEventListener("click", function(e) { auto = autoInput.checked; shortcutKey = shortcutInput.value; @@ -1662,11 +1666,13 @@ isSimple = defaultSimple.value == 'cn'; if (siteChanged) { - sitesList.forEach(site => { - if (site.indexOf('action_') === 0) { - storage.setItem(site, ""); - } - }); + if (sitesList) { + sitesList.forEach(site => { + if (site.indexOf('action_') === 0) { + storage.setItem(site, ""); + } + }); + } sitesDisableInput.value.trim().split('\n').forEach(site => { if (site.trim()) storage.setItem("action_" + site.replace(/\./g,"_"), 1); }); @@ -1709,11 +1715,14 @@ alert('保存設置成功!'); location.reload(); }); - baseCon.appendChild(saveBtn); + buttonCon.appendChild(saveBtn); let clearBtn = document.createElement('button'); clearBtn.innerText = '清除預處理緩存'; clearBtn.style.display = 'block'; - clearBtn.style.fontSize = 'large'; + clearBtn.style.fontSize = 'x-large'; + clearBtn.style.fontWeight = 'bold'; + clearBtn.style.pointerEvents = "all"; + clearBtn.style.cursor = "pointer"; clearBtn.addEventListener("click", function(e) { storage.setItem('stDict', ""); storage.setItem('tsDict', ""); @@ -1724,7 +1733,9 @@ alert('清除成功!'); location.reload(); }); - baseCon.appendChild(clearBtn); + buttonCon.appendChild(clearBtn); + buttonCon.style.cssText = "width: 100%; position: fixed; z-index: 999; bottom: 0px; left: 0px; display: flex; justify-content: center; background: #00000060; padding-bottom: 10px; pointer-events: none;"; + baseCon.appendChild(buttonCon); createHR(); From 5daa694324b4356f604ca64ca7198f0718c512a4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 19:52:13 +0800 Subject: [PATCH 234/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 137 +++++++++++++++++++++++++++--------- 1 file changed, 104 insertions(+), 33 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 46d801b6993..bed94b9e999 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.4 +// @version 0.6.5 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -167,14 +167,15 @@ helper.getScript('//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js', e => { var lastReplyTime = $.cookie('lastReplyTime'); var customReplyStr = $.cookie('customReplyStr'); + var isCheckIn = document.title.indexOf("打卡签到") !== -1; if (customReplyStr) replyStr = customReplyStr; - if (document.title.indexOf("打卡签到") !== -1) { + if (isCheckIn) { var spaceStr = ""; var spaceLen = Math.floor(Math.random() * 10); for (var i = 0; i < spaceLen; i++) { spaceStr += " "; } - replyStr = "今日签到" + spaceStr; + replyStr = "今日签到";// + spaceStr; } quickReply.attr('title', replyStr + "(右击修改)"); var formTitle = $("form td.h>b").text(); @@ -202,44 +203,114 @@ setCountdown(); } let form = $('form[name="FORM"]'); + function replyFail() { + submitBtn.val("提 交"); + quickReply.val("回复失败"); + $("form td.h").css("background", "rgb(244, 67, 54)"); + setTimeout(() => { + quickReply.val(quickReplyStr); + $("form td.h").css("background", ""); + }, 2000); + } + function replySuccess() { + lastReplyTime = Date.now(); + $.cookie('lastReplyTime', lastReplyTime, { expires: 7, path: '/' }); + submitBtn.val("提 交"); + quickReply.val("回复成功"); + quickReply.css("background", "yellow"); + $("form td.h").css("background", "yellow"); + setTimeout(() => { + setCountdown(); + $("form td.h").css("background", ""); + }, 2000); + } + function isRushTime() { + var date = new Date(); + var year = date.getFullYear(); + var month = date.getMonth()+1; + var today = date.getDate(); + var hour = date.getHours(); + if (hour < 20) return false; + + var newYear = year; + var newMonth = month++; + if (month > 12) { + newMonth = 1; + newYear++; + } + var newDate = new Date(newYear, newMonth, 1); + var monthLast2Day = (new Date(newDate.getTime() - 2 * 1000 * 60 * 60 * 24)).getDate(); + return (today == monthLast2Day); + } + function submitReply() { + $.ajax({ + type: form.attr('method'), + url: form.attr('action'), + data: form.serialize(), + success: function (res) { + if (res.indexOf("發貼完畢點擊進入主題列表") == -1) { + replyFail(); + } else { + replySuccess(); + } + }, + fail: function (e) { + replyFail(); + quickReply.removeAttr("disabled"); + } + }); + } + if (isCheckIn && isRushTime()) { + let reachRushMinute = false; + function checkRush(timeGap) { + setTimeout(() => { + let date = new Date(); + if (date.getHours() == 0) { + textarea.val("今日签到"); + submitReply(); + let rushTimes = 10; + let rushTimer = setInterval(() => { + if (--rushTimes > 0) { + submitReply(); + } else { + clearInterval(rushTimer); + } + }, 1); + } else { + if (reachRushMinute) { + if (date.getSeconds() > 57) { + checkRush(5); + } else if (date.getSeconds() > 50) { + checkRush(500); + } else if (date.getSeconds() > 30) { + checkRush(1000); + } + } else if (date.getHours() == 23 && date.getMinutes() == 59) { + reachRushMinute = true; + checkRush(1000); + } else { + checkRush(5000); + } + } + }, timeGap); + } + var rushReply = $( `` ); + rushReply.insertAfter( "form .btn" ); + rushReply.click(function() { + checkRush(5000); + rushReply.attr("disabled", true); + }); + } document.FORM.onsubmit = function(event) { if (checkpost(document.FORM)) { - $.ajax({ - type: form.attr('method'), - url: form.attr('action'), - data: form.serialize(), - success: function () { - submitBtn.val("提 交"); - quickReply.val("回复成功"); - quickReply.css("background", "yellow"); - $("form td.h").css("background", "yellow"); - setTimeout(() => { - setCountdown(); - $("form td.h").css("background", ""); - }, 2000); - }, - fail: function () { - submitBtn.val("提 交"); - quickReply.val("回复失败"); - quickReply.css("background", "rgb(244, 67, 54)"); - $("form td.h").css("background", "rgb(244, 67, 54)"); - setTimeout(() => { - quickReply.val(quickReplyStr); - quickReply.css("background", ""); - $("form td.h").css("background", ""); - }, 2000); - quickReply.removeAttr("disabled"); - } - }); + submitReply(); } event.preventDefault(); return false; }; quickReply.click(function() { textarea.val(replyStr); - submitBtn.click(); - lastReplyTime = Date.now(); - $.cookie('lastReplyTime', lastReplyTime, { expires: 7, path: '/' }); + submitReply(); quickReply.attr("disabled", true); }); quickReply.on('contextmenu', function(e) { From 821426b7437c225c4bb572804383ec9c09aa3817 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 20:16:16 +0800 Subject: [PATCH 235/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index f0c8b553e5b..d585f053da3 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -5,7 +5,7 @@ // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin // @version 2.7.5.4 -// @description Fetch and download main content on current page, provide special support for novel +// @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 // @description:ja ユニバーサルサイトコンテンツクロールツール、クロール、フォーラム内容など From 7b19b2b9c5f3db1d9a80f4dda7d4b6ebca417a67 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 20:34:12 +0800 Subject: [PATCH 236/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index d585f053da3..2c429a461b3 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.4 +// @version 2.7.5.5 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -218,7 +218,7 @@ if (window.top != window.self) { (function() { 'use strict'; - var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*言|^序\s*章|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; + var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*言|^序\s*章|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s)*[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; var innerNextPage=/^\s*(下一[页頁张張]|next\s*page|次のページ)/i; var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; var i18n={}; @@ -1687,7 +1687,6 @@ if (window.top != window.self) { function setDel(){ GM_openInTab(configPage + "#操作說明", {active: true}); - return; /*var selValue=GM_getValue("selectors"); var selectors=prompt(i18n.del,selValue?selValue:""); GM_setValue("selectors",selectors); From fc939599716b026eebfc38c0103f456e63b0d768 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 3 Nov 2023 20:49:06 +0800 Subject: [PATCH 237/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index cd689f56fb8..a259844e90f 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -10066,6 +10066,7 @@ return; } targetElement = e.target; + if (targetElement.shadowRoot) return; if (targetElement.getAttribute && targetElement.getAttribute("draggable") == "true") return; if (targetElement.parentNode && targetElement.parentNode.getAttribute && targetElement.parentNode.getAttribute("draggable") == "true") return; showDragSearch(e.clientX, e.clientY); From 56013e559a8d35bb29de6a40afe4f4549964a372 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 4 Nov 2023 10:17:48 +0800 Subject: [PATCH 238/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 2c429a461b3..09463f39398 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.5 +// @version 2.7.5.6 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -584,6 +584,7 @@ if (window.top != window.self) { font-size: 13px; float: initial; background-image: initial; + height: fit-content; } #filterListContainer.customRule .dacCustomRule { display: flex; @@ -807,6 +808,14 @@ if (window.top != window.self) { downIndex++; downNum++; let doc = getDocEle(result.responseText); + if (/^{/.test(result.responseText)) { + doc.json = () => { + try { + return JSON.parse(result.responseText); + } catch(e) {} + return {}; + } + } let base = doc.querySelector("base"); let nextPage = !disableNextPage && !processFunc && checkNextPage(doc, base ? base.href : aTag.href); if(nextPage){ @@ -929,9 +938,10 @@ if (window.top != window.self) { } doc.body.scrollTop = 9999999; doc.documentElement.scrollTop = 9999999; - if (validTimes++ > 10) { + if (!processFunc && validTimes++ > 5) { iframe.src = iframe.src; validTimes = 0; + inited = false; return; } if (customTitle) { @@ -952,7 +962,7 @@ if (window.top != window.self) { downNum--; setTimeout(() => { checkIframe(); - }, 500); + }, 1000); return; } if (wait) { @@ -1176,7 +1186,7 @@ if (window.top != window.self) { var endEle = ele => { return /^(I|STRONG|B|FONT|P|DL|DD|H\d)$/.test(ele.nodeName) && ele.children.length <= 1; }; - var largestContent,contents=pageData.querySelectorAll("span,div,article,p,td"),largestNum=0; + var largestContent,contents=pageData.querySelectorAll("span,div,article,p,td,pre"),largestNum=0; for(i=0;i { var customRules = GM_getValue("DACrules_" + document.domain); var urls = window.prompt(i18n.customInfo, customRules ? customRules : "https://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html"); @@ -1711,6 +1720,7 @@ if (window.top != window.self) { customDown(urls); } }); + GM_registerMenuCommand(i18n.fetch, fetch); GM_registerMenuCommand(i18n.setting, setDel); GM_registerMenuCommand(i18n.searchRule, searchRule); })(); From 4584187c13495cfe99f3e2a4c160af521e65b857 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 4 Nov 2023 10:24:04 +0800 Subject: [PATCH 239/812] Update README.md --- DownloadAllContent/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 6227e6f790f..a97feb60fc1 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -172,6 +172,8 @@ function decode(t) { } ``` > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 + 19. [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) + > 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html From 4ab7e147ec12db9a9f0ca4cf688daf300ac0dcd1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 4 Nov 2023 10:28:50 +0800 Subject: [PATCH 240/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 09463f39398..d458197fc4e 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -230,7 +230,7 @@ if (window.top != window.self) { case "zh-SG": i18n={ fetch:"开始下载小说【Ctrl+F9】", - info:"本文是使用怠惰小说下载器(DownloadAllContent)下载的", + info:"来源:#t#\n本文是使用怠惰小说下载器(DownloadAllContent)下载的", error:"该段内容获取失败", downloading:"已下载完成 %s 段,剩余 %s 段
正在下载 %s", complete:"已全部下载完成,共 %s 段", @@ -270,7 +270,7 @@ if (window.top != window.self) { case "zh-HK": i18n={ fetch:"開始下載小說【Ctrl+F9】", - info:"本文是使用怠惰小說下載器(DownloadAllContent)下載的", + info:"來源:#t#\n本文是使用怠惰小說下載器(DownloadAllContent)下載的", error:"該段內容獲取失敗", downloading:"已下載完成 %s 段,剩餘 %s 段
正在下載 %s", complete:"已全部下載完成,共 %s 段", @@ -309,7 +309,7 @@ if (window.top != window.self) { default: i18n={ fetch:"Download [Ctrl+F9]", - info:"The TXT is downloaded by 'DownloadAllContent'", + info:"Source: #t#\nThe TXT is downloaded by 'DownloadAllContent'", error:"Failed in downloading current chapter", downloading:"%s pages are downloaded, there are still %s pages left
Downloading %s ......", complete:"Completed! Get %s pages in total", @@ -716,11 +716,11 @@ if (window.top != window.self) { function saveContent() { if (win.downloadAllContentSaveAsZip) { - win.downloadAllContentSaveAsZip(rCats, i18n.info, content => { + win.downloadAllContentSaveAsZip(rCats, i18n.info.replace("#t#", location.href), content => { saveAs(content, document.title + ".zip"); }); } else { - var blob = new Blob([i18n.info + "\r\n\r\n" + document.title + "\r\n\r\n" + rCats.join("\r\n\r\n")], {type: "text/plain;charset=utf-8"}); + var blob = new Blob([i18n.info.replace("#t#", location.href) + "\r\n\r\n" + document.title + "\r\n\r\n" + rCats.join("\r\n\r\n")], {type: "text/plain;charset=utf-8"}); saveAs(blob, document.title + ".txt"); } } @@ -738,7 +738,7 @@ if (window.top != window.self) { if(curRequest)curRequest[1].abort(); } saveAsMd.onclick = function(){ - let txt = i18n.info+"\n\n---\n"+document.title+"\n===\n"; + let txt = i18n.info.replace("#t#", location.href)+"\n\n---\n"+document.title+"\n===\n"; rCats.forEach(cat => { cat = cat.replace("\r\n", "\n---").replace(/(\r\n|\n\r)+/g, "\n\n").replace(/[\n\r]\t+/g, "\n"); txt += '\n\n'+cat; @@ -1333,7 +1333,7 @@ if (window.top != window.self) { useIframe = false; filterList(list); }else{ - var blob = new Blob([i18n.info+"\r\n\r\n"+document.title+"\r\n\r\n"+getPageContent(document)], {type: "text/plain;charset=utf-8"}); + var blob = new Blob([i18n.info.replace("#t#", location.href)+"\r\n\r\n"+document.title+"\r\n\r\n"+getPageContent(document)], {type: "text/plain;charset=utf-8"}); saveAs(blob, document.title+".txt"); } } From 38e022477453afe856a28175e715353a8c31a5e4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 4 Nov 2023 15:39:15 +0800 Subject: [PATCH 241/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a259844e90f..d7f210ed2b9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.23 +// @version 1.6.30.24 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2659,11 +2659,17 @@ width: 32px; height: 32px; line-height: 32px; + min-width: auto; + min-height: auto; } .search-jumper-historylist>a.search-jumper-btn>img { width: 32px; height: 32px; } + .search-jumper-historylist>a.search-jumper-btn:not(.search-jumper-word)>span { + font-size: 12px; + line-height: normal; + } #search-jumper .listArrow { width: 0; height: 0; From f19dc59ed0dfb48b4669baa9beb2b149c4a12903 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 4 Nov 2023 16:43:00 +0800 Subject: [PATCH 242/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index aa7db029cda..7b73ea4dd42 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.3.1 +// @version 2023.11.4.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -21726,7 +21726,7 @@ ImgOps | https://imgops.com/#b#`; }; var targetPosi=getContentClientRect(this.data.img); var pa=this.data.img.parentNode; - if (pa && unsafeWindow.getComputedStyle(pa).overflow=='hidden' && pa.scrollHeight > 20 && pa.scrollWidth > 20) { + if (this.data.img.offsetTop && pa && pa.scrollHeight > 20 && pa.scrollWidth > 20) { var paPosi=getContentClientRect(pa); if (paPosi.width > 20 && paPosi.height > 20) { if (paPosi.width < targetPosi.width) { From a273c007e9def696bea613e7b50b83500e60741b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 08:44:48 +0800 Subject: [PATCH 243/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index d458197fc4e..ac83471268f 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -218,7 +218,7 @@ if (window.top != window.self) { (function() { 'use strict'; - var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*言|^序\s*章|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s)*[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; + var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s)*[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; var innerNextPage=/^\s*(下一[页頁张張]|next\s*page|次のページ)/i; var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; var i18n={}; @@ -889,7 +889,7 @@ if (window.top != window.self) { } downIndex++; downNum++; - processDoc(curIndex, aTag, null, ` NETWORK ERROR: '+${(e.response||e.responseText)} from: ${aTag.href} `); + processDoc(curIndex, aTag, null, ` NETWORK ERROR: ${(e.response||e.responseText)} from: ${aTag.href} `); if (wait) { setTimeout(() => { downOnce(wait); @@ -907,7 +907,7 @@ if (window.top != window.self) { } downIndex++; downNum++; - processDoc(curIndex, aTag, null, ` TIMEOUT: '+${aTag.href} `); + processDoc(curIndex, aTag, null, ` TIMEOUT: ${aTag.href} `); if (wait) { setTimeout(() => { downOnce(wait); From fb676f86296c701b0c8b5261a75bf4cf1cfa2ce3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 09:20:36 +0800 Subject: [PATCH 244/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 64 +++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index c13b8423af9..0b0fff6efd6 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.82 +// @version 1.9.36.83 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -70,14 +70,24 @@ }, 1000); }; if (window.name === 'pagetual-iframe' || (window.frameElement && window.frameElement.name === 'pagetual-iframe')) { + [].forEach.call(document.querySelectorAll("iframe"), iframe => { + iframe.name = 'pagetual-iframe'; + }); var domloaded = function() { window.parent.postMessage('pagetual-iframe:DOMLoaded', '*'); - pauseVideo(); }; if (window.opera) { document.addEventListener('DOMContentLoaded', domloaded, false); + pauseVideo(); } else { domloaded(); + if (document.readystate == 'complete') { + pauseVideo(); + } else { + window.addEventListener('load', e => { + pauseVideo(); + }, false); + } } if (getComputedStyle(document.documentElement).display == 'none') document.documentElement.style.display = 'block'; if (document.body && getComputedStyle(document.body).display == 'none') document.body.style.display = 'block'; @@ -89,13 +99,6 @@ if (window.self.innerWidth < 300 || window.self.innerHeight < 300) { return; } - if (document.readystate == 'complete') { - pauseVideo(); - } else { - window.addEventListener('load', e => { - pauseVideo(); - }, false); - } } catch(e) { return; } @@ -2739,17 +2742,46 @@ parent = parent.parentNode; } if (doc == document) { - if (this.linkHasNoHref(nextLink) && (clickedSth || !isVisible(nextLink, _unsafeWindow))) { - this.nextLinkHref = false; - return null; - } else { - let nextLinkCs = _unsafeWindow.getComputedStyle(nextLink); - if (nextLinkCs.cursor == "not-allowed") { + if (this.linkHasNoHref(nextLink)) { + if (clickedSth || !isVisible(nextLink, _unsafeWindow)) { this.nextLinkHref = false; return null; } - this.initNext = nextLink; + let video = document.querySelector("video,iframe[id*=play],[id*=play]>iframe,iframe[src*=player],iframe[src*=m3u8]"); + if (video) { + if (video.offsetParent && video.name != 'pagetual-iframe') { + let scrollWidth = video.scrollWidth || video.offsetWidth; + let scrollHeight = video.scrollHeight || video.offsetHeight; + if (/IFRAME/i.test(video.nodeName)) { + } else if (scrollWidth > 100 && scrollHeight > 100) { + let winWidth = window.innerWidth || document.documentElement.clientWidth; + let winHeight = window.innerHeight || document.documentElement.clientHeight; + if (scrollWidth > winWidth>>1 && scrollHeight > winHeight>>1) { + debug("Disable when large media found"); + } else { + video = null; + } + } else { + video = null; + } + } else { + video = null; + } + } + if (video) { + isPause = true; + this.clearAddedElements(); + this.nextLinkHref = false; + return null; + } + } + + let nextLinkCs = _unsafeWindow.getComputedStyle(nextLink); + if (nextLinkCs.cursor == "not-allowed") { + this.nextLinkHref = false; + return null; } + this.initNext = nextLink; } let form = doc.querySelector('#search-form'); if (!nextLink.href && nextLink.hasAttribute("onclick") && form) { From 9ddf02701f3b735b96dea6d2b7d11d2c813e7fc6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 09:21:01 +0800 Subject: [PATCH 245/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 9284ee8f1b0..b07cef336c2 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -🌼🕯[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.82](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +🌼🕯[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.83](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 703e1fadc1ea0f6d5e8ed895dbd11e4bd4a14388 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 09:21:12 +0800 Subject: [PATCH 246/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index b07cef336c2..8edc16e6538 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -🌼🕯[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.83](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.83](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From ecb006023d57de2dccbd387e106c067fe6ef5a50 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 09:45:51 +0800 Subject: [PATCH 247/812] Update README.md --- DownloadAllContent/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index a97feb60fc1..22b5798c50d 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -195,6 +195,8 @@ function decode(t) { 預設是取章節連結文字為標題,可以在設定中自訂章節標題,輸入 title 即為抓取分頁頁面的標題,輸入 h1 即為抓取分頁頁面 h1 等級的文章標題 - 下載内容不全怎麽辦?
可能因爲頁内正文是動態加載的,可嘗試在設置頁勾選“下載前打開篩選窗口”,然後選中“使用 iframe 後臺加載内容” +- 抓取失敗是因為?
+NETWORK ERROR 説明網路錯誤,可能是當前本機網路故障,也可能是被目標網站封鎖了 IP。 TIMEOUT 説明訪問超時,可能是因爲當前網路速率過慢或目標網站流量超限 - 其他問題歡迎透過 email 聯絡我,有空可幫你解決。 ### 為啥要寫這個腳本? From c70b7c208383247f3c9a2f3f743ae424ddba80ac Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 5 Nov 2023 01:54:29 +0000 Subject: [PATCH 248/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index b29e95e007c..2c88182af25 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86181", + "data": { + "insertBefore": "", + "pageElement": "//article[contains(concat(' ', @class, ' '), ' mod-job-index-item ')]", + "nextLink": "//link[@rel='next']", + "url": "^https://type\\.jp/job-", + "exampleUrl": "https://type.jp/job-1/1001/?pathway=4" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "type.jp 転職・求人情報", + "created_at": "2023-11-04T20:09:37+09:00", + "updated_at": "2023-11-04T20:09:37+09:00" +}, { "resource_url": "http://wedata.net/items/86178", "data": { @@ -35073,16 +35088,16 @@ { "resource_url": "http://wedata.net/items/55808", "data": { - "pageElement": "id('category')//article[@class='card']|id('single_post')/header/following-sibling::*[./following-sibling::ol]", + "pageElement": "id('category')/div[@class='cardArea']|id('single_post')/header/following-sibling::*[./following-sibling::ol]", "nextLink": "//link[@rel='next']", "url": "^https://type\\.jp/", - "exampleUrl": "https://type.jp/et/feature/1047 https://type.jp/et/feature/posts" + "exampleUrl": "https://type.jp/et/feature/1047 https://type.jp/et/feature/posts\r\nhttps://type.jp/et/feature/category/skill/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "エンジニアtype", "created_at": "2011-11-09T15:40:31+09:00", - "updated_at": "2022-02-19T17:08:20+09:00" + "updated_at": "2023-11-04T19:54:53+09:00" }, { "resource_url": "http://wedata.net/items/55794", @@ -38337,16 +38352,16 @@ { "resource_url": "http://wedata.net/items/41272", "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_at": "2011-01-10T13:18:29+09:00", "data": { - "pageElement": "//table[@class='table']//tr[not(td/@bgcolor='#99CCFF')]", - "exampleUrl": "https://www.atsoho.com/jobinfo/index/type-all.html", - "url": "^https://(www\\.)?atsoho\\.com/(?:job|soho)info/index/type-", - "nextLink": "id('center_contents')/div[contains(concat(' ', @class, ' '), ' table_sentence ')][last()]/text()[contains(.,'1') or contains(.,'2') or contains(.,'3') or contains(.,'4') or contains(.,'5') or contains(.,'6') or contains(.,'7') or contains(.,'8') or contains(.,'9')]/following-sibling::a[1]" + "pageElement": "//div[@class='et_pb_code_inner' or @class='et_pb_text_inner']/div[contains(concat(' ', @class, ' '), ' et_pb_section ')]", + "nextLink": "//strong/following-sibling::a[1][contains(@href, 'pg=')]", + "url": "^https://atsoho\\.com/", + "exampleUrl": "https://atsoho.com/job/\r\nhttps://atsoho.com/work/category?type=all" }, - "updated_at": "2020-05-14T11:35:04+09:00", - "name": "@SOHO  お仕事を探す・SOHOを探す", - "created_by": "itouhiro" + "created_by": "itouhiro", + "name": "@SOHO", + "created_at": "2011-01-10T13:18:29+09:00", + "updated_at": "2023-11-04T20:25:26+09:00" }, { "resource_url": "http://wedata.net/items/41269", From eb40032f065085d791ead596f8a792bd38ca453c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 10:46:42 +0800 Subject: [PATCH 249/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index bed94b9e999..29c6374d4dc 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.5 +// @version 0.6.6 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -262,6 +262,7 @@ } if (isCheckIn && isRushTime()) { let reachRushMinute = false; + var rushReply = $( `` ); function checkRush(timeGap) { setTimeout(() => { let date = new Date(); @@ -274,6 +275,7 @@ submitReply(); } else { clearInterval(rushTimer); + rushReply.val("搶簽結束"); } }, 1); } else { @@ -294,11 +296,11 @@ } }, timeGap); } - var rushReply = $( `` ); rushReply.insertAfter( "form .btn" ); rushReply.click(function() { checkRush(5000); rushReply.attr("disabled", true); + rushReply.val("搶簽中……"); }); } document.FORM.onsubmit = function(event) { @@ -310,7 +312,7 @@ }; quickReply.click(function() { textarea.val(replyStr); - submitReply(); + submitBtn.click(); quickReply.attr("disabled", true); }); quickReply.on('contextmenu', function(e) { From 0fdcc78f7f8496fa6f3aacc545c4aa14e96e10a9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 13:38:29 +0800 Subject: [PATCH 250/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 243 ++++++++++-------- 1 file changed, 133 insertions(+), 110 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index ac83471268f..a77fc9a62a9 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.6 +// @version 2.7.5.7 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -748,6 +748,16 @@ if (window.top != window.self) { } } + let charset = (document.characterSet || document.charset || document.inputEncoding); + let equiv = document.querySelector('[http-equiv="Content-Type"]'), charsetValid = true; + if (equiv && equiv.content) { + let innerCharSet = equiv.content.match(/charset\=([^;]+)/); + if (!innerCharSet) { + charsetValid = false; + } else if (innerCharSet[1].replace("-", "").toLowerCase() != charset.replace("-", "").toLowerCase()) { + charsetValid = false; + } + } else charsetValid = false; function indexDownload(aEles, noSort){ if(aEles.length<1)return; initTxtDownDiv(); @@ -795,125 +805,138 @@ if (window.top != window.self) { let request=(aTag, curIndex)=>{ let tryTimes=0; let validTimes=0; - let requestBody={ - method: 'GET', - url: aTag.href, - headers:{ - referer:aTag.href, - "Content-Type":"text/html;charset="+document.charset - }, - timeout:10000, - overrideMimeType:"text/html;charset="+document.charset, - onload: function(result) { - downIndex++; - downNum++; - let doc = getDocEle(result.responseText); - if (/^{/.test(result.responseText)) { - doc.json = () => { - try { - return JSON.parse(result.responseText); - } catch(e) {} - return {}; + function requestDoc(_charset) { + if (!_charset) _charset = charset; + return GM_xmlhttpRequest({ + method: 'GET', + url: aTag.href, + headers:{ + referer:aTag.href, + "Content-Type":"text/html;charset="+_charset + }, + timeout:10000, + overrideMimeType:"text/html;charset="+_charset, + onload: function(result) { + let doc = getDocEle(result.responseText); + if (charsetValid) { + let equiv = doc.querySelector('[http-equiv="Content-Type"]'); + if (equiv && equiv.content) { + let innerCharSet = equiv.content.match(/charset\=([^;]+)/); + if (innerCharSet && innerCharSet[1].replace("-", "").toLowerCase() != _charset.replace("-", "").toLowerCase()) { + charset = innerCharSet[1]; + return requestDoc(charset); + } + } } - } - let base = doc.querySelector("base"); - let nextPage = !disableNextPage && !processFunc && checkNextPage(doc, base ? base.href : aTag.href); - if(nextPage){ - var inArr=false; - for(var ai=0;ai { + try { + return JSON.parse(result.responseText); + } catch(e) {} + return {}; } } - if(!inArr){ - nextPage.innerText=aTag.innerText+"\t>>"; - aEles.push(nextPage); - let targetIndex = curIndex; - for(let a=0;a>"; + aEles.push(nextPage); + let targetIndex = curIndex; + for(let a=0;a= 400) { - console.warn("error:", `status: ${result.status} from: ${aTag.href}`); - } else { - console.log(result.status); - } - if (customTitle) { - try { - let title = doc.querySelector(customTitle); - if (title && title.innerText) { - aTag.innerText = title.innerText; + if (result.status >= 400) { + console.warn("error:", `status: ${result.status} from: ${aTag.href}`); + } else { + console.log(result.status); + } + if (customTitle) { + try { + let title = doc.querySelector(customTitle); + if (title && title.innerText) { + aTag.innerText = title.innerText; + } + } catch(e) { + console.warn(e); } - } catch(e) { - console.warn(e); } + let validData = processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:""), validTimes < 5); + if (!validData && validTimes++ < 5) { + downIndex--; + downNum--; + setTimeout(() => { + requestDoc(); + }, 500); + return; + } + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); + }, + onerror: function(e) { + console.warn("error:", e); + if(tryTimes++ < 5){ + setTimeout(() => { + requestDoc(); + }, 500); + return; + } + downIndex++; + downNum++; + processDoc(curIndex, aTag, null, ` NETWORK ERROR: ${(e.response||e.responseText)} from: ${aTag.href} `); + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); + }, + ontimeout: function(e) { + console.warn("timeout: times="+tryTimes+" url="+aTag.href); + //console.log(e); + if(tryTimes++ < 5){ + setTimeout(() => { + requestDoc(); + }, 500); + return; + } + downIndex++; + downNum++; + processDoc(curIndex, aTag, null, ` TIMEOUT: ${aTag.href} `); + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); } - let validData = processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:""), validTimes < 5); - if (!validData && validTimes++ < 5) { - downIndex--; - downNum--; - setTimeout(() => { - GM_xmlhttpRequest(requestBody); - }, 500); - return; - } - if (wait) { - setTimeout(() => { - downOnce(wait); - }, wait); - } else downOnce(); - }, - onerror: function(e) { - console.warn("error:", e); - if(tryTimes++ < 5){ - setTimeout(() => { - GM_xmlhttpRequest(requestBody); - }, 500); - return; - } - downIndex++; - downNum++; - processDoc(curIndex, aTag, null, ` NETWORK ERROR: ${(e.response||e.responseText)} from: ${aTag.href} `); - if (wait) { - setTimeout(() => { - downOnce(wait); - }, wait); - } else downOnce(); - }, - ontimeout: function(e) { - console.warn("timeout: times="+tryTimes+" url="+aTag.href); - //console.log(e); - if(tryTimes++ < 5){ - setTimeout(() => { - GM_xmlhttpRequest(requestBody); - }, 500); - return; - } - downIndex++; - downNum++; - processDoc(curIndex, aTag, null, ` TIMEOUT: ${aTag.href} `); - if (wait) { - setTimeout(() => { - downOnce(wait); - }, wait); - } else downOnce(); - } + }); }; if (useIframe) { let iframe = document.createElement('iframe'), inited = false; @@ -1000,7 +1023,7 @@ if (window.top != window.self) { document.body.appendChild(iframe); return [curIndex, null, aTag.href]; } else { - return [curIndex, GM_xmlhttpRequest(requestBody), aTag.href]; + return [curIndex, requestDoc(), aTag.href]; } } if(!aTag){ From 2976b424890ef886b8989fb9133c159e97c0ff56 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 16:10:46 +0800 Subject: [PATCH 251/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0b0fff6efd6..8648cd372ce 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.83 +// @version 1.9.36.84 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1754,18 +1754,6 @@ } return eles; } - if (curHeight / bodyHeight <= 0.22) { - let article = doc.querySelectorAll(mainSel); - if (article && article.length == 1) { - article = article[0]; - self.curSiteRule.pageElement = article.nodeName.toLowerCase() + (article.id ? "#" + article.id : "") + (article.className ? "." + article.className.replace(/ /g, ".") : "") + ">*"; - debug(self.curSiteRule.pageElement, 'Page element'); - return article.children; - } - self.curSiteRule.pageElement = allOfBody; - debug(self.curSiteRule.pageElement, 'Page element'); - return [body]; - } if (/^FORM$/i.test(ele.nodeName) && ele.parentNode != getBody(document)) { self.curSiteRule.pageElement = geneSelector(ele) + ">*"; debug(self.curSiteRule.pageElement, 'Page element'); From c2487a096030d704aab1deef299eb2916e72ed28 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 16:11:16 +0800 Subject: [PATCH 252/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 8edc16e6538..452aa44614a 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.83](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.84](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From b585eea4d49c4e1a5f258895b5b66d21667e0602 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 16:20:23 +0800 Subject: [PATCH 253/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 452aa44614a..ac7e085c278 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -13,7 +13,7 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu - + From eba3ec25e66bcb8bb9f295ebe99412f92a711e80 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 16:24:19 +0800 Subject: [PATCH 254/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index ac7e085c278..60dd30e7dd9 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -20,7 +20,7 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu - + From 5c95b96b9df92f65ba77f0dad0740743ed8323b8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 5 Nov 2023 19:19:38 +0800 Subject: [PATCH 255/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 463 ++++++++++++++++-------------- 1 file changed, 248 insertions(+), 215 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index d7f210ed2b9..16d651e3e54 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.24 +// @version 1.6.30.25 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -3117,13 +3117,13 @@ link = reMatch[2].indexOf("l") != -1; } if (!showWords) showWords = word; - result.push({content: word, showWords: showWords, isRe: isRe, link: link, reCase: reCase, title: title, style: style, oriWord: oriWord, hideParent: hideParent, inRange: inRange, popup: popup}); + result.push({content: word, showWords: showWords, isRe: isRe, link: link, reCase: reCase, title: title, style: style, oriWord: oriWord, hideParent: hideParent, inRange: inRange, popup: popup, init: init}); self.curWordIndex++; }); } else { this.curWordIndex = 0; let word = (this.lockWords || "").replace(/^\$o/, "") + words; - result = [{content: word, isRe: false, reCase: "", title: "", style: ""}]; + result = [{content: word, isRe: false, reCase: "", title: "", style: "", init: init}]; } return result; } @@ -3154,9 +3154,6 @@ } else this.splitSep = " "; this.curWordIndex = 0; } - if (this.splitSep && words.indexOf(this.splitSep) == -1) { - words = words.replace(/^\/?(.+?)(\/i?)?$/, "/$1/i"); - } let targetWords = this.anylizeInPageWords(words, !!init); if (!targetWords || targetWords.length == 0) return wordSpans; if (this.lockWords) { @@ -4221,43 +4218,238 @@ skip = 0; let pa = node.parentNode; if (node.nodeType == 1 && node.classList && node.classList.contains("searchJumper")) return 0; - if (word.link && node.nodeType == 1 && node.href && node.href.match) { - let wordMatch = node.href.match(new RegExp(word.content, word.reCase)); - if (wordMatch) { - if (typeof word.hideParent !== 'undefined') { - let parentDepth = word.hideParent; - let parent = node; - while(parentDepth-- > 0 && parent) { - parent = parent.parentElement; + let checkChildren = true; + if (word.link) { + if (node.nodeType == 1 && node.href && node.href.match) { + checkChildren = false; + let wordMatch = node.href.match(new RegExp(word.content, word.reCase)); + if (wordMatch) { + if (typeof word.hideParent !== 'undefined') { + let parentDepth = word.hideParent; + let parent = node; + while(parentDepth-- > 0 && parent) { + parent = parent.parentElement; + } + if (parent) { + parent.innerHTML = createHTML(""); + parent.dataset.content = word.showWords; + parent.classList.add("searchJumper-hide"); + return 0; + } + } else { + let curList = self.marks[word.showWords]; + let index = curList.length; + node.classList.add("searchJumper"); + if (word.title) node.title = JSON.parse('"' + word.title + '"'); + if (word.popup) { + node.addEventListener("mouseenter", e => { + if (targetElement != node || !searchBar.funcKeyCall) { + targetElement = node; + searchBar.showInPage(true, e); + } + }); + } + if (word.style) node.style.cssText = word.style; + node.addEventListener("click", e => { + if (!e.altKey) return; + e.stopPropagation(); + e.preventDefault(); + return false; + }); + node.dataset.content = word.showWords; + node.addEventListener("mousedown", e => { + if (!e.altKey) return; + let target; + if (e.button === 0) { + if (index != curList.length - 1) { + self.focusIndex = index + 1; + } else self.focusIndex = 0; + } else if (e.button === 2){ + if (index != 0) { + self.focusIndex = index - 1; + } else self.focusIndex = curList.length - 1; + } + target = curList[self.focusIndex]; + self.focusHighlight(target); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), self.focusIndex, curList.length); + self.focusText = word.showWords; + }); + self.marks[word.showWords].push(node); + + let navMark = document.createElement("span"); + let top = getElementTop(node); + navMark.dataset.top = top; + navMark.dataset.content = word.showWords; + navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; + navMark.style.background = node.style.background || "yellow"; + navMark.addEventListener("click", e => { + e.stopPropagation(); + e.preventDefault(); + self.focusIndex = index; + self.focusHighlight(node); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); + self.navPointer.style.display = ""; + self.navPointer.style.top = navMark.offsetTop + 18 + "px"; + return false; + }, true); + self.navMarks.appendChild(navMark); + + skip = 1; } - if (parent) { - parent.innerHTML = createHTML(""); - parent.dataset.content = word.showWords; - parent.classList.add("searchJumper-hide"); - return 0; + } + } + } else { + let blockValue = ""; + if (node.nodeType == 1) { + if (node.value && /^(INPUT|TEXTAREA)$/i.test(node.nodeName) && !/^(hidden|file|password|radio|range|checkbox|)$/i.test(node.type) && !/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id) && node.scrollHeight < 200) { + blockValue = node.value; + } else if (node.offsetParent && !node.innerText) { + let before = getComputedStyle(node, ':before').getPropertyValue('content'); + let after = getComputedStyle(node, ':after').getPropertyValue('content'); + if (before && before !== "none" && before !== '""') { + blockValue = before; + } + if (after && after !== "none" && after !== '""') { + blockValue += after; + } + } + } + if (blockValue) { + checkChildren = false; + let wordMatch = false; + if (word.isRe) { + wordMatch = blockValue.match(new RegExp(word.content, word.reCase)); + } else { + if (_unsafeWindow.searchJumperPinyin) { + let pinyin = _unsafeWindow.searchJumperPinyin(blockValue, word.content); + if (pinyin.matched) { + len = pinyin.len; + pos = pinyin.pos; + } else pos = -1; + } else { + len = word.content.length; + pos = blockValue.toUpperCase().indexOf(word.content.toUpperCase()); + } + if (word.init && pos >= 0 && /^[a-z]+$/i.test(word.content)) { + if (pos !== 0 && /[a-z]/i.test(blockValue[pos - 1])) { + pos = -1; + } + if (pos + word.content.length !== blockValue.length && /[a-z]/i.test(blockValue[pos + word.content.length])) { + pos = -1; + } + } + wordMatch = (pos >= 0); + } + if (wordMatch) { + if (typeof word.hideParent !== 'undefined') { + let parentDepth = word.hideParent; + let parent = node.parentElement; + while(parentDepth-- > 0 && parent) { + parent = parent.parentElement; + } + if (parent) { + parent.innerHTML = createHTML(""); + parent.dataset.content = word.showWords; + parent.classList.add("searchJumper-hide"); + return 0; + } + } else { + let curList = self.marks[word.showWords]; + let index = curList.length; + node.classList.add("searchJumper"); + if (word.title) node.title = JSON.parse('"' + word.title + '"'); + if (word.style) node.style.cssText = word.style.replace("background:", "border:solid 1px "); + node.style.color = ""; + node.dataset.content = word.showWords; + + self.marks[word.showWords].push(node); + + let navMark = document.createElement("span"); + let top = getElementTop(node); + navMark.dataset.top = top; + navMark.dataset.content = word.showWords; + navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; + navMark.style.background = node.style.background || "yellow"; + navMark.addEventListener("click", e => { + e.stopPropagation(); + e.preventDefault(); + self.focusIndex = index; + self.focusHighlight(node); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); + self.navPointer.style.display = ""; + self.navPointer.style.top = navMark.offsetTop + 18 + "px"; + return false; + }, true); + self.navMarks.appendChild(navMark); + + skip = 1; + } + } + } else if (node.nodeType == 3 && node.data && (typeof word.hideParent !== 'undefined' || /^(BODY|#document\-fragment)$/i.test(pa.nodeName) || pa.offsetParent || (pa.scrollHeight && pa.scrollWidth))) { + checkChildren = false; + if (word.isRe) { + let wordMatch = node.data.match(new RegExp(word.content, word.reCase)); + if (wordMatch) { + let content = wordMatch[0] || wordMatch; + len = content.length; + pos = node.data.indexOf(content); } } else { + if (_unsafeWindow.searchJumperPinyin) { + let pinyin = _unsafeWindow.searchJumperPinyin(node.data, word.content); + if (pinyin.matched) { + len = pinyin.len; + pos = pinyin.pos; + } else pos = -1; + } else { + len = word.content.length; + pos = node.data.toUpperCase().indexOf(word.content.toUpperCase()); + } + if (word.init && pos >= 0 && /^[a-z]+$/i.test(word.content)) { + if (pos !== 0 && /[a-z]/i.test(node.data[pos - 1])) { + pos = -1; + } + if (pos + word.content.length !== node.data.length && /[a-z]/i.test(node.data[pos + word.content.length])) { + pos = -1; + } + } + } + if (pos >= 0) { + if (typeof word.hideParent !== 'undefined') { + let parentDepth = word.hideParent; + let parent = node.parentElement; + while(parentDepth-- > 0 && parent) { + parent = parent.parentElement; + } + if (parent) { + parent.innerHTML = createHTML(""); + parent.dataset.content = word.showWords; + parent.classList.add("searchJumper-hide"); + return 0; + } + } let curList = self.marks[word.showWords]; let index = curList.length; - node.classList.add("searchJumper"); - if (word.title) node.title = JSON.parse('"' + word.title + '"'); + spannode = document.createElement("mark"); + spannode.className = "searchJumper"; + if (word.title) spannode.title = JSON.parse('"' + word.title + '"'); if (word.popup) { - node.addEventListener("mouseenter", e => { - if (targetElement != node || !searchBar.funcKeyCall) { - targetElement = node; + spannode.addEventListener("mouseenter", e => { + if (targetElement != spannode || !searchBar.funcKeyCall) { + targetElement = spannode; searchBar.showInPage(true, e); } }); } - if (word.style) node.style.cssText = word.style; - node.addEventListener("click", e => { + spannode.style.cssText = word.style; + spannode.addEventListener("click", e => { if (!e.altKey) return; e.stopPropagation(); e.preventDefault(); return false; }); - node.dataset.content = word.showWords; - node.addEventListener("mousedown", e => { + spannode.dataset.content = word.showWords; + spannode.addEventListener("mousedown", e => { if (!e.altKey) return; let target; if (e.button === 0) { @@ -4274,19 +4466,24 @@ self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), self.focusIndex, curList.length); self.focusText = word.showWords; }); - self.marks[word.showWords].push(node); + middlebit = node.splitText(pos); + middlebit.splitText(len); + middleclone = middlebit.cloneNode(true); + spannode.appendChild(middleclone); + middlebit.parentNode.replaceChild(spannode, middlebit); + self.marks[word.showWords].push(spannode); let navMark = document.createElement("span"); - let top = getElementTop(node); + let top = getElementTop(spannode); navMark.dataset.top = top; navMark.dataset.content = word.showWords; navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; - navMark.style.background = node.style.background || "yellow"; + navMark.style.background = spannode.style.background || "yellow"; navMark.addEventListener("click", e => { e.stopPropagation(); e.preventDefault(); self.focusIndex = index; - self.focusHighlight(node); + self.focusHighlight(spannode); self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); self.navPointer.style.display = ""; self.navPointer.style.top = navMark.offsetTop + 18 + "px"; @@ -4297,189 +4494,25 @@ skip = 1; } } - } else if (!word.link && !node.innerText && node.value && /^(INPUT|TEXTAREA)$/i.test(node.nodeName) && !/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id)) { - let wordMatch = false; - if (word.isRe) { - let wordMatch = node.value.match(new RegExp(word.content, word.reCase)); - } else { - if (_unsafeWindow.searchJumperPinyin) { - let pinyin = _unsafeWindow.searchJumperPinyin(node.value, word.content); - if (pinyin.matched) { - len = pinyin.len; - pos = pinyin.pos; - } else pos = -1; - } else { - len = word.content.length; - pos = node.value.toUpperCase().indexOf(word.content.toUpperCase()); - } - if (pos >= 0 && /^[a-z]+$/i.test(word.content)) { - if (pos !== 0 && /[a-z]/i.test(node.value[pos - 1])) { - pos = -1; - } - if (pos + word.content.length !== node.value.length && /[a-z]/i.test(node.value[pos + word.content.length])) { - pos = -1; - } - } - wordMatch = (pos >= 0); - } - if (wordMatch) { - if (typeof word.hideParent !== 'undefined') { - let parentDepth = word.hideParent; - let parent = node.parentElement; - while(parentDepth-- > 0 && parent) { - parent = parent.parentElement; - } - if (parent) { - parent.innerHTML = createHTML(""); - parent.dataset.content = word.showWords; - parent.classList.add("searchJumper-hide"); - return 0; - } - } else { - let curList = self.marks[word.showWords]; - let index = curList.length; - node.classList.add("searchJumper"); - if (word.title) node.title = JSON.parse('"' + word.title + '"'); - if (word.style) node.style.cssText = word.style; - node.dataset.content = word.showWords; - - self.marks[word.showWords].push(node); - - let navMark = document.createElement("span"); - let top = getElementTop(node); - navMark.dataset.top = top; - navMark.dataset.content = word.showWords; - navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; - navMark.style.background = node.style.background || "yellow"; - navMark.addEventListener("click", e => { - e.stopPropagation(); - e.preventDefault(); - self.focusIndex = index; - self.focusHighlight(node); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); - self.navPointer.style.display = ""; - self.navPointer.style.top = navMark.offsetTop + 18 + "px"; - return false; - }, true); - self.navMarks.appendChild(navMark); - - skip = 1; - } - } - } else if (!word.link && node.nodeType == 3 && node.data && (typeof word.hideParent !== 'undefined' || /^(BODY|#document\-fragment)$/i.test(pa.nodeName) || pa.offsetParent || (pa.scrollHeight && pa.scrollWidth))) { - if (word.isRe) { - let wordMatch = node.data.match(new RegExp(word.content, word.reCase)); - if (wordMatch) { - let content = wordMatch[0] || wordMatch; - len = content.length; - pos = node.data.indexOf(content); - } - } else { - if (_unsafeWindow.searchJumperPinyin) { - let pinyin = _unsafeWindow.searchJumperPinyin(node.data, word.content); - if (pinyin.matched) { - len = pinyin.len; - pos = pinyin.pos; - } else pos = -1; - } else { - len = word.content.length; - pos = node.data.toUpperCase().indexOf(word.content.toUpperCase()); - } - if (pos >= 0 && /^[a-z]+$/i.test(word.content)) { - if (pos !== 0 && /[a-z]/i.test(node.data[pos - 1])) { - pos = -1; - } - if (pos + word.content.length !== node.data.length && /[a-z]/i.test(node.data[pos + word.content.length])) { - pos = -1; - } - } - } - if (pos >= 0) { - if (typeof word.hideParent !== 'undefined') { - let parentDepth = word.hideParent; - let parent = node.parentElement; - while(parentDepth-- > 0 && parent) { - parent = parent.parentElement; - } - if (parent) { - parent.innerHTML = createHTML(""); - parent.dataset.content = word.showWords; - parent.classList.add("searchJumper-hide"); - return 0; - } - } - let curList = self.marks[word.showWords]; - let index = curList.length; - spannode = document.createElement("mark"); - spannode.className = "searchJumper"; - if (word.title) spannode.title = JSON.parse('"' + word.title + '"'); - if (word.popup) { - spannode.addEventListener("mouseenter", e => { - if (targetElement != spannode || !searchBar.funcKeyCall) { - targetElement = spannode; - searchBar.showInPage(true, e); - } - }); - } - spannode.style.cssText = word.style; - spannode.addEventListener("click", e => { - if (!e.altKey) return; - e.stopPropagation(); - e.preventDefault(); - return false; - }); - spannode.dataset.content = word.showWords; - spannode.addEventListener("mousedown", e => { - if (!e.altKey) return; - let target; - if (e.button === 0) { - if (index != curList.length - 1) { - self.focusIndex = index + 1; - } else self.focusIndex = 0; - } else if (e.button === 2){ - if (index != 0) { - self.focusIndex = index - 1; - } else self.focusIndex = curList.length - 1; - } - target = curList[self.focusIndex]; - self.focusHighlight(target); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), self.focusIndex, curList.length); - self.focusText = word.showWords; - }); - middlebit = node.splitText(pos); - middlebit.splitText(len); - middleclone = middlebit.cloneNode(true); - spannode.appendChild(middleclone); - middlebit.parentNode.replaceChild(spannode, middlebit); - self.marks[word.showWords].push(spannode); - - let navMark = document.createElement("span"); - let top = getElementTop(spannode); - navMark.dataset.top = top; - navMark.dataset.content = word.showWords; - navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; - navMark.style.background = spannode.style.background || "yellow"; - navMark.addEventListener("click", e => { - e.stopPropagation(); - e.preventDefault(); - self.focusIndex = index; - self.focusHighlight(spannode); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); - self.navPointer.style.display = ""; - self.navPointer.style.top = navMark.offsetTop + 18 + "px"; - return false; - }, true); - self.navMarks.appendChild(navMark); - - skip = 1; - } - } else if ((!root || node === ele) && - (node.nodeType == 1 || node.nodeType == 11) && - node.childNodes && - !/^(SCRIPT|STYLE|MARK)$/i.test(node.nodeName) && - node.ariaHidden != 'true' && - node.role != "search" && - (!node.hasAttribute || node.hasAttribute('jsname') == false)) { + } + if (checkChildren && + (!root || + node === ele + ) && + (node.nodeType == 1 || + node.nodeType == 11 + ) && + node.childNodes && + !/^(SCRIPT|STYLE|MARK|SVG)$/i.test(node.nodeName) && + (!word.init || + (node.ariaHidden != 'true' && + node.role != "search" && + (!node.hasAttribute || + node.hasAttribute('jsname') == false + ) + ) + ) + ) { if (!searchingPre && (node.nodeName.toUpperCase() === "PRE" || node.nodeName.toUpperCase() === "CODE")) { preEles.push(node); } else { From ab2ebb33cce9fe68de93a4b6930ae3c148cf373d Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 6 Nov 2023 08:33:07 +0800 Subject: [PATCH 256/812] Update BingBgForBaidu.user.js --- BingBgForBaidu/BingBgForBaidu.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BingBgForBaidu/BingBgForBaidu.user.js b/BingBgForBaidu/BingBgForBaidu.user.js index 35c75b127f7..1c1e51267e0 100644 --- a/BingBgForBaidu/BingBgForBaidu.user.js +++ b/BingBgForBaidu/BingBgForBaidu.user.js @@ -2,7 +2,7 @@ // @name 百Bing图 // @name:en BingBgForBaidu // @namespace hoothin -// @version 2.3.36 +// @version 2.3.37 // @description 给百度首页换上Bing的背景图,并添加背景图链接与日历组件 // @description:en Just change the background image of baidu.com to bing.com // @author hoothin @@ -126,7 +126,7 @@ var skinContainer=document.querySelector(".s-skin-container"); if(!skinContainer){ skinContainer=document.getElementsByTagName("body")[0]; - GM_addStyle(".s-top-right .ai-entry-right-nologin{right:auto;}.hot-refresh{padding-bottom:7px;}.hot-title>div,.hot-refresh{background-color: #f0f8ff95; border-radius: 3px 3px 0 0}.s-hotsearch-content{position: absolute; background-color: #f0f8ff95; border-radius: 0 0 5px 5px;padding-right: 2px;}.s_ipt{margin:0!important;}.s_ipt_wr{border-radius: 10px 4px 4px 10px;border-radius: 10px 0 0 10px;background: #fff!important;}#qrcodeCon{display:none}body{position:fixed;_position:absolute;top:0;left:0;height:100%;width:100%;min-width:1000px;z-index:-10;background-position:center 0;background-repeat:no-repeat;background-size:cover;-webkit-background-size:cover;-o-background-size:cover;zoom:1;}"); + GM_addStyle(".s-top-right .ai-entry-right-nologin,.s-top-right .operate-wrapper-nologin{right:362px;}.hot-refresh{padding-bottom:7px;}.hot-title>div,.hot-refresh{background-color: #f0f8ff95; border-radius: 3px 3px 0 0}.s-hotsearch-content{position: absolute; background-color: #f0f8ff95; border-radius: 0 0 5px 5px;padding-right: 2px;}.s_ipt{margin:0!important;}.s_ipt_wr{border-radius: 10px 4px 4px 10px;border-radius: 10px 0 0 10px;background: #fff!important;}#qrcodeCon{display:none}body{position:fixed;_position:absolute;top:0;left:0;height:100%;width:100%;min-width:1000px;z-index:-10;background-position:center 0;background-repeat:no-repeat;background-size:cover;-webkit-background-size:cover;-o-background-size:cover;zoom:1;}"); var inputsu=document.querySelector("input#su"); var clickHandler=e=>{ if(skinContainer)skinContainer.style.backgroundImage=""; From 78e01e8d575ca6d4850e0684ea0dea7af13a765a Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 6 Nov 2023 01:53:30 +0000 Subject: [PATCH 257/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 2c88182af25..16897795ebb 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86182", + "data": { + "insertBefore": "", + "pageElement": "//div[ul[@class='pagination']]/preceding-sibling::*[@class='view-content' or self::ol[contains(concat(' ', @class, ' '), ' search-results ')]]/*", + "nextLink": "//li[contains(concat(' ', @class, ' '), ' next ')]/a", + "url": "^https://netshop\\.impress\\.co\\.jp/", + "exampleUrl": "https://netshop.impress.co.jp/taxonomy/term/2896\r\nhttps://netshop.impress.co.jp/search/site/AI" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ネットショップ担当者フォーラム", + "created_at": "2023-11-05T16:15:24+09:00", + "updated_at": "2023-11-05T16:15:24+09:00" +}, { "resource_url": "http://wedata.net/items/86181", "data": { From 3dd8d6d5ac24747b1c079a95ad81b9a1dd111b19 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 6 Nov 2023 19:41:51 +0800 Subject: [PATCH 258/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 268 +++++++++++++++++++----------- 1 file changed, 168 insertions(+), 100 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 16d651e3e54..8d0315667e5 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.25 +// @version 1.6.30.26 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1101,8 +1101,12 @@ function inputActive(doc) { let activeEl = getActiveElement(doc); if (activeEl && - (/INPUT|TEXTAREA/i.test(activeEl.nodeName) || - activeEl.contentEditable == 'true')) { + ((/INPUT|TEXTAREA/i.test(activeEl.nodeName) && + activeEl.getAttribute("aria-readonly") != "true" + ) || + activeEl.contentEditable == 'true' + ) + ) { return true; } else { while (activeEl && activeEl.nodeName) { @@ -3004,6 +3008,7 @@ this.rightSizeChange = searchInputDiv.querySelector("#rightSizeChange"); this.filterGlob = searchInputDiv.querySelector("#filterGlob"); this.suggestDatalist = searchInputDiv.querySelector("#suggest"); + this.fakeTextareas = {}; } showInPageSearch() { @@ -3815,13 +3820,13 @@ }); } let wordContent = this.modifyFrame.querySelector("[name='wordContent']"), - wordStyle = this.modifyFrame.querySelector("[name='wordStyle']"), - wordTitle = this.modifyFrame.querySelector("[name='wordTitle']"), - wordRange = this.modifyFrame.querySelector("[name='wordRange']"), - wordHide = this.modifyFrame.querySelector("[name='wordHide']"), - wordIsRe = this.modifyFrame.querySelector("#searchJumperModify-re"), - wordReCase = this.modifyFrame.querySelector("#searchJumperModify-case"), - wordLink = this.modifyFrame.querySelector("#searchJumperModify-link"); + wordStyle = this.modifyFrame.querySelector("[name='wordStyle']"), + wordTitle = this.modifyFrame.querySelector("[name='wordTitle']"), + wordRange = this.modifyFrame.querySelector("[name='wordRange']"), + wordHide = this.modifyFrame.querySelector("[name='wordHide']"), + wordIsRe = this.modifyFrame.querySelector("#searchJumperModify-re"), + wordReCase = this.modifyFrame.querySelector("#searchJumperModify-case"), + wordLink = this.modifyFrame.querySelector("#searchJumperModify-link"); if (this.addNew) { wordContent.value = ""; @@ -3954,9 +3959,12 @@ this.marks[word.showWords].forEach(mark => { if (mark.parentNode) { - if (!/^MARK$/i.test(mark.nodeName)) { + if (mark.dataset.block) { + mark.parentNode && mark.parentNode.removeChild(mark); + } else if (!/^MARK$/i.test(mark.nodeName)) { mark.classList.remove("searchJumper"); - mark.style.cssText = ""; + mark.style.cssText = mark.dataset.css || ""; + delete mark.dataset.css; } else { let newNode = document.createTextNode(mark.innerText); mark.parentNode.replaceChild(newNode, mark); @@ -4048,12 +4056,15 @@ for (const entry of entries) { if (entry.target === ele && entry.intersectionRatio >= 0.90) { observer.disconnect(); - resolve(); + setTimeout(() => { + resolve(); + }, 300); } } } ).observe(ele) }); + if (this.focusMark != ele) return; let rect = ele.getBoundingClientRect(); this.wPosBar.style.top = rect.top + document.documentElement.scrollTop + getBody(document).scrollTop + "px"; this.hPosBar.style.left = rect.left + "px"; @@ -4187,9 +4198,12 @@ if (!markList) return; markList.forEach(mark => { if (!mark.parentNode) return; - if (!/^MARK$/i.test(mark.nodeName)) { + if (mark.dataset.block) { + mark.parentNode && mark.parentNode.removeChild(mark); + } else if (!/^MARK$/i.test(mark.nodeName)) { mark.classList.remove("searchJumper"); - mark.style.cssText = ""; + mark.style.cssText = mark.dataset.css || ""; + delete mark.dataset.css; } else { let newNode = document.createTextNode(mark.innerText); mark.parentNode.replaceChild(newNode, mark); @@ -4249,7 +4263,10 @@ } }); } - if (word.style) node.style.cssText = word.style; + if (!node.dataset.css) node.dataset.css = node.style.cssText; + if (word.style) { + node.style.cssText += word.style; + } node.addEventListener("click", e => { if (!e.altKey) return; e.stopPropagation(); @@ -4293,99 +4310,150 @@ return false; }, true); self.navMarks.appendChild(navMark); - - skip = 1; } } } } else { let blockValue = ""; - if (node.nodeType == 1) { - if (node.value && /^(INPUT|TEXTAREA)$/i.test(node.nodeName) && !/^(hidden|file|password|radio|range|checkbox|)$/i.test(node.type) && !/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id) && node.scrollHeight < 200) { - blockValue = node.value; - } else if (node.offsetParent && !node.innerText) { - let before = getComputedStyle(node, ':before').getPropertyValue('content'); - let after = getComputedStyle(node, ':after').getPropertyValue('content'); - if (before && before !== "none" && before !== '""') { - blockValue = before; - } - if (after && after !== "none" && after !== '""') { - blockValue += after; - } - } + if (node.nodeType == 1 && node.value && node.offsetParent && !/^(hidden|file|password|radio|range|checkbox|)$/i.test(node.type) && (!word.init || (!/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id)))) { + blockValue = node.value; } if (blockValue) { checkChildren = false; let wordMatch = false; - if (word.isRe) { - wordMatch = blockValue.match(new RegExp(word.content, word.reCase)); - } else { - if (_unsafeWindow.searchJumperPinyin) { - let pinyin = _unsafeWindow.searchJumperPinyin(blockValue, word.content); - if (pinyin.matched) { - len = pinyin.len; - pos = pinyin.pos; - } else pos = -1; + let lastIndex = 0; + let fakeTextarea = self.fakeTextareas[node]; + while (true) { + if (word.isRe) { + wordMatch = blockValue.match(new RegExp(word.content, word.reCase)); + if (wordMatch) { + pos = wordMatch.index; + wordMatch = wordMatch[0]; + } } else { - len = word.content.length; - pos = blockValue.toUpperCase().indexOf(word.content.toUpperCase()); - } - if (word.init && pos >= 0 && /^[a-z]+$/i.test(word.content)) { - if (pos !== 0 && /[a-z]/i.test(blockValue[pos - 1])) { - pos = -1; + if (_unsafeWindow.searchJumperPinyin) { + let pinyin = _unsafeWindow.searchJumperPinyin(blockValue, word.content); + if (pinyin.matched) { + len = pinyin.len; + pos = pinyin.pos; + } else pos = -1; + } else { + len = word.content.length; + pos = blockValue.toUpperCase().indexOf(word.content.toUpperCase()); } - if (pos + word.content.length !== blockValue.length && /[a-z]/i.test(blockValue[pos + word.content.length])) { - pos = -1; + if (word.init && pos >= 0 && /^[a-z]+$/i.test(word.content)) { + if (pos !== 0 && /[a-z]/i.test(blockValue[pos - 1])) { + pos = -1; + } + if (pos + word.content.length !== blockValue.length && /[a-z]/i.test(blockValue[pos + len])) { + pos = -1; + } } + wordMatch = (pos >= 0 ? blockValue.slice(pos, pos + len) : false); } - wordMatch = (pos >= 0); - } - if (wordMatch) { - if (typeof word.hideParent !== 'undefined') { - let parentDepth = word.hideParent; - let parent = node.parentElement; - while(parentDepth-- > 0 && parent) { - parent = parent.parentElement; - } - if (parent) { - parent.innerHTML = createHTML(""); - parent.dataset.content = word.showWords; - parent.classList.add("searchJumper-hide"); - return 0; + if (wordMatch) { + findTextInBlock(wordMatch, lastIndex + pos); + lastIndex += (pos + wordMatch.length); + blockValue = blockValue.slice(pos + wordMatch.length); + } else break; + } + function findTextInBlock(curWord, pos) { + if (curWord) { + if (!fakeTextarea) { + fakeTextarea = document.createElement("pre"); + fakeTextarea.className = "searchJumper"; + let textNode = document.createTextNode(blockValue); + fakeTextarea.appendChild(textNode); + + let name, rstyle =/^(number|string)$/; + let cssText = [], sStyle = node.style; + + for (name in sStyle) { + if (!/^(content|outline|outlineWidth)$/.test(name)) { + let val = getComputedStyle(node)[name]; + if (val !=='' && rstyle.test(typeof val)) { + name = name.replace(/([A-Z])/g, "-$1").toLowerCase(); + cssText.push(name); + cssText.push(':'); + cssText.push(val); + cssText.push(';'); + }; + }; + }; + cssText = cssText.join(''); + fakeTextarea.style.cssText = cssText; + fakeTextarea.style.position = "fixed"; + fakeTextarea.style.left = "0px"; + fakeTextarea.style.top = "0px"; + self.fakeTextareas[node] = fakeTextarea; } - } else { - let curList = self.marks[word.showWords]; - let index = curList.length; - node.classList.add("searchJumper"); - if (word.title) node.title = JSON.parse('"' + word.title + '"'); - if (word.style) node.style.cssText = word.style.replace("background:", "border:solid 1px "); - node.style.color = ""; - node.dataset.content = word.showWords; + document.body.appendChild(fakeTextarea); + let range = document.createRange(); + range.setStart(fakeTextarea.firstChild, pos); + range.setEnd(fakeTextarea.firstChild, pos + curWord.length); + let rect = range.getBoundingClientRect(); + document.body.removeChild(fakeTextarea); - self.marks[word.showWords].push(node); - let navMark = document.createElement("span"); - let top = getElementTop(node); - navMark.dataset.top = top; - navMark.dataset.content = word.showWords; - navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; - navMark.style.background = node.style.background || "yellow"; - navMark.addEventListener("click", e => { - e.stopPropagation(); - e.preventDefault(); - self.focusIndex = index; - self.focusHighlight(node); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); - self.navPointer.style.display = ""; - self.navPointer.style.top = navMark.offsetTop + 18 + "px"; - return false; - }, true); - self.navMarks.appendChild(navMark); - skip = 1; + if (typeof word.hideParent !== 'undefined') { + let parentDepth = word.hideParent; + let parent = node.parentElement; + while(parentDepth-- > 0 && parent) { + parent = parent.parentElement; + } + if (parent) { + parent.innerHTML = createHTML(""); + parent.dataset.content = word.showWords; + parent.classList.add("searchJumper-hide"); + return 0; + } + } else { + let curList = self.marks[word.showWords]; + let index = curList.length; + + let spannode = document.createElement("mark"); + spannode.className = "searchJumper"; + spannode.dataset.block = true; + if (word.title) spannode.title = JSON.parse('"' + word.title + '"'); + spannode.style.cssText = word.style; + spannode.dataset.content = word.showWords; + spannode.innerText = curWord; + document.body.appendChild(spannode); + spannode.style.fontSize = fakeTextarea.style.fontSize; + spannode.style.fontFamily = fakeTextarea.style.fontFamily; + spannode.style.lineHeight = fakeTextarea.style.lineHeight; + spannode.style.position = "absolute"; + spannode.style.zIndex = "9"; + spannode.style.pointerEvents = "none"; + let textareaLoc = node.getBoundingClientRect(); + spannode.style.left = rect.left + textareaLoc.left + "px"; + spannode.style.top = rect.top + textareaLoc.top + "px"; + + + self.marks[word.showWords].push(spannode); + + let navMark = document.createElement("span"); + let top = getElementTop(spannode); + navMark.dataset.top = top; + navMark.dataset.content = word.showWords; + navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; + navMark.style.background = spannode.style.background || "yellow"; + navMark.addEventListener("click", e => { + e.stopPropagation(); + e.preventDefault(); + self.focusIndex = index; + self.focusHighlight(spannode); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); + self.navPointer.style.display = ""; + self.navPointer.style.top = navMark.offsetTop + 18 + "px"; + return false; + }, true); + self.navMarks.appendChild(navMark); + } } } - } else if (node.nodeType == 3 && node.data && (typeof word.hideParent !== 'undefined' || /^(BODY|#document\-fragment)$/i.test(pa.nodeName) || pa.offsetParent || (pa.scrollHeight && pa.scrollWidth))) { + } else if (node.nodeType == 3 && node.data && (pa.offsetParent || (pa.scrollHeight && pa.scrollWidth) || word.hideParent || word.hideParent === 0 || !pa.parentNode)) { checkChildren = false; if (word.isRe) { let wordMatch = node.data.match(new RegExp(word.content, word.reCase)); @@ -4409,7 +4477,7 @@ if (pos !== 0 && /[a-z]/i.test(node.data[pos - 1])) { pos = -1; } - if (pos + word.content.length !== node.data.length && /[a-z]/i.test(node.data[pos + word.content.length])) { + if (pos + word.content.length !== node.data.length && /[a-z]/i.test(node.data[pos + len])) { pos = -1; } } @@ -4503,7 +4571,7 @@ node.nodeType == 11 ) && node.childNodes && - !/^(SCRIPT|STYLE|MARK|SVG)$/i.test(node.nodeName) && + !/^(SCRIPT|STYLE|MARK|SVG|TEXTAREA)$/i.test(node.nodeName) && (!word.init || (node.ariaHidden != 'true' && node.role != "search" && @@ -4513,7 +4581,7 @@ ) ) ) { - if (!searchingPre && (node.nodeName.toUpperCase() === "PRE" || node.nodeName.toUpperCase() === "CODE")) { + if (!searchingPre && /^(PRE|CODE)$/i.test(node.nodeName)) { preEles.push(node); } else { for (var child = 0; child < node.childNodes.length; ++child) { @@ -4585,7 +4653,7 @@ m.style.top = m.dataset.top / document.documentElement.scrollHeight * 100 + "%"; }); this.navMarks.style.display = ""; - }, 500); + }, 1000); } checkCharacterData(target) { @@ -6348,7 +6416,7 @@ listPos(ele, list) { //if (this.preList) { - //this.preList.style.visibility = "hidden"; + //this.preList.style.visibility = "hidden"; //} this.initList(list); list.style = ""; @@ -6414,7 +6482,7 @@ clingPos(clingEle, target, close) { //if (this.preList) { - //this.preList.style.visibility = "hidden"; + //this.preList.style.visibility = "hidden"; //} let ew = clingEle.clientWidth; let eh = clingEle.clientHeight; @@ -9815,7 +9883,7 @@ searchBar.bar.addEventListener(getSupportWheelEventName(), e => { if (e.target.parentNode && (e.target.parentNode.className == "sitelistCon" || - (e.target.parentNode.parentNode && e.target.parentNode.parentNode.className == "sitelistCon"))) return; + (e.target.parentNode.parentNode && e.target.parentNode.parentNode.className == "sitelistCon"))) return; let targetClassList = searchBar.con.classList; if (!targetClassList.contains('search-jumper-scroll')) return; if (targetClassList.contains('search-jumper-left') || @@ -9864,9 +9932,9 @@ } }); if (searchData.prefConfig.switchSitesPreKey || - searchData.prefConfig.switchSitesNextKey || - searchData.prefConfig.shortcutKey || - searchData.prefConfig.showAllShortcutKey) { + searchData.prefConfig.switchSitesNextKey || + searchData.prefConfig.shortcutKey || + searchData.prefConfig.showAllShortcutKey) { let inputing = -1, key = false; let checkShortcutEnable = (e, _alt, _ctrl, _shift, _meta, _key) => { if ((_alt && !e.altKey) || From f4359c38ea5edb407180b732c1dd34b7c0aca601 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 6 Nov 2023 19:59:23 +0800 Subject: [PATCH 259/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 29c6374d4dc..81b8eba416a 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.6 +// @version 0.6.7 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -126,21 +126,6 @@ var viewportBottom = viewportTop + $(window).height(); return elementBottom > viewportTop && elementTop < viewportBottom; }; - var $tLike = $(".t_like"); - if ($tLike.length) { - var $tLikeClone = $tLike.clone(); - if (!$tLike.isInViewport()) { - $("#conttpc").prepend($tLikeClone); - } - - $(window).on("resize scroll", function() { - if ($tLike.isInViewport()) { - if ($tLikeClone.parent().length) $tLikeClone.detach(); - } else { - if ($tLikeClone.parent().length == 0) $("#conttpc").prepend($tLikeClone); - } - }); - } // 种子链接转磁力链 @@ -165,6 +150,21 @@ var replyStr = defaultReply; helper.getScript('//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js', e => { + var $tLike = $(".t_like"); + if ($tLike.length) { + var $tLikeClone = $tLike.clone(); + if (!$tLike.isInViewport()) { + $("#conttpc").prepend($tLikeClone); + } + + $(window).on("resize scroll", function() { + if ($tLike.isInViewport()) { + if ($tLikeClone.parent().length) $tLikeClone.detach(); + } else { + if ($tLikeClone.parent().length == 0) $("#conttpc").prepend($tLikeClone); + } + }); + } var lastReplyTime = $.cookie('lastReplyTime'); var customReplyStr = $.cookie('customReplyStr'); var isCheckIn = document.title.indexOf("打卡签到") !== -1; From e51a32b6b3df2df764c80a6c59eeb10d180d67d9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 6 Nov 2023 20:48:26 +0800 Subject: [PATCH 260/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 8d0315667e5..eb85c55222e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.26 +// @version 1.6.30.27 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4323,6 +4323,10 @@ let wordMatch = false; let lastIndex = 0; let fakeTextarea = self.fakeTextareas[node]; + let nodeStyle = getComputedStyle(node); + let textareaLoc = node.getBoundingClientRect(); + let baseLeft = document.documentElement.scrollLeft + getBody(document).scrollLeft + textareaLoc.left + parseInt(nodeStyle.marginLeft); + let baseTop = document.documentElement.scrollTop + getBody(document).scrollTop + textareaLoc.top + parseInt(nodeStyle.marginTop); while (true) { if (word.isRe) { wordMatch = blockValue.match(new RegExp(word.content, word.reCase)); @@ -4370,7 +4374,7 @@ for (name in sStyle) { if (!/^(content|outline|outlineWidth)$/.test(name)) { - let val = getComputedStyle(node)[name]; + let val = nodeStyle[name]; if (val !=='' && rstyle.test(typeof val)) { name = name.replace(/([A-Z])/g, "-$1").toLowerCase(); cssText.push(name); @@ -4426,9 +4430,8 @@ spannode.style.position = "absolute"; spannode.style.zIndex = "9"; spannode.style.pointerEvents = "none"; - let textareaLoc = node.getBoundingClientRect(); - spannode.style.left = rect.left + textareaLoc.left + "px"; - spannode.style.top = rect.top + textareaLoc.top + "px"; + spannode.style.left = rect.left + baseLeft + "px"; + spannode.style.top = rect.top + baseTop + "px"; self.marks[word.showWords].push(spannode); From 26bda8e3e8274af9b7fa8d2c47df60613fdefde1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 7 Nov 2023 08:22:13 +0800 Subject: [PATCH 261/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index eb85c55222e..14960f0ed55 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.27 +// @version 1.6.30.28 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4221,7 +4221,8 @@ this.curHighlightWords = []; return; } - if (words === "insert") { + let insert = (words === "insert"); + if (insert) { words = this.curHighlightWords; this.refreshNavMarks(); } else { @@ -4323,6 +4324,7 @@ let wordMatch = false; let lastIndex = 0; let fakeTextarea = self.fakeTextareas[node]; + if (insert && fakeTextarea) return 0; let nodeStyle = getComputedStyle(node); let textareaLoc = node.getBoundingClientRect(); let baseLeft = document.documentElement.scrollLeft + getBody(document).scrollLeft + textareaLoc.left + parseInt(nodeStyle.marginLeft); @@ -5135,7 +5137,8 @@ break; case 13://回车 { - let spans = this.submitInPageWords(); + //let spans = this.submitInPageWords(); + let spans = this.searchJumperInPageInput.value ? this.submitInPageWords() : []; if (spans && spans.length > 0) { let lastSpan = spans.pop(); if (this.currentSearchInPageLockWords) { From 7ab0c01a341144e916115faf844072126ff5441b Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 7 Nov 2023 11:02:50 +0800 Subject: [PATCH 262/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 129 +++++++++++++++++------------- 1 file changed, 74 insertions(+), 55 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 14960f0ed55..11bf8cbbc16 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.28 +// @version 1.6.30.29 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2453,7 +2453,8 @@ } .search-jumper-input svg:hover, .searchJumperNavBar svg:hover, - .search-jumper-input>.closeBtn:hover { + .search-jumper-input>.closeBtn:hover, + .searchJumperNavBar>div.minNavBtn:hover { -webkit-transform:scale(1.2); -moz-transform:scale(1.2); transform:scale(1.2); @@ -2558,6 +2559,10 @@ pointer-events: none; font-size: 0px; opacity: 0; + transition: width 0.3s; + } + .searchJumperNavBar:hover { + width: 25px; } .searchJumperNavBar.sjNavShow { pointer-events: all; @@ -2572,6 +2577,41 @@ fill: white; cursor: pointer; } + .searchJumperNavBar>.minNavBtn { + font-size: 12px; + opacity: 0.1; + background: white; + border-radius: 10px; + width: 16px; + height: 16px; + font-weight: bold; + display: inline-block; + cursor: pointer; + transition: 0.25s opacity ease, 0.25s transform ease; + pointer-events: all; + } + .searchJumperNavBar:hover>.minNavBtn { + opacity: 0.8; + } + #search-jumper>.searchJumperNavBar.minimize { + background: transparent; + pointer-events: none; + } + .searchJumperNavBar.minimize>.closeNavBtn, + .searchJumperNavBar.minimize>.navPointer, + .searchJumperNavBar.minimize>#navMarks { + display: none; + } + .searchJumperNavBar.minimize>.minNavBtn { + opacity: 1; + box-shadow: 0px 0px 3px 1px #000; + margin-left: -50px; + margin-top: 5px; + } + .search-jumper-right>.searchJumperNavBar.minimize>.minNavBtn { + margin-left: unset; + margin-right: -50px; + } #navMarks+.navPointer { pointer-events: none; position: absolute; @@ -2586,7 +2626,7 @@ transition: top 0.25s ease; } #navMarks { - height: calc(100% - 16px); + height: calc(100% - 32px); width: 100%; position: absolute; } @@ -2595,10 +2635,11 @@ width: 100%; position: absolute; border: 1px solid #999999; - min-height: 3px; + min-height: 5px; box-sizing: border-box; left: 0; border-radius: 0px!important; + cursor: alias; } mark.searchJumper, a.searchJumper { @@ -2921,6 +2962,7 @@ searchJumperNavBar.style.display = "none"; searchJumperNavBar.innerHTML = createHTML(` Close navigation${closePath} +
-
`); @@ -2936,6 +2978,7 @@ this.navMarks = searchJumperNavBar.querySelector("#navMarks"); this.closeNavBtn = searchJumperNavBar.querySelector(".closeNavBtn"); + this.minNavBtn = searchJumperNavBar.querySelector(".minNavBtn"); this.searchJumperNavBar = searchJumperNavBar; this.navPointer = searchJumperNavBar.querySelector(".navPointer"); this.navPointer.style.display = "none"; @@ -4170,6 +4213,27 @@ return `${background}${addCssText}`; } + createNavMark(node, word, index, curList) { + let self = this; + let navMark = document.createElement("span"); + let top = getElementTop(node); + navMark.dataset.top = top; + navMark.dataset.content = word.showWords; + navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; + navMark.style.background = node.style.background || "yellow"; + navMark.addEventListener("click", e => { + e.stopPropagation(); + e.preventDefault(); + self.focusIndex = index; + self.focusHighlight(node); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); + self.navPointer.style.display = ""; + self.navPointer.style.top = navMark.offsetTop + 33 + "px"; + return false; + }, true); + self.navMarks.appendChild(navMark); + } + highlight(words, ele, root) { if (!words && (!this.curHighlightWords || this.curHighlightWords.length === 0)) return; if (!ele) { @@ -4294,23 +4358,7 @@ }); self.marks[word.showWords].push(node); - let navMark = document.createElement("span"); - let top = getElementTop(node); - navMark.dataset.top = top; - navMark.dataset.content = word.showWords; - navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; - navMark.style.background = node.style.background || "yellow"; - navMark.addEventListener("click", e => { - e.stopPropagation(); - e.preventDefault(); - self.focusIndex = index; - self.focusHighlight(node); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); - self.navPointer.style.display = ""; - self.navPointer.style.top = navMark.offsetTop + 18 + "px"; - return false; - }, true); - self.navMarks.appendChild(navMark); + self.createNavMark(node, word, index, curList); } } } @@ -4438,23 +4486,7 @@ self.marks[word.showWords].push(spannode); - let navMark = document.createElement("span"); - let top = getElementTop(spannode); - navMark.dataset.top = top; - navMark.dataset.content = word.showWords; - navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; - navMark.style.background = spannode.style.background || "yellow"; - navMark.addEventListener("click", e => { - e.stopPropagation(); - e.preventDefault(); - self.focusIndex = index; - self.focusHighlight(spannode); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); - self.navPointer.style.display = ""; - self.navPointer.style.top = navMark.offsetTop + 18 + "px"; - return false; - }, true); - self.navMarks.appendChild(navMark); + self.createNavMark(spannode, word, index, curList); } } } @@ -4546,23 +4578,7 @@ middlebit.parentNode.replaceChild(spannode, middlebit); self.marks[word.showWords].push(spannode); - let navMark = document.createElement("span"); - let top = getElementTop(spannode); - navMark.dataset.top = top; - navMark.dataset.content = word.showWords; - navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; - navMark.style.background = spannode.style.background || "yellow"; - navMark.addEventListener("click", e => { - e.stopPropagation(); - e.preventDefault(); - self.focusIndex = index; - self.focusHighlight(spannode); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); - self.navPointer.style.display = ""; - self.navPointer.style.top = navMark.offsetTop + 18 + "px"; - return false; - }, true); - self.navMarks.appendChild(navMark); + self.createNavMark(spannode, word, index, curList); skip = 1; } @@ -5260,6 +5276,9 @@ this.setNav(false); } }); + this.minNavBtn.addEventListener("click", e => { + this.searchJumperNavBar.classList.toggle("minimize"); + }); this.navMarks.addEventListener("click", e => { let topPercent = e.offsetY / this.navMarks.clientHeight * 100; let sortedMarks = [].slice.call(this.navMarks.querySelectorAll("span")); From 94e28f102f4e15178833813bb3edda167c88f3cf Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 7 Nov 2023 13:27:29 +0800 Subject: [PATCH 263/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 11bf8cbbc16..65c4c25a83d 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.29 +// @version 1.6.30.30 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4088,6 +4088,7 @@ this.wPosBar.style.animationName = ""; this.hPosBar.style.animationName = ""; + let self = this; setTimeout(async () => { ele.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); ele.dataset.current = true; @@ -4099,18 +4100,29 @@ for (const entry of entries) { if (entry.target === ele && entry.intersectionRatio >= 0.90) { observer.disconnect(); - setTimeout(() => { - resolve(); - }, 300); + resolve(); } } } ).observe(ele) }); - if (this.focusMark != ele) return; - let rect = ele.getBoundingClientRect(); - this.wPosBar.style.top = rect.top + document.documentElement.scrollTop + getBody(document).scrollTop + "px"; - this.hPosBar.style.left = rect.left + "px"; + function fixPosBar() { + if (self.focusMark != ele) return true; + let rect = ele.getBoundingClientRect(); + self.wPosBar.style.top = rect.top + document.documentElement.scrollTop + getBody(document).scrollTop + "px"; + self.hPosBar.style.left = rect.left + "px"; + return false; + } + if (fixPosBar()) return; + setTimeout(() => { + if (fixPosBar()) return; + setTimeout(() => { + if (fixPosBar()) return; + setTimeout(() => { + fixPosBar(); + }, 300); + }, 200); + }, 100); }, 0); } From 37f535552f8b8fd06ecd37d32220316b682c16f3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 8 Nov 2023 18:39:36 +0800 Subject: [PATCH 264/812] Word mode --- SearchJumper/searchJumper.user.js | 471 ++++++++++++++++++++---------- 1 file changed, 313 insertions(+), 158 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 65c4c25a83d..363e9f2d890 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.6.30.30 +// @version 1.7.1 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -498,6 +498,7 @@ editBtn: '编辑查找文字', emptyBtn: '清空查找文字', copyInPageBtn: '复制查找文字', + wordModeBtn: '单词模式', copyEleBtn: '复制选中元素', maxEleBtn: '展开选中元素', minEleBtn: '收起选中元素', @@ -601,6 +602,7 @@ editBtn: '編輯查找文字', emptyBtn: '清空查找文字', copyInPageBtn: '複製查找文字', + wordModeBtn: '單詞模式', copyEleBtn: '複製選中元素', maxEleBtn: '展開選中元素', minEleBtn: '收起選中元素', @@ -703,6 +705,7 @@ editBtn: 'Edit search text', emptyBtn: 'Empty search text', copyInPageBtn: 'Copy search text', + wordModeBtn: 'Word mode', copyEleBtn: 'Copy selected elements', maxEleBtn: 'Expand selected elements', minEleBtn: 'Collapse selected elements', @@ -1639,7 +1642,7 @@ } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type { height: ${searchData.prefConfig.minPopup ? '24px' : 'auto'}!important; - width: ${searchData.prefConfig.minPopup ? 24 : (280 * this.scale)}px!important; + width: ${searchData.prefConfig.minPopup ? 24 : (40 * (searchData.prefConfig.numPerLine || 7) * this.scale)}px!important; max-width: unset; max-height: ${108 * this.scale + 10}px; flex-wrap: wrap!important; @@ -1673,7 +1676,7 @@ } #search-jumper.funcKeyCall:not(.targetInput)>.search-jumper-searchBar>.search-jumper-type { height: auto!important; - width: ${280 * this.scale}px!important; + width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.scale}px!important; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type>a.search-jumper-btn { visibility: visible; @@ -1687,7 +1690,7 @@ ` : ''} #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type:hover { height: auto!important; - width: ${280 * this.scale}px!important; + width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.scale}px!important; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type::-webkit-scrollbar { width: 0 !important; @@ -2581,6 +2584,7 @@ font-size: 12px; opacity: 0.1; background: white; + color: black; border-radius: 10px; width: 16px; height: 16px; @@ -3015,6 +3019,7 @@ ${i18n("addWord")} ${i18n("emptyBtn")} ${i18n("copyInPageBtn")} + ${i18n("wordModeBtn")} ${i18n("recoverBtn")} ${i18n("saveRuleBtn")} ${i18n("pinBtn")} @@ -3037,6 +3042,7 @@ this.editBtn = searchInputDiv.querySelector("#editBtn"); this.addWord = searchInputDiv.querySelector("#addWord"); this.recoverBtn = searchInputDiv.querySelector("#recoverBtn"); + this.wordModeBtn = searchInputDiv.querySelector("#wordModeBtn"); this.saveRuleBtn = searchInputDiv.querySelector("#saveRuleBtn"); this.pinBtn = searchInputDiv.querySelector("#pinBtn"); this.locBtn = searchInputDiv.querySelector("#locBtn"); @@ -3089,7 +3095,11 @@ } } if (this.splitSep) { - words.split(this.splitSep).forEach(word => { + let splitSep = this.splitSep; + if (this.wordModeBtn.classList.contains("checked")) { + splitSep = new RegExp(`[\\${this.splitSep} \.]`); + } + words.split(splitSep).forEach(word => { let oriWord = word; word = word.trim(); if (!word) return; @@ -3171,7 +3181,7 @@ } else { this.curWordIndex = 0; let word = (this.lockWords || "").replace(/^\$o/, "") + words; - result = [{content: word, isRe: false, reCase: "", title: "", style: "", init: init}]; + result = [{content: word, showWords: word, isRe: false, reCase: "", title: "", style: self.getHighlightStyle(self.curWordIndex, "", ""), init: init}]; } return result; } @@ -3189,7 +3199,7 @@ for (let i in this.highlightSpans) { let span = this.highlightSpans[i]; let curList = this.marks[i]; - this.setHighlightSpan(span, 0, curList ? curList.length : 1); + this.setHighlightSpan(span, 0, curList); } } return wordSpans; @@ -3199,7 +3209,7 @@ this.splitSep = words.substr(2, 1); } else if (words.indexOf("$o") === 0) { this.splitSep = null; - } else this.splitSep = " "; + } else this.splitSep = init ? " " : "◎"; this.curWordIndex = 0; } let targetWords = this.anylizeInPageWords(words, !!init); @@ -3257,7 +3267,7 @@ wordSpan.appendChild(removeBtn); let curList = this.marks[word.showWords]; - this.setHighlightSpan(wordSpan, -1, curList ? curList.length : 1); + this.setHighlightSpan(wordSpan, -1, curList); this.highlightSpans[word.showWords] = wordSpan; this.searchInPageLockWords.appendChild(wordSpan); @@ -4045,14 +4055,14 @@ } let newIndex = this.focusIndex; if (fw) { - while (!curList[newIndex].offsetParent) { + while (!curList[newIndex].offsetParent || curList[newIndex].dataset.type) { if (newIndex != curList.length - 1) { newIndex = newIndex + 1; } else newIndex = 0; if (newIndex == this.focusIndex) break; } } else { - while (!curList[newIndex].offsetParent) { + while (!curList[newIndex].offsetParent || curList[newIndex].dataset.type) { if (newIndex != 0) { newIndex = newIndex - 1; } else newIndex = curList.length - 1; @@ -4061,7 +4071,7 @@ } this.focusIndex = newIndex; this.focusHighlight(curList[this.focusIndex]); - this.setHighlightSpan(span, this.focusIndex, curList.length); + this.setHighlightSpan(span, this.focusIndex, curList); } focusHighlight(ele) { @@ -4094,35 +4104,17 @@ ele.dataset.current = true; this.wPosBar.style.animationName = "fadeit"; this.hPosBar.style.animationName = "fadeit"; - await new Promise(resolve => { - new IntersectionObserver( - (entries, observer) => { - for (const entry of entries) { - if (entry.target === ele && entry.intersectionRatio >= 0.90) { - observer.disconnect(); - resolve(); - } - } - } - ).observe(ele) - }); + let fixTimes = 0; function fixPosBar() { - if (self.focusMark != ele) return true; + if (self.focusMark != ele || ++fixTimes > 10) return; let rect = ele.getBoundingClientRect(); self.wPosBar.style.top = rect.top + document.documentElement.scrollTop + getBody(document).scrollTop + "px"; self.hPosBar.style.left = rect.left + "px"; - return false; - } - if (fixPosBar()) return; - setTimeout(() => { - if (fixPosBar()) return; setTimeout(() => { - if (fixPosBar()) return; - setTimeout(() => { - fixPosBar(); - }, 300); - }, 200); - }, 100); + fixPosBar(); + }, 150); + } + fixPosBar(); }, 0); } @@ -4131,7 +4123,7 @@ return this.highlightSpans[text]; } - setHighlightSpan(span, index, len) { + setHighlightSpan(span, index, list) { if (!span) return; let numEle = span.querySelector("em"); if (!numEle) { @@ -4139,6 +4131,13 @@ span.insertBefore(numEle, span.firstChild); } index++; + let len = 0; + if (list && list.length) { + len = 0; + list.forEach(e => { + if (!e.dataset.type) len++; + }); + } numEle.innerHTML = createHTML("[" + index + "/" + len + "]"); } @@ -4238,7 +4237,7 @@ e.preventDefault(); self.focusIndex = index; self.focusHighlight(node); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList.length); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), index, curList); self.navPointer.style.display = ""; self.navPointer.style.top = navMark.offsetTop + 33 + "px"; return false; @@ -4246,6 +4245,81 @@ self.navMarks.appendChild(navMark); } + anylizeDomWithTextPos(dom, result) { + if (!result) result = {text: "", data:{}}; + if (!dom || !dom.childNodes || !dom.childNodes.length) { + return result; + } + dom.childNodes.forEach(ele => { + if (ele.classList && ele.classList.contains("searchJumper")) { + const start = result.text.length; + result.text += "\n"; + result.data[start + 1] = {node: ele, text: "\n"}; + } else if (ele.offsetParent) { + result = this.anylizeDomWithTextPos(ele, result); + } else if (ele.nodeType === 3) { + let textData; + if (ele.parentNode.childNodes.length == 1) { + textData = ele.parentNode.innerText; + } else { + textData = ele.data.trim(); + } + if (!textData) return; + const start = result.text.length; + result.text += textData; + result.data[result.text.length - 1] = {node: ele, text: textData}; + } + }); + return result; + } + + createHighlightMark(word, index, curList) { + let self = this; + let spannode = document.createElement("mark"); + spannode.className = "searchJumper"; + if (word.title) spannode.title = JSON.parse('"' + word.title + '"'); + if (word.popup) { + spannode.addEventListener("mouseenter", e => { + if (targetElement != spannode || !searchBar.funcKeyCall) { + targetElement = spannode; + searchBar.showInPage(true, e); + } + }); + } + spannode.style.cssText = word.style; + spannode.addEventListener("click", e => { + if (!e.altKey) return; + e.stopPropagation(); + e.preventDefault(); + return false; + }); + spannode.dataset.content = word.showWords; + spannode.addEventListener("mousedown", e => { + if (!e.altKey) return; + let target; + let newIndex = index; + while (!target || target.dataset.type) { + if (e.button === 0) { + if (newIndex != curList.length - 1) { + newIndex++; + self.focusIndex = newIndex; + } else self.focusIndex = 0; + } else if (e.button === 2){ + if (newIndex != 0) { + newIndex--; + self.focusIndex = newIndex; + } else self.focusIndex = curList.length - 1; + } + target = curList[self.focusIndex]; + if (newIndex == index) break; + } + self.focusHighlight(target); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), self.focusIndex, curList); + self.focusText = word.showWords; + }); + return spannode; + } + highlight(words, ele, root) { if (!words && (!this.curHighlightWords || this.curHighlightWords.length === 0)) return; if (!ele) { @@ -4265,7 +4339,9 @@ }); return; } + if (ele.id == "searchJumperModifyWord") return; ele = ele || getBody(document); + let inWordMode = this.wordModeBtn.classList.contains("checked"); let preEles = []; let searchingPre = false; let self = this; @@ -4304,11 +4380,161 @@ } else { this.curHighlightWords = (this.curHighlightWords || []).concat(words); } - function searchWithinNode(node, word) { + function searchWithinNode(node, word, start) { let len, pos = -1, skip, spannode, middlebit, middleclone; skip = 0; let pa = node.parentNode; if (node.nodeType == 1 && node.classList && node.classList.contains("searchJumper")) return 0; + if (start && node.nodeType == 1) { + let domTextResult = self.anylizeDomWithTextPos(node); + let textRes = domTextResult.text; + let dataRes = domTextResult.data; + let index = 0; + let nodeAndPos = []; + let validWord = (word.init || inWordMode) && /^[a-z]+$/i.test(word.content); + function getNodePos(pos, len) { + let keys = Object.keys(domTextResult.data); + let findNodes = [], leftLen = len; + let pre = "", after = ""; + for (let i = 0; i < keys.length; i++) { + let end = keys[i]; + let curnode = domTextResult.data[end]; + if (pos > end || !curnode.text.trim()) continue; + let curpos = pos - (end - curnode.text.length) - 1; + let type = "full"; + if (curpos < 0) { + if (curnode.text.length < leftLen) { + type = "middle"; + } else { + type = "end"; + } + } else { + if (curnode.text.length - curpos < leftLen) { + type = "start"; + } + } + + if (validWord) { + if (type == "full") { + pre = curpos == 0 ? "\n" : curnode.text[curpos - 1]; + after = (curpos + leftLen) == curnode.text.length ? "\n" : curnode.text[curpos + leftLen]; + } else if (type == "start" && !pre) { + pre = curpos == 0 ? "\n" : curnode.text[curpos - 1]; + } else if ((type == "end" || type == "full") && !after) { + after = (curpos + leftLen) == curnode.text.length ? "\n" : curnode.text[curpos + leftLen]; + } + if (pre && after) { + if (/[a-z]/i.test(pre) || /[a-z]/i.test(after)) { + break; + } + } + } + + if (curpos < 0) curpos = 0; + let curlen = Math.min(leftLen, curnode.text.length - curpos); + let nodeInfo; + for (let j = 0; j < nodeAndPos.length; j++) { + if (nodeAndPos[j].node == curnode.node) { + nodeInfo = nodeAndPos[j]; + break; + } + } + if (!nodeInfo) nodeAndPos.push({node: curnode.node, text: curnode.text, match:[{pos: curpos, len: curlen, type: type}]}); + else nodeInfo.match.push({pos: curpos, len: curlen, type: type}); + leftLen -= curlen; + if (leftLen <= 0) break; + } + } + function getIndex() { + pos = -1; + if (word.isRe) { + let wordMatch = textRes.match(new RegExp(word.content, word.reCase)); + if (wordMatch) { + let content = wordMatch[0]; + len = content.length; + pos = wordMatch.index; + } + } else { + if (_unsafeWindow.searchJumperPinyin) { + let pinyin = _unsafeWindow.searchJumperPinyin(textRes, word.content); + if (pinyin.matched) { + len = pinyin.len; + pos = pinyin.pos; + } else pos = -1; + } else { + len = word.content.length; + pos = textRes.toUpperCase().indexOf(word.content.toUpperCase()); + } + } + if (pos > -1) { + textRes = textRes.slice(pos + len); + pos += index; + index = pos + len; + getNodePos(pos, len); + getIndex(); + } + } + getIndex(); + if (nodeAndPos.length) { + nodeAndPos.forEach(data => { + if (typeof word.hideParent !== 'undefined') { + let parentDepth = word.hideParent; + let parent = data.node.parentElement; + while(parentDepth-- > 0 && parent) { + parent = parent.parentElement; + } + if (parent && parent.classList && !parent.classList.contains("searchJumper-hide")) { + parent.innerHTML = createHTML(""); + parent.dataset.content = word.showWords; + parent.classList.add("searchJumper-hide"); + } + } else { + let curList = self.marks[word.showWords]; + let index = curList.length; + let spannode; + let newTextNodeCon = document.createDocumentFragment(); + let newTextNode = document.createTextNode(data.text); + newTextNodeCon.appendChild(newTextNode); + let matches = data.match.reverse(); + let spannodes = []; + matches.forEach(d => { + spannode = self.createHighlightMark(word, index, curList); + switch (d.type) { + case "start": + spannode.style.borderTopRightRadius = 0; + spannode.style.borderBottomRightRadius = 0; + break; + case "middle": + spannode.style.borderRadius = 0; + break; + case "end": + spannode.style.borderTopLeftRadius = 0; + spannode.style.borderBottomLeftRadius = 0; + break; + default: + break; + } + middlebit = newTextNode.splitText(d.pos); + middlebit.splitText(d.len); + middleclone = middlebit.cloneNode(true); + spannode.appendChild(middleclone); + if (d.type != "full" && d.type != "start") { + spannode.dataset.type = d.type; + } + newTextNodeCon.replaceChild(spannode, middlebit); + spannodes.unshift(spannode); + }); + data.node.parentNode.replaceChild(newTextNodeCon, data.node); + spannodes.forEach(n => { + self.marks[word.showWords].push(n); + if (!n.dataset.type) { + self.createNavMark(n, word, index, curList); + } + }); + } + }); + } + } let checkChildren = true; if (word.link) { if (node.nodeType == 1 && node.href && node.href.match) { @@ -4365,7 +4591,7 @@ } target = curList[self.focusIndex]; self.focusHighlight(target); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), self.focusIndex, curList.length); + self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), self.focusIndex, curList); self.focusText = word.showWords; }); self.marks[word.showWords].push(node); @@ -4388,7 +4614,7 @@ let nodeStyle = getComputedStyle(node); let textareaLoc = node.getBoundingClientRect(); let baseLeft = document.documentElement.scrollLeft + getBody(document).scrollLeft + textareaLoc.left + parseInt(nodeStyle.marginLeft); - let baseTop = document.documentElement.scrollTop + getBody(document).scrollTop + textareaLoc.top + parseInt(nodeStyle.marginTop); + let baseTop = document.documentElement.scrollTop + getBody(document).scrollTop + textareaLoc.top + parseInt(nodeStyle.marginTop) - parseInt(nodeStyle.borderTopWidth); while (true) { if (word.isRe) { wordMatch = blockValue.match(new RegExp(word.content, word.reCase)); @@ -4407,7 +4633,7 @@ len = word.content.length; pos = blockValue.toUpperCase().indexOf(word.content.toUpperCase()); } - if (word.init && pos >= 0 && /^[a-z]+$/i.test(word.content)) { + if ((word.init || inWordMode) && pos >= 0 && /^[a-z]+$/i.test(word.content)) { if (pos !== 0 && /[a-z]/i.test(blockValue[pos - 1])) { pos = -1; } @@ -4494,106 +4720,11 @@ spannode.style.pointerEvents = "none"; spannode.style.left = rect.left + baseLeft + "px"; spannode.style.top = rect.top + baseTop + "px"; - - self.marks[word.showWords].push(spannode); - self.createNavMark(spannode, word, index, curList); } } } - } else if (node.nodeType == 3 && node.data && (pa.offsetParent || (pa.scrollHeight && pa.scrollWidth) || word.hideParent || word.hideParent === 0 || !pa.parentNode)) { - checkChildren = false; - if (word.isRe) { - let wordMatch = node.data.match(new RegExp(word.content, word.reCase)); - if (wordMatch) { - let content = wordMatch[0] || wordMatch; - len = content.length; - pos = node.data.indexOf(content); - } - } else { - if (_unsafeWindow.searchJumperPinyin) { - let pinyin = _unsafeWindow.searchJumperPinyin(node.data, word.content); - if (pinyin.matched) { - len = pinyin.len; - pos = pinyin.pos; - } else pos = -1; - } else { - len = word.content.length; - pos = node.data.toUpperCase().indexOf(word.content.toUpperCase()); - } - if (word.init && pos >= 0 && /^[a-z]+$/i.test(word.content)) { - if (pos !== 0 && /[a-z]/i.test(node.data[pos - 1])) { - pos = -1; - } - if (pos + word.content.length !== node.data.length && /[a-z]/i.test(node.data[pos + len])) { - pos = -1; - } - } - } - if (pos >= 0) { - if (typeof word.hideParent !== 'undefined') { - let parentDepth = word.hideParent; - let parent = node.parentElement; - while(parentDepth-- > 0 && parent) { - parent = parent.parentElement; - } - if (parent) { - parent.innerHTML = createHTML(""); - parent.dataset.content = word.showWords; - parent.classList.add("searchJumper-hide"); - return 0; - } - } - let curList = self.marks[word.showWords]; - let index = curList.length; - spannode = document.createElement("mark"); - spannode.className = "searchJumper"; - if (word.title) spannode.title = JSON.parse('"' + word.title + '"'); - if (word.popup) { - spannode.addEventListener("mouseenter", e => { - if (targetElement != spannode || !searchBar.funcKeyCall) { - targetElement = spannode; - searchBar.showInPage(true, e); - } - }); - } - spannode.style.cssText = word.style; - spannode.addEventListener("click", e => { - if (!e.altKey) return; - e.stopPropagation(); - e.preventDefault(); - return false; - }); - spannode.dataset.content = word.showWords; - spannode.addEventListener("mousedown", e => { - if (!e.altKey) return; - let target; - if (e.button === 0) { - if (index != curList.length - 1) { - self.focusIndex = index + 1; - } else self.focusIndex = 0; - } else if (e.button === 2){ - if (index != 0) { - self.focusIndex = index - 1; - } else self.focusIndex = curList.length - 1; - } - target = curList[self.focusIndex]; - self.focusHighlight(target); - self.setHighlightSpan(self.getHighlightSpanByText(word.showWords), self.focusIndex, curList.length); - self.focusText = word.showWords; - }); - middlebit = node.splitText(pos); - middlebit.splitText(len); - middleclone = middlebit.cloneNode(true); - spannode.appendChild(middleclone); - middlebit.parentNode.replaceChild(spannode, middlebit); - self.marks[word.showWords].push(spannode); - - self.createNavMark(spannode, word, index, curList); - - skip = 1; - } } } if (checkChildren && @@ -4638,16 +4769,19 @@ if (w.inRange && ele.parentNode) { [].forEach.call(ele.parentNode.querySelectorAll(w.inRange), e => { if (e == ele || ele.contains(e)) { - searchWithinNode(e, w); + searchWithinNode(e, w, true); } }) - } else searchWithinNode(ele, w); + } else searchWithinNode(ele, w, true); }); setTimeout(() => { searchingPre = true; words.forEach(w => { + if (!self.marks[w.showWords]) { + self.marks[w.showWords] = []; + } preEles.forEach(e => { - searchWithinNode(e, w); + searchWithinNode(e, w, true); }); }); }, 1000); @@ -4711,7 +4845,6 @@ if (!value) return; if (!this.lockWords && value.indexOf("$c") !== 0 && value.indexOf("$o") !== 0 && value.indexOf(" ") !== -1) { this.splitSep = "◎"; - value = "$c" + this.splitSep + value; } this.searchJumperInPageInput.value = value; this.submitInPageWords(); @@ -5186,23 +5319,27 @@ } break; case 37://← - if (!this.currentSearchInPageLockWords) { - this.currentSearchInPageLockWords = this.searchInPageLockWords.lastChild; - this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; - } else if (this.currentSearchInPageLockWords.previousElementSibling){ - this.currentSearchInPageLockWords.firstChild.style.transform = ""; - this.currentSearchInPageLockWords = this.currentSearchInPageLockWords.previousElementSibling; - this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + if (this.searchJumperInPageInput.value == "" && this.lockWords) { + if (!this.currentSearchInPageLockWords) { + this.currentSearchInPageLockWords = this.searchInPageLockWords.lastChild; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } else if (this.currentSearchInPageLockWords.previousElementSibling){ + this.currentSearchInPageLockWords.firstChild.style.transform = ""; + this.currentSearchInPageLockWords = this.currentSearchInPageLockWords.previousElementSibling; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } } break; case 39://→ - if (!this.currentSearchInPageLockWords) { - this.currentSearchInPageLockWords = this.searchInPageLockWords.lastChild; - this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; - } else if (this.currentSearchInPageLockWords.nextElementSibling){ - this.currentSearchInPageLockWords.firstChild.style.transform = ""; - this.currentSearchInPageLockWords = this.currentSearchInPageLockWords.nextElementSibling; - this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + if (this.searchJumperInPageInput.value == "" && this.lockWords) { + if (!this.currentSearchInPageLockWords) { + this.currentSearchInPageLockWords = this.searchInPageLockWords.lastChild; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } else if (this.currentSearchInPageLockWords.nextElementSibling){ + this.currentSearchInPageLockWords.firstChild.style.transform = ""; + this.currentSearchInPageLockWords = this.currentSearchInPageLockWords.nextElementSibling; + this.currentSearchInPageLockWords.firstChild.style.transform = "scale(1.1)"; + } } break; default: @@ -5248,6 +5385,17 @@ } storage.setItem("globalInPageWords", globalInPageWords); }); + this.wordModeBtn.addEventListener("click", e => { + let inWordMode = this.wordModeBtn.classList.contains("checked"); + if (inWordMode) { + this.wordModeBtn.classList.remove("checked"); + } else { + this.wordModeBtn.classList.add("checked"); + } + if (this.lockWords && this.lockWords.indexOf(" ") != -1) { + this.refreshPageWords(this.lockWords); + } + }); this.saveRuleBtn.addEventListener("click", e => { if (!this.lockWords) return; let inPageRule = searchData.prefConfig.inPageRule || {}; @@ -5826,6 +5974,12 @@ if (inPageWords) { this.appendBar(); this.setInPageWords(inPageWords); + } else if (!this.searchJumperInPageInput.value && document.referrer.indexOf(referrer) != -1) { + inPageWords = cacheKeywords; + try { + inPageWords = decodeURIComponent(inPageWords); + } catch (e) {} + this.searchJumperInPageInput.value = inPageWords; } } @@ -11128,13 +11282,14 @@ draging = false; clearTimeout(openAllTimer); }; + let zoomDrag = (searchData.prefConfig.zoomDrag || 100) / 100; if (!dragRoundFrame) { dragCssText = ` #dragCon { position: fixed; top: 0; left: 0; - transform: scale(${searchBar.scale}); + transform: scale(${zoomDrag}); z-index: 2147483647; } #searchJumperWrapper * { @@ -11458,8 +11613,8 @@ if (src) img.src = src; } }); - let scaleWidth = searchBar.scale * 190; - let scaleHeight = searchBar.scale * 190; + let scaleWidth = zoomDrag * 190; + let scaleHeight = zoomDrag * 190; if (left - scaleWidth < 0) { left = scaleWidth; From 57e66e2b0f840399fe4bdeee55229a13b8d44527 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 8 Nov 2023 18:59:59 +0800 Subject: [PATCH 265/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 363e9f2d890..5c03f2c8752 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -3255,6 +3255,11 @@ this.focusHighlightByText(word.showWords, false, wordSpan); } }); + wordSpan.addEventListener("editword", e => { + wordSpan.parentNode.removeChild(wordSpan); + this.removeHighlightWord(word); + this.searchJumperInPageInput.value = word.content; + }); let removeBtn = document.createElement("div"); removeBtn.addEventListener("mousedown", e => { wordSpan.parentNode.removeChild(wordSpan); @@ -3914,7 +3919,7 @@ } } if (!this.modifyCssEle || !this.modifyCssEle.parentNode) this.modifyCssEle = _GM_addStyle(this.modifyCssText); - getBody(document).appendChild(this.modifyFrame); + document.documentElement.appendChild(this.modifyFrame); } replaceWord(word, newWord, modifySpan, contentChange) { @@ -4384,7 +4389,7 @@ let len, pos = -1, skip, spannode, middlebit, middleclone; skip = 0; let pa = node.parentNode; - if (node.nodeType == 1 && node.classList && node.classList.contains("searchJumper")) return 0; + if (node.nodeType == 1 && node.classList && node.className.indexOf("searchJumper") != -1) return 0; if (start && node.nodeType == 1) { let domTextResult = self.anylizeDomWithTextPos(node); let textRes = domTextResult.text; @@ -5286,7 +5291,12 @@ switch(e.keyCode) { case 8://退格 if (!this.searchJumperInPageInput.value) { - editFunc(); + let lastWordSpan = this.searchInPageLockWords.lastChild; + if (lastWordSpan) { + lastWordSpan.dispatchEvent(new CustomEvent("editword")); + e.stopPropagation(); + e.preventDefault(); + } } break; case 9://tab From 943434ffe845fa7c17ae08fa2360c8e7577cc737 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 8 Nov 2023 20:41:03 +0800 Subject: [PATCH 266/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 154 +++++++++++++++++++++----------------- 1 file changed, 84 insertions(+), 70 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 8648cd372ce..eeede01652d 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.84 +// @version 1.9.36.85 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -858,7 +858,7 @@ const allOfBody = "body>*"; const mainSel = "article,.article,[role=main],main,.main,#main"; const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u0020\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007cВперед", "i"); - const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u4e2a\u500b\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); + const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; @@ -935,6 +935,15 @@ return getElementByXpath(sel, doc, contextNode); } + function compareNodeName(node, names) { + if (!node || !node.nodeName || !node.nodeName.toLowerCase) return false; + let nodeName = node.nodeName.toLowerCase(); + for (let i = 0; i < names.length; i++) { + if (names[i] === nodeName) return true; + } + return false; + } + function geneSelector(ele, addID) { let selector = ele.nodeName.toLowerCase(); //Google id class都是隨機。百度更過分,style script順序都是隨機的 @@ -960,7 +969,7 @@ } let parent = ele.parentElement; if (parent) { - if (!className && !hasId && parent.children.length > 1 && !/^HTML$/i.test(parent.nodeName)) { + if (!className && !hasId && parent.children.length > 1 && !compareNodeName(parent, ["html"])) { let prevE = ele.previousElementSibling; if (prevE && prevE.className) { let classList = prevE.classList, i = 0; @@ -998,7 +1007,7 @@ function createXPathFromElement(elm) { let allNodes = document.getElementsByTagName('*'), segs; for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode) { - if (/^(BODY|HTML)$/i.test(elm.nodeName)) { + if (compareNodeName(elm, ["body", "html"])) { segs.unshift(elm.localName.toLowerCase()); continue; } @@ -1692,16 +1701,16 @@ if (pageElement && pageElement.length === 1 && pageElement[0].style.display === 'none') { pageElement = [body]; } - if (this.curSiteRule.singleUrl && pageElement && pageElement.length > 0 && /^TR$/i.test(pageElement[0].nodeName)) { + if (this.curSiteRule.singleUrl && pageElement && pageElement.length > 0 && compareNodeName(pageElement[0], ["tr"])) { let mainTr = this.insert.parentNode.querySelectorAll('tr'), mainTdNum = 0, newTdNum = 0; mainTr = mainTr[mainTr.length - 1]; [].forEach.call(mainTr.children, el => { - if (/^(TD|TH)$/i.test(el.nodeName)) { + if (compareNodeName(el, ["td", "th"])) { mainTdNum += el.colSpan || 1; } }); [].forEach.call(pageElement[0].children, el => { - if (/^(TD|TH)$/i.test(el.nodeName)) { + if (compareNodeName(el, ["td", "th"])) { newTdNum += el.colSpan || 1; } }); @@ -1721,7 +1730,7 @@ nextLeftPos = this.initNext.getBoundingClientRect().left; } function checkElement(ele) { - if (/^(PRE|CODE)$/i.test(ele.nodeName)) { + if (compareNodeName(ele, ["pre", "code"])) { self.curSiteRule.pageElement = geneSelector(ele.parentNode); debug(self.curSiteRule.pageElement, 'Page element'); return [ele.parentNode]; @@ -1742,7 +1751,7 @@ curWidth = validSize.w; } } - if (/^PICTURE$/i.test(ele.nodeName) || !ele.innerText || ele.innerText.trim() == '') { + if (compareNodeName(ele, ["picture"]) || !ele.innerText || ele.innerText.trim() == '') { self.curSiteRule.pageElement = geneSelector(ele.parentNode) + ">" + ele.nodeName.toLowerCase(); debug(self.curSiteRule.pageElement, 'Page element'); let eles = []; @@ -1754,13 +1763,13 @@ } return eles; } - if (/^FORM$/i.test(ele.nodeName) && ele.parentNode != getBody(document)) { + if (compareNodeName(ele, ["form"]) && ele.parentNode != getBody(document)) { self.curSiteRule.pageElement = geneSelector(ele) + ">*"; debug(self.curSiteRule.pageElement, 'Page element'); return ele.children; } if (ele.children.length == 0 && !self.curSiteRule.pageElement) { - if (/^P$/i.test(ele.parentNode.nodeName)) ele = ele.parentNode; + if (compareNodeName(ele.parentNode, ["p"])) ele = ele.parentNode; self.curSiteRule.pageElement = geneSelector(ele.parentNode) + ">" + ele.nodeName.toLowerCase(); debug(self.curSiteRule.pageElement, 'Page element'); return getAllElements(self.curSiteRule.pageElement, doc); @@ -1774,16 +1783,16 @@ curMaxEle = null; break; } - if (/^(CANVAS|NAV)$/i.test(curNode.nodeName)) continue; + if (compareNodeName(curNode, ["canvas", "nav"])) continue; let curStyle = curWin.getComputedStyle(curNode); if (!curNode.offsetParent && (curStyle.position != "fixed" || curStyle.opacity == 0)) { continue; } - if (!/^IMG$/i.test(curNode.nodeName) && curNode.querySelector('img') == null && /^\s*$/.test(curNode.innerText)) continue; + if (!compareNodeName(curNode, ["img"]) && curNode.querySelector('img') == null && /^\s*$/.test(curNode.innerText)) continue; if (needCheckNext && !curNode.contains(self.initNext) && getElementTop(curNode) > windowHeight) { continue; } - if (/^ARTICLE$/i.test(curNode.nodeName)) articleNum++; + if (compareNodeName(curNode, ["article"])) articleNum++; let validSize = self.getValidSize(curNode, curWin); let h = validSize.h; let w = validSize.w; @@ -1831,7 +1840,7 @@ } } if (h < minHeight) { - if (!needCheckNext || h < (windowHeight>>2) || !ele.contains(self.initNext)) { + if (!needCheckNext || h < (windowHeight>>1) || !ele.contains(self.initNext)) { continue; } } @@ -1874,8 +1883,8 @@ return null; } if (ele.parentNode.children.length == 1 && curWin.getComputedStyle(ele.parentNode).float == 'none') ele = ele.parentNode; - else if (/^(P|BR|TD)$/i.test(ele.nodeName)) ele = ele.parentNode; - else if (/^TBODY$/i.test(ele.nodeName)) { + else if (compareNodeName(ele, ["p", "br", "td"])) ele = ele.parentNode; + else if (compareNodeName(ele, ["tbody"])) { self.curSiteRule.pageElement = geneSelector(ele) + ">*"; if (ele.children.length > 0 && ele.children[0].querySelector("th")) { self.curSiteRule.pageElement += ":not(:first-child)"; @@ -1896,7 +1905,7 @@ let paStyle = curWin.getComputedStyle(ele.parentNode); let paDisplay = paStyle.display; let paOverflow = paStyle.overflow; - pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || /^UL$/i.test(ele.parentNode.nodeName) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; + pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; } let curStyle = curWin.getComputedStyle(ele); if (ele.children.length > 1) { @@ -1922,7 +1931,7 @@ let middleChild = ele.children[parseInt(ele.children.length / 2)]; if ((curStyle.display === 'flex' && curStyle.flexDirection == "row") || (rulesData.opacity != 0 && !pf)) { ele = [ele]; - } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || /^UL$/i.test(ele.nodeName) || curHeight == 0) { + } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight == 0) { ele = [ele]; } else { self.curSiteRule.pageElement += ">*"; @@ -1949,7 +1958,7 @@ pageElement = []; sideController.remove(); } else { - if (pageElement.length == 1 && /^IMG$/i.test(pageElement[0].nodeName)) { + if (pageElement.length == 1 && compareNodeName(pageElement[0], ["img"])) { self.curSiteRule.pageBar = 0; } } @@ -2106,7 +2115,7 @@ let contentVisibility = this.curSiteRule.contentVisibility || rulesData.contentVisibility; if (!contentVisibility && !pageElementCss) return; [].forEach.call(pageElement, (ele, i) => { - if (!/LINK|META|STYLE|SCRIPT/i.test(ele.nodeName)) { + if (!compareNodeName(ele, ["link", "meta", "style", "script"])) { if (pageElementCss) { if (pageElementCss !== '0' && !ele.dataset.pagetualPageElement) { ele.style.cssText = (ele.style.cssText || '') + pageElementCss; @@ -2342,24 +2351,29 @@ innerText = innerText.trim(); if (innerText.length > 80) continue; } - let availableHref = aTag.href && aTag.href.length < 250 && /^http/.test(aTag.href); - if (availableHref && /next\-?(page)?$/i.test(aTag.href)) continue; if (aTag.className) { - if (/slick|slide|gallery/i.test(aTag.className)) continue; if (aTag.classList && aTag.classList.contains('disabled')) continue; + if (/slick|slide|gallery/i.test(aTag.className)) continue; } if (aTag.dataset && aTag.dataset.preview) continue; let ariaLabel = aTag.getAttribute("aria-label"); if (ariaLabel && /slick|slide|gallery/i.test(ariaLabel)) continue; - if (aTag.parentNode.className && /slick|slide|gallery/i.test(aTag.parentNode.className)) continue; + let availableHref = aTag.href && aTag.href.length < 250 && /^http/.test(aTag.href); + if (availableHref && /next\-?(page)?$/i.test(aTag.href)) continue; + + if (aTag.parentNode.className) { + if (/slick|slide|gallery/i.test(aTag.parentNode.className)) { + continue; + } + if (aTag.parentNode.classList.contains('disabled')) continue; + if (aTag.parentNode.classList.contains('active')) continue; + } if (aTag.parentNode.parentNode) { if (/slick|slide|gallery/i.test(aTag.parentNode.parentNode.className)) continue; if (aTag.parentNode.parentNode.parentNode && /slick|slide|gallery/i.test(aTag.parentNode.parentNode.parentNode.className)) continue; } - if (aTag.parentNode.classList && aTag.parentNode.classList.contains('disabled')) continue; - if (aTag.parentNode.classList && aTag.parentNode.classList.contains('active')) continue; - if (/^BLOCKQUOTE$/i.test(aTag.parentNode.nodeName)) continue; + if (compareNodeName(aTag.parentNode, ["blockquote"])) continue; if (aTag.previousElementSibling && /\b(play|volume)\b/.test(aTag.previousElementSibling.className)) continue; if (aTag.nextElementSibling && /\b(play|volume)\b/.test(aTag.nextElementSibling.className)) continue; @@ -2403,7 +2417,7 @@ if (isJs) continue; if (!next4) { let prevEle = aTag.previousElementSibling; - if (prevEle && (/^(B|SPAN|STRONG)$/i.test(prevEle.nodeName))) { + if (prevEle && compareNodeName(prevEle, ["b", "span", "strong"])) { if (/^\d+$/.test(aTag.innerText.trim()) && /^\d+$/.test(prevEle.innerText.trim()) && parseInt(aTag.innerText) == parseInt(prevEle.innerText) + 1) { next4 = aTag; } @@ -2479,7 +2493,7 @@ verifyNext(next, doc) { if (!next) return null; - if (next.previousElementSibling && /^BR$/i.test(next.previousElementSibling.nodeName)) return null; + if (next.previousElementSibling && compareNodeName(next.previousElementSibling, ["br"])) return null; let eles = []; if (next.innerText && next.innerText.indexOf("\n") == -1) { eles = getAllElements(`//${next.nodeName}[text()='${next.innerText}']`, doc); @@ -2681,10 +2695,10 @@ if (/^\d+$/.test(nextLink.innerText)) { nextLink.href = getNextLinkByForm(form, nextLink, nextLink.innerText); } - } else if (/^INPUT$/i.test(nextLink.nodeName) || nextLink.type == "submit") { + } else if (compareNodeName(nextLink, ["input"]) || nextLink.type == "submit") { form = nextLink.parentNode; while (form) { - if (/^FORM$/i.test(form.nodeName)) break; + if (compareNodeName(form, ["form"])) break; else form = form.parentNode; } if (form) { @@ -2699,11 +2713,11 @@ page = await this.getPage(doc, exist); nextLink = page.next; if (nextLink) { - if (/^INPUT$/i.test(nextLink.nodeName) || nextLink.type == "submit") { + if (compareNodeName(nextLink, ["input"]) || nextLink.type == "submit") { if (!/next/i.test(nextLink.getAttribute("onclick"))) { let form = nextLink.parentNode; while (form) { - if (/^FORM$/i.test(form.nodeName)) break; + if (compareNodeName(form, ["form"])) break; else form = form.parentNode; } if (form) { @@ -2712,7 +2726,7 @@ } } let parent = nextLink; - while (parent && !/^BODY$/i.test(parent.nodeName)) { + while (parent && !compareNodeName(parent, ["body"])) { if (parent.hasAttribute && parent.hasAttribute("disabled")) { this.nextLinkHref = false; return null; @@ -2740,7 +2754,7 @@ if (video.offsetParent && video.name != 'pagetual-iframe') { let scrollWidth = video.scrollWidth || video.offsetWidth; let scrollHeight = video.scrollHeight || video.offsetHeight; - if (/IFRAME/i.test(video.nodeName)) { + if (compareNodeName(video, ["iframe"])) { } else if (scrollWidth > 100 && scrollHeight > 100) { let winWidth = window.innerWidth || document.documentElement.clientWidth; let winHeight = window.innerHeight || document.documentElement.clientHeight; @@ -2864,7 +2878,7 @@ } if (filter.link) { let linkRegExp = new RegExp(filter.link, "i"); - if (/^A$/i.test(ele.nodeName) && linkRegExp.test(ele.href)) return false; + if (compareNodeName(ele, ["a"]) && linkRegExp.test(ele.href)) return false; let aChildren = ele.querySelectorAll("a"); for (let i = 0; i < aChildren.length; i++) { let child = aChildren[i]; @@ -3102,7 +3116,7 @@ openInNewTab(eles) { if (openInNewTab) { [].forEach.call(eles, ele => { - if (/^A$/i.test(ele.nodeName) && ele.href && !/^(mailto:|javascript:)|#/.test(ele.href)) { + if (compareNodeName(ele, ["a"]) && ele.href && !/^(mailto:|javascript:)|#/.test(ele.href)) { ele.setAttribute('target', openInNewTab == 1 ? '_blank' : '_self'); } else { [].forEach.call(ele.querySelectorAll('a[href]:not([href^="mailto:"]):not([href^="javascript:"]):not([href^="#"])'), a => { @@ -3187,7 +3201,7 @@ } }; [].forEach.call(eles, ele => { - if (/^IMG$/i.test(ele.nodeName)) { + if (compareNodeName(ele, ["img"])) { setLazyImg(ele); } else { [].forEach.call(ele.querySelectorAll("img,picture>source"), img => { @@ -3197,7 +3211,7 @@ div.style.setProperty("background-image", "url(" + (div.dataset.src || div.dataset.bg) + ")", "important"); }); } - if (/^A$/i.test(ele.nodeName) && ele.classList.contains("lazyload")) { + if (compareNodeName(ele, ["a"]) && ele.classList.contains("lazyload")) { if (ele.dataset.original) { ele.style.backgroundImage = 'url("' + ele.dataset.original + '")'; } @@ -3337,10 +3351,10 @@ getBody(document).appendChild(loadingDiv); } else { let parent = loadingDiv.parentNode; - if (/^TBODY$/i.test(parent.nodeName)) { + if (compareNodeName(parent, ["tbody"])) { parent = parent.parentNode; } - if (/^TABLE$/i.test(parent.nodeName)) { + if (compareNodeName(parent, ["table"])) { parent.parentNode.appendChild(loadingDiv); } } @@ -3426,7 +3440,7 @@ let newCanvas = newCanvass[i]; newCanvas.getContext('2d').drawImage(oldCanvas, 0, 0); } - if (!/^(STYLE|SCRIPT)$/.test(newEle.nodeName)) self.visibilityItems.push(newEle); + if (!compareNodeName(newEle, ["style", "script"])) self.visibilityItems.push(newEle); collection.appendChild(newEle) newEles.push(newEle); }); @@ -4907,7 +4921,7 @@ let importBtn = createImportBtn(pre); }); document.addEventListener("mouseover", e => { - if (/^PRE$/i.test(e.target.nodeName)) { + if (compareNodeName(e.target, ["pre"])) { let nameAttr = e.target.getAttribute("name"); if (nameAttr == "pagetual" || nameAttr == "user-content-pagetual") { if (e.target.querySelector('#pagetualImport')) return; @@ -5083,14 +5097,14 @@ } moveUp() { let preE = this.item.previousElementSibling; - if (/^P$/i.test(preE.nodeName) && preE.children.length > 1) { + if (compareNodeName(preE, ["p"]) && preE.children.length > 1) { this.item.parentNode.insertBefore(this.item, preE); this.saveSort(); } } moveDown() { let nextE = this.item.nextElementSibling; - if (/^P$/i.test(nextE.nodeName) && nextE.children.length > 1) { + if (compareNodeName(nextE, ["p"]) && nextE.children.length > 1) { this.item.parentNode.insertBefore(nextE, this.item); this.saveSort(); } @@ -5679,7 +5693,7 @@ while(loopable && visible) { el = el.parentNode; - if(el && !/^BODY$/i.test(el.nodeName)) { + if(el && !compareNodeName(el, ["body"])) { visible = win.getComputedStyle(el).display != 'none' && win.getComputedStyle(el).visibility != 'hidden'; }else { loopable = false; @@ -6071,7 +6085,7 @@ ruleParser.getInsert(true); } //只有1的話怕不是圖片哦 - if (pageElement && (pageElement.length > 1 || (pageElement.length == 1 && !/^IMG$/i.test(pageElement[0].nodeName)))) { + if (pageElement && (pageElement.length > 1 || (pageElement.length == 1 && !compareNodeName(pageElement[0], ["img"])))) { await ruleParser.insertPage(doc, pageElement, url, callback, false); if (ruleParser.curSiteRule.action == 1) { isLoading = true; @@ -6507,7 +6521,7 @@ if (forceState == 1) return; if (checkClickedEle) { if (!clickedSth && checkClickedEle && checkClickedEle.nodeName) { - if (/^(A|BUTTON)$/i.test(checkClickedEle.nodeName)) { + if (compareNodeName(checkClickedEle, ["a", "button"])) { clickedSth = true; } else { let targetStyle = _unsafeWindow.getComputedStyle(checkClickedEle); @@ -6653,7 +6667,7 @@ } }; dblclickHandler = e => { - if (forceState == 1 || /^(INPUT|TEXTAREA|SELECT|A|BUTTON|SVG|USE|IMG|PATH)$/i.test(e.target.nodeName)) return; + if (forceState == 1 || compareNodeName(e.target, ["input", "textarea", "select", "a", "button", "svg", "use", "img", "path"])) return; if (!rulesData.dbClick2StopKey) { if ((rulesData.dbClick2StopCtrl && !e.ctrlKey) || (rulesData.dbClick2StopAlt && !e.altKey) || @@ -6662,14 +6676,14 @@ return; } } - if (!/^BODY$/i.test(e.target.nodeName) && !e.target.classList.contains('pagetual_pageBar')) { + if (!compareNodeName(e.target, ["body"]) && !e.target.classList.contains('pagetual_pageBar')) { try { let selection = window.getSelection(); let selStr = selection.toString().trim(); if (!selStr) { selection = selection.getRangeAt(0); selStr = selection && selection.cloneContents().children[0]; - if (selStr && !/^IMG$/i.test(selStr.nodeName)) selStr = false; + if (selStr && !compareNodeName(selStr, ["img"])) selStr = false; } if (selStr) { return; @@ -6705,7 +6719,7 @@ return; } if (document.activeElement && - (/^(INPUT|TEXTAREA)$/i.test(document.activeElement.nodeName) || + (compareNodeName(document.activeElement, ["input", "textarea"]) || document.activeElement.contentEditable == 'true')) { return; } @@ -6741,7 +6755,7 @@ if (manualMode) { manualModeKeyHandler = e => { if (document.activeElement && - (/^(INPUT|TEXTAREA)$/i.test(document.activeElement.nodeName) || + (compareNodeName(document.activeElement, ["input", "textarea"]) || document.activeElement.contentEditable == 'true')) { return; } @@ -6761,7 +6775,7 @@ if (rulesData.arrowToScroll) { keyupHandler = e => { if (document.activeElement && - (/^(INPUT|TEXTAREA)$/i.test(document.activeElement.nodeName) || + (compareNodeName(document.activeElement, ["input", "textarea"]) || document.activeElement.contentEditable == 'true')) { return; } @@ -6887,7 +6901,7 @@ if (rulesData.opacity == 0 || ruleParser.curSiteRule.pageBar === 0) return null; url = url.replace(/#p{.*/, ""); let example = (ruleParser.curSiteRule.insertPos == 2 || ruleParser.curSiteRule.insertPos == "in") ? insert.children[0] : (insert.parentNode.children[0] || insert); - while (example && (/^(SCRIPT|STYLE)$/i.test(example.nodeName) || example.className == "pagetual_pageBar")) { + while (example && (compareNodeName(example, ["script", "style"]) || example.className == "pagetual_pageBar")) { example = example.nextElementSibling; } if (!example || !example.parentNode) example = insert; @@ -6900,11 +6914,11 @@ if (forceState == 2) { inTable = inLi = false; } else { - inTable = /^(TABLE|TBODY)$/i.test(example.parentNode.nodeName) || - /^(TR|TBODY)$/i.test(example.nodeName) || + inTable = compareNodeName(example.parentNode, ["table", "tbody"]) || + compareNodeName(example, ["tr", "tbody"]) || exampleStyle.display == "table-row" || - (example.nextElementSibling && /^(TR|TBODY)$/i.test(example.nextElementSibling.nodeName)); - inLi = /^LI$/i.test(example.nodeName) || (example.nextElementSibling && /^LI$/i.test(example.nextElementSibling.nodeName)); + (example.nextElementSibling && compareNodeName(example.nextElementSibling, ["tr", "tbody"])); + inLi = compareNodeName(example, ["li"]) || (example.nextElementSibling && compareNodeName(example.nextElementSibling, ["li"])); } let pageBar = document.createElement(inTable ? "tr" : (inLi ? "li" : "div")); let upSpan = document.createElement("span"); @@ -7058,8 +7072,8 @@ pageBar.style.gridColumn = "1/-1"; } if (inTable) { - example = (/^(TR|TBODY)$/i.test(example.nodeName)) ? example : example.nextElementSibling || example; - if (/^TBODY$/i.test(example.nodeName)) example = example.querySelector("tr"); + example = compareNodeName(example, ["tr", "tbody"]) ? example : example.nextElementSibling || example; + if (compareNodeName(example, ["tbody"])) example = example.querySelector("tr"); let nextTr = example; while (nextTr && nextTr.children.length == 0) nextTr = nextTr.nextElementSibling; if (nextTr) example = nextTr; @@ -7070,7 +7084,7 @@ }); } else { [].forEach.call(example.children, el => { - if (/^(TD|TH)$/i.test(el.nodeName)) { + if (compareNodeName(el, ["td", "th"])) { tdNum += el.colSpan || 1; } }); @@ -7094,7 +7108,7 @@ td.appendChild(inTd); pageBar.appendChild(td); } else if (inLi) { - example = /^LI$/i.test(example.nodeName) ? example : example.nextElementSibling || example; + example = compareNodeName(example, ["li"]) ? example : example.nextElementSibling || example; pageBar.style.opacity = 1; pageBar.style.display = getComputedStyle(example).display; pageBar.style.backgroundColor = "unset"; @@ -7508,8 +7522,8 @@ returnFalse("Stop as no page when emu"); return; } - pageEle = [].filter.call(pageEle, ele => {return ele && !/^(style|script|meta)$/i.test(ele.nodeName)}); - if (/^UL$/i.test(pageEle[0].nodeName) || pageEle.length == 1) pageEle = pageEle[0]; + pageEle = [].filter.call(pageEle, ele => {return ele && !compareNodeName(ele, ["style", "script", "meta"])}); + if (compareNodeName(pageEle[0], ["ul"]) || pageEle.length == 1) pageEle = pageEle[0]; else if (pageEle[0].parentNode == pageEle[1].parentNode) { pageEle = pageEle[0].parentNode; } else { @@ -7526,7 +7540,7 @@ } orgPage = pageEle; if (nextLink) { - if (/^IMG$/i.test(orgPage.nodeName)) { + if (compareNodeName(orgPage, ["img"])) { if (!ruleParser.curSiteRule.lazyImgSrc) ruleParser.curSiteRule.lazyImgSrc = "0"; if (orgPage.src) { orgContent = orgPage.src; @@ -7562,8 +7576,8 @@ } let eles = ruleParser.getPageElement(iframeDoc, emuIframe.contentWindow, true), checkItem; if (eles && eles.length > 0) { - eles = [].filter.call(eles, ele => {return ele && !/^(style|script|meta)$/i.test(ele.nodeName)}); - if (/^UL$/i.test(eles[0].nodeName) || eles.length == 1) checkItem = eles[0]; + eles = [].filter.call(eles, ele => {return ele && !compareNodeName(ele, ["style", "script", "meta"])}); + if (compareNodeName(eles[0], ["ul"]) || eles.length == 1) checkItem = eles[0]; else if (eles[0].parentNode == eles[1].parentNode) { checkItem = eles[0].parentNode; } else { @@ -7577,7 +7591,7 @@ }, waitTime); } else { let checkInner; - if (/^IMG$/i.test(checkItem.nodeName)) { + if (compareNodeName(checkItem, ["img"])) { if (checkItem.src) { checkInner = checkItem.src; } else { From 0953fbaecdab87496af45c26248c95844686b8ec Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 8 Nov 2023 20:41:22 +0800 Subject: [PATCH 267/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 60dd30e7dd9..3565fb3ecf8 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.84](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.85](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 64e687ab665223655f1ccd3da1b8dfa72a5c8473 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 09:02:26 +0800 Subject: [PATCH 268/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5c03f2c8752..e8034a12aa4 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2579,6 +2579,7 @@ height: 16px; fill: white; cursor: pointer; + display: inline-block; } .searchJumperNavBar>.minNavBtn { font-size: 12px; @@ -4389,7 +4390,7 @@ let len, pos = -1, skip, spannode, middlebit, middleclone; skip = 0; let pa = node.parentNode; - if (node.nodeType == 1 && node.classList && node.className.indexOf("searchJumper") != -1) return 0; + if (node.nodeType == 1 && node.className && node.className.indexOf && node.className.indexOf("searchJumper") != -1) return 0; if (start && node.nodeType == 1) { let domTextResult = self.anylizeDomWithTextPos(node); let textRes = domTextResult.text; From 276f76db8e9a5de7f91a84b7c34e519fa2fc88c6 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 9 Nov 2023 01:51:27 +0000 Subject: [PATCH 269/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 16897795ebb..8415e8a2ea0 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86183", + "data": { + "pageElement": "//div[@class='CtgryLink']|//div[@class='CtgryLink']/following-sibling::*[1]", + "comment": "If you do not specify the block element specified by CSS after the CtgryLink class in pageElement, the Design will be affected.", + "nextLink": "//span[@class='TargetPage']/following-sibling::a[1][number()>0]", + "url": "^https://[^/]+\\.weblio\\.jp/.", + "exampleUrl": "https://www.weblio.jp/category/\r\nhttps://kobun.weblio.jp/category/aa\r\nhttps://www.weblio.jp/category/people/tltdb/ha/10" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "Weblio 索引", + "created_at": "2023-11-08T19:30:31+09:00", + "updated_at": "2023-11-09T07:10:50+09:00" +}, { "resource_url": "http://wedata.net/items/86182", "data": { From 173d4cc91623a228bd285d310b024c038d706759 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 11:02:03 +0800 Subject: [PATCH 270/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 96 ++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index eeede01652d..3698608d9de 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.85 +// @version 1.9.36.86 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1649,6 +1649,48 @@ return {h: h, w: parseInt(ele.offsetWidth || ele.scrollWidth)}; } + checkTargetChildren(ele, curWin, articleNum, curHeight) { + let pf = false; + if (ele.parentNode) { + let paStyle = curWin.getComputedStyle(ele.parentNode); + let paDisplay = paStyle.display; + let paOverflow = paStyle.overflow; + pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; + } + let curStyle = curWin.getComputedStyle(ele); + if (ele.children.length > 1) { + if (articleNum > 1) { + return ">article"; + } else { + let hasText = false; + for (let i in ele.childNodes) { + let child = ele.childNodes[i]; + if (child.nodeType == 3 && child.nodeValue.trim() !== '') { + return ""; + } + } + if (!hasText) { + let gridArea = curStyle.gridArea; + if (gridArea && gridArea != "auto / auto / auto / auto") { + return ">*"; + } else { + let middleChild = ele.children[parseInt(ele.children.length / 2)]; + if ((curStyle.display === 'flex' && curStyle.flexDirection == "row") || (rulesData.opacity != 0 && !pf)) { + return ""; + } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight == 0) { + return ""; + } else { + return ">*"; + } + } + } + } + } else if (pf || curStyle.position === "absolute") { + return ">*"; + } + return ""; + } + getPageElement(doc, curWin, dontFind) { if (doc == document && this.docPageElement && document.documentElement.contains(this.docPageElement[0])) { return this.docPageElement; @@ -1855,9 +1897,10 @@ let article = doc.querySelectorAll(mainSel); if (article && article.length == 1) { article = article[0]; - self.curSiteRule.pageElement = article.nodeName.toLowerCase() + (article.id ? "#" + article.id : "") + (article.className ? "." + article.className.replace(/ /g, ".") : "") + ">*"; + let childrenEnd = self.checkTargetChildren(article, curWin, articleNum, curHeight); + self.curSiteRule.pageElement = article.nodeName.toLowerCase() + (article.id ? "#" + article.id : "") + (article.className ? "." + article.className.replace(/ /g, ".") : "") + childrenEnd; debug(self.curSiteRule.pageElement, 'Page element'); - return article.children; + return childrenEnd ? article.children : article; } curMaxEle = null; } @@ -1900,48 +1943,9 @@ } } self.curSiteRule.pageElement = geneSelector(ele); - let pf = false; - if (ele.parentNode) { - let paStyle = curWin.getComputedStyle(ele.parentNode); - let paDisplay = paStyle.display; - let paOverflow = paStyle.overflow; - pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; - } - let curStyle = curWin.getComputedStyle(ele); - if (ele.children.length > 1) { - if (articleNum > 1) { - self.curSiteRule.pageElement += ">article"; - ele = ele.children; - } else { - let hasText = false; - for (let i in ele.childNodes) { - let child = ele.childNodes[i]; - if (child.nodeType == 3 && child.nodeValue.trim() !== '') { - hasText = true; - ele = [ele]; - break; - } - } - if (!hasText) { - let gridArea = curStyle.gridArea; - if (gridArea && gridArea != "auto / auto / auto / auto") { - self.curSiteRule.pageElement += ">*"; - ele = ele.children; - } else { - let middleChild = ele.children[parseInt(ele.children.length / 2)]; - if ((curStyle.display === 'flex' && curStyle.flexDirection == "row") || (rulesData.opacity != 0 && !pf)) { - ele = [ele]; - } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight == 0) { - ele = [ele]; - } else { - self.curSiteRule.pageElement += ">*"; - ele = ele.children; - } - } - } - } - } else if (pf || curStyle.position === "absolute") { - self.curSiteRule.pageElement += ">*"; + let childrenEnd = self.checkTargetChildren(ele, curWin, articleNum, curHeight); + if (childrenEnd) { + self.curSiteRule.pageElement += childrenEnd; ele = ele.children; } else { ele = [ele]; @@ -2484,7 +2488,7 @@ if (!next) next = next1 || next4 || next3 || next2; if (!next) { next = jsNext || nextJs1 || nextJs3 || nextJs2; - if (next && next.parentNode.className.indexOf('tab') != -1) next = null; + if (next && next.parentNode.className && next.parentNode.className.indexOf && next.parentNode.className.indexOf('tab') != -1) next = null; } if (next && next.classList && (next.classList.contains("results-more") || next.classList.contains("no"))) next = null; if (next && next.hasAttribute && next.hasAttribute("disabled")) next = null; From 83968827ef8ae654ba161db110d1da83d45572dc Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 12:35:28 +0800 Subject: [PATCH 271/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 3565fb3ecf8..8df111d912c 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.85](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.86](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 788693673e449591c6ad30f79adda5ca68176a57 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 12:39:01 +0800 Subject: [PATCH 272/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 3698608d9de..eea4f9d1d47 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1671,7 +1671,7 @@ } if (!hasText) { let gridArea = curStyle.gridArea; - if (gridArea && gridArea != "auto / auto / auto / auto") { + if (gridArea && gridArea != "auto" && gridArea != "auto / auto / auto / auto") { return ">*"; } else { let middleChild = ele.children[parseInt(ele.children.length / 2)]; From afc590b7a6a3e526bb1c1c6c253051b852d745e7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 12:47:15 +0800 Subject: [PATCH 273/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index eea4f9d1d47..e968298f206 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1900,7 +1900,7 @@ let childrenEnd = self.checkTargetChildren(article, curWin, articleNum, curHeight); self.curSiteRule.pageElement = article.nodeName.toLowerCase() + (article.id ? "#" + article.id : "") + (article.className ? "." + article.className.replace(/ /g, ".") : "") + childrenEnd; debug(self.curSiteRule.pageElement, 'Page element'); - return childrenEnd ? article.children : article; + return childrenEnd ? article.children : [article]; } curMaxEle = null; } From 180549189984f5597d50e8e976b75bd7f211d56e Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 13:41:58 +0800 Subject: [PATCH 274/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 7b73ea4dd42..2165372252c 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.4.1 +// @version 2023.11.9.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -53,6 +53,7 @@ // @exclude *://mega.*/* // @exclude *://*.mega.*/* // @exclude *://onedrive.live.com/* +// @run-at document-body // @created 2011-6-15 // @contributionURL https://ko-fi.com/hoothin // @contributionAmount 1 @@ -159,6 +160,9 @@ if (window.top != window.self) { var isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent); + var URL = _global.URL || _global.webkitURL; + var revokeObjectURL = URL.revokeObjectURL; + var createObjectURL = URL.createObjectURL; var saveAs = _global.saveAs || ( // probably in some web worker typeof window !== 'object' || window !== _global ? function saveAs() {} /* noop */ @@ -183,9 +187,9 @@ if (window.top != window.self) { } } else { // Support blobs - a.href = URL.createObjectURL(blob); + a.href = createObjectURL(blob); setTimeout(function () { - URL.revokeObjectURL(a.href); + revokeObjectURL(a.href); }, 4E4); // 40s setTimeout(function () { @@ -240,13 +244,12 @@ if (window.top != window.self) { reader.readAsDataURL(blob); } else { - var URL = _global.URL || _global.webkitURL; - var url = URL.createObjectURL(blob); + var url = createObjectURL(blob); if (popup) popup.location = url;else location.href = url; popup = null; // reverse-tabnabbing #460 setTimeout(function () { - URL.revokeObjectURL(url); + revokeObjectURL(url); }, 4E4); // 40s } }); @@ -11778,6 +11781,7 @@ ImgOps | https://imgops.com/#b#`; */ type = parseInt(type || 0); if (name) name = name.split("\n")[0]; + if (!url.replace) url = ""; url = url.replace(/.*?\/\/[^\/]+\//, ""); let nameFromUrl = ""; let ext; @@ -11824,7 +11828,10 @@ ImgOps | https://imgops.com/#b#`; saveAs(url, name); } : (url, name, type) => { name = document.title + " - " + getRightSaveName(url, name, type); - let urlSplit = url.split("/"); + let urlSplit = ["", ""]; + if (url.split) { + urlSplit = url.split("/"); + } GM_download({ url: url, name: name, @@ -11903,7 +11910,12 @@ ImgOps | https://imgops.com/#b#`; function downloadImg(url, name, type, errCb) { urlToBlob(url, (blob, ext) => { if(blob){ - saveAs(blob, document.title + " - " + getRightSaveName(url, name, type, ext)); + try { + saveAs(blob, document.title + " - " + getRightSaveName(url, name, type, ext)); + } catch(e) { + _GM_download(url, name, type); + if (errCb) errCb(); + } }else{ _GM_download(url, name, type); if (errCb) errCb(); From 97567c8860872b5b3a675f2654072995e43e5025 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 18:42:15 +0800 Subject: [PATCH 275/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 116 +++++++++++++++++++++++++----- 1 file changed, 97 insertions(+), 19 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e8034a12aa4..fd3f6cf591a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.1 +// @version 1.7.2 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -404,6 +404,8 @@ initShow: false, alwaysShow: false, customSize: 100, + tilesZoom: 100, + tipsZoom: 100, typeOpenTime: 250, longPressTime: 500, noIcons: false, @@ -1325,6 +1327,8 @@ class SearchBar { constructor() { this.scale = searchData.prefConfig.customSize / 100; + this.tilesZoom = searchData.prefConfig.tilesZoom / 100; + this.tipsZoom = searchData.prefConfig.tipsZoom / 100; cssText = ` #search-jumper { font-size: 16px; @@ -1642,9 +1646,10 @@ } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type { height: ${searchData.prefConfig.minPopup ? '24px' : 'auto'}!important; - width: ${searchData.prefConfig.minPopup ? 24 : (40 * (searchData.prefConfig.numPerLine || 7) * this.scale)}px!important; - max-width: unset; - max-height: ${108 * this.scale + 10}px; + max-width: ${searchData.prefConfig.minPopup ? 24 : (40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom)}px!important; + width: auto!important; + width: max-content!important; + max-height: ${108 * this.tilesZoom + 10}px; flex-wrap: wrap!important; flex-direction: row; padding: 5px; @@ -1676,7 +1681,7 @@ } #search-jumper.funcKeyCall:not(.targetInput)>.search-jumper-searchBar>.search-jumper-type { height: auto!important; - width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.scale}px!important; + width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom}px!important; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type>a.search-jumper-btn { visibility: visible; @@ -1690,7 +1695,7 @@ ` : ''} #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type:hover { height: auto!important; - width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.scale}px!important; + width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom}px!important; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type::-webkit-scrollbar { width: 0 !important; @@ -1815,6 +1820,14 @@ text-align: center; background-image: initial; } + #search-jumper.funcKeyCall .search-jumper-btn { + padding: ${1 * this.tilesZoom}px!important; + margin: ${3 * this.tilesZoom}px!important; + width: ${32 * this.tilesZoom}px; + height: ${32 * this.tilesZoom}px; + min-width: ${32 * this.tilesZoom}px; + min-height: ${32 * this.tilesZoom}px; + } a.search-jumper-btn:not(.search-jumper-word)>span { position: absolute; text-align: center; @@ -1827,6 +1840,9 @@ font-weight: normal; opacity: 0.8; } + #search-jumper.funcKeyCall a.search-jumper-btn:not(.search-jumper-word)>span { + font-size: ${12 * this.tilesZoom}px; + } .search-jumper-type>a.search-jumper-btn.historySite { box-shadow: 0px 0px 8px 0px #00000080; } @@ -1835,6 +1851,10 @@ height: ${32 * this.scale}px; border: unset; } + #search-jumper.funcKeyCall .search-jumper-btn>img { + width: ${32 * this.tilesZoom}px; + height: ${32 * this.tilesZoom}px; + } .search-jumper-btn>b { line-height: ${32 * this.scale}px; font-size: ${14 * this.scale}px; @@ -1843,6 +1863,10 @@ opacity: 0.9; text-shadow: 0 0 1px #d9d9d9cc; } + #search-jumper.funcKeyCall .search-jumper-btn>b { + line-height: ${32 * this.tilesZoom}px; + font-size: ${14 * this.tilesZoom}px; + } .search-jumper-btn:hover>b { opacity: 1; } @@ -1857,6 +1881,11 @@ color: wheat; display: none; } + #search-jumper.funcKeyCall .search-jumper-btn>div { + line-height: ${32 * this.tilesZoom}px; + border-radius: ${20 * this.tilesZoom}px; + font-size: ${30 * this.tilesZoom}px; + } .search-jumper-isInPage .search-jumper-btn>div, .search-jumper-isTargetImg .search-jumper-btn>div, .search-jumper-isTargetAudio .search-jumper-btn>div, @@ -1906,6 +1935,10 @@ vertical-align: top; cursor: grab; } + #search-jumper.funcKeyCall .search-jumper-logoBtnSvg { + height: ${32 * this.tilesZoom}px; + width: ${32 * this.tilesZoom}px; + } .search-jumper-type.search-jumper-needInPage, .search-jumper-type.search-jumper-targetImg, .search-jumper-type.search-jumper-targetAudio, @@ -1987,6 +2020,15 @@ min-width: ${this.scale * 40}px; ${searchData.prefConfig.noAni ? "" : `transition:width ${searchData.prefConfig.typeOpenTime}ms ease, height ${searchData.prefConfig.typeOpenTime}ms;`} } + #search-jumper.funcKeyCall .search-jumper-type, + #search-jumper.funcKeyCall .search-jumper-logo { + border-radius: ${20 * this.tilesZoom}px!important; + height: ${40 * this.tilesZoom}px; + width: ${40 * this.tilesZoom}px; + max-height: ${this.tilesZoom * 40}px; + min-height: ${this.tilesZoom * 40}px; + min-width: ${this.tilesZoom * 40}px; + } .search-jumper-right>.searchJumperNavBar { right: unset; left: 0; @@ -2122,6 +2164,15 @@ letter-spacing: 0px; text-shadow: unset; } + #search-jumper.funcKeyCall .search-jumper-word { + border-radius: ${20 * this.tilesZoom}px!important; + font-size: ${14 * this.tilesZoom}px; + line-height: ${32 * this.tilesZoom}px; + width: ${32 * this.tilesZoom}px; + height: ${32 * this.tilesZoom}px; + min-width: ${32 * this.tilesZoom}px; + min-height: ${32 * this.tilesZoom}px; + } .search-jumper-word:hover { font-weight: bold; text-shadow: 0px 0px 5px #d0d0d0; @@ -2148,6 +2199,10 @@ height: ${32 * this.scale}px; margin-top: unset; } + #search-jumper.funcKeyCall .search-jumper-type img { + width: ${32 * this.tilesZoom}px; + height: ${32 * this.tilesZoom}px; + } .funcKeyCall>.search-jumper-tips { position: absolute; } @@ -2155,9 +2210,9 @@ z-index: 2147483647; pointer-events: none; position: fixed; - font-size: xx-large; + font-size: ${35 * this.tipsZoom}px; background: #f5f5f5e0; - border-radius: 10px!important; + border-radius: ${10 * this.tipsZoom}px!important; padding: 5px; box-shadow: 0px 0px 10px 0px #000; font-weight: bold; @@ -2166,7 +2221,7 @@ white-space: normal; max-width: 640px; width: max-content; - line-height: 35px; + line-height: ${35 * this.tipsZoom}px; word-break: break-all; text-align: center; box-sizing: content-box; @@ -2191,13 +2246,17 @@ } .funcKeyCall>.search-jumper-searchBar>.search-jumper-type:not(.search-jumper-open) { display: none; - border-radius: ${20 * this.scale}px!important; + border-radius: ${20 * this.tilesZoom}px!important; } span.search-jumper-word>img { width: ${20 * this.scale}px; height: ${20 * this.scale}px; margin: auto; } + #search-jumper.funcKeyCall span.search-jumper-word>img { + width: ${20 * this.tilesZoom}px; + height: ${20 * this.tilesZoom}px; + } .search-jumper-searchBar .search-jumper-btn.search-jumper-word:hover { background: black; } @@ -4498,7 +4557,15 @@ let curList = self.marks[word.showWords]; let index = curList.length; let spannode; - let newTextNodeCon = document.createDocumentFragment(); + let newTextNodeCon; + let parentStyle = getComputedStyle(data.node.parentNode); + let parentDisplay = parentStyle.display; + if (parentDisplay.indexOf("flex") != -1 || parentDisplay.indexOf("grid") != -1 || parentDisplay.indexOf("layer") != -1) { + newTextNodeCon = document.createElement("span"); + newTextNodeCon.style.all = "unset"; + } else { + newTextNodeCon = document.createDocumentFragment(); + } let newTextNode = document.createTextNode(data.text); newTextNodeCon.appendChild(newTextNode); let matches = data.match.reverse(); @@ -4619,8 +4686,8 @@ if (insert && fakeTextarea) return 0; let nodeStyle = getComputedStyle(node); let textareaLoc = node.getBoundingClientRect(); - let baseLeft = document.documentElement.scrollLeft + getBody(document).scrollLeft + textareaLoc.left + parseInt(nodeStyle.marginLeft); - let baseTop = document.documentElement.scrollTop + getBody(document).scrollTop + textareaLoc.top + parseInt(nodeStyle.marginTop) - parseInt(nodeStyle.borderTopWidth); + let baseLeft = document.documentElement.scrollLeft + getBody(document).scrollLeft + textareaLoc.left; + let baseTop = document.documentElement.scrollTop + getBody(document).scrollTop + textareaLoc.top; while (true) { if (word.isRe) { wordMatch = blockValue.match(new RegExp(word.content, word.reCase)); @@ -4683,12 +4750,16 @@ fakeTextarea.style.position = "fixed"; fakeTextarea.style.left = "0px"; fakeTextarea.style.top = "0px"; + fakeTextarea.style.margin = "0"; + if (node.nodeName && node.nodeName.toLowerCase && node.nodeName.toLowerCase() !== "textarea") { + fakeTextarea.style.display = "inline-grid"; + } self.fakeTextareas[node] = fakeTextarea; } document.body.appendChild(fakeTextarea); let range = document.createRange(); range.setStart(fakeTextarea.firstChild, pos); - range.setEnd(fakeTextarea.firstChild, pos + curWord.length); + range.setEnd(fakeTextarea.firstChild, pos + 1); let rect = range.getBoundingClientRect(); document.body.removeChild(fakeTextarea); @@ -4720,7 +4791,8 @@ document.body.appendChild(spannode); spannode.style.fontSize = fakeTextarea.style.fontSize; spannode.style.fontFamily = fakeTextarea.style.fontFamily; - spannode.style.lineHeight = fakeTextarea.style.lineHeight; + spannode.style.lineHeight = "1"; + spannode.style.padding = "0"; spannode.style.position = "absolute"; spannode.style.zIndex = "9"; spannode.style.pointerEvents = "none"; @@ -6901,7 +6973,7 @@ (!data.meta == e.metaKey)) { return; } - if (!searchData.prefConfig.enableInInput) { + if (!searchData.prefConfig.enableInInput && !data.ctrl && !data.alt && !data.shift && !data.meta) { if (inputActive(document)) return; } var key = (e.key || String.fromCharCode(e.keyCode)).toLowerCase(); @@ -7606,7 +7678,7 @@ return; } } - if (!searchData.prefConfig.enableInInput) { + if (!searchData.prefConfig.enableInInput && !data.ctrl && !data.alt && !data.shift && !data.meta) { if (inputActive(document)) return; } var key = (e.key || String.fromCharCode(e.keyCode)).toLowerCase(); @@ -10151,7 +10223,7 @@ } if (!searchData.prefConfig.enableInInput && inputing == -1) { inputing = 1; - if (inputActive(document)) return false; + if (!_ctrl && !_alt && !_shift && !_meta && inputActive(document)) return false; } inputing = 0; e.preventDefault(); @@ -10189,7 +10261,7 @@ searchBar.switchSite(true); } } - }); + }, true); } let clickHandler; if (searchData.prefConfig.enableInPage) { @@ -12628,6 +12700,12 @@ if (typeof searchData.prefConfig.customSize === "undefined") { searchData.prefConfig.customSize = 100; } + if (typeof searchData.prefConfig.tilesZoom === "undefined") { + searchData.prefConfig.tilesZoom = 100; + } + if (typeof searchData.prefConfig.tipsZoom === "undefined") { + searchData.prefConfig.tipsZoom = 100; + } if (typeof searchData.prefConfig.typeOpenTime === "undefined") { searchData.prefConfig.typeOpenTime = 250; } From 4b2f4f17d26a83333f572f000ba49116a61b7d68 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 19:15:03 +0800 Subject: [PATCH 276/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index a77fc9a62a9..ba089093138 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.7 +// @version 2.7.5.8 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -218,7 +218,7 @@ if (window.top != window.self) { (function() { 'use strict'; - var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s)*[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; + var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s|\.)*[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; var innerNextPage=/^\s*(下一[页頁张張]|next\s*page|次のページ)/i; var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; var i18n={}; From 1f58637ef492101b0b1d8defa6433ad3a84ab711 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 19:55:38 +0800 Subject: [PATCH 277/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e968298f206..e83b289be10 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.86 +// @version 1.9.36.87 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -3211,8 +3211,14 @@ [].forEach.call(ele.querySelectorAll("img,picture>source"), img => { setLazyImg(img); }); - [].forEach.call(ele.querySelectorAll("div[data-src][data-thumb],div.img[data-src],div.lazy[data-src],a.lazy[data-bg]"), div => { - div.style.setProperty("background-image", "url(" + (div.dataset.src || div.dataset.bg) + ")", "important"); + [].forEach.call(ele.querySelectorAll("div[data-src][data-thumb],div.img[data-src],div.lazy[data-src]"), div => { + div.style.setProperty("background-image", "url(" + div.dataset.src + ")", "important"); + }); + [].forEach.call(ele.querySelectorAll("div.lazy[data-original]"), div => { + div.style.setProperty("background-image", "url(" + div.dataset.original + ")", "important"); + }); + [].forEach.call(ele.querySelectorAll("a.lazy[data-bg]"), a => { + a.style.setProperty("background-image", "url(" + a.dataset.bg + ")", "important"); }); } if (compareNodeName(ele, ["a"]) && ele.classList.contains("lazyload")) { @@ -3652,7 +3658,7 @@ } else { if (pageBarObj.preBar) { let scrollH = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); - window.scrollTo({ top: (scrollH || 9999999), behavior: 'smooth'}); + window.scrollTo({ top: (scrollH || 9999999), behavior: 'instant'}); } else { let scrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; window.scrollTo({ top: scrollTop + (window.innerHeight || document.documentElement.clientHeight), behavior: 'smooth'}); @@ -6789,7 +6795,7 @@ scrollToPageBar(nextPageBar); } else { let scrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; - window.scrollTo({ top: scrollTop + (window.innerHeight || document.documentElement.clientHeight), behavior: 'smooth'}); + window.scrollTo({ top: scrollTop + (window.innerHeight || document.documentElement.clientHeight), behavior: 'instant'}); } } else if (e.keyCode == 37) { let prePageBar = getPageBar().preBar; @@ -6797,7 +6803,7 @@ scrollToPageBar(prePageBar); } else { let scrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; - window.scrollTo({ top: scrollTop - (window.innerHeight || document.documentElement.clientHeight), behavior: 'smooth'}); + window.scrollTo({ top: scrollTop - (window.innerHeight || document.documentElement.clientHeight), behavior: 'instant'}); } } }; @@ -6869,13 +6875,14 @@ return loadmoreBtn; } + var lastPageBar; function scrollToPageBar(bar){ let yOffset = -20; if (typeof ruleParser.curSiteRule.pageBarTop !== 'undefined') { yOffset = -ruleParser.curSiteRule.pageBarTop; } const y = bar.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth'}); + window.scrollTo({ top: y, behavior: lastPageBar == bar ? 'instant' : 'smooth'}); } const pageNumReg=/[&\/\?](p=|page[=\/_-]?)\d+|[_-]\d+\./; @@ -7030,7 +7037,7 @@ scrollToPageBar(nextPageBar); } else { scrollH = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); - window.scrollTo({ top: scrollH || 9999999, behavior: 'smooth'}); + window.scrollTo({ top: scrollH || 9999999, behavior: 'instant'}); } }); if (!rulesData.hideBarArrow) { @@ -7172,6 +7179,7 @@ ruleParser.insertElement(pageBar); ruleParser.runPageBar(pageBar); + lastPageBar = pageBar; return pageBar; } From 21198489b5cf4d65e360566df674539ea8310fb6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 21:28:35 +0800 Subject: [PATCH 278/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 72 ++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e83b289be10..7e2b131e807 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1972,7 +1972,7 @@ if (doc !== document) { this.setPageElementCss(pageElement); - this.lazyImgAction(pageElement); + this.lazyImgAction(pageElement, doc); this.filterEles(doc, pageElement); } else if (!this.docPageElement) { this.setPageElementCss(pageElement, true); @@ -3008,7 +3008,7 @@ doc.documentElement.innerHTML = createHTML(res.response); var body = getBody(doc); if (body && body.firstChild) { - self.lazyImgAction(body.children); + self.lazyImgAction(body.children, doc); } if (!self.preloadDiv) { self.preloadDiv = document.createElement('div'); @@ -3136,25 +3136,25 @@ } } - lazyImgAction(eles) { + lazyImgAction(eles, doc) { if (!eles || eles.length == 0) return; let lazyImgSrc = this.curSiteRule.lazyImgSrc; if (lazyImgSrc === 0 || lazyImgSrc === '0') return; + let imgLazyAttrs = []; + let lazyAttrs = ["div[data-thumb]|data-src", "div.img|data-src", "div.lazy|data-src", "div.lazy|data-original", "a.lazy|data-bg", "a.lazyload|data-original"]; + let removeProps = []; let setLazyImg = img => { let realSrc; - if (lazyImgSrc) { - if (!Array.isArray(lazyImgSrc)) { - lazyImgSrc = [lazyImgSrc]; - } + imgLazyAttrs.forEach(attr => { realSrc = img.getAttribute(lazyImgSrc[0]); - if (lazyImgSrc.length == 2) { - let removeProps = lazyImgSrc[1].split(","); + if (realSrc) { removeProps.forEach(prop => { img.removeAttribute(prop.trim()); }); + img.src = realSrc; + return; } - if (realSrc) img.src = realSrc; - } + }) if (!realSrc) { let lazyAttr = ""; if (img.getAttribute("_src") && !img.src) { @@ -3204,35 +3204,37 @@ } } }; - [].forEach.call(eles, ele => { - if (compareNodeName(ele, ["img"])) { - setLazyImg(ele); + if (lazyImgSrc) { + if (!Array.isArray(lazyImgSrc)) { + lazyAttrs = [lazyImgSrc]; } else { - [].forEach.call(ele.querySelectorAll("img,picture>source"), img => { - setLazyImg(img); - }); - [].forEach.call(ele.querySelectorAll("div[data-src][data-thumb],div.img[data-src],div.lazy[data-src]"), div => { - div.style.setProperty("background-image", "url(" + div.dataset.src + ")", "important"); - }); - [].forEach.call(ele.querySelectorAll("div.lazy[data-original]"), div => { - div.style.setProperty("background-image", "url(" + div.dataset.original + ")", "important"); - }); - [].forEach.call(ele.querySelectorAll("a.lazy[data-bg]"), a => { - a.style.setProperty("background-image", "url(" + a.dataset.bg + ")", "important"); - }); + lazyAttrs = lazyImgSrc[0].split(","); + removeProps = lazyImgSrc[1].split(","); } - if (compareNodeName(ele, ["a"]) && ele.classList.contains("lazyload")) { - if (ele.dataset.original) { - ele.style.backgroundImage = 'url("' + ele.dataset.original + '")'; - } + } + lazyAttrs.forEach(attr => { + let attrArr = attr.split("|"); + if (attrArr.length !== 2) { + imgLazyAttrs.push(attr.trim()); } else { - [].forEach.call(ele.querySelectorAll("a.lazyload"), a => { - if (a.dataset.original) { - a.style.backgroundImage = 'url("' + a.dataset.original + '")'; - } - }); + let selector = attrArr[0].trim(); + let lazyAttr = attrArr[1].trim(); + if (selector == "img") { + imgLazyAttrs.push(lazyAttr); + } else { + selector += "[" + lazyAttr + "]"; + [].forEach.call(doc.querySelectorAll(selector), ele => { + ele.style.setProperty("background-image", "url(" + ele.getAttribute(lazyAttr) + ")", "important"); + removeProps.forEach(prop => { + ele.removeAttribute(prop.trim()); + }); + }); + } } }); + [].forEach.call(doc.querySelectorAll("img,picture>source"), img => { + setLazyImg(img); + }); } initPage(callback) { From f1a675265a453390d6b9aba413ca474c84088ec0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 21:29:21 +0800 Subject: [PATCH 279/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 8df111d912c..68c6620dc21 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.86](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.87](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From d2acd9181abe50d0084e6d9061f92962bb839e6b Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 9 Nov 2023 22:53:17 +0800 Subject: [PATCH 280/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index fd3f6cf591a..89a8c6512a6 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -6625,7 +6625,6 @@ self.bindSite(a, siteEle); li.appendChild(a); self.allListBtns.push(li); - con.appendChild(li); if (icon && !searchData.prefConfig.noIcons) { let iconSrc = icon.src || icon.dataset.src; let img = document.createElement("img"); @@ -6660,6 +6659,7 @@ li.title = siteEle.title; li.dataset.name = siteEle.dataset.name; a.appendChild(p); + con.appendChild(li); } try { for (let [index, siteEle] of sites.entries()) { @@ -7655,7 +7655,7 @@ let word = document.createElement("span"); if (!isBookmark && name.length >= 3) { - word.innerText = name.trim(); + word.innerText = name; if (!/^[\w \-]+$/.test(word.innerText.substr(0, 3))) word.innerText = word.innerText.substr(0, 2); } else word.innerText = name; ele.appendChild(word); From dcf02f0ace6db2e3f1aa4561c0b45e406f8419ae Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 09:04:45 +0800 Subject: [PATCH 281/812] 1.9.36.88 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 46 +++++++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 68c6620dc21..e78c19ca18f 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.87](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.88](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 7e2b131e807..756d517144c 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.87 +// @version 1.9.36.88 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -3206,7 +3206,7 @@ }; if (lazyImgSrc) { if (!Array.isArray(lazyImgSrc)) { - lazyAttrs = [lazyImgSrc]; + lazyAttrs = lazyImgSrc.split(","); } else { lazyAttrs = lazyImgSrc[0].split(","); removeProps = lazyImgSrc[1].split(","); @@ -3256,6 +3256,7 @@ this.oldUrl = ""; this.initUrl = location.href; this.historyUrl = ""; + this.possibleCheck = 0; let base = document.querySelector("base"); this.basePath = base ? base.href : location.href; this.getRule(async () => { @@ -3332,9 +3333,20 @@ } } if (self.curSiteRule.singleUrl && self.nextLinkHref == false && self.possibleRule) { - setTimeout(() => { - self.initPage(() => {}); - }, 3000); + let urlReg = new RegExp(self.possibleRule.url, "i"); + function checkPossible () { + if (self.possibleCheck++ < 3) { + setTimeout(() => { + if (self.curSiteRule.singleUrl) { + var href = location.href.slice(0, 500); + if (urlReg.test(href) && self.ruleMatch(self.possibleRule)) { + self.initPage(() => {}); + } else checkPossible(); + } + }, 3000); + } + } + checkPossible(); } self.refreshByClick(); @@ -6576,16 +6588,18 @@ let scrolly = window.scrollY; let windowHeight = window.innerHeight || document.documentElement.clientHeight; if (!scrollContainer || !document.documentElement.contains(scrollContainer)) { - let pageEle = ruleParser.getPageElement(document); - if (pageEle && pageEle.length) { - let parent = pageEle[0].parentNode, pageScrollY = parent.scrollTop;; - while (parent && pageScrollY == 0) { - parent = parent.parentNode; - pageScrollY = parent.scrollTop; - } - if (pageScrollY) { - scrollContainer = parent; - return scrollContainer.scrollHeight - pageScrollY - windowHeight; + if (curPage > 1 || ruleParser.nextLinkHref) { + let pageEle = ruleParser.getPageElement(document); + if (pageEle && pageEle.length) { + let parent = pageEle[0].parentNode, pageScrollY = parent.scrollTop;; + while (parent && pageScrollY == 0) { + parent = parent.parentNode; + pageScrollY = parent.scrollTop; + } + if (pageScrollY) { + scrollContainer = parent; + return scrollContainer.scrollHeight - pageScrollY - windowHeight; + } } } } @@ -8039,7 +8053,7 @@ nextLink = ruleParser.nextLinkHref; } if (!nextLink) { - if (curPage == 1 && (ruleParser.curSiteRule.pinUrl || tryTimes++ <= 3)) { + if (curPage == 1 && (ruleParser.curSiteRule.pinUrl || tryTimes++ < 3)) { setTimeout(() => {isLoading = false}, 500); } else if (curPage > 1 && rulesData.lastPageTips && !showedLastPageTips) { showTips(i18n("lastPage")); From d7ba171af82aec5b5e074ae2d42e4f1bbd65f784 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 09:15:11 +0800 Subject: [PATCH 282/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 756d517144c..b061b186d53 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -8053,9 +8053,13 @@ nextLink = ruleParser.nextLinkHref; } if (!nextLink) { - if (curPage == 1 && (ruleParser.curSiteRule.pinUrl || tryTimes++ < 3)) { - setTimeout(() => {isLoading = false}, 500); - } else if (curPage > 1 && rulesData.lastPageTips && !showedLastPageTips) { + if (curPage == 1) { + if (ruleParser.curSiteRule.pinUrl) { + setTimeout(() => {isLoading = false}, 500); + } else if (tryTimes++ < 3) { + setTimeout(() => {isLoading = false}, 1000); + } + } else if (rulesData.lastPageTips && !showedLastPageTips) { showTips(i18n("lastPage")); showedLastPageTips = true; } From b71e5c71363266754eae9439b900cc2ce5780a1f Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 09:40:12 +0800 Subject: [PATCH 283/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 89a8c6512a6..3f8023b9420 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -5475,7 +5475,7 @@ } else { this.wordModeBtn.classList.add("checked"); } - if (this.lockWords && this.lockWords.indexOf(" ") != -1) { + if (this.lockWords) { this.refreshPageWords(this.lockWords); } }); From 5a95c5ff77761a1c17768bf516fff771d84092a9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 09:53:46 +0800 Subject: [PATCH 284/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 3f8023b9420..8ddfcab07ca 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -3899,6 +3899,7 @@ this.modifyBtn = modifyBtn; modifyBtn.addEventListener("click", e => { let newWord = wordContent.value; + if (this.splitSep) newWord = newWord.replaceAll(this.splitSep, ""); if (!newWord) return; let contentChange = newWord !== this.modifyWord.showWords || wordReCase.checked !== this.modifyWord.isRe || wordLink.checked !== this.modifyWord.link; if (wordIsRe.checked && newWord.indexOf("@") !== 0) { @@ -5330,7 +5331,7 @@ }; //Search in page - this.splitSep = " "; + this.splitSep = "◎"; this.lockWords = ""; this.marks = {}; this.initInPageWords = []; From 94659675293af645ce9a69f0dc67e13db2fcd39e Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 10:22:01 +0800 Subject: [PATCH 285/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 8ddfcab07ca..2eddc26c2dc 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1695,7 +1695,9 @@ ` : ''} #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type:hover { height: auto!important; - width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom}px!important; + width: auto!important; + width: max-content!important; + max-width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom}px!important; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type::-webkit-scrollbar { width: 0 !important; From cb31fac5ec9d4d83d22e2546c80feb58b2569f63 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 10:31:22 +0800 Subject: [PATCH 286/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 2eddc26c2dc..dd50eb4413a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -6522,7 +6522,8 @@ } else { if (self.searchJumperExpand.parentNode == typeEle && !searchData.prefConfig.expandType) { let siteBtns = typeEle.querySelectorAll("a.search-jumper-btn"); - let maxSiteNum = searchData.prefConfig.historyLength < 6 ? (6 + 6 - searchData.prefConfig.historyLength) : 6; + let maxSiteNum = (searchData.prefConfig.numPerLine || 7) - 1; + maxSiteNum = searchData.prefConfig.historyLength < maxSiteNum ? (maxSiteNum + maxSiteNum - searchData.prefConfig.historyLength) : maxSiteNum; if (siteBtns.length > maxSiteNum) { typeEle.insertBefore(btn, siteBtns[maxSiteNum]); } else typeEle.insertBefore(btn, self.searchJumperExpand); From b4fc16ec87d90b02cbff220412c21ddb2194fb26 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 16:43:02 +0800 Subject: [PATCH 287/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index dd50eb4413a..94e0bf498a5 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.2 +// @version 1.7.3 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4448,6 +4448,7 @@ } else { this.curHighlightWords = (this.curHighlightWords || []).concat(words); } + this.fakeTextareas = {}; function searchWithinNode(node, word, start) { let len, pos = -1, skip, spannode, middlebit, middleclone; skip = 0; @@ -4689,8 +4690,9 @@ if (insert && fakeTextarea) return 0; let nodeStyle = getComputedStyle(node); let textareaLoc = node.getBoundingClientRect(); - let baseLeft = document.documentElement.scrollLeft + getBody(document).scrollLeft + textareaLoc.left; - let baseTop = document.documentElement.scrollTop + getBody(document).scrollTop + textareaLoc.top; + let textareaParentLoc = (node.offsetParent || getBody(document)).getBoundingClientRect(); + let baseLeft = textareaLoc.left - textareaParentLoc.left; + let baseTop = textareaLoc.top - textareaParentLoc.top; while (true) { if (word.isRe) { wordMatch = blockValue.match(new RegExp(word.content, word.reCase)); @@ -4791,7 +4793,7 @@ spannode.style.cssText = word.style; spannode.dataset.content = word.showWords; spannode.innerText = curWord; - document.body.appendChild(spannode); + node.parentNode.appendChild(spannode); spannode.style.fontSize = fakeTextarea.style.fontSize; spannode.style.fontFamily = fakeTextarea.style.fontFamily; spannode.style.lineHeight = "1"; @@ -4799,10 +4801,22 @@ spannode.style.position = "absolute"; spannode.style.zIndex = "9"; spannode.style.pointerEvents = "none"; - spannode.style.left = rect.left + baseLeft + "px"; - spannode.style.top = rect.top + baseTop + "px"; + let _baseLeft = rect.left + baseLeft; + let _baseTop = rect.top + baseTop; + spannode.style.left = _baseLeft + "px"; + spannode.style.top = _baseTop + "px"; self.marks[word.showWords].push(spannode); self.createNavMark(spannode, word, index, curList); + let nodeScrollHandler = e => { + if (!spannode.parentNode) { + spannode.parentNode.removeChild(spannode); + node.removeEventListener("scroll", nodeScrollHandler); + } else { + spannode.style.left = _baseLeft - node.scrollLeft + "px"; + spannode.style.top = _baseTop - node.scrollTop + "px"; + } + } + node.addEventListener("scroll", nodeScrollHandler); } } } From 8dc52db35a51ba4d042cdd19ed1a46ac61d57abc Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 16:44:51 +0800 Subject: [PATCH 288/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 94e0bf498a5..4c8115c5eaa 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4807,16 +4807,18 @@ spannode.style.top = _baseTop + "px"; self.marks[word.showWords].push(spannode); self.createNavMark(spannode, word, index, curList); - let nodeScrollHandler = e => { - if (!spannode.parentNode) { - spannode.parentNode.removeChild(spannode); - node.removeEventListener("scroll", nodeScrollHandler); - } else { - spannode.style.left = _baseLeft - node.scrollLeft + "px"; - spannode.style.top = _baseTop - node.scrollTop + "px"; + if (node.nodeName && node.nodeName.toLowerCase && node.nodeName.toLowerCase() == "textarea") { + let nodeScrollHandler = e => { + if (!spannode.parentNode) { + spannode.parentNode.removeChild(spannode); + node.removeEventListener("scroll", nodeScrollHandler); + } else { + spannode.style.left = _baseLeft - node.scrollLeft + "px"; + spannode.style.top = _baseTop - node.scrollTop + "px"; + } } + node.addEventListener("scroll", nodeScrollHandler); } - node.addEventListener("scroll", nodeScrollHandler); } } } From 3ca079ffe49122dfdd25adbbdaffe7ed1d78223b Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 17:52:46 +0800 Subject: [PATCH 289/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 4c8115c5eaa..3eee518eb40 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.3 +// @version 1.7.4 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4799,7 +4799,6 @@ spannode.style.lineHeight = "1"; spannode.style.padding = "0"; spannode.style.position = "absolute"; - spannode.style.zIndex = "9"; spannode.style.pointerEvents = "none"; let _baseLeft = rect.left + baseLeft; let _baseTop = rect.top + baseTop; @@ -5376,6 +5375,10 @@ this.hideSearchInput(); } else { this.highlight(""); + this.lockWords = ""; + this.searchJumperInPageInput.value = ""; + this.searchInPageLockWords.innerHTML = createHTML(); + this.setNav(false, true); } } }); @@ -5770,6 +5773,13 @@ }); this.closeBtn.addEventListener("mousedown", e => { self.hideSearchInput(); + if (searchData.prefConfig.emptyAfterCloseInput) { + self.highlight(""); + self.lockWords = ""; + self.searchJumperInPageInput.value = ""; + self.searchInPageLockWords.innerHTML = createHTML(); + self.setNav(false, true); + } }); let startLeft = window.innerWidth / 2; From 3813b33199ffc8982bea372990a3be8caf75d86f Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 18:13:15 +0800 Subject: [PATCH 290/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 3eee518eb40..af36d10fe32 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -9761,7 +9761,11 @@ canvas.height = img.naturalHeight || img.height || parseInt(imgStyle.height); var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0); - return (canvas.toDataURL("image/png")); + try { + return (canvas.toDataURL("image/png")); + } catch (e) { + return await imageSrc2Base64(img.src); + } } else { return await imageSrc2Base64(img.src); } From f9db36d08f3a0ccf93a89ea5a657c2ca687a12e2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 10 Nov 2023 22:53:00 +0800 Subject: [PATCH 291/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index af36d10fe32..d489e07d1e4 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.4 +// @version 1.7.5 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -3271,7 +3271,7 @@ this.splitSep = words.substr(2, 1); } else if (words.indexOf("$o") === 0) { this.splitSep = null; - } else this.splitSep = init ? " " : "◎"; + } else this.splitSep = "◎"; this.curWordIndex = 0; } let targetWords = this.anylizeInPageWords(words, !!init); @@ -4330,9 +4330,9 @@ if (ele.parentNode.childNodes.length == 1) { textData = ele.parentNode.innerText; } else { - textData = ele.data.trim(); + textData = ele.data; } - if (!textData) return; + if (!textData.trim()) return; const start = result.text.length; result.text += textData; result.data[result.text.length - 1] = {node: ele, text: textData}; @@ -4464,7 +4464,7 @@ function getNodePos(pos, len) { let keys = Object.keys(domTextResult.data); let findNodes = [], leftLen = len; - let pre = "", after = ""; + let pre = "", after = "", after2 = ""; for (let i = 0; i < keys.length; i++) { let end = keys[i]; let curnode = domTextResult.data[end]; @@ -4487,13 +4487,19 @@ if (type == "full") { pre = curpos == 0 ? "\n" : curnode.text[curpos - 1]; after = (curpos + leftLen) == curnode.text.length ? "\n" : curnode.text[curpos + leftLen]; + if (after !== "\n") { + after2 = (curpos + leftLen + 1) == curnode.text.length ? "\n" : curnode.text[curpos + leftLen + 1]; + } } else if (type == "start" && !pre) { pre = curpos == 0 ? "\n" : curnode.text[curpos - 1]; } else if ((type == "end" || type == "full") && !after) { after = (curpos + leftLen) == curnode.text.length ? "\n" : curnode.text[curpos + leftLen]; + if (after !== "\n") { + after2 = (curpos + leftLen + 1) == curnode.text.length ? "\n" : curnode.text[curpos + leftLen + 1]; + } } if (pre && after) { - if (/[a-z]/i.test(pre) || /[a-z]/i.test(after)) { + if (/[a-z]/i.test(pre) || /[a-rt-z]/i.test(after) || (after.toLowerCase() == 's' && /[a-z]/i.test(after2))) { break; } } @@ -5172,6 +5178,7 @@ this.inInput = true; this.clearInputHide(); if (this.lockWords) this.searchJumperInPageInput.style.paddingLeft = this.searchInPageLockWords.clientWidth + 3 + "px"; + else this.searchJumperInPageInput.style.paddingLeft = ""; if (searchData.prefConfig.altToHighlight) { document.removeEventListener("mouseup", this.checkSelHandler); document.addEventListener("mouseup", this.checkSelHandler); @@ -6073,6 +6080,9 @@ let inPageWords; if (searchData.prefConfig.showInSearchJumpPage && referrer && !disableHighlight) { if (document.referrer.indexOf(referrer) != -1) { + if (cacheKeywords) { + this.wordModeBtn.classList.add("checked"); + } inPageWords = cacheKeywords; try { inPageWords = decodeURIComponent(inPageWords); @@ -6115,6 +6125,7 @@ } } this.insertHistory(this.currentType, true); + this.wordModeBtn.classList.add("checked"); let inPageWords = searchData.prefConfig.showInSearchEngine ? localKeywords : globalInPageWords; if (inPageWords) { this.setInPageWords(inPageWords.replace(/['";]/g, ' ')); From 16a2ba7f87e39014f0b559e30f1ab73f3d1cc665 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 11 Nov 2023 09:39:59 +0800 Subject: [PATCH 292/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index d489e07d1e4..267cd008b9b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.5 +// @version 1.7.6 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4460,7 +4460,7 @@ let dataRes = domTextResult.data; let index = 0; let nodeAndPos = []; - let validWord = (word.init || inWordMode) && /^[a-z]+$/i.test(word.content); + //let validWord = (word.init || inWordMode) && /^[a-z]+$/i.test(word.content); function getNodePos(pos, len) { let keys = Object.keys(domTextResult.data); let findNodes = [], leftLen = len; @@ -4483,7 +4483,7 @@ } } - if (validWord) { + /*if (validWord) { if (type == "full") { pre = curpos == 0 ? "\n" : curnode.text[curpos - 1]; after = (curpos + leftLen) == curnode.text.length ? "\n" : curnode.text[curpos + leftLen]; @@ -4503,7 +4503,7 @@ break; } } - } + }*/ if (curpos < 0) curpos = 0; let curlen = Math.min(leftLen, curnode.text.length - curpos); @@ -5549,7 +5549,21 @@ } }); this.minNavBtn.addEventListener("click", e => { - this.searchJumperNavBar.classList.toggle("minimize"); + if (this.searchJumperNavBar.classList.contains("minimize")) { + this.searchJumperNavBar.classList.remove("minimize"); + if (this.lockWords.trim()) return; + this.submitInPageWords(); + } else { + this.searchJumperNavBar.classList.add("minimize"); + this.highlight(""); + let words = this.lockWords.trim(); + if (!words) return; + if (this.searchJumperInPageInput.value) words += this.splitSep + this.searchJumperInPageInput.value; + this.lockWords = ""; + this.searchJumperInPageInput.value = words; + this.searchInPageLockWords.innerHTML = createHTML(); + this.searchJumperInPageInput.style.paddingLeft = ""; + } }); this.navMarks.addEventListener("click", e => { let topPercent = e.offsetY / this.navMarks.clientHeight * 100; From 71d99cfff1d5030b0ef3fc01f306a98376c6eb57 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 11 Nov 2023 01:48:29 +0000 Subject: [PATCH 293/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 8415e8a2ea0..37512d94b30 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -51720,17 +51720,17 @@ }, { "resource_url": "http://wedata.net/items/1567", - "name": "ニコニコ大百科", - "created_by": "gifnksm", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2019-03-09T12:41:46+09:00", "data": { - "exampleUrl": "http://dic.nicovideo.jp/m/u/a/", + "pageElement": "id(\"main\")//div[contains(@class,\"st-box_contents\")]/table[@class]//tr[td]|\r\n//dd[starts-with(@id, 'search_table_contents_')]", + "nextLink": "id(\"main\")//div[contains(@class,\"st-box_contents\")]//div[@class=\"st-pg_contents\"]/span[@class=\"current\"]/following-sibling::a", "url": "^https://dic\\.nicovideo\\.jp/(?:m/[nu]|s)/(?:[aciluv]|all|al|oekaki|mml)/", - "pageElement": "id(\"main\")//div[contains(@class,\"st-box_contents\")]/table[@class=\"st-table\"]//tr[td]", - "nextLink": "id(\"main\")//div[contains(@class,\"st-box_contents\")]//div[@class=\"st-pg_contents\"]/span[@class=\"current\"]/following-sibling::a" + "exampleUrl": "https://dic.nicovideo.jp/m/u/a/\r\nhttps://dic.nicovideo.jp/s/oekaki/a/A/rev_created/desc/1-?query_type=a\r\nhttps://dic.nicovideo.jp/s/mml/a/A/rev_created/desc/1-?query_type=a\r\nhttps://dic.nicovideo.jp/s/al/t/A/rev_created/desc/1-?query_type=t" }, - "created_at": "2008-05-24T05:16:36+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "gifnksm", + "name": "ニコニコ大百科", + "created_at": "2008-05-24T05:16:36+09:00", + "updated_at": "2023-11-10T18:23:48+09:00" }, { "resource_url": "http://wedata.net/items/1563", From 847a10f73e0cdc2174f4d9ce390a66b862dc5e38 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 11 Nov 2023 15:20:02 +0800 Subject: [PATCH 294/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 267cd008b9b..67fb8696738 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -6388,15 +6388,19 @@ siteEle.classList.add('current'); localKeywords = ""; if (!/#p{|^(showTips|find)/.test(data.url) && /%s[lurest]?\b/.test(data.url)) { - let keywords = getKeywords(); - if (keywords && keywords != cacheKeywords) { - cacheKeywords = keywords; - storage.setItem("cacheKeywords", keywords); - } + this.updateCacheKeywords(); storage.setItem("referrer", location.hostname); } } + updateCacheKeywords() { + let keywords = getKeywords(); + if (keywords && keywords != cacheKeywords) { + cacheKeywords = keywords; + storage.setItem("cacheKeywords", keywords); + } + } + refresh() { if (this.refreshInPageTimer) { clearTimeout(this.refreshInPageTimer); @@ -10541,6 +10545,15 @@ searchBar.bar.style.display = 'none'; } }) + document.addEventListener("click", e => { + if (e.target) { + if (e.target.nodeName && e.target.nodeName.toLowerCase && e.target.nodeName.toLowerCase() == 'a') { + searchBar.updateCacheKeywords(); + } else if (e.target.parentNode && e.target.parentNode.nodeName && e.target.parentNode.nodeName.toLowerCase && e.target.parentNode.nodeName.toLowerCase() == 'a') { + searchBar.updateCacheKeywords(); + } + } + }, true); let href = location.href; let _wr = function(type) { var orig = history[type]; From a05b6d6f76fb9db220db3d6b530e33d7f182c311 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 11 Nov 2023 15:22:08 +0800 Subject: [PATCH 295/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 67fb8696738..d6226c4df58 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -10545,7 +10545,7 @@ searchBar.bar.style.display = 'none'; } }) - document.addEventListener("click", e => { + getBody(document).addEventListener("click", e => { if (e.target) { if (e.target.nodeName && e.target.nodeName.toLowerCase && e.target.nodeName.toLowerCase() == 'a') { searchBar.updateCacheKeywords(); From 70ff371624a37561d77ad25d87760a3e30ae6d43 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 11 Nov 2023 15:30:35 +0800 Subject: [PATCH 296/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index d6226c4df58..6dee529afea 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -10546,7 +10546,7 @@ } }) getBody(document).addEventListener("click", e => { - if (e.target) { + if (currentSite && e.target) { if (e.target.nodeName && e.target.nodeName.toLowerCase && e.target.nodeName.toLowerCase() == 'a') { searchBar.updateCacheKeywords(); } else if (e.target.parentNode && e.target.parentNode.nodeName && e.target.parentNode.nodeName.toLowerCase && e.target.parentNode.nodeName.toLowerCase() == 'a') { From f8f67542c1b295067542417e7d7007f0a68be1de Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 11 Nov 2023 16:16:04 +0800 Subject: [PATCH 297/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 6dee529afea..cd863eb3594 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -9806,19 +9806,19 @@ _GM_xmlhttpRequest({ method: 'GET', url: src, - responseType:'arraybuffer', + responseType:'blob', headers: { origin: urlSplit[0] + "//" + urlSplit[2], referer: src, accept: "*/*" }, onload: function(d) { - var binary = ''; - var bytes = new Uint8Array(d.response); - for (var len = bytes.byteLength, i = 0; i < len; i++) { - binary += String.fromCharCode(bytes[i]); - } - resolve(`data:image/jpeg;base64,${window.btoa(binary)}`); + var blob = d.response; + var fr = new FileReader(); + fr.readAsDataURL(blob); + fr.onload = function (e) { + resolve(e.target.result); + }; }, onerror: function(){ resolve(null); From 5bf19b17b6b6204886d6cd958a49919054b3bd90 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 12:28:39 +0800 Subject: [PATCH 298/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- ...nal Chinese and Simplified Chinese.user.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 03f821b2c2e..329f5b27c82 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.7.3 +// @version 1.2.7.4 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -1171,12 +1171,13 @@ } }; + var keyCallNotSave = true; var curInput = null; var curLang; var currentAction = "action_" + location.hostname.toString().replace(/\./g,"_"); - function setLanguage(){ + function setLanguage(keyCall){ enable = true; - storage.setItem(currentAction, action); + if (!keyCall || !keyCallNotSave) storage.setItem(currentAction, action); switch(action){ case 1: if ( notification ) _GM_notification("已於該網域禁用簡繁切換"); @@ -1206,7 +1207,7 @@ location.reload(); } - function translateAction(activeEle){ + function translateAction(activeEle, keyCall){ if(!activeEle)activeEle=document.activeElement; if("TEXTAREA"==activeEle.nodeName.toUpperCase()||activeEle.contentEditable=="true"){ if (curInput != activeEle) { @@ -1237,7 +1238,7 @@ rang.insertNode(document.createTextNode(curLang?traditionalized(selectStr):simplized(selectStr))); }else{ action=action==2?3:2; - setLanguage(); + setLanguage(keyCall); } } curInput = document.activeElement; @@ -1317,7 +1318,7 @@ curLang = isSimple; document.addEventListener("keydown", function(e) { if(e.key == shortcutKey && e.ctrlKey == ctrlKey && e.altKey == altKey && e.shiftKey == shiftKey && e.metaKey == metaKey) { - translateAction(); + translateAction(null, true); } else if(e.key == pinyinShortcutKey && e.ctrlKey == pinyinCtrlKey && e.altKey == pinyinAltKey && e.shiftKey == pinyinShiftKey && e.metaKey == pinyinMetaKey) { showPinyinInit(); } @@ -1347,6 +1348,7 @@ let autoInput = createCheckbox('總是自動切換', auto); let notificationInput = createCheckbox('切換成功通知', notification); let enablePinyinInput = createCheckbox('啟用拼音顯示', !disablePinyin); + let keyCallNotSaveInput = createCheckbox('用快捷鍵切換時不記錄選擇', keyCallNotSave); let defaultSimple = document.createElement('select'); let cnOption = document.createElement('option'); @@ -1663,6 +1665,7 @@ pinyinMetaKey = pinyinMetaKeyInput.checked; notification = notificationInput.checked; disablePinyin = !enablePinyinInput.checked; + keyCallNotSave = keyCallNotSaveInput.checked; isSimple = defaultSimple.value == 'cn'; if (siteChanged) { @@ -1697,6 +1700,7 @@ storage.setItem('notification', notification); storage.setItem('isSimple', isSimple); storage.setItem('disablePinyin', disablePinyin); + storage.setItem('keyCallNotSave', keyCallNotSave); try { sc2tcCombConfig = customTermInput.value ? JSON.parse(customTermInput.value) : ""; storage.setItem('sc2tcCombConfig', sc2tcCombConfig); @@ -1814,7 +1818,7 @@ return false; } - getMulValue(["version", "auto", "shortcutKey", "ctrlKey", "altKey", "shiftKey", "metaKey", "disablePinyin", "pinyinShortcutKey", "pinyinCtrlKey", "pinyinAltKey", "pinyinShiftKey", "pinyinMetaKey", "sc2tcCombConfig", "illiteracyConfig", "notification", "isSimple", "sc2tcCombTree", "tc2scCombTree", "fuckIlliteracyTree", "stDict", "tsDict", currentAction], async values => { + getMulValue(["version", "auto", "shortcutKey", "ctrlKey", "altKey", "shiftKey", "metaKey", "disablePinyin", "keyCallNotSave", "pinyinShortcutKey", "pinyinCtrlKey", "pinyinAltKey", "pinyinShiftKey", "pinyinMetaKey", "sc2tcCombConfig", "illiteracyConfig", "notification", "isSimple", "sc2tcCombTree", "tc2scCombTree", "fuckIlliteracyTree", "stDict", "tsDict", currentAction], async values => { if (_GM_info.script && _GM_info.script.version && _GM_info.script.version !== '1.0.0' && values.version != _GM_info.script.version) { storage.setItem('version', _GM_info.script.version); storage.setItem('stDict', ""); @@ -1837,6 +1841,7 @@ shiftKey = values.shiftKey; metaKey = values.metaKey; disablePinyin = !!values.disablePinyin; + keyCallNotSave = !!values.keyCallNotSave; if (values.pinyinShortcutKey) { pinyinShortcutKey = values.pinyinShortcutKey; pinyinCtrlKey = values.pinyinCtrlKey; From 566ac9ab0df1de12ccefe8228371521ce841482c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 16:58:32 +0800 Subject: [PATCH 299/812] Update searchJumperPinyinAddon.lib.js --- SearchJumper/searchJumperPinyinAddon.lib.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumperPinyinAddon.lib.js b/SearchJumper/searchJumperPinyinAddon.lib.js index 3619f17f610..55db725ce19 100644 --- a/SearchJumper/searchJumperPinyinAddon.lib.js +++ b/SearchJumper/searchJumperPinyinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱拼音扩展 // @name:zh-TW 搜尋醬拼音擴展 // @namespace hoothin -// @version 0.1 +// @version 0.2 // @description Add pinyin support for SearchJumper // @description:zh-CN 为搜索酱的页内高亮查找添加拼音支持 // @description:zh-TW 為搜尋醬的頁内高亮查找添加拼音支援 @@ -16,12 +16,18 @@ (function() { 'use strict'; var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; + if (!_unsafeWindow.searchJumperAddons) _unsafeWindow.searchJumperAddons = []; var { match } = PinyinMatch; - _unsafeWindow.searchJumperPinyin = (text, pinyin) => { + var pinyinSearch = (text, pinyin) => { let matchResult = match(text, pinyin); if (matchResult) { return {matched: true, pos: matchResult[0], len: matchResult[matchResult.length - 1] - matchResult[0] + 1}; } return {matched: false}; } + _unsafeWindow.searchJumperPinyin = pinyinSearch; + _unsafeWindow.searchJumperAddons.push({ + type: "findInPage", + data: pinyinSearch + }); })(); \ No newline at end of file From 881437f025db7e3c039536664c73d81fcb615858 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 18:41:39 +0800 Subject: [PATCH 300/812] Update searchJumperPinyinAddon.lib.js --- SearchJumper/searchJumperPinyinAddon.lib.js | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchJumper/searchJumperPinyinAddon.lib.js b/SearchJumper/searchJumperPinyinAddon.lib.js index 55db725ce19..f28cf2a9136 100644 --- a/SearchJumper/searchJumperPinyinAddon.lib.js +++ b/SearchJumper/searchJumperPinyinAddon.lib.js @@ -27,6 +27,7 @@ } _unsafeWindow.searchJumperPinyin = pinyinSearch; _unsafeWindow.searchJumperAddons.push({ + sort: 1, type: "findInPage", data: pinyinSearch }); From e004faf600f8f4f3c3a47cc497a04fc174fc8a1a Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 19:18:54 +0800 Subject: [PATCH 301/812] Update searchJumperPinyinAddon.lib.js --- SearchJumper/searchJumperPinyinAddon.lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumperPinyinAddon.lib.js b/SearchJumper/searchJumperPinyinAddon.lib.js index f28cf2a9136..cc854abd239 100644 --- a/SearchJumper/searchJumperPinyinAddon.lib.js +++ b/SearchJumper/searchJumperPinyinAddon.lib.js @@ -29,6 +29,6 @@ _unsafeWindow.searchJumperAddons.push({ sort: 1, type: "findInPage", - data: pinyinSearch + run: pinyinSearch }); })(); \ No newline at end of file From 8eeff6f9c02e53ecf70607b55f7e8db7719abf92 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 19:26:17 +0800 Subject: [PATCH 302/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 54 ++++++++++++++++++------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index cd863eb3594..33157212aea 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.6 +// @version 1.7.7 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -889,6 +889,8 @@ var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; if (_unsafeWindow.searchJumperInited) return; _unsafeWindow.searchJumperInited = true; + if (!_unsafeWindow.searchJumperAddons) _unsafeWindow.searchJumperAddons = []; + var storage = { supportGM: typeof GM_getValue == 'function' && typeof GM_getValue('a', 'b') != 'undefined', supportGMPromise: typeof GM != 'undefined' && typeof GM.getValue == 'function' && typeof GM.getValue('a','b') != 'undefined', @@ -1645,8 +1647,8 @@ flex-direction: column; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type { - height: ${searchData.prefConfig.minPopup ? '24px' : 'auto'}!important; - max-width: ${searchData.prefConfig.minPopup ? 24 : (40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom)}px!important; + height: ${searchData.prefConfig.minPopup ? (24 * this.tilesZoom + 'px') : 'auto'}!important; + max-width: ${searchData.prefConfig.minPopup ? (24 * this.tilesZoom) : ((40 * this.tilesZoom) * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom)}px!important; width: auto!important; width: max-content!important; max-height: ${108 * this.tilesZoom + 10}px; @@ -4388,6 +4390,26 @@ return spannode; } + findPosInStr(content, kw) { + if (!self.findInpageAddons) self.findInpageAddons = _unsafeWindow.searchJumperAddons.filter(data => data.type == "findInPage").sort((a, b) => (a.sort || 0) - (b.sort || 0)); + let len = 0, pos = -1; + for (let i = 0; i < self.findInpageAddons.length; i++) { + let curAddon = self.findInpageAddons[i]; + if (!curAddon || !curAddon.run) continue; + let curData = curAddon.run(content, kw); + if (curData && curData.matched) { + len = curData.len; + pos = curData.pos; + break; + } + } + if (pos == -1) { + len = kw.length; + pos = content.toUpperCase().indexOf(kw.toUpperCase()); + } + return {len: len, pos: pos}; + } + highlight(words, ele, root) { if (!words && (!this.curHighlightWords || this.curHighlightWords.length === 0)) return; if (!ele) { @@ -4530,16 +4552,9 @@ pos = wordMatch.index; } } else { - if (_unsafeWindow.searchJumperPinyin) { - let pinyin = _unsafeWindow.searchJumperPinyin(textRes, word.content); - if (pinyin.matched) { - len = pinyin.len; - pos = pinyin.pos; - } else pos = -1; - } else { - len = word.content.length; - pos = textRes.toUpperCase().indexOf(word.content.toUpperCase()); - } + let result = self.findPosInStr(textRes, word.content); + len = result.len; + pos = result.pos; } if (pos > -1) { textRes = textRes.slice(pos + len); @@ -4707,16 +4722,9 @@ wordMatch = wordMatch[0]; } } else { - if (_unsafeWindow.searchJumperPinyin) { - let pinyin = _unsafeWindow.searchJumperPinyin(blockValue, word.content); - if (pinyin.matched) { - len = pinyin.len; - pos = pinyin.pos; - } else pos = -1; - } else { - len = word.content.length; - pos = blockValue.toUpperCase().indexOf(word.content.toUpperCase()); - } + let result = self.findPosInStr(blockValue, word.content); + len = result.len; + pos = result.pos; if ((word.init || inWordMode) && pos >= 0 && /^[a-z]+$/i.test(word.content)) { if (pos !== 0 && /[a-z]/i.test(blockValue[pos - 1])) { pos = -1; From 81a5d54dac6ced46ad8c646f63e02b78fae20e95 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 19:29:21 +0800 Subject: [PATCH 303/812] Create searchJumperLevenshteinAddon.lib.js --- .../searchJumperLevenshteinAddon.lib.js | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 SearchJumper/searchJumperLevenshteinAddon.lib.js diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js new file mode 100644 index 00000000000..0c5a0fba441 --- /dev/null +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -0,0 +1,73 @@ +// ==UserScript== +// @name SearchJumper levenshtein addon +// @name:zh-CN 搜索酱单词模式扩展 +// @name:zh-TW 搜尋醬單詞模式擴展 +// @namespace hoothin +// @version 0.1 +// @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. +// @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 +// @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 +// @author hoothin +// @match *://*/* +// @grant unsafeWindow +// ==/UserScript== + +(function() { + 'use strict'; + var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; + if (!_unsafeWindow.searchJumperAddons) _unsafeWindow.searchJumperAddons = []; + function levenshteinDistance(a, b) { + //構造矩陣 + const distanceMatrix = Array(b.length + 1).fill(null).map(() => Array(a.length + 1).fill(null)); + //第一行 + for (let i = 0; i <= a.length; i += 1) { + distanceMatrix[0][i] = i; + } + //第一列 + for (let j = 0; j <= b.length; j += 1) { + distanceMatrix[j][0] = j; + } + for (let j = 1; j <= b.length; j += 1) { + for (let i = 1; i <= a.length; i += 1) { + const indicator = a[i - 1] === b[j - 1] ? 0 : 1; + distanceMatrix[j][i] = Math.min( + distanceMatrix[j][i - 1] + 1, // 前一個,增加位數,必須加一 + distanceMatrix[j - 1][i] + 1, // 上一個,增加位數,必須加一 + distanceMatrix[j - 1][i - 1] + indicator, // 斜方向一個,位數不變 + ); + } + } + return distanceMatrix[b.length][a.length]; + } + _unsafeWindow.searchJumperAddons.push({ + type: "findInPage", + sort: 0, + run: (text, keywords) => { + text = text.toLowerCase(); + keywords = keywords.toLowerCase(); + let wordArr = text.replace(/[,. ]+/g, " ").split(" "); + let kwArr = keywords.replace(/[,. ]+/g, " ").split(" "); + let matched = false, pos = -1, len = 0, matchedStr = []; + for (let i = 0; i < wordArr.length; i++) { + matched = true; + matchedStr = []; + for (let j = 0; j < kwArr.length; j++) { + if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > 3) { + matched = false; + break; + } else matchedStr.push(wordArr[i + j]); + } + if (matched) break; + } + if (matched) { + let wordMatch = text.match(new RegExp(matchedStr.join("[,. ]+"), "i")); + if (wordMatch) { + let content = wordMatch[0]; + len = content.length; + pos = wordMatch.index; + } + } + return {matched: matched, pos: pos, len: len}; + } + }); +})(); \ No newline at end of file From a8bb3aee4d6c17d581a8497235118c9557ffa5a2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 19:59:27 +0800 Subject: [PATCH 304/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 0c5a0fba441..d4e7c91071a 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1 +// @version 0.1.1 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -43,10 +43,11 @@ type: "findInPage", sort: 0, run: (text, keywords) => { + if (!text || !keywords || keywords.length < 6) return {matched: false}; text = text.toLowerCase(); keywords = keywords.toLowerCase(); - let wordArr = text.replace(/[,. ]+/g, " ").split(" "); - let kwArr = keywords.replace(/[,. ]+/g, " ").split(" "); + let wordArr = text.replace(/[,.!\?,。!?… ]+/g, " ").split(" "); + let kwArr = keywords.replace(/[,.!\?,。!?… ]+/g, " ").split(" "); let matched = false, pos = -1, len = 0, matchedStr = []; for (let i = 0; i < wordArr.length; i++) { matched = true; @@ -60,7 +61,7 @@ if (matched) break; } if (matched) { - let wordMatch = text.match(new RegExp(matchedStr.join("[,. ]+"), "i")); + let wordMatch = text.match(new RegExp(matchedStr.join("[,.!\?,。!?… ]+"), "i")); if (wordMatch) { let content = wordMatch[0]; len = content.length; From 044fa7bccd2dcebca7a2d77c4b087b2e89e8f762 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 12 Nov 2023 20:04:36 +0800 Subject: [PATCH 305/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index b061b186d53..0d3f862ab83 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2799,7 +2799,7 @@ } if (nextLink) { if (!this.checkStopSign(nextLink, doc)) { - if (curPage > 1 && rulesData.lastPageTips) showTips(i18n("lastPage")); + if (curPage > 1 && rulesData.lastPageTips) showTips(i18n("lastPage"), "", 800); return null; } if (this.curSiteRule.action == 3) { @@ -7475,7 +7475,7 @@ function emuPage(callback) { let orgPage = null, preContent = null, iframeDoc, checkTimes = 0, loadmoreBtn, pageEle, nextLink, loadmoreEnd = false, waitTimes = 80, changed = false; function returnFalse(log) { - if (curPage > 1 && rulesData.lastPageTips) showTips(i18n("lastPage")); + if (curPage > 1 && rulesData.lastPageTips) showTips(i18n("lastPage"), "", 800); debug(log); isPause = true; callback(false, false); @@ -8060,7 +8060,7 @@ setTimeout(() => {isLoading = false}, 1000); } } else if (rulesData.lastPageTips && !showedLastPageTips) { - showTips(i18n("lastPage")); + showTips(i18n("lastPage"), "", 800); showedLastPageTips = true; } return; From c7d1b8c0bb90bb7e825163147d4445e8027da8d4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 09:33:53 +0800 Subject: [PATCH 306/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 62 +++++++++++++++---- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index ba089093138..33e1bed2a8a 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.8 +// @version 2.7.5.9 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -218,7 +218,7 @@ if (window.top != window.self) { (function() { 'use strict'; - var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s|\.)*[第(]?\s*[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; + var indexReg=/^(\w.*)?PART\b|^Prologue|^(\w.*)?Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s|\.)*[第(]?\s*[\d〇零一二两三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; var innerNextPage=/^\s*(下一[页頁张張]|next\s*page|次のページ)/i; var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; var i18n={}; @@ -260,6 +260,7 @@ if (window.top != window.self) { dacSortByPos:"按页内位置排序", dacSortByUrl:"按网址排序", dacSortByName:"按章节名排序", + reverse:"反选", dacUseIframe:"使用 iframe 后台加载内容(慢速)", dacSetCustomRule:"修改规则", dacAddUrl:"添加章节", @@ -300,6 +301,7 @@ if (window.top != window.self) { dacSortByPos:"依頁內位置排序", dacSortByUrl:"依網址排序", dacSortByName:"依章節名排序", + reverse:"反選", dacUseIframe:"使用 iframe 背景載入內容(慢速)", dacSetCustomRule:"修改規則", dacAddUrl:"新增章節", @@ -339,6 +341,7 @@ if (window.top != window.self) { dacSortByPos:"Sort by position", dacSortByUrl:"Sort by URL", dacSortByName:"Sort by name", + reverse:"Reverse selection", dacUseIframe: "Use iframe to load content in the background (slow)", dacSetCustomRule:"Modify rules", dacAddUrl:"Add Chapter", @@ -347,7 +350,7 @@ if (window.top != window.self) { break; } var firefox=navigator.userAgent.toLowerCase().indexOf('firefox')!=-1,curRequests=[],useIframe=false,iframeSandbox=false,iframeInit=false; - var filterListContainer,txtDownContent,txtDownWords,txtDownQuit,dacLinksCon,dacUseIframe; + var filterListContainer,txtDownContent,txtDownWords,txtDownQuit,dacLinksCon,dacUseIframe,shadowContainer; const escapeHTMLPolicy = (win.trustedTypes && win.trustedTypes.createPolicy) ? win.trustedTypes.createPolicy('dac_default', { createHTML: (string, sink) => string @@ -443,6 +446,7 @@ if (window.top != window.self) { +

@@ -456,6 +460,7 @@ if (window.top != window.self) { let dacSortByPos = filterListContainer.querySelector("#dacSortByPos"); let dacSortByUrl = filterListContainer.querySelector("#dacSortByUrl"); let dacSortByName = filterListContainer.querySelector("#dacSortByName"); + let reverse = filterListContainer.querySelector("#reverse"); let dacSetCustomRule = filterListContainer.querySelector("#dacSetCustomRule"); let dacCustomInput = filterListContainer.querySelector("#dacCustomInput"); let dacConfirmRule = filterListContainer.querySelector("#dacConfirmRule"); @@ -519,6 +524,12 @@ if (window.top != window.self) { dacLinksCon.appendChild(link); }); }; + reverse.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + linkList.forEach(link => { + link.children[0].checked=!link.children[0].checked; + }); + }; dacSetCustomRule.onclick = e => { filterListContainer.classList.add("customRule"); dacCustomInput.value = GM_getValue("DACrules_" + document.domain) || ""; @@ -669,16 +680,18 @@ if (window.top != window.self) { } `); dacLinksCon = filterListContainer.querySelector("#dacLinksCon"); - let shadowContainer = document.createElement("div"); + shadowContainer = document.createElement("div"); document.body.appendChild(shadowContainer); let shadow = shadowContainer.attachShadow({ mode: "open" }); shadow.appendChild(listStyle); shadow.appendChild(filterListContainer); } + if (shadowContainer.parentNode) shadowContainer.parentNode.removeChild(shadowContainer); list.forEach(a => { createLinkItem(a); }); dacUseIframe.checked = useIframe; + document.body.appendChild(shadowContainer); } function initTxtDownDiv(){ @@ -1290,23 +1303,30 @@ if (window.top != window.self) { let content=childNode.textContent; if(content){ if(!content.trim())continue; - cStr+=content.replace(/ +/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2"); + cStr+=content.replace(/[\uFEFF\xA0 ]+/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2"); } if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT|IMG)$/.test(childNode.nodeName))cStr+="\r\n"; } if(hasText || noTextEnable || ele==largestContent)rStr+=cStr+"\r\n"; } + var sameDepthChildren=[]; for(i=0;i>2; + var tooShort = sameDepthChildren.length <= 3; + sameDepthChildren.forEach(child => { + if(tooShort && child.innerText.length < minLength) return; + if((largestContent.className && largestContent.className == child.className) || largestContent.parentNode == child.parentNode){ + getRightStr(child, true); + }else { + getRightStr(child, false); + } + }); return rStr.replace(/[\n\r]+/g,"\n\r"); } @@ -1329,13 +1349,28 @@ if (window.top != window.self) { return i; } - function fetch(forceSingle){ + async function sleep(time) { + await new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, time); + }) + } + + async function fetch(forceSingle){ forceSingle=forceSingle===true; processFunc=null; + initTxtDownDiv(); var aEles=document.body.querySelectorAll("a"),list=[]; + txtDownWords.innerHTML=`Analysing ( 1/${aEles.length} )......`; + txtDownContent.style.pointerEvents="none"; for(var i=0;i2 && !forceSingle){ useIframe = false; filterList(list); From 6c3ef074f844dba1e28a036e2ad9565d2437f511 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 13:29:28 +0800 Subject: [PATCH 307/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 166 ++++++++++++++++-------------- 1 file changed, 91 insertions(+), 75 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 33157212aea..a87298b9685 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.7 +// @version 1.7.8 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1910,28 +1910,6 @@ 80% {opacity: 0;} 100% {opacity: 0;} } - .searchJumper-loading { - animation-name: changeScale; - animation-duration: 2.5s; - animation-iteration-count: infinite; - } - @keyframes changeScale { - 0% { - -webkit-transform:rotate(0deg) scale(1); - -moz-transform:rotate(0deg) scale(1); - transform:rotate(0deg) scale(1); - } - 50% { - -webkit-transform:rotate(180deg) scale(1.5); - -moz-transform:rotate(180deg) scale(1.5); - transform:rotate(180deg) scale(1.5); - } - 100% { - -webkit-transform:rotate(360deg) scale(1); - -moz-transform:rotate(360deg) scale(1); - transform:rotate(360deg) scale(1); - } - } .search-jumper-logoBtnSvg { width: ${32 * this.scale}px; height: ${32 * this.scale}px; @@ -2709,23 +2687,6 @@ border-radius: 0px!important; cursor: alias; } - mark.searchJumper, - a.searchJumper { - visibility: inherit; - font-style: normal; - box-shadow: rgba(0, 0, 0, 0.3) 1px 1px 3px; - border-radius: 3px; - text-decoration: none; - padding: 1px 0; - -webkit-text-fill-color: initial; - } - mark.searchJumper[data-current=true], - a.searchJumper[data-current=true] { - border-bottom: 0.2em solid; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - animation: 0.5s linear 0s 5 normal none running currentMark; - } .searchJumperPosBar { background: rgba(29, 93, 163, 0.3); position: absolute; @@ -2751,10 +2712,6 @@ from {opacity: 1;} to {opacity: 0;} } - @keyframes currentMark { - from {border-color: unset} - to {border-color: transparent;} - } #rightSizeChange { top: 0; opacity: 0; @@ -2875,6 +2832,29 @@ } } `; + this.inPageCss = ` + mark.searchJumper, + a.searchJumper { + visibility: inherit; + font-style: normal; + box-shadow: rgba(0, 0, 0, 0.3) 1px 1px 3px; + border-radius: 3px; + text-decoration: none; + padding: 1px 0; + -webkit-text-fill-color: initial; + } + mark.searchJumper[data-current=true], + a.searchJumper[data-current=true] { + border-bottom: 0.2em solid; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + animation: 0.5s linear 0s 5 normal none running currentMark; + } + @keyframes currentMark { + from {border-color: unset} + to {border-color: transparent;} + } + `; if (searchData.prefConfig.cssText) cssText += searchData.prefConfig.cssText; let logoCon = document.createElement("span"); @@ -3702,7 +3682,7 @@ this.finalSearch.dataset.url = tempUrl; this.finalSearch.value = tempUrl.replace(/◎/g, ''); if (!this.customInputCssEle || !this.customInputCssEle.parentNode) this.customInputCssEle = _GM_addStyle(this.customInputCssText); - document.documentElement.appendChild(this.customInputFrame); + this.addToShadow(this.customInputFrame); let frameBody = this.customInputFrame.children[0]; frameBody.style.marginTop = -frameBody.offsetHeight / 2 + "px"; }); @@ -3719,7 +3699,7 @@ this.modifySpan = wordSpan; } if (!this.modifyFrame) { - this.modifyCssText = ` + let modifyCssText = ` .searchJumperModify-body { width: 300px; min-height: 200px; @@ -3851,7 +3831,7 @@ } } `; - this.modifyCssEle = _GM_addStyle(this.modifyCssText); + let modifyCssEle = _GM_addStyle(modifyCssText); let modifyFrame = document.createElement("div"); this.modifyFrame = modifyFrame; modifyFrame.id = "searchJumperModifyWord"; @@ -3885,6 +3865,7 @@ `); + modifyFrame.appendChild(modifyCssEle); let cancelBtn = modifyFrame.querySelector("#cancel"); cancelBtn.addEventListener("click", e => { if (modifyFrame.parentNode) { @@ -3983,8 +3964,7 @@ debug(e); } } - if (!this.modifyCssEle || !this.modifyCssEle.parentNode) this.modifyCssEle = _GM_addStyle(this.modifyCssText); - document.documentElement.appendChild(this.modifyFrame); + this.addToShadow(this.modifyFrame); } replaceWord(word, newWord, modifySpan, contentChange) { @@ -4155,8 +4135,8 @@ this.hPosBar.className = "searchJumperPosBar searchJumperPosH"; } if (!this.wPosBar.parentNode) { - getBody(document).appendChild(this.wPosBar); - getBody(document).appendChild(this.hPosBar); + this.addToShadow(this.wPosBar); + this.addToShadow(this.hPosBar); } let rect = ele.getBoundingClientRect(); @@ -4463,6 +4443,12 @@ this.curHighlightWords = []; return; } + if (!this.inPageStyle) { + this.inPageStyle = _GM_addStyle(this.inPageCss); + } + if (!this.inPageStyle.parentNode) { + document.head.appendChild(this.inPageStyle); + } let insert = (words === "insert"); if (insert) { words = this.curHighlightWords; @@ -5084,7 +5070,7 @@ } }; } - document.addEventListener("mousedown", self.showAllMouseHandler); + self.con.addEventListener("mousedown", self.showAllMouseHandler); if (!self.showAllKeydownHandler) { self.showAllKeydownHandler = e => { @@ -5228,12 +5214,24 @@ } } + addToShadow(ele) { + if (!this.shadowContainer) { + this.shadowContainer = document.createElement("div"); + } + if (!this.shadowContainer.parentNode) { + document.documentElement.appendChild(this.shadowContainer); + } + let shadow = this.shadowContainer.shadowRoot || this.shadowContainer.attachShadow({ mode: "open" }); + shadow.appendChild(ele); + return true; + } + appendBar() { if (!mainStyleEle || !mainStyleEle.parentNode) { mainStyleEle = _GM_addStyle(cssText); + this.addToShadow(mainStyleEle); } - if (!this.con.parentNode) { - document.documentElement.appendChild(this.con); + if (this.addToShadow(this.con)) { setTimeout(() => { if (this.con.parentNode) { if (getComputedStyle(this.con).zIndex != "2147483647") { @@ -5682,6 +5680,7 @@ linkEle.rel="stylesheet"; linkEle.href = searchData.prefConfig.fontAwesomeCss || "https://lib.baomitu.com/font-awesome/6.1.2/css/all.css"; document.documentElement.insertBefore(linkEle, document.documentElement.children[0]); + this.addToShadow(linkEle.cloneNode()); waitForFontAwesome(() => { let hasFont = false; this.fontPool.forEach(font => { @@ -8874,6 +8873,7 @@ } if (!mainStyleEle || !mainStyleEle.parentNode) { mainStyleEle = _GM_addStyle(cssText); + this.addToShadow(mainStyleEle); } let selectStr = getSelectStr(); if (_funcKeyCall && selectStr && selectStr.length < (searchData.prefConfig.limitPopupLen || 1)) return; @@ -10538,15 +10538,7 @@ let changeHandler = e => { setTimeout(() => { searchBar.refresh(); - if (!mainStyleEle || !mainStyleEle.parentNode) { - mainStyleEle = _GM_addStyle(cssText); - } }, 100); - setTimeout(() => { - if (!mainStyleEle || !mainStyleEle.parentNode) { - mainStyleEle = _GM_addStyle(cssText); - } - }, 1000); } document.addEventListener("fullscreenchange", e => { if (document.fullscreenElement) { @@ -10587,7 +10579,7 @@ } }); - let headObserverOptions = { + /*let headObserverOptions = { childList: true }; let checkCssEle = ele => { @@ -10604,7 +10596,7 @@ } } }); - headObserver.observe(document.head, headObserverOptions); + headObserver.observe(document.head, headObserverOptions);*/ let removeMark = node => searchBar.removeMark(node); let highlight = (words, node) => searchBar.highlight(words, node); @@ -11431,7 +11423,7 @@ } } - var dragRoundFrame, dragCon, dragSiteCurSpans, dragSiteHistorySpans, dragEndHandler, dragenterHandler, dragCssEle, dragCssText, openAllTimer; + var dragRoundFrame, dragCon, dragSiteCurSpans, dragSiteHistorySpans, dragEndHandler, dragenterHandler, openAllTimer; function showDragSearch(left, top) { if (!searchBar || !searchBar.bar) return; let removeFrame = () => { @@ -11447,7 +11439,7 @@ }; let zoomDrag = (searchData.prefConfig.zoomDrag || 100) / 100; if (!dragRoundFrame) { - dragCssText = ` + let dragCssText = ` #dragCon { position: fixed; top: 0; @@ -11603,7 +11595,7 @@ pointer-events: none; } `; - dragCssEle = _GM_addStyle(dragCssText); + let dragCssEle = _GM_addStyle(dragCssText); dragSiteCurSpans = []; dragSiteHistorySpans = []; dragRoundFrame = document.createElement("div"); @@ -11612,6 +11604,7 @@
`); + dragRoundFrame.appendChild(dragCssEle); const sector1Num = 6; const sector2Num = 10; let sectorCon = dragRoundFrame.querySelector(".panel"); @@ -11706,7 +11699,6 @@ dragCon.id = "dragCon"; dragCon.appendChild(dragRoundFrame); } - if (!dragCssEle || !dragCssEle.parentNode) dragCssEle = _GM_addStyle(dragCssText); searchBar.recoveHistory(); let firstType = searchBar.autoGetFirstType(); let siteBtns = firstType.querySelectorAll("a.search-jumper-btn:not(.notmatch)"); @@ -11795,7 +11787,7 @@ dragRoundFrame.style.transform = ''; setTimeout(() => { document.addEventListener('dragend', dragEndHandler, true); - document.documentElement.appendChild(dragCon); + searchBar.addToShadow(dragCon); setTimeout(() => { dragRoundFrame.style.opacity = 1; dragRoundFrame.style.transform = 'scale(1)'; @@ -11810,10 +11802,10 @@ }, 0); } - var addFrame, nameInput, descInput, urlInput, iconInput, iconShow, iconsCon, typeSelect, testBtn, cancelBtn, addBtn, addFrameCssText, addFrameCssEle, siteKeywords, siteMatch, openSelect, crawlBtn; + var addFrame, nameInput, descInput, urlInput, iconInput, iconShow, iconsCon, typeSelect, testBtn, cancelBtn, addBtn, siteKeywords, siteMatch, openSelect, crawlBtn; function showSiteAdd(name, description, url, icons, charset, kwFilter, showCrawl) { if (!addFrame) { - addFrameCssText = ` + let addFrameCssText = ` .searchJumperFrame-body, .searchJumperFrame-crawlBody { width: 300px; @@ -12071,7 +12063,7 @@ } } `; - addFrameCssEle = _GM_addStyle(addFrameCssText); + let addFrameCssEle = _GM_addStyle(addFrameCssText); addFrame = document.createElement("div"); addFrame.innerHTML = createHTML(`
@@ -12132,6 +12124,7 @@
`); + addFrame.appendChild(addFrameCssEle); nameInput = addFrame.querySelector("[name='siteName']"); descInput = addFrame.querySelector("[name='description']"); urlInput = addFrame.querySelector("[name='url']"); @@ -12426,9 +12419,8 @@ addFrame.classList.remove("crawling"); }); } - if (!addFrameCssEle || !addFrameCssEle.parentNode) addFrameCssEle = _GM_addStyle(addFrameCssText); crawlBtn.style.display = showCrawl ? '' : 'none'; - getBody(document).appendChild(addFrame); + searchBar.addToShadow(addFrame); siteKeywords.value = ""; siteMatch.value = ""; nameInput.value = name; @@ -12543,8 +12535,32 @@ function initMycroft() { if (location.hostname !== "mycroftproject.com") return; + _GM_addStyle(` + .searchJumper-loading { + animation-name: changeScale; + animation-duration: 2.5s; + animation-iteration-count: infinite; + } + @keyframes changeScale { + 0% { + -webkit-transform:rotate(0deg) scale(1); + -moz-transform:rotate(0deg) scale(1); + transform:rotate(0deg) scale(1); + } + 50% { + -webkit-transform:rotate(180deg) scale(1.5); + -moz-transform:rotate(180deg) scale(1.5); + transform:rotate(180deg) scale(1.5); + } + 100% { + -webkit-transform:rotate(360deg) scale(1); + -moz-transform:rotate(360deg) scale(1); + transform:rotate(360deg) scale(1); + } + } + `); let checkLinks = () => { - let installLinks = document.querySelectorAll("img.icon+a"); + let installLinks = document.querySelectorAll("img.icon~a[href^='/install']"); if (installLinks.length <= 0) return; let isLoading = false; [].forEach.call(installLinks, installLink => { From 084c08411522f44992a9c267989efc1cdb113668 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 13:53:43 +0800 Subject: [PATCH 308/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a87298b9685..e13927f78ea 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -5226,6 +5226,10 @@ return true; } + contains(ele) { + return ele == this.shadowContainer || this.bar.contains(ele); + } + appendBar() { if (!mainStyleEle || !mainStyleEle.parentNode) { mainStyleEle = _GM_addStyle(cssText); @@ -5914,7 +5918,7 @@ let dragSiteBtn; let dragOpenDropHandler = e => { - if (!this.bar.contains(e.target)){ + if (!this.contains(e.target)){ let isPage = /^(https?|ftp):/.test(dragSiteBtn.href); if (isPage) { dragSiteBtn.setAttribute("target", "_blank"); @@ -8868,7 +8872,7 @@ } showInPage(_funcKeyCall, e) { - if (this.bar.contains(targetElement) || this.inInput || (!_funcKeyCall && this.funcKeyCall)) { + if (this.contains(targetElement) || this.inInput || (!_funcKeyCall && this.funcKeyCall)) { return; } if (!mainStyleEle || !mainStyleEle.parentNode) { @@ -10362,7 +10366,7 @@ let mouseDownHandler = e => { if ((waitForMouse && e.type === 'mousedown' && e.button === 0) || (e.target.classList && e.target.classList.contains('search-jumper-btn')) || - searchBar.bar.contains(e.target)) { + searchBar.contains(e.target)) { return; } if (searchBar.bar.classList.contains("grabbing")) return; @@ -10434,7 +10438,7 @@ }; let inpageMouseUpHandler = e => { draging = false; - if (searchBar.bar.contains(e.target) || shown) { + if (searchBar.contains(e.target) || shown) { e.preventDefault(); } else { setTimeout(() => { From 87bbef442bb801bbc5de47d12cfe7ec31504befa Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 14:04:10 +0800 Subject: [PATCH 309/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 81b8eba416a..69f730babd6 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -168,7 +168,10 @@ var lastReplyTime = $.cookie('lastReplyTime'); var customReplyStr = $.cookie('customReplyStr'); var isCheckIn = document.title.indexOf("打卡签到") !== -1; - if (customReplyStr) replyStr = customReplyStr; + if (customReplyStr) { + replyStr = customReplyStr; + $.cookie('customReplyStr', replyStr, { expires: 365, path: '/' }); + } if (isCheckIn) { var spaceStr = ""; var spaceLen = Math.floor(Math.random() * 10); From 39bb09da212a1ccb80b598ea052ab8a360081e70 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 16:23:12 +0800 Subject: [PATCH 310/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 53 ++++++++++++++++------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 2165372252c..cdc8e58b4b3 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.9.1 +// @version 2023.11.13.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -19978,26 +19978,26 @@ ImgOps | https://imgops.com/#b#`; self.zoom(self.getRotatedImgCliSize(size).w/self.imgNaturalSize.w); } } - let padding = 50; + let padding1 = Math.min(180, wSize.h>>2, wSize.w>>2), padding2 = 50; if(imgWindow.offsetWidth/imgWindow.offsetHeight>wSize.w/wSize.h){ //宽条,上下半屏 maxWidth = wSize.w; if(posY > wSize.h / 2){ //上 - maxHeight=posY-padding*2; + maxHeight=posY-padding1-padding2; resizeWithLimit(); - imgWindow.style.top=posY - imgWindow.offsetHeight - padding + scrolled.y +'px'; + imgWindow.style.top=posY - imgWindow.offsetHeight - padding1 + scrolled.y +'px'; }else{ //下 - maxHeight=wSize.h-posY-padding*2; + maxHeight=wSize.h-posY-padding1-padding2; resizeWithLimit(); - imgWindow.style.top=posY + padding + scrolled.y +'px'; + imgWindow.style.top=posY + padding1 + scrolled.y +'px'; } let left=(wSize.w - imgWindow.offsetWidth) / 2; - let maxLeft=posX+padding*2; + let maxLeft=posX+padding1+padding2; if(left>maxLeft)left=maxLeft; else { - let minLeft=posX-imgWindow.offsetWidth-padding*2; + let minLeft=posX-imgWindow.offsetWidth-padding1-padding2; if(left wSize.w / 2){ //左 - maxWidth=posX-padding*2; + maxWidth=posX-padding1-padding2; resizeWithLimit(); - imgWindow.style.left=posX - imgWindow.offsetWidth - padding + scrolled.x +'px'; + imgWindow.style.left=posX - imgWindow.offsetWidth - padding1 + scrolled.x +'px'; }else{ //右 - maxWidth=wSize.w-posX-padding*2; + maxWidth=wSize.w-posX-padding1-padding2; resizeWithLimit(); - imgWindow.style.left=posX + padding + scrolled.x +'px'; + imgWindow.style.left=posX + padding1 + scrolled.x +'px'; } let top=(wSize.h - imgWindow.offsetHeight) / 2; - let maxTop=posY+padding*2; + let maxTop=posY+padding1+padding2; if(top>maxTop)top=maxTop; else { - let minTop=posY-imgWindow.offsetHeight-padding*2; + let minTop=posY-imgWindow.offsetHeight-padding1-padding2; if(top 20 && pa.scrollWidth > 20) { + } + var targetPosi = getContentClientRect(this.data.img); + var pa = this.data.img.parentNode; + if (pa && pa.scrollHeight > 20 && pa.scrollWidth > 20) { var paPosi=getContentClientRect(pa); if (paPosi.width > 20 && paPosi.height > 20) { - if (paPosi.width < targetPosi.width) { - targetPosi.left = paPosi.left; + if (this.data.img.offsetTop != 0) { + if (paPosi.height < targetPosi.height) { + targetPosi.top = paPosi.top; + } } - if (paPosi.height < targetPosi.height) { - targetPosi.top = paPosi.top; + if (this.data.img.offsetLeft != 0) { + if (paPosi.width < targetPosi.width) { + targetPosi.left = paPosi.left; + } } } } From 9c5610adbb0195ea192a8a92788de2a5f02482ae Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 17:15:38 +0800 Subject: [PATCH 311/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e13927f78ea..533e725e08b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -11475,7 +11475,7 @@ border-radius: 50%; z-index: 2147483647; box-sizing: content-box; - opacity: 0; + opacity: 0.1; transform: scale(.5); -moz-transition:opacity 0.3s ease, transform 0.3s; -webkit-transition:opacity 0.3s ease, transform 0.3s; @@ -11618,10 +11618,12 @@ let sector2Start = -sector2Gap / 2; let dragSector; let dragLogo = dragRoundFrame.querySelector(".dragLogo"); + let removeTimer; dragLogo.addEventListener("dragover", e => { e.preventDefault(); }, true); dragLogo.addEventListener("dragenter", e => { + clearTimeout(removeTimer); if (dragSector) { dragSector.style.transform = `rotate(${dragSector.dataset.deg}deg) ${searchData.prefConfig.hideDragHistory ? 'scale(1.2)' : ''}`; dragSector.classList.remove("over"); @@ -11653,13 +11655,14 @@ e.preventDefault(); }, true); sectorSpan.addEventListener("dragenter", e => { + clearTimeout(removeTimer); if (!sectorSpan.innerText) return; if (dragSector) { dragSector.style.transform = `rotate(${dragSector.dataset.deg}deg) ${searchData.prefConfig.hideDragHistory ? 'scale(1.2)' : ''}`; dragSector.classList.remove("over"); } dragLogo.style.transform = ""; - sector.style.transform = `scale(${searchData.prefConfig.hideDragHistory ? '1.6' : '1.35'}) ${transform}`; + sector.style.transform = `scale(${searchData.prefConfig.hideDragHistory ? '1.6' : '1.25'}) ${transform}`; sector.classList.add("over"); dragSector = sector; clearTimeout(openAllTimer); @@ -11694,9 +11697,11 @@ }); let minClientX, maxClientX, minClientY, maxClientY; dragenterHandler = e => { - if (!dragRoundFrame.contains(e.target)){ - removeFrame(); - return; + clearTimeout(removeTimer); + if (!dragRoundFrame.contains(e.target)) { + removeTimer = setTimeout(() => { + removeFrame(); + }, 300); } }; dragCon = document.createElement("div"); From 04e7aa67c3caed59910e175b9d9f9f915a324a40 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 17:41:27 +0800 Subject: [PATCH 312/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 533e725e08b..72e5e14f347 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -10521,6 +10521,9 @@ (searchData.prefConfig.dragMeta && !e.metaKey)) { return; } + if (!searchData.prefConfig.enableInInput && !e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey && inputActive(document)) { + return; + } targetElement = e.target; if (targetElement.shadowRoot) return; if (targetElement.getAttribute && targetElement.getAttribute("draggable") == "true") return; @@ -11477,9 +11480,9 @@ box-sizing: content-box; opacity: 0.1; transform: scale(.5); - -moz-transition:opacity 0.3s ease, transform 0.3s; - -webkit-transition:opacity 0.3s ease, transform 0.3s; - transition:opacity 0.3s ease, transform 0.3s; + -moz-transition:opacity 0.3s ease, transform 0.15s; + -webkit-transition:opacity 0.3s ease, transform 0.15s; + transition:opacity 0.3s ease, transform 0.15s; } #searchJumperWrapper>.panel { position: relative; From 1a32682cb310043cd108749b04d330ed0f1e5d97 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 17:42:53 +0800 Subject: [PATCH 313/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 72e5e14f347..b22c37f15b3 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -11478,7 +11478,7 @@ border-radius: 50%; z-index: 2147483647; box-sizing: content-box; - opacity: 0.1; + opacity: 0; transform: scale(.5); -moz-transition:opacity 0.3s ease, transform 0.15s; -webkit-transition:opacity 0.3s ease, transform 0.15s; From e1588aa82bf6a6072f49422de0ddba8ae0d7fd76 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 13 Nov 2023 18:36:32 +0800 Subject: [PATCH 314/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 42 +++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0d3f862ab83..40decba4063 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -3369,6 +3369,10 @@ beginLoading() { isLoading = true; + if (targetY >= 0) { + window.scrollTo({ top: targetY, behavior: 'instant'}); + targetY = -1; + } let lastScrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; ruleParser.insertElement(loadingDiv); if (forceState == 2) { @@ -3436,6 +3440,11 @@ isLoading = false; return false; } + + if (targetY >= 0) { + window.scrollTo({ top: targetY, behavior: 'instant'}); + targetY = -1; + } let lastScrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; this.getInsert(); var self = this, newEles = []; @@ -3660,7 +3669,8 @@ scrollToPageBar(prePageBar); } else { let scrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; - window.scrollTo({ top: scrollTop - (window.innerHeight || document.documentElement.clientHeight), behavior: 'smooth'}); + targetY = scrollTop - (window.innerHeight || document.documentElement.clientHeight); + window.scrollTo({ top: targetY, behavior: 'smooth'}); } }, true); @@ -3672,10 +3682,12 @@ } else { if (pageBarObj.preBar) { let scrollH = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); - window.scrollTo({ top: (scrollH || 9999999), behavior: 'instant'}); + targetY = scrollH || 9999999; + window.scrollTo({ top: targetY, behavior: 'smooth'}); } else { let scrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; - window.scrollTo({ top: scrollTop + (window.innerHeight || document.documentElement.clientHeight), behavior: 'smooth'}); + targetY = scrollTop + (window.innerHeight || document.documentElement.clientHeight); + window.scrollTo({ top: targetY, behavior: 'smooth'}); } } }, true); @@ -6682,8 +6694,8 @@ checkScrollReach(); } ruleParser.changeVisibility(); + let curScroll = getBody(document).scrollTop || document.documentElement.scrollTop; if (ruleParser.curSiteRule.lockScroll) { - let curScroll = getBody(document).scrollTop || document.documentElement.scrollTop; if (isLoading && Math.abs(lastScroll - curScroll) > 350) { getBody(document).scrollTop = lastScroll; document.documentElement.scrollTop = lastScroll; @@ -6691,6 +6703,11 @@ lastScroll = curScroll; } } + if (targetY >= 0) { + if (Math.abs(targetY - curScroll) < 100) { + targetY = -1; + } + } }; dblclickHandler = e => { if (forceState == 1 || compareNodeName(e.target, ["input", "textarea", "select", "a", "button", "svg", "use", "img", "path"])) return; @@ -6891,14 +6908,14 @@ return loadmoreBtn; } - var lastPageBar; + var targetY = -1; function scrollToPageBar(bar){ let yOffset = -20; if (typeof ruleParser.curSiteRule.pageBarTop !== 'undefined') { yOffset = -ruleParser.curSiteRule.pageBarTop; } - const y = bar.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: lastPageBar == bar ? 'instant' : 'smooth'}); + targetY = bar.getBoundingClientRect().top + window.pageYOffset + yOffset; + window.scrollTo({ top: targetY, behavior: 'smooth'}); } const pageNumReg=/[&\/\?](p=|page[=\/_-]?)\d+|[_-]\d+\./; @@ -7042,7 +7059,8 @@ scrollToPageBar(prePageBar); } else { let scrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; - window.scrollTo({ top: scrollTop - (window.innerHeight || document.documentElement.clientHeight), behavior: 'smooth'}); + targetY = scrollTop - (window.innerHeight || document.documentElement.clientHeight); + window.scrollTo({ top: targetY, behavior: 'smooth'}); } }); nextBtn.addEventListener("click", e => { @@ -7053,7 +7071,8 @@ scrollToPageBar(nextPageBar); } else { scrollH = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); - window.scrollTo({ top: scrollH || 9999999, behavior: 'instant'}); + targetY = scrollH || 9999999; + window.scrollTo({ top: targetY, behavior: 'smooth'}); } }); if (!rulesData.hideBarArrow) { @@ -7195,7 +7214,6 @@ ruleParser.insertElement(pageBar); ruleParser.runPageBar(pageBar); - lastPageBar = pageBar; return pageBar; } @@ -7757,6 +7775,10 @@ } function resizeIframe(iframe, frameDoc, pageEle) { + if (targetY >= 0) { + window.scrollTo({ top: targetY, behavior: 'instant'}); + targetY = -1; + } let curScroll = getBody(document).scrollTop || document.documentElement.scrollTop; if (ruleParser.curSiteRule.singleUrl || forceState === 2) { let height = (getBody(frameDoc).scrollHeight || getBody(frameDoc).offsetHeight || 500); From 3884498c0f8600c8abf260116d999c380056c075 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 08:17:34 +0800 Subject: [PATCH 315/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- ...witch Traditional Chinese and Simplified Chinese.user.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 329f5b27c82..88ea36a3cba 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.7.4 +// @version 1.2.7.5 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -682,6 +682,10 @@ '著':[ '着', ['著','著名','著作','巨著','著稱','顯著','昭著','卓著','所著','著述','編著','著書','名著','原著','遺著','譯著','著譯','著:','著:','土著','論著','專著','日新月著','著有','合著','知著','著錄','著者','較著','頗著','文著','著文','自著','著成','著《','撰著','著撰','拙著','著明','著論','新著','著於','而著','雜著','著足','著花','醫著','聲著'] + ], + '乾':[ + '干', + ['乾','乾隆','乾卦','乾道','乾宅','乾造','乾之卦','乾為','「乾」'] ] }; From 550786b282e744a53e961b9bfb08d44ea517b716 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 14 Nov 2023 02:03:30 +0000 Subject: [PATCH 316/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 37512d94b30..f6fe12e9cbe 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,34 @@ [ +{ + "resource_url": "http://wedata.net/items/86185", + "data": { + "insertBefore": "", + "pageElement": "id('the_content')/node()[not(@class='related-links')]", + "nextLink": "//li[span[@aria-current='page']][number()>0]/following-sibling::li[1]/a", + "url": "^https://ananweb\\.jp/.", + "exampleUrl": "https://ananweb.jp/column/ikemendorama/498426/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ananweb 記事", + "created_at": "2023-11-13T20:54:27+09:00", + "updated_at": "2023-11-13T20:54:27+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86184", + "data": { + "insertBefore": "", + "pageElement": "//a[contains(concat(' ', @class, ' '), ' hentry ')][not(ancestor::aside)]", + "nextLink": "//div[@class='nav-next']/a", + "url": "^https://ananweb\\.jp/", + "exampleUrl": "https://ananweb.jp/\r\nhttps://ananweb.jp/tags/love/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ananweb", + "created_at": "2023-11-13T20:54:06+09:00", + "updated_at": "2023-11-13T20:54:06+09:00" +}, { "resource_url": "http://wedata.net/items/86183", "data": { From e11c11efc3998c5c45b3a748eaf6f991aadbb47e Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 11:53:58 +0800 Subject: [PATCH 317/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index d4e7c91071a..f945aab733f 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.1 +// @version 0.1.2 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -46,8 +46,8 @@ if (!text || !keywords || keywords.length < 6) return {matched: false}; text = text.toLowerCase(); keywords = keywords.toLowerCase(); - let wordArr = text.replace(/[,.!\?,。!?… ]+/g, " ").split(" "); - let kwArr = keywords.replace(/[,.!\?,。!?… ]+/g, " ").split(" "); + let wordArr = text.replace(/[\n,.!\?,。!?… ]+/g, " ").split(" "); + let kwArr = keywords.replace(/[\n,.!\?,。!?… ]+/g, " ").split(" "); let matched = false, pos = -1, len = 0, matchedStr = []; for (let i = 0; i < wordArr.length; i++) { matched = true; @@ -61,7 +61,7 @@ if (matched) break; } if (matched) { - let wordMatch = text.match(new RegExp(matchedStr.join("[,.!\?,。!?… ]+"), "i")); + let wordMatch = text.match(new RegExp(matchedStr.join("[\n,.!\?,。!?… ]+"), "i")); if (wordMatch) { let content = wordMatch[0]; len = content.length; From c250476c49fe0da277926aefa245ec3103ddcb6d Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 12:26:29 +0800 Subject: [PATCH 318/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 42 ++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index b22c37f15b3..9f56fd95677 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.8 +// @version 1.7.9 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -890,6 +890,7 @@ if (_unsafeWindow.searchJumperInited) return; _unsafeWindow.searchJumperInited = true; if (!_unsafeWindow.searchJumperAddons) _unsafeWindow.searchJumperAddons = []; + const curRef = document.referrer; var storage = { supportGM: typeof GM_getValue == 'function' && typeof GM_getValue('a', 'b') != 'undefined', @@ -3290,6 +3291,9 @@ e.preventDefault(); if (e.target.nodeName.toUpperCase() === 'EM') return; if (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) return; + if (this.wordModeBtn.classList.contains("checked")) { + return; + } this.showModifyWindow(word, wordSpan); }, true); wordSpan.addEventListener("mousedown", e => { @@ -3306,10 +3310,17 @@ }); let removeBtn = document.createElement("div"); removeBtn.addEventListener("mousedown", e => { - wordSpan.parentNode.removeChild(wordSpan); - this.removeHighlightWord(word); e.stopPropagation(); e.preventDefault(); + if (this.wordModeBtn.classList.contains("checked")) { + this.wordModeBtn.classList.remove("checked"); + if (this.lockWords) { + this.refreshPageWords(this.lockWords); + } + return; + } + wordSpan.parentNode.removeChild(wordSpan); + this.removeHighlightWord(word); }); removeBtn.className = "removeWord"; removeBtn.innerHTML = createHTML(`${i18n("removeBtn")}${closePath}`); @@ -5159,12 +5170,14 @@ } } else if (this.searchInPageTab.checked) { this.con.classList.add("in-find"); + let selStr = getSelectStr(); + if (selStr) this.searchJumperInPageInput.value = ""; if (this.searchJumperInPageInput.value) { this.submitInPageWords(); } else if (!this.navMarks.innerHTML) { - this.submitIgnoreSpace(getSelectStr()); + this.submitIgnoreSpace(selStr); } else { - this.searchJumperInPageInput.value = getSelectStr(); + this.searchJumperInPageInput.value = selStr; this.submitInPageWords(); } this.searchJumperInPageInput.focus(); @@ -5222,7 +5235,7 @@ document.documentElement.appendChild(this.shadowContainer); } let shadow = this.shadowContainer.shadowRoot || this.shadowContainer.attachShadow({ mode: "open" }); - shadow.appendChild(ele); + if (ele.parentNode != shadow) shadow.appendChild(ele); return true; } @@ -5400,19 +5413,18 @@ } }); this.searchJumperInPageInput.addEventListener("keydown", e => { + e.stopPropagation(); switch(e.keyCode) { case 8://退格 if (!this.searchJumperInPageInput.value) { let lastWordSpan = this.searchInPageLockWords.lastChild; if (lastWordSpan) { lastWordSpan.dispatchEvent(new CustomEvent("editword")); - e.stopPropagation(); e.preventDefault(); } } break; case 9://tab - e.stopPropagation(); e.preventDefault(); this.filterSitesTab.checked = true; this.con.classList.remove("in-find"); @@ -5728,10 +5740,10 @@ }, 500); }); this.searchInput.addEventListener("keydown", e => { + e.stopPropagation(); switch(e.keyCode) { case 9: if (e.shiftKey) { - e.stopPropagation(); e.preventDefault(); this.searchInPageTab.checked = true; this.con.classList.add("in-find"); @@ -5781,14 +5793,13 @@ }, 500); }); this.searchJumperInputKeyWords.addEventListener("keydown", e => { + e.stopPropagation(); switch(e.keyCode) { case 9: if (!this.inInput) { - e.stopPropagation(); e.preventDefault(); this.searchInput.focus(); } else if (!e.shiftKey) { - e.stopPropagation(); e.preventDefault(); this.searchInPageTab.checked = true; this.con.classList.add("in-find"); @@ -5802,7 +5813,7 @@ default: break; } - }); + }, true); this.closeBtn.addEventListener("mousedown", e => { self.hideSearchInput(); if (searchData.prefConfig.emptyAfterCloseInput) { @@ -6104,7 +6115,7 @@ checkSearchJump() { let inPageWords; if (searchData.prefConfig.showInSearchJumpPage && referrer && !disableHighlight) { - if (document.referrer.indexOf(referrer) != -1) { + if (curRef.indexOf(referrer) != -1) { if (cacheKeywords) { this.wordModeBtn.classList.add("checked"); } @@ -6117,11 +6128,14 @@ //storage.setItem("referrer", ""); } } + if (cacheKeywords && !this.searchJumperInPageInput.value) { + this.searchJumperInPageInput.value = cacheKeywords; + } inPageWords = inPageWords || globalInPageWords; if (inPageWords) { this.appendBar(); this.setInPageWords(inPageWords); - } else if (!this.searchJumperInPageInput.value && document.referrer.indexOf(referrer) != -1) { + } else if (!this.searchJumperInPageInput.value && curRef.indexOf(referrer) != -1) { inPageWords = cacheKeywords; try { inPageWords = decodeURIComponent(inPageWords); From 84ba86663bc658ee80662a40ca3edf516ab9f359 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 12:30:06 +0800 Subject: [PATCH 319/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index f945aab733f..e14642ecb51 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.2 +// @version 0.1.3 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -53,7 +53,7 @@ matched = true; matchedStr = []; for (let j = 0; j < kwArr.length; j++) { - if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > 3) { + if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > (kwArr[j].length>>2 || 1)) { matched = false; break; } else matchedStr.push(wordArr[i + j]); From 179a423eccf1c588ae0d90e8801d3e3972068443 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 12:43:17 +0800 Subject: [PATCH 320/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9f56fd95677..622761f9ece 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2559,6 +2559,7 @@ align-items: center; white-space: nowrap; max-width: 100%; + line-height: initial; } #searchInPage>.lockWords>span>em { cursor: alias; From 92ccf0e6d669fff69ef017d3f11b4df1ec082d6c Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 12:52:51 +0800 Subject: [PATCH 321/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 622761f9ece..93d3aefccc7 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -8887,7 +8887,7 @@ } showInPage(_funcKeyCall, e) { - if (this.contains(targetElement) || this.inInput || (!_funcKeyCall && this.funcKeyCall)) { + if (this.contains(targetElement) || (this.inInput && mainStyleEle) || (!_funcKeyCall && this.funcKeyCall)) { return; } if (!mainStyleEle || !mainStyleEle.parentNode) { From f4b1dcbe2be90915584e4bafe88f1f7bc62cece1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 12:52:56 +0800 Subject: [PATCH 322/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index e14642ecb51..0a7c6297010 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -53,7 +53,7 @@ matched = true; matchedStr = []; for (let j = 0; j < kwArr.length; j++) { - if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > (kwArr[j].length>>2 || 1)) { + if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > kwArr[j].length>>2) { matched = false; break; } else matchedStr.push(wordArr[i + j]); From a4440d4bb42423e10b4b203da4685abb6e02e53b Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 20:40:57 +0800 Subject: [PATCH 323/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index cdc8e58b4b3..c759dc9ff4b 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.13.1 +// @version 2023.11.14.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16762,7 +16762,7 @@ ImgOps | https://imgops.com/#b#`; var container = document.querySelector('.pv-gallery-container'), preloadContainer = document.querySelector('.pv-gallery-preloaded-img-container'); - var bgReg=/.*url\(\s*["']?(.+?)["']?\s*\)([^'"]|$)/i; + var bgReg=/.*?url\(\s*["']?(.+?)["']?\s*\)([^'"]|$)/i; var imgs=Array.from(getBody(document).querySelectorAll('*')).reduceRight((total, node) => { if(/^img$/i.test(node.nodeName)){ total.push(node); @@ -16796,7 +16796,7 @@ ImgOps | https://imgops.com/#b#`; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - node.src=match[1]; + node.src=match[1].replace(/\\"/g, '"'); total.push(node); } } @@ -16804,7 +16804,7 @@ ImgOps | https://imgops.com/#b#`; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - node.src=match[1]; + node.src=match[1].replace(/\\"/g, '"'); total.push(node); } } @@ -16812,7 +16812,7 @@ ImgOps | https://imgops.com/#b#`; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - node.src=match[1]; + node.src=match[1].replace(/\\"/g, '"'); total.push(node); } } @@ -22769,7 +22769,7 @@ ImgOps | https://imgops.com/#b#`; } else if (target.nodeName.toUpperCase() != 'IMG') { if (target.nodeName.toUpperCase() == "AREA") target = target.parentNode; var targetBg; - var bgReg = /.*url\(\s*["']?(.+?)["']?\s*\)([^'"].*|$)/i; + var bgReg = /.*?url\(\s*["']?(.+?)["']?\s*\)([^'"].*|$)/i; var broEle = target.previousElementSibling, broImg; while (broEle) { if (broEle.nodeName == "IMG") broImg = broEle; @@ -22789,7 +22789,7 @@ ImgOps | https://imgops.com/#b#`; if (broEle == target) broEle = null; } if (prefs.floatBar.listenBg && hasBg(target)) { - targetBg = unsafeWindow.getComputedStyle(target).backgroundImage.replace(bgReg, "$1"); + targetBg = unsafeWindow.getComputedStyle(target).backgroundImage.replace(bgReg, "$1").replace(/\\"/g, '"'); let src = targetBg, nsrc = src, noActual = true, type = "scale"; result = { src: nsrc, @@ -22803,7 +22803,7 @@ ImgOps | https://imgops.com/#b#`; } else if (target.children.length == 1 && target.children[0].nodeName == "IMG") { target = target.children[0]; } else if (prefs.floatBar.listenBg && broEle && hasBg(broEle)) { - targetBg = unsafeWindow.getComputedStyle(broEle).backgroundImage.replace(bgReg, "$1"); + targetBg = unsafeWindow.getComputedStyle(broEle).backgroundImage.replace(bgReg, "$1").replace(/\\"/g, '"'); let src = targetBg, nsrc = src, noActual = true, type = "scale"; result = { src: nsrc, @@ -22823,7 +22823,7 @@ ImgOps | https://imgops.com/#b#`; target = target.parentNode; } else if (prefs.floatBar.listenBg && hasBg(target.parentNode)) { target = target.parentNode; - targetBg = unsafeWindow.getComputedStyle(target).backgroundImage.replace(bgReg, "$1"); + targetBg = unsafeWindow.getComputedStyle(target).backgroundImage.replace(bgReg, "$1").replace(/\\"/g, '"'); let src = targetBg, nsrc = src, noActual = true, type = "scale"; result = { src: nsrc, @@ -22875,7 +22875,7 @@ ImgOps | https://imgops.com/#b#`; break; } else if (prefs.floatBar.listenBg && hasBg(ele)) { target = ele; - targetBg = unsafeWindow.getComputedStyle(target).backgroundImage.replace(bgReg, "$1"); + targetBg = unsafeWindow.getComputedStyle(target).backgroundImage.replace(bgReg, "$1").replace(/\\"/g, '"'); let src = targetBg, nsrc = src, noActual = true, type = "scale"; result = { src: nsrc, From baf7b0b9cc7e163bce86c0b406a159a79b9468e8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 14 Nov 2023 21:06:15 +0800 Subject: [PATCH 324/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 93d3aefccc7..623a49583f8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.9 +// @version 1.7.10 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -5406,8 +5406,8 @@ this.hideSearchInput(); } else { this.highlight(""); + this.searchJumperInPageInput.value = this.lockWords || ""; this.lockWords = ""; - this.searchJumperInPageInput.value = ""; this.searchInPageLockWords.innerHTML = createHTML(); this.setNav(false, true); } @@ -5559,8 +5559,8 @@ }); this.closeNavBtn.addEventListener("click", e => { if (this.lockWords) { + this.searchJumperInPageInput.value = this.lockWords || ""; this.lockWords = ""; - this.searchJumperInPageInput.value = ""; this.searchInPageLockWords.innerHTML = createHTML(); this.searchJumperInPageInput.style.paddingLeft = ""; this.submitInPageWords(); @@ -5819,8 +5819,8 @@ self.hideSearchInput(); if (searchData.prefConfig.emptyAfterCloseInput) { self.highlight(""); + self.searchJumperInPageInput.value = self.lockWords || ""; self.lockWords = ""; - self.searchJumperInPageInput.value = ""; self.searchInPageLockWords.innerHTML = createHTML(); self.setNav(false, true); } @@ -6131,6 +6131,7 @@ } if (cacheKeywords && !this.searchJumperInPageInput.value) { this.searchJumperInPageInput.value = cacheKeywords; + this.wordModeBtn.classList.add("checked"); } inPageWords = inPageWords || globalInPageWords; if (inPageWords) { @@ -10084,6 +10085,7 @@ quickAddByInput(firstInput); } }); + targetElement = getBody(document); let logoSvg = logoBtn.children[0]; let grabState = 0;//0 未按下 1 已按下 2 已拖动 let hideTimer; From 95832eaaea651d33f9c5f2bc58ef526130dee118 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 08:03:02 +0800 Subject: [PATCH 325/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 0a7c6297010..0c5a3ae4384 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.3 +// @version 0.1.4 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -53,7 +53,10 @@ matched = true; matchedStr = []; for (let j = 0; j < kwArr.length; j++) { - if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > kwArr[j].length>>2) { + let kwLen = kwArr[j].length; + let maxTolerance = kwLen>>2; + if (kwLen > 3) maxTolerance++; + if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > maxTolerance) { matched = false; break; } else matchedStr.push(wordArr[i + j]); From e9b8f835ad4b39ad03ae4d6343d130cdcc8ec3e4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 08:47:04 +0800 Subject: [PATCH 326/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 33e1bed2a8a..992efe336ae 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.5.9 +// @version 2.7.6 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -379,7 +379,7 @@ if (window.top != window.self) { return parseInt(str); } - var dragOverItem, dragFrom; + var dragOverItem, dragFrom, linkDict; function createLinkItem(aEle) { let item = document.createElement("div"); item.innerHTML = createHTML(` @@ -413,6 +413,7 @@ if (window.top != window.self) { } e.preventDefault(); }); + linkDict[aEle.href] = item; dacLinksCon.appendChild(item); } @@ -474,21 +475,15 @@ if (window.top != window.self) { let linkList = [].slice.call(dacLinksCon.children); if (linkList[0].children[1].href != list[0].href) { list.reverse().forEach(a => { - for (let i = 0; i < linkList.length; i++) { - let link = linkList[i]; - if (link.children[1].href == a.href) { - dacLinksCon.insertBefore(link, dacLinksCon.children[0]); - } - } + let link = linkDict[a.href]; + if (!link) return; + dacLinksCon.insertBefore(link, dacLinksCon.children[0]); }); } else { list.forEach(a => { - for (let i = 0; i < linkList.length; i++) { - let link = linkList[i]; - if (link.children[1].href == a.href) { - dacLinksCon.insertBefore(link, dacLinksCon.children[0]); - } - } + let link = linkDict[a.href]; + if (!link) return; + dacLinksCon.insertBefore(link, dacLinksCon.children[0]); }); } }; @@ -687,6 +682,7 @@ if (window.top != window.self) { shadow.appendChild(filterListContainer); } if (shadowContainer.parentNode) shadowContainer.parentNode.removeChild(shadowContainer); + linkDict = {}; list.forEach(a => { createLinkItem(a); }); From c84f86bf2e4137dcd7a62a7e4769ce0445c270db Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 09:00:36 +0800 Subject: [PATCH 327/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 623a49583f8..83bf854205b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.10 +// @version 1.7.11 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1649,7 +1649,7 @@ } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type { height: ${searchData.prefConfig.minPopup ? (24 * this.tilesZoom + 'px') : 'auto'}!important; - max-width: ${searchData.prefConfig.minPopup ? (24 * this.tilesZoom) : ((40 * this.tilesZoom) * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom)}px!important; + max-width: ${searchData.prefConfig.minPopup ? (24 * this.tilesZoom) : (40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom)}px!important; width: auto!important; width: max-content!important; max-height: ${108 * this.tilesZoom + 10}px; From efe5c6648b2584b50ffd29500f84c8bb9c648f92 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 16:10:37 +0800 Subject: [PATCH 328/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 146 ++++++++++++++-------------- 1 file changed, 71 insertions(+), 75 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index c759dc9ff4b..3aaabe5df76 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.14.1 +// @version 2023.11.15.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -19913,116 +19913,116 @@ ImgOps | https://imgops.com/#b#`; // 保持注释在图片里面 // keepSI(this.descriptionSpan,['bottom', 'left'],[-40, 10]); }, - followPos:function(posX, posY){ - if(this.removed)return; - if(!prefs.floatBar.globalkeys.previewFollowMouse)return; - var imgWindow=this.imgWindow; - if(!imgWindow)return; + followPos: function(posX, posY) { + if (this.removed) return; + if (!prefs.floatBar.globalkeys.previewFollowMouse) return; + var imgWindow = this.imgWindow; + if (!imgWindow) return; this.followPosX = posX; this.followPosY = posY; - if(!this.following){ + if (!this.following) { clearTimeout(this.followPosTimer); - this.followPosTimer=setTimeout(() => { - this.following=true; + this.followPosTimer = setTimeout(() => { + this.following = true; imgWindow.classList.add("pv-pic-window-transition-all"); this.followPos(this.followPosX, this.followPosY); }, 50); return; } - this.following=false; - var wSize=getWindowSize(); + this.following = false; + var wSize = getWindowSize(); this.zoom(1); - if(prefs.imgWindow.fitToScreen && !imgWindow.classList.contains("pv-pic-window-scroll")){ - var imgWindowCS=unsafeWindow.getComputedStyle(imgWindow); - var rectSize={ - h:parseFloat(imgWindowCS.height), - w:parseFloat(imgWindowCS.width), + if (prefs.imgWindow.fitToScreen && !imgWindow.classList.contains("pv-pic-window-scroll")) { + var imgWindowCS = unsafeWindow.getComputedStyle(imgWindow); + var rectSize = { + h: parseFloat(imgWindowCS.height), + w: parseFloat(imgWindowCS.width), }; var size; - if(prefs.imgWindow.fitToScreenSmall || (rectSize.w - wSize.w>0 || rectSize.h - wSize.h>0)){ - if(rectSize.w/rectSize.h > wSize.w/wSize.h){ - size={ - w:wSize.w, - h:wSize.w / (rectSize.w/rectSize.h), + if (prefs.imgWindow.fitToScreenSmall || (rectSize.w - wSize.w > 0 || rectSize.h - wSize.h > 0)) { + if (rectSize.w / rectSize.h > wSize.w / wSize.h) { + size = { + w: wSize.w, + h: wSize.w / (rectSize.w / rectSize.h), }; - }else{ - size={ - h:wSize.h, - w:wSize.h * (rectSize.w/rectSize.h), + } else { + size = { + h: wSize.h, + w: wSize.h * (rectSize.w / rectSize.h), } }; - this.zoom(this.getRotatedImgCliSize(size).w/this.imgNaturalSize.w); + this.zoom(this.getRotatedImgCliSize(size).w / this.imgNaturalSize.w); } } - var scrolled=prefs.imgWindow.fixed ? {x:0, y:0} : getScrolled(); + var scrolled = prefs.imgWindow.fixed ? {x: 0, y: 0} : getScrolled(); var maxWidth, maxHeight, left, top; - var self=this; - function resizeWithLimit(){ - if(imgWindow.offsetWidth>maxWidth || imgWindow.offsetHeight>maxHeight){ + var self = this; + function resizeWithLimit() { + if (imgWindow.offsetWidth > maxWidth || imgWindow.offsetHeight > maxHeight) { var size; - if(imgWindow.offsetWidth/imgWindow.offsetHeight > maxWidth/maxHeight){ - size={ - w:maxWidth, - h:maxWidth / (imgWindow.offsetWidth/imgWindow.offsetHeight), + if (imgWindow.offsetWidth / imgWindow.offsetHeight > maxWidth / maxHeight) { + size = { + w: maxWidth, + h: maxWidth / (imgWindow.offsetWidth / imgWindow.offsetHeight), }; - }else{ - size={ - h:maxHeight, - w:maxHeight * (imgWindow.offsetWidth/imgWindow.offsetHeight), + } else { + size = { + h: maxHeight, + w: maxHeight * (imgWindow.offsetWidth / imgWindow.offsetHeight), } }; - self.zoom(self.getRotatedImgCliSize(size).w/self.imgNaturalSize.w); + self.zoom(self.getRotatedImgCliSize(size).w / self.imgNaturalSize.w); } } - let padding1 = Math.min(180, wSize.h>>2, wSize.w>>2), padding2 = 50; - if(imgWindow.offsetWidth/imgWindow.offsetHeight>wSize.w/wSize.h){ + let padding1 = Math.min(180, wSize.h>>2, wSize.w>>2), padding2 = 50;//内外侧间距 + if (imgWindow.offsetWidth / imgWindow.offsetHeight > wSize.w / wSize.h) { //宽条,上下半屏 maxWidth = wSize.w; - if(posY > wSize.h / 2){ + if (posY > wSize.h / 2) { //上 - maxHeight=posY-padding1-padding2; + maxHeight = posY - padding1 - padding2; resizeWithLimit(); - imgWindow.style.top=posY - imgWindow.offsetHeight - padding1 + scrolled.y +'px'; - }else{ + imgWindow.style.top = posY - imgWindow.offsetHeight - padding1 + scrolled.y + 'px'; + } else { //下 - maxHeight=wSize.h-posY-padding1-padding2; + maxHeight = wSize.h - posY - padding1 - padding2; resizeWithLimit(); - imgWindow.style.top=posY + padding1 + scrolled.y +'px'; + imgWindow.style.top = posY + padding1 + scrolled.y + 'px'; } - let left=(wSize.w - imgWindow.offsetWidth) / 2; - let maxLeft=posX+padding1+padding2; - if(left>maxLeft)left=maxLeft; + let left = (wSize.w - imgWindow.offsetWidth) / 2; + let maxLeft = posX + padding1; + if (left > maxLeft) left = maxLeft; else { - let minLeft=posX-imgWindow.offsetWidth-padding1-padding2; - if(left wSize.w / 2){ + if (posX > wSize.w / 2) { //左 - maxWidth=posX-padding1-padding2; + maxWidth = posX - padding1 - padding2; resizeWithLimit(); - imgWindow.style.left=posX - imgWindow.offsetWidth - padding1 + scrolled.x +'px'; - }else{ + imgWindow.style.left = posX - imgWindow.offsetWidth - padding1 + scrolled.x + 'px'; + } else { //右 - maxWidth=wSize.w-posX-padding1-padding2; + maxWidth = wSize.w - posX - padding1 - padding2; resizeWithLimit(); - imgWindow.style.left=posX + padding1 + scrolled.x +'px'; + imgWindow.style.left = posX + padding1 + scrolled.x + 'px'; } - let top=(wSize.h - imgWindow.offsetHeight) / 2; - let maxTop=posY+padding1+padding2; - if(top>maxTop)top=maxTop; + let top = (wSize.h - imgWindow.offsetHeight) / 2; + let maxTop = posY + padding1; + if (top > maxTop) top = maxTop; else { - let minTop=posY-imgWindow.offsetHeight-padding1-padding2; - if(top Date: Wed, 15 Nov 2023 21:04:50 +0800 Subject: [PATCH 329/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 83bf854205b..c685e1a2437 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.11 +// @version 1.7.12 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -3239,7 +3239,6 @@ if (!words) { if (!this.lockWords) { this.highlight(""); - this.highlightSpans = {}; } else { this.highlight("insert"); for (let i in this.highlightSpans) { @@ -4428,6 +4427,7 @@ let searchingPre = false; let self = this; if (words === "") { + this.highlightSpans = {}; Object.values(this.marks).forEach(markList => { if (!markList) return; markList.forEach(mark => { @@ -5172,13 +5172,15 @@ } else if (this.searchInPageTab.checked) { this.con.classList.add("in-find"); let selStr = getSelectStr(); - if (selStr) this.searchJumperInPageInput.value = ""; - if (this.searchJumperInPageInput.value) { - this.submitInPageWords(); - } else if (!this.navMarks.innerHTML) { - this.submitIgnoreSpace(selStr); - } else { - this.searchJumperInPageInput.value = selStr; + if (selStr) { + this.searchJumperInPageInput.value = ""; + if (!this.navMarks.innerHTML) { + this.submitIgnoreSpace(selStr); + } else { + this.searchJumperInPageInput.value = selStr; + this.submitInPageWords(); + } + } else if (this.searchJumperInPageInput.value) { this.submitInPageWords(); } this.searchJumperInPageInput.focus(); @@ -5563,7 +5565,7 @@ this.lockWords = ""; this.searchInPageLockWords.innerHTML = createHTML(); this.searchJumperInPageInput.style.paddingLeft = ""; - this.submitInPageWords(); + this.highlight(""); this.searchJumperInPageInput.focus(); this.setNav(false, true); storage.setItem("disableHighlight", location.hostname); From 742b46881142e81713c3ddebd6bdffa8a92bb555 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 21:29:51 +0800 Subject: [PATCH 330/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 40decba4063..260afe2542c 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.88 +// @version 1.9.36.89 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2166,8 +2166,8 @@ for (let i = 0; i < list.length; i++) { await sleep(1); let sel = list[i]; - let result = source.querySelector(sel); - if (result) return result; + let result = source.querySelectorAll(sel); + if (result.length > 0) return result[result.length - 1]; } return null; } From 36f9763f56599141fb436e564bf17dbaf52e50a0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 21:30:12 +0800 Subject: [PATCH 331/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index e78c19ca18f..aa4d1fa5e4e 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.88](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.89](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 3749fac0c58a00c8c4642ba30e8acb85af3bf940 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 21:52:13 +0800 Subject: [PATCH 332/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 0c5a3ae4384..32d5feda9cf 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.4 +// @version 0.1.5 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -59,7 +59,7 @@ if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > maxTolerance) { matched = false; break; - } else matchedStr.push(wordArr[i + j]); + } else matchedStr.push(wordArr[i + j].replace(/([\[\]\(\)\^\$\.\+\*\?\|\{\}\-])/g, "\\$1")); } if (matched) break; } From b21b71d544f834def904d4b54103eaa9053a2e0f Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 22:00:31 +0800 Subject: [PATCH 333/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c685e1a2437..679ed3bded4 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.12 +// @version 1.7.13 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -11714,6 +11714,7 @@ dragSector.style.transform = `rotate(${dragSector.dataset.deg}deg)`; dragSector.classList.remove("over"); dragSector = null; + removeFrame(); } e.preventDefault(); }); From 04b18b36ed373e64b177be3b0ca9340b0e28f035 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 15 Nov 2023 22:50:57 +0800 Subject: [PATCH 334/812] 1.9.36.90 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 54 ++++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index aa4d1fa5e4e..90b0c2be7ea 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.89](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.90](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 260afe2542c..2888255e0bf 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.89 +// @version 1.9.36.90 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1587,23 +1587,27 @@ let refreshByClickSel = this.curSiteRule.refreshByClick; if (refreshByClickSel) { let self = this; - document.addEventListener("click", e => { - if (!self.refreshing) { - self.refreshing = true; - setTimeout(() => { - self.refreshing = false; - let checkEles = getAllElements(refreshByClickSel, document); - for (let i = 0; i < checkEles.length; i++) { - if (checkEles[i] === e.target) { - urlChanged = true; - isPause = true; - if (!ruleParser.nextLinkHref) isLoading = false; - break; + if (!this.refreshByClickHandler) { + this.refreshByClickHandler = e => { + if (!self.refreshing) { + self.refreshing = true; + setTimeout(() => { + self.refreshing = false; + let checkEles = getAllElements(refreshByClickSel, document); + for (let i = 0; i < checkEles.length; i++) { + if (checkEles[i] === e.target) { + urlChanged = true; + isPause = true; + if (!ruleParser.nextLinkHref) isLoading = false; + break; + } } - } - }, 300); + }, 300); + } } - }); + } + document.removeEventListener("click", this.refreshByClickHandler); + document.addEventListener("click", this.refreshByClickHandler); } } @@ -3053,7 +3057,7 @@ if (refresh) { this.insert = null; } - if (this.insert && document.documentElement.contains(this.insert)) { + if (this.insert && this.insert.parentNode && document.documentElement.contains(this.insert)) { return this.insert; } if (this.curSiteRule.insert) { @@ -3319,7 +3323,7 @@ let code = self.curSiteRule.init; if (code) { try { - ((typeof code == 'function') ? code : new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', '"use strict";' + code))(null, null, null, sel => {clickAction(sel, document)}, sel => {enterAction(sel, document)}, (sel, v) =>{inputAction(sel, v, document)}); + await ((typeof code == 'function') ? code : new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', 'sleep', '"use strict";' + code))(null, null, null, async sel => {await clickAction(sel, document)}, async sel => {await enterAction(sel, document)}, async (sel, v) =>{await inputAction(sel, v, document)}, async time => {await sleep(time)}); } catch(e) { debug(e); } @@ -3349,6 +3353,10 @@ checkPossible(); } self.refreshByClick(); + if (emuIframe && emuIframe.parentNode) { + emuIframe.parentNode.removeChild(emuIframe); + emuIframe = null; + } let pageElementCss = self.curSiteRule.pageElementCss || rulesData.pageElementCss; if (pageElementCss && pageElementCss !== '0') { @@ -3394,7 +3402,7 @@ if (!this.insert || !this.insert.parentNode) { this.getInsert(); } - if (this.insert) { + if (this.insert && this.insert.parentNode) { let self = this; if (ele.nodeName == "#document-fragment") { [].forEach.call(ele.children, el => { @@ -7694,7 +7702,7 @@ emuIframe.frameBorder = '0'; emuIframe.style.cssText = 'margin:0!important;padding:0!important;flex:0;opacity:0!important;pointer-events:none!important;position:fixed;top:0px;left:0px;z-index:-2147483647;'; emuIframe.addEventListener("load", e => { - setTimeout(() => { + setTimeout(async () => { try { iframeDoc = emuIframe.contentDocument || emuIframe.contentWindow.document; } catch(e) { @@ -7711,7 +7719,7 @@ let code = ruleParser.curSiteRule.init; if (code) { try { - new AsyncFunction('doc','win','iframe','click', 'enter', 'input', '"use strict";' + code)(iframeDoc, emuIframe.contentWindow, emuIframe, sel => {clickAction(sel, iframeDoc)}, sel => {enterAction(sel, iframeDoc)}, (sel, v) =>{inputAction(sel, v, iframeDoc)}); + await new AsyncFunction('doc','win','iframe','click', 'enter', 'input', 'sleep', '"use strict";' + code)(iframeDoc, emuIframe.contentWindow, emuIframe, async sel => {await clickAction(sel, iframeDoc)}, async sel => {await enterAction(sel, iframeDoc)}, async (sel, v) =>{await inputAction(sel, v, iframeDoc)}, async time => {await sleep(time)}); } catch(e) { debug(e); } @@ -7937,7 +7945,7 @@ curIframe.frameBorder = '0'; curIframe.scrolling = "no"; curIframe.style.cssText = 'display: block; visibility: visible; float: none; clear: both; width: 100%; height: 0; background: initial; border: 0px; border-radius: 0px; margin: 0px; padding: 0px; z-index: 2147483645;content-visibility: auto;contain-intrinsic-size: auto 300px;'; - curIframe.addEventListener("load", e => { + curIframe.addEventListener("load", async e => { clearInterval(checkIframeTimer); if (isPause) return callback(false); try { @@ -7961,7 +7969,7 @@ let code = ruleParser.curSiteRule.init; if (code) { try { - new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', '"use strict";' + code)(iframeDoc, curIframe.contentWindow, curIframe, sel => {clickAction(sel, iframeDoc)}, sel => {enterAction(sel, iframeDoc)}, (sel, v) =>{inputAction(sel, v, iframeDoc)}); + await new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', 'sleep', '"use strict";' + code)(iframeDoc, curIframe.contentWindow, curIframe, async sel => {await clickAction(sel, iframeDoc)}, async sel => {await enterAction(sel, iframeDoc)}, async (sel, v) =>{await inputAction(sel, v, iframeDoc)}, async time => {await sleep(time)}); } catch(e) { debug(e); } From 648feeb52a8e37f5e04da126d77b870b5f155019 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 16 Nov 2023 09:52:14 +0800 Subject: [PATCH 335/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 65 +++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 679ed3bded4..c2de5028a58 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.13 +// @version 1.7.14 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -3141,10 +3141,9 @@ } } if (this.splitSep) { - let splitSep = this.splitSep; - if (this.wordModeBtn.classList.contains("checked")) { - splitSep = new RegExp(`[\\${this.splitSep} \.]`); - } + let inWordMode = this.wordModeBtn.classList.contains("checked"); + let splitSep = inWordMode ? new RegExp(`[\\${this.splitSep} \.]`) : this.splitSep; + words.split(splitSep).forEach(word => { let oriWord = word; word = word.trim(); @@ -3312,13 +3311,13 @@ removeBtn.addEventListener("mousedown", e => { e.stopPropagation(); e.preventDefault(); - if (this.wordModeBtn.classList.contains("checked")) { + /*if (this.wordModeBtn.classList.contains("checked")) { this.wordModeBtn.classList.remove("checked"); if (this.lockWords) { this.refreshPageWords(this.lockWords); } return; - } + }*/ wordSpan.parentNode.removeChild(wordSpan); this.removeHighlightWord(word); }); @@ -4059,18 +4058,39 @@ if (!this.splitSep) this.emptyInPageWords(); if (!word.oriWord) return; if (this.lockWords.indexOf(word.oriWord) === -1) return; - let preStr = this.lockWords.match(/^\$(c.|o)/); + let preStr = this.lockWords.match(/^\$(c.|o)/), findIndex, findNum = 0; preStr = preStr ? preStr[0] : ""; - let targetArr = this.lockWords.replace(preStr, "").split(this.splitSep); - let findIndex = targetArr.indexOf(word.oriWord); - if (findIndex < 0) return; - targetArr.splice(findIndex, 1); - this.lockWords = preStr + targetArr.join(this.splitSep); + if (this.wordModeBtn.classList.contains("checked")) { + let targetArr = this.lockWords.replace(preStr, "").split(this.splitSep); + for (let i = 0; i < targetArr.length; i++) { + let wordArr = targetArr[i].split(/[ \.]/); + findIndex = wordArr.indexOf(word.oriWord); + if (findIndex != -1) { + findNum++; + if (findNum == 1) { + wordArr.splice(findIndex, 1); + targetArr[i] = wordArr.join(" "); + } else { + break; + } + } + } + this.lockWords = preStr + targetArr.join(this.splitSep); + } else { + let targetArr = this.lockWords.replace(preStr, "").split(this.splitSep); + findIndex = targetArr.indexOf(word.oriWord); + if (findIndex < 0) return; + targetArr.splice(findIndex, 1); + findNum = targetArr.indexOf(word.oriWord) != -1 ? 2 : 1; + this.lockWords = preStr + targetArr.join(this.splitSep); + } delete this.highlightSpans[word.showWords]; findIndex = this.curHighlightWords.indexOf(word); if (findIndex < 0) return; this.curHighlightWords.splice(findIndex, 1); + this.searchJumperInPageInput.style.paddingLeft = this.searchInPageLockWords.clientWidth + 3 + "px"; + if (findNum > 1) return; this.marks[word.showWords].forEach(mark => { if (mark.parentNode) { if (mark.dataset.block) { @@ -4089,7 +4109,6 @@ delete this.marks[word.showWords]; let targetNav = this.navMarks.querySelector(`[data-content="${word.showWords}"]`); if (targetNav) targetNav.parentNode.removeChild(targetNav); - this.searchJumperInPageInput.style.paddingLeft = this.searchInPageLockWords.clientWidth + 3 + "px"; } emptyInPageWords() { @@ -5406,9 +5425,9 @@ if (e.keyCode === 27) { if (this.inInput) { this.hideSearchInput(); - } else { + } else if (this.lockWords) { this.highlight(""); - this.searchJumperInPageInput.value = this.lockWords || ""; + this.searchJumperInPageInput.value = this.lockWords; this.lockWords = ""; this.searchInPageLockWords.innerHTML = createHTML(); this.setNav(false, true); @@ -6068,11 +6087,15 @@ let beginHandler = () => { setTimeout(() => { if (getBody(document).style.display === "none") getBody(document).style.display = ""; - let word = this.initInPageWords.shift(); - while (word) { - this.searchJumperInPageInput.value = word; - this.submitInPageWords(true); - word = this.initInPageWords.shift(); + if (this.lockWords) { + this.initInPageWords = []; + } else { + let word = this.initInPageWords.shift(); + while (word) { + this.searchJumperInPageInput.value = word; + this.submitInPageWords(true); + word = this.initInPageWords.shift(); + } } }, 600); }; From 38bfc6f99fc0322a70a9c49e6d7270dca81e43d2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 16 Nov 2023 10:38:46 +0800 Subject: [PATCH 336/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c2de5028a58..363b156d00b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.14 +// @version 1.7.15 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4331,7 +4331,7 @@ return result; } dom.childNodes.forEach(ele => { - if (ele.classList && ele.classList.contains("searchJumper")) { + if ((ele.classList && ele.classList.contains("searchJumper")) || /^(img|svg|picture)$/i.test(ele.nodeName)) { const start = result.text.length; result.text += "\n"; result.data[start + 1] = {node: ele, text: "\n"}; From 7e768082046b286a1d623e866788a54f6a4255db Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 16 Nov 2023 15:51:06 +0800 Subject: [PATCH 337/812] 1.9.36.91 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 78 +++++++++++++++++++++++++++++++++------ 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 90b0c2be7ea..ff580e7a873 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.90](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.91](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 2888255e0bf..1738e368bce 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.90 +// @version 1.9.36.91 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -3375,6 +3375,46 @@ }); } + async hookUrlSetEle(ele, doc) { + let self = this; + return new Promise((resolve) => { + let catchUrl = e => { + ele.dataset.url = self.catchedUrl; + ele.setAttribute('onclick', 'window.open(this.dataset.url)'); + window.removeEventListener('pagetual_openUrl', catchUrl); + resolve(); + }; + window.addEventListener('pagetual_openUrl', catchUrl); + emuClick(ele, doc); + }); + } + + async hookUrl(doc) { + let sel = this.curSiteRule.hookUrl; + if (!sel) return; + let self = this; + if (!this.initHook) { + this.initHook = true; + Object.defineProperty(doc.defaultView, 'open', { + get: function () { + return (s) => { + self.catchedUrl = s; + var e = new CustomEvent('pagetual_openUrl'); + window.dispatchEvent(e); + } + } + }); + } + let eles = getAllElements(sel, doc); + for (let i = 0; i < eles.length; i++) { + await sleep(1); + let ele = eles[i]; + if (!ele.dataset.url) { + await this.hookUrlSetEle(ele, doc); + } + } + } + beginLoading() { isLoading = true; if (targetY >= 0) { @@ -7240,7 +7280,7 @@ async function clickAction(sel, doc) { let btn = await waitForElement(sel, doc); - emuClick(btn); + emuClick(btn, doc); } async function enterAction(sel, doc) { @@ -7279,14 +7319,15 @@ debug(input, `input ${sel}`); } - function emuClick(btn) { - let curScroll = getBody(document).scrollTop || document.documentElement.scrollTop; + function emuClick(btn, doc) { + if (!doc) doc = document; + let curScroll = getBody(doc).scrollTop || doc.documentElement.scrollTop; let orgHref = btn.getAttribute('href'); if (orgHref && orgHref.replace(location.origin + location.pathname, "").indexOf("#") === 0) { let hashAction = e => { e.preventDefault(); - getBody(document).scrollTop = curScroll; - document.documentElement.scrollTop = curScroll; + getBody(doc).scrollTop = curScroll; + doc.documentElement.scrollTop = curScroll; btn.removeEventListener('click', hashAction, false); }; btn.addEventListener('click', hashAction, false); @@ -7406,13 +7447,24 @@ loadPageOver(); } }, 500); - let loadedHandler = e => { + let loadedHandler = async e => { if (e.data != 'pagetual-iframe:DOMLoaded' && e.type != 'load') return; clearInterval(checkRemoveIntv); window.removeEventListener('message', loadedHandler, false); iframe.removeEventListener('load', loadedHandler, false); + try { + let doc = iframe.contentDocument || iframe.contentWindow.document; + let code = ruleParser.curSiteRule.init; + if (code) { + try { + await new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', 'sleep', '"use strict";' + code)(doc, iframe.contentWindow, iframe, async sel => {await clickAction(sel, doc)}, async sel => {await enterAction(sel, doc)}, async (sel, v) =>{await inputAction(sel, v, doc)}, async time => {await sleep(time)}); + } catch(e) { + debug(e); + } + } + } catch(e) {} let tryTimes = 0; - function checkIframe() { + async function checkIframe() { if (urlChanged || isPause) { return callback(false, false); } @@ -7427,6 +7479,7 @@ }, waitTime); return; } else if (eles && eles.length > 0) { + await ruleParser.hookUrl(doc); callback(doc, eles); } else if (tryTimes++ < 100) { getBody(doc).scrollTop = 9999999; @@ -7534,7 +7587,7 @@ if (!loadmoreEnd) { loadmoreBtn = getLoadMore(iframeDoc); if (loadmoreBtn && isVisible(loadmoreBtn, emuIframe.contentWindow)) { - emuClick(loadmoreBtn); + emuClick(loadmoreBtn, iframeDoc); let intv = setInterval(() => { loadmoreBtn = getLoadMore(iframeDoc); if (!loadmoreBtn || !getBody(document).contains(loadmoreBtn) || !isVisible(loadmoreBtn, emuIframe.contentWindow)) { @@ -7544,7 +7597,7 @@ checkPage(); }, 500); } else if (isInViewPort(loadmoreBtn)) { - emuClick(loadmoreBtn); + emuClick(loadmoreBtn, iframeDoc); } }, 200); return; @@ -7611,7 +7664,7 @@ if (!isVisible(nextLink, emuIframe.contentWindow)) { returnFalse("Stop as next hide when emu"); } else { - emuClick(nextLink); + emuClick(nextLink, iframeDoc); setTimeout(() => { checkPage(); }, 500); @@ -7670,6 +7723,7 @@ returnFalse("Stop as same content"); } else { orgContent = preContent; + await ruleParser.hookUrl(iframeDoc); callback(iframeDoc, eles); } } else { @@ -7678,7 +7732,7 @@ nextLink = await ruleParser.getNextLink(iframeDoc, true); } if (nextLink) { - emuClick(nextLink); + emuClick(nextLink, iframeDoc); } } setTimeout(() => { From b4cda087b1acd67b11621604b0dced06062248be Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 16 Nov 2023 16:54:16 +0800 Subject: [PATCH 338/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 363b156d00b..157df24b70b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4060,8 +4060,13 @@ if (this.lockWords.indexOf(word.oriWord) === -1) return; let preStr = this.lockWords.match(/^\$(c.|o)/), findIndex, findNum = 0; preStr = preStr ? preStr[0] : ""; + let targetArr = this.lockWords.replace(preStr, "").split(this.splitSep); + findIndex = targetArr.indexOf(word.oriWord); if (this.wordModeBtn.classList.contains("checked")) { - let targetArr = this.lockWords.replace(preStr, "").split(this.splitSep); + if (findIndex != -1) { + targetArr.splice(findIndex, 1); + findNum = 1; + } for (let i = 0; i < targetArr.length; i++) { let wordArr = targetArr[i].split(/[ \.]/); findIndex = wordArr.indexOf(word.oriWord); @@ -4077,8 +4082,6 @@ } this.lockWords = preStr + targetArr.join(this.splitSep); } else { - let targetArr = this.lockWords.replace(preStr, "").split(this.splitSep); - findIndex = targetArr.indexOf(word.oriWord); if (findIndex < 0) return; targetArr.splice(findIndex, 1); findNum = targetArr.indexOf(word.oriWord) != -1 ? 2 : 1; From c5349ce6bb5f872095387cde252c6cffc5777e37 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 16 Nov 2023 17:05:10 +0800 Subject: [PATCH 339/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 157df24b70b..0bda180c96a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1633,6 +1633,7 @@ .in-input.in-find>.search-jumper-searchBar { opacity: 0!important; pointer-events: none; + transition: none; } .in-input.in-find>.search-jumper-searchBar:hover { opacity: 1!important; @@ -5229,6 +5230,7 @@ this.con.classList.remove("in-find"); this.con.classList.remove("in-input"); this.con.classList.remove("lock-input"); + this.bar.classList.remove("initShow"); this.searchInput.value = ""; this.searchJumperInputKeyWords.value = ""; this.pickerBtn.classList.remove("checked"); @@ -5434,6 +5436,8 @@ this.lockWords = ""; this.searchInPageLockWords.innerHTML = createHTML(); this.setNav(false, true); + } else { + this.removeBar(); } } }); From 128e1bf5fb91af29e6e4f049d3d07e8e39836ac1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 16 Nov 2023 19:59:01 +0800 Subject: [PATCH 340/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 0bda180c96a..72df8fb3128 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.15 +// @version 1.7.16 // @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1685,7 +1685,9 @@ } #search-jumper.funcKeyCall:not(.targetInput)>.search-jumper-searchBar>.search-jumper-type { height: auto!important; - width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom}px!important; + width: auto!important; + width: max-content!important; + max-width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom}px!important; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type>a.search-jumper-btn { visibility: visible; From a81098005a61b3e262d9fb8511a9e28bcbc13b0b Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 16 Nov 2023 20:02:00 +0800 Subject: [PATCH 341/812] Update README.md --- DownloadAllContent/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 22b5798c50d..5806d3e3578 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -144,7 +144,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` css a.chapter-item ``` - > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: + > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請不要來問我要現成規則。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) @@ -177,7 +177,7 @@ function decode(t) { ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html -+ http://www.jhshe.cn/thread-1837-1-1.html ++ http://www.jhshe.com/thread-1837-1-1.html + http://tieba.baidu.com/p/4871634479 ### FAQ From 079493195153819ba60e50deeb4fc2ee749f9171 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 17 Nov 2023 11:14:35 +0800 Subject: [PATCH 342/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 48 ++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 3aaabe5df76..b5d492f0ab9 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.15.1 +// @version 2023.11.16.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -14954,14 +14954,16 @@ ImgOps | https://imgops.com/#b#`; item.parentNode.style.display=""; if(spanMark)spanMark.style.display=""; } - if(item.naturalHeight>maxSizeH) - maxSizeH=item.naturalHeight; - if(item.naturalHeightmaxSizeW) - maxSizeW=item.naturalWidth; - if(item.naturalWidthmaxSizeH) + maxSizeH=item.naturalHeight; + if(item.naturalHeightmaxSizeW) + maxSizeW=item.naturalWidth; + if(item.naturalWidthmaxSizeH) maxSizeH=itemH; - if(itemH 0 && itemH < minSizeH) || minSizeH==0) minSizeH=itemH; if(itemW>maxSizeW) maxSizeW=itemW; - if(itemW 0 && itemW < minSizeW) || minSizeW==0) minSizeW=itemW; }); sizeInputH.max=maxSizeH; @@ -16791,28 +16793,44 @@ ImgOps | https://imgops.com/#b#`; delete node.dataset.src; total.push(node); } - }else if(!node.className || !node.className.indexOf || node.className.indexOf("pv-")==-1){ + } + if(!node.className || !node.className.indexOf || node.className.indexOf("pv-")==-1){ let prop = getComputedStyle(node).backgroundImage; + let hasSrc = /^(audio|embed|iframe|img|input|script|source|track|video|svg|canvas)$/i.test(node.nodeName); if (prop != "none") { let match = bgReg.exec(prop); if (match) { - node.src=match[1].replace(/\\"/g, '"'); + let src = match[1].replace(/\\"/g, '"'); + if (hasSrc) { + node = document.createElement("img"); + } + node.src = src; total.push(node); + hasSrc = true; } } prop = getComputedStyle(node, '::before').backgroundImage; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - node.src=match[1].replace(/\\"/g, '"'); + let src = match[1].replace(/\\"/g, '"'); + if (hasSrc) { + node = document.createElement("img"); + } + node.src = src; total.push(node); + hasSrc = true; } } prop = getComputedStyle(node, '::after').backgroundImage; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - node.src=match[1].replace(/\\"/g, '"'); + let src = match[1].replace(/\\"/g, '"'); + if (hasSrc) { + node = document.createElement("img"); + } + node.src = src; total.push(node); } } From 5686175d148c6c80e64657040b38c4ebe844a52c Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 17 Nov 2023 16:19:51 +0800 Subject: [PATCH 343/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 72df8fb3128..a59d4a1b7dd 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2629,13 +2629,15 @@ } .searchJumperNavBar>.minNavBtn { font-size: 12px; + font-weight: bold; + font-family: system-ui; + line-height: 16px; opacity: 0.1; background: white; color: black; border-radius: 10px; width: 16px; height: 16px; - font-weight: bold; display: inline-block; cursor: pointer; transition: 0.25s opacity ease, 0.25s transform ease; @@ -2669,12 +2671,23 @@ right: 20px; text-shadow: #fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0; font-size: 30px; + font-family: system-ui; line-height: 0px; border: 0; - margin-top: 2px; + margin-top: 0; opacity: 0.8; color: black; transition: top 0.25s ease; + animation-name: changeHor; + animation-duration: 1s; + animation-iteration-count: infinite; + animation-timing-function: ease-in-out; + } + @keyframes changeHor { + 0% {right: 20px;} + 10% {right: 18px} + 80% {right: 25px} + 100% {right: 20px} } #navMarks { height: calc(100% - 32px); From b5807057324844fcff822d71bc4a8edc7dd262d7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 17 Nov 2023 16:20:43 +0800 Subject: [PATCH 344/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a59d4a1b7dd..e55a68a0726 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2685,9 +2685,9 @@ } @keyframes changeHor { 0% {right: 20px;} - 10% {right: 18px} - 80% {right: 25px} - 100% {right: 20px} + 10% {right: 18px;} + 80% {right: 25px;} + 100% {right: 20px;} } #navMarks { height: calc(100% - 32px); From c2973bad9c7dbc29a98d72e193413faf30540f94 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 17 Nov 2023 18:29:42 +0800 Subject: [PATCH 345/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e55a68a0726..810307ab2ba 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,8 +4,8 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.16 -// @description Assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. +// @version 1.7.17 +// @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 // @description:ja 任意の検索エンジンにすばやく簡単にジャンプします! @@ -4808,6 +4808,7 @@ fakeTextarea.style.margin = "0"; if (node.nodeName && node.nodeName.toLowerCase && node.nodeName.toLowerCase() !== "textarea") { fakeTextarea.style.display = "inline-grid"; + fakeTextarea.style.lineHeight = fakeTextarea.style.height; } self.fakeTextareas[node] = fakeTextarea; } From 2d0cd60c655ef8d97002e7ab91b4ca3cc8d74e14 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 17 Nov 2023 19:12:00 +0800 Subject: [PATCH 346/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 810307ab2ba..913dabfbb63 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.17 +// @version 1.7.18 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -5211,6 +5211,7 @@ } else if (this.searchInPageTab.checked) { this.con.classList.add("in-find"); let selStr = getSelectStr(); + this.searchJumperInPageInput.focus(); if (selStr) { this.searchJumperInPageInput.value = ""; if (!this.navMarks.innerHTML) { @@ -5221,8 +5222,12 @@ } } else if (this.searchJumperInPageInput.value) { this.submitInPageWords(); + } else if (!this.initShowSearchInput && cacheKeywords) { + this.searchJumperInPageInput.value = cacheKeywords; + this.wordModeBtn.classList.add("checked"); + this.initShowSearchInput = true; + this.searchJumperInPageInput.select(); } - this.searchJumperInPageInput.focus(); } this.inInput = true; this.clearInputHide(); @@ -6177,16 +6182,13 @@ //storage.setItem("referrer", ""); } } - if (cacheKeywords && !this.searchJumperInPageInput.value) { - this.searchJumperInPageInput.value = cacheKeywords; - this.wordModeBtn.classList.add("checked"); - } inPageWords = inPageWords || globalInPageWords; if (inPageWords) { this.appendBar(); this.setInPageWords(inPageWords); - } else if (!this.searchJumperInPageInput.value && curRef.indexOf(referrer) != -1) { + } else if (!this.searchJumperInPageInput.value && curRef.indexOf(referrer) != -1 && cacheKeywords) { inPageWords = cacheKeywords; + this.wordModeBtn.classList.add("checked"); try { inPageWords = decodeURIComponent(inPageWords); } catch (e) {} From a4478603cbe31f0aa08f1fdb3520dd39eaa77b56 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 17 Nov 2023 21:29:49 +0800 Subject: [PATCH 347/812] 1.9.36.92 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index ff580e7a873..9c942387fb7 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.91](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.92](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 1738e368bce..a144ab0882e 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.91 +// @version 1.9.36.92 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1897,7 +1897,7 @@ preOffsetTop = curNode.offsetTop; } } - if (curMaxEle && curHeight / bodyHeight <= 0.2) { + if (curMaxEle && curHeight / bodyHeight <= 0.18) { let article = doc.querySelectorAll(mainSel); if (article && article.length == 1) { article = article[0]; @@ -2216,7 +2216,7 @@ ".nextPage", ".pagination-next>a", "a[data-pagination=next]", - ".pagination li.active~li>a", + ".pagination li.active+li>a", "[class^=pag] .current+a", ".pageButtonsCurrent+a", "a[class*=nextpage]", From 3389a18ec446a66e6a4938fd6872efb5281ac344 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 19 Nov 2023 11:15:32 +0800 Subject: [PATCH 348/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 913dabfbb63..1cc4501825b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.18 +// @version 1.7.19 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4126,8 +4126,9 @@ } }); delete this.marks[word.showWords]; - let targetNav = this.navMarks.querySelector(`[data-content="${word.showWords}"]`); - if (targetNav) targetNav.parentNode.removeChild(targetNav); + [].forEach.call(this.navMarks.querySelectorAll(`[data-content="${word.showWords}"]`), nav => { + nav.parentNode.removeChild(nav); + }); } emptyInPageWords() { @@ -5461,7 +5462,7 @@ this.removeBar(); } } - }); + }, true); this.searchJumperInPageInput.addEventListener("keydown", e => { e.stopPropagation(); switch(e.keyCode) { From a2f7d3dab393724bcb55282f05f3d40dfd26f06d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 19 Nov 2023 13:12:23 +0800 Subject: [PATCH 349/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 1cc4501825b..7dff82659c1 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.19 +// @version 1.7.20 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4356,6 +4356,11 @@ result.text += "\n"; result.data[start + 1] = {node: ele, text: "\n"}; } else if (ele.offsetParent) { + if (/^(li|p)$/i.test(ele.nodeName)) { + const start = result.text.length; + result.text += "\n"; + result.data[start + 1] = {node: ele, text: "\n"}; + } result = this.anylizeDomWithTextPos(ele, result); } else if (ele.nodeType === 3) { let textData; From f9d6e9be52378ae710368fd5b3ef55e5ec1b6fb2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 19 Nov 2023 13:14:45 +0800 Subject: [PATCH 350/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 7dff82659c1..d30aa738f46 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4357,11 +4357,16 @@ result.data[start + 1] = {node: ele, text: "\n"}; } else if (ele.offsetParent) { if (/^(li|p)$/i.test(ele.nodeName)) { - const start = result.text.length; + let start = result.text.length; result.text += "\n"; result.data[start + 1] = {node: ele, text: "\n"}; + result = this.anylizeDomWithTextPos(ele, result); + start = result.text.length; + result.text += "\n"; + result.data[start + 1] = {node: ele, text: "\n"}; + } else { + result = this.anylizeDomWithTextPos(ele, result); } - result = this.anylizeDomWithTextPos(ele, result); } else if (ele.nodeType === 3) { let textData; if (ele.parentNode.childNodes.length == 1) { From 970a9114656085cf431552bb0aa01d714b99efc2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 19 Nov 2023 13:16:06 +0800 Subject: [PATCH 351/812] Update searchJumperLevenshteinAddon.lib.js --- .../searchJumperLevenshteinAddon.lib.js | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 32d5feda9cf..9dc603a774e 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.5 +// @version 0.1.6 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -46,8 +46,8 @@ if (!text || !keywords || keywords.length < 6) return {matched: false}; text = text.toLowerCase(); keywords = keywords.toLowerCase(); - let wordArr = text.replace(/[\n,.!\?,。!?… ]+/g, " ").split(" "); - let kwArr = keywords.replace(/[\n,.!\?,。!?… ]+/g, " ").split(" "); + let wordArr = text.replace(/[\n\/\\,.!\?,。!?… ]+/g, " ").split(" "); + let kwArr = keywords.replace(/[\n\/\\,.!\?,。!?… ]+/g, " ").split(" "); let matched = false, pos = -1, len = 0, matchedStr = []; for (let i = 0; i < wordArr.length; i++) { matched = true; @@ -59,16 +59,20 @@ if (!wordArr[i + j] || levenshteinDistance(kwArr[j], wordArr[i + j]) > maxTolerance) { matched = false; break; - } else matchedStr.push(wordArr[i + j].replace(/([\[\]\(\)\^\$\.\+\*\?\|\{\}\-])/g, "\\$1")); + } else { + matchedStr.push(wordArr[i + j].replace(/([\[\]\(\)\^\$\.\+\*\?\|\{\}\-])/g, "\\$1")); + } + } + if (matched) { + break; } - if (matched) break; } if (matched) { - let wordMatch = text.match(new RegExp(matchedStr.join("[\n,.!\?,。!?… ]+"), "i")); + let wordMatch = text.match(new RegExp("(^|[\n\/\\,.!\?,。!?… ])(" + matchedStr.join("[\n\/\\,.!\?,。!?… ]+") + ")($|[\n\/\\,.!\?,。!?… ])", "i")); if (wordMatch) { - let content = wordMatch[0]; + let content = wordMatch[2]; len = content.length; - pos = wordMatch.index; + pos = wordMatch.index + wordMatch[1].length; } } return {matched: matched, pos: pos, len: len}; From b7d8e3572b5d7972a76fb03607e49973b862459e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 19 Nov 2023 13:42:09 +0800 Subject: [PATCH 352/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index d30aa738f46..9580f0d2af6 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.20 +// @version 1.7.21 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4154,6 +4154,7 @@ } } let newIndex = this.focusIndex; + if (newIndex >= curList.length) newIndex = 0; if (fw) { while (!curList[newIndex].offsetParent || curList[newIndex].dataset.type) { if (newIndex != curList.length - 1) { @@ -4747,7 +4748,7 @@ } } else { let blockValue = ""; - if (node.nodeType == 1 && node.value && node.offsetParent && !/^(hidden|file|password|radio|range|checkbox|)$/i.test(node.type) && (!word.init || (!/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id)))) { + if (node.nodeType == 1 && node.value && node.offsetParent && /^(button|select|input|textarea)$/i.test(node.nodeName) && !/^(hidden|file|password|radio|range|checkbox|)$/i.test(node.type) && (!word.init || (!/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id)))) { blockValue = node.value; } if (blockValue) { From 12f61bf5fb9be7a41242afeb0ff6b5b0dae2bc2a Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 19 Nov 2023 14:11:21 +0800 Subject: [PATCH 353/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9580f0d2af6..bfef16ebd15 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.21 +// @version 1.7.22 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4126,8 +4126,11 @@ } }); delete this.marks[word.showWords]; - [].forEach.call(this.navMarks.querySelectorAll(`[data-content="${word.showWords}"]`), nav => { - nav.parentNode.removeChild(nav); + let children = [].slice.call(this.navMarks.children); + [].forEach.call(children, nav => { + if (nav.dataset.content == word.showWords) { + nav.parentNode.removeChild(nav); + } }); } From 08797f65822d52f05b40d7b6be36a199d6d8f8d8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 19 Nov 2023 17:00:15 +0800 Subject: [PATCH 354/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index bfef16ebd15..54e681d455a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.22 +// @version 1.7.23 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4373,7 +4373,7 @@ } } else if (ele.nodeType === 3) { let textData; - if (ele.parentNode.childNodes.length == 1) { + if (ele.parentNode.nodeType == 1 && ele.parentNode.childNodes.length == 1) { textData = ele.parentNode.innerText; } else { textData = ele.data; @@ -4527,7 +4527,7 @@ skip = 0; let pa = node.parentNode; if (node.nodeType == 1 && node.className && node.className.indexOf && node.className.indexOf("searchJumper") != -1) return 0; - if (start && node.nodeType == 1) { + if (start && (node.nodeType == 1 || node.nodeType == 11)) { let domTextResult = self.anylizeDomWithTextPos(node); let textRes = domTextResult.text; let dataRes = domTextResult.data; @@ -4634,8 +4634,11 @@ let index = curList.length; let spannode; let newTextNodeCon; - let parentStyle = getComputedStyle(data.node.parentNode); - let parentDisplay = parentStyle.display; + let parentDisplay = ""; + if (data.node.parentNode.nodeType == 1) { + let parentStyle = getComputedStyle(data.node.parentNode); + parentDisplay = parentStyle.display; + } if (parentDisplay.indexOf("flex") != -1 || parentDisplay.indexOf("grid") != -1 || parentDisplay.indexOf("layer") != -1) { newTextNodeCon = document.createElement("span"); newTextNodeCon.style.all = "unset"; @@ -4915,7 +4918,7 @@ } try { if (node.shadowRoot) { - child = child + searchWithinNode(node.shadowRoot, word); + child = child + searchWithinNode(node.shadowRoot, word, true); } } catch(e) { debug(e); From 66a5481ac80f96c6e9887bed38cb4ca1a2cfca64 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 20 Nov 2023 08:25:31 +0800 Subject: [PATCH 355/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 54e681d455a..2cbd9e025f0 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.23 +// @version 1.7.24 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -67,8 +67,8 @@ } const configPage = 'https://hoothin.github.io/SearchJumper'; const importPageReg = /^https:\/\/github\.com\/hoothin\/SearchJumper(\/(issue|discussions)|$)|^https:\/\/greasyfork\.org\/.*\/scripts\/445274[\-\/].*\/discussions/i; - const isAllPage = /^https:\/\/hoothin\.github\.io\/SearchJumper\/all\.html/.test(location.href); const mobileUa = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; + let isAllPage = false; var searchData = {}; searchData.sitesConfig = [ @@ -10866,10 +10866,8 @@ } function isInConfigPage() { - if (location.href.indexOf(configPage) === 0) { - return true; - } - if ((location.hostname === "localhost" || location.href.indexOf("SearchJumper") != -1) && document.title === "SearchJumper Settings") { + if (location.href.indexOf(configPage) === 0 || (document.title === "SearchJumper" && (location.hostname === "localhost" || location.href.indexOf("searchjumper") != -1))) { + isAllPage = /all\.html$/.test(location.pathname); return true; } return false; @@ -12751,6 +12749,7 @@ background-size: cover; -webkit-background-size: cover; -o-background-size: cover; + overflow: hidden; `; storage.getItem("allPageBg", allPageBg => { if (allPageBg) { From 99e9f4086fe1bee69728119c528b2baea595ef52 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 20 Nov 2023 11:44:15 +0800 Subject: [PATCH 356/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 2cbd9e025f0..21a16fef39e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.24 +// @version 1.7.25 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2306,7 +2306,7 @@ font-family: Arial, sans-serif; text-align: left; box-shadow: 0px 2px 10px rgb(0 0 0 / 80%); - border: 1px solid rgb(179 179 179 / 70%); + border: 1px solid rgb(179 179 179 / 10%); border-radius: 28px; background-color: rgb(51 56 59 / 90%); padding: 10px; @@ -2528,7 +2528,7 @@ transition: 0.25s all ease; font-size: 26px; box-shadow: 0px 0px 2px rgb(0 0 0 / 80%); - border: 1px solid rgb(179 179 179 / 70%); + border: 1px solid rgb(179 179 179 / 20%); cursor: pointer; user-select: none; } @@ -4360,7 +4360,7 @@ result.text += "\n"; result.data[start + 1] = {node: ele, text: "\n"}; } else if (ele.offsetParent) { - if (/^(li|p)$/i.test(ele.nodeName)) { + if (/^(li|p|a)$/i.test(ele.nodeName)) { let start = result.text.length; result.text += "\n"; result.data[start + 1] = {node: ele, text: "\n"}; @@ -4667,7 +4667,9 @@ break; } middlebit = newTextNode.splitText(d.pos); - middlebit.splitText(d.len); + if (d.type != 'start' && d.type != 'middle' && middlebit.data.length) { + middlebit.splitText(d.len); + } middleclone = middlebit.cloneNode(true); spannode.appendChild(middleclone); if (d.type != "full" && d.type != "start") { @@ -10866,7 +10868,7 @@ } function isInConfigPage() { - if (location.href.indexOf(configPage) === 0 || (document.title === "SearchJumper" && (location.hostname === "localhost" || location.href.indexOf("searchjumper") != -1))) { + if (location.href.indexOf(configPage) === 0 || (document.title === "SearchJumper" && document.querySelector('[name="author"][content="Hoothin"]'))) { isAllPage = /all\.html$/.test(location.pathname); return true; } From 067bcfeaba24ea947446c31684a2d8172d8c993a Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 20 Nov 2023 16:41:10 +0800 Subject: [PATCH 357/812] addons --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 4 +++- SearchJumper/searchJumperPinyinAddon.lib.js | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 9dc603a774e..273e67d00bf 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,13 +3,14 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.6 +// @version 0.1.7 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 // @author hoothin // @match *://*/* // @grant unsafeWindow +// @run-at document-start // ==/UserScript== (function() { @@ -40,6 +41,7 @@ return distanceMatrix[b.length][a.length]; } _unsafeWindow.searchJumperAddons.push({ + name: "Levenshtein", type: "findInPage", sort: 0, run: (text, keywords) => { diff --git a/SearchJumper/searchJumperPinyinAddon.lib.js b/SearchJumper/searchJumperPinyinAddon.lib.js index cc854abd239..c4e5d51809a 100644 --- a/SearchJumper/searchJumperPinyinAddon.lib.js +++ b/SearchJumper/searchJumperPinyinAddon.lib.js @@ -3,13 +3,14 @@ // @name:zh-CN 搜索酱拼音扩展 // @name:zh-TW 搜尋醬拼音擴展 // @namespace hoothin -// @version 0.2 +// @version 0.3 // @description Add pinyin support for SearchJumper // @description:zh-CN 为搜索酱的页内高亮查找添加拼音支持 // @description:zh-TW 為搜尋醬的頁内高亮查找添加拼音支援 // @author hoothin // @match *://*/* // @grant unsafeWindow +// @run-at document-start // @require https://unpkg.com/pinyin-match/dist/traditional.js // ==/UserScript== @@ -28,6 +29,7 @@ _unsafeWindow.searchJumperPinyin = pinyinSearch; _unsafeWindow.searchJumperAddons.push({ sort: 1, + name: "拼音", type: "findInPage", run: pinyinSearch }); From 7677385060f0d12274b1112ccab099349dd2e2c8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 20 Nov 2023 17:44:15 +0800 Subject: [PATCH 358/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 173 ++++++++++++++++++++++++------ 1 file changed, 139 insertions(+), 34 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 21a16fef39e..44d5d284240 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.25 +// @version 1.7.26 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -65,9 +65,9 @@ return; } } - const configPage = 'https://hoothin.github.io/SearchJumper'; const importPageReg = /^https:\/\/github\.com\/hoothin\/SearchJumper(\/(issue|discussions)|$)|^https:\/\/greasyfork\.org\/.*\/scripts\/445274[\-\/].*\/discussions/i; const mobileUa = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; + let configPage = 'https://hoothin.github.io/SearchJumper'; let isAllPage = false; var searchData = {}; @@ -2445,6 +2445,46 @@ display: flex; align-items: center; } + .inputGroup>#addons { + position: absolute; + bottom: 50px; + right: 100px; + display: none; + flex-direction: column; + background: white; + border-radius: 10px; + opacity: 0; + transition: 0.5s opacity ease; + } + .inputGroup>#addons>div { + padding: 10px; + } + .inputGroup>#addons>div>input { + float: left; + width: 20px; + height: 20px; + margin: 0 10px 0 0; + cursor: pointer; + } + .inputGroup:hover>#addons { + display: flex; + } + .inputGroup>#addons:hover { + opacity: 1; + } + .inputGroup>.svgBtns:hover+#addons { + opacity: 1; + } + .inputGroup>#addons>div>label { + color: unset; + display: inline; + background: none; + top: unset; + left: unset; + font-size: unset; + line-height: unset; + max-width: unset; + } .inputGroup>.svgBtns:hover { width: auto; } @@ -3087,6 +3127,7 @@ ${i18n("pinBtn")} ${i18n("locBtn")} +
@@ -3119,7 +3160,9 @@ this.rightSizeChange = searchInputDiv.querySelector("#rightSizeChange"); this.filterGlob = searchInputDiv.querySelector("#filterGlob"); this.suggestDatalist = searchInputDiv.querySelector("#suggest"); + this.addonsList = searchInputDiv.querySelector("#addons"); this.fakeTextareas = {}; + this.addonCheckboxDict = {}; } showInPageSearch() { @@ -3864,7 +3907,7 @@ modifyFrame.innerHTML = createHTML(`
- ${i18n("modifyWord")} + ${i18n("modifyWord")}
${i18n("wordContent")}
@@ -4358,16 +4401,16 @@ if ((ele.classList && ele.classList.contains("searchJumper")) || /^(img|svg|picture)$/i.test(ele.nodeName)) { const start = result.text.length; result.text += "\n"; - result.data[start + 1] = {node: ele, text: "\n"}; + result.data[start] = {node: ele, text: "\n"}; } else if (ele.offsetParent) { if (/^(li|p|a)$/i.test(ele.nodeName)) { let start = result.text.length; result.text += "\n"; - result.data[start + 1] = {node: ele, text: "\n"}; + result.data[start] = {node: {}, text: "\n"}; result = this.anylizeDomWithTextPos(ele, result); start = result.text.length; result.text += "\n"; - result.data[start + 1] = {node: ele, text: "\n"}; + result.data[start] = {node: {}, text: "\n"}; } else { result = this.anylizeDomWithTextPos(ele, result); } @@ -4434,17 +4477,52 @@ return spannode; } + createAddonSpan(name, data) { + let index = "addon_" + this.addonsList.children.length, self = this; + let con = document.createElement("div"); + let checkbox = document.createElement("input"); + checkbox.type = 'checkbox'; + checkbox.id = index; + checkbox.checked = !data.disable; + checkbox.addEventListener("change", e => { + searchData.prefConfig.disableAddon[name] = !checkbox.checked; + data.disable = !checkbox.checked; + if (checkbox.checked) { + self.findInpageAddons.forEach(addon => { + if (addon != data && addon.sort == data.sort) { + addon.disable = true; + let _name = addon.name || ("addon" + index++); + self.addonCheckboxDict[_name].checked = false; + searchData.prefConfig.disableAddon[_name] = true; + } + }); + } + storage.setItem("searchData", searchData); + if (self.lockWords) { + self.refreshPageWords(self.lockWords); + } + }); + con.appendChild(checkbox); + let label = document.createElement("label"); + label.setAttribute("for", index); + label.innerText = name; + con.appendChild(label); + this.addonCheckboxDict[name] = checkbox; + this.addonsList.appendChild(con); + } + findPosInStr(content, kw) { - if (!self.findInpageAddons) self.findInpageAddons = _unsafeWindow.searchJumperAddons.filter(data => data.type == "findInPage").sort((a, b) => (a.sort || 0) - (b.sort || 0)); let len = 0, pos = -1; - for (let i = 0; i < self.findInpageAddons.length; i++) { - let curAddon = self.findInpageAddons[i]; - if (!curAddon || !curAddon.run) continue; - let curData = curAddon.run(content, kw); - if (curData && curData.matched) { - len = curData.len; - pos = curData.pos; - break; + if (this.findInpageAddons.length) { + for (let i = 0; i < this.findInpageAddons.length; i++) { + let curAddon = this.findInpageAddons[i]; + if (!curAddon || !curAddon.run || curAddon.disable) continue; + let curData = curAddon.run(content, kw); + if (curData && curData.matched) { + len = curData.len; + pos = curData.pos; + break; + } } } if (pos == -1) { @@ -4539,9 +4617,9 @@ let findNodes = [], leftLen = len; let pre = "", after = "", after2 = ""; for (let i = 0; i < keys.length; i++) { - let end = keys[i]; + let end = parseInt(keys[i]); let curnode = domTextResult.data[end]; - if (pos > end || !curnode.text.trim()) continue; + if (pos > end) continue; let curpos = pos - (end - curnode.text.length) - 1; let type = "full"; if (curpos < 0) { @@ -4580,6 +4658,10 @@ if (curpos < 0) curpos = 0; let curlen = Math.min(leftLen, curnode.text.length - curpos); + leftLen -= curlen; + if (!curnode.text.trim()) { + continue; + } let nodeInfo; for (let j = 0; j < nodeAndPos.length; j++) { if (nodeAndPos[j].node == curnode.node) { @@ -4589,7 +4671,6 @@ } if (!nodeInfo) nodeAndPos.push({node: curnode.node, text: curnode.text, match:[{pos: curpos, len: curlen, type: type}]}); else nodeInfo.match.push({pos: curpos, len: curlen, type: type}); - leftLen -= curlen; if (leftLen <= 0) break; } } @@ -5232,22 +5313,23 @@ this.con.classList.add("in-find"); let selStr = getSelectStr(); this.searchJumperInPageInput.focus(); - if (selStr) { - this.searchJumperInPageInput.value = ""; - if (!this.navMarks.innerHTML) { - this.submitIgnoreSpace(selStr); - } else { - this.searchJumperInPageInput.value = selStr; + setTimeout(() => { + if (selStr) { + this.searchJumperInPageInput.value = ""; + if (!this.navMarks.innerHTML) { + this.submitIgnoreSpace(selStr); + } else { + this.searchJumperInPageInput.value = selStr; + this.submitInPageWords(); + } + } else if (this.searchJumperInPageInput.value) { this.submitInPageWords(); + } else if (!this.initShowSearchInput && cacheKeywords) { + this.searchJumperInPageInput.value = cacheKeywords; + this.initShowSearchInput = true; + this.searchJumperInPageInput.select(); } - } else if (this.searchJumperInPageInput.value) { - this.submitInPageWords(); - } else if (!this.initShowSearchInput && cacheKeywords) { - this.searchJumperInPageInput.value = cacheKeywords; - this.wordModeBtn.classList.add("checked"); - this.initShowSearchInput = true; - this.searchJumperInPageInput.select(); - } + }, 10); } this.inInput = true; this.clearInputHide(); @@ -5549,7 +5631,7 @@ default: break; } - }); + }, true); this.editBtn.addEventListener("click", e => { editFunc(); }); @@ -6052,6 +6134,21 @@ sitesNum = 0; } } + if (!this.findInpageAddons) { + this.findInpageAddons = _unsafeWindow.searchJumperAddons.filter( + data => data.type == "findInPage" + ).sort((a, b) => (a.sort || 0) - (b.sort || 0)); + let self = this, index = 0, addonDict = {}; + this.findInpageAddons.forEach(addon => { + let name = addon.name || ("addon" + index++); + if (addonDict[addon.sort]) addon.disable = true; + else if (searchData.prefConfig.disableAddon[name]) { + addon.disable = true; + } + addonDict[addon.sort] = true; + self.createAddonSpan(name, addon); + }); + } if (disableHighlight && disableHighlight != location.hostname && window.top == window.self) { storage.setItem("disableHighlight", ""); } @@ -11284,7 +11381,7 @@ this.filterFrame.innerHTML = createHTML(`
- ${i18n("addSearchEngine")} + ${i18n("addSearchEngine")}
@@ -12946,11 +13043,19 @@ if (typeof searchData.prefConfig.currentTypeFirst === "undefined") { searchData.prefConfig.currentTypeFirst = true; } + if (typeof searchData.prefConfig.disableAddon === "undefined") { + searchData.prefConfig.disableAddon = {}; + } if (typeof searchData.prefConfig.suggestType === "undefined") { if (lang === "zh-CN") { searchData.prefConfig.suggestType = "baidu"; } else searchData.prefConfig.suggestType = "google"; } + if (searchData.prefConfig.configPage) { + configPage = searchData.prefConfig.configPage; + } else { + searchData.prefConfig.configPage = configPage; + } } if (location.href.indexOf("#searchJumperMin") != -1) { From 6c236b5be29eacbd554f075e10871fe3d14a66f1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 20 Nov 2023 18:13:09 +0800 Subject: [PATCH 359/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 44d5d284240..f295df8cf6d 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4512,11 +4512,12 @@ } findPosInStr(content, kw) { - let len = 0, pos = -1; + let len = 0, pos = -1, hasAddon = false; if (this.findInpageAddons.length) { for (let i = 0; i < this.findInpageAddons.length; i++) { let curAddon = this.findInpageAddons[i]; if (!curAddon || !curAddon.run || curAddon.disable) continue; + hasAddon = true; let curData = curAddon.run(content, kw); if (curData && curData.matched) { len = curData.len; @@ -4525,7 +4526,7 @@ } } } - if (pos == -1) { + if (pos == -1 && !hasAddon) { len = kw.length; pos = content.toUpperCase().indexOf(kw.toUpperCase()); } From c5c6894f3cda873e5ab1091b7e6a1e1143fa27c6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 20 Nov 2023 20:02:19 +0800 Subject: [PATCH 360/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index b5d492f0ab9..df894814999 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.16.1 +// @version 2023.11.20.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -23203,7 +23203,7 @@ ImgOps | https://imgops.com/#b#`; } function isKeyDownEffectiveTarget(target) { - var localName = target.localName; + var localName = (target.shadowRoot ? target.shadowRoot.activeElement : target).localName; // 确保光标不是定位在文字输入框或选择框 if (localName == 'textarea' || localName == 'input' || localName == 'select'){ From 5846da16bf4533ac78908a7aca46dec69a5ca1fe Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 20 Nov 2023 20:06:20 +0800 Subject: [PATCH 361/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index df894814999..d65679d6f4d 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -23203,7 +23203,7 @@ ImgOps | https://imgops.com/#b#`; } function isKeyDownEffectiveTarget(target) { - var localName = (target.shadowRoot ? target.shadowRoot.activeElement : target).localName; + var localName = (target.shadowRoot ? (target.shadowRoot.activeElement || target) : target).localName; // 确保光标不是定位在文字输入框或选择框 if (localName == 'textarea' || localName == 'input' || localName == 'select'){ From 2e99902eb2f7f2da7d6432f913d5d7427f2495e7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 07:54:53 +0800 Subject: [PATCH 362/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 273e67d00bf..82eb85d962c 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.7 +// @version 0.1.8 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -40,16 +40,18 @@ } return distanceMatrix[b.length][a.length]; } + const gapStr = "[\n\/\\'\"‘’“”,.!\?,。!?… ]"; + const gapStrs = new RegExp(gapStr + "+", "g"); _unsafeWindow.searchJumperAddons.push({ name: "Levenshtein", type: "findInPage", sort: 0, run: (text, keywords) => { - if (!text || !keywords || keywords.length < 6) return {matched: false}; + if (!text || !keywords) return {matched: false}; text = text.toLowerCase(); keywords = keywords.toLowerCase(); - let wordArr = text.replace(/[\n\/\\,.!\?,。!?… ]+/g, " ").split(" "); - let kwArr = keywords.replace(/[\n\/\\,.!\?,。!?… ]+/g, " ").split(" "); + let wordArr = text.replace(gapStrs, " ").split(" "); + let kwArr = keywords.replace(gapStrs, " ").split(" "); let matched = false, pos = -1, len = 0, matchedStr = []; for (let i = 0; i < wordArr.length; i++) { matched = true; @@ -70,7 +72,7 @@ } } if (matched) { - let wordMatch = text.match(new RegExp("(^|[\n\/\\,.!\?,。!?… ])(" + matchedStr.join("[\n\/\\,.!\?,。!?… ]+") + ")($|[\n\/\\,.!\?,。!?… ])", "i")); + let wordMatch = text.match(new RegExp(`(^|${gapStr})(` + matchedStr.join(gapStr + "+") + `)($|${gapStr})`, "i")); if (wordMatch) { let content = wordMatch[2]; len = content.length; From a39623b2bffb0b9dca4c87acdfcb5bf4de378571 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 07:58:16 +0800 Subject: [PATCH 363/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f295df8cf6d..f8fcaef7a6e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.26 +// @version 1.7.27 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2451,7 +2451,7 @@ right: 100px; display: none; flex-direction: column; - background: white; + background: #212022; border-radius: 10px; opacity: 0; transition: 0.5s opacity ease; @@ -2476,7 +2476,7 @@ opacity: 1; } .inputGroup>#addons>div>label { - color: unset; + color: white; display: inline; background: none; top: unset; From 58935a62c916738bf663368f671d26a060b6815d Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 08:20:19 +0800 Subject: [PATCH 364/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f8fcaef7a6e..c2489e8da2e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -10529,8 +10529,8 @@ let showToolbarTimer; let clientRect; - if (searchData.prefConfig.leftMouse) { - document.addEventListener('selectionchange', (e) => { + document.addEventListener('selectionchange', (e) => { + if (searchData.prefConfig.leftMouse) { if (window.getSelection().toString()) { const selection = window.getSelection(); const range = selection.getRangeAt(0); @@ -10538,8 +10538,8 @@ } else { clientRect = null; } - }); - } + } + }); let waitForMouse = false; clickHandler = e => { if (shown) { From 0d1926ceb447f0d9c42539f9c410fe0cb4ffa5ff Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 21 Nov 2023 01:58:17 +0000 Subject: [PATCH 365/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index f6fe12e9cbe..561a0e98065 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86187", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(@class,'movie-list')]/div[@class='item']", + "nextLink": "//a[@rel='next']", + "url": "^https://javdb\\.com/", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mogglyone", + "name": "JavDB", + "created_at": "2023-11-20T19:07:57+09:00", + "updated_at": "2023-11-20T19:07:57+09:00" +}, { "resource_url": "http://wedata.net/items/86185", "data": { From 7c7c89b91280f6a081d1c5868b883421190f66ca Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 10:20:13 +0800 Subject: [PATCH 366/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c2489e8da2e..797840e2bc9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.27 +// @version 1.7.28 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -67,7 +67,7 @@ } const importPageReg = /^https:\/\/github\.com\/hoothin\/SearchJumper(\/(issue|discussions)|$)|^https:\/\/greasyfork\.org\/.*\/scripts\/445274[\-\/].*\/discussions/i; const mobileUa = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; - let configPage = 'https://hoothin.github.io/SearchJumper'; + let configPage = 'https://hoothin.github.io/SearchJumper/'; let isAllPage = false; var searchData = {}; @@ -2482,7 +2482,7 @@ top: unset; left: unset; font-size: unset; - line-height: unset; + line-height: 20px; max-width: unset; } .inputGroup>.svgBtns:hover { @@ -10602,7 +10602,9 @@ matchKey = true; } if (!searchData.prefConfig.selectToShow && - (e.button === 0 || e.button === 1) && !searchData.prefConfig.leftMouse) { + !searchData.prefConfig.leftMouse && + e.button === 0) { + searchBar.waitForHide(1); return; } let startX = e.clientX; @@ -10658,7 +10660,7 @@ } return; } - if ((e.button === 0 && clientRect && !inputSign && + if ((e.button !== 2 && clientRect && !inputSign && e.clientX > clientRect.left && e.clientX < clientRect.left + clientRect.width && e.clientY > clientRect.top && e.clientY < clientRect.top + clientRect.height) || (matchKey && e.button !== 0)) { @@ -10679,8 +10681,8 @@ showToolbarTimer = setTimeout(() => { if (draging) return; if (targetElement != e.target) return; - if (e.button === 2 && !searchData.prefConfig.rightMouse) return; - if ((e.button === 0 || e.button === 1) && !searchData.prefConfig.leftMouse) return; + if (e.button !== 0 && !searchData.prefConfig.rightMouse) return; + if (e.button === 0 && !searchData.prefConfig.leftMouse) return; if (e.button === 0 && getSelectStr() !== '') return; searchBar.setFuncKeyCall(false); searchBar.showInPage(); From f4c4c47628d0c79a38a2ce75e688a4168f97a963 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 12:15:32 +0800 Subject: [PATCH 367/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 992efe336ae..5640acaac54 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.6 +// @version 2.7.7 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -218,7 +218,7 @@ if (window.top != window.self) { (function() { 'use strict'; - var indexReg=/^(\w.*)?PART\b|^Prologue|^(\w.*)?Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^(\d|\s|\.)*[第(]?\s*[\d〇零一二两三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; + var indexReg=/^(\w.*)?PART\b|^Prologue|^(\w.*)?Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]|^(\d|\s|\.)*[第(]?\s*[\d〇零一二两三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; var innerNextPage=/^\s*(下一[页頁张張]|next\s*page|次のページ)/i; var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; var i18n={}; @@ -262,6 +262,7 @@ if (window.top != window.self) { dacSortByName:"按章节名排序", reverse:"反选", dacUseIframe:"使用 iframe 后台加载内容(慢速)", + dacSaveAsZip:"下载为 zip", dacSetCustomRule:"修改规则", dacAddUrl:"添加章节", dacStartDownload:"下载选中" @@ -303,6 +304,7 @@ if (window.top != window.self) { dacSortByName:"依章節名排序", reverse:"反選", dacUseIframe:"使用 iframe 背景載入內容(慢速)", + dacSaveAsZip:"下載為 zip", dacSetCustomRule:"修改規則", dacAddUrl:"新增章節", dacStartDownload:"下載選取" @@ -342,7 +344,8 @@ if (window.top != window.self) { dacSortByUrl:"Sort by URL", dacSortByName:"Sort by name", reverse:"Reverse selection", - dacUseIframe: "Use iframe to load content in the background (slow)", + dacUseIframe: "Use iframe to load content (slow)", + dacSaveAsZip: "Save as zip", dacSetCustomRule:"Modify rules", dacAddUrl:"Add Chapter", dacStartDownload:"Download selected" @@ -417,11 +420,15 @@ if (window.top != window.self) { dacLinksCon.appendChild(item); } + var saveAsZip = true; function filterList(list) { if (!GM_getValue("showFilterList")) { indexDownload(list); return; } + if (txtDownContent) { + txtDownContent.style.display = "none"; + } if (filterListContainer) { filterListContainer.style.display = ""; filterListContainer.classList.remove("customRule"); @@ -450,7 +457,7 @@ if (window.top != window.self) {
-

+

@@ -470,7 +477,11 @@ if (window.top != window.self) { let dacStartDownload = filterListContainer.querySelector("#dacStartDownload"); let dacLinksClose = filterListContainer.querySelector("#dacLinksClose"); let dacFilterBg = filterListContainer.querySelector("#dacFilterBg"); + let dacSaveAsZip = filterListContainer.querySelector("#dacSaveAsZip"); dacUseIframe = filterListContainer.querySelector("#dacUseIframe"); + dacSaveAsZip.onchange = e => { + saveAsZip = dacSaveAsZip.checked; + }; dacSortByPos.onclick = e => { let linkList = [].slice.call(dacLinksCon.children); if (linkList[0].children[1].href != list[0].href) { @@ -577,7 +588,6 @@ if (window.top != window.self) { let linkList = [].slice.call(dacLinksCon.querySelectorAll("input:checked+.dacLink")); useIframe = !!dacUseIframe.checked; indexDownload(linkList, true); - filterListContainer.style.display = "none"; }; dacLinksClose.onclick = e => { filterListContainer.style.display = "none"; @@ -690,13 +700,13 @@ if (window.top != window.self) { document.body.appendChild(shadowContainer); } - function initTxtDownDiv(){ - if(txtDownContent){ - txtDownContent.style.display=""; + function initTxtDownDiv() { + if (txtDownContent) { + txtDownContent.style.display = ""; return; } - txtDownContent=document.createElement("div"); - txtDownContent.id="txtDownContent"; + txtDownContent = document.createElement("div"); + txtDownContent.id = "txtDownContent"; let shadowContainer = document.createElement("div"); document.body.appendChild(shadowContainer); let shadow = shadowContainer.attachShadow({ mode: "open" }); @@ -724,7 +734,7 @@ if (window.top != window.self) { } function saveContent() { - if (win.downloadAllContentSaveAsZip) { + if (win.downloadAllContentSaveAsZip && saveAsZip) { win.downloadAllContentSaveAsZip(rCats, i18n.info.replace("#t#", location.href), content => { saveAs(content, document.title + ".zip"); }); From c08e51bc584733cc2553b003dfd4067d56cd4422 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 16:08:22 +0800 Subject: [PATCH 368/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 797840e2bc9..fe0612a0059 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.28 +// @version 1.7.29 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -10530,7 +10530,7 @@ let clientRect; document.addEventListener('selectionchange', (e) => { - if (searchData.prefConfig.leftMouse) { + if (searchData.prefConfig.leftMouse || searchData.prefConfig.middleMouse) { if (window.getSelection().toString()) { const selection = window.getSelection(); const range = selection.getRangeAt(0); @@ -10601,11 +10601,11 @@ (searchData.prefConfig.metaKey && !e.metaKey))) { matchKey = true; } - if (!searchData.prefConfig.selectToShow && - !searchData.prefConfig.leftMouse && - e.button === 0) { - searchBar.waitForHide(1); - return; + if (!searchData.prefConfig.selectToShow) { + if ((e.button === 0 && !searchData.prefConfig.leftMouse) || (e.button === 1 && !searchData.prefConfig.middleMouse)) { + searchBar.waitForHide(1); + return; + } } let startX = e.clientX; let startY = e.clientY; @@ -10631,7 +10631,7 @@ setTimeout(() => { if (shown) return; if (!inputSign && ( - (matchKey && e.button !== 0) || + (matchKey && e.button === 2) || (moved && e.button === 0 && searchData.prefConfig.selectToShow && getSelectStr()) )) { searchBar.showInPage(true, e); @@ -10660,10 +10660,22 @@ } return; } + if (showToolbarTimer) clearTimeout(showToolbarTimer); + showToolbarTimer = setTimeout(() => { + if (draging) return; + if (targetElement != e.target) return; + if (e.button === 1 && !searchData.prefConfig.middleMouse) return; + if (e.button === 2 && !searchData.prefConfig.rightMouse) return; + if (e.button === 0 && !searchData.prefConfig.leftMouse) return; + //if (e.button === 0 && getSelectStr() !== '') return; + searchBar.setFuncKeyCall(false); + searchBar.showInPage(); + shown = true; + }, parseInt(searchData.prefConfig.longPressTime)); if ((e.button !== 2 && clientRect && !inputSign && e.clientX > clientRect.left && e.clientX < clientRect.left + clientRect.width && e.clientY > clientRect.top && e.clientY < clientRect.top + clientRect.height) || - (matchKey && e.button !== 0)) { + (matchKey && e.button === 2)) { setTimeout(() => { if (!draging) { searchBar.showInPage(true, e); @@ -10672,22 +10684,10 @@ e.target.removeEventListener('scroll', scrollHandler); }, 200); shown = true; - clearTimeout(showToolbarTimer); document.addEventListener('mouseup', inpageMouseUpHandler, true); document.addEventListener('click', clickHandler, true); return false; } - if (showToolbarTimer) clearTimeout(showToolbarTimer); - showToolbarTimer = setTimeout(() => { - if (draging) return; - if (targetElement != e.target) return; - if (e.button !== 0 && !searchData.prefConfig.rightMouse) return; - if (e.button === 0 && !searchData.prefConfig.leftMouse) return; - if (e.button === 0 && getSelectStr() !== '') return; - searchBar.setFuncKeyCall(false); - searchBar.showInPage(); - shown = true; - }, parseInt(searchData.prefConfig.longPressTime)); document.addEventListener('mousemove', inpageMouseMoveHandler, true); document.addEventListener('mouseup', inpageMouseUpHandler, true); e.target.addEventListener('scroll', scrollHandler); From 55f64e3f4cabf7aca8435aca2d37cb6ddf3e5f45 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 17:37:00 +0800 Subject: [PATCH 369/812] 1.9.36.93 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 28 +++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 9c942387fb7..1716600a352 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.92](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.93](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index a144ab0882e..0db702e26d8 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.92 +// @version 1.9.36.93 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1475,13 +1475,19 @@ let singleUrl = location.origin + location.pathname; if (singleUrl == rule.url) { setRule(rule); + if (rule.checked) return; callback = () => { - if (self.curSiteRule && !self.curSiteRule.singleUrl) { + if (self.curSiteRule) { self.smartRules = self.smartRules.filter(item => {return item && item.url != singleUrl}); - storage.setItem("smartRules", self.smartRules); - if (self.curSiteRule.url.length > 13) { - self.addToHpRules(); + if (self.curSiteRule.singleUrl) { + self.curSiteRule.checked = true; + self.smartRules.unshift(self.curSiteRule); + } else { + if (self.curSiteRule.url.length > 13) { + self.addToHpRules(); + } } + storage.setItem("smartRules", self.smartRules); } }; break; @@ -3241,6 +3247,16 @@ }); } + findNoNext() { + if (!this.curSiteRule || !this.curSiteRule.singleUrl || this.curSiteRule.nextLink === 0) return; + delete this.curSiteRule.pageElement; + this.curSiteRule.nextLink = 0; + let self = this; + self.smartRules = self.smartRules.filter(item => {return item && item.url != self.curSiteRule.url}); + self.smartRules.unshift(self.curSiteRule); + storage.setItem("smartRules", self.smartRules); + } + initPage(callback) { let self = this; if (self.initing) return; @@ -8142,6 +8158,8 @@ setTimeout(() => {isLoading = false}, 500); } else if (tryTimes++ < 3) { setTimeout(() => {isLoading = false}, 1000); + } else { + ruleParser.findNoNext(); } } else if (rulesData.lastPageTips && !showedLastPageTips) { showTips(i18n("lastPage"), "", 800); From 8676856c435d2d32bf5a3ce0a47d5c8377df00fb Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 19:45:52 +0800 Subject: [PATCH 370/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index fe0612a0059..ee677ac07f8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.29 +// @version 1.7.30 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -6182,7 +6182,7 @@ //self.recoveHistory(); if (self.funcKeyCall) { self.setFuncKeyCall(false); - if (currentSite && !currentSite.hideNotMatch && !searchData.prefConfig.hideOnSearchEngine) { + if ((currentSite && !currentSite.hideNotMatch && !searchData.prefConfig.hideOnSearchEngine) || self.con.classList.contains("resizePage")) { self.initPos(); let firstType = self.bar.querySelector('.search-jumper-type:nth-child(1)>span'); if (firstType && !firstType.classList.contains("search-jumper-open")) { @@ -10368,6 +10368,7 @@ if (e.button === 2) { if (searchData.prefConfig.resizePage) { if (typeof searchBar.initBodyStyle != "undefined") getBody(document).style.cssText = searchBar.initBodyStyle; + searchBar.con.classList.remove("resizePage"); } document.removeEventListener('mouseup', mouseUpHandler, false); document.removeEventListener('mousemove', mouseMoveHandler, false); From ce925416c96e224ec4f7210a3ffed8ef0762200d Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 21 Nov 2023 20:34:41 +0800 Subject: [PATCH 371/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ee677ac07f8..ad7e81ee784 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4377,7 +4377,8 @@ let top = getElementTop(node); navMark.dataset.top = top; navMark.dataset.content = word.showWords; - navMark.style.top = top / document.documentElement.scrollHeight * 100 + "%"; + let scrollHeight = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); + navMark.style.top = top / scrollHeight * 100 + "%"; navMark.style.background = node.style.background || "yellow"; navMark.addEventListener("click", e => { e.stopPropagation(); @@ -5063,10 +5064,11 @@ refreshNavMarks() { if (this.refreshNavMarksTimer) clearTimeout(this.refreshNavMarksTimer); this.refreshNavMarksTimer = setTimeout(() => { + let scrollHeight = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); this.navPointer.style.display = "none"; this.navMarks.style.display = "none"; [].forEach.call(this.navMarks.children, m => { - m.style.top = m.dataset.top / document.documentElement.scrollHeight * 100 + "%"; + m.style.top = m.dataset.top / scrollHeight * 100 + "%"; }); this.navMarks.style.display = ""; }, 1000); From 9df5848b8dfa4e1281239b28fbf36b5540f616a1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 09:07:20 +0800 Subject: [PATCH 372/812] 1.9.36.94 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 1716600a352..efbab07d1da 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.93](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.94](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0db702e26d8..cdea65978d1 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.93 +// @version 1.9.36.94 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2502,6 +2502,7 @@ } if (next && next.classList && (next.classList.contains("results-more") || next.classList.contains("no"))) next = null; if (next && next.hasAttribute && next.hasAttribute("disabled")) next = null; + if (next && next.parentNode.href && compareNodeName(next.parentNode, ["a"])) next = next.parentNode; return {next:next, canSave:canSave}; } From 59dfeb600ae6e18ed79093e51adcd55822992206 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Wed, 22 Nov 2023 01:56:41 +0000 Subject: [PATCH 373/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 561a0e98065..35df34a71db 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -16235,20 +16235,6 @@ }, "created_at": "2016-11-21T00:25:03+09:00" }, -{ - "resource_url": "http://wedata.net/items/81082", - "data": { - "pageElement": "//div[@id='fpMainContent']/div[@class='gridCategory removeHidden']|//div[@class='post clearfix']|//div[@id='comment_list']", - "nextLink": "//a[@class='button'][.='Next']|//a[contains(@class, 'icon-arrow-right2')][1]|//a[@class='search_pagenav search_pagenav_text' and contains(text(),'Next')][1]", - "url": "^https?://(?:[^.] \\.)?slickdeals\\.net/", - "exampleUrl": "https://slickdeals.net/?page=2 https://slickdeals.net/f/10525332-far-acronis-true-image-2017-1-device-free-after-35-rebate-5-newegg-promo-card" - }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_by": "qazplm", - "name": "Slickdeals", - "created_at": "2016-11-19T09:08:29+09:00", - "updated_at": "2020-09-13T02:48:12+09:00" -}, { "resource_url": "http://wedata.net/items/81081", "name": "businessnetwork.jp", @@ -46270,20 +46256,18 @@ }, { "resource_url": "http://wedata.net/items/29177", - "name": "Slickdeals", - "created_by": "mark", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-01-31T14:37:50+09:00", "data": { - "Stylish": "@-moz-document domain(\"slickdeals.net\") {\r\n .autopagerize_page_separator~.gridCategory .gridHeading{display:none !important;}\r\n}", - "exampleUrl": "https://slickdeals.net/deals/ https://slickdeals.net/deals/games/ https://slickdeals.net/f/9374587-samsung-saturday-is-on-sams-club-cctv-security-system-199-00\r\n", - "comment": "Check your expression before deleting others' one, or at least leave a comment saying why did you delete it. I've corrected it, btw.\r\nUncaught DOMException: Failed to execute '$x' on 'CommandLineAPI': The string '//div[@class='dealRow' or @class='postReplyContainer']|id('deals')/div[.//@class='itemBottomRow']|' is not a valid XPath expression.\r\n", - "bookmarklet": "Array.prototype.forEach.call(document.querySelectorAll('img'), function(img) { var lazySrc = img.hasAttribute('data-src') ? img.getAttribute('data-src') : img.getAttribute('data-original'); if (lazySrc) { img.src = lazySrc;} });", - "url": "^https?://(?:[^.]+\\.)?slickdeals\\.net/", - "pageElement": "//div[@class='dealRow' or @class='postReplyContainer']|id('deals')/div[contains(@class,'fpGridBox grid')]", - "nextLink": "//a[@class='button' and .='Next' or contains(@class,'icon-arrow-right2')]" + "pageElement": "//div[@data-module-name]/div[@class='dealRow'] |\r\n//div[@data-module-name]/div[@class='resultRow'] |\r\n//ul[contains(@class,'frontpageGrid')] |\r\n//ul[@class='categoryPageDealGrid'] |\r\n//section[@class='commentsSection']/div[@class='commentsSectionComment']", + "comment": "2023 Update: This item now works for all parts of the Slickdeals website, including the Front Page, Deal Pages, Search, and Comments. Note that this item hasn't been updated in nearly 7 years and was no longer working, so the \"bookmarklet\" and \"Stylish\" keys were removed as a precaution (they can be re-added with their new correct values if needed).", + "nextLink": "//div[@class='paginationPages']/span/following-sibling::a |\r\n//div[contains(@class,'slickdealsPagination')]/span[@class='slickdealsPagination__pageNumber']/following-sibling::a |\r\n//div[contains(@class,'pagination')]/a[last()]", + "url": "^https://(?:[^.]+\\.)?slickdeals\\.net/", + "exampleUrl": "https://slickdeals.net/\r\nhttps://slickdeals.net/deals/home/\r\nhttps://slickdeals.net/newsearch.php?q=infinity\r\nhttps://slickdeals.net/f/17077657-pokemon-trading-card-game-scarlet-violet-151-ultra-premium-collection-96-free-shipping" }, - "created_at": "2009-06-22T07:57:28+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mark", + "name": "Slickdeals", + "created_at": "2009-06-22T07:57:28+09:00", + "updated_at": "2023-11-21T12:14:53+09:00" }, { "resource_url": "http://wedata.net/items/29155", From de4e11f2c9223a559ff6a2468a67beed42fb5cec Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 10:23:20 +0800 Subject: [PATCH 374/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index cdea65978d1..ae9d6656ecd 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1777,6 +1777,7 @@ let bodyHeight = parseInt(body.offsetHeight || body.scrollHeight); let curHeight = bodyHeight, curWidth = 0; let windowHeight = window.innerHeight || document.documentElement.clientHeight; + let windowWidth = window.innerWidth || document.documentElement.clientWidth; let needCheckNext = (doc == document && this.initNext), nextLeftPos = 0; if (needCheckNext && this.initNext.getBoundingClientRect) { nextLeftPos = this.initNext.getBoundingClientRect().left; @@ -1851,12 +1852,12 @@ if (isNaN(h) || isNaN(w)) continue; isHori = Math.abs(preOffsetTop - curNode.offsetTop) <= 20 ? true : (preOffsetTop == -1 && curNode.nextElementSibling && curNode.nextElementSibling.offsetTop == curNode.offsetTop); if (isHori && h <= 50) continue; - if (isHori && nextLeftPos && curMaxEle && curWidth > 500 && curHeight > 500) { + /*if (isHori && nextLeftPos && curMaxEle && curWidth > 500 && curHeight > 500) { let curRect = curNode.getBoundingClientRect(); - if (curRect.left <= nextLeftPos && curRect.right > nextLeftPos) { + if (curRect.left > windowWidth>>2 && curRect.left <= nextLeftPos && curRect.right > nextLeftPos) { continue; } - } + }*/ let a = h * w, moreChild = curNode.children[0]; while (moreChild) { let validSize = self.getValidSize(moreChild, curWin); @@ -3801,8 +3802,8 @@ let mouseMoveHandler = e => { if (moving) { - let windowHeight=window.innerHeight || document.documentElement.clientHeight; - let windowWidth=window.innerWidth || document.documentElement.clientWidth; + let windowHeight = window.innerHeight || document.documentElement.clientHeight; + let windowWidth = window.innerWidth || document.documentElement.clientWidth; initX = (e.clientX - 10 + 40) / windowWidth * 100; initY = (e.clientY - 83 + 83) / windowHeight * 100; this.frame.style.top = `calc(${initY}% - 83px)`; From efd9a5df66d13dba3cc0d36a2e477594c550eedf Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 13:49:40 +0800 Subject: [PATCH 375/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 115 +++++++++++++++++----------- 1 file changed, 70 insertions(+), 45 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index d65679d6f4d..53696461245 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.20.1 +// @version 2023.11.22.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11993,7 +11993,7 @@ ImgOps | https://imgops.com/#b#`; shift: false, command: false, type: "hold", - closeAfterPreview: false, + closeAfterPreview: true, previewFollowMouse: true } }, @@ -18662,13 +18662,14 @@ ImgOps | https://imgops.com/#b#`; }; //图片窗口 - function ImgWindowC(img, data, actual, initPos){ + function ImgWindowC(img, data, actual, initPos, preview){ this.loaded = false; this.img = img; this.actual = !!actual; this.src = data?data.src:img.src; this.data = data; this.initPos = initPos || false; + this.preview = !!preview; this.init(); if(data){ @@ -18689,13 +18690,15 @@ ImgOps | https://imgops.com/#b#`; if(uniqueImgWin && !uniqueImgWin.removed){ uniqueImgWin.remove(); } - //图片是否已经被打开 - if(ImgWindowC.all.find(function(iwin){ - if(iwin.src==self.src){ - iwin.firstOpen(); - return true; - }; - }))return; + if (!this.preview) { + //图片是否已经被打开 + if(ImgWindowC.all.find(function(iwin){ + if(iwin.src==self.src){ + iwin.firstOpen(); + return true; + }; + }))return; + } this.addStyle(); @@ -19082,7 +19085,9 @@ ImgOps | https://imgops.com/#b#`; }; - ImgWindowC.all.push(this); + if (!this.preview) { + ImgWindowC.all.push(this); + } this._blur=this.blur.bind(this); this._focusedKeydown=this.focusedKeydown.bind(this); @@ -19846,7 +19851,7 @@ ImgOps | https://imgops.com/#b#`; w:parseFloat(imgWindowCS.width), }; this.isLongImg=rectSize.h > wSize.h && rectSize.h/rectSize.w > 2.5; - if(prefs.imgWindow.suitLongImg && this.isLongImg){ + if(prefs.imgWindow.suitLongImg && this.isLongImg && !this.preview){ this.center(rectSize.w <= wSize.w,false); this.imgWindow.classList.add("pv-pic-window-scroll"); }else if(prefs.imgWindow.fitToScreen){ @@ -19996,7 +20001,7 @@ ImgOps | https://imgops.com/#b#`; self.zoom(self.getRotatedImgCliSize(size).w / self.imgNaturalSize.w); } } - let padding1 = Math.min(180, wSize.h>>2, wSize.w>>2), padding2 = 50;//内外侧间距 + let padding1 = Math.min(250, wSize.h>>2, wSize.w>>2), padding2 = 50;//内外侧间距 if (imgWindow.offsetWidth / imgWindow.offsetHeight > wSize.w / wSize.h) { //宽条,上下半屏 maxWidth = wSize.w; @@ -20081,7 +20086,7 @@ ImgOps | https://imgops.com/#b#`; var wSize=getWindowSize(); var scrolled=prefs.imgWindow.fixed ? {x:0, y:0} : getScrolled(); if(horizontal)imgWindow.style.left = (wSize.w - imgWindow.offsetWidth)/2 + scrolled.x +'px'; - if(vertical)imgWindow.style.top = (wSize.h - imgWindow.offsetHeight)/2 + scrolled.y + (prefs.imgWindow.suitLongImg && this.isLongImg ? 13 : 0) +'px'; + if(vertical)imgWindow.style.top = (wSize.h - imgWindow.offsetHeight)/2 + scrolled.y + (prefs.imgWindow.suitLongImg && this.isLongImg && !this.preview ? 13 : 0) +'px'; }, @@ -21095,8 +21100,10 @@ ImgOps | https://imgops.com/#b#`; self.imgWindow.parentNode.removeChild(self.imgWindow); },300); - var index=ImgWindowC.all.indexOf(this); - ImgWindowC.all.splice(index,1); + if (!this.preview) { + var index=ImgWindowC.all.indexOf(this); + ImgWindowC.all.splice(index,1); + } var removeEvent=document.createEvent('CustomEvent'); removeEvent.initCustomEvent('pv-removeImgWindow',false,false); this.imgWindow.dispatchEvent(removeEvent); @@ -21429,7 +21436,7 @@ ImgOps | https://imgops.com/#b#`; } if(!uniqueImgWin || uniqueImgWin.removed){ this.data.src=this.img.src; - uniqueImgWin = new ImgWindowC(this.img, this.data); + uniqueImgWin = new ImgWindowC(this.img, this.data, null, null, true); //uniqueImgWin.imgWindow.classList.add("pv-pic-window-transition-all"); } uniqueImgWin.blur({target:this.data.img}); @@ -21681,7 +21688,7 @@ ImgOps | https://imgops.com/#b#`; //读取中的图片,不显示浮动栏,调整读取图标的位置. if(LoadingAnimC.all.find(function(item,index,array){ - if(data.img==item.data.img){ + if(data.src==item.data.src){ return true; }; }))return false; @@ -21689,7 +21696,7 @@ ImgOps | https://imgops.com/#b#`; //被放大镜盯上的图片,不要显示浮动栏. if(MagnifierC.all.find(function(item,index,array){ - if(data.img==item.data.img){ + if(data.src==item.data.src){ return true; }; }))return false; @@ -21712,9 +21719,11 @@ ImgOps | https://imgops.com/#b#`; },150); clearTimeout(this.showTimer); - if(prefs.floatBar.position=="hide"){ - self.data=data; - self.show(); + self.data=data; + if (data.hide) { + this.show(); + this.floatBar.style.display = 'none'; + this.floatBar.style.opacity = 0; return false; } if(!this.shown || self.data.img!=data.img){ @@ -21722,7 +21731,6 @@ ImgOps | https://imgops.com/#b#`; this.floatBar.style.opacity=0.01; } this.showTimer=setTimeout(function(){ - self.data=data; self.show(); },prefs.floatBar.showDelay); return true; @@ -21889,11 +21897,9 @@ ImgOps | https://imgops.com/#b#`; this.shown=true; this.addStyle(); this.setButton(); - if(prefs.floatBar.position!=="hide"){ - this.floatBar.style.transition=""; - this.floatBar.style.display='block'; - this.floatBar.style.opacity=""; - } + this.floatBar.style.transition=""; + this.floatBar.style.display='block'; + this.floatBar.style.opacity=""; clearTimeout(this.hideTimer); window.removeEventListener('scroll',this._scrollHandler,true); window.addEventListener('scroll',this._scrollHandler,true); @@ -21917,7 +21923,11 @@ ImgOps | https://imgops.com/#b#`; downloadImg(this.data.src || this.data.imgSrc, (this.data.img.title || this.data.img.alt), prefs.saveName); return; } else { - let additionEnable = prefs.floatBar.invertAdditionalFeature ? !e.altKey : e.altKey; + let altKey = e.altKey; + if (e.type != "click" && prefs.floatBar.globalkeys.invertInitShow && prefs.floatBar.globalkeys.alt) { + altKey = false; + } + let additionEnable = prefs.floatBar.invertAdditionalFeature ? !altKey : altKey; if (additionEnable) { let src, feature = prefs.floatBar.additionalFeature; if (buttonType == 'actual') { @@ -22880,7 +22890,7 @@ ImgOps | https://imgops.com/#b#`; } if (!result && document.elementsFromPoint) { let elements = document.elementsFromPoint(clientX, clientY); - for (let i = 0; i < elements.length; i++) { + for (let i = 0; i < 3; i++) { let ele = elements[i]; if (/img/i.test(ele.nodeName)) { target = ele; @@ -22965,6 +22975,18 @@ ImgOps | https://imgops.com/#b#`; } var checkUniqueImgWin = function() { if (canPreview) { + if (!result.imgAS && !result.imgCS) { + let sizeInfo = { + w: result.img.offsetWidth || result.img.scrollWidth, + h: result.img.offsetHeight || result.img.scrollHeight + } + result.imgAS = sizeInfo; + result.imgCS = sizeInfo; + } + if (result.imgAS.w <= result.imgCS.w && result.imgAS.h <= result.imgCS.h) { + var wSize = getWindowSize(); + if (result.imgAS.w <= wSize.w && result.imgAS.h <= wSize.h) return false; + } uniqueImgWinInitX = clientX; uniqueImgWinInitY = clientY; if (removeUniqueWinTimer) clearTimeout(removeUniqueWinTimer); @@ -22979,6 +23001,9 @@ ImgOps | https://imgops.com/#b#`; } else { if (uniqueImgWin && uniqueImgWin.imgWindow && !uniqueImgWin.removed) { uniqueImgWin.imgWindow.style.pointerEvents = "auto"; + uniqueImgWin.imgWindow.classList.remove("pv-pic-window-transition-all"); + uniqueImgWin.previewed = true; + uniqueImgWin = null; } return false; } @@ -22992,6 +23017,10 @@ ImgOps | https://imgops.com/#b#`; target = null; } if (target) { + let sizeInfo = { + w: target.offsetWidth || target.scrollWidth, + h: target.offsetHeight || target.scrollHeight + } result = { src: target.href, type: "", @@ -22999,6 +23028,8 @@ ImgOps | https://imgops.com/#b#`; noActual:true, img: target }; + result.imgAS = sizeInfo; + result.imgCS = {w: 1, h: 1}; checkUniqueImgWin(); } return; @@ -23009,7 +23040,7 @@ ImgOps | https://imgops.com/#b#`; result = findPic(target); if (!result) return; if (prefs.floatBar.showWithRules && result.type == "rule") { - } else if (!(result.imgAS.w==result.imgCS.w && result.imgAS.h == result.imgCS.h)) {//如果不是两者完全相等,那么被缩放了. + } else if (!(result.imgAS.w == result.imgCS.w && result.imgAS.h == result.imgCS.h)) {//如果不是两者完全相等,那么被缩放了. if (prefs.floatBar.sizeLimitOr) { if (result.imgCS.h <= prefs.floatBar.minSizeLimit.h && result.imgCS.w <= prefs.floatBar.minSizeLimit.w) {//最小限定判断. return; @@ -23053,20 +23084,14 @@ ImgOps | https://imgops.com/#b#`; canclePreCTO = clickToOpen(result); } - if (!checkUniqueImgWin()) { - let canShow = floatBar.start(result); - if (canShow) { - var keyHide = prefs.floatBar.position == "hide" ? !altKey : altKey; - if (keyHide) { - floatBar.floatBar.style.opacity = 0; - floatBar.floatBar.style.display = "none"; - } else { - if (floatBar.floatBar.style.opacity == 0) { - floatBar.floatBar.style.opacity = ""; - } - floatBar.floatBar.style.display = "initial"; - } + let hide = prefs.floatBar.position == "hide" ? !altKey : altKey; + result.hide = hide; + let canShow = floatBar.start(result); + if (!checkUniqueImgWin() && canShow) { + if (floatBar.floatBar.style.opacity == 0) { + floatBar.floatBar.style.opacity = ""; } + floatBar.floatBar.style.display = "initial"; } } } @@ -23265,7 +23290,7 @@ ImgOps | https://imgops.com/#b#`; return false; } if (key == 'c' && event && (event.ctrlKey || event.metaKey)) return false; - if (floatBar && floatBar.shown && isKeyDownEffectiveTarget(event.target)) { + if (floatBar && isKeyDownEffectiveTarget(event.target)) { Object.keys(prefs.floatBar.keys).some(function(action) { if (action == 'enable') return; if (key == prefs.floatBar.keys[action]) { From 85705706ad344d175521c3307092b0cf7f6e96a8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 13:51:38 +0800 Subject: [PATCH 376/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 53696461245..ed6438c347e 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -22892,6 +22892,7 @@ ImgOps | https://imgops.com/#b#`; let elements = document.elementsFromPoint(clientX, clientY); for (let i = 0; i < 3; i++) { let ele = elements[i]; + if (!ele) continue; if (/img/i.test(ele.nodeName)) { target = ele; break; From 47a656a409978f3f6d6a8e6d1aff58bb64fa03e0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 13:55:02 +0800 Subject: [PATCH 377/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index ed6438c347e..aa8b81c26cb 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.22.1 +// @version 2023.11.22.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -22890,7 +22890,8 @@ ImgOps | https://imgops.com/#b#`; } if (!result && document.elementsFromPoint) { let elements = document.elementsFromPoint(clientX, clientY); - for (let i = 0; i < 3; i++) { + let checkLen = Math.min(elements.length, 5); + for (let i = 0; i < checkLen; i++) { let ele = elements[i]; if (!ele) continue; if (/img/i.test(ele.nodeName)) { From 27cd9f6b8a2a893124d07631ccb0150e85b99866 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 15:29:13 +0800 Subject: [PATCH 378/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 30 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index aa8b81c26cb..03c0820248c 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.22.2 +// @version 2023.11.22.3 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -22888,7 +22888,7 @@ ImgOps | https://imgops.com/#b#`; } }*/ } - if (!result && document.elementsFromPoint) { + if (!result && document.elementsFromPoint && target.nodeName.toUpperCase() != 'A') { let elements = document.elementsFromPoint(clientX, clientY); let checkLen = Math.min(elements.length, 5); for (let i = 0; i < checkLen; i++) { @@ -22977,17 +22977,19 @@ ImgOps | https://imgops.com/#b#`; } var checkUniqueImgWin = function() { if (canPreview) { - if (!result.imgAS && !result.imgCS) { - let sizeInfo = { - w: result.img.offsetWidth || result.img.scrollWidth, - h: result.img.offsetHeight || result.img.scrollHeight + if (result.type != "link" && result.src == result.imgSrc) { + if (!result.imgAS && !result.imgCS) { + let sizeInfo = { + w: result.img.offsetWidth || result.img.scrollWidth, + h: result.img.offsetHeight || result.img.scrollHeight + } + result.imgAS = sizeInfo; + result.imgCS = sizeInfo; + } + if (result.imgAS.w <= result.imgCS.w && result.imgAS.h <= result.imgCS.h) { + var wSize = getWindowSize(); + if (result.imgAS.w <= wSize.w && result.imgAS.h <= wSize.h) return false; } - result.imgAS = sizeInfo; - result.imgCS = sizeInfo; - } - if (result.imgAS.w <= result.imgCS.w && result.imgAS.h <= result.imgCS.h) { - var wSize = getWindowSize(); - if (result.imgAS.w <= wSize.w && result.imgAS.h <= wSize.h) return false; } uniqueImgWinInitX = clientX; uniqueImgWinInitY = clientY; @@ -23025,13 +23027,11 @@ ImgOps | https://imgops.com/#b#`; } result = { src: target.href, - type: "", + type: "link", imgSrc: target.href, noActual:true, img: target }; - result.imgAS = sizeInfo; - result.imgCS = {w: 1, h: 1}; checkUniqueImgWin(); } return; From 723faab93070b5ad063c8516316000c2163f387a Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 16:37:17 +0800 Subject: [PATCH 379/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 34 ++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ad7e81ee784..610fea402fa 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.30 +// @version 1.7.31 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -8787,12 +8787,15 @@ try { url = url.replace(/^showTips:/, ''); let tipsResult = await self.anylizeShowTips(url, ele.dataset.name); - if (self.tips.style.opacity == 0) return; + if (self.tips.style.opacity == 0 || self.tips.innerHTML.indexOf(ele.dataset.name) !== 0) return; if (Array && Array.isArray && Array.isArray(tipsResult)) { tipsData = tipsResult[1]; tipsResult = tipsResult[0]; } if (tipsResult) { + if (tipsResult != "null" && tipsResult != "No result") { + tipsResult = `
${tipsResult}
`; + } self.tipsPos(ele, tipsResult); } } catch(e) {debug(e)} @@ -8946,6 +8949,7 @@ fetchOption.method = "POST"; _url = _url.replace(postMatch[0], ""); } + let failed = false; if (template && template[1].indexOf("json.") === 0) { let allValue = []; tipsResult = await GM_fetch(_url, fetchOption).then(r => { @@ -8957,7 +8961,10 @@ let finalData = calcJson(r, template); return finalData; }); - if (!tipsResult) tipsResult = "No result"; + if (!tipsResult) { + tipsResult = "No result"; + failed = true; + } tipsResult = [tipsResult, "\n" + allValue.join(",")]; } else { let hasData = false; @@ -8983,7 +8990,8 @@ if (selArr.length == 1) { value = eles[0].innerText; } else { - let forEachMatch = selArr[1].match(/\(.*?\)/g); + let key = selArr[1]; + let forEachMatch = key.match(/\(.*?\)/g); if (forEachMatch) { [].forEach.call(eles, ele => { let _v = selArr[1]; @@ -8991,13 +8999,14 @@ if (p === "()") { _v = _v.replace(p, ele.innerText); } else { - _v = _v.replace(p, ele.getAttribute(p.match(/\((.*)\)/)[1])); + key = p.match(/\((.*)\)/)[1]; + _v = _v.replace(p, ele.getAttribute(key) || ele[key]); } }); value += _v; }); } else { - value = eles[0].getAttribute(selArr[1]); + value = eles[0].getAttribute(key) || eles[0][key]; } } } @@ -9009,13 +9018,18 @@ finalData = finalData.replace(/showTipsLeftBrace/g, "{").replace(/showTipsRightBrace/g, "}"); return finalData; }); - if (!tipsResult) tipsResult = "No result"; + if (!tipsResult) { + tipsResult = "No result"; + failed = true; + } tipsResult = [tipsResult, url]; storeData = tipsResult; } - tipsStorage.push({url: url, data: storeData, time: Date.now()/1000}); - if (tipsStorage.length > 50) tipsStorage.shift(); - storage.setItem("tipsStorage", tipsStorage); + if (!failed) { + tipsStorage.push({url: url, data: storeData, time: Date.now()/1000}); + if (tipsStorage.length > 50) tipsStorage.shift(); + storage.setItem("tipsStorage", tipsStorage); + } } } else { tipsResult = /\breturn\b/.test(data) ? await new AsyncFunction('fetch', 'storage', 'name', '"use strict";' + data)(GM_fetch, storage, name) : data; From c9b9eb9c85172b284d8f4ac5f3e8030c61f179ce Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 16:46:58 +0800 Subject: [PATCH 380/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 610fea402fa..3aae08871bb 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -9146,6 +9146,9 @@ } } } else { + if (targetElement.children.length == 1 && targetElement.children[0].nodeName.toUpperCase() === 'A') { + targetElement = targetElement.children[0]; + } switch (targetElement.nodeName.toUpperCase()) { case 'IMG': this.bar.classList.add("search-jumper-isTargetImg"); From 24fdcae55632a6069de0717a1a5c2943b5b2507c Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 17:00:06 +0800 Subject: [PATCH 381/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 3aae08871bb..fa1300dd100 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -7319,8 +7319,12 @@ if (data.match && data.hideNotMatch) { if (new RegExp(data.match).test(href)) { se.style.display = ''; + if (ele.children.length > 1) ele.insertBefore(se, ele.children[1]); } else { se.style.display = 'none'; + if (self.searchJumperExpand.parentNode == ele) { + ele.insertBefore(se, self.searchJumperExpand); + } else ele.appendChild(se); } } if (keyWords && data.kwFilter) { @@ -7904,8 +7908,8 @@ }, 10000); } } else if (data.hideNotMatch) { - ele = null; - return null; + ele.style.display = 'none'; + ele.classList.add("notmatch"); } } From d657eeefb7a992d351540b828656c1be71d21441 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 17:10:20 +0800 Subject: [PATCH 382/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index fa1300dd100..9bb7b1210d7 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.31 +// @version 1.7.32 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -7310,11 +7310,6 @@ let href = (targetElement && (targetElement.href || targetElement.src)) || location.href; let keyWords = getKeywords(); siteEles.forEach((se, i) => { - let si = se.querySelector("img"); - if (si && !si.src && si.dataset.src) { - si.src = si.dataset.src; - delete si.dataset.src; - } let data = sites[i]; if (data.match && data.hideNotMatch) { if (new RegExp(data.match).test(href)) { @@ -7338,6 +7333,11 @@ } else ele.appendChild(se); } } + let si = se.querySelector("img"); + if (se.style.display != "none" && si && !si.src && si.dataset.src) { + si.src = si.dataset.src; + delete si.dataset.src; + } }); } else { if (searchData.prefConfig.minSizeMode) { @@ -7487,9 +7487,6 @@ } siteEles.forEach((se, i) => { let si = se.querySelector("img"); - if (si && !si.src && si.dataset.src) { - si.src = si.dataset.src; - } let data = sites[i]; if (localKeywords && data.kwFilter) { @@ -7502,6 +7499,9 @@ } else ele.appendChild(se); } } + if (se.style.display != 'none' && si && !si.src && si.dataset.src) { + si.src = si.dataset.src; + } }); } } else { @@ -9230,7 +9230,7 @@ if (_funcKeyCall) { if (targetSiteImgs) { [].forEach.call(targetSiteImgs, siteImg => { - if (siteImg.dataset.src) { + if (siteImg.parentNode.style.display != "none" && siteImg.dataset.src) { siteImg.src = siteImg.dataset.src; delete siteImg.dataset.src; } From 5260ec3cf21f7d054fe523ad9a5a3cc7a67acf98 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 17:53:19 +0800 Subject: [PATCH 383/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 82eb85d962c..2c54867f95d 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.8 +// @version 0.1.9 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -40,7 +40,7 @@ } return distanceMatrix[b.length][a.length]; } - const gapStr = "[\n\/\\'\"‘’“”,.!\?,。!?… ]"; + const gapStr = "[\n\/\\'\"‘’“”,.!\?,。!?…\(\) ]"; const gapStrs = new RegExp(gapStr + "+", "g"); _unsafeWindow.searchJumperAddons.push({ name: "Levenshtein", @@ -48,6 +48,11 @@ sort: 0, run: (text, keywords) => { if (!text || !keywords) return {matched: false}; + if (keywords.charCodeAt(0) > 255) { + let len = keywords.length; + let pos = text.toUpperCase().indexOf(keywords.toUpperCase()); + return {matched: pos != -1, pos: pos, len: len}; + } text = text.toLowerCase(); keywords = keywords.toLowerCase(); let wordArr = text.replace(gapStrs, " ").split(" "); @@ -72,11 +77,11 @@ } } if (matched) { - let wordMatch = text.match(new RegExp(`(^|${gapStr})(` + matchedStr.join(gapStr + "+") + `)($|${gapStr})`, "i")); + let wordMatch = text.match(new RegExp(`\\b(` + matchedStr.join(gapStr + "+") + `)\\b`, "i")); if (wordMatch) { - let content = wordMatch[2]; + let content = wordMatch[1]; len = content.length; - pos = wordMatch.index + wordMatch[1].length; + pos = wordMatch.index; } } return {matched: matched, pos: pos, len: len}; From e8d2e14d066c3c61f03b7990340a05ba058dee4a Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 18:56:57 +0800 Subject: [PATCH 384/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 40 ++++++++++++++++++------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9bb7b1210d7..92dd4f77ab8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.32 +// @version 1.7.33 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1171,6 +1171,8 @@ const logoBase64 = "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic2VhcmNoLWp1bXBlci1sb2dvQnRuU3ZnIiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0uNzM2IDUxMC40NjRjMC0yODEuOTQyIDIyOC4zMzUtNTEwLjUgNTEwLTUxMC41IDEzNS4yNiAwIDI2NC45ODEgNTMuNzg0IDM2MC42MjUgMTQ5LjUyMiA5NS42NDMgOTUuNzM3IDE0OS4zNzUgMjI1LjU4NSAxNDkuMzc1IDM2MC45NzggMCAyODEuOTQtMjI4LjMzNSA1MTAuNS01MTAgNTEwLjUtMjgxLjY2NSAwLTUxMC0yMjguNTYtNTEwLTUxMC41em01MTAtNTEwLjV2MTAyMW0tNTEwLTUxMC41aDEwMjAiIGZpbGw9IiNmZWZlZmUiLz48cGF0aCBkPSJNMjM3LjQ0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek02OTkuOTA0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek00MjMuMjk2IDc1OS4yOTZjLTY0IDAtMTE1LjcxMi01Mi4yMjQtMTE1LjcxMi0xMTUuNzEyIDAtMjYuNjI0IDkuMjE2LTUyLjIyNCAyNS42LTcyLjcwNCA5LjIxNi0xMS43NzYgMjYuMTEyLTEzLjMxMiAzNy44ODgtNC4wOTZzMTMuMzEyIDI2LjExMiA0LjA5NiAzNy44ODhjLTkuMjE2IDExLjI2NC0xMy44MjQgMjQuNTc2LTEzLjgyNCAzOC45MTIgMCAzNC4zMDQgMjcuNjQ4IDYxLjk1MiA2MS45NTIgNjEuOTUyczYxLjk1Mi0yNy42NDggNjEuOTUyLTYxLjk1MmMwLTQuMDk2LS41MTItOC4xOTItMS4wMjQtMTEuNzc2LTIuNTYtMTQuODQ4IDYuNjU2LTI4LjY3MiAyMS41MDQtMzEuNzQ0IDE0Ljg0OC0yLjU2IDI4LjY3MiA2LjY1NiAzMS43NDQgMjEuNTA0IDEuNTM2IDcuMTY4IDIuMDQ4IDE0LjMzNiAyLjA0OCAyMi4wMTYtLjUxMiA2My40ODgtNTIuMjI0IDExNS43MTItMTE2LjIyNCAxMTUuNzEyeiIgZmlsbD0iIzMzMyIvPjxwYXRoIGQ9Ik02MDIuMDggNzYwLjI5NmMtNjQgMC0xMTUuNzEyLTUyLjIyNC0xMTUuNzEyLTExNS43MTIgMC0xNC44NDggMTIuMjg4LTI3LjEzNiAyNy4xMzYtMjcuMTM2czI3LjEzNiAxMi4yODggMjcuMTM2IDI3LjEzNmMwIDM0LjMwNCAyNy42NDggNjEuOTUyIDYxLjk1MiA2MS45NTJzNjEuOTUyLTI3LjY0OCA2MS45NTItNjEuOTUyYzAtMTUuMzYtNS42MzItMzAuMjA4LTE1Ljg3Mi00MS40NzItOS43MjgtMTEuMjY0LTkuMjE2LTI4LjE2IDIuMDQ4LTM3Ljg4OCAxMS4yNjQtOS43MjggMjguMTYtOS4yMTYgMzcuODg4IDIuMDQ4IDE5LjQ1NiAyMS41MDQgMjkuNjk2IDQ4LjY0IDI5LjY5NiA3Ny44MjQgMCA2Mi45NzYtNTIuMjI0IDExNS4yLTExNi4yMjQgMTE1LjJ6IiBmaWxsPSIjMzMzIi8+PGVsbGlwc2Ugcnk9IjU4IiByeD0iMTI1IiBjeT0iNTA2LjI4NCIgY3g9IjIwMS4xODMiIGZpbGw9IiNmYWYiLz48ZWxsaXBzZSByeT0iNTgiIHJ4PSIxMjUiIGN5PSI1MDYuMjg0IiBjeD0iODIzLjE4MyIgZmlsbD0iI2ZhZiIvPjwvc3ZnPg=="; const noImgBase64 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDI5LjAxMzMzMyA2NDBBMzIgMzIgMCAwIDEgMzg0IDU5NC45ODY2NjdsMzcuNzYtMzcuNzYtMjIuODI2NjY3LTIyLjYxMzMzNC0xMzUuNjggMTM1LjY4IDkwLjQ1MzMzNCA5MC40NTMzMzQgMTM1LjY4LTEzNS42OC0yMi42MTMzMzQtMjIuNjEzMzM0ek01MzQuNjEzMzMzIDM5OC45MzMzMzNsMjIuNjEzMzM0IDIyLjYxMzMzNEw1OTQuOTg2NjY3IDM4NEEzMiAzMiAwIDAgMSA2NDAgNDI5LjAxMzMzM2wtMzcuNzYgMzcuNzYgMjIuNjEzMzMzIDIyLjYxMzMzNCAxMzUuNjgtMTM1LjY4LTkwLjQ1MzMzMy05MC40NTMzMzR6IiBmaWxsPSIjNUU1QzVDIj48L3BhdGg+PHBhdGggZD0iTTUxMiAyMS4zMzMzMzNhNDkwLjY2NjY2NyA0OTAuNjY2NjY3IDAgMSAwIDQ5MC42NjY2NjcgNDkwLjY2NjY2N0E0OTAuNjY2NjY3IDQ5MC42NjY2NjcgMCAwIDAgNTEyIDIxLjMzMzMzM3ogbTMxNi44IDM1NC45ODY2NjdsLTE4MS4xMiAxODEuMTJhMzIgMzIgMCAwIDEtNDUuMjI2NjY3IDBMNTU3LjIyNjY2NyA1MTIgNTEyIDU1Ny4yMjY2NjdsNDUuMjI2NjY3IDQ1LjIyNjY2NmEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N2wtMTgxLjEyIDE4MS4xMmEzMiAzMiAwIDAgMS00NS4yMjY2NjcgMGwtMTM1LjY4LTEzNS42OGEzMiAzMiAwIDAgMSAwLTQ1LjIyNjY2N2wxODEuMTItMTgxLjEyYTMyIDMyIDAgMCAxIDQ1LjIyNjY2NyAwTDQ2Ni43NzMzMzMgNTEyIDUxMiA0NjYuNzczMzMzbC00NS4yMjY2NjctNDUuMjI2NjY2YTMyIDMyIDAgMCAxIDAtNDUuMjI2NjY3bDE4MS4xMi0xODEuMTJhMzIgMzIgMCAwIDEgNDUuMjI2NjY3IDBsMTM1LjY4IDEzNS42OGEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N3oiIGZpbGw9IiM1RTVDNUMiPjwvcGF0aD4KPC9zdmc+"; const closePath = ''; + const wordParam = "%s[lurest]?\\b"; + const wordParamReg = new RegExp(wordParam); var targetElement, cssText, mainStyleEle; var inMinMode = false; @@ -3411,7 +3413,7 @@ this.finalSearch.value = finalValue; }; if (!this.customInputFrame) { - this.customInputCssText = ` + let customInputCssText = ` .customInputFrame-body { width: 300px; min-height: 200px; @@ -3606,7 +3608,7 @@ } } `; - this.customInputCssEle = _GM_addStyle(this.customInputCssText); + let customInputCssEle = _GM_addStyle(customInputCssText); let customInputFrame = document.createElement("div"); this.customInputFrame = customInputFrame; customInputFrame.innerHTML = createHTML(` @@ -3624,6 +3626,7 @@
`); + customInputFrame.appendChild(customInputCssEle); let cancelBtn = customInputFrame.querySelector("#cancel"); cancelBtn.addEventListener("click", e => { if (customInputFrame.parentNode) { @@ -3750,7 +3753,6 @@ } this.finalSearch.dataset.url = tempUrl; this.finalSearch.value = tempUrl.replace(/◎/g, ''); - if (!this.customInputCssEle || !this.customInputCssEle.parentNode) this.customInputCssEle = _GM_addStyle(this.customInputCssText); this.addToShadow(this.customInputFrame); let frameBody = this.customInputFrame.children[0]; frameBody.style.marginTop = -frameBody.offsetHeight / 2 + "px"; @@ -5839,7 +5841,7 @@ this.bar.style.visibility = ""; this.bar.style.display = "none"; this.searchInPageRule(); - if (currentSite && /%s[lurest]?\b/.test(currentSite.url)) { + if (currentSite && wordParamReg.test(currentSite.url)) { this.inSearchEngine(); } else if (searchData.prefConfig.alwaysShow) { this.bar.style.display = ""; @@ -6155,7 +6157,7 @@ if (disableHighlight && disableHighlight != location.hostname && window.top == window.self) { storage.setItem("disableHighlight", ""); } - let foundKeyword = currentSite && /%s[lurest]?\b/.test(currentSite.url); + let foundKeyword = currentSite && wordParamReg.test(currentSite.url); if (!hasCurrent && foundKeyword) { this.inSearchEngine(); } else if (!foundKeyword && window.top == window.self) { @@ -6584,7 +6586,7 @@ currentSite = data; siteEle.classList.add('current'); localKeywords = ""; - if (!/#p{|^(showTips|find)/.test(data.url) && /%s[lurest]?\b/.test(data.url)) { + if (!/#p{|^(showTips|find)/.test(data.url) && wordParamReg.test(data.url)) { this.updateCacheKeywords(); storage.setItem("referrer", location.hostname); } @@ -6651,7 +6653,7 @@ } } } - if (currentSite && /%s[lurest]?\b/.test(currentSite.url) && (!/#p{/.test(currentSite.url) || currentSite.keywords) && !searchData.prefConfig.hideOnSearchEngine) { + if (currentSite && wordParamReg.test(currentSite.url) && (!/#p{/.test(currentSite.url) || currentSite.keywords) && !searchData.prefConfig.hideOnSearchEngine) { if (this.currentType.classList.contains("search-jumper-targetAll") || this.currentType.classList.contains("search-jumper-targetImg") || this.currentType.classList.contains("search-jumper-targetAudio") || @@ -6751,6 +6753,7 @@ let toFirst = !init && searchData.prefConfig.historyInsertFirst; for (let i = 0; i < this.historySiteBtns.length; i++) { let btn = this.historySiteBtns[i]; + if (btn.style.display == "none") continue; let siteImg = btn.querySelector('img'); if (siteImg && siteImg.dataset.src) { siteImg.src = siteImg.dataset.src; @@ -7311,7 +7314,7 @@ let keyWords = getKeywords(); siteEles.forEach((se, i) => { let data = sites[i]; - if (data.match && data.hideNotMatch) { + /*if (data.match && data.hideNotMatch) { if (new RegExp(data.match).test(href)) { se.style.display = ''; if (ele.children.length > 1) ele.insertBefore(se, ele.children[1]); @@ -7321,9 +7324,11 @@ ele.insertBefore(se, self.searchJumperExpand); } else ele.appendChild(se); } - } - if (keyWords && data.kwFilter) { - if (new RegExp(data.kwFilter).test(keyWords)) { + }*/ + let hasWordParam = wordParamReg.test(data.url); + let checkKw = hasWordParam ? keyWords : href; + if (checkKw && data.kwFilter) { + if (new RegExp(data.kwFilter).test(checkKw)) { se.style.display = ''; if (ele.children.length > 1) ele.insertBefore(se, ele.children[1]); } else { @@ -7998,7 +8003,7 @@ let getUrl = async (_keyWords) => { self.customInput = false; inputString = ""; - let hasWordParam = /%s[lurest]?\b/.test(data.url); + let hasWordParam = wordParamReg.test(data.url); let keywords = _keyWords || self.searchJumperInputKeyWords.value || getSelectStr(); if (!keywords && !draging && !self.bar.classList.contains("search-jumper-isTargetLink")) { keywords = getKeywords(); @@ -8555,7 +8560,7 @@ } if (searchData.prefConfig.multiline == 1 || searchData.prefConfig.multiline == 2) { if (inputString && - /%s[lurest]?\b/.test(ele.dataset.url) && + wordParamReg.test(ele.dataset.url) && inputString.indexOf("\n") !== -1) { if (searchData.prefConfig.multiline == 1 || confirm(i18n("multiline"))) { @@ -10188,15 +10193,15 @@ keywords = ''; } } - } else if (isUtf8 && /%s[lurest]?\b/.test(currentSite.url) && !/[#:%]p{/.test(currentSite.url)) { + } else if (isUtf8 && wordParamReg.test(currentSite.url) && !/[#:%]p{/.test(currentSite.url)) { if (location.href.indexOf("?") != -1) { - keywordsMatch = currentSite.url.match(/[\?&]([^&]*?)=%s[lurest]?\b.*/); + keywordsMatch = currentSite.url.match(new RegExp(`[\\?&]([^&]*?)=${wordParam}.*`)); if (keywordsMatch) { keywords = new URLSearchParams(location.search).get(keywordsMatch[1]); } } if (!keywords) { - keywordsMatch = currentSite.url.match(/https?:\/\/[^\/]*\/(.*)%s[lurest]?\b/); + keywordsMatch = currentSite.url.match(new RegExp(`https?://[^/]*/(.*)${wordParam}`)); if (keywordsMatch) { keywordsMatch = location.href.match(new RegExp((keywordsMatch[1] || (location.host.replace(/\./g, "\\.") + "/")) + "(.*?)(\/|$)")); if (keywordsMatch) { @@ -10764,6 +10769,7 @@ } }) getBody(document).addEventListener("click", e => { + targetElement = e.target; if (currentSite && e.target) { if (e.target.nodeName && e.target.nodeName.toLowerCase && e.target.nodeName.toLowerCase() == 'a') { searchBar.updateCacheKeywords(); From 939304106882d29a1a8d2a3bf6b07d9c7a05462d Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 19:09:06 +0800 Subject: [PATCH 385/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 92dd4f77ab8..05bd28ee5e2 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -11317,6 +11317,7 @@ color: #6e7070; transition: all 0.25s ease; border: 0; + font-size: initial; } .searchJumperFrame-title { background: #458bd1!important; @@ -12054,6 +12055,7 @@ color: #6e7070; transition:all 0.25s ease; border: 0; + font-size: initial; } .searchJumperFrame-title { background: #458bd1!important; From be1d14672697294a1702c7d92830b2462cc272eb Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 19:25:28 +0800 Subject: [PATCH 386/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 05bd28ee5e2..2cf1337cd0e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1644,7 +1644,8 @@ opacity: 0.6; transition:opacity 0.25s ease; } - .in-input.in-find>.search-jumper-input:hover { + .in-input.in-find>.search-jumper-input:hover, + .in-input.in-find>.search-jumper-input.active { opacity: 1; } .funcKeyCall>.search-jumper-searchBar { @@ -5569,6 +5570,12 @@ } } }, true); + this.searchJumperInPageInput.addEventListener("focus", e => { + this.searchInputDiv.classList.add("active"); + }); + this.searchJumperInPageInput.addEventListener("blur", e => { + this.searchInputDiv.classList.remove("active"); + }); this.searchJumperInPageInput.addEventListener("keydown", e => { e.stopPropagation(); switch(e.keyCode) { From 5d1ea8775c1b52752376611d4a194cfea7a884ef Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 22 Nov 2023 20:39:36 +0800 Subject: [PATCH 387/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 2cf1337cd0e..d8df2f809f9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1991,6 +1991,7 @@ .search-jumper-searchBar.search-jumper-isTargetAudio:hover>.search-jumper-type.search-jumper-targetAudio, .search-jumper-searchBar.search-jumper-isTargetVideo:hover>.search-jumper-type.search-jumper-targetVideo, .search-jumper-searchBar.search-jumper-isTargetLink:hover>.search-jumper-type.search-jumper-targetLink, + .search-jumper-searchBar.search-jumper-isTargetPage:hover>.search-jumper-type.search-jumper-targetPage, .search-jumper-searchBar.search-jumper-isTargetPage:hover>.search-jumper-type { display: inline-flex; } @@ -7427,12 +7428,14 @@ ele.appendChild(siteEle); siteEles.push(siteEle); if (!site.nobatch) batchSiteNames.push(site.name); - if (!currentSite && (siteEle.dataset.current || match) && !ele.classList.contains("notmatch")) { + if (!isCurrent && !currentSite && (siteEle.dataset.current || match) && !ele.classList.contains("notmatch")) { isCurrent = true; - if (!searchData.prefConfig.showCurrent) { - siteEle.style.display = 'none'; + if (siteEle.dataset.current) { + if (!searchData.prefConfig.showCurrent) { + siteEle.style.display = 'none'; + } + self.setCurrentSite(site, siteEle); } - self.setCurrentSite(site, siteEle); self.currentType = ele; } } From 9ae0e388eae7a40d8027a614510b25eeaaa5fc01 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 08:41:41 +0800 Subject: [PATCH 388/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index ae9d6656ecd..6c41efebe43 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.94 +// @version 1.9.36.95 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -7079,7 +7079,7 @@ pageText.innerHTML = createHTML(pageText.innerHTML + i18n("page")); pageNum = document.createElement("span"); let num = ruleParser.getPageNumFromUrl(url, curPage); - pageNum.innerHTML = createHTML(num); + pageNum.innerHTML = createHTML(num + " "); pageNum.className = "pagetual_pageNum"; pageNum.title = i18n("inputPageNum"); pageNum.style.cssText = pageTextStyle; @@ -7104,7 +7104,7 @@ }); pageBar.appendChild(pageNum); } else { - pageText.innerHTML = createHTML(pageText.innerHTML + i18n("page") + curPage); + pageText.innerHTML = createHTML(pageText.innerHTML + i18n("page") + curPage + " "); } let preBtn = document.createElement("span"); preBtn.innerHTML = createHTML("∧"); @@ -7572,13 +7572,16 @@ function emuPage(callback) { let orgPage = null, preContent = null, iframeDoc, checkTimes = 0, loadmoreBtn, pageEle, nextLink, loadmoreEnd = false, waitTimes = 80, changed = false; function returnFalse(log) { - if (curPage > 1 && rulesData.lastPageTips) showTips(i18n("lastPage"), "", 800); + if (curPage > 1) { + if (rulesData.lastPageTips) showTips(i18n("lastPage"), "", 800); + } else { + sideController.remove(); + } debug(log); isPause = true; callback(false, false); if (emuIframe && emuIframe.parentNode) { emuIframe.parentNode.removeChild(emuIframe); - sideController.remove(); emuIframe = null; } } From c20ec6c5f15da52bebccf606ad756331d19135e1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 08:42:00 +0800 Subject: [PATCH 389/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index efbab07d1da..3432491911d 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.94](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.95](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From b49047731940cce38ff992350eca95478a79e1aa Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 23 Nov 2023 01:54:05 +0000 Subject: [PATCH 390/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 35df34a71db..5ff590949d3 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -46259,7 +46259,7 @@ "data": { "pageElement": "//div[@data-module-name]/div[@class='dealRow'] |\r\n//div[@data-module-name]/div[@class='resultRow'] |\r\n//ul[contains(@class,'frontpageGrid')] |\r\n//ul[@class='categoryPageDealGrid'] |\r\n//section[@class='commentsSection']/div[@class='commentsSectionComment']", "comment": "2023 Update: This item now works for all parts of the Slickdeals website, including the Front Page, Deal Pages, Search, and Comments. Note that this item hasn't been updated in nearly 7 years and was no longer working, so the \"bookmarklet\" and \"Stylish\" keys were removed as a precaution (they can be re-added with their new correct values if needed).", - "nextLink": "//div[@class='paginationPages']/span/following-sibling::a |\r\n//div[contains(@class,'slickdealsPagination')]/span[@class='slickdealsPagination__pageNumber']/following-sibling::a |\r\n//div[contains(@class,'pagination')]/a[last()]", + "nextLink": "//div[contains(@class,'pagination')]/a[contains(.,'Next')] |\r\n//div[@class='paginationPages']/span/following-sibling::a |\r\n//div[contains(@class,'slickdealsPagination')]/span[@class='slickdealsPagination__pageNumber']/following-sibling::a", "url": "^https://(?:[^.]+\\.)?slickdeals\\.net/", "exampleUrl": "https://slickdeals.net/\r\nhttps://slickdeals.net/deals/home/\r\nhttps://slickdeals.net/newsearch.php?q=infinity\r\nhttps://slickdeals.net/f/17077657-pokemon-trading-card-game-scarlet-violet-151-ultra-premium-collection-96-free-shipping" }, @@ -46267,7 +46267,7 @@ "created_by": "mark", "name": "Slickdeals", "created_at": "2009-06-22T07:57:28+09:00", - "updated_at": "2023-11-21T12:14:53+09:00" + "updated_at": "2023-11-22T12:12:29+09:00" }, { "resource_url": "http://wedata.net/items/29155", From c28d8a4be54b226ab64fc3060f349f6694caf81b Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 12:50:15 +0800 Subject: [PATCH 391/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 143 +++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 43 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index d8df2f809f9..cc8003e71b5 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.33 +// @version 1.7.34 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2939,6 +2939,7 @@ let searchBarCon = document.createElement("div"); searchBarCon.id = "search-jumper"; + searchBarCon.style.display = "none"; searchBarCon.className = "search-jumper-searchBarCon"; searchBarCon.appendChild(bar); searchBarCon.setAttribute("translate", "no"); @@ -3225,19 +3226,20 @@ let reCase = ""; let titleReg = /\$t{(.*?)}($|\$)/; let titleMatch = word.match(titleReg); + let showTips = 0; if (titleMatch) { title = titleMatch[1]; word = word.replace(titleReg, "$2"); - switch(title) { - case "$popup": + if (title == "\\$popup") title = "$popup"; + else { + let popupMatch = title.match(/^\$popup(\((.*)\))?$/); + if (popupMatch) { title = ""; popup = true; - break; - case "\\$popup": - title = "$popup"; - break; - default: - break; + if (popupMatch[1]) { + showTips = popupMatch[2] || 1; + } + } } } let hideParentReg = /\$p{(.*?)}($|\$)/; @@ -3283,7 +3285,7 @@ link = reMatch[2].indexOf("l") != -1; } if (!showWords) showWords = word; - result.push({content: word, showWords: showWords, isRe: isRe, link: link, reCase: reCase, title: title, style: style, oriWord: oriWord, hideParent: hideParent, inRange: inRange, popup: popup, init: init}); + result.push({content: word, showWords: showWords, isRe: isRe, link: link, reCase: reCase, title: title, style: style, oriWord: oriWord, hideParent: hideParent, inRange: inRange, popup: popup, showTips: showTips, init: init}); self.curWordIndex++; }); } else { @@ -3397,6 +3399,7 @@ }); if (this.searchInPageLockWords.scrollTop <= 0) this.searchInPageLockWords.scrollTop = this.searchInPageLockWords.scrollHeight; this.searchJumperInPageInput.style.paddingLeft = this.searchInPageLockWords.clientWidth + 3 + "px"; + if (this.navMarks.innerHTML && this.con.style.display === "none") this.con.style.display = ""; return wordSpans; } @@ -3931,7 +3934,7 @@
${i18n("wordStyle")}
${i18n("wordTitle")}
- +
@@ -4032,7 +4035,14 @@ wordLink.checked = !!word.link; if (typeof word.hideParent !== 'undefined') wordHide.value = word.hideParent; try { - wordTitle.value = word.title !== word.showWords ? JSON.parse('"' + word.title + '"') : ""; + if (word.popup) { + wordTitle.value = "$popup"; + if (word.showTips) { + wordTitle.value = `$popup(${word.showTips})`; + } + } else { + wordTitle.value = word.title !== word.showWords ? JSON.parse('"' + word.title + '"') : ""; + } } catch (e) { debug(e); } @@ -4435,18 +4445,35 @@ return result; } + highlightPopup(spannode, word) { + let self = this; + spannode.addEventListener("mouseenter", e => { + if (targetElement != spannode || !searchBar.funcKeyCall) { + targetElement = spannode; + let targetShowTipsSite; + if (word.showTips) { + let firstType = self.autoGetFirstType(); + let targetSites = firstType.querySelectorAll('a.search-jumper-btn[data-show-tips]:not(.notmatch)'); + let index = parseInt(word.showTips) - 1; + targetShowTipsSite = targetSites[index]; + } + self.setFuncKeyCall(true); + if (targetShowTipsSite) { + targetShowTipsSite.dispatchEvent(new CustomEvent('showTips')); + } else { + self.showInPage(true, e); + } + } + }); + } + createHighlightMark(word, index, curList) { let self = this; let spannode = document.createElement("mark"); spannode.className = "searchJumper"; if (word.title) spannode.title = JSON.parse('"' + word.title + '"'); if (word.popup) { - spannode.addEventListener("mouseenter", e => { - if (targetElement != spannode || !searchBar.funcKeyCall) { - targetElement = spannode; - searchBar.showInPage(true, e); - } - }); + this.highlightPopup(spannode, word); } spannode.style.cssText = word.style; spannode.addEventListener("click", e => { @@ -4800,12 +4827,7 @@ node.classList.add("searchJumper"); if (word.title) node.title = JSON.parse('"' + word.title + '"'); if (word.popup) { - node.addEventListener("mouseenter", e => { - if (targetElement != node || !searchBar.funcKeyCall) { - targetElement = node; - searchBar.showInPage(true, e); - } - }); + self.highlightPopup(node, word); } if (!node.dataset.css) node.dataset.css = node.style.cssText; if (word.style) { @@ -5478,6 +5500,20 @@ break; } if (!firstType) firstType = this.bar.querySelector('.search-jumper-targetAll:not(.notmatch)') || this.bar.querySelector('.search-jumper-type'); + if (firstType) { + this.setFuncKeyCall(false); + let mouseEvent = new PointerEvent("mousedown"); + if (firstType.parentNode.classList.contains('search-jumper-open')) { + if (firstType.onmousedown) firstType.onmousedown(); + else { + firstType.dispatchEvent(mouseEvent); + } + } + if (firstType.onmousedown) firstType.onmousedown(); + else { + firstType.dispatchEvent(mouseEvent); + } + } return firstType; } @@ -6238,7 +6274,7 @@ } } - setInPageWords(inPageWords) { + setInPageWords(inPageWords, cb) { this.initInPageWords.push(inPageWords); this.searchInPageTab.checked = true; this.con.classList.add("in-find"); @@ -6255,15 +6291,15 @@ word = this.initInPageWords.shift(); } } + if (cb) cb(); }, 600); }; if (document.readyState != "complete") { let loadHandler = e => { - if (document.readyState != "complete") return; - document.removeEventListener("readystatechange", loadHandler); + window.removeEventListener('load', loadHandler); beginHandler(); }; - document.addEventListener("readystatechange", loadHandler); + window.addEventListener('load', loadHandler); } else { beginHandler(); } @@ -6315,7 +6351,10 @@ inPageWords = inPageWords || globalInPageWords; if (inPageWords) { this.appendBar(); - this.setInPageWords(inPageWords); + let self = this; + this.setInPageWords(inPageWords, () => { + if (!self.navMarks.innerHTML && self.bar.style.display === "none") self.removeBar(); + }); } else if (!this.searchJumperInPageInput.value && curRef.indexOf(referrer) != -1 && cacheKeywords) { inPageWords = cacheKeywords; this.wordModeBtn.classList.add("checked"); @@ -7025,8 +7064,8 @@ //if (this.preList) { //this.preList.style.visibility = "hidden"; //} - let ew = clingEle.clientWidth; - let eh = clingEle.clientHeight; + let ew = clingEle.clientWidth || clingEle.offsetWidth; + let eh = clingEle.clientHeight || clingEle.offsetHeight; let clientX = clingEle.offsetLeft + ew / 2 - this.con.scrollLeft; let clientY = clingEle.offsetTop + eh / 2 - this.con.scrollTop - clingEle.parentNode.scrollTop; let current = clingEle.offsetParent; @@ -8794,14 +8833,14 @@ if (data.shortcut) { tipsStr += ` (${data.ctrl ? "Ctrl + " : ""}${data.shift ? "Shift + " : ""}${data.alt ? "Alt + " : ""}${data.meta ? "Meta + " : ""}${data.shortcut.replace("Key", "")})`; } - ele.addEventListener('mouseenter', async e => { + let showTipsHandler = async target => { tipsData = null; clearTimeout(self.requestShowTipsTimer); - self.tipsPos(ele, tipsStr); + self.tipsPos(target, tipsStr); if (showTips) { self.requestShowTipsTimer = setTimeout(async() => { let url = await getUrl(); - self.tipsPos(ele, ele.dataset.name + "
Loading..."); + self.tipsPos(target, ele.dataset.name + "
Loading..."); if (url) { try { url = url.replace(/^showTips:/, ''); @@ -8815,12 +8854,18 @@ if (tipsResult != "null" && tipsResult != "No result") { tipsResult = `
${tipsResult}
`; } - self.tipsPos(ele, tipsResult); + self.tipsPos(target, tipsResult); } } catch(e) {debug(e)} } }, 300); } + } + ele.addEventListener('mouseenter', e => { + showTipsHandler(ele); + }, false); + ele.addEventListener('showTips', e => { + showTipsHandler(targetElement); }, false); ele.addEventListener('mouseleave', e => { self.tips.style.opacity = 0; @@ -10777,17 +10822,29 @@ if (document.fullscreenElement) { searchBar.bar.style.display = 'none'; } - }) - getBody(document).addEventListener("click", e => { - targetElement = e.target; - if (currentSite && e.target) { - if (e.target.nodeName && e.target.nodeName.toLowerCase && e.target.nodeName.toLowerCase() == 'a') { - searchBar.updateCacheKeywords(); - } else if (e.target.parentNode && e.target.parentNode.nodeName && e.target.parentNode.nodeName.toLowerCase && e.target.parentNode.nodeName.toLowerCase() == 'a') { + }); + let waitForClick = false; + let clickAHandler = e => { + if (waitForClick) return; + waitForClick = true; + setTimeout(() => { + waitForClick = false; + }, 300); + let _t = e.target; + targetElement = _t; + if (currentSite && _t) { + if (_t.nodeName && _t.nodeName.toLowerCase && _t.nodeName.toLowerCase() == 'a') { searchBar.updateCacheKeywords(); + } else { + let _tp = _t.parentNode; + if (_tp && _tp.nodeName && _tp.nodeName.toLowerCase && _tp.nodeName.toLowerCase() == 'a') { + searchBar.updateCacheKeywords(); + } } } - }, true); + }; + getBody(document).addEventListener("auxclick", clickAHandler, true); + getBody(document).addEventListener("click", clickAHandler, true); let href = location.href; let _wr = function(type) { var orig = history[type]; From 95468daf56cbe48faab80ac1376bb8572de913e4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 13:27:57 +0800 Subject: [PATCH 392/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index cc8003e71b5..da315f2ebec 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -6296,9 +6296,13 @@ }; if (document.readyState != "complete") { let loadHandler = e => { - window.removeEventListener('load', loadHandler); - beginHandler(); + if (document.readyState == "complete") { + document.removeEventListener("readystatechange", loadHandler); + window.removeEventListener('load', loadHandler); + beginHandler(); + } }; + document.addEventListener("readystatechange", loadHandler); window.addEventListener('load', loadHandler); } else { beginHandler(); @@ -7162,6 +7166,11 @@ this.tips.innerHTML = createHTML(type); this.tips.style.opacity = 1; this.clingPos(ele, this.tips); + if (this.tips.style.transition) { + setTimeout(() => { + this.tips.style.transition = ""; + }, 1); + } } async createType(data) { @@ -8854,6 +8863,7 @@ if (tipsResult != "null" && tipsResult != "No result") { tipsResult = `
${tipsResult}
`; } + self.tips.style.transition = "none"; self.tipsPos(target, tipsResult); } } catch(e) {debug(e)} From 5cbc1a1331572b018eadb3d6a0cbccf28a16b3f0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 13:33:18 +0800 Subject: [PATCH 393/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index da315f2ebec..f0170a1707b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2215,6 +2215,7 @@ word-break: break-all; text-align: center; box-sizing: content-box; + overflow: hidden; } .search-jumper-tips * { max-width: 640px; From f67dc99edb9e70839d83f5bb43aff97500f41a28 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 13:56:09 +0800 Subject: [PATCH 394/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f0170a1707b..e053813aa18 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -6228,6 +6228,7 @@ //self.bar.classList.remove("search-jumper-isTargetPage"); self.bar.classList.remove("initShow"); self.tips.style.opacity = 0; + self.tips.style.display = "none"; //self.recoveHistory(); if (self.funcKeyCall) { self.setFuncKeyCall(false); @@ -7165,6 +7166,7 @@ tipsPos(ele, type) { this.tips.innerHTML = createHTML(type); + this.tips.style.display = ""; this.tips.style.opacity = 1; this.clingPos(ele, this.tips); if (this.tips.style.transition) { From cb747970bfbb4bc288bab6f39e3b51d3432dd633 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 14:18:20 +0800 Subject: [PATCH 395/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e053813aa18..efd02bf5f63 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -5768,6 +5768,9 @@ this.searchJumperInPageInput.focus(); this.setNav(false, true); storage.setItem("disableHighlight", location.hostname); + if (this.bar.style.display === "none") { + this.removeBar(); + } } else { this.setNav(false); } From c8535db7f6303d3012704fba68ceba310d7a57e1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 16:08:41 +0800 Subject: [PATCH 396/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index efd02bf5f63..21e6d4e1137 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.34 +// @version 1.7.35 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -5504,15 +5504,15 @@ if (firstType) { this.setFuncKeyCall(false); let mouseEvent = new PointerEvent("mousedown"); - if (firstType.parentNode.classList.contains('search-jumper-open')) { - if (firstType.onmousedown) firstType.onmousedown(); + if (firstType.classList.contains('search-jumper-open')) { + if (firstType.children[0].onmousedown) firstType.children[0].onmousedown(); else { - firstType.dispatchEvent(mouseEvent); + firstType.children[0].dispatchEvent(mouseEvent); } } - if (firstType.onmousedown) firstType.onmousedown(); + if (firstType.children[0].onmousedown) firstType.children[0].onmousedown(); else { - firstType.dispatchEvent(mouseEvent); + firstType.children[0].dispatchEvent(mouseEvent); } } return firstType; From 9f001fcb49381fde328c981ad1ef35477c334512 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 16:26:08 +0800 Subject: [PATCH 397/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 21e6d4e1137..91980df130f 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2743,7 +2743,7 @@ height: 0.5vh; width: 100%; position: absolute; - border: 1px solid #999999; + border: 1px solid #cccccc; min-height: 5px; box-sizing: border-box; left: 0; @@ -8855,6 +8855,7 @@ if (showTips) { self.requestShowTipsTimer = setTimeout(async() => { let url = await getUrl(); + targetElement = null; self.tipsPos(target, ele.dataset.name + "
Loading..."); if (url) { try { From 169642ea93d9e2aa963b3d1c61ec98eed39bc4e1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 17:42:38 +0800 Subject: [PATCH 398/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 62 +++++++++++++++++++------------ 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 91980df130f..a9ebf0d9c49 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.35 +// @version 1.7.36 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -8848,34 +8848,50 @@ if (data.shortcut) { tipsStr += ` (${data.ctrl ? "Ctrl + " : ""}${data.shift ? "Shift + " : ""}${data.alt ? "Alt + " : ""}${data.meta ? "Meta + " : ""}${data.shortcut.replace("Key", "")})`; } + let lastUrl, anylizing = false; + let setTips = async (target, url, again) => { + self.tipsPos(target, ele.dataset.name + "
Loading..."); + if (url) { + try { + url = url.replace(/^showTips:/, ''); + anylizing = true; + let tipsResult = await self.anylizeShowTips(url, ele.dataset.name); + anylizing = false; + if (self.tips.style.opacity == 0 || self.tips.innerHTML.indexOf(ele.dataset.name) !== 0) return; + if (Array && Array.isArray && Array.isArray(tipsResult)) { + tipsData = tipsResult[1]; + tipsResult = tipsResult[0]; + } + if (tipsResult) { + if (tipsResult != "null" && tipsResult != "No result") { + tipsResult = `
${tipsResult}
`; + } + self.tips.style.transition = "none"; + self.tipsPos(target, tipsResult); + } + } catch(e) {debug(e)} + } + }; let showTipsHandler = async target => { tipsData = null; clearTimeout(self.requestShowTipsTimer); self.tipsPos(target, tipsStr); if (showTips) { - self.requestShowTipsTimer = setTimeout(async() => { - let url = await getUrl(); - targetElement = null; - self.tipsPos(target, ele.dataset.name + "
Loading..."); - if (url) { - try { - url = url.replace(/^showTips:/, ''); - let tipsResult = await self.anylizeShowTips(url, ele.dataset.name); - if (self.tips.style.opacity == 0 || self.tips.innerHTML.indexOf(ele.dataset.name) !== 0) return; - if (Array && Array.isArray && Array.isArray(tipsResult)) { - tipsData = tipsResult[1]; - tipsResult = tipsResult[0]; - } - if (tipsResult) { - if (tipsResult != "null" && tipsResult != "No result") { - tipsResult = `
${tipsResult}
`; - } - self.tips.style.transition = "none"; - self.tipsPos(target, tipsResult); - } - } catch(e) {debug(e)} + let url = await getUrl(); + if (!url) return; + targetElement = null; + if (lastUrl === url) { + if (anylizing) { + self.tipsPos(target, ele.dataset.name + "
Loading..."); + } else { + setTips(target, url); } - }, 300); + } else { + self.requestShowTipsTimer = setTimeout(() => { + lastUrl = url; + setTips(target, url); + }, 300); + } } } ele.addEventListener('mouseenter', e => { From 93078cef18999261ef961ae844a14bfc8a83075f Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 17:55:40 +0800 Subject: [PATCH 399/812] Update README.md --- DownloadAllContent/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 5806d3e3578..7af7e867f89 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -174,6 +174,10 @@ function decode(t) { > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 19. [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + 20. [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) 簡單的分頁,沒啥難點。惟一需要注意的是,分頁鏈接藏在 js 代碼裏,用正則取出完事 +``` javascript +.chapter>li>a@@@@@@let content="\n";let checkContent=(doc,over)=>{word=doc.querySelector('.content-div');if(!word)content+='\n'+doc.body.innerText;else {let ps=[];[].forEach.call(word.children, p=>{if(p.className!='moreinfo')ps.push(p.innerText)});content+=ps.join('\n');}let next=doc.querySelector("#pt_next");if(next){fetch(location.href+ doc.body.innerHTML.match(/'([^\|']+)\|[^']+'\.split/)[1]+".html").then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content.replace(/\s*「如章节缺失请退#出#阅#读#模#式」\s*|\s*本章未完,点下一页继续阅读。>>>\s*/g,''))});return false; +``` ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html From fbcf79c9edac29e4c5852397ba3d43489c6f1747 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 18:20:47 +0800 Subject: [PATCH 400/812] Update README.md --- DownloadAllContent/README.md | 98 +++++++++++++++++++++++++++--------- 1 file changed, 74 insertions(+), 24 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 7af7e867f89..17e29c451f6 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -68,83 +68,128 @@ ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用 - 1. [📕po18](https://www.po18.tw/books/755779/articles),章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 `.l_chaptname>a@@articles@@articlescontent` 粘貼進命令菜單即可下載。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 ++ [📕po18](https://www.po18.tw/books/755779/articles) +> 章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 `.l_chaptname>a@@articles@@articlescontent` 粘貼進命令菜單即可下載。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 ``` css .l_chaptname>a @@ articles @@ articlescontent ``` - 如果需要下載已購買的vip章節,用這個規則 + > 如果需要下載已購買的vip章節,用這個規則 ``` javascript a.btn_L_blue>>let a=document.createElement("a");a.innerText=item.parentNode.parentNode.querySelector('.l_chaptname').innerText;a.href=item.href;return a;@@articles@@articlescontent ``` - 2. [📕pixiv](https://www.pixiv.net/novel/series/7807554),p站小說的章節選擇器為`main>section ul>li>div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta裡,需要自定義代碼提取meta-preload數據的content項。其中 "doc" 代表抓取網頁的document對象,若返回的是純文本,則用 `doc.body.innerText` 獲取。 + +--- ++ [📕pixiv](https://www.pixiv.net/novel/series/7807554) +> p站小說的章節選擇器為`main>section ul>li>div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta裡,需要自定義代碼提取meta-preload數據的content項。其中 "doc" 代表抓取網頁的document對象,若返回的是純文本,則用 `doc.body.innerText` 獲取。 ``` javascript main>section ul>li>div>a @@@@@@ var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content; ``` - 3. [📕紅薯中文網](https://g.hongshu.com/chapterlist/91735.do),這個站沒有目錄連結,此時可以遍歷標籤自己創建目錄連結下載 + +--- ++ [📕紅薯中文網](https://g.hongshu.com/chapterlist/91735.do) +> 這個站沒有目錄連結,此時可以遍歷標籤自己創建目錄連結下載 ``` javascript ul#lists>li>>let href=item.getAttribute("onclick").replace(/.*(http.*html).*/,"$1"),innerText=item.querySelector("span").innerText;return {href:href,innerText:innerText};@@@@@@let rdtext=data.querySelector('div.rdtext');let sc=data.querySelector('div.ewm+script');if(sc&&rdtext){let code=sc.innerText.replace(/for\(var i=0x0;i{let id=span.className.replace(/[^\d]/ig,"");span.innerText=words[id]}),rdtext.innerText}; ``` - 4. [📕yuyan](https://yuyan.pw/) + +--- ++ [📕yuyan](https://yuyan.pw/) ``` css https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector('body>script:nth-of-type(8)').innerHTML.match(/var chapter =(.*?);\\n/)[1];eval(c).replaceAll("
",""); ``` - 5. [📕翠微居](https://www.cuiwei.org/book/28975/yijiequanyuledashi_mulu.html) + +--- ++ [📕翠微居](https://www.cuiwei.org/book/28975/yijiequanyuledashi_mulu.html) ``` javascript .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` - 6. [📕知乎鹽選](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) + +--- ++ [📕知乎鹽選](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) ``` javascript [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://www.zhihu.com/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` - 7. [📕腐女屋](http://m.funvwu.com/) + +--- ++ [📕腐女屋](http://m.funvwu.com/) ``` javascript .chapterList>ul>li>a>>let href=item.href.replace(/.*goChapter\((\d+)\)/,"/noval/"+localStorage.booklist+"/$1.html");item.href=href;return item; ``` - 8. [📕若初文學網](https://www.ruochu.com/chapter/146456) + +--- ++ [📕若初文學網](https://www.ruochu.com/chapter/146456) ``` javascript ul.float-list>li>a@@www\\.ruochu\\.com/book/\d+/(\d+)@@a.ruochu.com/ajax/chapter/content/$1@@var content = data.body.innerText.match(/"htmlContent":"(.*)","status"/);if(!content)console.log(data.body.innerText);else{content=content[1];content.replace(/\\r/g,'\n')} ``` - 9. [📕明月中文網](https://www.56bok.com/list/27/27742.html) + +--- ++ [📕明月中文網](https://www.56bok.com/list/27/27742.html) ``` javascript ul.readlist>li>a>>let href=item.getAttribute("onclick").replace(/.\*open\\('(.\*)','.\*/,"$1");item.href=href;return item; ``` - 10. [📕東北人小説網](https://www.dbrxs.org/86/86323/) 此站有內分頁,故需要使用異步方法,抓取內容後暫不返回,待請求所有分頁內容再拼接後一起返回。 + +--- ++ [📕東北人小説網](https://www.dbrxs.org/86/86323/) +> 此站有內分頁,故需要使用異步方法,抓取內容後暫不返回,待請求所有分頁內容再拼接後一起返回。 ``` javascript .chapterList li>a>>item.href=item.href.replace(/.*gotochapter\('(\d+)','(\d+)','(\d+)'\).*/,"/$1/$2/$3.html");return item;@@@@@@let content=data.querySelector('#contentinfo,#ChapterView>div:nth-child(3)>div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*\((\d+),(\d+),(\d+),(\d+)\).*/,"/$1/$2/$3_$4.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('#contentinfo,#ChapterView>div:nth-child(3)>div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` - 11. [📕暢讀小説網](https://www.cdxsw.cc/53/53458/) 此站同樣有內分頁,不同之處在於它的內分頁需要加載後才能知道是否存在,故同樣異步返回,並且回調fetch直至分頁全部分析完 + +--- ++ [📕暢讀小説網](https://www.cdxsw.cc/53/53458/) +> 此站同樣有內分頁,不同之處在於它的內分頁需要加載後才能知道是否存在,故同樣異步返回,並且回調fetch直至分頁全部分析完 ``` javascript .section-list>li>a@@@@@@let content="";let checkContent=(doc,over)=>{word=doc.querySelector('.word_read');if(!word)content+='\n'+doc.body.innerText;else [].forEach.call(word.querySelectorAll('p,h3'),c=>content+='\n'+c.innerText);let next=doc.querySelector(".read_btn>a:nth-child(4)");if(next&&/_\d\.html/.test(next.href)){fetch(next.href).then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content)});return false; ``` - 12. [📕lofter](https://kuencar.lofter.com/view) 此站包含雜項博文,故需要手動抓取篩選並且排序後下載 + +--- ++ [📕lofter](https://kuencar.lofter.com/view) +> 此站包含雜項博文,故需要手動抓取篩選並且排序後下載 ``` javascript body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").forEach(a=>{if(a.children[0].innerText.indexOf(title)!=-1)chs.push(a)});return chs.reverse(); ``` - 13. [📕頂點小説網](https://m.biqugeu.net/booklist/20128662.html) 此站同11項 + +--- ++ [📕頂點小説網](https://m.biqugeu.net/booklist/20128662.html) +> 此站同11項 ``` javascript .book_last>dl>dd>a:not([style])@@@@@@let content="";let checkContent=(doc,over)=>{word=doc.querySelector('#chaptercontent');if(!word)content+='\n'+doc.body.innerText;else {word.innerHTML=word.innerHTML.replace(/
/g,'\n');content+='\n'+word.innerText;}let next=doc.querySelector("#pb_next");if(next&&/_\d\.html/.test(next.href)){fetch(next.href).then(r => r.arrayBuffer()).then(d => {let decoder = new TextDecoder("gbk");let text = decoder.decode(d);let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = text;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content)});return false; ``` - 14. [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。 + +--- ++ [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) +> 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。 ``` javascript #list-chapterAll>dd>a>>item.href=item.href.replace(/.*book('(\d+)','(\d+)').*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` - 15. [📕免費小説網](http://www.huazhuangsheying.com/book/3659/) 也是有分頁,fetch後簡單處理一下就ok。 + +--- ++ [📕免費小説網](http://www.huazhuangsheying.com/book/3659/) +> 也是有分頁,fetch後簡單處理一下就ok。 ``` javascript .section-box+h2+.section-box>.section-list>.book-item>a@@@@@@let content=data.querySelector('#content');if(!content)return data.body.innerText;if(content.children[0].tagName=='DIV')content.removeChild(content.children[0]);content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let nextpage=data.querySelector(a[href$="_2.html"]);if(nextpage){fetch(nextpage.href).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('#content');if(c){if(c.children[0].tagName=='DIV')c.removeChild(c.children[0]);c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content+=c.innerText;}cb(content);});return false;}return content; ``` - 16. [📕海棠文化](https://haitbook.com/?act=showinfo&bookwritercode=EB20160922203907769482&bookid=67166&pavilionid=a) token在頁面中,直接match拿到然後請求了事。 + +--- ++ [📕海棠文化](https://haitbook.com/?act=showinfo&bookwritercode=EB20160922203907769482&bookid=67166&pavilionid=a) +> token在頁面中,直接match拿到然後請求了事。 ``` javascript .uk-list>li>a@@@@@@let contentMatch=data.body.innerHTML.match(/url: '\/showpapercolor.php',[\s\S]*?paperid:\s*'(\w+)',\s*vercodechk:\s*'(\w+)'/);if(!contentMatch)return "";$.ajax({url: '/showpapercolor.php',type: 'POST',data: { paperid: `${contentMatch[1]}`, vercodechk: `${contentMatch[2]}`},error: function (xhr) {cb("");},success: function (colorresponse) {cb(colorresponse.replace(//,"").replace(/
/g,""))}});return false; ``` - 17. [📕樂文網](https://www.mylewen.com/book/183921/catalog/) 分兩段,前半明文,後半加密,調用頁面自身方法解密后拼接。 + +--- ++ [📕樂文網](https://www.mylewen.com/book/183921/catalog/) +> 分兩段,前半明文,後半加密,調用頁面自身方法解密后拼接。 ``` javascript .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` - 18. [📕豆瓣閲讀](https://read.douban.com/column/64079189/) + +--- ++ [📕豆瓣閲讀](https://read.douban.com/column/64079189/) ``` css a.chapter-item ``` - > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請不要來問我要現成規則。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: +> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請不要來問我要現成規則。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) @@ -171,10 +216,15 @@ function decode(t) { }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } ``` - > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 - 19. [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) - > 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 - 20. [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) 簡單的分頁,沒啥難點。惟一需要注意的是,分頁鏈接藏在 js 代碼裏,用正則取出完事 +> 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 + +--- ++ [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) +> 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + +--- ++ [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) +> 簡單的分頁,沒啥難點。惟一需要注意的是,分頁鏈接藏在 js 代碼裏,用正則取出完事 ``` javascript .chapter>li>a@@@@@@let content="\n";let checkContent=(doc,over)=>{word=doc.querySelector('.content-div');if(!word)content+='\n'+doc.body.innerText;else {let ps=[];[].forEach.call(word.children, p=>{if(p.className!='moreinfo')ps.push(p.innerText)});content+=ps.join('\n');}let next=doc.querySelector("#pt_next");if(next){fetch(location.href+ doc.body.innerHTML.match(/'([^\|']+)\|[^']+'\.split/)[1]+".html").then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content.replace(/\s*「如章节缺失请退#出#阅#读#模#式」\s*|\s*本章未完,点下一页继续阅读。>>>\s*/g,''))});return false; ``` From f0f59a5812a6b68b391f4ee140fed829887cdb91 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 18:26:14 +0800 Subject: [PATCH 401/812] Update README.md --- DownloadAllContent/README.md | 38 ------------------------------------ 1 file changed, 38 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 17e29c451f6..7a3d91835e0 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,114 +77,80 @@ ``` javascript a.btn_L_blue>>let a=document.createElement("a");a.innerText=item.parentNode.parentNode.querySelector('.l_chaptname').innerText;a.href=item.href;return a;@@articles@@articlescontent ``` - ---- + [📕pixiv](https://www.pixiv.net/novel/series/7807554) > p站小說的章節選擇器為`main>section ul>li>div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta裡,需要自定義代碼提取meta-preload數據的content項。其中 "doc" 代表抓取網頁的document對象,若返回的是純文本,則用 `doc.body.innerText` 獲取。 ``` javascript main>section ul>li>div>a @@@@@@ var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content; ``` - ---- + [📕紅薯中文網](https://g.hongshu.com/chapterlist/91735.do) > 這個站沒有目錄連結,此時可以遍歷標籤自己創建目錄連結下載 ``` javascript ul#lists>li>>let href=item.getAttribute("onclick").replace(/.*(http.*html).*/,"$1"),innerText=item.querySelector("span").innerText;return {href:href,innerText:innerText};@@@@@@let rdtext=data.querySelector('div.rdtext');let sc=data.querySelector('div.ewm+script');if(sc&&rdtext){let code=sc.innerText.replace(/for\(var i=0x0;i{let id=span.className.replace(/[^\d]/ig,"");span.innerText=words[id]}),rdtext.innerText}; ``` - ---- + [📕yuyan](https://yuyan.pw/) ``` css https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector('body>script:nth-of-type(8)').innerHTML.match(/var chapter =(.*?);\\n/)[1];eval(c).replaceAll("
",""); ``` - ---- + [📕翠微居](https://www.cuiwei.org/book/28975/yijiequanyuledashi_mulu.html) ``` javascript .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` - ---- + [📕知乎鹽選](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) ``` javascript [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://www.zhihu.com/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` - ---- + [📕腐女屋](http://m.funvwu.com/) ``` javascript .chapterList>ul>li>a>>let href=item.href.replace(/.*goChapter\((\d+)\)/,"/noval/"+localStorage.booklist+"/$1.html");item.href=href;return item; ``` - ---- + [📕若初文學網](https://www.ruochu.com/chapter/146456) ``` javascript ul.float-list>li>a@@www\\.ruochu\\.com/book/\d+/(\d+)@@a.ruochu.com/ajax/chapter/content/$1@@var content = data.body.innerText.match(/"htmlContent":"(.*)","status"/);if(!content)console.log(data.body.innerText);else{content=content[1];content.replace(/\\r/g,'\n')} ``` - ---- + [📕明月中文網](https://www.56bok.com/list/27/27742.html) ``` javascript ul.readlist>li>a>>let href=item.getAttribute("onclick").replace(/.\*open\\('(.\*)','.\*/,"$1");item.href=href;return item; ``` - ---- + [📕東北人小説網](https://www.dbrxs.org/86/86323/) > 此站有內分頁,故需要使用異步方法,抓取內容後暫不返回,待請求所有分頁內容再拼接後一起返回。 ``` javascript .chapterList li>a>>item.href=item.href.replace(/.*gotochapter\('(\d+)','(\d+)','(\d+)'\).*/,"/$1/$2/$3.html");return item;@@@@@@let content=data.querySelector('#contentinfo,#ChapterView>div:nth-child(3)>div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*\((\d+),(\d+),(\d+),(\d+)\).*/,"/$1/$2/$3_$4.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('#contentinfo,#ChapterView>div:nth-child(3)>div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` - ---- + [📕暢讀小説網](https://www.cdxsw.cc/53/53458/) > 此站同樣有內分頁,不同之處在於它的內分頁需要加載後才能知道是否存在,故同樣異步返回,並且回調fetch直至分頁全部分析完 ``` javascript .section-list>li>a@@@@@@let content="";let checkContent=(doc,over)=>{word=doc.querySelector('.word_read');if(!word)content+='\n'+doc.body.innerText;else [].forEach.call(word.querySelectorAll('p,h3'),c=>content+='\n'+c.innerText);let next=doc.querySelector(".read_btn>a:nth-child(4)");if(next&&/_\d\.html/.test(next.href)){fetch(next.href).then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content)});return false; ``` - ---- + [📕lofter](https://kuencar.lofter.com/view) > 此站包含雜項博文,故需要手動抓取篩選並且排序後下載 ``` javascript body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").forEach(a=>{if(a.children[0].innerText.indexOf(title)!=-1)chs.push(a)});return chs.reverse(); ``` - ---- + [📕頂點小説網](https://m.biqugeu.net/booklist/20128662.html) > 此站同11項 ``` javascript .book_last>dl>dd>a:not([style])@@@@@@let content="";let checkContent=(doc,over)=>{word=doc.querySelector('#chaptercontent');if(!word)content+='\n'+doc.body.innerText;else {word.innerHTML=word.innerHTML.replace(/
/g,'\n');content+='\n'+word.innerText;}let next=doc.querySelector("#pb_next");if(next&&/_\d\.html/.test(next.href)){fetch(next.href).then(r => r.arrayBuffer()).then(d => {let decoder = new TextDecoder("gbk");let text = decoder.decode(d);let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = text;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content)});return false; ``` - ---- + [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) > 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。 ``` javascript #list-chapterAll>dd>a>>item.href=item.href.replace(/.*book('(\d+)','(\d+)').*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` - ---- + [📕免費小説網](http://www.huazhuangsheying.com/book/3659/) > 也是有分頁,fetch後簡單處理一下就ok。 ``` javascript .section-box+h2+.section-box>.section-list>.book-item>a@@@@@@let content=data.querySelector('#content');if(!content)return data.body.innerText;if(content.children[0].tagName=='DIV')content.removeChild(content.children[0]);content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let nextpage=data.querySelector(a[href$="_2.html"]);if(nextpage){fetch(nextpage.href).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('#content');if(c){if(c.children[0].tagName=='DIV')c.removeChild(c.children[0]);c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content+=c.innerText;}cb(content);});return false;}return content; ``` - ---- + [📕海棠文化](https://haitbook.com/?act=showinfo&bookwritercode=EB20160922203907769482&bookid=67166&pavilionid=a) > token在頁面中,直接match拿到然後請求了事。 ``` javascript .uk-list>li>a@@@@@@let contentMatch=data.body.innerHTML.match(/url: '\/showpapercolor.php',[\s\S]*?paperid:\s*'(\w+)',\s*vercodechk:\s*'(\w+)'/);if(!contentMatch)return "";$.ajax({url: '/showpapercolor.php',type: 'POST',data: { paperid: `${contentMatch[1]}`, vercodechk: `${contentMatch[2]}`},error: function (xhr) {cb("");},success: function (colorresponse) {cb(colorresponse.replace(//,"").replace(/
/g,""))}});return false; ``` - ---- + [📕樂文網](https://www.mylewen.com/book/183921/catalog/) > 分兩段,前半明文,後半加密,調用頁面自身方法解密后拼接。 ``` javascript .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` - ---- + [📕豆瓣閲讀](https://read.douban.com/column/64079189/) ``` css a.chapter-item @@ -217,12 +183,8 @@ function decode(t) { } ``` > 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 - ---- + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 - ---- + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) > 簡單的分頁,沒啥難點。惟一需要注意的是,分頁鏈接藏在 js 代碼裏,用正則取出完事 ``` javascript From 4b4747e3f86d9e23fd2937ebd7a458b2f8b506b0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 18:28:27 +0800 Subject: [PATCH 402/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 7a3d91835e0..f767f43fb38 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -186,7 +186,7 @@ function decode(t) { + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) -> 簡單的分頁,沒啥難點。惟一需要注意的是,分頁鏈接藏在 js 代碼裏,用正則取出完事 +> 簡單的分頁,沒啥難點。惟一需要注意的是,分頁連結藏在 js 代碼裏,用正則取出完事。 ``` javascript .chapter>li>a@@@@@@let content="\n";let checkContent=(doc,over)=>{word=doc.querySelector('.content-div');if(!word)content+='\n'+doc.body.innerText;else {let ps=[];[].forEach.call(word.children, p=>{if(p.className!='moreinfo')ps.push(p.innerText)});content+=ps.join('\n');}let next=doc.querySelector("#pt_next");if(next){fetch(location.href+ doc.body.innerHTML.match(/'([^\|']+)\|[^']+'\.split/)[1]+".html").then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content.replace(/\s*「如章节缺失请退#出#阅#读#模#式」\s*|\s*本章未完,点下一页继续阅读。>>>\s*/g,''))});return false; ``` From 086aa89fb086f78be1fa648636b213e44cded783 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 23 Nov 2023 21:26:46 +0800 Subject: [PATCH 403/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 03c0820248c..f972898005e 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.22.3 +// @version 2023.11.23.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16178,6 +16178,7 @@ ImgOps | https://imgops.com/#b#`; }; }, keyDownListener:function(e){ + e.stopPropagation(); switch(e.keyCode){ case 27: if(prefs.imgWindow.close.escKey){ @@ -16202,6 +16203,14 @@ ImgOps | https://imgops.com/#b#`; } img.style[support.cssTransform] = ' rotate('+ origin +'rad) ' + iTransform; break; + case prefs.floatBar.keys.actual: + case prefs.floatBar.keys.current: + imgReady(this.src,{ + ready:function(){ + new ImgWindowC(this); + }, + }); + break; case prefs.floatBar.keys.download: downloadImg(this.img.src, this.selected.title, prefs.saveName); break; @@ -23264,6 +23273,7 @@ ImgOps | https://imgops.com/#b#`; function keydown(event) { if (ImgWindowC.showing) return; + if (gallery && gallery.shown) return; if (document.activeElement && (document.activeElement.nodeName == 'INPUT' || document.activeElement.nodeName == 'INPUT' || From e777abf7ffb455caa3b23ddc75338b9fb0bc08ca Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 08:13:31 +0800 Subject: [PATCH 404/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a9ebf0d9c49..f60d2969e25 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.36 +// @version 1.7.37 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4866,7 +4866,7 @@ } } else { let blockValue = ""; - if (node.nodeType == 1 && node.value && node.offsetParent && /^(button|select|input|textarea)$/i.test(node.nodeName) && !/^(hidden|file|password|radio|range|checkbox|)$/i.test(node.type) && (!word.init || (!/(^wd|^kw|^q$|query|search|keyword)/i.test(node.name) && !/(^wd|^kw|^q$|query|search)/i.test(node.id)))) { + if (node.nodeType == 1 && node.value && node.offsetParent && !word.init && /^(button|select|input|textarea)$/i.test(node.nodeName) && !/^(hidden|file|password|radio|range|checkbox|image)$/i.test(node.type)) { blockValue = node.value; } if (blockValue) { @@ -5186,6 +5186,7 @@ showAllSites() { if (!this.con || !this.con.parentNode || this.con.classList.contains("search-jumper-showall")) return; + this.con.style.display = ""; this.clearInputHide(); this.alllist.appendChild(this.filterSites); this.filterGlob.innerHTML = createHTML(); From 72777c0154bfab58c0d0175e606a25aed1420c9f Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 08:20:34 +0800 Subject: [PATCH 405/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f60d2969e25..86d8343e0ea 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -5043,8 +5043,10 @@ if (!self.marks[w.showWords]) { self.marks[w.showWords] = []; } - if (w.inRange && ele.parentNode) { - [].forEach.call(ele.parentNode.querySelectorAll(w.inRange), e => { + if (w.inRange) { + let searchEle = ele; + if (ele.parentNode) searchEle = ele.parentNode; + [].forEach.call(searchEle.querySelectorAll(w.inRange), e => { if (e == ele || ele.contains(e)) { searchWithinNode(e, w, true); } From c8c94f27c866f03d7817fc70405baec055672223 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 08:48:36 +0800 Subject: [PATCH 406/812] 1.9.36.96 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 3432491911d..3c20c5a4898 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.95](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.96](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 6c41efebe43..1b7acdf9b9a 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.95 +// @version 1.9.36.96 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2255,7 +2255,8 @@ ".btn_next:not([disabled])", ".btn-next:not([disabled])", "a#linkNext", - "a[class*=page__next]" + "a[class*=page__next]", + "[class*=pagination-next]>a" ]; let next = await this.querySelectorList(body, selectorList); if (!next) { @@ -2335,7 +2336,7 @@ await sleep(1); let pageDivs = body.querySelectorAll("[class*=pagination],[class*=Pagination]"); if (pageDivs && pageDivs.length) { - for (let i = 0; i < pageDivs.length; i++) { + for (let i = pageDivs.length - 1; i >= 0; i--) { let p = pageDivs[i]; if (/(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)/i.test(p.title || p.value || '')) { next = p.querySelector('a') || p; From 79b9cf9d6f7f6ce4ef3a6ae86eb4f56fcf3780ce Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 09:45:16 +0800 Subject: [PATCH 407/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 47 +++++++++++++++++------------ 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index f972898005e..0fd89fe2fef 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.23.1 +// @version 2023.11.24.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -25,6 +25,7 @@ // @connect * // @grant GM_getValue // @grant GM_setValue +// @grant GM_deleteValue // @grant GM_addStyle // @grant GM_openInTab // @grant GM_setClipboard @@ -34,6 +35,7 @@ // @grant GM_download // @grant GM.getValue // @grant GM.setValue +// @grant GM.deleteValue // @grant GM.addStyle // @grant GM.openInTab // @grant GM.setClipboard @@ -13395,11 +13397,11 @@ ImgOps | https://imgops.com/#b#`; } } if (self.lockMaxSize) { - storage.setItem("lockMaxSize" + location.hostname, self.lockMaxSize); - storage.setItem("curDefaultSize" + location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); + storage.setItem("maxSize" + location.hostname, self.lockMaxSize); + storage.setItem("minSize" + location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); } else { - storage.setItem("lockMaxSize" + location.hostname, ""); - storage.setItem("curDefaultSize" + location.hostname, ""); + storage.setItem("maxSize" + location.hostname, ""); + storage.setItem("minSize" + location.hostname, ""); } }; @@ -13898,7 +13900,7 @@ ImgOps | https://imgops.com/#b#`; this.urlFilter = ""; this.lockMaxSize = false; var urlFilter = storage.getItem("urlFilter" + location.hostname) || false; - var lockMaxSize = storage.getItem("lockMaxSize" + location.hostname) || false; + var lockMaxSize = storage.getItem("maxSize" + location.hostname) || false; if (urlFilter) { self.urlFilter = urlFilter; urlFilterHeadItem.title = self.urlFilter; @@ -13909,7 +13911,7 @@ ImgOps | https://imgops.com/#b#`; headMaxLock.style.filter="brightness(5)"; headMaxLock.title=lockMaxSize.w+" x "+lockMaxSize.h; } - self.curDefaultSize = storage.getItem("curDefaultSize" + location.hostname) || false; + self.curDefaultSize = storage.getItem("minSize" + location.hostname) || false; //幻灯片播放下拉列表change事件的处理 eleMaps['head-command-drop-list-slide-show'].addEventListener('change',function(e){ @@ -14937,6 +14939,10 @@ ImgOps | https://imgops.com/#b#`; sizeInputHSpan.innerHTML=createHTML("H: "+Math.floor(sizeInputH.value)+"px"); sizeInputW.title="min width: "+sizeInputW.value+"px"; sizeInputWSpan.innerHTML=createHTML("W: "+Math.floor(sizeInputW.value)+"px"); + clearTimeout(this.saveDefaultSize); + this.saveDefaultSize = setTimeout(() => { + storage.setItem("minSize" + location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); + }, 1000); var self=this; var viewmoreShow = this.eleMaps['sidebar-toggle'].style.visibility == 'hidden'; @@ -24348,24 +24354,27 @@ ImgOps | https://imgops.com/#b#`; }; })(), setItem:function(key,value){ - if(this.operaUJSStorage){ - this.operaUJSStorage.setItem(key,value); - }else if(this.mxAppStorage){ - this.mxAppStorage.setConfig(key,value); - }else if(this.supportGM){ - GM_setValue(key,value); - }else if(window.localStorage){ - window.localStorage.setItem(key,value); - }; + if (this.supportGM) { + GM_setValue(key, value); + if (value === "" && typeof GM_deleteValue != 'undefined') { + GM_deleteValue(key); + } + } else if (this.operaUJSStorage) { + this.operaUJSStorage.setItem(key, value); + } else if (this.mxAppStorage) { + this.mxAppStorage.setConfig(key, value); + } else if (window.localStorage) { + window.localStorage.setItem(key, value); + } }, getItem:function(key){ var value; - if(this.operaUJSStorage){ + if(this.supportGM){ + value=GM_getValue(key); + }else if(this.operaUJSStorage){ value=this.operaUJSStorage.getItem(key); }else if(this.mxAppStorage){ value=this.mxAppStorage.getConfig(key); - }else if(this.supportGM){ - value=GM_getValue(key); }else if(window.localStorage){ value=window.localStorage.getItem(key); }; From e2bb951fd69be3a1abc7276db21c157d10db3d11 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 11:18:35 +0800 Subject: [PATCH 408/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 5640acaac54..f885d4313ec 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.7 +// @version 2.7.8 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -247,7 +247,7 @@ if (window.top != window.self) { downThreadNum:"设置同时下载的线程数", customTitle:"自定义章节标题,输入内页文字对应选择器", reSortDefault:"默认按页面中位置排序章节", - reverse:"反转章节排序", + reverseOrder:"反转章节排序", saveBtn:"保存设置", saveOk:"保存成功", nextPage:"嗅探章节内分页", @@ -289,7 +289,7 @@ if (window.top != window.self) { downThreadNum:"設置同時下載的綫程數", customTitle:"自訂章節標題,輸入內頁文字對應選擇器", reSortDefault:"預設依頁面中位置排序章節", - reverse:"反轉章節排序", + reverseOrder:"反轉章節排序", saveBtn:"儲存設定", saveOk:"儲存成功", nextPage:"嗅探章節內分頁", @@ -330,7 +330,7 @@ if (window.top != window.self) { downThreadNum:"Set threadNum for download", customTitle: "Customize the chapter title, enter the selector on inner page", reSortDefault: "Default sort by position in the page", - reverse:"Reverse chapter ordering", + reverseOrder:"Reverse chapter ordering", saveBtn:"Save Setting", saveOk:"Save Over", nextPage:"Check next page in chapter", @@ -1706,6 +1706,7 @@ if (window.top != window.self) { insertPos.parentNode.insertBefore(con, insertPos); return option; } + let showFilterList = createOption(i18n.showFilterList, !!GM_getValue("showFilterList"), "checkbox"); let delSelector = createOption(i18n.del, GM_getValue("selectors") || ""); delSelector.setAttribute("placeHolder", ".mask,.ksam"); let downThreadNum = createOption(i18n.downThreadNum, GM_getValue("downThreadNum") || "20", "number"); @@ -1720,9 +1721,8 @@ if (window.top != window.self) { reSortDefault.name = "sort"; reSortUrl.name = "sort"; contentSort.name = "sort"; - let reverse = createOption(i18n.reverse, !!GM_getValue("reverse"), "checkbox"); + let reverse = createOption(i18n.reverseOrder, !!GM_getValue("reverse"), "checkbox"); let retainImage = createOption(i18n.retainImage, !!GM_getValue("retainImage"), "checkbox"); - let showFilterList = createOption(i18n.showFilterList, !!GM_getValue("showFilterList"), "checkbox"); let disableNextPage = !!GM_getValue("disableNextPage"); let nextPage = createOption(i18n.nextPage, !disableNextPage, "checkbox"); let nextPageReg = createOption(i18n.nextPageReg, GM_getValue("nextPageReg") || ""); From 7d055cbf2090d9061abed047b880edb1d32f4dc8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 11:37:40 +0800 Subject: [PATCH 409/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 49 ++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 0fd89fe2fef..90ce690399e 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.24.1 +// @version 2023.11.24.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -13397,11 +13397,11 @@ ImgOps | https://imgops.com/#b#`; } } if (self.lockMaxSize) { - storage.setItem("maxSize" + location.hostname, self.lockMaxSize); - storage.setItem("minSize" + location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); + storage.setListItem("maxSize", location.hostname, self.lockMaxSize); + storage.setListItem("minSize", location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); } else { - storage.setItem("maxSize" + location.hostname, ""); - storage.setItem("minSize" + location.hostname, ""); + storage.setListItem("maxSize", location.hostname, ""); + storage.setListItem("minSize", location.hostname, ""); } }; @@ -13885,7 +13885,7 @@ ImgOps | https://imgops.com/#b#`; let filterStr = prompt(i18n("urlFilterTip"), self.urlFilter || location.hostname) || ""; if (filterStr != self.urlFilter) { self.urlFilter = filterStr; - storage.setItem("urlFilter" + location.hostname, filterStr); + storage.setListItem("urlFilter", location.hostname, filterStr); if (self.urlFilter) { urlFilterHeadItem.title = self.urlFilter; urlFilterHeadItem.style.display = "inline-block"; @@ -13899,8 +13899,8 @@ ImgOps | https://imgops.com/#b#`; this.urlFilter = ""; this.lockMaxSize = false; - var urlFilter = storage.getItem("urlFilter" + location.hostname) || false; - var lockMaxSize = storage.getItem("maxSize" + location.hostname) || false; + var urlFilter = storage.getListItem("urlFilter", location.hostname) || false; + var lockMaxSize = storage.getListItem("maxSize", location.hostname) || false; if (urlFilter) { self.urlFilter = urlFilter; urlFilterHeadItem.title = self.urlFilter; @@ -13911,7 +13911,7 @@ ImgOps | https://imgops.com/#b#`; headMaxLock.style.filter="brightness(5)"; headMaxLock.title=lockMaxSize.w+" x "+lockMaxSize.h; } - self.curDefaultSize = storage.getItem("minSize" + location.hostname) || false; + self.curDefaultSize = storage.getListItem("minSize", location.hostname) || false; //幻灯片播放下拉列表change事件的处理 eleMaps['head-command-drop-list-slide-show'].addEventListener('change',function(e){ @@ -13942,7 +13942,7 @@ ImgOps | https://imgops.com/#b#`; self.switchThumbVisible();//切换图片类别显隐; },true); - prefs.gallery.scrollEndAndLoad = !!storage.getItem("scrollEndAndLoad" + location.hostname); + prefs.gallery.scrollEndAndLoad = !!storage.getListItem("scrollEndAndLoad", location.hostname); eleMaps['head-command-drop-list-others'].querySelector('input[data-command="scrollToEndAndReload"]').checked = prefs.gallery.scrollEndAndLoad; var srcSplit,downloading=false; //命令下拉列表的点击处理 @@ -14048,7 +14048,7 @@ ImgOps | https://imgops.com/#b#`; } prefs.gallery.scrollEndAndLoad = checkbox.checked; - storage.setItem("scrollEndAndLoad" + location.hostname, checkbox.checked); + storage.setListItem("scrollEndAndLoad", location.hostname, checkbox.checked); break; case 'fullScreen': if (target.classList.contains('fullscreenbtn')) { @@ -14941,7 +14941,7 @@ ImgOps | https://imgops.com/#b#`; sizeInputWSpan.innerHTML=createHTML("W: "+Math.floor(sizeInputW.value)+"px"); clearTimeout(this.saveDefaultSize); this.saveDefaultSize = setTimeout(() => { - storage.setItem("minSize" + location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); + storage.setListItem("minSize", location.hostname, {h: sizeInputH.value, w: sizeInputW.value}); }, 1000); var self=this; @@ -24154,7 +24154,7 @@ ImgOps | https://imgops.com/#b#`; loadPrefs(); - var hideIcon=storage.getItem("hideIcon" + location.hostname) || false; + var hideIcon=storage.getListItem("hideIcon", location.hostname) || false; var hideIconStyle=document.createElement('style'); hideIconStyle.textContent=`#pv-float-bar-container{display:none!important}`; if(hideIcon){ @@ -24164,7 +24164,7 @@ ImgOps | https://imgops.com/#b#`; _GM_registerMenuCommand(i18n("openGallery"), openGallery); _GM_registerMenuCommand(i18n("hideIcon") + (hideIcon ? "☑️" : ""), ()=>{ hideIcon=!hideIcon; - storage.setItem("hideIcon" + location.hostname, hideIcon); + storage.setListItem("hideIcon", location.hostname, hideIcon); if(hideIcon){ document.head.appendChild(hideIconStyle); }else{ @@ -24380,6 +24380,27 @@ ImgOps | https://imgops.com/#b#`; }; return value; }, + getListItem: function(list, key) { + var listData = this.getItem(list); + if (!listData) return null; + for(var i = 0; i < listData.length; i++) { + let data = listData[i]; + if (data.k == key) { + return data.v; + } + } + return null; + }, + setListItem: function(list, key, value) { + var listData = this.getItem(list); + if (!listData) listData = []; + listData = listData.filter(data => data && data.k != key); + if (value) { + listData.unshift({k: key, v: value}); + if (listData.length > 50) listData.pop(); + } + this.setItem(list, listData); + } }; function getUrl(url, callback, onError){ From f7a31b2604c74d233b6a24554ba9e76863fd2ab8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 11:57:14 +0800 Subject: [PATCH 410/812] 1.9.36.97 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 56 +++++++++++++++++++++++++++++---------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 3c20c5a4898..5966dc5a129 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.96](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.97](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 1b7acdf9b9a..9da8ba6520d 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.96 +// @version 1.9.36.97 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -851,6 +851,34 @@ }); }) } + async function getListData(list, key) { + return new Promise((resolve) => { + storage.getItem(list, listData => { + let value = null; + if (listData) { + for(var i = 0; i < listData.length; i++) { + let data = listData[i]; + if (data.k == key) { + value = data.v; + break; + } + } + } + resolve(value); + }); + }) + } + function setListData(list, key, value) { + storage.getItem(list, listData => { + if (!listData) listData = []; + listData = listData.filter(data => data && data.k != key); + if (value) { + listData.unshift({k: key, v: value}); + if (listData.length > 100) listData.pop(); + } + storage.setItem(list, listData); + }); + } const configPage = ["https://github.com/hoothin/UserScripts/tree/master/Pagetual", "https://hoothin.github.io/UserScripts/Pagetual/"]; const guidePage = /^https?:\/\/.*pagetual.*rule\.html/i; @@ -3980,7 +4008,7 @@ span.classList.add("current"); currentSpan = span; nextIndex = i; - storage.setItem("nextSwitch_" + location.host, nextIndex === 0 ? "" : nextIndex); + setListData("nextSwitch", location.host, nextIndex === 0 ? "" : nextIndex); ruleParser.curUrl += "#pagetual"; ruleParser.oldUrl = ruleParser.curUrl; autoLoadNum = -1; @@ -4354,7 +4382,7 @@ return; } } - storage.setItem("forceState_" + location.host, forceState); + setListData("forceState", location.host, forceState); self.close(); location.reload(); }; @@ -4387,7 +4415,7 @@ autoScroll = parseInt(autoScroll) || 0; if (autoScroll < 0) autoScroll = 0; else if (autoScroll > 1000) autoScroll = 1000; - storage.setItem("autoScroll_" + location.host + location.pathname, autoScroll); + setListData("autoScroll", location.host + location.pathname, autoScroll); startAutoScroll(); }, true); addOtherProp.addEventListener("click", e => { @@ -6019,22 +6047,22 @@ openInNewTab = rulesData.openInNewTab ? 1 : 0; enableDebug = rulesData.enableDebug; - let _nextSwitch = await getData("nextSwitch_" + location.host); + let _nextSwitch = await getListData("nextSwitch", location.host); if (typeof(_nextSwitch) !== "undefined") { nextIndex = _nextSwitch; } - let _forceState = await getData("forceState_" + location.host); + let _forceState = await getListData("forceState", location.host); if (typeof(_forceState) == "undefined") { _forceState = (rulesData.enableWhiteList ? 1 : 0); } forceState = _forceState; - autoScroll = await getData("autoScroll_" + location.host + location.pathname) || 0; + autoScroll = await getListData("autoScroll", location.host + location.pathname) || 0; updateDate = await getData("ruleLastUpdate"); - manualPause = !!await getData("pauseState_" + location.host); + manualPause = !!await getListData("pauseState", location.host); let href = location.href.slice(0, 100); try { @@ -6068,7 +6096,7 @@ changeStop(true); sideController.remove(); } - storage.setItem("forceState_" + location.host, forceState); + setListData("forceState", location.host, forceState); if (!ruleParser.curSiteRule.url) location.reload(); }); _GM_registerMenuCommand(i18n("toggleAutoScroll"), () => { @@ -6076,7 +6104,7 @@ autoScroll = parseInt(autoScroll) || 0; if (autoScroll < 0) autoScroll = 0; else if (autoScroll > 1000) autoScroll = 1000; - storage.setItem("autoScroll_" + location.host + location.pathname, autoScroll); + setListData("autoScroll", location.host + location.pathname, autoScroll); startAutoScroll(); }); startAutoScroll(); @@ -6239,10 +6267,10 @@ let inForce = (forceState == 2 || forceState == 3); _GM_registerMenuCommand(i18n(inForce ? "cancelForceIframe" : "forceIframe"), () => { if (inForce) { - storage.setItem("forceState_" + location.host, ""); + setListData("forceState", location.host, ""); } else { let _state = ruleParser.curSiteRule.action > 0 || confirm(i18n("forceAllBody")) ? 2 : 3; - storage.setItem("forceState_" + location.host, _state); + setListData("forceState", location.host, _state); } location.reload(); }); @@ -6499,7 +6527,7 @@ }); if (!isPause) ruleParser.showAddedElements(); manualPause = isPause; - if (sideController.inited) storage.setItem("pauseState_" + location.host, isPause ? true : ""); + if (sideController.inited) setListData("pauseState", location.host, isPause ? true : ""); }, 350); } @@ -6846,7 +6874,7 @@ sideController.remove(); } if (!ruleParser.curSiteRule.url) { - storage.setItem("forceState_" + location.host, forceState); + setListData("forceState", location.host, forceState); location.reload(); } } From 49562cd0e4d164bb099380ea697469a9b42c55d3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 12:49:27 +0800 Subject: [PATCH 411/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 9da8ba6520d..9f469c5031a 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2447,7 +2447,7 @@ } } if (!next3) { - if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(innerText) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) { + if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(aTag.textContent) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) { if (isJs) { if (!nextJs3) nextJs3 = aTag; } else { From 08cff86fe34acc36567140d193263742e36118ed Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 13:29:34 +0800 Subject: [PATCH 412/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 35 +++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 86d8343e0ea..a41ac2c70e6 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -941,6 +941,27 @@ }; if(cb) cb(value); return value; + }, + getListItem: async function(list, key) { + var listData = await this.getItem(list); + if (!listData) return null; + for(var i = 0; i < listData.length; i++) { + let data = listData[i]; + if (data.k == key) { + return data.v; + } + } + return null; + }, + setListItem: async function(list, key, value) { + var listData = await this.getItem(list); + if (!listData) listData = []; + listData = listData.filter(data => data && data.k != key); + if (value) { + listData.unshift({k: key, v: value}); + if (listData.length > 50) listData.pop(); + } + this.setItem(list, listData); } }; var escapeHTMLPolicy; @@ -7845,7 +7866,7 @@ if (customInputStr) { inputStr = customInputStr; } else { - storage.setItem("inPagePostParams_" + location.hostname, ""); + storage.setListItem("inPagePostParams", location.hostname, ""); return; } } @@ -7856,7 +7877,7 @@ } if (inPagePostParams) { inPagePostParams.shift(); - storage.setItem("inPagePostParams_" + location.hostname, inPagePostParams && inPagePostParams.length ? inPagePostParams : ""); + storage.setListItem("inPagePostParams", location.hostname, inPagePostParams && inPagePostParams.length ? inPagePostParams : ""); if (param[0] === '@reload') { location.reload(!!param[1]); return; @@ -7976,7 +7997,7 @@ if (!currentSite && inPagePostParams) { await this.submitAction(inPagePostParams); setTimeout(() => { - storage.setItem("inPagePostParams_" + location.hostname, ""); + storage.setListItem("inPagePostParams", location.hostname, ""); }, 10000); } } else if (data.hideNotMatch) { @@ -8493,7 +8514,7 @@ this.submitAction(postParams); return false; } else { - storage.setItem("inPagePostParams_" + resultUrl.replace(/^https?:\/\/([^\/:]+).*/, "$1"), postParams); + storage.setListItem("inPagePostParams", resultUrl.replace(/^https?:\/\/([^\/:]+).*/, "$1"), postParams); } } resultUrl = customReplaceKeywords(resultUrl.replace(/%U\b/g, encodeURIComponent(href)).replace(/%T\b/g, encodeURIComponent(targetUrl)).replace(/%b\b/g, targetBaseUrl).replace(/%B\b/g, encodeURIComponent(targetBaseUrl)).replace(/%n\b/g, targetName).replace(/%S\b/g, (cacheKeywords || keywords))); @@ -13064,11 +13085,7 @@ }); }); storage.setItem("lastSign", false); - inPagePostParams = await new Promise((resolve) => { - storage.getItem("inPagePostParams_" + location.hostname, data => { - resolve(data || false); - }); - }); + inPagePostParams = await storage.getListItem("inPagePostParams", location.hostname); cacheIcon = await new Promise((resolve) => { storage.getItem("cacheIcon", data => { resolve(data || {}); From 146a8dde04ac85858a0f8731d7ccb728de6dd7e2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 14:29:48 +0800 Subject: [PATCH 413/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a41ac2c70e6..bd4a85c4b46 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.37 +// @version 1.7.38 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4960,6 +4960,7 @@ if (node.nodeName && node.nodeName.toLowerCase && node.nodeName.toLowerCase() !== "textarea") { fakeTextarea.style.display = "inline-grid"; fakeTextarea.style.lineHeight = fakeTextarea.style.height; + fakeTextarea.style.paddingTop = 0; } self.fakeTextareas[node] = fakeTextarea; } @@ -7494,6 +7495,7 @@ self.stopInput = false; let notMatchSites = []; async function createItem(site, i) { + if (!site.name) return; let siteEle = await self.createSiteBtn((tooLoog || searchData.prefConfig.noIcons ? "0" : site.icon), site, openInNewTab, isBookmark, data); if (!siteEle) { notMatchSites.push(i); From 346e6b67e9364eaeefc7fc644b34542f151718cc Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 15:14:07 +0800 Subject: [PATCH 414/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index bd4a85c4b46..7305a879ca9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4960,7 +4960,7 @@ if (node.nodeName && node.nodeName.toLowerCase && node.nodeName.toLowerCase() !== "textarea") { fakeTextarea.style.display = "inline-grid"; fakeTextarea.style.lineHeight = fakeTextarea.style.height; - fakeTextarea.style.paddingTop = 0; + if (fakeTextarea.style.boxSizing == "border-box") fakeTextarea.style.paddingTop = 0; } self.fakeTextareas[node] = fakeTextarea; } From 1dbba356c898505f8052275877a5f3af200077ae Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 15:53:07 +0800 Subject: [PATCH 415/812] 1.9.36.98 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 18 ++---------------- Pagetual/pagetualRules.json | 4 ++-- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 5966dc5a129..70f2e7c0ca2 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.97](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.98](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 9f469c5031a..59a8cb26109 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.97 +// @version 1.9.36.98 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1503,12 +1503,10 @@ let singleUrl = location.origin + location.pathname; if (singleUrl == rule.url) { setRule(rule); - if (rule.checked) return; callback = () => { if (self.curSiteRule) { self.smartRules = self.smartRules.filter(item => {return item && item.url != singleUrl}); if (self.curSiteRule.singleUrl) { - self.curSiteRule.checked = true; self.smartRules.unshift(self.curSiteRule); } else { if (self.curSiteRule.url.length > 13) { @@ -3278,16 +3276,6 @@ }); } - findNoNext() { - if (!this.curSiteRule || !this.curSiteRule.singleUrl || this.curSiteRule.nextLink === 0) return; - delete this.curSiteRule.pageElement; - this.curSiteRule.nextLink = 0; - let self = this; - self.smartRules = self.smartRules.filter(item => {return item && item.url != self.curSiteRule.url}); - self.smartRules.unshift(self.curSiteRule); - storage.setItem("smartRules", self.smartRules); - } - initPage(callback) { let self = this; if (self.initing) return; @@ -6049,7 +6037,7 @@ let _nextSwitch = await getListData("nextSwitch", location.host); if (typeof(_nextSwitch) !== "undefined") { - nextIndex = _nextSwitch; + nextIndex = _nextSwitch || 0; } let _forceState = await getListData("forceState", location.host); @@ -8192,8 +8180,6 @@ setTimeout(() => {isLoading = false}, 500); } else if (tryTimes++ < 3) { setTimeout(() => {isLoading = false}, 1000); - } else { - ruleParser.findNoNext(); } } else if (rulesData.lastPageTips && !showedLastPageTips) { showTips(i18n("lastPage"), "", 800); diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index fb52625ffbc..73ab94354d0 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8344,7 +8344,7 @@ "name": "bbsPostlist1", "url": ".", "nextLink": [ - "a.nxt", + "a.nxt,a.next", "a.prev" ], "pageNum": "\\-\\d+\\-{$p}\\-\\d+\\.html", @@ -8362,7 +8362,7 @@ "name": "bbsThreadlist1", "url": "/f", "nextLink": [ - "a.nxt", + "a.nxt,a.next", "a.prev" ], "pageNum": "\\-\\d+\\-{$p}\\.html", From 4c45a3072dfd5acb8ccaef54fc9dfb7167e50461 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 15:56:46 +0800 Subject: [PATCH 416/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 59a8cb26109..0f2d0dc66c0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -5921,6 +5921,12 @@ ruleUrls = urls; } } + if (rulesData.lang) { + setLang(rulesData.lang); + } + _GM_registerMenuCommand(i18n("configure"), () => { + _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); + }); if (rulesData.blacklist && rulesData.blacklist.length > 0) { let href = location.href.slice(0, 500); let commentStart = false; @@ -5950,12 +5956,6 @@ } } } - if (rulesData.lang) { - setLang(rulesData.lang); - } - _GM_registerMenuCommand(i18n("configure"), () => { - _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); - }); _GM_registerMenuCommand(i18n("editCurrent"), () => { picker.start(); }); From 301591bbdc1b52fc058eb92146b35c62732afd4f Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 16:04:27 +0800 Subject: [PATCH 417/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 7305a879ca9..ff866ceeb1b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.38 +// @version 1.7.39 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1584,10 +1584,12 @@ height: 0 !important; } .search-jumper-searchBarCon.search-jumper-scroll { - pointer-events: all; overscroll-behavior: contain; -ms-scroll-chaining: contain; } + .search-jumper-searchBarCon.search-jumper-scroll>.search-jumper-searchBar { + pointer-events: all; + } .search-jumper-scroll.search-jumper-bottom { overflow-y: hidden; } From 92dc6e29ec15edde1050053d623fe36aa8927d57 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 17:02:10 +0800 Subject: [PATCH 418/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ff866ceeb1b..2d4196dc149 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -56,7 +56,8 @@ (function() { 'use strict'; if (window.name === 'pagetual-iframe' || (window.frameElement && window.frameElement.name === 'pagetual-iframe')) return; - if (window.top != window.self) { + const inIframe = window.top != window.self; + if (inIframe) { try { if (window.self.innerWidth < 300 || window.self.innerHeight < 300) { return; @@ -5918,7 +5919,7 @@ this.searchInPageRule(); if (currentSite && wordParamReg.test(currentSite.url)) { this.inSearchEngine(); - } else if (searchData.prefConfig.alwaysShow) { + } else if (searchData.prefConfig.alwaysShow && !inIframe) { this.bar.style.display = ""; this.initPos(); this.appendBar(); @@ -6402,7 +6403,7 @@ } inSearchEngine() { - if (!this.currentType || !currentSite) return; + if (!this.currentType || !currentSite || inIframe) return; if (!/#p{/.test(currentSite.url) || currentSite.keywords) { this.appendBar(); if (this.currentType.classList.contains("search-jumper-needInPage")) { From b9e526dac65e4466e2c66de4a889fb5be8478f71 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 18:27:50 +0800 Subject: [PATCH 419/812] 1.9.36.99 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 70f2e7c0ca2..4e3f022916a 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.98](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.99](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0f2d0dc66c0..d976ef339e8 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.98 +// @version 1.9.36.99 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -854,7 +854,7 @@ async function getListData(list, key) { return new Promise((resolve) => { storage.getItem(list, listData => { - let value = null; + let value; if (listData) { for(var i = 0; i < listData.length; i++) { let data = listData[i]; @@ -2298,6 +2298,11 @@ } } } + if (next && doc == document) { + if (_unsafeWindow.getComputedStyle(next).display == "none") { + next = null; + } + } if (next && this.linkHasNoHref(next)) { jsNext = next; next = null; @@ -6041,6 +6046,9 @@ } let _forceState = await getListData("forceState", location.host); + if (typeof(_forceState) == "undefined") { + _forceState = await getData("forceState_" + location.host); + } if (typeof(_forceState) == "undefined") { _forceState = (rulesData.enableWhiteList ? 1 : 0); } From ed59484c5d5005cd076aba8cca924c1a5be20efe Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 18:59:47 +0800 Subject: [PATCH 420/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 90ce690399e..72d481128d6 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.24.2 +// @version 2023.11.24.3 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -21627,7 +21627,7 @@ ImgOps | https://imgops.com/#b#`; background-image: initial;\ top: 0px;\ left: 0px;\ - z-index:9999999998;\ + z-index:2147483640;\ padding: 5px;\ margin: 0;\ border: none;\ @@ -24381,15 +24381,18 @@ ImgOps | https://imgops.com/#b#`; return value; }, getListItem: function(list, key) { + var value; var listData = this.getItem(list); - if (!listData) return null; - for(var i = 0; i < listData.length; i++) { - let data = listData[i]; - if (data.k == key) { - return data.v; + if (listData) { + for(var i = 0; i < listData.length; i++) { + var data = listData[i]; + if (data.k == key) { + value = data.v; + break; + } } } - return null; + return value; }, setListItem: function(list, key, value) { var listData = this.getItem(list); From 3f943af125a971e5a48c02b9fdf68715e50596c8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 20:05:16 +0800 Subject: [PATCH 421/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 1 + 1 file changed, 1 insertion(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 73ab94354d0..f5ab7c2e82e 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8430,6 +8430,7 @@ "url": "^https?://www\\.baidu\\.com/(s|baidu)\\b.", "pageBarTop": 75, "replaceElement": "#page", + "exclude": ".AC-style-logo", "wait": 500 }, { From 6b5c53e8135888c7d2ccf676392d9fa76250fd7d Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 20:24:57 +0800 Subject: [PATCH 422/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d976ef339e8..d7745e7fd4f 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.99 +// @version 1.9.36.100 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1522,7 +1522,10 @@ } } let r = 0; - function searchByTime() { + async function searchByTime() { + while (document.hidden) { + await sleep(1000); + } setTimeout(() => { let end = r + 20; end = end > self.rules.length ? self.rules.length : end; @@ -2246,6 +2249,7 @@ ".page-next>a", "a.next_page", "#next_page", + ".curPage+a", ".nextPage", ".pagination-next>a", "a[data-pagination=next]", @@ -2298,11 +2302,6 @@ } } } - if (next && doc == document) { - if (_unsafeWindow.getComputedStyle(next).display == "none") { - next = null; - } - } if (next && this.linkHasNoHref(next)) { jsNext = next; next = null; From cbfdd725436c739970a51404b464c785fa79e28d Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 20:25:07 +0800 Subject: [PATCH 423/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 4e3f022916a..a85da4c27d6 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.99](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.100](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 566248cfe0705db57a22d43d298bb7e650ed5f5f Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 21:18:42 +0800 Subject: [PATCH 424/812] 1.9.36.101 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index a85da4c27d6..0141096aefe 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.100](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.101](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d7745e7fd4f..8dfd9068b10 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.100 +// @version 1.9.36.101 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -868,13 +868,13 @@ }); }) } - function setListData(list, key, value) { + function setListData(list, key, value, length) { storage.getItem(list, listData => { if (!listData) listData = []; listData = listData.filter(data => data && data.k != key); if (value) { listData.unshift({k: key, v: value}); - if (listData.length > 100) listData.pop(); + if (listData.length > (length || 100)) listData.pop(); } storage.setItem(list, listData); }); @@ -1355,7 +1355,7 @@ cb(checkEval, waitTime); } - getRule(callback) { + async getRule(callback) { if(noRuleTest) { this.curSiteRule = {}; this.curSiteRule.url = location.origin + location.pathname; @@ -1489,18 +1489,31 @@ return false; } + let singleUrl = location.origin + location.pathname; + async function checkNoMatchRules() { + let noMatch = await getListData("noMatch", href); + if (noMatch == 1) { + setRule({url: singleUrl, singleUrl: true}); + debug('No rule matched'); + return true; + } + return false; + } + if (rulesData.customFirst) { if (checkCustomRules()) return; if (checkHpRules()) return; + if (await checkNoMatchRules()) return; } else { if (checkHpRules()) return; + if (await checkNoMatchRules()) return; if (checkCustomRules()) return; } + for (let i in this.smartRules) { let rule = this.smartRules[i]; if (!rule || !rule.url) continue; if (rule.singleUrl) { - let singleUrl = location.origin + location.pathname; if (singleUrl == rule.url) { setRule(rule); callback = () => { @@ -1508,6 +1521,7 @@ self.smartRules = self.smartRules.filter(item => {return item && item.url != singleUrl}); if (self.curSiteRule.singleUrl) { self.smartRules.unshift(self.curSiteRule); + setListData("noMatch", location.href.slice(0, 500), 1, 50); } else { if (self.curSiteRule.url.length > 13) { self.addToHpRules(); @@ -1540,7 +1554,7 @@ if (checkRule(rule)) return; } if (end >= self.rules.length) { - setRule({url: location.origin + location.pathname, singleUrl: true}); + setRule({url: singleUrl, singleUrl: true}); return; } else { searchByTime(); From 879329be53994877d4550ef8b703d091fcbcda09 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 21:22:03 +0800 Subject: [PATCH 425/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 8dfd9068b10..a7b05be34c6 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4961,6 +4961,7 @@ storage.setItem("customRules", ruleParser.customRules); storage.setItem("hpRules", ruleParser.hpRules); storage.setItem("smartRules", []); + storage.setItem("noMatch", []); showTips(i18n("importSucc")); } else { rules = rules.split("\n"); @@ -5652,6 +5653,7 @@ editorChanged = false; storage.setItem("hpRules", []); storage.setItem("smartRules", []); + storage.setItem("noMatch", []); } customRules = editor.get(); if (!customRules) { @@ -5666,6 +5668,7 @@ if (customRulesInput.value != preCustom) { storage.setItem("hpRules", []); storage.setItem("smartRules", []); + storage.setItem("noMatch", []); } if (customRulesInput.value == "") { customRules = ""; @@ -5789,6 +5792,7 @@ if (!keepCache) { storage.setItem("hpRules", []); storage.setItem("smartRules", []); + storage.setItem("noMatch", []); } let allOk = true; function addNextRule() { From ca7844de8afd096a34b3de15e216c449f71b9cb4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 24 Nov 2023 21:29:18 +0800 Subject: [PATCH 426/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index a7b05be34c6..e25e4798af5 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1521,7 +1521,6 @@ self.smartRules = self.smartRules.filter(item => {return item && item.url != singleUrl}); if (self.curSiteRule.singleUrl) { self.smartRules.unshift(self.curSiteRule); - setListData("noMatch", location.href.slice(0, 500), 1, 50); } else { if (self.curSiteRule.url.length > 13) { self.addToHpRules(); @@ -1555,6 +1554,7 @@ } if (end >= self.rules.length) { setRule({url: singleUrl, singleUrl: true}); + setListData("noMatch", href, 1, 50); return; } else { searchByTime(); From b954239171a55aee3525dd5e76275115aee3a214 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 09:25:28 +0800 Subject: [PATCH 427/812] remove singleurl --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 152 ++++++++++++++++---------------------- 2 files changed, 65 insertions(+), 89 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 0141096aefe..7be694fbb58 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.101](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.102](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e25e4798af5..4f95a9be5da 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.101 +// @version 1.9.36.102 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1116,7 +1116,7 @@ } saveCurSiteRule() { - /*if(!this.curSiteRule || !this.curSiteRule.url || this.curSiteRule.singleUrl || this.curSiteRule.url.length<13)return; + /*if(!this.curSiteRule || !this.curSiteRule.url || this.curSiteRule.smart || this.curSiteRule.url.length<13)return; this.hpRules=this.hpRules.filter(item=>{return item&&item.url!=this.curSiteRule.url}); this.hpRules.unshift(this.curSiteRule); if(this.hpRules.length>30){ @@ -1355,11 +1355,21 @@ cb(checkEval, waitTime); } + findNoNext() { + if (!this.curSiteRule || !this.curSiteRule.smart || this.curSiteRule.nextLink == 0 || this.possibleRule) return; + let self = this; + self.curSiteRule.nextLink = 0; + self.smartRules = self.smartRules.filter(item => {return item && item.url != self.curSiteRule.url}); + self.smartRules.unshift(self.curSiteRule); + storage.setItem("smartRules", self.smartRules); + } + async getRule(callback) { + var href = location.href.slice(0, 500); if(noRuleTest) { this.curSiteRule = {}; - this.curSiteRule.url = location.origin + location.pathname; - this.curSiteRule.singleUrl = true; + this.curSiteRule.url = href; + this.curSiteRule.smart = true; callback(); return; } @@ -1368,8 +1378,7 @@ if (!this.curSiteRule.url) this.curSiteRule.url = "."; this.curSiteRule.isScript = true; } - var href = location.href.slice(0, 500); - if (this.curSiteRule && this.curSiteRule.url && !this.curSiteRule.singleUrl) { + if (this.curSiteRule && this.curSiteRule.url && !this.curSiteRule.smart) { let urlReg = new RegExp(this.curSiteRule.url, "i"); if (urlReg.test(href) && this.ruleMatch(this.curSiteRule)) { return callback(); @@ -1379,7 +1388,7 @@ let urlReg = new RegExp(this.possibleRule.url, "i"); if (urlReg.test(href) && this.ruleMatch(this.possibleRule)) { this.curSiteRule = this.possibleRule; - debug(this.curSiteRule, 'Match rule'); + debug(this.curSiteRule, 'Match'); return callback(); } } @@ -1395,12 +1404,18 @@ return callback(); } } - if (!r.singleUrl) { + if (r.from == 2) { + delete r.autoLoadNum; + delete r.history; + delete r.sideController; + if (r.pageBar == 0) delete r.pageBar; + } + if (!r.smart) { self.insert = null; self.curSiteRule = r; self.preSiteRule = r; - if (r.enable !== 0) debug(r, 'Match rule'); - } else if (!self.curSiteRule || !self.curSiteRule.singleUrl) self.curSiteRule = r; + if (r.enable !== 0) debug(r, 'Match'); + } else if (!self.curSiteRule || !self.curSiteRule.smart) self.curSiteRule = r; callback(); } @@ -1424,7 +1439,7 @@ }, parseInt(waitTime)); }; checkReady(); - debug(r, 'Wait for rule'); + debug(r, 'Wait for'); return true; } else if (r.wait) { let waitTime = 500, checkEval, maxCheckTimes = 50; @@ -1452,7 +1467,7 @@ }, parseInt(waitTime)); }; checkReady(); - debug(r, 'Wait for rule'); + debug(r, 'Wait for'); return true; } if (r.pinUrl) { @@ -1471,10 +1486,7 @@ function checkHpRules() { for (let i in self.hpRules) { let rule = self.hpRules[i]; - if (!rule || !rule.url) continue; - if (rule.singleUrl) { - continue; - } + if (!rule || !rule.url || rule.smart) continue; if (checkRule(rule)) return true; } return false; @@ -1489,49 +1501,20 @@ return false; } - let singleUrl = location.origin + location.pathname; - async function checkNoMatchRules() { - let noMatch = await getListData("noMatch", href); - if (noMatch == 1) { - setRule({url: singleUrl, singleUrl: true}); - debug('No rule matched'); - return true; - } - return false; - } - if (rulesData.customFirst) { if (checkCustomRules()) return; if (checkHpRules()) return; - if (await checkNoMatchRules()) return; } else { if (checkHpRules()) return; - if (await checkNoMatchRules()) return; if (checkCustomRules()) return; } for (let i in this.smartRules) { let rule = this.smartRules[i]; - if (!rule || !rule.url) continue; - if (rule.singleUrl) { - if (singleUrl == rule.url) { - setRule(rule); - callback = () => { - if (self.curSiteRule) { - self.smartRules = self.smartRules.filter(item => {return item && item.url != singleUrl}); - if (self.curSiteRule.singleUrl) { - self.smartRules.unshift(self.curSiteRule); - } else { - if (self.curSiteRule.url.length > 13) { - self.addToHpRules(); - } - } - storage.setItem("smartRules", self.smartRules); - } - }; - break; - } - continue; + if (!rule || !rule.url || !rule.smart) continue; + if (href == rule.url) { + setRule(rule); + return; } } let r = 0; @@ -1544,17 +1527,10 @@ end = end > self.rules.length ? self.rules.length : end; for (; r < end; r++) { let rule = self.rules[r]; - if (rule.from == 2) { - delete rule.autoLoadNum; - delete rule.history; - delete rule.sideController; - if (rule.pageBar == 0) delete rule.pageBar; - } if (checkRule(rule)) return; } if (end >= self.rules.length) { - setRule({url: singleUrl, singleUrl: true}); - setListData("noMatch", href, 1, 50); + setRule({url: href, smart: true}); return; } else { searchByTime(); @@ -1757,7 +1733,7 @@ pageElementSel = pageElementSel[nextIndex < pageElementSel.length ? nextIndex : 0]; } pageElement = getAllElements(pageElementSel, doc); - if (this.curSiteRule.singleUrl && (!pageElement || pageElement.length == 0)) { + if (this.curSiteRule.smart && (!pageElement || pageElement.length == 0)) { const childSelMatch = />\s*\*$/; const targetChild = childSelMatch.test(pageElementSel); if (targetChild) pageElementSel = pageElementSel.replace(childSelMatch, ""); @@ -1785,7 +1761,7 @@ } } } - if (this.curSiteRule.singleUrl && pageElement && pageElement.length && curWin && curWin != _unsafeWindow) { + if (this.curSiteRule.smart && pageElement && pageElement.length && curWin && curWin != _unsafeWindow) { let parent = pageElement[0].parentNode; let loading = parent.querySelector('[class*=loading]'); if (loading && loading.offsetParent && loading.offsetHeight > parent.offsetHeight>>2) { @@ -1796,7 +1772,7 @@ if (pageElement && pageElement.length === 1 && pageElement[0].style.display === 'none') { pageElement = [body]; } - if (this.curSiteRule.singleUrl && pageElement && pageElement.length > 0 && compareNodeName(pageElement[0], ["tr"])) { + if (this.curSiteRule.smart && pageElement && pageElement.length > 0 && compareNodeName(pageElement[0], ["tr"])) { let mainTr = this.insert.parentNode.querySelectorAll('tr'), mainTdNum = 0, newTdNum = 0; mainTr = mainTr[mainTr.length - 1]; [].forEach.call(mainTr.children, el => { @@ -1815,7 +1791,7 @@ return this.getPageElement(doc, curWin, dontFind); } } - if ((this.curSiteRule.singleUrl || !this.curSiteRule.pageElement) && (!pageElement || pageElement.length == 0) && curWin && !dontFind) { + if ((this.curSiteRule.smart || !this.curSiteRule.pageElement) && (!pageElement || pageElement.length == 0) && curWin && !dontFind) { if (!body) return null; let bodyHeight = parseInt(body.offsetHeight || body.scrollHeight); let curHeight = bodyHeight, curWidth = 0; @@ -2037,7 +2013,7 @@ } } /* - if (this.curSiteRule.singleUrl && pageElement && pageElement.length > 0) { + if (this.curSiteRule.smart && pageElement && pageElement.length > 0) { let targetEle = pageElement.length > 1 ? pageElement[0].parentNode : pageElement[0]; let video = targetEle.querySelector("video,iframe[id*=play],[id*=play]>iframe,iframe[src*=player],iframe[src*=m3u8]"); if (video && doc == document) { @@ -3122,7 +3098,7 @@ } else { this.docPageElement = null; let pageElement = this.getPageElement(document, _unsafeWindow); - if (this.curSiteRule.singleUrl && this.nextLinkHref == "#" && this.curSiteRule.pageElement === 'body') { + if (this.curSiteRule.smart && this.nextLinkHref == "#" && this.curSiteRule.pageElement === 'body') { debug("Stop as jsNext & whole body"); isPause = true; return null; @@ -3342,14 +3318,16 @@ return; } //若是再亂匹配就不緩存wedata,或者只在找完本地規則之後再考慮wedata的緩存 - if (self.curSiteRule.singleUrl) { + if (self.curSiteRule.smart) { delete self.curSiteRule.pageElement; - self.smartRules = self.smartRules.filter(item => {return item && item.url != self.curSiteRule.url}); - self.smartRules.unshift(self.curSiteRule); - if (self.smartRules.length > 100) { - self.smartRules.pop(); + if (!self.possibleRule) { + self.smartRules = self.smartRules.filter(item => {return item && item.url != self.curSiteRule.url}); + self.smartRules.unshift(self.curSiteRule); + if (self.smartRules.length > 100) { + self.smartRules.pop(); + } + storage.setItem("smartRules", self.smartRules); } - storage.setItem("smartRules", self.smartRules); } else if (self.curSiteRule && self.curSiteRule.url.length > 13) { self.addToHpRules(); } @@ -3389,12 +3367,12 @@ self.curSiteRule.pageNum = null; } } - if (self.curSiteRule.singleUrl && self.nextLinkHref == false && self.possibleRule) { + if (self.curSiteRule.smart && self.nextLinkHref == false && self.possibleRule) { let urlReg = new RegExp(self.possibleRule.url, "i"); function checkPossible () { if (self.possibleCheck++ < 3) { setTimeout(() => { - if (self.curSiteRule.singleUrl) { + if (self.curSiteRule.smart) { var href = location.href.slice(0, 500); if (urlReg.test(href) && self.ruleMatch(self.possibleRule)) { self.initPage(() => {}); @@ -3535,7 +3513,7 @@ } } } - if (curPage == 1 && !tried && !nextLink && this.curSiteRule.singleUrl && this.curSiteRule.pageElement && this.curSiteRule.action != 0) { + if (curPage == 1 && !tried && !nextLink && this.curSiteRule.smart && this.curSiteRule.pageElement && this.curSiteRule.action != 0) { this.curSiteRule.action = 1; this.curUrl = location.href; isLoading = false; @@ -4480,7 +4458,7 @@ isPause = true; } storage.setItem("customRules", ruleParser.customRules); - if (ruleParser.hpRules && ruleParser.curSiteRule && !ruleParser.curSiteRule.singleUrl) { + if (ruleParser.hpRules && ruleParser.curSiteRule && !ruleParser.curSiteRule.smart) { ruleParser.addToHpRules(true); } if (window.confirm(i18n("reloadPage"))) { @@ -4632,7 +4610,7 @@ } } if (!this.editTemp) { - if (ruleParser.curSiteRule.url && !ruleParser.curSiteRule.singleUrl) { + if (ruleParser.curSiteRule.url && !ruleParser.curSiteRule.smart) { this.editTemp = ruleParser.curSiteRule; } else { this.editTemp = { @@ -4961,7 +4939,6 @@ storage.setItem("customRules", ruleParser.customRules); storage.setItem("hpRules", ruleParser.hpRules); storage.setItem("smartRules", []); - storage.setItem("noMatch", []); showTips(i18n("importSucc")); } else { rules = rules.split("\n"); @@ -5653,7 +5630,6 @@ editorChanged = false; storage.setItem("hpRules", []); storage.setItem("smartRules", []); - storage.setItem("noMatch", []); } customRules = editor.get(); if (!customRules) { @@ -5668,7 +5644,6 @@ if (customRulesInput.value != preCustom) { storage.setItem("hpRules", []); storage.setItem("smartRules", []); - storage.setItem("noMatch", []); } if (customRulesInput.value == "") { customRules = ""; @@ -5792,7 +5767,6 @@ if (!keepCache) { storage.setItem("hpRules", []); storage.setItem("smartRules", []); - storage.setItem("noMatch", []); } let allOk = true; function addNextRule() { @@ -6216,7 +6190,7 @@ debug(res.status, "Error status"); return callback(false); } - if (inCors && (!pageElement || pageElement.length == 0) && ruleParser.curSiteRule.singleUrl) { + if (inCors && (!pageElement || pageElement.length == 0) && ruleParser.curSiteRule.smart) { let article = doc.querySelectorAll(mainSel); if (article && article.length == 1) { article = article[0]; @@ -6239,7 +6213,7 @@ } else isLoading = false; }); } else ruleParser.curSiteRule.action = 0; - } else if ((ruleParser.curSiteRule.singleUrl || curPage == 1) && !inCors) { + } else if ((ruleParser.curSiteRule.smart || curPage == 1) && !inCors) { ruleParser.curSiteRule.action = 1; requestFromIframe(url, (doc, eles) => { if (eles) { @@ -6742,7 +6716,7 @@ document.removeEventListener('pagetual.next', pagetualNextHandler, false); document.removeEventListener('keyup', keyupHandler); let loadmoreBtn, loadingMore = true, lastScroll = 0, checkLoadMoreTimes = 0; - if (ruleParser.curSiteRule.singleUrl) { + if (ruleParser.curSiteRule.smart) { loadingMore = false; } else if (ruleParser.curSiteRule.loadMore) { loadingMore = false; @@ -6793,7 +6767,7 @@ } } else { loadingMore = true; - if (!ruleParser.curSiteRule.singleUrl || checkLoadMoreTimes++ < 3) { + if (!ruleParser.curSiteRule.smart || checkLoadMoreTimes++ < 3) { setTimeout(() => {loadingMore = false}, 200); } } @@ -6988,7 +6962,7 @@ const defaultLoadmoreSel = ".loadMore,.LoadMore,[class*='load-more'],button.show_more,.button-show-more,button[data-testid='more-results-button'],#btn_preview_remain,.view-more-btn"; function getLoadMore(doc, loadmoreBtn) { if (!loadmoreBtn || !getBody(doc).contains(loadmoreBtn) || /less/.test(loadmoreBtn.innerText)) loadmoreBtn = null; - if (!ruleParser.curSiteRule.singleUrl && !ruleParser.curSiteRule.loadMore) return null; + if (!ruleParser.curSiteRule.smart && !ruleParser.curSiteRule.loadMore) return null; if (loadmoreBtn) return loadmoreBtn; let btnSel = ruleParser.curSiteRule.loadMore || defaultLoadmoreSel; if (btnSel) { @@ -7699,7 +7673,7 @@ } else { pageEle = pageEle[0]; } - if (ruleParser.curSiteRule.singleUrl && orgContent != pageEle.innerHTML) { + if (ruleParser.curSiteRule.smart && orgContent != pageEle.innerHTML) { orgContent = pageEle.innerHTML; if (waitTimes-- > 0) { setTimeout(() => { @@ -7782,7 +7756,7 @@ }, waitTime); } else if (changed) { checkTimes = 0; - if (orgContent == preContent && (ruleParser.curSiteRule.singleUrl || ruleParser.curSiteRule.stopSame)) { + if (orgContent == preContent && (ruleParser.curSiteRule.smart || ruleParser.curSiteRule.stopSame)) { returnFalse("Stop as same content"); } else { orgContent = preContent; @@ -7905,7 +7879,7 @@ targetY = -1; } let curScroll = getBody(document).scrollTop || document.documentElement.scrollTop; - if (ruleParser.curSiteRule.singleUrl || forceState === 2) { + if (ruleParser.curSiteRule.smart || forceState === 2) { let height = (getBody(frameDoc).scrollHeight || getBody(frameDoc).offsetHeight || 500); if (!iframe.style.height || height - parseInt(iframe.style.height) > window.innerHeight) { iframe.style.height = height + "px"; @@ -8003,7 +7977,7 @@ let curIframe = document.createElement('iframe'), iframeDoc, pageElement = null, inAction = true; let loadedHandler = () => { let getPageEle = () => { - if (ruleParser.curSiteRule.singleUrl) { + if (ruleParser.curSiteRule.smart) { return null; } else { if (!pageElement || pageElement.length === 0 || !pageElement[0].offsetParent) { @@ -8205,6 +8179,8 @@ setTimeout(() => {isLoading = false}, 500); } else if (tryTimes++ < 3) { setTimeout(() => {isLoading = false}, 1000); + } else { + ruleParser.findNoNext(); } } else if (rulesData.lastPageTips && !showedLastPageTips) { showTips(i18n("lastPage"), "", 800); @@ -8234,7 +8210,7 @@ } } isLoading = true; - if (curPage != 1 || !isJs || !ruleParser.curSiteRule.singleUrl) { + if (curPage != 1 || !isJs || !ruleParser.curSiteRule.smart) { ruleParser.beginLoading(loadingDiv); } let sleep = ruleParser.curSiteRule.sleep || 0; From 623d11b51318e51f6173230dfeafaa91fedb0009 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 09:46:02 +0800 Subject: [PATCH 428/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 34 ++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 2d4196dc149..cfc9d553bd0 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.39 +// @version 1.7.40 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -6404,21 +6404,23 @@ inSearchEngine() { if (!this.currentType || !currentSite || inIframe) return; - if (!/#p{/.test(currentSite.url) || currentSite.keywords) { - this.appendBar(); - if (this.currentType.classList.contains("search-jumper-needInPage")) { - this.bar.classList.add("search-jumper-isTargetPage"); - } else if (this.currentType.classList.contains("search-jumper-targetAll") || - this.currentType.classList.contains("search-jumper-targetImg") || - this.currentType.classList.contains("search-jumper-targetAudio") || - this.currentType.classList.contains("search-jumper-targetVideo") || - this.currentType.classList.contains("search-jumper-targetLink") || - this.currentType.classList.contains("search-jumper-targetPage")) { - return; - } - if (!searchData.prefConfig.hideOnSearchEngine) { - this.bar.style.display = ""; - this.initPos(); + if (!/sidesearch=(1|true)$/i.test(location.search)) { + if (!/#p{/.test(currentSite.url) || currentSite.keywords) { + this.appendBar(); + if (this.currentType.classList.contains("search-jumper-needInPage")) { + this.bar.classList.add("search-jumper-isTargetPage"); + } else if (this.currentType.classList.contains("search-jumper-targetAll") || + this.currentType.classList.contains("search-jumper-targetImg") || + this.currentType.classList.contains("search-jumper-targetAudio") || + this.currentType.classList.contains("search-jumper-targetVideo") || + this.currentType.classList.contains("search-jumper-targetLink") || + this.currentType.classList.contains("search-jumper-targetPage")) { + return; + } + if (!searchData.prefConfig.hideOnSearchEngine) { + this.bar.style.display = ""; + this.initPos(); + } } } this.insertHistory(this.currentType, true); From 5e99cf44f991a5433afa752b43c7d8922424ccc9 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 25 Nov 2023 01:50:05 +0000 Subject: [PATCH 429/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 5ff590949d3..31a49111bf7 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,34 @@ [ +{ + "resource_url": "http://wedata.net/items/86189", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(concat(' ',@class,' '),' itemcolmn ')]/div", + "nextLink": "//a[contains(concat(' ',@class,' '),' next ')]", + "url": "^https://netmall\\.hardoff\\.co\\.jp/cate/", + "exampleUrl": "https://netmall.hardoff.co.jp/cate/00010012/?q=%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "HARD OFF 通販 netmall", + "created_at": "2023-11-24T18:38:36+09:00", + "updated_at": "2023-11-24T18:38:36+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86188", + "data": { + "insertBefore": "", + "pageElement": "//ul[@class='store_list2']/li", + "nextLink": "//a[@rel='next']", + "url": "^https://www\\.hardoff\\.co\\.jp/shop/list/", + "exampleUrl": "https://www.hardoff.co.jp/shop/list/?pg=1&a=13&w=&t1=on&t3=on&t8=on&t5=on&t4=on&t6=on&t2=on&t9=on" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "HARD OFF 店舗", + "created_at": "2023-11-24T18:33:09+09:00", + "updated_at": "2023-11-24T18:33:09+09:00" +}, { "resource_url": "http://wedata.net/items/86187", "data": { From dbfcba341bfb0f1a77fd671d6189afb88ca1db7f Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 10:42:51 +0800 Subject: [PATCH 430/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 4f95a9be5da..3ebc15f35b5 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -890,6 +890,7 @@ const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; + var tryTimes = 0, showedLastPageTips = false; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; @@ -3279,6 +3280,7 @@ }, 100); curPage = 1; urlChanged = false; + tryTimes = 0; this.clearAddedElements(); this.insert = null; this.visibilityItems = []; @@ -7497,7 +7499,7 @@ } } } catch(e) {} - let tryTimes = 0; + let pageEleTryTimes = 0; async function checkIframe() { if (urlChanged || isPause) { return callback(false, false); @@ -7506,7 +7508,7 @@ let doc = iframe.contentDocument || iframe.contentWindow.document; let base = doc.querySelector("base"); ruleParser.basePath = base ? base.href : url; - let eles = ruleParser.getPageElement(doc, iframe.contentWindow, tryTimes < 25); + let eles = ruleParser.getPageElement(doc, iframe.contentWindow, pageEleTryTimes < 25); if (checkEval && !checkEval(doc)) { setTimeout(() => { checkIframe(); @@ -7515,7 +7517,7 @@ } else if (eles && eles.length > 0) { await ruleParser.hookUrl(doc); callback(doc, eles); - } else if (tryTimes++ < 100) { + } else if (pageEleTryTimes++ < 100) { getBody(doc).scrollTop = 9999999; doc.documentElement.scrollTop = 9999999; setTimeout(() => { @@ -8153,7 +8155,6 @@ } } - var tryTimes = 0, showedLastPageTips = false; async function nextPage() { if (typeof ruleParser.curSiteRule.manualMode == 'undefined' ? rulesData.manualMode : ruleParser.curSiteRule.manualMode) return; if (clickMode) return; From fed1885b02fa4926095fa28f85f905129685a0f2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 12:19:42 +0800 Subject: [PATCH 431/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 3ebc15f35b5..c897a0b862e 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.102 +// @version 1.9.36.103 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2235,7 +2235,7 @@ afterStr = ""; } let curPage = doc, i, cur, jsNext; - let next1, next2, next3, next4, nextJs1, nextJs2, nextJs3; + let next1, next2, next3, next4, nextJs1, nextJs2; let selectorList = [ ".page-next>a", "a.next_page", @@ -2439,13 +2439,9 @@ } } } - if (!next3) { + if (!next3 && !isJs) { if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(aTag.textContent) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) { - if (isJs) { - if (!nextJs3) nextJs3 = aTag; - } else { - next3 = aTag; - } + next3 = aTag; } } } @@ -2514,13 +2510,10 @@ if (next3) { next3 = this.verifyNext(next3, doc); } - if (nextJs3) { - nextJs3 = this.verifyNext(nextJs3, doc); - } } if (!next) next = next1 || next4 || next3 || next2; if (!next) { - next = jsNext || nextJs1 || nextJs3 || nextJs2; + next = jsNext || nextJs1 || nextJs2; if (next && next.parentNode.className && next.parentNode.className.indexOf && next.parentNode.className.indexOf('tab') != -1) next = null; } if (next && next.classList && (next.classList.contains("results-more") || next.classList.contains("no"))) next = null; @@ -7680,7 +7673,7 @@ if (waitTimes-- > 0) { setTimeout(() => { checkPage(); - }, waitTime); + }, 500); return; } } @@ -7755,7 +7748,7 @@ preContent = checkInner; setTimeout(() => { checkPage(); - }, waitTime); + }, 500); } else if (changed) { checkTimes = 0; if (orgContent == preContent && (ruleParser.curSiteRule.smart || ruleParser.curSiteRule.stopSame)) { From 3fa937a5b9ae27d53f32c6a80efaf61ef4438df5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 12:19:56 +0800 Subject: [PATCH 432/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 7be694fbb58..bb0615e59cc 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.102](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.103](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From e3b353552162d23ae9218deb27cf064012c54e7e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 15:53:42 +0800 Subject: [PATCH 433/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index cfc9d553bd0..2c7eff6999f 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.40 +// @version 1.7.41 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -8969,17 +8969,20 @@ if (cache) { cache = parseInt(cache[1]); url = url.replace(cacheReg, ""); - } else cache = 86400; - if (cache) { - let tipsIndex = tipsStorage.findIndex(t => t.url == url); - if (tipsIndex != -1) { - let tipsTemp = tipsStorage[tipsIndex]; - if (Date.now()/1000 - tipsTemp.time < cache) { - tipsResult = tipsTemp.data; - } else { - tipsStorage.splice(tipsIndex, 1); + } else cache = 7200; + let now = Date.now() / 1000; + let newTipsStorage = tipsStorage.filter(t => { + if (now < t.time) { + if (!tipsResult && t.url == url) { + tipsResult = t.data; } + return true; } + return false; + }); + if (newTipsStorage.length != tipsStorage.length) { + tipsStorage = newTipsStorage; + storage.setItem("tipsStorage", tipsStorage); } let allValue = []; @@ -9154,7 +9157,7 @@ storeData = tipsResult; } if (!failed) { - tipsStorage.push({url: url, data: storeData, time: Date.now()/1000}); + tipsStorage.push({url: url, data: storeData, time: Date.now() / 1000 + cache}); if (tipsStorage.length > 50) tipsStorage.shift(); storage.setItem("tipsStorage", tipsStorage); } From 26212204a6cfbb0eec05eb5acd94dd344ed58452 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 17:10:32 +0800 Subject: [PATCH 434/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 85 +++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 43 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index c897a0b862e..f679ce3a2b8 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.103 +// @version 1.9.36.104 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2185,8 +2185,8 @@ sideController.remove(); } - linkHasNoHref(link) { - return !link.href || !link.href.replace || this.hrefIsJs(link.href); + linkHasHref(link) { + return link.href && link.href.replace && !this.hrefIsJs(link.href); } hrefIsJs(href) { @@ -2203,6 +2203,33 @@ return null; } + verifyElement(ele) { + let verifyHandler = e => { + if (e.style.display == "none" || e.getAttribute("aria-disabled") == "true") { + return false; + } + if (e.className) { + if (/slick|slide|gallery/i.test(e.className)) { + return false; + } else if (e.classList) { + if (e.classList.contains('disabled') || e.classList.contains('active')) { + return false; + } + } + } + let ariaLabel = e.getAttribute("aria-label"); + if (ariaLabel && /slick|slide|gallery/i.test(ariaLabel)) return false; + return true; + }; + if (!ele) return false; + let i = 0; + while (ele && i++ < 3) { + if (!verifyHandler(ele)) return false; + ele = ele.parentNode; + } + return true; + } + async getPage(doc, exist) { if (document.documentElement.className.indexOf('discourse') != -1) return {}; let body = getBody(doc); @@ -2283,17 +2310,16 @@ if (!next) { await sleep(1); let nexts = body.querySelectorAll("a.next"); + const prevReg = /^\s*([上前首尾]|previous)/i; for (i = 0; i < nexts.length; i++) { - if (nexts[i].style.display !== "none" && - nexts[i].parentNode.style.display !== "none" && - !this.linkHasNoHref(nexts[i]) && - !/^\s*([上前首尾]|previous)/i.test(nexts[i].innerText.trim())) { - next = nexts[i]; + let n = nexts[i]; + if (this.verifyElement(n) && this.linkHasHref(n) && !prevReg.test(n.innerText.trim())) { + next = n; break; } } } - if (next && this.linkHasNoHref(next)) { + if (next && !this.linkHasHref(next)) { jsNext = next; next = null; } @@ -2302,7 +2328,7 @@ next = body.querySelectorAll("[aria-label='Next page']"); if (next && next.length == 1) { next = next[0]; - if (this.linkHasNoHref(next)) { + if (!this.linkHasHref(next)) { if (!jsNext) jsNext = next; next = null; } @@ -2310,15 +2336,8 @@ next = null; } } - if (jsNext) { - if (jsNext.className) { - if (/slick|slide|gallery/i.test(jsNext.className)) jsNext = null; - else if (jsNext.classList && jsNext.classList.contains('disabled')) jsNext = null; - } - if (jsNext) { - let ariaLabel = jsNext.getAttribute("aria-label"); - if (ariaLabel && /slick|slide|gallery/i.test(ariaLabel)) jsNext = null; - } + if (jsNext && !this.verifyElement(jsNext)) { + jsNext = null; } if (next && nextTextReg2.test(next.innerText.trim())) { next2 = next; @@ -2367,7 +2386,7 @@ break; } } - if (next && this.linkHasNoHref(next)) { + if (next && !this.linkHasHref(next)) { if (!jsNext) jsNext = next; next = null; } @@ -2381,40 +2400,20 @@ await sleep(1); } let aTag = aTags[i]; - if (aTag.style.display == "none") continue; let innerText = (aTag.title || aTag.innerText || aTag.value || ''); if (innerText) { if (innerText == "§") continue; innerText = innerText.trim(); if (innerText.length > 80) continue; } - if (aTag.className) { - if (aTag.classList && aTag.classList.contains('disabled')) continue; - if (/slick|slide|gallery/i.test(aTag.className)) continue; - } + if (!this.verifyElement(aTag)) continue; if (aTag.dataset && aTag.dataset.preview) continue; - let ariaLabel = aTag.getAttribute("aria-label"); - if (ariaLabel && /slick|slide|gallery/i.test(ariaLabel)) continue; - let availableHref = aTag.href && aTag.href.length < 250 && /^http/.test(aTag.href); if (availableHref && /next\-?(page)?$/i.test(aTag.href)) continue; - - if (aTag.parentNode.className) { - if (/slick|slide|gallery/i.test(aTag.parentNode.className)) { - continue; - } - if (aTag.parentNode.classList.contains('disabled')) continue; - if (aTag.parentNode.classList.contains('active')) continue; - } - if (aTag.parentNode.parentNode) { - if (/slick|slide|gallery/i.test(aTag.parentNode.parentNode.className)) continue; - if (aTag.parentNode.parentNode.parentNode && /slick|slide|gallery/i.test(aTag.parentNode.parentNode.parentNode.className)) continue; - } if (compareNodeName(aTag.parentNode, ["blockquote"])) continue; - if (aTag.previousElementSibling && /\b(play|volume)\b/.test(aTag.previousElementSibling.className)) continue; if (aTag.nextElementSibling && /\b(play|volume)\b/.test(aTag.nextElementSibling.className)) continue; - let isJs = this.linkHasNoHref(aTag); + let isJs = !this.linkHasHref(aTag); if (exist && isJs && !aTag.offsetParent) continue; if (innerText) { innerText = innerText.split(/\n/)[0].replace(/ /g, ''); @@ -2775,7 +2774,7 @@ parent = parent.parentNode; } if (doc == document) { - if (this.linkHasNoHref(nextLink)) { + if (!this.linkHasHref(nextLink)) { if (clickedSth || !isVisible(nextLink, _unsafeWindow)) { this.nextLinkHref = false; return null; From 41200ea9a30540b377ca9d4634fbaf41c352ab8b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 17:10:45 +0800 Subject: [PATCH 435/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index bb0615e59cc..79f12528adc 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.103](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.104](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From d252b29914349fa8b68de3a5c2dc6c3ff90128ee Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 17:23:31 +0800 Subject: [PATCH 436/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index f5ab7c2e82e..c27d451ae2b 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8832,7 +8832,6 @@ }, { "name": "小说站1", - "type": 0, "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]", "pageElement": "//div[@id='content']|//div[@id='chaptercontent']|//div[@id='BookText']", "url": "\\d+/[\\d_-]+\\.html?$", @@ -8840,7 +8839,6 @@ }, { "name": "小说站2", - "type": 0, "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]", "pageElement": "//div[@class='content']|//div[@class='chaptercontent']", "url": "\\d+/[\\d_-]+\\.html?$", From 1a045d371fe78b035cce4b2c2f1585e6715681b6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 17:49:47 +0800 Subject: [PATCH 437/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index f679ce3a2b8..c260e6372ab 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.104 +// @version 1.9.36.106 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -872,7 +872,7 @@ storage.getItem(list, listData => { if (!listData) listData = []; listData = listData.filter(data => data && data.k != key); - if (value) { + if (value !== "") { listData.unshift({k: key, v: value}); if (listData.length > (length || 100)) listData.pop(); } @@ -4362,7 +4362,9 @@ } setListData("forceState", location.host, forceState); self.close(); - location.reload(); + setTimeout(() => { + location.reload(); + }, 500); }; forceStateIframe.parentNode.addEventListener("mousedown", clickRadio); forceStateDynamic.parentNode.addEventListener("mousedown", clickRadio); @@ -6078,7 +6080,11 @@ sideController.remove(); } setListData("forceState", location.host, forceState); - if (!ruleParser.curSiteRule.url) location.reload(); + if (!ruleParser.curSiteRule.url) { + setTimeout(() => { + location.reload(); + }, 500); + } }); _GM_registerMenuCommand(i18n("toggleAutoScroll"), () => { autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; @@ -6253,7 +6259,9 @@ let _state = ruleParser.curSiteRule.action > 0 || confirm(i18n("forceAllBody")) ? 2 : 3; setListData("forceState", location.host, _state); } - location.reload(); + setTimeout(() => { + location.reload(); + }, 500); }); } _GM_registerMenuCommand(i18n("loadNow"), () => { @@ -6856,7 +6864,9 @@ } if (!ruleParser.curSiteRule.url) { setListData("forceState", location.host, forceState); - location.reload(); + setTimeout(() => { + location.reload(); + }, 500); } } }; From 2fb0eb6283c9c4ad753f8d94820f00f0b7822cc0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 17:50:00 +0800 Subject: [PATCH 438/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 79f12528adc..1a212110e42 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.104](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.106](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 3ba600153acd6d1aaf4415d1ed9e75d5cf15dcc3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 25 Nov 2023 17:54:09 +0800 Subject: [PATCH 439/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index c260e6372ab..fdb5ab92674 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6187,7 +6187,7 @@ } let pageElement = ruleParser.getPageElement(doc); if ((!pageElement || pageElement.length == 0) && res.status >= 400) { - debug(res.status, "Error status"); + debug(res.status + " " + url, "Error status"); return callback(false); } if (inCors && (!pageElement || pageElement.length == 0) && ruleParser.curSiteRule.smart) { From 6e506afd5e326e98ca84d4b72f1b81ee8e59c45c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 09:26:41 +0800 Subject: [PATCH 440/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 72d481128d6..7ba83511b0f 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -47,7 +47,7 @@ // @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1269250 // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js -// @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js +// @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js // @match *://*/* // @exclude http://www.toodledo.com/tasks/* // @exclude http*://maps.google.com*/* From 60c94d57c1ec052ed3acab00514b4b0ec6264134 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 09:27:12 +0800 Subject: [PATCH 441/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 2c7eff6999f..339b2b4eaba 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -44,7 +44,7 @@ // @supportURL https://github.com/hoothin/SearchJumper/issues // @homepage https://github.com/hoothin/SearchJumper // @downloadURL https://greasyfork.org/scripts/445274-searchjumper/code/SearchJumper.user.js -// @updateURL https://greasyfork.org/scripts/445274-searchjumper/code/SearchJumper.user.js +// @updateURL https://greasyfork.org/scripts/445274-searchjumper/code/SearchJumper.meta.js // @connect global.bing.com // @connect suggestqueries.google.com // @connect api.bing.com From e63890b1ae71b9478ae07fbac0cc3cd44ec23738 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 17:06:54 +0800 Subject: [PATCH 442/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 69 ++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 26 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index fdb5ab92674..f6afcd88db1 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.106 +// @version 1.9.36.107 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -45,8 +45,8 @@ // @grant GM.deleteValue // @grant GM.info // @grant GM.setClipboard -// @downloadURL https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js -// @updateURL https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js +// @downloadURL https://update.greasyfork.org/scripts/438684/Pagetual.user.js +// @updateURL https://update.greasyfork.org/scripts/438684/Pagetual.meta.js // @supportURL https://github.com/hoothin/UserScripts/issues // @connect wedata.net // @connect githubusercontent.com @@ -3007,8 +3007,22 @@ return true; } + preloadImageHandler() { + if (this.preloadingImage || !this.unCheckedImgs.length) return; + this.preloadingImage = true; + setTimeout(() => { + this.preloadingImage = false; + this.preloadImageHandler(); + }, 10); + let iSrc = this.unCheckedImgs.shift(); + let img = document.createElement('img'); + img.src = iSrc; + this.preloadDiv.appendChild(img); + } + preload() { if (!rulesData.preload) return; + if (this.curSiteRule.preload === 0) return; if (!this.nextLinkHref || this.nextLinkHref == "#") return; let self = this, url = this.nextLinkHref; let postParams = url.match(/#p{(.*)}$/); @@ -3033,25 +3047,14 @@ doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = createHTML(res.response); var body = getBody(doc); - if (body && body.firstChild) { - self.lazyImgAction(body.children, doc); - } if (!self.preloadDiv) { self.preloadDiv = document.createElement('div'); self.preloadDiv.id = "pagetual-preload"; self.preloadDiv.style.cssText = 'display:none!important;'; getBody(document).appendChild(self.preloadDiv); self.checkedImgs = {}; + self.unCheckedImgs = []; } - [].forEach.call(doc.images, i => { - let iSrc = i.src; - if (iSrc && !self.checkedImgs[iSrc]) { - self.checkedImgs[iSrc] = true; - let img = document.createElement('img'); - img.src = iSrc; - self.preloadDiv.appendChild(img); - } - }); let code = self.curSiteRule.preloadImages; if (code) { let imgSrcArr = new Function("doc", '"use strict";' + code)(doc); @@ -3059,12 +3062,23 @@ imgSrcArr.forEach(imgSrc => { if (imgSrc && !self.checkedImgs[imgSrc]) { self.checkedImgs[imgSrc] = true; - let img = document.createElement('img'); - img.src = imgSrc; - self.preloadDiv.appendChild(img); + self.unCheckedImgs.push(imgSrc); } }); } + self.preloadImageHandler(); + } else if (code !== 0 && code !== false) { + if (body && body.firstChild) { + self.lazyImgAction(body.children, doc); + } + [].forEach.call(doc.images, i => { + let iSrc = i.src; + if (iSrc && !self.checkedImgs[iSrc]) { + self.checkedImgs[iSrc] = true; + self.unCheckedImgs.push(iSrc); + } + }); + self.preloadImageHandler(); } } catch(e) { @@ -5433,7 +5447,7 @@ configTbody.style.display = "inline-table"; configTable.appendChild(configTbody); configCon.insertBefore(configTable, insertPos); - function createCheckbox(innerText, val, tag, parentCheck, otherType) { + function createCheckbox(innerText, val, tag, parentCheck, otherType, alwaysShow) { if (typeof val == 'undefined') val = ""; let title = document.createElement(tag || "h3"); title.innerHTML = innerText; @@ -5454,12 +5468,13 @@ input.style.width = "30px"; input.style.height = "20px"; input.style.float = "left"; - input.style.margin = "5px"; + input.style.margin = "0 2px"; input.value = val; input.checked = val; let td = document.createElement("td"); td.appendChild(input); if (parentCheck) { + title.appendChild(input); title.style.margin = "0"; td.appendChild(title); let parent = parentCheck.parentNode.nextElementSibling; @@ -5469,12 +5484,14 @@ parent.appendChild(tr); } tr.appendChild(td); - if (!parentCheck.checked) { - td.style.display = "none"; + if (!alwaysShow) { + if (!parentCheck.checked) { + td.style.display = "none"; + } + parentCheck.addEventListener("click", e => { + td.style.display = parentCheck.checked ? "" : "none"; + }); } - parentCheck.addEventListener("click", e => { - td.style.display = parentCheck.checked ? "" : "none"; - }); } else { let tr = document.createElement("tr"); tr.appendChild(td); @@ -5506,7 +5523,7 @@ let initRunInput = createCheckbox(i18n("initRun"), rulesData.initRun != false); let autoLoadNumInput = createCheckbox(i18n("autoLoadNum"), rulesData.autoLoadNum, "h4", initRunInput, "number"); let preloadInput = createCheckbox(i18n("preload"), rulesData.preload != false); - let rateInput = createCheckbox(i18n("turnRate"), rulesData.rate, "h4", preloadInput, "number"); + let rateInput = createCheckbox(i18n("turnRate"), rulesData.rate, "h4", preloadInput, "number", true); let dbClick2StopInput = createCheckbox(i18n("dbClick2Stop"), rulesData.dbClick2Stop); let manualModeInput = createCheckbox(i18n("manualMode"), rulesData.manualMode); let clickModeInput = createCheckbox(i18n("clickMode"), rulesData.clickMode); From ea740573c1da498e6665ab26078cc3fbb33bd3fb Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 17:07:07 +0800 Subject: [PATCH 443/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 1a212110e42..53c6f708a70 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.106](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.107](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From 02ecfe796dc13fdf8b13c3e0dffaeb713b75709c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 18:26:46 +0800 Subject: [PATCH 444/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 339b2b4eaba..d6364e89ac9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.41 +// @version 1.7.42 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2355,7 +2355,7 @@ .search-jumper-input input, .search-jumper-input textarea { background-color: #212022; - color: white; + color: #adadad; border: none; font-size: 16px; height: 35px; @@ -2389,6 +2389,7 @@ #filterSites>input:focus, #filterSites>textarea:focus { width: calc(400% - 20px); + color: white; } .search-jumper-input * { box-sizing: border-box; @@ -4473,7 +4474,7 @@ highlightPopup(spannode, word) { let self = this; spannode.addEventListener("mouseenter", e => { - if (targetElement != spannode || !searchBar.funcKeyCall) { + if (targetElement != spannode || !self.funcKeyCall) { targetElement = spannode; let targetShowTipsSite; if (word.showTips) { @@ -8904,13 +8905,13 @@ } }; let showTipsHandler = async target => { + if (!target) return; tipsData = null; clearTimeout(self.requestShowTipsTimer); self.tipsPos(target, tipsStr); if (showTips) { let url = await getUrl(); if (!url) return; - targetElement = null; if (lastUrl === url) { if (anylizing) { self.tipsPos(target, ele.dataset.name + "
Loading..."); @@ -10898,7 +10899,6 @@ waitForClick = false; }, 300); let _t = e.target; - targetElement = _t; if (currentSite && _t) { if (_t.nodeName && _t.nodeName.toLowerCase && _t.nodeName.toLowerCase() == 'a') { searchBar.updateCacheKeywords(); From 86f20411dfb28148065a484e561435f6353b7851 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 19:16:08 +0800 Subject: [PATCH 445/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 7ba83511b0f..5b7c3e40975 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.24.3 +// @version 2023.11.26.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -13789,6 +13789,9 @@ ImgOps | https://imgops.com/#b#`; collection.save(); },500); },true); + eleMaps['head-command-drop-list-collect'].addEventListener('keydown',function(e){ + e.stopPropagation(); + },true); var slideShow={ @@ -14399,7 +14402,7 @@ ImgOps | https://imgops.com/#b#`; }; container.addEventListener('keyup',keyUpHandler,false); - },true); + }); var imgDraged; @@ -16184,7 +16187,6 @@ ImgOps | https://imgops.com/#b#`; }; }, keyDownListener:function(e){ - e.stopPropagation(); switch(e.keyCode){ case 27: if(prefs.imgWindow.close.escKey){ From 964b159a5b12e78815b1e1b39c1618e14386506f Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 19:26:46 +0800 Subject: [PATCH 446/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 42 ++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 5b7c3e40975..69ba7a4702a 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.26.1 +// @version 2023.11.26.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -23279,14 +23279,44 @@ ImgOps | https://imgops.com/#b#`; return gallery; } + function getActiveElement(root) { + const activeEl = root.activeElement; + if (!activeEl) { + return null; + } + if (activeEl.shadowRoot) { + return getActiveElement(activeEl.shadowRoot); + } else { + return activeEl; + } + } + + function inputActive(doc) { + let activeEl = getActiveElement(doc); + if (activeEl && + ((/INPUT|TEXTAREA/i.test(activeEl.nodeName) && + activeEl.getAttribute("aria-readonly") != "true" + ) || + activeEl.contentEditable == 'true' + ) + ) { + return true; + } else { + while (activeEl && activeEl.nodeName) { + if (activeEl.contentEditable == 'true') return true; + if (activeEl.nodeName.toUpperCase() == 'BODY') { + break; + } + activeEl = activeEl.parentNode; + } + } + return false; + } + function keydown(event) { if (ImgWindowC.showing) return; if (gallery && gallery.shown) return; - if (document.activeElement && - (document.activeElement.nodeName == 'INPUT' || - document.activeElement.nodeName == 'INPUT' || - document.activeElement.nodeName == 'TEXTAREA' || - document.activeElement.contentEditable == 'true')) { + if (inputActive(document)) { return; } var key = event.key; From 15cb45f2add46f7ada8ce95c2c34fa898118fae9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 22:20:59 +0800 Subject: [PATCH 447/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 59 +++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index d6364e89ac9..8650816fb66 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.42 +// @version 1.7.43 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -11780,7 +11780,7 @@ } } - var dragRoundFrame, dragCon, dragSiteCurSpans, dragSiteHistorySpans, dragEndHandler, dragenterHandler, openAllTimer; + var dragRoundFrame, dragCon, dragSiteCurSpans, dragSiteHistorySpans, dragEndHandler, dragenterHandler, openAllTimer, dragScaleWidth, dragScaleHeight, zoomDrag; function showDragSearch(left, top) { if (!searchBar || !searchBar.bar) return; let removeFrame = () => { @@ -11794,7 +11794,11 @@ draging = false; clearTimeout(openAllTimer); }; - let zoomDrag = (searchData.prefConfig.zoomDrag || 100) / 100; + if (!dragScaleWidth && !dragScaleHeight) { + zoomDrag = (searchData.prefConfig.zoomDrag || 100) / 100; + dragScaleWidth = zoomDrag * 190; + dragScaleHeight = zoomDrag * 190; + } if (!dragRoundFrame) { let dragCssText = ` #dragCon { @@ -11803,6 +11807,9 @@ left: 0; transform: scale(${zoomDrag}); z-index: 2147483647; + -moz-transition:left 0.3s ease, top 0.3s; + -webkit-transition:left 0.3s ease, top 0.3s; + transition:left 0.3s ease, top 0.3s; } #searchJumperWrapper * { margin: 0; @@ -12005,6 +12012,16 @@ sector.dataset.deg = deg; sectorCon.appendChild(sector); sectorSpan.addEventListener("dragover", e => { + if (e.clientX < 50) { + dragCon.style.left = "0px"; + } else if (e.clientX > document.documentElement.clientWidth - 50) { + dragCon.style.left = document.documentElement.clientWidth - (dragScaleWidth<<1) + "px"; + } + if (e.clientY < 50) { + dragCon.style.top = "0px"; + } else if (e.clientY > document.documentElement.clientHeight - 50) { + dragCon.style.top = document.documentElement.clientHeight - (dragScaleHeight<<1) + "px"; + } e.preventDefault(); }, true); sectorSpan.addEventListener("dragenter", e => { @@ -12065,10 +12082,23 @@ searchBar.recoveHistory(); let firstType = searchBar.autoGetFirstType(); let siteBtns = firstType.querySelectorAll("a.search-jumper-btn:not(.notmatch)"); + let targetIndex = 0; + let getTargetSiteBtn = () => { + let result = null; + for (let i = targetIndex; i < siteBtns.length; i++) { + let btn = siteBtns[i]; + if (btn.style.display !== 'none' && !btn.dataset.showTips) { + result = btn; + targetIndex = i + 1; + break; + } + } + return result; + }; dragSiteCurSpans.forEach((span, i) => { span.innerHTML = createHTML(); span.parentNode.parentNode.style.filter = 'contrast(0.5)'; - let targetSite = siteBtns[i]; + let targetSite = getTargetSiteBtn(); if (!targetSite) return; span.parentNode.parentNode.style.filter = ''; span.parentNode.dataset.name = targetSite.dataset.name; @@ -12090,6 +12120,11 @@ }); let findIndex = 0; let getHistorySiteBtn = () => { + if (searchData.prefConfig.reuseDragHistory) { + return getTargetSiteBtn(); + } else if (searchData.prefConfig.hideDragHistory) { + return false; + } let result = null; for (let i = findIndex; i < searchBar.historySiteBtns.length; i++) { let btn = searchBar.historySiteBtns[i]; @@ -12131,21 +12166,9 @@ if (src) img.src = src; } }); - let scaleWidth = zoomDrag * 190; - let scaleHeight = zoomDrag * 190; - if (left - scaleWidth < 0) { - left = scaleWidth; - } else if (document.documentElement.clientWidth - left - scaleWidth < 0) { - left = document.documentElement.clientWidth - scaleWidth; - } - if (top - scaleHeight < 0) { - top = scaleHeight; - } else if (document.documentElement.clientHeight - top - scaleHeight < 0) { - top = document.documentElement.clientHeight - scaleHeight; - } - dragCon.style.left = left - scaleWidth + "px"; - dragCon.style.top = top - scaleHeight + "px"; + dragCon.style.left = left - dragScaleWidth + "px"; + dragCon.style.top = top - dragScaleHeight + "px"; dragRoundFrame.style.opacity = ""; dragRoundFrame.style.transform = ''; setTimeout(() => { From 23f688cd93a1ef89bb9ea4f442740d6b311f4985 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 22:27:22 +0800 Subject: [PATCH 448/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 8650816fb66..82f61bb3416 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4103,7 +4103,7 @@ bg = styleMatch[1]; otherCss = styleMatch[2]; } - style = self.getHighlightStyle(this.curWordIndex, bg, otherCss); + style = this.getHighlightStyle(this.curWordIndex, bg, otherCss); word.style = style; modifySpan.style = style; } From 42b39031c57c50bbf1b117b8a6ad71b6e0d66270 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 26 Nov 2023 22:54:50 +0800 Subject: [PATCH 449/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 82f61bb3416..b58c4f329b7 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -5419,6 +5419,7 @@ this.searchJumperInputKeyWords.disabled = false; picker.close(); document.removeEventListener("mouseup", this.checkSelHandler); + this.setFuncKeyCall(false); let openType = this.bar.querySelector('.search-jumper-type.search-jumper-open>span'); if (openType) { if (openType.onmousedown) { From c1a39317583bcf14c642f629586ee08de5256111 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 08:32:51 +0800 Subject: [PATCH 450/812] 1.9.36.108 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 45 ++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 53c6f708a70..97ea0c1ebc4 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.107](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.108](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index f6afcd88db1..c598486d084 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.107 +// @version 1.9.36.108 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -885,8 +885,8 @@ const ruleImportUrlReg = /greasyfork\.org\/.*scripts\/438684(\-[^\/]*)?(\/discussions|\/?$|\/feedback)|github\.com\/hoothin\/UserScripts\/(tree\/master\/Pagetual|issues)/i; const allOfBody = "body>*"; const mainSel = "article,.article,[role=main],main,.main,#main"; - const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u0020\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007cВперед", "i"); - const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); + const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434", "i"); + const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u007c\u00bb\u007c\u003e\u003e\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; @@ -2271,7 +2271,7 @@ ".nextPage", ".pagination-next>a", "a[data-pagination=next]", - ".pagination li.active+li>a", + "[class*=pagination] li.active+li>a", "[class^=pag] .current+a", ".pageButtonsCurrent+a", "a[class*=nextpage]", @@ -2319,30 +2319,27 @@ } } } - if (next && !this.linkHasHref(next)) { - jsNext = next; - next = null; - } - if (!next) { - await sleep(1); - next = body.querySelectorAll("[aria-label='Next page']"); - if (next && next.length == 1) { - next = next[0]; - if (!this.linkHasHref(next)) { - if (!jsNext) jsNext = next; - next = null; + if (next) { + let innerText = next.innerText; + let isJs = this.linkHasHref(next); + if (innerText && nextTextReg2.test(innerText.trim())) { + if (isJs) { + if (this.verifyElement(next)) { + nextJs2 = next; + } + } else { + next2 = next; } - } else { next = null; + } else { + if (isJs) { + if (this.verifyElement(next)) { + jsNext = next; + } + next = null; + } } } - if (jsNext && !this.verifyElement(jsNext)) { - jsNext = null; - } - if (next && nextTextReg2.test(next.innerText.trim())) { - next2 = next; - next = null; - } if (!next) { await sleep(1); next = body.querySelector("a.curr+a") || From 4a65ecbbe1076fdd00850c473065c8bea0701f56 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 27 Nov 2023 01:54:45 +0000 Subject: [PATCH 451/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 31a49111bf7..cbd989353e9 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86191", + "data": { + "insertBefore": "", + "pageElement": "//section[contains(concat(' ', @class, ' '), ' entry-content ')]", + "nextLink": "//li[contains(concat(' ', @class, ' '), ' next ')]/a", + "url": "^https://cancam\\.jp/archives/.", + "exampleUrl": "https://cancam.jp/archives/1162153" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "CanCam.jp 分割記事", + "created_at": "2023-11-26T21:56:24+09:00", + "updated_at": "2023-11-26T21:56:24+09:00" +}, { "resource_url": "http://wedata.net/items/86189", "data": { @@ -11693,18 +11708,17 @@ }, { "resource_url": "http://wedata.net/items/82004", - "name": "CanCam.jp", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-10-25T22:23:43+09:00", "data": { - "exampleUrl": "https://cancam.jp/archives/577651", + "pageElement": "id(\"primary\")/*", + "nextLink": "//a[@rel=\"prev\"]", "url": "^https://cancam\\.jp/archives/", - "pageElement": "id(\"primary\")", - "insertBefore": "", - "nextLink": "//a[@rel=\"prev\"]" + "exampleUrl": "https://cancam.jp/archives/577651" }, - "created_at": "2018-10-25T22:23:43+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "CanCam.jp", + "created_at": "2018-10-25T22:23:43+09:00", + "updated_at": "2023-11-26T21:58:17+09:00" }, { "resource_url": "http://wedata.net/items/82003", From 3abd34595bf2281d14a114490ea0fd5c9e3755a1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:04:07 +0800 Subject: [PATCH 452/812] Update README.md --- DownloadAllContent/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index f767f43fb38..740391381a0 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -96,6 +96,7 @@ https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector( .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` + [📕知乎鹽選](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) +> 使用以下規則可獲取章節鏈接,但僅可下載免費可見内容,付費内容請自充會員 ``` javascript [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://www.zhihu.com/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` @@ -155,7 +156,8 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` css a.chapter-item ``` -> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請不要來問我要現成規則。後期如若豆瓣更新則不再跟進。首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: +> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若豆瓣更新則不再跟進。 +> 首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) @@ -182,7 +184,7 @@ function decode(t) { }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } ``` -> 因此規則可按如下步驟編寫,首先調用 https://read.douban.com/j/article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 +> 因此規則可按如下步驟編寫,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) From a301a6be7b5ad99942769cd12b7770b9240b10ca Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:28:26 +0800 Subject: [PATCH 453/812] Update README.md --- DownloadAllContent/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 740391381a0..ca18f2579b1 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -67,7 +67,7 @@ 某個章節名 / CSS 選擇器【選擇器後可跟 >> 傳入 item 處理】 **@@** 抓取到 URL 的正則匹配 **@@** 正則替換 URL **@@** 根據爬取返回內容 data 處理並返回最終文本 -### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用 +### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 + [📕po18](https://www.po18.tw/books/755779/articles) > 章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 `.l_chaptname>a@@articles@@articlescontent` 粘貼進命令菜單即可下載。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 ``` css @@ -95,8 +95,8 @@ https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector( ``` javascript .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` -+ [📕知乎鹽選](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) -> 使用以下規則可獲取章節鏈接,但僅可下載免費可見内容,付費内容請自充會員 ++ [📕某乎](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) +> 使用以下規則可獲取章節鏈接,僅可下載免費可見内容,付費内容請自充會員 ``` javascript [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://www.zhihu.com/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` @@ -152,12 +152,12 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` javascript .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` -+ [📕豆瓣閲讀](https://read.douban.com/column/64079189/) ++ [📕某瓣閲讀](https://read.douban.com/column/64079189/) ``` css a.chapter-item ``` -> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若豆瓣更新則不再跟進。 -> 首先,豆瓣閲讀的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,豆瓣會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: +> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若有變動不再跟進。 +> 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) @@ -184,9 +184,9 @@ function decode(t) { }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } ``` -> 因此規則可按如下步驟編寫,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接即可 +> 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接 + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) -> 礙於我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 +> 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) > 簡單的分頁,沒啥難點。惟一需要注意的是,分頁連結藏在 js 代碼裏,用正則取出完事。 ``` javascript From ad4324ca08da230dad0b330fef305e6482e90bba Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:33:10 +0800 Subject: [PATCH 454/812] Update README.md --- DownloadAllContent/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index ca18f2579b1..90e2e5ad6a7 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -96,7 +96,7 @@ https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector( .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` + [📕某乎](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) -> 使用以下規則可獲取章節鏈接,僅可下載免費可見内容,付費内容請自充會員 +> 此頁章節沒有連結,使用以下規則可獲取章節連結,僅可下載免費可見内容,付費内容請自充會員 ``` javascript [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://www.zhihu.com/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` @@ -152,7 +152,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` javascript .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` -+ [📕某瓣閲讀](https://read.douban.com/column/64079189/) ++ [📕某瓣](https://read.douban.com/column/64079189/) ``` css a.chapter-item ``` From 776f73fe4f4b4bde4ec8c2dbb6f98f8dc195e21c Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:37:21 +0800 Subject: [PATCH 455/812] Update README.md --- DownloadAllContent/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 90e2e5ad6a7..885f022a911 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -95,10 +95,10 @@ https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector( ``` javascript .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` -+ [📕某乎](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) ++ [📕某乎](/xen/market/remix/paid_column/1465280726219968513) > 此頁章節沒有連結,使用以下規則可獲取章節連結,僅可下載免費可見内容,付費内容請自充會員 ``` javascript - [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://www.zhihu.com/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; + [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://${location.host}/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` + [📕腐女屋](http://m.funvwu.com/) ``` javascript @@ -152,7 +152,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` javascript .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` -+ [📕某瓣](https://read.douban.com/column/64079189/) ++ 📕某瓣 ``` css a.chapter-item ``` From 793b127c8a12cf53f148b571d17ef7f2cff0e994 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:40:54 +0800 Subject: [PATCH 456/812] Update README.md --- DownloadAllContent/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 885f022a911..2e5f27893e4 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -157,7 +157,10 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for a.chapter-item ``` > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若有變動不再跟進。 -> 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到,解密方法如下: +> 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到 +

+解密方法如下: + ``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) @@ -184,6 +187,8 @@ function decode(t) { }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } ``` +
+ > 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接 + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 From 14949e0a9687f855f48a94ec814d4bc5f032f27d Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:48:10 +0800 Subject: [PATCH 457/812] Update README.md --- DownloadAllContent/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 2e5f27893e4..b36f291eb32 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -161,7 +161,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for
解密方法如下: - ``` javascript +``` javascript function decode(t) { const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) , r = (new TextDecoder).decode(new Uint8Array([99, 114, 121, 112, 116, 111])) @@ -186,10 +186,11 @@ function decode(t) { return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c]))) }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) } - ``` +```
> 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接 + + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) From 627e519fcd6d8fc4604cac2620a80aaf042ab6e8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:52:53 +0800 Subject: [PATCH 458/812] Update README.md --- DownloadAllContent/README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index b36f291eb32..d99b119218b 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -158,10 +158,10 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若有變動不再跟進。 > 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到 +> 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接
解密方法如下: - -``` javascript +
 function decode(t) {
     const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67]))
     	, r = (new TextDecoder).decode(new Uint8Array([99, 114, 121, 112, 116, 111]))
@@ -186,11 +186,8 @@ function decode(t) {
             return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c])))
         }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t))))
 }
-```
+
- -> 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接 - + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) From 1d6d5bd52b40d742488b0551b5af7c438a9212e8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:53:13 +0800 Subject: [PATCH 459/812] Update README.md --- DownloadAllContent/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index d99b119218b..45b113a1913 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -188,6 +188,7 @@ function decode(t) { } + + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) From b96e157785c7a6b9691859384b37533593b3be37 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:56:25 +0800 Subject: [PATCH 460/812] Update README.md --- DownloadAllContent/README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 45b113a1913..1391ed480a0 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -157,11 +157,10 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for a.chapter-item ``` > 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若有變動不再跟進。 -> 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到 -> 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接 -
-解密方法如下: -
+> 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到。
+> 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接。
+> 解密方法如下:
+``` javascript
 function decode(t) {
     const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67]))
     	, r = (new TextDecoder).decode(new Uint8Array([99, 114, 121, 112, 116, 111]))
@@ -186,8 +185,7 @@ function decode(t) {
             return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c])))
         }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t))))
 }
-
-
+``` + [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) > 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 From 41ab805a741f5e0f474b9842fdb49a7cfb934697 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:57:03 +0800 Subject: [PATCH 461/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 1391ed480a0..610c88b52fc 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -187,7 +187,7 @@ function decode(t) { } ``` -+ [📕愛發電](https://afdian.net/album/afee5ce2462d11ee897e52540025c377) ++ 📕愛發電 > 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) > 簡單的分頁,沒啥難點。惟一需要注意的是,分頁連結藏在 js 代碼裏,用正則取出完事。 From 11630b86af3171030da4be9ec052884dca25549c Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 12:58:14 +0800 Subject: [PATCH 462/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 610c88b52fc..1bb2f6da75e 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -188,7 +188,7 @@ function decode(t) { ``` + 📕愛發電 -> 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 https://afdian.net/api/post 請求數據即可。 +> 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 /api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) > 簡單的分頁,沒啥難點。惟一需要注意的是,分頁連結藏在 js 代碼裏,用正則取出完事。 ``` javascript From 76fa7371398d5d2d14756c2287ef091e5b9aa77c Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 13:02:14 +0800 Subject: [PATCH 463/812] Update README.md --- DownloadAllContent/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 1bb2f6da75e..00bbdc615a9 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -95,7 +95,7 @@ https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector( ``` javascript .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` -+ [📕某乎](/xen/market/remix/paid_column/1465280726219968513) ++ [📕某乎](https://www.某乎.com/xen/market/remix/paid_column/1465280726219968513) > 此頁章節沒有連結,使用以下規則可獲取章節連結,僅可下載免費可見内容,付費内容請自充會員 ``` javascript [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://${location.host}/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; @@ -152,7 +152,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` javascript .BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

/g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; ``` -+ 📕某瓣 ++ [📕某瓣](https://read.某瓣.com/column/64079189/) ``` css a.chapter-item ``` @@ -187,7 +187,7 @@ function decode(t) { } ``` -+ 📕愛發電 ++ [📕愛發電](https://愛發電/album/afee5ce2462d11ee897e52540025c377) > 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 /api/post 請求數據即可。 + [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) > 簡單的分頁,沒啥難點。惟一需要注意的是,分頁連結藏在 js 代碼裏,用正則取出完事。 From 704282550989f8e4d3a6eed54b93c1dd7b55c49b Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 13:30:14 +0800 Subject: [PATCH 464/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- ...nal Chinese and Simplified Chinese.user.js | 887 +++++++++--------- 1 file changed, 445 insertions(+), 442 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 88ea36a3cba..20b7bdd307f 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.7.5 +// @version 1.2.7.6 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -86,451 +86,450 @@ //此處為匹配上具體詞語就優先轉換的單字,簡體與正體分開處理。可以用來處理異體字,或者同字替換,以取消單字匹配時的轉換操作 //簡轉繁,單向轉換 var sc2tc = { - '巨':[ - '巨', - ['鉅','巨款','巨富','巨细','巨子'] - ], - '折':[ - '折', - ['摺','折叠','折纸','存折','对折','折痕','奏折','折页','折扇'] - ], - '霉':[ - '霉', - ['黴','青霉素','红霉素','霉菌','氯霉素','绿霉素'] - ], - '捆':[ - '捆', - ['綑','捆绑','捆扎'] - ], - '升':[ - '升', - ['昇','升华','提升','高升','歌舞升平'] - ], - '划':[ - '劃', - ['划','划龙舟','划船','划算','划不来'] - ], - '姜':[ - '姜', - ['薑','姜片','姜葱','生姜','姜汁','姜母鸭'] - ], - '御':[ - '禦', - ['御','御制','御用'] - ], - '毁':[ - '毀', - ['燬','烧毁','焚毁','炸毁','销毁'], - ['譭','诋毁','毁谤'] - ], - '胡':[ - '胡', - ['鬍','胡须','胡子','刮胡刀'], - ['衚','胡同'] - ], - '须':[ - '須', - ['鬚','剃须刀','胡须','须发','根须'] - ], - '同':[ - '同', - ['衕','衚衕'] - ], - '叹':[ - '歎', - ['嘆','悲叹','叹息','仰天长叹','叹惋'] - ], - '荡':[ - '蕩', - ['盪','空荡荡','回荡','动荡','荡漾','震荡'] - ], - '凄':[ - '淒', - ['悽','凄厉','凄惨','悲凄','凄苦'] - ], - '栗':[ - '栗', - ['慄','战栗','颤栗','不寒而栗'] - ], - '凄':[ - '淒', - ['悽','凄厉','凄惨','悲凄','凄苦'] - ], - '沈':[ - '沈', - ['瀋','沈阳'] - ], - '苏':[ - '蘇', - ['甦','复苏','苏醒'] - ], - '卤':[ - '滷', - ['鹵','卤钝','卤莽','粗卤','卤地'] - ], - '准':[ - '準', - ['准','批准','准许','不准','准予'] - ], - '杯':[ - '杯', - ['盃','奖杯','世界杯'] - ], - '馈':[ - '饋', - ['餽','馈赠'] - ], - '向':[ - '向', - ['嚮','向往','向导'] - ], - '搜':[ - '搜', - ['蒐','蒐集','蒐羅'] - ], - '哗':[ - '嘩', - ['譁','哗变','喧哗','哗众取宠'] - ], - '够':[ - '夠', - ['搆','够不到'] - ], - '范':[ - '范', - ['範','模范','范本','示范','规范','范围'] - ], - '喂':[ - '喂', - ['餵','喂养','喂饱','饲喂'] - ], - '迹':[ - '跡', - ['蹟','古迹','遗迹','事迹','奇迹','史迹'] - ], - '佩':[ - '佩', - ['珮','玉佩'] - ], - '尸':[ - '屍', - ['尸','尸位素餐'] - ], - '泛':[ - '泛', - ['氾','泛滥'] - ], - '雕':[ - '雕', - ['彫','雕刻','雕像','雕塑','精雕细琢','雕琢','冰雕'] - ], - '核':[ - '核', - ['覈','审核','核实','核准','核对','复核','核查'] - ], - '困':[ - '困', - ['睏','困倦','困意','犯困'] - ], - '欲':[ - '欲', - ['慾','欲望','情欲','私欲','贪欲','色欲'] - ], - '致':[ - '致', - ['緻','精致','细致'] - ], - '梁':[ - '梁', - ['樑','栋梁','桥梁'] - ], - '占':[ - '占', - ['佔','占用','占领','侵占','占为己有','强占','占有','抢占'] - ], - '卜':[ - '卜', - ['蔔','萝卜','胡萝卜'] - ], - '托':[ - '托', - ['託','拜托','托付','嘱托','托词','托辞','推托','委托','托病','信托','托梦','托孤','托故','托管','受托','寄托'] - ], - '刮':[ - '刮', - ['颳','刮风'] - ], - '尽':[ - '盡', - ['儘','尽快','尽早','尽可能','尽显','尽量','尽管'] - ], - '汇':[ - '匯', - ['彙','词汇','字汇','汇集','汇编','辞汇'] - ], - '才':[ - '才', - ['纔','刚才','方才','却才','恰才'] - ], - '丑':[ - '醜', - ['丑','小丑','丑角','乙丑','丁丑','己丑','辛丑','癸丑','副丑'] - ], - '周':[ - '周', - ['週','周报','周期','周会','周日','周刊','周波','周岁','周末','周考','一周','二周','三周','四周','五周','两周','双周刊','名剧周','黄金周','周休','周一','周二','周三','周四','周五','周六'], - ['賙','周济'] - ], - '冲':[ - '沖', - ['衝','冲奖','冲高','冲决','冲浪','冲子','冲力','冲要','冲破','冲口','冲顶','冲床','冲突','冲刺','冲金','冲模','冲撞','冲腾','冲锋','冲量','冲动','冲程','冲压','冲杀','冲激','冲击','俯冲','反冲','折冲','缓冲','脉冲','要冲','冲锋枪','冲孔机','冲劲','冲金点','冲压机','冲击波','反冲力','冲锋','横冲','冲冠','首当其冲'] - ], - '恶':[ - '惡', - ['噁','恶心'] - ], - '发':[ - '發', - ['發','发回'], - ['髮','发网','发际','发箍','发丝','发式','发带','发型','发卡','发妻','发指','发廊','发饰','发乳','发夹','发菜','发屋','发姐','发油','发套','发蜡','发鬓','发髻','发雕','发辫','发胶','发浆','一发','假发','健发','削发','卷发','握发','束发','染发','植发','栉发','毛发','毫发','烫发','理发','白发','短发','秀发','秃发','结发','美发','胎发','脱发','华发','落发','蓄发','护发','金发','银发','头发','驳发','鬓发','须发','发小','剃发令','洗发','发短心长','怒发冲冠','断发文身','被发','鹤发','黄发垂髫','擢发难数','庞眉皓发','披头散发','间不容发'] - ], - '复':[ - '復', - ['複','复诊','复印','复写','复查','复习','复式','复种','复姓','复核','复音','复决','复利','复眼','复句','复合','复果','复述','复胃','复本','复方','复验','复选','复赛','复议','复制','复检','复杂','复叶','复线','复诵','复视','复试','复数','复评','复审','繁复','重复','复元音','复读机','复辅音','复共轭的','合义复词','衍声复词','山重水复'], - ['覆','复電','批复','核复','禀复','答复','被复','赐复','颠复','倾复','函复','反复','回复','复亡','复函','复命','复审','复复','复败','复书','复核','复没','复灭','复舟'] - ], - '鉴':[ - '鑒', - ['鑑','鉴于','鉴识','鉴赏','鉴证','鉴真','鉴谅','鉴别','鉴定','鉴戒','人鉴','借鉴','印鉴','可鉴','品鉴','唐鉴','图鉴','年鉴','殷鉴','洞鉴','王鉴','评鉴','赏鉴','通鉴','风鉴','龟鉴','明通鉴','鉴往知来','鉴古推今','有鉴于此','渊鉴类函','引为鉴戒','之鉴','宝鉴','玉鉴','引以为鉴','手鉴'] - ], - '历':[ - '歷', - ['曆','历书','历象','历元','历法','公历','回历','国历','夏历','年历','弘历','挂历','日历','月历','校历','桌历','殷历','皇历','旧历','藏历','西历','农历','阴历','阳历','黄历','台历','万历帝','藏历年','陀历道','阳历年','七曜历','三统历','乾象历','天体历','太初历','格里历','统天历','行事历','农民历','农家历','戊寅元历'] - ], - '链':[ - '鏈', - ['鍊','链子','拉链','精链','锻链','项链','锁链','铁链'] - ], - '签':[ - '簽', - ['籤','签子','签诗','抽签','掣签','书签','标签','求签','牙签','竹签','贴标签','唐音统签','金瓶掣签','云笈七签'] - ], - '闲':[ - '閒', - ['閑','闲闲','熟闲','高闲','闲居','幽闲','逾闲'] - ], - '赞':[ - '贊', - ['讚','赞赏','赞佩','赞美','赞誉','赞歌','赞叹','赞许','赞扬','赞颂','赞语','按赞','盛赞','礼赞','称赞','夸赞','颂赞','点赞','赞不绝口'] - ], - '钟':[ - '鍾', - ['鐘','钟摆','钟点','钟乳','钟楼','钟头','钟鼎','分钟','丧钟','座钟','挂钟','摆钟','时钟','洪钟','空钟','编钟','诗钟','警钟','电钟','闹钟','点钟','钟点房','钟鼓','钟点工','钟鼎文','大钟寺','石钟乳','光学钟','原子钟','大本钟','大笨钟','宗周钟','平安钟','打卡钟','抖空钟','撞丧钟','救命钟','敲警钟','敲丧钟','潜水钟','生物钟','石英钟','自鸣钟','电子钟','钟鸣','晨钟','黄钟','撞钟'] - ], - '只':[ - '只', - ['隻','几只','一只','二只','两只','三只','四只','五只','六只','七只','八只','九只','十只','百只','千只','万只','形单影只','只言片语','只字不提'], - ['只','只有','只会','只管','只消','只当','只好','只要','只能','只会','只是','只怕','只得','只见','只顾','只许','只因','不只','仅只','只不过','只此一家','只欠东风','只争朝夕'] - ], - '捂':[ - '捂', - ['摀','紧捂'] - ], - '咸':[ - '鹹', - ['咸','咸阳','咸宜','咸丰','咸和','咸池','咸五','彭咸','季咸','阮咸','阿咸','巫咸','碧咸'] - ], - '脏':[ - '髒', - ['臟','脏器','脏腑','五脏','内脏','心脏','肝脏','肺脏','胃脏','胰脏','脺脏','脾脏','肾脏','腑脏','肠脏'] - ], - '岳':[ - '岳', - ['嶽','五岳','中岳','北岳','南岳','西岳','东岳','岳立'] - ], - '云':[ - '雲', - ['云','人云亦云','云云'] - ], - '游':[ - '遊', - ['游','游泳','游水','花游'] - ], - '弥':[ - '彌', - ['瀰','弥漫'] - ], - '松':[ - '鬆', - ['松','惺松','阿松','松树','松针','松果','松鼠','松林','松竹'] - ], - '愈':[ - '愈', - ['癒','不愈','初愈','已愈','康愈','愈合','未愈','治愈','病愈','痊愈','自愈','伤愈','愈疮','渐愈'] - ], - '尝':[ - '嘗', - ['嚐','品尝','浅尝辄止','卧薪尝胆'] - ], - '斗':[ - '斗', - ['鬥','不斗','久斗','互斗','仍斗','共斗','再斗','初斗','力斗','勇斗','博斗','又斗','合斗','吵斗','善斗','大斗','好斗','想斗','打斗','批斗','抓斗','抗斗','拆斗','拼斗','挑斗','接斗','搏斗','敢斗','文斗','斗一','斗上','斗不','斗久','斗了','斗他','斗你','斗倒','斗出','斗到','斗力','斗勇','斗去','斗口','斗命','斗嘴','斗在','斗垮','斗士','斗奇','斗她','斗妍','斗完','斗弄','斗得','斗心','斗忍','斗志','斗快','斗意','斗成','斗我','斗批','斗技','斗招','斗拳','斗掌','斗斗','斗智','斗棋','斗法','斗牛','斗狗','斗狠','斗眼','斗神','斗私','斗草','斗角','斗起','斗趣','斗酒','斗魂','智斗','暗斗','未斗','格斗','械斗','武斗','死斗','比斗','游斗','激斗','狠斗','猛斗','相斗','私斗','群斗','苦斗','虎斗','血斗','要斗','角斗','越斗','跟斗','迎斗','邀斗','酣斗','乱斗','内斗','别斗','剧斗','劲斗','夺斗','奋斗','厮斗','恶斗','战斗','斗来','斗个','斗传','斗剑','斗劲','斗胜','斗场','斗将','斗恶','斗战','斗擞','斗败','斗敌','斗杀','斗殴','斗气','斗争','斗兽','斗毕','斗舰','斗艺','斗艳','斗赢','斗输','斗过','斗鸡','斗饮','斗闹','斗鱼','斗丽','会斗','权斗','殴斗','决斗','争斗','独斗','竞斗','约斗','缠斗','罢斗','观斗','赌斗','较斗','连斗','门斗','双斗','颤斗','凤斗','斗!'] - ], - '系':[ - '系', - ['係','关系','系数'], - ['系','系统','系列','体系','派系','直系'], - ['繫','不系','劾系','心系','所系','拘系','擐系','系上','系乎','系了','系住','系囚','系妥','系心','系念','系手','系牢','系留','系腰','系膜','系起','颈系','连系','联系','维系','系马','系个','系块','系带','系怀','系挂','系于','系条','系绊','系紧','系缚','系绳','系缆','系脚','系辞','系铃','系颈','牵系','梦系','身系','腰系','背系','縻系'] - ], - '舍':[ - '捨', - ['舍','宿舍','寒舍','屋舍','舍下'] - ], - '干':[ - '幹', - ['乾','口干','吃干','吐干','吮干','吸干','吹干','呷干','喉干','喝干','嘴干','太干','干井','干似','干冰','干冷','干化','干咳','干咽','干品','干哥','干嚎','干土','干坤','干妹','干姊','干姐','干姜','干娘','干爹','干爸','干妈','干季','干巴','干布','干干','干式','干弟','干性','干料','干旱','干杯','干果','干枝','干枯','干柴','干梅','干沙','干泥','干洗','干涸','干渴','干焦','干熬','干燥','干爽','干球','干疤','干瘦','干眼','干瞪','干硬','干窘','干笑','干等','干粉','干耗','干肉','干股','干脆','干花','干草','干菜','干薪','干衣','干裂','干透','干酪','干醋','干隆','干面','弄干','很干','抹干','抽干','揩干','擦干','晾干','朝干','未干','杯干','果干','桑干','榨干','水干','流干','海干','滴干','炒干','烘干','烤干','焙干','焦干','煨干','熨干','略干','碗干','粉干','耗干','肉干','舔干','菜干','蒸干','速干','干儿','干哑','干呕','干坛','干孙','干尸','干搁','干晒','干净','干涩','干涧','干湿','干热','干烧','干瘪','干瘾','干发','干粮','干结','干丝','干声','干叶','干号','干货','干阳','干饭','拧干','晒干','极干','泪干','沥干','烧干','烩干','发干','笋干','绞干','阴干','难干','风干','饮干','饼干','鱼干','唇干'], - ['干','干系','天干','干涉','干扰','干戈','相干'] - ], - '了':[ - '了', - ['瞭','了望','了然','了若指掌','了如指掌','一目了然'] - ], - '谷':[ - '穀', - ['谷','低谷','山谷','谷峰','谷底'] - ], - '仿':[ - '仿', - ['倣','仿效'], - ['彷','仿佛','仿徉'], - ['徬','仿徨'] - ], - '效':[ - '效', - ['傚','模效','摹效','仿效','儆效','效尤','效法'] - ], - '克':[ - '克', - ['剋','克夫','克扣','克日','克星','克期','克死','克薄','生克','相克','冲克'], - ['刻','克苦'] - ], - '吊':[ - '吊', - ['弔','吊信','吊古','吊唁','吊奠','吊孝','吊客','吊影','吊念','吊慰','吊文','吊民','吊祭','哀吊','唁吊','盆吊','祭吊','陪吊','吊问','吊丧','吊场','吊书','吊词','吊诡','吊贺','吊钱','凭吊'] - ], - '台':[ - '臺', - ['颱','冬台','秋台','防台','台风','强台','轻台'], - ['檯','台凳','台子','台布','台面','吧台','抹台','揩台','球台','窗台','翻台','餐台','台历','台灯','台钟','书台','柜台','赌台','长台'] - ], - '回':[ - '回', - ['迴','北回','南回','回圈','回廊','回旋','回游','回翔','回避','峰回','巡回','迂回','回环','回纹','回绕','回肠','回荡','回銮','回响','回风','梦回','盘回','纡回','萦回','轮回','递回'] - ], - '后':[ - '後', - ['后','仙后','吕后','天后','太后','封后','帝后','废后','影后','后冠','后土','后妃','后稷','后羿','母后','王后','皇后','舞后','西后','艳后','韦后'] - ], - '征':[ - '征', - ['徵','代征','停征','像征','免征','咎征','征了','征人','征信','征候','征兆','征入','征兵','征募','征去','征友','征取','征召','征地','征婚','征引','征得','征收','征文','征求','征片','征用','征稿','征管','征聘','征象','征逐','征集','急征','性征','新征','特征','狂征','病征','稽征','考征','苛征','表征','象征','超征','魏征','带征','广征','强征','征个','征启','征敛','征状','征税','征粮','征纳','征缴','征诏','征询','征调','征财','征费','征赋','征购','征选','应征','横征','减征','滥征','纳征','缓征','联征','详征','诚征','课征','变征','开征','体征'] - ], - '注':[ - '注', - ['註','注解','备注','注脚','批注','注册','注定','校注','尾注','注销','标注','注释'] - ], - '丰':[ - '豐', - ['丰','三丰','丰姿','丰度','丰情','丰神','丰韵'] - ], - '并':[ - '並', - ['併','一并','不并','并入','并力','并合','并吞','并图','并拢','并案','并叠','并砌','并科','并负','并购','并赃','并除','并陇','侵并','兼并','合并','吞并','整并','归并','相并','砌并','被并','裁并','购并','双并'] - ], - '念':[ - '念', - ['唸','光念','念佛','念作','念到','念咒','念好','念完','念得','念念','念成','念法','敢念','念书','念给','念经','念诵','念过','念错','念点','没念'] - ], - '借':[ - '借', - ['藉','借以','借口','借故','慰借','狼借','借机','借词','凭借','蕴借'] - ], - '志':[ - '志', - ['誌','日志','网志','墓志铭','聊斋志异','三国志','杂志'] - ], - '么':[ - '麼', - ['么','老么','么女','么儿','么妹','么子','么弟'] - ], - '布':[ - '布', - ['佈','公布','分布','宣布','密布','布伏','布署','布兵','布告','布局','布施','布景','布置','布防','布雷','故布','散布','遍布','传布','布个','布坛','布导','布岗','布于','布满','布阵','广布','摆布','满布','发布','预布'] - ], - '分':[ - '分', - ['份','分量','身分'] - ], - '里':[ - '裡', - ['里','○里','一里','七里','三里','下里','九里','二里','五里','亚里','佳里','克里','全里','两里','八里','公里','六里','凯里','劈里','加里','北里','十里','千里','南里','卡里','吉里','哈里','哥里','啰里','四里','埔里','多里','少里','尤里','居里','峇里','布里','几里','底里','德里','拉里','故里','数里','斯里','普里','东里','格里','归里','波里','乌里','百里','稀里','罗里','英里','莫里','万里','苏里','里亚','里仁','里夫','里奥','里尼','里布','里拉','里昂','里根','里民','里尔','里科','里程','里约','里纳','里美','里肌','里兰','里路','里里','里长','西里','贝里','路里','道里','乡里','邻里','阿里','马里','0里','0里','1里','2里','3里','4里','5里','6里','7里','8里','9里'] - ], - '面':[ - '面', - ['麵','制面','吃面','拉面','拌面','揉面','杯面','油面','泡面','炒面','煮面','碗面','羹面','肉面','辣面','面店','面杖','面灰','面碗','面筋','面粉','面糊','面茶','面食','食面','寿面','杆面','凉面','汤面','烫面','发面','酱面','面价','面团','面厂','面摊','面汤','面线','面饺','面饼','面馆','面馍','面龟','饨面','卤面','麦面','干面','擀面'] - ], - '烟':[ - '煙', - ['菸','烟斗','吸烟','好烟','戒烟','抽烟','支烟','旱烟','根烟','烟商','烟客','烟枪','烟民','烟灰','烟瘾','烟草','烟酒','烟头','烟鬼','烟龄','禁烟','买烟','香烟'] - ], - '蒙':[ - '蒙', - ['濛','灰蒙','空蒙','蒙蒙','迷蒙','弥蒙','蒙雾'], - ['矇','欺蒙','蒙住','蒙叟','蒙敝','蒙昧','蒙混','蒙瞀','蒙瞢','蒙瞽','蒙蔽','蒙胧','蒙眬','蒙骗'], - ['懞','蒙懂'] - ], - '表':[ - '表', - ['錶','戴表','手表','秒表','腕表','表店','跳表','陀表','怀表','表带','表厂','表壳','表炼','表链','钟表','马表'] - ], - '板':[ - '板', - ['闆','老板'] - ], - '卷':[ - '卷', - ['捲','卷入','卷起','龙卷风','席卷','蛋卷','花卷','袭卷','卷款','卷发','卷走','卷进','卷曲','卷舌','烟卷'] - ], - '酸':[ - '酸', - ['痠','酸软','酸痛','腰酸背痛'] - ], - '仇':[ - '仇', - ['讎','复仇','仇恨','报仇','仇敌'] - ], - '几':[ - '幾', - ['几','窗明几净','窗明几洁','茶几'] - ], - '背':[ - '背', - ['揹','背负','背黑锅','背包'] - ], - '衔':[ - '銜', - ['啣','结草衔环','衔着'] - ], - '构':[ - '構', - ['搆','构陷','构思'] - ] - }; + '巨':[ + '巨', + ['鉅','巨款','巨富','巨细','巨子'] + ], + '折':[ + '折', + ['摺','折叠','折纸','存折','对折','折痕','奏折','折页','折扇'] + ], + '霉':[ + '霉', + ['黴','青霉素','红霉素','霉菌','氯霉素','绿霉素'] + ], + '捆':[ + '捆', + ['綑','捆绑','捆扎'] + ], + '升':[ + '升', + ['昇','升华','提升','高升','歌舞升平'] + ], + '划':[ + '劃', + ['划','划龙舟','划船','划算','划不来'] + ], + '姜':[ + '姜', + ['薑','姜片','姜葱','生姜','姜汁','姜母鸭'] + ], + '御':[ + '禦', + ['御','御制','御用'] + ], + '毁':[ + '毀', + ['燬','烧毁','焚毁','炸毁','销毁'], + ['譭','诋毁','毁谤'] + ], + '胡':[ + '胡', + ['鬍','胡须','胡子','刮胡刀'], + ['衚','胡同'] + ], + '须':[ + '須', + ['鬚','剃须刀','胡须','须发','根须'] + ], + '同':[ + '同', + ['衕','衚衕'] + ], + '叹':[ + '歎', + ['嘆','悲叹','叹息','仰天长叹','叹惋'] + ], + '荡':[ + '蕩', + ['盪','空荡荡','回荡','动荡','荡漾','震荡'] + ], + '凄':[ + '淒', + ['悽','凄厉','凄惨','悲凄','凄苦'] + ], + '栗':[ + '栗', + ['慄','战栗','颤栗','不寒而栗'] + ], + '凄':[ + '淒', + ['悽','凄厉','凄惨','悲凄','凄苦'] + ], + '沈':[ + '沈', + ['瀋','沈阳'] + ], + '苏':[ + '蘇', + ['甦','复苏','苏醒'] + ], + '卤':[ + '滷', + ['鹵','卤钝','卤莽','粗卤','卤地'] + ], + '准':[ + '準', + ['准','批准','准许','不准','准予'] + ], + '杯':[ + '杯', + ['盃','奖杯','世界杯'] + ], + '馈':[ + '饋', + ['餽','馈赠'] + ], + '向':[ + '向', + ['嚮','向往','向导'] + ], + '搜':[ + '搜', + ['蒐','蒐集','蒐羅'] + ], + '哗':[ + '嘩', + ['譁','哗变','喧哗','哗众取宠'] + ], + '够':[ + '夠', + ['搆','够不到'] + ], + '范':[ + '范', + ['範','模范','范本','示范','规范','范围'] + ], + '喂':[ + '喂', + ['餵','喂养','喂饱','饲喂'] + ], + '迹':[ + '跡', + ['蹟','古迹','遗迹','事迹','奇迹','史迹'] + ], + '佩':[ + '佩', + ['珮','玉佩'] + ], + '尸':[ + '屍', + ['尸','尸位素餐'] + ], + '泛':[ + '泛', + ['氾','泛滥'] + ], + '雕':[ + '雕', + ['彫','雕刻','雕像','雕塑','精雕细琢','雕琢','冰雕'] + ], + '核':[ + '核', + ['覈','审核','核实','核准','核对','复核','核查'] + ], + '困':[ + '困', + ['睏','困倦','困意','犯困'] + ], + '欲':[ + '欲', + ['慾','欲望','情欲','私欲','贪欲','色欲'] + ], + '致':[ + '致', + ['緻','精致','细致'] + ], + '梁':[ + '梁', + ['樑','栋梁','桥梁'] + ], + '占':[ + '占', + ['佔','占用','占领','侵占','占为己有','强占','占有','抢占'] + ], + '卜':[ + '卜', + ['蔔','萝卜','胡萝卜'] + ], + '托':[ + '托', + ['託','拜托','托付','嘱托','托词','托辞','推托','委托','托病','信托','托梦','托孤','托故','托管','受托','寄托'] + ], + '刮':[ + '刮', + ['颳','刮风'] + ], + '尽':[ + '盡', + ['儘','尽快','尽早','尽可能','尽显','尽量','尽管'] + ], + '汇':[ + '匯', + ['彙','词汇','字汇','汇集','汇编','辞汇'] + ], + '才':[ + '才', + ['纔','刚才','方才','却才','恰才'] + ], + '丑':[ + '醜', + ['丑','小丑','丑角','乙丑','丁丑','己丑','辛丑','癸丑','副丑'] + ], + '周':[ + '周', + ['週','周报','周期','周会','周日','周刊','周波','周岁','周末','周考','一周','二周','三周','四周','五周','两周','双周刊','名剧周','黄金周','周休','周一','周二','周三','周四','周五','周六'], + ['賙','周济'] + ], + '冲':[ + '沖', + ['衝','冲奖','冲高','冲决','冲浪','冲子','冲力','冲要','冲破','冲口','冲顶','冲床','冲突','冲刺','冲金','冲模','冲撞','冲腾','冲锋','冲量','冲动','冲程','冲压','冲杀','冲激','冲击','俯冲','反冲','折冲','缓冲','脉冲','要冲','冲锋枪','冲孔机','冲劲','冲金点','冲压机','冲击波','反冲力','冲锋','横冲','冲冠','首当其冲'] + ], + '恶':[ + '惡', + ['噁','恶心'] + ], + '发':[ + '發', + ['發','发回'], + ['髮','发网','发际','发箍','发丝','发式','发带','发型','发卡','发妻','发指','发廊','发饰','发乳','发夹','发菜','发屋','发姐','发油','发套','发蜡','发鬓','发髻','发雕','发辫','发胶','发浆','一发','假发','健发','削发','卷发','握发','束发','染发','植发','栉发','毛发','毫发','烫发','理发','白发','短发','秀发','秃发','结发','美发','胎发','脱发','华发','落发','蓄发','护发','金发','银发','头发','驳发','鬓发','须发','发小','剃发令','洗发','发短心长','怒发冲冠','断发文身','被发','鹤发','黄发垂髫','擢发难数','庞眉皓发','披头散发','间不容发'] + ], + '复':[ + '復', + ['複','复诊','复印','复写','复查','复习','复式','复种','复姓','复核','复音','复决','复利','复眼','复句','复合','复果','复述','复胃','复本','复方','复验','复选','复赛','复议','复制','复检','复杂','复叶','复线','复诵','复视','复试','复数','复评','复审','繁复','重复','复元音','复读机','复辅音','复共轭的','合义复词','衍声复词','山重水复'], + ['覆','复電','批复','核复','禀复','答复','被复','赐复','颠复','倾复','函复','反复','回复','复亡','复函','复命','复审','复复','复败','复书','复核','复没','复灭','复舟'] + ], + '鉴':[ + '鑒', + ['鑑','鉴于','鉴识','鉴赏','鉴证','鉴真','鉴谅','鉴别','鉴定','鉴戒','人鉴','借鉴','印鉴','可鉴','品鉴','唐鉴','图鉴','年鉴','殷鉴','洞鉴','王鉴','评鉴','赏鉴','通鉴','风鉴','龟鉴','明通鉴','鉴往知来','鉴古推今','有鉴于此','渊鉴类函','引为鉴戒','之鉴','宝鉴','玉鉴','引以为鉴','手鉴'] + ], + '历':[ + '歷', + ['曆','历书','历象','历元','历法','公历','回历','国历','夏历','年历','弘历','挂历','日历','月历','校历','桌历','殷历','皇历','旧历','藏历','西历','农历','阴历','阳历','黄历','台历','万历帝','藏历年','陀历道','阳历年','七曜历','三统历','乾象历','天体历','太初历','格里历','统天历','行事历','农民历','农家历','戊寅元历'] + ], + '链':[ + '鏈', + ['鍊','链子','拉链','精链','锻链','项链','锁链','铁链'] + ], + '签':[ + '簽', + ['籤','签子','签诗','抽签','掣签','书签','标签','求签','牙签','竹签','贴标签','唐音统签','金瓶掣签','云笈七签'] + ], + '闲':[ + '閒', + ['閑','闲闲','熟闲','高闲','闲居','幽闲','逾闲'] + ], + '赞':[ + '贊', + ['讚','赞赏','赞佩','赞美','赞誉','赞歌','赞叹','赞许','赞扬','赞颂','赞语','按赞','盛赞','礼赞','称赞','夸赞','颂赞','点赞','赞不绝口'] + ], + '钟':[ + '鍾', + ['鐘','钟摆','钟点','钟乳','钟楼','钟头','钟鼎','分钟','丧钟','座钟','挂钟','摆钟','时钟','洪钟','空钟','编钟','诗钟','警钟','电钟','闹钟','点钟','钟点房','钟鼓','钟点工','钟鼎文','大钟寺','石钟乳','光学钟','原子钟','大本钟','大笨钟','宗周钟','平安钟','打卡钟','抖空钟','撞丧钟','救命钟','敲警钟','敲丧钟','潜水钟','生物钟','石英钟','自鸣钟','电子钟','钟鸣','晨钟','黄钟','撞钟'] + ], + '只':[ + '只', + ['隻','几只','一只','二只','两只','三只','四只','五只','六只','七只','八只','九只','十只','百只','千只','万只','形单影只','只言片语','只字不提'], + ['只','只有','只会','只管','只消','只当','只好','只要','只能','只会','只是','只怕','只得','只见','只顾','只许','只因','不只','仅只','只不过','只此一家','只欠东风','只争朝夕'] + ], + '捂':[ + '捂', + ['摀','紧捂'] + ], + '咸':[ + '鹹', + ['咸','咸阳','咸宜','咸丰','咸和','咸池','咸五','彭咸','季咸','阮咸','阿咸','巫咸','碧咸'] + ], + '脏':[ + '髒', + ['臟','脏器','脏腑','五脏','内脏','心脏','肝脏','肺脏','胃脏','胰脏','脺脏','脾脏','肾脏','腑脏','肠脏'] + ], + '岳':[ + '岳', + ['嶽','五岳','中岳','北岳','南岳','西岳','东岳','岳立'] + ], + '云':[ + '雲', + ['云','人云亦云','云云'] + ], + '游':[ + '遊', + ['游','游泳','游水','花游'] + ], + '弥':[ + '彌', + ['瀰','弥漫'] + ], + '松':[ + '鬆', + ['松','惺松','阿松','松树','松针','松果','松鼠','松林','松竹'] + ], + '愈':[ + '愈', + ['癒','不愈','初愈','已愈','康愈','愈合','未愈','治愈','病愈','痊愈','自愈','伤愈','愈疮','渐愈'] + ], + '尝':[ + '嘗', + ['嚐','品尝','浅尝辄止','卧薪尝胆'] + ], + '斗':[ + '斗', + ['鬥','不斗','久斗','互斗','仍斗','共斗','再斗','初斗','力斗','勇斗','博斗','又斗','合斗','吵斗','善斗','大斗','好斗','想斗','打斗','批斗','抓斗','抗斗','拆斗','拼斗','挑斗','接斗','搏斗','敢斗','文斗','斗一','斗上','斗不','斗久','斗了','斗他','斗你','斗倒','斗出','斗到','斗力','斗勇','斗去','斗口','斗命','斗嘴','斗在','斗垮','斗士','斗奇','斗她','斗妍','斗完','斗弄','斗得','斗心','斗忍','斗志','斗快','斗意','斗成','斗我','斗批','斗技','斗招','斗拳','斗掌','斗斗','斗智','斗棋','斗法','斗牛','斗狗','斗狠','斗眼','斗神','斗私','斗草','斗角','斗起','斗趣','斗酒','斗魂','智斗','暗斗','未斗','格斗','械斗','武斗','死斗','比斗','游斗','激斗','狠斗','猛斗','相斗','私斗','群斗','苦斗','虎斗','血斗','要斗','角斗','越斗','跟斗','迎斗','邀斗','酣斗','乱斗','内斗','别斗','剧斗','劲斗','夺斗','奋斗','厮斗','恶斗','战斗','斗来','斗个','斗传','斗剑','斗劲','斗胜','斗场','斗将','斗恶','斗战','斗擞','斗败','斗敌','斗杀','斗殴','斗气','斗争','斗兽','斗毕','斗舰','斗艺','斗艳','斗赢','斗输','斗过','斗鸡','斗饮','斗闹','斗鱼','斗丽','会斗','权斗','殴斗','决斗','争斗','独斗','竞斗','约斗','缠斗','罢斗','观斗','赌斗','较斗','连斗','门斗','双斗','颤斗','凤斗','斗!'] + ], + '系':[ + '系', + ['係','关系','系数'], + ['系','系统','系列','体系','派系','直系'], + ['繫','不系','劾系','心系','所系','拘系','擐系','系上','系乎','系了','系住','系囚','系妥','系心','系念','系手','系牢','系留','系腰','系膜','系起','颈系','连系','联系','维系','系马','系个','系块','系带','系怀','系挂','系于','系条','系绊','系紧','系缚','系绳','系缆','系脚','系辞','系铃','系颈','牵系','梦系','身系','腰系','背系','縻系'] + ], + '舍':[ + '捨', + ['舍','宿舍','寒舍','屋舍','舍下'] + ], + '干':[ + '幹', + ['乾','口干','吃干','吐干','吮干','吸干','吹干','呷干','喉干','喝干','嘴干','太干','干井','干似','干冰','干冷','干化','干咳','干咽','干品','干哥','干嚎','干土','干坤','干妹','干姊','干姐','干姜','干娘','干爹','干爸','干妈','干季','干巴','干布','干干','干式','干弟','干性','干料','干旱','干杯','干果','干枝','干枯','干柴','干梅','干沙','干泥','干洗','干涸','干渴','干焦','干熬','干燥','干爽','干球','干疤','干瘦','干眼','干瞪','干硬','干窘','干笑','干等','干粉','干耗','干肉','干股','干脆','干花','干草','干菜','干薪','干衣','干裂','干透','干酪','干醋','干隆','干面','弄干','很干','抹干','抽干','揩干','擦干','晾干','朝干','未干','杯干','果干','桑干','榨干','水干','流干','海干','滴干','炒干','烘干','烤干','焙干','焦干','煨干','熨干','略干','碗干','粉干','耗干','肉干','舔干','菜干','蒸干','速干','干儿','干哑','干呕','干坛','干孙','干尸','干搁','干晒','干净','干涩','干涧','干湿','干热','干烧','干瘪','干瘾','干发','干粮','干结','干丝','干声','干叶','干号','干货','干阳','干饭','拧干','晒干','极干','泪干','沥干','烧干','烩干','发干','笋干','绞干','阴干','难干','风干','饮干','饼干','鱼干','唇干'], + ['干','干系','天干','干涉','干扰','干戈','相干'] + ], + '了':[ + '了', + ['瞭','了望','了然','了解','了若指掌','了如指掌'] + ], + '谷':[ + '穀', + ['谷','低谷','山谷','谷峰','谷底'] + ], + '仿':[ + '仿', + ['倣','仿效'], + ['彷','仿佛','仿徉'], + ['徬','仿徨'] + ], + '效':[ + '效', + ['傚','模效','摹效','仿效','儆效','效尤','效法'] + ], + '克':[ + '克', + ['剋','克夫','克扣','克日','克星','克期','克死','克薄','生克','相克','冲克'], + ['刻','克苦'] + ], + '吊':[ + '吊', + ['弔','吊信','吊古','吊唁','吊奠','吊孝','吊客','吊影','吊念','吊慰','吊文','吊民','吊祭','哀吊','唁吊','盆吊','祭吊','陪吊','吊问','吊丧','吊场','吊书','吊词','吊诡','吊贺','吊钱','凭吊'] + ], + '台':[ + '臺', + ['颱','冬台','秋台','防台','台风','强台','轻台'], + ['檯','台凳','台子','台布','台面','吧台','抹台','揩台','球台','窗台','翻台','餐台','台历','台灯','台钟','书台','柜台','赌台','长台'] + ], + '回':[ + '回', + ['迴','北回','南回','回圈','回廊','回旋','回游','回翔','回避','峰回','巡回','迂回','回环','回纹','回绕','回肠','回荡','回銮','回响','回风','梦回','盘回','纡回','萦回','轮回','递回'] + ], + '后':[ + '後', + ['后','仙后','吕后','天后','太后','封后','帝后','废后','影后','后冠','后土','后妃','后稷','后羿','母后','王后','皇后','舞后','西后','艳后','韦后'] + ], + '征':[ + '征', + ['徵','代征','停征','像征','免征','咎征','征了','征人','征信','征候','征兆','征入','征兵','征募','征去','征友','征取','征召','征地','征婚','征引','征得','征收','征文','征求','征片','征用','征稿','征管','征聘','征象','征逐','征集','急征','性征','新征','特征','狂征','病征','稽征','考征','苛征','表征','象征','超征','魏征','带征','广征','强征','征个','征启','征敛','征状','征税','征粮','征纳','征缴','征诏','征询','征调','征财','征费','征赋','征购','征选','应征','横征','减征','滥征','纳征','缓征','联征','详征','诚征','课征','变征','开征','体征'] + ], + '注':[ + '注', + ['註','注解','备注','注脚','批注','注册','注定','校注','尾注','注销','标注','注释'] + ], + '丰':[ + '豐', + ['丰','三丰','丰姿','丰度','丰情','丰神','丰韵'] + ], + '并':[ + '並', + ['併','一并','不并','并入','并力','并合','并吞','并图','并拢','并案','并叠','并砌','并科','并负','并购','并赃','并除','并陇','侵并','兼并','合并','吞并','整并','归并','相并','砌并','被并','裁并','购并','双并'] + ], + '念':[ + '念', + ['唸','光念','念佛','念作','念到','念咒','念好','念完','念得','念念','念成','念法','敢念','念书','念给','念经','念诵','念过','念错','念点','没念'] + ], + '借':[ + '借', + ['藉','借以','借口','借故','慰借','狼借','借机','借词','凭借','蕴借'] + ], + '志':[ + '志', + ['誌','日志','网志','墓志铭','聊斋志异','三国志','杂志'] + ], + '么':[ + '麼', + ['么','老么','么女','么儿','么妹','么子','么弟'] + ], + '布':[ + '布', + ['佈','公布','分布','宣布','密布','布伏','布署','布兵','布告','布局','布施','布景','布置','布防','布雷','故布','散布','遍布','传布','布个','布坛','布导','布岗','布于','布满','布阵','广布','摆布','满布','发布','预布'] + ], + '分':[ + '分', + ['份','分量','身分'] + ], + '里':[ + '裡', + ['里','○里','一里','七里','三里','下里','九里','二里','五里','亚里','佳里','克里','全里','两里','八里','公里','六里','凯里','劈里','加里','北里','十里','千里','南里','卡里','吉里','哈里','哥里','啰里','四里','埔里','多里','少里','尤里','居里','峇里','布里','几里','底里','德里','拉里','故里','数里','斯里','普里','东里','格里','归里','波里','乌里','百里','稀里','罗里','英里','莫里','万里','苏里','里亚','里仁','里夫','里奥','里尼','里布','里拉','里昂','里根','里民','里尔','里科','里程','里约','里纳','里美','里肌','里兰','里路','里里','里长','西里','贝里','路里','道里','乡里','邻里','阿里','马里','0里','0里','1里','2里','3里','4里','5里','6里','7里','8里','9里'] + ], + '面':[ + '面', + ['麵','制面','吃面','拉面','拌面','揉面','杯面','油面','泡面','炒面','煮面','碗面','羹面','肉面','辣面','面店','面杖','面灰','面碗','面筋','面粉','面糊','面茶','面食','食面','寿面','杆面','凉面','汤面','烫面','发面','酱面','面价','面团','面厂','面摊','面汤','面线','面饺','面饼','面馆','面馍','面龟','饨面','卤面','麦面','干面','擀面'] + ], + '烟':[ + '煙', + ['菸','烟斗','吸烟','好烟','戒烟','抽烟','支烟','旱烟','根烟','烟商','烟客','烟枪','烟民','烟灰','烟瘾','烟草','烟酒','烟头','烟鬼','烟龄','禁烟','买烟','香烟'] + ], + '蒙':[ + '蒙', + ['濛','灰蒙','空蒙','蒙蒙','迷蒙','弥蒙','蒙雾'], + ['矇','欺蒙','蒙住','蒙叟','蒙敝','蒙昧','蒙混','蒙瞀','蒙瞢','蒙瞽','蒙蔽','蒙胧','蒙眬','蒙骗'], + ['懞','蒙懂'] + ], + '表':[ + '表', + ['錶','戴表','手表','秒表','腕表','表店','跳表','陀表','怀表','表带','表厂','表壳','表炼','表链','钟表','马表'] + ], + '板':[ + '板', + ['闆','老板'] + ], + '卷':[ + '卷', + ['捲','卷入','卷起','龙卷风','席卷','蛋卷','花卷','袭卷','卷款','卷发','卷走','卷进','卷曲','卷舌','烟卷'] + ], + '酸':[ + '酸', + ['痠','酸软','酸痛','腰酸背痛'] + ], + '仇':[ + '仇', + ['讎','复仇','仇恨','报仇','仇敌'] + ], + '几':[ + '幾', + ['几','窗明几净','窗明几洁','茶几'] + ], + '背':[ + '背', + ['揹','背负','背黑锅','背包'] + ], + '衔':[ + '銜', + ['啣','结草衔环','衔着'] + ], + '构':[ + '構', + ['搆','构陷','构思'] + ] + }; //此處為用語轉換,優先級最高,也可以用來給以上兩種轉換打補靪,此處簡繁共用 var sc2tcComb = { '香烟袅袅':'香煙裊裊', '袅袅香烟':'裊裊香煙', - '了解':'瞭解', '补丁':'補靪', '老挝':'寮國', '沈阳':'瀋陽', @@ -686,6 +685,10 @@ '乾':[ '干', ['乾','乾隆','乾卦','乾道','乾宅','乾造','乾之卦','乾為','「乾」'] + ], + '瞭':[ + '瞭', + ['了','瞭望','瞭然','瞭解','瞭若指掌','瞭如指掌'] ] }; From 34373272ec58a36f76f3271dcb06dd347c60e2cf Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 15:54:23 +0800 Subject: [PATCH 465/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index f885d4313ec..bff0a3b93cb 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.8 +// @version 2.7.9 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -1212,7 +1212,7 @@ if (window.top != window.self) { item.innerHTML=""; } }); - var i,j,k,rStr="",pageData=(doc.body?doc.body:doc).cloneNode(true),delList=[]; + var i,j,k,rStr="",pageData=(doc.body?doc.body:doc).cloneNode(true); pageData.innerHTML=pageData.innerHTML.replace(/\<\!\-\-((.|[\n|\r|\r\n])*?)\-\-\>/g,""); [].forEach.call(pageData.querySelectorAll("font.jammer"),function(item){ item.innerHTML=""; @@ -1223,8 +1223,11 @@ if (window.top != window.self) { item.innerHTML=""; }); } - [].forEach.call(pageData.querySelectorAll("script,style,link,img,noscript,iframe"),function(item){delList.push(item);}); - [].forEach.call(delList,function(item){item.innerHTML="";}); + [].forEach.call(pageData.querySelectorAll("script,style,link,noscript,iframe"),function(item){ + if (item && item.parentNode) { + item.parentNode.removeChild(item); + } + }); var endEle = ele => { return /^(I|STRONG|B|FONT|P|DL|DD|H\d)$/.test(ele.nodeName) && ele.children.length <= 1; }; From f53e935e9a5c3a8e3ba6a78aa8aea709e1e675ae Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 17:05:09 +0800 Subject: [PATCH 466/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 00bbdc615a9..f3b43df61de 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -135,7 +135,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for + [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) > 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。 ``` javascript -#list-chapterAll>dd>a>>item.href=item.href.replace(/.*book('(\d+)','(\d+)').*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; +#list-chapterAll>dd>a>>item.href=item.href.replace(/.*book\('(\d+)','(\d+)'\).*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` + [📕免費小説網](http://www.huazhuangsheying.com/book/3659/) > 也是有分頁,fetch後簡單處理一下就ok。 From 7cadc9eb1c715eff1cf60548e9d555a92c1d2ca5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 17:32:17 +0800 Subject: [PATCH 467/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index bff0a3b93cb..f73f90c66e7 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -731,6 +731,7 @@ if (window.top != window.self) { txtDownContent.style.display="none"; }; initTempSave(txtDownContent); + win.txtDownWords = txtDownWords; } function saveContent() { From 227efe75481372593c3dc458b7180d791c65498e Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 19:03:02 +0800 Subject: [PATCH 468/812] Update DownloadAllContentSavaAsZIP.user.js --- .../DownloadAllContentSavaAsZIP.user.js | 125 ++++++++++++++++-- 1 file changed, 115 insertions(+), 10 deletions(-) diff --git a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js index 9098f477f31..f94c1f40f6b 100644 --- a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js +++ b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js @@ -3,44 +3,149 @@ // @name:zh-CN 怠惰小说下载器 ZIP 扩展 // @name:zh-TW 怠惰小説下載器 ZIP 擴充 // @namespace hoothin -// @version 0.3 +// @version 0.4 // @description Save content as ZIP for DownloadAllContent // @description:zh-CN 下载时分章节保存 TXT 并打包为 ZIP // @description:zh-TW 下載時分章節儲存 TXT 並打包為 ZIP // @author hoothin // @match *://*/* // @grant unsafeWindow +// @grant GM_xmlhttpRequest // @require https://unpkg.com/jszip@3.7.1/dist/jszip.js // ==/UserScript== (function() { 'use strict'; + const threadNum = 20; var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; - var zipTips; - _unsafeWindow.downloadAllContentSaveAsZip = (rCats, info, callback) => { + var zipTips, loadingImgs = [], loadingIndex = 0, loadedNum = 0, zip; + + function dataURLToCanvas(dataurl, cb) { + if (!dataurl) return cb(null); + var canvas = document.createElement('CANVAS'); + var ctx = canvas.getContext('2d'); + var img = new Image(); + img.setAttribute("crossOrigin", "anonymous"); + img.onload = function() { + canvas.width = img.width; + canvas.height = img.height; + ctx.drawImage(img, 0, 0); + cb(canvas); + }; + img.onerror = function() { + cb(null); + }; + img.src = dataurl; + } + + async function urlToBlob(url) { + return await new Promise((resolve) => { + GM_xmlhttpRequest({ + method: 'GET', + url: url, + responseType:'blob', + timeout:20000, + headers: { + origin: location.origin, + referer: location.href, + accept: "*/*" + }, + onload: function(d) { + let blob = d.response; + let ext = blob.type.replace(/.*image\/(\w+).*/, "$1"); + if (ext == "webp") { + var self = this; + var a = new FileReader(); + a.readAsDataURL(blob); + a.onload = function (e) { + dataURLToCanvas(e.target.result, canvas => { + canvas.toBlob(blob => { + resolve(blob); + }, "image/png"); + }); + }; + a.onerror = function (e) { + resolve(null); + } + } else { + resolve(blob); + } + }, + onerror: function() { + resolve(null); + }, + ontimeout: function() { + resolve(null); + } + }); + }) + } + + async function downloadImage(cb) { + let i = loadingIndex; + loadingIndex++; + let src = loadingImgs[i]; + if (!src) return; + let blob = await urlToBlob(src); + if (blob) { + zip.file("imgs/" + i + ".jpg", blob); + zipTips.innerText = `Download images ${i + "/" + loadingImgs.length}...`; + } + loadedNum++; + if (loadedNum >= loadingImgs.length) { + cb(); + } else downloadImage(cb); + } + + function downloadImages(cb) { + let length = Math.min(loadingImgs.length, threadNum); + if (length == 0) { + return cb(); + } + for (let i = 0; i < length; i++) { + downloadImage(cb); + } + } + + const mdImgReg = /!\[img\]\((http.+?)\)/; + _unsafeWindow.downloadAllContentSaveAsZip = async (rCats, info, callback) => { if (!zipTips) { zipTips = document.createElement("div"); } if (!zipTips.parentNode) { - let txtDownWords = document.getElementById("txtDownWords"); + let txtDownWords = _unsafeWindow.txtDownWords; if (txtDownWords) { txtDownWords.appendChild(zipTips); } } console.log("Begin compress to ZIP..."); zipTips.innerText = "Begin compress to ZIP..."; - var zip = new JSZip(); + zip = new JSZip(); zip.file("readme.txt", info); var index = 1; rCats.forEach(cat => { let catTitle = cat.match(/.*?\r\n/); if (!catTitle) return; catTitle = catTitle[0].trim(); - zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "_").slice(0, 50) + ".txt", cat.replace(catTitle, "").replace(/^[\n\r]+/, "")); + cat = cat.replace(catTitle, "").replace(/^[\n\r]+/, ""); + let imgMatch = cat.match(mdImgReg), hasImg = false; + while (imgMatch) { + let index = loadingImgs.indexOf(imgMatch[1]); + if (index == -1) { + index = loadingImgs.length; + loadingImgs.push(imgMatch[1]); + } + cat = cat.replace(imgMatch[0], `![img](imgs/${index}.jpg)`); + imgMatch = cat.match(mdImgReg); + hasImg = true; + } + zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "_").slice(0, 50) + (hasImg ? ".md" : ".txt"), cat); + }); + downloadImages(() => { + zip.generateAsync({type: "blob", compression: "DEFLATE"}, meta => {zipTips.innerText = "percent: " + ((meta && meta.percent && meta.percent.toFixed(2)) || "100") + "%"}).then(function(content){ + callback(content); + zipTips.innerText = ""; + }) }); - zip.generateAsync({type: "blob", compression: "DEFLATE"}, meta => {zipTips.innerText = "percent: " + ((meta && meta.percent && meta.percent.toFixed(2)) || "100") + "%"}).then(function(content){ - callback(content); - zipTips.innerText = ""; - }) } })(); \ No newline at end of file From ac1b9146229c1d96ba6e8b7850a6b93d7f544b09 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 27 Nov 2023 20:16:22 +0800 Subject: [PATCH 469/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index b58c4f329b7..bcedb9db48a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.43 +// @version 1.7.44 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -3263,7 +3263,7 @@ title = ""; popup = true; if (popupMatch[1]) { - showTips = popupMatch[2] || 1; + showTips = popupMatch[2] || "1"; } } } @@ -4478,10 +4478,14 @@ targetElement = spannode; let targetShowTipsSite; if (word.showTips) { - let firstType = self.autoGetFirstType(); - let targetSites = firstType.querySelectorAll('a.search-jumper-btn[data-show-tips]:not(.notmatch)'); - let index = parseInt(word.showTips) - 1; - targetShowTipsSite = targetSites[index]; + if (/^\d+$/.test(word.showTips)) { + let firstType = self.autoGetFirstType(); + let targetSites = firstType.querySelectorAll('a.search-jumper-btn[data-show-tips]:not(.notmatch)'); + let index = parseInt(word.showTips) - 1; + targetShowTipsSite = targetSites[index]; + } else { + targetShowTipsSite = self.getTargetSitesByName([word.showTips])[0]; + } } self.setFuncKeyCall(true); if (targetShowTipsSite) { From 65a86afd6e2caadf3848669656ed2c00a9178032 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 11:35:28 +0800 Subject: [PATCH 470/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 90 +++++++++++++------ 1 file changed, 61 insertions(+), 29 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index f73f90c66e7..fcfdaf0aaf4 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.7.9 +// @version 2.8.0 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -223,7 +223,8 @@ if (window.top != window.self) { var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; var i18n={}; var rCats=[]; - var processFunc; + var processFunc, nextPageFunc; + const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor; var win=(typeof unsafeWindow=='undefined'? window : unsafeWindow); switch (lang){ case "zh-CN": @@ -836,7 +837,7 @@ if (window.top != window.self) { }, timeout:10000, overrideMimeType:"text/html;charset="+_charset, - onload: function(result) { + onload: async function(result) { let doc = getDocEle(result.responseText); if (charsetValid) { let equiv = doc.querySelector('[http-equiv="Content-Type"]'); @@ -859,7 +860,7 @@ if (window.top != window.self) { } } let base = doc.querySelector("base"); - let nextPage = !disableNextPage && !processFunc && checkNextPage(doc, base ? base.href : aTag.href); + let nextPage = !disableNextPage && !processFunc && await checkNextPage(doc, base ? base.href : aTag.href); if(nextPage){ var inArr=false; for(var ai=0;ai { requestDoc(); @@ -1180,16 +1181,21 @@ if (window.top != window.self) { return (absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src)); } - function checkNextPage(doc, baseUrl) { - let aTags = doc.querySelectorAll("a"), nextPage = null; - for (var i = 0; i < aTags.length; i++) { - let aTag = aTags[i]; - if (innerNextPage.test(aTag.innerText) && aTag.href && !/javascript:|#/.test(aTag.href)) { - let nextPageHref = canonicalUri(aTag.getAttribute("href"), baseUrl || location.href); - if (nextPageHref != location.href) { - nextPage = aTag; - nextPage.href = nextPageHref; - break; + async function checkNextPage(doc, baseUrl) { + let nextPage = null; + if (nextPageFunc) { + nextPage = await nextPageFunc(doc, baseUrl); + } else { + let aTags = doc.querySelectorAll("a"); + for (var i = 0; i < aTags.length; i++) { + let aTag = aTags[i]; + if (innerNextPage.test(aTag.innerText) && aTag.href && !/javascript:|#/.test(aTag.href)) { + let nextPageHref = canonicalUri(aTag.getAttribute("href"), baseUrl || location.href); + if (nextPageHref != location.href) { + nextPage = aTag; + nextPage.href = nextPageHref; + break; + } } } } @@ -1540,21 +1546,47 @@ if (window.top != window.self) { } var retainImage=!!GM_getValue("retainImage"); var evalCode = urlsArr[3]; - if (evalCode && /^iframe:/.test(evalCode.trim())) { - evalCode = evalCode.trim().replace("iframe:", ""); - useIframe = true; - iframeSandbox = false; - iframeInit = false; - while (/^(sandbox|init):/.test(evalCode)) { - iframeSandbox = evalCode.match(/^sandbox:{(.*?)}/); - if (iframeSandbox) { - iframeSandbox = iframeSandbox[1]; - evalCode = evalCode.replace(/^sandbox:{(.*?)}/, ""); + if (evalCode) { + evalCode = evalCode.trim(); + if (/^iframe:/.test(evalCode)) { + evalCode = evalCode.replace("iframe:", ""); + useIframe = true; + iframeSandbox = false; + iframeInit = false; + while (/^(sandbox|init):/.test(evalCode)) { + iframeSandbox = evalCode.match(/^sandbox:\{(.*?)\}/); + if (iframeSandbox) { + evalCode = evalCode.replace(iframeSandbox[0], ""); + iframeSandbox = iframeSandbox[1]; + } + iframeInit = evalCode.match(/^init:\{(.*?)\}/); + if (iframeInit) { + evalCode = evalCode.replace(iframeInit[0], ""); + iframeInit = iframeInit[1]; + } } - iframeInit = evalCode.match(/^init:{(.*?)}/); - if (iframeInit) { - iframeInit = iframeInit[1]; - evalCode = evalCode.replace(/^init:{(.*?)}/, ""); + } + let nextMatch = evalCode.match(/^next:(\{+)/); + if (nextMatch) { + let splitLen = nextMatch[1].length; + nextMatch = evalCode.match(new RegExp(`^next:\\{{${splitLen}}(.*?)\\}{${splitLen}}`)); + if (nextMatch) { + let nextCode = nextMatch[1]; + evalCode = evalCode.replace(nextMatch[0], ""); + nextPageFunc = async (doc, url) => { + let result; + if (/\breturn\b/.test(nextCode)) { + result = await new AsyncFunction('doc', 'url', '"use strict";' + nextCode)(doc, url); + } else { + try { + result = doc.querySelector(nextCode); + if (result) { + result.href = canonicalUri(result.getAttribute("href"), url || location.href); + } + } catch(e) {} + } + return result; + } } } } From 5f93a7f4410a32ada9822d773a68df5f03484bd3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 11:54:38 +0800 Subject: [PATCH 471/812] Update README.md --- DownloadAllContent/README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index f3b43df61de..a27839034f9 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -65,6 +65,19 @@ ### 完整格式說明 某個章節名 / CSS 選擇器【選擇器後可跟 >> 傳入 item 處理】 **@@** 抓取到 URL 的正則匹配 **@@** 正則替換 URL **@@** 根據爬取返回內容 data 處理並返回最終文本 +#### 内頁處理範例 +假設章節元素為 `a.links` ++ 使用 iframe 處理内頁内容 + `a.links@@@@@@iframe:` + - iframe 添加 sandbox + `a.links@@@@@@iframe:sandbox:{allow-same-origin}` + - iframe 添加初始化程式碼 + `a.links@@@@@@iframe:init:{win.top=win.self}` ++ 自定義内頁中分頁抓取方式 + - 透過選擇器抓取 + `a.links@@@@@@next:{a.next}` + - 透過程式碼生成 + `a.links@@@@@@next:{{return await getNextElement()}}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 @@ -194,6 +207,11 @@ function decode(t) { ``` javascript .chapter>li>a@@@@@@let content="\n";let checkContent=(doc,over)=>{word=doc.querySelector('.content-div');if(!word)content+='\n'+doc.body.innerText;else {let ps=[];[].forEach.call(word.children, p=>{if(p.className!='moreinfo')ps.push(p.innerText)});content+=ps.join('\n');}let next=doc.querySelector("#pt_next");if(next){fetch(location.href+ doc.body.innerHTML.match(/'([^\|']+)\|[^']+'\.split/)[1]+".html").then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content.replace(/\s*「如章节缺失请退#出#阅#读#模#式」\s*|\s*本章未完,点下一页继续阅读。>>>\s*/g,''))});return false; ``` ++ [📕H圖書館](https://hlib.cc/s/sis-9732262) +> 簡單的分頁,可以使用簡化規則,傳入内分頁的選擇器,其餘交給脚本自動處理。 +``` javascript +.list-group-item>div>a.text-decoration-none@@@@@@next:{[aria-label='后一页']+a} +``` ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html From ce5fe04eec1c7ebbb1cfd7297c3cbf19cd75dfdb Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:03:24 +0800 Subject: [PATCH 472/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index a27839034f9..6e06e48e227 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,7 +77,7 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 - `a.links@@@@@@next:{{return await getNextElement()}}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 + ```a.links@@@@@@next:{{return await getNextElement()}}``` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 4b4261c8c99804d858a83b830b5880030db282f0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:20:40 +0800 Subject: [PATCH 473/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 6e06e48e227..d31a7083e09 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,7 +77,7 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 - ```a.links@@@@@@next:{{return await getNextElement()}}``` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 + ```a.links@@@@@@next:{{ return await getNextElement() }}``` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 3b1ed54d5c717db948927fe1a4cfe6b8c09d68b0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:25:23 +0800 Subject: [PATCH 474/812] Update README.md --- DownloadAllContent/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index d31a7083e09..7767b8934a2 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,7 +77,10 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 - ```a.links@@@@@@next:{{ return await getNextElement() }}``` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 + ```js + a.links@@@@@@next:{{ return await getNextElement() }} + ``` + 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 664b2208b6cf399e17fab35251e7690a89028a8a Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:29:51 +0800 Subject: [PATCH 475/812] Update README.md --- DownloadAllContent/README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 7767b8934a2..abbfd8f49c8 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,10 +77,7 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 - ```js - a.links@@@@@@next:{{ return await getNextElement() }} - ``` - 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 + a.links@@@@@@next:{{return await getNextElement() }} 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 9914b6fbfeb530ddc97ca61ba4f94647d5ad6b26 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:31:43 +0800 Subject: [PATCH 476/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index abbfd8f49c8..381a2f3a537 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,7 +77,7 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 - a.links@@@@@@next:{{return await getNextElement() }} 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 +

a.links@@@@@@next:{{return await getNextElement()}}
可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From b4ae558638851475d7ba2199d1a29b46400012ef Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:33:11 +0800 Subject: [PATCH 477/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 381a2f3a537..9599983353a 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,7 +77,7 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 -
a.links@@@@@@next:{{return await getNextElement()}}
可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 +
a.links@@@@@@next:{{return await getNextElement()}}
可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 0ae4bdd0c110a8a75916a91b952393a439967ce8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:39:27 +0800 Subject: [PATCH 478/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 9599983353a..93ce306de37 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,7 +77,7 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 -
a.links@@@@@@next:{{return await getNextElement()}}
可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 + `a.links@@@@@@next:{{ɾeturn await getNextElement()}}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 04ef997def2f5cfe657335c501737404ef4204ed Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 12:41:16 +0800 Subject: [PATCH 479/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 93ce306de37..63722bb4a5f 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -77,7 +77,7 @@ - 透過選擇器抓取 `a.links@@@@@@next:{a.next}` - 透過程式碼生成 - `a.links@@@@@@next:{{ɾeturn await getNextElement()}}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 + `a.links@@@@@@next:{return await getNextElement()}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 96903a80cc476f2d1ffe9e21818fb4668a9b775c Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 14:02:46 +0800 Subject: [PATCH 480/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 182 +++++++++++++----- 1 file changed, 139 insertions(+), 43 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index fcfdaf0aaf4..175165066b6 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.0 +// @version 2.8.1 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -230,7 +230,7 @@ if (window.top != window.self) { case "zh-CN": case "zh-SG": i18n={ - fetch:"开始下载小说【Ctrl+F9】", + fetch:"开始下载小说", info:"来源:#t#\n本文是使用怠惰小说下载器(DownloadAllContent)下载的", error:"该段内容获取失败", downloading:"已下载完成 %s 段,剩余 %s 段
正在下载 %s", @@ -266,13 +266,16 @@ if (window.top != window.self) { dacSaveAsZip:"下载为 zip", dacSetCustomRule:"修改规则", dacAddUrl:"添加章节", - dacStartDownload:"下载选中" + dacStartDownload:"下载选中", + downloadShortcut:"下载章节", + downloadSingleShortcut:"下载单页", + downloadCustomShortcut:"自定义下载" }; break; case "zh-TW": case "zh-HK": i18n={ - fetch:"開始下載小說【Ctrl+F9】", + fetch:"開始下載小說", info:"來源:#t#\n本文是使用怠惰小說下載器(DownloadAllContent)下載的", error:"該段內容獲取失敗", downloading:"已下載完成 %s 段,剩餘 %s 段
正在下載 %s", @@ -308,12 +311,15 @@ if (window.top != window.self) { dacSaveAsZip:"下載為 zip", dacSetCustomRule:"修改規則", dacAddUrl:"新增章節", - dacStartDownload:"下載選取" + dacStartDownload:"下載選取", + downloadShortcut:"下載章節", + downloadSingleShortcut:"下載單頁", + downloadCustomShortcut:"自設下載" }; break; default: i18n={ - fetch:"Download [Ctrl+F9]", + fetch:"Download", info:"Source: #t#\nThe TXT is downloaded by 'DownloadAllContent'", error:"Failed in downloading current chapter", downloading:"%s pages are downloaded, there are still %s pages left
Downloading %s ......", @@ -349,7 +355,10 @@ if (window.top != window.self) { dacSaveAsZip: "Save as zip", dacSetCustomRule:"Modify rules", dacAddUrl:"Add Chapter", - dacStartDownload:"Download selected" + dacStartDownload:"Download selected", + downloadShortcut:"Download chapter", + downloadSingleShortcut:"Download single page", + downloadCustomShortcut:"Custom download" }; break; } @@ -860,37 +869,40 @@ if (window.top != window.self) { } } let base = doc.querySelector("base"); - let nextPage = !disableNextPage && !processFunc && await checkNextPage(doc, base ? base.href : aTag.href); - if(nextPage){ - var inArr=false; - for(var ai=0;ai { + var inArr=false; + for(var ai=0;ai>"; - aEles.push(nextPage); - let targetIndex = curIndex; - for(let a=0;a>"; + aEles.push(nextPage); + let targetIndex = curIndex; + for(let a=0;a= 400) { console.warn("error:", `status: ${result.status} from: ${aTag.href}`); @@ -1185,6 +1197,7 @@ if (window.top != window.self) { let nextPage = null; if (nextPageFunc) { nextPage = await nextPageFunc(doc, baseUrl); + if (nextPage && nextPage.length === 0) nextPage = null; } else { let aTags = doc.querySelectorAll("a"); for (var i = 0; i < aTags.length; i++) { @@ -1579,10 +1592,12 @@ if (window.top != window.self) { result = await new AsyncFunction('doc', 'url', '"use strict";' + nextCode)(doc, url); } else { try { - result = doc.querySelector(nextCode); - if (result) { - result.href = canonicalUri(result.getAttribute("href"), url || location.href); - } + result = doc.querySelectorAll(nextCode); + if (result && result.length) { + [].forEach.call(result, ele => { + ele.href = canonicalUri(ele.getAttribute("href"), url || location.href); + }); + } else result = null; } catch(e) {} } return result; @@ -1633,6 +1648,10 @@ if (window.top != window.self) { function searchRule(){ GM_openInTab(configPage + "#@" + location.hostname, {active: true}); } + var downloadShortcut = GM_getValue("downloadShortcut") || {ctrlKey: true, shiftKey: false, altKey: false, metaKey: false, key: 'F9'}; + var downloadSingleShortcut = GM_getValue("downloadSingleShortcut") || {ctrlKey: true, shiftKey: true, altKey: false, metaKey: false, key: 'F9'}; + var downloadCustomShortcut = GM_getValue("downloadCustomShortcut") || {ctrlKey: true, shiftKey: false, altKey: true, metaKey: false, key: 'F9'}; + if (location.origin + location.pathname == configPage) { let exampleNode = document.getElementById("example"); if (!exampleNode) return; @@ -1742,7 +1761,69 @@ if (window.top != window.self) { insertPos.parentNode.insertBefore(con, insertPos); return option; } + function formatShortcut(e) { + let result = []; + if (e.ctrlKey) { + result.push("Ctrl"); + } + if (e.shiftKey) { + result.push("Shift"); + } + if (e.altKey) { + result.push("Alt"); + } + if (e.metaKey) { + result.push("Meta"); + } + result.push(e.key); + return result.join(" + "); + } + function geneShortcutData(str) { + if (!str) return ""; + let result = {ctrlKey: false, shiftKey: false, altKey: false, metaKey: false, key: ''}; + str.split(" + ").forEach(item => { + switch(item) { + case "Ctrl": + result.ctrlKey = true; + break; + case "Shift": + result.shiftKey = true; + break; + case "Alt": + result.altKey = true; + break; + case "Meta": + result.metaKey = true; + break; + default: + result.key = item; + break; + } + }); + return result; + } let showFilterList = createOption(i18n.showFilterList, !!GM_getValue("showFilterList"), "checkbox"); + let downloadShortcutInput = createOption(i18n.downloadShortcut, formatShortcut(downloadShortcut) || ""); + let downloadSingleShortcutInput = createOption(i18n.downloadSingleShortcut, formatShortcut(downloadSingleShortcut) || ""); + let downloadCustomShortcutInput = createOption(i18n.downloadCustomShortcut, formatShortcut(downloadCustomShortcut) || ""); + downloadShortcutInput.setAttribute("readonly", "true"); + downloadSingleShortcutInput.setAttribute("readonly", "true"); + downloadCustomShortcutInput.setAttribute("readonly", "true"); + let keydonwHandler = e => { + if (e.key) { + if (e.key == "Backspace") { + e.target.value = ""; + } else if (e.key != "Control" && e.key != "Shift" && e.key != "Alt" && e.key != "Meta") { + e.target.value = formatShortcut(e); + } + } + e.preventDefault(); + e.stopPropagation(); + }; + downloadShortcutInput.addEventListener("keydown", keydonwHandler); + downloadSingleShortcutInput.addEventListener("keydown", keydonwHandler); + downloadCustomShortcutInput.addEventListener("keydown", keydonwHandler); + let delSelector = createOption(i18n.del, GM_getValue("selectors") || ""); delSelector.setAttribute("placeHolder", ".mask,.ksam"); let downThreadNum = createOption(i18n.downThreadNum, GM_getValue("downThreadNum") || "20", "number"); @@ -1793,6 +1874,9 @@ if (window.top != window.self) { GM_setValue("showFilterList", showFilterList.checked); GM_setValue("disableNextPage", !nextPage.checked); GM_setValue("nextPageReg", nextPageReg.value || ""); + GM_setValue("downloadShortcut", geneShortcutData(downloadShortcutInput.value) || ""); + GM_setValue("downloadSingleShortcut", geneShortcutData(downloadSingleShortcutInput.value) || ""); + GM_setValue("downloadCustomShortcut", geneShortcutData(downloadCustomShortcutInput.value) || ""); alert(i18n.saveOk); }; return; @@ -1811,17 +1895,29 @@ if (window.top != window.self) { if(!sortByUrl)GM_setValue("contentSort",window.confirm(i18n.reSort));*/ } - document.addEventListener("keydown", function(e) { - if(e.keyCode == 120 && e.ctrlKey) { - fetch(e.shiftKey); - } - }); - GM_registerMenuCommand(i18n.custom, () => { + function checkKey(shortcut1, shortcut2) { + return shortcut1.ctrlKey == shortcut2.ctrlKey && shortcut1.shiftKey == shortcut2.shiftKey && shortcut1.altKey == shortcut2.altKey && shortcut1.metaKey == shortcut2.metaKey && shortcut1.key == shortcut2.key; + } + + function startCustom() { var customRules = GM_getValue("DACrules_" + document.domain); var urls = window.prompt(i18n.customInfo, customRules ? customRules : "https://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html"); if (urls) { customDown(urls); } + } + + document.addEventListener("keydown", function(e) { + if (checkKey(downloadCustomShortcut, e)) { + startCustom(); + } else if (checkKey(downloadSingleShortcut, e)) { + fetch(true); + } else if (checkKey(downloadShortcut, e)) { + fetch(false); + } + }); + GM_registerMenuCommand(i18n.custom, () => { + startCustom(); }); GM_registerMenuCommand(i18n.fetch, fetch); GM_registerMenuCommand(i18n.setting, setDel); From bb51c7a0174da7d03edfc9eec1cbc520d23e1027 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 14:25:19 +0800 Subject: [PATCH 481/812] 1.9.36.109 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 7 ++++--- SearchJumper/searchJumper.user.js | 9 +++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 97ea0c1ebc4..87a20505e27 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.108](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.109](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index c598486d084..23ba2d5f342 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.108 +// @version 1.9.36.109 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2271,8 +2271,6 @@ ".nextPage", ".pagination-next>a", "a[data-pagination=next]", - "[class*=pagination] li.active+li>a", - "[class^=pag] .current+a", ".pageButtonsCurrent+a", "a[class*=nextpage]", "li.page-current+li>a", @@ -2283,6 +2281,9 @@ ".pagination-nav__item--next>a", "a.pageright", ".page-numbers.current+a", + "a.page-numbers.next", + "body [class*=pagination] li.active+li>a", + "body [class^=pag] .current+a", ".page_current+a", "input[value='next']", "input[value='Next page']", diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index bcedb9db48a..75a6c36610c 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -3257,8 +3257,9 @@ title = titleMatch[1]; word = word.replace(titleReg, "$2"); if (title == "\\$popup") title = "$popup"; + else if (title == "\\@popup") title = "@popup"; else { - let popupMatch = title.match(/^\$popup(\((.*)\))?$/); + let popupMatch = title.match(/^[\$@]popup(\((.*)\))?$/); if (popupMatch) { title = ""; popup = true; @@ -3960,7 +3961,7 @@
${i18n("wordStyle")}
${i18n("wordTitle")}
- +
@@ -4062,9 +4063,9 @@ if (typeof word.hideParent !== 'undefined') wordHide.value = word.hideParent; try { if (word.popup) { - wordTitle.value = "$popup"; + wordTitle.value = "@popup"; if (word.showTips) { - wordTitle.value = `$popup(${word.showTips})`; + wordTitle.value = `@popup(${word.showTips})`; } } else { wordTitle.value = word.title !== word.showWords ? JSON.parse('"' + word.title + '"') : ""; From a5c73d73d0a426bda5b2eb59b39b54429204ce99 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 20:12:07 +0800 Subject: [PATCH 482/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 23ba2d5f342..d82550e02e8 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -7505,17 +7505,6 @@ clearInterval(checkRemoveIntv); window.removeEventListener('message', loadedHandler, false); iframe.removeEventListener('load', loadedHandler, false); - try { - let doc = iframe.contentDocument || iframe.contentWindow.document; - let code = ruleParser.curSiteRule.init; - if (code) { - try { - await new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', 'sleep', '"use strict";' + code)(doc, iframe.contentWindow, iframe, async sel => {await clickAction(sel, doc)}, async sel => {await enterAction(sel, doc)}, async (sel, v) =>{await inputAction(sel, v, doc)}, async time => {await sleep(time)}); - } catch(e) { - debug(e); - } - } - } catch(e) {} let pageEleTryTimes = 0; async function checkIframe() { if (urlChanged || isPause) { @@ -8076,14 +8065,6 @@ } } loadedHandler(); - let code = ruleParser.curSiteRule.init; - if (code) { - try { - await new AsyncFunction('doc', 'win', 'iframe', 'click', 'enter', 'input', 'sleep', '"use strict";' + code)(iframeDoc, curIframe.contentWindow, curIframe, async sel => {await clickAction(sel, iframeDoc)}, async sel => {await enterAction(sel, iframeDoc)}, async (sel, v) =>{await inputAction(sel, v, iframeDoc)}, async time => {await sleep(time)}); - } catch(e) { - debug(e); - } - } iframeDoc.addEventListener('wheel', e => { document.dispatchEvent(new Event('wheel')); }, true); From 49ebbbed8cab58c8ff9a9f3fd46221f60bf0dbfe Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 28 Nov 2023 20:54:28 +0800 Subject: [PATCH 483/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 63722bb4a5f..8c3ee7bb161 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -146,7 +146,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for .book_last>dl>dd>a:not([style])@@@@@@let content="";let checkContent=(doc,over)=>{word=doc.querySelector('#chaptercontent');if(!word)content+='\n'+doc.body.innerText;else {word.innerHTML=word.innerHTML.replace(/
/g,'\n');content+='\n'+word.innerText;}let next=doc.querySelector("#pb_next");if(next&&/_\d\.html/.test(next.href)){fetch(next.href).then(r => r.arrayBuffer()).then(d => {let decoder = new TextDecoder("gbk");let text = decoder.decode(d);let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = text;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content)});return false; ``` + [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) -> 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。 +> 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。如若在設置中開啓`保留內文圖片的網址`,配合 zip 擴展使用,可以將圖片全部保存在 zip 中,此時使用 OCR 識別程式(例如[ImgCodeCheck](https://github.com/hoothin/ImgCodeCheck/)),即可獲取對應文字,批量替換即可。 ``` javascript #list-chapterAll>dd>a>>item.href=item.href.replace(/.*book\('(\d+)','(\d+)'\).*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` From db67fbf2c8028c61b1447b9e876e81d9abe4b4dc Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 29 Nov 2023 14:26:20 +0800 Subject: [PATCH 484/812] Update DownloadAllContentSavaAsZIP.user.js --- .../DownloadAllContentSavaAsZIP.user.js | 161 +++++++++++++----- 1 file changed, 114 insertions(+), 47 deletions(-) diff --git a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js index f94c1f40f6b..e704d278d7d 100644 --- a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js +++ b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js @@ -3,7 +3,7 @@ // @name:zh-CN 怠惰小说下载器 ZIP 扩展 // @name:zh-TW 怠惰小説下載器 ZIP 擴充 // @namespace hoothin -// @version 0.4 +// @version 0.5 // @description Save content as ZIP for DownloadAllContent // @description:zh-CN 下载时分章节保存 TXT 并打包为 ZIP // @description:zh-TW 下載時分章節儲存 TXT 並打包為 ZIP @@ -16,26 +16,55 @@ (function() { 'use strict'; - const threadNum = 20; + const threadNum = 20;//圖片下載綫程數 + const ocrApi = ""; + //const ocrApi = "http://127.0.0.1:416/?img=%t";//ocr 識別 api var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; - var zipTips, loadingImgs = [], loadingIndex = 0, loadedNum = 0, zip; + var zipTips, loadingImgs = [], loadingIndex = 0, loadedNum = 0, ocrNum = 0, zip, blobDict = {}, ocrDict = {}; - function dataURLToCanvas(dataurl, cb) { - if (!dataurl) return cb(null); - var canvas = document.createElement('CANVAS'); - var ctx = canvas.getContext('2d'); - var img = new Image(); - img.setAttribute("crossOrigin", "anonymous"); - img.onload = function() { - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0); - cb(canvas); - }; - img.onerror = function() { - cb(null); - }; - img.src = dataurl; + async function dataURLToBlob(dataurl, ext = "jpeg") { + return await new Promise((resolve) => { + if (!dataurl) return resolve(null); + var canvas = document.createElement('CANVAS'); + var ctx = canvas.getContext('2d'); + var img = new Image(); + img.setAttribute("crossOrigin", "anonymous"); + img.onload = function() { + canvas.width = img.width; + canvas.height = img.height; + ctx.drawImage(img, 0, 0); + var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + for(var i = 0; i < imageData.data.length; i += 4) { + if(imageData.data[i + 3] == 0) { + imageData.data[i] = 255; + imageData.data[i + 1] = 255; + imageData.data[i + 2] = 255; + imageData.data[i + 3] = 255; + } + } + ctx.putImageData(imageData, 0, 0); + canvas.toBlob(blob => { + resolve(blob); + }, `image/${ext}`); + }; + img.onerror = function() { + resolve(null); + }; + img.src = dataurl; + }); + } + + async function blobToDataURL(blob) { + return await new Promise((resolve) => { + var a = new FileReader(); + a.readAsDataURL(blob); + a.onload = function (e) { + resolve(e.target.result); + }; + a.onerror = function (e) { + resolve(null); + }; + }); } async function urlToBlob(url) { @@ -50,26 +79,8 @@ referer: location.href, accept: "*/*" }, - onload: function(d) { - let blob = d.response; - let ext = blob.type.replace(/.*image\/(\w+).*/, "$1"); - if (ext == "webp") { - var self = this; - var a = new FileReader(); - a.readAsDataURL(blob); - a.onload = function (e) { - dataURLToCanvas(e.target.result, canvas => { - canvas.toBlob(blob => { - resolve(blob); - }, "image/png"); - }); - }; - a.onerror = function (e) { - resolve(null); - } - } else { - resolve(blob); - } + onload: async function(d) { + resolve(d.response); }, onerror: function() { resolve(null); @@ -82,21 +93,64 @@ } async function downloadImage(cb) { + if (loadedNum >= loadingImgs.length || loadingIndex >= loadingImgs.length) return; let i = loadingIndex; loadingIndex++; let src = loadingImgs[i]; - if (!src) return; let blob = await urlToBlob(src); if (blob) { zip.file("imgs/" + i + ".jpg", blob); - zipTips.innerText = `Download images ${i + "/" + loadingImgs.length}...`; + zipTips.innerText = `Download images ${loadedNum + "/" + loadingImgs.length}...`; + blobDict[src] = blob; } loadedNum++; if (loadedNum >= loadingImgs.length) { - cb(); + if (ocrApi) { + loadingIndex = 0; + let length = Math.min(loadingImgs.length, threadNum); + for (let i = 0; i < length; i++) { + recognizeImage(cb); + } + } else { + cb(); + } } else downloadImage(cb); } + async function recognizeImage(cb) { + if (ocrNum >= loadingImgs.length || loadingIndex >= loadingImgs.length) return; + let i = loadingIndex; + loadingIndex++; + let src = loadingImgs[i]; + let dataURL = await blobToDataURL(blobDict[src]); + let blob = await dataURLToBlob(dataURL, "jpeg"); + dataURL = await blobToDataURL(blob); + let result = await new Promise((resolve) => { + GM_xmlhttpRequest({ + method: 'GET', + url: ocrApi.replace("%t", encodeURIComponent(dataURL.replace("data:image/jpeg;base64,", ""))), + timeout:20000, + onload: function(d) { + resolve(d.response); + }, + onerror: function() { + resolve(null); + }, + ontimeout: function() { + resolve(null); + } + }); + }); + ocrNum++; + zipTips.innerText = `Recognize images ${ocrNum + "/" + loadingImgs.length}...`; + if (result) { + ocrDict[i] = result; + } + if (ocrNum >= loadingImgs.length) { + cb(); + } else recognizeImage(cb); + } + function downloadImages(cb) { let length = Math.min(loadingImgs.length, threadNum); if (length == 0) { @@ -109,6 +163,9 @@ const mdImgReg = /!\[img\]\((http.+?)\)/; _unsafeWindow.downloadAllContentSaveAsZip = async (rCats, info, callback) => { + loadingIndex = 0; + loadedNum = 0; + ocrNum = 0; if (!zipTips) { zipTips = document.createElement("div"); } @@ -122,10 +179,11 @@ zipTips.innerText = "Begin compress to ZIP..."; zip = new JSZip(); zip.file("readme.txt", info); - var index = 1; - rCats.forEach(cat => { + let zipTemp = []; + for (let i = 0; i < rCats.length; i++) { + let cat = rCats[i]; let catTitle = cat.match(/.*?\r\n/); - if (!catTitle) return; + if (!catTitle) continue; catTitle = catTitle[0].trim(); cat = cat.replace(catTitle, "").replace(/^[\n\r]+/, ""); let imgMatch = cat.match(mdImgReg), hasImg = false; @@ -139,9 +197,18 @@ imgMatch = cat.match(mdImgReg); hasImg = true; } - zip.file(index++ + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "_").slice(0, 50) + (hasImg ? ".md" : ".txt"), cat); - }); + zipTemp.push({title: (i + 1) + " - " + catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "_").slice(0, 50), hasImg: hasImg, content: cat}); + } downloadImages(() => { + zipTemp.forEach(d => { + if (ocrApi) { + d.hasImg = false; + Object.keys(ocrDict).forEach(key => { + d.content = d.content.replace(new RegExp(`!\\[img\\]\\(imgs/${key}\\.jpg\\)`, 'g'), ocrDict[key]); + }); + } + zip.file(d.title + (d.hasImg ? ".md" : ".txt"), d.content); + }); zip.generateAsync({type: "blob", compression: "DEFLATE"}, meta => {zipTips.innerText = "percent: " + ((meta && meta.percent && meta.percent.toFixed(2)) || "100") + "%"}).then(function(content){ callback(content); zipTips.innerText = ""; From 82c3280455061de4ed7ac28713a6ec8349023e9d Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 29 Nov 2023 15:02:16 +0800 Subject: [PATCH 485/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 8c3ee7bb161..f7a7026d1a7 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -148,7 +148,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for + [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) > 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。如若在設置中開啓`保留內文圖片的網址`,配合 zip 擴展使用,可以將圖片全部保存在 zip 中,此時使用 OCR 識別程式(例如[ImgCodeCheck](https://github.com/hoothin/ImgCodeCheck/)),即可獲取對應文字,批量替換即可。 ``` javascript -#list-chapterAll>dd>a>>item.href=item.href.replace(/.*book\('(\d+)','(\d+)'\).*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; +#list-chapterAll>dd>a>>item.href=item.href.replace(/.*book\('(\d+)','(\d+)'\).*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
/g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){[].forEach.call(c.querySelectorAll("img[src]"), img => { let imgTxt=`![img](${location.origin+img.getAttribute("src")})`; let imgTxtNode=document.createTextNode(imgTxt); img.parentNode.replaceChild(imgTxtNode, img); });c.innerHTML=c.innerHTML.replace(/
/g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` + [📕免費小説網](http://www.huazhuangsheying.com/book/3659/) > 也是有分頁,fetch後簡單處理一下就ok。 From 4e879d887795d6ca1b23af387a64ee6ae8dab908 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 29 Nov 2023 15:39:28 +0800 Subject: [PATCH 486/812] 1.9.36.110 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 87a20505e27..91b84c43e8a 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.109](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.110](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d82550e02e8..ae6e7436dfc 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.109 +// @version 1.9.36.110 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1705,7 +1705,7 @@ return ">*"; } else { let middleChild = ele.children[parseInt(ele.children.length / 2)]; - if ((curStyle.display === 'flex' && curStyle.flexDirection == "row") || (rulesData.opacity != 0 && !pf)) { + if ((curStyle.display === 'flex' && curStyle.flexDirection == "row") || (curStyle.float == "none" && rulesData.opacity != 0 && !pf)) { return ""; } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight == 0) { return ""; From 4748ea0742276523158cf3e7012dc7ee13fe26b9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 30 Nov 2023 08:16:06 +0800 Subject: [PATCH 487/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 1 + 1 file changed, 1 insertion(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index c27d451ae2b..4ebb2a3ff86 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -5749,6 +5749,7 @@ "pageElement": ".node-teaser", "insert": "#pager", "insertPos": 1, + "include": ".all-tags-page", "replaceElement": "#pager", "css": ".content-container .content{margin-right:0px!important}.ad-side-right,.footer{display:none!important}" }, From b78562f8d2f144b372275fb1a0881aa8b74e0695 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 30 Nov 2023 08:27:46 +0800 Subject: [PATCH 488/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 735 +++++++++++++++++++++++++++++++++++- 1 file changed, 730 insertions(+), 5 deletions(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 4ebb2a3ff86..497d47485af 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8,12 +8,14 @@ }, { "name": "ICONFINDER ", + "author": "skofkyo", "enable": 0, "example": "https://www.iconfinder.com/search?q=Download", "url": "^https?://www\\.iconfinder\\.com/" }, { "name": "菜鸟工具 - JS/CSS/JSON/HTML 調整為上下欄", + "author": "skofkyo", "enable": 1, "example": "https://c.runoob.com/front-end/51/,https://c.runoob.com/front-end/52/,https://c.runoob.com/front-end/7683/,https://c.runoob.com/front-end/47/", "url": "^https?://c\\.runoob\\.com/front-end/(47|51|52|7683)/", @@ -22,6 +24,7 @@ }, { "name": "webtoons - 手機版閱讀 (手動翻頁模式,預讀下一話圖片)", + "author": "skofkyo", "example": "https://m.webtoons.com/zh-hant/time-slip/estatedeveloper/%E7%AC%AC1%E8%A9%B1/viewer?title_no=4354&episode_no=1", "url": "^https?://m\\.webtoons\\.com/.+/viewer\\?", "manualMode": true, @@ -33,6 +36,7 @@ }, { "name": "webtoons - 手機版閱讀 (自動翻頁模式會越來越卡)", + "author": "skofkyo", "example": "https://m.webtoons.com/zh-hant/time-slip/estatedeveloper/%E7%AC%AC1%E8%A9%B1/viewer?title_no=4354&episode_no=1", "enable": 0, "url": "^https?://m\\.webtoons\\.com/.+/viewer\\?", @@ -50,6 +54,7 @@ }, { "name": "webtoons - 閱讀", + "author": "skofkyo", "example": "https://www.webtoons.com/zh-hant/time-slip/estatedeveloper/%E7%AC%AC1%E8%A9%B1/viewer?title_no=4354&episode_no=1", "url": "^https?://www\\.webtoons\\.com/.+/viewer\\?", "pinUrl": true, @@ -64,6 +69,7 @@ }, { "name": "webtoons - 目錄", + "author": "skofkyo", "example": "https://www.webtoons.com/zh-hant/time-slip/estatedeveloper/list?title_no=4354", "url": "^https?://www\\.webtoons\\.com/.+/list\\?", "pinUrl": true, @@ -74,6 +80,7 @@ }, { "name": "webtoons - 首頁禁用", + "author": "skofkyo", "url": "^https?://www\\.webtoons\\.com/([^/]+/)?$", "pinUrl": true, "nextLink": "0", @@ -81,6 +88,7 @@ }, { "name": "仙漫网 - 手機版目錄", + "author": "skofkyo", "example": "https://m.xianmanwang.com/wodetianjienvyou/", "url": "^https?://m\\.xianmanwang\\.com/\\w+/$", "include": "a.mm", @@ -90,6 +98,7 @@ }, { "name": "仙漫网 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.xianmanwang.com/kaijujiuwudi/0.html", "url": "^https?://m\\.xianmanwang\\.com/\\w+/\\d+\\.html", "pinUrl": true, @@ -106,6 +115,7 @@ }, { "name": "仙漫网 - 閱讀", + "author": "skofkyo", "example": "https://www.xianmanwang.com/kaijujiuwudi/0.html", "url": "^https?://www\\.xianmanwang\\.com/\\w+/\\d+\\.html", "pinUrl": true, @@ -121,6 +131,7 @@ }, { "name": "漫画牛 - 閱讀", + "author": "skofkyo", "example": "http://www.manhua666.com/13_13215/1208996.html#p=1", "url": "^https?://www\\.manhua666\\.com/\\w+/\\d+\\.html", "init": "let ge=e=>document.querySelector(e);let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;if(!ge('.pageselect')){gx(\"//a[text()='分页阅读']\").click()}let F='';imgs.forEach(e=>{F+=e});let E=ge('#contents');E.innerHTML=F;", @@ -135,6 +146,7 @@ }, { "name": "漫画牛 - 分類", + "author": "skofkyo", "example": "http://www.manhua666.com/sort/1/1.html", "url": "^https?://www\\.manhua666\\.com/", "include": ".pages", @@ -146,6 +158,7 @@ }, { "name": "開車漫画 - 閱讀", + "author": "skofkyo", "example": "https://18p.fun/ForInject/Chapter/?id=641992", "url": "^https?://(www\\.)?(18p|gohaveababy|imynest|healthway|beforeout)\\.[a-z]{2,5}/(ForInject/|Article/|content/)", "pinUrl": true, @@ -161,6 +174,7 @@ }, { "name": "開車漫画 - 分類", + "author": "skofkyo", "example": "https://18p.fun/library/?cid=3&tid=1702", "url": "^https?://18p\\.fun/", "include": ".loadmore", @@ -171,6 +185,7 @@ }, { "name": "大树漫画 - 閱讀", + "author": "skofkyo", "example": "https://www.dashumanhua.com/comic/douluodalu5zhongshengtangsan/read-0.html", "url": "^https?://www\\.dashumanhua\\.com/comic/[^/]+/read-\\d+\\.html", "pinUrl": true, @@ -188,6 +203,7 @@ }, { "name": "大树漫画 - 目錄", + "author": "skofkyo", "example": "https://www.dashumanhua.com/comic/shendijianglinwoyouyiwanshuxingdian/", "url": "^https?://www\\.dashumanhua\\.com/", "include": "//a[text()='开始阅读']", @@ -196,6 +212,7 @@ }, { "name": "大树漫画 - 分類", + "author": "skofkyo", "example": "https://www.dashumanhua.com/category/all/", "url": "^https?://www\\.dashumanhua\\.com/", "nextLink": "//a[text()='下页']", @@ -205,6 +222,7 @@ }, { "name": "Manga Koma 閱讀", + "author": "skofkyo", "example": "https://mangakoma01.com/manga/pick-me-up-direa-ying-xiongno-chengri-shanggari/1hua/25650", "url": "^https?://mangakoma\\d+\\.com/", "action": 1, @@ -220,6 +238,7 @@ }, { "name": "K-漫神 閱讀", + "author": "skofkyo", "example": "https://kmansin09.com/bbs/board.php?bo_table=2001&wr_id=9984280", "url": "^https?://kmansin\\d+\\.com/", "include": "#ep_box", @@ -230,6 +249,7 @@ }, { "name": "K-漫神 目錄", + "author": "skofkyo", "example": "https://kmansin09.com/bbs/board.php?bo_table=2001&wr_id=9984203&sfl=wr_subject&stx=PICK+ME+UP", "url": "^https?://kmansin\\d+\\.com/", "exclude": "#ep_box", @@ -241,24 +261,28 @@ }, { "name": "嗨皮漫畫 - 給本王顯示全部章節", + "author": "skofkyo", "example": "https://m.happymh.com/manga/daiwangraoming", "url": "^https?://m\\.happymh\\.com/manga/", "autoClick": "#expandButton" }, { "name": "嗨皮漫畫 - 更新頁", + "author": "skofkyo", "example": "https://m.happymh.com/latest", "url": "^https?://m\\.happymh\\.com/latest$", "loadMore": ".more-div-btn" }, { "name": "嗨皮漫畫 - 閱讀 - 禁用", + "author": "skofkyo", "example": "https://m.happymh.com/manga/shishijilingdishejishi", "url": "^https?://m\\.happymh\\.com/reads/", "enable": "0" }, { "name": "包子漫畫分類 - 漫畫在新分頁打開", + "author": "skofkyo", "example": "https://www.webmota.com/", "url": "^https?://[^/]+/", "include": [ @@ -274,6 +298,7 @@ }, { "name": "包子漫畫 - 查看全部章節", + "author": "skofkyo", "example": "https://www.baozimh.com/comic/dawangraoming-yuedongwenhua", "url": "^https?://[^/]+/comic/", "include": [ @@ -285,6 +310,7 @@ }, { "name": "包子漫畫 - 閱讀", + "author": "skofkyo", "example": "https://www.kukuc.co/comic/chapter/dawangraoming-yuedongwenhua/0_0.html", "url": "^https?://[^/]+/comic/chapter/[^/]+/\\w+\\.html", "include": [ @@ -305,6 +331,7 @@ }, { "name": "包子漫畫2 - 閱讀", + "author": "skofkyo", "example": "https://baozimh.org/manga/kaijuyizuoshan-yulemeicuo/0_2/", "url": "^https?://baozimh\\.org/manga/[^/]+/\\w+/", "history": 2, @@ -320,6 +347,7 @@ }, { "name": "包子漫畫2 - 分類/搜索", + "author": "skofkyo", "example": "https://baozimh.org/", "url": "^https?://baozimh\\.org/", "nextLink": "span.current+a,a[aria-label='Next page']", @@ -329,6 +357,7 @@ }, { "name": "GODA漫画 - 閱讀", + "author": "skofkyo", "example": "https://chapter.godamanga.com/manga/wozhendebushiqiyunzhizi-vv/0_0/", "url": "^https?://([a-z]{2,7}\\.)?godamanga\\.com/manga/[^/]+/\\w+/", "history": 2, @@ -342,6 +371,7 @@ }, { "name": "GODA漫画 - 分類/搜索", + "author": "skofkyo", "example": "https://godamanga.com/", "url": "^https?://(cn\\.)?godamanga\\.com/", "nextLink": "span.current+a,a[aria-label='Next page']", @@ -351,6 +381,7 @@ }, { "name": "COCOMANGA - 閱讀 - 雙擊前往下一章,鍵盤左右鍵上下章", + "author": "skofkyo", "example": "https://www.colamanhua.com/15177/1/2.html", "url": "^https?://www\\.colamanhua\\.com/", "include": ".mh_comicpic", @@ -361,6 +392,7 @@ }, { "name": "COCOMANGA - 分類/搜索", + "author": "skofkyo", "example": "https://www.colamanhua.com/show?orderBy=update", "url": "^https?://www\\.colamanhua\\.com/(show|search)", "init": "let w = document.querySelector(`h2 a[href*='weeklyCount']`); if (!location.search) w.click()", @@ -371,6 +403,7 @@ }, { "name": "看漫画手機版 - 閱讀", + "author": "skofkyo", "example": "https://m.manhuagui.com/comic/30278/405998.html", "url": "^https?://m\\.manhuagui\\.com/comic/\\d+/\\d+\\.html", "pinUrl": true, @@ -388,6 +421,7 @@ }, { "name": "看漫画手機版 - 最新更新/排行榜/書架/搜索/漫画大全 檢視下20條記錄 - 漫畫在新分頁打開", + "author": "skofkyo", "example": "https://m.manhuagui.com/list/update.html", "url": "^https?://m\\.manhuagui\\.com/", "exclude": [ @@ -400,6 +434,7 @@ }, { "name": "看漫画 - 閱讀", + "author": "skofkyo", "example": "https://www.manhuagui.com/comic/30278/405998.html", "url": "^https?://(tw|www)\\.manhuagui\\.com/comic/\\d+/\\d+\\.html", "pinUrl": true, @@ -417,6 +452,7 @@ }, { "name": "看漫画 - 分類", + "author": "skofkyo", "example": "https://www.manhuagui.com/list/lianzai/", "url": "^https?://(www|tw)\\.manhuagui\\.com/list/", "nextLink": "span.current+a", @@ -426,6 +462,7 @@ }, { "name": "漫畫屋 - 閱讀", + "author": "skofkyo", "example": "https://mh5.tw/series-wunalfy-484928-1-%E4%B8%8D%E5%B9%B8%E8%81%B7%E6%A5%AD%E7%9A%84%E5%B9%B8%E9%81%8B?", "url": "^https?://mh5\\.tw/series", "pinUrl": true, @@ -439,6 +476,7 @@ }, { "name": "漫畫屋 - 分類", + "author": "skofkyo", "example": "https://mh5.tw/allcartoonlist", "url": "^https?://mh5\\.tw/allcartoonlist", "nextLink": "a.cur+a", @@ -448,6 +486,7 @@ }, { "name": "zero搬运网 - PC版閱讀", + "author": "skofkyo", "example": "http://www.zerobywgeat.com/plugin.php?id=jameson_manhua&a=read&zjid=346180", "url": "^https?://www\\.zerobywgeat\\.com/plugin\\.php", "nextLink": "//a[span[contains(@uk-icon,'right')]]", @@ -458,6 +497,7 @@ }, { "name": "zero搬运网 - 分類", + "author": "skofkyo", "example": "http://www.zerobywgeat.com/", "url": "^https?://www\\.zerobywgeat\\.com/", "nextLink": "a.nxt", @@ -467,6 +507,7 @@ }, { "name": "Mangabz / Xmanhua - 漫畫目錄展開章節", + "author": "skofkyo", "example": "https://xmanhua.com/1904xm/,https://www.mangabz.com/1904bz/", "url": "^https?://(www\\.)?(mangabz|xmanhua)\\.com/\\d+(bz|xm)/$", "pinUrl": true, @@ -475,6 +516,7 @@ }, { "name": "Xmanhua - 手機版閱讀", + "author": "skofkyo", "example": "https://xmanhua.com/m10344/", "url": "^https?://(www\\.)?xmanhua\\.com/m\\d+(-p\\d+)?/", "include": ".bottom-bar", @@ -491,6 +533,7 @@ }, { "name": "Mangabz - 手機版閱讀", + "author": "skofkyo", "example": "https://www.mangabz.com/m38701/", "url": "^https?://(www\\.)?mangabz\\.com/m\\d+(-p\\d+)?/", "include": ".bottom-bar", @@ -507,6 +550,7 @@ }, { "name": "Xmanhua - PC版閱讀", + "author": "skofkyo", "example": "https://xmanhua.com/m10344/", "url": "^https?://(www\\.)?xmanhua\\.com/m\\d+(-p\\d+)?/", "include": ".reader-bottom-page-list", @@ -522,6 +566,7 @@ }, { "name": "Mangabz - PC版閱讀", + "author": "skofkyo", "example": "https://www.mangabz.com/m38701/", "url": "^https?://(www\\.)?mangabz\\.com/m\\d+(-p\\d+)?/", "include": ".container", @@ -537,6 +582,7 @@ }, { "name": "Mangabz / Xmanhua - 分類", + "author": "skofkyo", "example": "https://www.mangabz.com/manga-list-0-0-0/,https://xmanhua.com/manga-list-0-0-0/", "url": "^https?://(www\\.)?(mangabz|xmanhua)\\.com/(manga-list|search)", "nextLink": "//div[contains(@class,'page-pagination')]//a[contains(text(), '>')]", @@ -546,6 +592,7 @@ }, { "name": "风之动漫 - 閱讀", + "author": "skofkyo", "example": "https://manhua.fffdm.com/2/1040/,https://www.fffdm.com/manhua/132/222/", "url": "^https?://(manhua|www)\\.fffdm\\.com/(manhua/)?\\d+/.+/", "pinUrl": true, @@ -560,6 +607,7 @@ }, { "name": "動漫狂 - 手機版閱讀", + "author": "skofkyo", "example": "https://www.cartoonmad.com/m/comic/618700022010001.html", "url": "^https?://www\\.cartoonmad\\.(cc|com)/m/comic/\\d+\\.html", "history": 2, @@ -576,6 +624,7 @@ }, { "name": "動漫狂 - 閱讀", + "author": "skofkyo", "url": "^https?://www\\.cartoonmad\\.(cc|com)/comic/\\d+\\.html", "example": "https://www.cartoonmad.com/comic/6187.html", "history": 2, @@ -593,6 +642,7 @@ }, { "name": "動漫狂 - 分類", + "author": "skofkyo", "example": "https://www.cartoonmad.com/hotrank.html", "url": "^https?://www\\.cartoonmad\\.(cc|com)/(hotrank|topcm|newcm|comic\\d+)(\\.\\d+)?\\.html", "nextLink": "a.onpage+a", @@ -602,6 +652,7 @@ }, { "name": "漫画人 / dm5 動漫屋 / 極速漫畫 - 手機版 - 漫畫在新分頁打開", + "author": "skofkyo", "example": "https://m.dm5.com/", "url": "^https?://(www\\.manhuaren|m\\.dm5|m\\.1kkk)\\.com/", "exclude": [ @@ -612,6 +663,7 @@ }, { "name": "漫画人 / dm5 動漫屋 / 極速漫畫 - 手機版閱讀", + "author": "skofkyo", "example": "https://www.manhuaren.com/manhua-list-s2/,https://www.manhuaren.com/m198122/,https://m.dm5.com/m1331307/,https://m.1kkk.com/ch1063-1331307/,https://m.1kkk.com/vol1-4761/", "url": "^https?://(www|m)\\.(manhuaren|1kkk|dm5)\\.(com|cn)/(m|ch|vol|other)[-_0-9]+/$", "exclude": ".view-paging", @@ -629,6 +681,7 @@ }, { "name": "極速漫畫 - PC版單行本閱讀", + "author": "skofkyo", "example": "https://www.1kkk.com/vol1-4761/", "url": "^https?://(www|hk)\\.1kkk\\.com/vol[-_0-9]+/$", "include": "#chapterpager", @@ -640,6 +693,7 @@ }, { "name": "dm5 動漫屋 / 極速漫畫 - PC版閱讀", + "author": "skofkyo", "example": "https://www.dm5.com/m1331307/,https://www.1kkk.com/ch1063-1331307/", "url": "^https?://(www|tel|en|cnc)?\\.?(dm5|1kkk)\\.(com|cn)/(m|ch)[-_0-9]+/$", "include": "#chapterpager", @@ -655,6 +709,7 @@ }, { "name": "dm5 動漫屋 / 極速漫畫 - 分類", + "author": "skofkyo", "example": "https://www.dm5.com/manhua-list/,https://www.1kkk.com/manhua-list/", "url": "^https?://(www|tel|en|cnc|hk)?\\.?(dm5|1kkk)\\.(com|cn)/manhua-([a-z]+/|list-area|list-tag|list-char)", "init": "document.querySelectorAll('.cat-filter a').forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 1000)')})", @@ -665,6 +720,7 @@ }, { "name": "無限動漫手機版 - 漫畫閱讀 - 雙擊下一集,鍵盤左右鍵上下集", + "author": "skofkyo", "example": "https://8.twobili.com/comic/insurance_15059.html?ch=1", "url": "^https?://8\\.twobili\\.com/comic/insurance", "pinUrl": true, @@ -674,6 +730,7 @@ }, { "name": "無限動漫手機版 - 分類", + "author": "skofkyo", "example": "https://m.comicbus.com/category/update_comic-1.html", "url": "^https?://m\\.comicbus\\.com/category/", "nextLink": "//a[span/@class='mdi mdi-skip-next mdi-next-btn']", @@ -683,6 +740,7 @@ }, { "name": "無限動漫 - 漫畫閱讀2 - 鍵盤左右鍵上下集", + "author": "skofkyo", "example": "https://www.comicabc.com/online/new-18722.html?ch=26", "url": "^https?://www\\.comicabc\\.com/online/new-\\d+\\.html(\\?ch=\\d+(-\\d+)?)?$", "init": "if(location.href.indexOf('ch=')==-1)location.href=location.href+'?ch=1';function ge(e){return document.querySelector(e)}function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=ge('#nextvol:not([style])');if(n){n.click()}else{alert('沒有下一集了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=ge('#prevvol');if(location.href.match(/ch=(\\d+)/)[1]==1){alert('沒有上一集了!')}else{p.click()}}};document.addEventListener('keydown',prev);", @@ -709,6 +767,7 @@ }, { "name": "無限動漫 - 漫畫閱讀 - 鍵盤左右鍵上下集", + "author": "skofkyo", "example": "https://www.comicabc.com/ReadComic/103/1/1_FU4_LD9_7.html", "url": "^https?://www\\.comicabc\\.com/ReadComic/\\d+/\\d+/\\w+\\.html", "init": "function ge(e){return document.querySelector(e)}function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=ge('#nextvol:not([style])');if(n){n.click()}else{alert('沒有下一集了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=ge('#prevvol');if(location.pathname.split('/')[3]==1){alert('沒有上一集了!')}else{p.click()}}};document.addEventListener('keydown',prev);", @@ -735,6 +794,7 @@ }, { "name": "無限動漫 - 動漫大全", + "author": "skofkyo", "example": "https://www.comicabc.com/list/all_all_all/", "url": "^https?://www\\.comicabc\\.com/list/", "nextLink": "//a[span/@class='mdi mdi-skip-next']", @@ -744,6 +804,7 @@ }, { "name": "無限動漫 - 分類", + "author": "skofkyo", "example": "https://www.comicabc.com/comic/6-1.html", "url": "^https?://www\\.comicabc\\.com/comic/[a-z0-9-]+\\.html", "nextLink": "//a[span/@class='mdi mdi-skip-next']", @@ -753,6 +814,7 @@ }, { "name": "無限動漫 - 圖庫原圖瀏覽", + "author": "skofkyo", "example": "https://www.comicabc.com/photo/p6038.html?n=1", "url": "^https?://www\\.comicabc\\.com/photo/p\\d+\\.html\\?n=\\d+$", "nextLinkByUrl": [ @@ -769,6 +831,7 @@ }, { "name": "無限動漫 - 圖庫清單載入大圖", + "author": "skofkyo", "example": "https://www.comicabc.com/photo/6041.html", "url": "^https?://www\\.comicabc\\.com/photo/\\d+\\.html$", "init": "document.querySelectorAll('#dl img').forEach(img=>{let f=img.src.replace('.jpe','.jpg');img.src=f})", @@ -776,6 +839,7 @@ }, { "name": "無限動漫 - 圖庫", + "author": "skofkyo", "example": "https://www.comicabc.com/photo/1-1.html", "url": "^https?://www\\.comicabc\\.com/photo/[0-9-]+\\.html$", "nextLink": "//a[span/@class='mdi mdi-skip-next']", @@ -784,12 +848,14 @@ }, { "name": "無限動漫 - 類別停止自動匹配", + "author": "skofkyo", "example": "https://www.comicabc.com/html/1/", "url": "^https?://www\\.comicabc\\.com/html/\\d+/$", "nextLink": "0" }, { "name": "砂之船动漫家 / 361中文漫画 - 手機版閱讀", + "author": "skofkyo", "example": "https://www.szcdmj.com/szcchapter/736400,https://www.361zw.com/361zwchapter/318949", "url": "^https?://www\\.(szcdmj|361zw)\\.com/\\w{3,5}chapter/\\d+(\\?page=\\d+)?", "include": ".view-bottom-bar", @@ -804,6 +870,7 @@ }, { "name": "砂之船动漫家 / 361中文漫画 / 土豪漫画 - PC版閱讀", + "author": "skofkyo", "example": "https://www.szcdmj.com/szcchapter/736400,https://www.361zw.com/361zwchapter/318168,https://7hxy.com/chapter/968191?page=8&id=968191", "url": "^https?://(www\\.)?(szcdmj|361zw|7hxy)\\.com/\\w{0,5}chapter/\\d+", "include": ".read-section", @@ -818,6 +885,7 @@ }, { "name": "砂之船动漫家 / 361中文漫画 - 分類", + "author": "skofkyo", "example": "https://www.szcdmj.com/szcbolist", "url": "^https?://www\\.(szcdmj|361zw)\\.com/(szcbolist|booklist)", "nextLink": "#nextPage,a[title='下一页'],li.active+li>a", @@ -828,6 +896,7 @@ }, { "name": "生辰漫画网 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.chashengchen.com/manhua/xianziniyoudaxiongzhizhao/2867318.html", "url": "^https?://m\\.chashengchen\\.com/manhua/\\w+/\\d+\\.html", "action": 1, @@ -842,6 +911,7 @@ }, { "name": "漫画连 - 閱讀", + "author": "skofkyo", "example": "https://www.100mhl.com/manhua/yuanlaiwoshixianjiezhizun/1268523.html", "url": "^https?://www\\.100mhl\\.com/manhua/\\w+/\\d+\\.html", "pinUrl": true, @@ -857,6 +927,7 @@ }, { "name": "生辰漫画网 / 奇妙漫画 - 閱讀", + "author": "skofkyo", "example": "https://www.chashengchen.com/manhua/xianziniyoudaxiongzhizhao/2867318.html", "url": "^https?://www\\.(chashengchen|qmiaomh)\\.com/manhua/\\w+/\\d+\\.html", "pinUrl": true, @@ -873,6 +944,7 @@ }, { "name": "来漫画 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.laimanhua.net/kanmanhua/kaijujiangliyiyitiaoming/1684241122.html", "url": "^https?://m\\.laimanhua\\.net/kanmanhua/\\w+/\\d+\\.html", "pinUrl": true, @@ -889,6 +961,7 @@ }, { "name": "来漫画 - 閱讀", + "author": "skofkyo", "example": "https://www.laimanhua.net/kanmanhua/kaijujiangliyiyitiaoming/1684241122.html", "url": "^https?://www\\.laimanhua\\.net/kanmanhua/\\w+/\\d+\\.html", "pinUrl": true, @@ -905,6 +978,7 @@ }, { "name": "漫画吧 / 漫画连 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.dmhua8.com/manhua/shengnvyintaiguowanmeibugoukeaierbeifeichuhunyuebingmaidaolinguo/966591.html", "url": "^https?://m\\.(d?mhua8|100mhl)\\.com/manhua/[a-z]+/\\d+\\.html", "init": "let gae=e=>document.querySelectorAll(e);let Imgs=gae('#images')[0];let Img=gae('img[alt]');let _img='';for(let i=0;ia", @@ -1067,6 +1151,7 @@ }, { "name": "古风漫画网 - PC版閱讀", + "author": "skofkyo", "example": "https://www.gufengmh.com/manhua/yuanlaiwoshixianjiezhizun/2053294.html", "url": "^https?://www\\.gufengmh\\.com/manhua/[a-z]+/\\d+\\.html", "history": 2, @@ -1084,6 +1169,7 @@ }, { "name": "优酷漫画手機版 - 閱讀", + "author": "skofkyo", "example": "http://wap.ykmh.com/manhua/yiquanchaoren/346.html", "url": "^https?://wap\\.ykmh\\.com/manhua/[a-z]+/\\d+\\.html", "history": 2, @@ -1100,6 +1186,7 @@ }, { "name": "优酷漫画 - PC版閱讀", + "author": "skofkyo", "example": "http://www.ykmh.com/manhua/yiquanchaoren/346.html", "url": "^https?://www\\.ykmh\\.com/manhua/[a-z]+/\\d+\\.html", "history": 2, @@ -1117,6 +1204,7 @@ }, { "name": "90漫畫網手機版 - 漫畫閱讀", + "author": "skofkyo", "example": "http://wap.90mh.com/manhua/DRAWINGzuiqiangmanhuajialiyonghuihuajinengzaiyishijiekaiwushuang/204311.html", "url": "^https?://wap\\.90mh\\.com/manhua/", "init": "let Imgs=document.querySelector('#chapter-image');let Img=document.querySelector('#chapter-image img');Imgs.innerHTML=Img.outerHTML;", @@ -1130,6 +1218,7 @@ }, { "name": "90漫畫網 / 生辰漫画网 - 手機版分類", + "author": "skofkyo", "example": "http://wap.90mh.com/update/,https://m.chashengchen.com/list/update/", "url": "^https?://(wap|m)\\.(90mh|chashengchen)\\.com/(update|list)/", "nextLink": "#update_list li.next>a,#w0 li.next>a", @@ -1139,6 +1228,7 @@ }, { "name": "90漫畫網 - PC版閱讀", + "author": "skofkyo", "example": "http://www.90mh.com/manhua/DRAWINGzuiqiangmanhuajialiyonghuihuajinengzaiyishijiekaiwushuang/204311.html", "url": "^https?://www\\.90mh\\.com/manhua/\\w+/\\d+\\.html", "history": 2, @@ -1156,6 +1246,7 @@ }, { "name": "90漫畫網 - 分類", + "author": "skofkyo", "example": "http://www.90mh.com/update/", "url": "^https?://www\\.90mh\\.com/(update|list)/", "nextLink": "li.next>a", @@ -1165,6 +1256,7 @@ }, { "name": "古漫画 / 360 漫画 - 手機版分類", + "author": "skofkyo", "example": "https://m.izhegu.com/update/,https://m.100fanwo.com/update/", "url": "^https?://(m)\\.(100fanwo|izhegu)\\.com/", "nextLink": "li.next>a", @@ -1174,6 +1266,7 @@ }, { "name": "古漫画 / 360 漫画 - PC版閱讀", + "author": "skofkyo", "example": "https://www.izhegu.com/manhua/banbenDAYS/2011818.html,https://www.100fanwo.com/manhua/banbenDAYS/3434626.html", "url": "^https?://www\\.(izhegu|100fanwo)\\.com/manhua/[a-z]+/\\d+\\.html", "pinUrl": true, @@ -1189,6 +1282,7 @@ }, { "name": "漫画456 - 手機版章節全部展開", + "author": "skofkyo", "example": "https://m.manhua456.com/manhua/zhongniannandeyishijiewanggoushenghuo/", "url": "^https?://m\\.manhua456\\.com/manhua/\\w+/$", "pinUrl": true, @@ -1196,6 +1290,7 @@ }, { "name": "漫画456 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.manhua456.com/manhua/moliwuxiandezuiqiangmonvyongchuangzaomofazaiyishijieyouzaishenghuo/537951.html", "url": "^https?://m\\.manhua456\\.com/manhua/\\w+/\\d+\\.html", "pinUrl": true, @@ -1210,6 +1305,7 @@ }, { "name": "漫画456 - PC版閱讀", + "author": "skofkyo", "example": "https://www.manhua456.com/manhua/wodeshifumeidaodaxiancaitupo/766673.html", "url": "^https?://www\\.manhua456\\.com/manhua/[a-z]+/\\d+\\.html", "history": 2, @@ -1226,6 +1322,7 @@ }, { "name": "亲亲漫画 - 手機版漫畫在新分頁打開", + "author": "skofkyo", "example": "https://m.acgqd.com/update/", "url": "^https?://m\\.acg(u|q)d\\.com/(update|list|list/wanjie)?/?$", "pinUrl": true, @@ -1233,6 +1330,7 @@ }, { "name": "亲亲漫画 - 手機版章節全部展開", + "author": "skofkyo", "example": "https://m.acgqd.com/manhua/38496/", "url": "^https?://m\\.acg(u|q)d\\.com/manhua/\\d+/$", "pinUrl": true, @@ -1241,6 +1339,7 @@ }, { "name": "亲亲漫画 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.acgqd.com/manhua/39305/1277010.html", "url": "^https?://m\\.acg(u|q)d\\.com/manhua/\\d+/\\d+\\.html", "pinUrl": true, @@ -1259,6 +1358,7 @@ }, { "name": "亲亲漫画 - PC版閱讀", + "author": "skofkyo", "example": "http://www.acgud.com/manhua/39305/1277010.html", "url": "^https?://www\\.acg(u|q)d\\.com/manhua/\\d+/\\d+\\.html", "pinUrl": true, @@ -1277,6 +1377,7 @@ }, { "name": "古风漫画网 / 优酷漫画 / 360 漫画 / 古漫画 / 前未漫画 / 最漫画 / 漫画芯 / 亲亲漫画 / 漫画456 / 爱米推漫画 / 蔷薇漫画 - 分類", + "author": "skofkyo", "example": "www.gufengmh.com,www.ykmh.com,www.qianwee.com,www.100fanwo.com,www.izhegu.com,www.zuimh.com,www.mhxin.com,www.acgud.com,www.manhua456.com,www.imitui.com,www.qwmanhua.com", "url": "^https?://www\\.(gufengmh|ykmh|qianwee|100fanwo|izhegu|zuimh|mhxin|acg(u|q)d|manhua456|imitui|qwmanhua)\\.com/", "nextLink": "li.next>a", @@ -1286,6 +1387,7 @@ }, { "name": "动漫啦 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.dongman.la/manhua/chapter/5985/54979/", "url": "^https?://m\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", "history": 2, @@ -1303,6 +1405,7 @@ }, { "name": "动漫啦 - PC版閱讀 - 单页滚动模式 - 雙擊下一章,鍵盤左右鍵上下章", + "author": "skofkyo", "example": "https://www.dongman.la/manhua/chapter/5985/54979/1.html", "url": "^https?://www\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", "include": "//a[text()='分页查看模式 ']", @@ -1314,6 +1417,7 @@ }, { "name": "动漫啦 - PC版閱讀 - 分页查看模式 - 雙擊下一章,鍵盤左右鍵上下章", + "author": "skofkyo", "example": "https://www.dongman.la/manhua/chapter/5985/54979/1.html", "url": "^https?://www\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", "include": "//a[text()='单页滚动模式 ']", @@ -1328,6 +1432,7 @@ }, { "name": "动漫啦 / 免追漫画 - 分類", + "author": "skofkyo", "example": "https://www.dongman.la/manhua/oumei/2.html,https://www.mianzhui.com/category/list/1", "url": "^https?://www\\.(dongman|mianzhui)\\.(la|com)/", "include": ".NewPages", @@ -1339,6 +1444,7 @@ }, { "name": "七夕漫画", + "author": "skofkyo", "example": "http://www.qiximh2.com/21429/999975.html,http://m.qiximh2.com/22914/1235326.html", "url": "^https?://(www|m)\\.qiximh\\d\\.com/\\d+/\\d+\\.html", "history": 2, @@ -1358,6 +1464,7 @@ }, { "name": "漫画星球手機版 - 閱讀", + "author": "skofkyo", "example": "http://m.mhxqiu2.com/22914/1235326.html", "url": "^https?://m\\.mhxqiu\\d\\.com/\\d+/\\d+\\.html", "history": 2, @@ -1374,6 +1481,7 @@ }, { "name": "七夕漫画手機版 / 漫画星球手機版 - 点击加载更多", + "author": "skofkyo", "example": "http://m.qiximh2.com/sort/1-1.html,http://m.mhxqiu2.com/sort/1.html", "url": "^https?://m\\.(qiximh\\d|mhxqiu\\d)\\.com/", "include": ".list_notdone>button", @@ -1382,6 +1490,7 @@ }, { "name": "七夕漫画 / 漫画星球 - 分類", + "author": "skofkyo", "example": "http://www.qiximh2.com/sort/1-1.html,http://www.mhxqiu2.com/sort/1-1.html", "url": "^https?://www\\.(qiximh\\d|mhxqiu\\d)\\.com/", "nextLink": "//a[text()='下一页']", @@ -1391,6 +1500,7 @@ }, { "name": "6 漫画手機版 - 閱讀", + "author": "skofkyo", "example": "http://m.6mh66.com/25528/1411234.html", "url": "^https?://m\\.6mh66\\.com/\\d+/\\d+\\.html", "history": 2, @@ -1408,6 +1518,7 @@ }, { "name": "奇漫屋手機版 - 閱讀", + "author": "skofkyo", "example": "http://qiman59.com/21429/999975.html", "url": "^https?://(m\\.)?qiman\\d{2}\\.com/\\d+/\\d+\\.html", "include": ".bottom-tool-bar", @@ -1425,6 +1536,7 @@ }, { "name": "奇漫屋 / 漫画星球 / 6 漫画 - PC閱讀", + "author": "skofkyo", "example": "http://www.qiman58.com/21429/1416724.html,http://www.mhxqiu2.com/22914/1235326.html,http://www.6mh66.com/22914/1235327.html", "url": "^https?://(www\\.qiman5\\d\\.com|www\\.mhxqiu\\d\\.com|www\\.6mh66\\.com)/\\d+/\\d+\\.html", "history": 2, @@ -1441,6 +1553,7 @@ }, { "name": "漫画星球 / 6 漫画 / 奇漫屋 - 手機版分類", + "author": "skofkyo", "example": "m.mhxqiu1.com,m.sixmh7.com,m.qiman57.com", "url": "^https?://(m\\.)?((six|6)mh\\d+|mhxqiu\\d|qiman\\d+)\\.com/(sort|rank)/", "loadMore": ".getmore,.getmore1", @@ -1448,6 +1561,7 @@ }, { "name": "57漫画网 - 漫畫閱讀", + "author": "skofkyo", "example": "http://www.wuqimh.com/45107/01.html", "url": "^https?://(www|m)\\.wuqimh\\.com/\\d+/\\d+(\\.html|/)$", "include": "//script[contains(text(),'images') and contains(text(),'tingliu')]", @@ -1464,6 +1578,7 @@ }, { "name": "x18漫画网 - 漫畫閱讀", + "author": "skofkyo", "example": "https://www.x18mh.com/manhua/60497/996071.html,https://m.x18mh.com/manhua/60497/996071.html", "url": "^https?://(www|m)\\.x18mh\\.com/manhua/\\d+/\\d+\\.html", "pinUrl": true, @@ -1479,6 +1594,7 @@ }, { "name": "爱漫之家 - 漫畫閱讀", + "author": "skofkyo", "example": "http://www.17fuman.com/rszimukaitou/34599/171775.html,http://m.17fuman.com/rszimukaitou/34669/172185.html,http://m.fumanhua44.com/rszimukaitou/34761/172779.html", "url": "^https?://(www|m\\d?)\\.(17fuman|fumanhua-?\\d+)\\.com/[a-z]+/\\d+/\\d+\\.html", "pinUrl": true, @@ -1495,6 +1611,7 @@ }, { "name": "73漫画 - 閱讀", + "author": "skofkyo", "example": "http://www.73mh.net/mh/63788_1633109/1", "url": "^https?://www\\.73mh\\.net/mh/\\w+/\\d+", "pinUrl": true, @@ -1510,6 +1627,7 @@ }, { "name": "漫画160 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.mh160.cc/kanmanhua/yuanlaiwoshixianjiezhizun/1689580801.html", "url": "^https?://m\\.mh160\\.cc/kanmanhua/\\w+/\\d+\\.html", "pinUrl": true, @@ -1526,6 +1644,7 @@ }, { "name": "733 动漫 - 手機版漫畫閱讀", + "author": "skofkyo", "example": "https://m.733.so/mh/54709/1353912/1.html", "url": "^https?://m\\.733\\.so/mh/\\d+/\\d+/\\d+\\.html", "pinUrl": true, @@ -1542,6 +1661,7 @@ }, { "name": "733 动漫 / 73漫画 - 手機版分類", + "author": "skofkyo", "example": "https://m.733.so/all/all/all/all/0/1.html,http://www.73mh.net/neidi/", "url": "^https?://(m\\.733\\.so|www\\.73mh\\.net)/", "exclude": [ @@ -1555,6 +1675,7 @@ }, { "name": "733 动漫 / 漫画160 - PC版閱讀", + "author": "skofkyo", "example": "https://www.733.so/mh/33671/614269.html,https://www.mh160.cc/kanmanhua/tianqiyubao/1668716868.html", "url": "^https?://www\\.(733|mh160)\\.(so|cc)/(mh|kanmanhua)/\\w+/\\d+\\.html", "pinUrl": true, @@ -1571,6 +1692,7 @@ }, { "name": "漫画星球 / 6 漫画 / 733 动漫 / 爱漫之家 / x18漫画网 / 57漫画网 / 奇漫屋 / 漫画160 - 分類", + "author": "skofkyo", "example": "www.mhxqiu1.com,www.sixmh7.com,www.733.so,www.17fuman.com,https://www.x18mh.com/,http://www.wuqimh.com/list/,http://www.qiman58.com/,www.mh160.cc", "url": "^https?://(www|m)\\.((six|6)mh\\d+|mhxqiu\\d|733|17fuman|x18mh|wuqimh|qiman58|mh160)\\.(com|so|cc)/", "nextLink": "//a[text()='下一页'] | //li[a[@class='active']]/following-sibling::li[1]/a", @@ -1580,6 +1702,7 @@ }, { "name": "木马漫画 - 閱讀", + "author": "skofkyo", "example": "https://www.omyschool.com/article_detail/19057/672194/%E7%A5%9E%E6%98%8E%E5%AD%B8%E6%A0%A1%E7%9A%84%E5%B7%AE%E7%AD%89%E7%94%9F/01%E8%A9%B1/", "url": "^https?://www\\.omyschool\\.com/article_detail/\\d+/\\d+/", "history": 2, @@ -1592,6 +1715,7 @@ }, { "name": "木马漫画 - 分類", + "author": "skofkyo", "example": "https://www.omyschool.com/rank/update/", "url": "^https?://www\\.omyschool\\.com/", "nextLink": "a.next", @@ -1601,6 +1725,7 @@ }, { "name": "动漫之家 - 手機版 - 漫畫在新分頁打開", + "author": "skofkyo", "example": "https://m.idmzj.com/", "url": "^https?://m\\.i?dmzj\\.com/", "exclude": [ @@ -1611,6 +1736,7 @@ }, { "name": "动漫之家手機版 - 閱讀", + "author": "skofkyo", "example": "https://m.idmzj.com/view/60351/119828.html", "url": "^https?://m\\.i?dmzj\\.com/view/\\d+/\\d+\\.html", "pinUrl": true, @@ -1627,6 +1753,7 @@ }, { "name": "动漫之家2 - 閱讀", + "author": "skofkyo", "example": "https://www.idmzj.com/view/siwangleyuan/75382.html", "url": "^https?://www\\.i?dmzj\\.com/view/", "pinUrl": true, @@ -1647,6 +1774,7 @@ }, { "name": "动漫之家2 - 分類", + "author": "skofkyo", "example": "https://www.idmzj.com/update/", "url": "^https?://www\\.i?dmzj\\.com/(update|category|rank)", "nextLink": "//a[text()='下一页']", @@ -1656,6 +1784,7 @@ }, { "name": "动漫之家 - 閱讀", + "author": "skofkyo", "example": "https://manhua.idmzj.com/shenghuomosgushimentiaozhanmigong/118093.shtml", "url": "^https?://manhua\\.i?dmzj\\.com/[a-z]+/\\d+\\.shtml", "pinUrl": true, @@ -1674,6 +1803,7 @@ }, { "name": "动漫之家 - 分類", + "author": "skofkyo", "example": "https://manhua.idmzj.com/update_1.shtml", "url": "^https?://manhua\\.i?dmzj\\.com/", "action": 1, @@ -1685,6 +1815,7 @@ }, { "name": "漫画猫 - 閱讀", + "author": "skofkyo", "example": "https://www.maofly.com/manga/39027/515484.html", "url": "^https?://www\\.maofly\\.com/manga/", "pinUrl": true, @@ -1700,6 +1831,7 @@ }, { "name": "漫画猫 - 分類", + "author": "skofkyo", "example": "https://www.maofly.com/update.html", "url": "^https?://www\\.maofly\\.com/(update|list)", "nextLink": "//a[text()=' 下一页']", @@ -1709,6 +1841,7 @@ }, { "name": "漫画DB - 閱讀", + "author": "skofkyo", "example": "https://www.manhuadb.com/manhua/1167/1315_13028.html", "url": "^https?://www\\.manhuadb\\.com/manhua/\\d+/\\w+\\.html", "pinUrl": true, @@ -1725,6 +1858,7 @@ }, { "name": "漫画DB - 分類", + "author": "skofkyo", "example": "https://www.manhuadb.com/manhua/list-r-4-a-4-c-12.html", "url": "^https?://www\\.manhuadb\\.com/manhua/list", "nextLink": "a[title='下一页']", @@ -1734,6 +1868,7 @@ }, { "name": "快岸漫画 - 閱讀", + "author": "skofkyo", "example": "https://www.kanbook.net/comic/1661/1/1", "url": "^https?://(www\\.)?kanbook\\.net/", "include": "nav+.container-fluid+.container-fluid", @@ -1754,6 +1889,7 @@ }, { "name": "快岸漫画 - 分類", + "author": "skofkyo", "example": "https://www.kanbook.net/list-r-1", "url": "^https?://www\\.kanbook\\.net/(update|list|rank|news)", "nextLink": "//a[@title='下一页' or @title='下一頁']", @@ -1763,6 +1899,7 @@ }, { "name": "動漫戲說 - 漫畫閱讀", + "author": "skofkyo", "example": "https://comic.acgn.cc/view-202.htm", "url": "^https?://comic\\.acgn\\.cc/view-", "history": 2, @@ -1780,6 +1917,7 @@ }, { "name": "動漫戲說 - 分類", + "author": "skofkyo", "example": "https://comic.acgn.cc/cate-1.htm", "url": "^https?://comic\\.acgn\\.cc/", "nextLink": "a[rel='next']", @@ -1789,6 +1927,7 @@ }, { "name": "新新漫画 - 閱讀 - 沒有顯示圖片時需要換服務器", + "author": "skofkyo", "example": "https://www.77mh.xyz/202102/481169.html,http://m.77mh.xyz/202102/481169.html", "url": "^https?://(www|m)\\.77mh\\.[a-z]{2,3}/\\d+/\\d+\\.html", "history": 2, @@ -1807,6 +1946,7 @@ }, { "name": "新新漫画手機版 - 分類", + "author": "skofkyo", "example": "http://m.77mh.xyz/lianzai/index.html", "url": "^https?://(m|so)\\.77mh\\.[a-z]{2,3}/", "include": ".lpagelist", @@ -1816,6 +1956,7 @@ }, { "name": "新新漫画 - 分類", + "author": "skofkyo", "example": "http://www.77mh.xyz/lianzai/index.html", "url": "^https?://(www|so)\\.77mh\\.[a-z]{2,3}/", "include": ".pages_s", @@ -1826,6 +1967,7 @@ }, { "name": "漫漫聚 / KuKu动漫 - 閱讀", + "author": "skofkyo", "example": "http://www.manmanju.com/comiclist/3658/97532/1.htm,http://manhua.ikukudm.com/comiclist/3756/102656/1.htm,http://m.manmanju.com/comiclist/3658/97532/1.htm,", "url": "^https?://(m|a|b|www|manhua)\\.(manmanju|ikukudm)\\.com/comiclist/\\d+/\\d+/\\d+\\.htm$", "action": 1, @@ -1839,6 +1981,7 @@ }, { "name": "漫漫聚 / KuKu动漫 - 分類", + "author": "skofkyo", "example": "http://www.manmanju.com/comictype/3_1.htm,http://manhua.ikukudm.com/comictype/3_1.htm", "url": "^https?://(m|www|manhua)\\.(manmanju|ikukudm)\\.com/comictype/", "nextLink": "//a[text()='下一页'] | //a[span[text()='下一页']]", @@ -1848,6 +1991,7 @@ }, { "name": "鬼罗丽漫画", + "author": "skofkyo", "example": "http://www.gllmh.com/", "url": "^https?://www\\.gllmh\\.com/", "pinUrl": true, @@ -1858,6 +2002,7 @@ }, { "name": "漫画屋 / 免追漫画 - 手機版閱讀", + "author": "skofkyo", "example": "https://www.mhua5.com/chapter-1582203.html,https://www.mh5.org/index.php/chapter/233329", "url": "^https?://(www|m)\\.(mh5|mhua5|mianzhui)\\.(org|com)/(chapter-\\d+\\.html|index\\.php/chapter/\\d+|[0-9-]+\\.html)", "include": ".bottom-tool-bar", @@ -1875,6 +2020,7 @@ }, { "name": "漫画屋 / 免追漫画 - PC版閱讀", + "author": "skofkyo", "example": "https://www.mhua5.com/chapter-1612038.html,https://mh5.org/index.php/chapter/741258", "url": "^https?://(www\\.)?(mh5|mhua5|mianzhui)\\.(org|com)/(chapter-\\d+\\.html|index\\.php/chapter/\\d+|[0-9-]+\\.html)", "exclude": ".bottom-tool-bar", @@ -1893,6 +2039,7 @@ }, { "name": "漫客栈手機版 - 閱讀", + "author": "skofkyo", "example": "https://m.mkzhan.com/216512/1006597.html", "url": "^https?://m\\.mkzhan\\.com/\\d+/\\d+\\.html", "pinUrl": true, @@ -1910,6 +2057,7 @@ }, { "name": "漫客栈 - 卷軸模式", + "author": "skofkyo", "example": "https://www.mkzhan.com/216512/1007019.html", "url": "^https?://www\\.mkzhan\\.com/\\d+/\\d+\\.html", "history": 2, @@ -1928,6 +2076,7 @@ }, { "name": "好漫 6手機版 - 閱讀", + "author": "skofkyo", "example": "https://www.haoman6.com/chapter/520621", "url": "^https?://www\\.haoman6\\.com/chapter/\\d+", "include": ".bottom-tool-bar", @@ -1945,6 +2094,7 @@ }, { "name": "好漫 6 - 閱讀 - 修正PC版漫畫下架", + "author": "skofkyo", "example": "https://www.haoman6.com/chapter/1630368", "url": "^https?://www\\.haoman6\\.com/chapter/\\d+", "exclude": ".bottom-tool-bar", @@ -1963,6 +2113,7 @@ }, { "name": "好漫 6 / 漫客栈 / 漫画屋 - 分類", + "author": "skofkyo", "example": "https://www.haoman6.com/category/,https://www.mkzhan.com/category/,https://www.mhua5.com/category/,https://mh5.org/index.php/category/", "url": "^https?://(www\\.)?(haoman6|g-lens|mkzhan|mhua5|mh5)\\.(com|org)/((category|search)|index\\.php/(category|search))", "nextLink": "a.next", @@ -1972,6 +2123,7 @@ }, { "name": "好漫 6 手機版 - 加載更多", + "author": "skofkyo", "example": "https://www.haoman6.com/,http://www.g-lens.com/", "url": "^https?://www\\.(haoman6|g-lens)\\.com/category/(tags|finish|pay|list)/", "include": ".getmore", @@ -1979,6 +2131,7 @@ }, { "name": "漫本 - 手機版閱讀", + "author": "skofkyo", "example": "http://www.manben.com/m1149741/", "url": "^https?://www\\.manben\\.com/m\\d+(#page_\\d+)?", "exclude": "id('mainControlNext')", @@ -1995,6 +2148,7 @@ }, { "name": "漫本 - PC版閱讀", + "author": "skofkyo", "example": "http://www.manben.com/m1149741/", "url": "^https?://www\\.manben\\.com/m\\d+(#page_\\d+)?", "include": "//script[contains(text(),'eval') and contains(text(),'newImgs')]", @@ -2012,6 +2166,7 @@ }, { "name": "漫本 - PC/手機版查看更多", + "author": "skofkyo", "example": "http://www.manben.com/mh-updated/", "url": "^https?://www\\.manben\\.com/(mh-updated|mh-list)/", "loadMore": "#moreDiv", @@ -2019,6 +2174,7 @@ }, { "name": "好漫8手機版 - 閱讀", + "author": "skofkyo", "example": "http://haoman8.com/comic/222/746937", "url": "^https?://(www\\.)?haoman8\\.com/comic/\\d+/\\d+", "include": ".bottom-tool-bar", @@ -2041,6 +2197,7 @@ }, { "name": "好漫8 - 閱讀 - 修正PC版漫畫下架", + "author": "skofkyo", "example": "http://haoman8.com/comic/222/718631", "url": "^https?://(www\\.)?haoman8\\.com/comic/\\d+/\\d+", "exclude": ".bottom-tool-bar", @@ -2051,6 +2208,7 @@ }, { "name": "好漫8 - 分類", + "author": "skofkyo", "example": "http://haoman8.com/category/", "url": "^https?://haoman8\\.com/category/", "nextLink": "a.on+a", @@ -2060,6 +2218,7 @@ }, { "name": "拷貝漫畫 - 分類頁", + "author": "skofkyo", "example": "https://copymanga.site/comics", "url": "^https?://copymanga\\.site/comics", "action": 1, @@ -2069,6 +2228,7 @@ }, { "name": "拷貝漫畫 - 推薦頁", + "author": "skofkyo", "example": "https://copymanga.site/recommend", "url": "^https?://copymanga\\.site/recommend", "nextLink": "li.next>a", @@ -2078,6 +2238,7 @@ }, { "name": "二次元動漫 - 閱讀", + "author": "skofkyo", "example": "https://www.2animx.com/index-look-name-%E5%A6%96%E7%A5%9E%E8%A8%98-cid-22592-id-235546", "url": "^https?://www\\.2animx\\.com/index-look-name", "init": "document.querySelectorAll('#img_ad_img>img[style*=none]').forEach(e=>{e.remove()});document.querySelectorAll('#ComicPic').forEach(e=>{e.outerHTML=``});", @@ -2091,6 +2252,7 @@ }, { "name": "二次元動漫 - 分類", + "author": "skofkyo", "example": "https://www.2animx.com/index-html-status-1", "url": "^https?://www\\.2animx\\.com/index-html-status", "nextLink": "//a[text()='下一頁']", @@ -2099,6 +2261,7 @@ }, { "name": "酷漫屋 - 閱讀", + "author": "skofkyo", "example": "http://www.kumw7.com/24186/1259138.html", "url": "^https?://www\\.(kumw|kuman)\\d+\\.com/\\d+/\\d+\\.html$", "history": 2, @@ -2112,6 +2275,7 @@ }, { "name": "酷漫屋 - 分類", + "author": "skofkyo", "example": "http://www.kumw7.com/sort/13-1.html", "url": "^https?://www\\.(kumw|kuman)\\d+\\.com/(sort|rank)/", "nextLink": "//a[text()=' > ']", @@ -2121,6 +2285,7 @@ }, { "name": "酷漫屋手機版 - 閱讀", + "author": "skofkyo", "example": "http://kumw7.com/25387/1391494.html", "url": "^https?://(m\\.)?(kumw|kuman)\\d+\\.com/\\d+/\\d+\\.html", "history": 2, @@ -2140,6 +2305,7 @@ }, { "name": "酷漫屋手機版 - 分類", + "author": "skofkyo", "example": "http://kumw7.com/rank/5-1.html", "url": "^https?://(m\\.)?(kumw|kuman)\\d+\\.com/(sort|rank)/", "nextLink": "//a[text()=' > ']", @@ -2149,6 +2315,7 @@ }, { "name": "快看 - 分類", + "author": "skofkyo", "example": "https://www.kuaikanmanhua.com/tag/0", "url": "^https?://www\\.kuaikanmanhua\\.com/tag/\\d+", "init": "let ge=e=>document.querySelector(e);let link=ge('.headerContent>div>ul>li:nth-child(2)>a');link.href='/tag/0\\?region=1&pays=0&state=0&sort=1&page=1';link.removeAttribute('target');if(!location.search){ge('.selList.fl.cls>a:first-child').click()}", @@ -2165,6 +2332,7 @@ }, { "name": "快看 - 閱讀", + "author": "skofkyo", "example": "https://www.kuaikanmanhua.com/web/comic/190217/", "url": "^https?://www\\.kuaikanmanhua\\.com/web/comic/\\d+", "history": 2, @@ -2180,6 +2348,7 @@ }, { "name": "comic.bh3.com", + "author": "skofkyo", "example": "https://comic.bh3.com/book/1001/1", "url": "^https?://comic\\.bh3\\.com/book/\\d+/\\d+", "nextLinkByJs": "let n=doc.querySelector('.comic-wrapper>a:last-child');if(n){return location.origin+n.href.split('\\'')[3]}", @@ -2189,6 +2358,7 @@ }, { "name": "kantv.io", + "author": "skofkyo", "example": "http://kantv.io/home/", "url": "^https?://kantv\\.io/", "nextLink": "li.active+li>a", @@ -2198,6 +2368,7 @@ }, { "name": "R3SUB - 搜索", + "author": "skofkyo", "example": "https://r3sub.com/search.php?s=king", "url": "^https?://r3sub\\.com/search\\.php", "nextLink": "li.active+li>a", @@ -2207,6 +2378,7 @@ }, { "name": "SubHD", + "author": "skofkyo", "example": "https://subhd.tv/sub/movie", "url": "^https?://subhd(tw)?\\.(tv|com|la|cc|me)/(zu|sub|search)/", "include": "nav.clearfix", @@ -2221,6 +2393,7 @@ }, { "name": "伪射手网", + "author": "skofkyo", "example": "http://assrt.net/xml/list/sub/", "url": "^https?://assrt\\.net/", "nextLinkByJs": "let next = doc.querySelector('#pl-current+a'); if (next) return location.origin + location.pathname + '?page=' + next.innerText", @@ -2232,6 +2405,7 @@ }, { "name": "A4k 字幕網", + "author": "skofkyo", "example": "https://www.a4k.net/", "url": "^https?://www\\.a4k\\.net/", "nextLink": "a.pager__item--next", @@ -2241,6 +2415,7 @@ }, { "name": "字幕库 zmk", + "author": "skofkyo", "example": "https://zimuku.org/", "url": "^https?://zimuku\\.org/", "nextLink": "a.next", @@ -2249,6 +2424,7 @@ }, { "name": "中文字幕网 zimuzimu", + "author": "skofkyo", "example": "http://cn.zimuzimu.com/so_zimu.htm?q=2020", "url": "^https?://cn\\.zimuzimu\\.com/", "nextLink": "li.page-item.active+li>a", @@ -2258,6 +2434,7 @@ }, { "name": "點點字幕", + "author": "skofkyo", "example": "http://www.ddzimu.com/download/xslist.php?key=king", "url": "^https?://www\\.ddzimu\\.com/\\w+/xslist\\.php", "nextLink": "li.disabled+li>a", @@ -2266,6 +2443,7 @@ }, { "name": "SkrBT / BT1207", + "author": "skofkyo", "example": "http://ibt120701.xyz/search?keyword=king", "url": "^https?://.*(bt1207|skrbt)[^/]+/", "include": "#search-form", @@ -2276,6 +2454,7 @@ }, { "name": "RARBG", + "author": "skofkyo", "example": "https://rarbg.to/torrents.php?category=movies", "url": "^https?://(proxy|unblocked)?rarbg([a-z0-9]+)?\\.(to|org|com)/", "pinUrl": true, @@ -2290,6 +2469,7 @@ }, { "name": "limetorrents.cc", + "author": "skofkyo", "example": "https://www.limetorrents.lol/browse-torrents/Movies/", "url": "^https?://www\\.limetorrents\\.lol/(browse-torrents|search)/", "nextLink": "#next", @@ -2298,6 +2478,7 @@ }, { "name": "BT 之家", + "author": "skofkyo", "example": "https://www.btbtt15.com/forum-index-fid-950.htm", "url": "^https?://www\\.btbtt\\d+\\.com/", "pinUrl": true, @@ -2309,6 +2490,7 @@ }, { "name": "蜜柑计划", + "author": "skofkyo", "example": "https://mikanani.me/Home/Classic", "url": "^https?://mikanani\\.me/Home/Classic", "action": 1, @@ -2319,6 +2501,7 @@ }, { "name": "動漫花園", + "author": "skofkyo", "example": "http://share.dmhy.org/topics/list/sort_id/2", "url": "^https?://(www|share|dmhy)?(\\.)?(dmhy|anoneko)\\.(org|com)", "action": 1, @@ -2330,6 +2513,7 @@ }, { "name": "愛戀動漫&MioBT", + "author": "skofkyo", "example": "http://www.kisssub.org/,http://miobt.com/", "url": "^https?://(www\\.|m|share\\.)?(kisssub|miobt|comicat|acgnx|anix|36dm)\\.(org|com|se|moe|club)", "action": 1, @@ -2341,6 +2525,7 @@ }, { "name": "言耽社 - 閱讀", + "author": "skofkyo", "example": "https://yandanshe.com/", "url": "^https?://yandanshe\\.com/\\d+", "nextLink": "span.current+a", @@ -2350,6 +2535,7 @@ }, { "name": "言耽社 - 分类页", + "author": "skofkyo", "example": "https://yandanshe.com/", "url": "^https?://yandanshe\\.com/b", "nextLink": ".next-page>a", @@ -2358,6 +2544,7 @@ }, { "name": "MINI4K", + "author": "skofkyo", "example": "https://www.mini4k.com/movies", "url": "^https?://www\\.mini4k\\.com/movies", "nextLink": "a.pager__item--next", @@ -2367,6 +2554,7 @@ }, { "name": "WebHD - 搜索页", + "author": "skofkyo", "example": "http://webhd.cc/search/king", "url": "^https?://webhd\\.cc/search/", "nextLink": "//a[@class='page-link'][contains(text(), '下一页')]", @@ -2378,6 +2566,7 @@ }, { "name": "WebHD", + "author": "skofkyo", "example": "http://webhd.cc/", "url": "^https?://webhd\\.cc/", "nextLink": "//a[@class='page-link'][contains(text(), '下一页')]", @@ -2387,6 +2576,7 @@ }, { "name": "limetorrents", + "author": "skofkyo", "example": "https://ww1.limetorrents.icu/movies", "url": "^https?://(\\w{1,3}\\.)?limetorrents\\.icu/", "nextLink": "a[rel='next']", @@ -2396,6 +2586,7 @@ }, { "name": "TorrentGalaxy", + "author": "skofkyo", "example": "https://torrentgalaxy.to/torrents.php", "url": "^https?://torrentgalaxy\\.to/", "nextLink": "li.page-item.active+li.page-item>a", @@ -2405,6 +2596,7 @@ }, { "name": "kickasss", + "author": "skofkyo", "example": "https://kickasss.to/", "url": "^https?://(kickasss|katcr)\\.", "nextLink": "a.active+a", @@ -2414,6 +2606,7 @@ }, { "name": "1337x", + "author": "skofkyo", "example": "https://www.1377x.to/", "url": "^https?://www\\.1377x\\.", "nextLink": ".pagination li.active+li>a", @@ -2423,6 +2616,7 @@ }, { "name": "YTS", + "author": "skofkyo", "example": "https://yts.mx/browse-movies", "url": "^https?://yts\\.mx/browse-movies", "nextLink": "//ul[contains(@class, 'tsc_pagination')]/li[a/@class='current']/following-sibling::li[1]/a", @@ -2432,6 +2626,7 @@ }, { "name": "萌番组 lite", + "author": "skofkyo", "example": "https://bangumi.moe/lite/", "url": "^https?://bangumi\\.moe/lite/", "nextLink": "//section/a[span[contains(@class, 'next')]]", @@ -2442,12 +2637,14 @@ }, { "name": "萌番组", + "author": "skofkyo", "example": "https://bangumi.moe/", "url": "^https?://bangumi\\.moe/", "loadMore": "[torrent-list='lattorrents'] button[ng-click='loadMore()'] ,[torrent-list='torrents'] button[ng-click='loadMore()']" }, { "name": "AniRena", + "author": "skofkyo", "example": "https://www.anirena.com/", "url": "^https?://www\\.anirena\\.com/", "nextLink": "a.disabled+a:not(.disabled)", @@ -2457,6 +2654,7 @@ }, { "name": "ACG.RIP", + "author": "skofkyo", "example": "https://acg.rip/", "url": "^https?://acg\\.rip/", "nextLink": "li.next>a", @@ -2465,6 +2663,7 @@ }, { "name": "anime1.me", + "author": "skofkyo", "example": "https://anime1.me/", "url": "^https?://anime1\\.me/", "nextLink": "a.next", @@ -2472,6 +2671,7 @@ }, { "name": "233 动漫 - 排行榜", + "author": "skofkyo", "example": "https://www.dm233.cc/rank/", "url": "^https?://www\\.dm233\\.cc/rank/", "nextLink": "//div[@class='pagelist']//a[contains(text(), '下一页') or contains(text(), '下一頁')]", @@ -2480,6 +2680,7 @@ }, { "name": "233 动漫", + "author": "skofkyo", "example": "https://www.dm233.cc/catalog/", "url": "^https?://www\\.dm233\\.cc/", "nextLink": "//div[@class='pagelist']//a[contains(text(), '下一页') or contains(text(), '下一頁')]", @@ -2488,6 +2689,7 @@ }, { "name": "AGE 动漫 - 排行榜", + "author": "skofkyo", "example": "https://www.agemys.cc/rank", "url": "^https?://www\\.agemys\\.cc/rank", "nextLink": "id('container')/ul[@style][not(@class)]/li/a[contains(text(), '下一页')]", @@ -2497,6 +2699,7 @@ }, { "name": "AGE 动漫", + "author": "skofkyo", "example": "https://www.agemys.net/catalog/all-all-all-all-all-time-1", "url": "^https?://www\\.agemys\\.[^/]+/", "nextLink": "id('container')//div[@class='blockcontent']/div[@style][not(@class)]/li/a[contains(text(), '下一页')]", @@ -2505,6 +2708,7 @@ }, { "name": "漫岛动漫", + "author": "skofkyo", "example": "https://www.mandao.tv/list/lm1.html", "url": "^https?://www\\.mandao\\.tv/", "nextLink": "//div[contains(@class, 'page')]/a[text()='>']", @@ -2514,6 +2718,7 @@ }, { "name": "妮可动漫", + "author": "skofkyo", "example": "http://www.nicotv.me/video/type3/-----4-addtime.html", "url": "^https?://www\\.nicotv\\.me/", "nextLink": "//ul[contains(@class, 'pagination ')]//a[text()='»']", @@ -2522,6 +2727,7 @@ }, { "name": "怡萱动漫", + "author": "skofkyo", "example": "https://www.yxdmlove.com/resource/", "url": "^https?://www\\.yxdmlove\\.com/", "nextLink": "//a[@class='nextPage' or text()='下一页']", @@ -2530,6 +2736,7 @@ }, { "name": "LIBVIO", + "author": "skofkyo", "example": "https://libvio.me/type/1.html", "url": "^https?://libvio\\.me/", "action": 1, @@ -2542,6 +2749,7 @@ }, { "name": "筆趣影視", + "author": "skofkyo", "example": "http://biquys.com/acg/y2022/", "url": "^https?://(www\\.)?biquys.com/(acg|zongyi|mov|tv)/", "action": 1, @@ -2553,6 +2761,7 @@ }, { "name": "libgen.rs", + "author": "skofkyo", "example": "http://libgen.rs/search.php?&req=The+Way+Out&phrase=1&view=simple&column=def&sort=def&sortmode=ASC&page=1", "url": "^https?://libgen\\.rs/", "action": 1, @@ -2565,6 +2774,7 @@ }, { "name": "99images", + "author": "skofkyo", "example": "https://www.99images.com/celebrities/aisha-sharma", "url": "^https?://www.99images.com/", "action": 1, @@ -2575,6 +2785,7 @@ }, { "name": "steamcommunity.com", + "author": "skofkyo", "url": "^https?://steamcommunity\\.com/", "include": ".workshopBrowsePaging", "nextLink": "a.pagebtn:last-child", @@ -2585,6 +2796,7 @@ }, { "name": "游研社", + "author": "skofkyo", "example": "https://www.yystv.cn/docs", "url": "^https?://www\\.yystv\\.cn/", "action": 1, @@ -2596,6 +2808,7 @@ }, { "name": "Vilipix", + "author": "skofkyo", "example": "https://www.vilipix.com/new", "url": "^https?://www\\.vilipix\\.com/", "action": 2, @@ -2606,6 +2819,7 @@ }, { "name": "吐槽弹幕网 - 搜索页", + "author": "skofkyo", "example": "https://www.tucao.lol/index.php?m=content&c=search&a=init&catid=24&dosubmit=1&orderby=a.id+DESC&info%5Btitle%5D=%E8%BD%AC%E7%94%9F&page=3", "action": 1, "url": "^https?://www\\.tucao\\.[a-z]{3}/index\\.php\\?", @@ -2616,6 +2830,7 @@ }, { "name": "吐槽弹幕网", + "author": "skofkyo", "example": "https://www.tucao.lol/list/7/", "url": "^https?://www\\.tucao\\.[a-z]{3}/", "nextLink": ".pagego a", @@ -2624,6 +2839,7 @@ }, { "name": "ZzzFun 动漫", + "author": "skofkyo", "example": "http://www.zzzfun.com/vod_type_id_1.html", "url": "^https?://www\\.zzzfun\\.com/", "nextLink": "//a[text()='下一页']", @@ -2633,6 +2849,7 @@ }, { "name": "91 美剧网", + "author": "skofkyo", "example": "https://91mjw.vip/category/dianying", "url": "^https?://(91mjw|91mj)\\.vip/", "nextLink": ".next-page>a", @@ -2642,6 +2859,7 @@ }, { "name": "核桃影院", + "author": "skofkyo", "example": "http://kkkk.plus/vodshow/1-----------.html", "url": "^https?://kkkk\\.plus/", "nextLink": ".page-next", @@ -2651,6 +2869,7 @@ }, { "name": "低端影视", + "author": "skofkyo", "example": "https://ddys.tv/category/movie/", "url": "^https?://ddys\\d?\\.[a-z]{2,3}/", "nextLink": "a.next", @@ -2660,6 +2879,7 @@ }, { "name": "马克喵", + "author": "skofkyo", "example": "https://www.macat.vip/%e5%ad%97%e4%bd%93", "url": "^https?://www\\.macat\\.vip/", "include": ".posts-wrapper.row", @@ -2670,6 +2890,7 @@ }, { "name": "电影狗", + "author": "skofkyo", "example": "https://www.dianyinggou.com/yingku/", "url": "^https?://www\\.dianyinggou\\.com/", "nextLink": ".mainPage li.selected+li>a", @@ -2680,6 +2901,7 @@ }, { "name": "厂长资源", + "author": "skofkyo", "example": "https://czzy01.com/", "url": "^https?://[^/]+/", "include": "//title[contains(text(),'厂长资源')]", @@ -2690,6 +2912,7 @@ }, { "name": "NO视频", + "author": "skofkyo", "example": "https://www.novipnoad.com/movie/", "url": "^https?://www\\.novipnoad\\.com/", "nextLink": "a.nextpostslink", @@ -2699,6 +2922,7 @@ }, { "name": "115看劇 - 分類", + "author": "skofkyo", "example": "https://115kanju.com/center", "url": "^https?://115kanju\\.com/", "nextLink": "li[title='下一页']", @@ -2708,6 +2932,7 @@ }, { "name": "飛極速線上", + "author": "skofkyo", "example": "http://www.fjisu2.com/acg/japan/", "url": "^https?://(www\\.|m\\.)?(fjisu|feijisu)\\d+\\.com/\\w+/\\w+/", "action": 1, @@ -2718,6 +2943,7 @@ }, { "name": "淘豆网 - 閱讀", + "author": "skofkyo", "example": "https://m.taodocs.com/p-118668992.html", "url": "^https?://m\\.taodocs\\.com/", "autoClick": ".view", @@ -2725,6 +2951,7 @@ }, { "name": "200btsow.vip", + "author": "skofkyo", "example": "https://200btsow.vip/", "url": "^https?://200btsow\\.vip/", "nextLink": "//a[text()='下一页']", @@ -2734,6 +2961,7 @@ }, { "name": "onehu.xyz", + "author": "skofkyo", "example": "https://onehu.xyz/", "url": "^https?://onehu\\.xyz/", "nextLink": "span.current+a", @@ -2743,6 +2971,7 @@ }, { "name": "www.thingiverse.com", + "author": "skofkyo", "example": "https://www.thingiverse.com/", "url": "^https?://www\\.thingiverse\\.com/", "action": 1, @@ -2756,6 +2985,7 @@ }, { "name": "https://www.orcy.net.cn/", + "author": "skofkyo", "example": "https://www.orcy.net.cn/", "url": "^https?://www\\.orcy\\.net\\.cn/", "nextLink": ".nextpostslink", @@ -2764,6 +2994,7 @@ }, { "name": "小众软件", + "author": "skofkyo", "example": "https://www.appinn.com/abouttime/amp/", "url": "^https?://www\\.appinn\\.com/", "nextLink": "a.next,.next>a", @@ -2773,6 +3004,7 @@ }, { "name": "ijtsrd.com", + "author": "skofkyo", "example": "https://www.ijtsrd.com/archive/21/volume-3/issue-4", "url": "^https?://www\\.ijtsrd\\.com/", "include": "//ul[li[@class='active'] and @class='pagination']/following-sibling::ul[1]//a[@href]", @@ -2782,12 +3014,14 @@ }, { "name": "scloud.ws", + "author": "skofkyo", "url": "^https?://scloud\\.ws/", "nextLink": ".js-ls-pagination-next", "pageElement": ".topic-card-wrapper" }, { "name": "Winaero", + "author": "skofkyo", "example": "https://winaero.com/category/windows-10/", "url": "^https?://winaero\\.com/", "nextLink": "a.next", @@ -2798,6 +3032,7 @@ }, { "name": "cahdroid", + "author": "skofkyo", "example": "https://cahdroid.com/", "url": "^https?://cahdroid\\.com/", "include": ".pagination", @@ -2808,6 +3043,7 @@ }, { "name": "4download", + "author": "skofkyo", "example": "https://4download.net/software/", "url": "^https?://4download\\.net/", "include": ".pagi-nav.clearfix.ignore-select", @@ -2819,6 +3055,7 @@ }, { "name": "docs.oracle.com", + "author": "skofkyo", "example": "https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html", "url": "^https?://docs\\.oracle\\.com/", "action": 2, @@ -2827,6 +3064,7 @@ }, { "name": "w3school.com.cn", + "author": "skofkyo", "example": "https://www.w3school.com.cn/js/index.asp", "url": "^https?://www\\.w3school\\.com\\.cn/", "action": 1, @@ -2841,6 +3079,7 @@ }, { "name": "菜鸟教程 - 分类页", + "author": "skofkyo", "example": "https://www.runoob.com/w3cnote", "url": "^https?://www\\.runoob\\.com/w3cnote", "nextLink": "li.next-page>a", @@ -2849,6 +3088,7 @@ }, { "name": "菜鸟教程 - 文章页", + "author": "skofkyo", "example": "https://www.runoob.com/js/js-tutorial.html", "url": "^https?://www\\.runoob\\.com/[a-z/-]+\\.html", "action": 1, @@ -2861,6 +3101,7 @@ }, { "name": "奔跑中的奶酪", + "author": "skofkyo", "example": "http://www.runningcheese.com/", "url": "^https?://www\\.runningcheese\\.com/", "nextLink": "a.next", @@ -2870,6 +3111,7 @@ }, { "name": "423down", + "author": "skofkyo", "example": "https://www.423down.com/", "url": "^https?://www\\.423down\\.com/", "nextLink": "//a[text()='下一页']", @@ -2879,6 +3121,7 @@ }, { "name": "大眼仔旭", + "author": "skofkyo", "example": "http://www.dayanzai.me/", "url": "^https?://www\\.dayanzai\\.me/", "nextLink": ".page>span+a", @@ -2888,6 +3131,7 @@ }, { "name": "果核剥壳", + "author": "skofkyo", "example": "https://www.ghxi.com/category/all/pcsoft", "url": "^https?://www\\.ghxi\\.com/", "nextLink": "a.next", @@ -2897,6 +3141,7 @@ }, { "name": "億破姐&電腦系統吧", + "author": "skofkyo", "example": "http://www.dnxitong.com/soft/", "url": "^https?://www\\.(ypojie|dnxitong)\\.com/", "nextLink": ".next-page>a", @@ -2907,6 +3152,7 @@ }, { "name": "FC Portables", + "author": "skofkyo", "example": "https://www.fcportables.com/", "url": "^https?://www\\.fcportables\\.com/", "nextLink": "a.next", @@ -2917,6 +3163,7 @@ }, { "name": "KaranPc", + "author": "skofkyo", "example": "https://karanpc.com/windows/download-managers/", "url": "^https?://karanpc\\.com/", "include": "#nav-below", @@ -2927,6 +3174,7 @@ }, { "name": "阿榮福利味", + "author": "skofkyo", "example": "https://www.azofreeware.com/", "url": "^https?://www\\.azofreeware\\.com/", "action": 1, @@ -2936,6 +3184,7 @@ }, { "name": "Apkpure", + "author": "skofkyo", "example": "https://apkpure.com/tw/game", "url": "^https?://apkpure\\.com/", "nextLink": "a.loadmore", @@ -2945,6 +3194,7 @@ }, { "name": "軟體部落", + "author": "skofkyo", "example": "https://softblog.tw/green-portable", "url": "^https?://softblog\\.tw/", "include": ".page-numbers", @@ -2955,6 +3205,7 @@ }, { "name": "Gdaily", + "author": "skofkyo", "example": "https://www.gdaily.org/software", "url": "^https?://www\\.gdaily\\.org/(search|software|app|online|teaching)", "init": "document.querySelectorAll('.adsbygoogle').forEach(e=>{e.parentNode.parentNode.remove()})", @@ -2966,12 +3217,14 @@ }, { "name": "94i.in - 自動簽到", + "author": "skofkyo", "example": "https://94i.in/", "url": "^https?://94i\\.in/", "autoClick": "#pper_a:not([style='display: none;'])" }, { "name": "Mobile01 - 手機版內文", + "author": "skofkyo", "example": "https://m.mobile01.com/topicdetail.php?f=300&t=6660682", "url": "^https?://m\\.mobile01\\.com/topicdetail", "nextLink": ".c-pagination--next", @@ -2983,6 +3236,7 @@ }, { "name": "Mobile01 - 內文", + "author": "skofkyo", "example": "https://www.mobile01.com/topicdetail.php?f=300&t=6660682", "url": "^https?://www\\.mobile01\\.com/topicdetail", "nextLink": "li.l-pagination__page.is-active+li>a", @@ -2994,6 +3248,7 @@ }, { "name": "Mobile01 - 文章列表", + "author": "skofkyo", "example": "https://www.mobile01.com/topiclist.php?f=300", "url": "^https?://(www|m)\\.mobile01\\.com/(forumtopic|topiclist)", "nextLink": "li.l-pagination__page.is-active+li>a,.c-pagination--next", @@ -3004,6 +3259,7 @@ }, { "name": "巴哈姆特 - 內文", + "author": "skofkyo", "example": "https://forum.gamer.com.tw/C.php?bsn=23805&snA=610529&tnum=14858", "url": "^https?://forum\\.gamer\\.com.tw/C\\.php", "nextLink": "a.next:not(.no)", @@ -3016,6 +3272,7 @@ }, { "name": "巴哈姆特 - 文章列表", + "author": "skofkyo", "example": "https://forum.gamer.com.tw/B.php?bsn=23805", "url": "^https?://forum\\.gamer\\.com.tw/B\\.php", "nextLink": "a.next:not(.no)", @@ -3029,6 +3286,7 @@ }, { "name": "Erowall.com", + "author": "skofkyo", "example": "https://erowall.com/", "url": "^https?://erowall\\.com/", "nextLink": "//a[contains(text(),'Next')]", @@ -3038,6 +3296,7 @@ }, { "name": "ftopx.com", + "author": "skofkyo", "example": "https://ftopx.com/", "url": "^https?://ftopx\\.com/", "nextLink": "li.active+li>a", @@ -3047,6 +3306,7 @@ }, { "name": "448人体艺术", + "author": "skofkyo", "example": "https://488xm.com/666rentiyishu/", "url": "^https?://488xm\\.com/\\w+/", "pageElement": "#container>.grid", @@ -3054,6 +3314,7 @@ }, { "name": "gogo人体艺术 - 圖片", + "author": "skofkyo", "example": "https://gogortrt.com/gmgqdd/1305/", "url": "^https?://gogortrt\\.[a-z]{2,3}/[a-z]+/\\d+/", "init": "let a=document.querySelector('.main>div:not(.atc_new_head)>a');a.outerHTML=a.innerHTML;", @@ -3066,6 +3327,7 @@ }, { "name": "gogo人体艺术", + "author": "skofkyo", "example": "https://gogortrt.com/gmgqdd/", "url": "^https?://gogortrt\\.[a-z]{2,3}/[a-z]+/", "include": ".index_list", @@ -3077,6 +3339,7 @@ }, { "name": "956体艺术 - 圖片", + "author": "skofkyo", "example": "https://956n.com/rbddszysz/1398/", "url": "^https?://956[a-z]{1,2}\\.[a-z]{2,3}/[a-z]+/\\d+/(\\d+\\.html$)?", "init": "document.querySelectorAll('.content>a').forEach(a=>{a.outerHTML=a.innerHTML})", @@ -3089,6 +3352,7 @@ }, { "name": "956人体艺术", + "author": "skofkyo", "example": "https://956n.com/rbddszysz/", "url": "^https?://956[a-z]{1,2}\\.[a-z]{2,3}/", "exclude": ".title", @@ -3099,6 +3363,7 @@ }, { "name": "666人体艺术 - 圖片", + "author": "skofkyo", "example": "https://6666rt.com/ArtZG/2152/1.html", "url": "^https?://[6]{3,4}[a-z]{2}\\.[a-z]{2,3}/[a-zA-Z]+/\\d+/\\d+\\.html", "init": "document.querySelectorAll('.imgbox>a').forEach(a=>{a.outerHTML=a.innerHTML})", @@ -3112,6 +3377,7 @@ }, { "name": "666人体艺术", + "author": "skofkyo", "example": "https://6666rt.com/ArtZG/", "url": "^https?://[6]{3,4}[a-z]{2}\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3120,6 +3386,7 @@ }, { "name": "64体艺术 - 圖片", + "author": "skofkyo", "example": "http://www.64ay.com/xxrtddbkxb/313.html", "url": "^https?://www\\.64[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", "init": "document.querySelectorAll('.tu>a').forEach(a=>{a.outerHTML=a.innerHTML})", @@ -3133,6 +3400,7 @@ }, { "name": "64人体艺术", + "author": "skofkyo", "example": "http://www.64ay.com/xxrtddbkxb/", "url": "^https?://www\\.64[a-z]{2}\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3142,6 +3410,7 @@ }, { "name": "98体艺术 - 圖片", + "author": "skofkyo", "example": "http://www.98ah.com/GOGOqqddgqrt/415.html", "url": "^https?://www\\.98[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", "init": "let a=document.querySelector('.content-pic>a');a.outerHTML=a.innerHTML;", @@ -3155,6 +3424,7 @@ }, { "name": "98人体艺术", + "author": "skofkyo", "example": "http://www.98ah.com/gogoltmnysxz/", "url": "^https?://www\\.98[a-z]{2}\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3163,6 +3433,7 @@ }, { "name": "54体艺术 - 圖片", + "author": "skofkyo", "example": "http://www.54aj.com/gogogmbspqq/432.html", "url": "^https?://www\\.54[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", "init": "let a=document.querySelector('.content>a:not([href*=tags])');a.outerHTML=a.innerHTML;", @@ -3175,6 +3446,7 @@ }, { "name": "54人体艺术", + "author": "skofkyo", "example": "http://www.54aj.com/gogogmbspqq/", "url": "^https?://www\\.54[a-z]{2}\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3183,6 +3455,7 @@ }, { "name": "48人体艺术 - 圖片", + "author": "skofkyo", "example": "http://www.48gd.com/yyrtdd/448.html", "url": "^https?://www\\.48[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", "init": "let a=document.querySelector('#content>a');a.outerHTML=a.innerHTML;", @@ -3195,6 +3468,7 @@ }, { "name": "48人体艺术", + "author": "skofkyo", "example": "http://www.48gd.com/qltysz/", "url": "^https?://www\\.48[a-z]{2}\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3203,6 +3477,7 @@ }, { "name": "42人体艺术 - 圖片", + "author": "skofkyo", "example": "http://www.42jd.com/ddrGOGOtysgq/417.html", "url": "^https?://www\\.42[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", "action": 1, @@ -3216,6 +3491,7 @@ }, { "name": "42人体艺术 - 搜索", + "author": "skofkyo", "example": "http://www.42jd.com/plus/search.php?keyword=%E7%BE%8E%E5%A5%B3&searchtype=titlekeyword&channeltype=0&orderby=&kwtype=0&pagesize=24&typeid=0&TotalResult=50&PageNo=1", "url": "^https?://www\\.[0-9]{2}[a-z]{2}\\.[a-z]{2,3}/plus/search\\.php", "action": 1, @@ -3225,6 +3501,7 @@ }, { "name": "42人体艺术", + "author": "skofkyo", "example": "http://www.42jd.com/ddxxltmnrt/", "url": "^https?://www\\.42[a-z]{2}\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3233,6 +3510,7 @@ }, { "name": "36人体艺术 - 圖片", + "author": "skofkyo", "example": "www.36ut.com,xixirt.org", "url": "^https?://(www\\.)?(36[a-z]{2}|xixirt)\\.[a-z]{2,3}/[a-z]+/(\\d+/|\\d+(_\\d+)?\\.html)", "action": 1, @@ -3247,6 +3525,7 @@ }, { "name": "36人体艺术", + "author": "skofkyo", "example": "www.36ut.com,xixirt.org", "url": "^https?://(www\\.)?(36[a-z]{2}|xixirt)\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3256,6 +3535,7 @@ }, { "name": "23人体艺术 - 圖片", + "author": "skofkyo", "example": "http://www.23fe.com/gogoddppys/435.html", "url": "^https?://www\\.23[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", "action": 1, @@ -3270,6 +3550,7 @@ }, { "name": "23人体艺术", + "author": "skofkyo", "example": "http://www.23fe.com/gogoddppys/", "url": "^https?://www\\.23[a-z]{2}\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3278,6 +3559,7 @@ }, { "name": "AJ人体艺术 - 圖片", + "author": "skofkyo", "example": "https://www.02aj.com/yzrt/8674.html", "url": "^https?://www\\.02aj\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", "action": 1, @@ -3292,6 +3574,7 @@ }, { "name": "AJ人体艺术", + "author": "skofkyo", "example": "https://www.02aj.com/yzrt/", "url": "^https?://www\\.\\d+aj\\.[a-z]{2,3}/", "nextLink": "//a[text()='下一页']", @@ -3301,6 +3584,7 @@ }, { "name": "139人体艺术手機版 - 圖片", + "author": "skofkyo", "example": "https://m.139tu.com/rtysyz/20200710/7479.html", "url": "^https?://(m|wap)\\.([0-9]{2,4}[a-z]{1,5}|[a-z]{2,5}[0-9]{1,3}|\\d+aj|\\d+|xixirt|gogortrt|7m11)\\.[a-z]{2,3}/[a-zA-Z]+/(\\d+/(\\d+\\.html$)?|\\d+(_\\d+)?\\.html$|\\d+/\\d+(_\\d+)?\\.html$)", "init": "document.querySelectorAll('.tal>a').forEach(a=>{a.outerHTML=a.innerHTML})", @@ -3314,6 +3598,7 @@ }, { "name": "139人体艺术手機版", + "author": "skofkyo", "example": "88rtys.com,https://m.139tu.com/rtysyz/", "url": "^https?://(m|wap)\\.([0-9]{2,4}[a-z]{1,5}|[a-z]{2,5}[0-9]{1,3}|\\d+aj|\\d+|xixirt|gogortrt|7m11)\\.[a-z]{2,3}/", "include": ".page-show", @@ -3325,6 +3610,7 @@ }, { "name": "139人体艺术 - 圖片", + "author": "skofkyo", "example": "https://www.139tu.com/rtysyz/20210829/8674.html", "url": "^https?://www\\.139tu\\.[a-z]{2,3}/[a-z]+/\\d+/\\d+(_\\d+)?\\.html", "action": 1, @@ -3338,6 +3624,7 @@ }, { "name": "139人体艺术", + "author": "skofkyo", "example": "88rtys.com,https://www.139tu.com/rtysyz/", "url": "^https?://www\\.139tu\\.[a-z]{2,3}/", "include": ".list_tags", @@ -3349,6 +3636,7 @@ }, { "name": "GOGO人体艺术 - 圖片", + "author": "skofkyo", "example": "http://www.gogort2.com/html/yazhou/9988.html", "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/html/\\w+/\\d+(_\\d+)?\\.html$", "action": 1, @@ -3363,6 +3651,7 @@ }, { "name": "GOGO人体艺术 - 標籤", + "author": "skofkyo", "example": "http://www.gogort2.net/index.php?m=content&c=tag&a=lists&tag=%B3%AC%B4%F3%B3%DF%B6%C8", "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/index\\.php\\?m=content&c=tag", "nextLink": "span+a:not(.a1)", @@ -3374,6 +3663,7 @@ }, { "name": "GOGO人体艺术 - 搜索", + "author": "skofkyo", "example": "http://www.gogort2.com/index.php?m=search&c=index&a=init&typeid=&siteid=1&q=%B4%F3%B5%A8", "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/index\\.php\\?m=search", "nextLink": "span+a:not(.a1)", @@ -3383,6 +3673,7 @@ }, { "name": "GOGO人体艺术", + "author": "skofkyo", "example": "http://www.gogort2.com/html/yazhou/index_2.html", "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/html/[a-z]+/(index_\\d+\\.html)?", "include": ".index_list", @@ -3394,6 +3685,7 @@ }, { "name": "图集岛", + "author": "skofkyo", "example": "https://www.tujidao03.com/u/?action=gengxin", "url": "^https?://www\\.tujidao\\d+\\.com/", "nextLink": ".num+.next", @@ -3402,6 +3694,7 @@ }, { "name": "Kemono - post", + "author": "skofkyo", "example": "https://kemono.party/fantia/user/17148/post/1528173", "url": "^https?://kemono\\.party/fantia/user/\\d+/post/\\d+$", "nextLink": ".post__nav-item>a.next", @@ -3409,6 +3702,7 @@ }, { "name": "Kemono - user", + "author": "skofkyo", "example": "https://kemono.party/fantia/user/17148?o=0", "url": "^https?://kemono\\.party/fantia/user/\\d+\\?o=", "nextLink": "a.pagination-button-after-current", @@ -3421,6 +3715,7 @@ }, { "name": "Kemono - posts", + "author": "skofkyo", "example": "https://kemono.party/posts", "url": "^https?://kemono\\.party/posts", "nextLink": "a.pagination-button-after-current", @@ -3432,6 +3727,7 @@ }, { "name": "全图网 - 圖片 - 直接載入全部圖片", + "author": "skofkyo", "example": "http://qq.quantuwang1.com/m/fb9deaa66efefa21.html,http://m.54mn.cc/m/29491/1.html", "url": "^https?://(qq?|t|w|m)\\.(quantuwang\\d?|54mn)\\.(com|cc)/m/", "include": [ @@ -3445,6 +3741,7 @@ }, { "name": "全图网 - 分類", + "author": "skofkyo", "example": "http://qq.quantuwang1.com/meinv/taotu/,http://m.54mn.cc/meinv/taotu/", "url": "^https?://(qq?|t|w|m)\\.(quantuwang\\d?|54mn)\\.(com|cc)/", "exclude": ".index_c_img img[alt]", @@ -3455,6 +3752,7 @@ }, { "name": "套图之家 - 圖片", + "author": "skofkyo", "example": "https://taotuhome.com/19377.html", "url": "^https?://taotuhome\\.com/", "nextLink": "span.current+a", @@ -3466,6 +3764,7 @@ }, { "name": "套图之家 - 分類", + "author": "skofkyo", "example": "https://taotuhome.com/category/xgyw/", "url": "^https?://taotuhome\\.com/", "nextLink": "span.current+a", @@ -3475,6 +3774,7 @@ }, { "name": "俊美图 - 圖片", + "author": "skofkyo", "example": "https://www.meijuntu.com/beauty/wanghongnenmo_abbyliya_wanmeishencainvshen_mistar_vol_144.html", "url": "^https?://www\\.meijuntu\\.com/", "include": ".next_picture", @@ -3488,6 +3788,7 @@ }, { "name": "看妹图", + "author": "skofkyo", "example": "https://kanmeitu1.cc/p/", "url": "^https?://kanmeitu\\d\\.cc/p/(index_\\d+.html)?", "pageElement": ".sou-con-list>ul", @@ -3495,6 +3796,7 @@ }, { "name": "俊美图 - 分類", + "author": "skofkyo", "example": "https://www.meijuntu.com/beauty/", "url": "^https?://www\\.meijuntu\\.com/", "exclude": ".next_picture", @@ -3504,6 +3806,7 @@ }, { "name": "美女图片网 - 圖片", + "author": "skofkyo", "example": "https://www.mevtu.com/xingganmm/15275.html", "url": "^https?://www\\.mevtu\\.com/", "include": ".page_imges", @@ -3518,6 +3821,7 @@ }, { "name": "美女图片网 - 分類", + "author": "skofkyo", "example": "https://www.mevtu.com/", "url": "^https?://www\\.mevtu\\.com/", "include": ".nav-links", @@ -3528,6 +3832,7 @@ }, { "name": "Pic Yailay - 圖片", + "author": "skofkyo", "example": "https://pic.yailay.com/articles/UTVKYXJDOFRFVy8zVGlINHUySk1Ldz09.html,https://nungvl.net/gallerys/87379.cg?page=1", "url": "^https?://(pic\\.yailay\\.com|nungvl\\.net)/(articles|gallerys)", "pinUrl": true, @@ -3541,6 +3846,7 @@ }, { "name": "Pic Yailay", + "author": "skofkyo", "example": "https://pic.yailay.com/?page=1", "url": "^https?://(pic\\.yailay\\.com|nungvl\\.net)/", "nextLink": ".pagination-next", @@ -3551,6 +3857,7 @@ }, { "name": "imhentai.xxx - 圖片", + "author": "skofkyo", "example": "https://imhentai.xxx/view/932112/1/", "url": "^https?://imhentai\\.xxx/view/\\d+/\\d+/", "nextLink": ".nav_next", @@ -3563,6 +3870,7 @@ }, { "name": "imhentai.xxx - 圖片清單檢視全部", + "author": "skofkyo", "example": "https://imhentai.xxx/gallery/928466/", "url": "^https?://imhentai\\.xxx/gallery/\\d+/$", "pinUrl": true, @@ -3571,6 +3879,7 @@ }, { "name": "imhentai.xxx", + "author": "skofkyo", "example": "https://imhentai.xxx/?page=1", "url": "^https?://imhentai\\.xxx/(\\?page=\\d+|search)?", "nextLink": ".page-item.active+li:not(.disabled)>a", @@ -3579,6 +3888,7 @@ }, { "name": "nhentai - 閱讀", + "author": "skofkyo", "example": "https://nhentai.net/g/422938/1/", "url": "^https?://n(ya)?hentai\\.(net|to|xxx|red)/g/\\d+/\\d+/?", "init": "let a = document.querySelector('#image-container>a');a.outerHTML=a.innerHTML;", @@ -3604,6 +3914,7 @@ }, { "name": "nhentai", + "author": "skofkyo", "example": "https://nhentai.net/", "url": "^https?://(n(ya)?hentai|cathentai)\\.(net|to|xxx|red)/(search|\\?page=|tags|artists|characters|parodies|groups)?", "nextLink": "a.next,a.current+a,a.last,span.next>a", @@ -3613,6 +3924,7 @@ }, { "name": "Simply Hentai", + "author": "skofkyo", "example": "https://www.simply-hentai.com/", "url": "^https?://www\\.simply-hentai\\.com/", "pageElement": "//div[div[article[a[div[@class='image-wrapper']/img[@data-src]]]]]", @@ -3623,6 +3935,7 @@ }, { "name": "西图阁", + "author": "skofkyo", "example": "https://www.xtg123.cc/xrall", "url": "^https?://www\\.xtg123\\.cc/([a-z]+|\\?s=)", "nextLink": "a.next", @@ -3632,6 +3945,7 @@ }, { "name": "妹妹图", + "author": "skofkyo", "example": "https://mm.tvv.tw/", "url": "^https?://mm\\.tvv\\.tw/", "action": 1, @@ -3642,6 +3956,7 @@ }, { "name": "留园酷18", + "author": "skofkyo", "example": "https://www.cool18.com/bbs/index.php?app=forum&act=cachepage&cp=tree1", "url": "^https?://www\\.cool18\\.com/bbs", "nextLink": "//a[text()='下一页']", @@ -3650,6 +3965,7 @@ }, { "name": "24tupian - 圖片原圖", + "author": "skofkyo", "example": "https://www.24tupian.org/2022/10-12/tuimo52612_1.html", "url": "^https?://www\\.24tupian\\.org/\\d+/[0-9-]+/\\w+\\.html", "init": "let a=document.querySelector('#imgshow>a');a.outerHTML=a.innerHTML;", @@ -3662,6 +3978,7 @@ }, { "name": "24tupian - 圖片清單", + "author": "skofkyo", "example": "https://www.24tupian.org/hd2/tuimo52612.html", "url": "^https?://www\\.24tupian\\.org/hd\\d+/\\w+\\.html", "nextLink": "a.on+a[href$=html]", @@ -3671,6 +3988,7 @@ }, { "name": "24tupian", + "author": "skofkyo", "example": "https://www.24tupian.org/", "url": "^https?://www\\.24tupian\\.org/(meinv|nvyou|tuimo|gaoqing|model|class|Serch)", "nextLink": "a.on+a[href$='html']", @@ -3679,6 +3997,7 @@ }, { "name": "新老友图社 - 看圖", + "author": "skofkyo", "example": "https://m.xtushe.com/photo/10377.html", "url": "^https?://m\\.xtushe\\.com/photo/\\w+\\.html", "nextLink": "li.next>a[title='下一张']", @@ -3690,6 +4009,7 @@ }, { "name": "新老友图社", + "author": "skofkyo", "example": "https://m.xtushe.com/catalog/xinggan.html", "url": "^https?://m\\.xtushe\\.com/", "nextLink": "li.next>a[title='下一页']", @@ -3699,6 +4019,7 @@ }, { "name": "爱看图吧 - 看圖", + "author": "skofkyo", "example": "https://www.9iktb.com/gallery/46215", "url": "^https?://www\\.9iktb\\.com/gallery/", "nextLink": "li.active+li>a", @@ -3710,6 +4031,7 @@ }, { "name": "爱看图吧", + "author": "skofkyo", "example": "https://www.9iktb.com/galleryList/", "url": "^https?://www\\.9iktb\\.com/(galleryList|search)", "nextLink": "a[aria-label='Next']", @@ -3719,6 +4041,7 @@ }, { "name": "美女目录网 - 圖片列表模式載入原圖", + "author": "skofkyo", "example": "https://www.girldir.com/photos/aozhongmaqin_list/", "url": "^https?://[^/]+/photos/", "include": [ @@ -3735,6 +4058,7 @@ }, { "name": "美女目录网 - 圖片", + "author": "skofkyo", "example": "http://www.girldir.com/photos/lichengmin_1156859/", "url": "^https?://[^/]+/photos/", "include": "//title[contains(text(), '美女目录网')]", @@ -3749,6 +4073,7 @@ }, { "name": "美女目录网 - 分類停止自動匹配", + "author": "skofkyo", "example": "http://www.girldir.com/star/v_siwa/", "url": "^https?://[^/]+/star/", "include": "//title[contains(text(), '美女目录网')]", @@ -3756,6 +4081,7 @@ }, { "name": "3G 壁纸 - 圖片", + "author": "skofkyo", "example": "https://www.3gbizhi.com/meinv/mn1869.html", "url": "^https?://www\\.3gbizhi\\.com/meinv/\\w+\\.html", "init": "function ge(e){return document.querySelector(e)}ge('#showimg').appendChild(ge('#showpicnow'));document.querySelectorAll('#showimg>a').forEach(e=>{e.remove()})", @@ -3784,6 +4110,7 @@ }, { "name": "3G 壁纸", + "author": "skofkyo", "example": "https://www.3gbizhi.com/meinv/", "url": "^https?://www\\.3gbizhi\\.com/", "init": "document.querySelectorAll('img[alt][lazysrc]').forEach(img=>{img.src=img.getAttribute('lazysrc');img.removeAttribute('lazysrc');img.setAttribute('srcset',img.getAttribute('lazysrc2x'));img.removeAttribute('lazysrc2x');img.style='width: 100%; display: inline;'})", @@ -3796,6 +4123,7 @@ }, { "name": "nvsheng - 圖片", + "author": "skofkyo", "example": "www.nvsheng.cc,m.nvsheng.cc", "url": "^https?://(www|m)\\.nvsheng\\.cc/.+\\.html", "nextLink": ".now-page+a", @@ -3808,6 +4136,7 @@ }, { "name": "nvsheng", + "author": "skofkyo", "example": "www.nvsheng.cc,m.nvsheng.cc", "url": "^https?://(www|m)\\.nvsheng\\.cc/(meizi|weibo|mx|cos|search)/", "nextLink": "a[title='›']", @@ -3817,6 +4146,7 @@ }, { "name": "遛无写真 - 看圖", + "author": "skofkyo", "example": "https://www.6evu.com/30131.html", "url": "^https?://www\\.6evu\\.com/\\d+\\.html", "nextLink": ".pagelist>span+a", @@ -3829,6 +4159,7 @@ }, { "name": "遛无写真", + "author": "skofkyo", "example": "https://www.6evu.com/jgmntp", "url": "^https?://www\\.6evu\\.com/", "include": ".pagination", @@ -3839,6 +4170,7 @@ }, { "name": "爱美女 - 看圖", + "author": "skofkyo", "example": "www.2meinv.com,wap.2meinv.com", "url": "^https?://(www|wap)\\.2meinv\\.com/article", "init": "function ge(e){return document.querySelector(e)}let a=ge('.hh+.pp > a');let a2=ge('.clearfix.arcmain a');if(a){a.outerHTML=a.innerHTML}else{a2.outerHTML=a2.innerHTML}", @@ -3852,6 +4184,7 @@ }, { "name": "爱美女", + "author": "skofkyo", "example": "www.2meinv.com,wap.2meinv.com", "url": "^https?://(www|wap)\\.2meinv\\.com/(search|tags|index)?", "exclude": ".title,h1>span", @@ -3861,6 +4194,7 @@ }, { "name": "娱乐吧 - 圖片", + "author": "skofkyo", "example": "www.yuleba.org,m.yuleba.org", "url": "^https?://(www|m)\\.yuleba\\.org/a/", "nextLink": "//div[@class='paging']/a[text()='下一页']", @@ -3872,6 +4206,7 @@ }, { "name": "娱乐吧", + "author": "skofkyo", "example": "www.yuleba.org,m.yuleba.org", "url": "^https?://(www|m)\\.yuleba\\.org/b/", "nextLink": "//div[@class='paging']/a[text()='下一页']", @@ -3880,6 +4215,7 @@ }, { "name": "新闻吧 - xinwenba.net", + "author": "skofkyo", "example": "www.xinwenba.net,m.xinwenba.net", "url": "^https?://(www|m)\\.xinwenba\\.net/plus/view", "nextLink": "//a[text()='下一页']", @@ -3891,6 +4227,7 @@ }, { "name": "新闻吧 - xinwenba.net", + "author": "skofkyo", "example": "www.xinwenba.net,m.xinwenba.net", "url": "^https?://(www|m)\\.xinwenba\\.net/plus/list", "nextLink": "//a[text()='下一页']", @@ -3899,6 +4236,7 @@ }, { "name": "凸凹吧/撸女吧/女优吧/撸哥吧/欲女吧 - 圖片", + "author": "skofkyo", "example": "www.tuao.one,www.63mm.cc,www.97mm.cc,www.luge8.co,luge8.co", "url": "^https?://(www\\.)?(tuao8?|tumm|\\d+mm|luge8?)\\.[a-z]{2,3}/(post|web)/", "init": "let a=document.querySelector('img[title][original]').parentNode;a.outerHTML=a.innerHTML;", @@ -3912,6 +4250,7 @@ }, { "name": "凸凹吧/撸女吧/女优吧/撸哥吧/欲女吧 - 手機版分類", + "author": "skofkyo", "example": "www.tuao.one,www.63mm.cc,www.97mm.cc,www.luge8.co,luge8.co", "url": "^https?://(www\\.)?(tuao\\d?|tumm|\\d+mm|luge8?)\\.[a-z]{2,3}/", "include": ".pagination", @@ -3922,6 +4261,7 @@ }, { "name": "凸凹吧/撸女吧/女优吧/撸哥吧/欲女吧 - 分類", + "author": "skofkyo", "example": "www.tuao.one,www.63mm.cc,www.97mm.cc,www.luge8.co,luge8.co", "url": "^https?://(www\\.)?(tuao\\d?|tumm|\\d+mm|luge8?)\\.[a-z]{2,3}/", "include": ".pagenavi", @@ -3932,6 +4272,7 @@ }, { "name": "美图录 - 看圖", + "author": "skofkyo", "example": "https://meitulu.me/item/3242.html", "url": "^https?://meitulu\\.me/item/\\d+\\.html", "nextLink": "//a[text()='下一页']", @@ -3943,6 +4284,7 @@ }, { "name": "美图录 - 分類", + "author": "skofkyo", "example": "https://meitulu.me/t/nvshen/", "url": "^https?://meitulu\\.me/(t|xihuan|rihan|gangtai|guochan|search)", "nextLink": "//a[text()='下一页']", @@ -3951,6 +4293,7 @@ }, { "name": "胴体的诱惑", + "author": "skofkyo", "example": "https://dongti.blog.2nt.com/", "url": "^https?://dongti\\.blog\\.2nt\\.com/", "action": 1, @@ -3960,6 +4303,7 @@ }, { "name": "胴体的秘密 - 看圖", + "author": "skofkyo", "example": "https://dongti2022.com/751999.html", "url": "^https?://dongti[^/]+/", "include": [ @@ -3971,6 +4315,7 @@ }, { "name": "胴体的秘密 - 標籤", + "author": "skofkyo", "example": "https://dongti2022.com/tag/%e6%a1%9c%e4%ba%95%e5%ae%81%e5%ae%81", "url": "^https?://dongti[^/]+/tag/", "nextLink": "li.active+li>a", @@ -3980,6 +4325,7 @@ }, { "name": "胴体的秘密", + "author": "skofkyo", "example": "https://dongtidemimi.org/", "url": "^https?://dongti[^/]+/(category|\\?s=)", "nextLink": "a.next", @@ -3989,6 +4335,7 @@ }, { "name": "MEITU131 - 手機版看圖", + "author": "skofkyo", "example": "https://m.meitu131.com/meinv/8140/", "url": "^https?://m\\.meitu131\\.com/", "include": ".uk-article", @@ -4002,6 +4349,7 @@ }, { "name": "MEITU131 手機版", + "author": "skofkyo", "example": "https://m.meitu131.com/meinv/", "url": "^https?://m\\.meitu131\\.com/", "exclude": ".uk-article", @@ -4012,6 +4360,7 @@ }, { "name": "MEITU131 - 看圖", + "author": "skofkyo", "example": "https://www.meitu131.net/meinv/7672/", "url": "^https?://www\\.meitu131\\.net/meinv/\\d+", "init": "document.querySelectorAll('p>a').forEach(e=>{e.outerHTML=e.innerHTML})", @@ -4024,6 +4373,7 @@ }, { "name": "MEITU131", + "author": "skofkyo", "example": "https://www.meitu131.net/rank/dalu/", "url": "^https?://www\\.meitu131\\.net/(e/search|rank|meinv|shouji|sucai|nvshen|hot)/([a-z]+)?", "exclude": "h1", @@ -4035,6 +4385,7 @@ }, { "name": "亿图全景图库 - 手機版看圖", + "author": "skofkyo", "example": "https://m.yeitu.com/meinv/xinggan/20221205_32251.html", "url": "^https?://m\\.yeitu\\.com/", "include": ".uk-article", @@ -4048,6 +4399,7 @@ }, { "name": "亿图全景图库手機版", + "author": "skofkyo", "example": "https://m.yeitu.com/meinv/xinggan/", "url": "^https?://m.yeitu.com/", "include": ".uk-pagination", @@ -4058,6 +4410,7 @@ }, { "name": "亿图全景图库 - 看圖", + "author": "skofkyo", "example": "https://www.yeitu.com/meinv/xinggan/20220725_31887.html", "url": "^https?://www\\.yeitu\\.com/", "include": ".img_content", @@ -4071,6 +4424,7 @@ }, { "name": "亿图全景图库", + "author": "skofkyo", "example": "https://www.yeitu.com/meinv/xinggan/", "url": "^https?://www\\.yeitu\\.com/", "include": "#pages", @@ -4082,6 +4436,7 @@ }, { "name": "Make Girls", + "author": "skofkyo", "example": "https://asdcosplay.com/category/collections/djawa/", "url": "^https?://asdcosplay\\.com/(\\?s=|category)?", "nextLink": "a.next", @@ -4091,6 +4446,7 @@ }, { "name": "Asian Girls", + "author": "skofkyo", "example": "https://allasiangirls.net/category/free-content/", "url": "^https?://allasiangirls\\.net/(category|\\?s=)", "nextLink": "a.next", @@ -4102,6 +4458,7 @@ }, { "name": "Yellow Fever", + "author": "skofkyo", "example": "https://yellowfever18.com/chinese/", "url": "^https?://yellowfever18\\.com/(tag|chinese|korean|japanese|\\?s=)", "nextLink": "a.next", @@ -4112,6 +4469,7 @@ }, { "name": "ASD ASFD CN", + "author": "skofkyo", "example": "https://asdasfd.net/", "url": "^https?://asdasfd\\.net/(category|\\?s=)", "nextLink": "//a[text()='Older posts']", @@ -4121,6 +4479,7 @@ }, { "name": "NudeBird", + "author": "skofkyo", "example": "https://nudebird.biz/", "url": "^https?://nudebird\\.biz/(tag|category|\\?s=)?", "nextLink": "li.current+li>a", @@ -4130,6 +4489,7 @@ }, { "name": "NUDECOSPLAY - 圖片", + "author": "skofkyo", "example": "https://nudecosplaygirls.com/%e4%b9%a0%e5%91%86%e5%91%86-%e5%88%bb%e6%99%b4/", "url": "^https?://nudecosplaygirls\\.com/", "include": [ @@ -4141,6 +4501,7 @@ }, { "name": "NUDECOSPLAY - 圖片", + "author": "skofkyo", "example": "https://nudecosplaygirls.com/haneame-summer/", "url": "^https?://nudecosplaygirls\\.com/", "include": [ @@ -4153,6 +4514,7 @@ }, { "name": "NUDECOSPLAY", + "author": "skofkyo", "example": "https://nudecosplaygirls.com/", "url": "^https?://nudecosplaygirls\\.com/(category)?", "nextLink": "a.next", @@ -4162,6 +4524,7 @@ }, { "name": "Nlegs - 預覽圖清單", + "author": "skofkyo", "example": "https://www.nlegs.com/girls/2022/10/01/28219.html", "url": "^https?://www\\.nlegs\\.com/girls/[^.]+\\.html", "nextLink": "li.active+li>a", @@ -4174,6 +4537,7 @@ }, { "name": "Nlegs", + "author": "skofkyo", "example": "https://www.nlegs.com/", "url": "^https?://www\\.nlegs\\.com/", "nextLink": "li.active+li>a", @@ -4183,6 +4547,7 @@ }, { "name": "Mitaku - 看圖", + "author": "skofkyo", "enable": 0, "example": "https://mitaku.net/ero-cosplay/byoru-riamu-yumemi-nekomini/", "url": "^https?://mitaku\\.net/", @@ -4191,6 +4556,7 @@ }, { "name": "Mitaku", + "author": "skofkyo", "example": "https://mitaku.net/", "url": "^https?://mitaku\\.net/", "nextLink": ".current+a", @@ -4201,6 +4567,7 @@ }, { "name": "idol.gravureprincess.date", + "author": "skofkyo", "example": "http://idol.gravureprincess.date/", "url": "^https?://idol\\.gravureprincess\\.date/", "pinUrl": true, @@ -4212,6 +4579,7 @@ }, { "name": "NongMo.Zone", + "author": "skofkyo", "example": "http://www.ilovexs.com/", "url": "^https?://www\\.ilovexs\\.com/(category)?", "nextLink": ".nav-next>a", @@ -4224,6 +4592,7 @@ }, { "name": "CoserBOX - 分類", + "author": "skofkyo", "example": "https://coserbox.org/rootcategory/62b6e84d412f63180e09d1a0,https://picacg.org/rootcategory/62fd110a5a40959e2fed9352", "url": "^https?://[^/]+/(rootcategory|category|search)", "include": "//img[contains(@alt,'CoserBOX')]", @@ -4234,6 +4603,7 @@ }, { "name": "CoserBOX - 首頁", + "author": "skofkyo", "enable": 0, "example": "https://acg.coserbox.net/,https://coserbox.org/,https://picacg.org/,https://loli.pub/", "url": "^https?://[^/]+/$", @@ -4242,6 +4612,7 @@ }, { "name": "Cosplaytele - 分類", + "author": "skofkyo", "example": "https://cosplaytele.com/", "url": "^https?://cosplaytele\\.com/", "action": 1, @@ -4252,6 +4623,7 @@ }, { "name": "4KHD - 圖片", + "author": "skofkyo", "example": "https://www.4khd.com/2023/01/15/puremedia-vol210-seer.html", "url": "^https?://www\\.4khd\\.com/[^.]+\\.html", "action": 1, @@ -4266,6 +4638,7 @@ }, { "name": "4KHD - 分類", + "author": "skofkyo", "example": "https://www.4khd.com/", "url": "^https?://www\\.4khd\\.com/", "nextLink": "span.current+a", @@ -4275,6 +4648,7 @@ }, { "name": "4KUP - 分類", + "author": "skofkyo", "example": "https://www.4kup.net/", "url": "^https?://www\\.4kup\\.net/", "include": "#pagination", @@ -4285,6 +4659,7 @@ }, { "name": "Goddess247", + "author": "skofkyo", "example": "https://goddess247.com/", "url": "^https?://goddess247\\.com/", "nextLink": "a.next", @@ -4294,6 +4669,7 @@ }, { "name": "Popular JAV", + "author": "skofkyo", "example": "https://javme.net/", "url": "^https?://javme\\.net/", "nextLink": ".pagination-next", @@ -4303,6 +4679,7 @@ }, { "name": "Buon Dua - 看圖", + "author": "skofkyo", "example": "https://buondua.com/saint-photolife-%E2%80%93-zzyuri-%EC%AE%B8%EB%A6%AC-blueming-part-2-57-photos-27769", "url": "^https?://buondua\\.com/", "init": "document.querySelectorAll('.article-fulltext>*:not(p)').forEach(e=>{e.remove()});", @@ -4316,6 +4693,7 @@ }, { "name": "Buon Dua - 分類", + "author": "skofkyo", "example": "https://buondua.com/", "url": "^https?://buondua\\.com/", "nextLink": ".pagination-next", @@ -4328,6 +4706,7 @@ }, { "name": "BAOBUA.COM - 看圖", + "author": "skofkyo", "example": "https://www.baobua.com/post/d00yYmh4WFNoZERNdFd5Q1QwNHhrNmZPZlMzUUI5UUo3OFVDRm5jWG11OFZ6aDJaeXpHdGh0Sm5sU0s4WjF5aXVIR0pLTTJvb0h3SDdlM1NSR0JxSHc9PQ==", "url": "^https?://www\\.baobua\\.com/post/", "nextLink": ".current+a,.current+.dots+a", @@ -4341,6 +4720,7 @@ }, { "name": "BAOBUA.COM - 搜索", + "author": "skofkyo", "example": "https://www.baobua.com/?cat=Tm1ydGlaZ1A2YWM3a3BvYWh6L3dIdz09", "url": "^https?://www\\.baobua\\.com/\\?cat=", "action": 1, @@ -4357,6 +4737,7 @@ }, { "name": "BAOBUA.COM - 影片分類", + "author": "skofkyo", "example": "https://www.baobua.com/video/index.html", "url": "^https?://www\\.baobua\\.com/video/index\\.html", "action": 1, @@ -4373,6 +4754,7 @@ }, { "name": "BAOBUA.COM - 圖片分類", + "author": "skofkyo", "example": "https://www.baobua.com/?page=1", "url": "^https?://www\\.baobua\\.com/\\?page=", "action": 1, @@ -4388,6 +4770,7 @@ }, { "name": "BaoBua.Com - 看圖", + "author": "skofkyo", "example": "https://blog.baobua.com/mlem/6350798069264574102~rogle-song-hana-%EC%86%A1%ED%95%98%EB%82%98-leggings", "url": "^https?://(blog|fb)\\.baobua\\.com/", "include": "img[data-original]", @@ -4396,6 +4779,7 @@ }, { "name": "BaoBua.Com - 搜索", + "author": "skofkyo", "example": "https://blog.baobua.com/mlem?cat=korean", "url": "^https?://blog\\.baobua\\.com/mlem\\?cat=", "include": ".pagination-custom", @@ -4413,6 +4797,7 @@ }, { "name": "BaoBua.Com - 分類", + "author": "skofkyo", "example": "https://blog.baobua.com/mlem", "url": "^https?://blog\\.baobua\\.com/mlem(\\?&page=(\\d+))?$", "include": ".pagination-custom", @@ -4430,6 +4815,7 @@ }, { "name": "HOTGIRLchina - 看圖", + "author": "skofkyo", "example": "https://hotgirlchina.com/xiuren-no-5261-zhu-ke-er-%e6%9c%b1%e5%8f%af%e5%84%bfflora-115-photos/", "url": "^https?://hotgirlchina\\.com/.+photos/", "nextLink": ".nextpostslink", @@ -4442,6 +4828,7 @@ }, { "name": "HOTGIRLchina - 搜索 - 修正頁碼錯誤", + "author": "skofkyo", "example": "https://hotgirlchina.com/?s=XIUREN", "url": "^https?://hotgirlchina\\.com/(page/(\\d+)/)?\\?s=", "init": "setTimeout(()=>{document.querySelectorAll('.wp-pagenavi a').forEach(a=>{a.href=a.href.replace(/\\/$/,'')})},1000)", @@ -4458,6 +4845,7 @@ }, { "name": "HOTGIRLchina - 分類", + "author": "skofkyo", "example": "https://hotgirlchina.com/tag/xiuren/", "url": "^https?://hotgirlchina\\.com/tag/", "nextLink": ".nextpostslink", @@ -4468,6 +4856,7 @@ }, { "name": "BeautyLeg - 圖片", + "author": "skofkyo", "example": "http://www.beautyleg6.com/xingganmeinv/201406/133.html", "url": "^https?://www.beautyleg\\d+\\.com/.+\\.html", "init": "function gae(e){return document.querySelectorAll(e)}let imgs=gae('.contents img');let _img='';for(let i=0;ia", @@ -4518,6 +4911,7 @@ }, { "name": "MM131美女图片手機版 - 看圖", + "author": "skofkyo", "example": "https://m.mmm131.com/xinggan/5761.html", "url": "^https?://m\\.mmm131\\.com/.+\\html$", "init": "let a=document.querySelector('.post-content>a');a.outerHTML=a.innerHTML;", @@ -4531,6 +4925,7 @@ }, { "name": "MM131美女图片手機版 - 分類", + "author": "skofkyo", "example": "https://m.mmm131.com/xinggan/", "url": "^https?://m\\.mmm131\\.com/", "include": "#listm", @@ -4544,6 +4939,7 @@ }, { "name": "MM131美女图片手機版 - 首頁", + "author": "skofkyo", "example": "https://m.mmm131.com/", "url": "^https?://m\\.mmm131\\.com/$", "css": ".bannert_ios,.bannerb_ios,.tips{display:none!important}", @@ -4551,6 +4947,7 @@ }, { "name": "MM131美女图片 - 看圖", + "author": "skofkyo", "example": "https://www.mmm131.com/xinggan/5774.html", "url": "^https?://www\\.mmm131\\.com/.+\\html$", "init": "let a=document.querySelector('.content-pic>a');a.outerHTML=a.innerHTML;", @@ -4564,6 +4961,7 @@ }, { "name": "MM131美女图片 - 列表", + "author": "skofkyo", "example": "https://www.mmm131.com/xinggan/", "url": "^https?://www\\.mmm131\\.com/", "nextLink": "//a[text()='下一页']", @@ -4573,6 +4971,7 @@ }, { "name": "Nsfwp", + "author": "skofkyo", "example": "https://nsfwx.pics/", "url": "^https?://nsfwx\\.pics/", "nextLink": "a.next", @@ -4583,6 +4982,7 @@ }, { "name": "推图网 - 展開全圖", + "author": "skofkyo", "example": "https://m.tuiimg.com/meinv/2653/", "url": "^https?://(www|m)\\.tuiimg\\.com/meinv/\\d+/", "init": "goshowall()", @@ -4590,12 +4990,14 @@ }, { "name": "推图网 - 手機版 - 查看更多", + "author": "skofkyo", "example": "https://m.tuiimg.com/", "url": "^https?://m\\.tuiimg\\.com/$", "nextLinkByJs": "showmore()" }, { "name": "推图网 - 手機版", + "author": "skofkyo", "example": "https://m.tuiimg.com/meinv/", "url": "^https?://m\\.tuiimg\\.com/", "nextLink": ".now+a", @@ -4606,6 +5008,7 @@ }, { "name": "推图网", + "author": "skofkyo", "example": "https://www.tuiimg.com/meinv/", "url": "^https?://www\\.tuiimg\\.com/", "nextLink": "em+a", @@ -4615,6 +5018,7 @@ }, { "name": "Mrcong - 看圖", + "author": "skofkyo", "enable": 0, "example": "https://mrcong.com/xiaoyu-vol-831-yang-chen-chen-yome-74-anh/", "url": "^https?://mrcong\\.com/", @@ -4628,6 +5032,7 @@ }, { "name": "Mrcong", + "author": "skofkyo", "example": "https://mrcong.com/", "url": "^https?://mrcong\\.com/(page/\\d+/)?", "nextLink": ".current+a", @@ -4638,6 +5043,7 @@ }, { "name": "宅男女神 - 看圖", + "author": "skofkyo", "example": "www.gnvshen.com,www.fnvshen.com", "url": "^https?://www\\.(gnvshen|fnvshen|)\\.com/g/", "nextLink": "#pages>span +a:not(.a1), a.cur+a", @@ -4650,6 +5056,7 @@ }, { "name": "宅男女神", + "author": "skofkyo", "example": "www.gnvshen.com,www.fnvshen.com", "url": "^https?://www\\.(gnvshen|fnvshen)\\.com/(gallery|tag)/", "nextLink": "a.cur+a", @@ -4659,6 +5066,7 @@ }, { "name": "爱女神 - 看圖", + "author": "skofkyo", "example": "https://www.99nvshen.com/gallery/15123", "url": "^https?://www\\.99nvshen\\.com/(gallery|galleryImg)/\\d+", "nextLink": ".pagination-box li.active+li>a", @@ -4672,6 +5080,7 @@ }, { "name": "爱女神", + "author": "skofkyo", "example": "https://www.99nvshen.com/galleryList/", "url": "^https?://www\\.99nvshen\\.com/(articles|galleryList|modelList|paihang)", "nextLink": ".pagination-box li.active+li>a", @@ -4681,6 +5090,7 @@ }, { "name": "Sexyxbody - 看圖", + "author": "skofkyo", "example": "https://cn.sexyxbody.com/sexy_article/i103swym3j/", "url": "^https?://cn\\.sexyxbody\\.com/sexy_article", "nextLink": "//a[text()='下一页»']", @@ -4692,6 +5102,7 @@ }, { "name": "Sexyxbody", + "author": "skofkyo", "example": "https://cn.sexyxbody.com/zone_detail/ouz5i1j", "url": "^https?://cn\\.sexyxbody\\.com/(zone_detail|tag_list|tag_detail)", "nextLink": "a.next", @@ -4703,6 +5114,7 @@ }, { "name": "爱看 INS", + "author": "skofkyo", "example": "https://www.ikanins.com/", "url": "^https?://www\\.ikanins\\.com/", "nextLink": "a[rel='next']", @@ -4711,6 +5123,7 @@ }, { "name": "Dmmtu 美女图 - 看圖", + "author": "skofkyo", "example": "https://www.dmmtu.com/xiezhen/25837.html", "url": "^https?://www\\.dmmtu\\.com/", "include": ".link_pages", @@ -4723,6 +5136,7 @@ }, { "name": "Dmmtu 美女图 - 分類", + "author": "skofkyo", "example": "https://www.dmmtu.com/new/", "url": "^https?://www\\.dmmtu\\.com/", "include": "#pagenavi", @@ -4733,6 +5147,7 @@ }, { "name": "jpmnb 精品美女吧 - 搜索", + "author": "skofkyo", "example": "https://www.jpmnb.net/plus/search/index.asp?keyword=XiuRen", "url": "^https?://www\\.jpmnb\\.net/plus/search/", "nextLink": "a.current+a", @@ -4742,6 +5157,7 @@ }, { "name": "jpmnb 精品美女吧 - 看圖", + "author": "skofkyo", "example": "https://www.jpmnb.net/Xrqj/XiuRen/19379.html", "url": "^https?://www\\.jpmnb\\.net/", "init": "document.querySelectorAll('p br').forEach(br=>{br.remove()})", @@ -4754,6 +5170,7 @@ }, { "name": "jpmnb 精品美女吧 - 分類", + "author": "skofkyo", "example": "https://www.jpmnb.net/Xrqj/XiuRen/", "url": "^https?://www\\.jpmnb\\.net/", "nextLink": "//a[text()='下一页']", @@ -4763,6 +5180,7 @@ }, { "name": "MM 范 - 圖片", + "author": "skofkyo", "example": "https://www.95mm.tv/65309.html", "url": "^https?://www\\.95mm\\.\\w+/\\w+\\.html", "init": "let a=document.querySelector('.post a');a.outerHTML=a.innerHTML;", @@ -4791,6 +5209,7 @@ }, { "name": "MM 范", + "author": "skofkyo", "example": "https://www.95mm.org/qingchun", "url": "^https?://www\\.95mm\\.org/(qingchun|sifang|xinggan|tag)?", "include": ".dposts-ajax-load", @@ -4798,6 +5217,7 @@ }, { "name": "Everia.club", + "author": "skofkyo", "example": "https://everia.club/category/gravure/", "url": "^https?://everia\\.club/category", "nextLink": ".next", @@ -4807,6 +5227,7 @@ }, { "name": "Xiuren 秀人网", + "author": "skofkyo", "example": "http://www.xiuren.org/category/TuiGirl.html", "url": "^https?://www\\.xiuren\\.org/", "include": "#page", @@ -4818,6 +5239,7 @@ }, { "name": "套圖吧手機版", + "author": "skofkyo", "example": "https://m.taotu8.xyz/", "url": "^https?://m\\.taotu8\\.(top|com|xyz)/", "include": "#morepic", @@ -4826,6 +5248,7 @@ }, { "name": "套圖吧 - 看圖", + "author": "skofkyo", "example": "https://www.taotu8.xyz/gq/meinv/xiaoyu847.html", "url": "^https?://(www|m)\\.(192[a-z+]|taotu8)\\.(top|com|xyz)/", "include": ".picmainer>h1", @@ -4847,6 +5270,7 @@ }, { "name": "套圖吧", + "author": "skofkyo", "example": "https://www.taotu8.xyz/", "url": "^https?://(www|m)\\.(192[a-z+]|taotu8)\\.(top|com|xyz)/", "include": ".page", @@ -4861,6 +5285,7 @@ }, { "name": "蕾丝猫 - 圖片", + "author": "skofkyo", "example": "https://www.lesmao.site/thread-31035-1-1.html", "url": "^https?://www\\.(lsm|lesmao|lsmpx)\\.(site|me|pro|co|com|org)/thread", "nextLink": "strong+a,a.r", @@ -4873,6 +5298,7 @@ }, { "name": "蕾丝猫", + "author": "skofkyo", "example": "https://www.lesmao.site/", "url": "^https?://www\\.(lsm|lesmao|lsmpx)\\.(site|me|pro|co|com|org)/", "nextLink": ".current+a,strong+a", @@ -4882,6 +5308,7 @@ }, { "name": "Wndfx 妹子图 - 圖片", + "author": "skofkyo", "example": "https://www.wndfx.com/gogort/zg/8364.html", "url": "^https?://www\\.wndfx\\.com/gogort/", "include": ".nav-links.page_imges", @@ -4894,6 +5321,7 @@ }, { "name": "Wndfx 妹子图", + "author": "skofkyo", "example": "https://www.wndfx.com/", "url": "^https?://www.\\wndfx\\.com/", "include": "nav.pagination", @@ -4904,6 +5332,7 @@ }, { "name": "优美图库 - 圖片", + "author": "skofkyo", "example": "https://www.umei.cc/meinvtupian/xingganmeinv/255974.htm", "url": "^https?://(www\\.)?(umeitu|umei)\\.(com|fun|cc)/", "include": ".pages", @@ -4916,6 +5345,7 @@ }, { "name": "优美图库 - 分類", + "author": "skofkyo", "example": "https://www.umei.cc/meinvtupian/xingganmeinv/", "url": "^https?://(www\\.)?(umeitu|umei)\\.(com|fun|cc)/", "include": "#pageNum", @@ -4926,6 +5356,7 @@ }, { "name": "Hentai Image - 圖片", + "author": "skofkyo", "example": "hentai-img.com,hentai-cosplays.com,porn-images-xxx.com", "url": "^https?://(.+)?(porn-images-xxx|hentai-cosplays|hentai-img)\\.com/image/", "nextLink": "//a[contains(text(),'>') or contains(text(),'next')]", @@ -4938,6 +5369,7 @@ }, { "name": "Hentai Image - 分類", + "author": "skofkyo", "example": "https://ja.porn-images-xxx.com/search/", "url": "^https?://(.+)?(porn-images-xxx|hentai-cosplays|hentai-img)\\.com/(search|recently|ranking|search-video|ranking-video)/", "nextLink": "span+a", @@ -4950,6 +5382,7 @@ }, { "name": "24fa", + "author": "skofkyo", "example": "https://www.24fa.com/n93763c49.aspx", "url": "^https?://(www\\.)?\\d{2,3}(m|w|faw|fa|aa)?\\.[a-z]{2,4}/m?n\\w+\\.aspx$", "include": "//title[contains(text(),'24FA')]", @@ -4964,6 +5397,7 @@ }, { "name": "無名網", + "author": "skofkyo", "example": "https://9wm9.info/viewforum/38", "url": "^https?://9wm9\\.info/", "nextLink": "//a[text()='Next page']", @@ -4972,6 +5406,7 @@ }, { "name": "小丑擼 輕便版", + "author": "skofkyo", "example": "https://www.jokerlutxt.top/index.php/vodtype/131.html", "url": "^https?://www\\.jokerlutxt\\.top/index\\.php/vodtype/.+\\.html", "nextLink": "//a[text()='下一页']", @@ -4980,6 +5415,7 @@ }, { "name": "小丑擼", + "author": "skofkyo", "example": "https://www.jokerlu357.cc/index.php/vodtype/121.html", "url": "^https?://www\\.jokerlu\\d+\\.cc/index\\.php/vodtype/.+\\.html", "nextLink": "//a[text()='下一页']", @@ -4989,6 +5425,7 @@ }, { "name": "亞色影庫", + "author": "skofkyo", "example": "https://www.yasetube.com/video/category/javhd", "url": "^https?://www\\.yasetube\\.com/", "action": 1, @@ -5004,6 +5441,7 @@ }, { "name": "黃色倉庫", + "author": "skofkyo", "example": "http://2364ck.cc/vodtype/15.html", "url": "^https?://[^/]+/", "include": "//title[contains(text(),'黄色仓库')]", @@ -5015,6 +5453,7 @@ }, { "name": "r18.clickme.net", + "author": "skofkyo", "example": "https://r18.clickme.net/c/new", "url": "^https?://r18\\.clickme\\.net/", "nextLink": "li.active+li>a", @@ -5023,6 +5462,7 @@ }, { "name": "fc2cm 去模糊", + "author": "skofkyo", "example": "https://fc2cm.com/?c=sensen321&nc=0", "url": "^https?://fc2cm\\.com/", "pinUrl": true, @@ -5034,6 +5474,7 @@ }, { "name": "fc2hub", + "author": "skofkyo", "example": "https://fc2hub.com/", "url": "^https?://fc2hub\\.com/", "action": 1, @@ -5043,6 +5484,7 @@ }, { "name": "PPP.Porn", + "author": "skofkyo", "example": "https://ppp.porn/", "url": "^https?://ppp\\.porn/", "nextLink": "//li[a/@class='pagination__item pagination__item--selected']/following-sibling::li[1]/a", @@ -5053,12 +5495,14 @@ }, { "name": "PPP.Porn - 首頁(載入更多 …)", + "author": "skofkyo", "example": "https://ppp.porn/", "url": "^https?://ppp\\.porn/$", "loadMore": ".btn.btn--sm" }, { "name": "YavTube", + "author": "skofkyo", "example": "https://yavtube.com/,https://r18hub.com/", "url": "^https?://(yavtube|r18hub)\\.com/", "exclude": ".model-wrapper", @@ -5069,6 +5513,7 @@ }, { "name": "magnetdl.com", + "author": "skofkyo", "example": "www.magnetdl.com", "url": "^https?://www\\.magnetdl\\.com/", "nextLink": "id('pages')/a[contains(string(),'>')]", @@ -5077,6 +5522,7 @@ }, { "name": "tokyomotion", + "author": "skofkyo", "example": "https://www.tokyomotion.net/videos", "url": "^https?://www\\.tokyomotion\\.net/(videos|albums)", "nextLink": "ul.pagination:not(.pagination-lg) li.active+li>a", @@ -5086,6 +5532,7 @@ }, { "name": "tokyomotion - 相簿原圖", + "author": "skofkyo", "example": "https://www.tokyomotion.net/photo/884869/", "url": "^https?://www\\.tokyomotion\\.net/photo", "nextLink": "//a[text()='下一步' or text()='Next']", @@ -5097,6 +5544,7 @@ }, { "name": "tokyomotion - 相簿", + "author": "skofkyo", "example": "https://www.tokyomotion.net/album/67719", "url": "^https?://www\\.tokyomotion\\.net/album/\\d+", "nextLink": "ul.pagination:not(.pagination-lg) li.active+li>a", @@ -5108,6 +5556,7 @@ }, { "name": "tokyomotion", + "author": "skofkyo", "example": "https://www.tokyomotion.net/", "url": "^https?://www\\.tokyomotion\\.net/(page=\\d+)?$", "action": 1, @@ -5119,6 +5568,7 @@ }, { "name": "7mmtv - 分類", + "author": "skofkyo", "example": "https://7mmtv.sx/zh/uncensored_random/all/index.html", "url": "^https?://7mmtv\\.sx/(zh|en|ja|ko)/[a-z]+_(random|list)/", "nextLink": "li.page-item.current+li.page-item>a", @@ -5129,6 +5579,7 @@ }, { "name": "tktube", + "author": "skofkyo", "example": "https://www.tktube.com/categories/fc2/", "url": "^https?://(www\\.)?tktube\\.com/", "nextLink": ".next>a", @@ -5138,6 +5589,7 @@ }, { "name": "RIRI TV / playav", + "author": "skofkyo", "example": "https://ri1.site/?filter=random,https://playav.tv/category/chinese-model", "url": "^https?://(ri1\\.site|playav\\.tv)/", "pinUrl": true, @@ -5152,6 +5604,7 @@ }, { "name": "JAVCT", + "author": "skofkyo", "example": "https://javct.net/uncensored", "url": "^https?://javct\\.net/", "nextLink": "li.paginator__item.paginator__item--next>a", @@ -5163,6 +5616,7 @@ }, { "name": "Jable", + "author": "skofkyo", "example": "https://jable.tv/new-release/", "url": "^https?://(jable|fs1)\\.(tv|app)/", "init": "document.querySelectorAll('#list_videos_common_videos_list_sort_list a').forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 800)')})", @@ -5174,6 +5628,7 @@ }, { "name": "javpark.net", + "author": "skofkyo", "example": "https://javpark.net/category/movie/", "url": "^https?://javpark\\.net/category/", "action": 1, @@ -5185,6 +5640,7 @@ }, { "name": "壹纳网 - 內文", + "author": "skofkyo", "example": "https://yinaw.com/23035.html", "url": "^https?://yinaw\\.com/\\d+\\.html", "nextLink": ".fenye span+a", @@ -5194,6 +5650,7 @@ }, { "name": "壹纳网 - 文章", + "author": "skofkyo", "example": "https://yinaw.com/", "url": "^https?://yinaw\\.com/", "nextLink": ".next-page>a", @@ -5203,6 +5660,7 @@ }, { "name": "mangabtt - 漫畫閱讀", + "author": "skofkyo", "example": "https://mangabtt.com/manga/transmigrating-to-the-otherworld-once-more/chapter-30-eng-li/291628", "url": "^https?://mangabtt\\.com/", "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.getAttribute('data-src')})", @@ -5213,6 +5671,7 @@ }, { "name": "klmanga - 漫畫閱讀", + "author": "skofkyo", "example": "https://klmanga.net/bsaq-i-became-a-magical-cheat-loli-witch-my-different-world-life-with-my-reincarnation-privilege-creation-magic-and-the-seed-of-magic-manga-chapter-5.html", "url": "^https?://klmanga\\.net/", "include": "option[selected]", @@ -5225,6 +5684,7 @@ }, { "name": "Rawkuma - 漫畫閱讀", + "author": "skofkyo", "example": "https://rawkuma.com/mikata-ga-yowa-sugite-hojo-mahou-ni-toushite-ita-kyuutei-mahou-shi-tsuihou-sarete-saikyou-wo-mezasu-chapter-1/", "url": "^https?://rawkuma\\.com/", "pinUrl": true, @@ -5236,6 +5696,7 @@ }, { "name": "manga1001 - 漫畫閱讀", + "author": "skofkyo", "example": "manga1001.in,manga1001.su,mangaraw.vip", "url": "^https?://(manga1001|mangaraw)\\.(in|su|vip)/chapters/", "pinUrl": true, @@ -5245,6 +5706,7 @@ }, { "name": "MANGAROW - 漫畫閱讀", + "author": "skofkyo", "url": "^https?://mangarow\\.org/chapters/", "pinUrl": true, "history": 2, @@ -5255,6 +5717,7 @@ }, { "name": "MANGA1000 - 漫畫閱讀", + "author": "skofkyo", "example": "https://manga1000.top/197/8175/", "url": "^https?://manga1000\\.top/\\d+/\\d+/", "pinUrl": true, @@ -5268,6 +5731,7 @@ }, { "name": "MANGA1000 - 分类/搜索页", + "author": "skofkyo", "example": "https://manga1000.top/", "url": "^https?://manga1000\\.top/", "include": ".pagination", @@ -5278,6 +5742,7 @@ }, { "name": "鹹濕仔日報", + "author": "skofkyo", "example": "https://jdaily18.com/view1/category/%e5%af%ab%e7%9c%9f/", "url": "^https?://jdaily18\\.com/", "nextLink": "a.next", @@ -5288,6 +5753,7 @@ }, { "name": "ACG漫画网 - 阅读", + "author": "skofkyo", "example": "https://www.acgxmh.com/h/314618.html", "url": "^https?://www\\.acgxmh\\.com/", "nextLink": "#pages span+a", @@ -5298,6 +5764,7 @@ }, { "name": "ACG漫画网 - 分类页", + "author": "skofkyo", "example": "https://www.acgxmh.com/hentai/", "url": "^https?://www\\.acgxmh\\.com/", "nextLink": ".page.bigpage span+a", @@ -5306,6 +5773,7 @@ }, { "name": "ACGN小鎮/皮皮动漫社", + "author": "skofkyo", "example": "https://www.bbsacgn.com/,https://pipidm.top/,https://www.pipidm.top/", "url": "^https?://(www\\.bbsacgn\\.com|pipidm\\.top|www\\.pipidm\\.top)/", "pageElement": ".posts-wrapper.scroll>*", @@ -5313,6 +5781,7 @@ }, { "name": "18x78", + "author": "skofkyo", "example": "https://18x78.com/", "url": "^https?://18x78\\.com/", "nextLink": "a.next", @@ -5323,6 +5792,7 @@ }, { "name": "绅士漫画 - 閱讀", + "author": "skofkyo", "example": "https://wnacg.org/photos-view-id-15403544.html", "url": "^https?://(www\\.)?(wnacg|htcomic|ssmh\\d+)\\.[^/]+/photos-view", "include": "span.newpagelabel", @@ -5337,6 +5807,7 @@ }, { "name": "绅士漫画", + "author": "skofkyo", "example": "https://wnacg.org/albums-index-cate-9.html", "url": "^https?://(www\\.)?(wnacg|htcomic|ssmh\\d+)\\.[^/]+/(albums|search|photos-index)", "nextLink": "span.thispage+a", @@ -5346,6 +5817,7 @@ }, { "name": "松鼠症倉庫 - 閱讀", + "author": "skofkyo", "example": "https://ahri8.top/readOnline2.php?ID=97432&host_id=0", "url": "^https?://[^/]+/readOnline2\\.php", "include": "//div[@id='logo-group']//a[contains(text(),'松鼠症倉庫') or contains(text(),'松鼠症仓库')]", @@ -5357,6 +5829,7 @@ }, { "name": "松鼠症倉庫", + "author": "skofkyo", "example": "https://ahri8.top/dnew.php?t=1669824000", "url": "^https?://[^/]+/dnew\\.php", "include": "//div[@id='logo-group']//a[contains(text(),'松鼠症倉庫') or contains(text(),'松鼠症仓库')]", @@ -5368,6 +5841,7 @@ }, { "name": "绅士会所", + "author": "skofkyo", "example": "www.hentaiclub.net,www.sshs.club", "url": "^https?://www\\.(hentaiclub|sshs)\\.(net|club)/", "nextLink": "li.next-page>a", @@ -5378,12 +5852,14 @@ }, { "name": "绅士仓库 - 排行/作者墙", + "author": "skofkyo", "example": "https://cangku.icu/", "url": "^https?://cangku\\.[^/]+/(rank|author)", "loadMore": ".container .el-button:not(.is-loading)" }, { "name": "绅士仓库", + "author": "skofkyo", "example": "https://cangku.icu/", "url": "^https?://cangku\\.", "action": 1, @@ -5397,6 +5873,7 @@ }, { "name": "LoLHentai", + "author": "skofkyo", "example": "https://www.lolhentai.net/", "url": "^https?://www\\.lolhentai\\.net/", "action": 1, @@ -5408,6 +5885,7 @@ }, { "name": "The Hentai World", + "author": "skofkyo", "example": "https://thehentaiworld.com/?new", "url": "^https?://thehentaiworld\\.com/", "nextLink": "a.next, .current+.minithumb>a", @@ -5416,6 +5894,7 @@ }, { "name": "Danbooru", + "author": "skofkyo", "example": "danbooru.donmai.us,e621.net", "url": "^https?://(danbooru\\.)?(donmai|e621)\\.(us|net)/", "nextLink": "a[rel='next']", @@ -5424,6 +5903,7 @@ }, { "name": "Rule34", + "author": "skofkyo", "example": "rule34hentai.net,rule34.paheal.net", "url": "^https?://rule34(hentai|\\.paheal)\\.net/", "nextLink": "//a[text()='Next']", @@ -5432,6 +5912,7 @@ }, { "name": "Gelbooru", + "author": "skofkyo", "example": "gelbooru.com,tbib.org,safebooru.org,illusioncards.booru.org,rule34.xxx,hypnohub.net,xbooru.com", "url": "^https?://(illusioncards\\.)?(gelbooru|tbib|safebooru|booru|rule34|hypnohub|xbooru)\\.(com|org|xxx|net)/.+s=list", "nextLink": "a[alt='next']", @@ -5441,6 +5922,7 @@ }, { "name": "yande", + "author": "skofkyo", "example": "konachan.net,konachan.com,yande.re,www.sakugabooru.com", "url": "^https?://(konachan\\.net|konachan\\.com|yande\\.re|www\\.sakugabooru\\.com)/(post|comment)($|\\?|#|/search\\?)", "pageElement": "//li[contains(@class, 'creator-id-')]|//div[@id='comment-list']/div[@class='post']|//table[@class='highlightable']", @@ -5451,6 +5933,7 @@ }, { "name": "hitomi - Gallery Info", + "author": "skofkyo", "example": "https://hitomi.la/doujinshi/akisame-mabara-ni-natte-%E4%B8%AD%E6%96%87-2431684.html#1", "url": "^https?://hitomi\\.la/(cg|manga|doujinshi|gamecg)/.+\\.html#1$", "pinUrl": true, @@ -5458,6 +5941,7 @@ }, { "name": "hitomi - 分類", + "author": "skofkyo", "example": "https://hitomi.la/?page=2", "url": "^https?://hitomi\\.la/", "include": ".page-container", @@ -5477,6 +5961,7 @@ }, { "name": "Orzqwq", + "author": "skofkyo", "example": "https://orzqwq.com/manga-genre/big-breasts/", "url": "^https?://orzqwq\\.com/", "action": 1, @@ -5490,6 +5975,7 @@ }, { "name": "E-Hentai", + "author": "skofkyo", "example": "http://e-hentai.org/,https://exhentai.org/", "url": "^https?://(e-hentai|exhentai)\\.org/", "nextLink": "//table[@class='ptt']//a[string()='>'] | id('next') | id('unext')", @@ -5499,6 +5985,7 @@ }, { "name": "177 漫画/xxiav - 圖片", + "author": "skofkyo", "example": "www.177picyy.com,www.xxiav.com", "url": "^https?://www.(177picyy|177pica|xxiav).com/", "init": "let _img='';document.querySelectorAll('img[data-lazy-src]').forEach(e=>{_img+=``});document.querySelector('.single-content').innerHTML=_img;", @@ -5513,6 +6000,7 @@ }, { "name": "177 漫画/xxiav - 分類", + "author": "skofkyo", "example": "www.177picyy.com,www.xxiav.com", "url": "^https?://www.(177picyy|177pica|xxiav)\\.com/", "include": ".nav-links", @@ -5523,6 +6011,7 @@ }, { "name": "18 禁漫 - 閱讀", + "author": "skofkyo", "example": "https://www.18mh.cc/index-look-name-%E8%AB%8B%E6%BB%91%E5%85%A5%E8%A7%A3%E9%8E%96-cid-NaTcMaxcMjYO0O0O-id-619923", "url": "^https?://www\\.18mh\\.cc/index-look", "nextLink": "//div[@class='c']/a[text()='下一頁'][not(@class='n fanye')]", @@ -5536,6 +6025,7 @@ }, { "name": "18 禁漫 - 分類", + "author": "skofkyo", "example": "https://www.18mh.cc/index-html-status-2", "url": "^https?://www\\.18mh\\.cc/", "nextLink": "//a[text()='下一頁']", @@ -5546,6 +6036,7 @@ }, { "name": "禁漫天堂 - 分类页", + "author": "skofkyo", "example": "https://18comic.vip/,https://18comic.org/", "url": "^https?://18comic\\.(vip|org)/(album|search|blogs|videos|movies|promotes)", "pinUrl": true, @@ -5558,6 +6049,7 @@ }, { "name": "Hanime1 - 漫画", + "author": "skofkyo", "example": "https://hanime1.me/comic/80357/1", "url": "^https?://hanime1\\.me/comic\\/\\d+\\/\\d", "nextLink": "a.comic-show-content-nav-item-wrapper.arrow-right", @@ -5570,6 +6062,7 @@ }, { "name": "Hanime1 - 圖片清單檢視全部", + "author": "skofkyo", "example": "https://hanime1.me/comic/65225", "url": "^https?://hanime1\\.me/comic/\\d+$", "pinUrl": true, @@ -5578,6 +6071,7 @@ }, { "name": "Hanime1", + "author": "skofkyo", "example": "https://hanime1.me/search?genre=%E8%A3%8F%E7%95%AA&duration=&sort=&query=&year=&month=", "url": "^https?://hanime1\\.me/(search|comics)", "nextLink": "a[rel='next']", @@ -5588,6 +6082,7 @@ }, { "name": "Models Vibe", + "author": "skofkyo", "example": "https://www.modelsvibe.com/albums/china/", "url": "^https?://www\\.modelsvibe\\.com/albums/\\w+/", "nextLinkByUrl": [ @@ -5599,6 +6094,7 @@ }, { "name": "尤美图库", + "author": "skofkyo", "example": "https://www.umeitu.com/i/", "url": "^https?://www\\.umeitu\\.com/", "nextLink": "a.current+a", @@ -5608,6 +6104,7 @@ }, { "name": "劍心回憶", + "author": "skofkyo", "example": "https://kenshin.hk/category/jnews/photoalbum/", "url": "^https?://kenshin\\.hk/", "nextLink": "span.current+a", @@ -5616,6 +6113,7 @@ }, { "name": "芸能アイドルモデル女優水着画像集", + "author": "skofkyo", "example": "https://www.mizugigurabia.com/", "url": "^https?://www\\.mizugigurabia\\.com/", "action": 1, @@ -5627,6 +6125,7 @@ }, { "name": "免费私房图 - 看圖", + "author": "skofkyo", "example": "http://www.mfsft.com/gaoqing/photo/20221021/139363.html,http://www.ywmtw.com/yao/kantu/20240223/160249.html", "url": "^https?://[^/]+/", "include": "#ztlui3", @@ -5642,6 +6141,7 @@ }, { "name": "免费私房图 - 分類", + "author": "skofkyo", "example": "http://www.mfsft.com/gaoqing/tulie/1_1.html,http://www.ywmtw.com/yao/kantum/1_1.html", "url": "^https?://[^/]+/", "include": ".pagelist a[title='尾页']", @@ -5655,6 +6155,7 @@ }, { "name": "秀人集 / 秀人美女網 / 爱美女网 - 搜索", + "author": "skofkyo", "example": "https://www.xiurenba.cc/plus/search/index.asp?keyword=XiuRen,https://www.xrmn01.cc/plus/search/index.asp?keyword=XiuRen,http://www.imn5.net/plus/search/index.asp?keyword=XiuRen", "url": "^https?://www\\.(xiuren|xrmn|imn5)(\\w{1,2})?\\.[a-z]{2,3}/plus/search/", "nextLink": "a.current+a", @@ -5665,6 +6166,7 @@ }, { "name": "秀人集 / 秀人美女網 / 爱美女网 - 看圖", + "author": "skofkyo", "example": "https://www.xiurenba.cc/XiuRen/11496.html,https://www.xrmn01.cc/XiuRen/2022/202212158.html,http://www.imn5.net/XiuRen/XiuRen/11535.html", "url": "^https?://www\\.(xiuren|xrmn|imn5)(\\w{1,2})?\\.[a-z]{2,3}/", "init": "document.querySelectorAll('br').forEach(br=>{br.remove()})", @@ -5678,6 +6180,7 @@ }, { "name": "秀人集 / 秀人美女網 / 爱美女网 - 分類", + "author": "skofkyo", "example": "https://www.xiurenba.cc/XiuRen/,https://www.xrmn01.cc/XiuRen/,http://www.imn5.net/XiuRen/XiuRen/", "url": "^https?://www\\.(xiuren|xrmn|imn5)(\\w{1,2})?\\.[a-z]{2,3}/", "exclude": [ @@ -5691,6 +6194,7 @@ }, { "name": "秀人图集 - 分類", + "author": "skofkyo", "example": "http://xiuren0.com/", "url": "^https?://xiuren0\\.com/", "init": "let gax=x=>{let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes};gax(\"//div[div[a[img[contains(@data-src,'igusoft')]]]]\").forEach(e=>{e.remove()})", @@ -5699,6 +6203,7 @@ }, { "name": "Xiutaku - 分類", + "author": "skofkyo", "example": "https://xiutaku.com/brand/1", "url": "^https?://xiutaku\\.com/(\\w+/\\d+|\\w+)?$", "init": "document.querySelectorAll('.search-form~*,.blog~*:not([class]),.pagination~*').forEach(e=>{e.remove()});", @@ -5707,6 +6212,7 @@ }, { "name": "萝丝派 - 分類", + "author": "skofkyo", "example": "https://www.yylsp.com/", "url": "^https?://www\\.yylsp\\.com/", "pageElement": ".posts-item.card", @@ -5716,6 +6222,7 @@ }, { "name": "绅士猫 - 分類", + "author": "skofkyo", "example": "https://www.cos6.net/", "url": "^https?://www\\.cos6\\.net/", "pageElement": "posts.posts-item", @@ -5725,6 +6232,7 @@ }, { "name": "COSPLAY ZIP - 分類", + "author": "skofkyo", "example": "https://www.coszip.com/", "url": "^https?://www\\.coszip\\.com/", "pageElement": ".jeg_inner_content .jeg_block_container", @@ -5734,6 +6242,7 @@ }, { "name": "Chinese Beauties - 分類", + "author": "skofkyo", "example": "https://sxchinesegirlz.one/", "url": "^https?://sxchinesegirlz\\.one/", "nextLinkByJs": "let next=doc.querySelector('span.current+a');if(next)return next.href.replace(/\\?fbclid=\\w+/i,'');", @@ -5744,6 +6253,7 @@ }, { "name": "图宅网 - 分類", + "author": "skofkyo", "example": "https://www.tuzac.com/", "url": "^https?://www\\.tuzac\\.com/", "pageElement": ".node-teaser", @@ -5755,6 +6265,7 @@ }, { "name": "Fuskator- 分類", + "author": "skofkyo", "example": "https://fuskator.com/", "url": "^https?://fuskator\\.com/", "pageElement": ".thumblinks", @@ -5762,6 +6273,7 @@ }, { "name": "Asianude4u - 分類", + "author": "skofkyo", "example": "https://www.asianude4u.net/", "url": "^https?://www\\.asianude4u\\.net/", "action": 1, @@ -5771,6 +6283,7 @@ }, { "name": "美人图 - 看圖", + "author": "skofkyo", "example": "https://meirentu.cc/pic/147617207297.html", "url": "^https?://meirentu\\.cc/pic/", "include": ".item_info", @@ -5784,6 +6297,7 @@ }, { "name": "美人图 - 分類", + "author": "skofkyo", "example": "https://meirentu.cc/group/xiuren.html", "url": "^https?://meirentu\\.cc/", "include": ".fl_title", @@ -5797,6 +6311,7 @@ }, { "name": "NEXE channels/models", + "author": "skofkyo", "example": "https://nehen.xyz/models", "url": "^https?://[^/]+/(models|channels)", "pinUrl": true, @@ -5809,6 +6324,7 @@ }, { "name": "NEXE", + "author": "skofkyo", "example": "https://nehen.xyz/", "url": "^https?://[^/]+/(\\?forwarding.+|best.+|search.+|index.+|amateur.+|danmaku.*|keywords.*)?$", "pinUrl": true, @@ -5822,6 +6338,7 @@ }, { "name": "JieAV", + "author": "skofkyo", "example": "www.jieav.com,www.qinav.com,www.qinimg.com,www.yinmh.com,www.txtxi.com,www.dnaav.com,www.jiedm.com,www.tasexy.com,www.feiav.com,www.liliav.com,www.keaiav.com,www.miliav.com,www.huiav.com,www.heihd.com,www.pornff.com,www.comfff.com", "url": "^https?://(www|cn|jp|kr|ru)\\.(jieav|qinav|qinimg|yinmh|txtxi|dnaav|jiedm|tasexy|feiav|liliav|keaiav|miliav|huiav|heihd|pornff|comfff)\\.(com|xyz|top)/", "nextLink": "a.active+a", @@ -5836,6 +6353,7 @@ }, { "name": "成人色情分享論壇", + "author": "skofkyo", "example": "https://www.rouav.com/magnet/index.html", "url": "^https?://www\\.rouav\\.com/magnet", "nextLink": ".active+a", @@ -5845,6 +6363,7 @@ }, { "name": "成人色情分享論壇", + "author": "skofkyo", "example": "https://www.rouav.com/", "url": "^https?://www\\.rouav\\.com/(home)?", "nextLink": ".active+a", @@ -5855,6 +6374,7 @@ }, { "name": "CartoonPornVideos", + "author": "skofkyo", "example": "https://www.cartoonpornvideos.com/popular", "url": "^https?://www\\.cartoonpornvideos\\.com/", "nextLink": ".next", @@ -5863,6 +6383,7 @@ }, { "name": "hentai.tv", + "author": "skofkyo", "example": "https://hentai.tv/", "url": "^https?://hentai\\.tv/(trending|genre)", "nextLink": "button[data-next]", @@ -5871,6 +6392,7 @@ }, { "name": "FC2 电子市场", + "author": "skofkyo", "example": "https://adult.contents.fc2.com/search/?q=&genre=30&type=1", "url": "^https?://adult\\.contents\\.fc2\\.com/search", "nextLink": "span.items+a[data-link-name='pager']", @@ -5880,6 +6402,7 @@ }, { "name": "俺の3Dエロ動画", + "author": "skofkyo", "example": "https://oreno3d.com/", "url": "^https?://oreno3d\\.com/", "nextLink": "a[rel='next']", @@ -5889,6 +6412,7 @@ }, { "name": "Sex Nori", + "author": "skofkyo", "example": "https://www.sexnori26.me/bbs/board.php?bo_table=av_korea", "url": "^https?://www\\.sexnori(\\d+)?\\.me/", "nextLink": "a.next", @@ -5898,6 +6422,7 @@ }, { "name": "UraakaList", + "author": "skofkyo", "example": "https://uraakalist.com/", "url": "^https?://uraakalist\\.com/", "action": 1, @@ -5908,6 +6433,7 @@ }, { "name": "JavTorrent", + "author": "skofkyo", "example": "ijavtorrent.com,projectjav.com", "url": "^https?://(ijavtorrent|projectjav)\\.com/", "nextLink": "a.btn-secondary+a", @@ -5917,6 +6443,7 @@ }, { "name": "JAV Library", + "author": "skofkyo", "example": "https://www.javlibrary.com/", "url": "^https?://www\\.javlibrary\\.com/", "nextLink": "a.next", @@ -5925,6 +6452,7 @@ }, { "name": "JavBooks", + "author": "skofkyo", "example": "https://javbooks.com/,https://jmvbt.com/", "url": "^https?://(javbooks|jmvbt)\\.com/", "nextLink": "span.pageback>a", @@ -5934,6 +6462,7 @@ }, { "name": "141 JAV", + "author": "skofkyo", "example": "https://www.141jav.com/new", "url": "^https?://www\\.(141jav|141ppv)\\.com/", "nextLink": "a.pagination-next", @@ -5943,6 +6472,7 @@ }, { "name": "AV6K", + "author": "skofkyo", "example": "https://av6k.com/rihanwuma/", "url": "^https?://av6k\\.com/(rihanwuma|rihanyouma|jxny|chinese-av-porn|surenzipai|oumeiwuma|chengrendongman|plus)", "nextLink": ".thisclass+li>a,td[width='50']>a", @@ -5951,6 +6481,7 @@ }, { "name": "AV皇8影城", + "author": "skofkyo", "example": "https://www.royal888.xyz/news", "url": "^https?://www\\.royal888\\.xyz/", "nextLink": "a[rel='next']", @@ -5959,6 +6490,7 @@ }, { "name": "85TUBE", + "author": "skofkyo", "example": "https://85tube.com/latest-updates/", "url": "^https?://85tube\\.com/", "nextLink": ".next>a", @@ -5969,6 +6501,7 @@ }, { "name": "JavDove 番号鸽", + "author": "skofkyo", "example": "https://www.javdove.com/videos/uncensored", "url": "^https?://www\\.javdove\\.com/", "nextLink": ".prevnext[rel='next']", @@ -5978,6 +6511,7 @@ }, { "name": "BuzzAV - photo", + "author": "skofkyo", "example": "https://www.buzzav.com/photo/3972/", "url": "^https?://www\\.buzzav\\.com/photo/\\d+", "init": "document.querySelector('.thumb-overlay>a').removeAttribute('href');", @@ -5990,6 +6524,7 @@ }, { "name": "BuzzAV - album", + "author": "skofkyo", "example": "https://www.buzzav.com/album/260/jk", "url": "^https?://www\\.buzzav\\.com/album/\\d+", "nextLink": ".page-item.active+li>a", @@ -5999,6 +6534,7 @@ }, { "name": "BuzzAV", + "author": "skofkyo", "example": "https://www.buzzav.com/videos", "url": "^https?://www\\.buzzav\\.com/(videos|albums)", "nextLink": ".page-item.active+li>a", @@ -6008,6 +6544,7 @@ }, { "name": "JAVMOST", + "author": "skofkyo", "example": "https://www.javmost.cx/category/uncensor/", "url": "^https?://\\w+\\.javmost\\.[a-z]{2,3}/", "nextLink": ".pagination>li.active+li>a", @@ -6017,6 +6554,7 @@ }, { "name": "爱漫福利社", + "author": "skofkyo", "example": "https://jav889.xyz/", "url": "^https?://jav889\\.[^/]+/", "nextLink": "//li[span/@class='page-numbers current']/following-sibling::li[1]/a", @@ -6026,6 +6564,7 @@ }, { "name": "MOVIEFFM", + "author": "skofkyo", "example": "https://www.movieffm.net/category/hd-uncensored/", "url": "^https?://www\\.movieffm\\.net/", "nextLink": "span.current+a", @@ -6036,6 +6575,7 @@ }, { "name": "258PORN", + "author": "skofkyo", "example": "http://www.258porn.com/list/%E6%97%A5%E9%9F%93%E7%84%A1%E7%A2%BC/0.html", "url": "^https?://www\\.258porn\\.com/", "nextLink": ".next-page>a", @@ -6045,6 +6585,7 @@ }, { "name": "CCAVB", + "author": "skofkyo", "example": "https://ccavb.tv/category/%E6%9C%80%E6%96%B0%E4%B8%8A%E5%82%B3", "url": "^https?://ccavb\\.tv/", "init": "document.querySelectorAll('div.__mantine-ref-control').forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 200)')})", @@ -6059,6 +6600,7 @@ }, { "name": "Jav223", + "author": "skofkyo", "example": "https://www.jav223.com/?m=video_list*5*1", "url": "^https?://www\\.jav223\\.com/", "action": 1, @@ -6073,6 +6615,7 @@ }, { "name": "Avgle & AV01", + "author": "skofkyo", "example": "avgle.com,www.av01.tv", "url": "^https?://(www\\.)?(avgle|av01)\\.(com|tv)/", "nextLink": ".prevnext", @@ -6082,6 +6625,7 @@ }, { "name": "GGJAV", + "author": "skofkyo", "example": "https://ggjav.com/main/uncensored", "url": "^https?://ggjav\\.com/", "nextLink": ".pager>a:last-child[href]", @@ -6090,6 +6634,7 @@ }, { "name": "Porn87", + "author": "skofkyo", "example": "https://porn87.com/", "url": "^https?://porn87\\.com/", "nextLink": ".pagination-next:not(.mobile_pagination)>a", @@ -6098,6 +6643,7 @@ }, { "name": "porn78.info", + "author": "skofkyo", "example": "https://porn78.info/,https://nyaa.porn78.info/", "url": "^https?://(nyaa\\.)?porn78.info/", "action": 1, @@ -6107,6 +6653,7 @@ }, { "name": "JavDisk", + "author": "skofkyo", "example": "https://javdoe.to/,https://javfinder.li/", "url": "^https?://(javdoe|javfinder)\\.[a-z]{2,3}/", "action": 1, @@ -6116,6 +6663,7 @@ }, { "name": "Javhd.today", + "author": "skofkyo", "example": "https://javhd.today/", "url": "^https?://javhd\\.today/", "nextLink": ".pagination>li.active+li>a", @@ -6125,6 +6673,7 @@ }, { "name": "JavBus / AVMOO", + "author": "skofkyo", "example": "https://www.javbus.com/,https://avmoo.click/tw", "url": "^https?://(www\\.)?(javbus|avmoo)\\.(com|click)/", "nextLink": "#next, .pagination>.active+li>a", @@ -6135,6 +6684,7 @@ }, { "name": "JavDB", + "author": "skofkyo", "example": "https://javdb.com/", "url": "^https?://javdb\\.com/", "nextLink": "a.pagination-next", @@ -6144,6 +6694,7 @@ }, { "name": "H 次元", + "author": "skofkyo", "example": "https://h-ciyuan.com/", "url": "^https?://h-ciyuan\\.com/", "nextLink": ".next", @@ -6152,6 +6703,7 @@ }, { "name": "Avbebe", + "author": "skofkyo", "example": "https://avbebe.com/", "url": "^https?://avbebe\\.com/", "nextLink": ".next", @@ -6161,6 +6713,7 @@ }, { "name": "Hentai Anime Zone / HentaiDLs / Hentai-Hot", + "author": "skofkyo", "example": "https://hentaianimezone.com/,https://hentaidls.com/,https://hentai-hot.com/", "url": "^https?://(hentaianimezone|hentaidls|hentai-hot)\\.com/", "nextLink": ".navigation>span+a,.nav-links>span.current+a,.pagi-nav span.pnext>a", @@ -6170,6 +6723,7 @@ }, { "name": "Latino Hentai", + "author": "skofkyo", "example": "https://latinohentai.com/", "url": "^https?://latinohentai\\.com/", "nextLink": ".current+a", @@ -6178,6 +6732,7 @@ }, { "name": "ACG RW", + "author": "skofkyo", "example": "https://www.acgrw.net/category/lifan/", "url": "^https?://www\\.acgrw\\.net/", "nextLink": "a.next", @@ -6187,6 +6742,7 @@ }, { "name": "DaftSex - other", + "author": "skofkyo", "example": "https://daftsex.com/browse", "url": "^https?://daftsex\\.com/", "nextLink": "li.active+li>a", @@ -6197,12 +6753,14 @@ }, { "name": "DaftSex - 首頁", + "author": "skofkyo", "example": "https://daftsex.com/", "url": "^https?://daftsex\\.com/$", "loadMore": ".more" }, { "name": "YouJizz", + "author": "skofkyo", "example": "https://www.youjizz.com/", "url": "^https?://www\\.youjizz\\.com/", "action": 1, @@ -6214,6 +6772,7 @@ }, { "name": "EPORNER Photo", + "author": "skofkyo", "example": "https://www.eporner.com/photo/02USX1vSH4e/8/", "url": "^https?://[a-z]{2,3}\\.eporner\\.com/photo/", "init": "let img = document.querySelector('.photohref>img[alt]');img.src = img.parentNode.href;", @@ -6229,6 +6788,7 @@ }, { "name": "EPORNER", + "author": "skofkyo", "example": "https://www.eporner.com/", "url": "^https?://[a-z]{2,3}\\.eporner\\.com/", "nextLink": ".nmnext", @@ -6239,6 +6799,7 @@ }, { "name": "xHamster gallery2", + "author": "skofkyo", "example": "https://zh.xhamster.com/photos/gallery/15979608/513740284", "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/photos/gallery/", "exclude": ".gallery-list", @@ -6262,6 +6823,7 @@ }, { "name": "xHamster gallery1 在清單頁面載入大圖", + "author": "skofkyo", "example": "https://zh.xhamster.com/photos/gallery/selfie-porn-pic-134-15984561,https://zh.xhamster.com/photos/gallery/selfie-porn-pic-122-15979608", "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/photos/gallery/", "include": ".gallery-list", @@ -6283,6 +6845,7 @@ }, { "name": "xHamster photos", + "author": "skofkyo", "example": "https://zh.xhamster.com/photos", "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/photos", "nextLink": "li.next>a", @@ -6292,6 +6855,7 @@ }, { "name": "xHamster channels", + "author": "skofkyo", "example": "https://zh.xhamster.com/channels", "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/channels", "nextLink": "li.next>a", @@ -6302,6 +6866,7 @@ }, { "name": "xHamster creators", + "author": "skofkyo", "example": "https://zh.xhamster.com/creators", "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/creators", "nextLink": "li.next>a", @@ -6312,6 +6877,7 @@ }, { "name": "xHamster pornstars", + "author": "skofkyo", "example": "https://zh.xhamster.com/pornstars", "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/pornstars", "nextLink": "li.next>a", @@ -6322,6 +6888,7 @@ }, { "name": "xHamster", + "author": "skofkyo", "example": "https://zh.xhamster.com/newest", "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/", "exclude": ".fotorama__img", @@ -6332,6 +6899,7 @@ }, { "name": "色色啦", + "author": "skofkyo", "example": "https://www.seselah.com/", "url": "^https?://www\\.seselah\\.com/", "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.classList.add('loaded');e.previousElementSibling.setAttribute('srcset',e.previousElementSibling.getAttribute('data-srcset'))})", @@ -6343,6 +6911,7 @@ }, { "name": "91Porn", + "author": "skofkyo", "example": "http://91porn.com/index.php", "url": "^https?://(0118\\.)?(91porn|workarea7)\\.(com|live)/", "nextLink": "//a[text()='»']", @@ -6352,6 +6921,7 @@ }, { "name": "Thumbzilla", + "author": "skofkyo", "example": "https://www.thumbzilla.com/newest", "url": "^https?://www\\.thumbzilla\\.com/", "nextLink": ".page_next>a", @@ -6361,6 +6931,7 @@ }, { "name": "Tube8", + "author": "skofkyo", "example": "https://www.tube8.com/newest.html", "url": "^https?://[a-z]{2,3}\\.tube8\\.com/", "nextLink": "#pagination_next", @@ -6372,6 +6943,7 @@ }, { "name": "RedTube", + "author": "skofkyo", "example": "https://www.redtube.com/hot?cc=us", "url": "^https?://www\\.redtube\\.com/", "exclude": "#trending_country_section", @@ -6383,6 +6955,7 @@ }, { "name": "YouPorn", + "author": "skofkyo", "example": "https://www.youporn.com/recommended/", "url": "^https?://www\\.youporn\\.com/", "pinUrl": true, @@ -6393,6 +6966,7 @@ }, { "name": "Porned Up", + "author": "skofkyo", "example": "https://pornedup.com/", "url": "^https?://pornedup.com/pics/\\d+/[^/]+/", "nextLink": "a.control.next", @@ -6400,12 +6974,14 @@ }, { "name": "PicHunter", + "author": "skofkyo", "example": "https://www.pichunter.com/", "url": "^https?://www\\.pichunter\\.com/", "enable": 0 }, { "name": "PornHub photo", + "author": "skofkyo", "example": "https://cn.pornhub.com/photo/825175581", "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/photo/\\d+", "init": "let a=document.querySelector('.centerImage img[alt]').parentNode;a.outerHTML=a.innerHTML;", @@ -6427,6 +7003,7 @@ }, { "name": "PornHub album", + "author": "skofkyo", "example": "https://cn.pornhub.com/albums,https://cn.pornhub.com/album/10042641", "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/album", "pinUrl": true, @@ -6439,6 +7016,7 @@ }, { "name": "Pornhub", + "author": "skofkyo", "example": "https://cn.pornhub.com/", "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/", "exclude": [ @@ -6456,6 +7034,7 @@ }, { "name": "XVIDEOS", + "author": "skofkyo", "example": "https://www.xvideos.com/", "url": "^https?://www\\.(xvideos|xnxx)\\.com/", "nextLink": "//li[a/@class='active']/following-sibling::li[1]/a", @@ -6466,6 +7045,7 @@ }, { "name": "麻豆村", + "author": "skofkyo", "example": "https://madoucun.com/", "url": "^https?://madoucun\\.com/", "include": ".hl-page-wrap", @@ -6475,12 +7055,14 @@ }, { "name": "麻豆社,草麻豆", + "author": "skofkyo", "example": "https://madou.club/,https://xxxmadou.com/", "url": "^https?://(madou|xxxmadou|)\\.(club|com)/", "loadMore": ".ias_trigger>a" }, { "name": "牛C網 - 列表", + "author": "skofkyo", "example": "https://niuc.icu/sex", "url": "^https?://niuc[^/]+/(blog|sex|pornhub|apps)", "init": "document.querySelectorAll('a[data-src]').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.src}')`})", @@ -6492,6 +7074,7 @@ }, { "name": "牛C網 - 看圖", + "author": "skofkyo", "example": "https://niuc.icu/78111.html", "url": "^https?://niuc[^/]+/\\d+\\.html", "init": "document.querySelectorAll('a.js').forEach(e=>{e.outerHTML=e.innerHTML})", @@ -6505,6 +7088,7 @@ }, { "name": "牛C網 - 正文", + "author": "skofkyo", "example": "https://niuc.icu/67307.html", "url": "^https?://niuc[^/]+/\\d+\\.html", "exclude": ".page-nav", @@ -6516,6 +7100,7 @@ }, { "name": "HPJAV", + "author": "skofkyo", "example": "https://hpav.tv/ja/category/uncensored", "url": "^https?://(hpav|hpjav)\\.tv/", "init": "document.querySelectorAll('img[data-original]').forEach(img=>{img.src=img.getAttribute('data-original')})", @@ -6526,6 +7111,7 @@ }, { "name": "CableAV", + "author": "skofkyo", "example": "https://cableav.tv/playlist/lk4cv1f3j1v/", "url": "^https?://cableav\\.tv/", "nextLink": "span.current+a", @@ -6535,6 +7121,7 @@ }, { "name": "肉漫屋 - 閱讀", + "author": "skofkyo", "example": "https://rouman5.com/books/354b56da-1ab9-4909-9330-743842c5a5bf/0", "url": "^https?://rouman[0-9]{1,2}\\.[a-z]{3}/books/[^/]+/", "history": 2, @@ -6549,6 +7136,7 @@ }, { "name": "肉漫屋", + "author": "skofkyo", "example": "https://rouman5.com/books,https://rouman01.xyz/books", "url": "^https?://rouman\\d{1,2}\\.[a-z]{3}/", "include": "div[class^='pagination']", @@ -6559,6 +7147,7 @@ }, { "name": "肉視頻", + "author": "skofkyo", "example": "https://rouv01.xyz/t/%E6%8E%A2%E8%8A%B1", "url": "^https?://(rouv\\d+|rou)\\.(xyz|video)/(t|v|search)", "pinUrl": true, @@ -6570,6 +7159,7 @@ }, { "name": "jav9999", + "author": "skofkyo", "example": "https://jav9999.com/uded/1", "url": "^https?://jav9999\\.com/(1|uded|amateur|chinese|actress|wuman|search)?", "nextLink": "//a[text()='下一頁']", @@ -6579,6 +7169,7 @@ }, { "name": "onejav.com", + "author": "skofkyo", "example": "https://onejav.com/new", "url": "^https?://onejav\\.com/(new|popular|tag|actress|search)", "nextLink": "//a[text()='Next']", @@ -6588,12 +7179,14 @@ }, { "name": "onejav.com - 首頁", + "author": "skofkyo", "example": "https://onejav.com/", "url": "^https?://onejav\\.com/$", "loadMore": "#button-load-more" }, { "name": "女神社", + "author": "skofkyo", "example": "https://nshens.com/,https://inewgirl.com/", "url": "^https?://(nshens\\.com|inewgirl\\.com)/", "include": ".v-pagination", @@ -6601,6 +7194,7 @@ }, { "name": "微圖坊 - 看圖", + "author": "skofkyo", "example": "https://www.v2ph.com/album/SSA-392", "url": "^https?://(www\\.)?v2ph\\.(com|net|ovh)/album/", "nextLink": ".active.page-item+li>a", @@ -6611,6 +7205,7 @@ }, { "name": "微圖坊 - 分類", + "author": "skofkyo", "example": "https://www.v2ph.com/country/taiwan", "url": "^https?://(www\\.)?v2ph\\.(com|net|ovh)/", "nextLink": ".active.page-item+li>a", @@ -6620,6 +7215,7 @@ }, { "name": "美图乐 - 分類", + "author": "skofkyo", "example": "https://www.meitule.cc/i/", "url": "^https?://www\\.meitule\\.cc/", "pageElement": ".list-item", @@ -6628,6 +7224,7 @@ }, { "name": "極品性感美女 - 搜索", + "author": "skofkyo", "example": "https://www.xgmn01.com/plus/search/index.asp?keyword=XiuRen", "url": "^https?://[^/]+/plus/search/index\\.asp\\?keyword=", "include": "body>.container>.container+font>font>font>.list>.list>.node+.pagination", @@ -6638,6 +7235,7 @@ }, { "name": "極品性感美女 - 看圖", + "author": "skofkyo", "example": "https://www.xgmn01.com/Xiuren/Xiuren23112.html", "url": "^https?://[^/]+/\\w+/\\w+\\.html", "include": [ @@ -6657,6 +7255,7 @@ }, { "name": "極品性感美女 - 分類", + "author": "skofkyo", "example": "https://www.xgmn01.com/Xiuren/", "url": "^https?://[^/]+/\\w+/", "include": [ @@ -6671,6 +7270,7 @@ }, { "name": "Nyaa", + "author": "skofkyo", "example": "https://sukebei.nyaa.si/", "url": "^https?://(sukebei\\.)?nyaa\\.si/", "nextLink": "a[rel='next'], li.next>a", @@ -6679,6 +7279,7 @@ }, { "name": "U9A9", + "author": "skofkyo", "example": "https://u9a9.net/", "url": "^https?://u9a9\\.[a-z]{2,3}", "nextLink": "li.active+li>a", @@ -6687,6 +7288,7 @@ }, { "name": "Jerk-Off Instruction", + "author": "skofkyo", "example": "https://joi-me.com/lastnews/", "url": "^https?://joi-me\\.com", "action": "1", @@ -6700,6 +7302,7 @@ }, { "name": "Mixfemdomcc", + "author": "skofkyo", "example": "https://mixfemdomcc.com/lastnews/", "url": "^https?://mixfemdomcc.com/", "nextLink": ".nnext>a", @@ -6710,6 +7313,7 @@ }, { "name": "Femdom", + "author": "skofkyo", "example": "https://femdomup.net/lastnews/", "url": "^https?://femdomup\\.net/", "nextLink": "//a[text()='Next']", @@ -6720,6 +7324,7 @@ }, { "name": "xstarshub", + "author": "skofkyo", "example": "https://xstarshub.com/", "url": "^https?://xstarshub.com/", "nextLink": "a.next", @@ -6729,6 +7334,7 @@ }, { "name": "New Videos", + "author": "skofkyo", "example": "https://watchporn.to/latest-updates/", "url": "^https?://watchporn\\.to/", "nextLink": "//a[text()='Next']", @@ -6738,6 +7344,7 @@ }, { "name": "SpankBang", + "author": "skofkyo", "example": "https://jp.spankbang.com/trending_videos/", "url": "^https?://([a-z]{2}\\.)?spankbang\\.com/", "pinUrl": true, @@ -6749,6 +7356,7 @@ }, { "name": "MISSAV", + "author": "skofkyo", "example": "https://missav.com/fc2", "url": "^https?://missav.com/", "nextLink": "a[rel='next']", @@ -6758,6 +7366,7 @@ }, { "name": "愛污傳媒", + "author": "skofkyo", "example": "https://aiwucm.com/", "url": "aiw", "include": [ @@ -6771,6 +7380,7 @@ }, { "name": "3xchina.net", + "author": "skofkyo", "example": "https://3xchina.net/category/chinese-av/", "url": "^https?://3xchina\\.net/", "nextLink": "//a[text()='Next']", @@ -6780,6 +7390,7 @@ }, { "name": "fanxxx.net", + "author": "skofkyo", "example": "https://fanxxx.net/", "url": "^https?://fanxxx\\.net/", "nextLink": "a[rel='next']", @@ -6789,6 +7400,7 @@ }, { "name": "JAVDAY", + "author": "skofkyo", "example": "https://javday.tv/category/uncensored-leaked/", "url": "^https?://javday\\.tv/(category|search)/", "nextLink": ".layui-laypage-next", @@ -6798,6 +7410,7 @@ }, { "name": "AV RBO", + "author": "skofkyo", "example": "https://avbro.top/index.php/vod/type/id/12.html", "url": "^https?://avbro\\.top/index\\.php/vod/", "nextLink": ".page>li.active+li>a", @@ -6808,6 +7421,7 @@ }, { "name": "AVPRO - 搜索", + "author": "skofkyo", "example": "https://avpro.cc/search?keyword=%E7%BE%8E%E5%A5%B3&page_id=1", "url": "^https?://avpro\\.cc/search", "nextLinkByUrl": [ @@ -6822,6 +7436,7 @@ }, { "name": "AVPRO", + "author": "skofkyo", "example": "https://avpro.cc/videos/category/847?page_id=1", "url": "^https?://avpro\\.cc/", "nextLink": "a[title='Next Page']", @@ -6831,6 +7446,7 @@ }, { "name": "AV時間", + "author": "skofkyo", "example": "https://avtime.tv/category/28/", "url": "^https?://avtime\\.tv/", "nextLink": "//li[(span) and @class='page-item']/following-sibling::li[1]/a", @@ -6840,6 +7456,7 @@ }, { "name": "癡漢隊長", + "author": "skofkyo", "example": "https://javcaptain.com/uncensored", "url": "^https?://javcaptain\\.com/(en/|ja/|zh/|ko/)?(rank/|series/)?(censored|uncensored|western|fc2|hanime|search)", "nextLink": "a.page-link[rel='next']", @@ -6849,6 +7466,7 @@ }, { "name": "Supjav", + "author": "skofkyo", "example": "https://supjav.com/ja/category/uncensored-jav", "url": "^https?://supjav\\.com/(zh/|ja/)?(\\?s=|popular|category)", "nextLink": "li.active+li>a", @@ -6858,6 +7476,7 @@ }, { "name": "加勒逼A片網", + "author": "skofkyo", "example": "https://159i.com/video/", "url": "^https?://159i\\.com/video/((category|search)/.+/)?$", "nextLink": ".next>a", @@ -6867,6 +7486,7 @@ }, { "name": "NETFLAV3", + "author": "skofkyo", "example": "https://netflav.com/all?genre=%E6%80%A7%E6%84%9F%E7%9A%84&page=2", "url": "^https?://(www\\.)?netflav\\.com/all\\?(genre|actress)=.+(&page=\\d+)?$", "init": "let gae=e=>document.querySelectorAll(e);let ds=document.querySelectorAll(\"div[class^='genre_filter_item']\");ds.forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});let as=document.querySelectorAll('.desktop_header_root>div>a.desktop_header_item:not([href=\"/\"])');as.forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});", @@ -6884,6 +7504,7 @@ }, { "name": "NETFLAV2", + "author": "skofkyo", "example": "https://netflav.com/uncensored?genre=FC2PPV", "url": "^https?://(www\\.)?netflav\\.com/(censored|uncensored|chinese-sub|actress)\\?genre=[^&]+(&page=\\d+)?$", "init": "let gae=e=>document.querySelectorAll(e);let ds=gae(\"div[class^='genre_filter_item']\");ds.forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});let as=gae('.desktop_header_root>div>a.desktop_header_item:not([href=\"/\"])');as.forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});", @@ -6901,6 +7522,7 @@ }, { "name": "NETFLAV1", + "author": "skofkyo", "example": "https://netflav.com/uncensored", "url": "^https?://(www\\.)?netflav\\.com/(censored|uncensored|chinese-sub|actress)(\\?page=\\d+)?$", "init": "let gae=e=>document.querySelectorAll(e);let ds=gae(\"div[class^='genre_filter_item']\");ds.forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});let as=gae('.desktop_header_root>div>a.desktop_header_item:not([href=\"/\"])');as.forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});", @@ -6918,6 +7540,7 @@ }, { "name": "avple.tv - 類別", + "author": "skofkyo", "example": "https://avple.tv/tags/135/1/date", "url": "^https?://avple\\.tv/tags/\\d+/\\d+/\\w+$", "action": 1, @@ -6938,6 +7561,7 @@ }, { "name": "avple.tv - 搜索", + "author": "skofkyo", "example": "https://avple.tv/search?key=FC2PPV&page=1&sort=date", "action": 1, "url": "^https?://avple\\.tv/search\\?key=", @@ -6958,6 +7582,7 @@ }, { "name": "X5AV", + "author": "skofkyo", "example": "https://x5av.com/e/action/ListInfo/?classid=2", "url": "^https?://x5av\\.com/(e|popular)/((action|search)/)?", "pageElement": ".videos-container>*", @@ -6966,6 +7591,7 @@ }, { "name": "javbangers.com", + "author": "skofkyo", "example": "https://www.javbangers.com/latest-updates/", "url": "^https?://www\\.javbangers\\.com/", "include": ".pagination", @@ -6976,6 +7602,7 @@ }, { "name": "HOTGIRL.asia - 清單", + "author": "skofkyo", "example": "https://hotgirl.asia/genre/china/", "url": "^https?://hotgirl\\.asia/(\\?s=|genre|tag|photos|livestream|china|korea|videos)(\\/)?", "nextLink": "li.active+li>a", @@ -6984,6 +7611,7 @@ }, { "name": "HOTGIRL.asia - 寫真", + "author": "skofkyo", "example": "https://hotgirl.asia/imiss%e7%88%b1%e8%9c%9c%e7%a4%be-vol-693-lavinia%e8%82%89%e8%82%89/", "url": "^https?://hotgirl\\.asia/[^/]+/", "include": ".mx-auto", @@ -6997,6 +7625,7 @@ }, { "name": "imgasd", + "author": "skofkyo", "example": "https://imgasd.com/", "url": "^https?://imgasd\\.com", "nextLink": "a.active+a", @@ -7006,6 +7635,7 @@ }, { "name": "Taotuxp.com - 看圖", + "author": "skofkyo", "example": "https://www.taotucc.com/252555.html", "url": "^https?://www\\.taotucc\\.com/\\d+\\.html", "nextLink": ".pagelist>span+a", @@ -7018,6 +7648,7 @@ }, { "name": "Taotuxp.com - 分類", + "author": "skofkyo", "example": "https://www.taotucc.com/", "url": "^https?://www\\.taotucc\\.com/", "nextLink": "a.current+a", @@ -7027,6 +7658,7 @@ }, { "name": "超级美女图库 - 手機版看圖", + "author": "skofkyo", "example": "https://m.2avtt.com/xiuren/56166.html", "url": "^https?://m\\.[^/]+/", "include": "//title[contains(text(),'超级美女图库')]", @@ -7055,6 +7687,7 @@ }, { "name": "超级美女图库 - 手機版分類", + "author": "skofkyo", "example": "https://m.2avtt.com/xingan/", "url": "^https?://m\\.[^/]+/", "include": "//title[contains(text(),'超级美女图库')]", @@ -7065,6 +7698,7 @@ }, { "name": "超级美女图库 - 看圖", + "author": "skofkyo", "example": "https://www.2avtt.com/xingan/54985.html", "url": "^https?://[^/]+/", "include": "//title[contains(text(),'超级美女图库')]", @@ -7080,6 +7714,7 @@ }, { "name": "超级美女图库 - 分類", + "author": "skofkyo", "example": "https://www.2avtt.com/xingan/", "url": "^https?://[^/]+/", "include": "//title[contains(text(),'超级美女图库')]", @@ -7090,6 +7725,7 @@ }, { "name": "Xgirls - 看圖", + "author": "skofkyo", "example": "https://xgirlscollection.com/collection/2015", "url": "^https?://xgirlscollection\\.com/", "nextLink": "//a[i[@class='fa fa-angle-right']]", @@ -7101,6 +7737,7 @@ }, { "name": "Xgirls - 分類", + "author": "skofkyo", "example": "https://xgirlscollection.com/collections", "url": "^https?://xgirlscollection\\.com/", "nextLink": "//a[i[@class='fa fa-angle-right']]", @@ -7110,6 +7747,7 @@ }, { "name": "Porn Pics - 圖片清單載入大圖", + "author": "skofkyo", "example": "https://www.pornpics.com/galleries/brunette-asian-girl-yui-uehara-gives-a-blowjob-and-gets-fucked-by-two-knobs-29982680/", "url": "^https?://www\\.pornpics\\.com/galleries/[^/]+/", "include": "a[data-tid]", @@ -7118,6 +7756,7 @@ }, { "name": "优丝库HD - 分類", + "author": "skofkyo", "example": "https://yskhd.com/archives/category/xiuren/xiuren%e7%a7%80%e4%ba%ba%e7%bd%91?t", "url": "^https?://yskhd\\.com/", "include": ".pagination", @@ -7129,6 +7768,7 @@ }, { "name": "心动美图 - 看圖", + "author": "skofkyo", "example": "https://www.wai77.com/xiuren%e7%a7%80%e4%ba%ba%e7%bd%91-no-5566-manuela%e7%8e%9b%e9%b2%81%e5%a8%9c-%e6%b7%a1%e7%bb%bf%e7%81%b0%e8%89%b2%e4%b8%8a%e8%a1%a3%e6%90%ad%e9%85%8d%e7%99%bd%e8%89%b2%e7%9f%ad%e8%a3%99/", "url": "^https?://www\\.wai77\\.com/[^/]+/", "init": "let fimgs=document.querySelectorAll('div[data-src]');let alts=document.querySelectorAll('#lightgallery img[alt]');let _img='';for(let i=0;i`};document.querySelector('#lightgallery').innerHTML=_img;", @@ -7143,6 +7783,7 @@ }, { "name": "心动美图 - 分類", + "author": "skofkyo", "example": "https://www.wai77.com/tag/%E7%A7%80%E4%BA%BA%E7%BD%91/", "url": "^https?://www\\.wai77\\.com/(tag|category|\\?s=)", "nextLink": "span.current+a", @@ -7152,6 +7793,7 @@ }, { "name": "秀色女神 - 手機版看圖", + "author": "skofkyo", "example": "https://m.xsnvshen.co/album/39844?p=1", "url": "^https?://m\\.xsnvshen\\.[a-z]{2,3}/album/\\d+(\\?p=\\d+)?", "pinUrl": true, @@ -7169,6 +7811,7 @@ }, { "name": "秀色女神 - 分類", + "author": "skofkyo", "example": "https://www.xsnvshen.co/girl/", "url": "^https?://www\\.xsnvshen\\.[a-z]{2,3}/", "include": "#pageNum", @@ -7179,6 +7822,7 @@ }, { "name": "X成人论坛 帖子內", + "author": "skofkyo", "example": "https://xbbs.me/thread/id-620bd15362b3d.html", "url": "^https?://(tw\\.)?xbbs\\.me/thread/[^.]+\\.html", "pinUrl": true, @@ -7191,6 +7835,7 @@ }, { "name": "X成人论坛 帖子", + "author": "skofkyo", "example": "https://xbbs.me/forum/id-61fe70f2b9631.html", "url": "^https?://(tw\\.)?xbbs\\.me/forum/[^.]+\\.html", "nextLink": "a.next", @@ -7203,6 +7848,7 @@ }, { "name": "丽图·污漫画 - 閱讀", + "author": "skofkyo", "example": "https://litu100.xyz/comic/id-624428abcf548/1.html", "url": "^https?://litu100\\.xyz/comic/id-\\w+/\\d+\\.html", "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", @@ -7215,6 +7861,7 @@ }, { "name": "丽图·污漫画 - 分類", + "author": "skofkyo", "example": "https://litu100.xyz/comics.html", "url": "^https?://litu100\\.xyz/", "nextLink": "a.next", @@ -7224,6 +7871,7 @@ }, { "name": "海棠小说网 - 手机阅读", + "author": "skofkyo", "example": "https://m.haitangtxt.net/19/19363/1736943.html", "url": "^https?://m\\.haitangtxt\\.net/", "nextLink": "//a[contains(text(),'下一页') or contains(text(),'下一章')]", @@ -7233,6 +7881,7 @@ }, { "name": "海棠小说网 - 分类页", + "author": "skofkyo", "example": "https://m.haitangtxt.net/top/", "url": "^https?://m\\.haitangtxt\\.net/", "nextLink": "//a[text()='下一页' or text()='下页']", @@ -7242,6 +7891,7 @@ }, { "name": "小黃書 - 成人小說閱讀", + "author": "skofkyo", "example": "https://tw.xchina.co/fiction/id-64036d06046a5/1.html", "url": "^https?://(tw\\.)?xchina\\.co/fiction/id-\\w+/\\d+\\.html", "nextLink": "a.next", @@ -7251,6 +7901,7 @@ }, { "name": "小黃書 - 模特、小說目錄", + "author": "skofkyo", "example": "https://tw.xchina.co/fiction/id-64036d06046a5.html,https://tw.xchina.co/model/id-605849cd980ad.html", "url": "^https?://(tw\\.)?xchina\\.co/(fiction|model)/id-\\w+\\.html", "pinUrl": true, @@ -7259,6 +7910,7 @@ }, { "name": "小黃書 - 搜索", + "author": "skofkyo", "example": "https://tw.xchina.co/search/keyword-%E4%B8%9D%E8%A2%9C/mode-photo.html", "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/search/", "init": "let bs = document.querySelector('body[style]');if(bs)bs.removeAttribute('style');", @@ -7273,6 +7925,7 @@ }, { "name": "小黃書 - 原圖瀏覽", + "author": "skofkyo", "example": "https://tw.xchina.co/photoShow.php?server=1&id=6311c6080f9a5&index=0&pageSize=19&title=%E3%80%90%E6%9C%AA%E5%88%86%E9%A1%9E%E4%BA%BA%E9%AB%94%E6%94%9D%E5%BD%B1%E3%80%91%E9%87%91%E9%AD%9Akinngyo%E3%80%8A%E5%A4%8F%E6%97%A5%E5%8D%88%E5%BE%8C%E3%80%8B", "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/photoShow\\.php", "action": 1, @@ -7286,6 +7939,7 @@ }, { "name": "小黃書 - 圖片清單", + "author": "skofkyo", "example": "https://tw.xchina.co/photo/id-63d02a8cdaf75.html,https://8se.me/photo/id-63938c1972fde.html", "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/photo/", "include": "img.cr_only", @@ -7307,6 +7961,7 @@ }, { "name": "小黃書 - 分類", + "author": "skofkyo", "example": "https://tw.xchina.co/photos/kind-2.html,https://8se.me/photos/model-61be1af337a19.html", "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/(photos|videos|models|fictions|torrents)", "exclude": "body>.image", @@ -7323,6 +7978,7 @@ }, { "name": "hitxhot - 寫真", + "author": "skofkyo", "example": "https://www.hitxhot.org/gallerys/TUNPcCtCSVhEMXNPZU52TWI2ZnB2Zz09.html", "url": "^https?://www\\.hitxhot\\.org/gallerys/", "action": 1, @@ -7336,6 +7992,7 @@ }, { "name": "hitxhot - 清單", + "author": "skofkyo", "example": "https://www.hitxhot.org/", "url": "^https?://www\\.hitxhot\\.org/(\\?page=\\d+)?$", "include": ".pag>.pagination-site", @@ -7346,6 +8003,7 @@ }, { "name": "女神研究所", + "author": "skofkyo", "example": "https://www.simracingzone.net/", "url": "^https?://www\\.simracingzone\\.net/", "nextLink": "span.current+a", @@ -7355,6 +8013,7 @@ }, { "name": "秘图社", + "author": "skofkyo", "example": "https://www.sssins.com/,https://www.nicesss.com/", "url": "^https?://www\\.(sssins|nicesss)\\.com/", "nextLink": "//li[span[@aria-current='page']]/following-sibling::li[1]/a", @@ -7364,6 +8023,7 @@ }, { "name": "YINGPIAN影片社", + "author": "skofkyo", "example": "https://yingpian89.com/", "url": "^https?://(yingpian89|69avfilm).com/", "nextLink": "a[rel='next'],.nav-previous>a", @@ -7375,6 +8035,7 @@ }, { "name": "國模網", + "author": "skofkyo", "example": "https://gm23.xyz/", "url": "^https?://gm\\d+\\.xyz/", "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.dataset.src})", @@ -7385,6 +8046,7 @@ }, { "name": "性趣套圖 - 搜索", + "author": "skofkyo", "example": "https://myjkwd.com/e/search/result/?searchid=7898", "url": "^https?://myjkwd\\.com/e/search/", "nextLink": "//a[text()='下一页']", @@ -7395,6 +8057,7 @@ }, { "name": "性趣套圖 - 看圖", + "author": "skofkyo", "example": "https://myjkwd.com/e/action/ShowInfo.php?classid=1&id=23726", "url": "^https?://myjkwd\\.com/e/action/ShowInfo\\.php", "pinUrl": true, @@ -7408,6 +8071,7 @@ }, { "name": "性趣套圖 - 列表", + "author": "skofkyo", "example": "https://myjkwd.com/e/action/ListInfo/?classid=1", "url": "^https?://myjkwd.com/e/action/ListInfo", "nextLink": "//a[text()='下一页']", @@ -7419,6 +8083,7 @@ }, { "name": "雅拉伊", + "author": "skofkyo", "example": "https://www.yalayi.com/gallery/", "url": "^https?://www\\.yalayi\\.com/", "action": 1, @@ -7429,6 +8094,7 @@ }, { "name": "Bookshop.tw", + "author": "skofkyo", "example": "https://www.bookshop.tw/", "url": "^https?://www\\.bookshop\\.tw", "action": 1, @@ -7442,6 +8108,7 @@ }, { "name": "Mox.moe", + "author": "skofkyo", "example": "https://mox.moe/", "url": "^https?://mox\\.moe", "action": 1, @@ -7452,6 +8119,7 @@ }, { "name": "BOOK☆WALKER TW 更多", + "author": "skofkyo", "example": "https://www.bookwalker.com.tw/block/1", "url": "^https?://www\\.bookwalker\\.com\\.tw/", "nextLink": "//li[span/@class='active']/following-sibling::li[1]/a", @@ -7463,6 +8131,7 @@ }, { "name": "BOOK☆WALKER TW", + "author": "skofkyo", "example": "https://www.bookwalker.com.tw/search?m=2&series_display=1&vertical=0&order=sell_desc&s=19", "url": "^https?://www\\.bookwalker\\.com\\.tw/search", "nextLink": "//li[span/@class='active']/following-sibling::li[1]/a", @@ -7474,6 +8143,7 @@ }, { "name": "BOOK☆WALKER JP - 手機版", + "author": "skofkyo", "example": "https://bookwalker.jp/new/?qsto=st2", "url": "^https?://bookwalker\\.jp/(category|search|new)/", "include": ".o-pager-box", @@ -7485,6 +8155,7 @@ }, { "name": "BOOK☆WALKER JP", + "author": "skofkyo", "example": "https://bookwalker.jp/new/?qsto=st2", "url": "^https?://bookwalker\\.jp/(category|search|new)/", "include": ".o-list--menu,.o-list--footer", @@ -7498,6 +8169,7 @@ }, { "name": "优书网 - 書籍分類", + "author": "skofkyo", "example": "https://www.yousuu.com/booklists/?type=man", "url": "^https?://www\\.yousuu\\.com/(bookstore|booklists)/", "action": 1, @@ -7514,6 +8186,7 @@ }, { "name": "www.shoujixs.net_手机小说 - 阅读", + "author": "skofkyo", "example": "https://www.shoujixs.net/shoujixs_161450_40736191.html", "url": "^https?://www\\.shoujixs\\.net/\\w+\\.html$", "history": 2, @@ -7525,6 +8198,7 @@ }, { "name": "www.shoujixs.net_手机小说 - 分类页", + "author": "skofkyo", "example": "https://www.shoujixs.net/xhqh/", "url": "^https?://www\\.shoujixs\\.net/", "nextLink": "#pagelink strong+a:not([class])", @@ -7533,6 +8207,7 @@ }, { "name": "博仕書屋手機版 - 閱讀", + "author": "skofkyo", "example": "https://m.77z5.com/boshi/28_28437/14990400.html", "url": "^https?://m\\.(boshisw|77z5)\\.com/boshi/\\w+/[0-9_]+\\.html", "history": 2, @@ -7546,6 +8221,7 @@ }, { "name": "博仕書屋手機版 - 小說章節", + "author": "skofkyo", "example": "https://m.77z5.com/boshi/28_28437/all.html", "url": "^https?://m\\.(boshisw|77z5)\\.com/boshi/\\w+/(all|p\\d+)\\.html", "init": "let b = document.querySelector('body');b.innerHTML = b.innerHTML.replace(/
\\n\\w+<\\/b>[^<]+[^<]+<\\/b>[^<]+\\d+<\\/b>
/,'');", @@ -7557,6 +8233,7 @@ }, { "name": "博仕書屋手機版 - 書籍分類", + "author": "skofkyo", "example": "https://m.77z5.com/boshi/quanben.html", "url": "^https?://m\\.(boshisw|77z5)\\.com/boshi/\\w+\\.html", "nextLink": "//a[text()='下一页']", @@ -7566,6 +8243,7 @@ }, { "name": "博仕書屋 - 閱讀", + "author": "skofkyo", "example": "https://www.77z5.com/boshi/28_28437/14990400.html", "url": "^https?://www\\.(boshisw|77z5)\\.com/boshi/\\w+/\\d+\\.html", "history": 2, @@ -7578,6 +8256,7 @@ }, { "name": "博仕書屋 - 書籍分類", + "author": "skofkyo", "example": "https://www.77z5.com/boshi/xuanhuanqihuan/", "url": "^https?://www\\.(boshisw|77z5)\\.com/(boshi|modules)/(xuanhuanqihuan|wuxiaxianxia|dushiyanqing|lishijunshi|kehuanlingyi|wangyoudongman|wanben|article)/", "nextLink": "a.next", @@ -7586,6 +8265,7 @@ }, { "name": "歡喜冤家小說網 - 閱讀", + "author": "skofkyo", "example": "https://www.huanxiyuanjia.com/12_12849/5258090.html", "url": "^https?://www.huanxiyuanjia.com/[0-9_]+/\\d+\\.html", "init": "let gae=e=>document.querySelectorAll(e);gae('#TextContent>*:not(p):nth-child(n+1):nth-child(-n+999)').forEach(e=>{e.remove()});gae('#TextContent>p:nth-child(n+1):nth-child(-n+2)').forEach(e=>{e.remove()});let t=gae('#TextContent')[0];t.innerHTML=t.innerHTML.replace('huanxiyuanjia.com 欢喜冤家','');", @@ -7601,6 +8281,7 @@ }, { "name": "歡喜冤家小說網 - 書籍分類", + "author": "skofkyo", "example": "https://www.huanxiyuanjia.com/fenlei/xuanhuan/1/", "url": "^https?://www.huanxiyuanjia.com/fenlei/", "nextLink": "//a[text()='>>']", @@ -7610,6 +8291,7 @@ }, { "name": "筆趣閣bqg9527 - 手機版閱讀", + "author": "skofkyo", "example": "https://m.bqg9527.com/zh_hant/book/265472/194745565.html", "url": "^https?://m\\.bqg9527\\.com/(zh_hant/)?book/\\d+/\\d+\\.html", "action": 1, @@ -7622,6 +8304,7 @@ }, { "name": "筆趣閣bqg9527 - PC版閱讀", + "author": "skofkyo", "example": "https://www.bqg9527.com/zh_hant/book/265472/194745565.html", "url": "^https?://www\\.bqg9527\\.com/(zh_hant/)?book/\\d+/\\d+\\.html", "action": 1, @@ -7635,6 +8318,7 @@ }, { "name": "筆趣閣bqg9527 - 書籍分類", + "author": "skofkyo", "example": "https://www.bqg9527.com/sort/1/", "url": "^https?://www\\.bqg9527\\.com/", "include": "#newscontent", @@ -7642,6 +8326,7 @@ }, { "name": "筆趣閣biqu86 - 閱讀", + "author": "skofkyo", "example": "https://www.biqu86.com/xiuzhen/3211/1.html", "url": "^https?://(www|m)\\.biqu86\\.com/[a-z]+/\\d+/\\d+\\.html", "action": 1, @@ -7655,6 +8340,7 @@ }, { "name": "筆趣閣biqu86 - 書籍分類", + "author": "skofkyo", "example": "https://www.biqu86.com/xuanhuan/", "url": "^https?://(www|m)\\.biqu86\\.com/(xuanhuan|xiuzhen|chuanyue|dushi|lishi|wangyou|kehuan|xiaoshuodaquan)", "action": 1, @@ -7665,6 +8351,7 @@ }, { "name": "和圖書手機版 - 目錄", + "author": "skofkyo", "example": "https://m.hetubook.com/book/5849/catalog-1.html", "url": "^https?://m\\.(hetubook|hetushu)\\.com/book/\\d+/catalog-\\d+\\.html", "nextLink": "//a[text()='下一頁']", @@ -7675,6 +8362,7 @@ }, { "name": "和圖書手機版 - 閱讀", + "author": "skofkyo", "example": "https://m.hetubook.com/book/5849/4387851.html", "url": "^https?://m\\.(hetubook|hetushu)\\.com/book2?/\\d+/\\d+\\.html", "action": 1, @@ -7692,6 +8380,7 @@ }, { "name": "和圖書 -閱讀", + "author": "skofkyo", "example": "https://www.hetubook.com/book/5849/4387851.html", "url": "^https?://www\\.(hetubook|hetushu)\\.com/book2?/\\d+/\\d+\\.html", "action": 1, @@ -7709,6 +8398,7 @@ }, { "name": "和圖書 -分類", + "author": "skofkyo", "example": "https://www.hetubook.com/book/index.php", "url": "^https?://www\\.(hetubook|hetushu)\\.com/book2?/index\\.php", "nextLink": "span.current+a", @@ -7718,6 +8408,7 @@ }, { "name": "同人圈 -閱讀", + "author": "skofkyo", "example": "http://tongrenquan.org/tongren/7070/1.html", "url": "^https?://tongrenquan\\.org/tongren/\\d+/\\d+\\.html", "pinUrl": true, @@ -7732,6 +8423,7 @@ }, { "name": "同人圈 -分類", + "author": "skofkyo", "example": "http://tongrenquan.org/", "url": "^https?://tongrenquan\\.org/", "pinUrl": true, @@ -7742,6 +8434,7 @@ }, { "name": "69書吧 -閱讀", + "author": "skofkyo", "example": "https://www.69shu.com/txt/38161/26369110", "url": "^https?://www\\.69shu\\.com/txt/\\d+/\\d+", "history": 2, @@ -7754,6 +8447,7 @@ }, { "name": "乐文小说网 -閱讀", + "author": "skofkyo", "example": "http://www.lewenlou.org/132/132683/41065575.html", "url": "^https?://www\\.lewenlou\\.org/\\d+/\\d+/\\d+\\.html", "history": 2, @@ -7766,6 +8460,7 @@ }, { "name": "乐文小说网 - 分類", + "author": "skofkyo", "example": "http://www.lewenlou.org/list/1-1.html", "url": "^https?://www\\.lewenlou\\.org/list/", "nextLink": "li.active+li>a", @@ -7776,12 +8471,14 @@ }, { "name": "69書吧 - 書籍分類", + "author": "skofkyo", "example": "https://www.69shu.com/top/0.htm", "url": "^https?://www\\.69shu\\.com/top/", "nextLink": "0" }, { "name": "次元姬小说 - 閱讀", + "author": "skofkyo", "example": "https://www.ciyuanji.com/chapter/5077_2227754.html", "url": "^https?://www\\.ciyuanji\\.com/chapter/\\w+\\.htm", "history": 2, @@ -7794,6 +8491,7 @@ }, { "name": "轻小说文库 - 閱讀", + "author": "skofkyo", "example": "https://www.wenku8.net/novel/1/1973/69567.htm", "url": "^https?://www\\.wenku8\\.net/novel/\\d+/\\d+/\\d+\\.htm", "pinUrl": true, @@ -7808,6 +8506,7 @@ }, { "name": "稷下書院 - 閱讀", + "author": "skofkyo", "example": "https://www.novel543.com/1004298677/8001_1.html", "url": "^https?://www\\.novel543\\.com/\\d+/\\w+\\.html", "history": 2, @@ -7822,6 +8521,7 @@ }, { "name": "稷下書院 - 分類", + "author": "skofkyo", "example": "https://www.novel543.com/bookstack/", "url": "^https?://www\\.novel543\\.com/", "nextLink": ".next>a", @@ -7831,6 +8531,7 @@ }, { "name": "天天看小說 - 顯示全部目錄", + "author": "skofkyo", "example": "https://tw.ttkan.co/novel/chapters/yedemingmingshu-huishuohuadezhouzi", "url": "^https?://[^/]+/novel/chapters/", "include": [ @@ -7842,6 +8543,7 @@ }, { "name": "天天看小說 - 閱讀", + "author": "skofkyo", "example": "https://tw.bg3.co/novel/pagea/yedemingmingshu-huishuohuadezhouzi_1.html", "url": "^https?://[^/]+/novel/pagea/[^.]+\\.html", "include": "//title[contains(text(),'天天看小說') or contains(text(),'天天看小说')]", @@ -7856,6 +8558,7 @@ }, { "name": "小說狂人 - 閱讀", + "author": "skofkyo", "example": "https://czbooks.net/n/ul6pe/ukcme", "url": "^https?://czbooks\\.net/n/\\w+/\\w+", "action": 1, @@ -7868,6 +8571,7 @@ }, { "name": "小說狂人 - 書籍分類", + "author": "skofkyo", "example": "https://czbooks.net/c/xuanhuan", "url": "^https?://czbooks\\.net/c/\\w+", "nextLink": ".nav.paginate>li.active+li>a", @@ -7877,6 +8581,7 @@ }, { "name": "新笔下文学 - 手機版閱讀", + "author": "skofkyo", "example": "https://www.bxwx.cc/112/112794/56123570.html", "url": "^https?://www\\.bxwx\\.cc/\\d+/\\d+/\\w+\\.html", "history": 2, @@ -7888,6 +8593,7 @@ }, { "name": "新笔下文学 - 閱讀", + "author": "skofkyo", "example": "https://www.bxwx.cc/112/112794/56123570.html", "url": "^https?://www\\.bxwx\\.cc/\\d+/\\d+/\\w+\\.html", "history": 2, @@ -7899,6 +8605,7 @@ }, { "name": "笔下文学bixia - 閱讀", + "author": "skofkyo", "example": "http://www.bixia.org/book/3726/9586349.html", "url": "^https?://www\\.bixia\\.org/book/\\d+/\\d+\\.html", "history": 2, @@ -7912,6 +8619,7 @@ }, { "name": "笔下文学bixia - 目錄", + "author": "skofkyo", "example": "http://www.bixia.org/book/3726/", "url": "^https?://www\\.bixia\\.org/book/\\d+/", "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]", @@ -7921,6 +8629,7 @@ }, { "name": "起點小說 - 閱讀", + "author": "skofkyo", "example": "https://read.qidian.com/chapter/9r9u8W1evJUCpOPIBxLXdQ2/EKq5eZhajBtMs5iq0oQwLQ2/", "url": "^https?://read\\.qidian\\.com/chapter/", "history": 2, @@ -7933,6 +8642,7 @@ }, { "name": "起點小說 - 分類", + "author": "skofkyo", "example": "https://www.qidian.com/finish/size5-update1/", "url": "^https?://www\\.qidian\\.com/(all|finish|rank|free)/(chanId|size|vip|sign|update|tag)?", "nextLink": "//li[a/@class='lbf-pagination-page lbf-pagination-current']/following-sibling::li[1]/a[not(starts-with(@href,'javascript'))]", @@ -7943,6 +8653,7 @@ }, { "name": "無限小說 - 閱讀", + "author": "skofkyo", "example": "https://www.8book.com/read/125687/?312407", "url": "^https?://(www\\.)?8book\\.com/read/", "action": 1, @@ -7960,6 +8671,7 @@ }, { "name": "無限小說 - 書籍分類", + "author": "skofkyo", "example": "https://www.8book.com/booklists/update/", "url": "^https?://(www\\.)?8book\\.com/booklists/(update|newrelease|finish|list|\\d+)/", "nextLink": "li[onclick]+li>a", @@ -7969,6 +8681,7 @@ }, { "name": "UU看書 - 手機版 - 閱讀", + "author": "skofkyo", "example": "https://t.uukanshu.com/read.aspx?tid=47854&sid=32186", "url": "^https?://(t|sj)\\.uukanshu\\.com/read\\.aspx", "init": "$('.ad_content').remove()", @@ -7981,12 +8694,14 @@ }, { "name": "UU看書手機版 - 列表(加載更多小說)", + "author": "skofkyo", "example": "https://t.uukanshu.com/booklist.aspx?c=1", "url": "^https?://(t|sj)\\.uukanshu\\.com/(booklist|quanben|)\\.aspx", "loadMore": "#showMore" }, { "name": "UU看書 - 閱讀", + "author": "skofkyo", "example": "https://www.uukanshu.com/b/47854/32175.html", "url": "^https?://(www|tw)\\.uukanshu\\.com/b/", "action": 1, @@ -7998,6 +8713,7 @@ }, { "name": "UU看書 - 書籍列表", + "author": "skofkyo", "example": "https://www.uukanshu.com/list/xuanhuan-1.html", "url": "^https?://(www|tw)\\.uukanshu\\.com/list/", "nextLink": "//a[text()='下一頁' or text()='下一页']", @@ -8007,6 +8723,7 @@ }, { "name": "UU看書網uuks.org手機版 - 閱讀", + "author": "skofkyo", "example": "https://m.uuks.org/b/59/731.html", "url": "^https?://m\\.uuks\\.org/b/", "action": 1, @@ -8021,6 +8738,7 @@ }, { "name": "UU看書網uuks.org - 閱讀", + "author": "skofkyo", "example": "https://www.uuks.org/b/53487/668581.html", "url": "^https?://www\\.uuks\\.org/b/", "action": 1, @@ -8035,6 +8753,7 @@ }, { "name": "愛下電子書 - 閱讀", + "author": "skofkyo", "example": "https://tw.ixdzs.com/read/38804/p1.html", "url": "^https?://tw\\.ixdzs\\.com/read/\\d+/\\w+\\.html", "history": 2, @@ -8046,6 +8765,7 @@ }, { "name": "愛下電子書 - 書籍列表", + "author": "skofkyo", "example": "https://tw.ixdzs.com/sort/1/", "url": "^https?://tw\\.ixdzs\\.com/(sort|hot|end)/", "nextLink": "a.num.current+a", @@ -8661,7 +9381,8 @@ "name": "北邮人论坛", "url": "bbs\\.byr\\.cn(|/(|#!)default)$", "listenHashChange": true, - "pinUrl": true + "pinUrl": true, + "author": "lanvent" }, { "name": "北邮人论坛-版块", @@ -8670,7 +9391,8 @@ "pageElement": ".b-content> table>tbody", "pinUrl": true, "history": 0, - "action": 1 + "action": 1, + "author": "lanvent" }, { "name": "北邮人论坛-帖子内", @@ -8680,21 +9402,24 @@ "replaceElement": ".page", "pinUrl": true, "history": 0, - "action": 1 + "action": 1, + "author": "lanvent" }, { "name": "北大未名BBS-版块", "url": "bbs\\.pku\\.edu\\.cn/v2/thread.php", "pageElement": "#list-content", "nextLink": "//div[contains(text(),'下一页')]/a", - "replaceElement": ".paging" + "replaceElement": ".paging", + "author": "lanvent" }, { "name": "北大未名BBS-帖子内", "url": "bbs\\.pku\\.edu\\.cn/v2/post-read.php", "pageElement": ".card-list", "nextLink": "//div[contains(text(),'下一页')]/a", - "replaceElement": ".paging" + "replaceElement": ".paging", + "author": "lanvent" }, { "name": "bilibili search", From bd8b5757a1797712c8cb30bbb8f41e87000d319b Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 30 Nov 2023 10:36:19 +0800 Subject: [PATCH 489/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index f7a7026d1a7..eb41510a656 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -16,7 +16,7 @@ 若是遇到下載出錯的站點,可隨意提交issue至[Github](https://github.com/hoothin/UserScripts/issues) -*對你有幫助的話,可透過 [愛發電](https://afdian.net/a/hoothin) 或者 [Ko-fi](https://ko-fi.com/hoothin) 請我喝一杯奶茶* +*對你有幫助的話,可透過 [![i](https://static.afdiancdn.com/favicon.ico) 愛發電](https://afdian.net/a/hoothin) 或者 [![i](https://ko-fi.com/favicon-32x32.png) Ko-fi](https://ko-fi.com/hoothin) 請我喝一杯奶茶* ![donate](https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg) From 9817536202f2a0d4a185a4a7c578f646d89ac520 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 30 Nov 2023 12:49:45 +0800 Subject: [PATCH 490/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 75a6c36610c..956cd42b926 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.44 +// @version 1.7.45 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -6332,7 +6332,7 @@ } } if (cb) cb(); - }, 600); + }, 300); }; if (document.readyState != "complete") { let loadHandler = e => { @@ -8575,10 +8575,9 @@ clicked = false; targetUrlData = ""; targetUrlData = await getUrl(); - if (/^c(opy)?:/.test(data.url) || /^javascript:/.test(data.url) || /^\[/.test(data.url) || /[:%]P{/.test(data.url) || (data.charset && data.charset != 'utf-8') || /[:%]p{/.test(data.url) || self.customInput) { + if (/^c(opy)?:/.test(data.url) || /^javascript:/.test(data.url) || /^\[/.test(data.url) || /[:%]P{/.test(data.url) || (data.charset && data.charset != 'utf-8') || /[:%]p{/.test(data.url)) { if (e.button == 1 || e.button == 2) { - clickHandler(); - clicked = false; + clicked = true; } } else { if (!targetUrlData) { @@ -8593,6 +8592,9 @@ } ele.href = targetUrlData; } + if (self.customInput && targetUrlData) { + clicked = true; + } ele.dispatchEvent(new Event("actionOver")); if (clicked) { ele.click(); From b2e0c7fbfa0bc2cd9cf217aa450ce2401f27c38d Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 30 Nov 2023 14:52:44 +0800 Subject: [PATCH 491/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 60 +++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 69ba7a4702a..97fdc2e035e 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.26.2 +// @version 2023.11.30.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16817,38 +16817,66 @@ ImgOps | https://imgops.com/#b#`; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - let src = match[1].replace(/\\"/g, '"'); - if (hasSrc) { + if (!hasSrc) { + let src = match[1].replace(/\\"/g, '"'); + node.src = src; + total.push(node); + hasSrc = true; + prop = prop.replace(bgReg, "$1"); + match = bgReg.exec(prop); + } + while (match) { + let src = match[1].replace(/\\"/g, '"'); node = document.createElement("img"); + node.src = src; + total.push(node); + prop = prop.replace(bgReg, "$1"); + match = bgReg.exec(prop); } - node.src = src; - total.push(node); - hasSrc = true; } } prop = getComputedStyle(node, '::before').backgroundImage; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - let src = match[1].replace(/\\"/g, '"'); - if (hasSrc) { + if (!hasSrc) { + let src = match[1].replace(/\\"/g, '"'); + node.src = src; + total.push(node); + hasSrc = true; + prop = prop.replace(bgReg, "$1"); + match = bgReg.exec(prop); + } + while (match) { + let src = match[1].replace(/\\"/g, '"'); node = document.createElement("img"); + node.src = src; + total.push(node); + prop = prop.replace(bgReg, "$1"); + match = bgReg.exec(prop); } - node.src = src; - total.push(node); - hasSrc = true; } } prop = getComputedStyle(node, '::after').backgroundImage; if (prop != "none") { let match = bgReg.exec(prop); if (match) { - let src = match[1].replace(/\\"/g, '"'); - if (hasSrc) { + if (!hasSrc) { + let src = match[1].replace(/\\"/g, '"'); + node.src = src; + total.push(node); + hasSrc = true; + prop = prop.replace(bgReg, "$1"); + match = bgReg.exec(prop); + } + while (match) { + let src = match[1].replace(/\\"/g, '"'); node = document.createElement("img"); + node.src = src; + total.push(node); + prop = prop.replace(bgReg, "$1"); + match = bgReg.exec(prop); } - node.src = src; - total.push(node); } } } @@ -22808,7 +22836,7 @@ ImgOps | https://imgops.com/#b#`; } else if (target.nodeName.toUpperCase() != 'IMG') { if (target.nodeName.toUpperCase() == "AREA") target = target.parentNode; var targetBg; - var bgReg = /.*?url\(\s*["']?(.+?)["']?\s*\)([^'"].*|$)/i; + var bgReg = /.*url\(\s*["']?(.+?)["']?\s*\)([^'"].*|$)/i; var broEle = target.previousElementSibling, broImg; while (broEle) { if (broEle.nodeName == "IMG") broImg = broEle; From 23fd6f911240c003ddb767f78d8807accd71cec1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 1 Dec 2023 08:53:56 +0800 Subject: [PATCH 492/812] 1.9.36.111 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 28 +++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 91b84c43e8a..4b2b127f249 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.110](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.111](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index ae6e7436dfc..d1dfa1b5b04 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.110 +// @version 1.9.36.111 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1582,6 +1582,16 @@ if (this.hpRules.length > 30) { this.hpRules.pop(); } + if (!rulesData.sort) rulesData.sort = [1]; + this.hpRules.sort((a, b) => { + let aSort = -1, bSort = -1; + for (let s = 0; s < rulesData.sort.length; s++) { + if (a.from == rulesData.sort[s]) aSort = s; + if (b.from == rulesData.sort[s]) bSort = s; + if (aSort > -1 && bSort > -1) break; + } + return aSort - bSort; + }); storage.setItem("hpRules", this.hpRules); } catch (e) { debug(e); @@ -5147,6 +5157,8 @@ } } else return false; } else return false; + let ruleBarInsertPos = document.createTextNode(' '); + configCon.insertBefore(ruleBarInsertPos, insertPos); class Rulebar { init(ruleUrl) { let id = ruleUrl.id; @@ -5192,7 +5204,7 @@ this.item.appendChild(idSpan); this.idSpan = idSpan; } - configCon.insertBefore(this.item, insertPos); + configCon.insertBefore(this.item, ruleBarInsertPos); } updateNum() { if (ruleParser.rules) { @@ -5217,6 +5229,7 @@ }); ruleUrls = urls; storage.setItem("rulesData", rulesData); + showTips(i18n("sortTitle")); } moveUp() { let preE = this.item.previousElementSibling; @@ -5724,7 +5737,7 @@ rulesData.dbClick2StopMeta = dbClick2StopMetaInput.checked; rulesData.dbClick2StopKey = dbClick2StopKeyInput.value; storage.setItem("rulesData", rulesData); - let customUrls = customUrlsInput.value.trim(); + let customUrls = customUrlsInput.value.trim(), urlImported = false; if (customUrls) { customUrls = customUrls.split(/\n/); for (let c = 0; c < customUrls.length; c++) { @@ -5756,9 +5769,14 @@ }); if (hasUrl) break; if (!rulesData.sort) rulesData.sort = [1]; - rulesData.urls.push({id: maxId + 1, url: url}); + let newRule = {id: maxId + 1, url: url}; + ruleUrls.push(newRule); + rulesData.urls.push(newRule); rulesData.sort.push(maxId + 1); storage.setItem("rulesData", rulesData); + let rulebar = new Rulebar(); + rulebar.init(newRule); + rulebarList.push(rulebar); } } showTips(i18n("settingsSaved")); @@ -5786,7 +5804,7 @@ storage.setItem("ruleLastUpdate", now); storage.setItem("rules", ruleParser.rules); inUpdate = false; - if (allOk) { + if (rulesData.uninited && allOk && ruleUrls.length > 1) { rulesData.uninited = false; storage.setItem("rulesData", rulesData); } From b8014d1f30c7f6c92e10a251f6a18d7079174716 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 1 Dec 2023 02:00:41 +0000 Subject: [PATCH 493/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index cbd989353e9..fe95e3d030e 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -23832,18 +23832,18 @@ }, { "resource_url": "http://wedata.net/items/76697", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "exampleUrl": "http://www.webdoku.jp/rensai/sakka/michi155_tsumura/20141217_3.html http://www.webdoku.jp/rensai/sakka/michi84.html http://www.webdoku.jp/rensai/sakka/michi68.html http://www.webdoku.jp/rensai/sakka/michi31.html", "pageElement": "//div[@class=\"entry-content\"]|id(\"sakka\")|id(\"sakka-header\")[.//p[contains(@class,\"date\")]]", + "comment": "cf.http://wedata.net/items/63656", "nextLink": "//p[contains(@class,\"contentNavi\")]/a[1]", - "url": "^http://www\\.webdoku\\.jp/rensai/sakka/michi", - "comment": "cf.http://wedata.net/items/63656" + "url": "^https://www\\.webdoku\\.jp/rensai/sakka/michi", + "exampleUrl": "http://www.webdoku.jp/rensai/sakka/michi155_tsumura/20141217_3.html http://www.webdoku.jp/rensai/sakka/michi84.html http://www.webdoku.jp/rensai/sakka/michi68.html http://www.webdoku.jp/rensai/sakka/michi31.html" }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "WEB本の雑誌 作家の読書道 個別記事", "created_at": "2014-12-18T15:49:28+09:00", - "updated_at": "2014-12-18T17:53:34+09:00" + "updated_at": "2023-12-01T03:08:58+09:00" }, { "resource_url": "http://wedata.net/items/76693", From 49cde2335022a5c68bc39989dfbd78bd7897b310 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 1 Dec 2023 17:50:02 +0800 Subject: [PATCH 494/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 97fdc2e035e..2f89f3a30a9 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.11.30.1 +// @version 2023.12.1.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16822,7 +16822,7 @@ ImgOps | https://imgops.com/#b#`; node.src = src; total.push(node); hasSrc = true; - prop = prop.replace(bgReg, "$1"); + prop = prop.replace(bgReg, "$2"); match = bgReg.exec(prop); } while (match) { @@ -16830,7 +16830,7 @@ ImgOps | https://imgops.com/#b#`; node = document.createElement("img"); node.src = src; total.push(node); - prop = prop.replace(bgReg, "$1"); + prop = prop.replace(bgReg, "$2"); match = bgReg.exec(prop); } } @@ -16844,7 +16844,7 @@ ImgOps | https://imgops.com/#b#`; node.src = src; total.push(node); hasSrc = true; - prop = prop.replace(bgReg, "$1"); + prop = prop.replace(bgReg, "$2"); match = bgReg.exec(prop); } while (match) { @@ -16852,7 +16852,7 @@ ImgOps | https://imgops.com/#b#`; node = document.createElement("img"); node.src = src; total.push(node); - prop = prop.replace(bgReg, "$1"); + prop = prop.replace(bgReg, "$2"); match = bgReg.exec(prop); } } @@ -16866,7 +16866,7 @@ ImgOps | https://imgops.com/#b#`; node.src = src; total.push(node); hasSrc = true; - prop = prop.replace(bgReg, "$1"); + prop = prop.replace(bgReg, "$2"); match = bgReg.exec(prop); } while (match) { @@ -16874,7 +16874,7 @@ ImgOps | https://imgops.com/#b#`; node = document.createElement("img"); node.src = src; total.push(node); - prop = prop.replace(bgReg, "$1"); + prop = prop.replace(bgReg, "$2"); match = bgReg.exec(prop); } } From 4d69c2f9e421caa23cb1672bc2ee2e5dfb2b0715 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 1 Dec 2023 19:20:44 +0800 Subject: [PATCH 495/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 956cd42b926..da81db9accb 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.45 +// @version 1.7.46 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -11066,7 +11066,7 @@ return true; } if (parentForm) { - url = canonicalUri(parentForm.getAttribute("action")); + url = canonicalUri(parentForm.getAttribute("action") || url); let params = []; let formData = new FormData(parentForm); for (let [key, value] of formData) { From fd117aae7f65a9b212bbf60a13badc79d599690c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 2 Dec 2023 08:12:16 +0800 Subject: [PATCH 496/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 69f730babd6..322b67c59a4 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.7 +// @version 0.6.8 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -187,7 +187,7 @@ quickReply.css("background", "initial"); var leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); quickReply.val(quickReplyStr + ": " + leftTime + "s"); - $("form td.h>b").text(`${formTitle}(${leftTime + "s"})`); + $("form td.h>b").html(`${formTitle}(${leftTime + "s"})`); var countTimer = setInterval(() => { leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); if (leftTime <= 0) { @@ -198,7 +198,7 @@ clearInterval(countTimer); } else { quickReply.val(quickReplyStr + ": " + leftTime + "s"); - $("form td.h>b").text(`${formTitle}(${leftTime + "s"})`); + $("form td.h>b").html(`${formTitle}(${leftTime + "s"})`); } }, 1000); } From a93dbac820bf5dc9159ec46ffeded16a2faf0b5e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 2 Dec 2023 23:48:29 +0800 Subject: [PATCH 497/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 96 ++++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 37 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d1dfa1b5b04..aa5322c300b 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.111 +// @version 1.9.36.112 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -138,7 +138,7 @@ updateSucc: "Update succeeded", beginUpdate: "Begin update, wait a minute please", customUrls: "Import Pagetual or AutoPagerize rule url, One url per line", - customRules: "Input custom rules with [Pagetual] format. Contribute rules", + customRules: "Input custom rules with [Pagetual] format. ✍️Contribute rules", save: "Save", loadingText: "Shojo Now Loading...", opacity: "Opacity", @@ -257,7 +257,7 @@ updateSucc: "更新成功", beginUpdate: "正在更新,请耐心等待,不要关闭页面", customUrls: "导入 Pagetual 或 AutoPagerize 规则 url,一行一条", - customRules: "输入【东方永页机】格式的自定义规则 贡献规则", + customRules: "输入【东方永页机】格式的自定义规则 ✍️贡献规则", save: "保存设置", loadingText: "少女祈祷中...", opacity: "不透明值", @@ -275,7 +275,7 @@ contentVisibility: "自动切换 contentVisibility,提升渲染性能", initRun: "打开页面后立即尝试翻页,否则滚动至页尾再翻页", preload: "翻页前预读下一页,加速浏览", - click2ImportRule: "点击下方添加特殊规则库,并静待更新成功:", + click2ImportRule: "点击下方任意一条添加规则库,并静待更新成功,请预先打开链接确认能正常访问再行导入:", forceAllBody: "是否拼接整个页面?", openInNewTab: "使拼接页面的内容在新页面打开", importSucc: "导入成功", @@ -286,10 +286,10 @@ downBtnImg: "前往页尾图标", sideControllerIcon: "侧边栏图标", loadingTextTitle: "加载中文字", - dbClick2StopCtrl: "Ctrl 键", - dbClick2StopAlt: "Alt 键", - dbClick2StopShift: "Shift 键", - dbClick2StopMeta: "Meta 键", + dbClick2StopCtrl: "Ctrl", + dbClick2StopAlt: "Alt", + dbClick2StopShift: "Shift", + dbClick2StopMeta: "Meta", dbClick2StopKey: "快捷键", pageElementCss: "页面主体框架的样式", customCss: "自定义 css", @@ -376,7 +376,7 @@ updateSucc: "更新成功", beginUpdate: "正在更新,請稍候", customUrls: "導入 Pagetual 或 AutoPagerize 規則 url,一行一條", - customRules: "輸入【東方永頁機】格式的自定義規則 貢獻規則", + customRules: "輸入【東方永頁機】格式的自定義規則 ✍️貢獻規則", save: "存儲設置", loadingText: "少女祈禱中...", opacity: "不透明值", @@ -405,10 +405,10 @@ downBtnImg: "前往頁尾圖標", sideControllerIcon: "側邊欄圖標", loadingTextTitle: "加載中文字", - dbClick2StopCtrl: "Ctrl 鍵", - dbClick2StopAlt: "Alt 鍵", - dbClick2StopShift: "Shift 鍵", - dbClick2StopMeta: "Meta 鍵", + dbClick2StopCtrl: "Ctrl", + dbClick2StopAlt: "Alt", + dbClick2StopShift: "Shift", + dbClick2StopMeta: "Meta", dbClick2StopKey: "快捷鍵", pageElementCss: "頁面主體框架的樣式", customCss: "自定義 css", @@ -495,7 +495,7 @@ updateSucc: "更新に成功しました", beginUpdate: "更新中、お待ちください", customUrls: "インポートルールのURL、1行に1つ", - customRules: "【東方永頁機】の形式でカスタムルールを入力してください 寄稿ルール", + customRules: "【東方永頁機】の形式でカスタムルールを入力してください ✍️寄稿ルール", save: "設定を保存", loadingText: "少女祈祷中...", opacity: "不透明値", @@ -614,7 +614,7 @@ updateSucc: "Правила обновлены", beginUpdate: "Обновление. Пожалуйста, немного подождите", customUrls: "Ссылки с правилами для импорта. Одна ссылка на строку", - customRules: "Введите пользовательские правила в формате Pagetual. Улучшить встроенные правила", + customRules: "Введите пользовательские правила в формате Pagetual. ✍️Улучшить встроенные правила", save: "Сохранить настройки", loadingText: "Следующая страница подгружается…", opacity: "Прозрачность", @@ -879,8 +879,10 @@ storage.setItem(list, listData); }); } - const configPage = ["https://github.com/hoothin/UserScripts/tree/master/Pagetual", - "https://hoothin.github.io/UserScripts/Pagetual/"]; + const configPage = ["https://pagetual.hoothin.com/rule.html", + "https://github.com/hoothin/UserScripts/tree/master/Pagetual", + "https://hoothin.github.io/UserScripts/Pagetual/"]; + const firstRunPage = "https://pagetual.hoothin.com/firstRun.html"; const guidePage = /^https?:\/\/.*pagetual.*rule\.html/i; const ruleImportUrlReg = /greasyfork\.org\/.*scripts\/438684(\-[^\/]*)?(\/discussions|\/?$|\/feedback)|github\.com\/hoothin\/UserScripts\/(tree\/master\/Pagetual|issues)/i; const allOfBody = "body>*"; @@ -888,7 +890,7 @@ const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434", "i"); const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u007c\u00bb\u007c\u003e\u003e\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; - var rulesData = {uninited: true}, ruleUrls, updateDate, clickedSth = false; + var rulesData = {uninited: true, firstRun: true}, ruleUrls, updateDate, clickedSth = false; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; var tryTimes = 0, showedLastPageTips = false; @@ -4874,9 +4876,6 @@ } }, 100); } - [].forEach.call(getBody(document).querySelectorAll('a'), ele => { - ele.target = "_blank"; - }); return true; } return false; @@ -4892,6 +4891,7 @@ } var inUpdate = false; + var importHandler; function initConfig(href) { let isGuidePage = checkGuidePage(href); if (!isGuidePage) { @@ -4899,7 +4899,7 @@ if (location.hostname === "pagetual.hoothin.com") return true; } - var configCon, insertPos, click2import, importUrlPre; + var configCon, insertPos, click2import, importUrlPres; let inConfig = isGuidePage; if (!inConfig) { @@ -5053,15 +5053,19 @@ [].forEach.call(document.querySelectorAll('pre[name=pagetual],pre[name=user-content-pagetual]'), pre => { let importBtn = createImportBtn(pre); }); - document.addEventListener("mouseover", e => { - if (compareNodeName(e.target, ["pre"])) { - let nameAttr = e.target.getAttribute("name"); - if (nameAttr == "pagetual" || nameAttr == "user-content-pagetual") { - if (e.target.querySelector('#pagetualImport')) return; - let importBtn = createImportBtn(e.target); + if (!importHandler) { + importHandler = e => { + if (compareNodeName(e.target, ["pre"])) { + let nameAttr = e.target.getAttribute("name"); + if (nameAttr == "pagetual" || nameAttr == "user-content-pagetual") { + if (e.target.querySelector('#pagetualImport')) return; + let importBtn = createImportBtn(e.target); + } } - } - }); + }; + } + document.removeEventListener("mouseover", importHandler); + document.addEventListener("mouseover", importHandler); if (inConfig) { if (!inUpdate && _GM_info.script && _GM_info.script.version && _GM_info.script.version !== '1.0.0') { @@ -5110,13 +5114,17 @@ } table td>h3 { margin: 16px!important; + padding: 0!important; + } + table td>h4 { + padding: 0!important; } #saveBtn { - width: 100%; + width: 60%; position: fixed; z-index: 999; bottom: 0px; - left: 0px; + left: 20%; font-size: x-large; opacity: 0.8; cursor: pointer; @@ -5138,10 +5146,15 @@ return true; } insertPos = configCon.querySelector("hr,#jsoneditor"); + configCon = insertPos.parentNode; - importUrlPre = document.querySelector("pre[name='user-content-pagetual'],pre[name='pagetual']"); + importUrlPres = document.querySelectorAll("pre[name='user-content-pagetual'],pre[name='pagetual']"); if (!rulesData.uninited) { - if (importUrlPre) importUrlPre.style.display = "none"; + if (importUrlPres) { + [].forEach.call(importUrlPres, importUrlPre => { + importUrlPre.style.display = "none"; + }); + } if (click2import) click2import.style.display = "none"; } let otherconfig = document.querySelector("a[name='user-content-otherconfig'],a[name='otherconfig']"); @@ -5569,7 +5582,7 @@ let dbClick2StopMetaInput = createCheckbox(i18n("dbClick2StopMeta"), rulesData.dbClick2StopMeta, "h4", dbClick2StopInput); let dbClick2StopKeyInput = createCheckbox(i18n("dbClick2StopKey"), rulesData.dbClick2StopKey, "h4", dbClick2StopInput, "key"); - let otherConfigPage = rulesData.configPage ? rulesData.configPage != location.href : configPage[0] != location.href; + let otherConfigPage = (rulesData.configPage || configPage[0]) != location.href; if (!otherConfigPage) { setConfigPageInput.parentNode.parentNode.style.display = "none"; } @@ -5581,7 +5594,11 @@ updateRules(() => { if (!updateFail) { showTips(i18n("updateSucc")); - if (importUrlPre) importUrlPre.style.display = "none"; + if (importUrlPres) { + [].forEach.call(importUrlPres, importUrlPre => { + importUrlPre.style.display = "none"; + }); + } if (click2import) click2import.style.display = "none"; } updateP.innerHTML = i18n("passSec", 0); @@ -5949,6 +5966,11 @@ if (rulesData.lang) { setLang(rulesData.lang); } + if (rulesData.firstRun && rulesData.uninited) { + _GM_openInTab(firstRunPage, {active: true}); + rulesData.firstRun = false; + storage.setItem("rulesData", rulesData); + } _GM_registerMenuCommand(i18n("configure"), () => { _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); }); @@ -6627,7 +6649,7 @@ if (urlChanging) return; urlChanging = true; let href = location.href.slice(0, 60); - if (href == configPage[0]) { + if (href == configPage[1]) { setTimeout(() => { initConfig(href); urlChanging = false; From 5b5a9288f90fa58bd13eb919b7a1c16cddde7869 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 3 Dec 2023 07:29:11 +0800 Subject: [PATCH 498/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 4b2b127f249..105e422ce64 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.111](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.112](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") From ed6ea5700ba3b856a8a1ad084e41510d2eec77fa Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 3 Dec 2023 07:37:39 +0800 Subject: [PATCH 499/812] Update README.md --- Pagetual/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 105e422ce64..c18c4210afe 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -17,7 +17,10 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu
- + + + + From e06eb9d9b436b0fae3b2c7db7d557f8f6dc98b9e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 3 Dec 2023 18:00:37 +0800 Subject: [PATCH 500/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index aa5322c300b..2b94a688a79 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -882,7 +882,7 @@ const configPage = ["https://pagetual.hoothin.com/rule.html", "https://github.com/hoothin/UserScripts/tree/master/Pagetual", "https://hoothin.github.io/UserScripts/Pagetual/"]; - const firstRunPage = "https://pagetual.hoothin.com/firstRun.html"; + const firstRunPage = "https://pagetual.hoothin.com/firstRun"; const guidePage = /^https?:\/\/.*pagetual.*rule\.html/i; const ruleImportUrlReg = /greasyfork\.org\/.*scripts\/438684(\-[^\/]*)?(\/discussions|\/?$|\/feedback)|github\.com\/hoothin\/UserScripts\/(tree\/master\/Pagetual|issues)/i; const allOfBody = "body>*"; From 0d56e85783ed73b63592df3feacbc73121a4b38a Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 3 Dec 2023 18:01:40 +0800 Subject: [PATCH 501/812] Update searchJumperLevenshteinAddon.lib.js --- SearchJumper/searchJumperLevenshteinAddon.lib.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumperLevenshteinAddon.lib.js b/SearchJumper/searchJumperLevenshteinAddon.lib.js index 2c54867f95d..e65690356f8 100644 --- a/SearchJumper/searchJumperLevenshteinAddon.lib.js +++ b/SearchJumper/searchJumperLevenshteinAddon.lib.js @@ -3,7 +3,7 @@ // @name:zh-CN 搜索酱单词模式扩展 // @name:zh-TW 搜尋醬單詞模式擴展 // @namespace hoothin -// @version 0.1.9 +// @version 0.2 // @description Add similarity search based on Levenshtein distance to the highlight feature of SearchJumper. // @description:zh-CN 为搜索酱的页内高亮添加基于莱文斯坦距离的相似度查找 // @description:zh-TW 為搜尋醬的頁内高亮添加基於萊文斯坦距離的相似度查找 @@ -77,11 +77,11 @@ } } if (matched) { - let wordMatch = text.match(new RegExp(`\\b(` + matchedStr.join(gapStr + "+") + `)\\b`, "i")); + let wordMatch = text.match(new RegExp(`(\\b|\\s)(` + matchedStr.join(gapStr + "+") + `)(\\b|\\s)`, "i")); if (wordMatch) { - let content = wordMatch[1]; + let content = wordMatch[2]; len = content.length; - pos = wordMatch.index; + pos = wordMatch.index + wordMatch[1].length; } } return {matched: matched, pos: pos, len: len}; From 995e4467a8ece04ec9a289344a72b755e7d5d8f1 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 4 Dec 2023 01:55:35 +0000 Subject: [PATCH 502/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index fe95e3d030e..78ef75e0c44 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "data": { + "insertBefore": "", + "pageElement": "id('pagingNavi')/preceding-sibling::*", + "nextLink": "//span[number()>0]/following-sibling::a[1][number()>0]", + "url": "^https://toyotatimes\\.jp/", + "exampleUrl": "https://toyotatimes.jp/spotlights/1033.html" + }, + "created_by": "Griever3", + "resource_url": "http://wedata.net/items/86192", + "name": "トヨタイムズ 記事", + "created_at": "2023-12-03T14:53:53+09:00", + "updated_at": "2023-12-03T14:53:53+09:00", + "database_resource_url": "http://wedata.net/databases/AutoPagerize" +}, { "resource_url": "http://wedata.net/items/86191", "data": { From 2f48caff5a72dd6a65152c363ace723ad4a2f063 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 4 Dec 2023 21:38:23 +0800 Subject: [PATCH 503/812] Update README.md --- Pagetual/README.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index c18c4210afe..70ad83c1199 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,6 +1,6 @@ [☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.112](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == -*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/en/ "Wiki site for pagetual") +*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") 🔧CONFIGURATION PAGE🔧 @@ -28,6 +28,9 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu + + +
Buy me a coffee if it helps you💞Buy me a coffee if you get help💞

PayPal

Ko-fi

愛發電
donate
📧Send me an email for help📧Send me an email
Made with ❤️ by Hoothin

PayPal

Ko-fi

愛發電
donatedonate
💬Join our Discord
📧Send me an email
Made with ❤️ by Hoothin
@@ -69,34 +72,34 @@ Example url of this rule "example": "https://abc.com" ``` -[url](https://pagetual.hoothin.com/en/rules/url.html) +[url](https://pagetual.hoothin.com/rules/url.html) -- RegExp for the url of target site -[nextLink](https://pagetual.hoothin.com/en/rules/nextLink.html) +[nextLink](https://pagetual.hoothin.com/rules/nextLink.html) -- Selector or xpath of next page link, disable when set to 0, you can let it to be a array to contains multiple next links. You may leave it empty because it will be generated automatically. -[pageElement](https://pagetual.hoothin.com/en/rules/pageElement.html) +[pageElement](https://pagetual.hoothin.com/rules/pageElement.html) -- Selector or xpath of main content which need to insert, you can let it to be a array to contains multiple page elements. You may leave it empty because it will be generated automatically. -[enable](https://pagetual.hoothin.com/en/rules/enable.html) +[enable](https://pagetual.hoothin.com/rules/enable.html) -- 0 means stop action when all matched -[include](https://pagetual.hoothin.com/en/rules/include.html) +[include](https://pagetual.hoothin.com/rules/include.html) -- Selector or xpath of the element which must include -[exclude](https://pagetual.hoothin.com/en/rules/exclude.html) +[exclude](https://pagetual.hoothin.com/rules/exclude.html) -- Selector or xpath of the element which must not include -[action](https://pagetual.hoothin.com/en/rules/action.html) +[action](https://pagetual.hoothin.com/rules/action.html) -- 0 means load url and insert with static html, 1 means load by iframe so that dynamic javaScript code on page may effect, 2 means force insert iframe to bottom -[loadMore](https://pagetual.hoothin.com/en/rules/loadMore.html) +[loadMore](https://pagetual.hoothin.com/rules/loadMore.html) -- Selector of "load more" button you want to auto click From 9096d84a739df4e2c954025673146d47af14b26f Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 5 Dec 2023 01:55:41 +0000 Subject: [PATCH 504/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 78ef75e0c44..8c8fe5ad7b2 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86193", + "data": { + "insertBefore": "", + "pageElement": "id('post-list post4-list')[1]", + "nextLink": "//link[@rel='next']", + "url": "^https?://av-photograph\\.com/", + "exampleUrl": "http://av-photograph.com/\r\nhttp://av-photograph.com/blog-category-253.html" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "エロ画像まとめ 綺麗なお姉さん。", + "created_at": "2023-12-04T22:43:00+09:00", + "updated_at": "2023-12-04T22:43:00+09:00" +}, { "data": { "insertBefore": "", @@ -4166,17 +4181,16 @@ { "resource_url": "http://wedata.net/items/85783", "data": { - "insertBefore": "", "pageElement": "//article[@data-post-id]", - "nextLink": "//link[@rel='next']", + "nextLink": "//span[contains(@class, 'current')][number()>0]/following-sibling::span[1][number()>0]/a", "url": "^https://hollywoodlife\\.com/", - "exampleUrl": "https://hollywoodlife.com/" + "exampleUrl": "https://hollywoodlife.com/\r\nhttps://hollywoodlife.com/?s=test" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Griever3", "name": "Hollywood Life", "created_at": "2022-01-05T17:40:34+09:00", - "updated_at": "2022-01-05T17:40:34+09:00" + "updated_at": "2023-12-04T22:44:16+09:00" }, { "resource_url": "http://wedata.net/items/85782", From 2a6c9837f2f80b4006a7ac91eeba8d869bad5bc9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 12:32:46 +0800 Subject: [PATCH 505/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 322b67c59a4..c4816520374 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.8 +// @version 0.6.9 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -165,6 +165,14 @@ } }); } + function getCurrentDate() { + var myDate = new Date(); + return myDate.getFullYear() + "-" + (myDate.getMonth() + 1) + "-" + myDate.getDate(); + } + var currentDate = getCurrentDate(); + if (currentDate == $.cookie('lastSignDate')) { + document.title = "√" + document.title; + } var lastReplyTime = $.cookie('lastReplyTime'); var customReplyStr = $.cookie('customReplyStr'); var isCheckIn = document.title.indexOf("打卡签到") !== -1; @@ -218,6 +226,9 @@ function replySuccess() { lastReplyTime = Date.now(); $.cookie('lastReplyTime', lastReplyTime, { expires: 7, path: '/' }); + if (isCheckIn) { + $.cookie('lastSignDate', currentDate, { expires: 7, path: '/' }); + } submitBtn.val("提 交"); quickReply.val("回复成功"); quickReply.css("background", "yellow"); From 4e3c1a8df7f651cee652690b270df5cb7965e5ed Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 14:47:04 +0800 Subject: [PATCH 506/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index 2c7a7e1d51b..d604a3fab9d 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -1315,5 +1315,11 @@ var siteInfo = [ url:/47\.101\.137\.235/, r:"thumb", s:"regular" +}, +{ + name: "Civitai", + url: /^https:\/\/civitai\.com\//, + r: /\/width=\d+\//, + s: "/" } ]; From 2782ebc479828d2fca512ffc9d7667ebf0b97526 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 15:14:21 +0800 Subject: [PATCH 507/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 2f89f3a30a9..d543141a5f1 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.1.1 +// @version 2023.12.5.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -44,7 +44,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1269250 +// @require https://update.greasyfork.org/scripts/438080/1290755/pvcep_rules.js // @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js @@ -24132,6 +24132,18 @@ ImgOps | https://imgops.com/#b#`; attr: { "href": "mailto:rixixi@gmail.com" } + }, + { + node: "span", + text: " Join our " + }, + { + node: "a", + text: "Discord", + attr: { + href: "https://discord.com/invite/keqypXC6wD", + target: "_blank" + } } ] }, @@ -24349,6 +24361,12 @@ ImgOps | https://imgops.com/#b#`; } } }); + if (localStorage) { + if (!storage.getItem('inited')) { + localStorage.setItem('picviewerCE.config.curTab', 4); + storage.setItem('inited', true); + } + } debug = prefs.debug ? console.debug.bind(console) : function() {}; } From 47ba712720eb534160d82d496e9446e2e843b966 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 15:36:14 +0800 Subject: [PATCH 508/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index eb41510a656..e4928855069 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -16,7 +16,7 @@ 若是遇到下載出錯的站點,可隨意提交issue至[Github](https://github.com/hoothin/UserScripts/issues) -*對你有幫助的話,可透過 [![i](https://static.afdiancdn.com/favicon.ico) 愛發電](https://afdian.net/a/hoothin) 或者 [![i](https://ko-fi.com/favicon-32x32.png) Ko-fi](https://ko-fi.com/hoothin) 請我喝一杯奶茶* +*對你有幫助的話,可透過 [![i](https://static.afdiancdn.com/favicon.ico) 愛發電](https://afdian.net/a/hoothin) 或者 [![i](https://ko-fi.com/favicon-32x32.png) Ko-fi](https://ko-fi.com/hoothin) 請我喝一杯奶茶。歡迎加入 [Discord 群組](https://discord.com/invite/keqypXC6wD)。* ![donate](https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg) From 6246dfd6ca5ef395e2b4c74e649296d999a6b19e Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 15:37:39 +0800 Subject: [PATCH 509/812] Update README.md --- DownloadAllContent/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index e4928855069..ae228d85675 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -5,7 +5,7 @@ 腳本會自動檢索頁面中的主要內容並下載(省得複製完gal攻略還要手動逐條刪除「某某某13級頭銜水龍王發表於X年X月X日來自XX客戶端」)。 如果位於小說目錄頁會遍歷所有章節並排序拼接後存為TXT文檔。 -[![img](https://img.shields.io/github/stars/hoothin/UserScripts?style=social)](https://github.com/hoothin/UserScripts) [【高亮或者格式化網頁中選中的代碼,並統計字數】](https://greasyfork.org/scripts/24150-highlight-every-code) +[![img](https://img.shields.io/github/stars/hoothin/UserScripts?style=social)](https://github.com/hoothin/UserScripts) --- @@ -16,7 +16,7 @@ 若是遇到下載出錯的站點,可隨意提交issue至[Github](https://github.com/hoothin/UserScripts/issues) -*對你有幫助的話,可透過 [![i](https://static.afdiancdn.com/favicon.ico) 愛發電](https://afdian.net/a/hoothin) 或者 [![i](https://ko-fi.com/favicon-32x32.png) Ko-fi](https://ko-fi.com/hoothin) 請我喝一杯奶茶。歡迎加入 [Discord 群組](https://discord.com/invite/keqypXC6wD)。* +*對你有幫助的話,可透過 [![i](https://static.afdiancdn.com/favicon.ico) 愛發電](https://afdian.net/a/hoothin) 或者 [![i](https://ko-fi.com/favicon-32x32.png) Ko-fi](https://ko-fi.com/hoothin) 請我喝一杯奶茶。歡迎加入 [💬Discord 群組](https://discord.com/invite/keqypXC6wD)。* ![donate](https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg) From b9d28f09e95b1aa922eb28891314ef2647ac06f8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 15:52:36 +0800 Subject: [PATCH 510/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 70ad83c1199..b40fd4a1b55 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -29,7 +29,7 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu Made with ❤️ by Hoothin - + From c08e3381e8493758c4182ee0e75e2c4cb8657b67 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 19:11:34 +0800 Subject: [PATCH 511/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 95 +++++++++++-------- 1 file changed, 55 insertions(+), 40 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 175165066b6..3a706b8ad14 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.1 +// @version 2.8.2 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -1311,52 +1311,67 @@ if (window.top != window.self) { } if(!largestContent)return i18n.error+" : NO TEXT CONTENT"; var retainImage=!!GM_getValue("retainImage"); - var childlist=pageData.querySelectorAll(largestContent.nodeName);//+(largestContent.className?"."+largestContent.className.replace(/(^\s*)|(\s*$)/g, '').replace(/\s+/g, '.'):"")); - function getRightStr(ele, noTextEnable){ - if(retainImage){ - [].forEach.call(ele.querySelectorAll("img[src]"), img => { - let imgTxtNode=document.createTextNode(`![img](${canonicalUri(img.getAttribute("src"), url || location.href)})`); - img.parentNode.replaceChild(imgTxtNode, img); + function getContentByLargest() { + var childlist=pageData.querySelectorAll(largestContent.nodeName);//+(largestContent.className?"."+largestContent.className.replace(/(^\s*)|(\s*$)/g, '').replace(/\s+/g, '.'):"")); + function getRightStr(ele, noTextEnable){ + [].forEach.call(ele.querySelectorAll("a[href]"), a => { + a.parentNode && a.parentNode.removeChild(a); }); - } - let childNodes=ele.childNodes,cStr="\r\n",hasText=false; - [].forEach.call(ele.querySelectorAll("a[href]"), a => { - a.parentNode && a.parentNode.removeChild(a); - }); - for(let j=0;j\|]*$/.test(childNode.data))hasText=true; - if(childNode.innerHTML){ - childNode.innerHTML=childNode.innerHTML.replace(/\<\s*br\s*\>/gi,"\r\n").replace(/\n+/gi,"\n").replace(/\r+/gi,"\r"); + if(retainImage){ + [].forEach.call(ele.querySelectorAll("img[src]"), img => { + let imgTxtNode=document.createTextNode(`![img](${canonicalUri(img.getAttribute("src"), url || location.href)})`); + img.parentNode.replaceChild(imgTxtNode, img); + }); } - let content=childNode.textContent; - if(content){ - if(!content.trim())continue; - cStr+=content.replace(/[\uFEFF\xA0 ]+/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2"); + let childNodes=ele.childNodes,cStr="\r\n",hasText=false; + for(let j=0;j\|]*$/.test(childNode.data))hasText=true; + if(childNode.innerHTML){ + childNode.innerHTML=childNode.innerHTML.replace(/\<\s*br\s*\>/gi,"\r\n").replace(/\n+/gi,"\n").replace(/\r+/gi,"\r"); + } + let content=childNode.textContent; + if(content){ + if(!content.trim())continue; + cStr+=content.replace(/[\uFEFF\xA0 ]+/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2"); + } + if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT|IMG)$/.test(childNode.nodeName))cStr+="\r\n"; } - if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT|IMG)$/.test(childNode.nodeName))cStr+="\r\n"; + if(hasText || noTextEnable || ele==largestContent)rStr+=cStr+"\r\n"; } - if(hasText || noTextEnable || ele==largestContent)rStr+=cStr+"\r\n"; - } - var sameDepthChildren=[]; - for(i=0;i>2; + var tooShort = sameDepthChildren.length <= 3; + sameDepthChildren.forEach(child => { + if(tooShort && child.innerText.length < minLength) return; + if((largestContent.className && largestContent.className == child.className) || largestContent.parentNode == child.parentNode){ + getRightStr(child, true); + }else { + getRightStr(child, false); + } + }); + rStr = rStr.replace(/[\n\r]+/g,"\n\r"); } - var minLength = largestNum>>2; - var tooShort = sameDepthChildren.length <= 3; - sameDepthChildren.forEach(child => { - if(tooShort && child.innerText.length < minLength) return; - if((largestContent.className && largestContent.className == child.className) || largestContent.parentNode == child.parentNode){ - getRightStr(child, true); - }else { - getRightStr(child, false); + getContentByLargest(); + if (rStr.length < 100) { + let articles = pageData.querySelectorAll("article"); + if (articles && articles.length == 1) { + largestContent = articles[0]; + largestNum = largestContent.innerText.length; + if (largestNum > 100) { + rStr = ""; + getContentByLargest(); + } } - }); - return rStr.replace(/[\n\r]+/g,"\n\r"); + } + return rStr; } function getI18n(key, args){ From 409af48102140dbadcaf66d4a99a473a7faec5df Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 5 Dec 2023 20:00:49 +0800 Subject: [PATCH 512/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 2b94a688a79..40725e7dd3b 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -761,7 +761,7 @@ } else if (typeof GM != 'undefined' && typeof GM.notification != 'undefined') { _GM_notification = GM.notification; } else { - _GM_notification = (s) => {showTips(s)}; + _GM_notification = (s) => {showTips(String(s))}; } if (typeof GM_openInTab != 'undefined') { _GM_openInTab = GM_openInTab; @@ -3729,7 +3729,7 @@
-
+
From b85577911d972b2ec7631c444ec1ac9f334f73c2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 6 Dec 2023 08:27:57 +0800 Subject: [PATCH 513/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index c4816520374..7c776497776 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -171,7 +171,7 @@ } var currentDate = getCurrentDate(); if (currentDate == $.cookie('lastSignDate')) { - document.title = "√" + document.title; + document.title = "🚩" + document.title; } var lastReplyTime = $.cookie('lastReplyTime'); var customReplyStr = $.cookie('customReplyStr'); From d350aedca05488417bd6f827d2c1708ee5d35cb4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 6 Dec 2023 08:29:02 +0800 Subject: [PATCH 514/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index 7c776497776..abc46d7114d 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -171,7 +171,7 @@ } var currentDate = getCurrentDate(); if (currentDate == $.cookie('lastSignDate')) { - document.title = "🚩" + document.title; + document.title = "✅" + document.title; } var lastReplyTime = $.cookie('lastReplyTime'); var customReplyStr = $.cookie('customReplyStr'); From 6dc74832175e378d3c0891c3bcefea1aea74e36b Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 6 Dec 2023 13:30:03 +0800 Subject: [PATCH 515/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 40725e7dd3b..efd4c8a8186 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -138,7 +138,7 @@ updateSucc: "Update succeeded", beginUpdate: "Begin update, wait a minute please", customUrls: "Import Pagetual or AutoPagerize rule url, One url per line", - customRules: "Input custom rules with [Pagetual] format. ✍️Contribute rules", + customRules: "Input custom rules. ✍️Contribute rules", save: "Save", loadingText: "Shojo Now Loading...", opacity: "Opacity", From edb6d8d66f5a83f59ad9b6018b86abaff0bdef7f Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 6 Dec 2023 14:15:39 +0800 Subject: [PATCH 516/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index da81db9accb..ab2d8929082 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.46 +// @version 1.7.47 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2930,6 +2930,14 @@ text-decoration: none; padding: 1px 0; -webkit-text-fill-color: initial; + text-shadow: initial; + } + mark.searchJumper:before, + a.searchJumper:before, + mark.searchJumper:after, + a.searchJumper:after { + all: unset; + content: none!important; } mark.searchJumper[data-current=true], a.searchJumper[data-current=true] { @@ -9568,7 +9576,7 @@ } else if (relX == "left" && relY == "center") { //左中 setClass("search-jumper-left"); - self.bar.style.position = "absolute"; + self.bar.style.position = "relative"; self.bar.style.marginTop = posY + "px"; self.con.style.display = "flex"; self.con.style.justifyContent = "center"; From 1267447341c26e649e03a9d6826d1ee02af2b964 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 6 Dec 2023 15:04:37 +0800 Subject: [PATCH 517/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ab2d8929082..e7ec2bca5bd 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.47 +// @version 1.7.48 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -11799,6 +11799,7 @@ var dragRoundFrame, dragCon, dragSiteCurSpans, dragSiteHistorySpans, dragEndHandler, dragenterHandler, openAllTimer, dragScaleWidth, dragScaleHeight, zoomDrag; function showDragSearch(left, top) { if (!searchBar || !searchBar.bar) return; + let preOpenType = searchBar.bar.querySelector('.search-jumper-type.search-jumper-open'); let removeFrame = () => { document.removeEventListener('dragend', dragEndHandler, true); document.removeEventListener('dragenter', dragenterHandler, true); @@ -11809,6 +11810,13 @@ } draging = false; clearTimeout(openAllTimer); + if (preOpenType && !preOpenType.classList.contains('search-jumper-open')) { + if (preOpenType.children[0].onmousedown) preOpenType.children[0].onmousedown(); + else { + let mouseEvent = new PointerEvent("mousedown"); + preOpenType.children[0].dispatchEvent(mouseEvent); + } + } }; if (!dragScaleWidth && !dragScaleHeight) { zoomDrag = (searchData.prefConfig.zoomDrag || 100) / 100; From e4c524d1bbb6a648e63c49a13fe9779c74a8fa6d Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 6 Dec 2023 16:17:29 +0800 Subject: [PATCH 518/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e7ec2bca5bd..5b3e7ed0d63 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -9187,7 +9187,7 @@ } checkScroll(noIntoView, noSmooth) { - if (this.funcKeyCall) return; + if (this.funcKeyCall || this.bar.style.display == "none") return; let viewWidth = window.innerWidth || document.documentElement.clientWidth; let viewHeight = window.innerHeight || document.documentElement.clientHeight; if (this.bar.scrollWidth > viewWidth || this.bar.scrollHeight > viewHeight) { @@ -11810,12 +11810,16 @@ } draging = false; clearTimeout(openAllTimer); - if (preOpenType && !preOpenType.classList.contains('search-jumper-open')) { - if (preOpenType.children[0].onmousedown) preOpenType.children[0].onmousedown(); - else { - let mouseEvent = new PointerEvent("mousedown"); - preOpenType.children[0].dispatchEvent(mouseEvent); + if ((currentSite && !currentSite.hideNotMatch && !searchData.prefConfig.hideOnSearchEngine) || searchBar.con.classList.contains("resizePage")) { + if (preOpenType && !preOpenType.classList.contains('search-jumper-open')) { + if (preOpenType.children[0].onmousedown) preOpenType.children[0].onmousedown(); + else { + let mouseEvent = new PointerEvent("mousedown"); + preOpenType.children[0].dispatchEvent(mouseEvent); + } } + } else { + searchBar.bar.style.display = 'none'; } }; if (!dragScaleWidth && !dragScaleHeight) { From 96a204d3367ac3afeccc501ce29133c43fbfa56a Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 6 Dec 2023 20:46:07 +0800 Subject: [PATCH 519/812] 1.9.36.113 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index b40fd4a1b55..5a09a0b3902 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.112](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.113](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index efd4c8a8186..152efcc8470 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.112 +// @version 1.9.36.113 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -5123,9 +5123,9 @@ width: 60%; position: fixed; z-index: 999; - bottom: 0px; + bottom: 2%; left: 20%; - font-size: x-large; + font-size: xx-large; opacity: 0.8; cursor: pointer; -moz-transition:opacity 0.3s ease; @@ -5343,6 +5343,7 @@ configCon.insertBefore(customUrlsTitle, insertPos); let customUrlsInput = document.createElement("textarea"); customUrlsInput.style.width = "100%"; + customUrlsInput.style.position = "relative"; customUrlsInput.placeholder = "http://wedata.net/databases/AutoPagerize/items_all.json \nhttps://hoothin.github.io/UserScripts/Pagetual/pagetualRules.json"; customUrlsInput.spellcheck = false; configCon.insertBefore(customUrlsInput, insertPos); @@ -5359,6 +5360,7 @@ upBtnImg.appendChild(upBtnImgTitle); let upBtnImgInput = document.createElement("input"); upBtnImgInput.style.width = "100%"; + upBtnImgInput.style.position = "relative"; upBtnImgInput.placeholder = "data:image/png;base64,UpBtn"; upBtnImgInput.value = rulesData.upBtnImg || ''; upBtnImgInput.spellcheck = false; @@ -5374,6 +5376,7 @@ downBtnImg.appendChild(downBtnImgTitle); let downBtnImgInput = document.createElement("input"); downBtnImgInput.style.width = "100%"; + downBtnImgInput.style.position = "relative"; downBtnImgInput.placeholder = "data:image/png;base64,DownBtn"; downBtnImgInput.value = rulesData.downBtnImg || ''; downBtnImgInput.spellcheck = false; @@ -5389,7 +5392,8 @@ sideControllerIconDiv.appendChild(sideControllerIconTitle); let sideControllerIconInput = document.createElement("input"); sideControllerIconInput.style.width = "100%"; - sideControllerIconInput.placeholder = "🤍"; + sideControllerIconInput.style.position = "relative"; + sideControllerIconInput.placeholder = "📄"; sideControllerIconInput.value = rulesData.sideControllerIcon || ''; sideControllerIconInput.spellcheck = false; sideControllerIconDiv.appendChild(sideControllerIconInput); @@ -5409,6 +5413,7 @@ loadingTextInput.value = rulesData.loadingText || ''; loadingTextInput.placeholder = i18n("loadingText"); loadingTextInput.style.width = "100%"; + loadingTextInput.style.position = "relative"; loadingTextInput.style.margin = "0"; loadingTextInput.spellcheck = false; loadingText.appendChild(loadingTextInput); @@ -5426,6 +5431,7 @@ opacityInput.min = 0; opacityInput.max = 100; opacityInput.style.width = "110px"; + opacityInput.style.position = "relative"; opacityInput.style.margin = "0"; opacityInput.placeholder = i18n("opacityPlaceholder"); opacityInput.spellcheck = false; @@ -5444,6 +5450,7 @@ let pageElementCssInput = document.createElement("input"); pageElementCssInput.value = rulesData.pageElementCss || ''; pageElementCssInput.style.width = "100%"; + pageElementCssInput.style.position = "relative"; pageElementCssInput.style.margin = "0"; pageElementCssInput.placeholder = "font-size: xx-large;"; pageElementCssInput.spellcheck = false; @@ -5458,6 +5465,7 @@ let customCssInput = document.createElement("textarea"); customCssInput.value = rulesData.customCss || ''; customCssInput.style.width = "100%"; + customCssInput.style.position = "relative"; customCssInput.style.margin = "0"; customCssInput.placeholder = ".pagetual {\n}"; customCssInput.spellcheck = false; From 6d42dd519ffade9667e0455f098bcdd0df1db266 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 7 Dec 2023 09:35:25 +0800 Subject: [PATCH 520/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 152efcc8470..6ec535219e0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6467,7 +6467,7 @@ color: #ff6464; } .pagetual_tipsWords { - font-size: 50px; + font-size: 3em; font-weight: bold; font-family: "黑体", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", @@ -6475,7 +6475,7 @@ color: #ffffff; min-height: 70px; max-width: 80%; - line-height: 70px; + line-height: 1.5; position: fixed; left: 50%; top: 10%; @@ -6492,6 +6492,7 @@ -webkit-transition:opacity 0.3s ease-in-out 0s; transition:opacity 0.3s ease-in-out 0s; pointer-events: none; + word-break: break-all; } .pagetual_tipsWords>a { color: #ffffff; From bc496cb0d481575112b692946a40e5c67bc25b58 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 7 Dec 2023 11:12:33 +0800 Subject: [PATCH 521/812] 1.9.37.1 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 66 +++++++++++++++++++++------------------ 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 5a09a0b3902..2f0689dc9d0 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.36.113](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.1](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 6ec535219e0..b55aa4cb241 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.36.113 +// @version 1.9.37.1 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -4891,7 +4891,7 @@ } var inUpdate = false; - var importHandler; + var importHandler, configCon; function initConfig(href) { let isGuidePage = checkGuidePage(href); if (!isGuidePage) { @@ -4899,7 +4899,7 @@ if (location.hostname === "pagetual.hoothin.com") return true; } - var configCon, insertPos, click2import, importUrlPres; + var click2import, importUrlPres; let inConfig = isGuidePage; if (!inConfig) { @@ -4910,15 +4910,20 @@ } } } + configCon = document.getElementById("configCon"); + if (configCon) { + configCon.parentNode.removeChild(configCon); + let ruleExamples = document.querySelectorAll("#jsoneditor~p>a") + if (ruleExamples.length > 1) { + ruleExamples[0].parentNode.removeChild(ruleExamples[0]); + } + } if (ruleImportUrlReg.test(href) || inConfig) { let importing = false; if (!inUpdate && rulesData.uninited) { setTimeout(() => { if (!inUpdate && !importing) showTips(i18n("firstAlert")); }, 3000); - setTimeout(() => { - if (!inUpdate && !importing) showTips(i18n("firstAlert")); - }, 6000); showTips(i18n("firstAlert")); } let defaultOption = document.querySelector('#discussion_rating_4'); @@ -5145,18 +5150,19 @@ }, 1000); return true; } - insertPos = configCon.querySelector("hr,#jsoneditor"); - configCon = insertPos.parentNode; + let insertPos = configCon.querySelector("hr,#jsoneditor"); + configCon = document.createElement("div"); + configCon.id = "configCon"; + insertPos.parentNode.insertBefore(configCon, insertPos); importUrlPres = document.querySelectorAll("pre[name='user-content-pagetual'],pre[name='pagetual']"); - if (!rulesData.uninited) { - if (importUrlPres) { - [].forEach.call(importUrlPres, importUrlPre => { - importUrlPre.style.display = "none"; - }); - } - if (click2import) click2import.style.display = "none"; + if (importUrlPres) { + [].forEach.call(importUrlPres, importUrlPre => { + importUrlPre.style.overflow = "hidden"; + importUrlPre.style.display = rulesData.uninited ? "block" : "none"; + }); } + if (click2import) click2import.style.display = rulesData.uninited ? "block" : "none"; let otherconfig = document.querySelector("a[name='user-content-otherconfig'],a[name='otherconfig']"); if (otherconfig) otherconfig.parentNode.removeChild(otherconfig); let rulesExample = document.querySelector("#user-content-rules-example+a,#rules-example>a"); @@ -5171,7 +5177,7 @@ } else return false; } else return false; let ruleBarInsertPos = document.createTextNode(' '); - configCon.insertBefore(ruleBarInsertPos, insertPos); + configCon.appendChild(ruleBarInsertPos); class Rulebar { init(ruleUrl) { let id = ruleUrl.id; @@ -5303,7 +5309,7 @@ langSelect.appendChild(option); } langSelect.value = rulesData.lang || ""; - configCon.insertBefore(langSelect, insertPos); + configCon.appendChild(langSelect); let updateP = document.createElement("p"), i = 0; let now = new Date().getTime(); @@ -5330,7 +5336,7 @@ updateP.className = "updateDate"; updateP.innerHTML = passStr; updateP.title = i18n("update") + " - " + pastDate; - configCon.insertBefore(updateP, insertPos); + configCon.appendChild(updateP); if (ruleUrls) { ruleUrls.forEach(ruleUrl => { let rulebar = new Rulebar(); @@ -5340,17 +5346,17 @@ } let customUrlsTitle = document.createElement("h2"); customUrlsTitle.innerHTML = i18n("customUrls"); - configCon.insertBefore(customUrlsTitle, insertPos); + configCon.appendChild(customUrlsTitle); let customUrlsInput = document.createElement("textarea"); customUrlsInput.style.width = "100%"; customUrlsInput.style.position = "relative"; customUrlsInput.placeholder = "http://wedata.net/databases/AutoPagerize/items_all.json \nhttps://hoothin.github.io/UserScripts/Pagetual/pagetualRules.json"; customUrlsInput.spellcheck = false; - configCon.insertBefore(customUrlsInput, insertPos); + configCon.appendChild(customUrlsInput); let btns = document.createElement("div"); btns.style.display = "flex"; - configCon.insertBefore(btns, insertPos); + configCon.appendChild(btns); let upBtnImg = document.createElement("div"); upBtnImg.style.width = "33%"; let upBtnImgTitle = document.createElement("h2"); @@ -5401,7 +5407,7 @@ let otherBtns = document.createElement("div"); otherBtns.style.display = "flex"; - configCon.insertBefore(otherBtns, insertPos); + configCon.appendChild(otherBtns); let loadingText = document.createElement("div"); loadingText.style.width = "100%"; let loadingTextTitle = document.createElement("h2"); @@ -5455,7 +5461,7 @@ pageElementCssInput.placeholder = "font-size: xx-large;"; pageElementCssInput.spellcheck = false; pageElementCss.appendChild(pageElementCssInput); - configCon.insertBefore(pageElementCss, insertPos); + configCon.appendChild(pageElementCss); let customCss = document.createElement("div"); customCss.style.marginBottom = "50px"; @@ -5470,7 +5476,7 @@ customCssInput.placeholder = ".pagetual {\n}"; customCssInput.spellcheck = false; customCss.appendChild(customCssInput); - configCon.insertBefore(customCss, insertPos); + configCon.appendChild(customCss); let configTable = document.createElement("table"); configTable.style.width = "100%"; @@ -5478,7 +5484,7 @@ configTbody.style.width = "99%"; configTbody.style.display = "inline-table"; configTable.appendChild(configTbody); - configCon.insertBefore(configTable, insertPos); + configCon.appendChild(configTable); function createCheckbox(innerText, val, tag, parentCheck, otherType, alwaysShow) { if (typeof val == 'undefined') val = ""; let title = document.createElement(tag || "h3"); @@ -5627,10 +5633,10 @@ }; let customRulesTitle = document.createElement("h2"); customRulesTitle.innerHTML = i18n("customRules", /tree/.test(location.href) ? location.href.replace('tree', 'edit').replace(/\/$/, '') + '/pagetualRules.json' : 'https://github.com/hoothin/UserScripts/edit/master/Pagetual/pagetualRules.json'); - configCon.insertBefore(customRulesTitle, insertPos); + configCon.appendChild(customRulesTitle); let customRulesInput = document.createElement("textarea"); customRulesInput.spellcheck = false; - configCon.insertBefore(customRulesInput, insertPos); + configCon.appendChild(customRulesInput); if (rulesData.editTemp) { if (!ruleParser.customRules) { ruleParser.customRules = []; @@ -5665,12 +5671,12 @@ blacklistBtn.onclick = e => { blacklistInput.style.display = blacklistInput.style.display == "none" ? "" : "none"; }; - configCon.insertBefore(blacklistBtn, insertPos); - configCon.insertBefore(blacklistInput, insertPos); + configCon.appendChild(blacklistBtn); + configCon.appendChild(blacklistInput); let saveBtn = document.createElement("button"); saveBtn.innerHTML = i18n("save"); saveBtn.id = "saveBtn"; - configCon.insertBefore(saveBtn, insertPos); + configCon.appendChild(saveBtn); saveBtn.onclick = e => { try { let customRules; From 13d39a274ad3aa401713acf09db53ce13ae75973 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 7 Dec 2023 15:26:01 +0800 Subject: [PATCH 522/812] Update README.md --- DownloadAllContent/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index ae228d85675..967b562e47f 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -91,9 +91,9 @@ a.btn_L_blue>>let a=document.createElement("a");a.innerText=item.parentNode.parentNode.querySelector('.l_chaptname').innerText;a.href=item.href;return a;@@articles@@articlescontent ``` + [📕pixiv](https://www.pixiv.net/novel/series/7807554) -> p站小說的章節選擇器為`main>section ul>li>div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta裡,需要自定義代碼提取meta-preload數據的content項。其中 "doc" 代表抓取網頁的document對象,若返回的是純文本,則用 `doc.body.innerText` 獲取。 +> p站小說的章節選擇器為`main>section ul>li div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta裡,需要自定義代碼提取meta-preload數據的content項。其中 "doc" 代表抓取網頁的document對象,若返回的是純文本,則用 `doc.body.innerText` 獲取。 ``` javascript -main>section ul>li>div>a @@@@@@ var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content; +main>section ul>li div>a @@@@@@ var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content; ``` + [📕紅薯中文網](https://g.hongshu.com/chapterlist/91735.do) > 這個站沒有目錄連結,此時可以遍歷標籤自己創建目錄連結下載 From cb7dd9dcd65cc3c7a411ae6b871b15483f7d42d4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 7 Dec 2023 19:44:30 +0800 Subject: [PATCH 523/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 138 +++++++++++++++++++----------- 1 file changed, 87 insertions(+), 51 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5b3e7ed0d63..ae898e62350 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.48 +// @version 1.7.49 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -5206,23 +5206,19 @@ this.siteBtnReturnHome(btn); });*/ this.touched = false; - if (currentSite && !currentSite.hideNotMatch) { - this.initPos(); - if (!searchData.prefConfig.disableAutoOpen && !searchData.prefConfig.disableTypeOpen) { - let firstType = this.bar.querySelector('.search-jumper-type:nth-child(1)>span'); - if (firstType && !firstType.classList.contains("search-jumper-open")) { - if (firstType.onmousedown) { - firstType.onmousedown(); - } else { - let mouseEvent = new PointerEvent("mousedown"); - firstType.dispatchEvent(mouseEvent); - } + this.initPos(); + if (!searchData.prefConfig.disableAutoOpen && !searchData.prefConfig.disableTypeOpen) { + let firstType = this.bar.querySelector('.search-jumper-type:nth-child(1)>span'); + if (firstType && !firstType.classList.contains("search-jumper-open")) { + if (firstType.onmousedown) { + firstType.onmousedown(); + } else { + let mouseEvent = new PointerEvent("mousedown"); + firstType.dispatchEvent(mouseEvent); } } - this.bar.style.display = '' - } else { - this.bar.style.display = 'none'; } + this.bar.style.display = '' } showAllSites() { @@ -6844,7 +6840,6 @@ } insertHistory(typeEle, init) { - //if (searchData.prefConfig.disableAutoOpen) return; if (!searchData.prefConfig.historyLength) return; typeEle.style.width = "auto"; typeEle.style.height = "auto"; @@ -9386,12 +9381,13 @@ let viewWidth = window.innerWidth || document.documentElement.clientWidth; let scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; let viewHeight = window.innerHeight || document.documentElement.clientHeight; + let tileOffset = searchData.prefConfig.tileOffset || 0; let clientX = e.pageX - self.bar.clientWidth / 2 - document.documentElement.offsetLeft; if (clientX < 0) clientX = 5; else if (clientX + self.bar.clientWidth > viewWidth + scrollLeft) clientX = viewWidth + scrollLeft - self.bar.clientWidth - 20; let clientY = e.pageY; - if (e.clientY > viewHeight / 5) clientY -= (self.bar.clientHeight + 20); - else clientY += 20; + if (e.clientY > viewHeight / 5) clientY -= (self.bar.clientHeight + 20 + tileOffset); + else clientY += (20 + tileOffset); if (e.pageX < viewWidth / 2) { self.bar.style.left = clientX + scrollLeft + "px"; self.bar.style.transformOrigin = '0 0'; @@ -11296,16 +11292,60 @@ _GM_notification('Configuration copied successfully!'); }); } else if (importPageReg.test(location.href)) { + let importCss = _GM_addStyle(` + #import-btns-con { + position: absolute; + display: block; + font-size: 20px; + left: 0px; + opacity: 0.9; + top: 0px; + width: 100%; + height: 100%; + } + #import-btns-con.hide { + pointer-events: none; + } + #import-btn { + position: absolute; + display: block; + font-size: 20px; + right: 45px; + opacity: 0.8; + top: 45px; + pointer-events: all; + } + #filter-btn { + position: absolute; + display: none; + font-size: 20px; + right: 115px; + opacity: 0.8; + top: 45px; + pointer-events: all; + } + .filter>#filter-btn { + display: block; + } + `); let targetPre, ruleType = 0; let importBtn = document.createElement("button"); + importBtn.id = "import-btn"; + importBtn.className = "btn Button--secondary Button"; let filterBtn = document.createElement("button"); + filterBtn.id = "filter-btn"; + filterBtn.className = "btn Button--secondary Button"; + let btnsCon = document.createElement("div"); + btnsCon.id = "import-btns-con"; + btnsCon.appendChild(importCss); + btnsCon.appendChild(importBtn); + btnsCon.appendChild(filterBtn); + btnsCon.addEventListener("click", e => { + if (targetPre) targetPre.style.filter = ""; + btnsCon.classList.add("hide"); + }); const importFilter = new ImportFilter(); importBtn.innerText = i18n("import"); - importBtn.style.position = "absolute"; - importBtn.style.display = "block"; - importBtn.style.fontSize = "20px"; - importBtn.style.right = "35px"; - importBtn.style.opacity = "0.8"; importBtn.addEventListener("click", e => { if (!targetPre) return; let configTxt = targetPre.innerText.trim(), configData; @@ -11319,9 +11359,8 @@ switch (ruleType) { case 0: if (window.confirm(i18n("importOrNot"))) { - if (importBtn.parentNode) { - importBtn.parentNode.removeChild(importBtn); - filterBtn.parentNode.removeChild(filterBtn); + if (btnsCon.parentNode) { + btnsCon.parentNode.removeChild(btnsCon); } searchData.sitesConfig = configData; searchData.lastModified = new Date().getTime(); @@ -11364,16 +11403,10 @@ }); filterBtn.innerText = i18n("filter"); - filterBtn.style.position = "absolute"; - filterBtn.style.display = "block"; - filterBtn.style.fontSize = "20px"; - filterBtn.style.right = "115px"; - filterBtn.style.opacity = "0.8"; filterBtn.addEventListener("click", e => { if (targetPre) { - if (importBtn.parentNode) { - importBtn.parentNode.removeChild(importBtn); - filterBtn.parentNode.removeChild(filterBtn); + if (btnsCon.parentNode) { + btnsCon.parentNode.removeChild(btnsCon); } let configTxt = targetPre.innerText.trim(), configData; if (!configTxt || configTxt.indexOf('[') !== 0) return; @@ -11385,39 +11418,42 @@ } } }); - let bindPre = () => { - let top = `${targetPre.offsetTop + 40}px`; - let innerText = targetPre.innerText.trim(); + let bindPre = target => { + if (target == targetPre && btnsCon.parentNode) return; + let top = target.offsetTop + 'px'; + let innerText = target.innerText.trim(); if (!innerText) return; if (/^\[/.test(innerText)) { ruleType = 0; - importBtn.style.top = top; - targetPre.parentNode.appendChild(importBtn); - filterBtn.style.top = top; - targetPre.parentNode.appendChild(filterBtn); + btnsCon.style.top = top; + btnsCon.classList.add("filter"); } else if (/^\{\s*"name"/.test(innerText)) { ruleType = 1; - importBtn.style.top = top; - targetPre.parentNode.appendChild(importBtn); + btnsCon.style.top = top; + btnsCon.classList.remove("filter"); } else if (/^\{/.test(innerText)) { ruleType = 2; - importBtn.style.top = top; - targetPre.parentNode.appendChild(importBtn); - } + btnsCon.style.top = top; + btnsCon.classList.remove("filter"); + } else return; + if (targetPre) targetPre.style.filter = ""; + target.parentNode.appendChild(btnsCon); + target.style.filter = "blur(5px)"; + targetPre = target; + btnsCon.classList.remove("hide"); }; window.addEventListener("load", e => { if (!targetPre) { - targetPre = document.querySelector('.highlight>pre'); - if (targetPre) { - bindPre(); + let _targetPre = document.querySelector('.highlight>pre'); + if (_targetPre) { + bindPre(_targetPre); } } }); document.addEventListener("mouseover", e => { if (e.target.nodeName.toUpperCase() === "PRE" && importPageReg.test(location.href)) { - targetPre = e.target; - bindPre(); + bindPre(e.target); } }); } From 899ef3fb1c0e0876019f5b4d7e75bfb5855f4ae5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 7 Dec 2023 22:31:24 +0800 Subject: [PATCH 524/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 99 ++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ae898e62350..7cfe73fb537 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.49 +// @version 1.7.50 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1543,6 +1543,95 @@ right: 0; font-size: 2vw; } + #search-jumper-alllist>.modeSwitch { + position: fixed; + top: 5px; + right: 5px; + width: 45px; + height: 45px; + border-radius: 50%; + box-shadow: 0px 0px 5px 0px #7a7a7a; + cursor: pointer; + transition: transform 0.25s ease; + } + #search-jumper-alllist>.modeSwitch:hover { + transform: scale(1.1); + } + #search-jumper-alllist.new-mode { + overflow-x: hidden; + overflow-y: auto; + } + #search-jumper-alllist.new-mode>.sitelistBox { + flex-wrap: wrap; + flex-direction: column; + align-items: center; + } + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { + width: 80%; + max-height: unset; + } + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon { + display: flex; + flex-wrap: wrap; + } + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon>p { + text-align: left; + font-size: large; + padding: 15px 30px; + display: table-caption; + width: 100%; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a { + width: 250px; + height: 100px; + display: block!important; + padding: 16px 8%; + box-sizing: border-box; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div { + padding: 10px; + transition: transform 0.25s ease, box-shadow 0.25s ease; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:hover { + transform: translateY(-6px); + -webkit-transform: translateY(-6px); + -moz-transform: translateY(-6px); + box-shadow: 0px 5px 28px 0px rgba(65, 106, 123, 0.2); + } + #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:after { + content: attr(title); + margin-left: 41px; + color: #abb0bd; + font-size: 12px; + height: 3em; + line-height: 1.5em; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + margin-left: 61px; + margin-top: -50px; + width: 200px; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a>img { + width: 32px; + height: 32px; + float: left; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a>p { + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + display: block; + font-size: 16px; + height: 21px; + line-height: 21px; + margin-bottom: 8px; + margin-top: 3px; + margin-left: 40px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } .search-jumper-searchBarCon { all: unset; position: fixed; @@ -2997,6 +3086,14 @@ alllist.appendChild(timeInAll); this.timeInAll = timeInAll; + this.modeSwitch = document.createElement("div"); + this.modeSwitch.className = "modeSwitch"; + this.modeSwitch.innerHTML = createHTML(``); + alllist.appendChild(this.modeSwitch); + this.modeSwitch.addEventListener("click", e => { + alllist.classList.toggle("new-mode"); + }); + let dayInAll = document.createElement("span"); dayInAll.className = "dayInAll"; alllist.appendChild(dayInAll); From 508fedae2cbc7ef86765600da7dc3d0914b9a9e2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 8 Dec 2023 15:23:32 +0800 Subject: [PATCH 525/812] 1.9.37.2 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 2f0689dc9d0..94ff3400c47 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.1](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.2](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index b55aa4cb241..95c3d18c244 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.1 +// @version 1.9.37.2 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1697,7 +1697,7 @@ let paStyle = curWin.getComputedStyle(ele.parentNode); let paDisplay = paStyle.display; let paOverflow = paStyle.overflow; - pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; + pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row" && paStyle.flexWrap !== "wrap") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; } let curStyle = curWin.getComputedStyle(ele); if (ele.children.length > 1) { @@ -1717,7 +1717,7 @@ return ">*"; } else { let middleChild = ele.children[parseInt(ele.children.length / 2)]; - if ((curStyle.display === 'flex' && curStyle.flexDirection == "row") || (curStyle.float == "none" && rulesData.opacity != 0 && !pf)) { + if ((curStyle.display === 'flex' && curStyle.flexDirection == "row" && curStyle.flexWrap !== "wrap") || (curStyle.float == "none" && rulesData.opacity != 0 && !pf)) { return ""; } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight == 0) { return ""; @@ -1968,8 +1968,7 @@ debug(ele, "Angular root"); return null; } - if (ele.parentNode.children.length == 1 && curWin.getComputedStyle(ele.parentNode).float == 'none') ele = ele.parentNode; - else if (compareNodeName(ele, ["p", "br", "td"])) ele = ele.parentNode; + if (compareNodeName(ele, ["p", "br", "td"])) ele = ele.parentNode; else if (compareNodeName(ele, ["tbody"])) { self.curSiteRule.pageElement = geneSelector(ele) + ">*"; if (ele.children.length > 0 && ele.children[0].querySelector("th")) { From 1b2caa1ac15f7b8af2c5d165ab2fdc5ae535ce0f Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 9 Dec 2023 01:52:20 +0000 Subject: [PATCH 526/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 8c8fe5ad7b2..59a073e5518 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86194", + "data": { + "insertBefore": "", + "pageElement": "//ul[@class='boxContentList']/li", + "nextLink": "//link[@rel='next']", + "url": "^https://www\\.dmm\\.co(?:m|\\.jp)/mono/[^/]+/-/special/", + "exampleUrl": "https://www.dmm.co.jp/mono/figure/-/special/=/id=156/page=2/ https://www.dmm.com/mono/dvd/-/special/=/id=166/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "DMM/Fanza 通販 特集", + "created_at": "2023-12-09T00:05:09+09:00", + "updated_at": "2023-12-09T00:05:09+09:00" +}, { "resource_url": "http://wedata.net/items/86193", "data": { From 2566152e3d26a3608b5967cc3310a50bb8e5666b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 9 Dec 2023 09:56:08 +0800 Subject: [PATCH 527/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 222 ++++++++++++++++++++++++++++-- 1 file changed, 209 insertions(+), 13 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 7cfe73fb537..54e61bbc6f0 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -49,6 +49,8 @@ // @connect suggestqueries.google.com // @connect api.bing.com // @connect suggestion.baidu.com +// @connect webdav.hoothin.com +// @connect search.hoothin.com // @connect * // @run-at document-start // ==/UserScript== @@ -965,6 +967,123 @@ this.setItem(list, listData); } }; + + class WebDAV { + constructor(webDAVUrl, username, password) { + this.webDAVUrl = webDAVUrl; + this.username = username; + this.password = password; + } + + init() { + if (this.inited) return; + this.inited = true; + this.auth = btoa(`${this.username}:${this.password}`); + } + + request(action, data, url, type, callback, headers) { + this.init(); + let _headers = { + referer: url, + origin: url, + "Content-Type": "text/xml; charset=UTF-8", + "Authorization": `Basic ${this.auth}` + }; + for (let header in headers) { + _headers[header] = headers[header]; + } + _GM_xmlhttpRequest({ + method: action, + url: url, + data: data, + headers: _headers, + onload: function(d) { + let response = d.response; + if (d.status >= 400 || !response) response = ""; + if (type == 'xml') { + var xml = d.responseXML; + if(xml) { + response = xml.firstChild.nextSibling ? xml.firstChild.nextSibling : xml.firstChild; + } + } + callback && callback(response); + }, + onerror: function(e) { + debug(e); + callback && callback(e); + }, + ontimeout: function(e) { + debug(e); + callback && callback(e); + } + }); + } + + GET(url, callback) { + return this.request('GET', null, url, 'text', callback, {}); + } + + PROPFIND(url, callback) { + return this.request('PROPFIND', null, url, 'xml', callback, {Depth: "1"}); + } + + MKCOL(url, callback) { + return this.request('MKCOL', null, url, 'text', callback, {}); + } + + DELETE(url, callback) { + return this.request('DELETE', null, url, 'text', callback, {}); + } + + PUT(url, data, callback) { + return this.request('PUT', data, url, 'text', callback, {}); + } + + async read(path) { + let self = this; + return new Promise((resolve) => { + self.GET(self.webDAVUrl + path, resolve); + }); + } + + async write(path, data) { + let self = this; + return new Promise((resolve) => { + self.PUT(self.webDAVUrl + path, data, resolve); + }); + } + + async rm(path) { + let self = this; + return new Promise((resolve) => { + self.DELETE(self.webDAVUrl + path, resolve); + }); + } + } + async function dataChanged(addSite, addInPage) { + if (!webDAV) return; + let lastModified = await webDAV.read("/SearchJumper/lastModified"); + if (lastModified) { + lastModified = parseFloat(lastModified); + } + if (lastModified && (!searchData.lastModified || lastModified > searchData.lastModified)) { + searchData.lastModified = lastModified; + let sitesConfig = await webDAV.read("/sitesConfig.json"); + if (sitesConfig) { + sitesConfig = JSON.parse(sitesConfig); + searchData.sitesConfig = sitesConfig; + } + + let inPageRule = await webDAV.read("/inPageRule.json"); + if (inPageRule) { + inPageRule = JSON.parse(inPageRule); + searchData.prefConfig.inPageRule = inPageRule; + } + } + storage.setItem("searchData", searchData); + } + //dataChanged(); + var escapeHTMLPolicy; if (_unsafeWindow.trustedTypes && _unsafeWindow.trustedTypes.createPolicy) { escapeHTMLPolicy = _unsafeWindow.trustedTypes.createPolicy('searchjumper_default', { @@ -1188,7 +1307,7 @@ setTimeout( checkReady, 100 ); } - var logoBtn, searchBar, searchTypes = [], currentSite = false, cacheKeywords, tipsStorage, localKeywords, lastSign, inPagePostParams, cacheIcon, historySites, historyType, sortTypeNames, sortSiteNames, cachePool = [], cacheFontPool = [], currentFormParams, globalInPageWords, navEnable, referrer, disableHighlight, lastAddType; + var logoBtn, searchBar, searchTypes = [], currentSite = false, cacheKeywords, tipsStorage, localKeywords, lastSign, inPagePostParams, cacheIcon, historySites, historyType, sortTypeNames, sortSiteNames, cachePool = [], cacheFontPool = [], currentFormParams, globalInPageWords, navEnable, referrer, disableHighlight, lastAddType, allPageNewMode = false; const logoBtnSvg = `${_GM_info.script.name}`; const logoBase64 = "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic2VhcmNoLWp1bXBlci1sb2dvQnRuU3ZnIiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0uNzM2IDUxMC40NjRjMC0yODEuOTQyIDIyOC4zMzUtNTEwLjUgNTEwLTUxMC41IDEzNS4yNiAwIDI2NC45ODEgNTMuNzg0IDM2MC42MjUgMTQ5LjUyMiA5NS42NDMgOTUuNzM3IDE0OS4zNzUgMjI1LjU4NSAxNDkuMzc1IDM2MC45NzggMCAyODEuOTQtMjI4LjMzNSA1MTAuNS01MTAgNTEwLjUtMjgxLjY2NSAwLTUxMC0yMjguNTYtNTEwLTUxMC41em01MTAtNTEwLjV2MTAyMW0tNTEwLTUxMC41aDEwMjAiIGZpbGw9IiNmZWZlZmUiLz48cGF0aCBkPSJNMjM3LjQ0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek02OTkuOTA0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek00MjMuMjk2IDc1OS4yOTZjLTY0IDAtMTE1LjcxMi01Mi4yMjQtMTE1LjcxMi0xMTUuNzEyIDAtMjYuNjI0IDkuMjE2LTUyLjIyNCAyNS42LTcyLjcwNCA5LjIxNi0xMS43NzYgMjYuMTEyLTEzLjMxMiAzNy44ODgtNC4wOTZzMTMuMzEyIDI2LjExMiA0LjA5NiAzNy44ODhjLTkuMjE2IDExLjI2NC0xMy44MjQgMjQuNTc2LTEzLjgyNCAzOC45MTIgMCAzNC4zMDQgMjcuNjQ4IDYxLjk1MiA2MS45NTIgNjEuOTUyczYxLjk1Mi0yNy42NDggNjEuOTUyLTYxLjk1MmMwLTQuMDk2LS41MTItOC4xOTItMS4wMjQtMTEuNzc2LTIuNTYtMTQuODQ4IDYuNjU2LTI4LjY3MiAyMS41MDQtMzEuNzQ0IDE0Ljg0OC0yLjU2IDI4LjY3MiA2LjY1NiAzMS43NDQgMjEuNTA0IDEuNTM2IDcuMTY4IDIuMDQ4IDE0LjMzNiAyLjA0OCAyMi4wMTYtLjUxMiA2My40ODgtNTIuMjI0IDExNS43MTItMTE2LjIyNCAxMTUuNzEyeiIgZmlsbD0iIzMzMyIvPjxwYXRoIGQ9Ik02MDIuMDggNzYwLjI5NmMtNjQgMC0xMTUuNzEyLTUyLjIyNC0xMTUuNzEyLTExNS43MTIgMC0xNC44NDggMTIuMjg4LTI3LjEzNiAyNy4xMzYtMjcuMTM2czI3LjEzNiAxMi4yODggMjcuMTM2IDI3LjEzNmMwIDM0LjMwNCAyNy42NDggNjEuOTUyIDYxLjk1MiA2MS45NTJzNjEuOTUyLTI3LjY0OCA2MS45NTItNjEuOTUyYzAtMTUuMzYtNS42MzItMzAuMjA4LTE1Ljg3Mi00MS40NzItOS43MjgtMTEuMjY0LTkuMjE2LTI4LjE2IDIuMDQ4LTM3Ljg4OCAxMS4yNjQtOS43MjggMjguMTYtOS4yMTYgMzcuODg4IDIuMDQ4IDE5LjQ1NiAyMS41MDQgMjkuNjk2IDQ4LjY0IDI5LjY5NiA3Ny44MjQgMCA2Mi45NzYtNTIuMjI0IDExNS4yLTExNi4yMjQgMTE1LjJ6IiBmaWxsPSIjMzMzIi8+PGVsbGlwc2Ugcnk9IjU4IiByeD0iMTI1IiBjeT0iNTA2LjI4NCIgY3g9IjIwMS4xODMiIGZpbGw9IiNmYWYiLz48ZWxsaXBzZSByeT0iNTgiIHJ4PSIxMjUiIGN5PSI1MDYuMjg0IiBjeD0iODIzLjE4MyIgZmlsbD0iI2ZhZiIvPjwvc3ZnPg=="; const noImgBase64 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDI5LjAxMzMzMyA2NDBBMzIgMzIgMCAwIDEgMzg0IDU5NC45ODY2NjdsMzcuNzYtMzcuNzYtMjIuODI2NjY3LTIyLjYxMzMzNC0xMzUuNjggMTM1LjY4IDkwLjQ1MzMzNCA5MC40NTMzMzQgMTM1LjY4LTEzNS42OC0yMi42MTMzMzQtMjIuNjEzMzM0ek01MzQuNjEzMzMzIDM5OC45MzMzMzNsMjIuNjEzMzM0IDIyLjYxMzMzNEw1OTQuOTg2NjY3IDM4NEEzMiAzMiAwIDAgMSA2NDAgNDI5LjAxMzMzM2wtMzcuNzYgMzcuNzYgMjIuNjEzMzMzIDIyLjYxMzMzNCAxMzUuNjgtMTM1LjY4LTkwLjQ1MzMzMy05MC40NTMzMzR6IiBmaWxsPSIjNUU1QzVDIj48L3BhdGg+PHBhdGggZD0iTTUxMiAyMS4zMzMzMzNhNDkwLjY2NjY2NyA0OTAuNjY2NjY3IDAgMSAwIDQ5MC42NjY2NjcgNDkwLjY2NjY2N0E0OTAuNjY2NjY3IDQ5MC42NjY2NjcgMCAwIDAgNTEyIDIxLjMzMzMzM3ogbTMxNi44IDM1NC45ODY2NjdsLTE4MS4xMiAxODEuMTJhMzIgMzIgMCAwIDEtNDUuMjI2NjY3IDBMNTU3LjIyNjY2NyA1MTIgNTEyIDU1Ny4yMjY2NjdsNDUuMjI2NjY3IDQ1LjIyNjY2NmEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N2wtMTgxLjEyIDE4MS4xMmEzMiAzMiAwIDAgMS00NS4yMjY2NjcgMGwtMTM1LjY4LTEzNS42OGEzMiAzMiAwIDAgMSAwLTQ1LjIyNjY2N2wxODEuMTItMTgxLjEyYTMyIDMyIDAgMCAxIDQ1LjIyNjY2NyAwTDQ2Ni43NzMzMzMgNTEyIDUxMiA0NjYuNzczMzMzbC00NS4yMjY2NjctNDUuMjI2NjY2YTMyIDMyIDAgMCAxIDAtNDUuMjI2NjY3bDE4MS4xMi0xODEuMTJhMzIgMzIgMCAwIDEgNDUuMjI2NjY3IDBsMTM1LjY4IDEzNS42OGEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N3oiIGZpbGw9IiM1RTVDNUMiPjwvcGF0aD4KPC9zdmc+"; @@ -1353,6 +1472,7 @@ class SearchBar { constructor() { + let self = this; this.scale = searchData.prefConfig.customSize / 100; this.tilesZoom = searchData.prefConfig.tilesZoom / 100; this.tipsZoom = searchData.prefConfig.tipsZoom / 100; @@ -1423,7 +1543,7 @@ position: static; display: block!important; height: fit-content; - max-height: calc(100vh - 120px); + max-height: calc(100vh - 130px); overscroll-behavior: contain; -ms-scroll-chaining: contain; } @@ -1447,12 +1567,12 @@ } #search-jumper-alllist { display: none; - top: 101px; + top: 118px; position: absolute; width: 100%; overflow-x: scroll; overflow-y: hidden; - height: calc(100% - 101px); + height: calc(100% - 118px); overscroll-behavior: contain; -ms-scroll-chaining: contain; } @@ -1565,6 +1685,7 @@ flex-wrap: wrap; flex-direction: column; align-items: center; + justify-content: flex-start; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { width: 80%; @@ -1577,7 +1698,7 @@ #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon>p { text-align: left; font-size: large; - padding: 15px 30px; + padding: 10px 30px; display: table-caption; width: 100%; } @@ -1585,11 +1706,14 @@ width: 250px; height: 100px; display: block!important; - padding: 16px 8%; + padding: 10px 8%; box-sizing: border-box; } + #search-jumper.search-jumper-showall.searching #search-jumper-alllist.new-mode .sitelist>.sitelistCon a { + display: block!important; + } #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div { - padding: 10px; + padding: 0 10px; transition: transform 0.25s ease, box-shadow 0.25s ease; } #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:hover { @@ -1598,7 +1722,7 @@ -moz-transform: translateY(-6px); box-shadow: 0px 5px 28px 0px rgba(65, 106, 123, 0.2); } - #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:after { + #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:before { content: attr(title); margin-left: 41px; color: #abb0bd; @@ -1609,9 +1733,11 @@ display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; - margin-left: 61px; - margin-top: -50px; - width: 200px; + margin-left: 63px; + margin-top: 30px; + width: 190px; + position: absolute; + pointer-events: none; } #search-jumper #search-jumper-alllist.new-mode .sitelist a>img { width: 32px; @@ -1632,6 +1758,39 @@ text-overflow: ellipsis; white-space: nowrap; } + #search-jumper .sitelist a+p { + display: none; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a+p { + position: absolute; + margin-top: -33px; + color: white; + width: 250px; + display: flex; + justify-content: space-evenly; + overflow: hidden; + opacity: 0; + transition: .3s; + border-top: 1px solid rgba(136,136,136,.2); + padding-top: 3px; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a+p>span { + flex-shrink: 0; + font-size: 14px; + padding: 2px 6px; + background: rgb(160 160 160 / 10%); + color: #888; + border-radius: 10px; + transition: .3s; + cursor: pointer; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a+p>span:hover { + color: white; + background: rgb(160 160 160 / 30%); + } + #search-jumper #search-jumper-alllist.new-mode .sitelistCon>div:hover>p { + opacity: 1; + } .search-jumper-searchBarCon { all: unset; position: fixed; @@ -2908,6 +3067,7 @@ line-height: 32px; min-width: auto; min-height: auto; + flex-shrink: 0; } .search-jumper-historylist>a.search-jumper-btn>img { width: 32px; @@ -3080,6 +3240,31 @@ sitelistBox.className = "sitelistBox"; alllist.appendChild(sitelistBox); this.sitelistBox = sitelistBox; + const tagReg = /#[^\s#]+/g; + sitelistBox.addEventListener("mouseover", e => { + if (!alllist.classList.contains("new-mode")) return; + let target = e.target; + if (target.parentNode && target.parentNode.dataset.name) { + target = target.parentNode; + } + let title = target.title; + if (!target.dataset.name || !title || target.initedTag) return; + let tags = document.createElement("p"); + let tagMatch = title.match(tagReg); + if (tagMatch) { + tagMatch.forEach(tag => { + let tagEle = document.createElement("span"); + tagEle.innerText = tag.slice(1); + tagEle.addEventListener("click", e => { + self.searchInput.value = tag; + self.searchInput.dispatchEvent(new CustomEvent("input")); + }); + tags.appendChild(tagEle); + }); + target.appendChild(tags); + } + target.initedTag = true; + }) let timeInAll = document.createElement("span"); timeInAll.className = "timeInAll"; @@ -3092,7 +3277,9 @@ alllist.appendChild(this.modeSwitch); this.modeSwitch.addEventListener("click", e => { alllist.classList.toggle("new-mode"); + storage.setItem("allPageNewMode", alllist.classList.contains("new-mode")); }); + if (allPageNewMode) alllist.classList.add("new-mode"); let dayInAll = document.createElement("span"); dayInAll.className = "dayInAll"; @@ -3101,6 +3288,7 @@ alllist.addEventListener(getSupportWheelEventName(), e => { if (e.target != alllist && e.target != showallBg && e.target != sitelistBox) return; + if (alllist.classList.contains("new-mode")) return; var deltaX, deltaY; if(e.type !== 'wheel'){ var x = 0, y = 0; @@ -5297,6 +5485,7 @@ document.removeEventListener("mousedown", self.showAllMouseHandler); document.removeEventListener("keydown", self.showAllKeydownHandler); this.con.classList.remove("search-jumper-showall"); + document.documentElement.style.overflow = this.preOverflow; this.searchJumperInputKeyWords.value = ""; this.historylist.innerHTML = createHTML(); /*this.historySiteBtns.slice(0, 10).forEach(btn => { @@ -5328,6 +5517,8 @@ this.setFuncKeyCall(false); this.hideSearchInput(); this.con.classList.add("search-jumper-showall"); + this.preOverflow = document.documentElement.style.overflow || ""; + document.documentElement.style.overflow = "hidden"; clearInterval(this.showAllTimeTimer); const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; if (window.innerWidth < 1000) { @@ -5363,7 +5554,7 @@ } } }); - this.historySiteBtns.slice(0, 10).forEach(btn => { + this.historySiteBtns.slice(0, 20).forEach(btn => { let siteImg = btn.querySelector('img'); if (siteImg && siteImg.dataset.src) { siteImg.src = siteImg.dataset.src; @@ -8061,7 +8252,7 @@ let isPage = /^(https?|ftp):/.test(data.url); if (isPage) ele.dataset.isPage = isPage; ele.className = "search-jumper-btn"; - if (typeof description !== 'undefined') ele.title = name + " - " + description; + if (typeof description !== 'undefined') ele.title = description; ele.dataset.name = name; ele.classList.add("search-jumper-word"); ele.dataset.inPagePost = (data.url.indexOf("#p{") != -1) ? 't' : 'f'; @@ -13325,6 +13516,11 @@ resolve(data || ""); }); }); + allPageNewMode = await new Promise((resolve) => { + storage.getItem("allPageNewMode", data => { + resolve(data || false); + }); + }); lastAddType = await new Promise((resolve) => { storage.getItem("lastAddType", data => { resolve(data || ""); From 1e9c9cf5ecfded3f74c43a8832f4ffc0d5e8b796 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 9 Dec 2023 11:05:40 +0800 Subject: [PATCH 528/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 234 ++++++++++++++++-------------- 1 file changed, 129 insertions(+), 105 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 54e61bbc6f0..5bfbbb4ef4b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1060,29 +1060,42 @@ }); } } - async function dataChanged(addSite, addInPage) { - if (!webDAV) return; - let lastModified = await webDAV.read("/SearchJumper/lastModified"); - if (lastModified) { - lastModified = parseFloat(lastModified); - } - if (lastModified && (!searchData.lastModified || lastModified > searchData.lastModified)) { - searchData.lastModified = lastModified; - let sitesConfig = await webDAV.read("/sitesConfig.json"); - if (sitesConfig) { - sitesConfig = JSON.parse(sitesConfig); - searchData.sitesConfig = sitesConfig; - } + var webDAV; + async function dataChanged(callback, override) { + if (!webDAV) return callback && callback(); + if (!override) { + let lastModified = await webDAV.read("lastModified"); + if (lastModified) { + lastModified = parseFloat(lastModified); + } + if (lastModified && (!searchData.lastModified || lastModified > searchData.lastModified)) { + searchData.lastModified = lastModified; + let sitesConfig = await webDAV.read("sitesConfig.json"); + if (sitesConfig) { + try { + sitesConfig = JSON.parse(sitesConfig); + searchData.sitesConfig = sitesConfig; + } catch (e) { + debug(e); + } + } - let inPageRule = await webDAV.read("/inPageRule.json"); - if (inPageRule) { - inPageRule = JSON.parse(inPageRule); - searchData.prefConfig.inPageRule = inPageRule; + let inPageRule = await webDAV.read("inPageRule.json"); + if (inPageRule) { + try { + inPageRule = JSON.parse(inPageRule); + searchData.prefConfig.inPageRule = inPageRule; + } catch (e) { + debug(e); + } + } } } - storage.setItem("searchData", searchData); + callback && callback(); + await webDAV.write("lastModified", "" + searchData.lastModified); + await webDAV.write("sitesConfig.json", JSON.stringify(searchData.sitesConfig)); + await webDAV.write("inPageRule.json", JSON.stringify(searchData.prefConfig.inPageRule)); } - //dataChanged(); var escapeHTMLPolicy; if (_unsafeWindow.trustedTypes && _unsafeWindow.trustedTypes.createPolicy) { @@ -6061,12 +6074,14 @@ }); this.saveRuleBtn.addEventListener("click", e => { if (!this.lockWords) return; - let inPageRule = searchData.prefConfig.inPageRule || {}; - inPageRule[this.inPageRuleKey || location.href.replace(/([&\?]_i=|#).*/, "")] = this.lockWords; - searchData.prefConfig.inPageRule = inPageRule; - searchData.lastModified = new Date().getTime(); - storage.setItem("searchData", searchData); - _GM_notification(i18n("save completed")); + dataChanged(() => { + let inPageRule = searchData.prefConfig.inPageRule || {}; + inPageRule[this.inPageRuleKey || location.href.replace(/([&\?]_i=|#).*/, "")] = this.lockWords; + searchData.prefConfig.inPageRule = inPageRule; + searchData.lastModified = new Date().getTime(); + storage.setItem("searchData", searchData); + _GM_notification(i18n("save completed")); + }); }); this.emptyBtn.addEventListener("click", e => { this.lockWords = ""; @@ -11650,10 +11665,12 @@ if (btnsCon.parentNode) { btnsCon.parentNode.removeChild(btnsCon); } - searchData.sitesConfig = configData; - searchData.lastModified = new Date().getTime(); - storage.setItem("searchData", searchData); - _GM_notification('Over!'); + dataChanged(() => { + searchData.sitesConfig = configData; + searchData.lastModified = new Date().getTime(); + storage.setItem("searchData", searchData); + _GM_notification('Over!'); + }, true); } break; case 1: @@ -11926,41 +11943,43 @@ }); }); add.addEventListener("click", e => { - let canImport = false; - [].forEach.call(this.filterFrame.querySelectorAll("details"), details => { - let typeName = details.children[0].children[0]; - let typeData = self.typeDict[typeName.title]; - typeData.type = typeName.innerText.trim(); - typeData.sites = []; - [].forEach.call(details.querySelectorAll('div>[type="checkbox"]'), checkSite => { - if (checkSite.checked) { - canImport = true; - let curData = self.siteDict[checkSite.parentNode.title]; - let otherType = checkSite.nextElementSibling; - if (!curData || !otherType) return; - if (otherType.value === "0") { - typeData.sites.push(curData); + dataChanged(() => { + let canImport = false; + [].forEach.call(this.filterFrame.querySelectorAll("details"), details => { + let typeName = details.children[0].children[0]; + let typeData = self.typeDict[typeName.title]; + typeData.type = typeName.innerText.trim(); + typeData.sites = []; + [].forEach.call(details.querySelectorAll('div>[type="checkbox"]'), checkSite => { + if (checkSite.checked) { + canImport = true; + let curData = self.siteDict[checkSite.parentNode.title]; + let otherType = checkSite.nextElementSibling; + if (!curData || !otherType) return; + if (otherType.value === "0") { + typeData.sites.push(curData); + } else { + let typeIndex = self.searchType(otherType.value); + searchData.sitesConfig[typeIndex].sites.push(curData);; + } + } + }); + if (typeData.sites.length) { + let typeIndex = self.searchType(typeData.type); + if (typeIndex === false) { + searchData.sitesConfig.push(typeData); } else { - let typeIndex = self.searchType(otherType.value); - searchData.sitesConfig[typeIndex].sites.push(curData);; + searchData.sitesConfig[typeIndex].sites = searchData.sitesConfig[typeIndex].sites.concat(typeData.sites); } } }); - if (typeData.sites.length) { - let typeIndex = self.searchType(typeData.type); - if (typeIndex === false) { - searchData.sitesConfig.push(typeData); - } else { - searchData.sitesConfig[typeIndex].sites = searchData.sitesConfig[typeIndex].sites.concat(typeData.sites); - } + if (canImport) { + searchData.lastModified = new Date().getTime(); + storage.setItem("searchData", searchData); + _GM_notification('Over!'); + this.close(); } }); - if (canImport) { - searchData.lastModified = new Date().getTime(); - storage.setItem("searchData", searchData); - _GM_notification('Over!'); - this.close(); - } }); this.filterFrame.addEventListener("click", e => { if (e.target.id == "searchJumperFilter" || e.target.id == "cancel") { @@ -12951,57 +12970,59 @@ } }); addBtn.addEventListener("click", e => { - let siteObj = null; - for (let i = 0; i < searchData.sitesConfig.length; i++) { - let typeConfig = searchData.sitesConfig[i]; - for (let j = 0; j < typeConfig.sites.length; j++) { - let curSite = typeConfig.sites[j]; - if (curSite.url == urlInput.value) { - if (i == parseInt(typeSelect.value)) return; - if (window.confirm(i18n("siteExist"))) { - siteObj = { - name: curSite.name + " - " + typeConfig.type, - url: `["${curSite.name}"]` - }; - } else return; + dataChanged(() => { + let siteObj = null; + for (let i = 0; i < searchData.sitesConfig.length; i++) { + let typeConfig = searchData.sitesConfig[i]; + for (let j = 0; j < typeConfig.sites.length; j++) { + let curSite = typeConfig.sites[j]; + if (curSite.url == urlInput.value) { + if (i == parseInt(typeSelect.value)) return; + if (window.confirm(i18n("siteExist"))) { + siteObj = { + name: curSite.name + " - " + typeConfig.type, + url: `["${curSite.name}"]` + }; + } else return; + } } } - } - if (siteObj == null) { - siteObj = { - name: nameInput.value, - url: urlInput.value - }; - if (iconInput.value && iconInput.value != urlInput.value.replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico")) { - siteObj.icon = iconInput.value; - } - if (descInput.value && descInput.value != nameInput.value) { - siteObj.description = descInput.value; - } - if (siteKeywords.value) { - siteObj.keywords = siteKeywords.value; - } - if (siteMatch.value) { - siteObj.match = siteMatch.value; - } - if (openSelect.value && openSelect.value != '-1') { - siteObj.openInNewTab = openSelect.value === 'true'; - } - if (charset && charset.toLowerCase() != 'utf-8') { - siteObj.charset = charset; + if (siteObj == null) { + siteObj = { + name: nameInput.value, + url: urlInput.value + }; + if (iconInput.value && iconInput.value != urlInput.value.replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico")) { + siteObj.icon = iconInput.value; + } + if (descInput.value && descInput.value != nameInput.value) { + siteObj.description = descInput.value; + } + if (siteKeywords.value) { + siteObj.keywords = siteKeywords.value; + } + if (siteMatch.value) { + siteObj.match = siteMatch.value; + } + if (openSelect.value && openSelect.value != '-1') { + siteObj.openInNewTab = openSelect.value === 'true'; + } + if (charset && charset.toLowerCase() != 'utf-8') { + siteObj.charset = charset; + } + if (kwFilter) { + siteObj.kwFilter = kwFilter; + } } - if (kwFilter) { - siteObj.kwFilter = kwFilter; + searchData.sitesConfig[typeSelect.value].sites.push(siteObj); + searchData.lastModified = new Date().getTime(); + storage.setItem("lastAddType", typeSelect.value); + storage.setItem("searchData", searchData); + _GM_notification(i18n("siteAddOver")); + if (addFrame.parentNode) { + addFrame.parentNode.removeChild(addFrame); } - } - searchData.sitesConfig[typeSelect.value].sites.push(siteObj); - searchData.lastModified = new Date().getTime(); - storage.setItem("lastAddType", typeSelect.value); - storage.setItem("searchData", searchData); - _GM_notification(i18n("siteAddOver")); - if (addFrame.parentNode) { - addFrame.parentNode.removeChild(addFrame); - } + }); }); crawlBtn = addFrame.querySelector("#crawlBtn"); @@ -13601,6 +13622,9 @@ } else { searchData.prefConfig.configPage = configPage; } + if (searchData.webdavConfig) { + webDAV = new WebDAV(searchData.webdavConfig.host + "/SearchJumper" + (searchData.webdavConfig.path || "").replace(/^\/*/, "/").replace(/\/*$/, "/"), searchData.webdavConfig.username, searchData.webdavConfig.password); + } } if (location.href.indexOf("#searchJumperMin") != -1) { From 5a68a17077f8975dccc55a626d2e6a482527f401 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 9 Dec 2023 17:06:47 +0800 Subject: [PATCH 529/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 35 +++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5bfbbb4ef4b..8e7d27f6de3 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.50 +// @version 1.7.51 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1062,6 +1062,7 @@ } var webDAV; async function dataChanged(callback, override) { + if (shareEngines) return; if (!webDAV) return callback && callback(); if (!override) { let lastModified = await webDAV.read("lastModified"); @@ -6074,6 +6075,7 @@ }); this.saveRuleBtn.addEventListener("click", e => { if (!this.lockWords) return; + if (shareEngines) return; dataChanged(() => { let inPageRule = searchData.prefConfig.inPageRule || {}; inPageRule[this.inPageRuleKey || location.href.replace(/([&\?]_i=|#).*/, "")] = this.lockWords; @@ -6264,6 +6266,13 @@ this.batchOpen(lastSign.sites, {button: 2}); } lastSign = false; + + if (inPagePostParams) { + await this.submitAction(inPagePostParams); + setTimeout(() => { + storage.setListItem("inPagePostParams", location.hostname, ""); + }, 10000); + } let searchWithCurrentFilter = () => { clearTimeout(inputTimer); let siteEle, forceTarget = ""; @@ -7693,7 +7702,7 @@ let scrollSize = Math.max(ele.scrollWidth, ele.scrollHeight) + 5 + "px"; if (searchData.prefConfig.disableTypeOpen) { scrollSize = baseSize + "px"; - self.listPos(ele.children[0], siteList); + if (e) self.listPos(ele.children[0], siteList); } if (leftRight) { ele.style.height = scrollSize; @@ -8314,12 +8323,6 @@ } } if (ele.dataset.current) { - if (!currentSite && inPagePostParams) { - await this.submitAction(inPagePostParams); - setTimeout(() => { - storage.setListItem("inPagePostParams", location.hostname, ""); - }, 10000); - } } else if (data.hideNotMatch) { ele.style.display = 'none'; ele.classList.add("notmatch"); @@ -11446,9 +11449,20 @@ } } + var shareEngines; function isInConfigPage() { if (location.href.indexOf(configPage) === 0 || (document.title === "SearchJumper" && document.querySelector('[name="author"][content="Hoothin"]'))) { - isAllPage = /all\.html$/.test(location.pathname); + shareEngines = document.querySelector('[name="engines"]'); + if (shareEngines) { + try { + shareEngines = shareEngines.getAttribute("content"); + shareEngines = JSON.parse(unescape(shareEngines)); + searchData.sitesConfig = shareEngines; + } catch (e) { + shareEngines = null; + } + } + isAllPage = shareEngines || /all\.html$/.test(location.pathname); return true; } return false; @@ -11650,6 +11664,7 @@ const importFilter = new ImportFilter(); importBtn.innerText = i18n("import"); importBtn.addEventListener("click", e => { + if (shareEngines) return; if (!targetPre) return; let configTxt = targetPre.innerText.trim(), configData; if (!configTxt) return; @@ -11943,6 +11958,7 @@ }); }); add.addEventListener("click", e => { + if (shareEngines) return; dataChanged(() => { let canImport = false; [].forEach.call(this.filterFrame.querySelectorAll("details"), details => { @@ -12970,6 +12986,7 @@ } }); addBtn.addEventListener("click", e => { + if (shareEngines) return; dataChanged(() => { let siteObj = null; for (let i = 0; i < searchData.sitesConfig.length; i++) { From f5eadba784ed43599477dd374003fd91d17aad29 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 9 Dec 2023 17:16:22 +0800 Subject: [PATCH 530/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 8e7d27f6de3..565f3eed12c 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -494,7 +494,8 @@ siteAddOver: '站点添加成功', multiline: '是否以换行符分隔多行搜索?', multilineTooMuch: '行数超过10行,是否继续搜索?', - inputPlaceholder: '筛选引擎,支持 * ? 通配符,$代表末尾,^代表开头,分组**站点 可筛选指定分组,例如 图片**baidu,tab 下一项', + inputPlaceholder: '筛选引擎', + inputTitle: '筛选引擎,支持 * ? 通配符,$代表末尾,^代表开头,分组**站点 可筛选指定分组,例如 图片**baidu,tab 下一项', inputKeywords: '输入搜索关键词', inPageTips: '自定义分隔符:$c 加分隔符,例如 $c| search | jumper,默认空格作为分隔符\n原始文本不分隔:$o 加文本,例如$oopai liked by hero\n正则表达式:/re/,例如 $c, /google/i , /aPPle/\n添加提示文本:搜索文本$t{提示文本},例如 linux$t{linux is not unix}\n添加自定义样式:搜索文本$s{背景;其他},例如 google$s{#333333;color:red;}\n左键点击关键词跳转至下一个,右键点击关键词跳转至上一个', inPagePlaceholder: '输入文字,按下回车进行页内查找', @@ -598,7 +599,8 @@ siteAddOver: '站點添加成功', multiline: '是否以換行符分隔多行搜索?', multilineTooMuch: '行數超過10行,是否繼續搜索?', - inputPlaceholder: '篩選引擎,支持 * ? 通配符,$代表末尾,^代表開頭,分組**站點 可篩選指定分組,例如 圖片**google,tab 下一項', + inputPlaceholder: '篩選引擎', + inputTitle: '篩選引擎,支援 * ? 通配符,$代表末尾,^代表開頭,分組**站點 可篩選指定分組,例如 圖片**google,tab 下一項', inputKeywords: '輸入搜索關鍵詞', inPageTips: '自定義分隔符:$c 加分隔符,例如 $c| search | jumper,默認空格作為分隔符\n原始文本不分隔:$o 加文本,例如$oopai liked by hero\n正則表達式:/re/,例如 $c, /google/i , /aPPle/\n添加提示文本:搜索文本$t{提示文本},例如 linux$t{linux is not unix}\n添加自定義樣式:搜索文本$s{背景;其他},例如 google$s{#333333;color:red;}\n左鍵點擊關鍵詞跳轉至下一個,右鍵點擊關鍵詞跳轉至上一個', inPagePlaceholder: '輸入文字,按下回車進行頁內查找', @@ -701,7 +703,8 @@ siteAddOver: 'Site added successfully', multiline: 'Search as multilines?', multilineTooMuch: 'The number of lines exceeds 10, do you want to continue searching?', - inputPlaceholder: 'Filter engines, support * ? wildcards, $ means end, ^ means start, type name**site name to filter type like "image**google", tab to next ', + inputPlaceholder: 'Filter engines', + inputTitle: 'Filter engines, support * ? wildcards, $ means end, ^ means start, type name**site name to filter type like "image**google", tab to next. ', inputKeywords: 'Enter search keywords', inPageTips: 'Custom delimiter: $c + delimiter, such as $c| search | jumper, space as delimiter by default\nOriginal text without delimited: $o + text, such as $oopai liked by hero\nRegular expression: /re/, such as $c, /google/i , /aPPle/\nTips text: search text$t{tips text}, such as linux$t{linux is not unix}\nCustom style: Search text$s{background;other}, such as google$s{#333333;color:red;}\nLeft-click keyword to jump to the next, right-click keyword to jump to the previous', inPagePlaceholder: 'Input text, press Enter to find in the page', @@ -1659,7 +1662,7 @@ bottom: 5%; line-height: 1.5; color: white; - opacity: 0.6; + opacity: 0.35; font-weight: bold; font-family: Arial,sans-serif,微软雅黑; overflow-wrap: normal; @@ -3437,7 +3440,7 @@
- + From c9dc9abf7681e3ee27e0276eba93f88a4da8de82 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 9 Dec 2023 17:44:41 +0800 Subject: [PATCH 531/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 565f3eed12c..7ea41cd0a53 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -5939,7 +5939,10 @@ }; document.addEventListener("keydown", e => { if (e.keyCode === 27) { - if (this.inInput) { + if (isAllPage) { + this.searchInput.value = ""; + this.searchInput.dispatchEvent(new CustomEvent("input")); + } else if (this.inInput) { this.hideSearchInput(); } else if (this.lockWords) { this.highlight(""); @@ -11459,13 +11462,13 @@ if (shareEngines) { try { shareEngines = shareEngines.getAttribute("content"); - shareEngines = JSON.parse(unescape(shareEngines)); + shareEngines = JSON.parse(decodeURI(shareEngines)); searchData.sitesConfig = shareEngines; } catch (e) { shareEngines = null; } } - isAllPage = shareEngines || /all\.html$/.test(location.pathname); + isAllPage = !!shareEngines || /all\.html$/.test(location.pathname); return true; } return false; From 7b3313cc807c111b242cf5250e57306f953a8f0e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 9 Dec 2023 19:55:07 +0800 Subject: [PATCH 532/812] 1.9.37.3 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 94ff3400c47..c9a0a3b7cdf 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.2](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.3](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 95c3d18c244..1e4305de007 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.2 +// @version 1.9.37.3 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -4912,10 +4912,6 @@ configCon = document.getElementById("configCon"); if (configCon) { configCon.parentNode.removeChild(configCon); - let ruleExamples = document.querySelectorAll("#jsoneditor~p>a") - if (ruleExamples.length > 1) { - ruleExamples[0].parentNode.removeChild(ruleExamples[0]); - } } if (ruleImportUrlReg.test(href) || inConfig) { let importing = false; @@ -5502,7 +5498,7 @@ } else { input.type = otherType || "checkbox"; } - input.style.width = "30px"; + input.style.width = "35px"; input.style.height = "20px"; input.style.float = "left"; input.style.margin = "0 2px"; @@ -5744,7 +5740,7 @@ rulesData.lastPageTips = lastPageTipsInput.checked; rulesData.initRun = initRunInput.checked; rulesData.autoLoadNum = autoLoadNumInput.value !== "0" ? autoLoadNumInput.value : ''; - rulesData.rate = parseInt(rateInput.value) || 1; + rulesData.rate = parseFloat(rateInput.value) || 1; rulesData.preload = preloadInput.checked; rulesData.manualMode = manualModeInput.checked; rulesData.clickMode = clickModeInput.checked; From 688836e2a60e54c95d07ff9901cc69d781490391 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 9 Dec 2023 20:31:47 +0800 Subject: [PATCH 533/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index c9a0a3b7cdf..44453fddb2a 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -29,7 +29,7 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu Made with ❤️ by Hoothin - + From 0b4f8cf9ecf4b63639a37cff3646ca074e10c8eb Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 09:25:16 +0800 Subject: [PATCH 534/812] 1.9.37.4 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 44453fddb2a..2541aba0777 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.3](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.4](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 1e4305de007..a44f90388ff 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.3 +// @version 1.9.37.4 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -892,7 +892,7 @@ const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true, firstRun: true}, ruleUrls, updateDate, clickedSth = false; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; - var tryTimes = 0, showedLastPageTips = false; + var tryTimes = 0, showedLastPageTips = false, rate = 1; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; @@ -2234,7 +2234,7 @@ }; if (!ele) return false; let i = 0; - while (ele && i++ < 3) { + while (ele && i++ < 6) { if (!verifyHandler(ele)) return false; ele = ele.parentNode; } @@ -3313,6 +3313,9 @@ if (self.curSiteRule.sideController === true || (self.curSiteRule.sideController !== false && rulesData.sideController)) { isPause = manualPause; } + if (typeof(self.curSiteRule.rate) !== "undefined") { + rate = self.curSiteRule.rate; + } if (self.curSiteRule.enable == 0) { debug("Stop as rule disable"); isPause = true; @@ -5740,7 +5743,7 @@ rulesData.lastPageTips = lastPageTipsInput.checked; rulesData.initRun = initRunInput.checked; rulesData.autoLoadNum = autoLoadNumInput.value !== "0" ? autoLoadNumInput.value : ''; - rulesData.rate = parseFloat(rateInput.value) || 1; + rulesData.rate = parseFloat(rateInput.value) || 0; rulesData.preload = preloadInput.checked; rulesData.manualMode = manualModeInput.checked; rulesData.clickMode = clickModeInput.checked; @@ -6085,6 +6088,10 @@ if (typeof(rulesData.lastPageTips) == "undefined") { rulesData.lastPageTips = true; } + if (typeof(rulesData.rate) == "undefined") { + rulesData.rate = 1; + } + rate = rulesData.rate; if (rulesData.autoLoadNum && rulesData.initRun) { autoLoadNum = parseInt(rulesData.autoLoadNum); } @@ -6611,7 +6618,7 @@ top >= 0 && left >= 0 && right <= viewWidth + 1 && - top <= viewHeight * (ruleParser.curSiteRule.rate || rulesData.rate || 1) && + top <= viewHeight * rate && isVisible(element, _unsafeWindow) ); } @@ -7088,7 +7095,7 @@ } if (posEle) { let actualBottom = getElementBottom(posEle); - bottomGap = scrollH - actualBottom + (window.innerHeight || document.documentElement.clientHeight) * (ruleParser.curSiteRule.rate || rulesData.rate || 1); + bottomGap = scrollH - actualBottom + (window.innerHeight || document.documentElement.clientHeight) * rate; if (bottomGap < 100) bottomGap = 100; } else { bottomGap = 1000; @@ -8183,7 +8190,6 @@ if (loadingDiv.parentNode) { loadingDiv.parentNode.removeChild(loadingDiv); } - let rate = (ruleParser.curSiteRule.rate || rulesData.rate || 1); if (rate != 1 && !clickMode) { setTimeout(() => { if (distToBottom() < bottomGap) { From 180f530f4cf3650b80e1e369095435c75c15cc6d Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 10:26:59 +0800 Subject: [PATCH 535/812] 1.9.37.5 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 2541aba0777..af1dccf29aa 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.4](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.5](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index a44f90388ff..edf53515485 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.4 +// @version 1.9.37.5 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2216,6 +2216,7 @@ verifyElement(ele) { let verifyHandler = e => { + if (e.nodeType == 9) return true; if (e.style.display == "none" || e.getAttribute("aria-disabled") == "true") { return false; } @@ -2402,6 +2403,7 @@ } } if (!next) { + let isApp = !!body.querySelector("main#app"); let aTags = body.querySelectorAll("a,button,[type='button']"); for (i = aTags.length - 1; i >= 0; i--) { if (next1) break; @@ -2447,7 +2449,7 @@ } } } - if (!next3 && !isJs) { + if (!isApp && !next3 && !isJs) { if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test(aTag.textContent) && aTag.parentNode.hasAttribute && !aTag.parentNode.hasAttribute("jsaction")) { next3 = aTag; } From 996477ea4a6cee49a1248d7edbd7e1b667894cca Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 12:07:27 +0800 Subject: [PATCH 536/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 7ea41cd0a53..90b227bdd6b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.51 +// @version 1.7.52 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -450,7 +450,7 @@ minSizeMode: false, hidePopup: false, minPopup: 0, - selectToShow: true, + selectToShow: false, expandType: false, rightMouse: true, shiftLastUsedType: true, @@ -1750,8 +1750,8 @@ display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; - margin-left: 63px; - margin-top: 30px; + margin-left: 62px; + margin-top: 35px; width: 190px; position: absolute; pointer-events: none; @@ -1780,7 +1780,7 @@ } #search-jumper #search-jumper-alllist.new-mode .sitelist a+p { position: absolute; - margin-top: -33px; + margin-top: -28px; color: white; width: 250px; display: flex; @@ -2217,7 +2217,6 @@ height: ${32 * this.tilesZoom}px; width: ${32 * this.tilesZoom}px; } - .search-jumper-type.search-jumper-needInPage, .search-jumper-type.search-jumper-targetImg, .search-jumper-type.search-jumper-targetAudio, .search-jumper-type.search-jumper-targetVideo, @@ -2227,7 +2226,6 @@ .search-jumper-isTargetAudio>.search-jumper-type, .search-jumper-isTargetVideo>.search-jumper-type, .search-jumper-isTargetLink>.search-jumper-type, - .search-jumper-searchBar:hover>.search-jumper-type.search-jumper-needInPage, .search-jumper-searchBar:hover>.search-jumper-type.search-jumper-targetImg, .search-jumper-searchBar:hover>.search-jumper-type.search-jumper-targetAudio, .search-jumper-searchBar:hover>.search-jumper-type.search-jumper-targetVideo, From 5bf0ed6bd701b688a57d19b3fc1d92bb0c18e2f6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 12:41:41 +0800 Subject: [PATCH 537/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 90b227bdd6b..0d11e6fe9d8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1631,7 +1631,7 @@ #search-jumper.search-jumper-showall>.search-jumper-showallBg { display: block; } - .search-jumper-historylist { + .search-jumper-historylistcon { display: flex; position: fixed; width: 100%; @@ -1645,6 +1645,10 @@ pointer-events: all; min-height: 40px; } + .search-jumper-historylist { + display: flex; + max-width: 100%; + } #search-jumper.search-jumper-showall #search-jumper-alllist { display: block; } @@ -3151,7 +3155,7 @@ } /* 历史列表 */ - .search-jumper-historylist { + .search-jumper-historylistcon { background-color: #181C20e0 !important; } @@ -3342,9 +3346,14 @@ }); alllist.appendChild(logoConfigBtn); + + let historylistCon = document.createElement("div"); + historylistCon.className = "search-jumper-historylistcon"; + alllist.appendChild(historylistCon); + let historylist = document.createElement("div"); historylist.className = "search-jumper-historylist"; - alllist.appendChild(historylist); + historylistCon.appendChild(historylist); this.historylist = historylist; bar.addEventListener('mouseenter', e => { @@ -5588,7 +5597,7 @@ setTimeout(() => { if (!self.showAllMouseHandler) { self.showAllMouseHandler = e => { - if (e.isTrusted == false || e.target.className === 'sitelistBox' || e.target.className === 'search-jumper-showallBg' || e.target.className === 'search-jumper-historylist') { + if (e.isTrusted == false || e.target.className === 'sitelistBox' || e.target.className === 'search-jumper-showallBg') { self.closeShowAll(); } }; From 46a39e6326aab2f66e395113504518b6695fd9e5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 12:47:59 +0800 Subject: [PATCH 538/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 0d11e6fe9d8..ce69800ad08 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -305,7 +305,8 @@ icon: "book-open-reader", sites: [ { name: "Wikipedia", - url: "https://en.wikipedia.org/wiki/%s" + url: "https://en.wikipedia.org/wiki/%s", + description: "The largest and most-read reference work in history.#wiki" }, { name: "Quora", url: "https://www.quora.com/search?q=%s" From ea6026eff1b1272813d15341ad90ff3c4ca77a33 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 13:00:24 +0800 Subject: [PATCH 539/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ce69800ad08..840434f206a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -11472,6 +11472,7 @@ shareEngines = shareEngines.getAttribute("content"); shareEngines = JSON.parse(decodeURI(shareEngines)); searchData.sitesConfig = shareEngines; + getBody(document).innerHTML = createHTML(""); } catch (e) { shareEngines = null; } From 049030ca497cffd5808280dcaaa4f1f6f16888e2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 14:02:19 +0800 Subject: [PATCH 540/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 497d47485af..be6316dfcd7 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10472,6 +10472,12 @@ "action": 3, "pageElement": "ul.DiscussionList-discussions>li" }, +{ + "name": "Sanfoundry", + "url": "^https?://www\\.sanfoundry\\.com/", + "example": "https://www.sanfoundry.com/engineering-mathematics-questions-answers-nth-derivative-some-elementary-functions-1/", + "nextLink": ".sf-nav-prev-bottom+div > a[rel=next]" +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From 1be1e0b5fcbcf982dbe71f75e44931393e03250c Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 14:38:51 +0800 Subject: [PATCH 541/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 840434f206a..f21137b70cd 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1710,7 +1710,7 @@ justify-content: flex-start; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { - width: 80%; + width: 70%; max-height: unset; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon { From a668490ad8970f0b4696d731b27c723c6838703b Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 14:47:29 +0800 Subject: [PATCH 542/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f21137b70cd..0430fbf737e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2802,6 +2802,12 @@ .inputGroup>.svgBtns { width: 25px; } + #search-jumper-alllist>.modeSwitch { + width: 36px; + height: 36px; + right: 2px; + top: 10px; + } } .search-jumper-input .content-container { background: #eee; From bb7241a4e9d68fccbf762b1be27428c053dc1857 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 14:52:34 +0800 Subject: [PATCH 543/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 0430fbf737e..89bea9149b9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1710,7 +1710,7 @@ justify-content: flex-start; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { - width: 70%; + width: 72%; max-height: unset; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon { @@ -1736,6 +1736,7 @@ } #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div { padding: 0 10px; + border-radius: 5px; transition: transform 0.25s ease, box-shadow 0.25s ease; } #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:hover { From eb91b3a41a7a61705a590ddb369f6431acdab6c1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 11 Dec 2023 21:25:15 +0800 Subject: [PATCH 544/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 89bea9149b9..1c02d141431 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1710,7 +1710,7 @@ justify-content: flex-start; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { - width: 72%; + width: 73%; max-height: unset; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon { From 733a9d24fe615791693acc47868589145efa2d03 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 12 Dec 2023 08:47:22 +0800 Subject: [PATCH 545/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index be6316dfcd7..09013a92bbc 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10478,6 +10478,16 @@ "example": "https://www.sanfoundry.com/engineering-mathematics-questions-answers-nth-derivative-some-elementary-functions-1/", "nextLink": ".sf-nav-prev-bottom+div > a[rel=next]" }, +{ + "name": "KossyDerrickEnt", + "url": "^https?://www\\.kossyderrickent\\.com/", + "example": "https://www.kossyderrickent.com/", + "nextLink": ".showpagePoint+.showpageNum>a", + "pageElement": ".date-posts>.post-outer", + "pageAction": "eles.forEach(ele=>{let thumb=ele.querySelector('.thumb>a');thumb.style.background=thumb.style.background.replace('s72-c','s1600')})", + "waitElement": ".showpagePoint", + "include": ".date-posts>.post-outer" +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From 75b79d365bab166c9d5583a3ed971ade93dc95c6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 12 Dec 2023 10:40:06 +0800 Subject: [PATCH 546/812] Update README.md --- DownloadAllContent/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 967b562e47f..558280cf26e 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -79,6 +79,9 @@ - 透過程式碼生成 `a.links@@@@@@next:{return await getNextElement()}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 +### 付費咨詢 +實在搞不定也可選擇付費咨詢。非版權站,且服務器沒有爬蟲限制的,可[聯絡我](mailto:rixixi@gmail.com)指導規則編寫,$10/¥50 一次 + ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 + [📕po18](https://www.po18.tw/books/755779/articles) From fa1a2f49997da979cfe3dfae1bbd8d7fa607690c Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 12 Dec 2023 10:42:51 +0800 Subject: [PATCH 547/812] Update README.md --- DownloadAllContent/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 558280cf26e..1f16b6f95df 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -79,8 +79,8 @@ - 透過程式碼生成 `a.links@@@@@@next:{return await getNextElement()}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 -### 付費咨詢 -實在搞不定也可選擇付費咨詢。非版權站,且服務器沒有爬蟲限制的,可[聯絡我](mailto:rixixi@gmail.com)指導規則編寫,$10/¥50 一次 +### 💰付費咨詢 +看完自設教程還是搞不定也可選擇付費咨詢。非版權站,且服務器沒有爬蟲限制的,可[聯絡我](mailto:rixixi@gmail.com)指導規則編寫,$10/¥50 一次 ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 From 0224889ad1f4a3c5b60ced6d237093e1b6fa17a5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 12 Dec 2023 16:48:13 +0800 Subject: [PATCH 548/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 1c02d141431..b37df69e527 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -70,7 +70,7 @@ } const importPageReg = /^https:\/\/github\.com\/hoothin\/SearchJumper(\/(issue|discussions)|$)|^https:\/\/greasyfork\.org\/.*\/scripts\/445274[\-\/].*\/discussions/i; const mobileUa = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; - let configPage = 'https://hoothin.github.io/SearchJumper/'; + let configPage = 'https://search.hoothin.com/config/'; let isAllPage = false; var searchData = {}; From 4e0197ee3f175af3d5eb4f8a34dd090b1af61856 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 13 Dec 2023 09:27:42 +0800 Subject: [PATCH 549/812] 1.9.37.6 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 420 ++++++++++++++++++++------------------ 2 files changed, 226 insertions(+), 196 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index af1dccf29aa..12ac5f2c179 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.5](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.6](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index edf53515485..42b0282a33f 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.5 +// @version 1.9.37.6 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -45,8 +45,6 @@ // @grant GM.deleteValue // @grant GM.info // @grant GM.setClipboard -// @downloadURL https://update.greasyfork.org/scripts/438684/Pagetual.user.js -// @updateURL https://update.greasyfork.org/scripts/438684/Pagetual.meta.js // @supportURL https://github.com/hoothin/UserScripts/issues // @connect wedata.net // @connect githubusercontent.com @@ -56,6 +54,8 @@ // @connect * // @contributionURL https://ko-fi.com/hoothin // @contributionAmount 1 +// @downloadURL https://update.greasyfork.org/scripts/438684/Pagetual.user.js +// @updateURL https://update.greasyfork.org/scripts/438684/Pagetual.meta.js // ==/UserScript== (function() { @@ -81,20 +81,24 @@ pauseVideo(); } else { domloaded(); - if (document.readystate == 'complete') { + if (document.readystate === 'complete') { pauseVideo(); } else { - window.addEventListener('load', e => { + window.addEventListener('load', () => { pauseVideo(); }, false); } } - if (getComputedStyle(document.documentElement).display == 'none') document.documentElement.style.display = 'block'; - if (document.body && getComputedStyle(document.body).display == 'none') document.body.style.display = 'block'; + if (getComputedStyle(document.documentElement).display === 'none') { + document.documentElement.style.display = 'block'; + } + if (document.body && getComputedStyle(document.body).display === 'none') { + document.body.style.display = 'block'; + } return; } - if (window.top != window.self) { + if (window.top !== window.self) { try { if (window.self.innerWidth < 300 || window.self.innerHeight < 300) { return; @@ -105,7 +109,7 @@ } const noRuleTest = false; - const lang = navigator.appName == "Netscape" ? navigator.language : navigator.userLanguage; + const lang = navigator.appName === "Netscape" ? navigator.language : navigator.userLanguage; const langData = [ { name: "English", @@ -718,11 +722,11 @@ } } setLang(lang); - var enableDebug = true; + var _GM_xmlhttpRequest, _GM_registerMenuCommand, _GM_notification, _GM_addStyle, _GM_openInTab, _GM_info, _GM_setClipboard; function i18n(name, param) { return i18nData[name] ? i18nData[name].replace("#t#", param) : name; - }; + } function debug(str, title) { if (enableDebug) { @@ -732,47 +736,46 @@ str ); } - }; + } - var _GM_xmlhttpRequest, _GM_registerMenuCommand, _GM_notification, _GM_addStyle, _GM_openInTab, _GM_info, _GM_setClipboard; - if (typeof GM_xmlhttpRequest != 'undefined') { + if (typeof GM_xmlhttpRequest !== 'undefined') { _GM_xmlhttpRequest = GM_xmlhttpRequest; - } else if (typeof GM != 'undefined' && typeof GM.xmlHttpRequest != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.xmlHttpRequest !== 'undefined') { _GM_xmlhttpRequest = GM.xmlHttpRequest; } else { - _GM_xmlhttpRequest = (f) => {fetch(f.url).then(response => response.text()).then(data => {let res = {response:data}; f.onload(res)}).catch(e => f.onerror(e))}; + _GM_xmlhttpRequest = (f) => {fetch(f.url).then(response => response.text()).then(data => {let res = {response:data}; f.onload(res);}).catch(e => f.onerror(e));}; } - if (typeof GM_registerMenuCommand != 'undefined') { + if (typeof GM_registerMenuCommand !== 'undefined') { _GM_registerMenuCommand = GM_registerMenuCommand; - } else if (typeof GM != 'undefined' && typeof GM.registerMenuCommand != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.registerMenuCommand !== 'undefined') { _GM_registerMenuCommand = GM.registerMenuCommand; } else { - _GM_registerMenuCommand = (s, f) => {}; + _GM_registerMenuCommand = (s, f) => {debug(s); debug(f);}; } - if (typeof GM_info != 'undefined') { + if (typeof GM_info !== 'undefined') { _GM_info = GM_info; - } else if (typeof GM != 'undefined' && typeof GM.info != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.info !== 'undefined') { _GM_info = GM.info; } else { _GM_info = {script: {}}; } - if (typeof GM_notification != 'undefined') { + if (typeof GM_notification !== 'undefined') { _GM_notification = GM_notification; - } else if (typeof GM != 'undefined' && typeof GM.notification != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.notification !== 'undefined') { _GM_notification = GM.notification; } else { - _GM_notification = (s) => {showTips(String(s))}; + _GM_notification = (s) => {showTips(String(s));}; } - if (typeof GM_openInTab != 'undefined') { + if (typeof GM_openInTab !== 'undefined') { _GM_openInTab = GM_openInTab; - } else if (typeof GM != 'undefined' && typeof GM.openInTab != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.openInTab !== 'undefined') { _GM_openInTab = GM.openInTab; } else { - _GM_openInTab = (s,t) => {window.open(s)}; + _GM_openInTab = (s,t) => {window.open(s); debug(t);}; } - if (typeof GM_addStyle != 'undefined') { + if (typeof GM_addStyle !== 'undefined') { _GM_addStyle = GM_addStyle; - } else if (typeof GM != 'undefined' && typeof GM.addStyle != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.addStyle !== 'undefined') { _GM_addStyle = GM.addStyle; } else { _GM_addStyle = cssStr => { @@ -782,17 +785,17 @@ return styleEle; }; } - if (typeof GM_setClipboard != 'undefined') { + if (typeof GM_setClipboard !== 'undefined') { _GM_setClipboard = GM_setClipboard; - } else if (typeof GM != 'undefined' && typeof GM.setClipboard != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.setClipboard !== 'undefined') { _GM_setClipboard = GM.setClipboard; } else { - _GM_setClipboard = (s, i) => {}; + _GM_setClipboard = (s, i) => {debug(s); debug(i);}; } - const _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow;//兼容 ios userscripts 的寫法 + const _unsafeWindow = (typeof unsafeWindow === 'undefined') ? window : unsafeWindow;//兼容 ios userscripts 的寫法 const storage = { - supportGM: typeof GM_getValue == 'function' && typeof GM_getValue('a', 'b') != 'undefined', - supportGMPromise: typeof GM != 'undefined' && typeof GM.getValue == 'function' && typeof GM.getValue('a', 'b') != 'undefined' && typeof GM.getValue('a', 'b').then == 'function', + supportGM: typeof GM_getValue === 'function' && typeof GM_getValue('a', 'b') !== 'undefined', + supportGMPromise: typeof GM !== 'undefined' && typeof GM.getValue === 'function' && typeof GM.getValue('a', 'b') !== 'undefined' && typeof GM.getValue('a', 'b').then === 'function', supportCrossSave: function() { return this.supportGM || this.supportGMPromise; }, @@ -811,12 +814,12 @@ setItem: function(key, value) { if (this.supportGMPromise) { GM.setValue(key, value); - if (value === "" && typeof GM != 'undefined' && typeof GM.deleteValue != 'undefined') { + if (value === "" && typeof GM !== 'undefined' && typeof GM.deleteValue !== 'undefined') { GM.deleteValue(key); } } else if (this.supportGM) { GM_setValue(key, value); - if (value === "" && typeof GM_deleteValue != 'undefined') { + if (value === "" && typeof GM_deleteValue !== 'undefined') { GM_deleteValue(key); } } else if (this.operaUJSStorage) { @@ -830,7 +833,7 @@ getItem: function(key, cb) { var value; if (this.supportGMPromise) { - value = GM.getValue(key).then(v => {cb(v)}); + value = GM.getValue(key).then(v => {cb(v);}); return; } else if (this.supportGM) { value = GM_getValue(key); @@ -840,7 +843,7 @@ value = this.mxAppStorage.getConfig(key); } else if (window.localStorage) { value = window.localStorage.getItem(key); - }; + } cb(value); } }; @@ -849,7 +852,7 @@ storage.getItem(key, value => { resolve(value); }); - }) + }); } async function getListData(list, key) { return new Promise((resolve) => { @@ -858,7 +861,7 @@ if (listData) { for(var i = 0; i < listData.length; i++) { let data = listData[i]; - if (data.k == key) { + if (data.k === key) { value = data.v; break; } @@ -866,15 +869,19 @@ } resolve(value); }); - }) + }); } function setListData(list, key, value, length) { storage.getItem(list, listData => { - if (!listData) listData = []; - listData = listData.filter(data => data && data.k != key); + if (!listData) { + listData = []; + } + listData = listData.filter(data => data && data.k !== key); if (value !== "") { listData.unshift({k: key, v: value}); - if (listData.length > (length || 100)) listData.pop(); + if (listData.length > (length || 100)) { + listData.pop(); + } } storage.setItem(list, listData); }); @@ -918,7 +925,9 @@ var query = doc.evaluate(xpath, contextNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < query.snapshotLength; i++) { var node = query.snapshotItem(i); - if (node.nodeType === 1) result.push(node); + if (node.nodeType === 1) { + result.push(node); + } } } catch (err) { debug(`Invalid xpath: ${xpath}`); @@ -927,7 +936,9 @@ } function isXPath(xpath) { - if (!xpath) return false; + if (!xpath) { + return false; + } return /^\(*(descendant::|\.\/|\/|id\()/.test(xpath); } @@ -952,7 +963,9 @@ try { for (let i = 0; i < selArr.length; i++) { let ele = doc.querySelector(selArr[i].trim()); - if (ele) return ele; + if (ele) { + return ele; + } } } catch(e) { return doc.querySelector(sel); @@ -967,10 +980,14 @@ } function compareNodeName(node, names) { - if (!node || !node.nodeName || !node.nodeName.toLowerCase) return false; + if (!node || !node.nodeName || !node.nodeName.toLowerCase) { + return false; + } let nodeName = node.nodeName.toLowerCase(); for (let i = 0; i < names.length; i++) { - if (names[i] === nodeName) return true; + if (names[i] === nodeName) { + return true; + } } return false; } @@ -978,10 +995,10 @@ function geneSelector(ele, addID) { let selector = ele.nodeName.toLowerCase(); //Google id class都是隨機。百度更過分,style script順序都是隨機的 - if (selector != "html" && selector != "body") { + if (selector !== "html" && selector !== "body") { let hasId = false; if (addID && ele.id && /^[a-z_][\w\-_]*$/i.test(ele.id)) { - if (ele.ownerDocument && ele.ownerDocument.querySelectorAll("#" + ele.id).length == 1) { + if (ele.ownerDocument && ele.ownerDocument.querySelectorAll("#" + ele.id).length === 1) { hasId = true; selector = '#' + ele.id; } @@ -989,7 +1006,7 @@ if (!hasId) { let className = ""; if (ele.className) { - let classList = ele.classList, i = 0; + let classList = ele.classList; for (let i = 0; i < classList.length; i++) { let c = classList[i]; if (/^[\w\-_]+$/.test(c) && !/\d{4,}/.test(c)) { @@ -1003,7 +1020,7 @@ if (!className && !hasId && parent.children.length > 1 && !compareNodeName(parent, ["html"])) { let prevE = ele.previousElementSibling; if (prevE && prevE.className) { - let classList = prevE.classList, i = 0; + let classList = prevE.classList; for (let i = 0; i < classList.length; i++) { let c = classList[i]; if (/^[\w\-_]+$/.test(c) && !/\d{4,}/.test(c)) { @@ -1017,15 +1034,17 @@ if (!className) { let i, nth = 0, all = 0; for (i = 0; i < parent.children.length; i++) { - if (parent.children[i].nodeName == ele.nodeName) { + if (parent.children[i].nodeName === ele.nodeName) { all++; - if (parent.children[i] == ele) { + if (parent.children[i] === ele) { nth = all; } - if (nth > 0 && all > 1) break; + if (nth > 0 && all > 1) { + break; + } } } - selector += (all == 1 ? "" : `:nth-of-type(${nth})`); + selector += (all === 1 ? "" : `:nth-of-type(${nth})`); } } selector = geneSelector(parent, addID) + ' > ' + selector; @@ -1037,7 +1056,7 @@ function createXPathFromElement(elm) { let allNodes = document.getElementsByTagName('*'), segs; - for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode) { + for (segs = []; elm && elm.nodeType === 1; elm = elm.parentNode) { if (compareNodeName(elm, ["body", "html"])) { segs.unshift(elm.localName.toLowerCase()); continue; @@ -1045,10 +1064,14 @@ if (elm.hasAttribute && elm.hasAttribute('id')) { var uniqueIdCount = 0; for (var n = 0; n < allNodes.length; n++) { - if (allNodes[n].hasAttribute('id') && allNodes[n].id == elm.id) uniqueIdCount++; - if (uniqueIdCount > 1) break; + if (allNodes[n].hasAttribute('id') && allNodes[n].id === elm.id) { + uniqueIdCount++; + } + if (uniqueIdCount > 1) { + break; + } } - if ( uniqueIdCount == 1) { + if ( uniqueIdCount === 1) { segs.unshift('id("' + elm.getAttribute('id') + '")'); return segs.join('/'); } else { @@ -1059,7 +1082,9 @@ } else { let i, sib; for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) { - if (sib.localName == elm.localName) i++; + if (sib.localName === elm.localName) { + i++; + } } segs.unshift(elm.localName.toLowerCase() + '[' + i + ']'); } @@ -1082,7 +1107,7 @@ setTimeout(() => { resolve(); }, time); - }) + }); } class RuleParser { @@ -1159,7 +1184,7 @@ let result = { name: item.name, from: from, - action: item.data.forceIframe=="true"?1:undefined, + action: item.data.forceIframe === "true" ? 1 : undefined, url: item.data.url, pageElement: item.data.pageElement, nextLink: item.data.nextLink, @@ -1178,7 +1203,7 @@ } addRuleByUrl(url, from, callback) { - if (url.indexOf("?") == -1) { + if (url.indexOf("?") === -1) { url = url + "?" + Date.now(); } else { url = url + "&" + Date.now(); @@ -1196,12 +1221,12 @@ if (rules && rules.length > 0) { let first = -1; this.rules = this.rules.filter((item, i) => { - if (item.from == from) { - if (first == -1) first = i; + if (item.from === from) { + if (first === -1) first = i; return false; } else return true; }); - if (first == -1) first = 0; + if (first === -1) first = 0; rules.forEach(item => { let rule = this.formatRule(item, from); if (rule) { @@ -1237,7 +1262,7 @@ ruleMatchReady(r) { let findIndex = 0; - if (r.nextLink && r.nextLink != 0) { + if (r.nextLink && r.nextLink !== 0) { let nextLinkSel = r.nextLink, nextLink; if (Array && Array.isArray && Array.isArray(nextLinkSel)) { nextLink = !nextLinkSel.every((sel, i) => { @@ -1304,9 +1329,9 @@ selArr = [selArr]; } let includeSel = selArr[0].trim(), excludeSel; - if (selArr.length == 2) { + if (selArr.length === 2) { excludeSel = selArr[1].trim().replace(/^!/, ''); - } else if (includeSel.indexOf('!') == 0) { + } else if (includeSel.indexOf('!') === 0) { excludeSel = includeSel.replace(/^!/, ''); includeSel = ''; } @@ -1331,7 +1356,7 @@ runPageBar(pageBar) { if (this.curSiteRule.pageBar && this.curSiteRule.pageBar !== 0) { try { - ((typeof this.curSiteRule.pageBar == 'function') ? this.curSiteRule.pageBar : Function("pageBar",'"use strict";' + this.curSiteRule.pageBar))(pageBar); + ((typeof this.curSiteRule.pageBar === 'function') ? this.curSiteRule.pageBar : Function("pageBar",'"use strict";' + this.curSiteRule.pageBar))(pageBar); } catch(e) { debug(e); } @@ -1347,7 +1372,7 @@ } else if(this.curSiteRule.wait) { if (isNaN(this.curSiteRule.wait)) { try { - checkEval = (typeof this.curSiteRule.wait == 'function') ? this.curSiteRule.wait : Function("doc", '"use strict";' + this.curSiteRule.wait); + checkEval = (typeof this.curSiteRule.wait === 'function') ? this.curSiteRule.wait : Function("doc", '"use strict";' + this.curSiteRule.wait); } catch(e) { debug(e); } @@ -1359,10 +1384,10 @@ } findNoNext() { - if (!this.curSiteRule || !this.curSiteRule.smart || this.curSiteRule.nextLink == 0 || this.possibleRule) return; + if (!this.curSiteRule || !this.curSiteRule.smart || this.curSiteRule.nextLink === 0 || this.possibleRule) return; let self = this; self.curSiteRule.nextLink = 0; - self.smartRules = self.smartRules.filter(item => {return item && item.url != self.curSiteRule.url}); + self.smartRules = self.smartRules.filter(item => {return item && item.url !== self.curSiteRule.url;}); self.smartRules.unshift(self.curSiteRule); storage.setItem("smartRules", self.smartRules); } @@ -1407,11 +1432,11 @@ return callback(); } } - if (r.from == 2) { + if (r.from === 2) { delete r.autoLoadNum; delete r.history; delete r.sideController; - if (r.pageBar == 0) delete r.pageBar; + if (r.pageBar === 0) delete r.pageBar; } if (!r.smart) { self.insert = null; @@ -1423,11 +1448,11 @@ } function checkRule(r) { - if (r.from == 1 && r.url.length <= 13) return false; + if (r.from === 1 && r.url.length <= 13) return false; let urlReg = new RegExp(r.url, "i"); if (urlReg.test(href)) { if (!self.ruleMatchPre(r)) return false; - if (r.url.length > 15 && r.from != 1) { + if (r.url.length > 15 && r.from !== 1) { self.possibleRule = r; } if (r.waitElement) { @@ -1448,7 +1473,7 @@ let waitTime = 500, checkEval, maxCheckTimes = 50; if (isNaN(r.wait)) { try { - checkEval = (typeof r.wait == 'function') ? r.wait : Function("doc",'"use strict";' + r.wait); + checkEval = (typeof r.wait === 'function') ? r.wait : Function("doc",'"use strict";' + r.wait); } catch(e) { debug(e, 'Error when checkeval'); } @@ -1549,7 +1574,7 @@ if (!this.hpRules) this.hpRules = []; let url = this.curSiteRule && this.curSiteRule.url, self = this; let href = location.href.slice(0, 500); - let matchedRules = this.hpRules.filter(rule => rule != self.curSiteRule && new RegExp(rule.url, "i").test(href) && self.ruleMatch(rule)); + let matchedRules = this.hpRules.filter(rule => rule !== self.curSiteRule && new RegExp(rule.url, "i").test(href) && self.ruleMatch(rule)); if (url) matchedRules.unshift(this.curSiteRule); matchedRules.sort((a, b) => { if ((a.include || a.exclude) && (!b.include && !b.exclude)) { @@ -1573,7 +1598,7 @@ } }); this.hpRules = this.hpRules.filter(item => { - return item && !matchedRules.find(rule => item.url == rule.url && JSON.stringify(item) == JSON.stringify(rule)); + return item && !matchedRules.find(rule => item.url === rule.url && JSON.stringify(item) === JSON.stringify(rule)); }); if (instead) { if (url) this.hpRules.unshift(this.curSiteRule); @@ -1652,11 +1677,11 @@ getValidSize(ele, win) { if (!win) return {h: 0, w: 0}; let eleStyle = win.getComputedStyle(ele); - if (!ele.offsetParent && (eleStyle.position != "fixed" || eleStyle.opacity == 0)) { + if (!ele.offsetParent && (eleStyle.position !== "fixed" || eleStyle.opacity === 0)) { return {h: 0, w: 0}; } let h = ele.scrollHeight; - if (eleStyle.overflow == "hidden") { + if (eleStyle.overflow === "hidden") { h = ele.offsetHeight; } if (h === 0 && ele.parentNode && ele.parentNode.children.length === 1) { @@ -1672,20 +1697,20 @@ let childSize = self.getValidSize(el, win); if (childSize.h > maxChildSize.h) maxChildSize = childSize; }); - if (maxChildSize.h != 0) return maxChildSize; + if (maxChildSize.h !== 0) return maxChildSize; } const maxNum = 2147483647; let moreChild = ele.children[0], minOffsetTop = maxNum; while (moreChild) { - if ((moreChild.offsetParent == ele || moreChild.offsetParent == ele.offsetParent)) { - let curOffsetTop = moreChild.offsetParent == ele.offsetParent ? moreChild.offsetTop - ele.offsetTop : moreChild.offsetTop; + if ((moreChild.offsetParent === ele || moreChild.offsetParent === ele.offsetParent)) { + let curOffsetTop = moreChild.offsetParent === ele.offsetParent ? moreChild.offsetTop - ele.offsetTop : moreChild.offsetTop; if (curOffsetTop < minOffsetTop) { minOffsetTop = curOffsetTop; } } moreChild = moreChild.nextElementSibling; } - if (h && minOffsetTop != maxNum && minOffsetTop > 0) { + if (h && minOffsetTop !== maxNum && minOffsetTop > 0) { h -= minOffsetTop; } return {h: h, w: parseInt(ele.offsetWidth || ele.scrollWidth)}; @@ -1697,7 +1722,7 @@ let paStyle = curWin.getComputedStyle(ele.parentNode); let paDisplay = paStyle.display; let paOverflow = paStyle.overflow; - pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection == "row" && paStyle.flexWrap !== "wrap") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow == "hidden"; + pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection === "row" && paStyle.flexWrap !== "wrap") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow === "hidden"; } let curStyle = curWin.getComputedStyle(ele); if (ele.children.length > 1) { @@ -1707,19 +1732,19 @@ let hasText = false; for (let i in ele.childNodes) { let child = ele.childNodes[i]; - if (child.nodeType == 3 && child.nodeValue.trim() !== '') { + if (child.nodeType === 3 && child.nodeValue.trim() !== '') { return ""; } } if (!hasText) { let gridArea = curStyle.gridArea; - if (gridArea && gridArea != "auto" && gridArea != "auto / auto / auto / auto") { + if (gridArea && gridArea !== "auto" && gridArea !== "auto / auto / auto / auto") { return ">*"; } else { let middleChild = ele.children[parseInt(ele.children.length / 2)]; - if ((curStyle.display === 'flex' && curStyle.flexDirection == "row" && curStyle.flexWrap !== "wrap") || (curStyle.float == "none" && rulesData.opacity != 0 && !pf)) { + if ((curStyle.display === 'flex' && curStyle.flexDirection === "row" && curStyle.flexWrap !== "wrap") || (curStyle.float === "none" && rulesData.opacity !== 0 && !pf)) { return ""; - } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight == 0) { + } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight === 0) { return ""; } else { return ">*"; @@ -1734,7 +1759,7 @@ } getPageElement(doc, curWin, dontFind) { - if (doc == document && this.docPageElement && document.documentElement.contains(this.docPageElement[0])) { + if (doc === document && this.docPageElement && document.documentElement.contains(this.docPageElement[0])) { return this.docPageElement; } let pageElement = null; @@ -1746,7 +1771,7 @@ pageElementSel = pageElementSel[nextIndex < pageElementSel.length ? nextIndex : 0]; } pageElement = getAllElements(pageElementSel, doc); - if (this.curSiteRule.smart && (!pageElement || pageElement.length == 0)) { + if (this.curSiteRule.smart && (!pageElement || pageElement.length === 0)) { const childSelMatch = />\s*\*$/; const targetChild = childSelMatch.test(pageElementSel); if (targetChild) pageElementSel = pageElementSel.replace(childSelMatch, ""); @@ -1755,7 +1780,7 @@ pageElementSelSplit.shift(); let tempSel = pageElementSelSplit.join(">"); pageElement = getAllElements(tempSel, doc); - if (pageElement && pageElement.length == 1) { + if (pageElement && pageElement.length === 1) { if (targetChild) { pageElement = pageElement.children; } @@ -1763,10 +1788,10 @@ break; } } - if (!pageElement || pageElement.length == 0) { + if (!pageElement || pageElement.length === 0) { pageElementSel = pageElementSel.replace(/:nth-of-type\(\d+\)/g, ""); pageElement = getAllElements(pageElementSel, doc); - if (pageElement && pageElement.length == 1) { + if (pageElement && pageElement.length === 1) { if (targetChild) { pageElement = pageElement.children; } @@ -1774,7 +1799,7 @@ } } } - if (this.curSiteRule.smart && pageElement && pageElement.length && curWin && curWin != _unsafeWindow) { + if (this.curSiteRule.smart && pageElement && pageElement.length && curWin && curWin !== _unsafeWindow) { let parent = pageElement[0].parentNode; let loading = parent.querySelector('[class*=loading]'); if (loading && loading.offsetParent && loading.offsetHeight > parent.offsetHeight>>2) { @@ -1798,7 +1823,7 @@ newTdNum += el.colSpan || 1; } }); - if (mainTdNum != newTdNum) { + if (mainTdNum !== newTdNum) { this.curSiteRule.pageElement = this.curSiteRule.pageElement.replace(/> *table.*/, ">table"); this.getInsert(true); return this.getPageElement(doc, curWin, dontFind); @@ -1820,11 +1845,11 @@ debug(self.curSiteRule.pageElement, 'Page element'); return [ele.parentNode]; } - if (ele.children && ele.children.length == 1) { + if (ele.children && ele.children.length === 1) { let hasText = false; for (let i in ele.childNodes) { let child = ele.childNodes[i]; - if (child.nodeType == 3 && child.nodeValue.trim() !== '') { + if (child.nodeType === 3 && child.nodeValue.trim() !== '') { hasText = true; break; } @@ -1836,24 +1861,24 @@ curWidth = validSize.w; } } - if (compareNodeName(ele, ["picture"]) || !ele.innerText || ele.innerText.trim() == '') { + if (compareNodeName(ele, ["picture"]) || !ele.innerText || ele.innerText.trim() === '') { self.curSiteRule.pageElement = geneSelector(ele.parentNode) + ">" + ele.nodeName.toLowerCase(); debug(self.curSiteRule.pageElement, 'Page element'); let eles = []; for (let i = 0; i < ele.parentNode.children.length; i++) { let curNode = ele.parentNode.children[i]; - if (curNode.nodeName == ele.nodeName && curNode.id == ele.id && curNode.className == ele.className) { + if (curNode.nodeName === ele.nodeName && curNode.id === ele.id && curNode.className === ele.className) { eles.push(curNode); } } return eles; } - if (compareNodeName(ele, ["form"]) && ele.parentNode != getBody(document)) { + if (compareNodeName(ele, ["form"]) && ele.parentNode !== getBody(document)) { self.curSiteRule.pageElement = geneSelector(ele) + ">*"; debug(self.curSiteRule.pageElement, 'Page element'); return ele.children; } - if (ele.children.length == 0 && !self.curSiteRule.pageElement) { + if (ele.children.length === 0 && !self.curSiteRule.pageElement) { if (compareNodeName(ele.parentNode, ["p"])) ele = ele.parentNode; self.curSiteRule.pageElement = geneSelector(ele.parentNode) + ">" + ele.nodeName.toLowerCase(); debug(self.curSiteRule.pageElement, 'Page element'); @@ -1870,10 +1895,10 @@ } if (compareNodeName(curNode, ["canvas", "nav"])) continue; let curStyle = curWin.getComputedStyle(curNode); - if (!curNode.offsetParent && (curStyle.position != "fixed" || curStyle.opacity == 0)) { + if (!curNode.offsetParent && (curStyle.position !== "fixed" || curStyle.opacity === 0)) { continue; } - if (!compareNodeName(curNode, ["img"]) && curNode.querySelector('img') == null && /^\s*$/.test(curNode.innerText)) continue; + if (!compareNodeName(curNode, ["img"]) && curNode.querySelector('img') === null && /^\s*$/.test(curNode.innerText)) continue; if (needCheckNext && !curNode.contains(self.initNext) && getElementTop(curNode) > windowHeight) { continue; } @@ -1882,7 +1907,7 @@ let h = validSize.h; let w = validSize.w; if (isNaN(h) || isNaN(w)) continue; - isHori = Math.abs(preOffsetTop - curNode.offsetTop) <= 20 ? true : (preOffsetTop == -1 && curNode.nextElementSibling && curNode.nextElementSibling.offsetTop == curNode.offsetTop); + isHori = Math.abs(preOffsetTop - curNode.offsetTop) <= 20 ? true : (preOffsetTop === -1 && curNode.nextElementSibling && curNode.nextElementSibling.offsetTop === curNode.offsetTop); if (isHori && h <= 50) continue; /*if (isHori && nextLeftPos && curMaxEle && curWidth > 500 && curHeight > 500) { let curRect = curNode.getBoundingClientRect(); @@ -1898,7 +1923,7 @@ if (h < ch) { h = ch; } - if (moreChild.innerText != "" && ch && cw) { + if (moreChild.innerText !== "" && ch && cw) { a += ch * cw; } moreChild = moreChild.nextElementSibling; @@ -1913,12 +1938,12 @@ } } } else { - if (curMaxEle && curMaxEle.offsetParent == curNode.offsetParent && curMaxEle.offsetTop == curNode.offsetTop) { + if (curMaxEle && curMaxEle.offsetParent === curNode.offsetParent && curMaxEle.offsetTop === curNode.offsetTop) { if (curMaxArea * 2 > a) continue; } isMax = curMaxArea < a; } - if (curMaxEle == null || isMax) { + if (curMaxEle === null || isMax) { if (isHori) { if (w < minWidth) { continue; @@ -1938,7 +1963,7 @@ } if (curMaxEle && curHeight / bodyHeight <= 0.18) { let article = doc.querySelectorAll(mainSel); - if (article && article.length == 1) { + if (article && article.length === 1) { article = article[0]; let childrenEnd = self.checkTargetChildren(article, curWin, articleNum, curHeight); self.curSiteRule.pageElement = article.nodeName.toLowerCase() + (article.id ? "#" + article.id : "") + (article.className ? "." + article.className.replace(/ /g, ".") : "") + childrenEnd; @@ -1952,9 +1977,9 @@ if (curMaxEle.className) { for(i = 0; i < ele.children.length; i++) { let curNode = ele.children[i]; - if (curMaxEle != curNode && curNode.style.display !== 'none' && curMaxEle.className == curNode.className && curMaxEle.nodeName == curNode.nodeName){ + if (curMaxEle !== curNode && curNode.style.display !== 'none' && curMaxEle.className === curNode.className && curMaxEle.nodeName === curNode.nodeName){ sameClassNum++; - } else if (curMaxEle.className != curNode.className) { + } else if (curMaxEle.className !== curNode.className) { hasDifferent = true; } } @@ -1963,7 +1988,7 @@ return checkElement(curMaxEle); } } - if (ele.nodeName == "APP-ROOT") { + if (ele.nodeName === "APP-ROOT") { isPause = true; debug(ele, "Angular root"); return null; @@ -1978,7 +2003,7 @@ return ele.children; } let imgs = ele.querySelectorAll('img'); - if (imgs.length == 1) { + if (imgs.length === 1) { let img = imgs[0]; if (img.offsetWidth > ele.offsetWidth / 3 * 2 && img.offsetHeight > ele.offsetHeight / 2) { ele = img; @@ -2004,7 +2029,7 @@ pageElement = []; sideController.remove(); } else { - if (pageElement.length == 1 && compareNodeName(pageElement[0], ["img"])) { + if (pageElement.length === 1 && compareNodeName(pageElement[0], ["img"])) { self.curSiteRule.pageBar = 0; } } @@ -2114,12 +2139,12 @@ } checkItem.style.contentVisibility = "visible"; } else { - if (top < viewPortHeight && checkItem.style.contentVisibility == "auto") { + if (top < viewPortHeight && checkItem.style.contentVisibility === "auto") { break; } else checkItem.style.contentVisibility = "auto"; } } - if (tempIndex == 0) break; + if (tempIndex === 0) break; tempIndex--; checkItem = this.visibilityItems[tempIndex]; } @@ -2139,12 +2164,12 @@ lastVisible = tempIndex; checkItem.style.contentVisibility = "visible"; } else { - if (findVisible && checkItem.style.contentVisibility == "auto") { + if (findVisible && checkItem.style.contentVisibility === "auto") { break; } else checkItem.style.contentVisibility = "auto"; } } - if (tempIndex == this.visibilityItems.length - 1) break; + if (tempIndex === this.visibilityItems.length - 1) break; tempIndex++; checkItem = this.visibilityItems[tempIndex]; } @@ -2201,7 +2226,7 @@ } hrefIsJs(href) { - return /^(javascript|#)/.test(href.trim().replace("#p{", "").replace(location.href, "")) + return /^(javascript|#)/.test(href.trim().replace("#p{", "").replace(location.href, "")); } async querySelectorList(source, list) { @@ -2217,7 +2242,7 @@ verifyElement(ele) { let verifyHandler = e => { if (e.nodeType == 9) return true; - if (e.style.display == "none" || e.getAttribute("aria-disabled") == "true") { + if (e.style.display === "none" || e.getAttribute("aria-disabled") === "true") { return false; } if (e.className) { @@ -2243,7 +2268,7 @@ } async getPage(doc, exist) { - if (document.documentElement.className.indexOf('discourse') != -1) return {}; + if (document.documentElement.className.indexOf('discourse') !== -1) return {}; let body = getBody(doc); let canSave = false;//發現頁碼選擇器在其他頁對不上,還是別保存了 let url = this.curUrl.slice(0, 250).replace("index.php?", "?"); @@ -2357,7 +2382,7 @@ await sleep(1); next = body.querySelector("a.curr+a") || body.querySelector("div.wp-pagenavi>span.current+a,div.page-nav>span.current+a,div.article-paging>span+a") || - body.querySelector(".number>ul>li.active+li>a");; + body.querySelector(".number>ul>li.active+li>a"); } if (!next) { await sleep(1); @@ -2371,7 +2396,7 @@ if (!next) { await sleep(1); next = body.querySelector(".pages>a[href='javascript:;']+a"); - if (next && (next.href == "javascript:;" || next.getAttribute("href") == "#")) next = null; + if (next && (next.href === "javascript:;" || next.getAttribute("href") === "#")) next = null; } if (!next) { await sleep(1); @@ -2407,13 +2432,13 @@ let aTags = body.querySelectorAll("a,button,[type='button']"); for (i = aTags.length - 1; i >= 0; i--) { if (next1) break; - if (i % 100 == 0) { + if (i % 100 === 0) { await sleep(1); } let aTag = aTags[i]; let innerText = (aTag.title || aTag.innerText || aTag.value || ''); if (innerText) { - if (innerText == "§") continue; + if (innerText === "§") continue; innerText = innerText.trim(); if (innerText.length > 80) continue; } @@ -2461,7 +2486,7 @@ if (!next4) { let prevEle = aTag.previousElementSibling; if (prevEle && compareNodeName(prevEle, ["b", "span", "strong"])) { - if (/^\d+$/.test(aTag.innerText.trim()) && /^\d+$/.test(prevEle.innerText.trim()) && parseInt(aTag.innerText) == parseInt(prevEle.innerText) + 1) { + if (/^\d+$/.test(aTag.innerText.trim()) && /^\d+$/.test(prevEle.innerText.trim()) && parseInt(aTag.innerText) === parseInt(prevEle.innerText) + 1) { next4 = aTag; } } @@ -2477,9 +2502,9 @@ if (_aHrefTrim == pageNum + 1) { next4 = aTag; } - } else if (this.curUrl != aTag.href) { + } else if (this.curUrl !== aTag.href) { _aHref = _aHref.replace(/\.s?html?$/i, ""); - if (_aHref.indexOf(_url) != -1) { + if (_aHref.indexOf(_url) !== -1) { let pageTwoMatch = _aHref.replace(_url, "").match(pageTwoReg); if (pageTwoMatch) { afterStr = pageTwoMatch[2]; @@ -2524,7 +2549,7 @@ if (!next) next = next1 || next4 || next3 || next2; if (!next) { next = jsNext || nextJs1 || nextJs2; - if (next && next.parentNode.className && next.parentNode.className.indexOf && next.parentNode.className.indexOf('tab') != -1) next = null; + if (next && next.parentNode.className && next.parentNode.className.indexOf && next.parentNode.className.indexOf('tab') !== -1) next = null; } if (next && next.classList && (next.classList.contains("results-more") || next.classList.contains("no"))) next = null; if (next && next.hasAttribute && next.hasAttribute("disabled")) next = null; @@ -2536,12 +2561,12 @@ if (!next) return null; if (next.previousElementSibling && compareNodeName(next.previousElementSibling, ["br"])) return null; let eles = []; - if (next.innerText && next.innerText.indexOf("\n") == -1) { + if (next.innerText && next.innerText.indexOf("\n") === -1) { eles = getAllElements(`//${next.nodeName}[text()='${next.innerText}']`, doc); } - if (eles.length >= 2 && eles[0].href != eles[1].href) { + if (eles.length >= 2 && eles[0].href !== eles[1].href) { next = null; - } else if (doc == document) { + } else if (doc === document) { let left = getElementLeft(next); if (left < 20 || (document.documentElement.scrollWidth > 500 && left < 250)) { next = null; @@ -2563,8 +2588,8 @@ if (!src) { return ""; } - if (src.charAt(0) == "#") return this.curUrl + src; - if (src.charAt(0) == "?") return this.curUrl.replace(/^([^\?#]+).*/, "$1" + src); + if (src.charAt(0) === "#") return this.curUrl + src; + if (src.charAt(0) === "?") return this.curUrl.replace(/^([^\?#]+).*/, "$1" + src); let origin = location.protocol + '//' + location.host; let url = this.basePath || origin; url = url.replace(/(\?|#).*/, ""); @@ -2583,7 +2608,7 @@ if (/^\/\/\/?/.test(src)) { src = location.protocol + src; } - return (absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src)); + return (absolute_regex.test(src) ? src : ((src.charAt(0) === "/" ? root_domain : root_page) + src)); } getLinkByPage(url, pageNum) { @@ -2594,7 +2619,7 @@ if (!strMatch) return null; let urlReg = new RegExp("(" + result.replace(strMatch[0], ")\\d+(") + ")", "i"); let code = strMatch[0].replace(/^{/, "").replace(/}$/, "").replace(/\$p/g, pageNum); - if (code == pageNum) { + if (code === pageNum) { result = url.replace(urlReg, "$1" + code + "$2"); } else { try { @@ -2621,9 +2646,9 @@ if (!strMatch) return defaultPage; let urlReg = new RegExp(".*" + result.replace(strMatch[0], "(\\d+)") + ".*", "i"); let curShowNum = url.replace(urlReg, "$1"); - if (curShowNum != url) { + if (curShowNum !== url) { let code = strMatch[0].replace(/^{/, "").replace(/}$/, ""); - if (code == "$p") { + if (code === "$p") { return curShowNum; } else { try { @@ -2631,7 +2656,7 @@ let page2 = parseInt(Function('"use strict";return ' + code.replace("$p", "1"))()); let numGap = page2 - page1; let _page = (parseInt(curShowNum) - page1) / numGap; - if (_page && _page % 1 == 0) return _page; + if (_page && _page % 1 === 0) return _page; else { this.curSiteRule.pageNum = null; return defaultPage; @@ -2645,7 +2670,7 @@ } } let pageNum = url.replace(/.*[&\/\?](p=|page[=\/_-]?)(\d+).*/i, "$2"); - return pageNum == url ? defaultPage : (pageNum.length > 4 ? defaultPage : pageNum); + return pageNum === url ? defaultPage : (pageNum.length > 4 ? defaultPage : pageNum); } async getNextLink(doc, exist) { @@ -2667,23 +2692,22 @@ } } params = params.join('&'); - return form.action + (form.action.indexOf('?') == -1 ? '?' : '&') + params + (form.method == 'post' ? '#p{' + params + '}' : ''); + return form.action + (form.action.indexOf('?') === -1 ? '?' : '&') + params + (form.method === 'post' ? '#p{' + params + '}' : ''); }; if (this.curSiteRule.pageElementByJs) { this.nextLinkHref = "#"; return true; } else if (this.curSiteRule.nextLinkByJs) { try { - let over = _url => { - }; - let targetUrl = await ((typeof this.curSiteRule.nextLinkByJs == 'function') ? this.curSiteRule.nextLinkByJs : new AsyncFunction("doc", '"use strict";' + this.curSiteRule.nextLinkByJs))(doc); + let over = _url => {}; + let targetUrl = await ((typeof this.curSiteRule.nextLinkByJs === 'function') ? this.curSiteRule.nextLinkByJs : new AsyncFunction("doc", '"use strict";' + this.curSiteRule.nextLinkByJs))(doc); if (targetUrl) nextLink = {href: targetUrl}; } catch(e) { debug(e); } } else if (this.curSiteRule.nextLinkByUrl) { let targetUrl = this.curUrl.replace(new RegExp(this.curSiteRule.nextLinkByUrl[0], "i"), this.curSiteRule.nextLinkByUrl[1]); - if (targetUrl != this.curUrl) { + if (targetUrl !== this.curUrl) { let includeSel = this.curSiteRule.nextLinkByUrl[2]; let excludeSel = this.curSiteRule.nextLinkByUrl[3]; if (includeSel) { @@ -2719,24 +2743,24 @@ } } nextLink = {href: targetUrl}; - } else if (typeof this.curSiteRule.nextLink != 'undefined') { + } else if (typeof this.curSiteRule.nextLink !== 'undefined') { let nextLinkSel = this.curSiteRule.nextLink; if (nextLinkSel != 0) { if (Array && Array.isArray && Array.isArray(nextLinkSel)) { nextLink = getElement(nextLinkSel[nextIndex], doc, null, true); - if (!nextLink && curPage == 1 && nextIndex != 0) { + if (!nextLink && curPage === 1 && nextIndex !== 0) { nextIndex = 0; nextLink = getElement(nextLinkSel[nextIndex], doc, null, true); } } else nextLink = getElement(nextLinkSel, doc, null, true); } - if (nextLink && (this.curSiteRule.action == 0 || this.curSiteRule.action == 1 || this.curSiteRule.action == 2)) { + if (nextLink && (this.curSiteRule.action === 0 || this.curSiteRule.action === 1 || this.curSiteRule.action === 2)) { let form = doc.querySelector('#search-form'); if (!nextLink.href && nextLink.hasAttribute && nextLink.hasAttribute("onclick") && form) { if (/^\d+$/.test(nextLink.innerText)) { nextLink.href = getNextLinkByForm(form, nextLink, nextLink.innerText); } - } else if (compareNodeName(nextLink, ["input"]) || nextLink.type == "submit") { + } else if (compareNodeName(nextLink, ["input"]) || nextLink.type === "submit") { form = nextLink.parentNode; while (form) { if (compareNodeName(form, ["form"])) break; @@ -2746,7 +2770,7 @@ nextLink.href = getNextLinkByForm(form, nextLink); } } - if (nextLink.href && this.curSiteRule.action != 0) { + if (nextLink.href && this.curSiteRule.action !== 0) { nextLink.href = nextLink.href.replace(/#p{.*/, ""); } } @@ -2754,7 +2778,7 @@ page = await this.getPage(doc, exist); nextLink = page.next; if (nextLink) { - if (compareNodeName(nextLink, ["input"]) || nextLink.type == "submit") { + if (compareNodeName(nextLink, ["input"]) || nextLink.type === "submit") { if (!/next/i.test(nextLink.getAttribute("onclick"))) { let form = nextLink.parentNode; while (form) { @@ -2784,7 +2808,7 @@ } parent = parent.parentNode; } - if (doc == document) { + if (doc === document) { if (!this.linkHasHref(nextLink)) { if (clickedSth || !isVisible(nextLink, _unsafeWindow)) { this.nextLinkHref = false; @@ -2792,7 +2816,7 @@ } let video = document.querySelector("video,iframe[id*=play],[id*=play]>iframe,iframe[src*=player],iframe[src*=m3u8]"); if (video) { - if (video.offsetParent && video.name != 'pagetual-iframe') { + if (video.offsetParent && video.name !== 'pagetual-iframe') { let scrollWidth = video.scrollWidth || video.offsetWidth; let scrollHeight = video.scrollHeight || video.offsetHeight; if (compareNodeName(video, ["iframe"])) { @@ -2820,7 +2844,7 @@ } let nextLinkCs = _unsafeWindow.getComputedStyle(nextLink); - if (nextLinkCs.cursor == "not-allowed") { + if (nextLinkCs.cursor === "not-allowed") { this.nextLinkHref = false; return null; } @@ -2839,16 +2863,16 @@ if (curPage > 1 && rulesData.lastPageTips) showTips(i18n("lastPage"), "", 800); return null; } - if (this.curSiteRule.action == 3) { + if (this.curSiteRule.action === 3) { if (doc == document) debug(nextLink, 'Next link'); this.nextLinkHref = '#'; } else { - let needUrl = (this.curSiteRule.action == 0 || this.curSiteRule.action == 1 || this.curSiteRule.action == 2); + let needUrl = (this.curSiteRule.action === 0 || this.curSiteRule.action === 1 || this.curSiteRule.action === 2); if (!href) href = nextLink.href; if (href && nextLink.getAttribute) { let _href = nextLink.getAttribute("href"); if (_href) { - if (_href.charAt(0) == "#" || _href == "?"){ + if (_href.charAt(0) === "#" || _href === "?"){ href = "#"; } else { href = _href; @@ -2865,9 +2889,9 @@ } else { this.nextLinkHref = (href && !/^(javascript:|#)/.test(href)) ? this.canonicalUri(href) : "#"; let tempUrl = this.nextLinkHref; - if (tempUrl != "#" && (this.compareUrl(tempUrl, this.initUrl) || this.compareUrl(tempUrl, this.curUrl) || this.compareUrl(tempUrl, this.curUrl + "#") || this.compareUrl(tempUrl, this.oldUrl) || this.compareUrl(tempUrl, this.oldUrl + "#"))) { + if (tempUrl !== "#" && (this.compareUrl(tempUrl, this.initUrl) || this.compareUrl(tempUrl, this.curUrl) || this.compareUrl(tempUrl, this.curUrl + "#") || this.compareUrl(tempUrl, this.oldUrl) || this.compareUrl(tempUrl, this.oldUrl + "#"))) { this.nextLinkHref = false; - } else if (doc == document) { + } else if (doc === document) { debug(nextLink, 'Next link'); } } @@ -2881,7 +2905,7 @@ } compareUrl(url1, url2) { - if (url1 == url2) return true; + if (url1 === url2) return true; if (!url1 || !url2) return false; let url1Arr = url1.split("?"); let url2Arr = url2.split("?"); @@ -2889,7 +2913,7 @@ if (!url1Arr[1] || !url2Arr[1]) return false; url1Arr = url1Arr[1].split("&").sort().join("&"); url2Arr = url2Arr[1].split("&").sort().join("&"); - return url1Arr == url2Arr; + return url1Arr === url2Arr; } filterEles(doc, eles) { @@ -2901,7 +2925,7 @@ eles = eles[0].children; } } - if (typeof filter == "string") { + if (typeof filter === "string") { if (/^\d+$/.test(filter)) { filter = {count: parseInt(filter)}; } else filter = {words: filter}; @@ -3004,7 +3028,7 @@ } } else { try { - let stopSign = ((typeof this.curSiteRule.stopSign == 'function') ? this.curSiteRule.stopSign : Function("doc", "nextLink", '"use strict";' + this.curSiteRule.stopSign))(doc, nextLink); + let stopSign = ((typeof this.curSiteRule.stopSign === 'function') ? this.curSiteRule.stopSign : Function("doc", "nextLink", '"use strict";' + this.curSiteRule.stopSign))(doc, nextLink); if (stopSign) { isPause = true; this.nextLinkHref = false; @@ -4811,7 +4835,7 @@ } const picker = new Picker(); - var editor, editorChanged = false; + var editor, editorChanged = false, customRulesInput; function createEdit() { var options = { mode: 'code', @@ -4863,18 +4887,24 @@ var container = document.getElementById("jsoneditor"); container.style.height = '800px'; container.innerHTML = ""; - editor = new JSONEditor(container, options); - editor.set(ruleParser.customRules); + try { + editor = new _unsafeWindow.JSONEditor(container, options); + editor.set(ruleParser.customRules); + } catch (e) { + editor = null; + container.style.display = 'none'; + customRulesInput.style.display = ""; + } }, 500); } function checkGuidePage(href) { if (guidePage.test(href)) { - if (typeof JSONEditor !== 'undefined') { + if (typeof _unsafeWindow.JSONEditor !== 'undefined') { createEdit(); } else { let checkEditorReady = setInterval(() => { - if (typeof JSONEditor !== 'undefined') { + if (typeof _unsafeWindow.JSONEditor !== 'undefined') { createEdit(); clearInterval(checkEditorReady); } @@ -5634,7 +5664,7 @@ let customRulesTitle = document.createElement("h2"); customRulesTitle.innerHTML = i18n("customRules", /tree/.test(location.href) ? location.href.replace('tree', 'edit').replace(/\/$/, '') + '/pagetualRules.json' : 'https://github.com/hoothin/UserScripts/edit/master/Pagetual/pagetualRules.json'); configCon.appendChild(customRulesTitle); - let customRulesInput = document.createElement("textarea"); + customRulesInput = document.createElement("textarea"); customRulesInput.spellcheck = false; configCon.appendChild(customRulesInput); if (rulesData.editTemp) { @@ -8188,11 +8218,11 @@ function loadPageOver() { isLoading = false; stopScroll = true; - setTimeout(() => {stopScroll = false}, 300); + setTimeout(() => {stopScroll = false;}, 300); if (loadingDiv.parentNode) { loadingDiv.parentNode.removeChild(loadingDiv); } - if (rate != 1 && !clickMode) { + if (rate !== 1 && !clickMode) { setTimeout(() => { if (distToBottom() < bottomGap) { nextPage(); @@ -8203,7 +8233,7 @@ function checkAutoLoadNum() { if (autoLoadNum >= 0) { - if (autoLoadNum != 0 && --autoLoadNum == 0) { + if (autoLoadNum !== 0 && --autoLoadNum === 0) { autoLoadNum = -1; } else { setTimeout(() => nextPage(), 1); @@ -8212,12 +8242,12 @@ } async function nextPage() { - if (typeof ruleParser.curSiteRule.manualMode == 'undefined' ? rulesData.manualMode : ruleParser.curSiteRule.manualMode) return; + if (typeof ruleParser.curSiteRule.manualMode === 'undefined' ? rulesData.manualMode : ruleParser.curSiteRule.manualMode) return; if (clickMode) return; - if (isPause || isLoading || forceState == 1) return; + if (isPause || isLoading || forceState === 1) return; if (ruleParser.curSiteRule.delay) { try { - let checkDelay = ((typeof ruleParser.curSiteRule.delay == 'function') ? ruleParser.curSiteRule.delay : Function('"use strict";' + ruleParser.curSiteRule.delay))(); + let checkDelay = ((typeof ruleParser.curSiteRule.delay === 'function') ? ruleParser.curSiteRule.delay : Function('"use strict";' + ruleParser.curSiteRule.delay))(); if (!checkDelay) return; } catch(e) { debug(e); @@ -8226,16 +8256,16 @@ let nextLink = ruleParser.nextLinkHref; if (!nextLink) { isLoading = true; - if (curPage == 1) { + if (curPage === 1) { await ruleParser.getNextLink(document, true); nextLink = ruleParser.nextLinkHref; } if (!nextLink) { - if (curPage == 1) { + if (curPage === 1) { if (ruleParser.curSiteRule.pinUrl) { - setTimeout(() => {isLoading = false}, 500); + setTimeout(() => {isLoading = false;}, 500); } else if (tryTimes++ < 3) { - setTimeout(() => {isLoading = false}, 1000); + setTimeout(() => {isLoading = false;}, 1000); } else { ruleParser.findNoNext(); } @@ -8249,25 +8279,25 @@ } showedLastPageTips = false; let pvGallery = document.querySelector("span.pv-gallery-container"); - if (pvGallery && pvGallery.style.display != "none") return; + if (pvGallery && pvGallery.style.display !== "none") return; let insert = ruleParser.getInsert(); if (insert) { - if (curPage == 1) initView(); + if (curPage === 1) initView(); /*if (curPage == 1) { window.postMessage({ command: 'pagetual.insert' }, '*'); }*/ - let isJs = ruleParser.curSiteRule.action == 3 || ruleParser.hrefIsJs(nextLink); + let isJs = ruleParser.curSiteRule.action === 3 || ruleParser.hrefIsJs(nextLink); if (!isJs) { emuIframe = null; lastActiveUrl = nextLink; - if (location.protocol == "https:" && /^http:/.test(nextLink)) { + if (location.protocol === "https:" && /^http:/.test(nextLink)) { nextLink = nextLink.replace(/^http/, "https"); } } isLoading = true; - if (curPage != 1 || !isJs || !ruleParser.curSiteRule.smart) { + if (curPage !== 1 || !isJs || !ruleParser.curSiteRule.smart) { ruleParser.beginLoading(loadingDiv); } let sleep = ruleParser.curSiteRule.sleep || 0; @@ -8290,11 +8320,11 @@ } }; try { - ((typeof ruleParser.curSiteRule.pageElementByJs == 'function') ? ruleParser.curSiteRule.pageElementByJs : Function("over", "pageNum",'"use strict";' + ruleParser.curSiteRule.pageElementByJs))(over, curPage); + ((typeof ruleParser.curSiteRule.pageElementByJs === 'function') ? ruleParser.curSiteRule.pageElementByJs : Function("over", "pageNum",'"use strict";' + ruleParser.curSiteRule.pageElementByJs))(over, curPage); } catch(e) { debug(e); } - } else if ((forceState == 2 || ruleParser.curSiteRule.action == 2) && !isJs) { + } else if ((forceState === 2 || ruleParser.curSiteRule.action === 2) && !isJs) { forceIframe(nextLink, (iframe, refresh) => { if (urlChanged || isPause) { loadPageOver(); @@ -8307,7 +8337,7 @@ loadPageOver(); checkAutoLoadNum(); }); - } else if ((forceState == 3 || ruleParser.curSiteRule.action == 1) && !isJs) { + } else if ((forceState === 3 || ruleParser.curSiteRule.action === 1) && !isJs) { requestFromIframe(nextLink, (doc, eles) => { if (urlChanged || isPause) { loadPageOver(); @@ -8352,13 +8382,13 @@ } function init() { - if (document.readyState == 'loading' || document.readyState == 'uninitialized') { + if (document.readyState === 'loading' || document.readyState === 'uninitialized') { let domReady = e => { initRules(() => { initPage(); }); document.removeEventListener("DOMContentLoaded", domReady, false); - } + }; document.addEventListener("DOMContentLoaded", domReady, false); } else { initRules(() => { @@ -8379,4 +8409,4 @@ init(); } }, 300); -})(); +})(); \ No newline at end of file From 5abefb147c0e45a74abe8ef5c48232dd154379d0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 13 Dec 2023 11:37:04 +0800 Subject: [PATCH 550/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index b37df69e527..8070e148802 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.52 +// @version 1.7.53 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -58,7 +58,7 @@ (function() { 'use strict'; if (window.name === 'pagetual-iframe' || (window.frameElement && window.frameElement.name === 'pagetual-iframe')) return; - const inIframe = window.top != window.self; + const inIframe = window.top !== window.self; if (inIframe) { try { if (window.self.innerWidth < 300 || window.self.innerHeight < 300) { @@ -73,7 +73,7 @@ let configPage = 'https://search.hoothin.com/config/'; let isAllPage = false; - var searchData = {}; + let searchData = {}; searchData.sitesConfig = [ { type: "Translate", @@ -465,7 +465,7 @@ switchSitesMeta: false }; function run() { - let lang = navigator.appName == "Netscape" ? navigator.language : navigator.userLanguage; + let lang = navigator.appName === "Netscape" ? navigator.language : navigator.userLanguage; let config = {}; function setLang() { switch (lang) { @@ -872,7 +872,15 @@ } else if (typeof GM != 'undefined' && typeof GM.setClipboard != 'undefined') { _GM_setClipboard = GM.setClipboard; } else { - _GM_setClipboard = (s, i) => {}; + _GM_setClipboard = (s, i) => { + navigator.clipboard.writeText(s) + .then(() => { + console.log('Text copied to clipboard'); + }) + .catch((error) => { + console.error('Failed to copy text: ', error); + }); + }; } if (typeof GM_addStyle != 'undefined') { _GM_addStyle = GM_addStyle; @@ -1710,7 +1718,7 @@ justify-content: flex-start; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { - width: 73%; + width: 78%; max-height: unset; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon { From 9b1742dc458777a70b1ac9aec3b5e565be016c8a Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 13 Dec 2023 14:08:20 +0800 Subject: [PATCH 551/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 8070e148802..6004e485ab8 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1593,12 +1593,12 @@ } #search-jumper-alllist { display: none; - top: 118px; + top: 101px; position: absolute; width: 100%; overflow-x: scroll; overflow-y: hidden; - height: calc(100% - 118px); + height: calc(100% - 101px); overscroll-behavior: contain; -ms-scroll-chaining: contain; } @@ -1653,6 +1653,12 @@ border-bottom: 1px solid #ddd; pointer-events: all; min-height: 40px; + -ms-overflow-style: unset; + scrollbar-width: unset; + } + .search-jumper-historylistcon::-webkit-scrollbar { + width: 0 !important; + height: 0 !important; } .search-jumper-historylist { display: flex; From ffbe5b031d3c43e2ec7aee1945a3457aa3bcc8c2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 13 Dec 2023 15:26:16 +0800 Subject: [PATCH 552/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 6004e485ab8..f5fa15d4c43 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -57,6 +57,7 @@ (function() { 'use strict'; + const ext = false; if (window.name === 'pagetual-iframe' || (window.frameElement && window.frameElement.name === 'pagetual-iframe')) return; const inIframe = window.top !== window.self; if (inIframe) { @@ -794,6 +795,10 @@ }; var disabled = false; + function createHTML(html = "") { + return escapeHTMLPolicy ? escapeHTMLPolicy.createHTML(html) : html; + } + var _GM_xmlhttpRequest, _GM_registerMenuCommand, _GM_notification, _GM_setClipboard, _GM_openInTab, _GM_addStyle, _GM_info, GM_fetch; if (typeof GM_xmlhttpRequest != 'undefined') { _GM_xmlhttpRequest = GM_xmlhttpRequest; @@ -853,7 +858,11 @@ } else { _GM_registerMenuCommand = (s, f) => {}; } - if (typeof GM_openInTab != 'undefined') { + if (ext) { + _GM_openInTab = (s, t) => { + chrome.extension.sendMessage({action:"openInTab", detail:{url: s, incognito: t && t.active, active: t && t.active}}); + }; + } else if (typeof GM_openInTab != 'undefined') { _GM_openInTab = GM_openInTab; } else if (typeof GM != 'undefined' && typeof GM.openInTab != 'undefined') { _GM_openInTab = GM.openInTab; @@ -865,7 +874,7 @@ } else if (typeof GM != 'undefined' && typeof GM.notification != 'undefined') { _GM_notification = s => GM.notification({text: s, onclick: e => _GM_openInTab(configPage, {active: true})}); } else { - _GM_notification = (s) => {alert(s)}; + _GM_notification = (s) => {}; } if (typeof GM_setClipboard != 'undefined') { _GM_setClipboard = GM_setClipboard; @@ -889,7 +898,7 @@ } else { _GM_addStyle = cssStr => { let styleEle = document.createElement("style"); - styleEle.innerHTML = cssStr; + styleEle.innerHTML = createHTML(cssStr); document.head.appendChild(styleEle); return styleEle; }; @@ -923,7 +932,9 @@ } })(), setItem: function (key, value) { - if (this.supportGMPromise) { + if (ext) { + chrome.storage.sync.set({ [key]: value }, () => {}); + } else if (this.supportGMPromise) { GM.setValue(key, value); if(value === "" && typeof GM != 'undefined' && typeof GM.deleteValue != 'undefined'){ GM.deleteValue(key); @@ -943,7 +954,10 @@ }, getItem: async function (key, cb) { var value; - if (this.supportGMPromise) { + if (ext) { + let result = await chrome.storage.sync.get([key]); + value = result[key]; + } else if (this.supportGMPromise) { value = await GM.getValue(key); } else if (this.supportGM) { value = GM_getValue(key); @@ -1142,10 +1156,6 @@ return doc.body || doc.querySelector('body'); } - function createHTML(html = "") { - return escapeHTMLPolicy ? escapeHTMLPolicy.createHTML(html) : html; - } - function getAllElementsByXpath(xpath, contextNode, doc) { doc = doc || document; contextNode = contextNode || doc; @@ -11498,7 +11508,7 @@ shareEngines = null; } } - isAllPage = !!shareEngines || /all\.html$/.test(location.pathname); + isAllPage = !!shareEngines || /all(\.html)?$/.test(location.pathname); return true; } return false; From e8f350adb2e783204eb3cc4ae049e265c4db4254 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 13 Dec 2023 19:09:25 +0800 Subject: [PATCH 553/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 42b0282a33f..55b9e1589bd 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -886,6 +886,7 @@ storage.setItem(list, listData); }); } + const isMobile = ('ontouchstart' in document.documentElement); const configPage = ["https://pagetual.hoothin.com/rule.html", "https://github.com/hoothin/UserScripts/tree/master/Pagetual", "https://hoothin.github.io/UserScripts/Pagetual/"]; @@ -897,9 +898,9 @@ const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434", "i"); const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u007c\u00bb\u007c\u003e\u003e\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; - var rulesData = {uninited: true, firstRun: true}, ruleUrls, updateDate, clickedSth = false; + var rulesData = {uninited: true, firstRun: true, sideController: !isMobile}, ruleUrls, updateDate, clickedSth = false; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; - var tryTimes = 0, showedLastPageTips = false, rate = 1; + var tryTimes = 0, showedLastPageTips = false, rate = 1, author = ''; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; @@ -4120,13 +4121,17 @@ margin: -5px 45px 10px 45px; font-size: 20px; font-weight: bold; - cursor: move; + cursor: pointer; border-bottom: 1px solid black; user-select: none; color: orangered; height: initial; width: initial; position: initial; + transition: transform .3s ease; + } + #pagetual-picker>.title:hover { + transform: scale(1.1); } #pagetual-picker button { background: none; @@ -4451,13 +4456,17 @@ startAutoScroll(); }, true); addOtherProp.addEventListener("click", e => { - let propName = prompt(i18n("propName")); + let propName = prompt(i18n("propName"), "author"); if (!propName) return; let propValue = prompt(i18n("propValue")); if (!propValue) return; if (propValue === "true") propValue = true; else if (propValue === "false") propValue = false; else if (/^\d+$/.test(propValue)) propValue = parseInt(propValue); + if (propName === "author" && propValue) { + author = propValue; + storage.setItem("author", propValue); + } let editTemp = self.getTempRule(); if (!editTemp) return; editTemp[propName] = propValue; @@ -4666,6 +4675,7 @@ url: "^" + (location.origin + location.pathname).replace(/[^\/]*$/, "").replace(/^https?/, "https?").replace(/\./g, "\\."), example: location.href }; + if (author) this.editTemp.author = author; } delete this.editTemp.from; delete this.editTemp.type; @@ -6148,6 +6158,8 @@ updateDate = await getData("ruleLastUpdate"); + author = await getData("author") || ""; + manualPause = !!await getListData("pauseState", location.host); let href = location.href.slice(0, 100); From 8de2b7bde17226eabef82f81b6f8291a9fd033d0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 13 Dec 2023 19:32:10 +0800 Subject: [PATCH 554/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 55b9e1589bd..558f3894430 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -743,7 +743,7 @@ } else if (typeof GM !== 'undefined' && typeof GM.xmlHttpRequest !== 'undefined') { _GM_xmlhttpRequest = GM.xmlHttpRequest; } else { - _GM_xmlhttpRequest = (f) => {fetch(f.url).then(response => response.text()).then(data => {let res = {response:data}; f.onload(res);}).catch(e => f.onerror(e));}; + _GM_xmlhttpRequest = (f) => {fetch(f.url, {method: f.method || 'GET', body: f.data, headers: f.headers}).then(response => response.text()).then(data => {f.onload && f.onload({response: data})}).catch(f.onerror && f.onerror())}; } if (typeof GM_registerMenuCommand !== 'undefined') { _GM_registerMenuCommand = GM_registerMenuCommand; From c4d6e8903327155a83d659f0997b109b4b79605e Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 13 Dec 2023 19:41:24 +0800 Subject: [PATCH 555/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 558f3894430..90313b94ffd 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -5869,11 +5869,23 @@ storage.setItem("smartRules", []); } let allOk = true; + let preLength = ruleParser.rules.length; function addNextRule() { if (ruleIndex < 0) { let now = new Date().getTime(); storage.setItem("ruleLastUpdate", now); storage.setItem("rules", ruleParser.rules); + let curLength = ruleParser.rules.length; + if (curLength !== preLength) { + _GM_notification({ + text: `Rules has updated( ${preLength} => ${curLength} )`, + title: "Pagetual rules updated", + onclick: (event) => { + event.preventDefault(); + _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); + } + }); + } inUpdate = false; if (rulesData.uninited && allOk && ruleUrls.length > 1) { rulesData.uninited = false; From f5b48c2bd6d1b9a08bd669216b93061ac13f5338 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 14 Dec 2023 08:28:28 +0800 Subject: [PATCH 556/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 09013a92bbc..1eff3c52930 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9709,7 +9709,7 @@ "nextLink": "a[title='下一页']", "action": 2, "pageElement": "div#m_posts", - "init": "doc&&doc.addEventListener('mouseover',e=>{e.preventDefault();e.stopPropagation()},true)" + "pageAction": "doc&&doc.addEventListener('mouseover',e=>{e.preventDefault();e.stopPropagation()},true)" }, { "name": "NGA列表页", From fc4498ed869655846f75e844110debaba04d6b7f Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 14 Dec 2023 08:30:48 +0800 Subject: [PATCH 557/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 90313b94ffd..0e90d897615 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -3573,12 +3573,12 @@ } let lastScrollTop = getBody(document).scrollTop || document.documentElement.scrollTop; this.getInsert(); + await this.pageInit(doc, eles); var self = this, newEles = []; if (!eles || eles.length == 0 || !self.insert || !self.insert.parentNode) { if (callback) callback(eles); loadPageOver(); } else { - await this.pageInit(doc, eles); if (callback) callback(eles); loadPageOver(); const collection = document.createDocumentFragment(); @@ -6603,7 +6603,6 @@ 100% { opacity: 1 } } `; - let bodyColor pageBarStyle = `overflow: visible;text-indent: initial;vertical-align: super;line-height:1;opacity:${rulesData.opacity};display:${rulesData.opacity == 0 ? "none" : "inline-flex"};padding:0;font-size: 30px;visibility: visible; position: relative; width: auto; max-width: 100vw; height: 30px; float: none; clear: both; margin: 5px auto; text-align: center;justify-content: center;box-sizing: content-box;${rulesData.opacity == 1 ? "border-top: 1px solid rgb(80, 80, 80);" : "box-shadow: 0px 0px 10px 0px #000000aa;border-radius: 20px;background-color: rgb(240 240 240 / 80%);"}`; } if (!mainStyleEle || !mainStyleEle.parentNode) { From 5e011eb6d4af053128cc02c4d0d5862d44249d9a Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 14 Dec 2023 14:13:47 +0800 Subject: [PATCH 558/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index d604a3fab9d..f551922ec3a 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -1321,5 +1321,16 @@ var siteInfo = [ url: /^https:\/\/civitai\.com\//, r: /\/width=\d+\//, s: "/" +}, +{ + name: "網易雲音樂", + url: /^https:\/\/music\.163\.com\//, + getExtSrc:function() { + if (this.tagName === 'A' && this.className === "msk") { + return this.previousElementSibling.src.replace(/\?param=\d+y\d+/, ""); + } + }, + r: /\?param=\d+y\d+/, + s: "" } ]; From 7347d8b96de11ff1f2978c2c58610dc48088e841 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 14 Dec 2023 21:13:33 +0800 Subject: [PATCH 559/812] 1.9.37.7 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 12ac5f2c179..7415e88fb81 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.6](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.7](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0e90d897615..61bfad5a189 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.6 +// @version 1.9.37.7 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1994,8 +1994,10 @@ debug(ele, "Angular root"); return null; } - if (compareNodeName(ele, ["p", "br", "td"])) ele = ele.parentNode; - else if (compareNodeName(ele, ["tbody"])) { + while (compareNodeName(ele, ["p", "br", "td"])) { + ele = ele.parentNode; + } + if (compareNodeName(ele, ["tbody"])) { self.curSiteRule.pageElement = geneSelector(ele) + ">*"; if (ele.children.length > 0 && ele.children[0].querySelector("th")) { self.curSiteRule.pageElement += ":not(:first-child)"; From de8167489941b522d7d8898e0ae5b4adbb660c7b Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 15 Dec 2023 18:08:30 +0800 Subject: [PATCH 560/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 421 +++++++++++++++++++++--------- 1 file changed, 303 insertions(+), 118 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f5fa15d4c43..c0a363b1780 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.53 +// @version 1.7.54 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -58,6 +58,9 @@ (function() { 'use strict'; const ext = false; + const _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; + if (_unsafeWindow.searchJumperInited) return; + _unsafeWindow.searchJumperInited = true; if (window.name === 'pagetual-iframe' || (window.frameElement && window.frameElement.name === 'pagetual-iframe')) return; const inIframe = window.top !== window.self; if (inIframe) { @@ -356,9 +359,6 @@ }, { name: "🔎 Everything", url: "ES://%s" - }, { - name: "Convert currency", - url: "javascript:fetch(`https://api.exchangerate.host/convert?from=%input{From currency/US Dollar/Euro/Japanese Yen/China Yuan,USD/EUR/JPY/CNY}&to=%input{Target currency/US Dollar/Euro/Japanese Yen/China Yuan,USD/EUR/JPY/CNY}&amount=%sr.replace(/\\D/g,\"\")`).then(r=>r.json()).then(r=>prompt(`${r.date} Exchange rate by the European Central Bank\\n${r.query.amount.toLocaleString()} ${r.query.from} =`,`${r.result.toLocaleString()} ${r.query.to}`)).catch(alert);" } ] }, { @@ -452,7 +452,7 @@ minSizeMode: false, hidePopup: false, minPopup: 0, - selectToShow: false, + selectToShow: ext, expandType: false, rightMouse: true, shiftLastUsedType: true, @@ -806,8 +806,15 @@ } else if (typeof GM != 'undefined' && typeof GM.xmlHttpRequest != 'undefined') { _GM_xmlhttpRequest = GM.xmlHttpRequest; GM_fetch = true; - } else { - _GM_xmlhttpRequest = (f) => {fetch(f.url, {method: f.method || 'GET', body: f.data || '', headers: f.headers}).then(response => response.text()).then(data => {f.onload({response: data})}).catch(f.onerror())}; + } else {//will not cross csp, it's safe! + let res; + _GM_xmlhttpRequest = (f) => {fetch(f.url, {method: f.method || 'GET', body: f.data, headers: f.headers}).then(response => { + res = response; + if (f.responseType === "blob") { + return response.blob(); + } + return response.text(); + }).then(data => {f.onload && f.onload({status: res.status, response: data})}).catch(e => f.onerror && f.onerror(e))}; } if (GM_fetch) { GM_fetch = async (url, option) => { @@ -860,7 +867,7 @@ } if (ext) { _GM_openInTab = (s, t) => { - chrome.extension.sendMessage({action:"openInTab", detail:{url: s, incognito: t && t.active, active: t && t.active}}); + chrome.runtime.sendMessage({action: "openInTab", detail: {url: s, incognito: t && t.incognito, active: t && t.active}}); }; } else if (typeof GM_openInTab != 'undefined') { _GM_openInTab = GM_openInTab; @@ -908,11 +915,8 @@ } else if (typeof GM != 'undefined' && typeof GM.info != 'undefined') { _GM_info = GM.info; } else { - _GM_info = { script: {} }; + _GM_info = { script: {name: 'SearchJumper', version: 0} }; } - var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; - if (_unsafeWindow.searchJumperInited) return; - _unsafeWindow.searchJumperInited = true; if (!_unsafeWindow.searchJumperAddons) _unsafeWindow.searchJumperAddons = []; const curRef = document.referrer; @@ -933,7 +937,7 @@ })(), setItem: function (key, value) { if (ext) { - chrome.storage.sync.set({ [key]: value }, () => {}); + chrome.storage.local.set({ [key]: value }, () => {}); } else if (this.supportGMPromise) { GM.setValue(key, value); if(value === "" && typeof GM != 'undefined' && typeof GM.deleteValue != 'undefined'){ @@ -955,7 +959,7 @@ getItem: async function (key, cb) { var value; if (ext) { - let result = await chrome.storage.sync.get([key]); + let result = await chrome.storage.local.get([key]); value = result[key]; } else if (this.supportGMPromise) { value = await GM.getValue(key); @@ -1007,82 +1011,89 @@ this.auth = btoa(`${this.username}:${this.password}`); } - request(action, data, url, type, callback, headers) { - this.init(); - let _headers = { - referer: url, - origin: url, - "Content-Type": "text/xml; charset=UTF-8", - "Authorization": `Basic ${this.auth}` - }; - for (let header in headers) { - _headers[header] = headers[header]; - } - _GM_xmlhttpRequest({ - method: action, - url: url, - data: data, - headers: _headers, - onload: function(d) { - let response = d.response; - if (d.status >= 400 || !response) response = ""; - if (type == 'xml') { - var xml = d.responseXML; - if(xml) { - response = xml.firstChild.nextSibling ? xml.firstChild.nextSibling : xml.firstChild; + request(action, data, path, type, callback, headers) { + if (ext) { + chrome.runtime.sendMessage({action: "webDAV", detail: {method: action, body: data, path: path, type: type, headers: headers}}, function(r) { + callback && callback(r); + }); + } else { + this.init(); + let url = this.webDAVUrl + path; + let _headers = { + referer: url, + origin: url, + "Content-Type": "text/xml; charset=UTF-8", + "Authorization": `Basic ${this.auth}` + }; + for (let header in headers) { + _headers[header] = headers[header]; + } + _GM_xmlhttpRequest({ + method: action, + url: url, + data: data, + headers: _headers, + onload: function(d) { + let response = d.response; + if (d.status >= 400 || !response) response = ""; + if (type == 'xml') { + var xml = d.responseXML; + if(xml) { + response = xml.firstChild.nextSibling ? xml.firstChild.nextSibling : xml.firstChild; + } } + callback && callback(response); + }, + onerror: function(e) { + debug(e); + callback && callback(e); + }, + ontimeout: function(e) { + debug(e); + callback && callback(e); } - callback && callback(response); - }, - onerror: function(e) { - debug(e); - callback && callback(e); - }, - ontimeout: function(e) { - debug(e); - callback && callback(e); - } - }); + }); + } } - GET(url, callback) { - return this.request('GET', null, url, 'text', callback, {}); + GET(path, callback) { + return this.request('GET', null, path, 'text', callback, {}); } - PROPFIND(url, callback) { - return this.request('PROPFIND', null, url, 'xml', callback, {Depth: "1"}); + PROPFIND(path, callback) { + return this.request('PROPFIND', null, path, 'xml', callback, {Depth: "1"}); } - MKCOL(url, callback) { - return this.request('MKCOL', null, url, 'text', callback, {}); + MKCOL(path, callback) { + return this.request('MKCOL', null, path, 'text', callback, {}); } - DELETE(url, callback) { - return this.request('DELETE', null, url, 'text', callback, {}); + DELETE(path, callback) { + return this.request('DELETE', null, path, 'text', callback, {}); } - PUT(url, data, callback) { - return this.request('PUT', data, url, 'text', callback, {}); + PUT(path, data, callback) { + return this.request('PUT', data, path, 'text', callback, {}); } async read(path) { let self = this; return new Promise((resolve) => { - self.GET(self.webDAVUrl + path, resolve); + self.GET(path, resolve); }); } async write(path, data) { let self = this; return new Promise((resolve) => { - self.PUT(self.webDAVUrl + path, data, resolve); + self.PUT(path, data, resolve); }); } async rm(path) { let self = this; return new Promise((resolve) => { - self.DELETE(self.webDAVUrl + path, resolve); + self.DELETE(path, resolve); }); } } @@ -1343,7 +1354,7 @@ setTimeout( checkReady, 100 ); } - var logoBtn, searchBar, searchTypes = [], currentSite = false, cacheKeywords, tipsStorage, localKeywords, lastSign, inPagePostParams, cacheIcon, historySites, historyType, sortTypeNames, sortSiteNames, cachePool = [], cacheFontPool = [], currentFormParams, globalInPageWords, navEnable, referrer, disableHighlight, lastAddType, allPageNewMode = false; + var logoBtn, searchBar, searchTypes = [], currentSite = false, disableState = false, cacheKeywords, tipsStorage, localKeywords, lastSign, inPagePostParams, cacheIcon, historySites, historyType, sortTypeNames, sortSiteNames, cachePool = [], cacheFontPool = [], currentFormParams, globalInPageWords, navEnable, referrer, disableHighlight, lastAddType, allPageNewMode = false; const logoBtnSvg = `${_GM_info.script.name}`; const logoBase64 = "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic2VhcmNoLWp1bXBlci1sb2dvQnRuU3ZnIiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0uNzM2IDUxMC40NjRjMC0yODEuOTQyIDIyOC4zMzUtNTEwLjUgNTEwLTUxMC41IDEzNS4yNiAwIDI2NC45ODEgNTMuNzg0IDM2MC42MjUgMTQ5LjUyMiA5NS42NDMgOTUuNzM3IDE0OS4zNzUgMjI1LjU4NSAxNDkuMzc1IDM2MC45NzggMCAyODEuOTQtMjI4LjMzNSA1MTAuNS01MTAgNTEwLjUtMjgxLjY2NSAwLTUxMC0yMjguNTYtNTEwLTUxMC41em01MTAtNTEwLjV2MTAyMW0tNTEwLTUxMC41aDEwMjAiIGZpbGw9IiNmZWZlZmUiLz48cGF0aCBkPSJNMjM3LjQ0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek02OTkuOTA0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek00MjMuMjk2IDc1OS4yOTZjLTY0IDAtMTE1LjcxMi01Mi4yMjQtMTE1LjcxMi0xMTUuNzEyIDAtMjYuNjI0IDkuMjE2LTUyLjIyNCAyNS42LTcyLjcwNCA5LjIxNi0xMS43NzYgMjYuMTEyLTEzLjMxMiAzNy44ODgtNC4wOTZzMTMuMzEyIDI2LjExMiA0LjA5NiAzNy44ODhjLTkuMjE2IDExLjI2NC0xMy44MjQgMjQuNTc2LTEzLjgyNCAzOC45MTIgMCAzNC4zMDQgMjcuNjQ4IDYxLjk1MiA2MS45NTIgNjEuOTUyczYxLjk1Mi0yNy42NDggNjEuOTUyLTYxLjk1MmMwLTQuMDk2LS41MTItOC4xOTItMS4wMjQtMTEuNzc2LTIuNTYtMTQuODQ4IDYuNjU2LTI4LjY3MiAyMS41MDQtMzEuNzQ0IDE0Ljg0OC0yLjU2IDI4LjY3MiA2LjY1NiAzMS43NDQgMjEuNTA0IDEuNTM2IDcuMTY4IDIuMDQ4IDE0LjMzNiAyLjA0OCAyMi4wMTYtLjUxMiA2My40ODgtNTIuMjI0IDExNS43MTItMTE2LjIyNCAxMTUuNzEyeiIgZmlsbD0iIzMzMyIvPjxwYXRoIGQ9Ik02MDIuMDggNzYwLjI5NmMtNjQgMC0xMTUuNzEyLTUyLjIyNC0xMTUuNzEyLTExNS43MTIgMC0xNC44NDggMTIuMjg4LTI3LjEzNiAyNy4xMzYtMjcuMTM2czI3LjEzNiAxMi4yODggMjcuMTM2IDI3LjEzNmMwIDM0LjMwNCAyNy42NDggNjEuOTUyIDYxLjk1MiA2MS45NTJzNjEuOTUyLTI3LjY0OCA2MS45NTItNjEuOTUyYzAtMTUuMzYtNS42MzItMzAuMjA4LTE1Ljg3Mi00MS40NzItOS43MjgtMTEuMjY0LTkuMjE2LTI4LjE2IDIuMDQ4LTM3Ljg4OCAxMS4yNjQtOS43MjggMjguMTYtOS4yMTYgMzcuODg4IDIuMDQ4IDE5LjQ1NiAyMS41MDQgMjkuNjk2IDQ4LjY0IDI5LjY5NiA3Ny44MjQgMCA2Mi45NzYtNTIuMjI0IDExNS4yLTExNi4yMjQgMTE1LjJ6IiBmaWxsPSIjMzMzIi8+PGVsbGlwc2Ugcnk9IjU4IiByeD0iMTI1IiBjeT0iNTA2LjI4NCIgY3g9IjIwMS4xODMiIGZpbGw9IiNmYWYiLz48ZWxsaXBzZSByeT0iNTgiIHJ4PSIxMjUiIGN5PSI1MDYuMjg0IiBjeD0iODIzLjE4MyIgZmlsbD0iI2ZhZiIvPjwvc3ZnPg=="; const noImgBase64 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDI5LjAxMzMzMyA2NDBBMzIgMzIgMCAwIDEgMzg0IDU5NC45ODY2NjdsMzcuNzYtMzcuNzYtMjIuODI2NjY3LTIyLjYxMzMzNC0xMzUuNjggMTM1LjY4IDkwLjQ1MzMzNCA5MC40NTMzMzQgMTM1LjY4LTEzNS42OC0yMi42MTMzMzQtMjIuNjEzMzM0ek01MzQuNjEzMzMzIDM5OC45MzMzMzNsMjIuNjEzMzM0IDIyLjYxMzMzNEw1OTQuOTg2NjY3IDM4NEEzMiAzMiAwIDAgMSA2NDAgNDI5LjAxMzMzM2wtMzcuNzYgMzcuNzYgMjIuNjEzMzMzIDIyLjYxMzMzNCAxMzUuNjgtMTM1LjY4LTkwLjQ1MzMzMy05MC40NTMzMzR6IiBmaWxsPSIjNUU1QzVDIj48L3BhdGg+PHBhdGggZD0iTTUxMiAyMS4zMzMzMzNhNDkwLjY2NjY2NyA0OTAuNjY2NjY3IDAgMSAwIDQ5MC42NjY2NjcgNDkwLjY2NjY2N0E0OTAuNjY2NjY3IDQ5MC42NjY2NjcgMCAwIDAgNTEyIDIxLjMzMzMzM3ogbTMxNi44IDM1NC45ODY2NjdsLTE4MS4xMiAxODEuMTJhMzIgMzIgMCAwIDEtNDUuMjI2NjY3IDBMNTU3LjIyNjY2NyA1MTIgNTEyIDU1Ny4yMjY2NjdsNDUuMjI2NjY3IDQ1LjIyNjY2NmEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N2wtMTgxLjEyIDE4MS4xMmEzMiAzMiAwIDAgMS00NS4yMjY2NjcgMGwtMTM1LjY4LTEzNS42OGEzMiAzMiAwIDAgMSAwLTQ1LjIyNjY2N2wxODEuMTItMTgxLjEyYTMyIDMyIDAgMCAxIDQ1LjIyNjY2NyAwTDQ2Ni43NzMzMzMgNTEyIDUxMiA0NjYuNzczMzMzbC00NS4yMjY2NjctNDUuMjI2NjY2YTMyIDMyIDAgMCAxIDAtNDUuMjI2NjY3bDE4MS4xMi0xODEuMTJhMzIgMzIgMCAwIDEgNDUuMjI2NjY3IDBsMTM1LjY4IDEzNS42OGEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N3oiIGZpbGw9IiM1RTVDNUMiPjwvcGF0aD4KPC9zdmc+"; @@ -3551,6 +3562,11 @@ this.initSetInPageWords(); } + showFilterSearch() { + this.filterSitesTab.checked = true; + this.showSearchInput(); + } + initSetInPageWords() { if (this.searchInPageTab.checked && !this.searchJumperInPageInput.value) { let words = this.searchJumperInputKeyWords.value.replace(/^\*/, "") || getKeywords(); @@ -3583,7 +3599,7 @@ let inWordMode = this.wordModeBtn.classList.contains("checked"); let splitSep = inWordMode ? new RegExp(`[\\${this.splitSep} \.]`) : this.splitSep; - words.split(splitSep).forEach(word => { + words.split(splitSep).sort((a, b) => b.length - a.length).forEach(word => { let oriWord = word; word = word.trim(); if (!word) return; @@ -4007,7 +4023,7 @@
`); - customInputFrame.appendChild(customInputCssEle); + if (!disabled) customInputFrame.appendChild(customInputCssEle); let cancelBtn = customInputFrame.querySelector("#cancel"); cancelBtn.addEventListener("click", e => { if (customInputFrame.parentNode) { @@ -4317,7 +4333,7 @@
`); - modifyFrame.appendChild(modifyCssEle); + if (!disabled) modifyFrame.appendChild(modifyCssEle); let cancelBtn = modifyFrame.querySelector("#cancel"); cancelBtn.addEventListener("click", e => { if (modifyFrame.parentNode) { @@ -5563,6 +5579,16 @@ this.bar.style.display = '' } + toggleShowAll() { + this.appendBar(); + if (!this.con || !this.con.parentNode) return; + if (this.con.classList.contains("search-jumper-showall")) { + this.closeShowAll(); + } else { + this.showAllSites(); + } + } + showAllSites() { if (!this.con || !this.con.parentNode || this.con.classList.contains("search-jumper-showall")) return; this.con.style.display = ""; @@ -5795,9 +5821,18 @@ this.shadowContainer = document.createElement("div"); } if (!this.shadowContainer.parentNode) { - document.documentElement.appendChild(this.shadowContainer); + if (shareEngines) { + document.body.appendChild(this.shadowContainer); + } else { + document.documentElement.appendChild(this.shadowContainer); + } + } + let shadow; + if (disabled) { + shadow = this.shadowContainer; + } else { + shadow = this.shadowContainer.shadowRoot || this.shadowContainer.attachShadow({ mode: "open" }); } - let shadow = this.shadowContainer.shadowRoot || this.shadowContainer.attachShadow({ mode: "open" }); if (ele.parentNode != shadow) shadow.appendChild(ele); return true; } @@ -5809,16 +5844,24 @@ appendBar() { if (!mainStyleEle || !mainStyleEle.parentNode) { mainStyleEle = _GM_addStyle(cssText); - this.addToShadow(mainStyleEle); + if (!disabled) this.addToShadow(mainStyleEle); } if (this.addToShadow(this.con)) { setTimeout(() => { if (this.con.parentNode) { if (getComputedStyle(this.con).zIndex != "2147483647") { - disabled = true; this.removeBar(); - debug(i18n("cspDisabled")); - } else disabled = false; + if (disabled) { + debug(i18n("cspDisabled")); + } else { + disabled = true; + mainStyleEle = _GM_addStyle(cssText); + this.shadowContainer.parentNode.removeChild(this.shadowContainer); + this.shadowContainer = document.createElement("div"); + document.documentElement.appendChild(this.shadowContainer); + this.appendBar(); + } + } } }, 1); } @@ -5853,6 +5896,17 @@ } } + async searcAllhByTypeName(siteName) { + for (let i = searchTypes.length - 1; i >= 0; i--) { + let typeEle = searchTypes[i]; + if (typeEle.dataset.type == siteName) { + typeEle.firstChild.onmousedown({button: 2}); + return; + } + } + } + + autoGetFirstType() { if (!targetElement) targetElement = getBody(document); let firstType; @@ -6824,6 +6878,13 @@ } }); }; + if (ext) { + requestSuggest = (api, cb) => { + chrome.runtime.sendMessage({action: "getSuggest", detail: {suggestType: searchData.prefConfig.suggestType, searchWords: searchWords}}, function(r) { + cb(r); + }); + } + } switch (searchData.prefConfig.suggestType) { case "google": requestSuggest("http://suggestqueries.google.com/complete/search?client=youtube&q=%s&jsonp=window.google.ac.h".replace("%s", searchWords), res => { @@ -9045,6 +9106,16 @@ } } } + if (targetUrlData.indexOf('%input{') !== -1) { + self.showCustomInputWindow(targetUrlData, _url => { + targetUrlData = _url; + ele.href = _url; + ele.click(); + }); + if (e.preventDefault) e.preventDefault(); + if (e.stopPropagation) e.stopPropagation(); + return; + } let findWordsMatch = targetUrlData.match(/^find(\.addto\((.*?)\))?:(.*)/); if (findWordsMatch) { if (e.preventDefault) e.preventDefault(); @@ -9079,6 +9150,19 @@ } return false; } else if (/^javascript:/.test(data.url)) { + if (ext) { + _unsafeWindow.targetElement = targetElement; + _unsafeWindow.keywords = getKeywords(); + let func = (/^javascript:[_a-zA-Z0-9]+$/.test(targetUrlData) && _unsafeWindow[targetUrlData.replace("javascript:", "")]); + if (func) { + if (e.preventDefault) e.preventDefault(); + if (e.stopPropagation) e.stopPropagation(); + func(); + return false; + } + ele.href = targetUrlData; + return; + } if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); _unsafeWindow.targetElement = targetElement; @@ -9087,7 +9171,7 @@ try { targetUrlData = decodeURIComponent(targetUrlData); } catch(e) {} - let func = (/^[_a-zA-Z0-9]+$/.test(targetUrlData) && window[targetUrlData]) || new AsyncFunction(targetUrlData); + let func = (/^[_a-zA-Z0-9]+$/.test(targetUrlData) && _unsafeWindow[targetUrlData]) || new AsyncFunction(targetUrlData); if (func) func(); return false; } else if (/^c(opy)?:/.test(data.url)) { @@ -9187,16 +9271,6 @@ ele.href = targetUrlData; } } - if (targetUrlData.indexOf('%input{') !== -1) { - self.showCustomInputWindow(targetUrlData, _url => { - targetUrlData = _url; - ele.href = _url; - ele.click(); - }); - if (e.preventDefault) e.preventDefault(); - if (e.stopPropagation) e.stopPropagation(); - return; - } if (shift && !ctrl && !meta && !alt && e.isTrusted) return; if (/^(chrome|edge|about):/.test(targetUrlData)) { if (e.preventDefault) e.preventDefault(); @@ -9443,13 +9517,23 @@ fetchOption.method = "POST"; _url = _url.replace(postMatch[0], ""); } - let failed = false; + let failed = false, fetchData; if (template && template[1].indexOf("json.") === 0) { let allValue = []; - tipsResult = await GM_fetch(_url, fetchOption).then(r => { - data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); - return r.json(); - }).then(r => { + if (ext) { + fetchData = new Promise((resolve) => { + chrome.runtime.sendMessage({action: "showTips", detail: {from: url}}, function(r) { + data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); + resolve(r.data); + }); + }); + } else { + fetchData = GM_fetch(_url, fetchOption).then(r => { + data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); + return r.json(); + }); + } + tipsResult = await fetchData.then(r => { if (!r) return null; storeData = r; let finalData = calcJson(r, template); @@ -9462,13 +9546,26 @@ tipsResult = [tipsResult, "\n" + allValue.join(",")]; } else { let hasData = false; - tipsResult = await GM_fetch(_url, fetchOption).then(r => { - if (data.indexOf('【SEARCHJUMPERURL】') != -1) { - data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); - hasData = true; - } - return r.text(); - }).then(r => { + if (ext) { + fetchData = new Promise((resolve) => { + chrome.runtime.sendMessage({action: "showTips", detail: {from: url}}, function(r) { + if (data.indexOf('【SEARCHJUMPERURL】') != -1) { + data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); + hasData = true; + } + resolve(r.data); + }); + }); + } else { + fetchData = GM_fetch(_url, fetchOption).then(r => { + if (data.indexOf('【SEARCHJUMPERURL】') != -1) { + data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); + hasData = true; + } + return r.text(); + }); + } + tipsResult = await fetchData.then(r => { let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = r; let finalData = data; @@ -9571,7 +9668,7 @@ } if (!mainStyleEle || !mainStyleEle.parentNode) { mainStyleEle = _GM_addStyle(cssText); - this.addToShadow(mainStyleEle); + if (!disabled) this.addToShadow(mainStyleEle); } let selectStr = getSelectStr(); if (_funcKeyCall && selectStr && selectStr.length < (searchData.prefConfig.limitPopupLen || 1)) return; @@ -10767,6 +10864,75 @@ quickAddByInput(firstInput); } }); + if (ext) { + chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { + switch (request.command) { + case "settings": + _GM_openInTab(configPage, {active: true}); + break; + case "searchInPage": + searchBar.showInPage(); + searchBar.showInPageSearch(); + break; + case "filterSearch": + searchBar.showInPage(); + searchBar.showFilterSearch(); + break; + case "search": + if (request.name) { + searchBar.searchBySiteName(request.name, request.key || {}); + } else { + searchBar.searchAuto(request.index || 0, request.key || {}); + } + break; + case "searchAll": + if (request.name) { + searchBar.searcAllhByTypeName(request.name); + } + break; + case "toggle": + location.reload(); + break; + case "showAll": + searchBar.toggleShowAll(); + break; + case "addSearchEngine": + { + if (shareEngines) return; + let openSearch = document.head.querySelector('[rel="search"]'); + if (openSearch) { + showSiteAddFromOpenSearch(openSearch.href, (type, e) => { + if (type != 'load') { + if (e) debug(e.statusText || e.error || e.response || e); + let firstInput = getBody(document).querySelector('input[type=text]:not([readonly]),input[type=search]:not([readonly]),input:not([type])'); + quickAddByInput(firstInput); + } + }); + } else { + let firstInput = getBody(document).querySelector('input[type=text]:not([readonly]),input[type=search]:not([readonly]),input:not([type])'); + quickAddByInput(firstInput); + } + } + break; + default: + break; + } + }); + } + document.addEventListener('searchJumper', e => { + switch (e.detail.action) { + case "search": + if (e.detail.name) { + searchBar.searchBySiteName(e.detail.name, e.detail.key || {}); + } else { + searchBar.searchAuto(e.detail.index, e.detail.key || {}); + } + break; + case "show": + searchBar.showInPage(); + break; + } + }); targetElement = getBody(document); let logoSvg = logoBtn.children[0]; let grabState = 0;//0 未按下 1 已按下 2 已拖动 @@ -10966,20 +11132,6 @@ searchBar.con.scrollLeft += deltaY; }, { passive: false, capture: false }); - document.addEventListener('searchJumper', e => { - switch (e.detail.action) { - case "search": - if (e.detail.name) { - searchBar.searchBySiteName(e.detail.name, e.detail.key || {}); - } else { - searchBar.searchAuto(e.detail.index, e.detail.key || {}); - } - break; - case "show": - searchBar.showInPage(); - break; - } - }); if (searchData.prefConfig.switchSitesPreKey || searchData.prefConfig.switchSitesNextKey || searchData.prefConfig.shortcutKey || @@ -11230,8 +11382,10 @@ if (targetElement.shadowRoot) return; if (targetElement.getAttribute && targetElement.getAttribute("draggable") == "true") return; if (targetElement.parentNode && targetElement.parentNode.getAttribute && targetElement.parentNode.getAttribute("draggable") == "true") return; - showDragSearch(e.clientX, e.clientY); searchBar.waitForHide(1); + setTimeout(() => { + showDragSearch(e.clientX, e.clientY); + }, 2); if (clickHandler) document.removeEventListener('click', clickHandler, true); draging = true; }); @@ -11395,6 +11549,7 @@ } function quickAddByInput(input) { + if (shareEngines) return; let parentForm, url = location.href, showCrawl = false; if (input && input.name) { parentForm = input.parentNode; @@ -11503,7 +11658,7 @@ shareEngines = shareEngines.getAttribute("content"); shareEngines = JSON.parse(decodeURI(shareEngines)); searchData.sitesConfig = shareEngines; - getBody(document).innerHTML = createHTML(""); + document.getElementById("spotlight").style.display = "none"; } catch (e) { shareEngines = null; } @@ -11615,8 +11770,14 @@ searchData.sitesConfig.forEach(type => { if (/^http/.test(type.icon)) { let typeCache = cacheIcon[type.icon]; - if (typeCache && typeCache !== 'fail') { - newCache[type.icon] = typeCache; + if (typeCache) { + if (typeCache === 'fail') { + let img = document.createElement("img"); + img.src = type.icon; + cachePool.push(img); + } else { + newCache[type.icon] = typeCache; + } } } type.sites.forEach(site => { @@ -11624,8 +11785,14 @@ if (!icon) icon = site.url.replace(/^showTips:/, "").replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); if (/^http/.test(icon)) { let siteCache = cacheIcon[icon]; - if (siteCache && siteCache !== 'fail') { - newCache[icon] = siteCache; + if (siteCache) { + if (siteCache === 'fail') { + let img = document.createElement("img"); + img.src = icon; + cachePool.push(img); + } else { + newCache[icon] = siteCache; + } } } }); @@ -12401,7 +12568,7 @@
`); - dragRoundFrame.appendChild(dragCssEle); + if (!disabled) dragRoundFrame.appendChild(dragCssEle); const sector1Num = 6; const sector2Num = 10; let sectorCon = dragRoundFrame.querySelector(".panel"); @@ -12944,7 +13111,7 @@
`); - addFrame.appendChild(addFrameCssEle); + if (!disabled) addFrame.appendChild(addFrameCssEle); nameInput = addFrame.querySelector("[name='siteName']"); descInput = addFrame.querySelector("[name='description']"); urlInput = addFrame.querySelector("[name='url']"); @@ -13482,6 +13649,16 @@ if (allPageBg) { getBody(document).style.backgroundImage = `url("${allPageBg.base64}")`; } else allPageBg = {url: ""}; + if (ext) { + chrome.runtime.sendMessage({action: "getBingBG", detail: {curBgUrl: allPageBg.url}}, function(r) { + if (r) { + allPageBg = r; + storage.setItem("allPageBg", allPageBg); + getBody(document).style.backgroundImage = `url("${allPageBg.base64}")`; + } + }); + return; + } _GM_xmlhttpRequest({ method: 'GET', url: "http://global.bing.com/HPImageArchive.aspx?format=js&idx=0&pid=hp&video=1&n=1", @@ -13543,6 +13720,11 @@ resolve(data || ''); }); }); + disableState = await new Promise((resolve) => { + storage.getItem("disableState", data => { + resolve(data || false); + }); + }); tipsStorage = await new Promise((resolve) => { storage.getItem("tipsStorage", data => { resolve(data || []); @@ -13680,7 +13862,9 @@ searchData.prefConfig.suggestType = "baidu"; } else searchData.prefConfig.suggestType = "google"; } - if (searchData.prefConfig.configPage) { + if (ext) { + configPage = chrome.runtime.getURL('config/index.html');; + } else if (searchData.prefConfig.configPage) { configPage = searchData.prefConfig.configPage; } else { searchData.prefConfig.configPage = configPage; @@ -13732,6 +13916,7 @@ inited = true; preAction(); await initData(); + if (disableState) return; initView(); initConfig(); initMycroft(); From c02a8aab2f8cd27c677e25fa5c3631ef6293ff6a Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 15 Dec 2023 19:33:16 +0800 Subject: [PATCH 561/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c0a363b1780..c8cd362e2af 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -13598,6 +13598,9 @@ if (!isAllPage) return; searchBar.appendBar(); searchBar.showAllSites(); + setTimeout(() => { + searchBar.con.style.zIndex = 0; + }, 5); if (location.hash) { let hash = location.hash.slice(1); try { From edba79c2c8f1a379a3f0d5ddd8737e94cf91e72d Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 16 Dec 2023 01:52:55 +0000 Subject: [PATCH 562/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 59a073e5518..331b01c01db 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -4885,16 +4885,16 @@ { "resource_url": "http://wedata.net/items/85690", "data": { - "pageElement": "//div[@class=\"post\"][not(//div[@class=\"article__content\"])]|//div[@class=\"article__content\"]/p[last()]/preceding-sibling::*", + "pageElement": "//div[@class=\"post\"][not(//div[@class=\"article__content\"])]|//div[@class=\"article__content\"]/*[not(contains(@class, '_CLS_'))]", "nextLink": "//li[@class=\"next\"]/a|//div[@data-max-page]/following-sibling::div[1]/a", "url": "^https://bestcarweb\\.jp/", - "exampleUrl": "https://bestcarweb.jp/news/296665\r\nhttps://bestcarweb.jp/feature/column/357128\r\nhttps://bestcarweb.jp/news/261798?prd=4\r\nhttps://bestcarweb.jp/latest\r\nhttps://bestcarweb.jp/newcar" + "exampleUrl": "https://bestcarweb.jp/news/296665\r\nhttps://bestcarweb.jp/feature/column/357128\r\nhttps://bestcarweb.jp/feature/column/357128?prd=4\r\nhttps://bestcarweb.jp/news/261798?prd=4\r\nhttps://bestcarweb.jp/latest\r\nhttps://bestcarweb.jp/newcar" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m_", "name": "ベストカー Web", "created_at": "2021-07-01T19:30:54+09:00", - "updated_at": "2022-01-21T20:52:13+09:00" + "updated_at": "2023-12-15T22:35:32+09:00" }, { "resource_url": "http://wedata.net/items/85687", From bafb9fc8838745091b6372af25edf29bfb140b85 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 16 Dec 2023 14:35:18 +0800 Subject: [PATCH 563/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 37 ++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index d543141a5f1..8de5eb363df 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.5.1 +// @version 2023.12.16.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -44,8 +44,8 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://update.greasyfork.org/scripts/438080/1290755/pvcep_rules.js -// @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1262309 +// @require https://update.greasyfork.org/scripts/438080/1295404/pvcep_rules.js +// @require https://update.greasyfork.org/scripts/440698/1262309/pvcep_lang.js // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js // @match *://*/* @@ -19659,7 +19659,7 @@ ImgOps | https://imgops.com/#b#`; 100% { opacity: 0 }\ }\ .pv-pic-window-scroll {\ - max-height: 100vh;\ + max-height: calc(100vh - 26px);\ max-width: 100vw;\ overflow: scroll;\ }\ @@ -20049,7 +20049,7 @@ ImgOps | https://imgops.com/#b#`; let padding1 = Math.min(250, wSize.h>>2, wSize.w>>2), padding2 = 50;//内外侧间距 if (imgWindow.offsetWidth / imgWindow.offsetHeight > wSize.w / wSize.h) { //宽条,上下半屏 - maxWidth = wSize.w; + maxWidth = wSize.w - 56; if (posY > wSize.h / 2) { //上 maxHeight = posY - padding1 - padding2; @@ -20071,7 +20071,7 @@ ImgOps | https://imgops.com/#b#`; imgWindow.style.left = left + scrolled.x + 'px'; } else { //窄条,左右半屏 - maxHeight = wSize.h; + maxHeight = wSize.h - 56; if (posX > wSize.w / 2) { //左 maxWidth = posX - padding1 - padding2; @@ -20131,7 +20131,7 @@ ImgOps | https://imgops.com/#b#`; var wSize=getWindowSize(); var scrolled=prefs.imgWindow.fixed ? {x:0, y:0} : getScrolled(); if(horizontal)imgWindow.style.left = (wSize.w - imgWindow.offsetWidth)/2 + scrolled.x +'px'; - if(vertical)imgWindow.style.top = (wSize.h - imgWindow.offsetHeight)/2 + scrolled.y + (prefs.imgWindow.suitLongImg && this.isLongImg && !this.preview ? 13 : 0) +'px'; + if(vertical)imgWindow.style.top = (wSize.h - imgWindow.offsetHeight)/2 + scrolled.y +'px'; }, @@ -20910,7 +20910,7 @@ ImgOps | https://imgops.com/#b#`; } else this.imgWindow.classList.add("pv-pic-window-scroll"); //this.center(true , true); if(!inScroll){ - imgWindow.style.top= (wSize.h - imgWindow.offsetHeight)/2 + scrolled.y + 13 +'px'; + imgWindow.style.top= (wSize.h - imgWindow.offsetHeight)/2 + scrolled.y +'px'; var scrollTop=parseFloat(imgWindow.style.top)-origTop; if(this.imgWindow.scrollTop)this.imgWindow.scrollTop = scrollTop; else if(this.imgWindow.pageYOffset)this.imgWindow.pageYOffset = scrollTop; @@ -22933,6 +22933,27 @@ ImgOps | https://imgops.com/#b#`; } }*/ } + if (!result) { + let checkEle = target; + while(checkEle && checkEle.children.length === 1) { + checkEle = checkEle.children[0]; + if (checkEle.nodeName === "IMG") { + target = checkEle; + break; + } else if (prefs.floatBar.listenBg && hasBg(checkEle)) { + targetBg = unsafeWindow.getComputedStyle(checkEle).backgroundImage.replace(bgReg, "$1").replace(/\\"/g, '"'); + let src = targetBg, nsrc = src, noActual = true, type = "scale"; + result = { + src: nsrc, + type: type, + imgSrc: src, + noActual:noActual, + img: checkEle + }; + break; + } + } + } if (!result && document.elementsFromPoint && target.nodeName.toUpperCase() != 'A') { let elements = document.elementsFromPoint(clientX, clientY); let checkLen = Math.min(elements.length, 5); From 945a29ec8f5bf53305e63d4c1c0dc34257ed2b6b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 17 Dec 2023 09:32:30 +0800 Subject: [PATCH 564/812] 1.9.37.8 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 7415e88fb81..31604d98664 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.7](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.8](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 61bfad5a189..91cd4d25727 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.7 +// @version 1.9.37.8 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2757,7 +2757,7 @@ } } else nextLink = getElement(nextLinkSel, doc, null, true); } - if (nextLink && (this.curSiteRule.action === 0 || this.curSiteRule.action === 1 || this.curSiteRule.action === 2)) { + if (nextLink && (this.curSiteRule.action == 0 || this.curSiteRule.action == 1 || this.curSiteRule.action == 2)) { let form = doc.querySelector('#search-form'); if (!nextLink.href && nextLink.hasAttribute && nextLink.hasAttribute("onclick") && form) { if (/^\d+$/.test(nextLink.innerText)) { @@ -2773,7 +2773,7 @@ nextLink.href = getNextLinkByForm(form, nextLink); } } - if (nextLink.href && this.curSiteRule.action !== 0) { + if (nextLink.href && this.curSiteRule.action != 0) { nextLink.href = nextLink.href.replace(/#p{.*/, ""); } } @@ -2866,11 +2866,11 @@ if (curPage > 1 && rulesData.lastPageTips) showTips(i18n("lastPage"), "", 800); return null; } - if (this.curSiteRule.action === 3) { + if (this.curSiteRule.action == 3) { if (doc == document) debug(nextLink, 'Next link'); this.nextLinkHref = '#'; } else { - let needUrl = (this.curSiteRule.action === 0 || this.curSiteRule.action === 1 || this.curSiteRule.action === 2); + let needUrl = (this.curSiteRule.action == 0 || this.curSiteRule.action == 1 || this.curSiteRule.action == 2); if (!href) href = nextLink.href; if (href && nextLink.getAttribute) { let _href = nextLink.getAttribute("href"); @@ -8012,6 +8012,7 @@ frameDoc.documentElement.scrollLeft = 0; } else { if (pageEle) { + if (document.body.scrollWidth) frameDoc.documentElement.style.width = document.body.scrollWidth + "px"; let fitWidth = ruleParser.curSiteRule.fitWidth !== false; let targetElement = pageEle[0]; if (!targetElement) return; @@ -8313,7 +8314,7 @@ command: 'pagetual.insert' }, '*'); }*/ - let isJs = ruleParser.curSiteRule.action === 3 || ruleParser.hrefIsJs(nextLink); + let isJs = ruleParser.curSiteRule.action == 3 || ruleParser.hrefIsJs(nextLink); if (!isJs) { emuIframe = null; lastActiveUrl = nextLink; @@ -8349,7 +8350,7 @@ } catch(e) { debug(e); } - } else if ((forceState === 2 || ruleParser.curSiteRule.action === 2) && !isJs) { + } else if ((forceState === 2 || ruleParser.curSiteRule.action == 2) && !isJs) { forceIframe(nextLink, (iframe, refresh) => { if (urlChanged || isPause) { loadPageOver(); @@ -8362,7 +8363,7 @@ loadPageOver(); checkAutoLoadNum(); }); - } else if ((forceState === 3 || ruleParser.curSiteRule.action === 1) && !isJs) { + } else if ((forceState === 3 || ruleParser.curSiteRule.action == 1) && !isJs) { requestFromIframe(nextLink, (doc, eles) => { if (urlChanged || isPause) { loadPageOver(); From 513909290ff385d2808ec6e5a1a4086fd7fa311a Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 18 Dec 2023 14:06:46 +0800 Subject: [PATCH 565/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 413 +++++++++++++++++++++++++++--- 1 file changed, 382 insertions(+), 31 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c8cd362e2af..902de8d9306 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.54 +// @version 1.7.55 // @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -508,6 +508,7 @@ copyInPageBtn: '复制查找文字', wordModeBtn: '单词模式', copyEleBtn: '复制选中元素', + openLinkBtn: '打开选中链接', maxEleBtn: '展开选中元素', minEleBtn: '收起选中元素', expandAll: '全部展开', @@ -613,6 +614,7 @@ copyInPageBtn: '複製查找文字', wordModeBtn: '單詞模式', copyEleBtn: '複製選中元素', + openLinkBtn: '打開選中連結', maxEleBtn: '展開選中元素', minEleBtn: '收起選中元素', expandAll: '全部展開', @@ -717,6 +719,7 @@ copyInPageBtn: 'Copy search text', wordModeBtn: 'Word mode', copyEleBtn: 'Copy selected elements', + openLinkBtn: 'Open selected links', maxEleBtn: 'Expand selected elements', minEleBtn: 'Collapse selected elements', expandAll: 'Expand All', @@ -3499,6 +3502,7 @@ + ${i18n("multiPickerBtn")} @@ -3533,6 +3537,7 @@ this.minEleBtn = searchInputDiv.querySelector("#minEleBtn"); this.maxEleBtn = searchInputDiv.querySelector("#maxEleBtn"); this.copyEleBtn = searchInputDiv.querySelector("#copyEleBtn"); + this.openLinkBtn = searchInputDiv.querySelector("#openLinkBtn"); this.editBtn = searchInputDiv.querySelector("#editBtn"); this.addWord = searchInputDiv.querySelector("#addWord"); this.recoverBtn = searchInputDiv.querySelector("#recoverBtn"); @@ -5762,7 +5767,7 @@ } } else if (this.searchJumperInPageInput.value) { this.submitInPageWords(); - } else if (!this.initShowSearchInput && cacheKeywords) { + } else if (!this.initShowSearchInput && cacheKeywords && this.lockWords !== cacheKeywords) { this.searchJumperInPageInput.value = cacheKeywords; this.initShowSearchInput = true; this.searchJumperInPageInput.select(); @@ -5782,7 +5787,7 @@ togglePicker() { this.pickerBtn.classList.toggle("checked"); this.searchJumperInputKeyWords.disabled = !this.searchJumperInputKeyWords.disabled; - picker.toggle(); + picker.toggle(true); } hideSearchInput() { @@ -6310,6 +6315,9 @@ this.copyEleBtn.addEventListener("click", e => { picker.copy(); }); + this.openLinkBtn.addEventListener("click", e => { + picker.openLinks(); + }); let listArrow = document.createElement("div"); listArrow.className = "listArrow"; this.listArrow = listArrow; @@ -10089,7 +10097,53 @@ body.searchJumper-picker, body.searchJumper-picker *:hover, body.searchJumper-picker a:hover { - cursor: crosshair !important; + cursor: crosshair !important; + } + .select-rect { + position: fixed; + z-index: 2147483647; + background: none; + border: 1px dashed rgba(120, 170, 210, 0.8); + } + .select-rect>.dot { + width: 10px; + height: 10px; + border: 2px solid #000; + border-radius: 50%; + background-color: white; + position: absolute; + } + .select-rect>.top-left { + top: -5px; + left: -5px; + } + .select-rect>.top-right { + top: -5px; + right: -5px; + } + .select-rect>.bottom-left { + bottom: -5px; + left: -5px; + } + .select-rect>.bottom-right { + bottom: -5px; + right: -5px; + } + .select-rect>.top { + top: -5px; + left: calc(50% - 5px); + } + .select-rect>.right { + top: calc(50% - 5px); + right: -5px; + } + .select-rect>.left { + top: calc(50% - 5px); + left: -5px; + } + .select-rect>.bottom { + bottom: -5px; + left: calc(50% - 5px); } `; _GM_addStyle(cssText); @@ -10110,33 +10164,215 @@ searchBar.con.classList.add("selectedEle"); } let cleanTimer; + this.initSelectRect(); + this.mainSignDiv = this.createSignDiv(); this.setImportant(this.mainSignDiv, "pointer-events", "none"); + this.setImportant(this.mainSignDiv, "background", "rgba(120, 170, 210, 0.3)"); this.moveHandler = e => { if (e.target === document) return; - self.adjustSignDiv(self.mainSignDiv, self.getTarget(e.target)); - if (e.ctrlKey || e.metaKey) { - clearTimeout(cleanTimer); - cleanTimer = setTimeout(() => { - let target = self.cleanTarget(e.target); - clickTarget(target); - }, 5); + if (self.inPicker) { + e.preventDefault(); + } + if (self.rectSelecting) { + if (self.mainSignDiv.parentNode) self.mainSignDiv.parentNode.removeChild(self.mainSignDiv); + if (!self.selectRect.parentNode) getBody(document).appendChild(self.selectRect); + self.createSelectRect({x: e.clientX, y: e.clientY}); + } else if (self.creatingRect) { + return; + } else { + let target = self.getTarget(e.target); + if (self.mainSignDiv.parentNode !== target.parentNode) target.parentNode.appendChild(self.mainSignDiv); + self.adjustSignDiv(self.mainSignDiv, target); + if (e.ctrlKey || e.metaKey) { + clearTimeout(cleanTimer); + cleanTimer = setTimeout(() => { + let target = self.cleanTarget(e.target); + clickTarget(target); + }, 5); + } } }; this.leaveHandler = e => { - if (this.mainSignDiv.parentNode) this.mainSignDiv.parentNode.removeChild(this.mainSignDiv); - }; - this.enterHandler = e => { - getBody(document).appendChild(this.mainSignDiv); + if (self.mainSignDiv.parentNode) self.mainSignDiv.parentNode.removeChild(self.mainSignDiv); }; this.clickHandler = e => { if (self.inPicker) { e.stopPropagation(); e.preventDefault(); } + if (self.creatingRect) return; + if (self.rectSelecting) { + if (self.selectRect.parentNode) { + self.selectRect.parentNode.removeChild(self.selectRect); + } + self.rectSelecting = false; + return; + } let target = self.getTarget(e.target); clickTarget(target); }; + this.mouseDownHandler = e => { + self.rectSelecting = true; + self.rectInitPos = {x: e.clientX, y: e.clientY}; + }; + this.mouseUpHandler = e => { + self.rectSelecting = false; + if (self.creatingRect) return; + if (self.selectRect.parentNode) { + self.selectRect.parentNode.removeChild(self.selectRect); + self.finishSelectRect(); + e && e.stopPropagation && e.stopPropagation(); + e && e.preventDefault && e.preventDefault(); + } + }; + } + + initSelectRect() { + this.waitToRemoveSigns = []; + this.waitToAddSigns = []; + let selectRect = document.createElement("div"); + selectRect.innerHTML = createHTML(` +
+
+
+
+
+
+
+
+ `); + selectRect.className = "select-rect"; + this.selectRect = selectRect; + } + + createSelectRect(pos) { + this.rectToPos = pos; + if (this.creatingRect) return; + this.creatingRect = true; + setTimeout(() => { + this.creatingRect = false; + this.selectRect.style.left = Math.min(this.rectToPos.x, this.rectInitPos.x) + "px"; + this.selectRect.style.top = Math.min(this.rectToPos.y, this.rectInitPos.y) + "px"; + this.selectRect.style.width = Math.abs(this.rectToPos.x - this.rectInitPos.x) + "px"; + this.selectRect.style.height = Math.abs(this.rectToPos.y - this.rectInitPos.y) + "px"; + this.checkRectAndSign(); + if (!this.rectSelecting) this.mouseUpHandler(); + }, 100); + } + + finishSelectRect() { + let self = this; + this.waitToRemoveSigns.forEach(sign => { + self.removeSign(sign); + }); + this.waitToAddSigns.forEach(sign => { + delete sign.dataset.recttemp; + }); + this.waitToRemoveSigns = []; + this.waitToAddSigns = []; + if (this.signList.length) { + searchBar.con.classList.add("selectedEle"); + } else { + searchBar.con.classList.remove("selectedEle"); + } + } + + checkRectAndSign() { + if (!this.domInfo) return; + let self = this; + this.waitToRemoveSigns.forEach(sign => { + sign.style.opacity = ""; + }); + this.waitToRemoveSigns = []; + this.signList.forEach(signArr => { + let sign = signArr[0]; + if (sign.dataset.recttemp) return; + let signRect = sign.getBoundingClientRect(); + let curRect = self.selectRect.getBoundingClientRect(); + if (self.compareRect(signRect, curRect)) { + sign.style.opacity = "0"; + self.waitToRemoveSigns.push(sign); + } else { + sign.style.opacity = ""; + } + }); + this.waitToAddSigns.forEach(sign => { + self.removeSign(sign); + }); + this.waitToAddSigns = []; + if (this.waitToRemoveSigns.length === 0) { + this.curRectInfo = {}; + if (this.rectInitPos.x < this.rectToPos.x) { + this.curRectInfo.left = this.rectInitPos.x; + this.curRectInfo.right = this.rectToPos.x; + } else { + this.curRectInfo.left = this.rectToPos.x; + this.curRectInfo.right = this.rectInitPos.x; + } + if (this.rectInitPos.y < this.rectToPos.y) { + this.curRectInfo.top = this.rectInitPos.y; + this.curRectInfo.bottom = this.rectToPos.y; + } else { + this.curRectInfo.top = this.rectToPos.y; + this.curRectInfo.bottom = this.rectInitPos.y; + } + this.compareDomWithRect(this.domInfo); + this.signDomWithRect(this.domInfo); + } + } + + compareDomWithRect(dom) { + if (dom.children && dom.children.length > 0) { + let matched = 0; + for (let i = 0; i < dom.children.length; i++) { + let child = dom.children[i]; + if (this.compareDomWithRect(child)) { + matched++; + } + } + if (matched === dom.children.length) { + let rect = dom.target.getBoundingClientRect(); + if (rect.width && rect.height) { + dom.sign = true; + return true; + } + } + } else { + if (this.compareRect(this.curRectInfo, dom.target.getBoundingClientRect())) { + dom.sign = true; + return true; + } + } + dom.sign = false; + return false; + } + + signDomWithRect(dom) { + if (dom.sign) { + let sign = this.createSignDiv(); + sign.dataset.recttemp = 1; + dom.target.parentNode.appendChild(sign); + this.adjustSignDiv(sign, dom.target); + this.signList.push([sign, dom.target]); + this.waitToAddSigns.push(sign); + } else if (dom.children && dom.children.length > 0) { + for (let i = 0; i < dom.children.length; i++) { + let child = dom.children[i]; + this.signDomWithRect(child); + } + } + } + + compareRect(rect1, rect2) { + return ( + rect2.width && + rect2.height && + rect1.left <= rect2.right && + rect1.right >= rect2.left && + rect1.top <= rect2.bottom && + rect1.bottom >= rect2.top + ); } cleanTarget(target) { @@ -10155,15 +10391,17 @@ } appendSign(sign, target, index) { - target.dataset.signNum = parseInt(target.dataset.signNum || 0) + 1; + if (target.dataset) { + target.dataset.signNum = parseInt(target.dataset.signNum || 0) + 1; + } sign.dataset.target = index; - getBody(document).appendChild(sign); + target.parentNode.appendChild(sign); this.adjustSignDiv(sign, target); this.signList.push([sign, target]); } removeSign(sign) { - getBody(document).removeChild(sign); + if (sign.parentNode) sign.parentNode.removeChild(sign); for (let i = 0; i < this.signList.length; i++) { let signArr = this.signList[i]; if (signArr[0] === sign) { @@ -10190,7 +10428,15 @@ close() { if (!this.mainSignDiv) return; + if (this.rectSelecting) { + if (this.selectRect.parentNode) { + this.selectRect.parentNode.removeChild(this.selectRect); + } + this.finishSelectRect(); + this.rectSelecting = false; + } this.callback = null; + this.domInfo = null; this.clearSigns(); this.clickedEles = {}; if (this.mainSignDiv.parentNode) this.mainSignDiv.parentNode.removeChild(this.mainSignDiv); @@ -10198,8 +10444,9 @@ searchBar.con.classList.remove("selectedEle"); searchBar.con.removeEventListener("mouseenter", this.leaveHandler, true); getBody(document).removeEventListener("mousemove", this.moveHandler, true); - getBody(document).removeEventListener("mouseenter", this.enterHandler, true); getBody(document).removeEventListener("click", this.clickHandler, true); + getBody(document).removeEventListener("mousedown", this.mouseDownHandler, true); + getBody(document).removeEventListener("mouseup", this.mouseUpHandler, true); this.inPicker = false; } @@ -10219,24 +10466,19 @@ signDiv.addEventListener("mouseenter", e => { if (this.mainSignDiv.parentNode) this.mainSignDiv.parentNode.removeChild(this.mainSignDiv); }, true); - signDiv.addEventListener("mouseleave", e => { - getBody(document).appendChild(this.mainSignDiv); - }, true); signDiv.addEventListener("mousedown", e => { e.stopPropagation(); e.preventDefault(); this.removeSign(signDiv); - getBody(document).appendChild(this.mainSignDiv); }, true); return signDiv; } adjustSignDiv(div, target) { - let rect = target.getBoundingClientRect(); - this.setImportant(div, "width", rect.width + "px"); - this.setImportant(div, "height", rect.height + "px"); - this.setImportant(div, "left", rect.left + window.scrollX + "px"); - this.setImportant(div, "top", rect.top + window.scrollY + "px"); + this.setImportant(div, "width", target.offsetWidth + "px"); + this.setImportant(div, "height", target.offsetHeight + "px"); + this.setImportant(div, "left", target.offsetLeft + "px"); + this.setImportant(div, "top", target.offsetTop + "px"); } geneSelector(ele, id) { @@ -10296,6 +10538,32 @@ } } + openLinks() { + if (!window.confirm(i18n('batchOpenConfirm'))) return; + let links = []; + this.signList.forEach(sign => { + let ele = sign[1]; + if (ele.href) { + if (/^(http|ftp)/i.test(ele.href) && links.indexOf(ele.href) === -1) { + links.push(ele.href); + } + } else if (ele.parentNode && ele.parentNode.href) { + if (/^(http|ftp)/i.test(ele.parentNode.href) && links.indexOf(ele.parentNode.href) === -1) { + links.push(ele.parentNode.href); + } + } else if (ele.querySelectorAll) { + [].forEach.call(ele.querySelectorAll('a[href]'), a => { + if (/^(http|ftp)/i.test(a.href) && links.indexOf(a.href) === -1) { + links.push(a.href); + } + }); + } + }); + links.forEach(link => { + _GM_openInTab(link, {active: false}); + }); + } + getPickerStr() { if (!this.inPicker) return ""; let resultStr = ""; @@ -10340,19 +10608,102 @@ this.signList = []; } - toggle() { + processNode(node, parent) { + const nodeInfo = {}; + nodeInfo.target = node; + nodeInfo.children = []; + + if (node.nodeType === Node.ELEMENT_NODE) { + const style = window.getComputedStyle(node); + if (style.display === 'none' && style.visibility === 'hidden') return null; + if (node.innerHTML.trim() === "") return null; + } else if (node.nodeType !== Node.TEXT_NODE || node.textContent.trim() === "") { + return null; + } + + const childNodes = node.childNodes; + if (childNodes.length > 0) { + nodeInfo.target = node; + parent.children.push(nodeInfo); + for (const childNode of childNodes) { + if (childNode.nodeType === Node.ELEMENT_NODE || childNode.nodeType === Node.TEXT_NODE) { + this.processNode(childNode, nodeInfo); + } + } + } else { + if (node.nodeType === Node.TEXT_NODE) { + const lines = node.textContent.split("\n"); + + const range = document.createRange(); + range.selectNodeContents(node); + + let offset = 0; + let parentNode = node.parentNode; + let paRect = parentNode.getBoundingClientRect(); + for (const line of lines) { + if (line.trim() === '') { + offset += (line.length + 1); + continue; + } + range.setStart(node, offset); + offset += line.length; + range.setEnd(node, offset); + offset++; + + const lineRect = range.getBoundingClientRect(); + let offsetLeft = lineRect.left - paRect.left; + let offsetTop = lineRect.top - paRect.top; + let offsetWidth = lineRect.width; + let offsetHeight = lineRect.height; + + let textNodeInfo = { + target: {innerText: line, + outerHTML: line, + parentNode: parentNode, + offsetLeft: offsetLeft + parentNode.offsetLeft, + offsetTop: offsetTop + parentNode.offsetTop, + offsetWidth: offsetWidth, + offsetHeight: offsetHeight, + getBoundingClientRect: () => { + let paRect = parentNode.getBoundingClientRect(); + return { + left: paRect.left + offsetLeft, + top: paRect.top + offsetTop, + right: paRect.left + offsetLeft + offsetWidth, + bottom: paRect.top + offsetTop + offsetHeight, + width: offsetWidth, + height: offsetHeight, + }; + }} + }; + parent.children.push(textNodeInfo); + } + } else if (node.nodeType === Node.ELEMENT_NODE) { + nodeInfo.target = node; + parent.children.push(nodeInfo); + } + } + + return nodeInfo; + } + + toggle(rectSel) { this.init(); if (this.inPicker) { this.close(); return; } + this.rectSel = !!rectSel; + if (rectSel) { + this.domInfo = this.processNode(getBody(document), {children: []}); + getBody(document).addEventListener("mousedown", this.mouseDownHandler, true); + getBody(document).addEventListener("mouseup", this.mouseUpHandler, true); + } this.inPicker = true; - getBody(document).appendChild(this.mainSignDiv); getBody(document).classList.add("searchJumper-picker"); searchBar.con.addEventListener("mouseenter", this.leaveHandler, true); getBody(document).addEventListener("mousemove", this.moveHandler, true); - getBody(document).addEventListener("mouseenter", this.enterHandler, true); getBody(document).addEventListener("click", this.clickHandler, true); } } From 56e6a29dc9b4998e59afa9109e9b39bd0d4bd4d8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 18 Dec 2023 20:31:20 +0800 Subject: [PATCH 566/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 59 ++++++++++++++++++------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 902de8d9306..ae2157b213b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -237,6 +237,9 @@ }, { name: "Google translate image", url: "https://translate.google.com/?op=images#p{input[accept^\\=\"image\"]=%i}" + }, { + name: "QR decode", + url: "https://hoothin.com/qrdecode/#%U" }, { name: "SauceNAO", url: "https://saucenao.com/search.php?db=999&url=%t" @@ -339,7 +342,7 @@ openInNewTab: true, sites: [ { name: "QR code", - url: "https://hoothin.github.io/SearchJumper/qrcode.html#%U" + url: "https://hoothin.com/qrcode/#%U" }, { name: "📦 Batch open links", url: "%s[all]", @@ -10961,30 +10964,36 @@ async function imageSrc2Base64(src) { let urlSplit = src.split("/"); return new Promise((resolve) => { - _GM_xmlhttpRequest({ - method: 'GET', - url: src, - responseType:'blob', - headers: { - origin: urlSplit[0] + "//" + urlSplit[2], - referer: src, - accept: "*/*" - }, - onload: function(d) { - var blob = d.response; - var fr = new FileReader(); - fr.readAsDataURL(blob); - fr.onload = function (e) { - resolve(e.target.result); - }; - }, - onerror: function(){ - resolve(null); - }, - ontimeout: function(){ - resolve(null); - } - }); + if (ext) { + chrome.runtime.sendMessage({action: "getImgBase64", detail: {img: src}}, function(r) { + resolve(r); + }); + } else { + _GM_xmlhttpRequest({ + method: 'GET', + url: src, + responseType:'blob', + headers: { + origin: urlSplit[0] + "//" + urlSplit[2], + referer: src, + accept: "*/*" + }, + onload: function(d) { + var blob = d.response; + var fr = new FileReader(); + fr.readAsDataURL(blob); + fr.onload = function (e) { + resolve(e.target.result); + }; + }, + onerror: function(){ + resolve(null); + }, + ontimeout: function(){ + resolve(null); + } + }); + } }); } From 60624329e3f486f821aa8b52480c0ba290727f85 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 20 Dec 2023 08:41:09 +0800 Subject: [PATCH 567/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ae2157b213b..677dc29c9f4 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,10 +4,10 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.55 -// @description META search assistant that assists with the seamless transition between search engines, providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. -// @description:zh-CN 高效搜索辅助,在搜索时一键切换搜索引擎,支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 -// @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 +// @version 1.7.56 +// @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. +// @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 +// @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 // @description:ja 任意の検索エンジンにすばやく簡単にジャンプします! // @author hoothin // @license MPL-2.0 @@ -4939,6 +4939,7 @@ } }); con.appendChild(checkbox); + con.title = data.title || ""; let label = document.createElement("label"); label.setAttribute("for", index); label.innerText = name; @@ -6656,8 +6657,12 @@ this.findInpageAddons.forEach(addon => { let name = addon.name || ("addon" + index++); if (addonDict[addon.sort]) addon.disable = true; - else if (searchData.prefConfig.disableAddon[name]) { + else if (searchData.prefConfig.disableAddon[name] === true) { addon.disable = true; + } else if (searchData.prefConfig.disableAddon[name] === false) { + addon.disable = false; + } else { + addon.disable = ext ? true : false; } addonDict[addon.sort] = true; self.createAddonSpan(name, addon); @@ -12258,6 +12263,7 @@ searchData.lastModified = new Date().getTime(); storage.setItem("searchData", searchData); _GM_notification('Over!'); + window.location.reload(); }, true); } break; @@ -12566,6 +12572,7 @@ searchData.lastModified = new Date().getTime(); storage.setItem("searchData", searchData); _GM_notification('Over!'); + window.location.reload(); this.close(); } }); From 6e3d909c8c6b26dd5f38a7fc3151b3f51e231ab9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 20 Dec 2023 10:00:59 +0800 Subject: [PATCH 568/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 8de5eb363df..015e43969fd 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.16.1 +// @version 2023.12.20.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -21525,7 +21525,7 @@ ImgOps | https://imgops.com/#b#`; _GM_setClipboard(this.data.src || this.data.imgSrc); break; case "open": - _GM_openInTab(this.data.src || this.data.imgSrc, {active:true}); + _GM_openInTab(this.data.src || this.data.imgSrc, {active:false}); break; case "copyImg": copyData(this.data.src || this.data.imgSrc); @@ -21990,7 +21990,7 @@ ImgOps | https://imgops.com/#b#`; _GM_setClipboard(src); break; case "open": - _GM_openInTab(src, {active:true}); + _GM_openInTab(src, {active:false}); break; case "copyImg": copyData(src); From 1f42591a182e09b4a707a2a9de5cd7948b0bc95f Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 20 Dec 2023 15:54:55 +0800 Subject: [PATCH 569/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 91cd4d25727..34e25e591b0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.8 +// @version 1.9.37.9 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1552,7 +1552,7 @@ await sleep(1000); } setTimeout(() => { - let end = r + 20; + let end = r + 25; end = end > self.rules.length ? self.rules.length : end; for (; r < end; r++) { let rule = self.rules[r]; @@ -1575,7 +1575,7 @@ if (!this.hpRules) this.hpRules = []; let url = this.curSiteRule && this.curSiteRule.url, self = this; let href = location.href.slice(0, 500); - let matchedRules = this.hpRules.filter(rule => rule !== self.curSiteRule && new RegExp(rule.url, "i").test(href) && self.ruleMatch(rule)); + let matchedRules = this.hpRules.filter(rule => rule != self.curSiteRule && new RegExp(rule.url, "i").test(href) && self.ruleMatch(rule)); if (url) matchedRules.unshift(this.curSiteRule); matchedRules.sort((a, b) => { if ((a.include || a.exclude) && (!b.include && !b.exclude)) { @@ -1599,10 +1599,13 @@ } }); this.hpRules = this.hpRules.filter(item => { - return item && !matchedRules.find(rule => item.url === rule.url && JSON.stringify(item) === JSON.stringify(rule)); + return item && !matchedRules.find(rule => item.url == rule.url && JSON.stringify(item) == JSON.stringify(rule)); }); if (instead) { - if (url) this.hpRules.unshift(this.curSiteRule); + if (url) { + this.hpRules.unshift(this.curSiteRule); + matchedRules = []; + } } else { this.hpRules = matchedRules.concat(this.hpRules); } @@ -3449,7 +3452,7 @@ if (initRun && initRun != false) { setTimeout(() => { nextPage(); - }, 500); + }, 300); } } }); @@ -4503,12 +4506,7 @@ if(!ruleParser.customRules) { ruleParser.customRules = []; } - for (let i in ruleParser.customRules) { - if (ruleParser.customRules[i].url == editTemp.url) { - ruleParser.customRules.splice(i, 1); - break; - } - } + ruleParser.customRules = ruleParser.customRules.filter(item => {return item.url != editTemp.url || item.name != editTemp.name}); if (tempRule.value) { ruleParser.customRules.unshift(editTemp); ruleParser.curSiteRule = editTemp; @@ -5170,7 +5168,8 @@ width: 60%; position: fixed; z-index: 999; - bottom: 2%; + bottom: 0; + padding-bottom: 15px; left: 20%; font-size: xx-large; opacity: 0.8; @@ -6816,7 +6815,7 @@ if (curPage > 1 || ruleParser.nextLinkHref) { let pageEle = ruleParser.getPageElement(document); if (pageEle && pageEle.length) { - let parent = pageEle[0].parentNode, pageScrollY = parent.scrollTop;; + let parent = pageEle[0].parentNode, pageScrollY = parent.scrollTop; while (parent && pageScrollY == 0) { parent = parent.parentNode; pageScrollY = parent.scrollTop; @@ -7834,7 +7833,7 @@ return; } if (!ruleParser.checkStopSign(nextLink, iframeDoc)) { - return returnFalse("Stop as stopSign");; + return returnFalse("Stop as stopSign"); } if (checkTimes++ > 200) { returnFalse("Stop as timeout when emu"); From ab11613e3ec8270626743bb5cdbf1b9538ad7a34 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 20 Dec 2023 15:55:24 +0800 Subject: [PATCH 570/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 31604d98664..036e8f7063c 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.8](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.9](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 9475c5cc6e4fbbfbe158afd5ca4e3ce16adabc6b Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 20 Dec 2023 15:58:10 +0800 Subject: [PATCH 571/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 34e25e591b0..42960cf6201 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -897,7 +897,7 @@ const mainSel = "article,.article,[role=main],main,.main,#main"; const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434", "i"); const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u007c\u00bb\u007c\u003e\u003e\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); - const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; + const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-isrc", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; var rulesData = {uninited: true, firstRun: true, sideController: !isMobile}, ruleUrls, updateDate, clickedSth = false; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; var tryTimes = 0, showedLastPageTips = false, rate = 1, author = ''; From 6714cc318a822a1905e448a6f4115475a0ceb5a4 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 21 Dec 2023 01:53:16 +0000 Subject: [PATCH 572/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 331b01c01db..813ad91025d 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,18 @@ [ +{ + "resource_url": "http://wedata.net/items/86196", + "data": { + "pageElement": "//div[@id='divMain']", + "nextLink": "(//div[@class='pagebar'])[1]/a[last()-1]", + "url": "^https://comics888\\.com/", + "exampleUrl": "https://comics888.com/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "blekai", + "name": "Comics888", + "created_at": "2023-12-19T18:44:25+09:00", + "updated_at": "2023-12-20T16:38:15+09:00" +}, { "resource_url": "http://wedata.net/items/86194", "data": { From 8f98872d46634315069e9f33248b4515acd7708a Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 21 Dec 2023 18:03:29 +0800 Subject: [PATCH 573/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 1 - 1 file changed, 1 deletion(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 1eff3c52930..a80fa28fd03 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9652,7 +9652,6 @@ "name": "Hacker News", "action": 0, "url": "^https?://news\\.ycombinator\\.com/", - "pageElement": "table.itemlist>tbody>tr", "nextLink": "a.morelink" }, { From d6c67d8c381d6d0b080009c6d630342b14a85181 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 21 Dec 2023 20:09:01 +0800 Subject: [PATCH 574/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index a80fa28fd03..2a0068904d9 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -6,6 +6,13 @@ "example": "https:v2ex.com/t/967813", "pageElement": "#Main>.box:nth-child(4)" }, +{ + "name": "V2EX", + "url": "^https?://www\\.v2ex\\.com/t/", + "example": "https://www.v2ex.com/t/998253", + "author": "Hoothin", + "pageElement": "#Main>.box:not([style],[id])>.cell[id]" +}, { "name": "ICONFINDER ", "author": "skofkyo", From 9a2467d7bb2653ad89eab84c007ff58d95c43a2c Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 21 Dec 2023 20:42:07 +0800 Subject: [PATCH 575/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 015e43969fd..a84a0525f3f 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.20.1 +// @version 2023.12.21.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -19661,7 +19661,8 @@ ImgOps | https://imgops.com/#b#`; .pv-pic-window-scroll {\ max-height: calc(100vh - 26px);\ max-width: 100vw;\ - overflow: scroll;\ + overflow-y: scroll;\ + overflow-x: hidden;\ }\ .pv-pic-window-scroll>.pv-pic-window-scrollSign {\ display: block;\ From d8498d84b228c9749a24892353b105ee8ca2683e Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 21 Dec 2023 21:08:08 +0800 Subject: [PATCH 576/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 677dc29c9f4..ca91282f908 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.56 +// @version 1.7.57 // @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -882,7 +882,19 @@ } else { _GM_openInTab = (s, t) => {window.open(s)}; } - if (typeof GM_notification != 'undefined') { + if (ext) { + _GM_notification = s => { + chrome.notifications.create( + "searchjumper-notification", + { + type: "basic", + iconUrl: "/icon/icon128.png", + title: "SearchJumper", + message: s, + } + ) + } + } else if (typeof GM_notification != 'undefined') { _GM_notification = s => GM_notification({text: s, onclick: e => _GM_openInTab(configPage, {active: true})}); } else if (typeof GM != 'undefined' && typeof GM.notification != 'undefined') { _GM_notification = s => GM.notification({text: s, onclick: e => _GM_openInTab(configPage, {active: true})}); @@ -6668,6 +6680,7 @@ self.createAddonSpan(name, addon); }); } + if (isAllPage) return; if (disableHighlight && disableHighlight != location.hostname && window.top == window.self) { storage.setItem("disableHighlight", ""); } From 0f4f474e902eba2d59b295cbcafe1338d73ac494 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 21 Dec 2023 21:16:57 +0800 Subject: [PATCH 577/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ca91282f908..bb1ffdf2af1 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1635,7 +1635,7 @@ top: 101px; position: absolute; width: 100%; - overflow-x: scroll; + overflow-x: auto; overflow-y: hidden; height: calc(100% - 101px); overscroll-behavior: contain; From 7ded5972b86540cc0c03a8b101dd3e2b1765ca49 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 22 Dec 2023 15:28:32 +0800 Subject: [PATCH 578/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index a84a0525f3f..49f3255aaa5 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.21.1 +// @version 2023.12.22.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -12370,8 +12370,10 @@ ImgOps | https://imgops.com/#b#`; }(); var rulerEle = document.createElement("span"); - rulerEle.style.visibility = "hidden"; - rulerEle.style.whiteSpace = "nowrap"; + if (rulerEle.style) { + rulerEle.style.visibility = "hidden"; + rulerEle.style.whiteSpace = "nowrap"; + } function visualLength(str,size,family) { rulerEle.style.fontSize = size || "inherit"; rulerEle.style.fontFamily = family || "inherit"; From 782ab578e4b173673d31c0ae3cab31f0f34a4ca9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 22 Dec 2023 15:54:51 +0800 Subject: [PATCH 579/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index bb1ffdf2af1..07322ed7458 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.57 +// @version 1.7.58 // @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1565,7 +1565,7 @@ display: none!important; } #search-jumper.search-jumper-showall #filterSites { - background-color: #2a282cc0; + background-color: #f5f5f5e0; border: none; height: 40px; margin-bottom: 0; @@ -1589,8 +1589,8 @@ } #search-jumper.search-jumper-showall #filterSites>input, #search-jumper.search-jumper-showall #filterSites>textarea { - background-color: #000000; - color: white; + background-color: white; + color: black; border: none; outline: none; box-sizing: border-box; @@ -1727,7 +1727,7 @@ white-space: nowrap; margin: 20px; pointer-events: none; - text-shadow: 0 0 3px black; + text-shadow: 0 0 5px black; background-image: initial; } #search-jumper-alllist>.dayInAll { @@ -3186,6 +3186,14 @@ #search-jumper .sitelist > .sitelistCon > p { background-color: #252B32 !important; } + #search-jumper.search-jumper-showall #filterSites { + background-color: #2a282cc0; + } + #search-jumper.search-jumper-showall #filterSites>input, + #search-jumper.search-jumper-showall #filterSites>textarea { + background-color: #000000; + color: white; + } #search-jumper .sitelist > .sitelistCon { background-color: #1C2127ee !important; From ddb93370a2162fe470acbcf65162ae45881df811 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 22 Dec 2023 20:40:24 +0800 Subject: [PATCH 580/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 3a706b8ad14..db764bda1bb 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.2 +// @version 2.8.3 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -451,7 +451,7 @@ if (window.top != window.self) { filterListContainer.id = "filterListContainer"; filterListContainer.innerHTML = createHTML(`
-
+
${i18n.custom} @@ -693,6 +693,32 @@ if (window.top != window.self) { #filterListContainer input[type=button]:active { box-shadow: inset 1px 1px 1px #DFDFDF; } + #filterListBody { + padding: 5px; + box-sizing: border-box; + overflow: hidden; + width: 600px; + height: auto; + max-height: 80vh; + min-height: 200px; + position: fixed; + left: 50%; + top: 10%; + margin-left: -300px; + z-index: 99998; + background-color: #ffffff; + border: 1px solid #afb3b6; + border-radius: 10px; + opacity: 0.95; + filter: alpha(opacity=95); + box-shadow: 5px 5px 20px 0px #000; + } + @media screen and (max-width: 800px) { + #filterListBody { + width: 90%; + margin-left: -45%; + } + } `); dacLinksCon = filterListContainer.querySelector("#dacLinksCon"); shadowContainer = document.createElement("div"); From b46757c4453b592663dce530129b4320de9644cb Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 23 Dec 2023 10:03:58 +0800 Subject: [PATCH 581/812] 1.9.37.10 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 036e8f7063c..98393f00b9c 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.9](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.10](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 42960cf6201..e83f9aa340a 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.9 +// @version 1.9.37.10 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2232,7 +2232,7 @@ } hrefIsJs(href) { - return /^(javascript|#)/.test(href.trim().replace("#p{", "").replace(location.href, "")); + return /^(javascript|#|$)/.test(href.trim().replace("#p{", "").replace(location.href, "")); } async querySelectorList(source, list) { @@ -2365,7 +2365,7 @@ } if (next) { let innerText = next.innerText; - let isJs = this.linkHasHref(next); + let isJs = !this.linkHasHref(next); if (innerText && nextTextReg2.test(innerText.trim())) { if (isJs) { if (this.verifyElement(next)) { @@ -3548,7 +3548,10 @@ async insertPage(doc, eles, url, callback, tried) { this.oldUrl = this.curUrl; - let oldTitle = this.pageDoc.title; + let oldTitle = document.title; + try { + let oldTitle = this.pageDoc.title; + } catch (e) {} this.pageDoc = doc; this.curUrl = url; isLoading = true; From 502c7624d1e9aaf38e11d17c147e3daa13e0500b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 23 Dec 2023 13:17:26 +0800 Subject: [PATCH 582/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 07322ed7458..efa11eb6346 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.58 +// @version 1.7.59 // @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -8769,7 +8769,10 @@ let targetName = inputString || document.title; let imgBase64 = '', resultUrl = customVariable(ele.dataset.url); if (targetElement && targetElement.nodeName) { - targetUrl = (typeData.selectImg || typeData.selectAudio || typeData.selectVideo) ? (targetElement.src || '') : (targetElement.href || (targetElement.parentNode && targetElement.parentNode.href) || ''); + targetUrl = targetElement.href || (targetElement.parentNode && targetElement.parentNode.href) || ''; + if ((typeData.selectImg || typeData.selectAudio || typeData.selectVideo) && targetElement.src) { + targetUrl = targetElement.src; + } if (targetElement.nodeName.toUpperCase() == "VIDEO" || targetElement.nodeName.toUpperCase() == "AUDIO") { if (!targetUrl) { let source = targetElement.querySelector("source"); From 68add0f7a381c0efcd9d624ab6a18943d3a14fc6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 23 Dec 2023 17:00:29 +0800 Subject: [PATCH 583/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 49f3255aaa5..41f72aac9ff 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.22.1 +// @version 2023.12.23.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -22800,7 +22800,7 @@ ImgOps | https://imgops.com/#b#`; let nodeStyle = unsafeWindow.getComputedStyle(node); let bg = node && nodeStyle.backgroundRepeatX != "repeat" && nodeStyle.backgroundRepeatY != "repeat" && nodeStyle.backgroundImage; if (!bg || bg == "none") return false; - return bg.length > 100 || (node.clientWidth > prefs.floatBar.minSizeLimit.w && node.clientHeight > prefs.floatBar.minSizeLimit.h && /^\s*url\(\s*['"]?\s*[^ad\s'"]/.test(bg)); + return bg.length > 200 || (node.clientWidth > prefs.floatBar.minSizeLimit.w && node.clientHeight > prefs.floatBar.minSizeLimit.h && /^\s*url\(\s*['"]?\s*[^ad\s'"]/.test(bg)); }; if (target.nodeName.toUpperCase() != 'IMG' && matchedRule.getExtSrc) { let nsrc; From afb94b65c3952301454d3a8b72c38ae043df8108 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 23 Dec 2023 20:53:06 +0800 Subject: [PATCH 584/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 2a0068904d9..6555059621f 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10494,6 +10494,12 @@ "waitElement": ".showpagePoint", "include": ".date-posts>.post-outer" }, +{ + "name": "thehackernews", + "url": "^https://thehackernews\\.com/", + "pageElement": ".blog-posts", + "nextLink": "id('blog-pager-older-link')/a" +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From 9bbdcccf556ffe8fe2f5152d6f9a240c96b8ea84 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 24 Dec 2023 10:00:20 +0800 Subject: [PATCH 585/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e83f9aa340a..c9053a7eba1 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.10 +// @version 1.9.37.11 // @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -116,6 +116,7 @@ match: ["en"], lang: { enableDebug: "Enable debug output", + updateNotification: "Notification after rules updated", disable: "Disable", disableSite: "Toggle disabled state", disableSiteTips: "Disabled on this site", @@ -235,6 +236,7 @@ match: ["zh-CN", "zh-SG"], lang: { enableDebug: "调试模式,输出信息至控制台", + updateNotification: "规则更新后提示", disable: "暂时禁用", disableSite: "站点禁用开关", disableSiteTips: "已在此站禁用", @@ -354,6 +356,7 @@ match: ["zh-TW", "zh-HK"], lang: { enableDebug: "調試模式,輸出信息至控制台", + updateNotification: "規則更新后提示", disable: "暫時禁用", disableSite: "站點禁用開關", disableSiteTips: "已在此站禁用", @@ -5615,6 +5618,7 @@ let wedata2githubInput = createCheckbox(i18n("wedata2github"), rulesData.wedata2github); let customFirstInput = createCheckbox(i18n("customFirst"), rulesData.customFirst); let lastPageTipsInput = createCheckbox(i18n("lastPageTips"), rulesData.lastPageTips); + let updateNotificationInput = createCheckbox(i18n("updateNotification"), rulesData.updateNotification != false); let hideBarInput = createCheckbox(i18n("hideBar"), rulesData.hideBar && !rulesData.hideBarButNoStop, "h4", dbClick2StopInput, 'radio'); hideBarInput.name = 'hideBar'; @@ -5780,6 +5784,7 @@ rulesData.dbClick2Stop = dbClick2StopInput.checked; rulesData.enableWhiteList = !enableWhiteListInput.checked; rulesData.enableDebug = enableDebugInput.checked; + rulesData.updateNotification = updateNotificationInput.checked; rulesData.enableHistory = enableHistoryInput.checked; rulesData.enableHistoryAfterInsert = enableHistoryAfterInsertInput.checked; rulesData.openInNewTab = openInNewTabInput.checked; @@ -5880,7 +5885,7 @@ storage.setItem("ruleLastUpdate", now); storage.setItem("rules", ruleParser.rules); let curLength = ruleParser.rules.length; - if (curLength !== preLength) { + if (curLength !== preLength && rulesData.updateNotification) { _GM_notification({ text: `Rules has updated( ${preLength} => ${curLength} )`, title: "Pagetual rules updated", @@ -6116,6 +6121,9 @@ if (typeof(rulesData.enableDebug) == "undefined") { rulesData.enableDebug = true; } + if (typeof(rulesData.updateNotification) == "undefined") { + rulesData.updateNotification = true; + } if (typeof(rulesData.initRun) == "undefined") { rulesData.initRun = true; } From 55407c21636c1535d87a14a081d9615c15b21269 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 24 Dec 2023 10:00:34 +0800 Subject: [PATCH 586/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 98393f00b9c..ec86345bc09 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.10](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.11](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 07a905cd14f4fb274fa51e684fbc51b404a892a1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 24 Dec 2023 10:11:39 +0800 Subject: [PATCH 587/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index c9053a7eba1..fe5f5e86867 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -476,6 +476,7 @@ match: ["ja"], lang: { enableDebug: "デバッグモード", + updateNotification: "ルール更新後の通知", disable: "一時的に無効", disableSite: "無効状態の切り替え", disableSiteTips: "このサイトで既に無効になっています", @@ -595,6 +596,7 @@ match: ["ru", "ru-RU"], lang: { enableDebug: "Включить отладку", + updateNotification: "Уведомление после обновления правила", disable: "Выключить", disableSite: "Включить/выключить на сайте", disableSiteTips: "Выключено для этого сайта", From 36eb3acefee42f09dad7055f72b045b730d5bd36 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 24 Dec 2023 19:20:07 +0800 Subject: [PATCH 588/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index efa11eb6346..5580df65a18 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -12047,12 +12047,15 @@ shareEngines = shareEngines.getAttribute("content"); shareEngines = JSON.parse(decodeURI(shareEngines)); searchData.sitesConfig = shareEngines; - document.getElementById("spotlight").style.display = "none"; } catch (e) { shareEngines = null; } } isAllPage = !!shareEngines || /all(\.html)?$/.test(location.pathname); + let spotlight = document.getElementById("spotlight"); + if (spotlight) { + spotlight.style.display = "none"; + } return true; } return false; From f71ad3a7bc8eacdb9997bca1767d2233b1e38fa6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 25 Dec 2023 08:11:25 +0800 Subject: [PATCH 589/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5580df65a18..b08a2187f18 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.59 +// @version 1.7.60 // @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -9120,7 +9120,8 @@ if (searchData.prefConfig.multiline == 1 || searchData.prefConfig.multiline == 2) { if (inputString && wordParamReg.test(ele.dataset.url) && - inputString.indexOf("\n") !== -1) { + inputString.indexOf("\n") !== -1 && + !/^(c|show)/.test(ele.dataset.url)) { if (searchData.prefConfig.multiline == 1 || confirm(i18n("multiline"))) { let selStrArr = inputString.split("\n"); From 2e32d9434b1cf7f7d33b3d47d96c7d4030384d41 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 25 Dec 2023 09:56:35 +0800 Subject: [PATCH 590/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index fe5f5e86867..5f13aaa98c5 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4346,6 +4346,38 @@ line-height: 35px; color: #161616; } + #pagetual-picker #edit{ + -webkit-animation: jumpAnimation .6s 5; + animation: jumpAnimation .6s 5; + } + @keyframes jumpAnimation { + 0% { + transform: scale(1) translateY(0); + animation-timing-function: ease-out; + } + 50% { + transform: scale(1.2) translateY(-5px); + animation-timing-function: ease-in; + } + 100% { + transform: scale(1) translateY(0); + animation-timing-function: ease-out; + } + } + @-webkit-keyframes jumpAnimation { + 0% { + -webkit-transform: scale(1) translateY(0); + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: scale(1.2) translateY(-5px); + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: scale(1) translateY(0); + animation-timing-function: ease-out; + } + } `; this.mainSignDiv = this.createSignDiv(); this.allSignDiv = []; From c6e9bb983ed6d34a58051987b434bd29ec9c69f9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 25 Dec 2023 19:47:08 +0800 Subject: [PATCH 591/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 162 +++++++++++++++++++++++++++++- 1 file changed, 161 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index b08a2187f18..e985987cf02 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.60 +// @version 1.7.61 // @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -685,6 +685,111 @@ template: '請設置【#t#】的值' }; break; + case 'ja': + config = { + import: 'インポート', + filter: 'フィルター', + selectAll: 'すべて選択', + importOrNot: '設定をインポートしますか? ', + settings: '構成スクリプト', + batchOpen: 'バッチオープン', + batchOpenConfirm: 'バッチオープンしてもよろしいですか? ', + postOver: '正常に送信されました:', + postError: '送信に失敗しました:', + keywords: '検索語を入力してください', + targetUrl: '検索 URL を入力してください', + siteName: 'サイト名', + siteDesc: '説明', + siteUrl: 'アドレス', + siteIcon: 'アイコン', + siteTest: 'テスト', + siteCancel: 'キャンセル', + siteAdd: '追加', + siteType: 'カテゴリ', + siteExist: '同じルールがすでに存在します。クローンとして追加しますか? ', + siteAddOver: 'サイトは正常に追加されました', + multiline: '複数行の検索は改行で区切るべきですか? ', + multilineTooMuch: '行数が 10 行を超えています。検索を続けますか? ', + inputPlaceholder: 'フィルタリング エンジン', + inputTitle: 'フィルタリング エンジン、*? ワイルドカードをサポート、$ は終わりを表し、^ は始まりを表します、グループ ** サイトは写真などの指定されたグループをフィルターできます ** Google、次の項目をタブします', + inputKeywords: '検索キーワードを入力してください', + inPageTips: 'カスタム区切り文字: $c と区切り文字 ($c| 検索 | ジャンパーなど)、デフォルトのスペースを区切り文字として使用\n元のテキストは分離されていません: $o と文字 (ヒーローが好んだ $oopai など)\n正規表現 :/re/ 、$c、/google/i、/aPPle/ など\nプロンプト テキストの追加: 検索テキスト $t{プロンプト テキスト}、たとえば linux$t{Linux は Unix ではありません}\nカスタム スタイルの追加: 検索テキスト $s{背景;other}、例: google$s{#333333;color:red;}\nキーワードを左クリックすると次のキーワードにジャンプし、キーワードを右クリックすると前のキーワードにジャンプします', + inPagePlaceholder: 'ページ内を検索するには、テキストを入力して Enter キーを押してください', + pickerBtn: '要素の取得', + multiPickerBtn: '要素を取得するには、Ctrl または Command を押したまま継続的に取得します', + editBtn: '検索テキストを編集', + emptyBtn: '空の検索テキスト', + copyInPageBtn: '検索テキストをコピー', + wordModeBtn: 'ワードモード', + copyEleBtn: '選択した要素をコピー', + openLinkBtn: '選択したリンクを開く', + maxEleBtn: '選択した要素を展開', + minEleBtn: '選択した要素を折りたたむ', + expandAll: 'すべて展開', + collapseAll: 'すべて折りたたむ', + rename: '名前を変更', + reverseBtn: '検索テキストを復元', + pinBtn: '検索テキストを修正、すべてのタブで検索', + locBtn: 'サイドバーを検索', + filterSites: '検索エンジンをフィルタリング', + searchInPage: 'ページ内を検索', + removeBtn: '検索語を削除', + saveRuleBtn: '現在のサイトの検索語を保存', + wordContent: '単語の内容を検索', + wordHide: '親要素を非表示', + wordHideTips: '要素の深さ、0 が現在の親', + wordStyle: '検索ワードスタイル', + wordTitle: '検索単語の注釈', + re: 'RegExp', + ignoreCase: '大文字と小文字は区別されません', + filterLink: 'フィルターリンク', + modify: '変更', + cancel: 'キャンセル', + modifyWord: 'ページ上の検索ワードを変更します', + addSearchEngine: '検索エンジンを追加', + noValidItemAsk: '有効な要素が見つかりません。ルールを手動で編集して追加しますか? ', + expand: '残りのサイトを展開します', + add: '追加', + addWord: '新しい単語を追加', + wordRange: '有効範囲', + customInputFrame: 'カスタム検索パラメータ', + customSubmit: '検索を送信', + finalSearch: '対象の検索文字列', + search: 'このアイテムを検索', + siteKeywords: 'キーワード (| で区切られた複数のキーワード)', + siteMatch: '通常のサイト URL と一致', + openSelect: 'オプションを開く', + openInDefault: 'デフォルト', + openInNewTab: '新しいタブが開きます', + openInCurrent: '現在のページが開いています', + currentType: '現在のカテゴリ', + maxAddSiteBtn: '最大化', + minAddSiteBtn: '復元', + addAction: 'アクションを追加', + rollInfo: '入力検索をシミュレート', + inputAction: '入力', + clickAction: 'クリック', + sleepAction: '待機', + submitCrawl: '操作を完了', + inputOutput: '要素 #t1# 内に #t2# を入力します', + clickOutput: 'クリック要素#t#', + sleepOutput: 'スリープ#t# ミリ秒', + inputNewValue: '新しい値を入力してください', + deleteconfirm: 'この項目を削除してもよろしいですか? ', + sleepPrompt: '待機時間 (ミリ秒)', + startCache: 'キャッシュを開始します。キャッシュが完了するまで辛抱強く待ってください。設定ページは閉じないでください。 ', + cacheOver: 'すべてのアイコンがキャッシュされました! ', + cspDisabled: 'スクリプト スタイルは現在のサイトの CSP によってブロックされているため、表示できません。許可を取得するには、Allow CSP: Content-Security-Policy 拡張機能をインストールしてみてください', + Sunday: '日曜日', + Monday: '月曜日', + Tuesday: '火曜日', + Wednesday: '水曜日', + Thursday: '木曜日', + Friday: '金曜日', + Saturday: '土曜日', + template: '[#t#]の値を設定してください' + }; + break; default: config = { import: 'Import', @@ -14272,6 +14377,34 @@ } } + function globMatch(first, second) { + if (first === '*') { + return true; + } + if (first.length == 0 && second.length == 0){ + return true; + } + + if (first.length > 1 && first[0] == '*' && + second.length == 0){ + return false; + } + + if ((first.length > 1 && first[0] == '?') || + (first.length != 0 && second.length != 0 && + first[0] == second[0])){ + return globMatch(first.substring(1), + second.substring(1)); + } + + if (first.length > 0 && first[0] == '*'){ + return globMatch(first.substring(1), second) || + globMatch(first, second.substring(1)); + } + + return false; + } + if (location.href.indexOf("#searchJumperMin") != -1) { inMinMode = true; if (location.href.indexOf("#searchJumperMinPost") != -1) { @@ -14315,6 +14448,33 @@ preAction(); await initData(); if (disableState) return; + if (searchData.prefConfig.blacklist && searchData.prefConfig.blacklist.length > 0) { + let href = location.href.slice(0, 500); + let commentStart = false; + for (let i = 0; i < searchData.prefConfig.blacklist.length; i++) { + let curGlob = searchData.prefConfig.blacklist[i]; + if (!curGlob) continue; + if (curGlob.indexOf("//") == 0) continue; + if (commentStart) { + if (/\*\/$/.test(curGlob)) { + commentStart = false; + } + continue; + } + if (curGlob.indexOf("/*") == 0) { + commentStart = true; + continue; + } + if (curGlob.indexOf("/") == 0) { + let regMatch = curGlob.match(/^\/(.*)\/(\w*)$/); + if (regMatch && new RegExp(regMatch[1], regMatch[2]).test(href)) { + return; + } + } else if (globMatch(curGlob, href)) { + return; + } + } + } initView(); initConfig(); initMycroft(); From 887e7e8d52039a5b3d3bd4b680d061a1f449ca0d Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 26 Dec 2023 01:51:10 +0000 Subject: [PATCH 592/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 813ad91025d..bcbfda7230f 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86198", + "data": { + "insertBefore": "", + "pageElement": "id('wishlist')//table[contains(concat(' ', @class, ' '), ' n_worklist ')]/tbody/*", + "nextLink": "id('wishlist')/table[contains(concat(' ', @class, ' '), ' global_pagination ')]//a[.='次へ']", + "url": "https://www.dlsite.com/*/mypage/wishlist", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "htsign_0", + "name": "DLSite wishlist", + "created_at": "2023-12-26T03:03:02+09:00", + "updated_at": "2023-12-26T03:03:02+09:00" +}, { "resource_url": "http://wedata.net/items/86196", "data": { From 2704579493e6e785e27cc000b4c10667eb1b51fd Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 26 Dec 2023 11:37:54 +0800 Subject: [PATCH 593/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e985987cf02..66170fccff9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4942,7 +4942,7 @@ const start = result.text.length; result.text += "\n"; result.data[start] = {node: ele, text: "\n"}; - } else if (ele.offsetParent) { + } else if (ele.offsetParent || ele.offsetHeight) { if (/^(li|p|a)$/i.test(ele.nodeName)) { let start = result.text.length; result.text += "\n"; @@ -5395,7 +5395,7 @@ } } else { let blockValue = ""; - if (node.nodeType == 1 && node.value && node.offsetParent && !word.init && /^(button|select|input|textarea)$/i.test(node.nodeName) && !/^(hidden|file|password|radio|range|checkbox|image)$/i.test(node.type)) { + if (node.nodeType == 1 && node.value && (node.offsetParent || node.offsetHeight) && !word.init && /^(button|select|input|textarea)$/i.test(node.nodeName) && !/^(hidden|file|password|radio|range|checkbox|image)$/i.test(node.type)) { blockValue = node.value; } if (blockValue) { From 1ecb06cd7fdcf48be8a7ae4c209bce9b18b38484 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 26 Dec 2023 15:41:54 +0800 Subject: [PATCH 594/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 66170fccff9..6f750702110 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -496,7 +496,7 @@ siteAdd: '添加', siteType: '分类', siteExist: '已存在相同规则,是否添加为克隆项?', - siteAddOver: '站点添加成功', + siteAddOver: '站点添加成功,刷新后生效', multiline: '是否以换行符分隔多行搜索?', multilineTooMuch: '行数超过10行,是否继续搜索?', inputPlaceholder: '筛选引擎', @@ -602,7 +602,7 @@ siteAdd: '添加', siteType: '分類', siteExist: '已存在相同規則,是否添加為克隆項?', - siteAddOver: '站點添加成功', + siteAddOver: '站點添加成功,刷新後生效', multiline: '是否以換行符分隔多行搜索?', multilineTooMuch: '行數超過10行,是否繼續搜索?', inputPlaceholder: '篩選引擎', @@ -1223,6 +1223,8 @@ var webDAV; async function dataChanged(callback, override) { if (shareEngines) return; + let _searchData = await storage.getItem("searchData"); + if (_searchData) searchData = _searchData; if (!webDAV) return callback && callback(); if (!override) { let lastModified = await webDAV.read("lastModified"); From 78292c430557ee9f1f8e2745f2811eaf1ece5c74 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 26 Dec 2023 16:17:39 +0800 Subject: [PATCH 595/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 6f750702110..5ac38768c74 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -12163,6 +12163,13 @@ let spotlight = document.getElementById("spotlight"); if (spotlight) { spotlight.style.display = "none"; + } else { + setTimeout(() => { + spotlight = document.getElementById("spotlight"); + if (spotlight) { + spotlight.style.display = "none"; + } + }, 500); } return true; } From 66e470084ba2a4fb4e5751bcf58150fc071729e6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 26 Dec 2023 16:45:20 +0800 Subject: [PATCH 596/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5ac38768c74..a9cd3044474 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -459,7 +459,7 @@ expandType: false, rightMouse: true, shiftLastUsedType: true, - mouseLeaveToHide: false, + mouseLeaveToHide: true, currentTypeFirst: true, switchSitesPreKey: 'ArrowLeft', switchSitesNextKey: 'ArrowRight', From 4dec2ca0755ad1fc9753ac2506a1e94cff805e9f Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 27 Dec 2023 08:12:44 +0800 Subject: [PATCH 597/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 6555059621f..9547c6ec1ab 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9964,6 +9964,13 @@ "pageElement": ".bbs-post-wrapper-content", "nextLink": "li.hupu-rc-pagination-next>a:not([disabled])" }, +{ + "name": "虎扑社区", + "url": "^https?://bbs\\.hupu\\.com/", + "example": "https://bbs.hupu.com/623887205.html", + "author": "Hoothin", + "pageElement": "[class^=\"post-wrapper_bbs-post-wrapper-title\"]+div" +}, { "name": "小木虫论坛", "url": "^http://muchong\\.com", From 89774d2b17aeb8a20933053abcf8a4c987114110 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 27 Dec 2023 19:06:38 +0800 Subject: [PATCH 598/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a9cd3044474..34537b5fb90 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2205,7 +2205,8 @@ color: black; fill: black; } - .search-jumper-type.search-jumper-open>span.search-jumper-word { + .search-jumper-type.search-jumper-open>span.search-jumper-word, + #search-jumper.funcKeyCall .search-jumper-type>span.search-jumper-word { filter: drop-shadow(0px 0px 2px black); } .search-jumper-left .searchJumperExpand>svg, @@ -2953,6 +2954,31 @@ .inputGroup svg.checked { fill: #1E88E5; } + @media screen and (max-width: 1920px) { + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { + width: 1370px; + } + } + @media screen and (max-width: 1600px) { + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { + width: 1100px; + } + } + @media screen and (max-width: 1300px) { + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { + width: 830px; + } + } + @media screen and (max-width: 900px) { + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { + width: 560px; + } + } + @media screen and (max-width: 600px) { + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { + width: 300px; + } + } @media screen and (max-width: 800px) { .search-jumper-input .line { display: none; From 6785828be4ff505809fab8c6a7985bcba2c9374f Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 28 Dec 2023 09:18:41 +0800 Subject: [PATCH 599/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- .../Switch Traditional Chinese and Simplified Chinese.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 20b7bdd307f..5cc2c878f79 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -6,7 +6,7 @@ // @namespace hoothin // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts -// @version 1.2.7.6 +// @version 1.2.7.7 // @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) // @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) // @description:ja 簡繁中国語に変換 @@ -684,7 +684,7 @@ ], '乾':[ '干', - ['乾','乾隆','乾卦','乾道','乾宅','乾造','乾之卦','乾為','「乾」'] + ['乾','乾隆','乾卦','乾道','乾宅','乾造','乾之卦','乾為','「乾」','乾坤','乾元','乾剛','乾方','乾施','乾首','乾象','乾啟','幹鈞','乾化','乾心','幹居','乾符','乾暉','幹曜','乾風','乾雷','乾州','中乾','連乾','乾沒','桑乾','乾乾','花乾'] ], '瞭':[ '瞭', From 84c34b6f3f7534ca4cedd618fa5d590359e30c9f Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 29 Dec 2023 14:44:35 +0800 Subject: [PATCH 600/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 9547c6ec1ab..bddd6e41815 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10507,6 +10507,13 @@ "pageElement": ".blog-posts", "nextLink": "id('blog-pager-older-link')/a" }, +{ + "name": "Switch520", + "url": "^https?://www\\.gamer520\\.com/", + "example": "https://www.gamer520.com/", + "nextLink": "a.next.page-numbers", + "pageElement": "main.site-main > div.row.posts-wrapper" +}, { "name": "游戏怀旧灌水首页禁用", "url": "^https?://www\\.yxhjgs\\.com/$", From 1c6d7266c18c69f705f13571e72cacdb6d3be8ec Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 29 Dec 2023 15:11:34 +0800 Subject: [PATCH 601/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 5f13aaa98c5..90b21fa027a 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,8 +10,8 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.11 -// @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. +// @version 1.9.37.12 +// @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 // @description:ja Webページを自動で読み込み継ぎ足し表示を行うブラウザ拡張です、次のページ付けされた Web ページの自動読み込みと現在のページへの挿入 ルールなしで何千もの Web サイトをサポートします。 @@ -769,7 +769,7 @@ } else if (typeof GM !== 'undefined' && typeof GM.notification !== 'undefined') { _GM_notification = GM.notification; } else { - _GM_notification = (s) => {showTips(String(s));}; + _GM_notification = (s) => {showTips(String(s.text || s));}; } if (typeof GM_openInTab !== 'undefined') { _GM_openInTab = GM_openInTab; @@ -1940,9 +1940,9 @@ let isMax = false; if (isHori) { if (curMaxEle) { - if (curWidth < w) { + if (w > curWidth && (windowWidth>>1) > curWidth) { isMax = true; - } else if (curWidth < w + 300 && curMaxArea < a) { + } else if (w + 300 > curWidth && a > curMaxArea) { isMax = true; } } From 778365713dd76b3c6cc85de7d450b9fd0f21521c Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 29 Dec 2023 15:12:11 +0800 Subject: [PATCH 602/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index ec86345bc09..b40120badac 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.11](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.12](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From fed20a980ca14354a194a383f75442d7833a53f7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 29 Dec 2023 15:15:16 +0800 Subject: [PATCH 603/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 90b21fa027a..76b5547247f 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4179,6 +4179,7 @@ min-width: 290px; max-width: calc(65vw - 50px); min-height: unset; + max-height: unset; padding: 6px 12px; font-size: 16px; font-weight: 400; From 6eb4c02ae7b9f2956afc4014f2d0a65c7a1095fc Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 29 Dec 2023 20:13:41 +0800 Subject: [PATCH 604/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 76b5547247f..cbe7bf358d5 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -5210,17 +5210,18 @@ position: fixed; z-index: 999; bottom: 0; - padding-bottom: 15px; left: 20%; + background-color: #6b6b6b45; font-size: xx-large; opacity: 0.8; cursor: pointer; - -moz-transition:opacity 0.3s ease; - -webkit-transition:opacity 0.3s ease; - transition:opacity 0.3s ease; + -moz-transition:all 0.3s ease; + -webkit-transition:all 0.3s ease; + transition:all 0.3s ease; } #saveBtn:hover { opacity: 1; + background-color: #6b6b6b; } `); click2import = document.querySelector("[name='user-content-click2import'],[name='click2import']"); From e2ef59ee048093f074505f8f608c1f75097e626c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 30 Dec 2023 22:11:16 +0800 Subject: [PATCH 605/812] Update README.md --- Picviewer CE+/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Picviewer CE+/README.md b/Picviewer CE+/README.md index 36f4969a35d..4563a03dc3d 100644 --- a/Picviewer CE+/README.md +++ b/Picviewer CE+/README.md @@ -62,6 +62,7 @@ Using a standalone script, you have the ability to manage all of your custom rul // @description Picviewer CE+ custom rules // @author You // @match *://*/* +// @run-at document-start // @grant none // ==/UserScript== From 2a0be0b507ecf9b63f6ed3738190344bc899ba9f Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 30 Dec 2023 22:59:31 +0800 Subject: [PATCH 606/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index f551922ec3a..e21ec21b899 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -617,11 +617,18 @@ var siteInfo = [ { name: "推特", url: /twitter\.com|pbs\.twimg\.com/, - getImage: function(){ - let newsrc=this.src.replace("_normal.",".").replace("_200x200.",".").replace("_mini.","."); - if(newsrc!=this.src)return newsrc; + getImage: function(a, p){ + let newsrc = this.src.replace("_normal.",".").replace("_200x200.",".").replace("_mini.","."); + if (newsrc != this.src)return newsrc; newsrc=newsrc.replace(/\?format=/i, ".").replace(/\&name=/i, ":").replace(/\.(?=[^.]*$)/, "?format=").replace( /(:large|:medium|:small|:orig|:thumb|:[\dx]+)/i, ""); - if(newsrc!=this.src)return newsrc+"&name=orig"; + if (newsrc != this.src) { + if (a && a.role == 'link') { + let match = a.href.match(/\/([^\/]+)\/status\/([^\/]+)\/photo\/(\d+)/); + let time = p[14].querySelector('time'); + this.alt = match[1] + " - " + time.innerText + "_" + match[3]; + } + return newsrc+"&name=orig"; + } }, ext: function(target) { if(target.parentNode && target.parentNode.previousElementSibling){ From d22a56358dd27c3a63f882e3ad9fb9290129ec10 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 30 Dec 2023 23:07:44 +0800 Subject: [PATCH 607/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 41f72aac9ff..e1dddd25b3d 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.23.1 +// @version 2023.12.30.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -44,7 +44,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://update.greasyfork.org/scripts/438080/1295404/pvcep_rules.js +// @require https://update.greasyfork.org/scripts/438080/1303651/pvcep_rules.js // @require https://update.greasyfork.org/scripts/440698/1262309/pvcep_lang.js // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js @@ -11805,22 +11805,22 @@ ImgOps | https://imgops.com/#b#`; } switch (type) { case 1: - name = (name || nameFromUrl || "image").substr(-50); + name = (name || nameFromUrl || "image").substr(-80); break; case 2: - name = (nameFromUrl || url || "image").substr(-50); + name = (nameFromUrl || url || "image").substr(-80); break; case 3: if (nameFromUrl && !name) { - name = nameFromUrl.substr(-50); + name = nameFromUrl.substr(-80); } else if (nameFromUrl && name) { - name = nameFromUrl.substr(-50) + " - " + name.substr(-50); + name = nameFromUrl.substr(-80) + " - " + name.substr(-80); } else if (!nameFromUrl && !name) { name = "image"; } break; default: - name = (nameFromUrl || name || "image").substr(-50); + name = (nameFromUrl || name || "image").substr(-80); break; } return name.replace(/.*\/([^\/]+?)(\?|@|$).*/, "$1").replace(/[\*\/:<>\?\\\|]/g, "").replace(/\.\w{2,5}$/, "").trim() + (ext || ".png"); @@ -15948,12 +15948,12 @@ ImgOps | https://imgops.com/#b#`; if(item.xhr)spanMark.dataset.xhr=encodeURIComponent(JSON.stringify(item.xhr)); spanMark.dataset.description=encodeURIComponent(item.description || (item.img ? (item.img.title || item.img.alt || "") : "")); spanMark.dataset.thumbSrc=item.imgSrc; - let title = item.img ? (item.img.title || item.img.alt || "").slice(-50) : ""; + let title = item.img ? (item.img.title || item.img.alt || "").slice(-80) : ""; if (title) { if (title.indexOf('http') === 0 || title.indexOf('data') === 0) title = ''; else title += '\n'; } - spanMark.title = title + item.src.length > 150 ? item.src.slice(0, 110) + " ... " + item.src.slice(-30) : item.src; + spanMark.title = title + (item.src.length > 150 ? item.src.slice(0, 110) + " ... " + item.src.slice(-30) : item.src); spanMark.innerHTML=createHTML('' + ''); }catch(e){}; @@ -16163,6 +16163,12 @@ ImgOps | https://imgops.com/#b#`; for(var i=0,ii=data.length;i Date: Mon, 1 Jan 2024 02:00:19 +0000 Subject: [PATCH 608/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index bcbfda7230f..9ccfa0c6431 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -33927,16 +33927,16 @@ { "resource_url": "http://wedata.net/items/60005", "data": { - "pageElement": "//div[@class='img']", + "pageElement": "//div[@class='img']|//div[@class='hsNormal']", "nextLink": "//a[@class='btnNext']\r\n", "url": "^https?://mangalifewin\\.takeshobo\\.co\\.jp/", - "exampleUrl": "http://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-1/001/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-3/033/" + "exampleUrl": "https://mangalifewin.takeshobo.co.jp/rensai/slanleat/slanleat-001/25887/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-1/001/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-3/033/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "ゆるっとcafe / まんがライフWIN", "created_at": "2012-04-08T11:52:07+09:00", - "updated_at": "2023-03-18T09:19:42+09:00" + "updated_at": "2024-01-01T04:11:56+09:00" }, { "resource_url": "http://wedata.net/items/59945", From 98457c8e626dd0c49844cf52a63a435292955903 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 2 Jan 2024 08:56:25 +0800 Subject: [PATCH 609/812] 1.9.37.13 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index b40120badac..253f01b3c30 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.12](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.13](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index cbe7bf358d5..1ff24b1d125 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.12 +// @version 1.9.37.13 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2447,8 +2447,16 @@ await sleep(1); } let aTag = aTags[i]; - let innerText = (aTag.title || aTag.innerText || aTag.value || ''); - if (innerText) { + let title = aTag.title || ""; + let value = aTag.value || ""; + let innerText = aTag.innerText || ""; + if (innerText === "" || (title !== "" && title.length < innerText.length)) { + innerText = title; + } + if (innerText === "" || (value !== "" && value.length < innerText.length)) { + innerText = value; + } + if (innerText !== "") { if (innerText === "§") continue; innerText = innerText.trim(); if (innerText.length > 80) continue; From 6744b6575bae64317a26c08dd8a1b81969e9430f Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 2 Jan 2024 01:55:29 +0000 Subject: [PATCH 610/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 9ccfa0c6431..762ab548157 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -33927,7 +33927,7 @@ { "resource_url": "http://wedata.net/items/60005", "data": { - "pageElement": "//div[@class='img']|//div[@class='hsNormal']", + "pageElement": "//div[@class='extMdlSeriesMngrArticleMargin']/div", "nextLink": "//a[@class='btnNext']\r\n", "url": "^https?://mangalifewin\\.takeshobo\\.co\\.jp/", "exampleUrl": "https://mangalifewin.takeshobo.co.jp/rensai/slanleat/slanleat-001/25887/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-1/001/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-3/033/" @@ -33936,7 +33936,7 @@ "created_by": "jigendaddy_be", "name": "ゆるっとcafe / まんがライフWIN", "created_at": "2012-04-08T11:52:07+09:00", - "updated_at": "2024-01-01T04:11:56+09:00" + "updated_at": "2024-01-01T16:27:07+09:00" }, { "resource_url": "http://wedata.net/items/59945", From bccb7b25954e3239bda2800f1d24635f94eae068 Mon Sep 17 00:00:00 2001 From: 1nker <18694774+1nker@users.noreply.github.com> Date: Tue, 2 Jan 2024 12:07:24 +0800 Subject: [PATCH 611/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index bddd6e41815..8d8da34e1b8 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -1,4 +1,10 @@ [ +{ + "name": "PubMed", + "url": "^https?://pubmed\\.ncbi\\.nlm\\.nih\\.gov/", + "example": "https://pubmed.ncbi.nlm.nih.gov/?term=", + "loadMore": "button.load-button.next-page" +}, { "name": "V2EX POST", "author": "jaeger", From 06a09d305f25d05dd023179926a892cc5d7f8035 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 2 Jan 2024 12:31:19 +0800 Subject: [PATCH 612/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 1 + 1 file changed, 1 insertion(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 8d8da34e1b8..b9f909c67f3 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -1,6 +1,7 @@ [ { "name": "PubMed", + "author": "1nker", "url": "^https?://pubmed\\.ncbi\\.nlm\\.nih\\.gov/", "example": "https://pubmed.ncbi.nlm.nih.gov/?term=", "loadMore": "button.load-button.next-page" From c880afdf1bf1ba3595399c6c37ab4942be6259fd Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 2 Jan 2024 15:13:03 +0800 Subject: [PATCH 613/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 35 +++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 34537b5fb90..a502efd31a4 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja 検索ちゃん - SearchJumper // @namespace hoothin -// @version 1.7.61 +// @version 1.7.62 // @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. // @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -74,6 +74,7 @@ } const importPageReg = /^https:\/\/github\.com\/hoothin\/SearchJumper(\/(issue|discussions)|$)|^https:\/\/greasyfork\.org\/.*\/scripts\/445274[\-\/].*\/discussions/i; const mobileUa = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; + const firstRunPage = "https://search.hoothin.com/firstRun"; let configPage = 'https://search.hoothin.com/config/'; let isAllPage = false; @@ -400,6 +401,7 @@ x: "0", y: "0" }, + firstRun: true, openInNewTab: false, enableInPage: true, altKey: false, @@ -1824,7 +1826,7 @@ #search-jumper-alllist>.timeInAll, #search-jumper-alllist>.dayInAll { position: fixed; - bottom: 5%; + bottom: 0; line-height: 1.5; color: white; opacity: 0.35; @@ -1917,15 +1919,16 @@ -webkit-line-clamp: 2; -webkit-box-orient: vertical; margin-left: 62px; - margin-top: 35px; + margin-top: 30px; width: 190px; position: absolute; pointer-events: none; } #search-jumper #search-jumper-alllist.new-mode .sitelist a>img { - width: 32px; - height: 32px; + width: 48px; + height: 48px; float: left; + margin-left: -20px; } #search-jumper #search-jumper-alllist.new-mode .sitelist a>p { -webkit-line-clamp: 2; @@ -1935,7 +1938,7 @@ height: 21px; line-height: 21px; margin-bottom: 8px; - margin-top: 3px; + margin-top: 0px; margin-left: 40px; overflow: hidden; text-overflow: ellipsis; @@ -2087,7 +2090,8 @@ .in-input.in-find>.search-jumper-input { pointer-events: all; } - .in-input.in-find>.search-jumper-searchBar { + .in-input.in-find>.search-jumper-searchBar, + .in-input.in-pick>.search-jumper-searchBar { opacity: 0!important; pointer-events: none; transition: none; @@ -2899,7 +2903,7 @@ height: 35px; position: absolute; user-select: none; - background: #212022; + background: transparent; white-space: nowrap; overflow: hidden; display: flex; @@ -2976,7 +2980,13 @@ } @media screen and (max-width: 600px) { #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { - width: 300px; + width: 100vw; + } + #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon { + width: calc(100% - 20px); + } + #search-jumper-alllist>.timeInAll, #search-jumper-alllist>.dayInAll { + margin: 10px; } } @media screen and (max-width: 800px) { @@ -4942,6 +4952,7 @@ let self = this; let navMark = document.createElement("span"); let top = getElementTop(node); + navMark.title = word.title || word.showWords; navMark.dataset.top = top; navMark.dataset.content = word.showWords; let scrollHeight = Math.max(document.documentElement.scrollHeight, getBody(document).scrollHeight); @@ -5943,6 +5954,7 @@ togglePicker() { this.pickerBtn.classList.toggle("checked"); + this.con.classList.toggle("in-pick"); this.searchJumperInputKeyWords.disabled = !this.searchJumperInputKeyWords.disabled; picker.toggle(true); } @@ -14337,6 +14349,11 @@ lang = searchData.prefConfig.lang; } setLang(); + if (searchData.prefConfig.firstRun) { + _GM_openInTab(firstRunPage, {active: true}); + searchData.prefConfig.firstRun = false; + storage.setItem("searchData", searchData); + } //旧版兼容 if (typeof searchData.prefConfig.customSize === "undefined") { searchData.prefConfig.customSize = 100; From 20bea81024578580a399026e139c68f5cdfe1c19 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 2 Jan 2024 19:21:37 +0800 Subject: [PATCH 614/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 51 +++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a502efd31a4..9b276ece1eb 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -907,6 +907,7 @@ } }; var disabled = false; + var isInConfigPage = false; function createHTML(html = "") { return escapeHTMLPolicy ? escapeHTMLPolicy.createHTML(html) : html; @@ -6516,7 +6517,7 @@ this.initPos(); this.appendBar(); } - if (this.fontPool.length > 0 || isInConfigPage()) { + if (this.fontPool.length > 0 || isInConfigPage) { let linkEle = document.createElement("link"); linkEle.rel="stylesheet"; linkEle.href = searchData.prefConfig.fontAwesomeCss || "https://lib.baomitu.com/font-awesome/6.1.2/css/all.css"; @@ -11901,7 +11902,7 @@ shown = false; }); } - if (searchData.prefConfig.dragToSearch && !isInConfigPage()) { + if (searchData.prefConfig.dragToSearch && !isInConfigPage) { getBody(document).addEventListener('dragstart', e => { if (!e.isTrusted || (searchData.prefConfig.dragAlt && !e.altKey) || @@ -12185,16 +12186,47 @@ } var shareEngines; - function isInConfigPage() { + async function checkConfigPage() { if (location.href.indexOf(configPage) === 0 || (document.title === "SearchJumper" && document.querySelector('[name="author"][content="Hoothin"]'))) { shareEngines = document.querySelector('[name="engines"]'); if (shareEngines) { try { shareEngines = shareEngines.getAttribute("content"); - shareEngines = JSON.parse(decodeURI(shareEngines)); - searchData.sitesConfig = shareEngines; + if (shareEngines.indexOf("http") === 0) { + let config = await new Promise((resolve) => { + if (ext) { + chrome.runtime.sendMessage({action: "getShareEngines", detail: {engineUrl: shareEngines}}, function(r) { + resolve(r); + }); + } else { + _GM_xmlhttpRequest({ + method: 'GET', + url: shareEngines, + onload: function(result) { + var jsonData = null; + try { + jsonData = JSON.parse(result.responseText); + resolve(jsonData); + } catch (e) { + console.log(e); + resolve(false); + } + } + }); + } + }); + if (config) { + searchData.sitesConfig = config; + shareEngines = true; + } else { + shareEngines = false; + } + } else { + searchData.sitesConfig = JSON.parse(decodeURI(shareEngines)); + shareEngines = true; + } } catch (e) { - shareEngines = null; + shareEngines = false; } } isAllPage = !!shareEngines || /all(\.html)?$/.test(location.pathname); @@ -12214,8 +12246,9 @@ return false; } - function initConfig() { - if (isInConfigPage() && !isAllPage) { + async function initConfig() { + isInConfigPage = await checkConfigPage(); + if (isInConfigPage && !isAllPage) { let sendMessageTimer, received = false; let loadConfig = () => { sendMessageTimer = setTimeout(() => { @@ -14528,7 +14561,7 @@ } } initView(); - initConfig(); + await initConfig(); initMycroft(); initRun(); if (cb) cb(); From deae45fd7918130252d27ca48ed530c2671374bb Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 2 Jan 2024 19:24:36 +0800 Subject: [PATCH 615/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9b276ece1eb..7e6968e447c 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -12211,6 +12211,14 @@ console.log(e); resolve(false); } + }, + onerror: function(e) { + console.log(e); + resolve(false); + }, + ontimeout: function(e) { + console.log(e); + resolve(false); } }); } From ea1e23bd206dc8ea6d9010e0213dca7a21820f0b Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 3 Jan 2024 19:37:22 +0800 Subject: [PATCH 616/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 7e6968e447c..dd371f77414 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -992,15 +992,7 @@ } if (ext) { _GM_notification = s => { - chrome.notifications.create( - "searchjumper-notification", - { - type: "basic", - iconUrl: "/icon/icon128.png", - title: "SearchJumper", - message: s, - } - ) + chrome.runtime.sendMessage({action: "notification", detail: {message: s}}); } } else if (typeof GM_notification != 'undefined') { _GM_notification = s => GM_notification({text: s, onclick: e => _GM_openInTab(configPage, {active: true})}); @@ -6532,7 +6524,7 @@ hasFont = true; cacheFontPool.unshift(font); }); - if (hasFont) { + if (hasFont && isInConfigPage) { setTimeout(() => {cacheFontManager()}, 5000); } }); From 6a7b152f987900144286cda0cb6e8b757173da9e Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 4 Jan 2024 11:23:27 +0800 Subject: [PATCH 617/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index dd371f77414..a032e1bf0f1 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -578,7 +578,8 @@ Thursday: '星期四 (木)', Friday: '星期五 (金)', Saturday: '星期六 (土)', - template: '请设置【#t#】的值' + template: '请设置【#t#】的值', + loadingCollection: '正在加载合集,请稍候……' }; break; case "zh-TW": @@ -684,7 +685,8 @@ Thursday: '星期四 (木)', Friday: '星期五 (金)', Saturday: '星期六 (土)', - template: '請設置【#t#】的值' + template: '請設置【#t#】的值', + loadingCollection: '正在載入合集,請稍候……' }; break; case 'ja': @@ -789,7 +791,8 @@ Thursday: '木曜日', Friday: '金曜日', Saturday: '土曜日', - template: '[#t#]の値を設定してください' + template: '[#t#]の値を設定してください', + loadingCollection: 'コレクションを読み込み中...' }; break; default: @@ -887,7 +890,8 @@ startCache: 'Start cache icons of engines, do not close this page!', cacheOver: 'All icons cached!', cspDisabled: 'The style of SearchJumper is blocked by the CSP of current site, please try to install the Allow CSP: Content-Security-Policy extension to obtain permission', - template: 'Please set the value of "#t#"' + template: 'Please set the value of "#t#"', + loadingCollection: 'Preparing collection for SearchJumper...' }; break; } @@ -6361,7 +6365,7 @@ }); this.copyInPageBtn.addEventListener("click", e => { if (!this.lockWords) return; - _GM_setClipboard(this.lockWords); + _GM_setClipboard(this.lockWords.replace(/◎/g, "\n")); _GM_notification('Copied successfully!'); }); this.setNav(navEnable); @@ -12181,10 +12185,16 @@ async function checkConfigPage() { if (location.href.indexOf(configPage) === 0 || (document.title === "SearchJumper" && document.querySelector('[name="author"][content="Hoothin"]'))) { shareEngines = document.querySelector('[name="engines"]'); + let spotlight = document.getElementById("spotlight"); if (shareEngines) { try { shareEngines = shareEngines.getAttribute("content"); if (shareEngines.indexOf("http") === 0) { + if (spotlight) { + const loadingCollection = i18n("loadingCollection"); + spotlight.innerText = loadingCollection; + spotlight.setAttribute("spotlight", loadingCollection); + } let config = await new Promise((resolve) => { if (ext) { chrome.runtime.sendMessage({action: "getShareEngines", detail: {engineUrl: shareEngines}}, function(r) { @@ -12230,7 +12240,6 @@ } } isAllPage = !!shareEngines || /all(\.html)?$/.test(location.pathname); - let spotlight = document.getElementById("spotlight"); if (spotlight) { spotlight.style.display = "none"; } else { From 09ffc1114aa2e05fc8c7a582f5caa2b3c32ebce4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 4 Jan 2024 20:02:46 +0800 Subject: [PATCH 618/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a032e1bf0f1..a52b920e6a9 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2,7 +2,7 @@ // @name SearchJumper // @name:zh-CN 搜索酱 // @name:zh-TW 搜尋醬 -// @name:ja 検索ちゃん - SearchJumper +// @name:ja SearchJumper // @namespace hoothin // @version 1.7.62 // @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. @@ -9002,6 +9002,13 @@ } } } + if (!imgBase64) { + self.customInput = true; + let src = window.prompt(i18n("targetUrl"), "https://www.google.com/favicon.ico"); + if (src) { + imgBase64 = await imageSrc2Base64(src); + } else return false; + } } } } catch(e) { @@ -9034,7 +9041,7 @@ } if (targetUrl === '') { let canBeUrl = getSelectStr() || self.searchJumperInputKeyWords.value; - if (canBeUrl && !hasWordParam) { + if (!hasWordParam && canBeUrl && /^(http|ftp)/i.test(canBeUrl)) { targetUrl = canBeUrl; } else { let promptStr = false; From c394636d9024514d00c46a1276040f30ac115b4e Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 5 Jan 2024 08:49:19 +0800 Subject: [PATCH 619/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 1ff24b1d125..391fce3de7e 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -7126,7 +7126,7 @@ let _time = 1500; if (href) { _time = 3500; - tipsWords.innerHTML = createHTML(`${content}`); + tipsWords.innerHTML = createHTML(`${content}`); tipsWords.style.pointerEvents = 'all'; } else { tipsWords.innerHTML = createHTML(content); From 1fdbd35b86c2248816a27e0682d9f12f292697ec Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 5 Jan 2024 01:54:30 +0000 Subject: [PATCH 620/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 762ab548157..f144ea90d40 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86201", + "data": { + "insertBefore": "", + "pageElement": "//div[@class=\"l-section\"]/a", + "nextLink": "//span[@class=\"mod-pager__next\"]/a", + "url": "^https://search\\.shinchosha\\.co\\.jp/search", + "exampleUrl": "https://search.shinchosha.co.jp/search?site=ZXE8UIDC&design=sitesearch&group=sitesearch&charset=UTF-8&query=%E3%83%AD%E3%83%B3%E3%83%89%E3%83%B3#result-list" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "新潮社 検索", + "created_at": "2024-01-04T17:12:40+09:00", + "updated_at": "2024-01-04T17:12:40+09:00" +}, { "resource_url": "http://wedata.net/items/86198", "data": { From 83fc73cf850fbc307442ac3a13ca70e26be4fd91 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 7 Jan 2024 14:42:32 +0800 Subject: [PATCH 621/812] update --- Picviewer CE+/Picviewer CE+.user.js | 9 ++++++--- T66y tool/T66y tool.user.js | 24 ++++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index e1dddd25b3d..7d082d33415 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.12.30.1 +// @version 2023.1.7.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -19546,6 +19546,11 @@ ImgOps | https://imgops.com/#b#`; cursor: pointer;\ pointer-events: none;\ }\ + .pv-pic-window-scroll>span.pv-pic-window-pre,\ + .pv-pic-window-scroll>span.pv-pic-window-next{\ + position: fixed;\ + pointer-events: all;\ + }\ span.pv-pic-window-pre {\ left: 8px;\ background-image: url("'+prefs.icons.arrowLeft+'");\ @@ -19677,8 +19682,6 @@ ImgOps | https://imgops.com/#b#`; }\ .pv-pic-window-scroll>.pv-pic-window-close,\ .pv-pic-window-scroll>.pv-pic-window-max,\ - .pv-pic-window-scroll>.pv-pic-window-pre,\ - .pv-pic-window-scroll>.pv-pic-window-next,\ .pv-pic-window-scroll>.pv-pic-search-state {\ display: none;\ }\ diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index abc46d7114d..d0cd23d1e1f 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.6.9 +// @version 0.7.1 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -140,7 +140,7 @@ }); $('body').append('
' + tmpNode + '
'); } - helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 50px; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child { height: 200px; }'); + helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 0; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child { height: 200px; }'); var submitBtn = $('form[name="FORM"] .btn[name="Submit"]'); var textarea = $('form[name="FORM"] [name="atc_content"]'); if (submitBtn.length && textarea.length) { @@ -223,7 +223,9 @@ $("form td.h").css("background", ""); }, 2000); } + let rushSuccess = false; function replySuccess() { + rushSuccess = true; lastReplyTime = Date.now(); $.cookie('lastReplyTime', lastReplyTime, { expires: 7, path: '/' }); if (isCheckIn) { @@ -277,28 +279,37 @@ if (isCheckIn && isRushTime()) { let reachRushMinute = false; var rushReply = $( `` ); + function requestRush(gap) { + if (rushSuccess) return; + submitReply(); + setInterval(() => { + if (!rushSuccess) { + requestRush(gap); + } + }, gap); + } function checkRush(timeGap) { setTimeout(() => { let date = new Date(); if (date.getHours() == 0) { textarea.val("今日签到"); submitReply(); - let rushTimes = 10; + let rushTimes = 5; let rushTimer = setInterval(() => { if (--rushTimes > 0) { - submitReply(); + requestRush(300); } else { clearInterval(rushTimer); rushReply.val("搶簽結束"); } - }, 1); + }, 5); } else { if (reachRushMinute) { if (date.getSeconds() > 57) { checkRush(5); } else if (date.getSeconds() > 50) { checkRush(500); - } else if (date.getSeconds() > 30) { + } else { checkRush(1000); } } else if (date.getHours() == 23 && date.getMinutes() == 59) { @@ -315,6 +326,7 @@ checkRush(5000); rushReply.attr("disabled", true); rushReply.val("搶簽中……"); + rushSuccess = false; }); } document.FORM.onsubmit = function(event) { From d60875d550312a0a13df8607605f20244583b586 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 7 Jan 2024 16:25:10 +0800 Subject: [PATCH 622/812] Create searchJumperDefaultConfig.js --- SearchJumper/searchJumperDefaultConfig.js | 3036 +++++++++++++++++++++ 1 file changed, 3036 insertions(+) create mode 100644 SearchJumper/searchJumperDefaultConfig.js diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js new file mode 100644 index 00000000000..e0581f7e432 --- /dev/null +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -0,0 +1,3036 @@ +let lang = navigator.appName === "Netscape" ? navigator.language : navigator.userLanguage; +let sitesConfig = {}; +switch (lang) { + case "zh-CN": + case "zh-SG": + sitesConfig = [ + { + "type": "百科", + "icon": "book-open-reader", + "sites": [ + { + "name": "维基", + "url": "https://zh.wikipedia.org/wiki/%s", + "description": "The largest and most-read reference work in history.#wiki" + }, + { + "name": "百度百科", + "url": "https://baike.baidu.com/search/word?pic=1&sug=1&word=%s", + "description": "A semi-regulated Chinese-language collaborative online encyclopedia owned by the Chinese technology company Baidu.#wiki", + "match": "baike\\.baidu\\.com/search/" + }, + { + "name": "百度文库", + "url": "https://wenku.baidu.com/search?word=%s&ie=utf-8" + }, + { + "name": "豆丁文档", + "url": "https://www.docin.com/search.do?searchcat=2&searchType_banner=p&nkey=%s" + }, + { + "name": "爱问知识", + "url": "https://iask.sina.com.cn/search?searchWord=%s" + }, + { + "name": "萌娘百科", + "url": "https://zh.moegirl.org.cn/Special:?search=%s", + "icon": "https://zh.moegirl.org.cn/favicon.ico", + "description": "以ACGN相关文化为主题的在线百科全书。最初名为“绿坝娘wiki”,后来改名为“中华萌娘小百科”,2011年5月1日简化为“萌娘百科”。#wiki" + }, + { + "name": "果壳", + "url": "https://www.guokr.com/search/all/?wd=%s" + }, + { + "name": "Quora", + "url": "https://www.quora.com/search?q=%s" + }, + { + "name": "Metacritic", + "url": "https://www.metacritic.com/search/%s/" + }, + { + "name": "豆瓣", + "url": "https://www.douban.com/search?source=suggest&q=%s.replace(/\\./g,\" \")" + }, + { + "name": "Bangumi 番组计划", + "url": "https://bgm.tv/subject_search%p{cat=all&search_text=%s}", + "icon": "https://bgm.tv/img/favicon.ico" + } + ] + }, + { + "type": "社交", + "icon": "users", + "sites": [ + { + "name": "知乎", + "url": "https://www.zhihu.com/search?q=%s&type=content" + }, + { + "name": "V2ex", + "url": "https://www.sov2ex.com/?q=%s", + "icon": "https://sov2ex.oss-cn-shanghai.aliyuncs.com/assets/favicon/apple-icon-57x57.png" + }, + { + "name": "推特", + "url": "https://twitter.com/search?q=%s" + }, + { + "name": "百度贴吧", + "url": "https://tieba.baidu.com/f/search/res?ie=utf-8&qw=%s", + "keywords": "kw|qw", + "match": "^https?://tieba\\.baidu\\.com/f" + }, + { + "name": "新浪微博", + "url": "https://s.weibo.com/weibo?q=%s" + }, + { + "name": "脸书", + "url": "https://www.facebook.com/search/results.php?q=%s" + }, + { + "name": "微信搜索", + "url": "https://weixin.sogou.com/weixin?ie=utf8&type=2&query=%s" + } + ] + }, + { + "type": "图片", + "icon": "image", + "sites": [ + { + "name": "百度图片", + "url": "https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%s" + }, + { + "name": "谷歌图片", + "url": "https://www.google.com/search?q=%s&tbm=isch", + "match": "www\\.google\\..*tbm=isch" + }, + { + "name": "图片聚合搜索", + "url": "https://www.google.com/search?tbm=isch&as_q=%s%20(site:www.pexels.com%20OR%20site:pixabay.com%20OR%20site:unsplash.com%20OR%20site:stocksnap.io%20OR%20site:pxhere.com%20OR%20site:www.hippopx.com%20OR%20site:foter.com%20OR%20site:freepik.com%20OR%20site:colorhub.me)" + }, + { + "name": "必应图片", + "url": "https://www.bing.com/images/search?q=%s" + }, + { + "name": "搜狗图片", + "url": "https://pic.sogou.com/pics?query=%s" + }, + { + "name": "花瓣", + "url": "https://huaban.com/search?q=%s" + }, + { + "name": "Pinterest", + "url": "https://www.pinterest.com/search/pins/?q=%s&rs=typed&term_meta" + }, + { + "name": "yandex", + "url": "https://yandex.com/images/search?text=%s" + }, + { + "name": "pixabay", + "url": "https://pixabay.com/images/search/%s/", + "icon": "https://pixabay.com/favicon-32x32.png" + }, + { + "name": "unsplash", + "url": "https://unsplash.com/s/photos/%s" + }, + { + "name": "500px", + "url": "https://500px.com/search?q=%s" + }, + { + "name": "Deviantart", + "url": "https://www.deviantart.com/browse/all/?q=%s" + }, + { + "name": "Wallhaven", + "url": "https://wallhaven.cc/search?q=%s" + }, + { + "name": "Pixabay", + "url": "https://pixabay.com/zh/images/search/?manual_search=1&q=%s&hp=&order=&cat=&min_width=&min_height=", + "icon": "https://pixabay.com/favicon-32x32.png" + }, + { + "name": "Backiee", + "url": "https://backiee.com/search/%s", + "icon": "https://backiee.com/assets/favicon/favicon-32x32.png" + }, + { + "name": "ChatGPT搜索GIF", + "url": "https://poe.com/ChatGPT#p{sleep(1000)&[class*\\='ChatMessageInputContainer'] textarea=hey ChatGPT. hope you're having a great day. From now on you will respond to anything I say with the perfect gif response. Once you know what gif you want to use, compile the most accurate and perfect search phrase that will result in the specific gif you want to send. respond with url: \" Sure, I'm happy to help you!\\n http://scythe-spot-carpenter.glitch.me/search?search_term\\=.gif \n%s&click(button[class*\\='ChatMessageSendButton_sendButton'])}", + "openInNewTab": true + } + ] + }, + { + "type": "搜索", + "icon": "search", + "description": "搜索引擎主分类", + "sites": [ + { + "name": "百度", + "url": "https://www.baidu.com/s?wd=%s&ie=utf-8", + "keywords": "(?:wd|word)=(.*?)(&|$)", + "match": "https?://(www|m)\\.baidu\\.com/.*(wd|word)=", + "shortcut": "KeyB", + "alt": true + }, + { + "name": "百度高级搜索", + "url": "https://www.baidu.com/s?wd=%s%input{请输入限制文件类型, filetype:doc/ filetype:ppt/ filetype:xls/ filetype:pdf}%input{请输入限制日期/过去一小时/过去一天/过去一周/过去一个月/过去一年,&gpc=stf%3D%date{/1000-3600}%2C%date{/1000}%7Cstftype%3D1/&gpc=stf%3D%date{/1000-86400}%2C%date{/1000}%7Cstftype%3D1/&gpc=stf%3D%date{/1000-604800}%2C%date{/1000}%7Cstftype%3D1/&gpc=stf%3D%date{/1000-2592000}%2C%date{/1000}%7Cstftype%3D1/&gpc=stf%3D%date{/1000-31536000}%2C%date{/1000}%7Cstftype%3D1}", + "match": "https://www\\.baidu\\.com/(s|baidu)", + "nobatch": true, + "hideNotMatch": true, + "openInNewTab": false + }, + { + "name": "SearX", + "url": "https://searx.work/search?q=%s", + "icon": "https://searx.work/static/themes/simple/img/favicon.png", + "match": "0" + }, + { + "name": "头条搜索", + "url": "https://so.toutiao.com/search/?dvpf=%c&keyword=%s" + }, + { + "name": "必应", + "url": "https://www.bing.com/search?q=%s", + "match": "^https://(www|cn|global)\\.bing\\.com/search" + }, + { + "name": "360", + "url": "https://www.so.com/s?ie=utf-8&q=%s", + "match": "(www|m)\\.so\\.com/s\\?.*[&\\?]q=" + }, + { + "name": "搜狗", + "url": "https://www.sogou.com/web?query=%s", + "keywords": "(?:query|keyword)=(.*?)(&|$)", + "match": "(www|wap|m)\\.sogou\\.com/(web|web/searchList\\.jsp).*(query|keyword)=" + }, + { + "name": "F搜", + "url": "https://fsoufsou.com/search?q=%s", + "nobatch": true + }, + { + "name": "中国搜索", + "url": "https://www.chinaso.com/newssearch/all/allResults?q=%s", + "nobatch": true + } + ] + }, + { + "type": "开发", + "icon": "code", + "sites": [ + { + "name": "MDN", + "url": "https://developer.mozilla.org/zh-CN/search?q=%s" + }, + { + "name": "stackoverflow", + "url": "https://stackoverflow.com/search?q=%s" + }, + { + "name": "掘金", + "url": "https://juejin.im/search?query=%s&type=all" + }, + { + "name": "Can I Use", + "url": "https://caniuse.com/#search=%s", + "icon": "https://caniuse.com/img/favicon-128.png" + }, + { + "name": "GitHub", + "url": "https://github.com/search?q=%s", + "match": "https://github\\.com/search.*[&\\?]q=" + }, + { + "name": "w3c", + "url": "https://www.runoob.com/?s=%s" + }, + { + "name": "GreasyFork", + "url": "https://greasyfork.org/zh-CN/scripts?q=%s&utf8=✓", + "icon": "https://greasyfork.org/packs/media/images/blacklogo96-b2384000fca45aa17e45eb417cbcbb59.png" + }, + { + "name": "Unicode字符大全", + "url": "https://unicode-table.com/cn/search/?q=%s" + }, + { + "name": "npm", + "url": "https://www.npmjs.org/search?q=%s", + "icon": "https://static.npmjs.com/b0f1a8318363185cc2ea6a40ac23eeb2.png" + }, + { + "name": "AI生成正则", + "url": "https://poe.com/ChatGPT#p{sleep(1000)&textarea[class^\\='ChatMessageInput']=Can you help me to write a RegExp which can detect %input{Target,Email address/Phone number} on `%s`&click([class^\\='ChatMessageInputView_sendButton']>button)}", + "openInNewTab": true + } + ] + }, + { + "type": "词典", + "icon": "language", + "sites": [ + { + "name": "百度翻译", + "url": "https://fanyi.baidu.com/#auto/zh/%s" + }, + { + "name": "DeepL", + "url": "https://www.deepl.com/translator#zh/en/%s", + "icon": "https://www.deepl.com/img/favicon/favicon_96.png" + }, + { + "name": "谷歌翻译", + "url": "https://translate.google.com/?text=%s", + "match": "translate\\.google\\.com.*\\btext=" + }, + { + "name": "有道词典", + "url": "https://dict.youdao.com/search?q=%s", + "icon": "https://shared.ydstatic.com/images/favicon.ico" + }, + { + "name": "必应翻译", + "url": "https://cn.bing.com/dict/search?q=%s" + }, + { + "name": "Forvo发音", + "url": "https://zh.forvo.com/search/%s" + }, + { + "name": "CNKI翻译", + "url": "https://dict.cnki.net/index#p{[name\\='translateArea']=%s&click(.hanlder-left-right>button)}" + }, + { + "name": "汉典", + "url": "https://www.zdic.net/hans/%s" + }, + { + "name": "海词", + "url": "https://dict.cn/%s" + }, + { + "name": "金山词霸", + "url": "https://www.iciba.com/word?w=%s", + "icon": "https://cdn.iciba.com/www/img/www/favicon.ico" + }, + { + "name": "词源词根词典", + "url": "https://www.etymonline.com/index.php?term=%s" + }, + { + "name": "沪江", + "url": "https://dict.hjenglish.com/w/%s" + }, + { + "name": "Urban Dictionary", + "url": "https://www.urbandictionary.com/search.php%p{term=%s}" + }, + { + "name": "POE", + "url": "https://poe.com/ChatGPT#p{sleep(1000)&[class*\\='ChatMessageInputContainer']>textarea=Please help me to translate \\`%s\\` to English, please return only translated content not include the origin text&click(button[class*\\='ChatMessageSendButton_sendButton'])}" + }, + { + "name": "ChatGPT翻译", + "url": "https://pandapy.com/#p{textarea[data-id\\='root']=Please help me to translate \\`%s\\` to Chinese, please return only translated content not include the origin text&click(.send-btn)}" + }, + { + "name": "Ludwig", + "url": "https://ludwig.guru/s/%s", + "icon": "https://ludwig.guru/icons/icon_192x192.png" + }, + { + "name": "Linggle", + "url": "https://linggle.com/?q=%s" + } + ] + }, + { + "type": "影视", + "icon": "video", + "sites": [ + { + "name": "bilibili", + "url": "https://search.bilibili.com/all?keyword=%s" + }, + { + "name": "腾讯视频", + "url": "https://v.qq.com/x/search/?q=%s" + }, + { + "name": "爱奇艺", + "url": "https://so.iqiyi.com/so/q_%s", + "icon": "https://www.iqiyi.com/favicon.ico" + }, + { + "name": "优酷", + "url": "https://so.youku.com/search_video/q_%s", + "icon": "https://img.alicdn.com/tfs/TB1WeJ9Xrj1gK0jSZFuXXcrHpXa-195-195.png" + }, + { + "name": "AcFun", + "url": "https://www.acfun.cn/search?keyword=%s" + }, + { + "name": "搜狐", + "url": "https://so.tv.sohu.com/mts?wd=%s" + }, + { + "name": "樱花动漫", + "url": "https://www.yhdmz.org/list/?ex=1&kw=%s" + }, + { + "name": "在线之家", + "url": "https://www.zxzj.org/vodsearch/-------------.html?wd=%s", + "icon": "https://zxzj.vip/statics/img/favicon.ico" + }, + { + "name": "小苹果影院", + "url": "https://www.163kp.cc/index.php?m=vod-search&wd=%s&submit=" + }, + { + "name": "谍影网", + "url": "https://www.tvdie.cc/search.html%p{searchword=%s}", + "icon": "https://www.tvdie.cc/favicon.ico" + }, + { + "name": "茶杯狐", + "url": "https://cupfox.app/s/%s", + "icon": "https://p0.meituan.net/dpgroup/cd088044f183d2719f3f9fe56d5c34204207.png" + }, + { + "name": "HOHO TV", + "url": "https://www.hoho.tv/vod/search.html%p{wd=%s}", + "icon": "https://www.hoho.tv/img/left_logo.png" + }, + { + "name": "西瓜视频", + "url": "https://www.ixigua.com/search/%s/", + "icon": "https://sf1-cdn-tos.douyinstatic.com/obj/eden-cn/lpqpflo/ixigua_favicon.ico" + }, + { + "name": "量子资源网", + "url": "http://lzizy.net/index.php/vod/search.html?wd=%s" + }, + { + "name": "蚂蚁4K", + "url": "https://www.mayi4k.com/vodsearch/-------------.html?wd=%s", + "icon": "https://www.mayi4k.com/upload/mxcms/20230718-1/4bdda0aaaa64c431daf6254f99a5cae1.png", + "description": " 4K蓝光原盘磁力链115网盘下载" + } + ] + }, + { + "type": "新闻", + "icon": "newspaper", + "sites": [ + { + "name": "百度新闻", + "url": "https://news.baidu.com/ns?word=%s&tn=news&from=news&cl=2&rn=20&ct=1", + "icon": "https://www.baidu.com/favicon.ico" + }, + { + "name": "网易-百度", + "url": "https://www.baidu.com/s?wd=%s%20site%3Anews.163.com%20", + "icon": "https://news.163.com/favicon.ico", + "match": "site%3Anews\\.163\\.com" + }, + { + "name": "腾讯新闻", + "url": "https://www.sogou.com/sogou?site=news.qq.com&query=%s", + "icon": "https://news.qq.com/favicon.ico" + }, + { + "name": "凤凰新闻", + "url": "https://so.ifeng.com/?q=%s&c=1" + }, + { + "name": "今日头条", + "url": "https://www.toutiao.com/search/?keyword=%s" + } + ] + }, + { + "type": "划词搜索", + "icon": "sitemap", + "selectTxt": true, + "openInNewTab": true, + "sites": [ + { + "name": "百度 ", + "url": "[\"百度\"]" + }, + { + "name": "📄 复制", + "url": "c:%sr", + "nobatch": true + }, + { + "name": "🔆 页内搜索", + "url": "find:%sr" + }, + { + "name": "百度站内搜", + "url": "https://www.baidu.com/s?wd=%s%20site%3A%h&ie=utf-8" + }, + { + "name": "文字转二维码", + "url": "https://hoothin.com/qrcode#%s", + "icon": "https://hoothin.com/qrcode/favicon.svg" + }, + { + "name": "发送到手机", + "url": "https://s.hoothin.com/#p{wait(x-peer)&call(document.querySelector('x-peer').dispatchEvent(new Event('contextmenu')))&#textInput=%s&click(#textInput+div>button)}", + "icon": "https://s.hoothin.com/images/favicon-96x96.png", + "description": "自动发送选中文字到第一个匹配的设备" + }, + { + "name": "问AI", + "url": "[\"Poe - Sage AI Chat\"]" + }, + { + "name": "豆瓣评分", + "url": "showTips:https://www.douban.com/search?cat=1002&q=%s \n{name} \n
\n

\n{h3>a}\n{.rating_nums}\n

\n
\na>img|src}\"/>\n
\n
{.subject-cast}
\n
{.content>p}
\n
\n
", + "icon": "https://www.douban.com/favicon.ico" + }, + { + "name": "Metacritic评分", + "url": "showTips:https://www.metacritic.com/autosearch%p{search_term=%s&image_size=98&search_each=false} \n
\n\n
\n

{json.autoComplete.results.0.name}

\n
\n{json.autoComplete.results.0.refType}\n{json.autoComplete.results.0.itemDate}\n{json.autoComplete.results.0.metaScore}\n
\n
\n
", + "icon": "https://www.metacritic.com/favicon.ico" + }, + { + "name": "展开所有引擎", + "url": "https://search.hoothin.com/all#%s" + }, + { + "name": "磁力转种子-lolicon", + "url": "https://m2t.lolicon.app/#p{#magnet=%s}", + "kwFilter": "^magnet:", + "description": "磁力转种子", + "nobatch": true + }, + { + "name": "Magnet-vip", + "url": "https://magnet-vip.com/#p{.form-group input=%s&click(.btn-outline-secondary)}", + "icon": "https://magnet-vip.com/favicon.png", + "kwFilter": "^magnet:", + "description": "磁力转种子", + "nobatch": true + }, + { + "name": "📏英里转公里", + "url": "showTips:let s=\"%sr\".match(/(\\d+)(英里|英?哩|mi(le)?)/)[1];let km=(s*1.609344).toFixed(2);return `${s} mi = ${km} km`;", + "kwFilter": "\\d+\\s*(英里|英?哩|mi(le)?\\b)" + }, + { + "name": "💲美元转人民币", + "url": "showTips:http://apilayer.net/api/convert?from=USD&to=CNY&amount=1&access_key=%template{apilayer key} \n{name}
%s USD = {json.result|*%s.replace(/\\D/g,'')} RMB", + "kwFilter": "\\d\\$|\\$\\d", + "nobatch": true + }, + { + "name": "💞 AV预览", + "url": "showTips:https://www.javbus.com/%sr.replace(/^(\\w+?)[\\-_]?(\\d+)$/,\"$1-$2\") \n{h3}\n

{.info>p:nth-child(2)}

\n

{.info>p:nth-child(6)}

\n

{.genre a|()}

\n", + "kwFilter": "^[0-9a-zA-Z]+[\\-_]?\\d+$", + "nobatch": true + }, + { + "name": "📦 批量打开链接", + "url": "%s[all]", + "kwFilter": "^https?:" + }, + { + "name": "🔗 打开文字链接", + "url": "%sr.replace(/(点|。)/g,\".\").replace(/[^ \\w\\-_\\.~!\\*';:@&=\\+\\$,\\/\\?#\\[\\]%]/g,\"\").replace(/.*([ ::]|^)(1[a-z0-9]{22,}).*?\\b([a-z0-9]{4}\\b|$).*/i,\"https://pan.baidu.com/s/$1?pwd=$2\").replace(/ /g,\"\").replace(/^/,\"http://\").replace(/^http:\\/\\/(https?:)/,\"$1\")", + "kwFilter": "\\w.*[\\.点。].*\\w|1[a-zA-Z0-9]{22,}", + "description": "支持类似“pan点baidu。com😄河蟹”以及“1bP23pzUpIV4CMuoMjOfxFA提取码:prt4”的分享链接", + "nobatch": true + }, + { + "name": "汉语读音", + "url": "showTips:https://dict.baidu.com/s?wd=%s&ptype=zici\n

{.means>div>dl>dt}

\n{.means>div>dl>dd}", + "icon": "https://m.baidu.com/static/index/icon/w_icon2.png" + }, + { + "name": "有道词典英译中", + "url": "showTips:https://dict.youdao.com/result?word=%s&lang=en\n{.phone_con}\n{.word-exp|
()
}", + "kwFilter": "^[a-zA-Z]+$" + }, + { + "name": "↩️ 短链接还原", + "url": "showTips:%s\n{url}", + "kwFilter": "^https?://." + } + ] + }, + { + "type": "以图搜图", + "icon": "eye", + "selectImg": true, + "openInNewTab": true, + "sites": [ + { + "name": "谷歌以图搜图", + "url": "https://www.google.com/searchbyimage?sbisrc=cr_1_0_0&image_url=%T" + }, + { + "name": "二维码解码", + "url": "https://hoothin.com/qrdecode#p{#fileInput=%i}", + "icon": "https://hoothin.com/qrcode/favicon.svg" + }, + { + "name": "谷歌翻译图片", + "url": "https://translate.google.com/?op=images#p{input[accept^\\=\"image\"]=%i}" + }, + { + "name": "WhatAnime", + "url": "https://trace.moe/?url=%T", + "icon": "https://trace.moe/favicon.png" + }, + { + "name": "Lunapic", + "url": "https://www.lunapic.com/editor/index.php?action=url&url=%t", + "description": "使用 Lunapic 编辑图片", + "nobatch": true + }, + { + "name": "Gif控制器-以图搜图", + "url": "[\"Gif控制器\"]" + }, + { + "name": "Pixlr easy", + "url": "https://pixlr.com/x/#p{click(#home-open-url)&#image-url=%t&click(.dialog>.buttons>a.button.positive)}", + "description": "使用 Pixlr easy 编辑图片", + "nobatch": true + }, + { + "name": "SauceNAO", + "url": "https://saucenao.com/search.php?db=999&url=%t" + }, + { + "name": "IQDB", + "url": "https://iqdb.org/?url=%t" + }, + { + "name": "Yandex以图搜图", + "url": "https://yandex.com/images/search?source=collections&rpt=imageview&url=%T" + }, + { + "name": "3D IQDB", + "url": "https://3d.iqdb.org/?url=%t" + }, + { + "name": "百度以图搜图", + "url": "https://graph.baidu.com/details?isfromtusoupc=1&tn=pc&carousel=0&promotion_name=pc_image_shituindex&extUiData%5bisLogoShow%5d=1&image=%T" + }, + { + "name": "必应以图搜图", + "url": "https://www.bing.com/images/search?view=detailv2&iss=sbi&form=SBIVSP&sbisrc=UrlPaste&q=imgurl:%T" + }, + { + "name": "TinEye", + "url": "https://www.tineye.com/search?url=%T" + }, + { + "name": "搜狗以图搜图", + "url": "https://pic.sogou.com/ris?query=%T" + }, + { + "name": "360以图搜图", + "url": "https://st.so.com/stu?imgurl=%t" + }, + { + "name": "ImgOps", + "url": "https://imgops.com/%b" + }, + { + "name": "Photopea", + "url": "https://www.photopea.com/#%7B%22files%22:%5B%22%t%22%5D,%22environment%22:%7B%7D%7D", + "nobatch": true + }, + { + "name": "二维码生成-以图搜图", + "url": "[\"二维码生成\"]" + }, + { + "name": "Google lens", + "url": "https://www.google.com/imghp#p{click([aria-label\\=\"Search by image\"])&[name\\=\"encoded_image\"]=%i}" + } + ] + }, + { + "type": "APP", + "icon": "archive", + "sites": [ + { + "name": "Play", + "url": "https://play.google.com/store/search?q=%s" + }, + { + "name": "Coolapk", + "url": "https://www.baidu.com/s?wd=%s%20site%3Acoolapk.com", + "match": "coolapk\\.com" + }, + { + "name": "Apkpure", + "url": "https://apkpure.com/cn/search?q=%s" + }, + { + "name": "APKMirror", + "url": "https://www.apkmirror.com/?s=%s" + }, + { + "name": "Chrome Store", + "url": "https://chrome.google.com/webstore/search/%s", + "icon": "https://www.google.com/images/icons/product/chrome_web_store-32.png" + }, + { + "name": "牛麦子", + "url": "https://niumaizi.cn/?s=%s", + "icon": "http://niumaizi.cn/wp-content/uploads/2022/01/%E7%89%9B%E9%BA%A6%E5%AD%90-%E5%89%AF%E6%9C%AC.jpg" + }, + { + "name": "MSDN, 我告诉你", + "url": "https://msdn.itellyou.cn/?keyword=%s" + }, + { + "name": "腾讯软件中心", + "url": "https://pc.qq.com/?keyword=%s", + "icon": "https://pc1.gtimg.com/finance/softweb/fav/favicon_32x32.ico" + } + ] + }, + { + "type": "音乐", + "icon": "music", + "sites": [ + { + "name": "网易音乐", + "url": "https://music.163.com/#/search/m/?s=%s", + "icon": "https://s1.music.126.net/style/favicon.ico" + }, + { + "name": "一听", + "url": "https://so.1ting.com/all.do?q=%s" + }, + { + "name": "QQ音乐", + "url": "https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%s" + }, + { + "name": "百度音乐", + "url": "https://music.91q.com/search?ie=utf-8&oe=utf-8&key=%s" + }, + { + "name": "酷我音乐", + "url": "https://www.kuwo.cn/search/list?key=%s" + }, + { + "name": "酷狗", + "url": "http://search.5sing.kugou.com/?keyword=%s", + "icon": "https://5sing.kugou.com/favicon.ico" + } + ] + }, + { + "type": "购物", + "icon": "shopping-cart", + "sites": [ + { + "name": "淘宝", + "url": "https://s.taobao.com/search?q=%s", + "icon": "https://www.taobao.com/favicon.ico" + }, + { + "name": "京东", + "url": "https://search.jd.com/search?keyword=%s&enc=utf-8", + "icon": "https://www.jd.com/favicon.ico" + }, + { + "name": "苏宁", + "url": "https://search.suning.com/%s/" + }, + { + "name": "亚马逊", + "url": "https://www.amazon.cn/s/?field-keywords=%s", + "icon": "https://www.amazon.cn/favicon.ico" + }, + { + "name": "天猫", + "url": "https://list.tmall.com/search_product.htm?q=%s" + }, + { + "name": "值得买", + "url": "https://search.smzdm.com/?c=home&s=%s" + }, + { + "name": "当当网", + "url": "https://search.dangdang.com/?key=%s" + }, + { + "name": "1688", + "url": "https://s.1688.com/selloffer/offer_search.htm?keywords=%s", + "charset": "gbk" + }, + { + "name": "慢慢买", + "url": "https://ss.manmanbuy.com/Default.aspx?key=%s", + "charset": "GBK" + } + ] + }, + { + "type": "电子书", + "icon": "book", + "description": "电子书下载", + "sites": [ + { + "name": "读书小站 – 悦读不孤读", + "url": "https://ibooks.org.cn/?s=%s", + "icon": "https://ibooks.org.cn/wp-content/uploads/2021/07/1625331935-%E8%B5%84%E6%BA%90-1.png" + }, + { + "name": "SoBooks", + "url": "https://sobooks.net/search/%s" + }, + { + "name": "知轩藏书", + "url": "http://zxcs.me/index.php?keyword=%s", + "description": "藏尽网络中最好的精校小说" + }, + { + "name": "Mox.moe", + "url": "https://mox.moe/list.php?s=%s", + "icon": "https://mox.moe/img/mox-logo-256.png", + "description": " [Kindle漫畫|Kobo漫畫|epub漫畫]" + }, + { + "name": "书享家", + "url": "http://www.shuxiangjia.cn/search.php?q=%s" + }, + { + "name": "Anna’s Archive", + "url": "https://annas-archive.org/search?q=%s", + "icon": "https://annas-archive.org/favicon-32x32.png", + "match": "annas\\-archive\\.org/search" + }, + { + "name": "无名图书", + "url": "https://www.book123.info/list?key=%s" + }, + { + "name": "Hallowlib", + "url": "https://bk.hallowlib.org/#p{#searchText input=%s&click(#sBtn)}" + }, + { + "name": "Freembook", + "url": "https://freembook.com/#p{#search-input=%s&click([aria-label=search])}" + }, + { + "name": "知搜", + "url": "https://zhiso.top/search/?q=%s", + "icon": "https://zhiso.top/static/image/favicon.ico" + }, + { + "name": "苦瓜书盘", + "url": "https://kgbook.com/e/search/index.php%p{keyboard=%s&show=title,booksay,bookwriter&tbname=download&tempid=1}" + } + ] + }, + { + "type": "阅读", + "icon": "book-open", + "sites": [ + { + "name": "BookLink.Me", + "url": "https://booklink.me/after_search.php%p{name=%s}" + }, + { + "name": "起点中文网", + "url": "https://www.qidian.com/soushu/%s.html", + "icon": "https://qidian.gtimg.com/qd/favicon/qd_icon.ico" + }, + { + "name": "创世中文", + "url": "https://chuangshi.qq.com/search/searchindex?type=all&wd=%s", + "icon": "https://img1.chuangshi.qq.com/chuangshi/p1/ico/c_mini_logo.ico" + }, + { + "name": "纵横中文网", + "url": "http://search.zongheng.com/s?keyword=%s" + }, + { + "name": "笔趣阁", + "url": "https://www.xbiquge.so/modules/article/search.php?searchkey=%s", + "charset": "GBK" + }, + { + "name": "微信读书", + "url": "https://weread.qq.com/#p{click(.navBar_home_inputText)&.search_input_text=%s&click(.search_input_right)}" + }, + { + "name": "轻小说文库", + "url": "https://www.wenku8.net/so.php%p{searchtype=articlename&searchkey=%s&charset=gbk}", + "charset": "GBK" + }, + { + "name": "轻之国度", + "url": "https://www.lightnovel.us/cn/search?keywords=%s" + }, + { + "name": "哔哩轻小说", + "url": "https://www.linovelib.com/S6/%p{searchkey=%s&searchtype=all}", + "description": "日本动漫轻小说在线阅读" + }, + { + "name": "魔笔小说", + "url": "https://www.mobinovels.com/?s=%s", + "description": "轻小说 资源收集" + }, + { + "name": "Z-Library", + "url": "https://zh.usa1lib.org/s/?q=%s" + }, + { + "name": "小说搜搜", + "url": "https://www.xssousou.com/s/?wd=%s" + } + ] + }, + { + "type": "学术", + "icon": "graduation-cap", + "sites": [ + { + "name": "谷歌学术", + "url": "https://scholar.google.com/scholar?hl=zh-CN&q=%s" + }, + { + "name": "百度学术", + "url": "https://xueshu.baidu.com/s?wd=%s" + }, + { + "name": "中文维基", + "url": "https://zh.wikipedia.org/w/index.php?search=%s&button=&title=Special%3ASearch" + }, + { + "name": "英文维基", + "url": "https://en.wikipedia.org/w/index.php?search=%s&button=&title=Special%3ASearch" + }, + { + "name": "日本维基", + "url": "https://ja.wikipedia.org/w/index.php?search=%s&button=&title=Special%3ASearch" + }, + { + "name": "Google Book", + "url": "https://www.google.com/search?q=%s&btnG=搜索图书&tbm=bks&tbo=1&hl=zh-CN&gws_rd=ssl" + }, + { + "name": "中国知网", + "url": "https://kns.cnki.net/KNS8/DefaultResult/Index?dbcode=CFLS&kw=%s" + }, + { + "name": "爱学术", + "url": "https://www.ixueshu.com/search/index.html?search_type=&q=%s", + "icon": "https://www.ixueshu.com/static/favicon.ico" + }, + { + "name": "维普", + "url": "http://lib.cqvip.com/Qikan/Search/Index?from=Qikan_Search_Index/%p{isNoteHistory=1&isLog=1&indexIdentifier=U&indexKey=%s}" + }, + { + "name": "krugle", + "url": "http://opensearch.krugle.org/document/search/#query=%s", + "icon": "https://opensearch.krugle.org/media/images/favicon.ico" + }, + { + "name": "读秀知识", + "url": "http://qw.duxiu.com/getPage?sw=%s&ecode=utf-8", + "icon": "https://mycroftproject.com/updateos.php/id0/duxiu.ico" + }, + { + "name": "读秀书籍", + "url": "http://book.duxiu.com/search?Field=all&channel=search&sw=%s&ecode=utf-8&edtype=&searchtype=1&view=0", + "icon": "https://mycroftproject.com/updateos.php/id0/duxiu.ico" + }, + { + "name": "罗马图书馆", + "url": "https://www.bibliotechediroma.it/opac/query/%s?context=catalogo", + "icon": "https://www.bibliotechediroma.it/sebina/repository/sebinayou/temi/biblioteche_roma/img/favicon.png" + }, + { + "name": "籍合网", + "url": "http://www.ancientbooks.cn/publishfulltextsearch?keyWord=%s", + "icon": "http://www.ancientbooks.cn/images/favicon.ico" + }, + { + "name": "深圳文献港", + "url": "http://m.szwxg.5read.com/search/goSearch.jspx%p{tag=qw&sw=%s}" + }, + { + "name": "高级检索", + "url": "http://publish.ancientbooks.cn/docShuju/platformAdvanceSearchResult.jspx?libId=5%p{modelId=2&order=0&aa=&libId=5&column1=title&text1=%s&relation2=and&column2=txt&text2=&relation3=and&column3=book_title&text3=&relation4=and&column4=book_author&text4=&relation5=and&column5=book_author_arranger&text5=&relation6=and&column6=book_publisher&text6=&synonyms=on&properNouns=on&punc=on}" + }, + { + "name": "库问搜索", + "url": "http://www.koovin.com/?q=%s", + "description": "免费开源文献资源共享平台" + }, + { + "name": "掌桥科研", + "url": "https://www.zhangqiaokeyan.com/search.html?sertext=%s" + }, + { + "name": "PubMed", + "url": "https://pubmed.ncbi.nlm.nih.gov/?term=%s", + "icon": "https://cdn.ncbi.nlm.nih.gov/coreutils/nwds/img/favicons/favicon.ico" + }, + { + "name": "文津搜索", + "url": "http://find.nlc.cn/search/doSearch?query=%s&secQuery=&actualQuery=%s" + }, + { + "name": "SCI影响因子", + "url": "https://www.letpub.com.cn/index.php?page=journalapp%p{addcomment_s1_comments=&addcomment_s2_comments=&searchname=%s&addcomment_month=&addcomment_sorttype=&journalidcommentscenter=&journalnamecommentscenter=&addcomment_contributionflaghidden=}", + "icon": "https://www.letpub.com.cn/images/favicon.ico" + }, + { + "name": "英文DOI", + "url": "https://dx.doi.org/%p{hdl=%s}", + "icon": "https://dx.doi.org/static/img/favicon.png" + }, + { + "name": "剑桥大学知识库", + "url": "https://www.repository.cam.ac.uk/discover?scope=/&query=%s", + "icon": "https://www.repository.cam.ac.uk/themes/Cambridge/images/favicon.ico" + }, + { + "name": "国学宝典", + "url": "http://www.gxbd.com/#p{#entry_my_adv=%s&click(#entry_my_adv+input)}" + }, + { + "name": "汉语大词典", + "url": "https://www.hanyudacidian.cn/#p{[type\\=search]=%s&click(#com-search-button)}" + }, + { + "name": "CALIS联合目录", + "url": "http://opac.calis.edu.cn/opac/doSimpleQuery.do%p{condition=%s&query=(cql.anywhere=\"*%s*\")&pageno=1&pagingType=0&version=1.1&maximumRecords=50&startRecord=1}" + }, + { + "name": "影印古籍丛书", + "url": "http://39.98.95.7:90/default/search#p{.search-query=%s&click(#search)}" + }, + { + "name": "以观书法", + "url": "https://web.ygsf.com/#p{click(.m-navigator>li:last-child)&sleep(1000)&input.van-field__control=%s&click(.van-search__action>div)}" + }, + { + "name": "汉语大字典", + "url": "http://www.homeinmists.com/hd/search2.html#p{#queryString1=%s&click(#queryString1+input)}" + }, + { + "name": "中华古籍", + "url": "http://bib.ancientbooks.cn/docGuji/shuMuSearch.jspx%p{searchType=1&bookType=0&title=%s}#from{docGuji/}" + } + ] + }, + { + "type": "网盘", + "icon": "cloud-download", + "sites": [ + { + "name": "百度网盘", + "url": "https://pan.baidu.com/disk/home?#/search?key=%s", + "icon": "https://nd-static.bdstatic.com/m-static/v20-main/favicon-main.ico" + }, + { + "name": "大力盘", + "url": "https://www.dalipan.com/search?keyword=%s" + }, + { + "name": "大圣盘", + "url": "https://www.dashengpan.com/search?keyword=%s" + }, + { + "name": "罗马盘", + "url": "https://www.luomapan.com/search?keyword=%s" + }, + { + "name": "小白盘", + "url": "https://www.xiaobaipan.com/list-%s.html?from=1", + "icon": "https://www.xiaobaipan.com/static/assets/ico/favicon.png" + }, + { + "name": "56网盘", + "url": "https://www.56wangpan.com/search/kw%s" + }, + { + "name": "凌风云", + "url": "https://www.lingfengyun.com/Search/Search?wd=%s" + }, + { + "name": "优聚搜", + "url": "https://v3.ujuso.com/#/main?kw=%s", + "icon": "https://cdn-1251935463.file.myqcloud.com/jujuso/favicon-32x32.png" + }, + { + "name": "夸克网盘搜索", + "url": "https://kzurl01.cn/LfJrE#p{#search=%s&click(#submitSearch)}", + "match": "http://kl\\.kelezj\\.com/apps/index\\.html\\?" + }, + { + "name": "小猪快盘,网盘搜索", + "url": "https://www.xiaozhukuaipan.com/s/search?q=%s", + "icon": "https://www.xiaozhukuaipan.com/media/img/logo/favicon.ico" + }, + { + "name": "盘么么", + "url": "http://www.panmeme.com/query?key=%s" + }, + { + "name": "网盘搜索-小白盘", + "url": "https://www.xiaobaipan.com/?k=%s", + "icon": "https://www.xiaobaipan.com/static/assets/ico/favicon.png" + }, + { + "name": "热盘搜", + "url": "http://www.repanso.com/q?wd=%s" + }, + { + "name": "好去网", + "url": "https://www.haogow.com/search?keyword=%s", + "icon": "https://www.haogow.com/template/default/images/favicon.ico" + }, + { + "name": "V盘搜", + "url": "http://www.vpansou.com/query?wd=%s" + }, + { + "name": "百度网盘搜索", + "url": "https://aizhaomu.com/search/kw%p{keyword=%s}" + }, + { + "name": "搜度网", + "url": "http://www.sodu123.com/sodu/so.php?q=%s" + }, + { + "name": "盘搜网", + "url": "http://www.pansou.com/?q=%s" + }, + { + "name": "fastsoso网盘搜索", + "url": "https://www.fastsoso.cn/search?k=%s" + }, + { + "name": "51搜盘", + "url": "http://www.51sopan.cn/search?&time=2keywords=%s", + "icon": "http://www.51sopan.cn/img/favicon.ico" + }, + { + "name": "两仪鸟搜索", + "url": "http://www.baiduyunsousou.com/search?kw=%s", + "icon": "http://www.baiduyunsousou.com/dist/images/logo/e_m.png" + }, + { + "name": "微盘搜索", + "url": "http://www.vpanso.com/s?wd=%s" + }, + { + "name": "云盘搜索大师", + "url": "https://www.xxhh360.com/search?q=%s" + }, + { + "name": "盘大大", + "url": "https://www.pandada.net/all/s-ypzdn%s.html", + "icon": "https://static.pandada.net/img/favicon.ico" + }, + { + "name": "众人搜索网", + "url": "http://wangpan.renrensousuo.com/jieguo?q=%s" + }, + { + "name": "猪猪盘", + "url": "http://www.zhuzhupan.com/search?query=%s" + }, + { + "name": "猫狸盘搜", + "url": "https://www.alipansou.com/search?k=%s" + }, + { + "name": "小马盘", + "url": "https://www.xiaomapan.com/#/main/search?keyword=%s" + }, + { + "name": "来搜一下", + "url": "https://www.laisoyixia.com/s/search?q=%s", + "icon": "https://www.laisoyixia.com/media/image/logo/favicon.ico" + }, + { + "name": "xxggg", + "url": "http://xxggg.net/app/index.html?name=%s&id=test&token=i69" + }, + { + "name": "440066", + "url": "http://440066.cn/app/index.html?name=%s&id=test&token=i69" + }, + { + "name": "9dups", + "url": "http://www.9dups.com/app/index.html?name=%s&id=test&token=u3vp96f4b5o" + }, + { + "name": "kkkob", + "url": "http://m.kkkob.com/apps/index.html?name=%s&token=nevv7nb902" + } + ] + }, + { + "type": "下载", + "icon": "download", + "sites": [ + { + "name": "BTDigg", + "url": "https://btdig.com/search?q=%s" + }, + { + "name": "Btsow", + "url": "https://btsow.com/search/%s", + "icon": "https://btsow.bar/app/bts/View/img/favicon.ico", + "match": "btsow\\..*/search/" + }, + { + "name": "torrentkitty", + "url": "https://www.torrentkitty.app/search/%s" + }, + { + "name": "idope", + "url": "https://idope.se/torrent-list/%s", + "icon": "https://idope.se/static/search/pc/img/favicon.ico" + }, + { + "name": "limetorrents.co", + "url": "https://www.limetorrents.co/search/all/%s" + }, + { + "name": "limetorrents.asia", + "url": "https://www.limetorrents.asia/search/all/%s" + }, + { + "name": "limetorrents.pro", + "url": "https://www.limetor.pro/search/all/%s" + }, + { + "name": "cdsoso", + "url": "https://www.cdsoso.cc/searches-%s-hot-1-null.html" + }, + { + "name": "射手网(伪)", + "url": "https://assrt.net/sub/?searchword=%s" + }, + { + "name": "sub HD", + "url": "https://subhd.la/search/%s", + "icon": "https://img.huo720.com/favicon-32x32.png" + }, + { + "name": "Subscene", + "url": "https://subscene.com/subtitles/searchbytitle:p{query=%s}" + }, + { + "name": "R3SUB", + "url": "https://r3sub.com/search.php?s=%s" + }, + { + "name": "Torrentz2", + "url": "https://www.torrentz2.xyz/?q=%s" + }, + { + "name": "Torrentz2k", + "url": "https://torrentz2k.xyz/search/:p{q=%s&category=all}" + }, + { + "name": "1337x.to", + "url": "https://www.1377x.to/search/%s/1/" + }, + { + "name": "Torlock", + "url": "https://www.torlock2.com/all/torrents/%s.html" + }, + { + "name": "TD", + "url": "https://www.torrentdownloads.me/search/?search=%s" + }, + { + "name": "rarbgprx", + "url": "https://rarbgprx.org/torrents.php?search=%s" + }, + { + "name": "rarbgproxy", + "url": "https://rarbgproxy.org/torrents.php?search=%s" + }, + { + "name": "kickass(镜像1)", + "url": "https://kat.sx/search.php?q=%s", + "icon": "https://kat.sx/kastatic/favicon.ico" + }, + { + "name": "kickasstorrents", + "url": "https://kickasstorrents.to/usearch/%s" + }, + { + "name": "kickass1.to", + "url": "https://kickass1.to/usearch/%s/" + }, + { + "name": "kat.am", + "url": "https://kat.am/usearch/%s/" + }, + { + "name": "kickasstorrent.cr", + "url": "https://kickasstorrent.cr/usearch/%s/" + }, + { + "name": "6v电影", + "url": "https://www.hao6v.tv/e/search/index.php%p{show=title%2Csmalltext&tempid=1&keyboard=%s&tbname=article}", + "charset": "GBK" + } + ] + }, + { + "type": "福利", + "icon": "female", + "match": "t66y\\.com", + "selectTxt": true, + "sites": [ + { + "name": "JAVlibrary", + "url": "http://www.javlibrary.com/cn/vl_searchbyid.php?keyword=%s", + "icon": "data:image/x-icon;base64,AAABAAEAEBAAAAAAIAA3AQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAP5JREFUeJylkzFKBDEUhr+3SQZdF8vFxmobwT2AtXgHCzsbQbyANuJVbLyAnR7BTlFBrGwUsRBcGdckz2JFd5zMzA7+Vf6Q9+XPSyIfc2fKP9RJznYNZncZpBkgpQQC2fvGjx3Pn7dLIP2seds6gD6N0YccgHj63AiwpQSrPbCC374injy2BHQN7mJtMnbp/v5VYZXZXPo1ruIKsg6yspAGYKeKTBpgj4fo7WgGQEUAffksllQC+g73uk7YukRHAfGKRiXs3dQApurtwYBwdI8Me4gAi5a4f1c+UjroROZwUPAhASj2II/w5iEP4PXbB/zOdeWTLv+FlprttdToC7F9R7urpLwHAAAAAElFTkSuQmCC" + }, + { + "name": "Jable", + "url": "https://jable.tv/search/%s", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAmklEQVQ4jWP4m9xX9y+p9+e/pL7/pOHen3+T++oYyNMMxz8ZKND8/19S33/CBmRM+v9v3dH//5qWkmlA/vT///////9v8d5RAxbvoacByf0IdvcaiAEzt5FgwPxd//89efP/351n////+v3//5uP///lTCXBgKKZkEDbcOz/vwW7///LnUZBSiSAKcxMvT8ZyM/OfT//J/fVAQB8gvyNVegtUAAAAABJRU5ErkJggg==", + "nobatch": true + }, + { + "name": "JavDB", + "url": "https://javdb.com/search?q=%s.replace(/\\-/,\"_\")" + }, + { + "name": "JavMenu", + "url": "https://javmenu.com/search?wd=%s", + "icon": "https://javmenu.com/assets/images/logo.png", + "match": "^https://javmenu\\.com/.*search" + }, + { + "name": "MissAV", + "url": "https://missav.com/search/%s", + "icon": "https://cdn26.akamai-content-network.com/img/favicon.ico" + }, + { + "name": "nhentai", + "url": "https://nhentai.net/search/?q=%s" + }, + { + "name": "ExHentai", + "url": "https://exhentai.org/?f_search=%s" + } + ] + }, + { + "type": "ACG", + "icon": "gamepad", + "sites": [ + { + "name": "nyaa.si", + "url": "https://nyaa.si/?f=0&c=0_0&q=%s", + "icon": "https://nyaa.si/static/favicon.png" + }, + { + "name": "Tokyotosho", + "url": "https://www.tokyotosho.info/search.php?terms=%s" + }, + { + "name": "Mikan", + "url": "http://mikanani.me/Home/Search?searchstr=%s" + }, + { + "name": "*MioBT*", + "url": "http://www.miobt.com/search.php?keyword=%s", + "icon": "http://www.miobt.com/images/favicon/miobt.ico" + }, + { + "name": "shana project", + "url": "https://www.shanaproject.com/search/?title=%s" + }, + { + "name": "简单动漫", + "url": "https://www.36dm.com/search.php?keyword=%s" + }, + { + "name": "KOTOMI RSS", + "url": "https://moe4sale.in/?kw=%s" + }, + { + "name": "ACG.RIP", + "url": "https://acg.rip/?term=%s" + }, + { + "name": "Glodls", + "url": "https://glodls.to/search_results.php?search=%s" + }, + { + "name": "AcgnX Ero", + "url": "https://www.anix.moe/search.php?sort_id=0&keyword=%s" + }, + { + "name": "AniRena", + "url": "https://www.anirena.com/?s=%s" + }, + { + "name": "GGBases", + "url": "http://www.ggbases.com/search.so?title=%s", + "description": "GGBases is a torrent site dedicated to h-games, gal-games and anime. Tags hgame, h-game, doujin game, galgame, RPG" + }, + { + "name": "爱恋动漫BT", + "url": "https://www.kisssub.org/search.php?keyword=%s", + "icon": "https://www.kisssub.org/images/favicon/kisssub.ico" + }, + { + "name": "VCB-Studio", + "url": "https://vcb-s.com/?s=%s", + "icon": "https://vcb-s.com/wp-content/customRes/favicon@48.png", + "description": "BD 动画下载,收藏级" + }, + { + "name": "金手指", + "url": "https://duckduckgo.com/?q=%s+cheat+tables+site%3Aforum.cheatengine.org&t=ffab&atb=v318-7&ia=web" + } + ] + }, + { + "type": "Etc", + "icon": "suitcase", + "sites": [ + { + "name": "邮编库", + "url": "http://www.youbianku.com/%s" + }, + { + "name": "AMO", + "url": "https://addons.mozilla.org/zh-CN/firefox/search/?q=%s" + }, + { + "name": "企查查", + "url": "https://www.qcc.com/search?key=%s", + "match": "^https?:\\/\\/www\\.qcc\\.com\\/(?:web|firm|search)" + }, + { + "name": "天眼查", + "url": "https://www.tianyancha.com/search?key=%s", + "match": "^https?:\\/\\/www\\.tianyancha\\.com\\/(?:search|company)" + }, + { + "name": "中國大陸地方志書目查詢系統", + "url": "https://webgis.sinica.edu.tw/place/query.asp?A1=%E5%9C%B0%E6%96%B9%E5%BF%97%E5%90%8D&B1=containing&C1=%s&Page_setup=10&D1=AND&A2=99&B2=containing&C2=&D2=AND&A3=99&B3=containing&C3=&page=1", + "charset": "Big5" + }, + { + "name": "金山文档 · 一起办公才高效", + "url": "https://edu.kdocs.cn/?show=all#p{#app input.kdv-input__inner=%s}" + } + ] + }, + { + "type": "Github", + "icon": "fa-brands fa-github ", + "match": "github\\.com", + "selectLink": true, + "selectPage": true, + "openInNewTab": true, + "sites": [ + { + "name": "页面镜像 - Fastgit", + "url": "%u.replace(/https:\\/\\/github\\.com/,\"https://hub.fastgit.xyz\")", + "kwFilter": "https:\\/\\/github\\.com" + }, + { + "name": "Raw镜像 - Fastgit", + "url": "%t.replace(/raw\\.githubusercontent\\.com/,\"raw.fastgit.org\").replace(/github.com(.*)\\/blob\\/(.*)/,\"raw.fastgit.org$1/$2\")", + "kwFilter": "github.com.*\\/blob\\/" + }, + { + "name": "Assets镜像 - Fastgit", + "url": "%t.replace(/github\\.githubassets\\.com/,\"assets.fastgit.orgz\")", + "kwFilter": "github\\.githubassets\\.com" + }, + { + "name": "Download镜像- Fastgit", + "url": "%t.replace(/github\\.com(.*\\/download\\/)/,\"download.fastgit.org$1\")", + "kwFilter": "github\\.com.*\\/download\\/" + }, + { + "name": "Archive镜像- Fastgit", + "url": "%t.replace(/github\\.com(.*\\/archive\\/)/,\"download.fastgit.org$1\")", + "kwFilter": "github\\.com.*\\/archive\\/" + }, + { + "name": "Ghproxy镜像加速", + "url": "https://ghproxy.com/%t" + } + ] + }, + { + "type": "VIP", + "icon": "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgc3R5bGU9ImhlaWdodDogMWVtO2ZpbGw6IHdoaXRlO292ZXJmbG93OiBoaWRkZW47IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iODI3Ij48cGF0aCBkPSJNNjgzLjE5NTM2MyA1NjcuNjE1NDY5djM0OS4xNDQzOTloNzMuMzY5NDQyVjc4OS45NzUwMTdjMTE3LjI2ODMxMiAxLjczOTU4MiAxNzYuNzIxMDk1LTMuNDc5MTY1IDE5My4xOTU5NjItMTAzLjU1NjMxIDUuMjE4NzQ3LTI5LjI2NTkxNC01LjIxODc0Ny02Mi4xMTMzMjEtMTguMjE0NDQ5LTgwLjEyMzExNC0zOC42ODAxMjQtNTIuMzkyMTI2LTE1NS4wMjc0ODEtMzkuMzk2NDIzLTI0OC4zNTA5NTUtMzguNjgwMTI0ek03NTYuNTY0ODA1IDczMC42MjQ1NjN2LTEwMS44MTY3MjhjNTQuNDM4NjkzLTEuNzM5NTgyIDExMi4wNDk1NjUtNy43NzY5NTYgMTIxLjU2NjEwMyAzNi4yMjQyNDMgMTUuNjU2MjQxIDczLjU3NDA5OC02MC4zNzM3MzggNjcuMzMyMDY4LTEyMS41NjYxMDMgNjUuNTkyNDg1ek01NDEuODc5ODg0IDU2OS4zNTUwNTFjMC44MTg2MjcgMTE1LjUyODczIDAuODE4NjI3IDIzMS44NzYwODcgMS43Mzk1ODIgMzQ3LjQwNDgxN2g3MS42Mjk4NTlWNTY3LjYxNTQ2OWMtMjQuMTQ5NDk1IDEuMDIzMjg0LTQ4LjQwMTMxOSAxLjAyMzI4NC03My4zNjk0NDEgMS43Mzk1ODJ6TTY4MC43Mzk0ODIgMTAyLjEyMzcxM2MtMTEzLjA3Mjg0OSAxMTIuODY4MTkyLTIyNS44Mzg3MTMgMjI0LjkxNzc1OC0zMzkuNzMwMTg5IDMzNy45OTA2MDdWMTAyLjEyMzcxM0g2Ny42OTAyMTdjMC44MTg2MjcgMjIuNDA5OTEzIDAuODE4NjI3IDQ1LjYzODQ1MyAxLjczOTU4MiA2OC4xNTA2OTVoNjYuNDExMTEydjc0NS45NzM4MThjMjcxLjU3OTQ5NC0yNzEuNzg0MTUxIDU0Mi4zNDAzNjItNTQyLjU0NTAxOCA4MTMuOTE5ODU2LTgxNC4xMjQ1MTNINjgwLjczOTQ4MnoiIHAtaWQ9IjgyOCIvPjwvc3ZnPg==", + "match": "v\\.qq\\.com/x/|\\.mgtv\\.com/.*b/|v\\.youku\\.com/(v_show|video)/|\\.iqiyi\\.com/(v_|dianying)", + "sites": [ + { + "name": "无名小站", + "url": "https://www.administratorw.com/video.php?url=%u" + }, + { + "name": "小小解析", + "url": "http://tv.hzwdd.cn/#p{#url=%u&click(.btn-play)}", + "icon": "http://tv.hzwdd.cn/img/favicon.ico" + } + ] + }, + { + "type": "辅助工具", + "icon": "list-alt", + "selectTxt": true, + "selectImg": true, + "selectAudio": true, + "selectVideo": true, + "selectLink": true, + "selectPage": true, + "openInNewTab": true, + "sites": [ + { + "name": "手机号码聚合搜索", + "url": "[\"360\",\"搜狗\"]", + "icon": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwRGBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQqHBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/wAARCABAAEADASIAAhEBAxEB/8QAHAABAAICAwEAAAAAAAAAAAAAAAMIAgcBBQYE/8QAMxAAAQMDAgIIBAYDAAAAAAAAAQIDBAAFEQYSByEIEzFBUWFxgRQyUmIVIzNCkbFyoeH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AsPSlKBSlKBSo2X2pDfWR3UPI+ptYUP5FSUClKUCo33kRo7j7ytrbSCtZxnAAyf8AQqSsHWkPtLacGUOJKFehGD/dBU2+9JPV0nVZmWFbUK0tL/Kgusoc61Hi4rGcn7SMd3jVotPXpjUel7deY6drU+KiQEZzt3JyU+xyPaqFXSzvWvUsuzyilp6NKVGWpw4CSle3JPh31efQ2mjo/QtrsJkiUuExtU8OxaiSo4+3KiB5YoNbWXTvC3VE5Y4cXuTp2+N5KfgH3WHQR4su8lp8QO6vWaT1beIepTozXoZ/GOrL0C4sJ2s3NodpA/a4O9Pr79XJjwuLFsukOdZ3dPaxsTiercKwXojpG5paHU43IVjs/wCGun1FepWqeAto10W+rvtifbmBSU7T1rboaeH+Khzx2dlBuqlRsPIkR232vkdQFp9CMj+6koFKUoKxdJPh29DvA1pbGSqJL2t3AJH6ToGErPkoADP1D7hXp+CfGy33GzxdNatmIiXGKgMxpT6tqJKBySkqPILA5c/m5d9bvmQ41whPRJzDciM+gtutOp3JWk8iCO8VWriJ0bJ8OS7cNAH4yIolRtzqwHmvJCjyWPI4V60G/NSa40zo8sDUl4jQFyRlpC8qUseOEgnHn2V9tl1BZdRRS/YbnDuLKcbjGdSvbnxA5j3FUKvFrvNrkiPfYc2I80OrCJba0FIHcN3d6VtLo22K+yuIyLzBS41aYbbiJrx5Id3IIS0PqO7ary258MhbalKUClKUClKUGDrTb7ex9CXUH9riQofwa4ZYajtBqO0hptPYhtISB7CpKUClKUH/2Q==" + }, + { + "name": "🧮 计算器", + "url": "calculator://" + }, + { + "name": "🔎 Everything搜索", + "url": "ES://%s" + }, + { + "name": "🦊 打开火狐", + "url": "FirefoxURL-308046B0AF4A39CB://%u" + }, + { + "name": "⏰ 时钟", + "url": "ms-clock://" + }, + { + "name": "✂️ 屏幕截图", + "url": "ms-screenclip://" + }, + { + "name": "☑️ ToDo", + "url": "ms-todo://", + "description": "微软To-Do" + }, + { + "name": "📓 Onenote", + "url": "onenote://" + }, + { + "name": "⌨️ VSCode", + "url": "vscode://%u" + }, + { + "name": "提取文本中链接并打开", + "url": "%sr.replace(/(点|。)/g,\".\").replace(/[^\\w\\-_\\.~!\\*'\\(\\);:@&=\\+\\$,\\/\\?#\\[\\]%]/g,\"\")" + }, + { + "name": "测量尺寸", + "url": "javascript:void('http://centricle.com/tools/favelets/');marqueeColor=prompt('Marquee%20Color:','red');initMarquee=document.createElement('div');marquee=document.body.appendChild(initMarquee);marquee.style.position='absolute';marquee.style.border='dashed%201px%20red';initControls=document.createElement('div');controls=document.body.appendChild(initControls);controls.style.position='absolute';controls.style.top='-300px';controls.style.left='-300px';controls.style.width='85px';controls.style.background='%23eee';controls.style.padding='5px';controls.style.border='solid%201px%20%23ccc';controls.style.font='10px%20verdana,sans-serif';controls.style.width='85px';controls.style.zIndex='99';controls.innerHTML='%3Cb%3ECurrent:%3C/b%3E%3Cbr%3E%20x:%3Cspan%20id=%22currentX%22%3E0%3C/span%3E%20y:%3Cspan%20id=%22currentY%22%3E0%3C/span%3E%3Cbr%3E%3Cb%3EBegin:%3C/b%3E%3Cbr%3E%20x:%3Cspan%20id=%22beginX%22%3E0%3C/span%3E%20y:%3Cspan%20id=%22beginY%22%3E0%3C/span%3E%3Cbr%3E%3Cb%3EEnd:%3C/b%3E%3Cbr%3E%20x:%3Cspan%20id=%22endX%22%3E0%3C/span%3E%20y:%3Cspan%20id%20=%22endY%22%3E0%3C/span%3E%3Cbr%3E%3Cb%3EDimensions:%3C/b%3E%3Cbr%3E%20w:%3Cspan%20id=%22dimX%22%3E0%3C/span%3E%20h:%3Cspan%20id=%22dimY%22%3E0%3C/span%3E';document.onmousemove=follow;document.onmousedown=beginDrag;document.onmouseup=endDrag;currentX=document.getElementById('currentX');currentY=document.getElementById('currentY');beginX=document.getElementById('beginX');beginY=document.getElementById('beginY');endX=document.getElementById('endX');endY=document.getElementById('endY');dimX=document.getElementById('dimX');dimY=document.getElementById('dimY');var%20marqueeLeft=0;var%20marqueeTop=0;dragging=false;void(document.body.style.cursor='crosshair');function%20follow(e){x=e.pageX;y=e.pageY;controls.style.left=x+15+'px';controls.style.top=y+15+'px';currentX.innerHTML=x;currentY.innerHTML=y;if(dragging){marquee.style.width=x-dragstartX+'px';dimX.innerHTML=Math.abs(x-dragstartX);marquee.style.height=y-dragstartY+'px';dimY.innerHTML=Math.abs(y-dragstartY);}return%20true;};function%20beginDrag(e){marquee.style.width=0;marquee.style.height=0;marquee.style.borderColor=marqueeColor;dragging=true;x=e.pageX;y=e.pageY;marquee.style.visibility='visible';marquee.style.left=x+'px';marquee.style.top=y+'px';dragstartX=x;dragstartY=y;beginX.innerHTML=x;beginY.innerHTML=y;return%20true;}function%20endDrag(e){dragging=false;x=e.pageX;y=e.pageY;endX.innerHTML=x;endY.innerHTML=y;return%20true;}" + }, + { + "name": "查询字体", + "url": "javascript:(function(){if(!document.getElementById('fountscript')){var%20founts=document.createElement('script');founts.src='https://fount.artequalswork.com/fount.js';founts.id='fountscript';document.body.appendChild(founts);}})();" + }, + { + "name": "网页设计工具", + "url": "javascript:function%20fnStartDesign(sUrl)%20{var%20nScript%20=%20document.createElement('script');nScript.setAttribute('language','JavaScript');nScript.setAttribute('src',sUrl);document.body.appendChild(nScript);}fnStartDesign('//www.sprymedia.co.uk/design/design/media/js/design-loader.js');" + }, + { + "name": "敏感词查询", + "url": "http://www.txttool.com/t/?id=NDY4#p{#wordkey=%sr&click(.panel-body>div>button)}" + }, + { + "name": "IP查询", + "url": "https://www.ipuu.net/query/ip?search=%sr" + }, + { + "name": "⭐ 查找当前Favicon", + "url": "javascript:let ico=document.querySelector(\"link[rel='shortcut icon'],link[rel='icon']\");if(ico)window.open(ico.href, \"_blank\");else window.open(location.origin + \"/favicon.ico\", \"_blank\")" + }, + { + "name": "🛠️ 扩展", + "url": "chrome://extensions/" + }, + { + "name": "🐞 远程调试", + "url": "chrome://inspect/#devices" + }, + { + "name": "🔖 书签管理器", + "url": "chrome://bookmarks/" + } + ] + }, + { + "type": "当前网页", + "icon": "list", + "selectLink": true, + "selectPage": true, + "openInNewTab": true, + "sites": [ + { + "name": "小众软件评论", + "url": "showTips:%t \n\n{noscript[data-path]|innerHTML}", + "icon": "https://www.appinn.com/favicon.ico", + "kwFilter": "https://meta\\.appinn\\.net/t/topic/" + }, + { + "name": "⏬ BBDown", + "url": "SearchJumper-BBDown://%u", + "description": "需要自行配置软件与注册表", + "match": "bilibili\\.com", + "hideNotMatch": true + }, + { + "name": "SEO查询", + "url": "http://seo.chinaz.com/?q=%h" + }, + { + "name": "自动下载到百度网盘", + "url": "https://pan.baidu.com/disk/main#p{click([data-id\\=downloadLink])&div.nd-download-link div[role\\=dialog] input=%t&click(.nd-download-link button.u-button--primary)}", + "icon": "https://nd-static.bdstatic.com/m-static/v20-main/favicon-main.ico" + }, + { + "name": "编辑当前网页", + "url": "javascript:(function(){document.body.setAttribute('contenteditable', 'true');alert('已开启网页编辑,按ESC键取消');document.onkeydown = function (e) {e = e || window.event;if(e.keyCode==27){document.body.setAttribute('contenteditable', 'false');}}})();", + "icon": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NjAgOTYwSDY0di02NGg4OTZ2NjR6IG0tNzMuNi02ODYuNGwtODQgODQtNDUuNiA0NS42TDM4NCA3NzZsLTE5MiA1NiA1Ni0xOTIgNTAyLjQtNTAyLjRjNC00IDkuNi02LjQgMTQuNC02LjQgNCAwIDggMS42IDEwLjQgNEw4ODggMjQ4YzcuMiA3LjIgNS42IDE3LjYtMS42IDI1LjZ6TTcxMiAzNTcuNkw2NjYuNCAzMTIgMzA0LjggNjczLjZsLTE4LjQgNjQgNjQtMTguNEw3MTIgMzU3LjZ6IG05Ny42LTk3LjZsLTQ1LjYtNDUuNi01MiA1MiA0NS42IDQ1LjYgNTItNTJ6Ij48L3BhdGg+PC9zdmc+", + "nobatch": true + }, + { + "name": "限制去除", + "url": "javascript:var d=document,b=d.body;with(b.onselectstart=b.oncopy=b.onpaste=b.onkeydown=b.oncontextmenu=b.onmousemove=b.ondragstart=d.oncopy=d.onpaste=null,d.onselectstart=d.oncontextmenu=d.onmousedown=d.onkeydown=function(){return!0},d.wrappedJSObject||d)onmouseup=null,onmousedown=null,oncontextmenu=null;for(var a=d.getElementsByTagName(\"*\"),i=a.length-1;i>=0;i--){var o=a[i];with(o.wrappedJSObject||o)onmouseup=null,onmousedown=null}var h=d.getElementsByTagName(\"head\")[0];if(h){var s=d.createElement(\"style\");s.innerHTML=\"html,*{user-select:text!important;-moz-user-select:text!important;-webkit-user-select:text!important;-webkit-user-drag:text!important;-khtml-user-select:text!important;-khtml-user-drag:text!important;pointer-events:auto!important;}\",h.appendChild(s)}Event.prototype.preventDefault=function(){};", + "icon": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04MDAgNDQ4SDcwNFYzMjBjMC0xMDYuNC04NS42LTE5Mi0xOTItMTkyUzMyMCAyMTMuNiAzMjAgMzIwaDY0YzAtNzAuNCA1Ny42LTEyOCAxMjgtMTI4czEyOCA1Ny42IDEyOCAxMjh2MTI4SDIyNGMtMTcuNiAwLTMyIDE0LjQtMzIgMzJ2Mzg0YzAgMTcuNiAxNC40IDMyIDMyIDMyaDU3NmMxNy42IDAgMzItMTQuNCAzMi0zMlY0ODBjMC0xNy42LTE0LjQtMzItMzItMzJ6TTUxMiA3MzZjLTM1LjIgMC02NC0yOC44LTY0LTY0czI4LjgtNjQgNjQtNjQgNjQgMjguOCA2NCA2NC0yOC44IDY0LTY0IDY0eiI+PC9wYXRoPjwvc3ZnPg==", + "description": "去除网页右键以及复制限制", + "nobatch": true + }, + { + "name": "打开链接", + "url": "%t", + "icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiPjxwYXRoIGQ9Ik03MjIuOCA0NTlsLTE4LjkgMTguOS0yLjcgMi43LTQuNyA0LjgtNTIuNyA1Mi43IDI2LjMgMjYuMyA1Mi43LTUyLjcgMTg0LjQgMTg0LjQtMjEwLjcgMjEwLjgtMTg0LjQtMTg0LjQgNTIuNi01Mi43LTI2LjMtMjYuNC01Mi43IDUyLjctMjYuMyAyNi40IDIzNy4xIDIzNy4xIDI2My40LTI2My41eiIgZmlsbD0iIzA2MDAwMSIvPjxwYXRoIGQ9Ik0zMjcuNyAzNTMuNmwzNDIuNSAzNDIuNSAyNi4zLTI2LjNMMzU0IDMyNy4zeiIgZmlsbD0iIzA2MDAwMSIvPjxwYXRoIGQ9Ik0zMDEuMyA1MTEuN0wxMTYuOSAzMjcuM2wyMTAuOC0yMTAuN0w1MTIuMSAzMDFsLTUyLjcgNTIuNiAyNi4zIDI2LjQgNTIuNy01Mi43IDI2LjMtMjYuNC0yMzctMjM3TDY0LjIgMzI3LjNsMjM3LjEgMjM3LjEgMjYuMy0yNi4zIDUyLjgtNTIuN0wzNTQgNDU5eiIgZmlsbD0iIzA2MDAwMSIvPjwvc3ZnPg==", + "description": "ctrl 后台标签页 alt 小窗 ctrl+shift 隐身窗口", + "openInNewTab": true + }, + { + "name": "二维码生成", + "url": "https://hoothin.com/qrcode#%U", + "icon": "https://hoothin.com/qrcode/favicon.svg" + }, + { + "name": "短网址生成", + "url": "https://cui.la#p{#url=%u}", + "icon": "https://cui.la/content/151952ahk56ovvoqhnv557.png.icon.png" + }, + { + "name": "分享到微博", + "url": "https://service.weibo.com/share/share.php?url=%u&title=%n", + "nobatch": true + }, + { + "name": "存档当前网页", + "url": "https://web.archive.org/save/%u", + "icon": "https://web.archive.org/_static/images/archive.ico", + "nobatch": true + }, + { + "name": "万能命令", + "url": "https://wn.run/%u", + "nobatch": true + }, + { + "name": "⏬ 全网视频下载", + "url": "lux://%u", + "description": "需要配合注册表补丁使用,详阅项目主页", + "nobatch": true + }, + { + "name": "复制链接为 Markdown", + "url": "copy:[%sr](%t)", + "nobatch": true + }, + { + "name": "新浪短网址", + "url": "https://sina.lt/index.php?url=%u" + }, + { + "name": "is.gd", + "url": "https://is.gd/create.php%p{url=%u&opt=0}", + "icon": "https://is.gd/isgd_favicon.ico" + }, + { + "name": "URL Shortener", + "url": "https://bitly.com/%p{url=%u}", + "icon": "https://docrdsfx76ssb.cloudfront.net/static/1678306332/pages/wp-content/uploads/2019/02/favicon.ico" + }, + { + "name": "Gif控制器", + "url": "javascript:(function(){var n=null,C=false;function h(m){d(m,\"jsgif_overlaid\");m.removeEventListener(\"click\",i,C)}function i(m){var o=this;c.forEach(h);setTimeout(function(){j(o)},0);m.preventDefault()}function d(m,p){var o=m.className.split(/s/).filter(function(r){return r!==p});m.className=g(o,\" \")}function g(m,o){if(o===undefined){o=\"\"}return m.reduce(function(p,r){return p+o+r},\"\")}function j(ai){function ag(p,m){return function(q){p(q);T(m)}}function ac(){}function T(m){ab(\"Decoding (frame \"+(M.length+1)+\")...\",Z.i,Z.data.length,m)}function I(){G=C;o.insertBefore(ai,L);o.removeChild(L)}function F(){N&&M.push({data:N.getImageData(0,0,ae.width,ae.height),f:Y})}function V(m){af=m;ae={width:ai.width,height:ai.height};M=[];O.fillStyle=\"black\";O.fillRect(0,0,ae.width,ae.height);O.strokeStyle=\"red\";O.lineWidth=3;O.moveTo(0,0);O.lineTo(ae.width,ae.height);O.moveTo(0,ae.height);O.lineTo(ae.width,0);O.stroke();setTimeout(x,0)}function ah(m){m.lengthComputable&&ab(\"Loading...\",m.loaded,m.total,true)}function ab(u,p,r,t){K.style.visibility=p===r?\"\":\"visible\";if(t){t=Math.min(J.height>>3,J.height);var q=J.height-t>>1,m=p/r*J.width;O.fillStyle=\"rgba(255,160,122,0.5)\";O.fillRect(m,q,J.width-m,t);O.fillStyle=\"rgba(0,128,128,0.5)\";O.fillRect(0,q,p/r*J.width,t)}K.innerHTML=u+\" \"+Math.floor(p/r*100)+\"%\"}function ad(){try{b(Z,aj)}catch(m){V(\"parse\")}}var Z,ae,af=n,U=n,Y=n,w=n,s=n,N=n,G=true,P=true,M=[],x=function(){function y(){function S(){G=!G;aa();W.focus();u()}function aa(){if(G){W.innerHTML=\"❙❙\";W.title=\"Pause\";R.style.visibility=\"hidden\";Q.style.visibility=\"hidden\"}else{W.innerHTML=P?\"▶\":\"◀\";W.title=\"Play\";R.style.visibility=\"\";Q.style.visibility=\"\"}K.style.visibility=r?\"visible\":\"\";z.style.display=m?\"\":\"none\";E.innerHTML=\"i\";E.title=\"Show info/more tools\";D.innerHTML=P?\"←\":\"→\";D.title=P?\"Reverse\":\"Un-reverse\";R.innerHTML=\"◀❙\";R.title=\"Previous frame\";Q.innerHTML=\"❙▶\";Q.title=\"Next frame\";B.innerHTML=r?\"○\":\"⊙\";B.title=r?\"Unpin\":\"Pin\";A.innerHTML=\"✖\";A.title=\"Close jsgif and go back to original image\";v.disabled=G;q.disabled=G;K.innerHTML=\"\";H.innerHTML=\"\";z.innerHTML=\"\";if(M.length<2){if(af==\"xhr\"){K.appendChild(document.createTextNode(\"Load failed; cross-domain? \"));var al=ak(\"button\",\"popup\");al.addEventListener(\"click\",function(){window.open(ai.src)});al.innerHTML=\"↗\";al.title=\"Click to open GIF in new window; try running jsgif there instead\";K.appendChild(al)}else{af==\"parse\"&&K.appendChild(document.createTextNode(\"Parse failed \"))}K.appendChild(A)}else{al=function(an,ao){an.innerHTML=\"\";ao.forEach(function(ap){an.appendChild(ap)})};var am=P?[E,D,R,W,Q,B,A]:[E,D,Q,W,R,B,A];al(K,[H,z]);al(H,am);al(z,[document.createTextNode(\" frame: \"),v,document.createTextNode(\" / \"),document.createTextNode(M.length),document.createTextNode(\" (delay: \"),q,document.createTextNode(\")\")])}}function ak(am,an,al){am=document.createElement(am);if(an){am.className=\"jsgif_\"+an}for(var ao in al){am[ao]=al[ao]}return am}var H=ak(\"div\",\"simple_tools\"),D=ak(\"button\",\"rev\"),E=ak(\"button\",\"show_info\"),R=ak(\"button\",\"prev\"),W=ak(\"button\",\"play_pause\"),Q=ak(\"button\",\"next\"),B=ak(\"button\",\"pin\"),A=ak(\"button\",\"close\"),z=ak(\"div\",\"info_tools\");v=ak(\"input\",\"cur_frame\",{type:\"text\"});q=ak(\"input\",\"delay_info\",{type:\"text\"});E.addEventListener(\"click\",function(){m=!m;aa();E.focus()},C);D.addEventListener(\"click\",function(){P=!P;aa();D.focus()},C);v.addEventListener(\"change\",function(){var al=+v.value;if(isNaN(al)||al<1||al>M.length){v.value=t+1}else{t=al-1;O.putImageData(M[t].data,0,0)}},C);R.addEventListener(\"click\",function(){p(-1)},C);W.addEventListener(\"click\",S,C);Q.addEventListener(\"click\",function(){p(1)},C);B.addEventListener(\"click\",function(){r=!r;aa();B.focus()},C);A.addEventListener(\"click\",I,C);q.addEventListener(\"change\",function(){var al=+q.value;if(!isNaN(al)){M[t].f=al}},C);J.addEventListener(\"click\",S,C);L.addEventListener(\"click\",function(al){al.preventDefault()},C);aa()}function p(z){t=(t+z+M.length)%M.length;v.value=t+1;q.value=M[t].f;O.putImageData(M[t].data,0,0)}var t=-1,v,q,m=C,r=C,u=function(){function z(){if(A=G){p(P?1:-1);var B=M[t].f*10;B||(B=100);setTimeout(z,B)}}var A=C;return function(){A||setTimeout(z,0)}}();return function(){setTimeout(y,0);if(!af){J.width=ae.width;J.height=ae.height;u()}}}(),aj={p:ag(function(m){ae=m;J.width=ae.width;J.height=ae.height;L.style.width=ae.width+\"px\";K.style.minWidth=ae.width+\"px\";X.width=ae.width;X.height=ae.height}),o:ag(function(m){F();Y=U=n;s=w;N=w=n;U=m.L?m.M:n;Y=m.u;w=m.v}),m:ag(ac),c:{l:ag(ac)},q:ag(function(q){N||(N=X.getContext(\"2d\"));var m=q.r?q.C:ae.w,p=N.getImageData(q.g,q.k,q.width,q.height);q.h.forEach(function(t,r){if(U!==t){p.data[r*4+0]=m[t][0];p.data[r*4+1]=m[t][1];p.data[r*4+2]=m[t][2];p.data[r*4+3]=255}else{if(s===2||s===3){p.data[r*4+3]=0}}});N.putImageData(p,q.g,q.k);O.putImageData(p,q.g,q.k)},true),n:function(){F();T(C);K.innerHTML=\"Playing...\";x()}},o=ai.parentNode,L=document.createElement(\"div\"),J=document.createElement(\"canvas\"),O=J.getContext(\"2d\"),K=document.createElement(\"div\"),X=document.createElement(\"canvas\");J.width=ai.width;J.height=ai.height;K.style.minWidth=ai.width+\"px\";L.className=\"jsgif\";K.className=\"jsgif_toolbar\";L.appendChild(J);L.appendChild(K);o.insertBefore(L,ai);o.removeChild(ai);K.innerHTML=\"Loading...\";(function(){var m=new XMLHttpRequest;m.overrideMimeType(\"text/plain; charset=x-user-defined\");m.onload=function(){Z=new f(m.responseText);setTimeout(ad,0)};m.onprogress=ah;m.onerror=function(){V(\"xhr\")};m.open(\"GET\",ai.src,true);m.send()})()}function b(o,u){function r(){var q={};q.s=o.a();switch(String.fromCharCode(q.s)){case\"!\":q.type=\"ext\";p(q);break;case\",\":q.type=\"img\";s(q);break;case\";\":q.type=\"eof\";u.n&&u.n(q);break;default:throw Error(\"Unknown block: 0x\"+q.s.toString(16))}q.type!==\"eof\"&&setTimeout(r,0)}function s(q){function v(F,I){function J(y,B){var D=F.slice(B*I,(B+1)*I);A.splice.apply(A,[y*I,I].concat(D))}for(var A=Array(F.length),E=F.length/I,H=[0,4,2,1],G=[8,8,4,2],x=0,K=0;K<4;K++){for(var z=H[K];z>3)&1<<(B&7)){z|=1<=this.data.length){throw Error(\"Attempted to read past end of stream.\")}return m.charCodeAt(this.i++)&255};this.j=function(r){for(var o=[],p=0;p=0;o--){p.push(!!(m&1<.search)}" + } + ] + }, + { + "type": "常用", + "icon": "fire", + "selectTxt": true, + "selectImg": true, + "selectAudio": true, + "selectVideo": true, + "selectLink": true, + "selectPage": true, + "openInNewTab": true, + "sites": [ + { + "name": "谷歌翻译", + "url": "[\"谷歌翻译\"]" + }, + { + "name": "微信搜索", + "url": "[\"微信搜索\"]" + }, + { + "name": "🔎 Everything搜索", + "url": "[\"🔎 Everything搜索\"]" + }, + { + "name": "去除网页限制", + "url": "[\"限制去除\"]" + }, + { + "name": "编辑当前网页", + "url": "[\"编辑当前网页\"]" + }, + { + "name": "小纸条", + "url": "https://u.gitcafe.net/#p{#wp-filter-search-input=%s}" + }, + { + "name": "雕龍", + "url": "https://libvpn.nankai.edu.cn/https/77726476706e69737468656265737421e4fc0f9f222061557d468aa3951b203b/ancientc/ancientkm#p{sleep(1000)&click(.menu_bg>ul>li:nth-child(3)>a)&td>input[type\\=text]=%s&click(input[title\\='查詢'])}" + } + ] + }, + { + "type": "视频", + "icon": "circle-play", + "selectVideo": true, + "openInNewTab": true, + "sites": [ + { + "name": "M3u8播放器", + "url": "https://players.akamai.com/players/hlsjs?streamUrl=%t" + }, + { + "name": "去视频水印", + "url": "https://parse.bqrdh.com/smart/#p{.ant-input=%u&click(.ant-input-search-button)}" + } + ] + }, + { + "type": "AI", + "icon": "robot", + "sites": [ + { + "name": "Bard", + "url": "https://bard.google.com/chat#p{.ql-editor.textarea=%s}", + "icon": "https://www.gstatic.com/lamda/images/favicon_v1_150160cddff7f294ce30.svg" + }, + { + "name": "Poe - Sage AI Chat", + "url": "https://poe.com/#p{sleep(2000)&[class*\\=ChatMessageInputContainer]>textarea=%s&click([class*\\=ChatMessageSendButton])}" + }, + { + "name": "ChatGPT", + "url": "https://chat.openai.com/#p{#prompt-textarea=%s&click(#prompt-textarea+button)}" + }, + { + "name": "Futurepedia - Find The Best AI Tools & Software", + "url": "https://www.futurepedia.io/#p{input[name\\=q]=%s&click(button[type\\=submit]:not([disabled]))}" + } + ] + }, + { + "type": "回收站", + "icon": "recycle", + "match": "0", + "sites": [ + { + "name": "复制知乎回答 ", + "url": "c:%element{.AuthorInfo>[itemprop='name']}.prop(content)\n%element{.CopyrightRichText-richText}\n%element{.ContentItem-time}" + }, + { + "name": "forfrigg", + "url": "http://forfrigg.com/#gsc.tab=0&gsc.q=%s&gsc.sort=", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFQUlEQVR4nMWXT4tlSRHFfxGZee97VdXaOroRBuYbCLpwIaMtbl26Ety7HETQxegX8A8uXLkVP4AwMAgiyKCCqMwoCuKgojjWOI12t1317s3MiHCRr9rpnq56U90LAx6XR76XcfJEnBM3JSIE4DOf/9IL6Y2ffuve2Y6LyCmRn7vF04aKnIvw4kvf+8a3H12TiBAR0U/futU/9fzH+N1vXuPDH/kob56e8tvXfs1nv/JdTDMybZimmQCSCN0DiWA7ZwDWZuSkuEE1Y8qJtXUc+Nvrf+DVV37sL3//m1NE+NsB5ItnRPCn1//I7dtv8de//Jnbt98C4Pf/+A+hGc2NMjdUhGrGunSmOdOqkbPSu7OZM0vttOZMRUmq7JbOsx98jpKT7vPVh9h55Dm+qCIiAIRDb8E8JZII5kavDiIUVUpO4+QetOZYD25sC/OUWKshArUaIvqOPJcCeKhGCtOcuH/ecIIIcAIBzpZKSoIIEFBbZypK92C3jOQi+/VL8lya+CLWarQ26AVwBxxKUXJSlrXjBkiwmQvzlDk7b8yTgkBrRsTl++fLl/YIdX88oHdn7UYQrIuBQskJc8Mddkuj5oQq1OpMKdHE2WwuT3OQARVISVHAAsKCpON0SZXWjW6BR5BzorcOIkgSlto4OS7Uak8OYLd0rAUhMGfh5o2ZIPAY/eEetOqEQ107200ZElwac8ncvbcOwJfEwRLklEhFqatRNoV791dKSeRkJBGON4W1GggIwm7p5KxsN4XajHnKXJTwiRjo3tktFSMwC3IRWuu4D4nulqGOpEJtxnaT6N1Y1g4hIOBP04RzzsxHE0uH6UgokanitO4jcUrjJCIcbTIEnBxPuAVLNVRGoz4xgJITZpCTEAFrdcwckSBrwnHMRj/U1QenaxCM/4gIu6Veuv/BEpwtjbPdikdQu9PMSVmYS2K3jnqHBOFjXYDaHLOg9+B8167c/7AMFTZTZlk6WYWswhgnylwUAqaUEFGmSShJOd4WFCEnmKe0b8THx2EVqGI+ZoGKoCr05qzRcGNvw0LrRm3BWV9JIsxTwh26Ofo2L742AE1KUqEFnC2dpELKwpQTZ2vHHMw6qso8Cds5YR7kJKzNqdWxhyfw9QC4GVOZmEomNOPuRATNgqJK7cZcEq0HhLP04HibaT0oScknBb9ChwcBIEK3YLHG0VHBI8Y7QbNhQONHlCQESgnHA5KCuUOMGXJZHGxCsxhzwIKIQBDOzitTVt57Y0JEhkSB3hxNym7XHshQk1zpAwcBjLnfuHFUEITejZIT1ZxlNbZzQlVQgXmTEAm224wA988bEXBFDx4uQVLBXHCH5n00ZRLqOvzfHTSCtTllEnDoPijPOdFteMITM9B8jNnmTk46qO6BxTAfGVZAKcK6Gr075mNkBwEB7k/RA0rg4eNkFnh3WjOyKrI3JXNHRJhKIgAJwczJ+9LkdzULvPG+9z/Dm6dvcOM9N7lz59+oKh965gTNE5pnQhKigvcgZYEQLIb9XkhN9i+IIkJE4A7JlsMAvJ3zq1/+AoCf/+wVAMrJB7C/v8rjSni1wz8c5+s6WLwKQN7exOoOLVsAnv/kJ3jxq19jXddrpHp81O584ctfvxKAR0QNb5OvQ8M/+eFL/OjlH/Dsxz83Zq0oSALNoBlJGUll/5mQVNBckIs1/V/d651T1rWeAu+g4QEA0/k7mpYXvC0Ko7Onacty985TMxARt+/+659ffByAB3dD4AQ44t3Y8/WjA+fA/UfvhnJxO96DyAxpHpTnNWJ/laE/mvwhAP+v+C9sz+VdwyQu0gAAAABJRU5ErkJggg==" + }, + { + "name": "威锋网", + "url": "https://s.feng.com/index.php?srchtxt=%s", + "icon": "data:image/x-icon;base64,AAABAAEAEBAAAAAAIAAAAwAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAsdJREFUeJyNkl1IUwEUx3+73nbVTV13zaZlsw8VIyvbSkiyeimjHtKHIkSiwCAwhIiIoIceCqJeyqIg6qUoiIigDyOKCsUinPmxMpZmpubH5pz7crve7fZQSSuIztvhnP///M//HN3zL9OaMqOyUtaRKxv4n5gKK5zrCeAtkhEe2lJ5sMTIoX4NZ6/nvwhudI0x5ZhHToaAYALMAlhLjZx+rxCORP8JVtU4LaMxxJ+58HvRF5fodvUAEI6pOIciPOkN0eSa4ONwAABRTGHu2DdGxsEPiH5ABXxe8LU5mb+mmFa3l2tBA2ORcQDMjnymvbD46SgNjgzqNy9k3/kmJjZVoNvRltDiMRh69pZdmR/YsGUbjQYrEXczL2r2I5ksrL90hsRMFGlhGYlOH9e3zyUUDPCs+R26xptPtGHPJKWLjJSXr6ehSyTDnsDVeI3RVg+WiloE5Q0dZ0+w/dVTJOsKClq6ObWn5MdK9TVbZz1ock2g5qXzYGslaeZlFNbUIWWm4r7dTn71cbKLlqDMgRa/Ad9UCDnLmGxi50iALJtI6eF6YgEV962rtB6tZdIdYu2RGkyZ6WgqqFIqx+5+IpZg9hoA6AWJiA9K9uwkz74O5+V7yGuqkB12gsEp/AGJRDydeGCadr2e665gsgJ7joC/L05QA3NhLvLyfLKKV2GwptF74y2Pqg8w8nKQac84WTmZdAz6kgkcS+eR9vELk1/B3eam8/wVoqMfSLPEsFWtIkU00n32JOEBJ4piZnN6IJnAIIkcWR3B8/gzfXe6AcguL0M0yuizC5Hte8mdb6JEjlJncrN70wp0mqZpf77roxdOTly6jyc4g6WiFoDIwHuqlic4XFuJxWya7U0yMRJVuNA8TI/OiliwGke4n4MbFVL1IrYFG7AtyPlzVrKCi68H6SnLQxIgFIVPj72cW6lhX2b5C/grvgPjZxiC9n+r/wAAAABJRU5ErkJggg==" + }, + { + "name": "我的小书屋", + "url": "http://mebook.cc/?s=%s%input{Please select your cup/rare/excellent/So big, A/B/C}", + "icon": "data:image/x-icon;base64,AAABAAEAEBAAAAAAIAC2AQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAX1JREFUeJylk7Gq6mAQhL8NtxMDAdu/DphKUvgCQdKr8SG08DFSWsp5gxT2FrGNIAo2thY2lkqKaKHurY4ajxzk3oGFhf2Zf2bYFdd1lf+A9d2ICO/6jwlUH0Ke+98gIvx5NzDGEEURnucBMJ/PSZKEPM9L71QVec3AGMNkMsG2bbIswxiDMYbNZkO73S4RnE6nsgIRIQxDbNtmOBwynU4BGI1GhGGI53ksFgvyPKcoCm6324NARFDVu8woigDIsozBYMDxeCTPcy6XS9mv67r6Wl9fX/qM5XKpURSpiPysd3twvV6pVqs0m00ajQbdbhfHcWi1WqRpelcMlDNQVfr9PvV6nV6vx3q9BmA2m5EkCb7vk6bp3S487cH5fGa327Hf7wmCgPF4TBAEBEFAp9MBYLvd3j8qZVCr1VRE1LIstSxL4zjWV8Rx/MO/ZVkqlUpFi6J4jQHHcfB9H4DVasXhcCjNvzMQEfnnYxKRRwYvrB8RqGr5GlW1lPAn+Asf+sooQi/6SwAAAABJRU5ErkJggg==" + }, + { + "name": "B-OK", + "url": "http://b-ok.xyz/s/?q=%s", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEN0lEQVR4nOWWTWxUZRSGn3O/+W3Lj7VtaGlri1UUBEy6IPEnRBMTiYFVW6MmJmDUGHDjlo3EpRsTDQmJUSORhYCYYnDhQkCNhJ8FhM4ChKFUBEMJUjrTzsz9vuPiOkOnc6ftlKILz2Ly5TvvOe97zz2578D/PaTWgp7D5+PxTKxXPdoEbUc9dWovR9T83tjceeboc+IvuIDH96U3esIWlD5EZqlRpyq7UftFauDhE/cmQFWe2H+lV8X9CNIwF7GlUrgRcaw/O9CVnpeAtQd+a7EaGQFitRBXCFH+Wqxe2/GBzomwvBd2ufLb4TbfmV33Sg4gwtIxse+v/fJafWh++kWwZNGJsHetxR+pLJwpB6Cq2VR/d4WIigkkMtHXiuRWwVfFE0gYoSluaEka6iMSEN7lpCHi0ZI0NCUMES/I+6o4LU5C6lZ9PfzMjBNYvT/9Ccg2gJgn/LK5g4SREmjCKqpQFwluPjs/RmvSsLGjHqeQ9R1RT4ibIO8UxgqOpw+NIMEUfFS3pwZW7C5yRsrHJP0ioApL4x5JI1wcKzB4ZZw/sparGR+nyprGOM8uS7L10cUAHLw8zrHrE4xkfOojwuoH4rTWGV5sr6c5YYh5QsEpIhJR4U2gUsCaAyPtTm1LcaweglXlw7O3+PnP8gU+dyvPngtjpPq6uJmz7Dh1E2/KLE+P5gDIW+WNlUvKxixI70OfpxPDW7onYcoOOLXrp7+fqhsFiAhOFasaDijWh0Rysekpnj2A3sGrdapsm3uL2hDTwzj7VpmAfME1gnbW3GmWqC5NHuk5fD5eEmCt60JYtuACqikQ7TH5+IMlARiNCWJCsQutCkAlavJ+pCRA8O4o5EKx90OAaCaGnSgJUMst0PH7wVUlbrrJRdmSgNRQxyVROfrv8cuhs6+3ZkoC2ClOhV9nK1OCr2S1nNPq+XKwniweS1/CzB39tGGRfDwV5wEvLK9jU2c9jf8YkRG4lrWcHJ0MGgjseLKRtY0xmhIG38H1CZ/RSUtzMnSvGervPlI8TzOjyzkgpkBzwnDkpfaywpwN3C051Q0VPAmePmcD5yyaUTHWfTOMvTuZ60N9Xa0VEwBw6Mse7BGkYXTS8tTgCDmnZH1FUYq+qChLooafNrWT9ZUN3wW4qXlBWBQVBCmRK5p2YjZP5SwTUKgrfB/Pxr4C3ga4XXAIEDxQuaWMFxzvHb/B7bzDV4hIeR4g4yugpUpP5aNUX+c5KpDTYtW+9EURWRGWm3cox4b6uzZMvw79T6jCu6qMLCD9Cet5tZvd6n3pHxCeBwkVOmsoOYS9Q31dW6tBZmwc1cKrKB/Mj1wVZXsiFt0+E2xOXtO7+1Q009S0xii7FB4TWBLKCTdE9YyqeSc11HGJneJm612T2a07mF6a93WlIK8g0iFKmwqKckUg7am3N5YwF09vXp6tpe9/Gn8DQrStezS4ePUAAAAASUVORK5CYII=" + }, + { + "name": "数字图书馆", + "url": "https://zh.b-ok.cc/s/?q=%s", + "icon": "https://zh.b-ok.cc/favicon.svg" + }, + { + "name": "努努影院", + "url": "https://www.nunuyy1.org/so/%s-%s--.html" + }, + { + "name": "77影院", + "url": "https://www.77zyy.com/vodsearch.html?wd=%s", + "icon": "https://www.77zyy.com/template/vfed1/asset/img/favicon.png" + }, + { + "name": "美剧天堂", + "url": "https://www.meijutt.net/sousuo/index.asp%p{searchword=%s}", + "charset": "GBK" + }, + { + "name": "哔咪动漫", + "url": "https://www.bimiacg4.net/vod/search/%p{wd=%s}", + "description": "哔咪哔咪,火影忍者,海贼王,这里是兴趣使然的无名小站_bimibimi" + }, + { + "name": "💞 AV预览啰嗦版", + "url": "showTips:let javbus='https://www.javbus.com';let avid='%sr.replace(/^(\\w+?)[\\-_]?(\\d+)$/,\"$1-$2\")';let avDatas=await storage.getItem(\"avDatas\");if(!avDatas)avDatas=[];let url=javbus+'/'+avid;let genehtml=(title,img,labels)=>`${title}

${(labels || []).reduce((result, label)=>`${result}${label}`, '')}

`;let d=avDatas.find(avData=>avData.id==avid);if(d)return [genehtml(d.title, d.img, d.labels),url];let doc=await fetch(url).then(r=>r.text()).then(r=>{let doc=document.implementation.createHTMLDocument('');doc.documentElement.innerHTML=r;return doc;}).catch(alert);let title=doc.title;let img=doc.querySelector('a.bigImage>img');let labels=[];doc.querySelectorAll(\".genre a\").forEach(a=>labels.push(a.innerText));if(!img)return;img=javbus+img.getAttribute('src');avDatas.push({id:avid,title:title,img:img,labels:labels});if(avDatas.length>20)avDatas.shift();storage.setItem(\"avDatas\",avDatas);return[`${genehtml(title,img,labels)}`,url];", + "kwFilter": "^[0-9a-zA-Z]+[\\-_]?\\d+$" + }, + { + "name": "💲美元转人民币啰嗦版", + "url": "showTips:let usd2rmb=await storage.getItem(\"usd2rmb\");let usd2rmbUpdate=await storage.getItem(\"usd2rmbUpdate\");if(!usd2rmbUpdate || usd2rmbUpdate > Date.now()+3600000){usd2rmb=await fetch(`https://api.exchangerate.host/convert?from=USD&to=CNY&amount=1`).then(r=>r.json()).then(r=>r.result).catch(alert);storage.setItem(\"usd2rmb\",usd2rmb||7);storage.setItem(\"usd2rmbUpdate\",Date.now());}let usd=\"%sr\".replace(/\\D/g,\"\"); let rmb=(usd * parseFloat(usd2rmb||7)).toFixed(2);return [`${usd} USD = ${rmb} RMB`,rmb]", + "kwFilter": "\\d\\$|\\$\\d" + }, + { + "name": "🔆 高亮关键词", + "url": "javascript:(function()%7Bvar%20count=0,text,dv;text=prompt(%22%E6%90%9C%E7%B4%A2%E9%85%B1%EF%BC%9A%E8%AF%B7%E8%BE%93%E5%85%A5%E9%AB%98%E4%BA%AE%E5%85%B3%E9%94%AE%E8%AF%8D%EF%BC%8Calt%E5%B7%A6%E9%94%AE%E5%8D%95%E5%87%BB%E4%B8%8B%E4%B8%80%E4%B8%AA%EF%BC%8Calt%E5%8F%B3%E9%94%AE%E4%B8%8A%E4%B8%80%E4%B8%AA%EF%BC%8Cr%E8%BF%98%E5%8E%9F%EF%BC%8Cc%7C%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E9%9A%94(%E7%AB%96%E6%9D%A0)%EF%BC%8Co%E5%8E%9F%E5%A7%8B%E6%96%87%E6%9C%AC:%22,%20%22%S%22);if%20(text==null%7C%7Ctext.length==0)return;if(text===%22r%22)%7B%5B%5D.forEach.call(document.querySelectorAll(%22mark.searchJumper%22),mark=%3E%7Blet%20newNode=document.createTextNode(mark.innerText);mark.parentNode.replaceChild(newNode,mark);%7D);return;%7Dif(text.indexOf(%22o%22)===0)%7Btext=%5Btext.substr(1)%5D;%7Delse%20if(text.indexOf(%22c%22)===0)%7Btext=text.substr(1);text=text.substr(1).split(text.substr(0,1));%7Delse%20text=%5Btext%5D;dv=document.defaultView;let%20marks=%7B%7D;let%20focusMark;function%20setFocus(ele)%7BfocusMark.style.border=%22%22;focusMark=ele;focusMark.scrollIntoView(%7Bbehavior:%22smooth%22,block:%22center%22,inline:%22nearest%22%7D);focusMark.style.border=%222px%20dashed%20red%22;%7Dfunction%20searchWithinNode(node,te,len)%20%7Bvar%20pos,skip,spannode,middlebit,middleclone;skip=0;if(node.nodeType==3)%7Bpos=node.data.toUpperCase().indexOf(te);if%20(pos%3E=0)%20%7Blet%20index=marks%5Bte%5D.length;spannode=document.createElement(%22mark%22);spannode.className=%22searchJumper%22;spannode.addEventListener(%22mousedown%22,e=%3E%7Bif%20(!e.altKey)return;if(e.which===1)%7Bif(index!=marks%5Bte%5D.length-1)%7BsetFocus(marks%5Bte%5D%5Bindex+1%5D);%7D%7Delse%20if(e.which===3)%7Bif(index!=0)%7BsetFocus(marks%5Bte%5D%5Bindex-1%5D);%7D%7D%7D);spannode.addEventListener(%22click%22,e=%3E%7Be.stopPropagation();e.preventDefault();return%20false;%7D);middlebit=node.splitText(pos);middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);marks%5Bte%5D.push(spannode);focusMark=spannode;++count;skip%20=%201;%7D%7D%20else%20if%20(node.nodeType==1&&node.childNodes&&node.tagName.toUpperCase()!=%22SCRIPT%22&&node.tagName.toUpperCase()!=%22STYLE%22&&node.tagName.toUpperCase()!=%22MARK%22)%7Bfor%20(var%20child=0;child%3Cnode.childNodes.length;++child)%7Bchild=child+searchWithinNode(node.childNodes%5Bchild%5D,te,len);%7D%7Dreturn%20skip;%7Dtext.forEach(t=%3E%7Bt=t.toUpperCase();marks%5Bt%5D=%5B%5D;searchWithinNode(document.body,t,t.length);%7D)%0A%7D)();" + }, + { + "name": "将svg图片复制为base64", + "url": "javascript:(()=>{let svg=window.targetElement&&window.targetElement.querySelector('svg');if(svg){navigator.clipboard.writeText('data:image/svg+xml;base64,'+btoa(unescape(encodeURIComponent(new XMLSerializer().serializeToString(svg)))));alert(\"copy over!\")}})()" + } + ] + } + ]; + break; + default: + sitesConfig = [ + { + "type": "Image", + "icon": "image", + "sites": [ + { + "name": "Google image", + "url": "https://www.google.com/search?q=%s&tbm=isch", + "match": "www\\.google\\..*tbm=isch" + }, + { + "name": "Bing image", + "url": "https://www.bing.com/images/search?q=%s" + }, + { + "name": "Pixiv", + "url": "http://www.pixiv.net/search.php?word=%s" + }, + { + "name": "Flickr", + "url": "http://www.flickr.com/search/?q=%s" + }, + { + "name": "Pinterest", + "url": "https://www.pinterest.com/search/pins/?q=%s&rs=typed&term_meta" + }, + { + "name": "Yandex image", + "url": "https://yandex.com/images/search?text=%s" + }, + { + "name": "Pixabay", + "url": "https://pixabay.com/images/search/%s/", + "icon": "https://pixabay.com/favicon-32x32.png" + }, + { + "name": "Unsplash", + "url": "https://unsplash.com/s/photos/%s" + }, + { + "name": "500px", + "url": "https://500px.com/search?q=%s" + }, + { + "name": "Deviantart", + "url": "https://www.deviantart.com/browse/all/?q=%s" + }, + { + "name": "Search GIF by ChatGPT", + "url": "https://poe.com/ChatGPT#p{sleep(1000)&[class*\\='ChatMessageInputContainer'] textarea=hey ChatGPT. hope you're having a great day. From now on you will respond to anything I say with the perfect gif response. Once you know what gif you want to use, compile the most accurate and perfect search phrase that will result in the specific gif you want to send. respond with url: \" Sure, I'm happy to help you!\\n http://scythe-spot-carpenter.glitch.me/search?search_term\\=.gif \n%s&click(button[class*\\='ChatMessageSendButton_sendButton'])}" + } + ] + }, + { + "type": "Video", + "icon": "video", + "sites": [ + { + "name": "Youtube", + "url": "https://www.youtube.com/results?search_query=%s" + }, + { + "name": "Niconico", + "url": "http://www.nicovideo.jp/search/%s" + } + ] + }, + { + "type": "News", + "icon": "newspaper", + "sites": [ + { + "name": "Google News", + "url": "https://news.google.com/search?q=%s&hl=zh-CN&gl=CN&ceid=CN:zh-Hans", + "icon": "https://www.google.com/favicon.ico" + }, + { + "name": "CNN", + "url": "https://edition.cnn.com/search/?q=%s" + }, + { + "name": "BBC", + "url": "https://www.bbc.co.uk/search?q=%s" + } + ] + }, + { + "type": "Translate", + "icon": "language", + "sites": [ + { + "name": "DeepL", + "url": "https://www.deepl.com/translator#*/en/%s", + "icon": "https://www.deepl.com/img/favicon/favicon_96.png" + }, + { + "name": "Google translate", + "url": "https://translate.google.com/?text=%s", + "match": "translate\\.google\\.com.*\\btext=" + }, + { + "name": "Bing translate", + "url": "http://www.bing.com/dict/search?q=%s" + }, + { + "name": "Forvo", + "url": "https://www.forvo.com/search/%s" + }, + { + "name": "Translate with ChatGPT", + "url": "https://poe.com/ChatGPT#p{sleep(1000)&[class*\\='ChatMessageInputContainer'] textarea=Please help me to translate \\`%s\\` to English, please return only translated content not include the origin text&click(button[class*\\='ChatMessageSendButton_sendButton'])}" + } + ] + }, + { + "type": "Develop", + "icon": "code", + "sites": [ + { + "name": "MDN", + "url": "https://developer.mozilla.org/zh-CN/search?q=%s" + }, + { + "name": "Stackoverflow", + "url": "https://stackoverflow.com/search?q=%s" + }, + { + "name": "Can I Use", + "url": "http://caniuse.com/#search=%s", + "icon": "https://caniuse.com/img/favicon-128.png" + }, + { + "name": "GitHub", + "url": "https://github.com/search?utf8=✓&q=%s", + "match": "https://github\\.com/search\\?.*&q=" + }, + { + "name": "W3c", + "url": "http://www.runoob.com/?s=%s" + }, + { + "name": "GreasyFork", + "url": "https://greasyfork.org/zh-CN/scripts?q=%s&utf8=✓", + "icon": "https://greasyfork.org/packs/media/images/blacklogo96-b2384000fca45aa17e45eb417cbcbb59.png" + }, + { + "name": "Gen RegExp by AI", + "url": "https://poe.com/ChatGPT#p{sleep(1000)&textarea[class^\\='ChatMessageInput']=Can you help me to write a RegExp which can detect %input{Target,Email address/Phone number} on `%s`&click([class^\\='ChatMessageInputView_sendButton']>button)}", + "openInNewTab": true + } + ] + }, + { + "type": "Wiki", + "icon": "book-open-reader", + "sites": [ + { + "name": "Wikipedia", + "url": "http://en.wikipedia.org/wiki/%s", + "description": "The largest and most-read reference work in history.#wiki" + }, + { + "name": "Quora", + "url": "https://www.quora.com/search?q=%s" + } + ] + }, + { + "type": "Social", + "icon": "users", + "sites": [ + { + "name": "Twitter", + "url": "https://twitter.com/search?q=%s" + }, + { + "name": "Facebook", + "url": "https://www.facebook.com/search/results.php?q=%s" + }, + { + "name": "V2ex", + "url": "https://www.sov2ex.com/?q=%s", + "icon": "https://sov2ex.oss-cn-shanghai.aliyuncs.com/assets/favicon/apple-icon-57x57.png" + } + ] + }, + { + "type": "APP", + "icon": "archive", + "sites": [ + { + "name": "Play", + "url": "https://play.google.com/store/search?q=%s" + }, + { + "name": "Coolapk", + "url": "https://www.coolapk.com/search?q=%s" + }, + { + "name": "Apkpure", + "url": "https://apkpure.com/cn/search?q=%s" + }, + { + "name": "APKMirror", + "url": "https://www.apkmirror.com/?s=%s" + }, + { + "name": "Chrome Store", + "url": "https://chrome.google.com/webstore/search/%s", + "icon": "https://www.google.com/images/icons/product/chrome_web_store-32.png" + } + ] + }, + { + "type": "Music", + "icon": "music", + "sites": [ + { + "name": "Jango", + "url": "https://www.jango.com/music/%s", + "icon": "https://s1.cdn107.com/assets/logos/jango/favicon-32x32-2d45face09da6b62b25031d8b9afeefc9274656a5a969c75e6afc644bf85eb96.png" + }, + { + "name": "QQ Music", + "url": "https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%s" + } + ] + }, + { + "type": "Shopping", + "icon": "shopping-cart", + "sites": [ + { + "name": "Amazon", + "url": "http://www.amazon.cn/s/ref=nb_sb_noss?field-keywords=%s", + "icon": "https://www.amazon.cn/favicon.ico" + }, + { + "name": "1688", + "url": "https://s.1688.com/selloffer/offer_search.htm?keywords=%s" + } + ] + }, + { + "type": "E-book", + "icon": "book", + "sites": [ + { + "name": "Jiumodiary", + "url": "https://www.jiumodiary.com/#p{#SearchWord=%s}", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABi0lEQVR4nJ2VsU4CQRRFzy66GCtLrWysjMbEyi+wNFHBmGDpH1jYWJtAq5WxpoFEorXxB6xs1CBBI4WJVhpNoPBayMAuuzOw3FcwvMe5eTOzy0OYIGCHMk3ayBJf3FMmTxCieotN6lZwMOpsRQzIUBwZNlEk0zdIjwtR7BqQGwsXIicg4HVsgxYBFGzlGS1pepjFHlSSCiUZ/ehQS9rVerJB1eOZeUKapINNXjz14jMbzdhxWImn5oi2dCa3FuObCH85HoJL0o3mIgYeMt0o3qBVbaZ659LlfpOOyCHza5/ewsPjKJXJv0L7ORjhDIwSDnGi+/kxAv6QfAsIvY+At5SxGSxbkEshtKqanpS1PwcmGgN4xfE6hZ4DowXqlitLkh9PlVJe42e8rYvIBr4dG6ANj0mF/ZBBw2Xw7HOX1NY5Hlfd9b2r/1ufmq22gcc18OYyqA39U53Smr3aIosg7zJwRt4MltJYeEn0R9tJavw0NNqEYDvVcM31uH6WgAJVmnSsYIcmVQrh8f4HufpcPqh3SFcAAAAASUVORK5CYII=", + "match": "https://www\\.jiumodiary\\.com" + }, + { + "name": "Forfrigg", + "url": "http://forfrigg.com/#gsc.tab=0&gsc.q=%s&gsc.sort=", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFQUlEQVR4nMWXT4tlSRHFfxGZee97VdXaOroRBuYbCLpwIaMtbl26Ety7HETQxegX8A8uXLkVP4AwMAgiyKCCqMwoCuKgojjWOI12t1317s3MiHCRr9rpnq56U90LAx6XR76XcfJEnBM3JSIE4DOf/9IL6Y2ffuve2Y6LyCmRn7vF04aKnIvw4kvf+8a3H12TiBAR0U/futU/9fzH+N1vXuPDH/kob56e8tvXfs1nv/JdTDMybZimmQCSCN0DiWA7ZwDWZuSkuEE1Y8qJtXUc+Nvrf+DVV37sL3//m1NE+NsB5ItnRPCn1//I7dtv8de//Jnbt98C4Pf/+A+hGc2NMjdUhGrGunSmOdOqkbPSu7OZM0vttOZMRUmq7JbOsx98jpKT7vPVh9h55Dm+qCIiAIRDb8E8JZII5kavDiIUVUpO4+QetOZYD25sC/OUWKshArUaIvqOPJcCeKhGCtOcuH/ecIIIcAIBzpZKSoIIEFBbZypK92C3jOQi+/VL8lya+CLWarQ26AVwBxxKUXJSlrXjBkiwmQvzlDk7b8yTgkBrRsTl++fLl/YIdX88oHdn7UYQrIuBQskJc8Mddkuj5oQq1OpMKdHE2WwuT3OQARVISVHAAsKCpON0SZXWjW6BR5BzorcOIkgSlto4OS7Uak8OYLd0rAUhMGfh5o2ZIPAY/eEetOqEQ107200ZElwac8ncvbcOwJfEwRLklEhFqatRNoV791dKSeRkJBGON4W1GggIwm7p5KxsN4XajHnKXJTwiRjo3tktFSMwC3IRWuu4D4nulqGOpEJtxnaT6N1Y1g4hIOBP04RzzsxHE0uH6UgokanitO4jcUrjJCIcbTIEnBxPuAVLNVRGoz4xgJITZpCTEAFrdcwckSBrwnHMRj/U1QenaxCM/4gIu6Veuv/BEpwtjbPdikdQu9PMSVmYS2K3jnqHBOFjXYDaHLOg9+B8167c/7AMFTZTZlk6WYWswhgnylwUAqaUEFGmSShJOd4WFCEnmKe0b8THx2EVqGI+ZoGKoCr05qzRcGNvw0LrRm3BWV9JIsxTwh26Ofo2L742AE1KUqEFnC2dpELKwpQTZ2vHHMw6qso8Cds5YR7kJKzNqdWxhyfw9QC4GVOZmEomNOPuRATNgqJK7cZcEq0HhLP04HibaT0oScknBb9ChwcBIEK3YLHG0VHBI8Y7QbNhQONHlCQESgnHA5KCuUOMGXJZHGxCsxhzwIKIQBDOzitTVt57Y0JEhkSB3hxNym7XHshQk1zpAwcBjLnfuHFUEITejZIT1ZxlNbZzQlVQgXmTEAm224wA988bEXBFDx4uQVLBXHCH5n00ZRLqOvzfHTSCtTllEnDoPijPOdFteMITM9B8jNnmTk46qO6BxTAfGVZAKcK6Gr075mNkBwEB7k/RA0rg4eNkFnh3WjOyKrI3JXNHRJhKIgAJwczJ+9LkdzULvPG+9z/Dm6dvcOM9N7lz59+oKh965gTNE5pnQhKigvcgZYEQLIb9XkhN9i+IIkJE4A7JlsMAvJ3zq1/+AoCf/+wVAMrJB7C/v8rjSni1wz8c5+s6WLwKQN7exOoOLVsAnv/kJ3jxq19jXddrpHp81O584ctfvxKAR0QNb5OvQ8M/+eFL/OjlH/Dsxz83Zq0oSALNoBlJGUll/5mQVNBckIs1/V/d651T1rWeAu+g4QEA0/k7mpYXvC0Ko7Onacty985TMxARt+/+659ffByAB3dD4AQ44t3Y8/WjA+fA/UfvhnJxO96DyAxpHpTnNWJ/laE/mvwhAP+v+C9sz+VdwyQu0gAAAABJRU5ErkJggg==" + }, + { + "name": "Library Genesis", + "url": "http://gen.lib.rus.ec/search.php?req=%s", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADfElEQVR4nM2XQWgbRxSGv5SFncNSDXQhexB4aQUVRhARDBFOwSEt2PRSU3pI6CFJL8mtLTmEnEoOxYRSQm/pLaE15FCa9NCSQy+FYmQwRQFTVmCCAqJsQIQR7GEWBtrDaFeqsaVdieI+GObtaPa9f2b+9+/o1KtXvb85QXvtJJP/LwA4ZSbv7Bsu33mEEIJACgJfUl+SrDVDLja9uQCcKsuBW/f3ebD9G3gC9Hg8CCs8/uoSb/qmFIDSR3D3RgNZPW0fPEDYFkcv+Wa7XTbcfBy4sBKCBikrBIFtSMHTvV7pWKWPYNJel9XcV0oT9RXL1XJHUJiEz2OHXqyIlUYbjdaA6ZMaS4SKZ0mplGC1UZzbhWaeufYDcX9oHwxgtO2zt3NfWE44sPXpOp9sVI+I9m8rdAQ7keHy7UdonYJwbcIMfpbcpIBr/SRFBhW63300E0AhEq7WHe7d2rBlZwBS+0PmG8Bxx2MCtNZHRJoTAMCHLZ9mawl0apOZ1LYESFIYDG2v7VgYyEJxSynhlXebdJ5281VKv0IYSKQnEA5oA/FAEUUv2VyrF4pZugy/eLC/kPQuDCCzP/sO8cCWpUo0w0QjRvvpCoEUEPhyJtCZR/BLO2E36tHpxvQGGqUUOhkRT2twxHhyXhHjcem7PL539ViBmroD17/e48n3u1bzHWGDZ5Az1h9ejjnUD4a03nmbn7beOzLH1B349uYKwRuC+9u74LnjWp80M1kV2VgGwgVP0IvVsTlmluGdqw1ufHwOBlnyUfnlySdAOIz6CbHCVsfcADIQuQbAeMWOa0GJETCyXZoAZCD05WIAALauXxh57pgLJp0QIcYA9chPUhhoNs6Fx8YtLERnaw71xhLRXjcnpAwqNGsBzbcClqqS0JdIKZCeQCWaqBfzoq/4/FJtcQAAV9brPEw0G2t11lshZ2tHvW7Y2Y9ZbXgsV33AnxpzoQvJYfvx9wEPf+7Q/rXLZzfXuT1l5ZmV2oFJex479AaKZwcx7WcxnShGxUMb0RMoVexrWBjAX8rj2pdP7I1Ia5QaES9TPYHVCgdQKULMCFgWgEo0nb0XNhHYMvMgr4r8nmA1YG0lLBS3cBkuVw1B7TRkWzspRnp8DyAesrl5houNYl/LUiT848Bwd7tNdBATJzpXO+kJAl9QDwM+OB/yfms68+cG8F/Yif85/QdlMHLuJQQjHQAAAABJRU5ErkJggg==" + }, + { + "name": "B-OK", + "url": "http://b-ok.xyz/s/?q=%s", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEN0lEQVR4nOWWTWxUZRSGn3O/+W3Lj7VtaGlri1UUBEy6IPEnRBMTiYFVW6MmJmDUGHDjlo3EpRsTDQmJUSORhYCYYnDhQkCNhJ8FhM4ChKFUBEMJUjrTzsz9vuPiOkOnc6ftlKILz2Ly5TvvOe97zz2578D/PaTWgp7D5+PxTKxXPdoEbUc9dWovR9T83tjceeboc+IvuIDH96U3esIWlD5EZqlRpyq7UftFauDhE/cmQFWe2H+lV8X9CNIwF7GlUrgRcaw/O9CVnpeAtQd+a7EaGQFitRBXCFH+Wqxe2/GBzomwvBd2ufLb4TbfmV33Sg4gwtIxse+v/fJafWh++kWwZNGJsHetxR+pLJwpB6Cq2VR/d4WIigkkMtHXiuRWwVfFE0gYoSluaEka6iMSEN7lpCHi0ZI0NCUMES/I+6o4LU5C6lZ9PfzMjBNYvT/9Ccg2gJgn/LK5g4SREmjCKqpQFwluPjs/RmvSsLGjHqeQ9R1RT4ibIO8UxgqOpw+NIMEUfFS3pwZW7C5yRsrHJP0ioApL4x5JI1wcKzB4ZZw/sparGR+nyprGOM8uS7L10cUAHLw8zrHrE4xkfOojwuoH4rTWGV5sr6c5YYh5QsEpIhJR4U2gUsCaAyPtTm1LcaweglXlw7O3+PnP8gU+dyvPngtjpPq6uJmz7Dh1E2/KLE+P5gDIW+WNlUvKxixI70OfpxPDW7onYcoOOLXrp7+fqhsFiAhOFasaDijWh0Rysekpnj2A3sGrdapsm3uL2hDTwzj7VpmAfME1gnbW3GmWqC5NHuk5fD5eEmCt60JYtuACqikQ7TH5+IMlARiNCWJCsQutCkAlavJ+pCRA8O4o5EKx90OAaCaGnSgJUMst0PH7wVUlbrrJRdmSgNRQxyVROfrv8cuhs6+3ZkoC2ClOhV9nK1OCr2S1nNPq+XKwniweS1/CzB39tGGRfDwV5wEvLK9jU2c9jf8YkRG4lrWcHJ0MGgjseLKRtY0xmhIG38H1CZ/RSUtzMnSvGervPlI8TzOjyzkgpkBzwnDkpfaywpwN3C051Q0VPAmePmcD5yyaUTHWfTOMvTuZ60N9Xa0VEwBw6Mse7BGkYXTS8tTgCDmnZH1FUYq+qChLooafNrWT9ZUN3wW4qXlBWBQVBCmRK5p2YjZP5SwTUKgrfB/Pxr4C3ga4XXAIEDxQuaWMFxzvHb/B7bzDV4hIeR4g4yugpUpP5aNUX+c5KpDTYtW+9EURWRGWm3cox4b6uzZMvw79T6jCu6qMLCD9Cet5tZvd6n3pHxCeBwkVOmsoOYS9Q31dW6tBZmwc1cKrKB/Mj1wVZXsiFt0+E2xOXtO7+1Q009S0xii7FB4TWBLKCTdE9YyqeSc11HGJneJm612T2a07mF6a93WlIK8g0iFKmwqKckUg7am3N5YwF09vXp6tpe9/Gn8DQrStezS4ePUAAAAASUVORK5CYII=" + } + ] + }, + { + "type": "Download", + "icon": "download", + "sites": [ + { + "name": "ThePiratebay", + "url": "https://thepiratebay.org/search/%s", + "icon": "data:image/jpeg;base64,AAABAAEAEBAAAAAAIAA2AgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgCAAAAkJFoNgAAAf1JREFUeJx9kj9r8nAQxy8xLQatGmPtIoiigoKCoAZHyeQutEtBHHRpl7yELq6+AP+8AIcWOxURQRzMIDhEyeLilIKDQYUg+eWeIT48VujzWe4Ovtzd9zgKEeEvl/kVFEXZCWMHVVUlSTIMg6bpK6ndpV6vPz4+nmtE7Pf7v/W2qVQqtvI8gWHOyc3NDSGE4zhCyH6/BwDLshDx9vbWFvxYIJ1Oz+fz5+fnXq8ny3KtVnt/f282m5f2mMtFWZblef50Or2+vjqdTtM0X15eFEWx5/zzhIjtdtsuvV7v5cy7uzuHwwEAhULhdDoh4vVNdF0Ph8MulwsAEomEYRiEEAA4Ho9nD8vlUpIk0zTtToIg5PN5n88HAMViURAEjuMAIBgMMgxDCKHG43GpVHp7e3O73Q8PDxzHHQ4H0zTtVVmWpWmapulcLjcYDKbTKTMcDgFgPB5blhWJRDKZjCiKqVTKPvRut1utVqqqdrvdVquVTqepr6+vz89PRVEajcZiseh0OtvtNhAIxONxTdMMw4jFYqFQ6Pv7W9M0QgiFiJqmJZNJn88XjUbv7+89Hk8ikbAsS5ZlVVV5ns9msx8fH6IoVqtVQMT9fu/3+yVJ0nUdf6Lr+mQyeXp6AoDZbIaIgIimaY5Go+12i7+w2WzK5fJ6vUZE6j8vfQki2h/+B8UpLqpv9VygAAAAAElFTkSuQmCC" + }, + { + "name": "Google cse", + "url": "https://cse.google.com/?q=%s&newwindow=1&cx=006100883259189159113%3Atwgohm0sz8q", + "icon": "https://www.google.com/favicon.ico" + }, + { + "name": "BTDigg", + "url": "https://btdig.com/search?q=%s" + }, + { + "name": "Btsow", + "url": "https://btsow.com/search/%s", + "icon": "https://btsow.bar/app/bts/View/img/favicon.ico", + "match": "btsow\\." + }, + { + "name": "Torrentkitty", + "url": "https://www.torrentkitty.app/search/%s" + }, + { + "name": "Idope", + "url": "https://idope.se/torrent-list/%s", + "icon": "https://idope.se/static/search/pc/img/favicon.ico" + }, + { + "name": "limetorrents.co", + "url": "https://www.limetorrents.co/search/all/%s" + }, + { + "name": "limetorrents.asia", + "url": "https://www.limetorrents.asia/search/all/%s" + }, + { + "name": "limetorrents.pro", + "url": "https://www.limetor.pro/search/all/%s" + }, + { + "name": "Cdsoso", + "url": "https://www.cdsoso.cc/searches-%s-hot-1-null.html" + }, + { + "name": "Sub HD", + "url": "https://subhd.la/search/%s", + "icon": "https://img.huo720.com/favicon-32x32.png" + }, + { + "name": "Subscene", + "url": "https://subscene.com/subtitles/searchbytitle:p{query=%s}" + }, + { + "name": "R3SUB", + "url": "https://r3sub.com/search.php?s=%s" + } + ] + }, + { + "type": "Porn", + "icon": "female", + "sites": [ + { + "name": "JAVlibrary", + "url": "http://www.javlibrary.com/cn/vl_searchbyid.php?keyword=%s", + "icon": "data:image/x-icon;base64,AAABAAEAEBAAAAAAIAA3AQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAP5JREFUeJylkzFKBDEUhr+3SQZdF8vFxmobwT2AtXgHCzsbQbyANuJVbLyAnR7BTlFBrGwUsRBcGdckz2JFd5zMzA7+Vf6Q9+XPSyIfc2fKP9RJznYNZncZpBkgpQQC2fvGjx3Pn7dLIP2seds6gD6N0YccgHj63AiwpQSrPbCC374injy2BHQN7mJtMnbp/v5VYZXZXPo1ruIKsg6yspAGYKeKTBpgj4fo7WgGQEUAffksllQC+g73uk7YukRHAfGKRiXs3dQApurtwYBwdI8Me4gAi5a4f1c+UjroROZwUPAhASj2II/w5iEP4PXbB/zOdeWTLv+FlprttdToC7F9R7urpLwHAAAAAElFTkSuQmCC" + }, + { + "name": "JAVbus", + "url": "https://www.javbus.com/search/%s", + "icon": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAAMxWAADM2wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzNsAAMxWAADM2wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM2wAAzP8AAMz/AADM/wAAzP8AAMz/AADL/wAAzP8BAcz/AADL/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/BATN/0VF2v+Jief/kZHp/15e3/8PD8//AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADL/0hI2v/q6vv//Pz+//b2/f/6+v7/iIjn/wUFzf8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wEBzP+YmOr//////4uL6P9LS9v/4eH5/9zc+P8dHdL/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8CAsz/Skrb/39/5v8oKNT/DAzO/7+/8v/t7fv/Li7V/wAAy/8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAy/8AAMz/AADM/w0Nz/++vvL/7e38/zAw1v8AAMv/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8NDc//vr7y/+3t+/8wMNb/AADL/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/DQ3P/76+8v/t7fv/MDDW/wAAy/8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/w0Nz/++vvL/7e37/zAw1v8AAMv/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8NDc//urrx/+jo+v8vL9X/AADL/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/BATN/0BA2f9QUNz/EBDP/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMv/AADL/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzNsAAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzNsAAMxWAADM2wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/AADM/wAAzNsAAMxWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + }, + { + "name": "Jable", + "url": "https://jable.tv/search/%s", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAmklEQVQ4jWP4m9xX9y+p9+e/pL7/pOHen3+T++oYyNMMxz8ZKND8/19S33/CBmRM+v9v3dH//5qWkmlA/vT///////9v8d5RAxbvoacByf0IdvcaiAEzt5FgwPxd//89efP/351n////+v3//5uP///lTCXBgKKZkEDbcOz/vwW7///LnUZBSiSAKcxMvT8ZyM/OfT//J/fVAQB8gvyNVegtUAAAAABJRU5ErkJggg==" + }, + { + "name": "PornHub", + "url": "https://cn.pornhub.com/video/search?search=%s", + "icon": "data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABorAAACAwAAwP8AAG+5AAA0VgAAUYkAAInkAAA/aQAAMFEAAJf/AABZlAAAmv8AAGSnAAAaLAAAERwAAKP/AABHZAAABAcAAC0xAACp/wAArP8AALL/AABDcAAAbowAAI/uAAAKEAAAht4AALv/AAAtSwAAiOEAAI3sAACV/wAAmP8AAJv/AAABAQAAnv8AAHrHAABlpwAA//8AAND/AACh/wAAiOIAAC9PAABqsgAApP8AAEVkAABJegAAp/8AADFSAACq/wAAGSoAAAECAACt/wAAM1UAAIjjAAA+aAAAfcgAALb/AAAdMAAAT4MAADpjAABAawAAuf8AAAsQAAC//wAAAAYAAML/AAADBgAACQ4AAMX/AACW/wAAmf8AADdcAACc/wAAn/8AABAcAABRhwAAov8AAIXdAADX/wAAqP8AAKv/AACQ8AAAWI0AAC5NAACx/wAAIEMAALT/AACF3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISAxISEhISCIiSEgMIkhICkpWLSBIIUg1MEcgEDUiCk4ZCAQUSCQiMTwUNQ0xHxBSTwAvQ0sQSgAzWBw4AFkyUSoABjpOPykANihQCwA3UVEHAjRCRVQyD0wuETs0B1FRNyNVGAkAJh0CGkASAgdRUR4ALCdOAD0BVUFGTQA3UVIbAEQTAAA5AA4/Az4AWTJOUxcFV0klNSs8FDUNMR8QCkoWFhZYNSEVMEcgEDUiCkhIDAwMSEhIIiJISAwiSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + } + ] + }, + { + "type": "Search", + "icon": "search", + "sites": [ + { + "name": "Google", + "url": "https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8", + "match": "https://www\\.google\\..*/search", + "charset": "utf-8", + "keywords": "textarea[name='q']", + "shortcut": "g", + "alt": true + }, + { + "name": "Google advanced", + "url": "https://www.google.com/search?q=%s%input{Filetype, filetype:doc/ filetype:ppt/ filetype:xls/ filetype:pdf}%input{Limit lang/zh-CN/zh-TW/CN/EN,&lr=lang_zh-CN/&lr=lang_zh-TW/&lr=lang_zh-CN|lang_zh-TW/&lr=lang_en}%input{Limit date/Last hour/Last day/Last week/Last month/Last year,&as_qdr=h1/&as_qdr=d1/&as_qdr=w1/&as_qdr=m1/&as_qdr=y1}&ie=utf-8&oe=utf-8", + "match": "https://www\\.google\\..*/search", + "hideNotMatch": true + }, + { + "name": "SearX", + "url": "https://searx.be/search?q=%s" + }, + { + "name": "You", + "url": "https://you.com/search?q=%s", + "icon": "https://you.com/favicon/favicon-32x32.png" + }, + { + "name": "Bing", + "url": "https://www.bing.com/search?q=%s" + }, + { + "name": "DuckDuckGo", + "url": "https://duckduckgo.com/?q=%s" + }, + { + "name": "Yahoo", + "url": "https://search.yahoo.com/search;?p=%s" + }, + { + "name": "Yandex", + "url": "https://yandex.com/search/?text=%s" + }, + { + "name": "Startpage", + "url": "https://www.startpage.com/sp/search?query=%s", + "icon": "https://www.startpage.com/sp/cdn/favicons/favicon-16x16--default.png" + }, + { + "name": "Fsou", + "url": "https://fsoufsou.com/search?q=%s" + }, + { + "name": "Qwant", + "url": "https://www.qwant.com/?q=%s" + }, + { + "name": "Ecosia", + "url": "https://www.ecosia.org/search?method=index&q=%s", + "icon": "https://cdn-static.ecosia.org/static/icons/favicon.ico" + }, + { + "name": "Brave", + "url": "https://search.brave.com/search?q=%s", + "icon": "https://cdn.search.brave.com/serp/v1/static/brand/16c26cd189da3f0f7ba4e55a584ddde6a7853c9cc340ff9f381afc6cb18e9a1e-favicon-32x32.png" + } + ] + }, + { + "type": "Search in page", + "icon": "sitemap", + "selectTxt": true, + "openInNewTab": true, + "sites": [ + { + "name": "Google ", + "url": "[\"Google\"]" + }, + { + "name": "📏 Mile to Km", + "url": "showTips:let s=\"%sr\".match(/(\\d+)(mi(le)?)/)[1];return `${s} mi = ${(s*1.609344).toFixed(2)} km`;", + "kwFilter": "\\d+\\s*(mi(le)?\\b)" + }, + { + "name": "💲USD to RMB", + "url": "showTips:http://apilayer.net/api/convert?from=USD&to=CNY&amount=1&access_key=%template{apilayer key} \n{name}
%s USD = {json.result|*%s.replace(/\\D/,'')} RMB", + "kwFilter": "\\d\\$|\\$\\d" + }, + { + "name": "Google Search in site", + "url": "https://www.google.com/search?q=%s%20site%3A%h&ie=utf-8&oe=utf-8" + }, + { + "name": "📄 Copy", + "url": "c:%sr" + }, + { + "name": "🔆 Find in page", + "url": "find:%sr" + }, + { + "name": "🔗 Open text link", + "url": "%sr.replace(/。/g,\".\").replace(/[^ \\w\\-_\\.~!\\*'\\(\\);:@&=\\+\\$,\\/\\?#\\[\\]%]/g,\"\").replace(/ /g,\"\").replace(/^/,\"http://\").replace(/^http:\\/\\/(https?:)/,\"$1\")", + "kwFilter": "\\w.*[\\.。].*\\w|1[a-zA-Z0-9]{22,}", + "nobatch": true + }, + { + "name": "Words to qrcode", + "url": "https://hoothin.com/qrcode#%s", + "icon": "https://hoothin.com/qrcode/favicon.svg" + }, + { + "name": "IMDb rating", + "url": "showTips:let query = \"%s\";\nlet url = `https://www.imdb.com/find/?q=${query}&exact=true`;\nlet geneHTML = (title, intro, labels, director, writer, stars, image, rating, year) => {\nif (!title) return \"No result\";\nreturn `\n

\n${title}\n${rating}\n

\n
\n\n
\n
${labels.reduce((r, c) => `${r}${c}`, \"\")}
\n
Year: ${year}
\n
Director: ${director}
\n
Writer: ${writer}
\n
Stars: ${stars}
\n
${intro}
\n
\n
`;};\nlet imdbData = await storage.getItem(\"imdbData\");\nif (!imdbData) imdbData=[];\nlet d = imdbData.find(data => data.query == query);\nif (d) {\nd = d.data;\nreturn[geneHTML(d.title, d.intro, d.labels, d.director, d.writer, d.stars, d.image, d.rating, d.year), url];\n}\nlet result = await fetch(url).then(r => r.text()).then(async r => {\nlet doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = r;\nlet item = doc.querySelector('.find-title-result .ipc-metadata-list-summary-item__t');\nif (!item) return null;\nlet _result = {title: item.innerText};\nurl = \"https://www.imdb.com/\" + item.getAttribute(\"href\");\nawait fetch(url).then(r => r.text()).then(r => {\nlet doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = r;\n_result.image = doc.querySelector(\".ipc-image\").src;\n_result.year = doc.querySelector(\"h1+ul>li>.ipc-link\").innerText;\n_result.intro = doc.querySelector(\"section>p>span\").innerText;\n_result.labels = [];\n[].forEach.call(doc.querySelectorAll(\"a.ipc-chip\"), ele => {\n_result.labels.push(ele.innerText)\n});\n_result.director = [];\n[].forEach.call(doc.querySelectorAll(\"section>div>div>.title-pc-list>li:nth-child(1) li\"), ele => {\n_result.director.push(ele.innerText)\n});\n_result.director = _result.director.join(\"/\");\n_result.writer = [];\n[].forEach.call(doc.querySelectorAll(\"section>div>div>.title-pc-list>li:nth-child(2) li\"), ele => {\n_result.writer.push(ele.innerText)\n});\n_result.writer = _result.writer.join(\"/\");\n_result.stars = [];\n[].forEach.call(doc.querySelectorAll(\"section>div>div>.title-pc-list>li:nth-child(3) li\"), ele => {\n_result.stars.push(ele.innerText)\n});\n_result.stars = _result.stars.join(\"/\");\n_result.rating = doc.querySelector(\".ipc-btn__text>div>div>div\").innerText;\n});\nreturn _result;\n}).catch(alert);\nif (!result) result = {};\nimdbData.push({query:query, data:result});\nif (imdbData.length > 50) imdbData.shift();\nstorage.setItem(\"imdbData\", imdbData);\nd = result;\nreturn[geneHTML(d.title, d.intro, d.labels, d.director, d.writer, d.stars, d.image, d.rating, d.year), url];", + "icon": "https://www.imdb.com/favicon.ico" + }, + { + "name": "💞 AV preview", + "url": "showTips:https://www.javbus.com/%sr.replace(/^(\\w+?)[\\-_]?(\\d+)$/,\"$1-$2\") \n{h3}\n

{.info>p:nth-child(2)}

\n

{.info>p:nth-child(6)}

\n

{.genre a|()}

\n", + "kwFilter": "^[0-9a-zA-Z]+[\\-_]?\\d+$" + }, + { + "name": "📦 Batch open links", + "url": "%s[all]", + "kwFilter": "^https?:" + }, + { + "name": "Magnet2Torrent-lolicon", + "url": "https://m2t.lolicon.app/#p{#magnet=%s}", + "kwFilter": "^magnet:", + "nobatch": true + }, + { + "name": "Magnet-vip", + "url": "https://magnet-vip.com/#p{.form-group input=%s&click(.btn-outline-secondary)}", + "icon": "https://magnet-vip.com/favicon.png", + "kwFilter": "^magnet:", + "nobatch": true + }, + { + "name": "↩️ Short link restore", + "url": "showTips:%s\n{url}", + "kwFilter": "^https?://." + } + ] + }, + { + "type": "Web cache", + "icon": "clock-rotate-left", + "selectPage": true, + "openInNewTab": true, + "sites": [ + { + "name": "Wayback Machine all", + "url": "https://web.archive.org/web/*/%u", + "icon": "https://web.archive.org/_static/images/archive.ico" + }, + { + "name": "Wayback Machine", + "url": "https://web.archive.org/web/%u", + "icon": "https://web.archive.org/_static/images/archive.ico" + }, + { + "name": "Google cache", + "url": "https://webcache.googleusercontent.com/search?q=cache:%u" + }, + { + "name": "Google cache text", + "url": "https://webcache.googleusercontent.com/search?strip=1&q=cache:%u" + }, + { + "name": "Bing cache", + "url": "https://www.bing.com/search?q=url:%u&go=Search&qs=bs&form=QBRE#p{click(ol#b_results li.b_algo:first-of-type div.b_attribution a.trgr_icon)&open(ol#b_results li.b_algo:first-of-type div.b_attribution a[href*\\=\"cc.bingj.com/cache\"])}" + }, + { + "name": "Archive.is", + "url": "https://archive.is/newest/%u" + }, + { + "name": "Archive.is all", + "url": "https://archive.is/%u" + }, + { + "name": "Memento", + "url": "http://timetravel.mementoweb.org/memento/0/%u", + "icon": "http://mementoweb.org/static/css/images/timetravel_logo_20x20.png" + }, + { + "name": "Megalodon", + "url": "https://megalodon.jp/?url=%u" + }, + { + "name": "Yahoo cache", + "url": "https://search.yahoo.com/search?p=url:%u#p{open(#results li:first-of-type a[href*\\=\"cc.bingj.com/cache\"], #results li:first-of-type a[href*\\=\"cc.bingj.com%2fcache\"])}" + }, + { + "name": "Ghostarchive", + "url": "https://ghostarchive.org/search?term=%u" + }, + { + "name": "WebCite", + "url": "https://webcitation.org/query?url=%u" + } + ] + }, + { + "type": "Search by image", + "icon": "eye", + "selectImg": true, + "openInNewTab": true, + "sites": [ + { + "name": "Google Search by image", + "url": "https://www.google.com/searchbyimage?image_url=%t" + }, + { + "name": "Google translate image", + "url": "https://translate.google.com/?op=images#p{input[accept^\\=\"image\"]=%i}" + }, + { + "name": "Lunapic editor", + "url": "https://www.lunapic.com/editor/index.php?action=url&url=%t", + "nobatch": true + }, + { + "name": "Pixlr easy editor", + "url": "https://pixlr.com/x/#p{click(#home-open-url)&#image-url=%t&click(.dialog>.buttons>a.button.positive)}", + "nobatch": true + }, + { + "name": "Photopea editor", + "url": "https://www.photopea.com/#%7B%22files%22:%5B%22%t%22%5D,%22environment%22:%7B%7D%7D", + "nobatch": true + }, + { + "name": "Gif controller", + "url": "javascript:(function(){var n=null,C=false;function h(m){d(m,\"jsgif_overlaid\");m.removeEventListener(\"click\",i,C)}function i(m){var o=this;c.forEach(h);setTimeout(function(){j(o)},0);m.preventDefault()}function d(m,p){var o=m.className.split(/s/).filter(function(r){return r!==p});m.className=g(o,\" \")}function g(m,o){if(o===undefined){o=\"\"}return m.reduce(function(p,r){return p+o+r},\"\")}function j(ai){function ag(p,m){return function(q){p(q);T(m)}}function ac(){}function T(m){ab(\"Decoding (frame \"+(M.length+1)+\")...\",Z.i,Z.data.length,m)}function I(){G=C;o.insertBefore(ai,L);o.removeChild(L)}function F(){N&&M.push({data:N.getImageData(0,0,ae.width,ae.height),f:Y})}function V(m){af=m;ae={width:ai.width,height:ai.height};M=[];O.fillStyle=\"black\";O.fillRect(0,0,ae.width,ae.height);O.strokeStyle=\"red\";O.lineWidth=3;O.moveTo(0,0);O.lineTo(ae.width,ae.height);O.moveTo(0,ae.height);O.lineTo(ae.width,0);O.stroke();setTimeout(x,0)}function ah(m){m.lengthComputable&&ab(\"Loading...\",m.loaded,m.total,true)}function ab(u,p,r,t){K.style.visibility=p===r?\"\":\"visible\";if(t){t=Math.min(J.height>>3,J.height);var q=J.height-t>>1,m=p/r*J.width;O.fillStyle=\"rgba(255,160,122,0.5)\";O.fillRect(m,q,J.width-m,t);O.fillStyle=\"rgba(0,128,128,0.5)\";O.fillRect(0,q,p/r*J.width,t)}K.innerHTML=u+\" \"+Math.floor(p/r*100)+\"%\"}function ad(){try{b(Z,aj)}catch(m){V(\"parse\")}}var Z,ae,af=n,U=n,Y=n,w=n,s=n,N=n,G=true,P=true,M=[],x=function(){function y(){function S(){G=!G;aa();W.focus();u()}function aa(){if(G){W.innerHTML=\"❙❙\";W.title=\"Pause\";R.style.visibility=\"hidden\";Q.style.visibility=\"hidden\"}else{W.innerHTML=P?\"▶\":\"◀\";W.title=\"Play\";R.style.visibility=\"\";Q.style.visibility=\"\"}K.style.visibility=r?\"visible\":\"\";z.style.display=m?\"\":\"none\";E.innerHTML=\"i\";E.title=\"Show info/more tools\";D.innerHTML=P?\"←\":\"→\";D.title=P?\"Reverse\":\"Un-reverse\";R.innerHTML=\"◀❙\";R.title=\"Previous frame\";Q.innerHTML=\"❙▶\";Q.title=\"Next frame\";B.innerHTML=r?\"○\":\"⊙\";B.title=r?\"Unpin\":\"Pin\";A.innerHTML=\"✖\";A.title=\"Close jsgif and go back to original image\";v.disabled=G;q.disabled=G;K.innerHTML=\"\";H.innerHTML=\"\";z.innerHTML=\"\";if(M.length<2){if(af==\"xhr\"){K.appendChild(document.createTextNode(\"Load failed; cross-domain? \"));var al=ak(\"button\",\"popup\");al.addEventListener(\"click\",function(){window.open(ai.src)});al.innerHTML=\"↗\";al.title=\"Click to open GIF in new window; try running jsgif there instead\";K.appendChild(al)}else{af==\"parse\"&&K.appendChild(document.createTextNode(\"Parse failed \"))}K.appendChild(A)}else{al=function(an,ao){an.innerHTML=\"\";ao.forEach(function(ap){an.appendChild(ap)})};var am=P?[E,D,R,W,Q,B,A]:[E,D,Q,W,R,B,A];al(K,[H,z]);al(H,am);al(z,[document.createTextNode(\" frame: \"),v,document.createTextNode(\" / \"),document.createTextNode(M.length),document.createTextNode(\" (delay: \"),q,document.createTextNode(\")\")])}}function ak(am,an,al){am=document.createElement(am);if(an){am.className=\"jsgif_\"+an}for(var ao in al){am[ao]=al[ao]}return am}var H=ak(\"div\",\"simple_tools\"),D=ak(\"button\",\"rev\"),E=ak(\"button\",\"show_info\"),R=ak(\"button\",\"prev\"),W=ak(\"button\",\"play_pause\"),Q=ak(\"button\",\"next\"),B=ak(\"button\",\"pin\"),A=ak(\"button\",\"close\"),z=ak(\"div\",\"info_tools\");v=ak(\"input\",\"cur_frame\",{type:\"text\"});q=ak(\"input\",\"delay_info\",{type:\"text\"});E.addEventListener(\"click\",function(){m=!m;aa();E.focus()},C);D.addEventListener(\"click\",function(){P=!P;aa();D.focus()},C);v.addEventListener(\"change\",function(){var al=+v.value;if(isNaN(al)||al<1||al>M.length){v.value=t+1}else{t=al-1;O.putImageData(M[t].data,0,0)}},C);R.addEventListener(\"click\",function(){p(-1)},C);W.addEventListener(\"click\",S,C);Q.addEventListener(\"click\",function(){p(1)},C);B.addEventListener(\"click\",function(){r=!r;aa();B.focus()},C);A.addEventListener(\"click\",I,C);q.addEventListener(\"change\",function(){var al=+q.value;if(!isNaN(al)){M[t].f=al}},C);J.addEventListener(\"click\",S,C);L.addEventListener(\"click\",function(al){al.preventDefault()},C);aa()}function p(z){t=(t+z+M.length)%M.length;v.value=t+1;q.value=M[t].f;O.putImageData(M[t].data,0,0)}var t=-1,v,q,m=C,r=C,u=function(){function z(){if(A=G){p(P?1:-1);var B=M[t].f*10;B||(B=100);setTimeout(z,B)}}var A=C;return function(){A||setTimeout(z,0)}}();return function(){setTimeout(y,0);if(!af){J.width=ae.width;J.height=ae.height;u()}}}(),aj={p:ag(function(m){ae=m;J.width=ae.width;J.height=ae.height;L.style.width=ae.width+\"px\";K.style.minWidth=ae.width+\"px\";X.width=ae.width;X.height=ae.height}),o:ag(function(m){F();Y=U=n;s=w;N=w=n;U=m.L?m.M:n;Y=m.u;w=m.v}),m:ag(ac),c:{l:ag(ac)},q:ag(function(q){N||(N=X.getContext(\"2d\"));var m=q.r?q.C:ae.w,p=N.getImageData(q.g,q.k,q.width,q.height);q.h.forEach(function(t,r){if(U!==t){p.data[r*4+0]=m[t][0];p.data[r*4+1]=m[t][1];p.data[r*4+2]=m[t][2];p.data[r*4+3]=255}else{if(s===2||s===3){p.data[r*4+3]=0}}});N.putImageData(p,q.g,q.k);O.putImageData(p,q.g,q.k)},true),n:function(){F();T(C);K.innerHTML=\"Playing...\";x()}},o=ai.parentNode,L=document.createElement(\"div\"),J=document.createElement(\"canvas\"),O=J.getContext(\"2d\"),K=document.createElement(\"div\"),X=document.createElement(\"canvas\");J.width=ai.width;J.height=ai.height;K.style.minWidth=ai.width+\"px\";L.className=\"jsgif\";K.className=\"jsgif_toolbar\";L.appendChild(J);L.appendChild(K);o.insertBefore(L,ai);o.removeChild(ai);K.innerHTML=\"Loading...\";(function(){var m=new XMLHttpRequest;m.overrideMimeType(\"text/plain; charset=x-user-defined\");m.onload=function(){Z=new f(m.responseText);setTimeout(ad,0)};m.onprogress=ah;m.onerror=function(){V(\"xhr\")};m.open(\"GET\",ai.src,true);m.send()})()}function b(o,u){function r(){var q={};q.s=o.a();switch(String.fromCharCode(q.s)){case\"!\":q.type=\"ext\";p(q);break;case\",\":q.type=\"img\";s(q);break;case\";\":q.type=\"eof\";u.n&&u.n(q);break;default:throw Error(\"Unknown block: 0x\"+q.s.toString(16))}q.type!==\"eof\"&&setTimeout(r,0)}function s(q){function v(F,I){function J(y,B){var D=F.slice(B*I,(B+1)*I);A.splice.apply(A,[y*I,I].concat(D))}for(var A=Array(F.length),E=F.length/I,H=[0,4,2,1],G=[8,8,4,2],x=0,K=0;K<4;K++){for(var z=H[K];z>3)&1<<(B&7)){z|=1<=this.data.length){throw Error(\"Attempted to read past end of stream.\")}return m.charCodeAt(this.i++)&255};this.j=function(r){for(var o=[],p=0;p=0;o--){p.push(!!(m&1<button)}", + "icon": "https://s.hoothin.com/images/favicon-96x96.png" + }, + { + "name": "Bing Search in site", + "url": "https://www.bing.com/search?q=%s%20site%3A%h" + }, + { + "name": "Duckduckgo Search in site", + "url": "https://duckduckgo.com/?q=%s%20site%3A%h" + }, + { + "name": "Yahoo Search in site", + "url": "https://search.yahoo.com/search;?p=%s%20site%3A%h" + }, + { + "name": "Yandex Search in site", + "url": "https://yandex.com/search/?text=%s%20site%3A%h" + }, + { + "name": "Startpage Search in site", + "url": "https://www.startpage.com/sp/search?query=%s%20site%3A%h", + "icon": "https://www.startpage.com/sp/cdn/favicons/favicon-16x16--default.png" + }, + { + "name": "Douban rating", + "url": "showTips:https://www.douban.com/search?cat=1002&q=%s \n

\n{h3>a}\n{.rating_nums}\n

\n
\na>img|src}\"/>\n
\n
{.subject-cast}
\n
{.content>p}
\n
\n
", + "icon": "https://www.douban.com/favicon.ico" + }, + { + "name": "Metacritic rating", + "url": "showTips:https://www.metacritic.com/autosearch%p{search_term=%s&image_size=98&search_each=false}\n
\n\n
\n

{json.autoComplete.results.0.name}

\n
\n{json.autoComplete.results.0.refType}\n{json.autoComplete.results.0.itemDate}\n{json.autoComplete.results.0.metaScore}\n
\n
\n
", + "icon": "https://www.metacritic.com/favicon.ico" + }, + { + "name": "Preview wikipedia", + "url": "showTips:https://en.wikipedia.org/wiki/%s\n
\nimg|src}\"/>\n{.mw-parser-output>p}\n
" + }, + { + "name": "Google lens", + "url": "https://www.google.com/imghp#p{click([aria-label\\=\"Search by image\"])&[name\\=\"encoded_image\"]=%i}", + "description": "Search for clipboard images" + }, + { + "name": "🛠️ Copy selected(pic&link)", + "url": "c:%element{}" + }, + { + "name": "🛠️ Copy selected(txt(link))", + "url": "c:%element{}.replace(/!\\[.*?\\]\\(.*?\\)/g,\"\").replace(/\\[ *\\]\\(.*?\\)\\s*/g,\"\").replace(/\\[((.|\\n)*?)\\](\\(.*?\\))/g,\"$1$3\")" + }, + { + "name": "🛠️ Copy selected({ txt | link })", + "url": "c:%element{}.replace(/!\\[.*?\\]\\(.*?\\)/g,\"\").replace(/\\[\\s*\\]\\(.*?\\)\\s*/g,\"\").replace(/\\[((.|\\n)*?)\\]\\((.*?)\\)/g,\"{ $1 | $3 }\")" + } + ] + }, + { + "type": "Page", + "icon": "list", + "selectLink": true, + "selectPage": true, + "openInNewTab": true, + "sites": [ + { + "name": "Search cache", + "url": "https://2tool.top/kuaizhao.php?k=%u", + "icon": "data:image/svg+xml,%3Csvg xmlns=\"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\" width=\"1em\" height=\"1em\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 256 256\"%3E%3Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"%3E%3Cpath d=\"M 239.98507%2C55.993592 A 111.98507%2C39.994664 0 0 1 128%2C95.988256 111.98507%2C39.994664 0 0 1 16.01493%2C55.993592 111.98507%2C39.994664 0 0 1 128%2C15.998927 111.98507%2C39.994664 0 0 1 239.98507%2C55.993592 Z\"%2F%3E%3Cpath d=\"m 239.98507%2C199.97441 a 111.98507%2C39.994664 0 0 1 -55.99253%2C34.63639 111.98507%2C39.994664 0 0 1 -111.985079%2C0 111.98507%2C39.994664 0 0 1 -55.992531%2C-34.6364\"%2F%3E%3Cpath d=\"m 239.98507%2C151.9808 a 111.98507%2C39.994664 0 0 1 -55.99253%2C34.6364 111.98507%2C39.994664 0 0 1 -111.985079%2C-1e-5 A 111.98507%2C39.994664 0 0 1 16.01493%2C151.9808\"%2F%3E%3Cpath d=\"m 239.98507%2C103.9872 a 111.98507%2C39.994664 0 0 1 -55.99253%2C34.6364 111.98507%2C39.994664 0 0 1 -111.985079%2C0 111.98507%2C39.994664 0 0 1 -55.992531%2C-34.6364\"%2F%3E%3Cpath d=\"M 16.01493%2C55.99377 V 199.97441\"%2F%3E%3Cpath d=\"M 239.98507%2C55.993592 V 199.97441\"%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E" + }, + { + "name": "Web archive", + "url": "https://web.archive.org/web/*/%u", + "icon": "https://web.archive.org/_static/images/archive.ico" + }, + { + "name": "Save archive", + "url": "https://web.archive.org/save/%u", + "icon": "https://web.archive.org/_static/images/archive.ico" + }, + { + "name": "Edit current page", + "url": "javascript:(function(){document.body.setAttribute('contenteditable', 'true');alert('Now you can modify the page, cancel by ESC');document.onkeydown = function (e) {e = e || window.event;if(e.keyCode==27){document.body.setAttribute('contenteditable', 'false');}}})();" + }, + { + "name": "Open url", + "url": "%t", + "icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiPjxwYXRoIGQ9Ik03MjIuOCA0NTlsLTE4LjkgMTguOS0yLjcgMi43LTQuNyA0LjgtNTIuNyA1Mi43IDI2LjMgMjYuMyA1Mi43LTUyLjcgMTg0LjQgMTg0LjQtMjEwLjcgMjEwLjgtMTg0LjQtMTg0LjQgNTIuNi01Mi43LTI2LjMtMjYuNC01Mi43IDUyLjctMjYuMyAyNi40IDIzNy4xIDIzNy4xIDI2My40LTI2My41eiIgZmlsbD0iIzA2MDAwMSIvPjxwYXRoIGQ9Ik0zMjcuNyAzNTMuNmwzNDIuNSAzNDIuNSAyNi4zLTI2LjNMMzU0IDMyNy4zeiIgZmlsbD0iIzA2MDAwMSIvPjxwYXRoIGQ9Ik0zMDEuMyA1MTEuN0wxMTYuOSAzMjcuM2wyMTAuOC0yMTAuN0w1MTIuMSAzMDFsLTUyLjcgNTIuNiAyNi4zIDI2LjQgNTIuNy01Mi43IDI2LjMtMjYuNC0yMzctMjM3TDY0LjIgMzI3LjNsMjM3LjEgMjM3LjEgMjYuMy0yNi4zIDUyLjgtNTIuN0wzNTQgNDU5eiIgZmlsbD0iIzA2MDAwMSIvPjwvc3ZnPg==", + "description": "ctrl: backTab | alt: mini-window | ctrl+shift: inPrivate", + "openInNewTab": true + }, + { + "name": "Copy target svg to base64", + "url": "javascript:(()=>{let svg=window.targetElement&&window.targetElement.querySelector('svg');if(svg){navigator.clipboard.writeText('data:image/svg+xml;base64,'+btoa(unescape(encodeURIComponent(new XMLSerializer().serializeToString(svg)))));alert(\"copy over!\")}})()" + } + ] + } + ]; + break; +} \ No newline at end of file From 98ae82bdfcb12277145a39b2705d777fe72f11a5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 7 Jan 2024 16:33:27 +0800 Subject: [PATCH 623/812] Update searchJumperDefaultConfig.js --- SearchJumper/searchJumperDefaultConfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js index e0581f7e432..402c7d3df40 100644 --- a/SearchJumper/searchJumperDefaultConfig.js +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -2394,7 +2394,7 @@ switch (lang) { }, { "name": "Google advanced", - "url": "https://www.google.com/search?q=%s%input{Filetype, filetype:doc/ filetype:ppt/ filetype:xls/ filetype:pdf}%input{Limit lang/zh-CN/zh-TW/CN/EN,&lr=lang_zh-CN/&lr=lang_zh-TW/&lr=lang_zh-CN|lang_zh-TW/&lr=lang_en}%input{Limit date/Last hour/Last day/Last week/Last month/Last year,&as_qdr=h1/&as_qdr=d1/&as_qdr=w1/&as_qdr=m1/&as_qdr=y1}&ie=utf-8&oe=utf-8", + "url": "https://www.google.com/search?q=%s%input{Filetype, filetype:doc/ filetype:ppt/ filetype:xls/ filetype:pdf}%input{Limit lang/zh-CN/zh-TW/zh-ALL/JA/EN,&lr=lang_zh-CN/&lr=lang_zh-TW/&lr=lang_zh-CN|lang_zh-TW/&lr=lang_ja/&lr=lang_en}%input{Limit date/Last hour/Last day/Last week/Last month/Last year,&as_qdr=h1/&as_qdr=d1/&as_qdr=w1/&as_qdr=m1/&as_qdr=y1}&ie=utf-8&oe=utf-8", "match": "https://www\\.google\\..*/search", "hideNotMatch": true }, From b74bed2f07157cc54d34a5093867709799af8e79 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 7 Jan 2024 19:58:17 +0800 Subject: [PATCH 624/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 508 +++++++++--------------------- 1 file changed, 146 insertions(+), 362 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a52b920e6a9..364c46f0dfb 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,9 +4,9 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.62 -// @description Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. Additionally, it allows for the selection of text, images, or links to be searched on any search engine with a simple right-click or by utilizing a range of menus and shortcuts. -// @description:zh-CN 高效搜索辅助,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 +// @version 1.7.63 +// @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. +// @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 // @description:ja 任意の検索エンジンにすばやく簡単にジャンプします! // @author hoothin @@ -45,6 +45,7 @@ // @homepage https://github.com/hoothin/SearchJumper // @downloadURL https://greasyfork.org/scripts/445274-searchjumper/code/SearchJumper.user.js // @updateURL https://greasyfork.org/scripts/445274-searchjumper/code/SearchJumper.meta.js +// @require https://update.greasyfork.org/scripts/484118/searchJumperDefaultConfig.js // @connect global.bing.com // @connect suggestqueries.google.com // @connect api.bing.com @@ -79,319 +80,8 @@ let isAllPage = false; let searchData = {}; - searchData.sitesConfig = [ - { - type: "Translate", - icon: "language", - sites: [ { - name: "DeepL", - url: "https://www.deepl.com/translator#zh/en/%s", - icon: "https://www.deepl.com/img/favicon/favicon_96.png" - }, { - name: "Google translate", - url: "https://translate.google.com/?text=%s", - match: "translate\\.google\\.com.*\\btext=" - }, { - name: "Bing translate", - url: "http://www.bing.com/dict/search?q=%s" - }, { - name: "Translate with ChatGPT", - url: "https://poe.com/ChatGPT#p{sleep(1000)&[class*\\='ChatMessageInputContainer'] textarea=Please help me to translate \\`%s\\` to English, please return only translated content not include the origin text&click(button[class*\\='ChatMessageSendButton_sendButton'])}" - } ] - }, - { - type: "Video", - icon: "video", - sites: [ { - name: "bilibili", - url: "https://search.bilibili.com/all?keyword=%s" - }, { - name: "Youtube", - url: "https://www.youtube.com/results?search_query=%s" - }, { - name: "niconico", - url: "https://www.nicovideo.jp/search/%s" - } ] - }, - { - type: "Music", - icon: "music", - sites: [ { - name: "163 Music", - url: "https://music.163.com/#/search/m/?s=%s" - }, { - name: "QQ Music", - url: "https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%s" - }, { - name: "Jango", - url: "https://www.jango.com/music/%s" - } ] - }, - { - type: "Social", - icon: "users", - sites: [ { - name: "Twitter", - url: "https://twitter.com/search/%s" - }, { - name: "Facebook", - url: "https://www.facebook.com/search/results.php?q=%s" - } ] - }, - { - type: "Image", - icon: "image", - sites: [ { - name: "Google image", - url: "https://www.google.com/search?q=%s&tbm=isch", - match: "www\\.google\\..*tbm=isch" - }, { - name: "Bing image", - url: "https://www.bing.com/images/search?q=%s" - }, { - name: "pixiv", - url: "https://www.pixiv.net/search.php?word=%s" - }, { - name: "flickr", - url: "https://www.flickr.com/search/?q=%s" - } ] - }, - { - type: "News", - icon: "newspaper", - sites: [ { - name: "Google news", - url: "https://news.google.com/search?q=%s&hl=zh-CN&gl=CN&ceid=CN:zh-Hans", - icon: "https://www.google.com/favicon.ico" - }, { - name: "CNN", - url: "https://edition.cnn.com/search/?q=%s" - }, { - name: "BBC", - url: "https://www.bbc.co.uk/search?q=%s" - } ] - }, - { - type: "Search", - icon: "search", - sites: [ { - name: "Bing", - url: "https://www.bing.com/search?q=%s", - match: "^https://(www|cn|global)\\.bing\\.com/search" - }, { - name: "Baidu", - url: "https://www.baidu.com/s?wd=%s&ie=utf-8", - keywords: "(?:wd|word)=(.*?)(&|$)", - match: "https?://(www|m)\\.baidu\\.com/.*(wd|word)=" - }, { - name: "Google advanced", - url: "https://www.google.com/search?q=%s%input{Filetype, filetype:doc/ filetype:ppt/ filetype:xls/ filetype:pdf}%input{Limit lang/zh-CN/zh-TW/CN/EN,&lr=lang_zh-CN/&lr=lang_zh-TW/&lr=lang_zh-CN|lang_zh-TW/&lr=lang_en}%input{Limit date/Last hour/Last day/Last week/Last month/Last year,&as_qdr=h1/&as_qdr=d1/&as_qdr=w1/&as_qdr=m1/&as_qdr=y1}&ie=utf-8&oe=utf-8", - match: "https://www\\.google\\..*/search", - hideNotMatch: true - } ] - }, - { - type: "Search in page", - icon: "sitemap", - selectTxt: true, - openInNewTab: true, - sites: [ { - name: "Google", - url: "https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8", - match: "https://www\\.google\\..*/search", - }, { - name: "Wikipedia ", - url: "[\"Wikipedia\"]" - }, { - name: "📄 Copy", - url: "copy:%sr", - nobatch: true - }, { - name: "🔆 Highlight", - url: "find:%sr", - nobatch: true - }, { - name: "🔗 Open text link", - url: "%sr.replace(/。/g,\".\").replace(/[^ \\w\\-_\\.~!\\*'\\(\\);:@&=\\+\\$,\\/\\?#\\[\\]%]/g,\"\").replace(/ /g,\"\").replace(/^/,\"http://\").replace(/^http:\\/\\/(https?:)/,\"$1\")", - kwFilter: "\\w.*\\..*\\w", - nobatch: true - }, { - name: "Google Search in site", - url: "https://www.google.com/search?q=%s%20site%3A%h&ie=utf-8&oe=utf-8", - }, { - name: "Words to QRCode", - url: "https://cli.im/text#p{#text-content=%s&click(#click-create)}" - }, { - name: "💲 USD to RMB", - url: "showTips:http://apilayer.net/api/convert?from=USD&to=CNY&amount=1&access_key=%template{apilayer key} \n{name}
%s USD = {json.result|*%s.replace(/\D/,'')} RMB", - kwFilter: "\\d\\$|\\$\\d" - } ] - }, - { - type: "Search by image", - icon: "eye", - selectImg: true, - openInNewTab: true, - sites: [ { - name: "Google search by image", - url: "https://www.google.com/searchbyimage?sbisrc=cr_1_0_0&image_url=%T" - }, { - name: "Google translate image", - url: "https://translate.google.com/?op=images#p{input[accept^\\=\"image\"]=%i}" - }, { - name: "QR decode", - url: "https://hoothin.com/qrdecode/#%U" - }, { - name: "SauceNAO", - url: "https://saucenao.com/search.php?db=999&url=%t" - }, { - name :"IQDB", - url: "https://iqdb.org/?url=%t" - }, { - name: "Lunapic", - url: "https://www.lunapic.com/editor/index.php?action=url&url=%t" - }, { - name: "Pixlr easy", - url: "https://pixlr.com/x/#p{click(#home-open-url)&#image-url=%t&click(.dialog>.buttons>a.button.positive)}" - }, { - name: "Bing search by image", - url: "https://www.bing.com/images/search?view=detailv2&iss=sbi&form=SBIVSP&sbisrc=UrlPaste&q=imgurl:%t" - }, { - name: "TinEye", - url: "https://www.tineye.com/search?url=%t" - } ] - }, - { - type: "VIP", - icon: "key", - match: "://v\\.qq\\.com/x/", - sites: [] - }, - { - type: "Scholar", - icon: "graduation-cap", - sites: [ { - name: "Scholar", - url: "http://scholar.google.com/scholar?hl=zh-CN&q=%s" - }, { - name: "Google Book", - url: "https://www.google.com/search?q=%s&tbm=bks&tbo=1&hl=zh-CN&gws_rd=ssl" - }, { - name: "krugle", - url: "http://opensearch.krugle.org/document/search/#query=%s", - icon: "https://opensearch.krugle.org/media/images/favicon.ico" - }, { - name: "npm", - url: "https://www.npmjs.org/search?q=%s", - icon: "https://static.npmjs.com/b0f1a8318363185cc2ea6a40ac23eeb2.png" - } ] - }, - { - type: "Developer", - icon: "code", - sites: [ { - name: "MDN", - url: "https://developer.mozilla.org/zh-CN/search?q=%s" - }, { - name: "stackoverflow", - url: "https://stackoverflow.com/search?q=%s" - }, { - name: "Can I Use", - url: "http://caniuse.com/#search=%s", - icon: "https://caniuse.com/img/favicon-128.png" - }, { - name: "GitHub", - url: "https://github.com/search?utf8=✓&q=%s", - match: "https://github\\.com/search\\?.*[&\?]q=" - }, { - name: "w3c", - url: "http://www.runoob.com/?s=%s" - } ] - }, - { - type: "Wiki", - icon: "book-open-reader", - sites: [ { - name: "Wikipedia", - url: "https://en.wikipedia.org/wiki/%s", - description: "The largest and most-read reference work in history.#wiki" - }, { - name: "Quora", - url: "https://www.quora.com/search?q=%s" - } ] - }, - { - type: "Shopping", - icon: "shopping-cart", - sites: [ { - name: "Amazon", - url: "http://www.amazon.com/s/ref=nb_sb_noss?field-keywords=%s" - }, { - name: "1688", - url: "https://s.1688.com/selloffer/offer_search.htm?keywords=%s" - } ] - }, - { - type: "Assit", - icon: "list-alt", - selectTxt: true, - selectImg: true, - selectAudio: true, - selectVideo: true, - selectLink: true, - selectPage: true, - openInNewTab: true, - sites: [ { - name: "QR code", - url: "https://hoothin.com/qrcode/#%U" - }, { - name: "📦 Batch open links", - url: "%s[all]", - kwFilter: "^https?:" - }, { - name: "Share to Twitter", - url: "https://twitter.com/intent/tweet?url=%T" - }, { - name: "Send by Gmail", - url: "https://mail.google.com/mail/u/0/?tf=cm&source=mailto&body=%n %T" - }, { - name: "Share to Facebook", - url: "https://www.facebook.com/sharer/sharer.php?u=%T&t=%n" - }, { - name: "🧮 Calculator", - url: "calculator://" - }, { - name: "🔎 Everything", - url: "ES://%s" - } ] - }, - { - type: "Page", - icon: "list", - selectLink: true, - selectPage: true, - openInNewTab: true, - sites: [ { - name: "🔗 Open url", - url: "%t", - openInNewTab: true - }, { - name: "📷 Search cache", - url: "https://2tool.top/kuaizhao.php?k=%u" - }, { - name: "Web archive", - url: "https://web.archive.org/web/*/%u", - icon: "https://web.archive.org/_static/images/archive.ico" - }, { - name: "Save archive", - url: "https://web.archive.org/save/%u", - icon: "https://web.archive.org/_static/images/archive.ico" - }, { - name: "✏️ Edit current page", - url: "javascript:(function(){document.body.setAttribute('contenteditable', 'true');alert('Now you can modify the page, cancel by ESC');document.onkeydown = function (e) {e = e || window.event;if(e.keyCode==27){document.body.setAttribute('contenteditable', 'false');}}})();" - } ] - } - ]; + if (!sitesConfig) sitesConfig = []; + searchData.sitesConfig = sitesConfig; searchData.prefConfig = { position: { x: "left", @@ -579,6 +269,8 @@ Friday: '星期五 (金)', Saturday: '星期六 (土)', template: '请设置【#t#】的值', + recordAction: '录制操作', + startRecord: '开始录制操作,按回车键结束录制', loadingCollection: '正在加载合集,请稍候……' }; break; @@ -686,6 +378,8 @@ Friday: '星期五 (金)', Saturday: '星期六 (土)', template: '請設置【#t#】的值', + recordAction: '錄製動作', + startRecord: '開始錄製操作,按下回車鍵結束錄製', loadingCollection: '正在載入合集,請稍候……' }; break; @@ -792,6 +486,8 @@ Friday: '金曜日', Saturday: '土曜日', template: '[#t#]の値を設定してください', + RecordAction: '記録操作', + startRecord: '記録操作を開始します。記録を終了するには Enter キーを押してください', loadingCollection: 'コレクションを読み込み中...' }; break; @@ -891,6 +587,8 @@ cacheOver: 'All icons cached!', cspDisabled: 'The style of SearchJumper is blocked by the CSP of current site, please try to install the Allow CSP: Content-Security-Policy extension to obtain permission', template: 'Please set the value of "#t#"', + recordAction: 'Record operation', + startRecord: 'Start to record operation, press Enter to end', loadingCollection: 'Preparing collection for SearchJumper...' }; break; @@ -7980,37 +7678,9 @@ //self.bar.classList.add("minSizeMode"); self.bar.classList.remove("minSizeModeClose"); } - if (sites.length > (searchData.prefConfig.expandTypeLength || 12) && !searchData.prefConfig.expandType) { - ele.classList.add("not-expand"); - ele.appendChild(self.searchJumperExpand); - } - let scrollSize = Math.max(ele.scrollWidth, ele.scrollHeight) + 5 + "px"; - if (searchData.prefConfig.disableTypeOpen) { - scrollSize = baseSize + "px"; - if (e) self.listPos(ele.children[0], siteList); - } - if (leftRight) { - ele.style.height = scrollSize; - ele.style.width = ""; - } else { - ele.style.width = scrollSize; - ele.style.height = ""; - } - setTimeout(() => { - if (ele.classList.contains("search-jumper-open")) { - ele.style.flexWrap = "nowrap"; - } - }, searchData.prefConfig.typeOpenTime); - searchTypes.forEach(type => { - if (ele != type) { - type.classList.remove("search-jumper-open"); - type.style.width = baseSize + "px"; - type.style.height = baseSize + "px"; - type.style.flexWrap = ""; - } - }); let href = (targetElement && (targetElement.href || targetElement.src)) || location.href; let keyWords = getKeywords(); + let shownSitesNum = 0; siteEles.forEach((se, i) => { let data = sites[i]; /*if (data.match && data.hideNotMatch) { @@ -8038,9 +7708,41 @@ } } let si = se.querySelector("img"); - if (se.style.display != "none" && si && !si.src && si.dataset.src) { - si.src = si.dataset.src; - delete si.dataset.src; + if (se.style.display != "none") { + shownSitesNum++; + if (si && !si.src && si.dataset.src) { + si.src = si.dataset.src; + delete si.dataset.src; + } + } + }); + if (shownSitesNum > (searchData.prefConfig.expandTypeLength || 12) && !searchData.prefConfig.expandType) { + ele.classList.add("not-expand"); + ele.appendChild(self.searchJumperExpand); + } + let scrollSize = Math.max(ele.scrollWidth, ele.scrollHeight) + 5 + "px"; + if (searchData.prefConfig.disableTypeOpen) { + scrollSize = baseSize + "px"; + if (e) self.listPos(ele.children[0], siteList); + } + if (leftRight) { + ele.style.height = scrollSize; + ele.style.width = ""; + } else { + ele.style.width = scrollSize; + ele.style.height = ""; + } + setTimeout(() => { + if (ele.classList.contains("search-jumper-open")) { + ele.style.flexWrap = "nowrap"; + } + }, searchData.prefConfig.typeOpenTime); + searchTypes.forEach(type => { + if (ele != type) { + type.classList.remove("search-jumper-open"); + type.style.width = baseSize + "px"; + type.style.height = baseSize + "px"; + type.style.flexWrap = ""; } }); } else { @@ -10659,8 +10361,16 @@ adjustSignDiv(div, target) { this.setImportant(div, "width", target.offsetWidth + "px"); this.setImportant(div, "height", target.offsetHeight + "px"); - this.setImportant(div, "left", target.offsetLeft + "px"); - this.setImportant(div, "top", target.offsetTop + "px"); + let left = target.offsetLeft; + let top = target.offsetTop; + if (target.offsetParent !== div.offsetParent) { + let rect1 = div.offsetParent.getBoundingClientRect(); + let rect2 = target.offsetParent.getBoundingClientRect(); + left += rect2.left - rect1.left; + top += rect2.top - rect1.top; + } + this.setImportant(div, "left", left + "px"); + this.setImportant(div, "top", top + "px"); } geneSelector(ele, id) { @@ -10937,6 +10647,7 @@ targetElement = input; let event = new Event('focus', { bubbles: true }); input.dispatchEvent(event); + input.click && input.click(); let lastValue = input.value; if (input.type == 'file') { let file = v; @@ -10952,9 +10663,12 @@ dataTransfer.items.add(file); input.files = dataTransfer.files; v = "c:/fakepath/fakefile"; - } else if (input.nodeName.toUpperCase() == "INPUT") { + } else if (/INPUT/i.test(input.nodeName)) { var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set; nativeInputValueSetter.call(input, v); + } else if (/SELECT/i.test(input.nodeName)) { + var nativeSelectValueSetter = Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype, "value").set; + nativeSelectValueSetter.call(input, v); } else if (input.nodeName.toUpperCase() == "TEXTAREA") { var nativeTextareaValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set; nativeTextareaValueSetter.call(input, v); @@ -13578,8 +13292,10 @@ .crawling>.searchJumperFrame-crawlBody { display: block; } - .searchJumperFrame-buttons>button#submitCrawl { - width: 99%; + .searchJumperFrame-buttons>button#submitCrawl, + .searchJumperFrame-buttons>button#record { + width: 100%; + margin: 0 3px; } .searchJumperFrame-crawlBody>.actionCon { height: 200px; @@ -13697,6 +13413,9 @@ Close crawl${closePath}
+
+ +
@@ -13858,10 +13577,11 @@ let clickAction = addFrame.querySelector("#click"); let sleepAction = addFrame.querySelector("#sleep"); let submitCrawl = addFrame.querySelector("#submitCrawl"); + let recordBtn = addFrame.querySelector("#record"); let dragDiv; let addAction = (type, sel, val) => { let div = document.createElement("div"); - let words = ""; + let words = type; switch(type) { case "input": words = i18n('inputOutput', [sel, val]); @@ -13891,20 +13611,21 @@ actionCon.insertBefore(dragDiv, div); } div.onclick = e => { - if (e.target.nodeName.toUpperCase() == 'SPAN') { - if (e.target.className == 'element') { + let target = e.target; + if (target.nodeName.toUpperCase() == 'SPAN') { + if (target.className == 'element') { picker.getSelector(selector => { - e.target.innerText = selector; - e.target.title = selector; + target.innerText = selector; + target.title = selector; addFrame.style.display = ''; div.dataset.sel = selector; }); addFrame.style.display = 'none'; } else { - let newValue = prompt(i18n('inputNewValue'), e.target.innerText); + let newValue = prompt(i18n('inputNewValue'), target.innerText); if (newValue) { - e.target.innerText = newValue; - e.target.title = newValue; + target.innerText = newValue; + target.title = newValue; div.dataset.val = newValue; } } @@ -13912,6 +13633,27 @@ actionCon.removeChild(div); } } + div.oncontextmenu = e => { + let target = e.target; + if (target.nodeName.toUpperCase() == 'SPAN') { + e.preventDefault(); + if (target.className == 'element') { + let newValue = prompt('Selector', target.innerText); + if (newValue) { + target.innerText = newValue; + target.title = newValue; + div.dataset.sel = newValue; + } + } else { + let newValue = prompt(i18n('inputNewValue'), target.innerText); + if (newValue) { + target.innerText = newValue; + target.title = newValue; + div.dataset.val = newValue; + } + } + } + } actionCon.appendChild(div); } }; @@ -13957,7 +13699,7 @@ [].forEach.call(actionCon.children, action => { if (!action) return; let sel = action.dataset.sel; - let val = action.dataset.val; + let val = action.dataset.val || ''; switch(action.dataset.type) { case "click": actions.push(`click(${sel.replace(/([=&])/g, '\\$1')})`); @@ -13969,6 +13711,7 @@ actions.push(`sleep(${val})`); break; default: + actions.push(`${action.dataset.type}(${val})`); break; } }); @@ -13981,6 +13724,44 @@ closeCrawlBtn.addEventListener("click", e => { addFrame.classList.remove("crawling"); }); + let targetInput; + let clickSthHandler = e => { + if (addFrame.style.display === '') return; + if (/INPUT|TEXTAREA|SELECT|OPTION/i.test(e.target.nodeName)) { + return; + } + addAction('click', picker.geneSelector(e.target, true)); + }; + let changeHandler = e => { + if (addFrame.style.display === '') return; + addAction('input', picker.geneSelector(e.target, true), e.target.value); + }; + let keydownHandler = e => { + if (addFrame.style.display === '') return; + if (e.keyCode == 27) { + addFrame.style.display = ''; + document.removeEventListener('keydown', keydownHandler, true); + document.removeEventListener('click', clickSthHandler); + document.removeEventListener('change', changeHandler); + } else if (e.keyCode == 13) { + //enter + e.preventDefault(); + e.stopPropagation(); + addFrame.style.display = ''; + document.removeEventListener('keydown', keydownHandler, true); + document.removeEventListener('click', clickSthHandler); + document.removeEventListener('change', changeHandler); + } + }; + recordBtn.addEventListener("click", e => { + alert(i18n("startRecord")); + addFrame.style.display = 'none'; + setTimeout(() => { + document.addEventListener('keydown', keydownHandler, true); + document.addEventListener('click', clickSthHandler); + document.addEventListener('change', changeHandler); + }, 100); + }); inputAction.addEventListener("click", e => { picker.getSelector(selector => { addAction('input', selector, '%s'); @@ -14394,6 +14175,9 @@ if (_searchData) { searchData = _searchData; } + if (!searchData.lastModified) { + searchData.sitesConfig = sitesConfig; + } if (searchData.prefConfig.lang && searchData.prefConfig.lang != '0') { lang = searchData.prefConfig.lang; } From 5f5eb76d5c0ac13432b9732b8a5c8cdd14155a3d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 7 Jan 2024 21:19:41 +0800 Subject: [PATCH 625/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 364c46f0dfb..9fb6169a692 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -13747,6 +13747,7 @@ //enter e.preventDefault(); e.stopPropagation(); + e.target && e.target.blur && e.target.blur(); addFrame.style.display = ''; document.removeEventListener('keydown', keydownHandler, true); document.removeEventListener('click', clickSthHandler); From 521b85a27becd15a2bc60ef4cf762f7ee770eb20 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Jan 2024 09:31:55 +0800 Subject: [PATCH 626/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 391fce3de7e..59236256756 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -892,7 +892,7 @@ }); } const isMobile = ('ontouchstart' in document.documentElement); - const configPage = ["https://pagetual.hoothin.com/rule.html", + const configPage = [`https://pagetual.hoothin.com/${lang === 'zh-CN' ? 'cn/' : ''}rule.html`, "https://github.com/hoothin/UserScripts/tree/master/Pagetual", "https://hoothin.github.io/UserScripts/Pagetual/"]; const firstRunPage = "https://pagetual.hoothin.com/firstRun"; From 33ba43af153c9d8371a564a0633247695861fbe2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Jan 2024 10:40:53 +0800 Subject: [PATCH 627/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9fb6169a692..f34bf08cf66 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -13522,7 +13522,10 @@ for (let j = 0; j < typeConfig.sites.length; j++) { let curSite = typeConfig.sites[j]; if (curSite.url == urlInput.value) { - if (i == parseInt(typeSelect.value)) return; + if (i == parseInt(typeSelect.value)) { + alert('Already added!'); + return; + } if (window.confirm(i18n("siteExist"))) { siteObj = { name: curSite.name + " - " + typeConfig.type, From 67cda9034ceeb90429943e1ac4033b8bd69f4e34 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Jan 2024 14:31:21 +0800 Subject: [PATCH 628/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f34bf08cf66..746fc1a387a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -2385,7 +2385,7 @@ .minSizeMode.search-jumper-searchBar:hover>.search-jumper-type:not(.search-jumper-open) { display: none; } - .minSizeModeClose.minSizeMode.search-jumper-searchBar:hover>.search-jumper-type { + .minSizeModeClose.minSizeMode.search-jumper-searchBar:hover>.search-jumper-type:not(.search-jumper-targetImg,.search-jumper-targetLink,.search-jumper-targetPage,.search-jumper-targetVideo,.search-jumper-targetAudio) { display: inline-flex; } .funcKeyCall>.search-jumper-searchBar>.search-jumper-type:not(.search-jumper-open) { @@ -7782,11 +7782,14 @@ }, true); let showTimer, siteList; + let viewWidth = window.screen.availWidth || window.innerWidth || document.documentElement.clientWidth; + let viewHeight = window.screen.availHeight || window.innerHeight || document.documentElement.clientHeight; + let availableSize = !isMobile || (viewWidth > 600 && viewHeight > 600); typeBtn.addEventListener('mouseenter', e => { if (!self.funcKeyCall && searchData.prefConfig.showSiteLists && (searchData.prefConfig.alwaysShowSiteLists || !ele.classList.contains("search-jumper-open"))) { ele.appendChild(siteList); self.listPos(ele.children[0], siteList); - } else { + } else if (availableSize) { self.tipsPos(typeBtn, ele.dataset.title); } if (searchData.prefConfig.overOpen) { @@ -14254,6 +14257,10 @@ searchData.prefConfig.suggestType = "baidu"; } else searchData.prefConfig.suggestType = "google"; } + if (searchData.prefConfig.minSizeMode) { + searchData.prefConfig.disableAutoOpen = false; + searchData.prefConfig.disableTypeOpen = false; + } if (ext) { configPage = chrome.runtime.getURL('config/index.html');; } else if (searchData.prefConfig.configPage) { From f519636f07733146a29dab05f2c2cf244bb7a5d2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Jan 2024 14:34:14 +0800 Subject: [PATCH 629/812] Update searchJumperDefaultConfig.js --- SearchJumper/searchJumperDefaultConfig.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js index 402c7d3df40..c94dc4e1ef2 100644 --- a/SearchJumper/searchJumperDefaultConfig.js +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -2398,6 +2398,12 @@ switch (lang) { "match": "https://www\\.google\\..*/search", "hideNotMatch": true }, + { + "name": "Baidu", + "url": "https://www.baidu.com/s?wd=%s&ie=utf-8", + "keywords": "(?:wd|word)=(.*?)(&|$)", + "match": "https?://(www|m)\\.baidu\\.com/.*(wd|word)=" + }, { "name": "SearX", "url": "https://searx.be/search?q=%s" From 57ec6b5448983007f9f373599727596596e739fe Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Jan 2024 14:42:56 +0800 Subject: [PATCH 630/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 746fc1a387a..a66c8f5757f 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -12016,6 +12016,16 @@ }); loadConfig(); + let lastModified = searchData.lastModified; + document.addEventListener('visibilitychange', async e => { + if (!document.hidden) { + searchData = await storage.getItem("searchData"); + if (searchData.lastModified && lastModified != searchData.lastModified) { + lastModified = searchData.lastModified; + loadConfig(); + } + } + }); let sendVerifyResult = (url, name, status, finalUrl) => { window.postMessage({ From e2d61994707242bceafe8947196f90da24b2d606 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 9 Jan 2024 01:56:16 +0000 Subject: [PATCH 631/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index f144ea90d40..471c17cbe26 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -28833,17 +28833,17 @@ }, { "resource_url": "http://wedata.net/items/72582", - "name": "All About ガイド記事一覧", - "created_by": "memi", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-03-19T17:06:41+09:00", "data": { - "exampleUrl": "http://allabout.co.jp/gm/gp/714/library/\r\nhttp://allabout.co.jp/gm/gc/462037/\r\nhttp://allabout.co.jp/gm/gc/13353/\r\nhttp://allabout.co.jp/gm/gl/421/\r\nhttp://allabout.co.jp/recipe/search/material/10/", + "pageElement": "//div[@class=\"article-list\"]//li|//div[@class='aa_article-content']|//main[@class=\"aa_main\"]//ul[@class=\"aa_media-list\"]/li", + "nextLink": "//a[(text()=\"次のページへ\")]", "url": "^https://allabout\\.co\\.jp/gm/(gc|gp|gl)|^https://allabout\\.co\\.jp/recipe", - "pageElement": "//div[@class=\"article-list\"]//li|id(\"popin_read\")|//main[@class=\"aa_main\"]//ul[@class=\"aa_media-list\"]/li", - "nextLink": "//a[(text()=\"次のページへ\")]" + "exampleUrl": "https://allabout.co.jp/gm/gp/714/library/\r\nhttps://allabout.co.jp/gm/gc/462037/\r\nhttps://allabout.co.jp/gm/gc/13353/\r\nhttps://allabout.co.jp/gm/gl/421/\r\nhttps://allabout.co.jp/recipe/search/material/10/" }, - "created_at": "2013-05-01T09:39:59+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "memi", + "name": "All About ガイド記事一覧", + "created_at": "2013-05-01T09:39:59+09:00", + "updated_at": "2024-01-08T21:21:21+09:00" }, { "resource_url": "http://wedata.net/items/72581", From a078886da42905a53758351717156ed6af805249 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 9 Jan 2024 12:22:31 +0800 Subject: [PATCH 632/812] update --- SearchJumper/searchJumper.user.js | 12 ++++++++---- SearchJumper/searchJumperDefaultConfig.js | 6 +----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a66c8f5757f..84107dcbf3b 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -780,7 +780,7 @@ var value; if (ext) { let result = await chrome.storage.local.get([key]); - value = result[key]; + value = result && result[key]; } else if (this.supportGMPromise) { value = await GM.getValue(key); } else if (this.supportGM) { @@ -7901,7 +7901,7 @@ let si = se.querySelector("img"); let data = sites[i]; - if (localKeywords && data.kwFilter) { + if (data && localKeywords && data.kwFilter) { if (new RegExp(data.kwFilter).test(localKeywords)) { se.style.display = ''; } else { @@ -10956,6 +10956,9 @@ async function cacheFontManager(noti) { if (searchData.prefConfig.cacheSwitch) { + searchBar.con.classList.add("in-input"); + searchBar.con.style.visibility = "hidden"; + searchBar.appendBar(); let needCache = cacheFontPool.length > 0; while (cacheFontPool.length > 0) { await cacheAction(cacheFontPool.shift()); @@ -14394,6 +14397,7 @@ function checkVisibility() { if (document.hidden) { if (searchBar) searchBar.closeShowAll(); + else return; if (!searchData.prefConfig.globalSearchNow) return; checkGlobalIntv = setInterval(async () => { let oldGlobalInPageWords = globalInPageWords; @@ -14416,14 +14420,14 @@ storage.getItem("globalInPageWords", data => { globalInPageWords = (data || ''); if (oldGlobalInPageWords != globalInPageWords) { - searchBar.refreshPageWords(); + if (searchBar) searchBar.refreshPageWords(); } }); let oldNavEnable = navEnable || false; storage.getItem("navEnable", data => { navEnable = (typeof data === "undefined" ? true : data); if (oldNavEnable != navEnable) { - searchBar.refreshNav(); + if (searchBar) searchBar.refreshNav(); } }); }); diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js index c94dc4e1ef2..5bf0e0311c1 100644 --- a/SearchJumper/searchJumperDefaultConfig.js +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -1,3 +1,4 @@ +//Open setting page to change data, NOT HERE! let lang = navigator.appName === "Netscape" ? navigator.language : navigator.userLanguage; let sitesConfig = {}; switch (lang) { @@ -223,11 +224,6 @@ switch (lang) { "name": "F搜", "url": "https://fsoufsou.com/search?q=%s", "nobatch": true - }, - { - "name": "中国搜索", - "url": "https://www.chinaso.com/newssearch/all/allResults?q=%s", - "nobatch": true } ] }, From ff0688673aa4a03bcdc2dcf27ecb75c25ef0370f Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 9 Jan 2024 12:58:13 +0800 Subject: [PATCH 633/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 84107dcbf3b..d026226e6a3 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -5717,7 +5717,7 @@ } if (this.addToShadow(this.con)) { setTimeout(() => { - if (this.con.parentNode) { + if (!isAllPage && this.con.parentNode) { if (getComputedStyle(this.con).zIndex != "2147483647") { this.removeBar(); if (disabled) { @@ -10955,7 +10955,7 @@ } async function cacheFontManager(noti) { - if (searchData.prefConfig.cacheSwitch) { + if (searchData.prefConfig.cacheSwitch && !isAllPage) { searchBar.con.classList.add("in-input"); searchBar.con.style.visibility = "hidden"; searchBar.appendBar(); From 0c9d4175797be40e7ae406aa242a207dc7fa52c6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 9 Jan 2024 18:02:08 +0800 Subject: [PATCH 634/812] Update searchJumperDefaultConfig.js --- SearchJumper/searchJumperDefaultConfig.js | 27 +++++++++-------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js index 5bf0e0311c1..7b2abb88c06 100644 --- a/SearchJumper/searchJumperDefaultConfig.js +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -505,10 +505,17 @@ switch (lang) { "url": "showTips:https://www.douban.com/search?cat=1002&q=%s \n{name} \n
\n

\n{h3>a}\n{.rating_nums}\n

\n
\na>img|src}\"/>\n
\n
{.subject-cast}
\n
{.content>p}
\n
\n
", "icon": "https://www.douban.com/favicon.ico" }, + { + "name": "维基百科预览", + "url": "showTips:https://zh.wikipedia.org/wiki/%s\n
\na>img|src}\"/>\n{.mw-parser-output>p}\n
" + }, { "name": "Metacritic评分", - "url": "showTips:https://www.metacritic.com/autosearch%p{search_term=%s&image_size=98&search_each=false} \n
\n\n
\n

{json.autoComplete.results.0.name}

\n
\n{json.autoComplete.results.0.refType}\n{json.autoComplete.results.0.itemDate}\n{json.autoComplete.results.0.metaScore}\n
\n
\n
", - "icon": "https://www.metacritic.com/favicon.ico" + "url": "showTips:https://www.metacritic.com/search/%s/\n
\n\n
\n

{.c-pageSiteSearch-results-item>div>p}

\n
\n{.u-text-uppercase}\n{.c-pageSiteSearch-results-item strong}\n{.c-siteReviewScore}\n
\n
\n
" + }, + { + "name": "IMDb评分", + "url": "showTips:https://www.imdb.com/find/?q=%s&exact=true.then{.find-title-result .ipc-metadata-list-summary-item__t}\n

\n{.hero__primary-text}\n{.ipc-btn__text>div>div>div}\n

\n
\n\n
\n
{a.ipc-chip|()}
\n
Year: {h1+ul>li>.ipc-link}
\n
Director: {section>div>div>.title-pc-list>li:nth-child(1) li}
\n
Writer: {section>div>div>.title-pc-list>li:nth-child(2) li}
\n
Stars: {section>div>div>.title-pc-list>li:nth-child(3) li|()}
\n
{section>p>span}
\n
\n
" }, { "name": "展开所有引擎", @@ -529,11 +536,6 @@ switch (lang) { "description": "磁力转种子", "nobatch": true }, - { - "name": "📏英里转公里", - "url": "showTips:let s=\"%sr\".match(/(\\d+)(英里|英?哩|mi(le)?)/)[1];let km=(s*1.609344).toFixed(2);return `${s} mi = ${km} km`;", - "kwFilter": "\\d+\\s*(英里|英?哩|mi(le)?\\b)" - }, { "name": "💲美元转人民币", "url": "showTips:http://apilayer.net/api/convert?from=USD&to=CNY&amount=1&access_key=%template{apilayer key} \n{name}
%s USD = {json.result|*%s.replace(/\\D/g,'')} RMB", @@ -2460,11 +2462,6 @@ switch (lang) { "name": "Google ", "url": "[\"Google\"]" }, - { - "name": "📏 Mile to Km", - "url": "showTips:let s=\"%sr\".match(/(\\d+)(mi(le)?)/)[1];return `${s} mi = ${(s*1.609344).toFixed(2)} km`;", - "kwFilter": "\\d+\\s*(mi(le)?\\b)" - }, { "name": "💲USD to RMB", "url": "showTips:http://apilayer.net/api/convert?from=USD&to=CNY&amount=1&access_key=%template{apilayer key} \n{name}
%s USD = {json.result|*%s.replace(/\\D/,'')} RMB", @@ -2495,8 +2492,7 @@ switch (lang) { }, { "name": "IMDb rating", - "url": "showTips:let query = \"%s\";\nlet url = `https://www.imdb.com/find/?q=${query}&exact=true`;\nlet geneHTML = (title, intro, labels, director, writer, stars, image, rating, year) => {\nif (!title) return \"No result\";\nreturn `\n

\n${title}\n${rating}\n

\n
\n\n
\n
${labels.reduce((r, c) => `${r}${c}`, \"\")}
\n
Year: ${year}
\n
Director: ${director}
\n
Writer: ${writer}
\n
Stars: ${stars}
\n
${intro}
\n
\n
`;};\nlet imdbData = await storage.getItem(\"imdbData\");\nif (!imdbData) imdbData=[];\nlet d = imdbData.find(data => data.query == query);\nif (d) {\nd = d.data;\nreturn[geneHTML(d.title, d.intro, d.labels, d.director, d.writer, d.stars, d.image, d.rating, d.year), url];\n}\nlet result = await fetch(url).then(r => r.text()).then(async r => {\nlet doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = r;\nlet item = doc.querySelector('.find-title-result .ipc-metadata-list-summary-item__t');\nif (!item) return null;\nlet _result = {title: item.innerText};\nurl = \"https://www.imdb.com/\" + item.getAttribute(\"href\");\nawait fetch(url).then(r => r.text()).then(r => {\nlet doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = r;\n_result.image = doc.querySelector(\".ipc-image\").src;\n_result.year = doc.querySelector(\"h1+ul>li>.ipc-link\").innerText;\n_result.intro = doc.querySelector(\"section>p>span\").innerText;\n_result.labels = [];\n[].forEach.call(doc.querySelectorAll(\"a.ipc-chip\"), ele => {\n_result.labels.push(ele.innerText)\n});\n_result.director = [];\n[].forEach.call(doc.querySelectorAll(\"section>div>div>.title-pc-list>li:nth-child(1) li\"), ele => {\n_result.director.push(ele.innerText)\n});\n_result.director = _result.director.join(\"/\");\n_result.writer = [];\n[].forEach.call(doc.querySelectorAll(\"section>div>div>.title-pc-list>li:nth-child(2) li\"), ele => {\n_result.writer.push(ele.innerText)\n});\n_result.writer = _result.writer.join(\"/\");\n_result.stars = [];\n[].forEach.call(doc.querySelectorAll(\"section>div>div>.title-pc-list>li:nth-child(3) li\"), ele => {\n_result.stars.push(ele.innerText)\n});\n_result.stars = _result.stars.join(\"/\");\n_result.rating = doc.querySelector(\".ipc-btn__text>div>div>div\").innerText;\n});\nreturn _result;\n}).catch(alert);\nif (!result) result = {};\nimdbData.push({query:query, data:result});\nif (imdbData.length > 50) imdbData.shift();\nstorage.setItem(\"imdbData\", imdbData);\nd = result;\nreturn[geneHTML(d.title, d.intro, d.labels, d.director, d.writer, d.stars, d.image, d.rating, d.year), url];", - "icon": "https://www.imdb.com/favicon.ico" + "url": "showTips:https://www.imdb.com/find/?q=%s&exact=true.then{.find-title-result .ipc-metadata-list-summary-item__t}\n

\n{.hero__primary-text}\n{.ipc-btn__text>div>div>div}\n

\n
\n\n
\n
{a.ipc-chip|()}
\n
Year: {h1+ul>li>.ipc-link}
\n
Director: {section>div>div>.title-pc-list>li:nth-child(1) li}
\n
Writer: {section>div>div>.title-pc-list>li:nth-child(2) li}
\n
Stars: {section>div>div>.title-pc-list>li:nth-child(3) li|()}
\n
{section>p>span}
\n
\n
" }, { "name": "💞 AV preview", @@ -2968,8 +2964,7 @@ switch (lang) { }, { "name": "Metacritic rating", - "url": "showTips:https://www.metacritic.com/autosearch%p{search_term=%s&image_size=98&search_each=false}\n
\n\n
\n

{json.autoComplete.results.0.name}

\n
\n{json.autoComplete.results.0.refType}\n{json.autoComplete.results.0.itemDate}\n{json.autoComplete.results.0.metaScore}\n
\n
\n
", - "icon": "https://www.metacritic.com/favicon.ico" + "url": "showTips:https://www.metacritic.com/search/%s/\n
\n\n
\n

{.c-pageSiteSearch-results-item>div>p}

\n
\n{.u-text-uppercase}\n{.c-pageSiteSearch-results-item strong}\n{.c-siteReviewScore}\n
\n
\n
" }, { "name": "Preview wikipedia", From 31dbfc53bc4314d6e462fc40109588daa13d38d8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 9 Jan 2024 18:05:05 +0800 Subject: [PATCH 635/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 76 +++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 14 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index d026226e6a3..91a00f9267d 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.63 +// @version 1.7.64 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -9290,7 +9290,8 @@ try { const calcReg = /([^\\]|^)([\+\-*/])([\d\.]+)$/; const cacheReg = /\|cache\=(\d+)$/; - const postReg = /%p{(.*)}/; + const postReg = /%p{(.*?)}/; + const thenReg = /.then{(.*?)}/; data = data.replace(/^showTips:/, ''); if (/^https?:/.test(data)) { let url = data.split("\n"); @@ -9417,9 +9418,9 @@ let allValue = []; if (ext) { fetchData = new Promise((resolve) => { - chrome.runtime.sendMessage({action: "showTips", detail: {from: url}}, function(r) { - data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); - resolve(r.data); + chrome.runtime.sendMessage({action: "showTips", detail: {from: url + `\n{${template[1]}}`}}, function(r) { + data = data.replace(/【SEARCHJUMPERURL】/g, (r && r.finalUrl) || ""); + resolve((r && r.data) || ""); }); }); } else { @@ -9441,16 +9442,41 @@ tipsResult = [tipsResult, "\n" + allValue.join(",")]; } else { let hasData = false; + let thenMatch = _url.match(thenReg), thenEleSelArr = []; + while (thenMatch) { + let thenEleSel = thenMatch[1]; + thenEleSelArr.push(thenEleSel); + _url = _url.replace(thenMatch[0], ""); + thenMatch = _url.match(thenReg); + } if (ext) { fetchData = new Promise((resolve) => { - chrome.runtime.sendMessage({action: "showTips", detail: {from: url}}, function(r) { + chrome.runtime.sendMessage({action: "showTips", detail: {from: url + `\n `}}, function(r) { if (data.indexOf('【SEARCHJUMPERURL】') != -1) { - data = data.replace(/【SEARCHJUMPERURL】/g, r.finalUrl); + data = data.replace(/【SEARCHJUMPERURL】/g, (r && r.finalUrl) || ""); hasData = true; } - resolve(r.data); + resolve((r && r.data) || ""); }); }); + while (thenEleSelArr.length) { + let thenEleSel = thenEleSelArr.shift(); + let thenUrl = await fetchData.then(r => { + let doc = document.implementation.createHTMLDocument(''); + doc.documentElement.innerHTML = r; + let ele = getElement(thenEleSel, doc); + let basepath = doc.querySelector("base"); + return canonicalUri(ele.getAttribute("href"), (basepath ? basepath.href : _url)); + }); + + if (thenUrl) { + fetchData = new Promise((resolve) => { + chrome.runtime.sendMessage({action: "showTips", detail: {from: thenUrl + `\n `}}, function(r) { + resolve((r && r.data) || ""); + }); + }); + } else break; + } } else { fetchData = GM_fetch(_url, fetchOption).then(r => { if (data.indexOf('【SEARCHJUMPERURL】') != -1) { @@ -9459,6 +9485,22 @@ } return r.text(); }); + while (thenEleSelArr.length) { + let thenEleSel = thenEleSelArr.shift(); + let thenUrl = await fetchData.then(r => { + let doc = document.implementation.createHTMLDocument(''); + doc.documentElement.innerHTML = r; + let ele = getElement(thenEleSel, doc); + let basepath = doc.querySelector("base"); + return canonicalUri(ele.getAttribute("href"), (basepath ? basepath.href : _url)); + }); + + if (thenUrl) { + fetchData = GM_fetch(thenUrl).then(r => { + return r.text(); + }); + } else break; + } } tipsResult = await fetchData.then(r => { let doc = document.implementation.createHTMLDocument(''); @@ -11780,15 +11822,21 @@ bodyObserver.observe(getBody(document), bodyObserverOptions); } - function canonicalUri(src) { + function canonicalUri(src, href) { if (!src) { return ""; } - if (src.charAt(0) == "#") return location.href + src; - if (src.charAt(0) == "?") return location.href.replace(/^([^\?#]+).*/, "$1" + src); - let origin = location.protocol + '//' + location.host; - let base = document.querySelector("base"); - let basePath = base ? base.href : location.href; + let origin, basePath; + if (!href) { + if (src.charAt(0) == "#") return location.href + src; + if (src.charAt(0) == "?") return location.href.replace(/^([^\?#]+).*/, "$1" + src); + origin = location.protocol + '//' + location.host; + let base = document.querySelector("base"); + basePath = base ? base.href : location.href; + } else { + origin = href.replace(/(^https?:\/\/.+)\/[^\/]*$/, "$1"); + basePath = href; + } let url = basePath || origin; url = url.replace(/(\?|#).*/, ""); if (/https?:\/\/[^\/]+$/.test(url)) url = url + '/'; From 2448fc012c90c36804011fd30334d9310ebfe48f Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 9 Jan 2024 21:40:43 +0800 Subject: [PATCH 636/812] 1.9.37.14 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 253f01b3c30..6e28835f86d 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.13](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.14](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 59236256756..82760325718 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.13 +// @version 1.9.37.14 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2548,7 +2548,7 @@ parent = parent.parentNode; } } - if (parent && parent.contains(otherPageEle) && !/^\d+$/.test(otherPageEle.innerText.trim())) { + if (parent && parent.contains(next4) && !/^\d+$/.test(otherPageEle.innerText.trim())) { next4 = null; } } @@ -5219,7 +5219,7 @@ z-index: 999; bottom: 0; left: 20%; - background-color: #6b6b6b45; + background-color: #6b6b6b99; font-size: xx-large; opacity: 0.8; cursor: pointer; From 4fee7b11c49bbc4c45ba90d92ec90004dcef3fad Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 10 Jan 2024 11:33:01 +0800 Subject: [PATCH 637/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 91a00f9267d..2860dd20449 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.64 +// @version 1.7.65 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -424,7 +424,7 @@ maxEleBtn: '選択した要素を展開', minEleBtn: '選択した要素を折りたたむ', expandAll: 'すべて展開', - collapseAll: 'すべて折りたたむ', + collapseAll: 'すべて折り', rename: '名前を変更', reverseBtn: '検索テキストを復元', pinBtn: '検索テキストを修正、すべてのタブで検索', @@ -10408,7 +10408,7 @@ this.setImportant(div, "height", target.offsetHeight + "px"); let left = target.offsetLeft; let top = target.offsetTop; - if (target.offsetParent !== div.offsetParent) { + if (target.offsetParent && div.offsetParent && target.offsetParent !== div.offsetParent) { let rect1 = div.offsetParent.getBoundingClientRect(); let rect2 = target.offsetParent.getBoundingClientRect(); left += rect2.left - rect1.left; @@ -12200,7 +12200,6 @@ display: block; font-size: 20px; left: 0px; - opacity: 0.9; top: 0px; width: 100%; height: 100%; @@ -12208,12 +12207,17 @@ #import-btns-con.hide { pointer-events: none; } + #import-btns-con>button { + opacity: 0.5; + } + #import-btns-con>button:hover { + opacity: 0.9; + } #import-btn { position: absolute; display: block; font-size: 20px; right: 45px; - opacity: 0.8; top: 45px; pointer-events: all; } @@ -12221,8 +12225,7 @@ position: absolute; display: none; font-size: 20px; - right: 115px; - opacity: 0.8; + left: 45px; top: 45px; pointer-events: all; } From 7f0a0f6f7c317d526614e116aa8ed70818b6cafd Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 10 Jan 2024 14:42:40 +0800 Subject: [PATCH 638/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 2860dd20449..5f6640d20c2 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -8923,7 +8923,7 @@ if (!self.batchOpening && !isBookmark) { let historyLength = Math.max(searchData.prefConfig.historyLength, 20); let isCurrent = ele.dataset.current; - if (!data.hideNotMatch && !data.kwFilter && !ele.dataset.clone && urlMatch !== '0' && historyLength && !isCurrent) { + if (!data.hideNotMatch && !data.kwFilter && !showTips && !ele.dataset.clone && urlMatch !== '0' && historyLength && !isCurrent) { storage.getItem("historySites", data => { historySites = (data || []); historySites = historySites.filter(site => {return site && site != name}); @@ -13081,7 +13081,17 @@ span.parentNode.dataset.name = targetSite.dataset.name; let word = document.createElement("p"); word.innerText = targetSite.dataset.name.substr(0, 10).trim(); - if (!/^\w+$/.test(word.innerText)) word.innerText = word.innerText.substr(0, 6); + if (!/^\w+$/.test(word.innerText)) { + let text = "", len = 0; + for (let char of word.innerText) { + text += char; + if (/^\w+$/.test(char)) { + len++; + } else len += 2; + if (len > 10) break; + } + word.innerText = text; + } let img = document.createElement("img"); img.style.display = "none"; span.appendChild(img); From 1ac516efd9d6f580175e4f12fe03742f939103a6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 10 Jan 2024 16:56:19 +0800 Subject: [PATCH 639/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 38 ++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5f6640d20c2..54851f33b65 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -7767,9 +7767,38 @@ }, 500); } }; - typeBtn.onmousedown = typeAction; - typeBtn.oncontextmenu = function (event) { - event.preventDefault(); + let draged = false, initMousePos, initTilePos; + let mouseUpHandler = e => { + document.removeEventListener('mouseup', mouseUpHandler); + document.removeEventListener('mousemove', mouseMoveHandler); + if (!draged) { + typeAction(e); + } + draged = false; + } + let mouseMoveHandler = e => { + if (!draged) { + self.tips.style.opacity = 0; + draged = true; + initMousePos = {x: e.clientX, y: e.clientY}; + initTilePos = {x: parseInt(self.bar.style.left), y: parseInt(self.bar.style.top)}; + } else { + self.bar.style.left = initTilePos.x + e.clientX - initMousePos.x + "px"; + self.bar.style.top = initTilePos.y + e.clientY - initMousePos.y + "px"; + } + } + typeBtn.onmousedown = function (e) { + if (e && self.funcKeyCall && e.button === 0 && !(e.shiftKey || e.altKey || e.ctrlKey)) { + draged = false; + e.preventDefault && e.preventDefault(); + document.addEventListener('mouseup', mouseUpHandler); + document.addEventListener('mousemove', mouseMoveHandler); + return; + } + typeAction(e); + }; + typeBtn.oncontextmenu = function (e) { + e.preventDefault(); }; typeBtn.addEventListener('click', e => { @@ -7786,6 +7815,9 @@ let viewHeight = window.screen.availHeight || window.innerHeight || document.documentElement.clientHeight; let availableSize = !isMobile || (viewWidth > 600 && viewHeight > 600); typeBtn.addEventListener('mouseenter', e => { + if (draged) { + return; + } if (!self.funcKeyCall && searchData.prefConfig.showSiteLists && (searchData.prefConfig.alwaysShowSiteLists || !ele.classList.contains("search-jumper-open"))) { ele.appendChild(siteList); self.listPos(ele.children[0], siteList); From 109af8aaf159833b6ab20da00dbcd62e6c2867a1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 11 Jan 2024 09:06:43 +0800 Subject: [PATCH 640/812] Update README.md --- DownloadAllContent/README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 1f16b6f95df..f8fd34dc0cb 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -79,9 +79,6 @@ - 透過程式碼生成 `a.links@@@@@@next:{return await getNextElement()}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 -### 💰付費咨詢 -看完自設教程還是搞不定也可選擇付費咨詢。非版權站,且服務器沒有爬蟲限制的,可[聯絡我](mailto:rixixi@gmail.com)指導規則編寫,$10/¥50 一次 - ### 自定義下載範例,打開目錄頁點擊【自定義下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 + [📕po18](https://www.po18.tw/books/755779/articles) @@ -112,7 +109,7 @@ https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector( .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` + [📕某乎](https://www.某乎.com/xen/market/remix/paid_column/1465280726219968513) -> 此頁章節沒有連結,使用以下規則可獲取章節連結,僅可下載免費可見内容,付費内容請自充會員 +> 此頁章節沒有連結,使用以下規則可獲取章節連結,僅可下載免費可見内容,付費内容請自充會員。具體操作請自行摸索,後果自負。 ``` javascript [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://${location.host}/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` @@ -172,7 +169,7 @@ body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").for ``` css a.chapter-item ``` -> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若有變動不再跟進。 +> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若有變動不再跟進。具體操作請自行摸索,後果自負。 > 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到。 > 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接。 > 解密方法如下: From be7d06d70e69728aec2a046ee06438815d8aa6ee Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 11 Jan 2024 09:09:24 +0800 Subject: [PATCH 641/812] Update README.md --- DownloadAllContent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index f8fd34dc0cb..e41c4a8fe1c 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -1,4 +1,4 @@ -起點等都推薦用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),遇到沒人願意適配的小站再考慮我的腳本。 +起點等都推薦用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),遇到沒人願意適配的小站再考慮我的腳本。勿用于版權站點,如造成侵權或對象站點損失,後果自負。 輕量級抓取腳本,用於下載網頁小説或其他文字內容,理論上通用於任何靜態寫入正文的小說網站、論壇、貼吧等而無需規則。 From e89072baa345cf611d5f10031ab0428b53694344 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 11 Jan 2024 09:11:21 +0800 Subject: [PATCH 642/812] Update README.md --- DownloadAllContent/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index e41c4a8fe1c..5578288a7f9 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -1,4 +1,6 @@ -起點等都推薦用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),遇到沒人願意適配的小站再考慮我的腳本。勿用于版權站點,如造成侵權或對象站點損失,後果自負。 +起點等都推薦用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),遇到沒人願意適配的小站再考慮我的腳本。 + +勿用于版權站,如造成侵權或對象站點損失,後果自負。 輕量級抓取腳本,用於下載網頁小説或其他文字內容,理論上通用於任何靜態寫入正文的小說網站、論壇、貼吧等而無需規則。 From d003a4852c21884f4905ea60b929e0f165c534f4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 11 Jan 2024 09:31:54 +0800 Subject: [PATCH 643/812] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 926d21b8765..14c70ce7afa 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,6 @@ + [Picviewer CE+ ![](https://img.shields.io/greasyfork/dt/24204) ![](https://img.shields.io/greasyfork/dd/24204)](Picviewer%20CE%2B) -+ [Kill Baidu AD 百度廣告清理 ![](https://img.shields.io/greasyfork/dt/24192)](Kill%20Baidu%20AD) - -+ [Kill TieBa AD 貼吧偽裝廣告清理 ![](https://img.shields.io/greasyfork/dt/24171)](Kill%20TieBa%20AD) - + [Select All Checkboxes 多選框伴侶 ![](https://img.shields.io/greasyfork/dt/22587)](Select%20All%20Checkboxes) + [MoreSteamRatings Steam遊戲評分集 ![](https://img.shields.io/greasyfork/dt/24113)](MoreSteamRatings) From 71ff27cbd40c1f1168c256607cbb55fb7637c5f2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 11 Jan 2024 09:32:23 +0800 Subject: [PATCH 644/812] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 14c70ce7afa..cac13f37b8f 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,6 @@ + [DownloadAllContent 怠惰小說下載器 ![](https://img.shields.io/greasyfork/dt/25068) ![](https://img.shields.io/greasyfork/dd/25068)](DownloadAllContent) -+ [Disable AD of ThisAV ThisAV去廣告 ![](https://img.shields.io/greasyfork/dt/25297)](Disable%20AD%20of%20ThisAV) - + [JandanHero 煎蛋俠 ![](https://img.shields.io/greasyfork/dt/25597)](JiandanHero) + [Pagetual 東方永頁機 ![](https://img.shields.io/greasyfork/dt/438684) ![](https://img.shields.io/greasyfork/dd/438684)](Pagetual) From eb9e8516230cf97a496f0db8f80c653c7b22422e Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 12 Jan 2024 01:56:47 +0000 Subject: [PATCH 645/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 471c17cbe26..ac329f36092 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86203", + "data": { + "insertBefore": "", + "pageElement": "id('ichiran-first')/div[@class='booklist']", + "nextLink": "id('pager')/a[@title='next page']", + "url": "^https://www\\.h-up\\.com/e/index\\.php", + "exampleUrl": "https://www.h-up.com/e/index.php?Series=S01&flg_searchmode=shousai&ORDERBY=DateShuppan&ORDERBY2=DateShotenhatsubai&SORTORDER=DESC&action_search_do=true&page=8" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "法政大学出版局", + "created_at": "2024-01-11T16:15:48+09:00", + "updated_at": "2024-01-11T16:15:48+09:00" +}, { "resource_url": "http://wedata.net/items/86201", "data": { From bfa9a714e97ff46ecfe2d6142d9815ea7f057eba Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 12 Jan 2024 18:11:12 +0800 Subject: [PATCH 646/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 7d082d33415..e4a8a5a9381 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.1.7.1 +// @version 2023.1.12.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -22202,7 +22202,7 @@ ImgOps | https://imgops.com/#b#`; srcs, // 备用的大图地址 type, // 类别 noActual = false, //没有原图 - imgSrc = img.currentSrc||img.dataset.lazySrc||img.src, // img 节点的 src + imgSrc = img.src||img.currentSrc||img.dataset.lazySrc, // img 节点的 src xhr, description; // 图片的注释 var imgCStyle = unsafeWindow.getComputedStyle(img); @@ -23115,6 +23115,7 @@ ImgOps | https://imgops.com/#b#`; return; } + let sizeHide = false; if (!result) { pretreatment(target) result = findPic(target); @@ -23123,21 +23124,21 @@ ImgOps | https://imgops.com/#b#`; } else if (!(result.imgAS.w == result.imgCS.w && result.imgAS.h == result.imgCS.h)) {//如果不是两者完全相等,那么被缩放了. if (prefs.floatBar.sizeLimitOr) { if (result.imgCS.h <= prefs.floatBar.minSizeLimit.h && result.imgCS.w <= prefs.floatBar.minSizeLimit.w) {//最小限定判断. - return; + sizeHide = true; } }else{ if (result.imgCS.h <= prefs.floatBar.minSizeLimit.h || result.imgCS.w <= prefs.floatBar.minSizeLimit.w) {//最小限定判断. - return; + sizeHide = true; } } } else { if (prefs.floatBar.sizeLimitOr) { if (result.imgCS.w <= prefs.floatBar.forceShow.size.w && result.imgCS.h <= prefs.floatBar.forceShow.size.h) { - return; + sizeHide = true; } } else { if (result.imgCS.w <= prefs.floatBar.forceShow.size.w || result.imgCS.h <= prefs.floatBar.forceShow.size.h) { - return; + sizeHide = true; } } } @@ -23164,7 +23165,7 @@ ImgOps | https://imgops.com/#b#`; canclePreCTO = clickToOpen(result); } - let hide = prefs.floatBar.position == "hide" ? !altKey : altKey; + let hide = sizeHide || (prefs.floatBar.position == "hide" ? !altKey : altKey); result.hide = hide; let canShow = floatBar.start(result); if (!checkUniqueImgWin() && canShow) { From dd7e0e2e608beeef1c590e2dc516ee5c222a3ece Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 12 Jan 2024 20:41:27 +0800 Subject: [PATCH 647/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 36 ++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index e4a8a5a9381..007cfbc2ea4 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.1.12.1 +// @version 2023.1.12.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11774,6 +11774,22 @@ ImgOps | https://imgops.com/#b#`; } } else GM_fetch = fetch; + function icon2Base64(icon, content, iconStyle) { + if (!content) return false; + var canvas = document.createElement("canvas"); + let size = Math.min((icon.clientWidth || icon.offsetWidth), (icon.clientHeight || icon.offsetHeight)); + canvas.width = size; + canvas.height = size; + var ctx = canvas.getContext("2d"); + ctx.font = iconStyle.font; + ctx.strokeStyle = iconStyle.color || "black"; + ctx.fillStyle = iconStyle.color || "black"; + ctx.textBaseline = "top"; + let metrics = ctx.measureText(content); + ctx.fillText(content, (canvas.width - metrics.width) / 2, (canvas.height - parseInt(iconStyle.fontSize)) / 2); + return canvas.toDataURL("image/png"); + } + function getRightSaveName(url, name, type, _ext) { /* 0: i18n("default"), @@ -16887,6 +16903,23 @@ ImgOps | https://imgops.com/#b#`; } } } + let iconStyle = getComputedStyle(node, '::before'); + prop = iconStyle.content; + if (!prop || prop === "none") { + iconStyle = getComputedStyle(node, '::after'); + prop = iconStyle.content; + } + if (prop && prop !== "none") { + prop = prop.replace(/[ '"]/g, ""); + if (prop && prop.length == 1) { + let src = icon2Base64(node, prop, iconStyle); + if (src != "data:,") { + node = document.createElement("img"); + node.src = src; + total.push(node); + } + } + } } return total; }, []); @@ -17647,6 +17680,7 @@ ImgOps | https://imgops.com/#b#`; border:5px solid #313131;\ margin:1px;\ opacity:0.3;\ + box-sizing: content-box;\ background-color: #282828cc;\ '+ (prefs.gallery.transition ? ('\ From 91fca90ebe173f0c316a10153e5b016d38911d57 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 12 Jan 2024 21:09:28 +0800 Subject: [PATCH 648/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 007cfbc2ea4..e20a0419af3 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.1.12.2 +// @version 2023.1.12.3 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -17843,7 +17843,6 @@ ImgOps | https://imgops.com/#b#`; border: 5px solid #ff0000;\ }\ .pv-gallery-maximize-container img{\ - width:100%;\ transition: transform .3s ease 0s;\ transform: scale3d(1, 1, 1);\ cursor: zoom-in;\ From fed02c9d016fbdfc7e0e7aefd489436c920a947b Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 12 Jan 2024 21:11:50 +0800 Subject: [PATCH 649/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index e20a0419af3..c6484e6b00b 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -17843,6 +17843,7 @@ ImgOps | https://imgops.com/#b#`; border: 5px solid #ff0000;\ }\ .pv-gallery-maximize-container img{\ + max-width: 100%;\ transition: transform .3s ease 0s;\ transform: scale3d(1, 1, 1);\ cursor: zoom-in;\ From 60d7d9a0fb5d52f4ab17ec75f2301a5b7e0b081c Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 12 Jan 2024 21:21:11 +0800 Subject: [PATCH 650/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index c6484e6b00b..05c43a2d931 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -17187,7 +17187,7 @@ ImgOps | https://imgops.com/#b#`; column-count: 2;\ -moz-column-count: 2;\ -webkit-column-count: 2;\ - padding-top: 300px;\ + padding-top: 200px;\ }\ .pv-gallery-sidebar-viewmore.showmore{\ transform: scale(3.5);\ @@ -17204,15 +17204,29 @@ ImgOps | https://imgops.com/#b#`; }\ @media only screen and (min-width: 800px) {\ .pv-gallery-maximize-container{\ - column-count: 5;\ - -moz-column-count: 5;\ - -webkit-column-count: 5;\ + column-count: 3;\ + -moz-column-count: 3;\ + -webkit-column-count: 3;\ padding-top: 30px;\ }\ .pv-gallery-maximize-container span>p{\ opacity: 0;\ }\ }\ + @media only screen and (min-width: 1000px) {\ + .pv-gallery-maximize-container{\ + column-count: 4;\ + -moz-column-count: 4;\ + -webkit-column-count: 4;\ + }\ + }\ + @media only screen and (min-width: 1500px) {\ + .pv-gallery-maximize-container{\ + column-count: 5;\ + -moz-column-count: 5;\ + -webkit-column-count: 5;\ + }\ + }\ span.pv-gallery-tipsWords{\ font-size: 50px;\ font-weight: bold;\ From 5383ed7262ee8d39233033da834570d967938410 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 13 Jan 2024 12:40:52 +0800 Subject: [PATCH 651/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 82760325718..f8ffe3b5bff 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.14 +// @version 1.9.37.15 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1537,11 +1537,14 @@ if (rulesData.customFirst) { if (checkCustomRules()) return; + await sleep(1); if (checkHpRules()) return; } else { if (checkHpRules()) return; + await sleep(1); if (checkCustomRules()) return; } + await sleep(1); for (let i in this.smartRules) { let rule = this.smartRules[i]; @@ -1557,7 +1560,7 @@ await sleep(1000); } setTimeout(() => { - let end = r + 25; + let end = r + 20; end = end > self.rules.length ? self.rules.length : end; for (; r < end; r++) { let rule = self.rules[r]; From be855751b8f0e0acdce1499dc3bcf2dca287037d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 13 Jan 2024 12:41:15 +0800 Subject: [PATCH 652/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 6e28835f86d..1f47facfca3 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.14](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.15](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 64a0d97b64ba7fade0906cdf7abfadd299187cb2 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 14 Jan 2024 02:00:04 +0000 Subject: [PATCH 653/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index ac329f36092..b3461cca626 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -38545,17 +38545,17 @@ }, { "resource_url": "http://wedata.net/items/41315", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "name": "Weblio英語例文検索", - "created_by": "mi", - "updated_at": "2017-04-03T10:10:03+09:00", "data": { - "exampleUrl": "http://ejje.weblio.jp/sentence/content/%E6%84%9F%E3%81%98%E3%82%8B", + "pageElement": "id('main')//div[contains(concat(' ', @class, ' '), ' mainBlock ')][.//div[contains(concat(' ', @class, ' '), ' qotC ')]]", + "nextLink": "//span[@class='TargetPage']/following-sibling::a[1]", "url": "^https?://ejje\\.weblio\\.jp/sentence/content/", - "pageElement": "id('main')//div[contains(concat(' ', @class, ' '), ' kiji ')]/div[contains(concat(' ', @class, ' '), ' qotC ')]", - "nextLink": "//span[@class='TargetPage']/following-sibling::a[1]" + "exampleUrl": "http://ejje.weblio.jp/sentence/content/%E6%84%9F%E3%81%98%E3%82%8B" }, - "created_at": "2011-01-11T20:11:35+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mi", + "name": "Weblio英語例文検索", + "created_at": "2011-01-11T20:11:35+09:00", + "updated_at": "2024-01-13T17:03:32+09:00" }, { "resource_url": "http://wedata.net/items/41272", From 8338e6c6ae4e3155a94db90c61576c3d05852b8d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 14 Jan 2024 16:38:45 +0800 Subject: [PATCH 654/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 54851f33b65..73f41ae1125 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.65 +// @version 1.7.66 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -3613,7 +3613,7 @@ e.preventDefault(); if (e.target.nodeName.toUpperCase() === 'EM') return; if (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) return; - if (this.wordModeBtn.classList.contains("checked")) { + if (this.lockWords.indexOf(word.oriWord) === -1) { return; } this.showModifyWindow(word, wordSpan); @@ -6194,7 +6194,7 @@ } await this.createType(siteConfig); sitesNum += siteConfig.sites.length; - if (sitesNum > 500) { + if (sitesNum > 100) { await sleep(1); sitesNum = 0; } @@ -6504,7 +6504,7 @@ for (let siteConfig of bookmarkTypes) { await this.createType(siteConfig); sitesNum += siteConfig.sites.length; - if (sitesNum > 200) { + if (sitesNum > 100) { await sleep(1); sitesNum = 0; } @@ -6611,11 +6611,14 @@ this.searchInPageTab.checked = true; this.con.classList.add("in-find"); let beginHandler = () => { - setTimeout(() => { + setTimeout(async () => { if (getBody(document).style.display === "none") getBody(document).style.display = ""; if (this.lockWords) { this.initInPageWords = []; } else { + while (document.hidden) { + await sleep(1000); + } let word = this.initInPageWords.shift(); while (word) { this.searchJumperInPageInput.value = word; From 0a1e684e05086cf8c92f0dc486bd5cd85ee369ea Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 14 Jan 2024 19:24:01 +0800 Subject: [PATCH 655/812] Update pvcep_lang.js --- Picviewer CE+/pvcep_lang.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Picviewer CE+/pvcep_lang.js b/Picviewer CE+/pvcep_lang.js index d1f8260b6cc..e12c4033659 100644 --- a/Picviewer CE+/pvcep_lang.js +++ b/Picviewer CE+/pvcep_lang.js @@ -172,6 +172,7 @@ const langData = [ magnifierRadius: "Default radius", magnifierWheelZoomEnabled: "Enable wheel zoom", magnifierWheelZoomRange: "Zoom ratio for magnifier", + magnifierScaleImage: "Zoom image by wheel", gallery: "Gallery", galleryFitToScreen: "Scale the image to fit the screen", galleryFitToScreenSmall: "Scale the small image also", @@ -424,6 +425,7 @@ const langData = [ magnifierRadius: "默认半径", magnifierWheelZoomEnabled: "启用滚轮缩放", magnifierWheelZoomRange: "滚轮缩放的倍率", + magnifierScaleImage: "用滚轮缩放图片", gallery: "图库", galleryFitToScreen: "对图片进行缩放以适应屏幕", galleryFitToScreenSmall: "小图也缩放以适应屏幕", @@ -676,6 +678,7 @@ const langData = [ magnifierRadius: "默認半徑", magnifierWheelZoomEnabled: "啟用滾輪縮放", magnifierWheelZoomRange: "滾輪縮放的倍率", + magnifierScaleImage: "用滾輪縮放圖片", gallery: "圖庫", galleryFitToScreen: "對圖片進行縮放以適應屏幕", galleryFitToScreenSmall: "小圖也縮放以適應屏幕", @@ -929,6 +932,7 @@ const langData = [ magnifierRadius: "Tamanho padrão da lupa", magnifierWheelZoomEnabled: "Permitir ampliação com a roda do mouse", magnifierWheelZoomRange: "Faixa de ampliação da lupa", + magnifierScaleImage: "Zoom image by wheel", gallery: "Galeria", galleryFitToScreen: "Ampliar a imagem para caber na tela", galleryFitToScreenSmall: "Ampliar imagens pequenas também", @@ -1182,6 +1186,7 @@ const langData = [ magnifierRadius: "Радиус по умолчанию", magnifierWheelZoomEnabled: "Включить масштабирование прокруткой колёсиком мыши", magnifierWheelZoomRange: "Множитель масштабирования прокруткой колёсиком мышки", + magnifierScaleImage: "Zoom image by wheel", gallery: "Галерея", galleryFitToScreen: "Масштабировать изображения под размер экрана", galleryFitToScreenSmall: "Маленькие изображения также масштабируется в соответствии с размером экрана", @@ -1435,6 +1440,7 @@ const langData = [ magnifierRadius: "Varsayılan yarıçap", magnifierWheelZoomEnabled: "Fare tekerleğiyle yakınlaştırmayı etinleştir", magnifierWheelZoomRange: "Büyüteç için yakınlaştırma oranı", + magnifierScaleImage: "Zoom image by wheel", gallery: "Galeri", galleryFitToScreen: "Görüntüyü ekrana sığacak şekilde ölçeklendir", galleryFitToScreenSmall: "Ayrıca küçük resmi de ölçeklendir", @@ -1688,6 +1694,7 @@ const langData = [ magnifierRadius: "Радіус за замовчуванням", magnifierWheelZoomEnabled: "Ввімкнути масштабування коліщатком миші", magnifierWheelZoomRange: "Множник масштабування коліщатком миші", + magnifierScaleImage: "Zoom image by wheel", gallery: "Галерея", galleryFitToScreen: "Масштабувати зображення під розмір екрану", galleryFitToScreenSmall: "Маленькі зображення також масштабуються відповідно до розміру екрана", From 3a4e7a400ecdab852d8bbd04f9ee2b2346ac8d20 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 14 Jan 2024 19:27:41 +0800 Subject: [PATCH 656/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 72 +++++++++++++++-------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 05c43a2d931..1cf848c2018 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.1.12.3 +// @version 2023.1.14.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -45,7 +45,7 @@ // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 // @require https://update.greasyfork.org/scripts/438080/1303651/pvcep_rules.js -// @require https://update.greasyfork.org/scripts/440698/1262309/pvcep_lang.js +// @require https://update.greasyfork.org/scripts/440698/1311439/pvcep_lang.js // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js // @match *://*/* @@ -11885,7 +11885,11 @@ ImgOps | https://imgops.com/#b#`; }; img.src = dataurl; } - function urlToBlob(url, cb, forcePng) { + function urlToBlob(url, cb, forcePng, tryTimes = 0) { + tryTimes++; + if (tryTimes > 3) { + return cb(null, ''); + } _GM_xmlhttpRequest({ method: 'GET', url: url, @@ -11911,17 +11915,19 @@ ImgOps | https://imgops.com/#b#`; }); }; a.onerror = function (e){ - cb(null, ''); + urlToBlob(url, cb, forcePng, tryTimes); } - }else{ + } else if (!blob) { + urlToBlob(url, cb, forcePng, tryTimes); + } else { cb(blob, ext); } }, onerror: function(){ - cb(null, ''); + urlToBlob(url, cb, forcePng, tryTimes); }, ontimeout: function(){ - cb(null, ''); + urlToBlob(url, cb, forcePng, tryTimes); } }); } @@ -12021,6 +12027,7 @@ ImgOps | https://imgops.com/#b#`; wheelZoom:{//滚轮缩放. enabled:true, pauseFirst:true,//需要暂停(单击暂停)后,才能缩放.(推荐,否则因为放大镜会跟着鼠标,如果放大镜过大,那么会影响滚动.).. + scaleImage:true, range:[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.7,1.9,2,2.5,3.0,4.0,5.0,6.0,7.0,8.0,9.0],//缩放的范围 }, }, @@ -14885,7 +14892,7 @@ ImgOps | https://imgops.com/#b#`; zip.file(imgName.replace(/\//g, "").replace(/\.webp$/, ".png"), blob); } else console.debug("error: "+imgSrc); downloaded++; - self.showTips("Downloading "+downloaded+"/"+len, 100000); + self.showTips("Downloading "+downloaded+"/"+len, 1000000); if(downloaded == len){ self.showTips("Begin compress to ZIP...", 100000); zip.generateAsync({type:"blob"}, meta=>{self.showCompressProgress(meta)}).then(function(content){ @@ -14897,7 +14904,7 @@ ImgOps | https://imgops.com/#b#`; } if(/^data:/.test(imgSrc) || imgSrc.split("/")[2]==document.domain){ self.dataURLToCanvas(imgSrc, canvas=>{ - self.showTips("Downloading "+(downloaded+1)+"/"+len, 100000); + self.showTips("Downloading "+(downloaded+1)+"/"+len, 1000000); if(!canvas){ crosHandler(imgSrc); return; @@ -15325,29 +15332,6 @@ ImgOps | https://imgops.com/#b#`; this.addViewmoreItem(nodes); } }, - corsUrlToBlob:function (url, cb){ - if(!url)return cb(null); - _GM_xmlhttpRequest({ - method: 'GET', - url: url, - responseType:'arraybuffer', - timeout:20000, - headers: { - origin: location.origin, - referer: location.href, - accept: "*/*" - }, - onload: function(d) { - cb(d.response); - }, - onerror: function(){ - cb(null); - }, - ontimeout: function(){ - cb(null); - } - }); - }, dataURLToCanvas:function (dataurl, cb){ if(!dataurl)return cb(null); var canvas = document.createElement('CANVAS'); @@ -18690,8 +18674,24 @@ ImgOps | https://imgops.com/#b#`; }, zoom:function(e){ if(e.deltaY===0)return;//非Y轴的滚动 - if(prefs.magnifier.wheelZoom.pauseFirst && !this.paused)return; e.preventDefault(); + var ms=this.magnifier.style; + if(prefs.magnifier.wheelZoom.pauseFirst && !this.paused){ + if (typeof prefs.magnifier.wheelZoom.scaleImage !== false) { + let curScale = ms.transform.match(/[\d\.]+/); + if (curScale) { + curScale = parseFloat(curScale[0]); + } else curScale = 1; + if (e.deltaY < 0) { + curScale += 0.1; + } else { + curScale -= 0.1; + } + if (curScale < 0.5) curScale = 0.5; + ms.transform = `scale(${curScale})`; + } + return; + } if(e.deltaY < 0){//向上滚,放大; if(this.diameter >= this.maxDia)return; this.zoomOut=false; @@ -18712,7 +18712,6 @@ ImgOps | https://imgops.com/#b#`; var bRadius=this.radius; this.radius=radius; this.setMouseRange(); - var ms=this.magnifier.style; ms.width=diameter+'px'; ms.height=diameter+'px'; ms.borderRadius=radius+1 + 'px'; @@ -23851,6 +23850,11 @@ ImgOps | https://imgops.com/#b#`; type: 'checkbox', "default": prefs.magnifier.wheelZoom.enabled, }, + 'magnifier.wheelZoom.scaleImage': { + label: i18n("magnifierScaleImage"), + type: 'checkbox', + "default": typeof prefs.magnifier.wheelZoom.scaleImage !== false, + }, 'magnifier.wheelZoom.range': { label: i18n("magnifierWheelZoomRange"), type: 'textarea', From c3824b25f85c5075e131165c84b59690a201ac5c Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Jan 2024 08:27:05 +0800 Subject: [PATCH 657/812] Update README.md --- Picviewer CE+/README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Picviewer CE+/README.md b/Picviewer CE+/README.md index 4563a03dc3d..8f7acd2633f 100644 --- a/Picviewer CE+/README.md +++ b/Picviewer CE+/README.md @@ -21,13 +21,15 @@ More settings in "Picviewer CE+ config" to be customized, reviewing them is curr + And so on ... -If you are glad to help me translate Picviewer CE+, [come here](https://github.com/hoothin/UserScripts/blob/master/Picviewer%20CE%2B/pvcep_lang.js#L1). +If you are glad to help me translate Picviewer CE+, [edit this file](https://github.com/hoothin/UserScripts/blob/master/Picviewer%20CE%2B/pvcep_lang.js#L1). It will help the people who speak the same language just like you. Thank you. -If you wish to add more rules for peculiar sites, come to [my Github](https://github.com/hoothin/UserScripts/blob/master/Picviewer%20CE%2B/pvcep_rules.js) and pull requests or open issues. +If you wish to add more rules for peculiar sites, feel free to pull requests or open issues. -### Custom rules example for config: +**💝Buy me a coffee with [Ko-fi](https://ko-fi.com/hoothin) or [愛發電](https://afdian.net/a/hoothin) to keep my scripts always up to date.** +
+

Custom rules example for config:

1. This can add click-to-open for existing asiansister rule. Place it into the '[]' of rule textarea.
@@ -78,8 +80,11 @@ Using a standalone script, you have the ability to manage all of your custom rul
     ];
 })();
 ```
+ 
+ +## Gallery page +[https://hoothin.github.io/UserScripts/Picviewer%20CE+/gallery.html](https://hoothin.github.io/UserScripts/Picviewer%20CE+/gallery.html) -### [📍Gallery page](https://hoothin.github.io/UserScripts/Picviewer%20CE+/gallery.html) *A blank Gallery page designed for viewing pictures, showcasing every image you have imported.* Include `mode=1` to open gallery in view-more mode.
@@ -87,8 +92,6 @@ Add `imgs=http://xxx/xxx.jpg` to import images. ` ` to split multi-image, `[01-0 For example: `https://hoothin.github.io/UserScripts/Picviewer%20CE+/gallery.html?imgs=http://xxx/xxx[01-99].jpg`
Just easily drag and drop your local images into the gallery to view them. -*Buy me a coffee with [Ko-fi](https://ko-fi.com/hoothin) or [愛發電](https://afdian.net/a/hoothin) to keep my scripts always up to date.* - Thousands compatible sites for find larger or original images like From 7b72ea478933f3126d2cb4440b06d529bb8bf7f8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Jan 2024 09:47:09 +0800 Subject: [PATCH 658/812] Update README.md --- Picviewer CE+/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/README.md b/Picviewer CE+/README.md index 8f7acd2633f..c1367389a37 100644 --- a/Picviewer CE+/README.md +++ b/Picviewer CE+/README.md @@ -1,4 +1,4 @@ -# Popup/scale/rotate/batch save pictures and load pictures from next pages automatically. +# Picviewer CE+ - Popup/scale/rotate/batch save pictures and load pictures from next pages automatically. Press CTRL+g to enter gallery quickly. Hold CTRL to view larger picture when mouse over images or links. @@ -26,7 +26,7 @@ It will help the people who speak the same language just like you. Thank you. If you wish to add more rules for peculiar sites, feel free to pull requests or open issues. -**💝Buy me a coffee with [Ko-fi](https://ko-fi.com/hoothin) or [愛發電](https://afdian.net/a/hoothin) to keep my scripts always up to date.** +### 💝Buy me a coffee with [Ko-fi](https://ko-fi.com/hoothin) or [愛發電](https://afdian.net/a/hoothin) to keep my scripts always up to date.

Custom rules example for config:

From 98555d406c3e2611e51d40bda7e42f3bf4e635a6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Jan 2024 13:09:34 +0800 Subject: [PATCH 659/812] 1.9.37.16 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 125 +++++++++++++++++++++++++++++++------- 2 files changed, 103 insertions(+), 24 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 1f47facfca3..2149061d7a6 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.15](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.16](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index f8ffe3b5bff..4632c547e2f 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.15 +// @version 1.9.37.16 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -192,6 +192,8 @@ nextSwitch: "Switch next link", arrowToScroll: "Press left arrow key to scroll prev and right arrow key to scroll next", sideController: "Display the paging control bar in the sidebar", + sideControllerScroll: "Scroll button", + sideControllerAlways: "Always show", hideLoadingIcon: "Hide loading animation", hideBarArrow: "Hide arrow for page bar", duplicate: "Duplicate Pagetual have been installed, check your script manager!", @@ -312,6 +314,8 @@ nextSwitch: "切换其他页码", arrowToScroll: "左方向键滚动至上一页,右方向键滚动至下一页", sideController: "在侧边显示翻页控制栏", + sideControllerScroll: "滚动开关", + sideControllerAlways: "始终显示", hideLoadingIcon: "隐藏加载动画", hideBarArrow: "隐藏分隔条定位箭头", duplicate: "检测到永页机重复安装,请删除其他脚本管理器中的永页机!", @@ -432,6 +436,8 @@ nextSwitch: "切換其他頁碼", arrowToScroll: "左方向鍵滾動至上一頁,右方向鍵滾動至下一頁", sideController: "在側邊顯示翻頁控制欄", + sideControllerScroll: "滾燈開關", + sideControllerAlways: "始終顯示", hideLoadingIcon: "隱藏加載動畫", hideBarArrow: "隱藏分隔條定位箭頭", duplicate: "檢測到永頁機重複安裝,請刪除其他腳本管理器中的永頁機!", @@ -552,6 +558,8 @@ nextSwitch: "次のページに切り替え", arrowToScroll: "左矢印キーで前へ、右矢印キーで次へ", sideController: "サイドバーにページング コントロール バーを表示する", + sideControllerScroll: "スクロール スイッチ", + sideControllerAlways: "常に表示", hideLoadingIcon: "読み込み中のアニメーションを隠す", hideBarArrow: "分割線の位置矢印を隠す", duplicate: "Pagetual の重複インストールが検出されました。他のスクリプト マネージャで永続的なページ マシンを削除してください!", @@ -672,6 +680,8 @@ nextSwitch: "Переключить ссылку на следующую страницу", arrowToScroll: "Листать страницы клавишами со стрелками влево и вправо", sideController: "Показать справа панель перемещения по вкладке", + sideControllerScroll: "Переключатель прокрутки", + sideControllerAlways: "Всегда показывать", hideLoadingIcon: "Скрыть анимацию загрузки", hideBarArrow: "Скрыть кнопки перемещения на разделителе", duplicate: "Похоже, Pagetual установлен несколько раз. Пожалуйста, удалите Pagetual из других менеджеров скриптов!", @@ -3385,6 +3395,9 @@ }); return; } + if (rulesData.sideControllerAlways) { + sideController.setup(); + } //若是再亂匹配就不緩存wedata,或者只在找完本地規則之後再考慮wedata的緩存 if (self.curSiteRule.smart) { delete self.curSiteRule.pageElement; @@ -3701,9 +3714,6 @@ opacity: 0.35; transition: opacity .5s ease, background .5s, box-shadow .5s; } - #pagetual-sideController:hover { - opacity: 1; - } #pagetual-sideController * { font-weight: bold; font-family: arial; @@ -3726,13 +3736,6 @@ transform: scale(1.5); color: red!important; } - #pagetual-sideController.minSize { - box-shadow: rgb(0 0 0 / 0%) 0px 0px 0px; - background: #00000000!important; - } - #pagetual-sideController.minSize .pagetual-sideController-btn { - opacity: 0; - } #pagetual-sideController #pagetual-sideController-move > svg { transition: transform .3s ease; } @@ -3775,10 +3778,34 @@ #pagetual-sideController.minSize #pagetual-sideController-pagenum { opacity: 0.8; } + #pagetual-sideController:hover { + opacity: 1; + } + #pagetual-sideController>.scroll { + width: 30px; + height: 30px; + top: -38px; + left: 5px; + opacity: 0.1; + position: absolute; + cursor: pointer; + transition: opacity .3s ease; + } + #pagetual-sideController>.scroll:hover { + opacity: 1; + } + #pagetual-sideController.minSize { + box-shadow: rgb(0 0 0 / 0%) 0px 0px 0px; + background: #00000000!important; + } + #pagetual-sideController.minSize .pagetual-sideController-btn { + opacity: 0; + } `; let frame = document.createElement("div"); frame.id = "pagetual-sideController"; frame.innerHTML = createHTML(` +
@@ -3794,6 +3821,10 @@ let next = frame.querySelector("#pagetual-sideController-next"); let bottom = frame.querySelector("#pagetual-sideController-bottom"); let pagenum = frame.querySelector("#pagetual-sideController-pagenum"); + let scroll = frame.querySelector(".scroll"); + if (rulesData.sideControllerScroll === false) { + scroll.style.display = "none"; + } if (sideControllerIcon) move.innerHTML = sideControllerIcon; frame.addEventListener("dblclick", e => { @@ -3813,6 +3844,22 @@ }, 800); }); + document.body.addEventListener('touchstart', e => { + if (e.target === frame || frame.contains(e.target)) { + frame.classList.remove("minSize"); + } else { + frame.classList.add("minSize"); + } + }); + scroll.addEventListener("click", e => { + autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; + autoScroll = parseInt(autoScroll) || 0; + if (autoScroll < 0) autoScroll = 0; + else if (autoScroll > 1000) autoScroll = 1000; + setListData("autoScroll", location.host + location.pathname, autoScroll); + startAutoScroll(); + }, true); + pre.addEventListener("click", e => { let prePageBar = getPageBar().preBar; if (prePageBar) { @@ -3884,15 +3931,31 @@ picker.start(); }; + let clientX = e => { + if (e.type.indexOf('mouse') === 0) { + return e.clientX; + } else { + return e.changedTouches[0].clientX; + } + }; + + let clientY = e => { + if (e.type.indexOf('mouse') === 0) { + return e.clientY; + } else { + return e.changedTouches[0].clientY; + } + }; + let mouseMoveHandler = e => { if (moving) { let windowHeight = window.innerHeight || document.documentElement.clientHeight; let windowWidth = window.innerWidth || document.documentElement.clientWidth; - initX = (e.clientX - 10 + 40) / windowWidth * 100; - initY = (e.clientY - 83 + 83) / windowHeight * 100; + initX = (clientX(e) - 10 + 40) / windowWidth * 100; + initY = (clientY(e) - 83 + 83) / windowHeight * 100; this.frame.style.top = `calc(${initY}% - 83px)`; this.frame.style.left = `calc(${initX}% - 40px)`; - } else if (Math.abs(e.clientX - initX) + Math.abs(e.clientY - initY) > 20) { + } else if (Math.abs(clientX(e) - initX) + Math.abs(clientY(e) - initY) > 20) { moving = true; clearTimeout(removeTimer); } @@ -3901,23 +3964,35 @@ clearTimeout(removeTimer); document.removeEventListener("mousemove", mouseMoveHandler, true); document.removeEventListener("mouseup", mouseUpHandler, true); + document.removeEventListener("touchmove", mouseMoveHandler, true); + document.removeEventListener("touchend", mouseUpHandler, true); if (moving) { rulesData.sideControllerPos = {x: parseInt(initX), y: parseInt(initY)}; storage.setItem("rulesData", rulesData); } }; - - move.addEventListener("mousedown", e => { - initX = e.clientX; - initY = e.clientY; + let mouseDownHandler = e => { + initX = clientX(e); + initY = clientY(e); moving = false; clearTimeout(removeTimer); removeTimer = setTimeout(() => { - self.remove(); + if (e.type === "touchstart") { + picker.start(); + } else { + self.remove(); + } }, 1500); document.addEventListener("mousemove", mouseMoveHandler, true); document.addEventListener("mouseup", mouseUpHandler, true); - }, true); + document.addEventListener("touchmove", mouseMoveHandler, true); + document.addEventListener("touchend", mouseUpHandler, true); + e.stopPropagation(); + e.preventDefault(); + }; + + move.addEventListener("mousedown", mouseDownHandler, true); + move.addEventListener("touchstart", mouseDownHandler, true); this.frame = frame; this.pagenum = pagenum; @@ -4187,7 +4262,7 @@ display: inline-block; width: calc(100% - 65px); height: 20px; - min-width: 290px; + min-width: 250px; max-width: calc(65vw - 50px); min-height: unset; max-height: unset; @@ -5217,11 +5292,11 @@ padding: 0!important; } #saveBtn { - width: 60%; + width: 60vw; position: fixed; z-index: 999; bottom: 0; - left: 20%; + left: 20vw; background-color: #6b6b6b99; font-size: xx-large; opacity: 0.8; @@ -5645,6 +5720,8 @@ let setConfigPageInput = createCheckbox(i18n("setConfigPage"), false); let enableWhiteListInput = createCheckbox(i18n("autoRun"), rulesData.enableWhiteList != true); let sideControllerInput = createCheckbox(i18n("sideController"), rulesData.sideController); + let sideControllerScrollInput = createCheckbox(i18n("sideControllerScroll"), rulesData.sideControllerScroll !== false, "h4", sideControllerInput); + let sideControllerAlwaysInput = createCheckbox(i18n("sideControllerAlways"), rulesData.sideControllerAlways, "h4", sideControllerInput); let enableDebugInput = createCheckbox(i18n("enableDebug"), rulesData.enableDebug != false); let enableHistoryInput = createCheckbox(i18n("enableHistory"), rulesData.enableHistory === true); let enableHistoryAfterInsertInput = createCheckbox(i18n("enableHistoryAfterInsert"), rulesData.enableHistoryAfterInsert === true, "h4", enableHistoryInput); @@ -5852,6 +5929,8 @@ rulesData.sideControllerPos = false; } rulesData.sideController = sideControllerInput.checked; + rulesData.sideControllerScroll = sideControllerScrollInput.checked; + rulesData.sideControllerAlways = sideControllerAlwaysInput.checked; rulesData.pageElementCss = pageElementCssInput.value; rulesData.customCss = customCssInput.value; rulesData.upBtnImg = upBtnImgInput.value; From cb03bbbcbcf37a7e22bfe2153862ee4a7e1b4f25 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Jan 2024 14:34:28 +0800 Subject: [PATCH 660/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 48 ++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 1cf848c2018..8599c26e143 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.1.14.1 +// @version 2023.1.15.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -12028,6 +12028,10 @@ ImgOps | https://imgops.com/#b#`; enabled:true, pauseFirst:true,//需要暂停(单击暂停)后,才能缩放.(推荐,否则因为放大镜会跟着鼠标,如果放大镜过大,那么会影响滚动.).. scaleImage:true, + ctrl: false, + alt: false, + shift: false, + meta: false, range:[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.7,1.9,2,2.5,3.0,4.0,5.0,6.0,7.0,8.0,9.0],//缩放的范围 }, }, @@ -18567,11 +18571,11 @@ ImgOps | https://imgops.com/#b#`; this._clickOut=this.clickOut.bind(this); this._keydown=this.keydown.bind(this); - if(prefs.magnifier.wheelZoom.enabled){ + if (prefs.magnifier.wheelZoom.enabled || typeof prefs.magnifier.wheelZoom.scaleImage !== false) { this.zoomLevel=1; this.defaultDia=diameter; addWheelEvent(container,this._zoom,false); - }; + } container.addEventListener('mouseover',this._focus,false); container.addEventListener('mouseout',this._blur,false); @@ -18673,8 +18677,13 @@ ImgOps | https://imgops.com/#b#`; return level; }, zoom:function(e){ + if ((e.metaKey != !!prefs.magnifier.wheelZoom.meta) || + (e.altKey != !!prefs.magnifier.wheelZoom.alt) || + (e.ctrlKey != !!prefs.magnifier.wheelZoom.ctrl) || + (e.shiftKey != !!prefs.magnifier.wheelZoom.shift)) { + return; + } if(e.deltaY===0)return;//非Y轴的滚动 - e.preventDefault(); var ms=this.magnifier.style; if(prefs.magnifier.wheelZoom.pauseFirst && !this.paused){ if (typeof prefs.magnifier.wheelZoom.scaleImage !== false) { @@ -18689,9 +18698,12 @@ ImgOps | https://imgops.com/#b#`; } if (curScale < 0.5) curScale = 0.5; ms.transform = `scale(${curScale})`; + e.preventDefault(); } return; } + if(!prefs.magnifier.wheelZoom.enabled)return; + e.preventDefault(); if(e.deltaY < 0){//向上滚,放大; if(this.diameter >= this.maxDia)return; this.zoomOut=false; @@ -23759,7 +23771,7 @@ ImgOps | https://imgops.com/#b#`; "default": false, }, 'floatBar.globalkeys.command': { - after: "COMMAND", + after: "META", type: 'checkbox', className: 'sep-x', "default": false, @@ -23855,6 +23867,32 @@ ImgOps | https://imgops.com/#b#`; type: 'checkbox', "default": typeof prefs.magnifier.wheelZoom.scaleImage !== false, }, + 'magnifier.wheelZoom.ctrl': { + label: '', + type: 'checkbox', + after: "CTRL +", + "default": false, + line: 'start' + }, + 'magnifier.wheelZoom.alt': { + after: "ALT +", + type: 'checkbox', + className: 'sep-x', + "default": false, + }, + 'magnifier.wheelZoom.shift': { + after: "SHIFT +", + type: 'checkbox', + className: 'sep-x', + "default": false, + }, + 'magnifier.wheelZoom.meta': { + after: "META", + type: 'checkbox', + className: 'sep-x', + "default": false, + line: 'end', + }, 'magnifier.wheelZoom.range': { label: i18n("magnifierWheelZoomRange"), type: 'textarea', From 25cbab2da59e5dba2dea5e7c554e8854ce1fca6d Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Jan 2024 17:06:59 +0800 Subject: [PATCH 661/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 8599c26e143..e58927d283d 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.1.15.1 +// @version 2024.1.15.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com From 4ceafc9c9e8c07aacef6820b60ff663392010861 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Jan 2024 19:40:18 +0800 Subject: [PATCH 662/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 4632c547e2f..d5562fb8dd0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.16 +// @version 1.9.37.17 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -3178,7 +3178,12 @@ return null; } if (pageElement && pageElement.length > 0) { - var pELast = pageElement[pageElement.length - 1]; + let pEIndex = pageElement.length - 1; + let pELast = pageElement[pEIndex]; + while(pELast && compareNodeName(pELast, ["link", "meta", "style", "script"])) { + pEIndex--; + pELast = pageElement[pEIndex]; + } this.insert = pELast.nextSibling ? pELast.nextSibling : pELast.parentNode.appendChild(document.createTextNode(' ')); } } @@ -7022,6 +7027,7 @@ ruleParser.initPage(() => {}); urlChanged = false; loadingMore = false; + return; } if (isPause) return; if (!loadingMore) { From 46094104761445dc89033b88e8887c1714eb2045 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Jan 2024 19:41:14 +0800 Subject: [PATCH 663/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 2149061d7a6..f23e637b61a 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.16](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.17](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 47a94b3fe48c285147125d299e205fa2a4b80bc7 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 16 Jan 2024 01:56:02 +0000 Subject: [PATCH 664/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index b3461cca626..fb2bb1bf772 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "data": { + "insertBefore": "", + "pageElement": "id('category_list')/ul/li", + "nextLink": "//div[@class='page_nav']/ul/li[@class='active']/following-sibling::a", + "url": "^https://www\\.megahobby\\.jp/products/", + "exampleUrl": "https://www.megahobby.jp/products/lookup/9/?sort=new" + }, + "created_by": "t_f_m'", + "name": "メガホビ MEGA HOBBY STATION メガハウスのホビー商品情報サイト", + "created_at": "2024-01-15T14:29:37+09:00", + "updated_at": "2024-01-15T14:29:37+09:00", + "resource_url": "http://wedata.net/items/86204", + "database_resource_url": "http://wedata.net/databases/AutoPagerize" +}, { "resource_url": "http://wedata.net/items/86203", "data": { From 37fbc04294e79c85811414f88692bbc570117b96 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 16 Jan 2024 10:08:28 +0800 Subject: [PATCH 665/812] 1.9.37.18 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 70 +++++++++++++++++++++++++++++++-------- 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index f23e637b61a..99c784dcc09 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.17](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.18](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d5562fb8dd0..ae64a25ef88 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.17 +// @version 1.9.37.18 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -192,7 +192,7 @@ nextSwitch: "Switch next link", arrowToScroll: "Press left arrow key to scroll prev and right arrow key to scroll next", sideController: "Display the paging control bar in the sidebar", - sideControllerScroll: "Scroll button", + sideControllerScroll: "Scroll toggle", sideControllerAlways: "Always show", hideLoadingIcon: "Hide loading animation", hideBarArrow: "Hide arrow for page bar", @@ -913,7 +913,7 @@ const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434", "i"); const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u007c\u00bb\u007c\u003e\u003e\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-isrc", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; - var rulesData = {uninited: true, firstRun: true, sideController: !isMobile}, ruleUrls, updateDate, clickedSth = false; + var rulesData = {uninited: true, firstRun: true, sideController: !isMobile}, ruleUrls, updateDate, clickedSth = false, loadNowNum = 5; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; var tryTimes = 0, showedLastPageTips = false, rate = 1, author = ''; @@ -3786,17 +3786,21 @@ #pagetual-sideController:hover { opacity: 1; } - #pagetual-sideController>.scroll { + #pagetual-sideController>.extra { + bottom: 170px; + left: 0px; + width: 40px; + position: absolute; + } + #pagetual-sideController>.extra>svg { width: 30px; height: 30px; - top: -38px; - left: 5px; opacity: 0.1; - position: absolute; cursor: pointer; + margin: 0 0 5px 0; transition: opacity .3s ease; } - #pagetual-sideController>.scroll:hover { + #pagetual-sideController>.extra>svg:hover { opacity: 1; } #pagetual-sideController.minSize { @@ -3810,7 +3814,10 @@ let frame = document.createElement("div"); frame.id = "pagetual-sideController"; frame.innerHTML = createHTML(` - +
+ ${i18n("loadNow")} + ${i18n("sideControllerScroll")} +
@@ -3826,10 +3833,14 @@ let next = frame.querySelector("#pagetual-sideController-next"); let bottom = frame.querySelector("#pagetual-sideController-bottom"); let pagenum = frame.querySelector("#pagetual-sideController-pagenum"); - let scroll = frame.querySelector(".scroll"); + let scroll = frame.querySelector("#scroll"); + let loadNow = frame.querySelector("#loadNow"); if (rulesData.sideControllerScroll === false) { scroll.style.display = "none"; } + if (rulesData.sideControllerLoadNow === false) { + loadNow.style.display = "none"; + } if (sideControllerIcon) move.innerHTML = sideControllerIcon; frame.addEventListener("dblclick", e => { @@ -3856,6 +3867,7 @@ frame.classList.add("minSize"); } }); + scroll.addEventListener("click", e => { autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; autoScroll = parseInt(autoScroll) || 0; @@ -3865,6 +3877,22 @@ startAutoScroll(); }, true); + loadNow.addEventListener("click", e => { + if (autoLoadNum != -1) { + autoLoadNum = -1; + return; + } + let loadNum = window.prompt(i18n("loadConfirm"), loadNowNum); + if (loadNum === "" || loadNum === null) return; + loadNum = Math.abs(parseInt(loadNum)) || 0; + if (loadNowNum != loadNum) { + loadNowNum = loadNum; + storage.setItem("loadNowNum", loadNowNum); + } + autoLoadNum = loadNum; + nextPage(); + }, true); + pre.addEventListener("click", e => { let prePageBar = getPageBar().preBar; if (prePageBar) { @@ -5725,8 +5753,9 @@ let setConfigPageInput = createCheckbox(i18n("setConfigPage"), false); let enableWhiteListInput = createCheckbox(i18n("autoRun"), rulesData.enableWhiteList != true); let sideControllerInput = createCheckbox(i18n("sideController"), rulesData.sideController); - let sideControllerScrollInput = createCheckbox(i18n("sideControllerScroll"), rulesData.sideControllerScroll !== false, "h4", sideControllerInput); let sideControllerAlwaysInput = createCheckbox(i18n("sideControllerAlways"), rulesData.sideControllerAlways, "h4", sideControllerInput); + let sideControllerScrollInput = createCheckbox(i18n("sideControllerScroll"), rulesData.sideControllerScroll !== false, "h4", sideControllerInput); + let sideControllerLoadNowInput = createCheckbox(i18n("loadNow"), rulesData.sideControllerLoadNow !== false, "h4", sideControllerInput); let enableDebugInput = createCheckbox(i18n("enableDebug"), rulesData.enableDebug != false); let enableHistoryInput = createCheckbox(i18n("enableHistory"), rulesData.enableHistory === true); let enableHistoryAfterInsertInput = createCheckbox(i18n("enableHistoryAfterInsert"), rulesData.enableHistoryAfterInsert === true, "h4", enableHistoryInput); @@ -5935,6 +5964,7 @@ } rulesData.sideController = sideControllerInput.checked; rulesData.sideControllerScroll = sideControllerScrollInput.checked; + rulesData.sideControllerLoadNow = sideControllerLoadNowInput.checked; rulesData.sideControllerAlways = sideControllerAlwaysInput.checked; rulesData.pageElementCss = pageElementCssInput.value; rulesData.customCss = customCssInput.value; @@ -6313,6 +6343,11 @@ updateDate = await getData("ruleLastUpdate"); + let _loadNowNum = await getData("loadNowNum"); + if (typeof(_loadNowNum) != "undefined") { + loadNowNum = _loadNowNum; + } + author = await getData("author") || ""; manualPause = !!await getListData("pauseState", location.host); @@ -6535,9 +6570,18 @@ }); } _GM_registerMenuCommand(i18n("loadNow"), () => { - let loadNum = window.prompt(i18n("loadConfirm"), "1"); + if (autoLoadNum != -1) { + autoLoadNum = -1; + return; + } + let loadNum = window.prompt(i18n("loadConfirm"), loadNowNum); if (loadNum === "" || loadNum === null) return; - autoLoadNum = Math.abs(parseInt(loadNum)); + loadNum = Math.abs(parseInt(loadNum)) || 0; + if (loadNowNum != loadNum) { + loadNowNum = loadNum; + storage.setItem("loadNowNum", loadNowNum); + } + autoLoadNum = loadNum; nextPage(); }); } From bee1cd7ff7e038a414274dc6a159420c1ee2088d Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 16 Jan 2024 19:37:22 +0800 Subject: [PATCH 666/812] 1.9.37.19 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 26 +++++++++++--------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 99c784dcc09..c21d7f8bcb7 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.18](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.19](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index ae64a25ef88..9c4424874ab 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.18 +// @version 1.9.37.19 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -6816,22 +6816,18 @@ var tipsWords = document.createElement("div"); tipsWords.className = "pagetual_tipsWords"; - var changeStopTimer; function changeStop(stop) { isPause = stop; - clearTimeout(changeStopTimer); - changeStopTimer = setTimeout(() => { - [].forEach.call(getBody(document).querySelectorAll(".pagetual_pageBar,#pagetual-sideController"), bar => { - if (isPause) { - bar.classList.add("stop"); - } else { - bar.classList.remove("stop"); - } - }); - if (!isPause) ruleParser.showAddedElements(); - manualPause = isPause; - if (sideController.inited) setListData("pauseState", location.host, isPause ? true : ""); - }, 350); + [].forEach.call(getBody(document).querySelectorAll(".pagetual_pageBar,#pagetual-sideController"), bar => { + if (isPause) { + bar.classList.add("stop"); + } else { + bar.classList.remove("stop"); + } + }); + if (!isPause) ruleParser.showAddedElements(); + manualPause = isPause; + if (sideController.inited) setListData("pauseState", location.host, isPause ? true : ""); } function changeHideBar(hide) { From 39207043211b0d8014756f635535ac09c37c0281 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 17 Jan 2024 09:59:44 +0800 Subject: [PATCH 667/812] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cac13f37b8f..12e9e323e9e 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,9 @@ + [JandanHero 煎蛋俠 ![](https://img.shields.io/greasyfork/dt/25597)](JiandanHero) -+ [Pagetual 東方永頁機 ![](https://img.shields.io/greasyfork/dt/438684) ![](https://img.shields.io/greasyfork/dd/438684)](Pagetual) ++ [Pagetual 東方永頁機 ![](https://img.shields.io/greasyfork/dt/438684) ![](https://img.shields.io/greasyfork/dd/438684)](https://pagetual.hoothin.com/) -+ [SearchJumper 搜索醬 ![](https://img.shields.io/greasyfork/dt/445274) ![](https://img.shields.io/greasyfork/dd/445274)](https://github.com/hoothin/SearchJumper) ++ [SearchJumper 搜索醬 ![](https://img.shields.io/greasyfork/dt/445274) ![](https://img.shields.io/greasyfork/dd/445274)](https://search.hoothin.com/) --- ## Contributors From 06697b15dc6ad00c98b7fb3a9e5543ffd3592601 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 17 Jan 2024 13:30:30 +0800 Subject: [PATCH 668/812] 1.9.37.20 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 35 ++++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index c21d7f8bcb7..106069889bb 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.19](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.20](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 9c4424874ab..79216b65e96 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.19 +// @version 1.9.37.20 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -913,7 +913,7 @@ const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434", "i"); const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u007c\u00bb\u007c\u003e\u003e\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-isrc", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; - var rulesData = {uninited: true, firstRun: true, sideController: !isMobile}, ruleUrls, updateDate, clickedSth = false, loadNowNum = 5; + var rulesData = {uninited: true, firstRun: true, sideController: !isMobile}, ruleUrls, updateDate, clickedSth = false, loadNowNum = 5, autoScrollRate = 50; var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false; var tryTimes = 0, showedLastPageTips = false, rate = 1, author = ''; @@ -3869,10 +3869,13 @@ }); scroll.addEventListener("click", e => { - autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; + autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), autoScrollRate)) || 0; autoScroll = parseInt(autoScroll) || 0; if (autoScroll < 0) autoScroll = 0; - else if (autoScroll > 1000) autoScroll = 1000; + if (autoScroll && autoScroll != autoScrollRate) { + autoScrollRate = autoScroll; + storage.setItem("autoScrollRate", autoScrollRate); + } setListData("autoScroll", location.host + location.pathname, autoScroll); startAutoScroll(); }, true); @@ -4613,10 +4616,13 @@ let addPageSelector = frame.querySelector("#addPageSelector"); autoScrollBtn.addEventListener("click", e => { self.close(); - autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; + autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), autoScrollRate)) || 0; autoScroll = parseInt(autoScroll) || 0; if (autoScroll < 0) autoScroll = 0; - else if (autoScroll > 1000) autoScroll = 1000; + if (autoScroll && autoScroll != autoScrollRate) { + autoScrollRate = autoScroll; + storage.setItem("autoScrollRate", autoScrollRate); + } setListData("autoScroll", location.host + location.pathname, autoScroll); startAutoScroll(); }, true); @@ -5088,9 +5094,13 @@ function startAutoScroll() { clearInterval(autoScrollInterval); if (autoScroll <= 0) return; + let scrollRange = 1; + if (autoScroll > 1000) { + scrollRange = parseInt(autoScroll / 1000) + } autoScrollInterval = setInterval(() => { if (isPause) return; - window.scroll(window.scrollX, window.scrollY + 1); + window.scroll(window.scrollX, window.scrollY + scrollRange); }, parseInt(1000 / autoScroll)); } @@ -6347,6 +6357,10 @@ if (typeof(_loadNowNum) != "undefined") { loadNowNum = _loadNowNum; } + let _autoScrollRate = await getData("autoScrollRate"); + if (_autoScrollRate) { + autoScrollRate = _autoScrollRate; + } author = await getData("author") || ""; @@ -6392,10 +6406,13 @@ } }); _GM_registerMenuCommand(i18n("toggleAutoScroll"), () => { - autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 50)) || 0; + autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), autoScrollRate)) || 0; autoScroll = parseInt(autoScroll) || 0; if (autoScroll < 0) autoScroll = 0; - else if (autoScroll > 1000) autoScroll = 1000; + if (autoScroll && autoScroll != autoScrollRate) { + autoScrollRate = autoScroll; + storage.setItem("autoScrollRate", autoScrollRate); + } setListData("autoScroll", location.host + location.pathname, autoScroll); startAutoScroll(); }); From c420ffd68c15cae6bb5e31874b910022a421f6ee Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 17 Jan 2024 16:34:43 +0800 Subject: [PATCH 669/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index e21ec21b899..ffa5c703d7e 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -251,7 +251,7 @@ var siteInfo = [ r: /\d+_\d+\/|\d+_x\d+\.jpg$|@\d+w_\d+h.*\.webp$|_\d+x\d+\.jpg$/i, s: "" }, -{ +/*{ name: "deviantart", example: "http://www.deviantart.com", enabled:true, @@ -288,6 +288,18 @@ var siteInfo = [ } return null; }, +},*/ +{ + name:"deviantart", + url:/^https?:\/\/[^.]*\.deviantart\.com/i, + xhr: { + q: '[property="contentUrl"]' + }, + getImage: function(a, p) { + if (a && a.dataset.hook == "deviation_link") { + return a.href; + } + } }, { name: '花瓣网', From 725a18dbbcd3e7dd049a5960e04e52ce7822c147 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 17 Jan 2024 16:37:04 +0800 Subject: [PATCH 670/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index e58927d283d..73e28c6e7a1 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.15.1 +// @version 2024.1.17.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -44,7 +44,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://update.greasyfork.org/scripts/438080/1303651/pvcep_rules.js +// @require https://update.greasyfork.org/scripts/438080/1312857/pvcep_rules.js // @require https://update.greasyfork.org/scripts/440698/1311439/pvcep_lang.js // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js @@ -22505,8 +22505,18 @@ ImgOps | https://imgops.com/#b#`; return newSrc; }, getImage:function(img, a, p){ - var newSrc,rule; + var newSrc,rule,stopXhr = false; var base64Img=/^data:/i.test(img.src); + if(this._xhr && this._xhr.url){ + newSrc = this._xhr.url.call(img, a, p); + if(newSrc){ + this.xhr = this._xhr || null; + return newSrc; + }else{ + this.xhr = null; + stopXhr = true; + } + } for(var i in this.rules){ rule=this.rules[i]; if((!rule.url || !rule.getImage) && base64Img)continue; @@ -22514,7 +22524,7 @@ ImgOps | https://imgops.com/#b#`; if(rule.exclude && rule.exclude.test(img.src))continue; if(rule.getImage){ newSrc = rule.getImage.call(img, a, p, rule); - this.xhr = (newSrc && !rule.stopXhr) ? (this._xhr || null) : null; + this.xhr = (!stopXhr && newSrc && !rule.stopXhr) ? (this._xhr || null) : null; }else newSrc = null; if(!newSrc){ if(rule.r){ From 71bf032154e1125aa334e83dd2f39eb17a973d28 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 18 Jan 2024 20:13:20 +0800 Subject: [PATCH 671/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 32 +++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 73f41ae1125..e0533861615 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.66 +// @version 1.7.67 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1595,12 +1595,13 @@ padding: 0 10px; border-radius: 5px; transition: transform 0.25s ease, box-shadow 0.25s ease; + box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 3px #9e9e9e1a, 0 1px 2px -1px #9e9e9e1a; } #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:hover { transform: translateY(-6px); -webkit-transform: translateY(-6px); -moz-transform: translateY(-6px); - box-shadow: 0px 5px 28px 0px rgba(65, 106, 123, 0.2); + box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 3px #0000001a, 0 1px 2px -1px #0000001a; } #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:before { content: attr(title); @@ -1614,7 +1615,7 @@ -webkit-line-clamp: 2; -webkit-box-orient: vertical; margin-left: 62px; - margin-top: 30px; + margin-top: 35px; width: 190px; position: absolute; pointer-events: none; @@ -1647,6 +1648,7 @@ margin-top: -28px; color: white; width: 250px; + max-width: calc(100% - 20px); display: flex; justify-content: space-evenly; overflow: hidden; @@ -2675,7 +2677,7 @@ } @media screen and (max-width: 600px) { #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist { - width: 100vw; + width: 95vw; } #search-jumper.search-jumper-showall #search-jumper-alllist.new-mode .sitelist>.sitelistCon { width: calc(100% - 20px); @@ -2683,6 +2685,28 @@ #search-jumper-alllist>.timeInAll, #search-jumper-alllist>.dayInAll { margin: 10px; } + #search-jumper #search-jumper-alllist.new-mode .sitelist a { + width: calc(50vw - 45px); + } + #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:before { + width: 100px; + margin-left: 68px; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a>img { + margin-left: 0; + } + } + @media screen and (max-width: 380px) { + #search-jumper #search-jumper-alllist.new-mode .sitelist a { + width: calc(100vw - 60px); + } + #search-jumper #search-jumper-alllist.new-mode .sitelist>.sitelistCon>div:before { + width: calc(100vw - 150px); + margin-left: 85px; + } + #search-jumper #search-jumper-alllist.new-mode .sitelist a+p { + width: calc(100vw - 60px); + } } @media screen and (max-width: 800px) { .search-jumper-input .line { From 9104dc933699c8c8b4674cc1c61883b58c59e94e Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 19 Jan 2024 10:07:48 +0800 Subject: [PATCH 672/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 131 ++++++++++++++++++---------- 1 file changed, 87 insertions(+), 44 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 73e28c6e7a1..8095f7c2597 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.17.1 +// @version 2024.1.19.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11781,7 +11781,7 @@ ImgOps | https://imgops.com/#b#`; canvas.width = size; canvas.height = size; var ctx = canvas.getContext("2d"); - ctx.font = iconStyle.font; + ctx.font = iconStyle.font || (iconStyle.fontSize + " " + iconStyle.fontFamily); ctx.strokeStyle = iconStyle.color || "black"; ctx.fillStyle = iconStyle.color || "black"; ctx.textBaseline = "top"; @@ -11968,7 +11968,7 @@ ImgOps | https://imgops.com/#b#`; function createScript(html){ return escapeHTMLPolicy?escapeHTMLPolicy.createScript(html):html; } - function init(topObject,window,document,arrayFn,envir,storage,unsafeWindow){ + async function init(topObject,window,document,arrayFn,envir,storage,unsafeWindow){ // 默认设置,请到设置界面修改 prefs={ floatBar:{//浮动工具栏相关设置. @@ -12396,6 +12396,46 @@ ImgOps | https://imgops.com/#b#`; }; }(); + const old_create = unsafeWindow.URL.createObjectURL; + const old_revoke = unsafeWindow.URL.revokeObjectURL; + Object.defineProperty(unsafeWindow.URL, 'createObjectURL', { + get: () => storeAndCreate + }); + Object.defineProperty(unsafeWindow.URL, 'getFromObjectURL', { + get: () => getBlob + }); + const dict = {}; + + function storeAndCreate(blob) { + const url = old_create(blob); + dict[url] = blob; + return url + } + + function getBlob(url) { + return dict[url] || null; + } + + function blobToDataURL(blob, cb) { + var a = new FileReader(); + a.readAsDataURL(blob); + a.onload = function (e){ + cb(e.target.result); + }; + a.onerror = function (e){ + cb(null); + } + } + + async function getBase64FromBlobUrl(blobUrl) { + let blob = unsafeWindow.URL.getFromObjectURL(blobUrl); + return new Promise(resolve => { + blobToDataURL(blob, base64 => { + resolve(base64); + }); + }); + } + var rulerEle = document.createElement("span"); if (rulerEle.style) { rulerEle.style.visibility = "hidden"; @@ -15353,19 +15393,9 @@ ImgOps | https://imgops.com/#b#`; }; img.src = dataurl; }, - blobToDataURL:function(blob, cb){ - var a = new FileReader(); - a.readAsDataURL(blob); - a.onload = function (e){ - cb(e.target.result); - }; - a.onerror = function (e){ - cb(null); - } - }, blobToCanvas: function (blob, cb){ var self=this; - this.blobToDataURL(blob, function (dataurl){ + blobToDataURL(blob, function (dataurl){ self.dataURLToCanvas(dataurl, cb); }); }, @@ -16769,9 +16799,9 @@ ImgOps | https://imgops.com/#b#`; return stop; }, - reload: function() {// 重新加载所有图片到库里面 + reload: async function() {// 重新加载所有图片到库里面 // 函数在 LoadingAnimC 中 - var data = this.getAllValidImgs(); + var data = await this.getAllValidImgs(); // 设置当前选中的图片 data.target = { src: this.selected.dataset.src @@ -16781,14 +16811,14 @@ ImgOps | https://imgops.com/#b#`; this.load(data, null, true); }, - reloadNew: function() {// 加载新的图片到库里面 + reloadNew: async function() {// 加载新的图片到库里面 var newer = true; - var data = this.getAllValidImgs(newer); + var data = await this.getAllValidImgs(newer); if (data.length) { this._appendThumbSpans(data); } }, - getAllValidImgs:function(newer){ + getAllValidImgs:async function(newer){ var validImgs = []; var container = document.querySelector('.pv-gallery-container'), preloadContainer = document.querySelector('.pv-gallery-preloaded-img-container'); @@ -16814,12 +16844,12 @@ ImgOps | https://imgops.com/#b#`; if (!node.src) { node.src = node.toDataURL("image/png"); } - total.push(node); } catch(e) {} } if (!node.src && node.dataset.src) { node.src = node.dataset.src; - delete node.dataset.src; + } + if (node.src) { total.push(node); } } @@ -16940,22 +16970,32 @@ ImgOps | https://imgops.com/#b#`; // 已经在图库里面的 var self = this; - imgs.forEach(function(img) { + for (const img of imgs) { let isImg = /^IMG$/i.test(img.nodeName); if (isImg) { pretreatment(img); } - if(!img.src || (isImg && img.getAttribute && !img.getAttribute("src"))) return; - if (newer && self._dataCache[img.src]) return; + if(!img.src || (isImg && img.getAttribute && !img.getAttribute("src"))) continue; + if (newer && self._dataCache[img.src]) continue; var result = findPic(img); if (result) { + if (result.src === 'data:,') continue; + + if (result.imgSrc.indexOf('blob:') === 0){ + if (result.src == result.imgSrc) { + result.imgSrc = await getBase64FromBlobUrl(result.imgSrc); + result.src = result.imgSrc; + } else { + result.imgSrc = await getBase64FromBlobUrl(result.imgSrc); + } + } validImgs.push(result); self.data.push(result); } self._dataCache[img.src] = true; - }); + } return validImgs; }, @@ -18933,12 +18973,12 @@ ImgOps | https://imgops.com/#b#`; var maxButton=container.querySelector('.pv-pic-window-max'); maxButton.style.cssText='top: -24px;right: 46px;'; this.maxButton=maxButton; - maxButton.addEventListener('click',function(e){ + maxButton.addEventListener('click',async function(e){ if(!gallery){ gallery=new GalleryC(); gallery.data=[]; } - var allData=gallery.getAllValidImgs(); + var allData=await gallery.getAllValidImgs(); if(allData.length<1)return; allData.target={src:img.src}; gallery.data=allData; @@ -19339,7 +19379,7 @@ ImgOps | https://imgops.com/#b#`; this.preButton.style.display = "none"; this.nextButton.style.display = "none"; }, - switchImage:function(fw){ + switchImage:async function(fw){ if (!gallery) { gallery = new GalleryC(); gallery.data = []; @@ -19347,7 +19387,7 @@ ImgOps | https://imgops.com/#b#`; if (gallery.shown || gallery.minimized) { return; } - var allData = gallery.getAllValidImgs(); + var allData = await gallery.getAllValidImgs(); if (allData.length <= 1) return; for (let i = 0; i < allData.length; i++) { let imgData = allData[i]; @@ -20829,7 +20869,7 @@ ImgOps | https://imgops.com/#b#`; }; }; }, - focusedKeydown:function(e){ + focusedKeydown:async function(e){ var keyCode=e.keyCode; if (this.data && this.data.img && e.key.toLowerCase() == prefs.floatBar.keys.download) { downloadImg(this.img.src, (this.data.img.title || this.data.img.alt), prefs.saveName); @@ -20854,7 +20894,7 @@ ImgOps | https://imgops.com/#b#`; gallery = new GalleryC(); gallery.data = []; } - var allData = gallery.getAllValidImgs(); + var allData = await gallery.getAllValidImgs(); if (allData.length < 1) return; allData.target = {src: this.img.src}; gallery.data = allData; @@ -21471,7 +21511,7 @@ ImgOps | https://imgops.com/#b#`; self.imgReady = imgReady(img, opts); }, - load:function(img,e){ + load:async function(img,e){ this.remove(); this.img=img; var buttonType=this.buttonType; @@ -21481,7 +21521,7 @@ ImgOps | https://imgops.com/#b#`; gallery=new GalleryC(); gallery.data=[]; } - var allData=gallery.getAllValidImgs(); + var allData=await gallery.getAllValidImgs(); allData.target=this.data; this.data=allData; }; @@ -22034,7 +22074,15 @@ ImgOps | https://imgops.com/#b#`; self.setPosition(); },100); }, - open:function(e,buttonType){ + open:async function(e,buttonType){ + if (this.data.imgSrc.indexOf("blob:") === 0) { + if (this.data.src === this.data.imgSrc) { + this.data.imgSrc = await getBase64FromBlobUrl(this.data.imgSrc); + this.data.src = this.data.imgSrc; + } else { + this.data.imgSrc = await getBase64FromBlobUrl(this.data.imgSrc); + } + } if (buttonType === 'download' && !this.data.xhr) { downloadImg(this.data.src || this.data.imgSrc, (this.data.img.title || this.data.img.alt), prefs.saveName); return; @@ -22353,11 +22401,6 @@ ImgOps | https://imgops.com/#b#`; if(!src)return; - if(/^blob/i.test(imgSrc)){ - imgSrc=drawTobase64(img); - src=imgSrc; - } - var ret = { src: src, // 得到的src srcs: srcs, // 多个 src,失败了会尝试下一个 @@ -23398,12 +23441,12 @@ ImgOps | https://imgops.com/#b#`; return true; } - function openGallery(){ + async function openGallery(){ if(!gallery){ gallery=new GalleryC(); gallery.data=[]; } - var allData=gallery.getAllValidImgs(); + var allData=await gallery.getAllValidImgs(); if(allData.length<1)return; gallery.data=allData; gallery.load(gallery.data); @@ -24416,7 +24459,7 @@ ImgOps | https://imgops.com/#b#`; let gallery = new GalleryC(); gallery.data = []; gallery.lockGallery = true; - var allData = gallery.getAllValidImgs(); + var allData = await gallery.getAllValidImgs(); gallery.data = allData; gallery.load(gallery.data); let searchParams = new URLSearchParams(location.search); @@ -24435,8 +24478,8 @@ ImgOps | https://imgops.com/#b#`; let autoViewMore=siteReg[0]=="@"; if(autoViewMore)siteReg=siteReg.substr(1); if(new RegExp(siteReg).test(_URL)){ - setTimeout(function(){ - let gallery = openGallery(); + setTimeout(async function(){ + let gallery = await openGallery(); if (gallery && autoViewMore) gallery.maximizeSidebar(); },2000); break; From 32d1dbd1e8d463f6ce4ccd107e23e2629c22bb49 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 19 Jan 2024 17:38:56 +0800 Subject: [PATCH 673/812] Update Switch Traditional Chinese and Simplified Chinese.user.js --- .../Switch Traditional Chinese and Simplified Chinese.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js index 5cc2c878f79..46bb001ca62 100644 --- a/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js +++ b/Switch Traditional Chinese and Simplified Chinese/Switch Traditional Chinese and Simplified Chinese.user.js @@ -7,8 +7,8 @@ // @supportURL https://github.com/hoothin/UserScripts // @homepageURL https://github.com/hoothin/UserScripts // @version 1.2.7.7 -// @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體) -// @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体) +// @description 任意轉換網頁中的簡體中文與正體中文(默認簡體→正體),顯示漢字對應漢語拼音,自訂任意替換文本 +// @description:zh-CN 任意转换网页中的简体中文与繁体中文(默认繁体→简体),显示汉字对应汉语拼音,自定义任意替换文本 // @description:ja 簡繁中国語に変換 // @description:en Just Switch Traditional Chinese and Simplified Chinese // @author hoothin From 7087e60fcf4b2c97ac214a9f4f0edefb1efab66d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 20 Jan 2024 10:37:20 +0800 Subject: [PATCH 674/812] update --- DownloadAllContent/DownloadAllContent.user.js | 5 ++-- Picviewer CE+/Picviewer CE+.user.js | 25 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index db764bda1bb..a691ecc7bbb 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.3 +// @version 2.8.3.1 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -611,6 +611,7 @@ if (window.top != window.self) { float: initial; background-image: initial; height: fit-content; + color: black; } #filterListContainer.customRule .dacCustomRule { display: flex; @@ -1532,7 +1533,7 @@ if (window.top != window.self) { }) exmpEles.forEach(e=>{ var cssSelStr="a",pa=e.parentNode,excludeTxt=excludeTxts[e]; - if(e.className)cssSelStr+="."+CSS.escape(e.className); + if(e.className)cssSelStr+="."+CSS.escape(e.className.replace(/\s+/g, ".")).replace(/\\\./g, '.'); while(pa && pa.nodeName!="BODY"){ cssSelStr=pa.nodeName+">"+cssSelStr; pa=pa.parentNode; diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 8095f7c2597..4488ba45323 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.19.1 +// @version 2024.1.20.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11738,7 +11738,7 @@ ImgOps | https://imgops.com/#b#`; let isPost = option && /^post$/i.test(option.method); _GM_xmlhttpRequest({ method: (option && option.method) || 'GET', - url: url, + url: url.trim(), data: (option && option.body) || '', headers: (option && option.headers) || { referer: url, @@ -11892,7 +11892,7 @@ ImgOps | https://imgops.com/#b#`; } _GM_xmlhttpRequest({ method: 'GET', - url: url, + url: url.trim(), responseType:'blob', timeout:20000, headers: { @@ -11917,7 +11917,7 @@ ImgOps | https://imgops.com/#b#`; a.onerror = function (e){ urlToBlob(url, cb, forcePng, tryTimes); } - } else if (!blob) { + } else if (!blob || !blob.size) { urlToBlob(url, cb, forcePng, tryTimes); } else { cb(blob, ext); @@ -12398,12 +12398,7 @@ ImgOps | https://imgops.com/#b#`; const old_create = unsafeWindow.URL.createObjectURL; const old_revoke = unsafeWindow.URL.revokeObjectURL; - Object.defineProperty(unsafeWindow.URL, 'createObjectURL', { - get: () => storeAndCreate - }); - Object.defineProperty(unsafeWindow.URL, 'getFromObjectURL', { - get: () => getBlob - }); + unsafeWindow.URL.createObjectURL = storeAndCreate; const dict = {}; function storeAndCreate(blob) { @@ -12428,7 +12423,8 @@ ImgOps | https://imgops.com/#b#`; } async function getBase64FromBlobUrl(blobUrl) { - let blob = unsafeWindow.URL.getFromObjectURL(blobUrl); + let blob = getBlob(blobUrl); + if (!blob) return ""; return new Promise(resolve => { blobToDataURL(blob, base64 => { resolve(base64); @@ -16968,6 +16964,7 @@ ImgOps | https://imgops.com/#b#`; return !(container.contains(img) || (preloadContainer&&preloadContainer.contains(img))); }); + await sleep(1); // 已经在图库里面的 var self = this; for (const img of imgs) { @@ -16990,6 +16987,10 @@ ImgOps | https://imgops.com/#b#`; result.imgSrc = await getBase64FromBlobUrl(result.imgSrc); } } + if (result.sizeH == 0 && result.sizeW == 0) { + result.sizeH = img.naturalHeight; + result.sizeW = img.naturalWidth; + } validImgs.push(result); self.data.push(result); } @@ -24664,7 +24665,7 @@ ImgOps | https://imgops.com/#b#`; function getUrl(url, callback, onError){ _GM_xmlhttpRequest({ method: 'GET', - url: url, + url: url.trim(), onload: callback, onerror: onError }); From 9525b3fd3023ea8284445afd5dbe94c909b3a9cd Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 20 Jan 2024 16:04:56 +0800 Subject: [PATCH 675/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 4488ba45323..309c10af5c1 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.20.1 +// @version 2024.1.20.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16549,6 +16549,7 @@ ImgOps | https://imgops.com/#b#`; return false; }); function loadImg(img){ + img.onerror = null; var result = findPic(img); self.loadingImgNum++; if (result.xhr) { From bd29f9ab2dfac54ab58f00931e8e080856fa066b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 20 Jan 2024 18:19:36 +0800 Subject: [PATCH 676/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index a691ecc7bbb..8dadf1284cc 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.3.1 +// @version 2.8.3.2 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -1250,6 +1250,7 @@ if (window.top != window.self) { function getPageContent(doc, cb, url){ if(!doc)return i18n.error; + if(doc.body && !doc.body.children.length)return doc.body.innerText; if(processFunc){ return processFunc(doc, cb, url); } @@ -1621,6 +1622,11 @@ if (window.top != window.self) { } } } + let charsetMatch = evalCode.match(/^charset:{(.+?)}/); + if (charsetMatch) { + charset = charsetMatch[1]; + evalCode = evalCode.replace(charsetMatch[0], ""); + } let nextMatch = evalCode.match(/^next:(\{+)/); if (nextMatch) { let splitLen = nextMatch[1].length; From ce36405c085609bcb36aed580d7ecf579ebd25e9 Mon Sep 17 00:00:00 2001 From: emanuelsipos <76777112+emanuelsipos@users.noreply.github.com> Date: Sat, 20 Jan 2024 15:00:13 +0200 Subject: [PATCH 677/812] Update pagetualRules.json Added Podium Audio --- Pagetual/pagetualRules.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index b9f909c67f3..036972e04fb 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -1,4 +1,15 @@ [ +{ + "name": "Podium Audio", + "author": "uwuceo with help from Hoothin", + "url": "^https?://podiumaudio\\.com", + "example": "https://podiumaudio.com/browse-titles/", + "pageElement": "div.browse-all-titles-grid-container > div.inner > div", + "loadMore": "div.load-more-section > a", + "css": ".loading{opacity: 1;}", + "autoClick": "div.load-more-section > a", + "rate": 5 +}, { "name": "PubMed", "author": "1nker", From 394fe5a67ed0c002d26c8be97bcaa99b5de3af69 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 21 Jan 2024 10:34:32 +0800 Subject: [PATCH 678/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index ffa5c703d7e..2773bd97509 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -288,7 +288,7 @@ var siteInfo = [ } return null; }, -},*/ +}, { name:"deviantart", url:/^https?:\/\/[^.]*\.deviantart\.com/i, @@ -300,6 +300,22 @@ var siteInfo = [ return a.href; } } +},*/ +{ + name:"deviantart", + url:/^https?:\/\/[^.]*\.deviantart\.com/i, + getImage: function(a, p) { + if (!a) return; + let media =Object.keys(a).filter(prop => prop.indexOf("__reactProps") === 0); + if (!media || !a[media] || !a[media].children || !a[media].children.props || !a[media].children.props.deviation) return; + media = a[media].children.props.deviation.media; + let fullview = media.types.filter(d => d.t === "fullview"); + let ext = media.baseUri.match(/\.\w+$/); + if (!fullview || !ext) return; + fullview = fullview[0]; + ext = ext[0]; + return media.baseUri + `/v1/fill/w_${fullview.w},h_${fullview.h}/${media.prettyName}-fullview${ext}?token=` + media.token[0]; + } }, { name: '花瓣网', From 8275d20a802b33a5ea8b8edd3e005c091926f502 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 21 Jan 2024 14:20:19 +0800 Subject: [PATCH 679/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 67 +++++++++++++++++++---------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 309c10af5c1..00dffd00067 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.20.2 +// @version 2024.1.21.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -44,7 +44,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://update.greasyfork.org/scripts/438080/1312857/pvcep_rules.js +// @require https://update.greasyfork.org/scripts/438080/1314917/pvcep_rules.js // @require https://update.greasyfork.org/scripts/440698/1311439/pvcep_lang.js // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js @@ -12137,6 +12137,7 @@ ImgOps | https://imgops.com/#b#`; for (let i in lazyImgAttr) { let attrName = lazyImgAttr[i]; let attrValue = this.getAttribute(attrName); + if (/\bimagecover\.\w+$/i.test(attrValue)) continue; if (attrValue) { newsrc = attrValue; break; @@ -16984,8 +16985,10 @@ ImgOps | https://imgops.com/#b#`; if (result.src == result.imgSrc) { result.imgSrc = await getBase64FromBlobUrl(result.imgSrc); result.src = result.imgSrc; + result.srcs = [result.imgSrc]; } else { result.imgSrc = await getBase64FromBlobUrl(result.imgSrc); + result.srcs = [result.imgSrc]; } } if (result.sizeH == 0 && result.sizeW == 0) { @@ -17142,8 +17145,8 @@ ImgOps | https://imgops.com/#b#`; left: 0;\ width: 100%;\ height: 100%;\ - min-width:none;\ - min-height:none;\ + min-width:unset;\ + min-height:unset;\ padding: 0;\ margin: 0;\ border: none;\ @@ -21938,7 +21941,6 @@ ImgOps | https://imgops.com/#b#`; } } } - var bodyPosi=document.documentElement.getBoundingClientRect(); var windowSize=getWindowSize(); var img=this.data.img; @@ -21947,17 +21949,34 @@ ImgOps | https://imgops.com/#b#`; var offsetX=prefs.floatBar.offset.x; var offsetY=prefs.floatBar.offset.y; + let body = getBody(document); + let offsetParent, bodyPosi; + if (unsafeWindow.getComputedStyle(body).position === "static") { + offsetParent = document.documentElement; + bodyPosi = { + top: 0, + bottom: windowSize.h, + left: 0, + right: windowSize.w + }; + } else { + offsetParent = body; + bodyPosi = offsetParent.getBoundingClientRect(); + } - var scrolled=getScrolled(); - targetPosi.top -= bodyPosi.top + scrolled.y - (parseInt(unsafeWindow.getComputedStyle(document.documentElement).marginTop) || 0); - targetPosi.left -= bodyPosi.left + scrolled.x; + + var scrolled=getScrolled(offsetParent); + targetPosi.top = targetPosi.top - bodyPosi.top; + targetPosi.left = targetPosi.left - bodyPosi.left; + targetPosi.bottom = bodyPosi.bottom - targetPosi.bottom; + targetPosi.right = bodyPosi.right - targetPosi.right; var fbs = this.floatBar.style; var setPosition = { top:function() { - var top = targetPosi.top + scrolled.y; + var top = targetPosi.top; if (targetPosi.top + offsetY < 10) { - top = scrolled.y; + top += 10; offsetY = 0; } else { if (prefs.floatBar.stayOut) { @@ -21967,15 +21986,15 @@ ImgOps | https://imgops.com/#b#`; } if (targetPosi.height <= 50) top -= 10; } + fbs.bottom = 'unset'; fbs.top = top + 'px'; }, right:function() { - var right = windowSize.w - targetPosi.right; + var right = targetPosi.right; if (right < offsetX) { - right = -scrolled.x; + right += 10; offsetX = 0; } else { - right -= scrolled.x; if (prefs.floatBar.stayOut) { right = right - offsetX - prefs.floatBar.stayOutOffsetX; } else { @@ -21983,15 +22002,15 @@ ImgOps | https://imgops.com/#b#`; } if (targetPosi.width <= 50) right += 10; } + fbs.left = 'unset'; fbs.right = right + 'px'; }, bottom:function() { - var bottom = windowSize.h - targetPosi.bottom; + var bottom = targetPosi.bottom; if (bottom <= offsetY) { - bottom = -scrolled.y; + bottom += 10; offsetY = 0; } else { - bottom -= scrolled.y; if (prefs.floatBar.stayOut) { bottom = bottom - offsetY - 40 - prefs.floatBar.stayOutOffsetY; } else { @@ -21999,12 +22018,13 @@ ImgOps | https://imgops.com/#b#`; } if (targetPosi.height <= 50) bottom += 10; } + fbs.top = 'unset'; fbs.bottom = bottom + 'px'; }, left:function() { - var left = targetPosi.left + scrolled.x; + var left = targetPosi.left; if (targetPosi.left + offsetX < 0) { - left = scrolled.x; + left += 10; offsetX = 0; } else { if (prefs.floatBar.stayOut) { @@ -22014,21 +22034,20 @@ ImgOps | https://imgops.com/#b#`; } if (targetPosi.width <= 50) left -= 10; } + fbs.right = 'unset'; fbs.left = left + 'px'; }, center:function() { - var left = targetPosi.left + scrolled.x + offsetX; + var left = targetPosi.left + offsetX; fbs.left = left + targetPosi.width / 2 + 'px'; }, hide:function(){ - var top=targetPosi.top + scrolled.y; + var top=targetPosi.top; if(targetPosi.top + offsetY < 0){ - top=scrolled.y; offsetY=0; } - var left=targetPosi.left + scrolled.x; + var left=targetPosi.left; if(targetPosi.left + offsetX < 0){ - left=scrolled.x; offsetX=0; } if(prefs.floatBar.stayOut){ @@ -22081,8 +22100,10 @@ ImgOps | https://imgops.com/#b#`; if (this.data.src === this.data.imgSrc) { this.data.imgSrc = await getBase64FromBlobUrl(this.data.imgSrc); this.data.src = this.data.imgSrc; + this.data.srcs = [this.data.imgSrc]; } else { this.data.imgSrc = await getBase64FromBlobUrl(this.data.imgSrc); + this.data.srcs = [this.data.imgSrc]; } } if (buttonType === 'download' && !this.data.xhr) { From 1bd4f1555a2fd67e5661b1238b3f325eadd41645 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 21 Jan 2024 20:17:07 +0800 Subject: [PATCH 680/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 00dffd00067..4140e3936b8 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.21.1 +// @version 2024.1.21.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -21966,10 +21966,10 @@ ImgOps | https://imgops.com/#b#`; var scrolled=getScrolled(offsetParent); - targetPosi.top = targetPosi.top - bodyPosi.top; - targetPosi.left = targetPosi.left - bodyPosi.left; - targetPosi.bottom = bodyPosi.bottom - targetPosi.bottom; - targetPosi.right = bodyPosi.right - targetPosi.right; + targetPosi.top = targetPosi.top - bodyPosi.top + scrolled.y; + targetPosi.left = targetPosi.left - bodyPosi.left + scrolled.x; + targetPosi.bottom = bodyPosi.bottom - targetPosi.bottom - scrolled.y; + targetPosi.right = bodyPosi.right - targetPosi.right - scrolled.x; var fbs = this.floatBar.style; var setPosition = { @@ -24478,7 +24478,12 @@ ImgOps | https://imgops.com/#b#`; } } - if (location.hostname == "hoothin.github.io" && location.pathname == "/UserScripts/Picviewer%20CE+/gallery.html") { + var configStyle = document.createElement("style"); + configStyle.textContent = "#pv-prefs { display: initial; }"; + configStyle.type = 'text/css'; + if (location.hostname == "hoothin.github.io" && location.pathname == "/UserScripts/Picviewer%20CE+/") { + openPrefs(); + } else if (location.hostname == "hoothin.github.io" && location.pathname == "/UserScripts/Picviewer%20CE+/gallery.html") { let gallery = new GalleryC(); gallery.data = []; gallery.lockGallery = true; @@ -24513,9 +24518,6 @@ ImgOps | https://imgops.com/#b#`; // 注册按键 document.addEventListener('keydown', keydown, true); - var configStyle = document.createElement("style"); - configStyle.textContent = "#pv-prefs { display: initial; }"; - configStyle.type = 'text/css'; function openPrefs() { let fieldsSearchData = GM_config.fields["gallery.searchData"]; if (fieldsSearchData && fieldsSearchData.value) { @@ -24529,7 +24531,11 @@ ImgOps | https://imgops.com/#b#`; GM_config.open(); setTimeout(()=>{ - if(GM_config.frame && GM_config.frame.style && GM_config.frame.style.display=="none"){ + if (GM_config.frame && GM_config.frame.contentDocument.body.innerHTML === "") { + _GM_openInTab("https://hoothin.github.io/UserScripts/Picviewer%20CE+/", {active:true}); + return; + } + if (GM_config.frame && GM_config.frame.style && GM_config.frame.style.display == "none") { GM_config.frame.src=""; } initKeyInputs(); From 8e91e6c1cd20543d939e6c08b67b4d76b9254337 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 21 Jan 2024 21:18:42 +0800 Subject: [PATCH 681/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 51 ++++++++++++++++------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 4140e3936b8..497d23fcbcf 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.21.2 +// @version 2024.1.21.3 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11841,10 +11841,35 @@ ImgOps | https://imgops.com/#b#`; } return name.replace(/.*\/([^\/]+?)(\?|@|$).*/, "$1").replace(/[\*\/:<>\?\\\|]/g, "").replace(/\.\w{2,5}$/, "").trim() + (ext || ".png"); } + function canonicalUri(src) { + if (src.charAt(0) == "#") return location.href + src; + if (src.charAt(0) == "?") return location.href.replace(/^([^\?#]+).*/, "$1" + src); + var root_page = /^[^?#]*\//.exec(location.href)[0], + base_path = location.pathname.replace(/\/[^\/]+\.[^\/]+$/, "/"), + root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0], + absolute_regex = /^\w+\:\/\//; + src = src.replace("./", ""); + if (/^\/\/\/?/.test(src)) { + src = location.protocol + src; + } + else if (!absolute_regex.test(src) && src.charAt(0) != "/"){ + src = (base_path || "") + src; + } + return (absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src)); + } var _GM_download = (typeof GM_download == 'undefined') ? (url, name, type) => { - name = document.title + " - " + getRightSaveName(url, name, type); - saveAs(url, name); + url = canonicalUri(url); + urlToBlob(url, (blob, ext) => { + if(blob){ + try { + saveAs(blob, document.title + " - " + getRightSaveName(url, name, type, ext)); + } catch(e) { + console.log(e); + } + } + }); } : (url, name, type) => { + url = canonicalUri(url); name = document.title + " - " + getRightSaveName(url, name, type); let urlSplit = ["", ""]; if (url.split) { @@ -11860,11 +11885,9 @@ ImgOps | https://imgops.com/#b#`; }], onerror: e => { console.log(e); - saveAs(url, name); }, ontimeout: e => { console.log(e); - saveAs(url, name); } }) }; @@ -16447,22 +16470,6 @@ ImgOps | https://imgops.com/#b#`; if(!next)next=curPage.querySelector('[rel="next"]'); return {pre:pre,next:next}; }, - canonicalUri:function(src){ - if (src.charAt(0) == "#") return location.href + src; - if (src.charAt(0) == "?") return location.href.replace(/^([^\?#]+).*/, "$1" + src); - var root_page = /^[^?#]*\//.exec(location.href)[0], - base_path = location.pathname.replace(/\/[^\/]+\.[^\/]+$/, "/"), - root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0], - absolute_regex = /^\w+\:\/\//; - src=src.replace("./", ""); - if (/^\/\/\/?/.test(src)){ - src = location.protocol + src; - } - else if (!absolute_regex.test(src) && src.charAt(0) != "/"){ - src = (base_path || "") + src; - } - return (absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src)); - }, completePages:[location.href], href:location.href, pageAllReady:false, @@ -16518,7 +16525,7 @@ ImgOps | https://imgops.com/#b#`; }else{ self.completePages.push(href); } - self.href=self.canonicalUri(href); + self.href=canonicalUri(href); _GM_xmlhttpRequest({ method: 'GET', url: self.href, From 3802d93433d4bafa0d3903288796aa940a882a41 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 22 Jan 2024 09:32:02 +0800 Subject: [PATCH 682/812] 1.9.37.21 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 106069889bb..659c26e75e7 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.20](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.21](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 79216b65e96..60d0af8ab65 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.20 +// @version 1.9.37.21 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2410,9 +2410,9 @@ } if (!next) { await sleep(1); - let pageDiv = body.querySelector("div.pages>ul"); + let pageDiv = body.querySelector(".pages>ul,.page_no>ul"); if (pageDiv) { - cur = pageDiv.querySelector("li>b"); + cur = pageDiv.querySelector("li>b,li>strong"); if (cur) next = cur.parentNode.nextElementSibling; if (next) next = next.querySelector("a"); } From 9629153e8d29f8bb27c3bbb03730b432481f35e0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 22 Jan 2024 11:06:41 +0800 Subject: [PATCH 683/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 60d0af8ab65..d980ac14efd 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -3727,6 +3727,7 @@ color: black!important; line-height: normal; float: none; + text-align: center; } #pagetual-sideController.stop { -webkit-filter: invert(100%); From cbeae990811e562dfeead98c63d43dd6ef09b9dd Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 22 Jan 2024 13:16:23 +0800 Subject: [PATCH 684/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 036972e04fb..36f03283927 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9464,7 +9464,8 @@ "sandbox": false, "pageElement": "ul.cube-list>li,ul.video-list>li,ul.relation-list>li", "nextLink": ".be-pager-next,.next-page", - "wait": 1000 + "wait": 1000, + "css": ".b-img.sleepy .b-img__inner{opacity:1}" }, { "name": "动漫屋1", From e28f811246f550f5a31f1643d61828b943e98dc6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 09:16:45 +0800 Subject: [PATCH 685/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 497d23fcbcf..d00a3f42079 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -21933,9 +21933,9 @@ ImgOps | https://imgops.com/#b#`; } var targetPosi = getContentClientRect(this.data.img); var pa = this.data.img.parentNode; - if (pa && pa.scrollHeight > 20 && pa.scrollWidth > 20) { + if (pa && pa.scrollHeight > 30 && pa.scrollWidth > 30) { var paPosi=getContentClientRect(pa); - if (paPosi.width > 20 && paPosi.height > 20) { + if (paPosi.width > 30 && paPosi.height > 30) { if (this.data.img.offsetTop != 0) { if (paPosi.height < targetPosi.height) { targetPosi.top = paPosi.top; From 797d02dec1028e808ba0c4cb9adc3b619755f9d6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 10:47:44 +0800 Subject: [PATCH 686/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 240 ++++++++++++++++++++++++++---- 1 file changed, 207 insertions(+), 33 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index e0533861615..db5a0ccbe8f 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.67 +// @version 1.7.68 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -271,6 +271,11 @@ template: '请设置【#t#】的值', recordAction: '录制操作', startRecord: '开始录制操作,按回车键结束录制', + loopAction: '开始循环', + loopActionEnd: '循环结束', + loopStart: '开始循环,循环次数为#t#', + loopEnd: '结束循环', + loopTimes: '循环次数,将遍历所有匹配元素并顺序执行', loadingCollection: '正在加载合集,请稍候……' }; break; @@ -380,6 +385,11 @@ template: '請設置【#t#】的值', recordAction: '錄製動作', startRecord: '開始錄製操作,按下回車鍵結束錄製', + loopAction: '開始循環', + loopActionEnd: '循環結束', + loopStart: '開始循環,循環次數為#t#', + loopEnd: '結束循環', + loopTimes: '循環次數,將遍歷所有匹配元素並順序執行', loadingCollection: '正在載入合集,請稍候……' }; break; @@ -488,6 +498,11 @@ template: '[#t#]の値を設定してください', RecordAction: '記録操作', startRecord: '記録操作を開始します。記録を終了するには Enter キーを押してください', + loopAction: 'ループの開始', + loopActionEnd: 'ループの終了', + loopStart: 'ループを開始します。ループ数は #t# です', + loopEnd: 'ループの終了', + loopTimes: 'ループの数。一致するすべての要素が走査され、順番に実行されます', loadingCollection: 'コレクションを読み込み中...' }; break; @@ -589,6 +604,11 @@ template: 'Please set the value of "#t#"', recordAction: 'Record operation', startRecord: 'Start to record operation, press Enter to end', + loopAction: 'Start loop', + loopActionEnd: 'Stop loop', + loopStart: 'Start looping, the number of loops is #t#', + loopEnd: 'Stop loop', + loopTimes: 'Number of loops, all matching elements will be traversed and executed sequentially', loadingCollection: 'Preparing collection for SearchJumper...' }; break; @@ -1012,7 +1032,8 @@ var result = doc.evaluate(xpath, contextNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); return result.singleNodeValue && result.singleNodeValue.nodeType === 1 && result.singleNodeValue; } catch (err) { - throw new Error(`Invalid xpath: ${xpath}`); + debug(`Invalid xpath: ${xpath}`); + return false; } } @@ -1022,6 +1043,7 @@ } function getAllElements(sel, doc, contextNode) { + if (!doc) doc = document; try { if (!isXPath(sel)) { return doc.querySelectorAll(sel); @@ -6263,7 +6285,7 @@ lastSign = false; if (inPagePostParams) { - await this.submitAction(inPagePostParams); + this.submitAction(inPagePostParams); setTimeout(() => { storage.setListItem("inPagePostParams", location.hostname, ""); }, 10000); @@ -8203,19 +8225,22 @@ this.submitAction(params); return; } - let form, input, clicked = false, self = this; + let form, input, clicked = false, self = this, inLoop = false, loopTimes = 0, loopArr = []; let opened = false; - for (let param of params) { + let singleAction = async (param, eleIndex) => { + let result = true; if (param[0] === "sleep" || param[0] === "@sleep") { await sleep(param[1]); debug(`sleep ${param[1]}`); } else if (param[0] === "@click") { clicked = true; - await emuClick(param[1]); + let _r = await emuClick(param[1], eleIndex); + if (!_r) result = false; } else if (param[1] === 'click' && param[0].indexOf('@') === 0) { clicked = true; - await emuClick(param[0].substr(1)); + let _r = await emuClick(param[0].substr(1), eleIndex); + if (!_r) result = false; } else if (param[0] === '@call') { let func = window[param[1]] || new AsyncFunction('"use strict";' + param[1]); if (func) await func(); @@ -8245,14 +8270,41 @@ inputStr = customInputStr; } else { storage.setListItem("inPagePostParams", location.hostname, ""); - return; + return true; } } - await emuInput(param[0], inputStr); + let _r = await emuInput(param[0], inputStr, eleIndex); + if (!_r) result = false; if (param[0] !== "@") { input = getElement(param[0]); } } + return result; + }; + + for (let param of params) { + if (param[0] === "@loopStart") { + inLoop = true; + loopArr = []; + loopTimes = parseInt(param[1]) || 1; + } else if (param[0] === "@loopEnd") { + inLoop = false; + while (loopTimes-- > 0) { + let allReady = false, eleIndex = 0; + while (!allReady) { + allReady = true; + for (let param of loopArr) { + let ready = await singleAction(param, eleIndex); + if (!ready) allReady = false; + } + eleIndex++; + } + } + } else if (inLoop) { + loopArr.push(param); + } else { + await singleAction(param); + } if (inPagePostParams) { inPagePostParams.shift(); storage.setListItem("inPagePostParams", location.hostname, inPagePostParams && inPagePostParams.length ? inPagePostParams : ""); @@ -8262,6 +8314,20 @@ } } } + if (inLoop) { + inLoop = false; + while (loopTimes-- > 0) { + let allReady = false, eleIndex = 0; + while (!allReady) { + allReady = true; + for (let param of loopArr) { + let ready = await singleAction(param, eleIndex); + if (!ready) allReady = false; + } + eleIndex++; + } + } + } if (!clicked && input) { form = input.parentNode; @@ -8463,7 +8529,8 @@ let getUrl = async (_keyWords) => { self.customInput = false; inputString = ""; - let hasWordParam = wordParamReg.test(data.url); + let dataUrl = data.url; + let hasWordParam = wordParamReg.test(dataUrl); let keywords = _keyWords || self.searchJumperInputKeyWords.value || getSelectStr(); if (!keywords && !draging && !self.bar.classList.contains("search-jumper-isTargetLink")) { keywords = getKeywords(); @@ -8478,7 +8545,14 @@ } let postMatch; if (inPagePost) { - postMatch = data.url.match(/#p{([\s\S]*[^\\])}/); + if (dataUrl.indexOf('%input{') !== -1) { + dataUrl = await new Promise(resolve => { + self.showCustomInputWindow(dataUrl, _url => { + resolve(_url); + }); + }); + } + postMatch = dataUrl.match(/#p{([\s\S]*[^\\])}/); } let host = location.host; let href = location.href; @@ -8536,7 +8610,7 @@ return str.replace(keyToReg(key, "g"), (after ? after(value.replace(/\$/g, "$$$$")) : value.replace(/\$/g, "$$$$"))); } }; - let needDecode = (/^c(opy)?:|[#:%]P{|^javascript:|^showTips:/i.test(data.url)); + let needDecode = (/^c(opy)?:|[#:%]P{|^javascript:|^showTips:/i.test(dataUrl)); let keywordsU = "", keywordsL = "", keywordsR = "", keywordsSC = "", keywordsTC = ""; let customReplaceKeywords = str => { let _str = str; @@ -8665,7 +8739,7 @@ return str; } if (!ele.dataset.url) { - let tempUrl = data.url; + let tempUrl = dataUrl; if (inPagePost) { tempUrl = tempUrl.replace(postMatch[0], ""); } @@ -8687,7 +8761,7 @@ if (targetUrl) targetUrl = targetUrl.replace(/^blob:/, ""); } targetName = targetElement.title || targetElement.alt || document.title; - if (targetElement.nodeName.toUpperCase() == 'IMG' && /%i\b/.test(data.url)) { + if (targetElement.nodeName.toUpperCase() == 'IMG' && /%i\b/.test(dataUrl)) { if (targetElement.src) { if (/^data/.test(targetElement.src)) { imgBase64 = targetElement.src; @@ -8746,7 +8820,7 @@ inputString = keywords; } } - if (!imgBase64 && /%i\b/.test(data.url)) { + if (!imgBase64 && /%i\b/.test(dataUrl)) { const permission = await navigator.permissions.query({ name: "clipboard-read", }); @@ -8849,7 +8923,12 @@ let postParams = []; postMatch[1].replace(/([^\\])&/g, "$1SJ^PARAM").split("SJ^PARAM").forEach(pair => {//ios不支持零宽断言,哭唧唧 pair = pair.trim(); - if (pair.startsWith("click(") && pair.endsWith(')')) { + if (/^loopStart\(\d+\)$/.test(pair)) { + let loopStart = pair.match(/loopStart\((.*)\)/); + postParams.push(['@loopStart', loopStart[1]]); + } else if (pair == "loopEnd") { + postParams.push(['@loopEnd', '']); + } else if (pair.startsWith("click(") && pair.endsWith(')')) { let click = pair.slice(6, pair.length - 1); if (click) { postParams.push(['@click', click.replace(/\\([\=&])/g, "$1").trim()]); @@ -10062,6 +10141,7 @@ this.clickedIndex = 0; this.signList = [];//所有标记 this.clickedEles = {};//点击的元素 + this.exact = true; } /*static getInstance() { @@ -10071,7 +10151,8 @@ return Picker.picker; }*/ - getSelector(callback) { + getSelector(callback, exact = true) { + this.exact = exact; this.close(); this.toggle(); this.callback = callback; @@ -10139,7 +10220,7 @@ if (!target) return; if (self.callback) { if (target) { - let sel = self.geneSelector(target, true); + let sel = self.geneSelector(target, self.exact); self.callback(sel); self.close(); } @@ -10725,6 +10806,7 @@ if (sel === "@") { result = targetElement; } else result = getElement(sel); + if (result === false) return null; if (result) { clearInterval(checkInv); resolve(result); @@ -10746,8 +10828,29 @@ }); } - async function emuInput(sel, v) { - let input = await waitForElement(sel); + async function emuInput(sel, v, eleIndex = -1) { + let input, result = false; + if (eleIndex >= 0) { + if (eleIndex === 0) await waitForElement(sel); + let eles = getAllElements(sel); + if (eles.length === 0) { + return true; + } + if (eles.length === 1) { + input = eles[0]; + result = true; + } else if (eles.length <= eleIndex) { + return true; + } else { + input = eles[eleIndex]; + if (eles.length === eleIndex + 1) { + result = true; + } + } + } else { + input = await waitForElement(sel); + if (!input) return true; + } targetElement = input; let event = new Event('focus', { bubbles: true }); input.dispatchEvent(event); @@ -10788,10 +10891,32 @@ event = new Event('change', { bubbles: true }); input.dispatchEvent(event); debug(input, `input ${sel}`); + return result; } - async function emuClick(sel) { - let btn = await waitForElement(sel); + async function emuClick(sel, eleIndex = -1) { + let btn, result = false; + if (eleIndex >= 0) { + if (eleIndex === 0) await waitForElement(sel); + let btns = getAllElements(sel); + if (btns.length === 0) { + return true; + } + if (btns.length === 1) { + btn = btns[0]; + result = true; + } else if (btns.length <= eleIndex) { + return true; + } else { + btn = btns[eleIndex]; + if (btns.length === eleIndex + 1) { + result = true; + } + } + } else { + btn = await waitForElement(sel); + if (!btn) return true; + } targetElement = btn; if(!PointerEvent) return btn.click(); let eventParam = { @@ -10880,6 +11005,7 @@ dispatchTouchEvent(btn, "touchend"); btn.click(); debug(btn, `click ${sel}`); + return result; } function submitByForm(charset, url, target) { @@ -12125,6 +12251,16 @@ _GM_notification('Cache imported successfully!'); }); + document.addEventListener('showSiteAdd', e => { + let siteData = e.detail ? e.detail.site : e.site; + if (!siteData) return; + if (siteData.url) { + showSiteAdd(siteData.name, siteData.description, siteData.url, (siteData.icon ? [siteData.icon] : []), siteData.charset, siteData.kwFilter); + } else { + importFilter.open(siteData); + } + }); + loadConfig(); let lastModified = searchData.lastModified; document.addEventListener('visibilitychange', async e => { @@ -12308,7 +12444,6 @@ if (targetPre) targetPre.style.filter = ""; btnsCon.classList.add("hide"); }); - const importFilter = new ImportFilter(); importBtn.innerText = i18n("import"); importBtn.addEventListener("click", e => { if (shareEngines) return; @@ -12430,7 +12565,7 @@ class ImportFilter { //static importFilter; constructor() { - this.init(); + this.inited = false; } /*static getInstance() { @@ -12441,6 +12576,8 @@ }*/ init() { + if (this.inited) return; + this.inited = true; let self = this; this.openList = []; this.filterCss = ` @@ -12790,6 +12927,7 @@ } open(configData) { + this.init(); let self = this; this.siteDict = {}; this.typeDict = {}; @@ -12803,6 +12941,7 @@ //_GM_notification('Over!'); } } + const importFilter = new ImportFilter(); var dragRoundFrame, dragCon, dragSiteCurSpans, dragSiteHistorySpans, dragEndHandler, dragenterHandler, openAllTimer, dragScaleWidth, dragScaleHeight, zoomDrag; function showDragSearch(left, top) { @@ -13429,7 +13568,8 @@ display: block; } .searchJumperFrame-buttons>button#submitCrawl, - .searchJumperFrame-buttons>button#record { + .searchJumperFrame-buttons>button#record, + .searchJumperFrame-buttons>button#loop { width: 100%; margin: 0 3px; } @@ -13552,6 +13692,9 @@
+
+ +
@@ -13601,7 +13744,12 @@ let postParams = []; actionParams[1].replace(/([^\\])&/g, "$1SJ^PARAM").split("SJ^PARAM").forEach(pair => {//ios不支持零宽断言,哭唧唧 pair = pair.trim(); - if (pair.startsWith("click(") && pair.endsWith(')')) { + if (/^loopStart\(\d+\)$/.test(pair)) { + let loopStart = pair.match(/loopStart\((.*)\)/); + postParams.push(['@loopStart', loopStart[1]]); + } else if (pair == "loopEnd") { + postParams.push(['@loopEnd', '']); + } else if (pair.startsWith("click(") && pair.endsWith(')')) { let click = pair.slice(6, pair.length - 1); if (click) { postParams.push(['@click', click.replace(/\\([\=&])/g, "$1").trim()]); @@ -13717,8 +13865,9 @@ let sleepAction = addFrame.querySelector("#sleep"); let submitCrawl = addFrame.querySelector("#submitCrawl"); let recordBtn = addFrame.querySelector("#record"); + let loopBtn = addFrame.querySelector("#loop"); let dragDiv; - let addAction = (type, sel, val) => { + let addAction = (type, sel = '', val = '') => { let div = document.createElement("div"); let words = type; switch(type) { @@ -13728,6 +13877,12 @@ case "click": words = i18n('clickOutput', sel); break; + case "loopStart": + words = i18n('loopStart', val); + break; + case "loopEnd": + words = i18n('loopEnd'); + break; case "sleep": words = i18n('sleepOutput', val); break; @@ -13802,7 +13957,12 @@ if (!actionParams) return; actionParams[1].replace(/([^\\])&/g, "$1SJ^PARAM").split("SJ^PARAM").forEach(pair => { pair = pair.trim(); - if (pair.startsWith("click(") && pair.endsWith(')')) { + if (/^loopStart\(\d+\)$/.test(pair)) { + let loopStart = pair.match(/loopStart\((.*)\)/); + addAction('loopStart', '', loopStart[1]); + } else if (pair == "loopEnd") { + addAction('loopEnd'); + } else if (pair.startsWith("click(") && pair.endsWith(')')) { let click = pair.slice(6, pair.length - 1); if (click) { addAction('click', click.replace(/\\([\=&])/g, "$1").trim()); @@ -13830,8 +13990,6 @@ } } }); - - }; let geneUrl = () => { let actions = []; @@ -13849,6 +14007,9 @@ case "sleep": actions.push(`sleep(${val})`); break; + case "loopEnd": + actions.push('loopEnd'); + break; default: actions.push(`${action.dataset.type}(${val})`); break; @@ -13902,18 +14063,31 @@ document.addEventListener('change', changeHandler); }, 100); }); + let inLoop = false; + loopBtn.addEventListener("click", e => { + if (inLoop) { + addAction('loopEnd'); + loopBtn.innerText = i18n("loopAction"); + } else { + let loopTimes = prompt(i18n('loopTimes'), 1); + if (!loopTimes) return; + addAction('loopStart', '', loopTimes || '1'); + loopBtn.innerText = i18n("loopActionEnd"); + } + inLoop = !inLoop; + }); inputAction.addEventListener("click", e => { picker.getSelector(selector => { addAction('input', selector, '%s'); addFrame.style.display = ''; - }); + }, !inLoop); addFrame.style.display = 'none'; }); clickAction.addEventListener("click", e => { picker.getSelector(selector => { addAction('click', selector); addFrame.style.display = ''; - }); + }, !inLoop); addFrame.style.display = 'none'; }); sleepAction.addEventListener("click", e => { @@ -13926,7 +14100,7 @@ addFrame.classList.remove("crawling"); }); } - crawlBtn.style.display = showCrawl ? '' : 'none'; + //crawlBtn.style.display = showCrawl ? '' : 'none'; searchBar.addToShadow(addFrame); siteKeywords.value = ""; siteMatch.value = ""; From d79c83d8e4210ea4cfcc39886eefb29ee3f8c5a4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 12:08:17 +0800 Subject: [PATCH 687/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index db5a0ccbe8f..4ecb2ebf601 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -14121,7 +14121,7 @@ iconShow.src = icons[0]; } } else { - iconShow.src = location.origin + "/favicon.ico"; + iconShow.src = (url.indexOf('http') === 0 ? url.replace(/^(https?:\/\/[^\/]+).*/, '$1') : location.origin) + "/favicon.ico"; } iconsCon.innerHTML = createHTML(); if (icons && icons.length > 1) { From 112c0d00ccbf94274d0aad13efad6c8203a96af3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 12:40:05 +0800 Subject: [PATCH 688/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 4ecb2ebf601..6b61c1de1cd 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1854,10 +1854,10 @@ } ${searchData.prefConfig.minPopup ? ` #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type>a.search-jumper-btn { - visibility: hidden; + display: none; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type:hover>a.search-jumper-btn { - visibility: visible; + display: grid; } ` : ''} ${searchData.prefConfig.minPopup == 2 ? ` @@ -9603,6 +9603,7 @@ let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = r; let ele = getElement(thenEleSel, doc); + if (!ele) return null; let basepath = doc.querySelector("base"); return canonicalUri(ele.getAttribute("href"), (basepath ? basepath.href : _url)); }); @@ -9613,7 +9614,7 @@ resolve((r && r.data) || ""); }); }); - } else break; + } else return "No result";; } } else { fetchData = GM_fetch(_url, fetchOption).then(r => { @@ -9629,6 +9630,7 @@ let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = r; let ele = getElement(thenEleSel, doc); + if (!ele) return null; let basepath = doc.querySelector("base"); return canonicalUri(ele.getAttribute("href"), (basepath ? basepath.href : _url)); }); @@ -9637,7 +9639,7 @@ fetchData = GM_fetch(thenUrl).then(r => { return r.text(); }); - } else break; + } else return "No result"; } } tipsResult = await fetchData.then(r => { From 900f614595813eb4419b03a9b72a6108cc33da7f Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 12:53:05 +0800 Subject: [PATCH 689/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 6b61c1de1cd..21affb4072f 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -1871,13 +1871,13 @@ max-width: ${40 * (searchData.prefConfig.numPerLine || 7) * this.tilesZoom}px!important; } #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type>a.search-jumper-btn { - visibility: visible; + display: grid; } #search-jumper.funcKeyCall.targetInput>.search-jumper-searchBar>.search-jumper-type>a.search-jumper-btn { - visibility: hidden; + display: none; } #search-jumper.funcKeyCall.targetInput>.search-jumper-searchBar>.search-jumper-type:hover>a.search-jumper-btn { - visibility: visible; + display: grid; } ` : ''} #search-jumper.funcKeyCall>.search-jumper-searchBar>.search-jumper-type:hover { From 6f14684f8e163dfdc7d3d9303f6594185fd56f41 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 13:31:22 +0800 Subject: [PATCH 690/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 21affb4072f..bcca9ecfa7e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -500,7 +500,7 @@ startRecord: '記録操作を開始します。記録を終了するには Enter キーを押してください', loopAction: 'ループの開始', loopActionEnd: 'ループの終了', - loopStart: 'ループを開始します。ループ数は #t# です', + loopStart: 'ループを開始。ループ数は #t# です', loopEnd: 'ループの終了', loopTimes: 'ループの数。一致するすべての要素が走査され、順番に実行されます', loadingCollection: 'コレクションを読み込み中...' @@ -606,7 +606,7 @@ startRecord: 'Start to record operation, press Enter to end', loopAction: 'Start loop', loopActionEnd: 'Stop loop', - loopStart: 'Start looping, the number of loops is #t#', + loopStart: 'Start loop #t# times', loopEnd: 'Stop loop', loopTimes: 'Number of loops, all matching elements will be traversed and executed sequentially', loadingCollection: 'Preparing collection for SearchJumper...' From 38b19eb3cf3190775eab7d0647751ce658ba31ce Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 14:23:41 +0800 Subject: [PATCH 691/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 659c26e75e7..51d9039b111 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.21](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.22](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 17d33a8ff58d67542177c81e93c78fdc5ea8bdfb Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 14:25:50 +0800 Subject: [PATCH 692/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 51d9039b111..659c26e75e7 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.22](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.21](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 0bed01be8572638d1102e1976fd363963527b255 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 14:49:51 +0800 Subject: [PATCH 693/812] 1.9.37.22 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 659c26e75e7..51d9039b111 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.21](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.22](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d980ac14efd..292bfd0747b 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.21 +// @version 1.9.37.22 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -5080,10 +5080,15 @@ if (typeof _unsafeWindow.JSONEditor !== 'undefined') { createEdit(); } else { + let timeout = 30; let checkEditorReady = setInterval(() => { if (typeof _unsafeWindow.JSONEditor !== 'undefined') { createEdit(); clearInterval(checkEditorReady); + } else if (timeout-- <= 0) { + editor = null; + customRulesInput.style.display = ""; + clearInterval(checkEditorReady); } }, 100); } @@ -5423,7 +5428,7 @@ this.item.appendChild(del); this.item.appendChild(url); if (ruleParser.rules) { - url.style.maxWidth = "calc(100% - 140px)"; + url.style.maxWidth = "calc(100% - 150px)"; url.style.overflow = "hidden"; url.style.display = "inline-block"; url.style.textOverflow = "ellipsis"; @@ -6214,9 +6219,15 @@ setLang(rulesData.lang); } if (rulesData.firstRun && rulesData.uninited) { - _GM_openInTab(firstRunPage, {active: true}); rulesData.firstRun = false; storage.setItem("rulesData", rulesData); + setTimeout(() => { + storage.getItem("rulesData", data => { + if (data.firstRun === false) { + _GM_openInTab(firstRunPage, {active: true}); + } + }); + }, 100); } _GM_registerMenuCommand(i18n("configure"), () => { _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); From 24b11fdf44c71ea78709029d1fa7fb39f0ca87c5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 23 Jan 2024 15:09:36 +0800 Subject: [PATCH 694/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index bcca9ecfa7e..c62ac96b94a 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -13974,6 +13974,16 @@ if (func) { addAction('call', '', func.replace(/\\([\=&])/g, "$1").trim()); } + } else if (pair.startsWith("wait(") && pair.endsWith(')')) { + let func = pair.slice(5, pair.length - 1); + if (func) { + addAction('wait', '', func.replace(/\\([\=&])/g, "$1").trim()); + } + } else if (pair.startsWith("open(") && pair.endsWith(')')) { + let func = pair.slice(5, pair.length - 1); + if (func) { + addAction('open', '', func.replace(/\\([\=&])/g, "$1").trim()); + } } else if (/^sleep\(\d+\)$/.test(pair)) { let sleep = pair.match(/sleep\((.*)\)/); if (sleep) { @@ -14013,7 +14023,7 @@ actions.push('loopEnd'); break; default: - actions.push(`${action.dataset.type}(${val})`); + actions.push(`${action.dataset.type}(${val.replace(/([=&])/g, '\\$1')})`); break; } }); From dda5f6f2bc490735d5f2f87debc0e49c468f57f4 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Wed, 24 Jan 2024 01:57:31 +0000 Subject: [PATCH 695/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index fb2bb1bf772..cc7e9ff81cd 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,18 @@ [ +{ + "resource_url": "http://wedata.net/items/86205", + "data": { + "pageElement": "//ul[contains(@class,'-list')]", + "nextLink": "//a[contains(@id,'lnkNext')]", + "url": "^https:\\/\\/minkara.carview.co.jp\\/", + "exampleUrl": "https://minkara.carview.co.jp/search/?q=f-zero&c=0\r\nhttps://minkara.carview.co.jp/blog/\r\nhttps://minkara.carview.co.jp/review/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "foo2", + "name": "みんカラ", + "created_at": "2024-01-23T11:13:33+09:00", + "updated_at": "2024-01-23T13:20:45+09:00" +}, { "data": { "insertBefore": "", From 60e99ce448fbdb2c5679b7e6ea3ce67d125da408 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 24 Jan 2024 13:46:01 +0800 Subject: [PATCH 696/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 65 +++++++++++++++++------------ 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index d00a3f42079..dc38adb7729 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.21.3 +// @version 2024.1.24.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11803,7 +11803,7 @@ ImgOps | https://imgops.com/#b#`; url = url.replace(/.*?\/\/[^\/]+\//, ""); let nameFromUrl = ""; let ext; - if (_ext) { + if (_ext && /^\w{2,5}$/.test(_ext)) { ext = "." + _ext; } else { ext = url.match(/(\.\w{2,5})(\?|@|$)/); @@ -12408,31 +12408,33 @@ ImgOps | https://imgops.com/#b#`; }; } - unsafeWindow.CanvasRenderingContext2D.prototype.drawImage = function() { - var orig = unsafeWindow.CanvasRenderingContext2D.prototype.drawImage; - return function() { - let image = arguments[0]; - if (image && image.src) { - this.canvas.dataset.src = image.src; + const blobUrlMap = new Map(); + if (!envir.firefox) { + const drawImageProxy = new Proxy(unsafeWindow.CanvasRenderingContext2D.prototype.drawImage, { + apply: function (target, thisArg, argumentsList) { + let image = argumentsList[0]; + if (image && image.src) { + thisArg.canvas.dataset.src = image.src; + } + const result = target.apply(thisArg, argumentsList); + return result; } - var rv = orig.apply(this, arguments); - return rv; - }; - }(); - - const old_create = unsafeWindow.URL.createObjectURL; - const old_revoke = unsafeWindow.URL.revokeObjectURL; - unsafeWindow.URL.createObjectURL = storeAndCreate; - const dict = {}; - - function storeAndCreate(blob) { - const url = old_create(blob); - dict[url] = blob; - return url + }); + unsafeWindow.CanvasRenderingContext2D.prototype.drawImage = drawImageProxy; + + const createObjectURLProxy = new Proxy(unsafeWindow.URL.createObjectURL, { + apply: function (target, thisArg, argumentsList) { + const blob = argumentsList[0]; + const blobUrl = target.apply(thisArg, argumentsList); + blobUrlMap.set(blobUrl, blob); + return blobUrl; + } + }); + unsafeWindow.URL.createObjectURL = createObjectURLProxy; } function getBlob(url) { - return dict[url] || null; + return blobUrlMap.get(url) || null; } function blobToDataURL(blob, cb) { @@ -17503,9 +17505,16 @@ ImgOps | https://imgops.com/#b#`; max-width:50px;\ height:20px;\ background: white;\ + box-sizing: border-box;\ + display: initial;\ + margin: 0 5px;\ + padding: 0 5px;\ }\ .pv-gallery-head-command-drop-list-item input[type=checkbox]{\ - width:20px\ + width:20px;\ + box-sizing: border-box;\ + display: initial;\ + margin: 0 5px;\ }\ .pv-gallery-head-command-drop-list-item > * {\ vertical-align:middle;\ @@ -17513,7 +17522,11 @@ ImgOps | https://imgops.com/#b#`; }\ .pv-gallery-head-command-drop-list-item label {\ font-weight: normal;\ - display:inline\ + display:inline;\ + font-size:unset;\ + }\ + .pv-gallery-head-command-drop-list-item label:after {\ + display:none;\ }\ .pv-gallery-head-command-drop-list-item:hover{\ background-color:#404040;\ @@ -17789,7 +17802,7 @@ ImgOps | https://imgops.com/#b#`; line-height:0;\ text-align:center;\ background-color:#00000060;\ - color:#757575;\ + color:#a1a1a1;\ white-space:nowrap;\ cursor:pointer;\ z-index:1;\ From 57968bc05c83792854d432804ba824db2ca5045a Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 24 Jan 2024 17:57:28 +0800 Subject: [PATCH 697/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 69 +++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 12 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c62ac96b94a..5af3a2b49f5 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.68 +// @version 1.7.69 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -4723,7 +4723,7 @@ result.text += "\n"; result.data[start] = {node: ele, text: "\n"}; } else if (ele.offsetParent || ele.offsetHeight) { - if (/^(li|p|a)$/i.test(ele.nodeName)) { + if (/^(li|p|a|td)$/i.test(ele.nodeName)) { let start = result.text.length; result.text += "\n"; result.data[start] = {node: {}, text: "\n"}; @@ -5003,6 +5003,7 @@ let curlen = Math.min(leftLen, curnode.text.length - curpos); leftLen -= curlen; if (!curnode.text.trim()) { + if (type === "start") pos += curnode.text.length; continue; } let nodeInfo; @@ -11665,15 +11666,17 @@ searchBar.showAllSites(); } } - if (searchData.prefConfig.switchSitesPreKey) { - if (checkShortcutEnable(e, searchData.prefConfig.switchSitesAlt, searchData.prefConfig.switchSitesCtrl, searchData.prefConfig.switchSitesShift, searchData.prefConfig.switchSitesMeta, searchData.prefConfig.switchSitesPreKey)) { - searchBar.switchSite(); - return; + if (currentSite && searchBar.bar.style.display !== "none") { + if (searchData.prefConfig.switchSitesPreKey) { + if (checkShortcutEnable(e, searchData.prefConfig.switchSitesAlt, searchData.prefConfig.switchSitesCtrl, searchData.prefConfig.switchSitesShift, searchData.prefConfig.switchSitesMeta, searchData.prefConfig.switchSitesPreKey)) { + searchBar.switchSite(); + return; + } } - } - if (searchData.prefConfig.switchSitesNextKey) { - if (checkShortcutEnable(e, searchData.prefConfig.switchSitesAlt, searchData.prefConfig.switchSitesCtrl, searchData.prefConfig.switchSitesShift, searchData.prefConfig.switchSitesMeta, searchData.prefConfig.switchSitesNextKey)) { - searchBar.switchSite(true); + if (searchData.prefConfig.switchSitesNextKey) { + if (checkShortcutEnable(e, searchData.prefConfig.switchSitesAlt, searchData.prefConfig.switchSitesCtrl, searchData.prefConfig.switchSitesShift, searchData.prefConfig.switchSitesMeta, searchData.prefConfig.switchSitesNextKey)) { + searchBar.switchSite(true); + } } } }, true); @@ -13397,7 +13400,7 @@ filter: alpha(opacity=95); box-shadow: 5px 5px 20px 0px #000; color: #6e7070; - transition:all 0.25s ease; + transition: all 0.25s ease; border: 0; font-size: initial; } @@ -13411,6 +13414,11 @@ font-size: 18px!important; border-radius: 10px 10px 0 0!important; } + .draging .searchJumperFrame-body, + .draging .searchJumperFrame-crawlBody { + transition: none; + pointer-events: none; + } .searchJumperFrame-title>img { margin: 5px; height: 32px; @@ -13639,12 +13647,19 @@ border: 2px solid #000000; } } + @media screen and (max-height: 600px) { + .searchJumperFrame-body, + .searchJumperFrame-crawlBody { + top: 10px; + margin-top: 0px; + } + } `; let addFrameCssEle = _GM_addStyle(addFrameCssText); addFrame = document.createElement("div"); addFrame.innerHTML = createHTML(`
- + ${i18n("addSearchEngine")}
@@ -13708,6 +13723,7 @@
`); if (!disabled) addFrame.appendChild(addFrameCssEle); + let addBody = addFrame.children[0]; nameInput = addFrame.querySelector("[name='siteName']"); descInput = addFrame.querySelector("[name='description']"); urlInput = addFrame.querySelector("[name='url']"); @@ -13721,6 +13737,35 @@ siteKeywords = addFrame.querySelector("[name='siteKeywords']"); siteMatch = addFrame.querySelector("[name='siteMatch']"); openSelect = addFrame.querySelector("select[name='openSelect']"); + let title = addFrame.querySelector(".searchJumperFrame-title"); + let initMousePos, initFramePos, moving = false; + let dragTitleMove = e => { + if (!moving) { + addFrame.classList.add("draging"); + moving = true; + } + let x = e.clientX - initMousePos.x + initFramePos.x; + let y = e.clientY - initMousePos.y + initFramePos.y; + addBody.style.marginLeft = x + "px"; + addBody.style.marginTop = y + "px"; + }; + let dragTitleUp = e => { + e.preventDefault(); + e.stopPropagation(); + addFrame.classList.remove("draging"); + document.removeEventListener("mousemove", dragTitleMove); + document.removeEventListener("mouseup", dragTitleUp); + }; + title.addEventListener("mousedown", e => { + e.preventDefault(); + e.stopPropagation(); + moving = false; + initMousePos = {x: e.clientX, y: e.clientY}; + let addBodyStyle = getComputedStyle(addBody); + initFramePos = {x: parseInt(addBodyStyle.marginLeft || 0), y: parseInt(addBodyStyle.marginTop || 0)}; + document.addEventListener("mousemove", dragTitleMove); + document.addEventListener("mouseup", dragTitleUp); + }); let maxBtn = addFrame.querySelector("#maxBtn"); maxBtn.addEventListener("click", e => { addFrame.classList.add("maxContent"); From 00335c343d506c2b09f063f1e2628f9489f7ab6a Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 24 Jan 2024 18:23:23 +0800 Subject: [PATCH 698/812] 1.9.37.23 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 51d9039b111..eb3a114652c 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.22](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.23](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 292bfd0747b..71400c91bed 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.22 +// @version 1.9.37.23 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1911,7 +1911,7 @@ let articleNum = 0; for (i = 0; i < ele.children.length; i++) { let curNode = ele.children[i]; - if (/^H\d$/i.test(curNode.nodeName) && curNode.offsetParent) { + if (ele !== body && /^H\d$/i.test(curNode.nodeName) && curNode.offsetParent) { curMaxEle = null; break; } From 79e564b827432d683467ef6c6346cd066ce7ba22 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 24 Jan 2024 18:42:42 +0800 Subject: [PATCH 699/812] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 12e9e323e9e..5ee8e30e62f 100644 --- a/README.md +++ b/README.md @@ -36,5 +36,5 @@ ## Contributors - + From dc3d6630406fd25ad540eae532bd95f1c9c69ff6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 25 Jan 2024 18:44:22 +0800 Subject: [PATCH 700/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 92 +++++++++++++---------------- 1 file changed, 42 insertions(+), 50 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index dc38adb7729..05b500483b8 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.24.1 +// @version 2024.1.25.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -18904,7 +18904,6 @@ ImgOps | https://imgops.com/#b#`; container.className='pv-pic-window-container'; container.innerHTML=createHTML( ''+ - ''+ ''+ ''+ ''+ @@ -19139,13 +19138,6 @@ ImgOps | https://imgops.com/#b#`; this.shiftKeyUp=true; this.moving=false; - container.querySelector('.pv-pic-window-center').addEventListener('mousedown', function(e) { - var target = e.target; - target.style.display = "none"; - setTimeout(() => { - target.style.display = ""; - }, 500); - },true); //缩放工具的扩展菜单 container.querySelector('.pv-pic-window-tb-tool-extend-menu-zoom').addEventListener('click',function(e){ var target=e.target; @@ -19203,6 +19195,11 @@ ImgOps | https://imgops.com/#b#`; self.toolbarEventHandler(e); },false); + toolbar.addEventListener('click',function(e){ + e.preventDefault(); + e.stopPropagation(); + },false); + toolbar.addEventListener('dblclick',function(e){//鼠标双击工具 self.toolbarEventHandler(e); @@ -19252,7 +19249,7 @@ ImgOps | https://imgops.com/#b#`; if(prefs.imgWindow.close.dblClickImgWindow){ var dblClickImgWindow=function(e){ var target=e.target; - if(target==container || target==img || target.className=='pv-pic-window-center' || target==self.imgState || target==self.rotateOverlayer){ + if(target==container || target==img || target==self.imgState || target==self.rotateOverlayer){ self.remove(); e.stopPropagation(); }; @@ -19414,6 +19411,13 @@ ImgOps | https://imgops.com/#b#`; } var allData = await gallery.getAllValidImgs(); if (allData.length <= 1) return; + const validData = (data, src) => { + if (!data || !data.img || !data.img.parentNode) return false; + if (data.img.parentNode.classList.contains("pv-pic-window-container")) return false; + if (data.src == src) return false; + if (data.src && /^data:/.test(data.src) && data.src.length < 250) return false; + return true; + }; for (let i = 0; i < allData.length; i++) { let imgData = allData[i]; if (imgData.img == this.data.img) { @@ -19421,7 +19425,7 @@ ImgOps | https://imgops.com/#b#`; if (i != allData.length - 1) { i++; imgData = allData[i]; - while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src || (imgData.src && /^data:/.test(imgData.src) && imgData.src.length < 250))) { + while (!validData(imgData, this.data.src)) { i++; if (i == allData.length) return; imgData = allData[i]; @@ -19436,7 +19440,7 @@ ImgOps | https://imgops.com/#b#`; if (i != 0) { i--; imgData = allData[i]; - while (imgData && imgData.img && imgData.img.parentNode && (imgData.img.parentNode.classList.contains("pv-pic-window-container") || imgData.src == this.data.src || (imgData.src && /^data:/.test(imgData.src) && imgData.src.length < 250))) { + while (!validData(imgData, this.data.src)) { i--; if (i == -1) return; imgData = allData[i]; @@ -19670,11 +19674,6 @@ ImgOps | https://imgops.com/#b#`; cursor: pointer;\ pointer-events: none;\ }\ - .pv-pic-window-scroll>span.pv-pic-window-pre,\ - .pv-pic-window-scroll>span.pv-pic-window-next{\ - position: fixed;\ - pointer-events: all;\ - }\ span.pv-pic-window-pre {\ left: 8px;\ background-image: url("'+prefs.icons.arrowLeft+'");\ @@ -19683,21 +19682,9 @@ ImgOps | https://imgops.com/#b#`; right: 8px;\ background-image: url("'+prefs.icons.arrowRight+'");\ }\ - .compare>.pv-pic-window-center,\ .compare>.pv-pic-search-state{\ display: none;\ }\ - .pv-pic-window-center {\ - position: absolute;\ - height: 20%;\ - width: 20%;\ - top: 40%;\ - left: 40%;\ - opacity: 0;\ - }\ - .pv-pic-window-container>.pv-pic-window-center:hover~.pv-pic-search-state {\ - opacity: 0;\ - }\ .pv-pic-window-container_focus .pv-pic-window-imgbox:hover~.pv-pic-window-pre,\ .pv-pic-window-container_focus .pv-pic-window-imgbox:hover~.pv-pic-window-next{\ opacity:0.3;\ @@ -19798,6 +19785,10 @@ ImgOps | https://imgops.com/#b#`; .pv-pic-window-scroll {\ max-height: calc(100vh - 26px);\ max-width: 100vw;\ + }\ + .pv-pic-window-scroll>.pv-pic-window-imgbox {\ + max-height: calc(100vh - 26px);\ + max-width: 100vw;\ overflow-y: scroll;\ overflow-x: hidden;\ }\ @@ -20006,8 +19997,8 @@ ImgOps | https://imgops.com/#b#`; padding:0;\ background-color:rgba(255, 0, 0, 0.150);\ }\ - .pv-pic-window-container::-webkit-scrollbar { width: 0 !important }\ - .pv-pic-window-container { -ms-overflow-style: none;overflow: -moz-scrollbars-none; }\ + .pv-pic-window-container::-webkit-scrollbar, .pv-pic-window-container>.pv-pic-window-imgbox::-webkit-scrollbar { width: 0 !important }\ + .pv-pic-window-container, .pv-pic-window-container>.pv-pic-window-imgbox { -ms-overflow-style: none;overflow: -moz-scrollbars-none; }\ '); }, @@ -20315,6 +20306,7 @@ ImgOps | https://imgops.com/#b#`; var img=this.img; var imgWindow=this.imgWindow; + imgWindow.classList.remove("pv-pic-window-scroll"); var iTransform=img.style[support.cssTransform].replace(/rotate\([^)]*\)/i,''); @@ -21041,9 +21033,13 @@ ImgOps | https://imgops.com/#b#`; var scrolled=prefs.imgWindow.fixed ? {x:0, y:0} : getScrolled(); var origTop=parseFloat(imgWindow.style.top); if(inScroll){ - imgWindow.style.top = parseFloat(imgWindow.style.top) - getScrolled(imgWindow).y +'px'; + imgWindow.style.top = parseFloat(imgWindow.style.top) - getScrolled(imgWindow.children[0]).y +'px'; this.imgWindow.classList.remove("pv-pic-window-scroll"); - } else this.imgWindow.classList.add("pv-pic-window-scroll"); + } else { + this.rotate(0,true); + this.imgWindow.classList.add("pv-pic-window-scroll"); + imgWindow.children[0].scrollTop = -parseInt(imgWindow.style.top); + } //this.center(true , true); if(!inScroll){ imgWindow.style.top= (wSize.h - imgWindow.offsetHeight)/2 + scrolled.y +'px'; @@ -21084,7 +21080,7 @@ ImgOps | https://imgops.com/#b#`; return; }; - if((e.button!=0 && e.type!="touchstart") || (target!=this.imgWindow && target.className!='pv-pic-window-center' && target!=this.img && target!=this.rotateOverlayer && target!=this.imgState))return; + if((e.button!=0 && e.type!="touchstart") || (target!=this.imgWindow && target!=this.img && target!=this.rotateOverlayer && target!=this.imgState))return; e.preventDefault(); if(this.tempHand){ this.move(e); @@ -23211,14 +23207,6 @@ ImgOps | https://imgops.com/#b#`; var checkUniqueImgWin = function() { if (canPreview) { if (result.type != "link" && result.src == result.imgSrc) { - if (!result.imgAS && !result.imgCS) { - let sizeInfo = { - w: result.img.offsetWidth || result.img.scrollWidth, - h: result.img.offsetHeight || result.img.scrollHeight - } - result.imgAS = sizeInfo; - result.imgCS = sizeInfo; - } if (result.imgAS.w <= result.imgCS.w && result.imgAS.h <= result.imgCS.h) { var wSize = getWindowSize(); if (result.imgAS.w <= wSize.w && result.imgAS.h <= wSize.h) return false; @@ -23254,10 +23242,6 @@ ImgOps | https://imgops.com/#b#`; target = null; } if (target) { - let sizeInfo = { - w: target.offsetWidth || target.scrollWidth, - h: target.offsetHeight || target.scrollHeight - } result = { src: target.href, type: "link", @@ -23275,6 +23259,17 @@ ImgOps | https://imgops.com/#b#`; pretreatment(target) result = findPic(target); if (!result) return; + } + + if (result) { + if (!result.imgAS && !result.imgCS) { + let sizeInfo = { + w: result.img.offsetWidth || result.img.scrollWidth, + h: result.img.offsetHeight || result.img.scrollHeight + } + result.imgAS = sizeInfo; + result.imgCS = sizeInfo; + } if (prefs.floatBar.showWithRules && result.type == "rule") { } else if (!(result.imgAS.w == result.imgCS.w && result.imgAS.h == result.imgCS.h)) {//如果不是两者完全相等,那么被缩放了. if (prefs.floatBar.sizeLimitOr) { @@ -23297,9 +23292,6 @@ ImgOps | https://imgops.com/#b#`; } } } - } - - if (result) { debug(result); if (!result.noActual) { if (!result.srcs) { @@ -24559,7 +24551,7 @@ ImgOps | https://imgops.com/#b#`; GM_config.frame.src=""; } initKeyInputs(); - },500); + }, 1000); } function loadPrefs() { From 7e930d36509f1aeec82c1713d6b5c536f3c9ea23 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 25 Jan 2024 20:29:43 +0800 Subject: [PATCH 701/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 5af3a2b49f5..798415b3b47 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.69 +// @version 1.7.70 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -14153,7 +14153,10 @@ if (sleepTime) addAction('sleep', '', sleepTime); }); submitCrawl.addEventListener("click", e => { - urlInput.value = location.href + '#p{' + geneUrl() + '}'; + let actionUrl = geneUrl(); + if (actionUrl) { + urlInput.value = location.href + '#p{' + actionUrl + '}'; + } addFrame.classList.remove("crawling"); }); } @@ -14161,9 +14164,9 @@ searchBar.addToShadow(addFrame); siteKeywords.value = ""; siteMatch.value = ""; - nameInput.value = name; - descInput.value = description; - urlInput.value = url; + nameInput.value = name || ""; + descInput.value = description || ""; + urlInput.value = url || ""; if (icons && icons[0]) { iconShow.style.display = ""; if (url.indexOf(location.origin) === 0) { @@ -14178,7 +14181,7 @@ iconShow.src = icons[0]; } } else { - iconShow.src = (url.indexOf('http') === 0 ? url.replace(/^(https?:\/\/[^\/]+).*/, '$1') : location.origin) + "/favicon.ico"; + iconShow.src = (/^(showTips:)?https?:/.test(url) ? url.split('\n')[0].replace(/^(showTips:)?(https?:\/\/[^\/]+).*/, '$2') : location.origin) + "/favicon.ico"; } iconsCon.innerHTML = createHTML(); if (icons && icons.length > 1) { From e899728ede940265442571b0ede35cfb9eeb0736 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 25 Jan 2024 20:41:15 +0800 Subject: [PATCH 702/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 71400c91bed..6d3c8f40d15 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4293,7 +4293,7 @@ left: 10px; } #pagetual-picker>.logoIcon.showSign>svg>path { - fill: gray; + fill: gray!important; } #pagetual-picker textarea{ display: inline-block; From f53b92e8d9103711cf10666efcd25ddb41756584 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 26 Jan 2024 08:21:28 +0800 Subject: [PATCH 703/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 798415b3b47..3faa44c1799 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -12047,7 +12047,7 @@ function quickAddByInput(input) { if (shareEngines) return; - let parentForm, url = location.href, showCrawl = false; + let parentForm, url = location.href; if (input && input.name) { parentForm = input.parentNode; while (parentForm) { @@ -12067,7 +12067,6 @@ } let fail = () => { if (window.confirm(i18n("noValidItemAsk"))) { - showCrawl = true; return false; } return true; @@ -12124,7 +12123,7 @@ if (icons.indexOf && icons.indexOf(link.href) !== -1) return; icons.push(link.href); }); - showSiteAdd(document.title.replace(input ? input.value : "", "").replace(/^\s*[-_]\s*/, ""), "", url, icons, document.characterSet, "", true); + showSiteAdd(document.title.replace(input ? input.value : "", "").replace(/^\s*[-_]\s*/, ""), "", url, icons, document.characterSet); } const jumpHtml = "https://hoothin.github.io/SearchJumper/jump.html"; @@ -12260,7 +12259,7 @@ let siteData = e.detail ? e.detail.site : e.site; if (!siteData) return; if (siteData.url) { - showSiteAdd(siteData.name, siteData.description, siteData.url, (siteData.icon ? [siteData.icon] : []), siteData.charset, siteData.kwFilter); + showSiteAdd(siteData.name, siteData.description, siteData.url, (siteData.icon ? [siteData.icon] : []), siteData.charset, siteData.kwFilter, siteData.match, siteData.hideNotMatch); } else { importFilter.open(siteData); } @@ -12477,7 +12476,7 @@ } break; case 1: - showSiteAdd(configData.name, "", configData.url, (configData.icon ? [configData.icon] : []), configData.charset, configData.kwFilter); + showSiteAdd(configData.name, "", configData.url, (configData.icon ? [configData.icon] : []), configData.charset, configData.kwFilter, configData.match, configData.hideNotMatch); break; case 2: if (!searchData.prefConfig.inPageRule) searchData.prefConfig.inPageRule = {}; @@ -13379,7 +13378,7 @@ } var addFrame, nameInput, descInput, urlInput, iconInput, iconShow, iconsCon, typeSelect, testBtn, cancelBtn, addBtn, siteKeywords, siteMatch, openSelect, crawlBtn; - function showSiteAdd(name, description, url, icons, charset, kwFilter, showCrawl) { + function showSiteAdd(name, description, url, icons, charset, kwFilter, match, hideNotMatch) { if (!addFrame) { let addFrameCssText = ` .searchJumperFrame-body, @@ -13892,6 +13891,12 @@ if (kwFilter) { siteObj.kwFilter = kwFilter; } + if (match) { + siteObj.match = match; + } + if (hideNotMatch) { + siteObj.hideNotMatch = hideNotMatch; + } } searchData.sitesConfig[typeSelect.value].sites.push(siteObj); searchData.lastModified = new Date().getTime(); @@ -14160,7 +14165,6 @@ addFrame.classList.remove("crawling"); }); } - //crawlBtn.style.display = showCrawl ? '' : 'none'; searchBar.addToShadow(addFrame); siteKeywords.value = ""; siteMatch.value = ""; From 4f91b8bc4be56f29a696c0ffa440144985ad9d48 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 26 Jan 2024 09:14:25 +0800 Subject: [PATCH 704/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 3faa44c1799..72db92f1509 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -13906,6 +13906,11 @@ if (addFrame.parentNode) { addFrame.parentNode.removeChild(addFrame); } + window.postMessage({ + searchData: searchData, + version: _GM_info.script.version || 0, + command: 'loadConfig' + }, '*'); }); }); From 4fd9340201d9f60d1c94d98c001e34aa9b4367ab Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 26 Jan 2024 09:32:06 +0800 Subject: [PATCH 705/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 6d3c8f40d15..dad21c294e9 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -5346,9 +5346,8 @@ z-index: 999; bottom: 0; left: 20vw; - background-color: #6b6b6b99; font-size: xx-large; - opacity: 0.8; + opacity: 0.6; cursor: pointer; -moz-transition:all 0.3s ease; -webkit-transition:all 0.3s ease; @@ -5356,7 +5355,6 @@ } #saveBtn:hover { opacity: 1; - background-color: #6b6b6b; } `); click2import = document.querySelector("[name='user-content-click2import'],[name='click2import']"); From 6403fb4fabaade7eb8ab7cdf09b093dac5c147f9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 26 Jan 2024 19:46:20 +0800 Subject: [PATCH 706/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 05b500483b8..1bed0cea86c 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.25.1 +// @version 2024.1.26.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11778,6 +11778,7 @@ ImgOps | https://imgops.com/#b#`; if (!content) return false; var canvas = document.createElement("canvas"); let size = Math.min((icon.clientWidth || icon.offsetWidth), (icon.clientHeight || icon.offsetHeight)); + if (!size) return false; canvas.width = size; canvas.height = size; var ctx = canvas.getContext("2d"); @@ -16938,7 +16939,7 @@ ImgOps | https://imgops.com/#b#`; prop = prop.replace(/[ '"]/g, ""); if (prop && prop.length == 1) { let src = icon2Base64(node, prop, iconStyle); - if (src != "data:,") { + if (src && src != "data:,") { node = document.createElement("img"); node.src = src; total.push(node); @@ -16975,7 +16976,7 @@ ImgOps | https://imgops.com/#b#`; return !(container.contains(img) || (preloadContainer&&preloadContainer.contains(img))); }); - await sleep(1); + await sleep(0); // 已经在图库里面的 var self = this; for (const img of imgs) { @@ -23264,8 +23265,8 @@ ImgOps | https://imgops.com/#b#`; if (result) { if (!result.imgAS && !result.imgCS) { let sizeInfo = { - w: result.img.offsetWidth || result.img.scrollWidth, - h: result.img.offsetHeight || result.img.scrollHeight + w: result.img.offsetWidth || result.img.scrollWidth || target.offsetWidth || target.scrollWidth, + h: result.img.offsetHeight || result.img.scrollHeight || target.offsetHeight || target.scrollHeight } result.imgAS = sizeInfo; result.imgCS = sizeInfo; @@ -24345,9 +24346,12 @@ ImgOps | https://imgops.com/#b#`; "href": "mailto:rixixi@gmail.com" } }, + { + node: "br" + }, { node: "span", - text: " Join our " + text: "Join our " }, { node: "a", From 04488d2a63b009ffeb5cd97fecec3957514e7b1e Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 26 Jan 2024 20:51:41 +0800 Subject: [PATCH 707/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 1bed0cea86c..7468147f2a1 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -19792,6 +19792,8 @@ ImgOps | https://imgops.com/#b#`; max-width: 100vw;\ overflow-y: scroll;\ overflow-x: hidden;\ + overscroll-behavior: contain;\ + -ms-scroll-chaining: contain;\ }\ .pv-pic-window-scroll>.pv-pic-window-scrollSign {\ display: block;\ From 9403a7149411e6fa111fa497280f0bc335170980 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 27 Jan 2024 01:42:33 +0000 Subject: [PATCH 708/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index cc7e9ff81cd..29c271c2c35 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86206", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='index_box']/*", + "nextLink": "//a[@class='novelview_pager-next']", + "url": "^https://(?:ncode|novel18)\\.syosetu\\.com/n[^/]+/", + "exampleUrl": "https://ncode.syosetu.com/n8799hu/\r\nhttps://novel18.syosetu.com/n6382hq/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "小説家になろう 作品目次", + "created_at": "2024-01-26T21:47:14+09:00", + "updated_at": "2024-01-26T21:47:14+09:00" +}, { "resource_url": "http://wedata.net/items/86205", "data": { From b975cdbceaa1c0b3b33fff2f1232dc3cd58801dc Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 27 Jan 2024 09:51:41 +0800 Subject: [PATCH 709/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 36f03283927..b3b88fe97be 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9462,7 +9462,7 @@ "name": "bilibili space", "url": "^https://space\\.bilibili\\.com/", "sandbox": false, - "pageElement": "ul.cube-list>li,ul.video-list>li,ul.relation-list>li", + "pageElement": "ul.cube-list>li,ul.video-list>li,ul.relation-list>li,ul.content>li", "nextLink": ".be-pager-next,.next-page", "wait": 1000, "css": ".b-img.sleepy .b-img__inner{opacity:1}" From 92acc6bd55860610973c877f4c78cd5c3fc0d399 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 28 Jan 2024 10:23:20 +0800 Subject: [PATCH 710/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 7468147f2a1..8fd6ecf8295 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.26.1 +// @version 2024.1.28.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -24585,12 +24585,14 @@ ImgOps | https://imgops.com/#b#`; } } }); - if (localStorage) { - if (!storage.getItem('inited')) { - localStorage.setItem('picviewerCE.config.curTab', 4); - storage.setItem('inited', true); + try { + if (localStorage && localStorage.setItem) { + if (!storage.getItem('inited')) { + localStorage.setItem('picviewerCE.config.curTab', 4); + storage.setItem('inited', true); + } } - } + } catch(e) {} debug = prefs.debug ? console.debug.bind(console) : function() {}; } From 0f70094e6ae820f740200061011ab6f24a9f9a98 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 28 Jan 2024 10:24:48 +0800 Subject: [PATCH 711/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 8dadf1284cc..bcb31ea12b7 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.3.2 +// @version 2.8.3.3 // @description Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -952,7 +952,7 @@ if (window.top != window.self) { downNum--; setTimeout(() => { requestDoc(); - }, 500); + }, Math.random() * 500 + validTimes * 1000); return; } if (wait) { @@ -966,7 +966,7 @@ if (window.top != window.self) { if(tryTimes++ < 5){ setTimeout(() => { requestDoc(); - }, 500); + }, Math.random() * 500 + tryTimes * 1000); return; } downIndex++; @@ -979,12 +979,12 @@ if (window.top != window.self) { } else downOnce(); }, ontimeout: function(e) { - console.warn("timeout: times="+tryTimes+" url="+aTag.href); + console.warn("timeout: times="+(tryTimes+1)+" url="+aTag.href); //console.log(e); if(tryTimes++ < 5){ setTimeout(() => { requestDoc(); - }, 500); + }, Math.random() * 500 + tryTimes * 1000); return; } downIndex++; From e4b564e131b6cd2e381be1d50867a8bdac79fc0e Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 28 Jan 2024 13:15:08 +0800 Subject: [PATCH 712/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 101 +++++++++++++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 7 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index dad21c294e9..354ca91f558 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.23 +// @version 1.9.37.24 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1008,7 +1008,7 @@ return false; } - function geneSelector(ele, addID) { + function geneSelector(ele, addID, exact) { let selector = ele.nodeName.toLowerCase(); //Google id class都是隨機。百度更過分,style script順序都是隨機的 if (selector !== "html" && selector !== "body") { @@ -1033,7 +1033,21 @@ } let parent = ele.parentElement; if (parent) { - if (!className && !hasId && parent.children.length > 1 && !compareNodeName(parent, ["html"])) { + if (exact) { + let i, nth = 0, all = 0; + for (i = 0; i < parent.children.length; i++) { + if (parent.children[i].nodeName === ele.nodeName) { + all++; + if (parent.children[i] === ele) { + nth = all; + } + if (nth > 0 && all > 1) { + break; + } + } + } + selector += (all === 1 ? "" : `:nth-of-type(${nth})`); + } else if (!className && !hasId && parent.children.length > 1 && !compareNodeName(parent, ["html"])) { let prevE = ele.previousElementSibling; if (prevE && prevE.className) { let classList = prevE.classList; @@ -1063,7 +1077,7 @@ selector += (all === 1 ? "" : `:nth-of-type(${nth})`); } } - selector = geneSelector(parent, addID) + ' > ' + selector; + selector = geneSelector(parent, addID, exact) + ' > ' + selector; } } } @@ -1680,7 +1694,8 @@ self.refreshing = false; let checkEles = getAllElements(refreshByClickSel, document); for (let i = 0; i < checkEles.length; i++) { - if (checkEles[i] === e.target) { + let curEle = checkEles[i]; + if (curEle === e.target || curEle.contains(e.target)) { urlChanged = true; isPause = true; if (!ruleParser.nextLinkHref) isLoading = false; @@ -2270,7 +2285,7 @@ return false; } if (e.className) { - if (/slick|slide|gallery/i.test(e.className)) { + if (/slick|slide|gallery|disabled/i.test(e.className)) { return false; } else if (e.classList) { if (e.classList.contains('disabled') || e.classList.contains('active')) { @@ -2842,7 +2857,7 @@ } if (doc === document) { if (!this.linkHasHref(nextLink)) { - if (clickedSth || !isVisible(nextLink, _unsafeWindow)) { + if ((clickedSth && this.curSiteRule.smart) || !isVisible(nextLink, _unsafeWindow)) { this.nextLinkHref = false; return null; } @@ -4252,6 +4267,9 @@ font-family: Times New Roman; overflow: initial; user-select: none; + line-height: unset; + min-width: unset; + min-height: unset; } #pagetual-picker>.title { margin: -5px 45px 10px 45px; @@ -7790,6 +7808,46 @@ btn.click(); } + function emuInput(input, v) { + let result = false; + if (!input) return true; + let event = new Event('focus', { bubbles: true }); + input.dispatchEvent(event); + input.click && input.click(); + let lastValue = input.value; + if (input.type == 'file') { + let file = v; + let blob = new Blob([file], { + type: 'text/plain' + }); + file = new File([blob], 'noname.txt', { type: blob.type }); + let dataTransfer = new DataTransfer(); + dataTransfer.items.add(file); + input.files = dataTransfer.files; + v = "c:/fakepath/fakefile"; + } else if (/INPUT/i.test(input.nodeName)) { + var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set; + nativeInputValueSetter.call(input, v); + } else if (/SELECT/i.test(input.nodeName)) { + var nativeSelectValueSetter = Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype, "value").set; + nativeSelectValueSetter.call(input, v); + } else if (input.nodeName.toUpperCase() == "TEXTAREA") { + var nativeTextareaValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set; + nativeTextareaValueSetter.call(input, v); + } else { + input.innerHTML = createHTML(v); + } + event = new Event('input', { bubbles: true }); + let tracker = input._valueTracker; + if (tracker) { + tracker.setValue(lastValue); + } + input.dispatchEvent(event); + event = new Event('change', { bubbles: true }); + input.dispatchEvent(event); + return result; + } + var failFromIframe = 0; var inCors = false; var checkRemoveIntv; @@ -7932,6 +7990,26 @@ emuIframe = null; } } + function cloneStatus() { + if (!iframeDoc) return; + let inputs = document.querySelectorAll("input:not([type=button],[type=image],[type=reset],[type=submit])"); + let selectOptions = document.querySelectorAll("select>option"); + [...inputs].forEach(input => { + let sel = geneSelector(input, true, true); + let mirrorEle = iframeDoc.querySelector(sel); + if (!mirrorEle) return; + emuInput(mirrorEle, input.value); + }); + [...selectOptions].forEach(option => { + let sel = geneSelector(option, true, true); + let mirrorEle = iframeDoc.querySelector(sel); + if (!mirrorEle) return; + let selected = option.selected; + mirrorEle.click && mirrorEle.click(); + mirrorEle.selected = !!selected; + mirrorEle.parentNode.dispatchEvent(new Event('change')); + }); + } async function checkPage() { if (isPause) return loadPageOver(); try { @@ -8145,6 +8223,15 @@ } catch(e) { debug(e); } + } else { + let refreshByClickSel = ruleParser.curSiteRule.refreshByClick; + if (iframeDoc && refreshByClickSel) { + let clickBtn = await waitForElement(refreshByClickSel, iframeDoc); + await sleep(500); + cloneStatus(); + emuClick(clickBtn, iframeDoc); + await sleep(500); + } } if (loaded) return; loaded = true; From 1be037db28162d91a4aaa98c0cd9d05e5320ee85 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 28 Jan 2024 13:15:30 +0800 Subject: [PATCH 713/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index eb3a114652c..9c7d33c4692 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.23](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.24](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 95ea462550e4d61700dc96692a215c37f61e82aa Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 29 Jan 2024 11:42:42 +0800 Subject: [PATCH 714/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index bcb31ea12b7..b46dd29244f 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -5,10 +5,10 @@ // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin // @version 2.8.3.3 -// @description Fetch and download main textual content from the current page, provide special support for novels -// @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 -// @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 -// @description:ja ユニバーサルサイトコンテンツクロールツール、クロール、フォーラム内容など +// @description Lightweight web scraping script. Fetch and download main textual content from the current page, provide special support for novels +// @description:zh-CN 通用网站内容爬虫抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 +// @description:zh-TW 通用網站內容爬蟲抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 +// @description:ja 軽量なWebスクレイピングスクリプト。ユニバーサルサイトコンテンツクロールツール、クロール、フォーラム内容など // @author hoothin // @match http://*/* // @match https://*/* From a91ac37e5653408552daadabeda7bc9288b7f917 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 30 Jan 2024 01:45:35 +0000 Subject: [PATCH 715/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 29c271c2c35..0e2d40e8c65 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -786,7 +786,7 @@ { "resource_url": "http://wedata.net/items/86122", "data": { - "pageElement": "id('main')//div[@class='panel-body']//div[contains(@class,'row-eq-height')]/div", + "pageElement": "id('main')//div[@class='panel-body']//div[contains(@class,'row-eq-height')]", "nextLink": "(//a[@rel='next'])[1]", "url": "^https://fantia\\.jp/fanclubs/\\d+/posts\r\n" }, @@ -794,7 +794,7 @@ "created_by": "jawata", "name": "Fantia Club", "created_at": "2023-05-23T13:32:13+09:00", - "updated_at": "2023-05-23T13:48:11+09:00" + "updated_at": "2024-01-29T13:41:54+09:00" }, { "resource_url": "http://wedata.net/items/86116", From 499cc2dc34e91fb5894f494c8f88d8ac2028ad80 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 30 Jan 2024 10:01:29 +0800 Subject: [PATCH 716/812] update --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 4 +-- SearchJumper/searchJumper.user.js | 51 ++++++++++++++++--------------- 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 9c7d33c4692..83e16d1132b 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.24](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.25](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 354ca91f558..af601a3ded7 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.24 +// @version 1.9.37.25 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2285,7 +2285,7 @@ return false; } if (e.className) { - if (/slick|slide|gallery|disabled/i.test(e.className)) { + if (/slick|slide|gallery|disabled$/i.test(e.className)) { return false; } else if (e.classList) { if (e.classList.contains('disabled') || e.classList.contains('active')) { diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 72db92f1509..f146454f1b4 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.70 +// @version 1.7.71 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2393,6 +2393,7 @@ text-align: center; box-sizing: content-box; overflow: hidden; + font-family: Roboto,arial,sans-serif; } .search-jumper-tips * { max-width: 640px; @@ -7185,7 +7186,14 @@ } insertHistory(typeEle, init) { - if (!searchData.prefConfig.historyLength) return; + if (!searchData.prefConfig.historyLength || + typeEle.classList.contains("search-jumper-targetImg") || + typeEle.classList.contains("search-jumper-targetAudio") || + typeEle.classList.contains("search-jumper-targetVideo") || + typeEle.classList.contains("search-jumper-targetLink") || + typeEle.classList.contains("search-jumper-targetPage")) { + return; + } typeEle.style.width = "auto"; typeEle.style.height = "auto"; let self = this; @@ -13274,12 +13282,7 @@ } return result; }; - dragSiteCurSpans.forEach((span, i) => { - span.innerHTML = createHTML(); - span.parentNode.parentNode.style.filter = 'contrast(0.5)'; - let targetSite = getTargetSiteBtn(); - if (!targetSite) return; - span.parentNode.parentNode.style.filter = ''; + const filldragSpan = (span, targetSite) => { span.parentNode.dataset.name = targetSite.dataset.name; let word = document.createElement("p"); word.innerText = targetSite.dataset.name.substr(0, 10).trim(); @@ -13290,7 +13293,10 @@ if (/^\w+$/.test(char)) { len++; } else len += 2; - if (len > 10) break; + if (len > 10) { + text += "..."; + break; + } } word.innerText = text; } @@ -13306,6 +13312,16 @@ let src = targetIcon.src || targetIcon.dataset.src; if (src) img.src = src; } + }; + dragSiteCurSpans.forEach((span, i) => { + span.innerHTML = createHTML(); + let targetSite = getTargetSiteBtn(); + if (!targetSite) { + span.parentNode.parentNode.style.filter = 'contrast(0.5)'; + return; + } + span.parentNode.parentNode.style.filter = ''; + filldragSpan(span, targetSite); }); let findIndex = 0; let getHistorySiteBtn = () => { @@ -13338,22 +13354,7 @@ delete siteImg.dataset.src; } span.parentNode.parentNode.style.opacity = 1; - span.parentNode.dataset.name = targetSite.dataset.name; - let word = document.createElement("p"); - word.innerText = targetSite.dataset.name.substr(0, 10).trim(); - if (!/^\w+$/.test(word.innerText)) word.innerText = word.innerText.substr(0, 6); - let img = document.createElement("img"); - img.style.display = "none"; - span.appendChild(img); - span.appendChild(word); - img.onload = e => { - img.style.display = ""; - }; - let targetIcon = targetSite.querySelector("img"); - if (targetIcon) { - let src = targetIcon.src || targetIcon.dataset.src; - if (src) img.src = src; - } + filldragSpan(span, targetSite); }); dragCon.style.left = left - dragScaleWidth + "px"; From 76b7d1cdcd9976ed638bfe25e43d01ddc0ede4e9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 31 Jan 2024 16:09:28 +0800 Subject: [PATCH 717/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index af601a3ded7..81eb593c4ba 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.25 +// @version 1.9.37.26 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2594,7 +2594,7 @@ } } if (!next) next = next1 || next4 || next3 || next2; - if (!next) { + if (!next && location.pathname !== "/") { next = jsNext || nextJs1 || nextJs2; if (next && next.parentNode.className && next.parentNode.className.indexOf && next.parentNode.className.indexOf('tab') !== -1) next = null; } @@ -7954,9 +7954,9 @@ return; } if (doc) { + clearInterval(checkReady); try { Function('win', 'iframe', '"use strict";' + code)(iframe.contentWindow, iframe); - clearInterval(checkReady); } catch(e) { debug(e); } @@ -8202,18 +8202,25 @@ emuIframe.frameBorder = '0'; emuIframe.style.cssText = 'margin:0!important;padding:0!important;flex:0;opacity:0!important;pointer-events:none!important;position:fixed;top:0px;left:0px;z-index:-2147483647;'; emuIframe.addEventListener("load", e => { - setTimeout(async () => { - try { - iframeDoc = emuIframe.contentDocument || emuIframe.contentWindow.document; - } catch(e) { - if (e.message && e.message.indexOf("cross-origin") != -1 && notSetSandbox && emuIframe.hasAttribute("sandbox")) { - emuIframe.removeAttribute("sandbox"); - meetCors = true; - callback(false, false); - } else { - returnFalse("Stop as cors"); + try { + iframeDoc = emuIframe.contentDocument || emuIframe.contentWindow.document; + } catch(e) { + if (e.message && e.message.indexOf("cross-origin") != -1 && notSetSandbox && emuIframe.hasAttribute("sandbox")) { + emuIframe.removeAttribute("sandbox"); + meetCors = true; + callback(false, false); + if (ruleParser.curSiteRule.smart) { + ruleParser.findNoNext(); } - return; + } else { + returnFalse("Stop as cors"); + } + return; + } + setTimeout(async () => { + if (meetCors && ruleParser.curSiteRule.smart) { + ruleParser.smartRules = ruleParser.smartRules.filter(item => {return item && item.url !== ruleParser.curSiteRule.url;}); + storage.setItem("smartRules", ruleParser.smartRules); } meetCors = false; let code = ruleParser.curSiteRule.init; @@ -8248,9 +8255,9 @@ return; } if (iframeDoc) { + clearInterval(checkReady); try { Function('win', 'iframe', '"use strict";' + code)(emuIframe.contentWindow, emuIframe); - clearInterval(checkReady); } catch(e) { debug(e); } @@ -8441,9 +8448,9 @@ return; } if (iframeDoc) { + clearInterval(checkReady); try { Function('win', 'iframe', '"use strict";' + code)(curIframe.contentWindow, curIframe); - clearInterval(checkReady); } catch(e) { debug(e); } From 14564d6783e11bea14ea99c6385895fbe63c7cfe Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 31 Jan 2024 16:09:40 +0800 Subject: [PATCH 718/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 83e16d1132b..0d885daa857 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.25](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.26](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From aef75b4ae0322c250ae941fc18fa8423c074789b Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 1 Feb 2024 01:51:25 +0000 Subject: [PATCH 719/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 0e2d40e8c65..3b6b6dc06b0 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -11379,16 +11379,16 @@ { "resource_url": "http://wedata.net/items/82058", "data": { - "pageElement": "//div[contains(@class, 'articleBody')]/nav/preceding-sibling::*[not(./following-sibling::*[1][self::nav])]", - "nextLink": "//li[contains(@class, \"p-pagination_list_item\") and contains(@class, \"-next\")]/a[@aria-label=\"次のページへリンク\"]", + "pageElement": "//div[contains(concat(' ',@class,' '), ' articleBody ')]/node()[self::nav or contains(.,'.p-article_watchBox')]/preceding-sibling::*", + "nextLink": "//li[contains(concat(' ',@class,' '), ' -next ')]/a[@aria-label=\"次のページへリンク\"]", "url": "^https://business\\.nikkei\\.com/", - "exampleUrl": "https://business.nikkei.com/atcl/seminar/19/00030/032200460/\r\nhttps://business.nikkei.com/atcl/gen/19/00533/030600006/\r\nhttps://business.nikkei.com/atcl/gen/19/00297/041900122/" + "exampleUrl": "https://business.nikkei.com/atcl/seminar/19/00030/032200460/\r\nhttps://business.nikkei.com/atcl/gen/19/00533/030600006/\r\nhttps://business.nikkei.com/atcl/gen/19/00297/041900122/\r\nhttps://business.nikkei.com/atcl/gen/19/00562/012900029/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "love_livedoor", "name": "日経ビジネス電子版", "created_at": "2019-01-16T14:26:53+09:00", - "updated_at": "2023-08-04T14:01:33+09:00" + "updated_at": "2024-01-31T17:56:47+09:00" }, { "resource_url": "http://wedata.net/items/82056", From e1c47c4dc1eba4c3d288495745233882a59eb3e5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 1 Feb 2024 19:35:30 +0800 Subject: [PATCH 720/812] Update searchJumperDefaultConfig.js --- SearchJumper/searchJumperDefaultConfig.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js index 7b2abb88c06..b7d710552f5 100644 --- a/SearchJumper/searchJumperDefaultConfig.js +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -477,6 +477,10 @@ switch (lang) { "url": "c:%sr", "nobatch": true }, + { + "name": "📝 粘贴", + "url": "paste:" + }, { "name": "🔆 页内搜索", "url": "find:%sr" @@ -2396,12 +2400,6 @@ switch (lang) { "match": "https://www\\.google\\..*/search", "hideNotMatch": true }, - { - "name": "Baidu", - "url": "https://www.baidu.com/s?wd=%s&ie=utf-8", - "keywords": "(?:wd|word)=(.*?)(&|$)", - "match": "https?://(www|m)\\.baidu\\.com/.*(wd|word)=" - }, { "name": "SearX", "url": "https://searx.be/search?q=%s" @@ -2475,6 +2473,10 @@ switch (lang) { "name": "📄 Copy", "url": "c:%sr" }, + { + "name": "📝 Paste", + "url": "paste:" + }, { "name": "🔆 Find in page", "url": "find:%sr" From 1398c6d62c6b77116fc62230f4b3c20b6a14dc51 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 1 Feb 2024 19:35:36 +0800 Subject: [PATCH 721/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 160 ++++++++++++++++++++++-------- 1 file changed, 118 insertions(+), 42 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index f146454f1b4..a935659a3dd 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.71 +// @version 1.7.72 // @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. // @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -7186,12 +7186,7 @@ } insertHistory(typeEle, init) { - if (!searchData.prefConfig.historyLength || - typeEle.classList.contains("search-jumper-targetImg") || - typeEle.classList.contains("search-jumper-targetAudio") || - typeEle.classList.contains("search-jumper-targetVideo") || - typeEle.classList.contains("search-jumper-targetLink") || - typeEle.classList.contains("search-jumper-targetPage")) { + if (!searchData.prefConfig.historyLength) { return; } typeEle.style.width = "auto"; @@ -7765,6 +7760,23 @@ } else ele.appendChild(se); } } + if (se.dataset.paste) { + if (targetElement && + ((/INPUT|TEXTAREA/i.test(targetElement.nodeName) && + targetElement.getAttribute("aria-readonly") != "true" + ) || + targetElement.contentEditable == 'true' + ) + ) { + se.style.display = ''; + if (ele.children.length > 1) ele.insertBefore(se, ele.children[1]); + } else { + se.style.display = 'none'; + if (self.searchJumperExpand.parentNode == ele) { + ele.insertBefore(se, self.searchJumperExpand); + } else ele.appendChild(se); + } + } let si = se.querySelector("img"); if (se.style.display != "none") { shownSitesNum++; @@ -8394,6 +8406,9 @@ showTips = true; ele.dataset.showTips = true; } + if (/^paste:/.test(data.url)) { + ele.dataset.paste = true; + } if (typeof data.openInNewTab !== 'undefined') { openInNewTab = data.openInNewTab; } @@ -9003,6 +9018,22 @@ let alt, ctrl, meta, shift; let action = async e => { delete ele.href; + if (!e) e = {}; + alt = e.altKey; + ctrl = e.ctrlKey; + meta = e.metaKey; + shift = e.shiftKey; + if (openInNewTab === 2) {//隱身窗口 + alt = false; + ctrl = true; + meta = false; + shift = true; + } else if (openInNewTab === 3) {//小窗口 + alt = true; + ctrl = false; + meta = false; + shift = false; + } if (showTips) { ele.removeAttribute("target"); if (tipsData) { @@ -9023,15 +9054,10 @@ } return; } - if (!e) e = {}; - alt = e.altKey; - ctrl = e.ctrlKey; - meta = e.metaKey; - shift = e.shiftKey; clicked = false; targetUrlData = ""; targetUrlData = await getUrl(); - if (/^c(opy)?:/.test(data.url) || /^javascript:/.test(data.url) || /^\[/.test(data.url) || /[:%]P{/.test(data.url) || (data.charset && data.charset != 'utf-8') || /[:%]p{/.test(data.url)) { + if (/^c(opy)?:|^paste:/.test(data.url) || /^javascript:/.test(data.url) || /^\[/.test(data.url) || /[:%]P{/.test(data.url) || (data.charset && data.charset != 'utf-8') || /[:%]p{/.test(data.url)) { if (e.button == 1 || e.button == 2) { clicked = true; } @@ -9070,7 +9096,7 @@ if (!self.batchOpening && !isBookmark) { let historyLength = Math.max(searchData.prefConfig.historyLength, 20); let isCurrent = ele.dataset.current; - if (!data.hideNotMatch && !data.kwFilter && !showTips && !ele.dataset.clone && urlMatch !== '0' && historyLength && !isCurrent) { + if (!data.hideNotMatch && !data.kwFilter && !showTips && !ele.dataset.clone && !ele.dataset.paste && urlMatch !== '0' && historyLength && !isCurrent) { storage.getItem("historySites", data => { historySites = (data || []); historySites = historySites.filter(site => {return site && site != name}); @@ -9231,6 +9257,48 @@ //_GM_notification('Copied successfully!'); } return false; + } else if (/^paste:/.test(data.url)) { + function triggerPaste(element, value) { + targetElement.focus(); + if (typeof element.value !== "undefined") { + const startPos = element.selectionStart; + const endPos = element.selectionEnd; + let newValue = element.value.substring(0, startPos) + value + element.value.substring(endPos, element.value.length); + startInput(element, newValue); + element.selectionStart = startPos + value.length; + element.selectionEnd = startPos + value.length; + } else { + const selection = window.getSelection(); + const range = selection.getRangeAt(0); + range.deleteContents(); + range.insertNode(document.createTextNode(value)); + selection.removeAllRanges(); + selection.addRange(range); + } + } + if (targetElement && + ((/INPUT|TEXTAREA/i.test(targetElement.nodeName) && + targetElement.getAttribute("aria-readonly") != "true" + ) || + targetElement.contentEditable == 'true' + ) + ) { + if (!targetUrlData) { + return false; + } + targetUrlData = targetUrlData.replace(/^paste:/, ""); + if (targetUrlData.indexOf('%input{') !== -1) { + self.showCustomInputWindow(targetUrlData, _url => { + triggerPaste(targetElement, _url); + }); + } else if (targetUrlData) { + triggerPaste(targetElement, targetUrlData); + } else if (typeof navigator.clipboard.readText !== "undefined") { + navigator.clipboard.readText().then((clipboardValue) => { + triggerPaste(targetElement, clipboardValue); + }); + } + } } else if (/^\[/.test(data.url)) { if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); @@ -9339,9 +9407,11 @@ } let viewWidth = window.screen.availWidth || window.innerWidth || document.documentElement.clientWidth; let viewHeight = window.screen.availHeight || window.innerHeight || document.documentElement.clientHeight; - let left = viewWidth - 450; - let top = (viewHeight - 800) / 2; - window.open(targetUrlData + "#searchJumperMin" + (/#p{/.test(data.url) ? 'Post' : ''), "_blank", `width=450, height=800, location=0, resizable=1, status=0, toolbar=0, menubar=0, scrollbars=0, left=${left}, top=${top}`); + let showWidth = Math.min(viewWidth, 550); + let showHeight = Math.min(viewHeight, 800); + let left = viewWidth - showWidth; + let top = (viewHeight - showHeight) / 2; + window.open(targetUrlData + "#searchJumperMin" + (/#p{/.test(data.url) ? 'Post' : ''), "_blank", `width=${showWidth}, height=${showHeight}, location=0, resizable=1, status=0, toolbar=0, menubar=0, scrollbars=0, left=${left}, top=${top}`); } else if (shift) { _GM_openInTab(targetUrlData, {active: true}); } @@ -10839,29 +10909,9 @@ }); } - async function emuInput(sel, v, eleIndex = -1) { - let input, result = false; - if (eleIndex >= 0) { - if (eleIndex === 0) await waitForElement(sel); - let eles = getAllElements(sel); - if (eles.length === 0) { - return true; - } - if (eles.length === 1) { - input = eles[0]; - result = true; - } else if (eles.length <= eleIndex) { - return true; - } else { - input = eles[eleIndex]; - if (eles.length === eleIndex + 1) { - result = true; - } - } - } else { - input = await waitForElement(sel); - if (!input) return true; - } + function startInput(input, v) { + if (!input) return true; + let result = false; targetElement = input; let event = new Event('focus', { bubbles: true }); input.dispatchEvent(event); @@ -10901,10 +10951,36 @@ input.dispatchEvent(event); event = new Event('change', { bubbles: true }); input.dispatchEvent(event); - debug(input, `input ${sel}`); + debug(input, `input`); return result; } + async function emuInput(sel, v, eleIndex = -1) { + let input, result = false; + if (eleIndex >= 0) { + if (eleIndex === 0) await waitForElement(sel); + let eles = getAllElements(sel); + if (eles.length === 0) { + return true; + } + if (eles.length === 1) { + input = eles[0]; + result = true; + } else if (eles.length <= eleIndex) { + return true; + } else { + input = eles[eleIndex]; + if (eles.length === eleIndex + 1) { + result = true; + } + } + } else { + input = await waitForElement(sel); + if (!input) return true; + } + return startInput(input, v); + } + async function emuClick(sel, eleIndex = -1) { let btn, result = false; if (eleIndex >= 0) { @@ -12155,7 +12231,7 @@ var shareEngines; async function checkConfigPage() { - if (location.href.indexOf(configPage) === 0 || (document.title === "SearchJumper" && document.querySelector('[name="author"][content="Hoothin"]'))) { + if (location.href.indexOf(configPage) === 0 || ((document.title === "SearchJumper" || document.querySelector('[name="from"][content="SearchJumper"]')) && document.querySelector('[name="author"][content="Hoothin"]'))) { shareEngines = document.querySelector('[name="engines"]'); let spotlight = document.getElementById("spotlight"); if (shareEngines) { From a3cdbb524b2a37091fbc8556317e2deff91da8ac Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 1 Feb 2024 20:53:56 +0800 Subject: [PATCH 722/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 81eb593c4ba..64a858c7c66 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6842,7 +6842,7 @@ } } var loadingDiv = document.createElement("div"); - loadingDiv.style.cssText = "text-indent: initial;cy: initial;d: initial;dominant-baseline: initial;empty-cells: initial;fill: initial;fill-opacity: initial;fill-rule: initial;filter: initial;flex: initial;flex-flow: initial;float: initial;flood-color: initial;flood-opacity: initial;grid: initial;grid-area: initial;height: initial;hyphens: initial;image-orientation: initial;image-rendering: initial;inline-size: initial;inset-block: initial;inset-inline: initial;isolation: initial;letter-spacing: initial;lighting-color: initial;line-break: initial;list-style: initial;margin-block: initial;margin: 0px auto;margin-inline: initial;marker: initial;mask: initial;mask-type: initial;max-block-size: initial;max-height: initial;max-inline-size: initial;max-width: initial;min-block-size: initial;min-height: initial;min-inline-size: initial;min-width: initial;mix-blend-mode: initial;object-fit: initial;object-position: initial;offset: initial;opacity: initial;order: initial;origin-trial-test-property: initial;orphans: initial;outline: initial;outline-offset: initial;overflow-anchor: initial;overflow-clip-margin: initial;overflow-wrap: initial;overflow: initial;overscroll-behavior-block: initial;overscroll-behavior-inline: initial;overscroll-behavior: initial;padding-block: initial;padding: initial;padding-inline: initial;page: initial;page-orientation: initial;paint-order: initial;perspective: initial;perspective-origin: initial;pointer-events: initial;position: initial;quotes: initial;r: initial;resize: initial;ruby-position: initial;rx: initial;ry: initial;scroll-behavior: initial;scroll-margin-block: initial;scroll-margin: initial;scroll-margin-inline: initial;scroll-padding-block: initial;scroll-padding: initial;scroll-padding-inline: initial;scroll-snap-align: initial;scroll-snap-stop: initial;scroll-snap-type: initial;scrollbar-gutter: initial;shape-image-threshold: initial;shape-margin: initial;shape-outside: initial;shape-rendering: initial;size: initial;speak: initial;stop-color: initial;stop-opacity: initial;stroke: initial;stroke-dasharray: initial;stroke-dashoffset: initial;stroke-linecap: initial;stroke-linejoin: initial;stroke-miterlimit: initial;stroke-opacity: initial;stroke-width: initial;tab-size: initial;table-layout: initial;text-align: initial;text-align-last: initial;text-anchor: initial;text-combine-upright: initial;text-decoration: initial;text-decoration-skip-ink: initial;text-indent: initial;text-overflow: initial;text-shadow: initial;text-size-adjust: initial;text-transform: initial;text-underline-offset: initial;text-underline-position: initial;touch-action: initial;transform: initial;transform-box: initial;transform-origin: initial;transform-style: initial;transition: initial;user-select: initial;vector-effect: initial;vertical-align: initial;visibility: initial;border-spacing: initial;-webkit-border-image: initial;-webkit-box-align: initial;-webkit-box-decoration-break: initial;-webkit-box-direction: initial;-webkit-box-flex: initial;-webkit-box-ordinal-group: initial;-webkit-box-orient: initial;-webkit-box-pack: initial;-webkit-box-reflect: initial;-webkit-highlight: initial;-webkit-hyphenate-character: initial;-webkit-line-break: initial;-webkit-line-clamp: initial;-webkit-mask-box-image: initial;-webkit-mask: initial;-webkit-mask-composite: initial;-webkit-perspective-origin-x: initial;-webkit-perspective-origin-y: initial;-webkit-print-color-adjust: initial;-webkit-rtl-ordering: initial;-webkit-ruby-position: initial;-webkit-tap-highlight-color: initial;-webkit-text-combine: initial;-webkit-text-decorations-in-effect: initial;-webkit-text-emphasis: initial;-webkit-text-emphasis-position: initial;-webkit-text-fill-color: initial;-webkit-text-security: initial;-webkit-text-stroke: initial;-webkit-transform-origin-x: initial;-webkit-transform-origin-y: initial;-webkit-transform-origin-z: initial;-webkit-user-drag: initial;-webkit-user-modify: initial;white-space: initial;widows: initial;width: initial;will-change: initial;word-break: initial;word-spacing: initial;x: initial;y: initial;z-index: 2147483647;"; + if (loadingDiv.style) loadingDiv.style.cssText = "text-indent: initial;cy: initial;d: initial;dominant-baseline: initial;empty-cells: initial;fill: initial;fill-opacity: initial;fill-rule: initial;filter: initial;flex: initial;flex-flow: initial;float: initial;flood-color: initial;flood-opacity: initial;grid: initial;grid-area: initial;height: initial;hyphens: initial;image-orientation: initial;image-rendering: initial;inline-size: initial;inset-block: initial;inset-inline: initial;isolation: initial;letter-spacing: initial;lighting-color: initial;line-break: initial;list-style: initial;margin-block: initial;margin: 0px auto;margin-inline: initial;marker: initial;mask: initial;mask-type: initial;max-block-size: initial;max-height: initial;max-inline-size: initial;max-width: initial;min-block-size: initial;min-height: initial;min-inline-size: initial;min-width: initial;mix-blend-mode: initial;object-fit: initial;object-position: initial;offset: initial;opacity: initial;order: initial;origin-trial-test-property: initial;orphans: initial;outline: initial;outline-offset: initial;overflow-anchor: initial;overflow-clip-margin: initial;overflow-wrap: initial;overflow: initial;overscroll-behavior-block: initial;overscroll-behavior-inline: initial;overscroll-behavior: initial;padding-block: initial;padding: initial;padding-inline: initial;page: initial;page-orientation: initial;paint-order: initial;perspective: initial;perspective-origin: initial;pointer-events: initial;position: initial;quotes: initial;r: initial;resize: initial;ruby-position: initial;rx: initial;ry: initial;scroll-behavior: initial;scroll-margin-block: initial;scroll-margin: initial;scroll-margin-inline: initial;scroll-padding-block: initial;scroll-padding: initial;scroll-padding-inline: initial;scroll-snap-align: initial;scroll-snap-stop: initial;scroll-snap-type: initial;scrollbar-gutter: initial;shape-image-threshold: initial;shape-margin: initial;shape-outside: initial;shape-rendering: initial;size: initial;speak: initial;stop-color: initial;stop-opacity: initial;stroke: initial;stroke-dasharray: initial;stroke-dashoffset: initial;stroke-linecap: initial;stroke-linejoin: initial;stroke-miterlimit: initial;stroke-opacity: initial;stroke-width: initial;tab-size: initial;table-layout: initial;text-align: initial;text-align-last: initial;text-anchor: initial;text-combine-upright: initial;text-decoration: initial;text-decoration-skip-ink: initial;text-indent: initial;text-overflow: initial;text-shadow: initial;text-size-adjust: initial;text-transform: initial;text-underline-offset: initial;text-underline-position: initial;touch-action: initial;transform: initial;transform-box: initial;transform-origin: initial;transform-style: initial;transition: initial;user-select: initial;vector-effect: initial;vertical-align: initial;visibility: initial;border-spacing: initial;-webkit-border-image: initial;-webkit-box-align: initial;-webkit-box-decoration-break: initial;-webkit-box-direction: initial;-webkit-box-flex: initial;-webkit-box-ordinal-group: initial;-webkit-box-orient: initial;-webkit-box-pack: initial;-webkit-box-reflect: initial;-webkit-highlight: initial;-webkit-hyphenate-character: initial;-webkit-line-break: initial;-webkit-line-clamp: initial;-webkit-mask-box-image: initial;-webkit-mask: initial;-webkit-mask-composite: initial;-webkit-perspective-origin-x: initial;-webkit-perspective-origin-y: initial;-webkit-print-color-adjust: initial;-webkit-rtl-ordering: initial;-webkit-ruby-position: initial;-webkit-tap-highlight-color: initial;-webkit-text-combine: initial;-webkit-text-decorations-in-effect: initial;-webkit-text-emphasis: initial;-webkit-text-emphasis-position: initial;-webkit-text-fill-color: initial;-webkit-text-security: initial;-webkit-text-stroke: initial;-webkit-transform-origin-x: initial;-webkit-transform-origin-y: initial;-webkit-transform-origin-z: initial;-webkit-user-drag: initial;-webkit-user-modify: initial;white-space: initial;widows: initial;width: initial;will-change: initial;word-break: initial;word-spacing: initial;x: initial;y: initial;z-index: 2147483647;"; const loadingCSS = `font-size: initial; text-indent: unset; display: block; position: initial; margin: auto auto 5px auto; shape-rendering: auto; vertical-align: middle; visibility: visible; width: initial; height: initial; text-align: center; color: #6e6e6e; flex: 0;`; function setLoadingDiv(loadingText) { From e6f0d96002144b962f482b690bc5446ed1911fb7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 1 Feb 2024 20:55:59 +0800 Subject: [PATCH 723/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 8fd6ecf8295..6fa66ad56cd 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -12465,6 +12465,7 @@ ImgOps | https://imgops.com/#b#`; rulerEle.style.whiteSpace = "nowrap"; } function visualLength(str,size,family) { + if (!rulerEle.style) return 230; rulerEle.style.fontSize = size || "inherit"; rulerEle.style.fontFamily = family || "inherit"; rulerEle.innerText = str; From 5001ebe35cdfcc83693ace93c916f68c2a84856c Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 1 Feb 2024 21:47:45 +0800 Subject: [PATCH 724/812] 1.9.37.27 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 0d885daa857..bf483eff3bd 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.26](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.27](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 64a858c7c66..ea2ce9f31c0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.26 +// @version 1.9.37.27 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2381,6 +2381,7 @@ ".btn-next:not([disabled])", "a#linkNext", "a[class*=page__next]", + "[class*=pager]>a.next", "[class*=pagination-next]>a" ]; let next = await this.querySelectorList(body, selectorList); From d186a8b44bff2e584003dd6b49f46f31291d50d3 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 2 Feb 2024 13:19:51 +0800 Subject: [PATCH 725/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 35 ++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 6fa66ad56cd..17af02d03ac 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.1.28.1 +// @version 2024.2.2.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11774,20 +11774,31 @@ ImgOps | https://imgops.com/#b#`; } } else GM_fetch = fetch; + var canvas = document.createElement('CANVAS'); + canvas.style.display = "none"; + document.body.appendChild(canvas); + if (typeof canvas.getContext === 'undefined') { + document.body.removeChild(canvas); + canvas = null; + } else { + document.body.removeChild(canvas); + } function icon2Base64(icon, content, iconStyle) { - if (!content) return false; - var canvas = document.createElement("canvas"); + if (!content || !canvas) return false; let size = Math.min((icon.clientWidth || icon.offsetWidth), (icon.clientHeight || icon.offsetHeight)); if (!size) return false; canvas.width = size; canvas.height = size; + document.body.appendChild(canvas); var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.font = iconStyle.font || (iconStyle.fontSize + " " + iconStyle.fontFamily); ctx.strokeStyle = iconStyle.color || "black"; ctx.fillStyle = iconStyle.color || "black"; ctx.textBaseline = "top"; let metrics = ctx.measureText(content); ctx.fillText(content, (canvas.width - metrics.width) / 2, (canvas.height - parseInt(iconStyle.fontSize)) / 2); + document.body.removeChild(canvas); return canvas.toDataURL("image/png"); } @@ -11894,18 +11905,21 @@ ImgOps | https://imgops.com/#b#`; }; function dataURLToCanvas(dataurl, cb){ if(!dataurl)return cb(null); - var canvas = document.createElement('CANVAS'); + document.body.appendChild(canvas); var ctx = canvas.getContext('2d'); var img = new Image(); img.setAttribute("crossOrigin","anonymous"); img.onload = function(){ canvas.width = img.width; canvas.height = img.height; + ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0); cb(canvas); + document.body.removeChild(canvas); }; img.onerror = function(){ cb(null); + document.body.removeChild(canvas); }; img.src = dataurl; } @@ -11927,7 +11941,7 @@ ImgOps | https://imgops.com/#b#`; onload: function(d) { let blob = d.response; let ext = blob.type.replace(/.*image\/(\w+).*/, "$1"); - if (ext == "webp" || forcePng) { + if (canvas && (ext == "webp" || forcePng)) { var self = this; var a = new FileReader(); a.readAsDataURL(blob); @@ -14970,7 +14984,7 @@ ImgOps | https://imgops.com/#b#`; } }); } - if(/^data:/.test(imgSrc) || imgSrc.split("/")[2]==document.domain){ + if(canvas && (/^data:/.test(imgSrc) || imgSrc.split("/")[2] == document.domain)){ self.dataURLToCanvas(imgSrc, canvas=>{ self.showTips("Downloading "+(downloaded+1)+"/"+len, 1000000); if(!canvas){ @@ -15402,18 +15416,21 @@ ImgOps | https://imgops.com/#b#`; }, dataURLToCanvas:function (dataurl, cb){ if(!dataurl)return cb(null); - var canvas = document.createElement('CANVAS'); + document.body.appendChild(canvas); var ctx = canvas.getContext('2d'); var img = new Image(); img.setAttribute("crossOrigin","anonymous"); img.onload = function(){ canvas.width = img.width; canvas.height = img.height; + ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0); cb(canvas); + document.body.removeChild(canvas); }; img.onerror = function(){ cb(null); + document.body.removeChild(canvas); }; img.src = dataurl; }, @@ -24601,11 +24618,13 @@ ImgOps | https://imgops.com/#b#`; }; function drawTobase64(img){ - let canvas = document.createElement('CANVAS'); + document.body.appendChild(canvas); canvas.width = img.naturalWidth || img.width; canvas.height = img.naturalHeight || img.height; let ctx = canvas.getContext('2d'); + ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0); + document.body.removeChild(canvas); return canvas.toDataURL("image/png"); } From bf78d5985a2e195cb6e0434f5428935b44141b32 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 2 Feb 2024 20:14:19 +0800 Subject: [PATCH 726/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index a935659a3dd..c94ad0921ff 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -9023,16 +9023,18 @@ ctrl = e.ctrlKey; meta = e.metaKey; shift = e.shiftKey; - if (openInNewTab === 2) {//隱身窗口 - alt = false; - ctrl = true; - meta = false; - shift = true; - } else if (openInNewTab === 3) {//小窗口 - alt = true; - ctrl = false; - meta = false; - shift = false; + if (!alt && !ctrl && !meta && !shift) { + if (openInNewTab === 2) {//隱身窗口 + alt = false; + ctrl = true; + meta = false; + shift = true; + } else if (openInNewTab === 3) {//小窗口 + alt = true; + ctrl = false; + meta = false; + shift = false; + } } if (showTips) { ele.removeAttribute("target"); From fd3b7ce36c28356f23ae574f03448ad38247eb76 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 3 Feb 2024 13:56:18 +0800 Subject: [PATCH 727/812] update --- DownloadAllContent/DownloadAllContent.user.js | 8 ++++---- DownloadAllContent/DownloadAllContentSavaAsZIP.user.js | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index b46dd29244f..1e73fc43642 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.3.3 +// @version 2.8.3.4 // @description Lightweight web scraping script. Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容爬虫抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容爬蟲抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -999,7 +999,7 @@ if (window.top != window.self) { }); }; if (useIframe) { - let iframe = document.createElement('iframe'), inited = false; + let iframe = document.createElement('iframe'), inited = false, failedTimes = 0; iframe.name = 'pagetual-iframe'; iframe.width = '100%'; iframe.height = '1000'; @@ -1021,7 +1021,7 @@ if (window.top != window.self) { } doc.body.scrollTop = 9999999; doc.documentElement.scrollTop = 9999999; - if (!processFunc && validTimes++ > 5) { + if (!processFunc && validTimes++ > 5 && failedTimes++ < 2) { iframe.src = iframe.src; validTimes = 0; inited = false; @@ -1039,7 +1039,7 @@ if (window.top != window.self) { } downIndex++; downNum++; - let validData = processDoc(curIndex, aTag, doc, "", true); + let validData = processDoc(curIndex, aTag, doc, "", failedTimes < 2); if (!validData) { downIndex--; downNum--; diff --git a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js index e704d278d7d..ceb8dcc0a09 100644 --- a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js +++ b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js @@ -3,7 +3,7 @@ // @name:zh-CN 怠惰小说下载器 ZIP 扩展 // @name:zh-TW 怠惰小説下載器 ZIP 擴充 // @namespace hoothin -// @version 0.5 +// @version 0.6 // @description Save content as ZIP for DownloadAllContent // @description:zh-CN 下载时分章节保存 TXT 并打包为 ZIP // @description:zh-TW 下載時分章節儲存 TXT 並打包為 ZIP @@ -182,6 +182,7 @@ let zipTemp = []; for (let i = 0; i < rCats.length; i++) { let cat = rCats[i]; + if (!cat) continue; let catTitle = cat.match(/.*?\r\n/); if (!catTitle) continue; catTitle = catTitle[0].trim(); From bfe2c537cacf9e61892282fd21a7068c87bf95f8 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 3 Feb 2024 14:07:35 +0800 Subject: [PATCH 728/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 1e73fc43642..90bd0e14ce8 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -1010,7 +1010,7 @@ if (window.top != window.self) { if (e.data != 'pagetual-iframe:DOMLoaded' && e.type != 'load') return; if (inited) return; inited = true; - function checkIframe() { + async function checkIframe() { try { let doc = iframe.contentDocument || iframe.contentWindow.document; if (!doc || !doc.body) { @@ -1027,6 +1027,42 @@ if (window.top != window.self) { inited = false; return; } + let base = doc.querySelector("base"); + let nextPages = !disableNextPage && !processFunc && await checkNextPage(doc, base ? base.href : aTag.href); + if (nextPages) { + if (!nextPages.length) nextPages = [nextPages]; + nextPages.forEach(nextPage => { + var inArr=false; + for(var ai=0;ai>"; + aEles.push(nextPage); + let targetIndex = curIndex; + for(let a=0;a Date: Sat, 3 Feb 2024 20:43:24 +0800 Subject: [PATCH 729/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index ea2ce9f31c0..066ca01b877 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.27 +// @version 1.9.37.28 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -7814,7 +7814,6 @@ if (!input) return true; let event = new Event('focus', { bubbles: true }); input.dispatchEvent(event); - input.click && input.click(); let lastValue = input.value; if (input.type == 'file') { let file = v; @@ -8006,7 +8005,6 @@ let mirrorEle = iframeDoc.querySelector(sel); if (!mirrorEle) return; let selected = option.selected; - mirrorEle.click && mirrorEle.click(); mirrorEle.selected = !!selected; mirrorEle.parentNode.dispatchEvent(new Event('change')); }); From 1ba57946879135e009a7a250624bb4f1c24c5d30 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 3 Feb 2024 20:43:59 +0800 Subject: [PATCH 730/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index bf483eff3bd..295313b1f9c 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.27](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.28](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 2d3a3ce5fe73a7675761ce0e5f31f538539bdaf9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 3 Feb 2024 20:47:19 +0800 Subject: [PATCH 731/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index b3b88fe97be..83e0b7a2d97 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -9259,6 +9259,15 @@ "initRun": 0, "wait": 1000 }, +{ + "name": "中国知网 AdvSearch", + "url": "^https://kns\\.cnki\\.net/kns8s/AdvSearch", + "nextLink": "a#PageNext", + "pageElement": ".result-table-list tbody>*", + "refreshByClick": ".search-btn", + "initRun": 0, + "wait": 1000 +}, { "name": "图怪兽", "url": "^https://818ps\\.com/", From 06c8a8cc856781985c951b48d1b1aac38e289211 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 4 Feb 2024 12:47:38 +0800 Subject: [PATCH 732/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c94ad0921ff..ce5401cd0e2 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,10 +4,10 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.72 -// @description Most powerful aggregated search extension. Assist with the seamless transition between any search engine(Google/Bing/Custom), providing the ability to swiftly navigate to any platform and conduct searches effortlessly. -// @description:zh-CN 最强聚合搜索插件,高效搜索辅助工具,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 -// @description:zh-TW 高效搜尋輔助,在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 +// @version 1.7.73 +// @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. +// @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 +// @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 // @description:ja 任意の検索エンジンにすばやく簡単にジャンプします! // @author hoothin // @license MPL-2.0 @@ -8376,6 +8376,9 @@ let tipsData; let pointer = !isBookmark && /^\[/.test(data.url); let description = data.description; + if (typeof data.openInNewTab !== 'undefined') { + openInNewTab = data.openInNewTab; + } if (pointer) { ele.dataset.pointer = true; let siteNames = JSON.parse(data.url); @@ -8409,9 +8412,6 @@ if (/^paste:/.test(data.url)) { ele.dataset.paste = true; } - if (typeof data.openInNewTab !== 'undefined') { - openInNewTab = data.openInNewTab; - } let isPage = /^(https?|ftp):/.test(data.url); if (isPage) ele.dataset.isPage = isPage; ele.className = "search-jumper-btn"; @@ -9034,6 +9034,11 @@ ctrl = false; meta = false; shift = false; + } else if (openInNewTab === 4) {//后台标签页 + alt = false; + ctrl = true; + meta = false; + shift = false; } } if (showTips) { @@ -9388,7 +9393,7 @@ if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); if (ctrl) { - _GM_openInTab(targetUrlData); + _GM_openInTab(targetUrlData, {active: false}); } else { _GM_openInTab(targetUrlData, {active: true}); } @@ -9396,7 +9401,7 @@ if ((ctrl || meta) && shift) { _GM_openInTab(targetUrlData, {incognito: true}); } else if (ctrl || meta) { - _GM_openInTab(targetUrlData); + _GM_openInTab(targetUrlData, {active: false}); } else if (alt) { if (data.match) { let match = data.match.replace(/\\/g, ""); From c14ff6e8ddc854be083c9d48fb6cc90a1805f30c Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 4 Feb 2024 16:05:40 +0800 Subject: [PATCH 733/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 68 ++++++++++------------------- 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 17af02d03ac..923e48fd147 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.2.2.1 +// @version 2024.2.4.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -11775,13 +11775,15 @@ ImgOps | https://imgops.com/#b#`; } else GM_fetch = fetch; var canvas = document.createElement('CANVAS'); - canvas.style.display = "none"; - document.body.appendChild(canvas); - if (typeof canvas.getContext === 'undefined') { - document.body.removeChild(canvas); - canvas = null; - } else { - document.body.removeChild(canvas); + if (document.body) { + if (canvas.style) canvas.style.display = "none"; + document.body.appendChild(canvas); + if (typeof canvas.getContext === 'undefined') { + document.body.removeChild(canvas); + canvas = null; + } else { + document.body.removeChild(canvas); + } } function icon2Base64(icon, content, iconStyle) { if (!content || !canvas) return false; @@ -11789,7 +11791,6 @@ ImgOps | https://imgops.com/#b#`; if (!size) return false; canvas.width = size; canvas.height = size; - document.body.appendChild(canvas); var ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.font = iconStyle.font || (iconStyle.fontSize + " " + iconStyle.fontFamily); @@ -11798,7 +11799,6 @@ ImgOps | https://imgops.com/#b#`; ctx.textBaseline = "top"; let metrics = ctx.measureText(content); ctx.fillText(content, (canvas.width - metrics.width) / 2, (canvas.height - parseInt(iconStyle.fontSize)) / 2); - document.body.removeChild(canvas); return canvas.toDataURL("image/png"); } @@ -11905,7 +11905,6 @@ ImgOps | https://imgops.com/#b#`; }; function dataURLToCanvas(dataurl, cb){ if(!dataurl)return cb(null); - document.body.appendChild(canvas); var ctx = canvas.getContext('2d'); var img = new Image(); img.setAttribute("crossOrigin","anonymous"); @@ -11915,11 +11914,9 @@ ImgOps | https://imgops.com/#b#`; ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0); cb(canvas); - document.body.removeChild(canvas); }; img.onerror = function(){ cb(null); - document.body.removeChild(canvas); }; img.src = dataurl; } @@ -15416,7 +15413,6 @@ ImgOps | https://imgops.com/#b#`; }, dataURLToCanvas:function (dataurl, cb){ if(!dataurl)return cb(null); - document.body.appendChild(canvas); var ctx = canvas.getContext('2d'); var img = new Image(); img.setAttribute("crossOrigin","anonymous"); @@ -15426,11 +15422,9 @@ ImgOps | https://imgops.com/#b#`; ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0); cb(canvas); - document.body.removeChild(canvas); }; img.onerror = function(){ cb(null); - document.body.removeChild(canvas); }; img.src = dataurl; }, @@ -22012,8 +22006,8 @@ ImgOps | https://imgops.com/#b#`; var setPosition = { top:function() { var top = targetPosi.top; - if (targetPosi.top + offsetY < 10) { - top += 10; + if (top + offsetY - scrolled.y < 10) { + top = scrolled.y; offsetY = 0; } else { if (prefs.floatBar.stayOut) { @@ -22028,40 +22022,30 @@ ImgOps | https://imgops.com/#b#`; }, right:function() { var right = targetPosi.right; - if (right < offsetX) { - right += 10; - offsetX = 0; + if (prefs.floatBar.stayOut) { + right = right - offsetX - prefs.floatBar.stayOutOffsetX; } else { - if (prefs.floatBar.stayOut) { - right = right - offsetX - prefs.floatBar.stayOutOffsetX; - } else { - right = right - offsetX; - } - if (targetPosi.width <= 50) right += 10; + right = right - offsetX; } + if (targetPosi.width <= 50) right += 10; fbs.left = 'unset'; fbs.right = right + 'px'; }, bottom:function() { var bottom = targetPosi.bottom; - if (bottom <= offsetY) { - bottom += 10; - offsetY = 0; + if (prefs.floatBar.stayOut) { + bottom = bottom - offsetY - 40 - prefs.floatBar.stayOutOffsetY; } else { - if (prefs.floatBar.stayOut) { - bottom = bottom - offsetY - 40 - prefs.floatBar.stayOutOffsetY; - } else { - bottom = bottom - offsetY - 30; - } - if (targetPosi.height <= 50) bottom += 10; + bottom = bottom - offsetY - 30; } + if (targetPosi.height <= 50) bottom += 10; fbs.top = 'unset'; fbs.bottom = bottom + 'px'; }, left:function() { var left = targetPosi.left; - if (targetPosi.left + offsetX < 0) { - left += 10; + if (left + offsetX - scrolled.x < 0) { + left = scrolled.x; offsetX = 0; } else { if (prefs.floatBar.stayOut) { @@ -22080,13 +22064,7 @@ ImgOps | https://imgops.com/#b#`; }, hide:function(){ var top=targetPosi.top; - if(targetPosi.top + offsetY < 0){ - offsetY=0; - } var left=targetPosi.left; - if(targetPosi.left + offsetX < 0){ - offsetX=0; - } if(prefs.floatBar.stayOut){ top=top + offsetY - 10 - prefs.floatBar.stayOutOffsetY; left=left + offsetX - prefs.floatBar.stayOutOffsetX; @@ -24618,13 +24596,11 @@ ImgOps | https://imgops.com/#b#`; }; function drawTobase64(img){ - document.body.appendChild(canvas); canvas.width = img.naturalWidth || img.width; canvas.height = img.naturalHeight || img.height; let ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0); - document.body.removeChild(canvas); return canvas.toDataURL("image/png"); } From 628e957f81f83b6865a54fe13215249d03177477 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 4 Feb 2024 16:12:39 +0800 Subject: [PATCH 734/812] Update pvcep_rules.js --- Picviewer CE+/pvcep_rules.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/pvcep_rules.js b/Picviewer CE+/pvcep_rules.js index 2773bd97509..5a480104b25 100644 --- a/Picviewer CE+/pvcep_rules.js +++ b/Picviewer CE+/pvcep_rules.js @@ -652,8 +652,10 @@ var siteInfo = [ if (newsrc != this.src) { if (a && a.role == 'link') { let match = a.href.match(/\/([^\/]+)\/status\/([^\/]+)\/photo\/(\d+)/); - let time = p[14].querySelector('time'); - this.alt = match[1] + " - " + time.innerText + "_" + match[3]; + let time = p[14] && p[14].querySelector('time'); + if (time) { + this.alt = match[1] + " - " + time.innerText + "_" + match[3]; + } } return newsrc+"&name=orig"; } From c720ce84f3c7f12d6952ddf4b42592bee948f472 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 4 Feb 2024 16:14:16 +0800 Subject: [PATCH 735/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 923e48fd147..68171dcb59f 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.2.4.1 +// @version 2024.2.4.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -44,7 +44,7 @@ // @grant GM.notification // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://update.greasyfork.org/scripts/438080/1314917/pvcep_rules.js +// @require https://update.greasyfork.org/scripts/438080/1322681/pvcep_rules.js // @require https://update.greasyfork.org/scripts/440698/1311439/pvcep_lang.js // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js From 41f628468880048cbf5d5feeb9866a6bf0b1e120 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 4 Feb 2024 17:14:19 +0800 Subject: [PATCH 736/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 68171dcb59f..cee0190ca28 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.2.4.2 +// @version 2024.2.4.3 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -16838,7 +16838,7 @@ ImgOps | https://imgops.com/#b#`; this._appendThumbSpans(data); } }, - getAllValidImgs:async function(newer){ + getAllValidImgs:async function(newer, checkListenBg){ var validImgs = []; var container = document.querySelector('.pv-gallery-container'), preloadContainer = document.querySelector('.pv-gallery-preloaded-img-container'); @@ -16873,6 +16873,9 @@ ImgOps | https://imgops.com/#b#`; total.push(node); } } + if (checkListenBg && !prefs.floatBar.listenBg) { + return total; + } if(!node.className || !node.className.indexOf || node.className.indexOf("pv-")==-1){ let prop = getComputedStyle(node).backgroundImage; let hasSrc = /^(audio|embed|iframe|img|input|script|source|track|video|svg|canvas)$/i.test(node.nodeName); @@ -19422,7 +19425,7 @@ ImgOps | https://imgops.com/#b#`; if (gallery.shown || gallery.minimized) { return; } - var allData = await gallery.getAllValidImgs(); + var allData = await gallery.getAllValidImgs(false, true); if (allData.length <= 1) return; const validData = (data, src) => { if (!data || !data.img || !data.img.parentNode) return false; From a8b18e9b732a1d35cb6eb3d002c4baa4288cd60d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 4 Feb 2024 19:09:22 +0800 Subject: [PATCH 737/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 066ca01b877..a261c6e0b70 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6244,7 +6244,7 @@ _GM_openInTab(firstRunPage, {active: true}); } }); - }, 100); + }, 500); } _GM_registerMenuCommand(i18n("configure"), () => { _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); From f00fa4794b8ff55dea2c08a05a4b632335c290d5 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 5 Feb 2024 01:51:13 +0000 Subject: [PATCH 738/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 3b6b6dc06b0..3dc98ba1724 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -50689,14 +50689,14 @@ "data": { "pageElement": "id('searched')/li|//table[@class='rank']/tbody/tr", "nextLink": "//a[@class='next']", - "url": "^https://(?:\\w+db\\.)?supleks\\.jp/search", - "exampleUrl": "https://ramendb.supleks.jp/search\r\nhttps://supleks.jp/search?q=カレー" + "url": "^https://(?:[^/]+db\\.)?supleks\\.jp/search", + "exampleUrl": "https://ramendb.supleks.jp/search\r\nhttps://supleks.jp/search?q=カレー\r\nhttps://tokyo-ramendb.supleks.jp/search?state=tokyo" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "ngs", "name": "なんとかデータベース", "created_at": "2008-07-23T00:07:49+09:00", - "updated_at": "2020-07-01T17:58:28+09:00" + "updated_at": "2024-02-04T10:42:36+09:00" }, { "resource_url": "http://wedata.net/items/2025", From 1faacf4ec7dfa72ffbd30be6d6d69482ba3d26a8 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 6 Feb 2024 01:43:59 +0000 Subject: [PATCH 739/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 3dc98ba1724..32eb969de0d 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86208", + "data": { + "insertBefore": "", + "pageElement": "id('article')/div[@id]", + "nextLink": "//ul[contains(concat(' ',@class,' '),' pagenav ')]/li[a/@class='active']/following-sibling::li/a", + "url": "^https://kyotolove\\.kyoto/", + "exampleUrl": "https://kyotolove.kyoto/I0000332/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "Kyoto Love. Kyoto KLK", + "created_at": "2024-02-06T02:30:53+09:00", + "updated_at": "2024-02-06T02:30:53+09:00" +}, { "resource_url": "http://wedata.net/items/86206", "data": { From 4a61380520ed60d54d754c4d718cdc0565731db6 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 6 Feb 2024 14:36:35 +0800 Subject: [PATCH 740/812] 1.9.37.29 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 295313b1f9c..6f19f96c9ea 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.28](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.29](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index a261c6e0b70..60ae167a936 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.28 +// @version 1.9.37.29 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2371,6 +2371,7 @@ "a.page-next", "a.pages-next", "a.page.right", + ".paging>.active+.item", "a#next", ".next>a", ".next>button", From 667ba59208ad91e4c17012297a4f80952d5796ce Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 7 Feb 2024 11:24:15 +0800 Subject: [PATCH 741/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 83e0b7a2d97..2fd826da4ec 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10461,13 +10461,13 @@ "pageAction": "eles.forEach(ele=>{if(ele.classList.contains('show_poster_preview')){ele.onmouseenter=e=>{document.querySelector('#pop_poster_preview_box').innerHTML=``;document.getElementById('pop_poster_preview_box').style.display='block'};ele.onmouseleave=e=>{document.getElementById('pop_poster_preview_box').style.display='none'}}})" }, { - "name": "观察者网", + "name": "观察者网评论区", "url": "^https?://www\\.guancha\\.cn/", "example": "https://www.guancha.cn/economy/2023_10_27_713575_2.shtml", - "nextLink": "a.next", + "nextLink": "li>a.next", "pageElement": ".comment-list > ul.list-body.list-body-all > li.comment-item.cmt-item", "include": "#comments-container", - "waitElement": "a.next" + "waitElement": "li>a.next" }, { "name": "威锋", From b0d12647556f851834bc97e10832248851e0d468 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 7 Feb 2024 19:39:19 +0800 Subject: [PATCH 742/812] 1.9.37.30 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 6f19f96c9ea..b047da7337b 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.29](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.30](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 60ae167a936..dd667d9c1ec 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.29 +// @version 1.9.37.30 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1998,7 +1998,8 @@ preOffsetTop = curNode.offsetTop; } } - if (curMaxEle && curHeight / bodyHeight <= 0.18) { + let curHeightPercent = curHeight / bodyHeight; + if (curMaxEle && curHeightPercent <= 0.18) { let article = doc.querySelectorAll(mainSel); if (article && article.length === 1) { article = article[0]; @@ -2009,7 +2010,7 @@ } curMaxEle = null; } - if (curMaxEle) { + if (curMaxEle && (!compareNodeName(curMaxEle, ["ul"]) || curHeightPercent > 0.8)) { let sameClassNum = 0, hasDifferent = false; if (curMaxEle.className) { for(i = 0; i < ele.children.length; i++) { From d1227e6e630ca9a47458679009e217ae9901fd8b Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 8 Feb 2024 12:06:58 +0800 Subject: [PATCH 743/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index cee0190ca28..cbbc4c5f7f4 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.2.4.3 +// @version 2024.2.8.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -12081,6 +12081,7 @@ ImgOps | https://imgops.com/#b#`; exportType:'grid', sidebarPosition: 'bottom',//'top' 'right' 'bottom' 'left' 四个可能值 sidebarSize: 120,//侧栏的高(如果是水平放置)或者宽(如果是垂直放置) + backgroundColor: 'rgba(20,20,20,0.75)', sidebarToggle: true, // 是否显示隐藏按钮 transition:false,//大图片区的动画。 preload:true,//对附近的图片进行预读。 @@ -17616,7 +17617,7 @@ ImgOps | https://imgops.com/#b#`; height: 100%;\ width: 100%;\ background-clip: padding-box;\ - background-color: rgba(20,20,20,0.75);\ + background-color: ' + (prefs.gallery.backgroundColor || 'rgba(20,20,20,0.75)') + ';\ position:relative;\ transition: background-color .3s ease;\ }\ @@ -24025,6 +24026,13 @@ ImgOps | https://imgops.com/#b#`; "default": prefs.gallery.scrollEndToChange, title: i18n("galleryScrollEndToChangeTip") }, + 'gallery.backgroundColor': { + label: i18n("backgroundColor"), + type: 'text', + className: 'color', + "default": prefs.gallery.backgroundColor || 'rgba(20,20,20,0.75)', + line: 'end' + }, 'gallery.exportType': { label: i18n("galleryExportType"), type: 'select', From 09288e2a916ba285dd86ccb1bbdf5fcd0d5dbd90 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 8 Feb 2024 12:47:25 +0800 Subject: [PATCH 744/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index cbbc4c5f7f4..e1603b963f8 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.2.8.1 +// @version 2024.2.8.2 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -18045,7 +18045,7 @@ ImgOps | https://imgops.com/#b#`; }\ .pv-gallery-sidebar-viewmore-bottom{\ display: block;\ - bottom:12px;\ + bottom:15px;\ }\ .pv-gallery-sidebar-viewmore-bottom.showmore{\ background-color: rgb(42, 42, 42);\ @@ -18061,7 +18061,7 @@ ImgOps | https://imgops.com/#b#`; word-wrap:break-word;\ overflow-wrap:break-word;\ line-height:1.1;\ - font-size:12px;\ + font-size:18px;\ text-align:center;\ margin-bottom:8px;\ }\ From 517f84f3e5d10165dcc032ee7070f29ab71d2386 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 9 Feb 2024 01:42:49 +0000 Subject: [PATCH 745/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 32eb969de0d..1448a333a5e 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -27066,16 +27066,16 @@ { "resource_url": "http://wedata.net/items/74789", "data": { - "pageElement": "//div[@itemprop='articleBody']/p[last()]|//div[@itemprop='articleBody']/p[last()]/preceding-sibling::*", - "nextLink": "//link[@rel=\"next\"]", - "url": "https://bizgate\\.nikkei\\.co\\.jp/article/.+", - "exampleUrl": "https://bizgate.nikkei.co.jp/article/DGXMZO5957527026052020000000?channel=DF050420183723" + "pageElement": "//ul[contains(concat(' ', @class, ' '), ' pagination-article ')]/preceding-sibling::*", + "nextLink": "//li[contains(@class, 'current')][number()>0]/following-sibling::li[1]/a", + "url": "^https://bizgate\\.nikkei\\.com/article/.+", + "exampleUrl": "https://bizgate.nikkei.com/article/DGXMZO5957527026052020000000?channel=DF050420183723\r\nhttps://bizgate.nikkei.com/article/DGXZQOLM2752S027112023000000?page=3" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "nkmry", "name": "日経BizGate", "created_at": "2014-04-22T20:37:42+09:00", - "updated_at": "2023-02-05T14:07:30+09:00" + "updated_at": "2024-02-08T18:05:58+09:00" }, { "resource_url": "http://wedata.net/items/74786", From 8d60395012ab256021d2393c7712219b48eef24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D1=82=D0=B0=D0=BD?= Date: Thu, 15 Feb 2024 13:38:58 +0500 Subject: [PATCH 746/812] Update pvcep_lang.js RU loc fixes --- Picviewer CE+/pvcep_lang.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Picviewer CE+/pvcep_lang.js b/Picviewer CE+/pvcep_lang.js index e12c4033659..bfb1fdb0e5c 100644 --- a/Picviewer CE+/pvcep_lang.js +++ b/Picviewer CE+/pvcep_lang.js @@ -1094,7 +1094,7 @@ const langData = [ onlineEdit: "Онлайн-редактирование", onlineEditTip: "Отредактируйте это изображение онлайн с помощью #t#", openInNewWindow: "Открыть в новом окне", - openInNewWindowTip: "Открывает изображение в новом окне", + openInNewWindowTip: "Открыть изображение в новом окне", findInPage: "Перейти к изображению", findInPageTip: "Прокручивает туда, где находится текущее изображение", viewCollection: "Открыть коллекцию", @@ -1113,7 +1113,7 @@ const langData = [ enterFullsc: "Полноэкранный режим", exitFullsc: "Выйти из полноэкранного режима", config: "Параметры", - openConfig: "Открывает параметры", + openConfig: "Открыть параметры", closeGallery: "Закрыть галерею", returnToGallery: "Вернуться в галерею", picInfo: "Нажмите, чтобы изменить", @@ -1225,7 +1225,7 @@ const langData = [ gallerySearchData: "Поиск настроек сайта, очистка и восстановление", galleryEditSite: "Сайт онлайн-редактирования", imgWindow: "Окно изображения", - imgWindowFitToScreen: "Адаптируется под размер экрана и выравнивается", + imgWindowFitToScreen: "Адаптировать под размер экрана", imgWindowFitToScreenTip: "Метод адаптации - contain, а не cover", imgWindowFitToScreenWhenSmall: "Даже маленькие изображения растягиваются по размеру экрана", imgWindowDefaultTool: "Инструмент, выбранный по умолчанию при открытии окна", @@ -1264,7 +1264,7 @@ const langData = [ galleryDownloadGap: "Интервал скачивания", galleryDisableArrow: "Отключить клавиши со стрелками", positionFixed: "Фиксированная позиция", - switchStoreLoc: "Положение памяти при переключении" + switchStoreLoc: "Сохранять позицию в памяти во время переключения" } }, { From de5258ca00b1502e4d00c03e2414e8ed65b12fcc Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 15 Feb 2024 18:27:06 +0800 Subject: [PATCH 747/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 2fd826da4ec..9106472f755 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8106,6 +8106,13 @@ "initRun": 1, "autoLoadNum": 1 }, +{ + "name": "motherless", + "url": "^https://motherless\\.com/.+", + "pageElement": "//div[@class='content-inner']", + "nextLink": "//a[@rel='next']", + "action": 0 +}, { "name": "雅拉伊", "author": "skofkyo", From c1c44f2a43b76a8ef6da487b847c9fb1e89e4828 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 15 Feb 2024 18:41:00 +0800 Subject: [PATCH 748/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 9106472f755..21fb099716a 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8893,7 +8893,7 @@ "name": "linuxfromscratch", "url": "^https://www\\.linuxfromscratch\\.org", "pageElement": "body>*", - "css": ".sect1{overflow-wrap: break-word;}div.navheader{position: relative;}" + "css": "div.sect1{position:static;overflow-wrap: break-word;}div.navheader{position: relative;}" }, { "name": "Standards DOC", From 5b66d6ff65398c7d06a980eea5937e877499f814 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 15 Feb 2024 18:48:02 +0800 Subject: [PATCH 749/812] 1.9.37.31 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index b047da7337b..aff6c273ab3 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.30](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.31](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index dd667d9c1ec..8a7981a99a0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.30 +// @version 1.9.37.31 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -8572,8 +8572,6 @@ } async function nextPage() { - if (typeof ruleParser.curSiteRule.manualMode === 'undefined' ? rulesData.manualMode : ruleParser.curSiteRule.manualMode) return; - if (clickMode) return; if (isPause || isLoading || forceState === 1) return; if (ruleParser.curSiteRule.delay) { try { From 6b35eb38731ce2cf2ce8b06d0c83b837c8dfdf36 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 15 Feb 2024 19:13:14 +0800 Subject: [PATCH 750/812] Update README.md --- Picviewer CE+/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Picviewer CE+/README.md b/Picviewer CE+/README.md index c1367389a37..a74bd395b2f 100644 --- a/Picviewer CE+/README.md +++ b/Picviewer CE+/README.md @@ -92,7 +92,7 @@ Add `imgs=http://xxx/xxx.jpg` to import images. ` ` to split multi-image, `[01-0 For example: `https://hoothin.github.io/UserScripts/Picviewer%20CE+/gallery.html?imgs=http://xxx/xxx[01-99].jpg`
Just easily drag and drop your local images into the gallery to view them. - + Thousands compatible sites for find larger or original images like -- From 5d223a04090ccbdc85101a13af8e65d2152b0f60 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 16 Feb 2024 14:06:12 +0800 Subject: [PATCH 751/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 131 ++++++++++++++++++++---------- 1 file changed, 89 insertions(+), 42 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index ce5401cd0e2..268a8ab27ba 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.73 +// @version 1.7.74 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -251,9 +251,11 @@ inputAction: '输入', clickAction: '点击', sleepAction: '等待', + copyAction: '复制元素', submitCrawl: '完成操作', inputOutput: '在元素#t1#内输入#t2#', clickOutput: '点击元素#t#', + copyOutput: '复制元素#t#', sleepOutput: '休眠#t#毫秒', inputNewValue: '请输入新值', deleteConfirm: '确定要删除此项吗?', @@ -365,9 +367,11 @@ inputAction: '輸入', clickAction: '點擊', sleepAction: '等待', + copyAction: '複製元素', submitCrawl: '完成操作', inputOutput: '在元素#t1#內輸入#t2#', clickOutput: '點擊元素#t#', + copyOutput: '複製元素#t#', sleepOutput: '休眠#t#毫秒', inputNewValue: '請輸入新值', deleteConfirm: '確定要刪除此項嗎? ', @@ -478,9 +482,11 @@ inputAction: '入力', clickAction: 'クリック', sleepAction: '待機', + copyAction: '要素のコピー', submitCrawl: '操作を完了', inputOutput: '要素 #t1# 内に #t2# を入力します', clickOutput: 'クリック要素#t#', + copyOutput: 'コピー要素#t#', sleepOutput: 'スリープ#t# ミリ秒', inputNewValue: '新しい値を入力してください', deleteconfirm: 'この項目を削除してもよろしいですか? ', @@ -591,9 +597,11 @@ inputAction: 'Input', clickAction: 'Click', sleepAction: 'Wait', + copyAction: 'Copy element', submitCrawl: 'Complete operation', inputOutput: 'Input #t2# in the element #t1#', clickOutput: 'Click on element #t#', + copyOutput: 'Copy element #t#', sleepOutput: 'Sleep for #t# milliseconds', inputNewValue: 'Please enter a new value', deleteConfirm: 'Are you sure you want to delete this item? ', @@ -8247,7 +8255,11 @@ return; } let form, input, clicked = false, self = this, inLoop = false, loopTimes = 0, loopArr = []; - let opened = false; + let opened = false, copyList = []; + let copyStore = await storage.getItem("copyStore"); + if (copyStore) { + copyList = JSON.parse(copyStore); + } let singleAction = async (param, eleIndex) => { let result = true; @@ -8262,6 +8274,14 @@ clicked = true; let _r = await emuClick(param[0].substr(1), eleIndex); if (!_r) result = false; + } else if (param[0] === '@copy') { + let _r = await returnElement(param[1], eleIndex); + if (_r && _r !== true) { + copyList.push(_r.innerText); + if (!reachLast) { + result = false; + } + } } else if (param[0] === '@call') { let func = window[param[1]] || new AsyncFunction('"use strict";' + param[1]); if (func) await func(); @@ -8328,7 +8348,14 @@ } if (inPagePostParams) { inPagePostParams.shift(); - storage.setListItem("inPagePostParams", location.hostname, inPagePostParams && inPagePostParams.length ? inPagePostParams : ""); + if (inPagePostParams && inPagePostParams.length) { + storage.setListItem("inPagePostParams", location.hostname, inPagePostParams); + storage.setItem("copyStore", JSON.stringify(copyList)); + } else { + _GM_setClipboard(copyList.join("\n")); + storage.setListItem("inPagePostParams", location.hostname, ""); + storage.setItem("copyStore", ""); + } if (param[0] === '@reload') { location.reload(!!param[1]); return; @@ -8957,6 +8984,11 @@ if (click) { postParams.push(['@click', click.replace(/\\([\=&])/g, "$1").trim()]); } + } else if (pair.startsWith("copy(") && pair.endsWith(')')) { + let copy = pair.slice(5, pair.length - 1); + if (copy) { + postParams.push(['@copy', copy.replace(/\\([\=&])/g, "$1").trim()]); + } } else if (pair.startsWith("call(") && pair.endsWith(')')) { let func = pair.slice(5, pair.length - 1); if (func) { @@ -10916,9 +10948,9 @@ }); } + let reachLast = false; function startInput(input, v) { if (!input) return true; - let result = false; targetElement = input; let event = new Event('focus', { bubbles: true }); input.dispatchEvent(event); @@ -10959,11 +10991,11 @@ event = new Event('change', { bubbles: true }); input.dispatchEvent(event); debug(input, `input`); - return result; } - async function emuInput(sel, v, eleIndex = -1) { - let input, result = false; + async function returnElement(sel, eleIndex = -1) { + reachLast = false; + let ele; if (eleIndex >= 0) { if (eleIndex === 0) await waitForElement(sel); let eles = getAllElements(sel); @@ -10971,46 +11003,33 @@ return true; } if (eles.length === 1) { - input = eles[0]; - result = true; + ele = eles[0]; + reachLast = true; } else if (eles.length <= eleIndex) { return true; } else { - input = eles[eleIndex]; + ele = eles[eleIndex]; if (eles.length === eleIndex + 1) { - result = true; + reachLast = true; } } } else { - input = await waitForElement(sel); - if (!input) return true; + ele = await waitForElement(sel); + if (!ele) return true; } - return startInput(input, v); + return ele; + } + + async function emuInput(sel, v, eleIndex = -1) { + let input = await returnElement(sel, eleIndex); + if (input === true) return true; + startInput(input, v); + return reachLast; } async function emuClick(sel, eleIndex = -1) { - let btn, result = false; - if (eleIndex >= 0) { - if (eleIndex === 0) await waitForElement(sel); - let btns = getAllElements(sel); - if (btns.length === 0) { - return true; - } - if (btns.length === 1) { - btn = btns[0]; - result = true; - } else if (btns.length <= eleIndex) { - return true; - } else { - btn = btns[eleIndex]; - if (btns.length === eleIndex + 1) { - result = true; - } - } - } else { - btn = await waitForElement(sel); - if (!btn) return true; - } + let btn = await returnElement(sel, eleIndex); + if (btn === true) return true; targetElement = btn; if(!PointerEvent) return btn.click(); let eventParam = { @@ -11099,7 +11118,7 @@ dispatchTouchEvent(btn, "touchend"); btn.click(); debug(btn, `click ${sel}`); - return result; + return reachLast; } function submitByForm(charset, url, target) { @@ -13662,6 +13681,7 @@ } .searchJumperFrame-buttons>button#submitCrawl, .searchJumperFrame-buttons>button#record, + .searchJumperFrame-buttons>button#copy, .searchJumperFrame-buttons>button#loop { width: 100%; margin: 0 3px; @@ -13790,15 +13810,18 @@ Close crawl${closePath}
- + + +
- +
- - - + +
+
+
@@ -13884,6 +13907,11 @@ if (click) { postParams.push(['@click', click.replace(/\\([\=&])/g, "$1").trim()]); } + } else if (pair.startsWith("copy(") && pair.endsWith(')')) { + let copy = pair.slice(5, pair.length - 1); + if (copy) { + postParams.push(['@copy', copy.replace(/\\([\=&])/g, "$1").trim()]); + } } else if (pair.startsWith("call(") && pair.endsWith(')')) { let func = pair.slice(5, pair.length - 1); if (func) { @@ -14004,6 +14032,7 @@ let inputAction = addFrame.querySelector("#input"); let clickAction = addFrame.querySelector("#click"); let sleepAction = addFrame.querySelector("#sleep"); + let copyAction = addFrame.querySelector("#copy"); let submitCrawl = addFrame.querySelector("#submitCrawl"); let recordBtn = addFrame.querySelector("#record"); let loopBtn = addFrame.querySelector("#loop"); @@ -14018,6 +14047,9 @@ case "click": words = i18n('clickOutput', sel); break; + case "copy": + words = i18n('copyOutput', sel); + break; case "loopStart": words = i18n('loopStart', val); break; @@ -14108,6 +14140,11 @@ if (click) { addAction('click', click.replace(/\\([\=&])/g, "$1").trim()); } + } else if (pair.startsWith("copy(") && pair.endsWith(')')) { + let copy = pair.slice(5, pair.length - 1); + if (copy) { + addAction('copy', copy.replace(/\\([\=&])/g, "$1").trim()); + } } else if (pair.startsWith("call(") && pair.endsWith(')')) { let func = pair.slice(5, pair.length - 1); if (func) { @@ -14152,6 +14189,9 @@ case "click": actions.push(`click(${sel.replace(/([=&])/g, '\\$1')})`); break; + case "copy": + actions.push(`copy(${sel.replace(/([=&])/g, '\\$1')})`); + break; case "input": actions.push(`${sel.replace(/([=&])/g, '\\$1')}=${val}`); break; @@ -14234,6 +14274,13 @@ }, !inLoop); addFrame.style.display = 'none'; }); + copyAction.addEventListener("click", e => { + picker.getSelector(selector => { + addAction('copy', selector, '%s'); + addFrame.style.display = ''; + }, !inLoop); + addFrame.style.display = 'none'; + }); clickAction.addEventListener("click", e => { picker.getSelector(selector => { addAction('click', selector); From 60ca3b4bfb336fc69892f42f90577586d80e55d2 Mon Sep 17 00:00:00 2001 From: qixing-jk Date: Sun, 18 Feb 2024 18:18:38 +0800 Subject: [PATCH 752/812] Update pagetualRules.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加对于 Qi Xing Blog( https://blog.qixing1217.top/ )的支持 --- Pagetual/pagetualRules.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 21fb099716a..d62030e7cba 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -1,4 +1,12 @@ [ +{ + "name": "Qi Xing Blog | 一个互联网角落的秘密基地~🥳", + "author": "qi_xing_jk", + "url": "^https?://blog\\.qixing1217\\.top/", + "example": "https://blog.qixing1217.top/", + "pageElement": "#container", + "nextLink": "id(\"container\")/div[2]/a[@rel=\"next\"]/div" +}, { "name": "Podium Audio", "author": "uwuceo with help from Hoothin", From ee473619980122a04e56c8f579476773d6189376 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 20 Feb 2024 10:24:12 +0800 Subject: [PATCH 753/812] 1.7.75 --- SearchJumper/searchJumper.user.js | 157 +++++++++++++++++++++++++----- 1 file changed, 131 insertions(+), 26 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 268a8ab27ba..3f88dedef84 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.74 +// @version 1.7.75 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -251,8 +251,8 @@ inputAction: '输入', clickAction: '点击', sleepAction: '等待', - copyAction: '复制元素', - submitCrawl: '完成操作', + copyAction: '📄复制元素', + submitCrawl: '☑️完成操作', inputOutput: '在元素#t1#内输入#t2#', clickOutput: '点击元素#t#', copyOutput: '复制元素#t#', @@ -271,10 +271,10 @@ Friday: '星期五 (金)', Saturday: '星期六 (土)', template: '请设置【#t#】的值', - recordAction: '录制操作', + recordAction: '⏺️录制操作', startRecord: '开始录制操作,按回车键结束录制', - loopAction: '开始循环', - loopActionEnd: '循环结束', + loopAction: '🔁开始循环', + loopActionEnd: '⏹️循环结束', loopStart: '开始循环,循环次数为#t#', loopEnd: '结束循环', loopTimes: '循环次数,将遍历所有匹配元素并顺序执行', @@ -367,8 +367,8 @@ inputAction: '輸入', clickAction: '點擊', sleepAction: '等待', - copyAction: '複製元素', - submitCrawl: '完成操作', + copyAction: '📄複製元素', + submitCrawl: '☑️完成操作', inputOutput: '在元素#t1#內輸入#t2#', clickOutput: '點擊元素#t#', copyOutput: '複製元素#t#', @@ -387,10 +387,10 @@ Friday: '星期五 (金)', Saturday: '星期六 (土)', template: '請設置【#t#】的值', - recordAction: '錄製動作', + recordAction: '⏺️錄製動作', startRecord: '開始錄製操作,按下回車鍵結束錄製', - loopAction: '開始循環', - loopActionEnd: '循環結束', + loopAction: '🔁開始循環', + loopActionEnd: '⏹️循環結束', loopStart: '開始循環,循環次數為#t#', loopEnd: '結束循環', loopTimes: '循環次數,將遍歷所有匹配元素並順序執行', @@ -482,8 +482,8 @@ inputAction: '入力', clickAction: 'クリック', sleepAction: '待機', - copyAction: '要素のコピー', - submitCrawl: '操作を完了', + copyAction: '📄要素のコピー', + submitCrawl: '☑️操作を完了', inputOutput: '要素 #t1# 内に #t2# を入力します', clickOutput: 'クリック要素#t#', copyOutput: 'コピー要素#t#', @@ -502,10 +502,10 @@ Friday: '金曜日', Saturday: '土曜日', template: '[#t#]の値を設定してください', - RecordAction: '記録操作', + recordAction: '⏺️記録操作', startRecord: '記録操作を開始します。記録を終了するには Enter キーを押してください', - loopAction: 'ループの開始', - loopActionEnd: 'ループの終了', + loopAction: '🔁ループの開始', + loopActionEnd: '⏹️ループの終了', loopStart: 'ループを開始。ループ数は #t# です', loopEnd: 'ループの終了', loopTimes: 'ループの数。一致するすべての要素が走査され、順番に実行されます', @@ -597,8 +597,8 @@ inputAction: 'Input', clickAction: 'Click', sleepAction: 'Wait', - copyAction: 'Copy element', - submitCrawl: 'Complete operation', + copyAction: '📄Copy element', + submitCrawl: '☑️Complete operation', inputOutput: 'Input #t2# in the element #t1#', clickOutput: 'Click on element #t#', copyOutput: 'Copy element #t#', @@ -610,10 +610,10 @@ cacheOver: 'All icons cached!', cspDisabled: 'The style of SearchJumper is blocked by the CSP of current site, please try to install the Allow CSP: Content-Security-Policy extension to obtain permission', template: 'Please set the value of "#t#"', - recordAction: 'Record operation', + recordAction: '⏺️Record operation', startRecord: 'Start to record operation, press Enter to end', - loopAction: 'Start loop', - loopActionEnd: 'Stop loop', + loopAction: '🔁Start loop', + loopActionEnd: '⏹️Stop loop', loopStart: 'Start loop #t# times', loopEnd: 'Stop loop', loopTimes: 'Number of loops, all matching elements will be traversed and executed sequentially', @@ -3680,6 +3680,34 @@ this.focusHighlightByText(word.showWords, false, wordSpan); } }); + let wheelScrolling = false; + wordSpan.addEventListener(getSupportWheelEventName(), e => { + e.preventDefault(); + e.stopPropagation(); + if (wheelScrolling) return; + wheelScrolling = true; + setTimeout(() => { + wheelScrolling = false; + }, 100); + let deltaY; + if(e.type !== 'wheel'){ + let y = 0; + if (typeof e.axis == 'number') { + if (e.axis == 2) { + y = e.detail; + } + } else { + if (typeof e.wheelDeltaY == 'undefined' || e.wheelDeltaY != 0) { + y = -e.wheelDelta / 40; + } + }; + deltaY = y; + + } else { + deltaY = e.deltaY; + } + this.focusHighlightByText(word.showWords, deltaY > 0, wordSpan); + }, { passive: false, capture: false }); wordSpan.addEventListener("editword", e => { wordSpan.parentNode.removeChild(wordSpan); this.removeHighlightWord(word); @@ -8007,6 +8035,25 @@ ele.classList.add("not-expand"); ele.appendChild(self.searchJumperExpand); } + let shownIconNum = -1, waitIconList = []; + if (document.readyState !== 'complete') { + shownIconNum = 3; + let loadHandler = e => { + if (document.readyState === "complete") { + document.removeEventListener("readystatechange", loadHandler); + window.removeEventListener('load', loadHandler); + waitIconList.forEach(icon => { + if (icon && !icon.src && icon.dataset.src) { + icon.src = icon.dataset.src; + delete icon.dataset.src; + } + }); + waitIconList = []; + } + }; + document.addEventListener("readystatechange", loadHandler); + window.addEventListener('load', loadHandler); + } siteEles.forEach((se, i) => { let si = se.querySelector("img"); let data = sites[i]; @@ -8022,6 +8069,14 @@ } } if (se.style.display != 'none' && si && !si.src && si.dataset.src) { + if (shownIconNum >= 0) { + if (shownIconNum !== 0) { + shownIconNum--; + } else { + waitIconList.push(si); + return; + } + } si.src = si.dataset.src; } }); @@ -8796,11 +8851,12 @@ } ele.dataset.url = tempUrl.replace(/%e\b/g, document.characterSet).replace(/%c\b/g, (isMobile?"mobile":"pc")).replace(/%h\b/g, host); } - let targetUrl = ''; + let targetUrl = '', targetLink = ''; let targetName = inputString || document.title; let imgBase64 = '', resultUrl = customVariable(ele.dataset.url); if (targetElement && targetElement.nodeName) { targetUrl = targetElement.href || (targetElement.parentNode && targetElement.parentNode.href) || ''; + targetLink = targetUrl || (targetElement.parentNode && targetElement.parentNode.parentNode && targetElement.parentNode.parentNode.href) || ''; if ((typeData.selectImg || typeData.selectAudio || typeData.selectVideo) && targetElement.src) { targetUrl = targetElement.src; } @@ -8967,8 +9023,8 @@ } } } - if (targetUrl && !/%t\b/i.test(ele.dataset.url)) { - href = targetUrl; + if ((targetLink || targetUrl) && !/%t\b/i.test(ele.dataset.url)) { + href = targetLink || targetUrl; } if (inPagePost) { let postParams = []; @@ -10262,6 +10318,8 @@ this.signList = [];//所有标记 this.clickedEles = {};//点击的元素 this.exact = true; + this.accu = 0; + this.wheelScrolling = false; } /*static getInstance() { @@ -10415,6 +10473,39 @@ e && e.preventDefault && e.preventDefault(); } }; + this.wheelHandler = e => { + e.preventDefault(); + e.stopPropagation(); + if (self.wheelScrolling) return; + self.wheelScrolling = true; + setTimeout(() => { + self.wheelScrolling = false; + }, 100); + let deltaY; + if(e.type !== 'wheel'){ + let y = 0; + if (typeof e.axis == 'number') { + if (e.axis == 2) { + y = e.detail; + } + } else { + if (typeof e.wheelDeltaY == 'undefined' || e.wheelDeltaY != 0) { + y = -e.wheelDelta / 40; + } + }; + deltaY = y; + + } else { + deltaY = e.deltaY; + } + if (deltaY > 0) self.accu--; + else self.accu++; + if (self.accu < 0) self.accu = 0; + else if (self.accu > 8) self.accu = 8; + let target = self.getTarget(e.target); + if (self.mainSignDiv.parentNode !== target.parentNode) target.parentNode.appendChild(self.mainSignDiv); + self.adjustSignDiv(self.mainSignDiv, target); + }; } initSelectRect() { @@ -10609,6 +10700,13 @@ } getTarget(ele) { + let accu = this.accu; + while (ele && accu) { + let parentNode = ele.parentNode; + if (!parentNode) break; + ele = parentNode; + accu--; + } while (ele.parentNode && (ele.offsetWidth === 0 || ele.offsetHeight === 0)) { ele = ele.parentNode; } @@ -10636,6 +10734,7 @@ getBody(document).removeEventListener("click", this.clickHandler, true); getBody(document).removeEventListener("mousedown", this.mouseDownHandler, true); getBody(document).removeEventListener("mouseup", this.mouseUpHandler, true); + getBody(document).removeEventListener(getSupportWheelEventName(), this.wheelHandler, { passive: false, capture: true }); this.inPicker = false; } @@ -10895,7 +10994,10 @@ this.domInfo = this.processNode(getBody(document), {children: []}); getBody(document).addEventListener("mousedown", this.mouseDownHandler, true); getBody(document).addEventListener("mouseup", this.mouseUpHandler, true); + } else { + getBody(document).addEventListener(getSupportWheelEventName(), this.wheelHandler, { passive: false, capture: true }); } + this.accu = 0; this.inPicker = true; getBody(document).classList.add("searchJumper-picker"); @@ -11311,7 +11413,8 @@ } function getSelectStr() { - let selStr = picker.getPickerStr() || window.getSelection().toString(); + let selStr = extSelectionText || picker.getPickerStr() || window.getSelection().toString(); + extSelectionText = ""; if (!selStr) { let tar = getActiveElement(document); if (tar && /^(TEXTAREA|INPUT)$/i.test(tar.nodeName)) { @@ -11437,6 +11540,7 @@ } let draging = false; + let extSelectionText = ""; function initListener() { _GM_registerMenuCommand(i18n('settings'), () => { _GM_openInTab(configPage, {active: true}); @@ -11465,6 +11569,7 @@ }); if (ext) { chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { + if (request.selectionText) extSelectionText = request.selectionText; switch (request.command) { case "settings": _GM_openInTab(configPage, {active: true}); @@ -14885,7 +14990,6 @@ if (cb) cb(); } defaultTitle = document.title; - document.addEventListener('visibilitychange', visibilitychangeHandler); } function checkVisibility() { @@ -14963,6 +15067,7 @@ }; checkReady(); } + document.addEventListener('visibilitychange', visibilitychangeHandler); } }); } From 10f6fda78406d0449199a66ec977bc12f486e858 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 20 Feb 2024 16:00:07 +0800 Subject: [PATCH 754/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 3f88dedef84..c2fa1f63932 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.75 +// @version 1.7.76 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -8069,7 +8069,7 @@ } } if (se.style.display != 'none' && si && !si.src && si.dataset.src) { - if (shownIconNum >= 0) { + if (shownIconNum >= 0 && !/^data/.test(si.dataset.src)) { if (shownIconNum !== 0) { shownIconNum--; } else { @@ -8078,6 +8078,7 @@ } } si.src = si.dataset.src; + delete si.dataset.src; } }); } From 1f81938ca71b403bf050985a1a9fa7dd1dae410b Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 23 Feb 2024 11:44:37 +0800 Subject: [PATCH 755/812] Update README.md --- DownloadAllContent/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 5578288a7f9..79323e6aaf6 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -214,6 +214,11 @@ function decode(t) { ``` javascript .list-group-item>div>a.text-decoration-none@@@@@@next:{[aria-label='后一页']+a} ``` ++ [📕又一個頂點小説網](https://www.booktxts.com/book/77/77540/2.html) +> 首先遍歷目錄,生成實際鏈接,再分析頁内代碼,調用網站自身的解密函數解密内容,最後分析下一頁鏈接,把分頁内容補上。 +``` javascript +.yanqing_list>li>a>>item.href=item.getAttribute('onclick').replace(/.*\((.*)\)/, location.href.replace(/\d+\.html/,'').replace('/book/','/books/')+'$1.html');return item;@@@@@@let content='';let anylize=doc=>{let contentTags=doc.body.innerHTML.match(/",'')).replace(/<.?p>/g,'')+'\n'}); let nextLink=doc.querySelector('.read_btn>a:last-child'); if(/\_\d+\.html/.test(nextLink.href)){ let fetchNext=()=>{return fetch(nextLink.href).then(res => res.text()).then(d=>{let _doc = document.implementation.createHTMLDocument(''); _doc.documentElement.innerHTML = d;anylize(_doc);})}; fetchNext().catch(e=>{fetchNext()}); }else{cb(content);} };let script=document.createElement('script');script.src='https://www.booktxts.com/yanqing/pc/js/yueduqsbs.js';script.type = "text/javascript";document.body.appendChild(script);script.onload=e=>{anylize(doc);};return false; +``` ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html From de621ed27e6503f4fc2b9c15f05bb1ca26c28304 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 23 Feb 2024 12:54:25 +0800 Subject: [PATCH 756/812] Update DownloadAllContent.user.js --- DownloadAllContent/DownloadAllContent.user.js | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 90bd0e14ce8..4f64692cb00 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 怠惰小説下載器 // @name:ja 怠惰者小説ダウンロードツール // @namespace hoothin -// @version 2.8.3.4 +// @version 2.8.3.5 // @description Lightweight web scraping script. Fetch and download main textual content from the current page, provide special support for novels // @description:zh-CN 通用网站内容爬虫抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 // @description:zh-TW 通用網站內容爬蟲抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 @@ -749,17 +749,59 @@ if (window.top != window.self) { let shadow = shadowContainer.attachShadow({ mode: "open" }); shadow.appendChild(txtDownContent); txtDownContent.innerHTML=createHTML(` -
-
+ +
+
Analysing......
-
- +
+
-
- - - +
+ + +
`); txtDownWords=txtDownContent.querySelector("#txtDownWords"); From a51253eeef1b3615d6b83977c700f0e0dfa14ac4 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 23 Feb 2024 13:03:19 +0800 Subject: [PATCH 757/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index c2fa1f63932..9647441abbc 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -11930,9 +11930,7 @@ } if (searchBar.bar.classList.contains("grabbing")) return; let targetInput = false; - if (e.target.nodeName.toUpperCase() == 'INPUT' || - e.target.nodeName.toUpperCase() == 'TEXTAREA' || - e.target.contentEditable == 'true') { + if (inputActive(document)) { targetInput = true; } else { let contentEditable = false; From 74079dbbed104e8b963d499a6a16da2ce773feb6 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 25 Feb 2024 01:50:33 +0000 Subject: [PATCH 758/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 1448a333a5e..e56e35bf4c3 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -53961,17 +53961,17 @@ }, { "resource_url": "http://wedata.net/items/414", - "name": "All About 新着記事一覧", - "created_by": "swdyh", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-01-17T10:18:19+09:00", "data": { - "exampleUrl": "https://allabout.co.jp/gm/latest/1732/", + "pageElement": "//main/section[contains(@data-tracking-zone, 'mainContents')]|\r\n//ul[contains(concat(' ', @class, ' '), ' aa_media-list ')]", + "nextLink": "//a[.='次のページへ']", "url": "^https?://allabout\\.co\\.jp/", - "pageElement": "id('popin_read')/div/ul/*", - "nextLink": "//a[.='次のページへ']" + "exampleUrl": "https://allabout.co.jp/gm/latest/1732/\r\nhttps://allabout.co.jp/r_hobby/latest/" }, - "created_at": "2008-04-16T12:35:21+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "swdyh", + "name": "All About 新着記事一覧", + "created_at": "2008-04-16T12:35:21+09:00", + "updated_at": "2024-02-24T18:13:35+09:00" }, { "resource_url": "http://wedata.net/items/412", From c57881a8b48f2e65271c777973bce12b16309deb Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 25 Feb 2024 16:56:50 +0800 Subject: [PATCH 759/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index d0cd23d1e1f..e841ac8cae5 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.7.1 +// @version 0.7.2 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -153,9 +153,7 @@ var $tLike = $(".t_like"); if ($tLike.length) { var $tLikeClone = $tLike.clone(); - if (!$tLike.isInViewport()) { - $("#conttpc").prepend($tLikeClone); - } + $("#conttpc").prepend($tLikeClone); $(window).on("resize scroll", function() { if ($tLike.isInViewport()) { From 89e7be48bdb280c1caffab43c95fbcb0c4177ebb Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 25 Feb 2024 17:38:19 +0800 Subject: [PATCH 760/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 8a7981a99a0..fa9a16dde60 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -6237,7 +6237,7 @@ if (rulesData.lang) { setLang(rulesData.lang); } - if (rulesData.firstRun && rulesData.uninited) { + if (rulesData.firstRun) { rulesData.firstRun = false; storage.setItem("rulesData", rulesData); setTimeout(() => { @@ -6246,7 +6246,7 @@ _GM_openInTab(firstRunPage, {active: true}); } }); - }, 500); + }, 100); } _GM_registerMenuCommand(i18n("configure"), () => { _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); From b43e926df7ca3ec2158547857acd2180bf5ad421 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 25 Feb 2024 17:46:02 +0800 Subject: [PATCH 761/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9647441abbc..4b90688dfce 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.76 +// @version 1.7.77 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -9776,7 +9776,7 @@ let thenEleSel = thenEleSelArr.shift(); let thenUrl = await fetchData.then(r => { let doc = document.implementation.createHTMLDocument(''); - doc.documentElement.innerHTML = r; + doc.documentElement.innerHTML = createHTML(r); let ele = getElement(thenEleSel, doc); if (!ele) return null; let basepath = doc.querySelector("base"); @@ -9803,7 +9803,7 @@ let thenEleSel = thenEleSelArr.shift(); let thenUrl = await fetchData.then(r => { let doc = document.implementation.createHTMLDocument(''); - doc.documentElement.innerHTML = r; + doc.documentElement.innerHTML = createHTML(r); let ele = getElement(thenEleSel, doc); if (!ele) return null; let basepath = doc.querySelector("base"); @@ -9819,7 +9819,7 @@ } tipsResult = await fetchData.then(r => { let doc = document.implementation.createHTMLDocument(''); - doc.documentElement.innerHTML = r; + doc.documentElement.innerHTML = createHTML(r); let finalData = data; while (template) { let value = ""; @@ -14801,9 +14801,15 @@ } setLang(); if (searchData.prefConfig.firstRun) { - _GM_openInTab(firstRunPage, {active: true}); searchData.prefConfig.firstRun = false; storage.setItem("searchData", searchData); + setTimeout(() => { + storage.getItem("searchData", data => { + if (data.prefConfig.firstRun === false) { + _GM_openInTab(firstRunPage, {active: true}); + } + }); + }, 100); } //旧版兼容 if (typeof searchData.prefConfig.customSize === "undefined") { From 813037cb26e2d42c1665af3a4d9f5ba5d4cb4693 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 26 Feb 2024 10:40:43 +0800 Subject: [PATCH 762/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index fa9a16dde60..7c34a7164ba 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.31 +// @version 1.9.37.32 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -909,7 +909,7 @@ const guidePage = /^https?:\/\/.*pagetual.*rule\.html/i; const ruleImportUrlReg = /greasyfork\.org\/.*scripts\/438684(\-[^\/]*)?(\/discussions|\/?$|\/feedback)|github\.com\/hoothin\/UserScripts\/(tree\/master\/Pagetual|issues)/i; const allOfBody = "body>*"; - const mainSel = "article,.article,[role=main],main,.main,#main"; + const mainSel = ["article,.article","[role=main],main,.main,#main","#results"]; const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434", "i"); const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u007c\u00bb\u007c\u003e\u003e\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-isrc", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; @@ -2000,7 +2000,11 @@ } let curHeightPercent = curHeight / bodyHeight; if (curMaxEle && curHeightPercent <= 0.18) { - let article = doc.querySelectorAll(mainSel); + let article; + for (let i = 0; i < mainSel.length; i++) { + article = doc.querySelectorAll(mainSel[i]); + if (article && article.length === 1) break; + } if (article && article.length === 1) { article = article[0]; let childrenEnd = self.checkTargetChildren(article, curWin, articleNum, curHeight); @@ -2062,7 +2066,11 @@ } pageElement = checkElement(body); if (pageElement && pageElement.length > 0 && self.initNext) { - let lastBottom = getElementBottom(pageElement[pageElement.length - 1]); + let posEle = pageElement[pageElement.length - 1]; + while (posEle && !posEle.offsetParent) { + posEle = posEle.previousElementSibling || posEle.parentNode; + } + let lastBottom = posEle && getElementBottom(posEle); if (lastBottom && getElementTop(self.initNext) - lastBottom > 1000) { debug("Stop as too long between next & page element"); isPause = true; @@ -6544,7 +6552,11 @@ return callback(false); } if (inCors && (!pageElement || pageElement.length == 0) && ruleParser.curSiteRule.smart) { - let article = doc.querySelectorAll(mainSel); + let article; + for (let i = 0; i < mainSel.length; i++) { + article = doc.querySelectorAll(mainSel[i]); + if (article && article.length === 1) break; + } if (article && article.length == 1) { article = article[0]; ruleParser.curSiteRule.pageElement = article.nodeName.toLowerCase() + (article.id ? "#" + article.id : "") + (article.className ? "." + article.className.replace(/ /g, ".") : "") + ">*"; From 22e3534ede0b48fe090903c1326a8e36aa85e5b9 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 26 Feb 2024 10:41:06 +0800 Subject: [PATCH 763/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index aff6c273ab3..73364ac6192 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.31](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.32](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From 981d047529e5c56a73096cdf98b3c2443eec3e49 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 26 Feb 2024 11:05:06 +0800 Subject: [PATCH 764/812] Update pvcep_lang.js --- Picviewer CE+/pvcep_lang.js | 253 ++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) diff --git a/Picviewer CE+/pvcep_lang.js b/Picviewer CE+/pvcep_lang.js index bfb1fdb0e5c..0c2790b0e05 100644 --- a/Picviewer CE+/pvcep_lang.js +++ b/Picviewer CE+/pvcep_lang.js @@ -1521,6 +1521,259 @@ const langData = [ switchStoreLoc: "Anahtarlama sırasında hafıza konumu" } }, +{ + name: "日本語", + match: ["ja","ja-JP"], + lang: { + saveBtn: "保存", + saveName: "保存名", + saveNameTip: "画像を名前で保存", + default: "初期設定", + textFirst: "情報が存在する場合、先に表示", + onlyUrl: "URLのみ", + urlAndText: "URL + 情報", + download: "ダウンロード", + saveBtnTips: "一部のオプションは、ページを更新しないと有効になりません", + additionalFeature: "追加機能 (Alt キーを押すと有効)", + invertAdditionalFeature: "ショートカットキーを反転 (既定で追加機能を使用)", + copy: "リンクをコピー", + copyImg: "画像データをコピー", + openInNewTab: "新しいタブで開く", + closeBtn: "キャンセル", + invertBtn: "反転", + compareBtn: "比較", + selectAllBtn: "全て選択", + closeBtnTips: "設定をキャンセルし、すべてのオプションを復元します", + resetLink: "初期設定に戻す", + resetLinkTips: "すべての設定を初期値に戻します", + share: "共有", + suitLongImg: "長い画像をスクロールウィンドウに合わせる", + globalkeys: "プレビューのためのグローバルキー: ", + globalkeysPress: "押すとプレビューを切り替えます", + globalkeysHold: "プレビューを有効にするには、押し続けます", + globalkeysType: "プレビューを有効にする方法", + closeAfterPreview: "プレビュー後、画像ウィンドウを閉じる", + loadAll: "さらに読み込む", + loadedAll: "読み込み完了", + loading: "読み込み中...", + loadAllTip: "次のページの画像を読み込みます", + viewmoreEndless: "スクロールバーの最下部までスクロールすると、さらに多くの画像が読み込まれます", + fiddle: "操作", + fiddleTip: "複雑な操作を行うための画像ポップアップ", + addImageUrls: "画像を追加", + addImageUrlsTips: "URL からさらに多くの画像を追加", + openImages: "ローカル画像", + openImagesTips: "ローカル画像をインポートするには、クリックしてください", + closeFirst: "最初に既存のギャラリーを閉じます", + collect: "コレクション", + collected: "コレクションに追加済み", + exitCollection: "コレクションを終了", + exitCollectionTip: "コレクションモードを終了するには、クリックしてください", + noCollectionYet: "コレクション内に画像はありません", + collectDetail: "説明", + collectDetailTip: "お気に入りの画像に説明を追加します", + playSlide: "スライドショーを再生", + slideGap: "間隔 (秒)", + slideGapTip: "間隔 (単位: 秒)", + slideBack: "戻る", + slideBackTip: "前から後ろに再生", + slideWait: "画像読み込みを待つ", + slideWaitTip: "各画像が完全に読み込まれると、カウントダウンが始まります", + slideSkipError: "エラー画像をスキップ", + slideSkipErrorTip: "エラー画像を読み込むために、すぐにスキップします", + type: "カテゴリ", + typeTip: "画像カテゴリを選択", + showWithRules: "ルールでアイコンを強制的に表示", + showWithRulesTip: "画像のサイズに関係なく、ルールに一致する場合はアイコンを表示します", + advancedRules: "高度なルール", + advancedRulesTip: "高度なルールに一致", + tpRules: "ワイルドカードルール", + tpRulesTip: "ワイルドカードルールに一致", + scaleRules: "拡大", + scaleRulesTip: "自動的に検出され、拡大された画像", + noScaleRules: "拡大なし", + noScaleRulesTip: "自動的に検出されたが、拡大されていない画像", + smallRules: "小さなサイズ", + smallRulesTip: "サイズの小さい画像 (高さ x 幅の実寸が #t# ピクセル未満)", + lockSizeTip: "最大サイズをロック", + command: "コマンド", + commandTip: "コマンドメニュー", + onlineEdit: "オンライン編集", + onlineEditTip: "#t# を使用してこの画像をオンラインで編集", + openInNewWindow: "新しいウィンドウで開く", + openInNewWindowTip: "画像を新しいウィンドウで開く", + findInPage: "ページ内を検索", + findInPageTip: "ページ内の現在の画像にスクロール", + viewCollection: "コレクションを見る", + viewCollectionTip: "収集したすべての画像を見る", + inCollection: "コレクションモードでは使用できません", + cantFind: "画像は文書内に存在しないか、非表示で位置が特定できません!", + exportImages: "すべての画像をエクスポート", + exportImagesTip: "表示されているすべての高画質画像を新しいウィンドウにエクスポート", + downloadImage: "すべてダウンロード", + downloadImageTip: "現在表示されているすべての画像をダウンロード", + copyImagesUrl: "すべての画像 URL をコピー", + copyImagesUrlTip: "表示されているすべての高画質画像の URL をコピー", + copySuccess: "#t# 個の URL をコピーしました", + autoRefresh: "自動でページをロード", + autoRefreshTip: "最後の数枚の画像が表示されたら、ウィンドウを下までスクロールして、新しい画像を読み込むようにウェブページに指示します", + enterFullsc: "フルスクリーン表示", + exitFullsc: "フルスクリーンを閉じる", + config: "設定", + openConfig: "設定を開く", + closeGallery: "ギャラリーを閉じる", + returnToGallery: "ギャラリーに戻る", + picInfo: "クリックして変更", + picNote: "画像注釈", + urlFilter: "URL フィルター", + urlFilterTip: "キーワードまたは正規表現を入力して URL をフィルタリング", + resolution: "画像解像度", + picNum: "画像数", + picTips: "CTRL キーを押しながら画像を表示", + savePageTips: "このページを保存してすべての画像をダウンロード", + scaleRatio: "スケール比率", + similarImage: "画像検索", + scale: "ズーム", + horizontalFlip: "水平方向に反転", + verticalFlip: "垂直方向に反転", + actualBtn: "オリジナル表示 (A)", + searchBtn: "オリジナル画像を探す (S)", + galleryBtn: "ギャラリー表示 (G)", + currentBtn: "現在表示 (C)", + magnifierBtn: "拡大鏡 / ズーム (M)", + picTitle: "画像タイトル", + exportImagesUrl: "画像 URL エクスポート", + exportImagesUrlPop: "Ctrl+C で画像 URL をコピー", + beginSearchImg: "#t# 画像検索開始...", + findNoPic: "オリジナル画像が見つかりません", + findOverBeginLoad: "#t# マップの終わり、#t# 個の一致画像が見つかりました。最初の画像の読み込みを開始します", + loadNextSimilar: "オリジナル画像の読み込みに失敗しました。次の結果を読み込みます...", + loadError: "読み込みエラー", + openHomePage: "ホームページを開く", + position: "表示位置", + positionTips: "ALT キーを押すと非表示", + topLeft: "画像の左上", + topRight: "画像の右上", + bottomRight: "画像の右下", + bottomLeft: "画像の左下", + topCenter: "画像の横", + bottomCenter: "画像の下", + floatBar: "ツールバー", + previewFollowMouse: "マウスの横にプレビューを表示", + showDelay: "表示遅延", + ms: "ミリ秒", + hide: "非表示", + hideDelay: "非表示までの遅延", + forceShow: "ツールバーの強制表示: 指定サイズを超える非拡大画像上に表示", + forceShowTip: "指定サイズを超える非拡大画像がある場合、フローティングツールバーを表示します", + sizeLimitOr: "高さまたは幅のみが対象", + px: "px", + minSizeLimit: "指定サイズを超える拡大画像上にツールバーを表示", + minSizeLimitTip: "画像が拡大された後 (元の画像サイズと実際のサイズが一致しない場合)、表示される画像の長さが設定値を超えると、フローティングツールバーが表示されます", + defaultSizeLimit: "ギャラリーのデフォルトサイズ制限", + listenBg: "背景画像の監視", + backgroundColor: "背景色", + listenBgTip: "背景画像を持つ要素上にツールバーを表示", + butonOrder: "ツールバーアイコンの並び順", + keysEnable: "ショートカットを有効にする", + keysActual: "大きな画像を開く", + keysActualTip: "フローティングバーが表示されているときに、このボタンを押すと大きな画像を開きます", + keysSearch: "オリジナル画像を探す", + keysSearchTip: "フローティングバーが表示されているときに、このボタンを押すと、オリジナル画像を探します", + headSearchTip: "画像検索", + headSearchAll: "すべて検索", + keysCurrent: "現在の画像を開く", + keysCurrentTip: "フローティングバーが表示されているときに、このボタンを押すと現在の画像を開きます", + keysMagnifier: "拡大鏡を開いて観察", + keysMagnifierTip: "フローティングバーが表示されているときに、このボタンを押すと拡大鏡を開きます", + keysGallery: "ギャラリーを開く (グローバル機能キー付き)", + keysGalleryTip: "フローティングバーが表示されているときに、このボタンを押すとギャラリーを開きます", + openGallery: "ギャラリーを開く", + magnifier: "ズーム", + magnifierRadius: "デフォルトの半径", + magnifierWheelZoomEnabled: "ホイールによるズームを有効にする", + magnifierWheelZoomRange: "拡大鏡のズーム比率", + magnifierScaleImage: "ホイール操作で画像を拡大/縮小", + gallery: "ギャラリー", + galleryFitToScreen: "画面に収まるように画像を縮小・拡大", + galleryFitToScreenSmall: "小さな画像も拡大", + galleryFitToScreenTip: "はみ出さないように調整 (覆わない)", + galleryScrollEndToChange: "長い画像が最後までスクロールされたら、次の画像に切り替え", + galleryScrollEndToChangeTip: "以前のオプションを無効にした後に有効", + galleryExportType: "画像をエクスポートする際のデフォルトのソート順", + grid: "タイル表示", + gridBig: "オリジナル順", + list: "リスト表示", + galleryAutoLoad: "次のページの画像を自動的に読み込む", + galleryLoadAll: "さらに読み込むときにすべてのページを自動的に処理", + galleryLoadAllTip: "ページ数が多すぎると、動作に影響が出る可能性があります", + galleryDownloadWithZip: "すべてダウンロード時に ZIP 圧縮", + galleryDownloadWithZipAlert: "圧縮中、しばらくお待ちください", + galleryScaleSmallSize1: "実際のサイズが幅と高さが小さくて", + galleryScaleSmallSize2: "ピクセルが小さい画像にグループ化", + galleryShowSmallSize: "デフォルトで小さなサイズの画像を表示", + galleryTransition: "ギャラリーの切り替え時に表示効果", + gallerySidebarPosition: "サムネイルバーの位置", + bottom: "下", + right: "右", + left: "左", + top: "上", + gallerySidebarSize: "高さ", + gallerySidebarSizeTip: "サムネイルバーの高さ (横向き) または幅 (縦向き)", + galleryMax1: "プリフェッチ数 (最大)", + galleryMax2: "画像 (前後)", + galleryAutoZoom: "ズームを 100% に戻す (Chrome)", + galleryAutoZoomTip: "ズームインした場合、画像とサイドバーセクションのズームを 100% に戻し、表示領域を広げます (Chrome のみ有効)", + galleryDescriptionLength1: "注釈の最大文字数は", + galleryDescriptionLength2: "文字です", + galleryAutoOpenSites: "自動ギャラリー開閉の URL ルール (1行1つ、@ で始まる行は「もっと見る」)", + autoOpenViewmore: "ギャラリーを開くと自動的に「もっと見る」", + galleryViewmoreLayout: "「もっと見る」モードのレイアウト", + gallerySearchData: "検索サイトルール (空にすることで復元)", + galleryEditSite: "オンライン編集サイト", + imgWindow: "画像ウィンドウ", + imgWindowFitToScreen: "画面に収まるように調整", + imgWindowFitToScreenTip: "はみ出さないように調整 (覆わない)", + imgWindowFitToScreenWhenSmall: "小さい画像でも画面に収まるように調整", + imgWindowDefaultTool: "ウィンドウを開いたときにデフォルトで選択されているツール", + hand: "ハンド", + rotate: "回転", + zoom: "拡大鏡", + imgWindowEscKey: "Esc キーで閉じる", + imgWindowDblClickImgWindow: "ダブルクリックで閉じる", + imgWindowClickOutside: "オーバーレイ外をクリックして閉じる", + imgWindowClickOutsideTip: "オーバーレイが表示されている場合のみ有効", + none: "なし", + click: "クリック", + dblclick: "ダブルクリック", + imgWindowOverlayerShown: "オーバーレイ", + imgWindowOverlayerColor: "色と透明度", + imgWindowShiftRotateStep1: "Shift キーを押しながら", + imgWindowShiftRotateStep2: "度ずつ回転", + imgWindowMouseWheelZoom: "ホイールによるズーム", + imgWindowZoomRange: "ズーム範囲", + imgWindowZoomRangeTip: "ズーム倍率 (正数である必要があります)", + others: "その他", + waitImgLoad: "画像が読み込まれるまで、ズームなどの操作を開始しない", + waitImgLoadTip: "Ctrl キーを押しながら押すと、一時的にこの設定の反対を実行できます", + debug: "デバッグモード", + customRules: "大きい画像のカスタムルール", + firstEngine: "優先検索エンジン (1 番目の検索エンジン)", + refreshWhenError: "読み込みエラー、クリックして再読み込み", + switchSlide: "サイドバーを切り替える", + viewmore: "もっと見る", + countDown: "カウントダウン", + customLang: "カスタム言語", + defaultLang: "自動検出", + hideIcon: "アイコンを隠す", + initShow: "ショートカットを反転して、デフォルトでプレビューを表示", + stayOut: "フロートバーを画像外に留める", + galleryDownloadGap: "ダウンロード間隔", + galleryDisableArrow: "矢印キーを無効にする", + positionFixed: "固定位置", + switchStoreLoc: "切り替え中に位置を保持" + } +}, { name: "Українська", match: ["uk", "uk-UA"], From 0f9551bfff8eef90f98bbcdfa7220eef8b7a764d Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 26 Feb 2024 11:10:46 +0800 Subject: [PATCH 765/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index e1603b963f8..4a4976ce3d0 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -10,7 +10,7 @@ // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2024.2.8.2 +// @version 2024.2.26.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts // @homepage https://www.hoothin.com @@ -45,7 +45,7 @@ // @grant unsafeWindow // @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 // @require https://update.greasyfork.org/scripts/438080/1322681/pvcep_rules.js -// @require https://update.greasyfork.org/scripts/440698/1311439/pvcep_lang.js +// @require https://update.greasyfork.org/scripts/440698/1333524/pvcep_lang.js // @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js // @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.meta.js // @match *://*/* From d043a7713740995f3b6ba0f85a0bff91332f7f00 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 26 Feb 2024 11:25:11 +0800 Subject: [PATCH 766/812] Update Picviewer CE+.user.js --- Picviewer CE+/Picviewer CE+.user.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index 4a4976ce3d0..615a7589044 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -2,12 +2,14 @@ // @name Picviewer CE+ // @name:zh-CN Picviewer CE+ // @name:zh-TW Picviewer CE+ +// @name:ja Picviewer CE+ // @name:pt-BR Picviewer CE+ // @name:ru Picviewer CE+ // @author NLF && ywzhaiqi && hoothin // @description Powerful picture viewing tool online, which can popup/scale/rotate/batch save pictures automatically // @description:zh-CN 在线看图工具,支持图片翻转、旋转、缩放、弹出大图、批量保存 // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 +// @description:ja オンラインで画像を強力に閲覧できるツール。ポップアップ表示、拡大・縮小、回転、一括保存などの機能を自動で実行できます // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения // @version 2024.2.26.1 From db526f6f82594f481db330b9a866adc3856881e7 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Wed, 28 Feb 2024 01:46:02 +0000 Subject: [PATCH 767/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index e56e35bf4c3..ea849e6e67d 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -26488,7 +26488,7 @@ "resource_url": "http://wedata.net/items/74897", "data": { "pageElement": "//div[@class='l-article']/div[@class='article-body']", - "nextLink": "//div[contains(concat(' ',@class,' '),' m-pagination ')]/a[@class='is-active']/following-sibling::a", + "nextLink": "//div[contains(concat(' ',@class,' '),' m-pagination ')]/*[@class='is-active']/following-sibling::a", "url": "^https?://dot\\.asahi\\.com/", "exampleUrl": "https://dot.asahi.com/wa/2022080300076.html?page=1\r\nhttps://dot.asahi.com/dot/photoarticle/2019060500079.html?page=1\r\nhttps://dot.asahi.com/articles/-/196996?page=1" }, @@ -26496,7 +26496,7 @@ "created_by": "t_f_m", "name": "dot asahi", "created_at": "2014-06-13T17:32:13+09:00", - "updated_at": "2023-07-26T15:14:34+09:00" + "updated_at": "2024-02-27T19:25:45+09:00" }, { "resource_url": "http://wedata.net/items/74895", From ac67b46f31d19c9b6b16a56e4bab606e6c8c2fa7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Wed, 28 Feb 2024 11:19:19 +0800 Subject: [PATCH 768/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 4b90688dfce..26c2055c815 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -10082,7 +10082,7 @@ let scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; let viewHeight = window.innerHeight || document.documentElement.clientHeight; let tileOffset = searchData.prefConfig.tileOffset || 0; - let clientX = e.pageX - self.bar.clientWidth / 2 - document.documentElement.offsetLeft; + let clientX = e.pageX - self.bar.clientWidth / 2 - (getComputedStyle(document.documentElement).position !== 'static' ? document.documentElement.offsetLeft : 0); if (clientX < 0) clientX = 5; else if (clientX + self.bar.clientWidth > viewWidth + scrollLeft) clientX = viewWidth + scrollLeft - self.bar.clientWidth - 20; let clientY = e.pageY; From 0e22c2c8bb49c92b2ec985c3161edea0c09ff306 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 4 Mar 2024 02:00:56 +0000 Subject: [PATCH 769/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index ea849e6e67d..36cfa12d571 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86211", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='pagesprit01']/preceding-sibling::*|id('writer01')", + "nextLink": "//p[@class='next-page-link']/a", + "url": "^https://monomax\\.jp/archives/\\d+", + "exampleUrl": "https://monomax.jp/archives/213091/3/\r\nhttps://monomax.jp/archives/213091/4/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "モノマックス(MonoMax)", + "created_at": "2024-03-03T20:05:40+09:00", + "updated_at": "2024-03-03T20:05:40+09:00" +}, { "resource_url": "http://wedata.net/items/86208", "data": { From 98b6fc87c674789c4e62361dabf54189fe3885db Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 8 Mar 2024 01:43:27 +0000 Subject: [PATCH 770/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 36cfa12d571..e0fc049282e 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86212", + "data": { + "insertBefore": "", + "pageElement": "//table[contains(@class, 'a-bordered')]/tbody/tr", + "nextLink": "//a[text()='次へ']", + "url": "^https?://www\\.amazon\\.co\\.jp/gp/css/gc/balance", + "exampleUrl": "https://www.amazon.co.jp/gp/css/gc/balance?ref_=ya_d_c_gc" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "foo2", + "name": "Amazon.co.jp - ギフトカード残高", + "created_at": "2024-03-07T23:04:44+09:00", + "updated_at": "2024-03-07T23:04:44+09:00" +}, { "resource_url": "http://wedata.net/items/86211", "data": { @@ -50113,18 +50128,18 @@ "created_at": "2008-08-27T17:07:44+09:00" }, { - "name": "Amazon.co.jp - \u6ce8\u6587\u5c65\u6b74", - "resource_url": "http:\/\/wedata.net\/items\/2351", - "updated_at": "2012-01-17T01:42:18+09:00", - "created_by": "haoyayoi@hatena", - "database_resource_url": "http:\/\/wedata.net\/databases\/AutoPagerize", + "resource_url": "http://wedata.net/items/2351", "data": { - "pageElement": "id(\"cs-orders\")\/div[@class=\"action-box rounded\"]", - "url": "^https:\/\/www\\.amazon\\.co\\.jp\/gp\/css\/history(?:\/orders)?\/view\\.html", - "nextLink": "id(\"cs-orders\")\/div\/div\/div\/a[.=\"\u6b21\u3078 \u00bb\"]", - "exampleUrl": "https:\/\/www.amazon.co.jp\/gp\/css\/history\/view.html?ie=UTF8&startAtIndex=0&orderFilter=year-2007&groupID=0" + "pageElement": "//div[@class='order-card js-order-card']", + "nextLink": "//a[text()='次へ']", + "url": "^https?://www\\.amazon\\.co\\.jp/(gp/css/order-history||your-orders/)", + "exampleUrl": "https://www.amazon.co.jp/gp/css/order-history?ref_=nav_orders_first\r\nhttps://www.amazon.co.jp/your-orders/orders?timeFilter=year-2024&ref_=ppx_yo2ov_dt_b_filter_all_y2024" }, - "created_at": "2008-08-27T12:11:07+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "haoyayoi@hatena", + "name": "Amazon.co.jp - 注文履歴", + "created_at": "2008-08-27T12:11:07+09:00", + "updated_at": "2024-03-07T11:17:10+09:00" }, { "resource_url": "http://wedata.net/items/2258", From 1b878e534631bc27b344963ecb63b7ddd50466bd Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 10 Mar 2024 01:51:53 +0000 Subject: [PATCH 771/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index e0fc049282e..702161853de 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,18 @@ [ +{ + "resource_url": "http://wedata.net/items/86213", + "data": { + "pageElement": "//div[@class='theme-grid row justify-content-center']", + "nextLink": "//a[@data-toggle='page-jump']/following-sibling::a[1]", + "url": "^https?://themeplaza\\.art/", + "exampleUrl": "https://themeplaza.art/themes" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "タックン君", + "name": "Theme Plaza", + "created_at": "2024-03-09T17:58:59+09:00", + "updated_at": "2024-03-09T23:42:39+09:00" +}, { "resource_url": "http://wedata.net/items/86212", "data": { @@ -20057,16 +20071,16 @@ { "resource_url": "http://wedata.net/items/77625", "data": { - "pageElement": "//div[@class='block--2_RlJqhg']", + "pageElement": "id('maincontent')/*[not(contains(@class, 'pagination'))]", "nextLink": "//a[@rel='next']", "url": "^https?://(www\\.)?macrumors\\.com/", - "exampleUrl": "https://www.macrumors.com/mac/" + "exampleUrl": "https://www.macrumors.com/\r\nhttps://www.macrumors.com/mac/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Tanookirby", "name": "Mac Rumors: Apple Mac iOS Rumors and News You Care About", "created_at": "2015-11-01T09:39:03+09:00", - "updated_at": "2020-06-15T08:36:34+09:00" + "updated_at": "2024-03-09T12:25:29+09:00" }, { "resource_url": "http://wedata.net/items/77624", From 073583ebe085cd8a9c9fafb994ed0b678ba86592 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 12 Mar 2024 01:43:28 +0000 Subject: [PATCH 772/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 702161853de..e41f1adf98a 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,34 @@ [ +{ + "resource_url": "http://wedata.net/items/86215", + "data": { + "insertBefore": "", + "pageElement": "//section[contains(concat(' ', @class, ' '), ' main-post-list ')]/ul", + "nextLink": "//div[contains(concat(' ', @class, ' '), ' pagination ')]/span[contains(@class, 'current')][number()>0]/following-sibling::a[1]", + "url": "^https://blog\\.domesoccer\\.jp/", + "exampleUrl": "https://blog.domesoccer.jp/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ドメサカブログ", + "created_at": "2024-03-11T18:17:35+09:00", + "updated_at": "2024-03-11T18:17:35+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86214", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(concat(' ', @class, ' '), ' hentry ')]", + "nextLink": "//a[@rel='next']", + "url": "^https://worldfn\\.net/", + "exampleUrl": "https://worldfn.net/\r\nhttps://worldfn.net/search/%E6%97%A5%E6%9C%AC?p=2" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "WorldFootballNewS", + "created_at": "2024-03-11T18:12:36+09:00", + "updated_at": "2024-03-11T18:12:36+09:00" +}, { "resource_url": "http://wedata.net/items/86213", "data": { From fea10974609f6b52a8e35a4759845f637e7c8cab Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 18 Mar 2024 01:46:57 +0000 Subject: [PATCH 773/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index e41f1adf98a..551f7ae0921 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -7750,15 +7750,15 @@ "resource_url": "http://wedata.net/items/85355", "data": { "pageElement": "//article[contains(@class, 'hentry')]", - "nextLink": "//span[@class='current']/following-sibling::a[1]|//link[@rel='prev']", + "nextLink": "//span[@class='current']/following-sibling::a[1]|//a[@rel='prev']", "url": "^https://mon-ja\\.net/.+", - "exampleUrl": "https://mon-ja.net/articles/page/2/ https://mon-ja.net/200523-01_bicycle-insurance-mandatory/" + "exampleUrl": "https://mon-ja.net/articles/page/2/ https://mon-ja.net/tag/nisa/page/2/ https://mon-ja.net/200523-01_bicycle-insurance-mandatory/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa", "name": "MonJa", "created_at": "2020-05-28T12:12:09+09:00", - "updated_at": "2020-07-16T20:42:07+09:00" + "updated_at": "2024-03-17T21:40:07+09:00" }, { "resource_url": "http://wedata.net/items/85354", From 7ad67e43b2000038fbe664b832af901751bdff1d Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 19 Mar 2024 12:06:26 +0800 Subject: [PATCH 774/812] Update searchJumperDefaultConfig.js --- SearchJumper/searchJumperDefaultConfig.js | 1265 ++------------------- 1 file changed, 83 insertions(+), 1182 deletions(-) diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js index b7d710552f5..3795162a078 100644 --- a/SearchJumper/searchJumperDefaultConfig.js +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -20,36 +20,10 @@ switch (lang) { "description": "A semi-regulated Chinese-language collaborative online encyclopedia owned by the Chinese technology company Baidu.#wiki", "match": "baike\\.baidu\\.com/search/" }, - { - "name": "百度文库", - "url": "https://wenku.baidu.com/search?word=%s&ie=utf-8" - }, - { - "name": "豆丁文档", - "url": "https://www.docin.com/search.do?searchcat=2&searchType_banner=p&nkey=%s" - }, - { - "name": "爱问知识", - "url": "https://iask.sina.com.cn/search?searchWord=%s" - }, - { - "name": "萌娘百科", - "url": "https://zh.moegirl.org.cn/Special:?search=%s", - "icon": "https://zh.moegirl.org.cn/favicon.ico", - "description": "以ACGN相关文化为主题的在线百科全书。最初名为“绿坝娘wiki”,后来改名为“中华萌娘小百科”,2011年5月1日简化为“萌娘百科”。#wiki" - }, { "name": "果壳", "url": "https://www.guokr.com/search/all/?wd=%s" }, - { - "name": "Quora", - "url": "https://www.quora.com/search?q=%s" - }, - { - "name": "Metacritic", - "url": "https://www.metacritic.com/search/%s/" - }, { "name": "豆瓣", "url": "https://www.douban.com/search?source=suggest&q=%s.replace(/\\./g,\" \")" @@ -74,10 +48,6 @@ switch (lang) { "url": "https://www.sov2ex.com/?q=%s", "icon": "https://sov2ex.oss-cn-shanghai.aliyuncs.com/assets/favicon/apple-icon-57x57.png" }, - { - "name": "推特", - "url": "https://twitter.com/search?q=%s" - }, { "name": "百度贴吧", "url": "https://tieba.baidu.com/f/search/res?ie=utf-8&qw=%s", @@ -88,10 +58,6 @@ switch (lang) { "name": "新浪微博", "url": "https://s.weibo.com/weibo?q=%s" }, - { - "name": "脸书", - "url": "https://www.facebook.com/search/results.php?q=%s" - }, { "name": "微信搜索", "url": "https://weixin.sogou.com/weixin?ie=utf8&type=2&query=%s" @@ -115,57 +81,14 @@ switch (lang) { "name": "图片聚合搜索", "url": "https://www.google.com/search?tbm=isch&as_q=%s%20(site:www.pexels.com%20OR%20site:pixabay.com%20OR%20site:unsplash.com%20OR%20site:stocksnap.io%20OR%20site:pxhere.com%20OR%20site:www.hippopx.com%20OR%20site:foter.com%20OR%20site:freepik.com%20OR%20site:colorhub.me)" }, - { - "name": "必应图片", - "url": "https://www.bing.com/images/search?q=%s" - }, - { - "name": "搜狗图片", - "url": "https://pic.sogou.com/pics?query=%s" - }, - { - "name": "花瓣", - "url": "https://huaban.com/search?q=%s" - }, { "name": "Pinterest", "url": "https://www.pinterest.com/search/pins/?q=%s&rs=typed&term_meta" }, - { - "name": "yandex", - "url": "https://yandex.com/images/search?text=%s" - }, - { - "name": "pixabay", - "url": "https://pixabay.com/images/search/%s/", - "icon": "https://pixabay.com/favicon-32x32.png" - }, - { - "name": "unsplash", - "url": "https://unsplash.com/s/photos/%s" - }, - { - "name": "500px", - "url": "https://500px.com/search?q=%s" - }, { "name": "Deviantart", "url": "https://www.deviantart.com/browse/all/?q=%s" }, - { - "name": "Wallhaven", - "url": "https://wallhaven.cc/search?q=%s" - }, - { - "name": "Pixabay", - "url": "https://pixabay.com/zh/images/search/?manual_search=1&q=%s&hp=&order=&cat=&min_width=&min_height=", - "icon": "https://pixabay.com/favicon-32x32.png" - }, - { - "name": "Backiee", - "url": "https://backiee.com/search/%s", - "icon": "https://backiee.com/assets/favicon/favicon-32x32.png" - }, { "name": "ChatGPT搜索GIF", "url": "https://poe.com/ChatGPT#p{sleep(1000)&[class*\\='ChatMessageInputContainer'] textarea=hey ChatGPT. hope you're having a great day. From now on you will respond to anything I say with the perfect gif response. Once you know what gif you want to use, compile the most accurate and perfect search phrase that will result in the specific gif you want to send. respond with url: \" Sure, I'm happy to help you!\\n http://scythe-spot-carpenter.glitch.me/search?search_term\\=.gif \n%s&click(button[class*\\='ChatMessageSendButton_sendButton'])}", @@ -194,16 +117,6 @@ switch (lang) { "hideNotMatch": true, "openInNewTab": false }, - { - "name": "SearX", - "url": "https://searx.work/search?q=%s", - "icon": "https://searx.work/static/themes/simple/img/favicon.png", - "match": "0" - }, - { - "name": "头条搜索", - "url": "https://so.toutiao.com/search/?dvpf=%c&keyword=%s" - }, { "name": "必应", "url": "https://www.bing.com/search?q=%s", @@ -227,57 +140,6 @@ switch (lang) { } ] }, - { - "type": "开发", - "icon": "code", - "sites": [ - { - "name": "MDN", - "url": "https://developer.mozilla.org/zh-CN/search?q=%s" - }, - { - "name": "stackoverflow", - "url": "https://stackoverflow.com/search?q=%s" - }, - { - "name": "掘金", - "url": "https://juejin.im/search?query=%s&type=all" - }, - { - "name": "Can I Use", - "url": "https://caniuse.com/#search=%s", - "icon": "https://caniuse.com/img/favicon-128.png" - }, - { - "name": "GitHub", - "url": "https://github.com/search?q=%s", - "match": "https://github\\.com/search.*[&\\?]q=" - }, - { - "name": "w3c", - "url": "https://www.runoob.com/?s=%s" - }, - { - "name": "GreasyFork", - "url": "https://greasyfork.org/zh-CN/scripts?q=%s&utf8=✓", - "icon": "https://greasyfork.org/packs/media/images/blacklogo96-b2384000fca45aa17e45eb417cbcbb59.png" - }, - { - "name": "Unicode字符大全", - "url": "https://unicode-table.com/cn/search/?q=%s" - }, - { - "name": "npm", - "url": "https://www.npmjs.org/search?q=%s", - "icon": "https://static.npmjs.com/b0f1a8318363185cc2ea6a40ac23eeb2.png" - }, - { - "name": "AI生成正则", - "url": "https://poe.com/ChatGPT#p{sleep(1000)&textarea[class^\\='ChatMessageInput']=Can you help me to write a RegExp which can detect %input{Target,Email address/Phone number} on `%s`&click([class^\\='ChatMessageInputView_sendButton']>button)}", - "openInNewTab": true - } - ] - }, { "type": "词典", "icon": "language", @@ -301,59 +163,9 @@ switch (lang) { "url": "https://dict.youdao.com/search?q=%s", "icon": "https://shared.ydstatic.com/images/favicon.ico" }, - { - "name": "必应翻译", - "url": "https://cn.bing.com/dict/search?q=%s" - }, - { - "name": "Forvo发音", - "url": "https://zh.forvo.com/search/%s" - }, - { - "name": "CNKI翻译", - "url": "https://dict.cnki.net/index#p{[name\\='translateArea']=%s&click(.hanlder-left-right>button)}" - }, - { - "name": "汉典", - "url": "https://www.zdic.net/hans/%s" - }, - { - "name": "海词", - "url": "https://dict.cn/%s" - }, - { - "name": "金山词霸", - "url": "https://www.iciba.com/word?w=%s", - "icon": "https://cdn.iciba.com/www/img/www/favicon.ico" - }, - { - "name": "词源词根词典", - "url": "https://www.etymonline.com/index.php?term=%s" - }, - { - "name": "沪江", - "url": "https://dict.hjenglish.com/w/%s" - }, - { - "name": "Urban Dictionary", - "url": "https://www.urbandictionary.com/search.php%p{term=%s}" - }, { "name": "POE", "url": "https://poe.com/ChatGPT#p{sleep(1000)&[class*\\='ChatMessageInputContainer']>textarea=Please help me to translate \\`%s\\` to English, please return only translated content not include the origin text&click(button[class*\\='ChatMessageSendButton_sendButton'])}" - }, - { - "name": "ChatGPT翻译", - "url": "https://pandapy.com/#p{textarea[data-id\\='root']=Please help me to translate \\`%s\\` to Chinese, please return only translated content not include the origin text&click(.send-btn)}" - }, - { - "name": "Ludwig", - "url": "https://ludwig.guru/s/%s", - "icon": "https://ludwig.guru/icons/icon_192x192.png" - }, - { - "name": "Linggle", - "url": "https://linggle.com/?q=%s" } ] }, @@ -369,24 +181,6 @@ switch (lang) { "name": "腾讯视频", "url": "https://v.qq.com/x/search/?q=%s" }, - { - "name": "爱奇艺", - "url": "https://so.iqiyi.com/so/q_%s", - "icon": "https://www.iqiyi.com/favicon.ico" - }, - { - "name": "优酷", - "url": "https://so.youku.com/search_video/q_%s", - "icon": "https://img.alicdn.com/tfs/TB1WeJ9Xrj1gK0jSZFuXXcrHpXa-195-195.png" - }, - { - "name": "AcFun", - "url": "https://www.acfun.cn/search?keyword=%s" - }, - { - "name": "搜狐", - "url": "https://so.tv.sohu.com/mts?wd=%s" - }, { "name": "樱花动漫", "url": "https://www.yhdmz.org/list/?ex=1&kw=%s" @@ -432,42 +226,18 @@ switch (lang) { } ] }, - { - "type": "新闻", - "icon": "newspaper", - "sites": [ - { - "name": "百度新闻", - "url": "https://news.baidu.com/ns?word=%s&tn=news&from=news&cl=2&rn=20&ct=1", - "icon": "https://www.baidu.com/favicon.ico" - }, - { - "name": "网易-百度", - "url": "https://www.baidu.com/s?wd=%s%20site%3Anews.163.com%20", - "icon": "https://news.163.com/favicon.ico", - "match": "site%3Anews\\.163\\.com" - }, - { - "name": "腾讯新闻", - "url": "https://www.sogou.com/sogou?site=news.qq.com&query=%s", - "icon": "https://news.qq.com/favicon.ico" - }, - { - "name": "凤凰新闻", - "url": "https://so.ifeng.com/?q=%s&c=1" - }, - { - "name": "今日头条", - "url": "https://www.toutiao.com/search/?keyword=%s" - } - ] - }, { "type": "划词搜索", "icon": "sitemap", "selectTxt": true, "openInNewTab": true, "sites": [ + { + "name": "关注我的公众号", + "url": "https://mp.weixin.qq.com/s?__biz=MzkxMjY1NjkzNQ==&mid=2247483662&idx=1&sn=faf637ec27d15fe02522ff0c6cd4957e", + "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico", + "description": "打开配置页删除此项" + }, { "name": "百度 ", "url": "[\"百度\"]" @@ -677,892 +447,141 @@ switch (lang) { ] }, { - "type": "APP", - "icon": "archive", + "type": "Etc", + "icon": "suitcase", "sites": [ { - "name": "Play", - "url": "https://play.google.com/store/search?q=%s" - }, - { - "name": "Coolapk", - "url": "https://www.baidu.com/s?wd=%s%20site%3Acoolapk.com", - "match": "coolapk\\.com" - }, - { - "name": "Apkpure", - "url": "https://apkpure.com/cn/search?q=%s" + "name": "邮编库", + "url": "http://www.youbianku.com/%s" }, { - "name": "APKMirror", - "url": "https://www.apkmirror.com/?s=%s" + "name": "AMO", + "url": "https://addons.mozilla.org/zh-CN/firefox/search/?q=%s" }, { - "name": "Chrome Store", - "url": "https://chrome.google.com/webstore/search/%s", - "icon": "https://www.google.com/images/icons/product/chrome_web_store-32.png" + "name": "企查查", + "url": "https://www.qcc.com/search?key=%s", + "match": "^https?:\\/\\/www\\.qcc\\.com\\/(?:web|firm|search)" }, { - "name": "牛麦子", - "url": "https://niumaizi.cn/?s=%s", - "icon": "http://niumaizi.cn/wp-content/uploads/2022/01/%E7%89%9B%E9%BA%A6%E5%AD%90-%E5%89%AF%E6%9C%AC.jpg" + "name": "天眼查", + "url": "https://www.tianyancha.com/search?key=%s", + "match": "^https?:\\/\\/www\\.tianyancha\\.com\\/(?:search|company)" }, { - "name": "MSDN, 我告诉你", - "url": "https://msdn.itellyou.cn/?keyword=%s" + "name": "中國大陸地方志書目查詢系統", + "url": "https://webgis.sinica.edu.tw/place/query.asp?A1=%E5%9C%B0%E6%96%B9%E5%BF%97%E5%90%8D&B1=containing&C1=%s&Page_setup=10&D1=AND&A2=99&B2=containing&C2=&D2=AND&A3=99&B3=containing&C3=&page=1", + "charset": "Big5" }, { - "name": "腾讯软件中心", - "url": "https://pc.qq.com/?keyword=%s", - "icon": "https://pc1.gtimg.com/finance/softweb/fav/favicon_32x32.ico" + "name": "金山文档 · 一起办公才高效", + "url": "https://edu.kdocs.cn/?show=all#p{#app input.kdv-input__inner=%s}" } ] }, { - "type": "音乐", - "icon": "music", + "type": "Github", + "icon": "fa-brands fa-github ", + "match": "github\\.com", + "selectLink": true, + "selectPage": true, + "openInNewTab": true, "sites": [ { - "name": "网易音乐", - "url": "https://music.163.com/#/search/m/?s=%s", - "icon": "https://s1.music.126.net/style/favicon.ico" + "name": "页面镜像 - Fastgit", + "url": "%u.replace(/https:\\/\\/github\\.com/,\"https://hub.fastgit.xyz\")", + "kwFilter": "https:\\/\\/github\\.com" }, { - "name": "一听", - "url": "https://so.1ting.com/all.do?q=%s" + "name": "Raw镜像 - Fastgit", + "url": "%t.replace(/raw\\.githubusercontent\\.com/,\"raw.fastgit.org\").replace(/github.com(.*)\\/blob\\/(.*)/,\"raw.fastgit.org$1/$2\")", + "kwFilter": "github.com.*\\/blob\\/" }, { - "name": "QQ音乐", - "url": "https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%s" + "name": "Assets镜像 - Fastgit", + "url": "%t.replace(/github\\.githubassets\\.com/,\"assets.fastgit.orgz\")", + "kwFilter": "github\\.githubassets\\.com" }, { - "name": "百度音乐", - "url": "https://music.91q.com/search?ie=utf-8&oe=utf-8&key=%s" + "name": "Download镜像- Fastgit", + "url": "%t.replace(/github\\.com(.*\\/download\\/)/,\"download.fastgit.org$1\")", + "kwFilter": "github\\.com.*\\/download\\/" }, { - "name": "酷我音乐", - "url": "https://www.kuwo.cn/search/list?key=%s" + "name": "Archive镜像- Fastgit", + "url": "%t.replace(/github\\.com(.*\\/archive\\/)/,\"download.fastgit.org$1\")", + "kwFilter": "github\\.com.*\\/archive\\/" }, { - "name": "酷狗", - "url": "http://search.5sing.kugou.com/?keyword=%s", - "icon": "https://5sing.kugou.com/favicon.ico" + "name": "Ghproxy镜像加速", + "url": "https://ghproxy.com/%t" } ] }, { - "type": "购物", - "icon": "shopping-cart", + "type": "VIP", + "icon": "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgc3R5bGU9ImhlaWdodDogMWVtO2ZpbGw6IHdoaXRlO292ZXJmbG93OiBoaWRkZW47IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iODI3Ij48cGF0aCBkPSJNNjgzLjE5NTM2MyA1NjcuNjE1NDY5djM0OS4xNDQzOTloNzMuMzY5NDQyVjc4OS45NzUwMTdjMTE3LjI2ODMxMiAxLjczOTU4MiAxNzYuNzIxMDk1LTMuNDc5MTY1IDE5My4xOTU5NjItMTAzLjU1NjMxIDUuMjE4NzQ3LTI5LjI2NTkxNC01LjIxODc0Ny02Mi4xMTMzMjEtMTguMjE0NDQ5LTgwLjEyMzExNC0zOC42ODAxMjQtNTIuMzkyMTI2LTE1NS4wMjc0ODEtMzkuMzk2NDIzLTI0OC4zNTA5NTUtMzguNjgwMTI0ek03NTYuNTY0ODA1IDczMC42MjQ1NjN2LTEwMS44MTY3MjhjNTQuNDM4NjkzLTEuNzM5NTgyIDExMi4wNDk1NjUtNy43NzY5NTYgMTIxLjU2NjEwMyAzNi4yMjQyNDMgMTUuNjU2MjQxIDczLjU3NDA5OC02MC4zNzM3MzggNjcuMzMyMDY4LTEyMS41NjYxMDMgNjUuNTkyNDg1ek01NDEuODc5ODg0IDU2OS4zNTUwNTFjMC44MTg2MjcgMTE1LjUyODczIDAuODE4NjI3IDIzMS44NzYwODcgMS43Mzk1ODIgMzQ3LjQwNDgxN2g3MS42Mjk4NTlWNTY3LjYxNTQ2OWMtMjQuMTQ5NDk1IDEuMDIzMjg0LTQ4LjQwMTMxOSAxLjAyMzI4NC03My4zNjk0NDEgMS43Mzk1ODJ6TTY4MC43Mzk0ODIgMTAyLjEyMzcxM2MtMTEzLjA3Mjg0OSAxMTIuODY4MTkyLTIyNS44Mzg3MTMgMjI0LjkxNzc1OC0zMzkuNzMwMTg5IDMzNy45OTA2MDdWMTAyLjEyMzcxM0g2Ny42OTAyMTdjMC44MTg2MjcgMjIuNDA5OTEzIDAuODE4NjI3IDQ1LjYzODQ1MyAxLjczOTU4MiA2OC4xNTA2OTVoNjYuNDExMTEydjc0NS45NzM4MThjMjcxLjU3OTQ5NC0yNzEuNzg0MTUxIDU0Mi4zNDAzNjItNTQyLjU0NTAxOCA4MTMuOTE5ODU2LTgxNC4xMjQ1MTNINjgwLjczOTQ4MnoiIHAtaWQ9IjgyOCIvPjwvc3ZnPg==", + "match": "v\\.qq\\.com/x/|\\.mgtv\\.com/.*b/|v\\.youku\\.com/(v_show|video)/|\\.iqiyi\\.com/(v_|dianying)", "sites": [ { - "name": "淘宝", - "url": "https://s.taobao.com/search?q=%s", - "icon": "https://www.taobao.com/favicon.ico" - }, - { - "name": "京东", - "url": "https://search.jd.com/search?keyword=%s&enc=utf-8", - "icon": "https://www.jd.com/favicon.ico" - }, - { - "name": "苏宁", - "url": "https://search.suning.com/%s/" - }, - { - "name": "亚马逊", - "url": "https://www.amazon.cn/s/?field-keywords=%s", - "icon": "https://www.amazon.cn/favicon.ico" - }, - { - "name": "天猫", - "url": "https://list.tmall.com/search_product.htm?q=%s" - }, - { - "name": "值得买", - "url": "https://search.smzdm.com/?c=home&s=%s" - }, - { - "name": "当当网", - "url": "https://search.dangdang.com/?key=%s" - }, - { - "name": "1688", - "url": "https://s.1688.com/selloffer/offer_search.htm?keywords=%s", - "charset": "gbk" + "name": "无名小站", + "url": "https://www.administratorw.com/video.php?url=%u" }, { - "name": "慢慢买", - "url": "https://ss.manmanbuy.com/Default.aspx?key=%s", - "charset": "GBK" + "name": "小小解析", + "url": "http://tv.hzwdd.cn/#p{#url=%u&click(.btn-play)}", + "icon": "http://tv.hzwdd.cn/img/favicon.ico" } ] }, { - "type": "电子书", - "icon": "book", - "description": "电子书下载", + "type": "辅助工具", + "icon": "list-alt", + "selectTxt": true, + "selectImg": true, + "selectAudio": true, + "selectVideo": true, + "selectLink": true, + "selectPage": true, + "openInNewTab": true, "sites": [ { - "name": "读书小站 – 悦读不孤读", - "url": "https://ibooks.org.cn/?s=%s", - "icon": "https://ibooks.org.cn/wp-content/uploads/2021/07/1625331935-%E8%B5%84%E6%BA%90-1.png" + "name": "手机号码聚合搜索", + "url": "[\"360\",\"搜狗\"]", + "icon": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwRGBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQqHBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/wAARCABAAEADASIAAhEBAxEB/8QAHAABAAICAwEAAAAAAAAAAAAAAAMIAgcBBQYE/8QAMxAAAQMDAgIIBAYDAAAAAAAAAQIDBAAFEQYSByEIEzFBUWFxgRQyUmIVIzNCkbFyoeH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AsPSlKBSlKBSo2X2pDfWR3UPI+ptYUP5FSUClKUCo33kRo7j7ytrbSCtZxnAAyf8AQqSsHWkPtLacGUOJKFehGD/dBU2+9JPV0nVZmWFbUK0tL/Kgusoc61Hi4rGcn7SMd3jVotPXpjUel7deY6drU+KiQEZzt3JyU+xyPaqFXSzvWvUsuzyilp6NKVGWpw4CSle3JPh31efQ2mjo/QtrsJkiUuExtU8OxaiSo4+3KiB5YoNbWXTvC3VE5Y4cXuTp2+N5KfgH3WHQR4su8lp8QO6vWaT1beIepTozXoZ/GOrL0C4sJ2s3NodpA/a4O9Pr79XJjwuLFsukOdZ3dPaxsTiercKwXojpG5paHU43IVjs/wCGun1FepWqeAto10W+rvtifbmBSU7T1rboaeH+Khzx2dlBuqlRsPIkR232vkdQFp9CMj+6koFKUoKxdJPh29DvA1pbGSqJL2t3AJH6ToGErPkoADP1D7hXp+CfGy33GzxdNatmIiXGKgMxpT6tqJKBySkqPILA5c/m5d9bvmQ41whPRJzDciM+gtutOp3JWk8iCO8VWriJ0bJ8OS7cNAH4yIolRtzqwHmvJCjyWPI4V60G/NSa40zo8sDUl4jQFyRlpC8qUseOEgnHn2V9tl1BZdRRS/YbnDuLKcbjGdSvbnxA5j3FUKvFrvNrkiPfYc2I80OrCJba0FIHcN3d6VtLo22K+yuIyLzBS41aYbbiJrx5Id3IIS0PqO7ary258MhbalKUClKUClKUGDrTb7ex9CXUH9riQofwa4ZYajtBqO0hptPYhtISB7CpKUClKUH/2Q==" }, { - "name": "SoBooks", - "url": "https://sobooks.net/search/%s" + "name": "🧮 计算器", + "url": "calculator://" }, { - "name": "知轩藏书", - "url": "http://zxcs.me/index.php?keyword=%s", - "description": "藏尽网络中最好的精校小说" + "name": "🔎 Everything搜索", + "url": "ES://%s" }, { - "name": "Mox.moe", - "url": "https://mox.moe/list.php?s=%s", - "icon": "https://mox.moe/img/mox-logo-256.png", - "description": " [Kindle漫畫|Kobo漫畫|epub漫畫]" + "name": "🦊 打开火狐", + "url": "FirefoxURL-308046B0AF4A39CB://%u" }, { - "name": "书享家", - "url": "http://www.shuxiangjia.cn/search.php?q=%s" + "name": "⏰ 时钟", + "url": "ms-clock://" }, { - "name": "Anna’s Archive", - "url": "https://annas-archive.org/search?q=%s", - "icon": "https://annas-archive.org/favicon-32x32.png", - "match": "annas\\-archive\\.org/search" + "name": "✂️ 屏幕截图", + "url": "ms-screenclip://" }, { - "name": "无名图书", - "url": "https://www.book123.info/list?key=%s" + "name": "☑️ ToDo", + "url": "ms-todo://", + "description": "微软To-Do" }, { - "name": "Hallowlib", - "url": "https://bk.hallowlib.org/#p{#searchText input=%s&click(#sBtn)}" + "name": "📓 Onenote", + "url": "onenote://" }, { - "name": "Freembook", - "url": "https://freembook.com/#p{#search-input=%s&click([aria-label=search])}" - }, - { - "name": "知搜", - "url": "https://zhiso.top/search/?q=%s", - "icon": "https://zhiso.top/static/image/favicon.ico" - }, - { - "name": "苦瓜书盘", - "url": "https://kgbook.com/e/search/index.php%p{keyboard=%s&show=title,booksay,bookwriter&tbname=download&tempid=1}" - } - ] - }, - { - "type": "阅读", - "icon": "book-open", - "sites": [ - { - "name": "BookLink.Me", - "url": "https://booklink.me/after_search.php%p{name=%s}" - }, - { - "name": "起点中文网", - "url": "https://www.qidian.com/soushu/%s.html", - "icon": "https://qidian.gtimg.com/qd/favicon/qd_icon.ico" - }, - { - "name": "创世中文", - "url": "https://chuangshi.qq.com/search/searchindex?type=all&wd=%s", - "icon": "https://img1.chuangshi.qq.com/chuangshi/p1/ico/c_mini_logo.ico" - }, - { - "name": "纵横中文网", - "url": "http://search.zongheng.com/s?keyword=%s" - }, - { - "name": "笔趣阁", - "url": "https://www.xbiquge.so/modules/article/search.php?searchkey=%s", - "charset": "GBK" - }, - { - "name": "微信读书", - "url": "https://weread.qq.com/#p{click(.navBar_home_inputText)&.search_input_text=%s&click(.search_input_right)}" - }, - { - "name": "轻小说文库", - "url": "https://www.wenku8.net/so.php%p{searchtype=articlename&searchkey=%s&charset=gbk}", - "charset": "GBK" - }, - { - "name": "轻之国度", - "url": "https://www.lightnovel.us/cn/search?keywords=%s" - }, - { - "name": "哔哩轻小说", - "url": "https://www.linovelib.com/S6/%p{searchkey=%s&searchtype=all}", - "description": "日本动漫轻小说在线阅读" - }, - { - "name": "魔笔小说", - "url": "https://www.mobinovels.com/?s=%s", - "description": "轻小说 资源收集" - }, - { - "name": "Z-Library", - "url": "https://zh.usa1lib.org/s/?q=%s" - }, - { - "name": "小说搜搜", - "url": "https://www.xssousou.com/s/?wd=%s" - } - ] - }, - { - "type": "学术", - "icon": "graduation-cap", - "sites": [ - { - "name": "谷歌学术", - "url": "https://scholar.google.com/scholar?hl=zh-CN&q=%s" - }, - { - "name": "百度学术", - "url": "https://xueshu.baidu.com/s?wd=%s" - }, - { - "name": "中文维基", - "url": "https://zh.wikipedia.org/w/index.php?search=%s&button=&title=Special%3ASearch" - }, - { - "name": "英文维基", - "url": "https://en.wikipedia.org/w/index.php?search=%s&button=&title=Special%3ASearch" - }, - { - "name": "日本维基", - "url": "https://ja.wikipedia.org/w/index.php?search=%s&button=&title=Special%3ASearch" - }, - { - "name": "Google Book", - "url": "https://www.google.com/search?q=%s&btnG=搜索图书&tbm=bks&tbo=1&hl=zh-CN&gws_rd=ssl" - }, - { - "name": "中国知网", - "url": "https://kns.cnki.net/KNS8/DefaultResult/Index?dbcode=CFLS&kw=%s" - }, - { - "name": "爱学术", - "url": "https://www.ixueshu.com/search/index.html?search_type=&q=%s", - "icon": "https://www.ixueshu.com/static/favicon.ico" - }, - { - "name": "维普", - "url": "http://lib.cqvip.com/Qikan/Search/Index?from=Qikan_Search_Index/%p{isNoteHistory=1&isLog=1&indexIdentifier=U&indexKey=%s}" - }, - { - "name": "krugle", - "url": "http://opensearch.krugle.org/document/search/#query=%s", - "icon": "https://opensearch.krugle.org/media/images/favicon.ico" - }, - { - "name": "读秀知识", - "url": "http://qw.duxiu.com/getPage?sw=%s&ecode=utf-8", - "icon": "https://mycroftproject.com/updateos.php/id0/duxiu.ico" - }, - { - "name": "读秀书籍", - "url": "http://book.duxiu.com/search?Field=all&channel=search&sw=%s&ecode=utf-8&edtype=&searchtype=1&view=0", - "icon": "https://mycroftproject.com/updateos.php/id0/duxiu.ico" - }, - { - "name": "罗马图书馆", - "url": "https://www.bibliotechediroma.it/opac/query/%s?context=catalogo", - "icon": "https://www.bibliotechediroma.it/sebina/repository/sebinayou/temi/biblioteche_roma/img/favicon.png" - }, - { - "name": "籍合网", - "url": "http://www.ancientbooks.cn/publishfulltextsearch?keyWord=%s", - "icon": "http://www.ancientbooks.cn/images/favicon.ico" - }, - { - "name": "深圳文献港", - "url": "http://m.szwxg.5read.com/search/goSearch.jspx%p{tag=qw&sw=%s}" - }, - { - "name": "高级检索", - "url": "http://publish.ancientbooks.cn/docShuju/platformAdvanceSearchResult.jspx?libId=5%p{modelId=2&order=0&aa=&libId=5&column1=title&text1=%s&relation2=and&column2=txt&text2=&relation3=and&column3=book_title&text3=&relation4=and&column4=book_author&text4=&relation5=and&column5=book_author_arranger&text5=&relation6=and&column6=book_publisher&text6=&synonyms=on&properNouns=on&punc=on}" - }, - { - "name": "库问搜索", - "url": "http://www.koovin.com/?q=%s", - "description": "免费开源文献资源共享平台" - }, - { - "name": "掌桥科研", - "url": "https://www.zhangqiaokeyan.com/search.html?sertext=%s" - }, - { - "name": "PubMed", - "url": "https://pubmed.ncbi.nlm.nih.gov/?term=%s", - "icon": "https://cdn.ncbi.nlm.nih.gov/coreutils/nwds/img/favicons/favicon.ico" - }, - { - "name": "文津搜索", - "url": "http://find.nlc.cn/search/doSearch?query=%s&secQuery=&actualQuery=%s" - }, - { - "name": "SCI影响因子", - "url": "https://www.letpub.com.cn/index.php?page=journalapp%p{addcomment_s1_comments=&addcomment_s2_comments=&searchname=%s&addcomment_month=&addcomment_sorttype=&journalidcommentscenter=&journalnamecommentscenter=&addcomment_contributionflaghidden=}", - "icon": "https://www.letpub.com.cn/images/favicon.ico" - }, - { - "name": "英文DOI", - "url": "https://dx.doi.org/%p{hdl=%s}", - "icon": "https://dx.doi.org/static/img/favicon.png" - }, - { - "name": "剑桥大学知识库", - "url": "https://www.repository.cam.ac.uk/discover?scope=/&query=%s", - "icon": "https://www.repository.cam.ac.uk/themes/Cambridge/images/favicon.ico" - }, - { - "name": "国学宝典", - "url": "http://www.gxbd.com/#p{#entry_my_adv=%s&click(#entry_my_adv+input)}" - }, - { - "name": "汉语大词典", - "url": "https://www.hanyudacidian.cn/#p{[type\\=search]=%s&click(#com-search-button)}" - }, - { - "name": "CALIS联合目录", - "url": "http://opac.calis.edu.cn/opac/doSimpleQuery.do%p{condition=%s&query=(cql.anywhere=\"*%s*\")&pageno=1&pagingType=0&version=1.1&maximumRecords=50&startRecord=1}" - }, - { - "name": "影印古籍丛书", - "url": "http://39.98.95.7:90/default/search#p{.search-query=%s&click(#search)}" - }, - { - "name": "以观书法", - "url": "https://web.ygsf.com/#p{click(.m-navigator>li:last-child)&sleep(1000)&input.van-field__control=%s&click(.van-search__action>div)}" - }, - { - "name": "汉语大字典", - "url": "http://www.homeinmists.com/hd/search2.html#p{#queryString1=%s&click(#queryString1+input)}" - }, - { - "name": "中华古籍", - "url": "http://bib.ancientbooks.cn/docGuji/shuMuSearch.jspx%p{searchType=1&bookType=0&title=%s}#from{docGuji/}" - } - ] - }, - { - "type": "网盘", - "icon": "cloud-download", - "sites": [ - { - "name": "百度网盘", - "url": "https://pan.baidu.com/disk/home?#/search?key=%s", - "icon": "https://nd-static.bdstatic.com/m-static/v20-main/favicon-main.ico" - }, - { - "name": "大力盘", - "url": "https://www.dalipan.com/search?keyword=%s" - }, - { - "name": "大圣盘", - "url": "https://www.dashengpan.com/search?keyword=%s" - }, - { - "name": "罗马盘", - "url": "https://www.luomapan.com/search?keyword=%s" - }, - { - "name": "小白盘", - "url": "https://www.xiaobaipan.com/list-%s.html?from=1", - "icon": "https://www.xiaobaipan.com/static/assets/ico/favicon.png" - }, - { - "name": "56网盘", - "url": "https://www.56wangpan.com/search/kw%s" - }, - { - "name": "凌风云", - "url": "https://www.lingfengyun.com/Search/Search?wd=%s" - }, - { - "name": "优聚搜", - "url": "https://v3.ujuso.com/#/main?kw=%s", - "icon": "https://cdn-1251935463.file.myqcloud.com/jujuso/favicon-32x32.png" - }, - { - "name": "夸克网盘搜索", - "url": "https://kzurl01.cn/LfJrE#p{#search=%s&click(#submitSearch)}", - "match": "http://kl\\.kelezj\\.com/apps/index\\.html\\?" - }, - { - "name": "小猪快盘,网盘搜索", - "url": "https://www.xiaozhukuaipan.com/s/search?q=%s", - "icon": "https://www.xiaozhukuaipan.com/media/img/logo/favicon.ico" - }, - { - "name": "盘么么", - "url": "http://www.panmeme.com/query?key=%s" - }, - { - "name": "网盘搜索-小白盘", - "url": "https://www.xiaobaipan.com/?k=%s", - "icon": "https://www.xiaobaipan.com/static/assets/ico/favicon.png" - }, - { - "name": "热盘搜", - "url": "http://www.repanso.com/q?wd=%s" - }, - { - "name": "好去网", - "url": "https://www.haogow.com/search?keyword=%s", - "icon": "https://www.haogow.com/template/default/images/favicon.ico" - }, - { - "name": "V盘搜", - "url": "http://www.vpansou.com/query?wd=%s" - }, - { - "name": "百度网盘搜索", - "url": "https://aizhaomu.com/search/kw%p{keyword=%s}" - }, - { - "name": "搜度网", - "url": "http://www.sodu123.com/sodu/so.php?q=%s" - }, - { - "name": "盘搜网", - "url": "http://www.pansou.com/?q=%s" - }, - { - "name": "fastsoso网盘搜索", - "url": "https://www.fastsoso.cn/search?k=%s" - }, - { - "name": "51搜盘", - "url": "http://www.51sopan.cn/search?&time=2keywords=%s", - "icon": "http://www.51sopan.cn/img/favicon.ico" - }, - { - "name": "两仪鸟搜索", - "url": "http://www.baiduyunsousou.com/search?kw=%s", - "icon": "http://www.baiduyunsousou.com/dist/images/logo/e_m.png" - }, - { - "name": "微盘搜索", - "url": "http://www.vpanso.com/s?wd=%s" - }, - { - "name": "云盘搜索大师", - "url": "https://www.xxhh360.com/search?q=%s" - }, - { - "name": "盘大大", - "url": "https://www.pandada.net/all/s-ypzdn%s.html", - "icon": "https://static.pandada.net/img/favicon.ico" - }, - { - "name": "众人搜索网", - "url": "http://wangpan.renrensousuo.com/jieguo?q=%s" - }, - { - "name": "猪猪盘", - "url": "http://www.zhuzhupan.com/search?query=%s" - }, - { - "name": "猫狸盘搜", - "url": "https://www.alipansou.com/search?k=%s" - }, - { - "name": "小马盘", - "url": "https://www.xiaomapan.com/#/main/search?keyword=%s" - }, - { - "name": "来搜一下", - "url": "https://www.laisoyixia.com/s/search?q=%s", - "icon": "https://www.laisoyixia.com/media/image/logo/favicon.ico" - }, - { - "name": "xxggg", - "url": "http://xxggg.net/app/index.html?name=%s&id=test&token=i69" - }, - { - "name": "440066", - "url": "http://440066.cn/app/index.html?name=%s&id=test&token=i69" - }, - { - "name": "9dups", - "url": "http://www.9dups.com/app/index.html?name=%s&id=test&token=u3vp96f4b5o" - }, - { - "name": "kkkob", - "url": "http://m.kkkob.com/apps/index.html?name=%s&token=nevv7nb902" - } - ] - }, - { - "type": "下载", - "icon": "download", - "sites": [ - { - "name": "BTDigg", - "url": "https://btdig.com/search?q=%s" - }, - { - "name": "Btsow", - "url": "https://btsow.com/search/%s", - "icon": "https://btsow.bar/app/bts/View/img/favicon.ico", - "match": "btsow\\..*/search/" - }, - { - "name": "torrentkitty", - "url": "https://www.torrentkitty.app/search/%s" - }, - { - "name": "idope", - "url": "https://idope.se/torrent-list/%s", - "icon": "https://idope.se/static/search/pc/img/favicon.ico" - }, - { - "name": "limetorrents.co", - "url": "https://www.limetorrents.co/search/all/%s" - }, - { - "name": "limetorrents.asia", - "url": "https://www.limetorrents.asia/search/all/%s" - }, - { - "name": "limetorrents.pro", - "url": "https://www.limetor.pro/search/all/%s" - }, - { - "name": "cdsoso", - "url": "https://www.cdsoso.cc/searches-%s-hot-1-null.html" - }, - { - "name": "射手网(伪)", - "url": "https://assrt.net/sub/?searchword=%s" - }, - { - "name": "sub HD", - "url": "https://subhd.la/search/%s", - "icon": "https://img.huo720.com/favicon-32x32.png" - }, - { - "name": "Subscene", - "url": "https://subscene.com/subtitles/searchbytitle:p{query=%s}" - }, - { - "name": "R3SUB", - "url": "https://r3sub.com/search.php?s=%s" - }, - { - "name": "Torrentz2", - "url": "https://www.torrentz2.xyz/?q=%s" - }, - { - "name": "Torrentz2k", - "url": "https://torrentz2k.xyz/search/:p{q=%s&category=all}" - }, - { - "name": "1337x.to", - "url": "https://www.1377x.to/search/%s/1/" - }, - { - "name": "Torlock", - "url": "https://www.torlock2.com/all/torrents/%s.html" - }, - { - "name": "TD", - "url": "https://www.torrentdownloads.me/search/?search=%s" - }, - { - "name": "rarbgprx", - "url": "https://rarbgprx.org/torrents.php?search=%s" - }, - { - "name": "rarbgproxy", - "url": "https://rarbgproxy.org/torrents.php?search=%s" - }, - { - "name": "kickass(镜像1)", - "url": "https://kat.sx/search.php?q=%s", - "icon": "https://kat.sx/kastatic/favicon.ico" - }, - { - "name": "kickasstorrents", - "url": "https://kickasstorrents.to/usearch/%s" - }, - { - "name": "kickass1.to", - "url": "https://kickass1.to/usearch/%s/" - }, - { - "name": "kat.am", - "url": "https://kat.am/usearch/%s/" - }, - { - "name": "kickasstorrent.cr", - "url": "https://kickasstorrent.cr/usearch/%s/" - }, - { - "name": "6v电影", - "url": "https://www.hao6v.tv/e/search/index.php%p{show=title%2Csmalltext&tempid=1&keyboard=%s&tbname=article}", - "charset": "GBK" - } - ] - }, - { - "type": "福利", - "icon": "female", - "match": "t66y\\.com", - "selectTxt": true, - "sites": [ - { - "name": "JAVlibrary", - "url": "http://www.javlibrary.com/cn/vl_searchbyid.php?keyword=%s", - "icon": "data:image/x-icon;base64,AAABAAEAEBAAAAAAIAA3AQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAP5JREFUeJylkzFKBDEUhr+3SQZdF8vFxmobwT2AtXgHCzsbQbyANuJVbLyAnR7BTlFBrGwUsRBcGdckz2JFd5zMzA7+Vf6Q9+XPSyIfc2fKP9RJznYNZncZpBkgpQQC2fvGjx3Pn7dLIP2seds6gD6N0YccgHj63AiwpQSrPbCC374injy2BHQN7mJtMnbp/v5VYZXZXPo1ruIKsg6yspAGYKeKTBpgj4fo7WgGQEUAffksllQC+g73uk7YukRHAfGKRiXs3dQApurtwYBwdI8Me4gAi5a4f1c+UjroROZwUPAhASj2II/w5iEP4PXbB/zOdeWTLv+FlprttdToC7F9R7urpLwHAAAAAElFTkSuQmCC" - }, - { - "name": "Jable", - "url": "https://jable.tv/search/%s", - "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAmklEQVQ4jWP4m9xX9y+p9+e/pL7/pOHen3+T++oYyNMMxz8ZKND8/19S33/CBmRM+v9v3dH//5qWkmlA/vT///////9v8d5RAxbvoacByf0IdvcaiAEzt5FgwPxd//89efP/351n////+v3//5uP///lTCXBgKKZkEDbcOz/vwW7///LnUZBSiSAKcxMvT8ZyM/OfT//J/fVAQB8gvyNVegtUAAAAABJRU5ErkJggg==", - "nobatch": true - }, - { - "name": "JavDB", - "url": "https://javdb.com/search?q=%s.replace(/\\-/,\"_\")" - }, - { - "name": "JavMenu", - "url": "https://javmenu.com/search?wd=%s", - "icon": "https://javmenu.com/assets/images/logo.png", - "match": "^https://javmenu\\.com/.*search" - }, - { - "name": "MissAV", - "url": "https://missav.com/search/%s", - "icon": "https://cdn26.akamai-content-network.com/img/favicon.ico" - }, - { - "name": "nhentai", - "url": "https://nhentai.net/search/?q=%s" - }, - { - "name": "ExHentai", - "url": "https://exhentai.org/?f_search=%s" - } - ] - }, - { - "type": "ACG", - "icon": "gamepad", - "sites": [ - { - "name": "nyaa.si", - "url": "https://nyaa.si/?f=0&c=0_0&q=%s", - "icon": "https://nyaa.si/static/favicon.png" - }, - { - "name": "Tokyotosho", - "url": "https://www.tokyotosho.info/search.php?terms=%s" - }, - { - "name": "Mikan", - "url": "http://mikanani.me/Home/Search?searchstr=%s" - }, - { - "name": "*MioBT*", - "url": "http://www.miobt.com/search.php?keyword=%s", - "icon": "http://www.miobt.com/images/favicon/miobt.ico" - }, - { - "name": "shana project", - "url": "https://www.shanaproject.com/search/?title=%s" - }, - { - "name": "简单动漫", - "url": "https://www.36dm.com/search.php?keyword=%s" - }, - { - "name": "KOTOMI RSS", - "url": "https://moe4sale.in/?kw=%s" - }, - { - "name": "ACG.RIP", - "url": "https://acg.rip/?term=%s" - }, - { - "name": "Glodls", - "url": "https://glodls.to/search_results.php?search=%s" - }, - { - "name": "AcgnX Ero", - "url": "https://www.anix.moe/search.php?sort_id=0&keyword=%s" - }, - { - "name": "AniRena", - "url": "https://www.anirena.com/?s=%s" - }, - { - "name": "GGBases", - "url": "http://www.ggbases.com/search.so?title=%s", - "description": "GGBases is a torrent site dedicated to h-games, gal-games and anime. Tags hgame, h-game, doujin game, galgame, RPG" - }, - { - "name": "爱恋动漫BT", - "url": "https://www.kisssub.org/search.php?keyword=%s", - "icon": "https://www.kisssub.org/images/favicon/kisssub.ico" - }, - { - "name": "VCB-Studio", - "url": "https://vcb-s.com/?s=%s", - "icon": "https://vcb-s.com/wp-content/customRes/favicon@48.png", - "description": "BD 动画下载,收藏级" - }, - { - "name": "金手指", - "url": "https://duckduckgo.com/?q=%s+cheat+tables+site%3Aforum.cheatengine.org&t=ffab&atb=v318-7&ia=web" - } - ] - }, - { - "type": "Etc", - "icon": "suitcase", - "sites": [ - { - "name": "邮编库", - "url": "http://www.youbianku.com/%s" - }, - { - "name": "AMO", - "url": "https://addons.mozilla.org/zh-CN/firefox/search/?q=%s" - }, - { - "name": "企查查", - "url": "https://www.qcc.com/search?key=%s", - "match": "^https?:\\/\\/www\\.qcc\\.com\\/(?:web|firm|search)" - }, - { - "name": "天眼查", - "url": "https://www.tianyancha.com/search?key=%s", - "match": "^https?:\\/\\/www\\.tianyancha\\.com\\/(?:search|company)" - }, - { - "name": "中國大陸地方志書目查詢系統", - "url": "https://webgis.sinica.edu.tw/place/query.asp?A1=%E5%9C%B0%E6%96%B9%E5%BF%97%E5%90%8D&B1=containing&C1=%s&Page_setup=10&D1=AND&A2=99&B2=containing&C2=&D2=AND&A3=99&B3=containing&C3=&page=1", - "charset": "Big5" - }, - { - "name": "金山文档 · 一起办公才高效", - "url": "https://edu.kdocs.cn/?show=all#p{#app input.kdv-input__inner=%s}" - } - ] - }, - { - "type": "Github", - "icon": "fa-brands fa-github ", - "match": "github\\.com", - "selectLink": true, - "selectPage": true, - "openInNewTab": true, - "sites": [ - { - "name": "页面镜像 - Fastgit", - "url": "%u.replace(/https:\\/\\/github\\.com/,\"https://hub.fastgit.xyz\")", - "kwFilter": "https:\\/\\/github\\.com" - }, - { - "name": "Raw镜像 - Fastgit", - "url": "%t.replace(/raw\\.githubusercontent\\.com/,\"raw.fastgit.org\").replace(/github.com(.*)\\/blob\\/(.*)/,\"raw.fastgit.org$1/$2\")", - "kwFilter": "github.com.*\\/blob\\/" - }, - { - "name": "Assets镜像 - Fastgit", - "url": "%t.replace(/github\\.githubassets\\.com/,\"assets.fastgit.orgz\")", - "kwFilter": "github\\.githubassets\\.com" - }, - { - "name": "Download镜像- Fastgit", - "url": "%t.replace(/github\\.com(.*\\/download\\/)/,\"download.fastgit.org$1\")", - "kwFilter": "github\\.com.*\\/download\\/" - }, - { - "name": "Archive镜像- Fastgit", - "url": "%t.replace(/github\\.com(.*\\/archive\\/)/,\"download.fastgit.org$1\")", - "kwFilter": "github\\.com.*\\/archive\\/" - }, - { - "name": "Ghproxy镜像加速", - "url": "https://ghproxy.com/%t" - } - ] - }, - { - "type": "VIP", - "icon": "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgc3R5bGU9ImhlaWdodDogMWVtO2ZpbGw6IHdoaXRlO292ZXJmbG93OiBoaWRkZW47IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iODI3Ij48cGF0aCBkPSJNNjgzLjE5NTM2MyA1NjcuNjE1NDY5djM0OS4xNDQzOTloNzMuMzY5NDQyVjc4OS45NzUwMTdjMTE3LjI2ODMxMiAxLjczOTU4MiAxNzYuNzIxMDk1LTMuNDc5MTY1IDE5My4xOTU5NjItMTAzLjU1NjMxIDUuMjE4NzQ3LTI5LjI2NTkxNC01LjIxODc0Ny02Mi4xMTMzMjEtMTguMjE0NDQ5LTgwLjEyMzExNC0zOC42ODAxMjQtNTIuMzkyMTI2LTE1NS4wMjc0ODEtMzkuMzk2NDIzLTI0OC4zNTA5NTUtMzguNjgwMTI0ek03NTYuNTY0ODA1IDczMC42MjQ1NjN2LTEwMS44MTY3MjhjNTQuNDM4NjkzLTEuNzM5NTgyIDExMi4wNDk1NjUtNy43NzY5NTYgMTIxLjU2NjEwMyAzNi4yMjQyNDMgMTUuNjU2MjQxIDczLjU3NDA5OC02MC4zNzM3MzggNjcuMzMyMDY4LTEyMS41NjYxMDMgNjUuNTkyNDg1ek01NDEuODc5ODg0IDU2OS4zNTUwNTFjMC44MTg2MjcgMTE1LjUyODczIDAuODE4NjI3IDIzMS44NzYwODcgMS43Mzk1ODIgMzQ3LjQwNDgxN2g3MS42Mjk4NTlWNTY3LjYxNTQ2OWMtMjQuMTQ5NDk1IDEuMDIzMjg0LTQ4LjQwMTMxOSAxLjAyMzI4NC03My4zNjk0NDEgMS43Mzk1ODJ6TTY4MC43Mzk0ODIgMTAyLjEyMzcxM2MtMTEzLjA3Mjg0OSAxMTIuODY4MTkyLTIyNS44Mzg3MTMgMjI0LjkxNzc1OC0zMzkuNzMwMTg5IDMzNy45OTA2MDdWMTAyLjEyMzcxM0g2Ny42OTAyMTdjMC44MTg2MjcgMjIuNDA5OTEzIDAuODE4NjI3IDQ1LjYzODQ1MyAxLjczOTU4MiA2OC4xNTA2OTVoNjYuNDExMTEydjc0NS45NzM4MThjMjcxLjU3OTQ5NC0yNzEuNzg0MTUxIDU0Mi4zNDAzNjItNTQyLjU0NTAxOCA4MTMuOTE5ODU2LTgxNC4xMjQ1MTNINjgwLjczOTQ4MnoiIHAtaWQ9IjgyOCIvPjwvc3ZnPg==", - "match": "v\\.qq\\.com/x/|\\.mgtv\\.com/.*b/|v\\.youku\\.com/(v_show|video)/|\\.iqiyi\\.com/(v_|dianying)", - "sites": [ - { - "name": "无名小站", - "url": "https://www.administratorw.com/video.php?url=%u" - }, - { - "name": "小小解析", - "url": "http://tv.hzwdd.cn/#p{#url=%u&click(.btn-play)}", - "icon": "http://tv.hzwdd.cn/img/favicon.ico" - } - ] - }, - { - "type": "辅助工具", - "icon": "list-alt", - "selectTxt": true, - "selectImg": true, - "selectAudio": true, - "selectVideo": true, - "selectLink": true, - "selectPage": true, - "openInNewTab": true, - "sites": [ - { - "name": "手机号码聚合搜索", - "url": "[\"360\",\"搜狗\"]", - "icon": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwRGBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQqHBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/wAARCABAAEADASIAAhEBAxEB/8QAHAABAAICAwEAAAAAAAAAAAAAAAMIAgcBBQYE/8QAMxAAAQMDAgIIBAYDAAAAAAAAAQIDBAAFEQYSByEIEzFBUWFxgRQyUmIVIzNCkbFyoeH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AsPSlKBSlKBSo2X2pDfWR3UPI+ptYUP5FSUClKUCo33kRo7j7ytrbSCtZxnAAyf8AQqSsHWkPtLacGUOJKFehGD/dBU2+9JPV0nVZmWFbUK0tL/Kgusoc61Hi4rGcn7SMd3jVotPXpjUel7deY6drU+KiQEZzt3JyU+xyPaqFXSzvWvUsuzyilp6NKVGWpw4CSle3JPh31efQ2mjo/QtrsJkiUuExtU8OxaiSo4+3KiB5YoNbWXTvC3VE5Y4cXuTp2+N5KfgH3WHQR4su8lp8QO6vWaT1beIepTozXoZ/GOrL0C4sJ2s3NodpA/a4O9Pr79XJjwuLFsukOdZ3dPaxsTiercKwXojpG5paHU43IVjs/wCGun1FepWqeAto10W+rvtifbmBSU7T1rboaeH+Khzx2dlBuqlRsPIkR232vkdQFp9CMj+6koFKUoKxdJPh29DvA1pbGSqJL2t3AJH6ToGErPkoADP1D7hXp+CfGy33GzxdNatmIiXGKgMxpT6tqJKBySkqPILA5c/m5d9bvmQ41whPRJzDciM+gtutOp3JWk8iCO8VWriJ0bJ8OS7cNAH4yIolRtzqwHmvJCjyWPI4V60G/NSa40zo8sDUl4jQFyRlpC8qUseOEgnHn2V9tl1BZdRRS/YbnDuLKcbjGdSvbnxA5j3FUKvFrvNrkiPfYc2I80OrCJba0FIHcN3d6VtLo22K+yuIyLzBS41aYbbiJrx5Id3IIS0PqO7ary258MhbalKUClKUClKUGDrTb7ex9CXUH9riQofwa4ZYajtBqO0hptPYhtISB7CpKUClKUH/2Q==" - }, - { - "name": "🧮 计算器", - "url": "calculator://" - }, - { - "name": "🔎 Everything搜索", - "url": "ES://%s" - }, - { - "name": "🦊 打开火狐", - "url": "FirefoxURL-308046B0AF4A39CB://%u" - }, - { - "name": "⏰ 时钟", - "url": "ms-clock://" - }, - { - "name": "✂️ 屏幕截图", - "url": "ms-screenclip://" - }, - { - "name": "☑️ ToDo", - "url": "ms-todo://", - "description": "微软To-Do" - }, - { - "name": "📓 Onenote", - "url": "onenote://" - }, - { - "name": "⌨️ VSCode", - "url": "vscode://%u" + "name": "⌨️ VSCode", + "url": "vscode://%u" }, { "name": "提取文本中链接并打开", @@ -1788,124 +807,6 @@ switch (lang) { } ] }, - { - "type": "一键搜题", - "icon": "question", - "sites": [ - { - "name": "答案网", - "url": "https://www.zqnf.com/Search.html:p{Skey=%s}" - }, - { - "name": "作业无忧", - "url": "https://www.xilvedu.cn/search.aspx?key=%s" - }, - { - "name": "问答库", - "url": "https://www.asklib.com/s/%s" - }, - { - "name": "简答题", - "url": "https://www.jiandati.com/search.aspx?key=%s" - }, - { - "name": "刷刷题", - "url": "https://www.shuashuati.com/s?word=%s" - }, - { - "name": "题库网", - "url": "https://so.tikuol.com/?q=%s" - }, - { - "name": "PP题库", - "url": "https://www.ppkao.com/so/?q=%s", - "icon": "https://m.ppkao.com/favicon.ico" - }, - { - "name": "查题吧", - "url": "https://www.chatiba.com/s?s=%s" - }, - { - "name": "考试宝", - "url": "https://so.kaoshibao.com/search/question?keyword=%s" - }, - { - "name": "我要搜题网", - "url": "https://www.woyaosouti.com/search?content=%s" - } - ] - }, - { - "type": "地图", - "icon": "map", - "sites": [ - { - "name": "高德地图", - "url": "https://ditu.amap.com/search?query=%s" - }, - { - "name": "百度地图", - "url": "https://map.baidu.com/search/?querytype=s&wd=%s" - }, - { - "name": "谷歌地图", - "url": "https://www.google.com/maps/?q=%s" - }, - { - "name": "Bing地图", - "url": "https://cn.bing.com/maps?q=%s" - }, - { - "name": "腾讯地图", - "url": "https://map.qq.com/#p{#PoiSearch=%s}" - }, - { - "name": "360地图", - "url": "https://map.so.com/#p{.search-box input=%s&click(.action-container>.search)}" - } - ] - }, - { - "type": "常用", - "icon": "fire", - "selectTxt": true, - "selectImg": true, - "selectAudio": true, - "selectVideo": true, - "selectLink": true, - "selectPage": true, - "openInNewTab": true, - "sites": [ - { - "name": "谷歌翻译", - "url": "[\"谷歌翻译\"]" - }, - { - "name": "微信搜索", - "url": "[\"微信搜索\"]" - }, - { - "name": "🔎 Everything搜索", - "url": "[\"🔎 Everything搜索\"]" - }, - { - "name": "去除网页限制", - "url": "[\"限制去除\"]" - }, - { - "name": "编辑当前网页", - "url": "[\"编辑当前网页\"]" - }, - { - "name": "小纸条", - "url": "https://u.gitcafe.net/#p{#wp-filter-search-input=%s}" - }, - { - "name": "雕龍", - "url": "https://libvpn.nankai.edu.cn/https/77726476706e69737468656265737421e4fc0f9f222061557d468aa3951b203b/ancientc/ancientkm#p{sleep(1000)&click(.menu_bg>ul>li:nth-child(3)>a)&td>input[type\\=text]=%s&click(input[title\\='查詢'])}" - } - ] - }, { "type": "视频", "icon": "circle-play", From fc8119ecef65882d094397a4491a480c13f5ab76 Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 19 Mar 2024 14:49:23 +0800 Subject: [PATCH 775/812] Update searchJumperDefaultConfig.js --- SearchJumper/searchJumperDefaultConfig.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SearchJumper/searchJumperDefaultConfig.js b/SearchJumper/searchJumperDefaultConfig.js index 3795162a078..e6302cc89db 100644 --- a/SearchJumper/searchJumperDefaultConfig.js +++ b/SearchJumper/searchJumperDefaultConfig.js @@ -242,6 +242,12 @@ switch (lang) { "name": "百度 ", "url": "[\"百度\"]" }, + { + "name": "Google", + "url": "https://www.google.com/search?q=%s&ie=utf-8&oe=utf-8", + "keywords": "textarea[name='q']", + "match": "https://www\\.google\\..*/search(?!.*tbm=isch)" + }, { "name": "📄 复制", "url": "c:%sr", From 2e924b6c45321d12c90b4a2f6591cebae68fc59c Mon Sep 17 00:00:00 2001 From: hoothin Date: Tue, 19 Mar 2024 15:50:58 +0800 Subject: [PATCH 776/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 57 ++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 26c2055c815..9cc6602447d 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.77 +// @version 1.7.78 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -1206,7 +1206,7 @@ setTimeout( checkReady, 100 ); } - var logoBtn, searchBar, searchTypes = [], currentSite = false, disableState = false, cacheKeywords, tipsStorage, localKeywords, lastSign, inPagePostParams, cacheIcon, historySites, historyType, sortTypeNames, sortSiteNames, cachePool = [], cacheFontPool = [], currentFormParams, globalInPageWords, navEnable, referrer, disableHighlight, lastAddType, allPageNewMode = false; + var logoBtn, searchBar, searchTypes = [], currentSite = false, disableState = false, cacheKeywords, cacheFilter, tipsStorage, localKeywords, lastSign, inPagePostParams, cacheIcon, historySites, historyType, sortTypeNames, sortSiteNames, cachePool = [], cacheFontPool = [], currentFormParams, globalInPageWords, navEnable, referrer, disableHighlight, lastAddType, allPageNewMode = false; const logoBtnSvg = `${_GM_info.script.name}`; const logoBase64 = "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic2VhcmNoLWp1bXBlci1sb2dvQnRuU3ZnIiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0uNzM2IDUxMC40NjRjMC0yODEuOTQyIDIyOC4zMzUtNTEwLjUgNTEwLTUxMC41IDEzNS4yNiAwIDI2NC45ODEgNTMuNzg0IDM2MC42MjUgMTQ5LjUyMiA5NS42NDMgOTUuNzM3IDE0OS4zNzUgMjI1LjU4NSAxNDkuMzc1IDM2MC45NzggMCAyODEuOTQtMjI4LjMzNSA1MTAuNS01MTAgNTEwLjUtMjgxLjY2NSAwLTUxMC0yMjguNTYtNTEwLTUxMC41em01MTAtNTEwLjV2MTAyMW0tNTEwLTUxMC41aDEwMjAiIGZpbGw9IiNmZWZlZmUiLz48cGF0aCBkPSJNMjM3LjQ0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek02OTkuOTA0IDM0Ni42MjRhNDguNjQgNDguNjQgMCAxIDAgOTcuMjggMCA0OC42NCA0OC42NCAwIDEgMC05Ny4yOCAwek00MjMuMjk2IDc1OS4yOTZjLTY0IDAtMTE1LjcxMi01Mi4yMjQtMTE1LjcxMi0xMTUuNzEyIDAtMjYuNjI0IDkuMjE2LTUyLjIyNCAyNS42LTcyLjcwNCA5LjIxNi0xMS43NzYgMjYuMTEyLTEzLjMxMiAzNy44ODgtNC4wOTZzMTMuMzEyIDI2LjExMiA0LjA5NiAzNy44ODhjLTkuMjE2IDExLjI2NC0xMy44MjQgMjQuNTc2LTEzLjgyNCAzOC45MTIgMCAzNC4zMDQgMjcuNjQ4IDYxLjk1MiA2MS45NTIgNjEuOTUyczYxLjk1Mi0yNy42NDggNjEuOTUyLTYxLjk1MmMwLTQuMDk2LS41MTItOC4xOTItMS4wMjQtMTEuNzc2LTIuNTYtMTQuODQ4IDYuNjU2LTI4LjY3MiAyMS41MDQtMzEuNzQ0IDE0Ljg0OC0yLjU2IDI4LjY3MiA2LjY1NiAzMS43NDQgMjEuNTA0IDEuNTM2IDcuMTY4IDIuMDQ4IDE0LjMzNiAyLjA0OCAyMi4wMTYtLjUxMiA2My40ODgtNTIuMjI0IDExNS43MTItMTE2LjIyNCAxMTUuNzEyeiIgZmlsbD0iIzMzMyIvPjxwYXRoIGQ9Ik02MDIuMDggNzYwLjI5NmMtNjQgMC0xMTUuNzEyLTUyLjIyNC0xMTUuNzEyLTExNS43MTIgMC0xNC44NDggMTIuMjg4LTI3LjEzNiAyNy4xMzYtMjcuMTM2czI3LjEzNiAxMi4yODggMjcuMTM2IDI3LjEzNmMwIDM0LjMwNCAyNy42NDggNjEuOTUyIDYxLjk1MiA2MS45NTJzNjEuOTUyLTI3LjY0OCA2MS45NTItNjEuOTUyYzAtMTUuMzYtNS42MzItMzAuMjA4LTE1Ljg3Mi00MS40NzItOS43MjgtMTEuMjY0LTkuMjE2LTI4LjE2IDIuMDQ4LTM3Ljg4OCAxMS4yNjQtOS43MjggMjguMTYtOS4yMTYgMzcuODg4IDIuMDQ4IDE5LjQ1NiAyMS41MDQgMjkuNjk2IDQ4LjY0IDI5LjY5NiA3Ny44MjQgMCA2Mi45NzYtNTIuMjI0IDExNS4yLTExNi4yMjQgMTE1LjJ6IiBmaWxsPSIjMzMzIi8+PGVsbGlwc2Ugcnk9IjU4IiByeD0iMTI1IiBjeT0iNTA2LjI4NCIgY3g9IjIwMS4xODMiIGZpbGw9IiNmYWYiLz48ZWxsaXBzZSByeT0iNTgiIHJ4PSIxMjUiIGN5PSI1MDYuMjg0IiBjeD0iODIzLjE4MyIgZmlsbD0iI2ZhZiIvPjwvc3ZnPg=="; const noImgBase64 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDI5LjAxMzMzMyA2NDBBMzIgMzIgMCAwIDEgMzg0IDU5NC45ODY2NjdsMzcuNzYtMzcuNzYtMjIuODI2NjY3LTIyLjYxMzMzNC0xMzUuNjggMTM1LjY4IDkwLjQ1MzMzNCA5MC40NTMzMzQgMTM1LjY4LTEzNS42OC0yMi42MTMzMzQtMjIuNjEzMzM0ek01MzQuNjEzMzMzIDM5OC45MzMzMzNsMjIuNjEzMzM0IDIyLjYxMzMzNEw1OTQuOTg2NjY3IDM4NEEzMiAzMiAwIDAgMSA2NDAgNDI5LjAxMzMzM2wtMzcuNzYgMzcuNzYgMjIuNjEzMzMzIDIyLjYxMzMzNCAxMzUuNjgtMTM1LjY4LTkwLjQ1MzMzMy05MC40NTMzMzR6IiBmaWxsPSIjNUU1QzVDIj48L3BhdGg+PHBhdGggZD0iTTUxMiAyMS4zMzMzMzNhNDkwLjY2NjY2NyA0OTAuNjY2NjY3IDAgMSAwIDQ5MC42NjY2NjcgNDkwLjY2NjY2N0E0OTAuNjY2NjY3IDQ5MC42NjY2NjcgMCAwIDAgNTEyIDIxLjMzMzMzM3ogbTMxNi44IDM1NC45ODY2NjdsLTE4MS4xMiAxODEuMTJhMzIgMzIgMCAwIDEtNDUuMjI2NjY3IDBMNTU3LjIyNjY2NyA1MTIgNTEyIDU1Ny4yMjY2NjdsNDUuMjI2NjY3IDQ1LjIyNjY2NmEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N2wtMTgxLjEyIDE4MS4xMmEzMiAzMiAwIDAgMS00NS4yMjY2NjcgMGwtMTM1LjY4LTEzNS42OGEzMiAzMiAwIDAgMSAwLTQ1LjIyNjY2N2wxODEuMTItMTgxLjEyYTMyIDMyIDAgMCAxIDQ1LjIyNjY2NyAwTDQ2Ni43NzMzMzMgNTEyIDUxMiA0NjYuNzczMzMzbC00NS4yMjY2NjctNDUuMjI2NjY2YTMyIDMyIDAgMCAxIDAtNDUuMjI2NjY3bDE4MS4xMi0xODEuMTJhMzIgMzIgMCAwIDEgNDUuMjI2NjY3IDBsMTM1LjY4IDEzNS42OGEzMiAzMiAwIDAgMSAwIDQ1LjIyNjY2N3oiIGZpbGw9IiM1RTVDNUMiPjwvcGF0aD4KPC9zdmc+"; @@ -1817,8 +1817,7 @@ .in-input.in-find>.search-jumper-input { pointer-events: all; } - .in-input.in-find>.search-jumper-searchBar, - .in-input.in-pick>.search-jumper-searchBar { + .in-input.in-find>.search-jumper-searchBar { opacity: 0!important; pointer-events: none; transition: none; @@ -5680,16 +5679,17 @@ if (searchData.prefConfig.defaultPicker) { this.togglePicker(); } - if (this.bar.classList.contains("search-jumper-isInPage")) { - //this.lockSearchInput("*"); - this.searchJumperInputKeyWords.value = getSelectStr(); - this.searchInput.focus(); - //this.searchJumperInputKeyWords.focus(); - } else if (!this.searchJumperInputKeyWords.value && currentSite) { + if (!this.searchJumperInputKeyWords.value && currentSite) { this.searchJumperInputKeyWords.value = getKeywords() || cacheKeywords; this.searchJumperInputKeyWords.focus(); this.searchJumperInputKeyWords.select(); - } else this.searchInput.focus(); + } else { + let selStr = getSelectStr(); + if (selStr) { + this.searchJumperInputKeyWords.value = selStr; + } + this.searchInput.focus(); + } let firstType = this.bar.querySelector('.search-jumper-needInPage:not(.notmatch)>span'); if (firstType && !firstType.parentNode.classList.contains('search-jumper-open')) { if (firstType.onmousedown) { @@ -5699,6 +5699,10 @@ firstType.dispatchEvent(mouseEvent); } } + if (cacheFilter) { + this.searchInput.value = cacheFilter; + this.searchInput.dispatchEvent(new Event("input")); + } } else if (this.searchInPageTab.checked) { this.con.classList.add("in-find"); let selStr = getSelectStr(); @@ -5736,6 +5740,9 @@ this.con.classList.toggle("in-pick"); this.searchJumperInputKeyWords.disabled = !this.searchJumperInputKeyWords.disabled; picker.toggle(true); + if (this.searchJumperInputKeyWords.disabled) { + this.searchJumperInputKeyWords.value = ""; + } } hideSearchInput() { @@ -6251,7 +6258,6 @@ }, false); } this.pickerBtn.addEventListener("click", e => { - this.searchJumperInputKeyWords.value = ""; this.togglePicker(); }); this.maxEleBtn.addEventListener("click", e => { @@ -6340,6 +6346,10 @@ } if (siteEle) { self.openSiteBtn(siteEle, forceTarget); + if (cacheFilter !== self.searchInput.value) { + cacheFilter = self.searchInput.value; + storage.setItem("cacheFilter", cacheFilter); + } } }; let inputTimer; @@ -6378,7 +6388,7 @@ } } else { this.searchJumperInputKeyWords.focus(); - if (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) { + if (this.searchJumperInputKeyWords.value || e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) { searchWithCurrentFilter(); } } @@ -6999,13 +7009,15 @@ } else targetList.classList.remove("input-hide"); }); let showType = this.bar.querySelector(".search-jumper-type:not(.input-hide)"); - if (showType && !showType.classList.contains("search-jumper-open")) { - let typeBtn = showType.querySelector("span.search-jumper-btn"); - if (typeBtn.onmousedown) { - typeBtn.onmousedown(); - } else { - let mouseEvent = new PointerEvent("mousedown"); - typeBtn.dispatchEvent(mouseEvent); + if (showType) { + if (!showType.classList.contains("search-jumper-open")) { + let typeBtn = showType.querySelector("span.search-jumper-btn"); + if (typeBtn.onmousedown) { + typeBtn.onmousedown(); + } else { + let mouseEvent = new PointerEvent("mousedown"); + typeBtn.dispatchEvent(mouseEvent); + } } if (this.searchJumperExpand.parentNode == showType) { let mouseEvent = new PointerEvent("click"); @@ -14718,6 +14730,11 @@ resolve(data || ''); }); }); + cacheFilter = await new Promise((resolve) => { + storage.getItem("cacheFilter", data => { + resolve(data || ''); + }); + }); disableState = await new Promise((resolve) => { storage.getItem("disableState", data => { resolve(data || false); From 04072478fa92ce6631450f11460f9ea895d4c964 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 21 Mar 2024 01:49:13 +0000 Subject: [PATCH 777/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 551f7ae0921..44c8adb85d4 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,18 @@ [ +{ + "resource_url": "http://wedata.net/items/86216", + "data": { + "pageElement": "//div[@class='product-list product-list--collection product-list--with-sidebar']", + "nextLink": "//a[@rel='next']", + "url": "^https://jp\\.daisonet\\.com/", + "exampleUrl": "https://jp.daisonet.com/collections/electricity" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "タックン君", + "name": "ダイソーネットストア", + "created_at": "2024-03-20T15:18:37+09:00", + "updated_at": "2024-03-20T15:21:04+09:00" +}, { "resource_url": "http://wedata.net/items/86215", "data": { From d2f4b7a95ccd4c80ef5cc1279d8c1283740ac000 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 23 Mar 2024 01:41:40 +0000 Subject: [PATCH 778/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 44c8adb85d4..bb18d1f34cd 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -25001,17 +25001,17 @@ }, { "resource_url": "http://wedata.net/items/76358", - "name": "小説家になろう 他ユーザーの各ページ", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-10-28T03:35:11+09:00", "data": { - "exampleUrl": "http://mypage.syosetu.com/mypageblog/list/userid/227614/\r\nhttp://mypage.syosetu.com/mypageblog/list/userid/76491/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/227614/blogkey/894986/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=1\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=2\r\nhttp://mypage.syosetu.com/mypagefavnovelmain/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagefavuser/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagenovelhyoka/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypage/reviewlist/userid/88780/\r\nhttp://xmypage.syosetu.com/mypageblog/list/xid/44910/\r\nhttp://xmypage.syosetu.com/mypageblog/view/xid/24986/blogkey/144187/", + "pageElement": "id('bloglistbg bloglist')/div|(id('blogbg')|id('main')/div[@id='blogview']|id('blog_comment')/h3)[not(id('blog_comment')//div[@class='blogcomment_l']/a)]|//div[@class='comment_view']|id('novellist novelpointlist novelreviewlist')/ul|id('favuser')//li|//div[@class='c-novel-list' or contains(concat(' ',@class,' '),' c-panel__list ')]/div", + "nextLink": "//a[@title='next page' or @title='次へ' or ../@class='blogcomment_r']|(id('my_blog_l')|//div[@class='my_blog_l'])/a[not(//a[../@class='blogcomment_r'])]", "url": "^https?://x?mypage\\.syosetu\\.com/mypage", - "pageElement": "id('bloglistbg bloglist')/div|(id('blogbg')|id('main')/div[@id='blogview']|id('blog_comment')/h3)[not(id('blog_comment')//div[@class='blogcomment_l']/a)]|//div[@class='comment_view']|id('novellist novelpointlist novelreviewlist')/ul|id('favuser')//li", - "nextLink": "//a[@title='next page' or ../@class='blogcomment_r']|(id('my_blog_l')|//div[@class='my_blog_l'])/a[not(//a[../@class='blogcomment_r'])]" + "exampleUrl": "http://mypage.syosetu.com/mypageblog/list/userid/227614/\r\nhttp://mypage.syosetu.com/mypageblog/list/userid/76491/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/227614/blogkey/894986/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=1\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=2\r\nhttp://mypage.syosetu.com/mypagefavnovelmain/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagefavuser/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagenovelhyoka/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypage/reviewlist/userid/88780/\r\nhttp://xmypage.syosetu.com/mypageblog/list/xid/44910/\r\nhttp://xmypage.syosetu.com/mypageblog/view/xid/24986/blogkey/144187/\r\nhttps://xmypage.syosetu.com/mypage/novellist/xid/x7149bl/?xid=377112&all=1&all2=1&all3=1&all4=1&p=1" }, - "created_at": "2014-09-21T11:42:50+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "小説家になろう 他ユーザーの各ページ", + "created_at": "2014-09-21T11:42:50+09:00", + "updated_at": "2024-03-23T03:29:17+09:00" }, { "resource_url": "http://wedata.net/items/76357", From 3695c1fba06ca12274f5e6098d352f6a1ed537a6 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 31 Mar 2024 01:53:08 +0000 Subject: [PATCH 779/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index bb18d1f34cd..60833433ef4 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86217", + "data": { + "insertBefore": "", + "pageElement": "//*[not(self::a)][contains(@class,'page-num') or @class='pagechunk']/preceding-sibling::*[1]", + "nextLink": "//a[contains(@id,'lnkNext') or @class='page-num next']", + "url": "^https?://minkara\\.carview\\.co\\.jp/", + "exampleUrl": "https://minkara.carview.co.jp/car/mini/mini/partsreview/ https://minkara.carview.co.jp/car/mini/mini/note/ https://minkara.carview.co.jp/usercar/decotora/ https://minkara.carview.co.jp/note/?ci=1 https://minkara.carview.co.jp/partsreview/?bi=1&ci=1" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "みんカラ 非list", + "created_at": "2024-03-30T10:35:10+09:00", + "updated_at": "2024-03-30T10:35:10+09:00" +}, { "resource_url": "http://wedata.net/items/86216", "data": { @@ -122,14 +137,14 @@ "data": { "pageElement": "//ul[contains(@class,'-list')]", "nextLink": "//a[contains(@id,'lnkNext')]", - "url": "^https:\\/\\/minkara.carview.co.jp\\/", + "url": "^https://minkara\\.carview\\.co\\.jp\\/(this_string_is_required_to_exceed_86217)?", "exampleUrl": "https://minkara.carview.co.jp/search/?q=f-zero&c=0\r\nhttps://minkara.carview.co.jp/blog/\r\nhttps://minkara.carview.co.jp/review/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "foo2", "name": "みんカラ", "created_at": "2024-01-23T11:13:33+09:00", - "updated_at": "2024-01-23T13:20:45+09:00" + "updated_at": "2024-03-30T10:35:57+09:00" }, { "data": { @@ -49163,17 +49178,17 @@ }, { "resource_url": "http://wedata.net/items/25601", - "name": "みんカラ", "data": { - "url": "^https?://minkara\\.carview\\.co\\.jp/", - "pageElement": "//div[@class='mainright']/table[@class='car-table']//tr|//ul[ ../@class='maincontents_body displaymode-detail' or @class='pr_search_result_box' or @class='gallery-list-photo clearfix']/li", - "exampleUrl": "http://minkara.carview.co.jp/en/car/mini/mini/partsreview/? http://minkara.carview.co.jp/en/car/mini/mini/note/ http://minkara.carview.co.jp/en/usercar/decotora/ http://minkara.carview.co.jp/en/note/?ci=1 http://minkara.carview.co.jp/en/partsreview/?bi=1&ci=1", - "nextLink": "//a[contains(@id,'lnkNext') or @class='page-num next']" + "pageElement": "//div[@class='contents'][count(./*)>1]", + "nextLink": "//div[@class='paging']//a[contains(., '>')]", + "url": "^https?://minkara\\.carview\\.co\\.jp/userid/\\d+/blog/", + "exampleUrl": "https://minkara.carview.co.jp/userid/2209010/blog/b/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "x2xx", + "name": "みんカラ ブログ", "created_at": "2008-10-26T01:16:07+09:00", - "updated_at": "2020-04-05T07:13:38+09:00" + "updated_at": "2024-03-30T11:03:00+09:00" }, { "name": "\u3044\u3061\u3054\u3046\u3057\u3064", From 8ce1daba081e59c9017f49874c95df79ab9f4968 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 1 Apr 2024 11:25:55 +0800 Subject: [PATCH 780/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 39 +++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9cc6602447d..0aa48aba85e 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.78 +// @version 1.7.79 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2630,7 +2630,7 @@ height: 35px; position: absolute; user-select: none; - background: transparent; + background: #212022; white-space: nowrap; overflow: hidden; display: flex; @@ -2770,6 +2770,7 @@ pointer-events: none; transition: 0.25s ease; color: #333; + overflow: hidden; } .search-jumper-input svg, .searchJumperNavBar svg { @@ -5791,7 +5792,18 @@ if (disabled) { shadow = this.shadowContainer; } else { - shadow = this.shadowContainer.shadowRoot || this.shadowContainer.attachShadow({ mode: "open" }); + if (this.shadowContainer.shadowRoot) { + shadow = this.shadowContainer.shadowRoot.firstElementChild; + } else { + let shadowRoot = this.shadowContainer.attachShadow({ mode: "open" }); + shadow = document.createElement("div"); + shadow.id = "search-jumper-root"; + shadow.style.display = "none"; + let hideShadowStyle = document.createElement("style"); + hideShadowStyle.innerHTML = createHTML("#search-jumper-root{display: block!important;}"); + shadow.appendChild(hideShadowStyle); + shadowRoot.appendChild(shadow); + } } if (ele.parentNode != shadow) shadow.appendChild(ele); return true; @@ -6346,10 +6358,6 @@ } if (siteEle) { self.openSiteBtn(siteEle, forceTarget); - if (cacheFilter !== self.searchInput.value) { - cacheFilter = self.searchInput.value; - storage.setItem("cacheFilter", cacheFilter); - } } }; let inputTimer; @@ -6387,9 +6395,14 @@ self.openSiteBtn(siteEle, forceTarget); } } else { - this.searchJumperInputKeyWords.focus(); - if (this.searchJumperInputKeyWords.value || e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) { + if (this.searchJumperInputKeyWords.value) { searchWithCurrentFilter(); + } else { + this.searchJumperInputKeyWords.focus(); + } + if (cacheFilter !== self.searchInput.value) { + cacheFilter = self.searchInput.value; + storage.setItem("cacheFilter", cacheFilter); } } break; @@ -6430,6 +6443,10 @@ break; case 13://回车 searchWithCurrentFilter(); + if (cacheFilter !== self.searchInput.value) { + cacheFilter = self.searchInput.value; + storage.setItem("cacheFilter", cacheFilter); + } break; default: break; @@ -7974,7 +7991,7 @@ self.allSiteBtns.push([siteEle, site]); ele.appendChild(siteEle); siteEles.push(siteEle); - if (!site.nobatch) batchSiteNames.push(site.name); + if (!site.nobatch && site.match !== "0") batchSiteNames.push(site.name); if (!isCurrent && !currentSite && (siteEle.dataset.current || match) && !ele.classList.contains("notmatch")) { isCurrent = true; if (siteEle.dataset.current) { @@ -12192,6 +12209,7 @@ let removeMark = node => searchBar.removeMark(node); let highlight = (words, node) => searchBar.highlight(words, node); + let appendBar = () => searchBar.appendBar(); let bodyObserverOptions = { childList: true, characterData: true, @@ -12233,6 +12251,7 @@ }); } } + appendBar(); } }); bodyObserver.observe(getBody(document), bodyObserverOptions); From 645dcfc1ff5474c2238cb35c3066233179a072d0 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Wed, 3 Apr 2024 01:49:19 +0000 Subject: [PATCH 781/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 60833433ef4..b558dcb305a 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,18 +1,32 @@ [ { - "resource_url": "http://wedata.net/items/86217", + "resource_url": "http://wedata.net/items/86218", "data": { "insertBefore": "", - "pageElement": "//*[not(self::a)][contains(@class,'page-num') or @class='pagechunk']/preceding-sibling::*[1]", + "pageElement": "//div[@class='single_page_text']", + "nextLink": "//span[contains(@class, 'current')][number()>0]/following-sibling::a[1]", + "url": "^https://juventus-journal\\.com/archives/\\d+", + "exampleUrl": "https://juventus-journal.com/archives/129133" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "J-JOURNAL 記事", + "created_at": "2024-04-02T18:03:47+09:00", + "updated_at": "2024-04-02T18:03:47+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86217", + "data": { + "pageElement": "//div[contains(@class,'page-num') or @class='pagechunk']/preceding-sibling::*[self::ul[starts-with(@class, 'summary')] or .//a[contains(@href, '/userid/')]]", "nextLink": "//a[contains(@id,'lnkNext') or @class='page-num next']", "url": "^https?://minkara\\.carview\\.co\\.jp/", - "exampleUrl": "https://minkara.carview.co.jp/car/mini/mini/partsreview/ https://minkara.carview.co.jp/car/mini/mini/note/ https://minkara.carview.co.jp/usercar/decotora/ https://minkara.carview.co.jp/note/?ci=1 https://minkara.carview.co.jp/partsreview/?bi=1&ci=1" + "exampleUrl": "https://minkara.carview.co.jp/car/mini/mini/partsreview/ https://minkara.carview.co.jp/car/mini/mini/note/ https://minkara.carview.co.jp/usercar/decotora/ https://minkara.carview.co.jp/note/?ci=1 https://minkara.carview.co.jp/partsreview/?bi=1&ci=1\r\n\r\nhttps://minkara.carview.co.jp/search/?q=f-zero&c=0\r\nhttps://minkara.carview.co.jp/blog/\r\nhttps://minkara.carview.co.jp/review/\r\n\r\nhttps://minkara.carview.co.jp/spot/unit.aspx\r\nhttps://minkara.carview.co.jp/like/1/\r\nhttps://minkara.carview.co.jp/select/\r\nhttps://minkara.carview.co.jp/summary/newly/\r\nhttps://minkara.carview.co.jp/summary/ranking/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa2", - "name": "みんカラ 非list", + "name": "みんカラ", "created_at": "2024-03-30T10:35:10+09:00", - "updated_at": "2024-03-30T10:35:10+09:00" + "updated_at": "2024-04-02T22:19:12+09:00" }, { "resource_url": "http://wedata.net/items/86216", @@ -132,20 +146,6 @@ "created_at": "2024-01-26T21:47:14+09:00", "updated_at": "2024-01-26T21:47:14+09:00" }, -{ - "resource_url": "http://wedata.net/items/86205", - "data": { - "pageElement": "//ul[contains(@class,'-list')]", - "nextLink": "//a[contains(@id,'lnkNext')]", - "url": "^https://minkara\\.carview\\.co\\.jp\\/(this_string_is_required_to_exceed_86217)?", - "exampleUrl": "https://minkara.carview.co.jp/search/?q=f-zero&c=0\r\nhttps://minkara.carview.co.jp/blog/\r\nhttps://minkara.carview.co.jp/review/" - }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_by": "foo2", - "name": "みんカラ", - "created_at": "2024-01-23T11:13:33+09:00", - "updated_at": "2024-03-30T10:35:57+09:00" -}, { "data": { "insertBefore": "", From 372c308fc2239a305d8de0dd5b5dadd17032ce6a Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 4 Apr 2024 01:51:01 +0000 Subject: [PATCH 782/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index b558dcb305a..c45d0ee8505 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86219", + "data": { + "insertBefore": "", + "pageElement": "//ul[contains(concat(' ', @class, ' '), ' usercar-list ')]", + "nextLink": "//a[contains(@id,'lnkNext') or @class='page-num next']", + "url": "^https://minkara\\.carview\\.co\\.jp/usercar/", + "exampleUrl": "https://minkara.carview.co.jp/usercar/\r\nhttps://minkara.carview.co.jp/usercar/decotora/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "みんカラ /usercar/", + "created_at": "2024-04-03T16:29:47+09:00", + "updated_at": "2024-04-03T16:29:47+09:00" +}, { "resource_url": "http://wedata.net/items/86218", "data": { @@ -146,6 +161,20 @@ "created_at": "2024-01-26T21:47:14+09:00", "updated_at": "2024-01-26T21:47:14+09:00" }, +{ + "resource_url": "http://wedata.net/items/86205", + "data": { + "pageElement": "//section[@class='itemlist']/ul", + "nextLink": "//a[contains(@id,'lnkNext')]", + "url": "^https://minkara\\.carview\\.co\\.jp/search/", + "exampleUrl": "https://minkara.carview.co.jp/search/?q=f-zero&c=0" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "foo2", + "name": "みんカラ /search/", + "created_at": "2024-01-23T11:13:33+09:00", + "updated_at": "2024-04-03T18:34:02+09:00" +}, { "data": { "insertBefore": "", From 04e6720fe85ee92675f5c316a4b3db76bfb4f4b2 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sat, 6 Apr 2024 01:43:10 +0000 Subject: [PATCH 783/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index c45d0ee8505..5d702f2d6b7 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -52838,17 +52838,17 @@ }, { "resource_url": "http://wedata.net/items/731", - "name": "ニコニコ動画", - "created_by": "swdyh", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-12-15T17:30:26+09:00", "data": { - "exampleUrl": "http://www.nicovideo.jp/newarrival\r\nhttp://www.nicovideo.jp/mylist_search/test\r\nhttp://www.nicovideo.jp/openlist/sm9\r\nhttp://www.nicovideo.jp/recent\r\nhttp://www.nicovideo.jp/related_tag/test\r\nhttp://www.nicovideo.jp/search/test\r\nhttp://www.nicovideo.jp/tag/test", - "url": "^https?://(?:www|nine)\\.nicovideo\\.jp/(?:newarrival|mylist_search|migiue|openlist|recent|related_tag|search|tag)", - "pageElement": "id('PAGEBODY')/div[starts-with(@class,'content_672')]/*[preceding::table/@class='pager' or preceding-sibling::div[h1][not(count(following::table[@class='pager'])=2)]][following::table/@class='pager'][not(self::script)]|//div[contains(concat(' ',normalize-space(@class),' '), ' main ') or @data-main-contents]/div[contains(@class,'contentBody')]/ul[@class='list']/node()", - "nextLink": "(/descendant::span|//div[@class='pager']/a)[contains(@class,'active') or contains(@class,'here')]/following-sibling::a[1]" + "pageElement": "//div[contains(concat(' ', @class, ' '), ' NewVideosPage-videoList ')]|\r\n//div[contains(concat(' ', @class, ' '), ' OpenlistPage-openList ')]|\r\n//ul[contains(concat(' ', @class, ' '), ' RelatedTagPage-tagList ')]|\r\n//div[contains(concat(' ',normalize-space(@class),' '), ' main ') or @data-main-contents]/div[contains(@class,'contentBody')]/ul[@class='videoListInner']/node()", + "nextLink": "//li[contains(@class, 'current')][number()>0]/following-sibling::li[1]/a[number()>0]|\r\n//div[@class='pager']/a[contains(@class,'active')]/following-sibling::a[1]", + "url": "^https?://www\\.nicovideo\\.jp/(?:newarrival|openlist|recent|related_tag|search|tag)", + "exampleUrl": "http://www.nicovideo.jp/newarrival\r\nhttp://www.nicovideo.jp/openlist/sm9\r\nhttp://www.nicovideo.jp/recent\r\nhttp://www.nicovideo.jp/related_tag/test\r\nhttp://www.nicovideo.jp/search/test\r\nhttp://www.nicovideo.jp/tag/test" }, - "created_at": "2008-04-16T12:36:46+09:00" + "created_by": "swdyh", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "name": "ニコニコ動画", + "created_at": "2008-04-16T12:36:46+09:00", + "updated_at": "2024-04-05T22:43:44+09:00" }, { "resource_url": "http://wedata.net/items/728", From 1ba3a82e3b0a7bdc774d64457f32a50c2856fb2d Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 7 Apr 2024 08:34:48 +0800 Subject: [PATCH 784/812] Update searchJumper.user.js --- SearchJumper/searchJumper.user.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 0aa48aba85e..9c81d76d7c2 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.79 +// @version 1.7.80 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -2770,7 +2770,6 @@ pointer-events: none; transition: 0.25s ease; color: #333; - overflow: hidden; } .search-jumper-input svg, .searchJumperNavBar svg { @@ -6783,6 +6782,7 @@ } checkSearchJump() { + if (this.inPageRuleKey) return; let inPageWords; if (searchData.prefConfig.showInSearchJumpPage && referrer && !disableHighlight) { if (curRef.indexOf(referrer) != -1) { @@ -6816,7 +6816,7 @@ } inSearchEngine() { - if (!this.currentType || !currentSite || inIframe) return; + if (!this.currentType || !currentSite || inIframe || this.inPageRuleKey) return; if (!/sidesearch=(1|true)$/i.test(location.search)) { if (!/#p{/.test(currentSite.url) || currentSite.keywords) { this.appendBar(); From a823b63e10571be17d57e59e3e5bfaebbf57399d Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 7 Apr 2024 01:53:19 +0000 Subject: [PATCH 785/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 5d702f2d6b7..ff5ba466d69 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -4864,14 +4864,14 @@ "data": { "pageElement": "//div[@class=\"interview-container\"]/div[position()>2]", "nextLink": "descendant::div[contains(@class,\"bottom\")][1]//a[not(contains(@class,\"prev\"))]", - "url": "^https://www\\.nintendo\\.co\\.jp/interview/", - "exampleUrl": "https://www.nintendo.co.jp/interview/switch-oled/index.html" + "url": "^https://www\\.nintendo\\.com/jp/interview/", + "exampleUrl": "https://www.nintendo.com/jp/interview/switch-oled/index.html" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m_", "name": "開発者に訊きました 任天堂", "created_at": "2021-10-08T23:17:05+09:00", - "updated_at": "2021-10-09T08:07:07+09:00" + "updated_at": "2024-04-07T07:46:34+09:00" }, { "resource_url": "http://wedata.net/items/85725", From 686928c031a6aa5df305c8bbe0b5719bca3b981c Mon Sep 17 00:00:00 2001 From: hhhllll888 Date: Sun, 7 Apr 2024 11:03:19 +0800 Subject: [PATCH 786/812] =?UTF-8?q?add=20KDays=E8=AE=BA=E5=9D=9B=20rule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pagetual/pagetualRules.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index d62030e7cba..b27d5abe2b1 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10697,5 +10697,12 @@ "name": "pexels", "url": "^https?://www\\.pexels\\.com/", "enable": 0 +}, +{ + "name": "KDays 论坛", + "url": "^https?://bbs2\\.kdays\\.net/search/", + "pageElement": "body > div.wrapper > div.container", + "nextLink": "li.current + li >a", + "author": "hhhllll" } ] From e507b8d099835f134cc8762cd967f1338d8eb501 Mon Sep 17 00:00:00 2001 From: hhhllll888 Date: Sun, 7 Apr 2024 11:31:25 +0800 Subject: [PATCH 787/812] =?UTF-8?q?add=20KDays=20=E8=AE=BA=E5=9D=9B=20and?= =?UTF-8?q?=20igg-games?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pagetual/pagetualRules.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index b27d5abe2b1..2f6a8e825f0 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10699,10 +10699,17 @@ "enable": 0 }, { + "name": "IGGGAMES » Free Download PC Games - Direct Links - Torrent", + "url": "^https?://igg-games\\.com/", + "author": "hhhllll", + "pageElement": "main.tm-main:nth-child(4) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2)", + "nextLink": ".uk-pagination>.uk-active ~ li>a" + }, + { "name": "KDays 论坛", - "url": "^https?://bbs2\\.kdays\\.net/search/", + "url": "^https?://bbs2\\.kdays\\.net/(thread|search)/", "pageElement": "body > div.wrapper > div.container", "nextLink": "li.current + li >a", "author": "hhhllll" -} + } ] From dcb4a569c567e4aea015a2b1ae4cf19bfb5f7f91 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Apr 2024 09:21:31 +0800 Subject: [PATCH 788/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index 2f6a8e825f0..c794faeea20 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -10704,12 +10704,12 @@ "author": "hhhllll", "pageElement": "main.tm-main:nth-child(4) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2)", "nextLink": ".uk-pagination>.uk-active ~ li>a" - }, - { +}, +{ "name": "KDays 论坛", "url": "^https?://bbs2\\.kdays\\.net/(thread|search)/", "pageElement": "body > div.wrapper > div.container", "nextLink": "li.current + li >a", "author": "hhhllll" - } +} ] From 1cad9b84529108c1f5fb561a15f312136063ba53 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Apr 2024 13:56:14 +0800 Subject: [PATCH 789/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 7c34a7164ba..d5f67f18d95 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.32 +// @version 1.9.37.33 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -4785,8 +4785,12 @@ }); checkBtn.addEventListener("click", e => { self.checkInputSelector(); - if (this.selectorInput.value) _GM_setClipboard(this.selectorInput.value); - showTips(i18n("copied")); + if (this.selectorInput.value && self.foundEle) { + debug(self.foundEle); + self.foundEle[0].scrollIntoView({ behavior: "smooth" }); + _GM_setClipboard(this.selectorInput.value); + showTips(i18n("copied")); + } else showTips("Null"); }); xpath.addEventListener("click", e => { if (!selectorInput.value) { @@ -4985,7 +4989,9 @@ this.clearSigns(); if (!this.selectorInput.value) return; let eles = getAllElements(this.selectorInput.value, document); + this.foundEle = null; if (eles && eles.length > 0) { + this.foundEle = eles; eles.forEach(ele => { let sign = self.createSignDiv(); getBody(document).appendChild(sign); From 40ecdbe8eeeedfcae9f30f5a95da5cea259824e5 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 8 Apr 2024 13:56:51 +0800 Subject: [PATCH 790/812] Update README.md --- Pagetual/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 73364ac6192..1621ecb768d 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.32](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.33](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") From c8703d7a1a976e3405c7ff784c091517008a5af4 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 9 Apr 2024 01:49:20 +0000 Subject: [PATCH 791/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index ff5ba466d69..e61b99becce 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -19239,17 +19239,17 @@ }, { "resource_url": "http://wedata.net/items/77750", - "name": "小説家になろう ユーザーページ", - "created_by": "phodra", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-08-25T18:58:43+09:00", "data": { - "exampleUrl": "https://syosetu.com/favnovelmain/list/?nowcategory=1&order=newlist\r\nhttps://syosetu.com/favnovelmain/isnoticelist/\r\nhttps://syosetu.com/usernovelimpression/list/\r\nhttps://syosetu.com/favuser/list/\r\nhttps://syosetu.com/messagebox/top/", + "pageElement": "//ul[contains(concat(' ',@class,' '),' c-up-panel__list ')]/li", + "nextLink": "//div[@class='c-pager']/span[contains(concat(' ',@class,' '),' is-current ')]/following-sibling::a", "url": "^https?://syosetu\\.com/", - "pageElement": "id('favuser writtingnovellist favuser') | //table | //div[@class='novelcomment_list'] | //ul[@class='bloglist']", - "nextLink": "//div[@class='pager_idou']/a[@title='next page'] | //div[@class='page_bar']//a[contains(., '>>')]" + "exampleUrl": "https://syosetu.com/favnovelmain/list/?nowcategory=1&order=newlist\r\nhttps://syosetu.com/favnovelmain/isnoticelist/\r\nhttps://syosetu.com/usernovelimpression/list/\r\nhttps://syosetu.com/favuser/list/\r\nhttps://syosetu.com/messagebox/top/" }, - "created_at": "2016-01-04T01:43:02+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "phodra", + "name": "小説家になろう ユーザーページ", + "created_at": "2016-01-04T01:43:02+09:00", + "updated_at": "2024-04-08T19:51:00+09:00" }, { "resource_url": "http://wedata.net/items/77749", From 729f5bc37d8e1b6d40398b7468848efae4a1af58 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 11 Apr 2024 01:50:36 +0000 Subject: [PATCH 792/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index e61b99becce..cd4fbac391d 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -22857,18 +22857,18 @@ "updated_at": "2020-06-07T06:42:42+09:00" }, { - "resource_url": "http://wedata.net/items/77057", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "pageElement": "//div[@class='topPageNav']/following-sibling::*[./following-sibling::div[@class='btmPageNav']][not(id('kiji'))]|id('kiji')/p[last()]/preceding-sibling::*|id('kiji')/p[last()][./text()]|id('newsListResult')//li", + "pageElement": "//div[@class='topPageNav']/following-sibling::*[./following-sibling::div[@class='btmPageNav']][not(id('kiji'))]|id('kiji')/*|id('newsListResult')//li", "nextLink": "//a[@class='nextPage']|//span[@class='next']/a", "url": "^https://natgeo\\.nikkeibp\\.co\\.jp", - "exampleUrl": "https://natgeo.nikkeibp.co.jp/nng/article/20150312/438925/?P=1 https://natgeo.nikkeibp.co.jp/nng/article/20121107/329698/ https://natgeo.nikkeibp.co.jp/atcl/web/15/050700006/050700001/ https://natgeo.nikkeibp.co.jp/atcl/news/22/013100045/ https://natgeo.nikkeibp.co.jp/nng/news/" + "exampleUrl": "https://natgeo.nikkeibp.co.jp/nng/article/20150312/438925/?P=1 https://natgeo.nikkeibp.co.jp/nng/article/20121107/329698/ https://natgeo.nikkeibp.co.jp/atcl/web/15/050700006/050700001/ https://natgeo.nikkeibp.co.jp/atcl/news/22/013100045/ https://natgeo.nikkeibp.co.jp/atcl/news/24/041000202/?P=1 https://natgeo.nikkeibp.co.jp/nng/news/" }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m", + "resource_url": "http://wedata.net/items/77057", "name": "ナショナルジオグラフィック 日経BP", "created_at": "2015-03-31T18:06:35+09:00", - "updated_at": "2022-02-08T17:14:18+09:00" + "updated_at": "2024-04-10T19:45:55+09:00" }, { "resource_url": "http://wedata.net/items/77056", From bc28e4c2d4fc925928eadc6ce7c1e3b75b9c3f17 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Fri, 12 Apr 2024 01:49:41 +0000 Subject: [PATCH 793/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index cd4fbac391d..a99150e29b2 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -6192,16 +6192,16 @@ { "resource_url": "http://wedata.net/items/85518", "data": { - "pageElement": "//*[./div[contains(@data-href,\"/article/\")]] | //div[@class=\"cmp-thmb002\"]/div[@class=\"wrp\"]", - "nextLink": "//div[@class=\"pager\"]//a[contains(span/text(),\"次\")] | //a[@class=\"lnk next\"]", + "pageElement": "//div[@class='pager']/../preceding-sibling::div[1][contains(@class, '-lst00')]", + "nextLink": "//div[@class='cmp-misc002']//li[@class='is-active']/following-sibling::li[1]/a[number() > 0]", "url": "^https?://www\\.tokyo-np\\.co\\.jp/", - "exampleUrl": "https://www.tokyo-np.co.jp/tokyo/t_news\r\nhttps://www.tokyo-np.co.jp/tokyo/hotweb/1\r\nhttps://www.tokyo-np.co.jp/article_photo/list?article_id=159660&pid=589621" + "exampleUrl": "https://www.tokyo-np.co.jp/tokyo/t_news\r\nhttps://www.tokyo-np.co.jp/tokyo/gururi/1\r\nhttps://www.tokyo-np.co.jp/f/photo/square\r\nhttps://www.tokyo-np.co.jp/beans/recipe\r\nhttps://www.tokyo-np.co.jp/tags/tag_movie\r\nhttps://www.tokyo-np.co.jp/english_articles/covid19_in_english\r\nhttps://www.tokyo-np.co.jp/tags/tokyo140th\r\nhttps://www.tokyo-np.co.jp/n/genpatsu\r\nhttps://www.tokyo-np.co.jp/event/list/buyou" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "brib2", "name": "東京新聞", "created_at": "2020-09-29T21:12:21+09:00", - "updated_at": "2022-02-14T14:20:36+09:00" + "updated_at": "2024-04-11T22:18:50+09:00" }, { "resource_url": "http://wedata.net/items/85517", From 979934f7334852852b1ef20f8aa372e9a903f762 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Sun, 14 Apr 2024 02:54:30 +0000 Subject: [PATCH 794/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index a99150e29b2..793b29a4495 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -10072,17 +10072,17 @@ }, { "resource_url": "http://wedata.net/items/82197", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "pageElement": "//div[@class=\"p-cardList\"]", + "pageElement": "//div[contains(concat(' ', @class, ' '), ' p-cardList ')]", "nextLink": "//link[@rel=\"next\"]", "url": "^https?://www\\.businessinsider\\.jp/.", - "exampleUrl": "https://www.businessinsider.jp/articles/" + "exampleUrl": "https://www.businessinsider.jp/articles/\r\nhttps://www.businessinsider.jp/moneyplan/" }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "BUSINESS INSIDER JAPAN", "created_at": "2019-06-29T07:18:24+09:00", - "updated_at": "2022-01-19T17:21:08+09:00" + "updated_at": "2024-04-13T22:27:04+09:00" }, { "resource_url": "http://wedata.net/items/82196", @@ -51356,17 +51356,17 @@ }, { "resource_url": "http://wedata.net/items/1868", - "name": "dafont.com", "data": { + "pageElement": "//a[@name]|//a[@name]/following-sibling::*[preceding-sibling::div/@class=\"dfxsmall\"][following-sibling::div/@class=\"titlebar\"]", + "nextLink": "//a[@title=\"Keyboard shortcut: Right arrow\"]", "url": "^https://(www\\.)?dafont\\.com/", - "pageElement": "//div[@class='titlebar'][1]/following-sibling::div[form/@name='nb'][1]/following-sibling::*[following-sibling::div/@class='titlebar']", - "exampleUrl": "https://www.dafont.com/theme.php?cat=113\r\nhttps://www.dafont.com/new.php", - "nextLink": "//span[@class='select']/following-sibling::a[1]" + "exampleUrl": "https://www.dafont.com/theme.php?cat=113\r\nhttps://www.dafont.com/new.php" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "cool_ni_ikou", + "name": "dafont.com", "created_at": "2008-06-28T06:32:03+09:00", - "updated_at": "2020-03-28T11:57:55+09:00" + "updated_at": "2024-04-13T16:02:33+09:00" }, { "resource_url": "http://wedata.net/items/1867", From 1301996782ff7ac36d52e93fbe7d43d3ada0f4b1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 15 Apr 2024 21:12:24 +0800 Subject: [PATCH 795/812] 1.9.37.34 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 35 ++--------------------------------- 2 files changed, 3 insertions(+), 34 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 1621ecb768d..c625b156d20 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.33](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.34](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index d5f67f18d95..8b14efbd8f3 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.33 +// @version 1.9.37.34 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2097,37 +2097,6 @@ this.openInNewTab(pageElement); } } - /* - if (this.curSiteRule.smart && pageElement && pageElement.length > 0) { - let targetEle = pageElement.length > 1 ? pageElement[0].parentNode : pageElement[0]; - let video = targetEle.querySelector("video,iframe[id*=play],[id*=play]>iframe,iframe[src*=player],iframe[src*=m3u8]"); - if (video && doc == document) { - if (video.offsetParent && video.name != 'pagetual-iframe') { - let scrollWidth = video.scrollWidth || video.offsetWidth; - let scrollHeight = video.scrollHeight || video.offsetHeight; - if (/IFRAME/i.test(video.nodeName)) { - } else if (scrollWidth > 100 && scrollHeight > 100) { - let winWidth = window.innerWidth || document.documentElement.clientWidth; - let winHeight = window.innerHeight || document.documentElement.clientHeight; - if (scrollWidth > winWidth>>1 && scrollHeight > winHeight>>1) { - debug("Disable when large media found"); - } else { - video = null; - } - } else { - video = null; - } - } else { - video = null; - } - } - if (video) { - isPause = true; - this.clearAddedElements(); - return null; - } - } - */ return pageElement; } @@ -2503,7 +2472,7 @@ if (!this.verifyElement(aTag)) continue; if (aTag.dataset && aTag.dataset.preview) continue; let availableHref = aTag.href && aTag.href.length < 250 && /^http/.test(aTag.href); - if (availableHref && /next\-?(page)?$/i.test(aTag.href)) continue; + if (availableHref && /next\-?(page)?$|\/video\/|\/vod\/play\//i.test(aTag.href)) continue; if (compareNodeName(aTag.parentNode, ["blockquote"])) continue; if (aTag.previousElementSibling && /\b(play|volume)\b/.test(aTag.previousElementSibling.className)) continue; if (aTag.nextElementSibling && /\b(play|volume)\b/.test(aTag.nextElementSibling.className)) continue; From 3d2d8820919c7bdc25545713b654be98a26ed18b Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 18 Apr 2024 09:12:58 +0800 Subject: [PATCH 796/812] 1.9.37.35 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 35 +++++++++++++++++------------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index c625b156d20..714a691b144 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.34](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.35](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 8b14efbd8f3..81f11dd9cfc 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.34 +// @version 1.9.37.35 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1759,7 +1759,7 @@ let paStyle = curWin.getComputedStyle(ele.parentNode); let paDisplay = paStyle.display; let paOverflow = paStyle.overflow; - pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection === "row" && paStyle.flexWrap !== "wrap") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow === "hidden"; + pf = (paDisplay.indexOf('flex') !== -1 && paStyle.flexDirection.indexOf("row") === 0 && paStyle.flexWrap !== "wrap") || compareNodeName(ele.parentNode, ["ul"]) || paDisplay.indexOf('grid') !== -1 || paOverflow === "hidden"; } let curStyle = curWin.getComputedStyle(ele); if (ele.children.length > 1) { @@ -1770,22 +1770,21 @@ for (let i in ele.childNodes) { let child = ele.childNodes[i]; if (child.nodeType === 3 && child.nodeValue.trim() !== '') { - return ""; + hasText = true; + break; } } - if (!hasText) { - let gridArea = curStyle.gridArea; - if (gridArea && gridArea !== "auto" && gridArea !== "auto / auto / auto / auto") { - return ">*"; + let gridArea = curStyle.gridArea; + if (gridArea && gridArea !== "auto" && gridArea !== "auto / auto / auto / auto") { + return ">*"; + } else { + let middleChild = ele.children[parseInt(ele.children.length / 2)]; + if ((curStyle.display === 'flex' && curStyle.flexDirection.indexOf("row") === 0 && curStyle.flexWrap !== "wrap") || (curStyle.float === "none" && (rulesData.opacity !== 0 || hasText) && !pf)) { + return ""; + } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight === 0) { + return ""; } else { - let middleChild = ele.children[parseInt(ele.children.length / 2)]; - if ((curStyle.display === 'flex' && curStyle.flexDirection === "row" && curStyle.flexWrap !== "wrap") || (curStyle.float === "none" && rulesData.opacity !== 0 && !pf)) { - return ""; - } else if ((middleChild.style && middleChild.style.position === "absolute" && middleChild.style.left && middleChild.style.top) || compareNodeName(ele, ["ul"]) || curHeight === 0) { - return ""; - } else { - return ">*"; - } + return ">*"; } } } @@ -2421,7 +2420,7 @@ await sleep(1); let pageDiv = body.querySelector(".pagination"); if (pageDiv) { - cur = pageDiv.querySelector("[class*=current]"); + cur = pageDiv.querySelector("[class*=current],.page-selected"); if (cur) next = cur.parentNode.nextElementSibling; if (next) next = next.querySelector("a"); } @@ -2433,10 +2432,10 @@ for (let i = pageDivs.length - 1; i >= 0; i--) { let p = pageDivs[i]; if (/(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)/i.test(p.title || p.value || '')) { - next = p.querySelector('a') || p; + next = p.querySelector("a,button,[type='button']") || p; break; } else if (/^(next\s*(»|>>|>|›|→|❯)?|>|▶|>|›|→|❯)$/i.test((p.innerText || '').trim())) { - next = p.querySelector('a') || p; + next = p.querySelector("a,button,[type='button']") || p; break; } } From 723162fcd25ba2aadad02e166093129b0fce2c90 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 18 Apr 2024 11:46:44 +0800 Subject: [PATCH 797/812] Update pagetualRules.json --- Pagetual/pagetualRules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index c794faeea20..fd6c6448c33 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -7070,7 +7070,7 @@ "author": "skofkyo", "example": "https://www.xvideos.com/", "url": "^https?://www\\.(xvideos|xnxx)\\.com/", - "nextLink": "//li[a/@class='active']/following-sibling::li[1]/a", + "nextLink": "//li[a/@class='active']/following-sibling::li[1]/a | //a[@class='no-page next-page']", "pinUrl": true, "pageElement": ".mozaique.cust-nb-cols", "replaceElement": ".pagination", From ecb2d64364781712e8603c4467196ac4a5a0657f Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 18 Apr 2024 11:50:23 +0800 Subject: [PATCH 798/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 81f11dd9cfc..602f480abee 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2555,7 +2555,7 @@ parent = parent.parentNode; } } - if (parent && parent.contains(next4) && !/^\d+$/.test(otherPageEle.innerText.trim())) { + if (parent && parent.contains(next4) && !/^\d+$/.test(next4.innerText.trim())) { next4 = null; } } From e8c1170162bb31ff7c0ee8d24b35b08d43a68c2f Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 18 Apr 2024 18:08:34 +0800 Subject: [PATCH 799/812] 1.7.81 --- SearchJumper/searchJumper.user.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/SearchJumper/searchJumper.user.js b/SearchJumper/searchJumper.user.js index 9c81d76d7c2..c775dcd5a7c 100644 --- a/SearchJumper/searchJumper.user.js +++ b/SearchJumper/searchJumper.user.js @@ -4,7 +4,7 @@ // @name:zh-TW 搜尋醬 // @name:ja SearchJumper // @namespace hoothin -// @version 1.7.80 +// @version 1.7.81 // @description Most powerful aggregated search extension providing the ability to conduct searches effortlessly. Navigate to any search engine(Google/Bing/Custom) swiftly. // @description:zh-CN 最强聚合搜索插件,在搜索时一键切换任何搜索引擎(百度/必应/谷歌等),支持划词右键搜索、页内关键词查找与高亮、可视化操作模拟、高级自定义等 // @description:zh-TW 在搜尋時一鍵切換任意搜尋引擎,支援劃詞右鍵搜尋、頁內關鍵詞查找與高亮、可視化操作模擬、高級自定義等 @@ -5792,7 +5792,7 @@ shadow = this.shadowContainer; } else { if (this.shadowContainer.shadowRoot) { - shadow = this.shadowContainer.shadowRoot.firstElementChild; + shadow = this.shadowRoot; } else { let shadowRoot = this.shadowContainer.attachShadow({ mode: "open" }); shadow = document.createElement("div"); @@ -5802,6 +5802,7 @@ hideShadowStyle.innerHTML = createHTML("#search-jumper-root{display: block!important;}"); shadow.appendChild(hideShadowStyle); shadowRoot.appendChild(shadow); + this.shadowRoot = shadow; } } if (ele.parentNode != shadow) shadow.appendChild(ele); @@ -8622,9 +8623,9 @@ } else if (icon) { imgSrc = icon; } else if (!isBookmark && isPage) { - imgSrc = data.url.replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); + imgSrc = data.url.replace(/\?.*/, "").replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); } else if (/^showTips:https?:\/\//.test(data.url)) { - imgSrc = data.url.replace(/^showTips:(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); + imgSrc = data.url.replace(/\?.*/, "").replace(/^showTips:(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); } if (imgSrc) { img.onload = e => { @@ -12569,7 +12570,7 @@ } type.sites.forEach(site => { let icon = site.icon; - if (!icon) icon = site.url.replace(/^showTips:/, "").replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); + if (!icon) icon = site.url.replace(/^showTips:/, "").replace(/\?.*/, "").replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); if (/^http/.test(icon)) { let siteCache = cacheIcon[icon]; if (siteCache) { @@ -12598,7 +12599,7 @@ } type.sites.forEach(site => { let icon = site.icon; - if (!icon) icon = site.url.replace(/^showTips:/, "").replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); + if (!icon) icon = site.url.replace(/^showTips:/, "").replace(/\?.*/, "").replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico"); if (/^http/.test(icon)) { let siteCache = cacheIcon[icon]; if (siteCache) { @@ -14117,7 +14118,7 @@ name: nameInput.value, url: urlInput.value }; - if (iconInput.value && iconInput.value != urlInput.value.replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico")) { + if (iconInput.value && iconInput.value != urlInput.value.replace(/\?.*/, "").replace(/^(https?:\/\/[^\/]*\/)[\s\S]*$/, "$1favicon.ico")) { siteObj.icon = iconInput.value; } if (descInput.value && descInput.value != nameInput.value) { @@ -14456,7 +14457,7 @@ iconShow.src = icons[0]; } } else { - iconShow.src = (/^(showTips:)?https?:/.test(url) ? url.split('\n')[0].replace(/^(showTips:)?(https?:\/\/[^\/]+).*/, '$2') : location.origin) + "/favicon.ico"; + iconShow.src = (/^(showTips:)?https?:/.test(url) ? url.split('\n')[0].replace(/\?.*/, "").replace(/^(showTips:)?(https?:\/\/[^\/]+).*/, '$2') : location.origin) + "/favicon.ico"; } iconsCon.innerHTML = createHTML(); if (icons && icons.length > 1) { From c934c678e7ab5204b69b90c13751d63ef8702d77 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 18 Apr 2024 20:45:41 +0800 Subject: [PATCH 800/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 602f480abee..e8e2ae08c1d 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2329,6 +2329,7 @@ "li.page-current+li>a", "[class^=pag] a[rel=next]", "[class^=Pag] [aria-label=next]", + "[aria-label='Next Page']", "[aria-label='Next page']", "[aria-label='next page']", ".pagination-nav__item--next>a", @@ -4748,7 +4749,7 @@ return; } if (moving) return; - getBody(document).appendChild(self.mainSignDiv); + document.documentElement.appendChild(self.mainSignDiv); self.clearSigns(); }); checkBtn.addEventListener("click", e => { @@ -4881,7 +4882,7 @@ let signDiv = document.createElement("div"); this.setImportant(signDiv, "position", "absolute"); this.setImportant(signDiv, "pointer-events", "none"); - this.setImportant(signDiv, "z-index", "2147483646"); + this.setImportant(signDiv, "z-index", "2147483645"); this.setImportant(signDiv, "background", "rgba(120, 170, 210, 0.6)"); this.setImportant(signDiv, "transition", "all 0.15s ease-out"); this.setImportant(signDiv, "box-shadow", "rgb(0 0 0) 0px 0px 3px 0px"); @@ -4962,7 +4963,7 @@ this.foundEle = eles; eles.forEach(ele => { let sign = self.createSignDiv(); - getBody(document).appendChild(sign); + document.documentElement.appendChild(sign); self.adjustSignDiv(sign, ele); self.signList.push(sign); }); @@ -4985,7 +4986,7 @@ this.styleEle = _GM_addStyle(this.cssText); } document.documentElement.appendChild(this.frame); - getBody(document).appendChild(this.mainSignDiv); + document.documentElement.appendChild(this.mainSignDiv); getBody(document).classList.add("pagetual-picker"); this.logoBtn.classList.remove("showSign"); From c78df0bb9df1f630634062b0e95fa5dac14e59b1 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 19 Apr 2024 11:13:42 +0800 Subject: [PATCH 801/812] 1.9.37.36 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 52 ++++++++++++++++++++++++++------------- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 714a691b144..e5e8e014a5d 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.35](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.36](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e8e2ae08c1d..5bb03dc900b 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.35 +// @version 1.9.37.36 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -3796,12 +3796,19 @@ margin: 0 0 5px 0; transition: opacity .3s ease; } + #pagetual-sideController.minSize>.extra>svg { + opacity: 0; + } #pagetual-sideController>.extra>svg:hover { opacity: 1; } #pagetual-sideController.minSize { box-shadow: rgb(0 0 0 / 0%) 0px 0px 0px; background: #00000000!important; + pointer-events: none; + } + #pagetual-sideController.minSize #pagetual-sideController-move { + pointer-events: all; } #pagetual-sideController.minSize .pagetual-sideController-btn { opacity: 0; @@ -4438,6 +4445,7 @@ } #pagetual-picker.showDetail .tempRule { display: inline-block; + word-break: break-all; } #pagetual-picker #saveDetail { display: none; @@ -4740,7 +4748,7 @@ frame.addEventListener("mouseenter", e => { if (!self.showSign || moving) return; if (self.mainSignDiv.parentNode) self.mainSignDiv.parentNode.removeChild(self.mainSignDiv); - self.checkInputSelector(); + self.checkInputSelector(false); }); frame.addEventListener("mouseleave", e => { if (!self.showSign) { @@ -4768,8 +4776,8 @@ } let element = getElement(selectorInput.value, document); let selector = self.getSelectorFromEle(element); - self.setSelectorDiv(selector); selectorInput.value = selector; + self.setSelectorDiv(selector); }); editBtn.addEventListener("click", e => { rulesData.editTemp = self.getTempRule(); @@ -4851,6 +4859,15 @@ delete this.editTemp.updatedAt; } if (this.selectorInput.value && !this.frame.classList.contains("showDetail")) { + if (this.foundEle && this.foundEle.length === 1) { + let foundEleRect = this.foundEle[0].getBoundingClientRect(); + if (foundEleRect.height < 100) { + showTips("Next Link"); + this.editTemp.nextLink = this.selectorInput.value; + return this.editTemp; + } + } + showTips("Page Element"); this.editTemp.pageElement = this.selectorInput.value; } return this.editTemp; @@ -4906,21 +4923,22 @@ } setSelectorDiv(selector) { - this.fillTempRuleTextarea(); let self = this; this.allpath.innerHTML = createHTML(""); - if (!selector) return; - if (this.xpath.checked) { - let span = document.createElement("span"); - span.innerText = selector; - span.addEventListener("click", e => { - self.selectorInput.value = selector; - self.checkInputSelector(); - }, true); - this.allpath.appendChild(span); - } else { - selector.split(">").forEach((item, index) => self.geneSelectorItem(item, index)); + if (selector) { + if (this.xpath.checked) { + let span = document.createElement("span"); + span.innerText = selector; + span.addEventListener("click", e => { + self.selectorInput.value = selector; + self.checkInputSelector(); + }, true); + this.allpath.appendChild(span); + } else { + selector.split(">").forEach((item, index) => self.geneSelectorItem(item, index)); + } } + this.checkInputSelector(); } geneSelectorItem(item, index) { @@ -4953,7 +4971,7 @@ this.allpath.appendChild(span); } - checkInputSelector() { + checkInputSelector(fill = true) { let self = this; this.clearSigns(); if (!this.selectorInput.value) return; @@ -4967,7 +4985,7 @@ self.adjustSignDiv(sign, ele); self.signList.push(sign); }); - this.fillTempRuleTextarea(); + if (fill) this.fillTempRuleTextarea(); } } From 7a6a9998fc1548249fced44da3eb90eefb47a9b0 Mon Sep 17 00:00:00 2001 From: hoothin Date: Sat, 20 Apr 2024 17:33:00 +0800 Subject: [PATCH 802/812] 1.9.37.37 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index e5e8e014a5d..3e44c9f0b6e 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.36](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.37](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 5bb03dc900b..e667595d162 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.36 +// @version 1.9.37.37 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2069,9 +2069,9 @@ while (posEle && !posEle.offsetParent) { posEle = posEle.previousElementSibling || posEle.parentNode; } - let lastBottom = posEle && getElementBottom(posEle); + let lastBottom = forceState !== 2 && forceState !== 3 && posEle && getElementBottom(posEle); if (lastBottom && getElementTop(self.initNext) - lastBottom > 1000) { - debug("Stop as too long between next & page element"); + debug("Stop as too long between next & page element, try to enable Force-Join mode."); isPause = true; pageElement = []; sideController.remove(); @@ -5030,6 +5030,7 @@ pageElementSel = pageElementSel[nextIndex < pageElementSel.length ? nextIndex : 0]; } this.setSelectorDiv(pageElementSel); + this.fillTempRuleTextarea(); } } const picker = new Picker(); From 349dfa4a84ddd93751e2d5002289e767eee1d08b Mon Sep 17 00:00:00 2001 From: hoothin Date: Sun, 21 Apr 2024 10:15:48 +0800 Subject: [PATCH 803/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e667595d162..b2bc3985895 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -1368,6 +1368,8 @@ if (includeSel) { let include = getElement(includeSel, doc); if (!include) { + getBody(doc).scrollTop = 9999999; + doc.documentElement.scrollTop = 9999999; return false; } } From eb25b3a53c46f0acef3434f48593508aa6aa3741 Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Mon, 22 Apr 2024 01:53:13 +0000 Subject: [PATCH 804/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 793b29a4495..eeed3be9b44 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -312,8 +312,7 @@ { "resource_url": "http://wedata.net/items/86189", "data": { - "insertBefore": "", - "pageElement": "//div[contains(concat(' ',@class,' '),' itemcolmn ')]/div", + "pageElement": "//div[@class='searchinfo-mainwrap-center']/div[contains(concat(' ',@class,' '),' itemcolmn ')]/div", "nextLink": "//a[contains(concat(' ',@class,' '),' next ')]", "url": "^https://netmall\\.hardoff\\.co\\.jp/cate/", "exampleUrl": "https://netmall.hardoff.co.jp/cate/00010012/?q=%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3" @@ -322,7 +321,7 @@ "created_by": "t_f_m'", "name": "HARD OFF 通販 netmall", "created_at": "2023-11-24T18:38:36+09:00", - "updated_at": "2023-11-24T18:38:36+09:00" + "updated_at": "2024-04-21T11:38:31+09:00" }, { "resource_url": "http://wedata.net/items/86188", From f8a40a7beda8d4454ae9742025aa2f5da7be8ccd Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 22 Apr 2024 19:40:24 +0800 Subject: [PATCH 805/812] 1.9.37.38 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 8 +++++--- Pagetual/pagetualRules.json | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 3e44c9f0b6e..2be074df837 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.37](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.38](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index b2bc3985895..2fb8465de3f 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.37 +// @version 1.9.37.38 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -1368,8 +1368,10 @@ if (includeSel) { let include = getElement(includeSel, doc); if (!include) { - getBody(doc).scrollTop = 9999999; - doc.documentElement.scrollTop = 9999999; + if (doc !== document) { + getBody(doc).scrollTop = 9999999; + doc.documentElement.scrollTop = 9999999; + } return false; } } diff --git a/Pagetual/pagetualRules.json b/Pagetual/pagetualRules.json index fd6c6448c33..99f4018d300 100644 --- a/Pagetual/pagetualRules.json +++ b/Pagetual/pagetualRules.json @@ -8925,7 +8925,7 @@ { "name": "Bing", "action": 1, - "url": "^https://.*\\.bing\\.com/", + "url": "^https://.*\\.bing\\.com/search", "nextLink": "a[title='Next page'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl", "pageElement": "body>style,ol#b_results>li.b_algo", "waitElement": [ From b35625a8c04918713ee34e6867aeff516458024a Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Tue, 23 Apr 2024 01:52:26 +0000 Subject: [PATCH 806/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index eeed3be9b44..128d9d0a834 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,19 @@ [ +{ + "resource_url": "http://wedata.net/items/86223", + "data": { + "insertBefore": "//div[@class='width-container']/node()[last()]", + "pageElement": "//div[@class='book-product-wrapper']", + "nextLink": "//li[contains(concat(' ',@class,' '),' to-next ')]/a", + "url": "^https://comic-boost\\.com/content/", + "exampleUrl": "https://comic-boost.com/content/00050001" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "comic boost", + "created_at": "2024-04-23T03:06:24+09:00", + "updated_at": "2024-04-23T03:06:24+09:00" +}, { "resource_url": "http://wedata.net/items/86219", "data": { From 2b45a2c7a4488fe00f0ad8826fa5ce369e3cab3f Mon Sep 17 00:00:00 2001 From: hoothin-update Date: Thu, 25 Apr 2024 01:52:35 +0000 Subject: [PATCH 807/812] Update items_all.json from http://wedata.net/databases/AutoPagerize/items_all.json --- Pagetual/items_all.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 128d9d0a834..0f96f53f8ea 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -25612,19 +25612,19 @@ }, { "resource_url": "http://wedata.net/items/76290", - "name": "Variety", "data": { - "url": "^https://variety\\.com", "pageElement": "//ul[contains(@class,'o-tease-news-list')]/li[not(.//div[contains(@id,'sponsored')])]", - "Stylish": "@-moz-document url(\"https://variety.com/\") {\r\n img.lazy { display: inline-block !important; } \r\nli.l-list__item figure a{padding:0;}\r\nli.l-list__item:nth-of-type(-n+14) figure a{opacity:0;height:100%}\r\n}", "bookmarklet": "Array.prototype.forEach.call(document.querySelectorAll('img'), function(img) { var lazySrc = img.hasAttribute('data-src') ? img.getAttribute('data-src') : img.getAttribute('data-original'); if (lazySrc) { img.src = lazySrc;} });", - "exampleUrl": "https://variety.com https://variety.com/v/tv/", - "nextLink": "//div[@class='o-more-link // lrv-u-margin-l-auto']/a" + "Stylish": "@-moz-document url(\"https://variety.com/\") {\r\n img.lazy { display: inline-block !important; } \r\nli.l-list__item figure a{padding:0;}\r\nli.l-list__item:nth-of-type(-n+14) figure a{opacity:0;height:100%}\r\n}", + "nextLink": "//div[starts-with(normalize-space(@class),'o-more-link // lrv-u-text-align-right ')]/a", + "url": "^https://variety\\.com", + "exampleUrl": "https://variety.com https://variety.com/v/tv/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Tanookirby", + "name": "Variety", "created_at": "2014-09-03T07:41:14+09:00", - "updated_at": "2020-04-03T06:27:04+09:00" + "updated_at": "2024-04-24T23:16:02+09:00" }, { "resource_url": "http://wedata.net/items/76288", From a1fe21195f0fec5cc983a283b9fb502301a669a2 Mon Sep 17 00:00:00 2001 From: hoothin Date: Thu, 25 Apr 2024 18:18:34 +0800 Subject: [PATCH 808/812] Update T66y tool.user.js --- T66y tool/T66y tool.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js index e841ac8cae5..8b840c1f540 100644 --- a/T66y tool/T66y tool.user.js +++ b/T66y tool/T66y tool.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 草榴小助手 // @namespace hoothin -// @version 0.7.2 +// @version 0.7.3 // @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! // @author NewType & hoothin // @match *://*.t66y.com/* @@ -140,7 +140,7 @@ }); $('body').append('
' + tmpNode + '
'); } - helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 0; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child { height: 200px; }'); + helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 0; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child,form[name="FORM"]:focus-within tbody>tr:last-child { height: 200px; }'); var submitBtn = $('form[name="FORM"] .btn[name="Submit"]'); var textarea = $('form[name="FORM"] [name="atc_content"]'); if (submitBtn.length && textarea.length) { @@ -264,6 +264,8 @@ success: function (res) { if (res.indexOf("發貼完畢點擊進入主題列表") == -1) { replyFail(); + alert($(res).find("ol").text() || $(res).find("center").text()); + quickReply.removeAttr("disabled"); } else { replySuccess(); } From 805a71390ad78c9d4657e65289772a8796cf6e54 Mon Sep 17 00:00:00 2001 From: hoothin Date: Fri, 26 Apr 2024 09:42:31 +0800 Subject: [PATCH 809/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 2fb8465de3f..0852a1604a0 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2578,7 +2578,7 @@ } } if (!next) next = next1 || next4 || next3 || next2; - if (!next && location.pathname !== "/") { + if (!next && location.pathname + location.search !== "/") { next = jsNext || nextJs1 || nextJs2; if (next && next.parentNode.className && next.parentNode.className.indexOf && next.parentNode.className.indexOf('tab') !== -1) next = null; } From 1389acc09aabc007225c0ce6ebd65ffa91c13d57 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 29 Apr 2024 09:45:57 +0800 Subject: [PATCH 810/812] 1.9.37.39 --- Pagetual/README.md | 2 +- Pagetual/pagetual.user.js | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Pagetual/README.md b/Pagetual/README.md index 2be074df837..7ba288a5e85 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,4 +1,4 @@ -[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.38](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.39](https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js "Latest version") == *Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* [**📖Guide**](https://pagetual.hoothin.com/ "Wiki site for pagetual") diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 0852a1604a0..8e19977521c 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -10,7 +10,7 @@ // @name:fr Pagetual // @name:it Pagetual // @namespace hoothin -// @version 1.9.37.38 +// @version 1.9.37.39 // @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 @@ -2254,7 +2254,12 @@ await sleep(1); let sel = list[i]; let result = source.querySelectorAll(sel); - if (result.length > 0) return result[result.length - 1]; + if (result.length > 0) { + for (let i = result.length - 1; i >= 0; i--) { + let ele = result[i]; + if (this.verifyElement(ele)) return ele; + } + } } return null; } @@ -2266,7 +2271,7 @@ return false; } if (e.className) { - if (/slick|slide|gallery|disabled$/i.test(e.className)) { + if (/slick|slide|gallery|disabled|hidden\s*$/i.test(e.className)) { return false; } else if (e.classList) { if (e.classList.contains('disabled') || e.classList.contains('active')) { @@ -2365,7 +2370,8 @@ "a#linkNext", "a[class*=page__next]", "[class*=pager]>a.next", - "[class*=pagination-next]>a" + "[class*=pagination-next]>a", + "[class*=pagination-next]>button" ]; let next = await this.querySelectorList(body, selectorList); if (!next) { @@ -3793,7 +3799,7 @@ position: absolute; } #pagetual-sideController>.extra>svg { - width: 30px; + width: 40px; height: 30px; opacity: 0.1; cursor: pointer; From dd17933633cfb3b2bae4c031fd4a6c919494a4fb Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 29 Apr 2024 10:04:10 +0800 Subject: [PATCH 811/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index 8e19977521c..c17ec73abcf 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2254,12 +2254,7 @@ await sleep(1); let sel = list[i]; let result = source.querySelectorAll(sel); - if (result.length > 0) { - for (let i = result.length - 1; i >= 0; i--) { - let ele = result[i]; - if (this.verifyElement(ele)) return ele; - } - } + if (result.length > 0) return result[result.length - 1]; } return null; } @@ -2271,7 +2266,7 @@ return false; } if (e.className) { - if (/slick|slide|gallery|disabled|hidden\s*$/i.test(e.className)) { + if (/slick|slide|gallery|disabled\s*$/i.test(e.className)) { return false; } else if (e.classList) { if (e.classList.contains('disabled') || e.classList.contains('active')) { From e02fa47e266402d7e177707f98715cbf0e970ef7 Mon Sep 17 00:00:00 2001 From: hoothin Date: Mon, 29 Apr 2024 10:11:58 +0800 Subject: [PATCH 812/812] Update pagetual.user.js --- Pagetual/pagetual.user.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index c17ec73abcf..5bdfe5bedb5 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -2249,12 +2249,20 @@ return /^(javascript|#|$)/.test(href.trim().replace("#p{", "").replace(location.href, "")); } - async querySelectorList(source, list) { + async querySelectorList(source, list, defaultView) { for (let i = 0; i < list.length; i++) { await sleep(1); let sel = list[i]; let result = source.querySelectorAll(sel); - if (result.length > 0) return result[result.length - 1]; + if (result.length > 0) { + if (defaultView) { + for (let i = result.length - 1; i >= 0; i--) { + let ele = result[i]; + if (isVisible(ele, defaultView)) return ele; + } + } + return result[result.length - 1]; + } } return null; } @@ -2368,7 +2376,7 @@ "[class*=pagination-next]>a", "[class*=pagination-next]>button" ]; - let next = await this.querySelectorList(body, selectorList); + let next = await this.querySelectorList(body, selectorList, doc.defaultView); if (!next) { await sleep(1); let nexts = body.querySelectorAll("a.next");