From ce6cedf1645d7d586a0ffab922ba8876967f37f5 Mon Sep 17 00:00:00 2001 From: "lzyme.dev@gmail.com" Date: Mon, 31 Aug 2026 13:32:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=A3=81=E5=8A=9B=E6=90=9C?= =?UTF-8?q?=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/jhs-enhance.user.js | 4071 ++++++++++++++++++++----------------- src/plugins/magnet-hub.js | 1099 +++++++++- 2 files changed, 3147 insertions(+), 2023 deletions(-) diff --git a/dist/jhs-enhance.user.js b/dist/jhs-enhance.user.js index de87c81..e87f1a9 100644 --- a/dist/jhs-enhance.user.js +++ b/dist/jhs-enhance.user.js @@ -78,53 +78,53 @@ // ==/UserScript== (a => { - if (typeof GM_addStyle == "function") { - GM_addStyle(a); - return - } - const A = document.createElement("style"); - A.textContent = a, document.head.append(A) + if (typeof GM_addStyle == "function") { + GM_addStyle(a); + return + } + const A = document.createElement("style"); + A.textContent = a, document.head.append(A) })(" html #layuicss-skinlayercss{display:none;position:absolute;width:1989px}.layui-layer-shade,.layui-layer{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%}.layui-layer{-webkit-overflow-scrolling:touch}.layui-layer{top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;box-shadow:1px 1px 50px #0000004d}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px #0003}.layui-layer-load{background:url(data:image/gif;base64,R0lGODlhJQAlAJECAL3L2AYrTv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAAJQAlAAACi5SPqcvtDyGYIFpF690i8xUw3qJBwUlSadmcLqYmGQu6KDIeM13beGzYWWy3DlB4IYaMk+Dso2RWkFCfLPcRvFbZxFLUDTt21BW56TyjRep1e20+i+eYMR145W2eefj+6VFmgTQi+ECVY8iGxcg35phGo/iDFwlTyXWphwlm1imGRdcnuqhHeop6UAAAIfkEBQoAAgAsEAACAAQACwAAAgWMj6nLXAAh+QQFCgACACwVAAUACgALAAACFZQvgRi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwXABEADAADAAACBYyPqcsFACH5BAUKAAIALBUAFQAKAAsAAAITlGKZwWoMHYxqtmplxlNT7ixGAQAh+QQFCgACACwQABgABAALAAACBYyPqctcACH5BAUKAAIALAUAFQAKAAsAAAIVlC+BGL3Z3IlxUmUuhtR2LzHhsiEFACH5BAUKAAIALAEAEQAMAAMAAAIFjI+pywUAIfkEBQoAAgAsBQAFAAoACwAAAhOUYJnAagwdjGq2amXGU1PuLEYBACH5BAUKAAIALBAAAgAEAAsAAAIFhI+py1wAIfkEBQoAAgAsFQAFAAoACwAAAhWUL4AIvdnciXFSZS6G1HYvMeGyIQUAIfkEBQoAAgAsFwARAAwAAwAAAgWEj6nLBQAh+QQFCgACACwVABUACgALAAACE5RgmcBqDB2MarZqZcZTU+4sRgEAIfkEBQoAAgAsEAAYAAQACwAAAgWEj6nLXAAh+QQFCgACACwFABUACgALAAACFZQvgAi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwBABEADAADAAACBYSPqcsFADs=) #eee center center no-repeat}.layui-layer-ico{background:url(data:image/png;base64,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) no-repeat}.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a,.layui-layer-btn a{display:inline-block;*display: inline;*zoom: 1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position: absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layui-layer{border-radius:2px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}to{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translate(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translate(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translate(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translate(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translate(-100%) rotate(-120deg)}to{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translate(0) rotate(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translate(-100%) rotate(-120deg)}to{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translate(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:rollIn;animation-name:rollIn}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.layer-anim-05{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes shake{0%,to{-webkit-transform:translateX(0);transform:translate(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translate(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translate(10px)}}@keyframes shake{0%,to{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translate(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translate(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translate(10px)}}.layer-anim-06{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes bounceOut{to{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceOut{to{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#f8f8f8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right: 0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2e2d3c;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2d93ca}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:0 -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right: -18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 10px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:0 6px;padding:0 15px;border:1px #dedede solid;background-color:#f1f1f1;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#4898d5;background-color:#2e8ded;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:#0009;color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-page .layui-layer-btn,.layui-layer-iframe .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:none}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:none;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(data:image/gif;base64,R0lGODlhPAAYALMPAPPJp/HYxfSwkf50Df5TD/+HAPe5bvqHR/twOviZavyrMu/m3f9EAP9mAP+ZAO7u7iH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6QUNDRERBRjMxRTIwNjgxMTg4QzZERjVGQ0I0MDI1NDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTlDMEI5MzU5RTY2MTFFMTkxRDY5NkVCMDBGOTBFRUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTlDMEI5MzQ5RTY2MTFFMTkxRDY5NkVCMDBGOTBFRUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpENzU2N0YwMTMyMjA2ODExODhDNkRGNUZDQjQwMjU0OSIgc3RS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) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(data:image/gif;base64,R0lGODlhJQAlAJECAL3L2AYrTv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAAJQAlAAACi5SPqcvtDyGYIFpF690i8xUw3qJBwUlSadmcLqYmGQu6KDIeM13beGzYWWy3DlB4IYaMk+Dso2RWkFCfLPcRvFbZxFLUDTt21BW56TyjRep1e20+i+eYMR145W2eefj+6VFmgTQi+ECVY8iGxcg35phGo/iDFwlTyXWphwlm1imGRdcnuqhHeop6UAAAIfkEBQoAAgAsEAACAAQACwAAAgWMj6nLXAAh+QQFCgACACwVAAUACgALAAACFZQvgRi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwXABEADAADAAACBYyPqcsFACH5BAUKAAIALBUAFQAKAAsAAAITlGKZwWoMHYxqtmplxlNT7ixGAQAh+QQFCgACACwQABgABAALAAACBYyPqctcACH5BAUKAAIALAUAFQAKAAsAAAIVlC+BGL3Z3IlxUmUuhtR2LzHhsiEFACH5BAUKAAIALAEAEQAMAAMAAAIFjI+pywUAIfkEBQoAAgAsBQAFAAoACwAAAhOUYJnAagwdjGq2amXGU1PuLEYBACH5BAUKAAIALBAAAgAEAAsAAAIFhI+py1wAIfkEBQoAAgAsFQAFAAoACwAAAhWUL4AIvdnciXFSZS6G1HYvMeGyIQUAIfkEBQoAAgAsFwARAAwAAwAAAgWEj6nLBQAh+QQFCgACACwVABUACgALAAACE5RgmcBqDB2MarZqZcZTU+4sRgEAIfkEBQoAAgAsEAAYAAQACwAAAgWEj6nLXAAh+QQFCgACACwFABUACgALAAACFZQvgAi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwBABEADAADAAACBYSPqcsFADs=) no-repeat}.layui-layer-loading .layui-layer-loading2,.layui-layer-ico16{width:32px;height:32px;background:url(data:image/gif;base64,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) no-repeat}.layui-layer-tips{background:none;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:5px 10px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px #0003;background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow: hidden}.layui-layer-tips i.layui-layer-TipsT,.layui-layer-tips i.layui-layer-TipsB{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsR,.layui-layer-tips i.layui-layer-TipsL{top:1px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476a7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#bbb5b5;border:none}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#c9c5c5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92b8b1}.layui-layer-iconext{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABkCAYAAAAv8xodAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNS8xMS8xNNdPc0oAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAWb0lEQVR4nO2de2wU172Av5l92t4Hti/YQHmVmFcSE7+WR0h0uRRVVC2pKldpCFJQEJAiFwg4diikgLEghEhpVLVQNblBSFEUVYoi+hc0FQoE87B52JQAiQnBJDY2wfix633O7P1jdwbbxe9d7yx3PgnJc87iM2M+js+cx+8nhMNhdHQeFcRE34COTizRhdZ5pNCF1nmk0IXWeaQwPqxQEIRYtpEKOABL9NoLtAKhWDbSDRF4EsgAbEBHtL3LAIN9CV6+fHlSvS0fOXLkof9oj8pzDJZ499A2YCxgWbJkiSUnJ8cApADZgCEO7ZmAImAyYFuxYsV4Iv+ZpgIFcWhPR2PEU2gbkAlQU1Mz67PPPvvvq1ev/s/f/va3LCIyp8e4PROQD4wrLi7Oam9vP/Dhhx/+9f79+3/Kz8+3AxPi0KaOxoiX0KrM169ff6KgoGAKgMFgEF944YWZ0c9Y+vrLw8BEpAceV1xcnHX48OE3HQ7HRIAxY8ZM2bdv39Lo5zJi2KaOBomH0D1knjFjxsTulX6/Pxj9Uo5Re4rMY1esWDH+8OHDb6akpGR2/4Db7fZEv4zXuF1HI8Ra6H5lDgQC0ttvv/1l9NIfg/Z6yPzee+/t6S1zY2PjpdWrV/8retkagzZ1NEwshR5Q5j179pzfu3dvOxBg5HINKHNTU1Ody+WqbG1tDQENQOcI29TROA+dthsGGYAd+pd5165d94nIfHeE7Q1K5qKioorvv/8+ANwGakfYZlwIh8MEg0F1OtFoNGIwxGMCKL4Eg0G6urqQJAlRFElNTcVsNo/6fcSih84A7BaLRRiCzCMZy5qAQoYm86URtBc3FJnNZjMzZswgKyuLQCCAJEmJvrUhEQwGcbvdZGdn88ILL5CTk0NnZ2dCnmOkPbQqc11d3eMPk3n37t01lZWVbcRW5v966aWXJh44cKAyWWWWZZlgMIjD4aCoqIj09HRkWeb48eO0tbUlTS+tyDxz5kz2799Peno6LS0trFq1Cr/fT2pq6qjez0iE1mUeJorM6enpFBUVkZaWRigUIhgMEgwGB/4GGiEQCOB2u5kzZw779u0jPT0yze/xeJAkKdYrzoNiuELrMg8TSZIIBoNkZWVRWFiI2WwmHA7j8/k4d+4cnZ2dCRl7DhWlZ37iiSd46623cDgcANy5c4c33ngDj8eD0+kc9fsajtC6zMMkGAwiSRKTJk0iLy9PHVZ4PB7Onj1LR0cHZrMZUdT2njGlZ87Ly2P//v1YrVYAmpqaKC0tpaGhAbvdnpBh01CFHm2ZzURmMx4ZmadNm0Zubi6iKCIIAm1tbZw5cwav14vJZNK8zH6/H7fbTWFhIXv27Okh85YtW7h9+zY2mw2TyZSQ+xuK0KrMly9ffiInJ2dC98pEyNzY2HjJ5XJVJoPMoVCI2bNnM2vWLCCyo/Hu3bucPXuWUCiE2WxOyJhzKCgyL1y4kMrKSiyWyO6Fb7/9li1bttDS0pJQmWHwQidU5oMHD+6xWq09NhYlg8zKtJwsy+Tm5vLYY48RDocRRZGmpiaqq6uRZRmTyaR5mX0+Hx6Ph2eeeYbdu3er0jY0NFBaWqoJmWFwQg8kc2j37t3ndZl70l3mvLw8pk6dSjgcxmAw8O2333LhwgVEUUyKF0C/36/KXFFRoUpbX19PaWkp9+7dw263YzTGap1u+Ax0B7rMwyAcDhMIBDAajbhcLsaPH48sy4iiyNdff01tbS1GozHhvdlgUHrmpUuXsmPHDvU3ybVr1ygtLaW9vV0zMkP/QusyDwNljtlsNlNUVMS4ceNUma9evcrVq1eTSma3282yZcvYvn27KvP169cpKyujo6NDUzJD30Kn8UDmJ3NycsZ3r4yDzABzeURkTklJweVykZGRQTgcRhAEamtr+eabbzCZTJoSoC+UnvnnP/85W7duVWWuq6ujtLQUn8+XsKm5/ujrJ2sDuHDhwpxRktkJZC9evDg92WV2OBy4XC5sNhuyLCPLMpcuXaKhoQGj0ZgUMnu9XtxuN7/61a947bXX1PLa2lrKy8s1KzP0LbR18uTJ4uzZs3vMM0uSJMdBZohuOy0rK1vUW+bm5uZ/a11mgFAohM1mY8GCBaSmpiJJEj6fj9raWpqbmzGZTJoUoDfBYBCPx/MfMl+8eJGtW7fS1dWlWZmhn912zc3N4WCvjQUGg0H85S9/mR29NEf/xAIvQGNj43/skU5PT//xypUrp0YvHUQO2WoOWZZxOp04HA4kScJgMNDS0sKdO3cQRVGzAvQmGAwyZswY1q5dq5bduHGD9evX4/F4cDgcmn6WvoTu8vv94YMHD16WJKnHUamCgoIpNTU1s6KXY4mEKRgprQAlJSWn6+vrP+9eYTabUysqKirKy8tnEBmaFKFBqUVR5M6dO9y+fRuj0YgkSUyePJk5c+aoG4+SAYPBgMfj4cqVK2rZhAkT+NnPfoYsywQCgQTe3cD0JXQrENq4ceMPf/7zny+OgtR+4JbX65Vzc3PfSUapTSYTsixz7tw5Ghoa1F5s5syZ5Ofnq2NsraM8x86dO6mpqQEgJSWF7du3s3z5ctxuN16vN8F32Td9CS0BzYyu1HUksdSCIKiLJDU1Ndy4cQODwUA4HGbatGkUFhYC9DidokVEUcThcODz+Xj99deprq4GIs9XXl5OcXExbrebrq6uBN/pw+lvJ0wIXeoho2wwunTpEteuXUMURWRZZtKkSbhcLkRR1LzUBoMBu91OIBDg97//PefOnVPrNm/ezPPPP4/H49Gk1ANt7dKlHgbKXPOVK1e4fPkygiAgyzLZ2dksXLgQq9WaFFI7HA78fj9btmzhxIkTat2mTZt48cUXNSn1YPYq6lIPA5PJhMlk4uuvv+bChQuqvJmZmcyfP5/U1FQCgQCyHKvwJLFHGX4IgsCOHTt6SF1SUsKqVavweDx4PJ5+vsvoMtjNt7rUw0BZ4r516xbV1dWEQiHC4TBOp5OFCxfidDrVDUxaRZFalmXeeOMNjh8/rtatW7eOl19+ma6uLs1IPZTd5LrUw8BgMGAymWhsbOTs2bP4/ZH4OmlpaSxcuJCxY8eqm/+1iiiK2O12ALZv386xY8fUujVr1rBu3To8Hg9utztRt6gy1OMRutTDwGAwYDabaWlpoaqqSh13WiwWXC4X2dnZSSO10Whk9+7dHD16VK1btWoVJSUlmuiph3PeR5d6GCh7n9vb2zl16hSdnZ0IgoDRaKSoqIgpU6aoJ1u0ijL8EEWRHTt2cOTIEbVu5cqVbNiwIeE99XAPsOlSDwNRFDGZTHg8Hqqqqrh37x6CIGAwGMjPz2f69OlIkqRpqQVBwG63Y7Va2bt3L59++qlat2LFCkpLS+nq6kqY1CM5kalLPQyUntrn81FVVUVzc7N6MDY3N1cNOKNllOGHxWJh3759fPLJJ2pdcXExr776Kj6fLyHL5CM9YqxLPQwEQVCXmM+cOUNDQwMQ2bap5d65O0pPrUj90UcfqXW/+MUvyMjISMizxOLMvC71MFCkFgSB6upqTp06xcmTJ+no6EiKPdPwQOqUlBTeffddDh48yHfffcfHH39MW1tbQk7lxCoIxHCkHmkE/6FKnTvC9uKCsgBz7949fD5fUgSa6Y4gCDgcDiwWC4cOHWLdunUcOHAAs9mc1ELDIKU+fvz4tOilPQZtDkrq4uLiLGAcGk1JocxVJ0Ogmb5wOp2MGzcOg8FAdnY2NpstIfcR65/egFIXFRVNjn4ZqxwrA0q9fv36Z6KXmhRaJ3bEozvoV+qOjg5l5j2Wm4P7lbq+vv776JeJX8rSiSvxevtQpM7auHHjD62trTWrV6+e5vP5gqWlpV9HPxOLHCvdqQPwer1TcnNz3zly5MjN3Nxc16VLl86sXbv2dLQ9PcfKI47wsC2MMQxLZSTyAtj77KEXaIlVI73IBaY8pPwk0KZnktU2I80kG+/5oRDQRORwq5VIKjcf8f3VX0fkdHg2kTFza/Qe2uLYpo5GiHcPrTm0vKleZ+T010ObiaQStkavfUR6uViPfbujJJ13EOnFlaTzo74W/Kj8qn5UnmOw9DXLYQbGA9a8vDxTXl6eiYjY2TwQPNYUEEky74gmnbcRSUJfRCSKv47OgPQl9BiAo0ePTjl//vzi8+fPL/7nP/+pLIhkEXup04EJ+fn59vv37//pww8//Gt7e/uBbgsi+ehS6wyCvoROcTqdwpIlS2YIUX7yk5/M+Pzzz6dH62MtdQbAvn37lo4ZM2YKgMPhmHj48OE3dal1hkKfCys+nw9Jknpsl3r22Wcfi5PUIeiRZB6AlJSUzF5SF6BLrdMP/YYC++CDD/4d7jUt8Oyzzz526tSpx6KXsZK6FWD16tX/amxs7BGMUZE6Oq4eiy61Tj/0FwpMeuWVV+6+//77tb2lXrhw4fQYS90JNLS2toZcLldlU1NTXffKlJSUzPfee2+PLrXOQAwUCkxas2ZN8/vvv1/be5NRHKSuBW5///33gaKioopklFqSJPx+P36/n0AgkLRz3oFAgLa2NlpbW2lvb0+KmHwK/W1OCtJN6g8++KBuEFKPdBP9JZJUakmSCAQCZGVlkZOTg8lk0nx0pIchSRJut5ucnBx+85vfkJWVhdvtThqpB9ptFwTuMHipxzH6UheiAaklSSIzM5Onn36auXPnsmjRIjU+nNbPCHbH7/fjdDrZu3cvJSUlHDhwgJycnKSRerChwAaUuqqqKid6OWpSv/TSSxOB/0IjUgeDQfx+P6FQCKfTyfz580lPT9d8dKTuCIKAJElq7JDMzEz279/PrFmz6OzsTNr40L0ZUOoFCxb8eLSlPnDgQKVWpDYajbjdbk6fPo3f7yccDpOamsqCBQsYN24cgUBA04FkFMxmM263mz/84Q+0tEQ2RGZmZvL222/z+OOPa76nHmooMF3qPlBibrS2tlJVVaVGEDKbzcybN48f/ehHBINBTcsAD0Lp3rx5k82bN9Pc3AxEjli9++67PPXUU5ruqYcTCiyhUj9snlprUnd0dPDFF1/Q0dGhBpIpKChg6tSpSJKkealNJhM2m41bt26xefNm7ty5A4DVauXNN98kPz8ft9utxunTEsMNBZYwqV0uV+UgpU5IzmFFap/PxxdffMEPP/yAIAgIgsBTTz3FzJkzkyLniiJ1Q0MDJSUl3Lp1CwCbzcZbb73FvHnz8Hg8mpN6JKHAtC51AQmSWom5EQwGOX36tJoJC2DOnDk8+eSThEIhzc9VK1I3Nzfz2muvcfv2bQA1DNjTTz+N2+3G5/Ml+E4fMNJQYANKfe7cuVGV+uDBg3u0IrXZbEaWZU6fPq0mEgqHw+Tk5JCXl6cmEtK61Ha7naamJjZu3Mg333wDRN4NKioqWLRokaZ66liEAutX6qKiolGV2mq1pmtFaniQc6Wmpob6+no1PcW0adOYN28eoihqvqc2Go3Y7Xbu3r3Lpk2buH79OhAJB7x3716WLFmimZ46VqHAdKn7Qcki2z2RUDgcZuLEicybNw+z2az5BRhF6ra2NsrKyvjqq6+AyDvDrl27+OlPf4rH40m41LEMBTZUqUcaaGaoUs8dYXsjQomMdPXqVerq6hAEgXA4TFZWFvPnz1cTCSWD1Pfv3+d3v/sdly9fBiLDq+3bt7Ns2bKESx3rUGADSt0tFJgjBm32kPq777670L1SkXrx4sXpRI6POWPQ5rBRktffuHGDCxcuIEkSsiyTkZHBokWLcDgcmpdamaf2er2UlZVRVxdZGhBFkW3btiU8OWc8QoH1kLr3B+bNm6fEzIhVKDBV6vnz5+9pbm7+d/dKq9WaXlZWtih6mRmjNoeNkkiooaGB6upqvF4vsixjt9uZP38+NptN8yF1Fak9Hg/l5eXU1tYCkZ66rKyM5557Do/Hk5CpyXiEAnMABovFIixZsiS7d6XX61Veh2O1DpwSbZOVK1dOTU9P/3HvDzQ2NioRkzSR09dgMCCKIk1NTbS0tGAwGJAkCafTidPp1HQPraDkMXS73fz2t7/lxo0bQETqdevWqRm+RptYC50B2C0Wi3D16tXcadOm9RA6EAgEKysrlazosRhopRA5Fe4sLy+fUVFRUWE2m3vEnq6vr/+8pKTkdPRSE6HAlFwqc+bMYfLkyUiShNFo5Pbt2zQ1NSVNBFLlRXbZsmVMmDBBLf/yyy/p6upS852PJrGMnDSgzK+//nrNO++800Ektsf9EbY3KJlzc3Pf8Xq9MnCL+MYUGRTKGDk/P5+pU6ciyzIGg4GGhgY1QWci4ioPFa/Xi8fj4bnnnqOsrEwNTlRTU8POnTuRZTkhzxEroYcq890Rtjccmf9jPD+ahMNhdWxcWFjIpEmTVJlv3LhBXV2dmn9F6yjp237961+zefNmtby6upqtW7cSCATUbFmjTSyEzgRsQ5R5JOPnpJQ5GAxiMBgoLCxk/PjxyLKMKIpcu3aNK1euqC+LWkeR+fnnn2fTpk1q+blz59i2bRuBQAC73Z6Q4QaMXOhMwOZ0OoWLFy/qMj8ERWar1UpRUREZGRnIsowgCFy+fJmvvvoq6WR+8cUXKSkpUctPnDjBtm3b1PQUiXwHGInQuswDoOzVSEtLw+VyMWbMGMLhMOFwmIsXL3Lr1i1MJlNSJAnyeDx0dXWxatUq1q1bp5afOHGCHTt2aEJmGL7QuswDoMjsdDpxuVykpaWp4+jz58/T2NioLolrHUXml19+mTVr1qjlx48fZ+fOnQCakBmGJ7Qu8wAo2WDHjh1LYWEhFktkDcnv91NTU0NLS0vSyOx2u+nq6uKVV15h1apVavmxY8fYtWuXuhyuBZlh6ELrMg+AciJl/PjxFBQUqGPjrq4uzp49S1tbW9KkblN65pKSElauXKmWHz16lMrKSs3JDEMTWpd5AEKhEKFQiClTpjB37lxEUUQQBDo6Ojhz5gwejydpZFZ65g0bNrBixQq1/MiRI+zZsweLxYLD4dBccPzBCq3LPAChUAhJkpg+fTq5uQ9yfN67d0/ds5EseQgVmUtLSykuLlbLP/30U/bt24fVasVms2lOZhic0LrMg0CWZdLT01WZlb0a1dXVSJKE2WzWpAC9CQQC+P1+Xn311R4yf/LJJ+zfvx+LxYLdbtfsswwktC7zEAiFQni9XlJSUmhoaOD8+fM9cnonA6FQiIyMDJYvX66WffTRR/zxj38kJSVF0zJD/0LrMg8Bo9FIZ2cnJ0+eJC0tTd1FlwwLJt0xmUy0tbXx8ccfs3TpUv7xj39w6NChpJAZ+hY6jdGVGSL5BZNSZugZvsDn8yXNtFxvlJM1f/nLX/j73/9Oa2ur+gKYDPQltA2gqqpqzijJnAGMKy4uzkpGmRVEUUyKl76BsNlsavL5sWPHJvhuhkZfP32r0+kUZs+ePbF7YZxkhmiOlfXr1z+TrDLraIO+hA62t7eHOzo6upSCOMoM0cyy3ZLME73WZdYZEn0J7QcoLy+/ePPmzeabN2/e2bBhw9k4yQyRkyT+tWvXnj527Nj/trS0fPnZZ58d0mXWGSp9pUYWiIQa6J1mwgf8QGxlVhgDPPOQ8pjKrCev1zbxSl4fJpKOwsGD09l+oGMkjQ1AG3CSSAZbJen8HUZ+VEvn/xEP7aF1dJKV5J9j0tHphi60ziOFLrTOI4UutM4jhS60ziPF/wHgvbfirVNMHAAAAABJRU5ErkJggg==) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px #0000001a inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px #0006}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display: inline;*zoom: 1;vertical-align:top}.layui-layer-imguide,.layui-layer-imgbar{display:none}.layui-layer-imgprev,.layui-layer-imgnext{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:none;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px}.layui-layer-imgnext{right:10px;background-position:-5px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:#000c;background-color:#000 \\ ;filter:Alpha(opacity=80);color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:0}.layui-layer-imgtit *{display:inline-block;*display: inline;*zoom: 1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} "); System.addImportMap({ - imports: { - "jquery": "user:jquery", - "localforage": "user:localforage", - "toastify-js": "user:toastify-js", - "blueimp-md5": "user:blueimp-md5", - "viewerjs": "user:viewerjs", - "qrcodejs": "user:qrcodejs" - } + imports: { + "jquery": "user:jquery", + "localforage": "user:localforage", + "toastify-js": "user:toastify-js", + "blueimp-md5": "user:blueimp-md5", + "viewerjs": "user:viewerjs", + "qrcodejs": "user:qrcodejs" + } }); System.set("user:jquery", (() => { - const _ = jQuery; - ('default' in _) || (_.default = _); - return _ + const _ = jQuery; + ('default' in _) || (_.default = _); + return _ })()); System.set("user:localforage", (() => { - const _ = localforage; - ('default' in _) || (_.default = _); - return _ + const _ = localforage; + ('default' in _) || (_.default = _); + return _ })()); System.set("user:toastify-js", (() => { - const _ = Toastify; - ('default' in _) || (_.default = _); - return _ + const _ = Toastify; + ('default' in _) || (_.default = _); + return _ })()); System.set("user:blueimp-md5", (() => { - const _ = md5; - ('default' in _) || (_.default = _); - return _ + const _ = md5; + ('default' in _) || (_.default = _); + return _ })()); System.set("user:viewerjs", (() => { - const _ = Viewer; - ('default' in _) || (_.default = _); - return _ + const _ = Viewer; + ('default' in _) || (_.default = _); + return _ })()); System.set("user:qrcodejs", (() => { - const _ = QRCode; - ('default' in _) || (_.default = _); - return _ + const _ = QRCode; + ('default' in _) || (_.default = _); + return _ })()); System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueimp-md5', 'viewerjs', 'qrcodejs'], (function (exports, module) { @@ -147,25 +147,25 @@ System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueim execute: (async function () { var __defProp = Object.defineProperty; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value - }) : obj[key] = value; + var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value + }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); const scriptRel = /* @__PURE__ */ (function detectScriptRel() { const relList = typeof document !== "undefined" && document.createElement("link").relList; return relList && relList.supports && relList.supports("modulepreload") ? "modulepreload" : "preload"; })(); - const assetsURL = function (dep) { + const assetsURL = function (dep) { return "/" + dep; }; const seen = {}; const __vitePreload = function preload(baseModule, deps, importerUrl) { let promise = Promise.resolve(); if (deps && deps.length > 0) { - let allSettled2 = function (promises) { + let allSettled2 = function (promises) { return Promise.all( promises.map( (p) => Promise.resolve(p).then( @@ -182,38 +182,37 @@ System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueim const cspNonce = (cspNonceMeta == null ? void 0 : cspNonceMeta.nonce) || (cspNonceMeta == null ? void 0 : cspNonceMeta.getAttribute("nonce")); promise = allSettled2( deps.map((dep) => { - dep = assetsURL(dep); - if (dep in seen) return; - seen[dep] = true; - const isCss = dep.endsWith(".css"); - const cssSelector = isCss ? '[rel="stylesheet"]' : ""; - if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) { - return; - } - const link = document.createElement("link"); - link.rel = isCss ? "stylesheet" : scriptRel; - if (!isCss) { - link.as = "script"; - } - link.crossOrigin = ""; - link.href = dep; - if (cspNonce) { - link.setAttribute("nonce", cspNonce); - } - document.head.appendChild(link); - if (isCss) { - return new Promise((res, rej) => { - link.addEventListener("load", res); - link.addEventListener( - "error", - () => rej(new Error(`Unable to preload CSS for ${dep}`)) - ); - }); - } + dep = assetsURL(dep); + if (dep in seen) return; + seen[dep] = true; + const isCss = dep.endsWith(".css"); + const cssSelector = isCss ? '[rel="stylesheet"]' : ""; + if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) { + return; + } + const link = document.createElement("link"); + link.rel = isCss ? "stylesheet" : scriptRel; + if (!isCss) { + link.as = "script"; + } + link.crossOrigin = ""; + link.href = dep; + if (cspNonce) { + link.setAttribute("nonce", cspNonce); + } + document.head.appendChild(link); + if (isCss) { + return new Promise((res, rej) => { + link.addEventListener("load", res); + link.addEventListener( + "error", + () => rej(new Error(`Unable to preload CSS for ${dep}`)) + ); + }); + } }) ); } - function handlePreloadError(err) { const e = new Event("vite:preloadError", { cancelable: true @@ -224,7 +223,6 @@ System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueim throw err; } } - return promise.then((res) => { for (const item of res || []) { if (item.status !== "rejected") continue; @@ -234,89 +232,89 @@ System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueim }); }; var __defProp2 = Object.defineProperty, __typeError = (msg) => { - throw TypeError(msg); + throw TypeError(msg); }, __publicField2 = (obj, key, value) => ((obj2, key2, value2) => key2 in obj2 ? __defProp2(obj2, key2, { - enumerable: true, - configurable: true, - writable: true, - value: value2 + enumerable: true, + configurable: true, + writable: true, + value: value2 }) : obj2[key2] = value2)(obj, "symbol" != typeof key ? key + "" : key, value), __privateMethod = (obj, member, method) => (((obj2, member2, msg) => { - member2.has(obj2) || __typeError("Cannot " + msg); + member2.has(obj2) || __typeError("Cannot " + msg); })(obj, member, "access private method"), method); - const currentHref$1 = window.location.href, isJavDb$1 = currentHref$1.includes("javdb"), - isJavBus$1 = currentHref$1.includes("javbus") || currentHref$1.includes("seejav") || currentHref$1.includes("bus") || currentHref$1.includes("javsee") || "javbus" === (() => { - try { - const _alt = $(".hidden-xs").attr("alt"); - return _alt ? _alt.trim().toLowerCase() : void 0; - } catch (_e) { - return void 0; - } - })(), - isSearchPage = currentHref$1.includes("/search?q") || currentHref$1.includes("/search/") || currentHref$1.includes("/users/"), - Status_RUNNING = "RUNNING", Status_SUCCESS = "SUCCESS", Status_FAIL = "FAIL", Status_LOADING = "LOADING", - Status_FILTER$1 = "filter", Status_FAVORITE$1 = "favorite", Status_HAS_DOWN$1 = "hasDown", - Status_HAS_WATCH$1 = "hasWatch", NO = "no", YES$1 = "yes", qualityOptions = [{ - id: "video-mhb", - quality: "dmb_w", - text: "旧视频源-中画质宽版 (404p)", - canSelect: false - }, { - id: "video-mhb", - quality: "sm_s", - text: "旧视频源-低画质 (240p)", - canSelect: false - }, { - id: "video-mhb", - quality: "dm_s", - text: "旧视频源-中画质 (360p)", - canSelect: false - }, { - id: "video-mhb", - quality: "dmb_s", - text: "旧视频源-中画质 (480p)", - canSelect: false - }, { - id: "video-mhb", - quality: "mhb_w", - text: "旧视频源-高画质宽版 (404p)", - canSelect: false - }, { - id: "video-mmb", - quality: "mmb", - text: "中画质 (432p)", - canSelect: true - }, { - id: "video-mhb", - quality: "mhb", - text: "高画质 (576p)", - canSelect: true - }, { - id: "video-hmb", - quality: "hmb", - text: "HD (720p)", - canSelect: true - }, { - id: "video-hhb", - quality: "hhb", - text: "FullHD (1080p)", - canSelect: true - }, { - id: "video-hhbs", - quality: "hhbs", - text: "FullHD (1080p60fps)", - canSelect: true - }, { - id: "video-4k", - quality: "4k", - text: "4K (2160p)", - canSelect: true - }, { - id: "video-4ks", - quality: "4ks", - text: "4K (2160p60fps)", - canSelect: true - }]; + const currentHref$1 = window.location.href, isJavDb$1 = currentHref$1.includes("javdb"), + isJavBus$1 = currentHref$1.includes("javbus") || currentHref$1.includes("seejav") || currentHref$1.includes("bus") || currentHref$1.includes("javsee") || "javbus" === (() => { + try { + const _alt = $(".hidden-xs").attr("alt"); + return _alt ? _alt.trim().toLowerCase() : void 0; + } catch (_e) { + return void 0; + } + })(), + isSearchPage = currentHref$1.includes("/search?q") || currentHref$1.includes("/search/") || currentHref$1.includes("/users/"), + Status_RUNNING = "RUNNING", Status_SUCCESS = "SUCCESS", Status_FAIL = "FAIL", Status_LOADING = "LOADING", + Status_FILTER$1 = "filter", Status_FAVORITE$1 = "favorite", Status_HAS_DOWN$1 = "hasDown", + Status_HAS_WATCH$1 = "hasWatch", NO = "no", YES$1 = "yes", qualityOptions = [{ + id: "video-mhb", + quality: "dmb_w", + text: "旧视频源-中画质宽版 (404p)", + canSelect: false + }, { + id: "video-mhb", + quality: "sm_s", + text: "旧视频源-低画质 (240p)", + canSelect: false + }, { + id: "video-mhb", + quality: "dm_s", + text: "旧视频源-中画质 (360p)", + canSelect: false + }, { + id: "video-mhb", + quality: "dmb_s", + text: "旧视频源-中画质 (480p)", + canSelect: false + }, { + id: "video-mhb", + quality: "mhb_w", + text: "旧视频源-高画质宽版 (404p)", + canSelect: false + }, { + id: "video-mmb", + quality: "mmb", + text: "中画质 (432p)", + canSelect: true + }, { + id: "video-mhb", + quality: "mhb", + text: "高画质 (576p)", + canSelect: true + }, { + id: "video-hmb", + quality: "hmb", + text: "HD (720p)", + canSelect: true + }, { + id: "video-hhb", + quality: "hhb", + text: "FullHD (1080p)", + canSelect: true + }, { + id: "video-hhbs", + quality: "hhbs", + text: "FullHD (1080p60fps)", + canSelect: true + }, { + id: "video-4k", + quality: "4k", + text: "4K (2160p)", + canSelect: true + }, { + id: "video-4ks", + quality: "4ks", + text: "4K (2160p60fps)", + canSelect: true + }]; let detailPageCss$1 = ""; window.location.href.includes("hideNav=1") && (detailPageCss$1 = "\n .navbar-default {\n display: none !important;\n }\n body {\n padding-top:0px!important;\n }\n "); const javBusStyle = ` @@ -1240,7 +1238,6 @@ System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueim } `; - function insertStyle(css) { if (css) if (css.includes("\n "; } - async handle() { this.waterfall().then(); } - getInitialPageNumber() { if (isJavBus$1) { const match = currentHref$1.match(/\/(page|star\/[^/]+)\/(\d+)/); @@ -3381,7 +3267,6 @@ ${value}\r } return 1; } - async waterfall() { if (await this.shouldDisablePaging()) return; const selector = this.getSelector(); @@ -3413,7 +3298,6 @@ ${value}\r }), 1e3); this.hasMore || this.setState("waterfall-no-more", "已经到底了"); } - async loadNextPage() { var _a2; if (await storageManager.getSetting("autoPage", YES$1) === NO) { @@ -3431,7 +3315,7 @@ ${value}\r if (isJavDb$1 && pageNum > maxPage || currentHref$1.includes("month")) { const beyond60Plugin = this.getBean("Beyond60Plugin"); if (beyond60Plugin) { - const {html: html2, nextUrl, hasMore} = await beyond60Plugin.handleBeyond60(this.nextUrl); + const {html: html2, nextUrl, hasMore} = await beyond60Plugin.handleBeyond60(this.nextUrl); if (html2) { const pageTop2 = this.container.scrollHeight; this.pageItems.push({ @@ -3455,8 +3339,8 @@ ${value}\r const $dom = utils.htmlTo$dom(html); isJavBus$1 && $dom.find(".avatar-box").length > 0 && $dom.find(".avatar-box").parent().remove(); let itemList = $dom.find(this.getSelector().requestDomItemSelector); - const currentBoxCarInfoList = this.getBoxCarInfoList(), - nextPageBoxCarInfoList = this.getBoxCarInfoList(itemList); + const currentBoxCarInfoList = this.getBoxCarInfoList(), + nextPageBoxCarInfoList = this.getBoxCarInfoList(itemList); if (this.checkDuplicateCarNumbers(currentBoxCarInfoList, nextPageBoxCarInfoList)) { this.nextUrl = null; this.hasMore = false; @@ -3486,7 +3370,6 @@ ${value}\r this.isLoading = false; } } - checkScrollPosition() { const scrollPosition = window.scrollY; for (let i = this.pageItems.length - 1; i >= 0; i--) { @@ -3500,18 +3383,15 @@ ${value}\r } } } - checkLoad() { if (!this.loader) return; this.loader.getBoundingClientRect().top < window.innerHeight + this.preloadDistance && this.loadNextPage().then(); } - async shouldDisablePaging() { if (!window.isListPage) return true; await storageManager.getSetting("autoPage", YES$1); return ["search?q", "handlePlayback=1", "handleTop=1", "/want_watch_videos", "/watched_videos", "/advanced_search?type=100"].some(((path) => currentHref$1.includes(path))); } - updatePageUrl_old(href) { window.history.pushState({}, "", href); if (isJavBus$1) { @@ -3519,18 +3399,15 @@ ${value}\r document.title = document.title.replace(/第\d+頁/, "第" + pageNumber + "頁"); } } - updatePageUrl(url) { window.history.replaceState({}, "", url); isJavBus$1 && (document.title = document.title.replace(/第\d+頁/, `第${this.currentPage}頁`)); } - setState(state, text) { this.loader.className = `jhs-scroll ${state}`; this.loader.textContent = text; } } - class AliyunApi { constructor(refresh_token) { this.baseApiUrl = "https://api.aliyundrive.com"; @@ -3539,14 +3416,12 @@ ${value}\r this.default_drive_id = null; this.backupFolderId = null; } - async getDefaultDriveId() { if (this.default_drive_id) return this.default_drive_id; this.userInfo = await this.getUserInfo(); this.default_drive_id = this.userInfo.default_drive_id; return this.default_drive_id; } - async getHeaders() { if (this.authorization) return { authorization: this.authorization @@ -3556,7 +3431,6 @@ ${value}\r authorization: this.authorization }; } - async getAuthorization() { let url = this.baseApiUrl + "/v2/account/token", data = { refresh_token: this.refresh_token, @@ -3568,13 +3442,11 @@ ${value}\r throw e.message.includes("is not valid") ? new Error("refresh_token无效, 请重新填写并保存") : e; } } - async getUserInfo() { const headers = await this.getHeaders(); let url = this.baseApiUrl + "/v2/user/get"; return await gmHttp.post(url, {}, headers); } - async deleteFile(file_id, drive_id = null) { if (!file_id) throw new Error("未传入file_id"); drive_id || (drive_id = await this.getDefaultDriveId()); @@ -3586,7 +3458,6 @@ ${value}\r await gmHttp.post(url, data, headers); return {}; } - async createFolder(name2, drive_id = null, parent_folder_id = "root") { drive_id || (drive_id = await this.getDefaultDriveId()); let url = this.baseApiUrl + "/adrive/v2/file/createWithFolders", data = { @@ -3600,7 +3471,6 @@ ${value}\r const headers = await this.getHeaders(); return await gmHttp.post(url, data, headers); } - async getFileList(parent_folder_id = "root", drive_id = null) { drive_id || (drive_id = await this.getDefaultDriveId()); let url = this.baseApiUrl + "/adrive/v3/file/list"; @@ -3619,7 +3489,6 @@ ${value}\r }, headers = await this.getHeaders(); return (await gmHttp.post(url, data, headers)).items; } - async uploadFile(folder_id, fileName, uploadContent, drive_id = null) { show.info("请求存储空间中..."); let createFileUrl = this.baseApiUrl + "/adrive/v2/file/createWithFolders"; @@ -3634,9 +3503,9 @@ ${value}\r type: "file", check_name_mode: "auto_rename" }; - const headers = await this.getHeaders(), createFileResult = await gmHttp.post(createFileUrl, data, headers), - upload_id = createFileResult.upload_id, upload_file_id = createFileResult.file_id, - upload_url = createFileResult.part_info_list[0].upload_url; + const headers = await this.getHeaders(), createFileResult = await gmHttp.post(createFileUrl, data, headers), + upload_id = createFileResult.upload_id, upload_file_id = createFileResult.file_id, + upload_url = createFileResult.part_info_list[0].upload_url; show.info("开始上传文件..."); await this._doUpload(upload_url, uploadContent); await gmHttp.post("https://api.aliyundrive.com/v2/file/complete", data = { @@ -3645,7 +3514,6 @@ ${value}\r upload_id }, headers); } - _doUpload(upload_url, uploadContent) { return new Promise(((resolve, reject) => { $.ajax({ @@ -3664,7 +3532,6 @@ ${value}\r }); })); } - async getDownloadUrl(file_id, drive_id = null) { drive_id || (drive_id = await this.getDefaultDriveId()); let url = this.baseApiUrl + "/v2/file/get_download_url"; @@ -3675,7 +3542,6 @@ ${value}\r }; return (await gmHttp.post(url, data, headers)).url; } - async _createBackupFolder(folderName) { const fileList = await this.getFileList(); let folderObj = null; @@ -3692,7 +3558,6 @@ ${value}\r } this.backupFolderId = folderObj.file_id; } - async backup(folderName, fileName, uploadContent) { if (this.backupFolderId) await this.uploadFile(this.backupFolderId, fileName, uploadContent); else { @@ -3700,7 +3565,6 @@ ${value}\r await this.uploadFile(this.backupFolderId, fileName, uploadContent); } } - async getBackupList(folderName) { let dataList; if (this.backupFolderId) dataList = await this.getFileList(this.backupFolderId); @@ -3720,7 +3584,6 @@ ${value}\r return fileList; } } - class WebDavApi { constructor(davUrl, username, password) { this.davUrl = davUrl.endsWith("/") ? davUrl : davUrl + "/"; @@ -3728,14 +3591,12 @@ ${value}\r this.password = password; this.folderName = null; } - _getAuthHeaders() { return { Authorization: `Basic ${btoa(`${this.username}:${this.password}`)}`, Depth: "1" }; } - _sendRequest(method, path, headers = {}, data) { return new Promise(((resolve, reject) => { const url = this.davUrl + path, allHeaders = { @@ -3761,7 +3622,6 @@ ${value}\r }); })); } - async backup(folderName, fileName, uploadContent) { await this._sendRequest("MKCOL", folderName); const path = folderName + "/" + fileName; @@ -3769,11 +3629,10 @@ ${value}\r "Content-Type": "text/plain" }, uploadContent); } - async getFileList(folderName) { var _a2, _b, _c; const xmlResponse = (await this._sendRequest("PROPFIND", folderName, { - "Content-Type": "application/xml" + "Content-Type": "application/xml" }, '\n \n \n \n \n \n \n \n \n \n ')).responseText, items = new DOMParser().parseFromString(xmlResponse, "text/xml").getElementsByTagNameNS("DAV:", "response"), fileList = []; @@ -3781,9 +3640,9 @@ ${value}\r if (0 === i) continue; let item = items[i]; console.log(item); - const name2 = item.getElementsByTagNameNS("DAV:", "displayname")[0].textContent, - size = (null == (_a2 = item.getElementsByTagNameNS("DAV:", "getcontentlength")[0]) ? void 0 : _a2.textContent) || "0", - createTime = (null == (_b = item.getElementsByTagNameNS("DAV:", "creationdate")[0]) ? void 0 : _b.textContent) || (null == (_c = item.getElementsByTagNameNS("DAV:", "getlastmodified")[0]) ? void 0 : _c.textContent) || ""; + const name2 = item.getElementsByTagNameNS("DAV:", "displayname")[0].textContent, + size = (null == (_a2 = item.getElementsByTagNameNS("DAV:", "getcontentlength")[0]) ? void 0 : _a2.textContent) || "0", + createTime = (null == (_b = item.getElementsByTagNameNS("DAV:", "creationdate")[0]) ? void 0 : _b.textContent) || (null == (_c = item.getElementsByTagNameNS("DAV:", "getlastmodified")[0]) ? void 0 : _c.textContent) || ""; "0" !== size && fileList.push({ fileId: name2, name: name2, @@ -3794,20 +3653,17 @@ ${value}\r fileList.reverse(); return fileList; } - async deleteFile(fileId) { let path = this.folderName + "/" + encodeURI(fileId); await this._sendRequest("DELETE", path, { "Cache-Control": "no-cache" }); } - async getBackupList(folderName) { this.folderName = folderName; await this._sendRequest("MKCOL", folderName); return this.getFileList(folderName); } - async getFileContent(filePath) { let path = this.folderName + "/" + filePath; return (await this._sendRequest("GET", path, { @@ -3815,16 +3671,13 @@ ${value}\r })).responseText; } } - const SALT = "x7k9p3"; - function simpleEncrypt(str) { return (SALT + str + SALT).split("").map(((char) => { const code = char.codePointAt(0); return String.fromCodePoint(code + 5); })).join(""); } - class SettingPlugin extends BasePlugin { constructor() { super(...arguments); @@ -3855,15 +3708,13 @@ ${value}\r title: "Top250及热播的评分数据" }]); } - getName() { return "SettingPlugin"; } - async initCss() { const settingObj = await storageManager.getSetting(); - let containerWidth = (null == settingObj ? void 0 : settingObj.containerWidth) ?? "100", - containerColumns = utils.isMobile() && window.innerWidth < 1e3 ? 1 : (null == settingObj ? void 0 : settingObj.containerColumns) ?? 5; + let containerWidth = (null == settingObj ? void 0 : settingObj.containerWidth) ?? "100", + containerColumns = utils.isMobile() && window.innerWidth < 1e3 ? 1 : (null == settingObj ? void 0 : settingObj.containerColumns) ?? 5; this.applyImageMode().then(); let containerWidthCss = ` section .container{ @@ -4120,11 +3971,10 @@ ${value}\r `; } - async handle() { await storageManager.getSetting("enableClog", YES$1) === YES$1 && clog.show(); if (isJavDb$1) { - let handleResize2 = function () { + let handleResize2 = function () { if ($(".navbar-search").is(":hidden")) { $(".mini-setting-box").hide(); $(".setting-box").show(); @@ -4165,7 +4015,6 @@ ${value}\r $(".mini-simple-setting").html("").hide(); })); } - async openSettingDialog(defaultActivePanel = "backup-panel", fun) { const buttonsHTML = this.cacheItems.map(((item) => `
@@ -4840,16 +4689,15 @@ ${value}\r } }); } - async simpleSetting() { let settingObj = await storageManager.getSetting(); - const showFilterItemHotKey = settingObj.showFilterItemHotKey, - showFilterActorItemHotKey = settingObj.showFilterActorItemHotKey, - showFilterKeywordItemHotKey = settingObj.showFilterKeywordItemHotKey, - showFavoriteItemHotKey = settingObj.showFavoriteItemHotKey, - showHasDownItemHotKey = settingObj.showHasDownItemHotKey, - showHasWatchItemHotKey = settingObj.showHasWatchItemHotKey, - showAllItemHotKey = settingObj.showAllItemHotKey; + const showFilterItemHotKey = settingObj.showFilterItemHotKey, + showFilterActorItemHotKey = settingObj.showFilterActorItemHotKey, + showFilterKeywordItemHotKey = settingObj.showFilterKeywordItemHotKey, + showFavoriteItemHotKey = settingObj.showFavoriteItemHotKey, + showHasDownItemHotKey = settingObj.showHasDownItemHotKey, + showHasWatchItemHotKey = settingObj.showHasWatchItemHotKey, + showAllItemHotKey = settingObj.showAllItemHotKey; return `
@@ -4920,8 +4768,7 @@ ${value}\r
- ❓ 不规则重命名 (详情页生效,有延迟): - + ❓ 不规则重命名:(刷新详情页生效,有延迟)
@@ -5007,7 +4854,6 @@ ${value}\r
`; } - async loadForm() { let settingObj = await storageManager.getSetting(); $("#videoQuality").val(settingObj.videoQuality); @@ -5028,8 +4874,8 @@ ${value}\r $("#enableCheckNewVideo").val(settingObj.enableCheckNewVideo || YES$1); $("#checkNewVideo_intervalTime").val(settingObj.checkNewVideo_intervalTime || 12); $("#checkNewVideo_ruleTime").val(settingObj.checkNewVideo_ruleTime || 8760); - const highlightedTagNumber = settingObj.highlightedTagNumber || 1, - highlightedTagColor = settingObj.highlightedTagColor || "#ce2222"; + const highlightedTagNumber = settingObj.highlightedTagNumber || 1, + highlightedTagColor = settingObj.highlightedTagColor || "#ce2222"; $("#highlightedTagNumber").val(settingObj.highlightedTagNumber || 1); $("#highlightedTagColor").val(settingObj.highlightedTagColor || "#ce2222"); $("#highlightedTagLabel").css("border", `${highlightedTagNumber}px solid ${highlightedTagColor}`); @@ -5049,11 +4895,11 @@ ${value}\r $("#enableHandleSvg").prop("checked", !settingObj.enableHandleSvg || settingObj.enableHandleSvg === YES$1); $("#enableSiteSvg").prop("checked", !settingObj.enableSiteSvg || settingObj.enableSiteSvg === YES$1); $("#enableCopySvg").prop("checked", !settingObj.enableCopySvg || settingObj.enableCopySvg === YES$1); - const otherSitePlugin = this.getBean("OtherSitePlugin"), missAvUrl = await otherSitePlugin.getMissAvUrl(), - jableUrl = await otherSitePlugin.getjableUrl(), - javTrailersUrl = await otherSitePlugin.getJavTrailersUrl(), - av123Url = await otherSitePlugin.getAv123Url(), javDbUrl = await otherSitePlugin.getJavDbUrl(), - javBusUrl = await otherSitePlugin.getJavBusUrl(), supJavUrl = await otherSitePlugin.getSupJavUrl(); + const otherSitePlugin = this.getBean("OtherSitePlugin"), missAvUrl = await otherSitePlugin.getMissAvUrl(), + jableUrl = await otherSitePlugin.getjableUrl(), + javTrailersUrl = await otherSitePlugin.getJavTrailersUrl(), + av123Url = await otherSitePlugin.getAv123Url(), javDbUrl = await otherSitePlugin.getJavDbUrl(), + javBusUrl = await otherSitePlugin.getJavBusUrl(), supJavUrl = await otherSitePlugin.getSupJavUrl(); $("#missAvUrl").val(missAvUrl); $("#jableUrl").val(jableUrl); $("#javTrailersUrl").val(javTrailersUrl); @@ -5061,8 +4907,8 @@ ${value}\r $("#javDbUrl").val(javDbUrl); $("#javBusUrl").val(javBusUrl); $("#supJavUrl").val(supJavUrl); - let reviewKeywordList = await storageManager.getReviewFilterKeywordList(), - filterKeywordList = await storageManager.getTitleFilterKeyword(); + let reviewKeywordList = await storageManager.getReviewFilterKeywordList(), + filterKeywordList = await storageManager.getTitleFilterKeyword(); reviewKeywordList && reviewKeywordList.forEach(((reviewKeyword) => { this.addLabelTag("#reviewKeywordContainer", reviewKeyword); })); @@ -5076,8 +4922,8 @@ ${value}\r })); })); $("#hotkey-panel [id]").map(((i, el) => el.id)).get().forEach(((containerId) => { - const $element = $(`#${containerId}`), - defaultValue = void 0 !== settingObj[containerId] ? settingObj[containerId] : $element.attr("data-default-hotkey") || ""; + const $element = $(`#${containerId}`), + defaultValue = void 0 !== settingObj[containerId] ? settingObj[containerId] : $element.attr("data-default-hotkey") || ""; $element.val(defaultValue).on("input", ((event) => { let value = $(event.target).val(); if (/[\u4e00-\u9fa5]/.test(value) || /^Shift[a-zA-Z0-9]+$/.test(value)) { @@ -5088,13 +4934,11 @@ ${value}\r })); $("#enableImageHotKey").prop("checked", !!settingObj.enableImageHotKey && settingObj.enableImageHotKey === YES$1); } - handleHotkeyInput(event, $input) { event.preventDefault(); const hotkey = this.parseHotkey(event); "" !== hotkey ? this.isDuplicateHotkey(hotkey, $input.attr("id")) ? show.error("该快捷键已被其他功能使用!") : $input.val(hotkey) : $input.val(""); } - parseHotkey(event) { if ("Backspace" === event.key || "Process" === event.key) return ""; const keys = []; @@ -5114,7 +4958,6 @@ ${value}\r ["Control", "Shift", "Alt", "Meta"].includes(event.key) || keys.push(key); return keys.length > 0 ? keys.join("+") : ""; } - isDuplicateHotkey(hotkey, currentInputId) { let isDuplicate = false; $("#hotkey-panel [id]").each(((i, el) => { @@ -5125,7 +4968,6 @@ ${value}\r })); return isDuplicate; } - async initSimpleSettingForm() { let settingObj = await storageManager.getSetting(); $("#containerColumns").val(settingObj.containerColumns || 5); @@ -5202,12 +5044,12 @@ ${value}\r await storageManager.saveSettingItem("showHasWatchItem", showHasWatchItem); window.refresh(); })); - const $otherCheckboxes = $("#showFilterItem, #showFilterActorItem, #showFilterKeywordItem, #showFavoriteItem, #showHasDownItem, #showHasWatchItem"), - updateOtherCheckboxesState = () => { - const isShowAllChecked = $("#showAllItem").is(":checked"); - $otherCheckboxes.prop("disabled", isShowAllChecked); - isShowAllChecked ? $otherCheckboxes.attr("data-tip", "请先关闭显示所有才可点击") : $otherCheckboxes.removeAttr("data-tip"); - }; + const $otherCheckboxes = $("#showFilterItem, #showFilterActorItem, #showFilterKeywordItem, #showFavoriteItem, #showHasDownItem, #showHasWatchItem"), + updateOtherCheckboxesState = () => { + const isShowAllChecked = $("#showAllItem").is(":checked"); + $otherCheckboxes.prop("disabled", isShowAllChecked); + isShowAllChecked ? $otherCheckboxes.attr("data-tip", "请先关闭显示所有才可点击") : $otherCheckboxes.removeAttr("data-tip"); + }; $("#showAllItem").prop("checked", !!settingObj.showAllItem && settingObj.showAllItem === YES$1); $("#showAllItem").on("change", (async (event) => { let showAllItem = $("#showAllItem").is(":checked") ? YES$1 : NO; @@ -5392,7 +5234,6 @@ ${value}\r }); })); } - async applyImageMode() { $("#verticalImgStyle").remove(); if (await storageManager.getSetting("enableVerticalModel", NO) === YES$1) { @@ -5424,10 +5265,9 @@ ${value}\r } isJavBus$1 && this.getBean("BusImgPlugin").logImageHeightsByRow(); } - bindClick() { const self = this; - $(".side-menu-item").on("click", (function () { + $(".side-menu-item").on("click", (function () { $(".side-menu-item").removeClass("active"); $(this).addClass("active"); $(".content-panel").hide(); @@ -5451,15 +5291,15 @@ ${value}\r $("#webdavBackupBtn").on("click", ((event) => this.backupDataByWebDav(event))); $("#webdavBackupListBtn").on("click", ((event) => this.backupListBtnByWebDav(event))); $("#getRefreshTokenBtn").on("click", ((event) => layer.alert("即将跳转阿里云盘, 请登录后, 点击最右侧悬浮按钮获取refresh_token", { - yes: function (index, layero, that) { + yes: function (index, layero, that) { window.open("https://www.aliyundrive.com/drive/home"); layer.close(index); } }))); $("#saveBtn").on("click", (() => this.saveForm())); $(".clean-btn").on("click", ((event) => { - const key = $(event.currentTarget).data("key"), - cacheItem = this.cacheItems.find(((item) => item.key === key)); + const key = $(event.currentTarget).data("key"), + cacheItem = this.cacheItems.find(((item) => item.key === key)); localStorage.removeItem(key); show.ok(`${cacheItem.text} 清理成功`); $("#cache-data-display").hide(); @@ -5472,8 +5312,8 @@ ${value}\r localStorage.removeItem("jhs_other_site_dmm"); })); $(".view-btn").on("click", ((event) => { - const key = $(event.currentTarget).data("key"), data = localStorage.getItem(key), - displayDiv = $("#cache-data-display"), pre = displayDiv.find("pre"); + const key = $(event.currentTarget).data("key"), data = localStorage.getItem(key), + displayDiv = $("#cache-data-display"), pre = displayDiv.find("pre"); displayDiv.show(); if (data) try { const parsedData = JSON.parse(data); @@ -5483,17 +5323,15 @@ ${value}\r } else pre.text("无数据"); })); - const $widthInput = $("#highlightedTagNumber"), $colorPicker = $("#highlightedTagColor"), - $previewBox = $("#highlightedTagLabel"); - + const $widthInput = $("#highlightedTagNumber"), $colorPicker = $("#highlightedTagColor"), + $previewBox = $("#highlightedTagLabel"); function updateBorder() { const currentWidth = $widthInput.val(), currentColor = $colorPicker.val(); $previewBox.css("border", `${currentWidth}px solid ${currentColor}`); } - $widthInput.on("input", updateBorder); $colorPicker.on("input", updateBorder); - $("#markDeleteSelectAll").on("change", (function () { + $("#markDeleteSelectAll").on("change", (function () { const checked = $(this).prop("checked"); $(".mark-delete-item-cb").prop("checked", checked); })); @@ -5504,7 +5342,7 @@ ${value}\r return; } const checkedItems = []; - $(".mark-delete-item-cb:checked").each((function () { + $(".mark-delete-item-cb:checked").each((function () { const index = parseInt($(this).data("index")); checkedItems.push(markedList[index]); })); @@ -5545,10 +5383,10 @@ ${value}\r await storageManager.forage.setItem("markedDeleteList", markedList); show.ok(`已移除: ${item.title}`); const self2 = this; - $(`.markDeleteSvg`).each((function () { + $(`.markDeleteSvg`).each((function () { const $markBtn = $(this); const $box2 = $markBtn.closest(".item"); - const {carNum: carNum2} = self2.getBoxCarInfo($box2); + const {carNum: carNum2} = self2.getBoxCarInfo($box2); if (carNum2 === item.carNum) { $markBtn.removeClass("marked"); $markBtn.attr("title", "标记删除"); @@ -5559,7 +5397,6 @@ ${value}\r } })); } - async saveForm() { let settingObj = await storageManager.getSetting(); settingObj.videoQuality = $("#videoQuality").val(); @@ -5632,7 +5469,6 @@ ${value}\r this.getBean("BlacklistPlugin").resetBtnTip(); this.getBean("BlacklistPlugin").reloadTable(); } - async loadMarkDeleteList() { const markedList = await storageManager.forage.getItem("markedDeleteList") || []; const $list = $("#markDeleteList"); @@ -5661,7 +5497,6 @@ ${value}\r $list.html(html); $("#markDeleteSelectAll").prop("checked", true); } - addLabelTag(containerId, keyword) { const $tagBox = $(`${containerId} .tag-box`); let $label, color = "#333"; @@ -5690,7 +5525,6 @@ ${value}\r })); $tagBox.append($label); } - addKeyword(event, containerId) { let $keywordInput = $(`${containerId} .keyword-input`); const keyword = $keywordInput.val().trim(); @@ -5699,7 +5533,6 @@ ${value}\r $keywordInput.val(""); } } - importData() { try { const input = document.createElement("input"); @@ -5740,7 +5573,6 @@ ${value}\r show.error("导入数据时出错: " + err.message); } } - async backupData(event) { let loadObj = loading(); try { @@ -5750,8 +5582,8 @@ ${value}\r return; } show.info("正在整理数据..."); - let fileName = utils.getNowStr("_", "_") + ".json", - uploadContent = JSON.stringify(await storageManager.exportData()); + let fileName = utils.getNowStr("_", "_") + ".json", + uploadContent = JSON.stringify(await storageManager.exportData()); uploadContent = simpleEncrypt(uploadContent); const aliyunApi = new AliyunApi(refresh_token); await aliyunApi.backup(this.folderName, fileName, uploadContent); @@ -5763,7 +5595,6 @@ ${value}\r loadObj.close(); } } - async backupListBtn(event) { const refresh_token = await storageManager.getSetting("refresh_token"); if (!refresh_token) { @@ -5781,7 +5612,6 @@ ${value}\r loadObj.close(); } } - async backupDataByWebDav(event) { const settingObj = await storageManager.getSetting(), webDavUrl = settingObj.webDavUrl; if (!webDavUrl) { @@ -5798,8 +5628,8 @@ ${value}\r show.error("请填写webDav密码并保存后, 再试此功能"); return; } - let fileName = utils.getNowStr("_", "_") + ".json", - uploadContent = JSON.stringify(await storageManager.exportData()); + let fileName = utils.getNowStr("_", "_") + ".json", + uploadContent = JSON.stringify(await storageManager.exportData()); uploadContent = simpleEncrypt(uploadContent); let loadObj = loading(); try { @@ -5813,7 +5643,6 @@ ${value}\r loadObj.close(); } } - async backupListBtnByWebDav(event) { const settingObj = await storageManager.getSetting(), webDavUrl = settingObj.webDavUrl; if (!webDavUrl) { @@ -5832,8 +5661,8 @@ ${value}\r } let loadObj = loading(); try { - const webDavApi = new WebDavApi(webDavUrl, webDavUsername, webDavPassword), - fileList = await webDavApi.getBackupList(this.folderName); + const webDavApi = new WebDavApi(webDavUrl, webDavUsername, webDavPassword), + fileList = await webDavApi.getBackupList(this.folderName); this.openFileListDialog(fileList, webDavApi, "WebDav"); } catch (e) { console.error(e); @@ -5842,7 +5671,6 @@ ${value}\r loadObj.close(); } } - openFileListDialog(fileList, api, apiType) { layer.open({ type: 1, @@ -5876,7 +5704,7 @@ ${value}\r formatter: (cell, formatterParams, onRendered) => { const units = ["B", "KB", "MB", "GB", "TB", "PB"]; let unitIndex = 0, adjustedSize = cell.getData().size; - for (; adjustedSize >= 1024 && unitIndex < units.length - 1;) { + for (; adjustedSize >= 1024 && unitIndex < units.length - 1;) { adjustedSize /= 1024; unitIndex++; } @@ -5899,9 +5727,9 @@ ${value}\r formatter: (cell, formatterParams, onRendered) => { const item = cell.getData(); onRendered((() => { - const deleteButton = cell.getElement().querySelector(".a-danger"), - downButton = cell.getElement().querySelector(".a-primary"), - importButton = cell.getElement().querySelector(".a-success"); + const deleteButton = cell.getElement().querySelector(".a-danger"), + downButton = cell.getElement().querySelector(".a-primary"), + importButton = cell.getElement().querySelector(".a-success"); deleteButton && deleteButton.addEventListener("click", ((e) => { utils.q(e, `是否删除 ${item.name} ?`, (async (index) => { let loadObj = loading(); @@ -5998,11 +5826,10 @@ ${value}\r } }); } - async exportData(event) { try { - const backupData = JSON.stringify(await storageManager.exportData()), - fileName = `${utils.getNowStr("_", "_")}.json`; + const backupData = JSON.stringify(await storageManager.exportData()), + fileName = `${utils.getNowStr("_", "_")}.json`; utils.download(backupData, fileName); show.ok("数据导出成功"); } catch (err) { @@ -6011,7 +5838,6 @@ ${value}\r } } } - class TaskPlugin extends BasePlugin { constructor() { super(...arguments); @@ -6022,11 +5848,9 @@ ${value}\r __publicField2(this, "lastCheckBlacklistTimeKey", "jhs_time_checkBlacklist"); __publicField2(this, "lastCheckNewVideoTimeKey", "jhs_time_checkNewVideo"); } - getName() { return "TaskPlugin"; } - async limitConcurrency(taskParamList, checkConcurrencyCount, checkRequestSleep, taskFn) { this.showIsRun(); const activePromises = [], totalItems = taskParamList.length; @@ -6046,23 +5870,19 @@ ${value}\r } await Promise.all(activePromises); } - isUnnecessaryCheck(lastCheckTimeStr, checkIntervalTime) { if (!checkIntervalTime) throw new Error("未传入checkIntervalTime"); checkIntervalTime = parseInt(checkIntervalTime); return utils.getHourDifference(new Date(lastCheckTimeStr), /* @__PURE__ */ new Date()) < checkIntervalTime; } - handle() { this.doTask().then(); } - showIsRun() { show.info("正在执行检测任务中, 请勿关闭当前窗口", { duration: 3e3 }); } - async doTask() { if (window.isListPage) { await this.loadConfig(); @@ -6075,10 +5895,10 @@ ${value}\r this.taskConfig.enableCheckBlacklist === YES$1 ? await this.checkBlacklist() : clog.warn("自动检测屏蔽黑名单-禁用"); if (!isJavBus$1) { if (this.taskConfig.enableCheckFavoriteActress === YES$1) { - const lastCheckFavoriteActressTimeStr = localStorage.getItem(this.lastCheckFavoriteActressTimeKey), - checkFavoriteActress_IntervalTime = this.taskConfig.checkFavoriteActress_IntervalTime, - isUnCheck = lastCheckFavoriteActressTimeStr && this.isUnnecessaryCheck(lastCheckFavoriteActressTimeStr, checkFavoriteActress_IntervalTime), - isLogin = $('a[href*="/users/profile"]').length > 0; + const lastCheckFavoriteActressTimeStr = localStorage.getItem(this.lastCheckFavoriteActressTimeKey), + checkFavoriteActress_IntervalTime = this.taskConfig.checkFavoriteActress_IntervalTime, + isUnCheck = lastCheckFavoriteActressTimeStr && this.isUnnecessaryCheck(lastCheckFavoriteActressTimeStr, checkFavoriteActress_IntervalTime), + isLogin = $('a[href*="/users/profile"]').length > 0; isUnCheck && clog.debug(`检测同步演员, 上次检测时间: ${lastCheckFavoriteActressTimeStr} 检测间隔时间: ${checkFavoriteActress_IntervalTime}小时 未到时间`); !isUnCheck && isLogin && await this.checkFavoriteActress(); } else clog.warn("自动同步已收藏的演员-禁用"); @@ -6096,7 +5916,6 @@ ${value}\r })); } } - async loadConfig() { const settingObj = await storageManager.getSetting(); this.taskConfig = { @@ -6112,24 +5931,23 @@ ${value}\r checkNewVideo_ruleTime: settingObj.checkNewVideo_ruleTime ? Number(settingObj.checkNewVideo_ruleTime) : 8760 }; } - async checkBlacklist(isManual) { let blacklist = await storageManager.getBlacklist(); if (0 === blacklist.length) return; blacklist = blacklist.sort(((a, b) => a.createTime < b.createTime ? 1 : a.createTime > b.createTime ? -1 : 0)); - const checkConcurrencyCount = this.taskConfig.checkConcurrencyCount, - checkRequestSleep = this.taskConfig.checkRequestSleep, - checkBlacklist_intervalTime = this.taskConfig.checkBlacklist_intervalTime, - checkBlacklist_ruleTime = this.taskConfig.checkBlacklist_ruleTime, - lastCheckBlacklistTimeStr = localStorage.getItem(this.lastCheckBlacklistTimeKey); + const checkConcurrencyCount = this.taskConfig.checkConcurrencyCount, + checkRequestSleep = this.taskConfig.checkRequestSleep, + checkBlacklist_intervalTime = this.taskConfig.checkBlacklist_intervalTime, + checkBlacklist_ruleTime = this.taskConfig.checkBlacklist_ruleTime, + lastCheckBlacklistTimeStr = localStorage.getItem(this.lastCheckBlacklistTimeKey); if (!isManual && lastCheckBlacklistTimeStr && this.isUnnecessaryCheck(lastCheckBlacklistTimeStr, checkBlacklist_intervalTime)) { clog.debug(`检测黑名单, 上次检测时间: ${lastCheckBlacklistTimeStr} 检测间隔时间: ${checkBlacklist_intervalTime}小时 未到时间`); return; } const taskParamList = [], msgList = []; for (const blacklistItem of blacklist) { - let name2 = blacklistItem.name, checkTime = blacklistItem.checkTime, - lastPublishTime = blacklistItem.lastPublishTime, url = blacklistItem.url; + let name2 = blacklistItem.name, checkTime = blacklistItem.checkTime, + lastPublishTime = blacklistItem.lastPublishTime, url = blacklistItem.url; if (new URL(window.location.href).hostname === new URL(url).hostname) { if (isManual || !checkTime || !this.isUnnecessaryCheck(checkTime, checkBlacklist_intervalTime)) if (!lastPublishTime || 0 === checkBlacklist_ruleTime || this.isUnnecessaryCheck(lastPublishTime, checkBlacklist_ruleTime)) taskParamList.push(blacklistItem); else { @@ -6146,13 +5964,13 @@ ${value}\r clog.log(`检测屏蔽黑名单, 总任务数: ${taskParamList.length}, 并发限制:${checkConcurrencyCount}, 请求间隔时间:${checkRequestSleep}ms`); const blacklistPlugin = this.getBean("BlacklistPlugin"); await this.limitConcurrency(taskParamList, checkConcurrencyCount, checkRequestSleep, (async (task) => { - let {starId, name: name2, url} = task; + let {starId, name: name2, url} = task; try { clog.log("正在检屏黑名单演员:", name2, url); $("#checkBlacklistMsg").text(`正在检屏黑名单演员: ${name2} ${url}`); const html = await gmHttp.get(url), $dom = utils.htmlTo$dom(html); this.storageQueue.addTask((async () => { - let {lastPublishTime} = await blacklistPlugin.parseAndSaveFilterInfo($dom, name2, starId); + let {lastPublishTime} = await blacklistPlugin.parseAndSaveFilterInfo($dom, name2, starId); await storageManager.updateBlacklistItem({ starId, name: name2, @@ -6173,7 +5991,6 @@ ${value}\r $("#checkBlacklistMsg").text("检测屏蔽黑名单, 结束"); this.getBean("BlacklistPlugin").resetBtnTip().then(); } - async checkFavoriteActress() { const checkUrl = `${this.javDbUrl}/users/collection_actors`, actorInfoList = []; await this.scrapeActorInfo(checkUrl, actorInfoList); @@ -6185,7 +6002,6 @@ ${value}\r this.getBean("NewVideoPlugin").resetBtnTip().then(); } } - async scrapeActorInfo(currentUrl, actorInfoList) { clog.log(`正在抓取页面: ${currentUrl}`); $("#checkNewVideoMsg").text(`正在解析已收藏的演员: ${currentUrl}`); @@ -6194,9 +6010,9 @@ ${value}\r $dom.find("#actors .actor-box a").each(((i, element) => { const $a = $(element), title = $a.attr("title"), href = $a.attr("href"); if (title && href) { - const allName = title.split(",").map(((name3) => name3.trim())).filter(((name3) => name3.length > 0)), - name2 = allName[0] || "", - segments = new URL(href, this.javDbUrl).pathname.split("/").filter(((s) => s.length > 0)); + const allName = title.split(",").map(((name3) => name3.trim())).filter(((name3) => name3.length > 0)), + name2 = allName[0] || "", + segments = new URL(href, this.javDbUrl).pathname.split("/").filter(((s) => s.length > 0)); let starId = ""; segments.length > 0 && (starId = segments[segments.length - 1]); let actressType = "censored"; @@ -6222,30 +6038,29 @@ ${value}\r clog.error(`抓取 ${currentUrl} 时发生错误:`, error); } } - async checkNewVideo(isManual) { - const dataActressInfoList = await storageManager.getFavoriteActressList(), - actressInfoList = utils.genericSort(dataActressInfoList, [{ - key: (item) => { - var _a2; - return (null == (_a2 = item.newVideoList) ? void 0 : _a2.length) ?? 0; - }, - order: "desc" - }, { - key: "lastPublishTime", - order: "desc" - }]), checkConcurrencyCount = this.taskConfig.checkConcurrencyCount, - checkRequestSleep = this.taskConfig.checkRequestSleep, - checkNewVideo_intervalTime = this.taskConfig.checkNewVideo_intervalTime, - checkNewVideo_ruleTime = this.taskConfig.checkNewVideo_ruleTime, - lastCheckNewVideoTimeStr = localStorage.getItem(this.lastCheckNewVideoTimeKey); + const dataActressInfoList = await storageManager.getFavoriteActressList(), + actressInfoList = utils.genericSort(dataActressInfoList, [{ + key: (item) => { + var _a2; + return (null == (_a2 = item.newVideoList) ? void 0 : _a2.length) ?? 0; + }, + order: "desc" + }, { + key: "lastPublishTime", + order: "desc" + }]), checkConcurrencyCount = this.taskConfig.checkConcurrencyCount, + checkRequestSleep = this.taskConfig.checkRequestSleep, + checkNewVideo_intervalTime = this.taskConfig.checkNewVideo_intervalTime, + checkNewVideo_ruleTime = this.taskConfig.checkNewVideo_ruleTime, + lastCheckNewVideoTimeStr = localStorage.getItem(this.lastCheckNewVideoTimeKey); if (!isManual && lastCheckNewVideoTimeStr && this.isUnnecessaryCheck(lastCheckNewVideoTimeStr, checkNewVideo_intervalTime)) { clog.debug(`检测新作品, 上次检测时间: ${lastCheckNewVideoTimeStr} 检测间隔时间: ${checkNewVideo_intervalTime}小时 未到时间`); return; } const taskParamList = [], msgList = []; for (const actress of actressInfoList) { - const {lastCheckTime, lastPublishTime, name: name2} = actress; + const {lastCheckTime, lastPublishTime, name: name2} = actress; !isManual && lastCheckTime && this.isUnnecessaryCheck(lastCheckTime, checkNewVideo_intervalTime) || (!lastPublishTime || 0 === checkNewVideo_ruleTime || this.isUnnecessaryCheck(lastPublishTime, checkNewVideo_ruleTime) ? taskParamList.push(actress) : msgList.push(`检测新作品: ${name2} ${lastPublishTime} 停更超过${checkNewVideo_ruleTime / 24 / 365}年,跳过检测`)); } if (0 === taskParamList.length) return; @@ -6253,11 +6068,11 @@ ${value}\r clog.log(msg); })); clog.log(`检测最新作品, 总任务数: ${taskParamList.length}, 并发限制:${checkConcurrencyCount}, 请求间隔时间:${checkRequestSleep}ms`); - const filterKeywordList = await storageManager.getTitleFilterKeyword(), - filterActorActressCarList = await storageManager.getBlacklistCarList(), - filterActorActressCarNumList = new Set(filterActorActressCarList.map(((car) => car.carNum))); + const filterKeywordList = await storageManager.getTitleFilterKeyword(), + filterActorActressCarList = await storageManager.getBlacklistCarList(), + filterActorActressCarNumList = new Set(filterActorActressCarList.map(((car) => car.carNum))); await this.limitConcurrency(taskParamList, checkConcurrencyCount, checkRequestSleep, (async (task) => { - const {lastCheckTime, name: name2, starId} = task; + const {lastCheckTime, name: name2, starId} = task; let url = `${this.javDbUrl}/actors/${starId}?t=d`; try { clog.log("正在检测最新作品, 演员:", name2, url); @@ -6280,7 +6095,6 @@ ${value}\r newVideoPlugin.loadData(); newVideoPlugin.resetBtnTip().then(); } - async parsePage($dom, starId, name2, filterKeywordList, filterActorActressCarNumList) { let movieList, nextPageLink, tempIsJavBus = false, selectorType = "javdb"; if ($dom.text().includes("javbus")) { @@ -6297,16 +6111,16 @@ ${value}\r } let carNumList = [], lastPublishTime = null; for (const element of movieList) { - const $item = $(element), {carNum: carNum2, url, title, publishTime} = this.getBoxCarInfo($item); + const $item = $(element), {carNum: carNum2, url, title, publishTime} = this.getBoxCarInfo($item); if (!carNum2) continue; if (!filterKeywordList.find(((kw) => title.includes(kw) || carNum2.startsWith(kw))) && !filterActorActressCarNumList.has(carNum2)) { lastPublishTime || (lastPublishTime = publishTime); carNumList.push(carNum2); } } - const carList = await storageManager.getCarList(), - storageCarNumList = new Set(carList.map(((car) => car.carNum))), - nonExistingCarNumList = carNumList.filter(((carNum2) => !storageCarNumList.has(carNum2))); + const carList = await storageManager.getCarList(), + storageCarNumList = new Set(carList.map(((car) => car.carNum))), + nonExistingCarNumList = carNumList.filter(((carNum2) => !storageCarNumList.has(carNum2))); nonExistingCarNumList.length > 0 && clog.log(`检测出新作品, ${name2}, 共${nonExistingCarNumList.length}部`); await storageManager.updateFavoriteActress({ starId, @@ -6315,15 +6129,14 @@ ${value}\r lastPublishTime }); } - async checkOneNewVideo(actress) { - const filterKeywordList = await storageManager.getTitleFilterKeyword(), - filterActorActressCarList = await storageManager.getBlacklistCarList(), - filterActorActressCarNumList = new Set(filterActorActressCarList.map(((car) => car.carNum))), { - lastCheckTime, - name: name2, - starId - } = actress; + const filterKeywordList = await storageManager.getTitleFilterKeyword(), + filterActorActressCarList = await storageManager.getBlacklistCarList(), + filterActorActressCarNumList = new Set(filterActorActressCarList.map(((car) => car.carNum))), { + lastCheckTime, + name: name2, + starId + } = actress; let url = `${this.javDbUrl}/actors/${starId}?t=d`; const $checkNewVideoMsg = $("#checkNewVideoMsg"); try { @@ -6341,7 +6154,6 @@ ${value}\r } } } - const CDN_SOURCES = [{ name: "jsDelivr (全球CDN)", json: "https://cdn.jsdelivr.net/gh/gfriends/gfriends/Filetree.json", @@ -6396,22 +6208,18 @@ ${value}\r }; window.window.G_FRIENDS_DATA_CACHE = null; window.window.G_FRIENDS_AVATAR_MAP = null; - class NewVideoPlugin extends BasePlugin { constructor() { super(...arguments); __publicField2(this, "currentPage", 1); __publicField2(this, "pageSize", 30); } - getName() { return "NewVideoPlugin"; } - async initCss() { return "\n \n "; } - async showNewVideoCount() { const totalNewVideoCount = (await storageManager.getFavoriteActressList()).reduce(((accumulator, actress) => { var _a2; @@ -6419,23 +6227,21 @@ ${value}\r }), 0); $("#newVideoCount").text(`${totalNewVideoCount}`); } - async resetBtnTip() { - const taskPlugin = this.getBean("TaskPlugin"), settingObj = await storageManager.getSetting(), - lastCheckTimeStr = localStorage.getItem(taskPlugin.lastCheckFavoriteActressTimeKey) || "无", - checkFavoriteActress_IntervalTime = settingObj.checkFavoriteActress_IntervalTime, - lastCheckNewVideoTimeStr = localStorage.getItem(taskPlugin.lastCheckNewVideoTimeKey) || "无", - checkNewVideo_intervalTime = settingObj.checkNewVideo_intervalTime; + const taskPlugin = this.getBean("TaskPlugin"), settingObj = await storageManager.getSetting(), + lastCheckTimeStr = localStorage.getItem(taskPlugin.lastCheckFavoriteActressTimeKey) || "无", + checkFavoriteActress_IntervalTime = settingObj.checkFavoriteActress_IntervalTime, + lastCheckNewVideoTimeStr = localStorage.getItem(taskPlugin.lastCheckNewVideoTimeKey) || "无", + checkNewVideo_intervalTime = settingObj.checkNewVideo_intervalTime; $("#checkFavoriteActress").attr("data-tip", `上次自动同步时间: ${lastCheckTimeStr}; 检测间隔时间: ${checkFavoriteActress_IntervalTime}小时`); $("#checkNewVideo").attr("data-tip", `上次检测时间: ${lastCheckNewVideoTimeStr}; 检测间隔时间: ${checkNewVideo_intervalTime}小时`); } - async openDialog() { - const taskPlugin = this.getBean("TaskPlugin"), settingObj = await storageManager.getSetting(), - lastCheckTimeStr = localStorage.getItem(taskPlugin.lastCheckFavoriteActressTimeKey) || "无", - checkFavoriteActress_IntervalTime = settingObj.checkFavoriteActress_IntervalTime, - lastCheckNewVideoTimeStr = localStorage.getItem(taskPlugin.lastCheckNewVideoTimeKey) || "无", - checkNewVideo_intervalTime = settingObj.checkNewVideo_intervalTime; + const taskPlugin = this.getBean("TaskPlugin"), settingObj = await storageManager.getSetting(), + lastCheckTimeStr = localStorage.getItem(taskPlugin.lastCheckFavoriteActressTimeKey) || "无", + checkFavoriteActress_IntervalTime = settingObj.checkFavoriteActress_IntervalTime, + lastCheckNewVideoTimeStr = localStorage.getItem(taskPlugin.lastCheckNewVideoTimeKey) || "无", + checkNewVideo_intervalTime = settingObj.checkNewVideo_intervalTime; let html = `
@@ -6475,7 +6281,6 @@ ${value}\r } }); } - bindClick() { const taskPlugin = this.getBean("TaskPlugin"); $("#reLoad").on("click", ((event) => { @@ -6533,12 +6338,10 @@ ${value}\r this.loadData(); })); } - loadData() { this.currentPage = 1; this.renderActressCards().then(); } - async renderActressCards() { const $actressCardContainer = $("#actress-card-container"); if (!$actressCardContainer.length) return; @@ -6546,37 +6349,37 @@ ${value}\r const paramActressType = $("#paramActressType").val(); "all" !== paramActressType && (favoriteActressesList = favoriteActressesList.filter(((actress) => actress.actressType === paramActressType))); const fullActressList = utils.genericSort(favoriteActressesList, [{ - key: (item) => { - var _a2; - return (null == (_a2 = item.newVideoList) ? void 0 : _a2.length) ?? 0; - }, - order: "desc" + key: (item) => { + var _a2; + return (null == (_a2 = item.newVideoList) ? void 0 : _a2.length) ?? 0; + }, + order: "desc" }, { - key: "lastPublishTime", - order: "desc" + key: "lastPublishTime", + order: "desc" }]), totalCount = fullActressList.length, totalPages = Math.ceil(totalCount / this.pageSize), startIndex = (this.currentPage - 1) * this.pageSize, endIndex = startIndex + this.pageSize, pagedData = fullActressList.slice(startIndex, endIndex), javDbUrl = await this.getBean("OtherSitePlugin").getJavDbUrl(), taskPlugin = this.getBean("TaskPlugin"), checkNewVideo_ruleTime = await storageManager.getSetting("checkNewVideo_ruleTime") || 8760, cardsHtml = pagedData.map(((data) => { - var _a2, _b, _c; - const allNamesStr = Array.isArray(data.allName) ? data.allName.join(",") : ""; - Array.isArray(data.newVideoList) && data.newVideoList.join(","); - const detailLink = `${javDbUrl}/actors/${data.starId}?t=d`; - let isUnCheck = false; - data.lastPublishTime && (isUnCheck = !taskPlugin.isUnnecessaryCheck(data.lastPublishTime, checkNewVideo_ruleTime)); - let actressTypeText = "未知", actressTypeBgc = "#9E9E9E"; - if ("uncensored" === data.actressType) { - actressTypeText = "无码"; - actressTypeBgc = "#4CAF50"; - } else if ("censored" === data.actressType) { - actressTypeText = "有码"; - actressTypeBgc = "#FF9800"; - } - let cardUnnecessaryBtnCss = ""; - isUnCheck && (cardUnnecessaryBtnCss = "background: linear-gradient(145deg, #e0e0e0 0%, #cabdbd 100%);box-shadow: none"); - return ` + var _a2, _b, _c; + const allNamesStr = Array.isArray(data.allName) ? data.allName.join(",") : ""; + Array.isArray(data.newVideoList) && data.newVideoList.join(","); + const detailLink = `${javDbUrl}/actors/${data.starId}?t=d`; + let isUnCheck = false; + data.lastPublishTime && (isUnCheck = !taskPlugin.isUnnecessaryCheck(data.lastPublishTime, checkNewVideo_ruleTime)); + let actressTypeText = "未知", actressTypeBgc = "#9E9E9E"; + if ("uncensored" === data.actressType) { + actressTypeText = "无码"; + actressTypeBgc = "#4CAF50"; + } else if ("censored" === data.actressType) { + actressTypeText = "有码"; + actressTypeBgc = "#FF9800"; + } + let cardUnnecessaryBtnCss = ""; + isUnCheck && (cardUnnecessaryBtnCss = "background: linear-gradient(145deg, #e0e0e0 0%, #cabdbd 100%);box-shadow: none"); + return `
${allNamesStr} @@ -6621,14 +6424,14 @@ ${value}\r $actressCardContainer.html(cardsHtml); $(".btn-delete-actress").off("click").on("click", ((e) => { e.preventDefault(); - const starId = $(e.currentTarget).attr("data-starId"), - actress = fullActressList.find(((item) => item.starId === starId)); + const starId = $(e.currentTarget).attr("data-starId"), + actress = fullActressList.find(((item) => item.starId === starId)); utils.q(e, `是否取消收藏 ${actress.name}?`, (async () => { let deleteActressUrl = `${await this.getBean("OtherSitePlugin").getJavDbUrl()}/actors/${starId}/uncollect`; - const csrfToken = document.querySelector("meta[name=csrf-token]").content, - res = await gmHttp.post(deleteActressUrl, null, { - "x-csrf-token": csrfToken - }); + const csrfToken = document.querySelector("meta[name=csrf-token]").content, + res = await gmHttp.post(deleteActressUrl, null, { + "x-csrf-token": csrfToken + }); if (res.includes("removeClass")) { await storageManager.removeFavoriteActress(starId); this.loadData(); @@ -6640,8 +6443,8 @@ ${value}\r })); $(".btn-edit-actress").off("click").on("click", ((e) => { e.preventDefault(); - const starId = $(e.currentTarget).attr("data-starId"), - actress = fullActressList.find(((item) => item.starId === starId)); + const starId = $(e.currentTarget).attr("data-starId"), + actress = fullActressList.find(((item) => item.starId === starId)); actress ? this.editActress(actress) : show.error(`未找到 starId 为 ${starId} 的女优记录。`); })); $(".btn-check-actress").off("click").on("click", ((e) => { @@ -6653,8 +6456,8 @@ ${value}\r show.error("当前有定时任务在后台执行中, 无法发起手动任务"); return; } - const starId = $(e.currentTarget).attr("data-starId"), - actress = fullActressList.find(((item) => item.starId === starId)); + const starId = $(e.currentTarget).attr("data-starId"), + actress = fullActressList.find(((item) => item.starId === starId)); await taskPlugin.checkOneNewVideo(actress); })).catch(((error) => { console.error("锁任务出现错误:", error); @@ -6664,14 +6467,13 @@ ${value}\r this.renderPagination(totalCount, totalPages); show.ok("加载完成"); } - async editActress(actress) { - const initialName = actress.name, initialAvatar = actress.avatar, initialRemark = actress.remark || "", - initialAllName = Array.isArray(actress.allName) ? actress.allName.join(",") : "", - initialNewVideoList = Array.isArray(actress.newVideoList) ? actress.newVideoList.join(",") : "", - starId = actress.starId, - textareaStyle = "width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; min-height: 60px; overflow-y: hidden;", - initActressType = actress.actressType || "", editFormHtml = ` + const initialName = actress.name, initialAvatar = actress.avatar, initialRemark = actress.remark || "", + initialAllName = Array.isArray(actress.allName) ? actress.allName.join(",") : "", + initialNewVideoList = Array.isArray(actress.newVideoList) ? actress.newVideoList.join(",") : "", + starId = actress.starId, + textareaStyle = "width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; min-height: 60px; overflow-y: hidden;", + initActressType = actress.actressType || "", editFormHtml = `
Avatar Preview { - await (async function () { + await (async function () { const initialIndex = currentCdnIndex, radioOptions = CDN_SOURCES.map(((source, index2) => `
@@ -6771,8 +6573,8 @@ ${value}\r utils.setupEscClose(index2); }, yes: async (index2) => { - const newIndexStr = $('input[name="cdn-source"]:checked').val(), - newIndex = parseInt(newIndexStr, 10); + const newIndexStr = $('input[name="cdn-source"]:checked').val(), + newIndex = parseInt(newIndexStr, 10); if (newIndex !== currentCdnIndex) { currentCdnIndex = newIndex; localStorage.setItem("jhs_img_cdn_index", newIndex.toString()); @@ -6795,16 +6597,17 @@ ${value}\r utils.setupEscClose(index); }, yes: async (index) => { - const newAvatar = $("#edit-actress-avatar").val().trim(), newName = $("#edit-actress-name").val().trim(), - newAllNameStr = $("#edit-actress-allname").val().trim(), - newVideoListStr = $("#edit-actress-newvideolist").val().trim(), - newRemark = $("#edit-remark").val().trim(), newActressType = $("#actressType").val(); + const newAvatar = $("#edit-actress-avatar").val().trim(), + newName = $("#edit-actress-name").val().trim(), + newAllNameStr = $("#edit-actress-allname").val().trim(), + newVideoListStr = $("#edit-actress-newvideolist").val().trim(), + newRemark = $("#edit-remark").val().trim(), newActressType = $("#actressType").val(); if (!newName) { show.error("主名称不能为空"); return false; } - const newAllName = newAllNameStr.split(/[\uff0c,]/).map(((n) => n.trim())).filter(((n) => n.length > 0)), - newVideoList = newVideoListStr.split(/[\uff0c,]/).map(((n) => n.trim())).filter(((n) => n.length > 0)); + const newAllName = newAllNameStr.split(/[\uff0c,]/).map(((n) => n.trim())).filter(((n) => n.length > 0)), + newVideoList = newVideoListStr.split(/[\uff0c,]/).map(((n) => n.trim())).filter(((n) => n.length > 0)); actress.avatar = newAvatar; actress.name = newName; actress.allName = newAllName; @@ -6820,7 +6623,6 @@ ${value}\r } }); } - renderPagination(totalCount, totalPages) { const currentPage = this.currentPage; let paginationHtml = ""; @@ -6850,11 +6652,10 @@ ${value}\r } })); } - async searchAvatar() { - const $mainNameInput = $("#edit-actress-name"), $aliasInput = $("#edit-actress-allname"), - currentName = $mainNameInput.val().trim(), - searchNames = $aliasInput.val().trim().split(/[\uff0c,]/).map(((n) => n.trim())).filter(((n) => n.length > 0)); + const $mainNameInput = $("#edit-actress-name"), $aliasInput = $("#edit-actress-allname"), + currentName = $mainNameInput.val().trim(), + searchNames = $aliasInput.val().trim().split(/[\uff0c,]/).map(((n) => n.trim())).filter(((n) => n.length > 0)); currentName && searchNames.unshift(currentName); if (0 === searchNames.length) { show.error("请先填写女优主名称或别名进行搜索。"); @@ -6943,16 +6744,17 @@ ${value}\r content: imageListHtml, btn: ["关闭"], success: (selectionLayero, selectionIndex) => { - const $container = $(selectionLayero), $images = $container.find(".gfriends-selectable-img"), - $prompt = $container.find("#gfriends-prompt"); - $images.each((function () { - const $img = $(this), wrapperId = $img.data("wrapper-id"), $wrapper = $container.find(`#${wrapperId}`), - $sizeTag = $container.find(`.gfriends-size-tag[data-size-for="${wrapperId}"]`); - $img.on("load", (function () { + const $container = $(selectionLayero), $images = $container.find(".gfriends-selectable-img"), + $prompt = $container.find("#gfriends-prompt"); + $images.each((function () { + const $img = $(this), wrapperId = $img.data("wrapper-id"), + $wrapper = $container.find(`#${wrapperId}`), + $sizeTag = $container.find(`.gfriends-size-tag[data-size-for="${wrapperId}"]`); + $img.on("load", (function () { const width = this.naturalWidth, height = this.naturalHeight; $sizeTag.text(`${width} x ${height}`); })); - $img.on("error", (function () { + $img.on("error", (function () { $wrapper.remove(); errorCount++; const validCount = imageLinks.length - errorCount; @@ -6964,7 +6766,7 @@ ${value}\r })); this.complete && (this.naturalWidth > 0 ? $img.trigger("load") : $img.trigger("error")); })); - $images.on("click", (function () { + $images.on("click", (function () { const $clickedImg = $(this), selectedUrl = $clickedImg.data("url"); $("#edit-actress-avatar").val(selectedUrl); $("#edit-avatar-preview").attr("src", selectedUrl); @@ -6979,21 +6781,17 @@ ${value}\r }); } } - class HistoryPlugin extends BasePlugin { constructor() { super(...arguments); __publicField2(this, "tableObj", null); } - getName() { return "HistoryPlugin"; } - async initCss() { return "\n \n "; } - handle() { let fc2Url = "/advanced_search?type=3&score_min=0&d=1"; $('.navbar-item:contains("FC2")').attr("href", fc2Url); @@ -8989,7 +8691,6 @@ ${value}\r movieId && carNum2 && url && this.openFc2Dialog(movieId, carNum2, url); } } - openFc2Dialog(movieId, carNum2, href) { let tempCarNum = carNum2.replace("FC2-", ""); if (href.includes("123av")) { @@ -9057,7 +8758,7 @@ ${value}\r layer.closeAll(); })); $("#subtitleSearchBtn").on("click", (() => { - window.JavPackSubtitle.openSearchModal({details: {code: carNum2}}); + window.JavPackSubtitle.openSearchModal({details: {code: carNum2}}); })); window.JavPackSubtitle.preload115Matches(carNum2); $("#magnetSearchBtn").on("click", (() => { @@ -9081,7 +8782,6 @@ ${value}\r } }); } - loadData(movieId, carNum2) { let tempCarNum = carNum2.replace("FC2-", ""); this.handleMovieDetail(movieId); @@ -9090,7 +8790,6 @@ ${value}\r this.getBean("ReviewPlugin").showReview(movieId, $("#reviews-content")).then(); this.getBean("RelatedPlugin").showRelated($("#related-content"), movieId).then(); } - handleMovieDetail(movieId) { javDbApi.getMovieDetail(movieId).then(((res) => { const actors = res.actors || [], imgList = res.imgList || []; @@ -9142,16 +8841,14 @@ ${value}\r `); })); } - handleLongImg(carNum2) { utils.loopDetector((() => $(".movie-gallery .image-list").length > 0), (async () => { $(".movie-gallery .image-list").prepend('
正在加载缩略图
'); - const screenShotPlugin = this.getBean("ScreenShotPlugin"), - imgUrl = await screenShotPlugin.getScreenshot(carNum2); + const screenShotPlugin = this.getBean("ScreenShotPlugin"), + imgUrl = await screenShotPlugin.getScreenshot(carNum2); imgUrl && await screenShotPlugin.addImg("缩略图", imgUrl, carNum2); })); } - handleMagnets(movieId) { javDbApi.getMagnets(movieId).then(((magnetList) => { let magnetsHtml = ""; @@ -9205,19 +8902,16 @@ ${value}\r `); })); } - async openFc2Page(movieId, carNum2, url) { const otherSitePlugin = this.getBean("OtherSitePlugin"); let javDbUrl = await otherSitePlugin.getJavDbUrl(); window.open(`${javDbUrl}/users/collection_codes?movieId=${movieId}&carNum=${carNum2}&url=${url}`); } } - class HighlightMagnetPlugin extends BasePlugin { getName() { return "HighlightMagnetPlugin"; } - parseDateFromAttr(dateStr) { if (!dateStr) return 0; if (dateStr.length === 8) { @@ -9230,7 +8924,6 @@ ${value}\r const d = new Date(dateStr); return isNaN(d.getTime()) ? 0 : d.getTime(); } - parseSizeToBytes(sizeText) { if (!sizeText) return 0; const s = sizeText.trim().toUpperCase(); @@ -9242,7 +8935,6 @@ ${value}\r if (s.includes("KB")) return num * 1024; return num; } - getRowInfo(row) { const $row = $(row); const nameText = $row.find(".name").text().toLowerCase(); @@ -9266,7 +8958,6 @@ ${value}\r isUncensored: nameText.includes("无码") || nameText.includes("無碼") || nameText.includes("-u") || nameText.includes("-uc") || tags.includes("无码") || tags.includes("無碼") }; } - getRowInfoForBus(row) { const $row = $(row); const $nameCell = $row.find("td:first-child"); @@ -9289,7 +8980,6 @@ ${value}\r isUncensored: nameText.includes("无码") || nameText.includes("無碼") || nameText.includes("-u") || nameText.includes("-uc") }; } - async applySortAndFilter(settings) { if (isJavBus$1) { return this.applySortAndFilterForBus(settings); @@ -9299,7 +8989,7 @@ ${value}\r const $rows = $container.find(".item[data-rank]"); if (0 === $rows.length) return; const rowInfos = $rows.toArray().map((row) => this.getRowInfo(row)); - const {filterHD, filter4K, filterSubtitle, filterUncensored, sortOrder} = settings; + const {filterHD, filter4K, filterSubtitle, filterUncensored, sortOrder} = settings; const anyFilterEnabled = filterHD || filter4K || filterSubtitle || filterUncensored; let visibleInfos = rowInfos; if (anyFilterEnabled) { @@ -9351,7 +9041,6 @@ ${value}\r }); hiddenInfos.forEach((info) => $(info.row).hide()); } - applySortAndFilterForBus(settings) { const $table = $("#magnet-table"); if (!$table.length) return; @@ -9360,7 +9049,7 @@ ${value}\r const dataRows = headerRow ? allRows.filter((r) => r !== headerRow) : allRows.slice(1); if (0 === dataRows.length) return; const rowInfos = dataRows.map((row) => this.getRowInfoForBus(row)); - const {filterHD, filter4K, filterSubtitle, filterUncensored, sortOrder} = settings; + const {filterHD, filter4K, filterSubtitle, filterUncensored, sortOrder} = settings; const anyFilterEnabled = filterHD || filter4K || filterSubtitle || filterUncensored; let visibleInfos = rowInfos; if (anyFilterEnabled) { @@ -9406,7 +9095,6 @@ ${value}\r }); hiddenInfos.forEach((info) => $(info.row).hide()); } - showAll() { if (isJavDb$1) { $("#magnets-content .item[data-rank]").toArray().forEach(((el) => { @@ -9421,14 +9109,14 @@ ${value}\r })); } } - handleBus() { isJavBus$1 && window.isDetailPage && utils.loopDetector((() => $("#magnet-table td a").length > 0), (() => { const rows = $("#magnet-table tr"), QUALITY_KEYWORDS = ["4k", "-c", "-u", "-uc"]; let hasHighQuality = false; rows.each(((_, row) => { - const $row = $(row), $firstTd = $row.find("td:first-child"), $firstLink = $firstTd.find("a:first-child"), - $secondLink = $firstTd.find("a:nth-child(2)"), linkText = $firstLink.text().toLowerCase(); + const $row = $(row), $firstTd = $row.find("td:first-child"), + $firstLink = $firstTd.find("a:first-child"), $secondLink = $firstTd.find("a:nth-child(2)"), + linkText = $firstLink.text().toLowerCase(); linkText.includes("4k") && $firstLink.css("color", "#f40"); if (QUALITY_KEYWORDS.some(((keyword) => linkText.includes(keyword))) || $secondLink.length && $secondLink.text().includes("字幕")) { hasHighQuality = true; @@ -9442,12 +9130,10 @@ ${value}\r })); } } - class FoldCategoryPlugin extends BasePlugin { getName() { return "FoldCategoryPlugin"; } - async initCss() { const settingObj = await storageManager.getSetting(); return ` @@ -9485,7 +9171,6 @@ ${value}\r `; } - async handle() { if (window.isListPage && !currentHref$1.includes("advanced_search")) { this.highlightTag(); @@ -9497,7 +9182,6 @@ ${value}\r })); } } - highlightTag() { (async () => { const tags = await storageManager.getHighlightedTags(); @@ -9506,16 +9190,16 @@ ${value}\r $(`.tags a.tag:contains(${text})`).addClass("highlighted"); })); })().then(); - $("#tags a.tag, .tags a.tag").hover((function () { + $("#tags a.tag, .tags a.tag").hover((function () { const $tag = $(this), button = $(''); $tag.append(button); button.fadeIn(0); - }), (function () { - $(this).find(".highlight-btn").fadeOut(0, (function () { + }), (function () { + $(this).find(".highlight-btn").fadeOut(0, (function () { $(this).remove(); })); })); - $(document).on("click", ".highlight-btn", (async function (e) { + $(document).on("click", ".highlight-btn", (async function (e) { e.stopPropagation(); e.preventDefault(); const $tag = $(this).closest("a.tag"), clonedTag = $tag.clone(); @@ -9532,10 +9216,9 @@ ${value}\r await storageManager.setHighlightedTags(highlightedTags); })); } - async createFoldBtn() { const foldCategoryHotKey = await storageManager.getSetting("foldCategoryHotKey"); - let $subTags = $("#tags"), checkTagStr = $("#tags dl div.tag.is-info").map((function () { + let $subTags = $("#tags"), checkTagStr = $("#tags dl div.tag.is-info").map((function () { return $(this).text().replaceAll("\n", "").replaceAll(" ", ""); })).get().join(" "); if (!checkTagStr) return; @@ -9556,8 +9239,8 @@ ${value}\r $subTags = $("section > div > div.box"); } if (!$subTags) return; - let $foldCategoryBtn = $("#foldCategoryBtn"), - isFolded = localStorage.getItem("jhs_foldCategory") === YES$1, [newText, newIcon] = isFolded ? ["展开", "icon-angle-double-down"] : ["折叠", "icon-angle-double-up"]; + let $foldCategoryBtn = $("#foldCategoryBtn"), + isFolded = localStorage.getItem("jhs_foldCategory") === YES$1, [newText, newIcon] = isFolded ? ["展开", "icon-angle-double-down"] : ["折叠", "icon-angle-double-up"]; $foldCategoryBtn.find("span").text(newText).end().find("i").attr("class", newIcon); window.location.href.includes("noFold=1") || $subTags[isFolded ? "hide" : "show"](); $foldCategoryBtn.on("click", (async (event) => { @@ -9570,36 +9253,30 @@ ${value}\r })); } } - class ActressInfoPlugin extends BasePlugin { constructor() { super(...arguments); __publicField2(this, "apiUrl", "https://ja.wikipedia.org/wiki/"); } - getName() { return "ActressInfoPlugin"; } - async handle() { "yes" === await storageManager.getSetting("enableLoadActressInfo", "yes") && this.loadActressInfo(); } - loadActressInfo() { this.handleDetailPage().then(); this.handleStarPage().then(); } - async initCss() { return "\n \n "; } - async handleDetailPage() { if ($(".actress-info").length > 0) return; let nameList = $(".female").prev().map(((i, el) => $(el).text().trim())).get(); if (!nameList.length) return; - const cacheKey = "jhs_actress_info", - cacheData = localStorage.getItem(cacheKey) ? JSON.parse(localStorage.getItem(cacheKey)) : {}; + const cacheKey = "jhs_actress_info", + cacheData = localStorage.getItem(cacheKey) ? JSON.parse(localStorage.getItem(cacheKey)) : {}; let result = null, infoHtml = ""; for (let i = 0; i < nameList.length; i++) { let name2 = nameList[i]; @@ -9626,7 +9303,6 @@ ${value}\r $('strong:contains("演員")').parent().after(infoHtml); localStorage.setItem(cacheKey, JSON.stringify(cacheData)); } - async handleStarPage() { if ($(".actress-info").length > 0) return; let nameList = [], $actor = $(".actor-section-name"); @@ -9638,8 +9314,8 @@ ${value}\r nameList.push(name2.trim()); })); if (!nameList.length) return; - const cacheKey = "jhs_actress_info", - cacheData = localStorage.getItem(cacheKey) ? JSON.parse(localStorage.getItem(cacheKey)) : {}; + const cacheKey = "jhs_actress_info", + cacheData = localStorage.getItem(cacheKey) ? JSON.parse(localStorage.getItem(cacheKey)) : {}; let result = null; for (let i = 0; i < nameList.length; i++) { let name2 = nameList[i]; @@ -9675,16 +9351,15 @@ ${value}\r $actor.parent().append(contentHtml); localStorage.setItem(cacheKey, JSON.stringify(cacheData)); } - async searchInfo(name2) { "三上悠亞" === name2 && (name2 = "三上悠亜"); let url = this.apiUrl + name2; - const html = await gmHttp.get(url), parser = new DOMParser(), - $dom = $(parser.parseFromString(html, "text/html")); - let birthday = $dom.find('a[title="誕生日"]').parent().parent().find("td").text().trim(), - age = $dom.find("th:contains('現年齢')").parent().find("td").text().trim() ? parseInt($dom.find("th:contains('現年齢')").parent().find("td").text().trim()) + "岁" : "", - height = $dom.find('tr:has(a[title="身長"]) td').text().trim().split(" ")[0] + "cm", - weight = $dom.find('tr:has(a[title="体重"]) td').text().trim().split("/")[1].trim(); + const html = await gmHttp.get(url), parser = new DOMParser(), + $dom = $(parser.parseFromString(html, "text/html")); + let birthday = $dom.find('a[title="誕生日"]').parent().parent().find("td").text().trim(), + age = $dom.find("th:contains('現年齢')").parent().find("td").text().trim() ? parseInt($dom.find("th:contains('現年齢')").parent().find("td").text().trim()) + "岁" : "", + height = $dom.find('tr:has(a[title="身長"]) td').text().trim().split(" ")[0] + "cm", + weight = $dom.find('tr:has(a[title="体重"]) td').text().trim().split("/")[1].trim(); "― kg" === weight && (weight = ""); return { birthday, @@ -9697,12 +9372,10 @@ ${value}\r }; } } - class AliyunPanPlugin extends BasePlugin { getName() { return "AliyunPanPlugin"; } - handle() { $("body").append('获取refresh_token'); $("#refresh-token-btn").on("click", ((event) => { @@ -9720,17 +9393,14 @@ ${value}\r })); } } - class HitShowPlugin extends BasePlugin { constructor() { super(); __publicField2(this, "$contentBox", $(".section .container")); } - getName() { return "HitShowPlugin"; } - handle() { $('a[href*="rankings/playback"]').on("click", ((event) => { event.preventDefault(); @@ -9739,7 +9409,6 @@ ${value}\r })); this.handlePlayback().then(); } - hookPage() { let $h2 = $("h2.section-title"); $h2.contents().first().replaceWith("热播"); @@ -9750,7 +9419,6 @@ ${value}\r this.$contentBox.append('
'); this.$contentBox.append('
'); } - async handlePlayback() { if (!window.location.href.includes("handlePlayback=1")) return; let period = new URLSearchParams(window.location.search).get("period"); @@ -9769,7 +9437,6 @@ ${value}\r loadObj.close(); } } - toolBar(period) { let conditionHtml = `
@@ -9782,7 +9449,6 @@ ${value}\r `; this.$contentBox.append(conditionHtml); } - getStarRating(score) { let stars = ""; const fullStars = Math.floor(score); @@ -9790,7 +9456,6 @@ ${value}\r for (let i = 0; i < 5 - fullStars; i++) stars += ''; return stars; } - loadScore(movies) { if (0 === movies.length) return; (async () => { @@ -9798,13 +9463,13 @@ ${value}\r const movieId = movie.id; if (!$(`#score_${movieId}`).length) return; if ($(`#${movieId}`).is(":hidden")) continue; - const cacheData = localStorage.getItem("jhs_score_info") ? JSON.parse(localStorage.getItem("jhs_score_info")) : {}, - cached = cacheData[movieId]; + const cacheData = localStorage.getItem("jhs_score_info") ? JSON.parse(localStorage.getItem("jhs_score_info")) : {}, + cached = cacheData[movieId]; if (cached) { this.appendScoreHtml(movieId, cached); continue; } - for (; !document.hasFocus();) await new Promise(((r) => setTimeout(r, 500))); + for (; !document.hasFocus();) await new Promise(((r) => setTimeout(r, 500))); const res = await javDbApi.getMovieDetail(movieId); let score = res.score, watchedCount = res.watchedCount, html = ` @@ -9824,15 +9489,13 @@ ${err.stack}` : ""); } })(); } - appendScoreHtml(movieId, scoreHtml) { let $scoreBox = $(`#score_${movieId}`); - $scoreBox.length && "" === $scoreBox.html().trim() && $scoreBox.slideUp(0, (function () { + $scoreBox.length && "" === $scoreBox.html().trim() && $scoreBox.slideUp(0, (function () { $(this).html(scoreHtml).slideDown(500); })); } } - class TOP250Plugin extends BasePlugin { constructor() { super(); @@ -9840,11 +9503,9 @@ ${err.stack}` : ""); __publicField2(this, "$contentBox", $(".section .container")); __publicField2(this, "movies", []); } - getName() { return "TOP250Plugin"; } - handle() { $('.main-tabs ul li:contains("猜你喜歡")').html('Top250'); $('a[href*="rankings/top"]').on("click", ((event) => { @@ -9857,7 +9518,6 @@ ${err.stack}` : ""); })); this.handleTop().then(); } - hookPage() { $("h2.section-title").contents().first().replaceWith("Top250"); $(".empty-message").remove(); @@ -9867,7 +9527,6 @@ ${err.stack}` : ""); this.$contentBox.append('
'); this.renderPagination(); } - renderPagination() { const urlParams = new URLSearchParams(window.location.search); let currentPage = parseInt(urlParams.get("page")) || 1; @@ -9898,7 +9557,6 @@ ${err.stack}` : ""); })(newPage); })); } - async handleTop() { if (!window.location.href.includes("handleTop=1")) return; const urlParams = new URLSearchParams(window.location.search); @@ -9939,11 +9597,10 @@ ${err.stack}` : ""); loadObj.close(); } } - toolBar(type, type_value, currentPage) { "5" === currentPage.toString() && $(".pagination-next").remove(); $(".pagination-ellipsis").closest("li").remove(); - $(".pagination-list li a").each((function () { + $(".pagination-list li a").each((function () { parseInt($(this).text()) > 5 && $(this).closest("li").remove(); })); let yearHtml = ""; @@ -9989,7 +9646,6 @@ ${err.stack}` : ""); $(".movie-list").html(moviesHtml); })); } - async checkLogin(event, urlParams) { if (!localStorage.getItem("jhs_appAuthorization")) { show.error("该类别依赖移动端接口,请先完成登录"); @@ -10009,7 +9665,6 @@ ${err.stack}` : ""); insert: 0 }) : window.location.href = url; } - openLoginDialog() { layer.open({ type: 1, @@ -10050,7 +9705,7 @@ ${err.stack}` : "");
`, success: (layero, index) => { - $("#loginBtn").click((function () { + $("#loginBtn").click((function () { const username = $("#username").val(), password = $("#password").val(); if (!username || !password) { show.error("请输入用户名和密码"); @@ -10084,16 +9739,13 @@ ${err.stack}` : ""); }); } } - class NavBarPlugin extends BasePlugin { getName() { return "NavBarPlugin"; } - async initCss() { return "\n .highlight-red {\n /* 核心要求:高亮红色文本 */\n color: red !important; \n \n /* 建议:增加字体加粗,效果更明显 */\n font-weight: bold;\n \n /* 建议:增加背景色,效果更突出 */\n /* background-color: yellow; */ \n}\n "; } - handle() { this.margeNav(); this.hookSearch(); @@ -10108,17 +9760,15 @@ ${err.stack}` : ""); q && this.highlightKeyword(q); } } - highlightKeyword(keyword) { const trimedKeyword = keyword.trim(); if (!trimedKeyword) return; const lowerCaseKeyword = trimedKeyword.toLowerCase(); - $(".video-title strong, .actor-box strong").each((function () { + $(".video-title strong, .actor-box strong").each((function () { const $strongElement = $(this); $strongElement.text().toLowerCase().includes(lowerCaseKeyword) && $strongElement.addClass("highlight-red"); })); } - hookSearch() { $("#navbar-menu-hero").after('\n \n '); $("#search-keyword").on("paste", ((event) => { @@ -10149,7 +9799,6 @@ ${err.stack}` : ""); this.getBean("ImageRecognitionPlugin").open(); })); } - hookOldSearch() { const searchImage = document.querySelector(".search-image"); if (!searchImage) return; @@ -10160,13 +9809,11 @@ ${err.stack}` : ""); this.getBean("ImageRecognitionPlugin").open(); })); } - margeNav() { $('a[href*="/feedbacks/new"]').remove(); $('a[href*="theporndude.com"]').remove(); $('a.navbar-link[href="/makers"]').parent().after('\n \n '); } - toggleOtherNavItem() { let $searchBox = $("#search-box"), $oldSearchBox = $("#search-bar-container"); if ($(window).width() < 1600 && $(window).width() > 1023) { @@ -10179,17 +9826,14 @@ ${err.stack}` : ""); } } } - class BusDetailPagePlugin extends BasePlugin { getName() { return "BusDetailPagePlugin"; } - async initCss() { if (!window.isDetailPage) return ""; $("h4:contains('推薦')").hide(); } - async handle() { if (window.location.href.includes("/star/")) { const $avatarBox = $(".avatar-box"); @@ -10199,13 +9843,12 @@ ${err.stack}` : ""); parent2.insertBefore(parent2.parent()); } } - $(".genre a").each((function () { + $(".genre a").each((function () { const href2 = $(this).attr("href"); href2 && (href2.startsWith("http://") || href2.startsWith("https://") || href2.startsWith("/")) && $(this).attr("target", "_blank"); })); this.addCopyCarNumBtn(); } - addCopyCarNumBtn() { let headerSpan = null; const headerSpans = document.querySelectorAll("span.header"); @@ -10225,7 +9868,7 @@ ${err.stack}` : ""); copyButton.style.borderRadius = "5px"; copyButton.style.backgroundColor = "#f0f0f0"; copyButton.style.fontSize = "12px"; - copyButton.addEventListener("click", (function (event) { + copyButton.addEventListener("click", (function (event) { event.preventDefault(); const copyAction = (text) => { this.textContent = "已复制"; @@ -10243,16 +9886,13 @@ ${err.stack}` : ""); } } } - class BusPreviewVideoPlugin extends BasePlugin { getName() { return "BusPreviewVideoPlugin"; } - async initCss() { return "\n /* 弹窗/Modal 样式 */\n .bus-preview-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.95); \n /* 关键修改:更新 z-index */\n z-index: 12345699; \n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0; \n visibility: hidden; \n transition: opacity 0.2s ease;\n }\n .bus-preview-modal.is-open {\n opacity: 1;\n visibility: visible;\n }\n /* 垂直排列视频和按钮,并居中 */\n .bus-preview-modal-content {\n position: relative;\n max-width: 95%; \n max-height: 95%;\n display: flex; \n flex-direction: column; \n align-items: center; \n gap: 15px; \n }\n \n /* 移除 .bus-preview-close-btn 的样式 */\n\n /* 视频播放器容器 */\n .video-player-wrapper {\n /* 关键修改:更新 width 和 max-height */\n width: 80vw; \n max-height: 85vh; \n aspect-ratio: 16 / 9; \n position: relative; \n background-color: black; \n max-width: 100%; \n }\n /* 视频元素 */\n .video-player-wrapper #preview-video {\n position: absolute; \n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: block;\n }\n\n /* 画质控制盒 (底部按钮) */\n .video-control-box {\n display: flex;\n flex-direction: row; \n justify-content: center; \n flex-wrap: wrap; \n gap: 10px;\n padding: 10px 0; \n }\n\n /* 按钮样式 (保留) */\n .video-control-btn {\n min-width:80px;\n padding: 6px 12px;\n background: rgba(255,255,255,0.2);\n color: white;\n border: 1px solid rgba(255,255,255,0.5);\n border-radius: 4px;\n cursor: pointer;\n text-align: center;\n font-size: 14px;\n transition: background-color 0.2s, border-color 0.2s;\n }\n .video-control-btn:hover {\n background: rgba(255,255,255,0.4);\n }\n .video-control-btn.active {\n background-color: #1890ff; \n color: white;\n font-weight: bold;\n border: 1px solid #096dd9;\n }\n "; } - initModal() { if (0 === $("#bus-preview-modal").length) { $("body").append('\n
\n
\n
\n
\n '); @@ -10265,7 +9905,6 @@ ${err.stack}` : ""); })); } } - closeVideoModal() { const $previewVideo = $("#preview-video"); if ($previewVideo.length > 0) { @@ -10274,12 +9913,11 @@ ${err.stack}` : ""); } $("#bus-preview-modal").removeClass("is-open"); } - async handle() { if (!window.isDetailPage) return; this.initModal(); - const firstImageSrc = $("#sample-waterfall .sample-box .photo-frame img:first").attr("src"), - videoPreview = $(` + const firstImageSrc = $("#sample-waterfall .sample-box .photo-frame img:first").attr("src"), + videoPreview = $(`
@@ -10307,7 +9945,6 @@ ${err.stack}` : ""); })); window.location.href.includes("autoPlay=1") && $preview.trigger("click"); } - async handleVideo() { const $modal = $("#bus-preview-modal"), $modalContent = $modal.find(".bus-preview-modal-content"); let $previewVideo = $("#preview-video"); @@ -10328,7 +9965,6 @@ ${err.stack}` : ""); } else show.error("视频播放器创建失败。"); } else show.error("未找到可用的视频源。"); } - async createVideoPlayerAndControls(dmmVideoMap, $container) { let defaultVideoQuality = await storageManager.getSetting("videoQuality"); defaultVideoQuality = selectDefaultQuality(Object.keys(dmmVideoMap), defaultVideoQuality); @@ -10347,7 +9983,7 @@ ${err.stack}` : ""); const videoEl = $videoEl[0]; const jhs_videoMuted = localStorage.getItem("jhs_videoMuted"); videoEl.muted = !jhs_videoMuted || "yes" === jhs_videoMuted; - videoEl.addEventListener("volumechange", (function () { + videoEl.addEventListener("volumechange", (function () { localStorage.setItem("jhs_videoMuted", videoEl.muted ? "yes" : "no"); })); let buttonsHtml = ""; @@ -10386,7 +10022,6 @@ ${err.stack}` : ""); })); } } - const HLS_SCRIPT_URL = "https://cdn.jsdelivr.net/npm/hls.js@1.5.18/dist/hls.min.js"; let hlsLoadPromise = null; const getHlsClass = () => { @@ -10428,8 +10063,8 @@ ${err.stack}` : ""); hlsLoadPromise = new Promise((resolve) => { const existing = document.querySelector('script[data-jhs-hls="1"]'); if (existing) { - existing.addEventListener("load", () => resolve(getHlsClass()), {once: true}); - existing.addEventListener("error", () => loadByGm().then(resolve), {once: true}); + existing.addEventListener("load", () => resolve(getHlsClass()), {once: true}); + existing.addEventListener("error", () => loadByGm().then(resolve), {once: true}); setTimeout(() => { if (!getHlsClass()) loadByGm().then(resolve); }, 4e3); @@ -10457,7 +10092,6 @@ ${err.stack}` : ""); this.loader = null; this.stats = this.createStats(); } - createStats() { return { aborted: false, @@ -10469,16 +10103,14 @@ ${err.stack}` : ""); trequest: 0, tfirst: 0, tload: 0, - loading: {start: 0, first: 0, end: 0}, - parsing: {start: 0, end: 0}, - buffering: {start: 0, first: 0, end: 0} + loading: {start: 0, first: 0, end: 0}, + parsing: {start: 0, end: 0}, + buffering: {start: 0, first: 0, end: 0} }; } - destroy() { this.abort(); } - abort() { if (this.stats) this.stats.aborted = true; if (this.loader) { @@ -10489,7 +10121,6 @@ ${err.stack}` : ""); } this.loader = null; } - load(context, config, callbacks) { this.context = context; this.callbacks = callbacks; @@ -10537,14 +10168,14 @@ ${err.stack}` : ""); stats.loaded = data && data.byteLength ? data.byteLength : data && data.length ? data.length : stats.loaded || 0; stats.total = stats.total || stats.loaded; stats.bwEstimate = stats.loading.end > stats.loading.first ? Math.round(stats.total * 8e3 / (stats.loading.end - stats.loading.first)) : 0; - callbacks.onSuccess && callbacks.onSuccess({data, url: response.url}, stats, context, response); + callbacks.onSuccess && callbacks.onSuccess({data, url: response.url}, stats, context, response); }, onerror: () => { - callbacks.onError && callbacks.onError({ - code: 0, - text: "network error", - url: requestUrl - }, context, null, stats); + callbacks.onError && callbacks.onError({ + code: 0, + text: "network error", + url: requestUrl + }, context, null, stats); }, ontimeout: () => { stats.tload = performance.now(); @@ -10554,7 +10185,6 @@ ${err.stack}` : ""); }); } } - return GMHlsLoader; }; const isM3U8Url = (url) => /\.m3u8(?:[?#].*)?$/i.test(String(url || "")); @@ -10630,7 +10260,7 @@ ${err.stack}` : ""); }; const JAVXY_TOKEN = [118, 119, 112, 71, 97, 110, 28, 84, 124, 65, 76, 102, 65, 16, 77, 109, 64, 82, 85, 83, 67, 92, 125, 108, 83, 65, 124, 107, 84, 104, 71, 84, 17, 124, 118, 125, 104, 8, 125, 96, 112, 103, 29, 18, 82, 83, 87, 84].map((v) => String.fromCharCode(v ^ 37)).join(""); const JAVXY_ENDPOINTS = [ - {host: String.fromCharCode(106, 97, 118, 120, 121, 46, 99, 99, 46, 99, 100), label: "Javxy"}, + {host: String.fromCharCode(106, 97, 118, 120, 121, 46, 99, 99, 46, 99, 100), label: "Javxy"}, { host: String.fromCharCode(119, 111, 114, 107, 101, 114, 46, 106, 97, 118, 120, 121, 46, 99, 99, 46, 99, 100), label: "Javxy Worker" @@ -10656,18 +10286,18 @@ ${err.stack}` : ""); "1Pondo": "Javxy | 一本道" }; const JAVXY_QUALITY_OPTIONS = [ - {quality: "4k", text: "4K"}, - {quality: "hhb", text: "1080p"}, - {quality: "1080p", text: "1080p"}, - {quality: "hmb", text: "720p"}, - {quality: "720p", text: "720p"}, - {quality: "mhb", text: "576p"}, - {quality: "540p", text: "540p"}, - {quality: "mmb", text: "432p"}, - {quality: "480p", text: "480p"}, - {quality: "396p", text: "396p"}, - {quality: "360p", text: "360p"}, - {quality: "240p", text: "240p"} + {quality: "4k", text: "4K"}, + {quality: "hhb", text: "1080p"}, + {quality: "1080p", text: "1080p"}, + {quality: "hmb", text: "720p"}, + {quality: "720p", text: "720p"}, + {quality: "mhb", text: "576p"}, + {quality: "540p", text: "540p"}, + {quality: "mmb", text: "432p"}, + {quality: "480p", text: "480p"}, + {quality: "396p", text: "396p"}, + {quality: "360p", text: "360p"}, + {quality: "240p", text: "240p"} ]; const selectHighestQuality = (qualityMap) => { const rank = new Map(JAVXY_QUALITY_OPTIONS.map((item, index) => [item.quality, index])); @@ -10713,13 +10343,13 @@ ${err.stack}` : ""); return null; } for (const endpoint of JAVXY_ENDPOINTS) { - const params = new URLSearchParams({client: "laosiji-new"}); + const params = new URLSearchParams({client: "laosiji-new"}); if (Array.isArray(options.skip) && options.skip.length) params.set("skip", options.skip.join(",")); if (Array.isArray(options.prefer) && options.prefer.length) params.set("prefer", options.prefer.join(",")); if (Array.isArray(options.source) && options.source.length) params.set("source", options.source.join(",")); if (options.playbackFallback) params.set("purpose", "playback-fallback"); const apiUrl2 = `https://${endpoint.host}/trailers/${encodeURIComponent(query)}?${params}`; - clog.debug("Javxy 请求 API", {query, apiUrl: apiUrl2, endpoint: endpoint.label}); + clog.debug("Javxy 请求 API", {query, apiUrl: apiUrl2, endpoint: endpoint.label}); let r; try { r = await gmHttp.get(apiUrl2, null, { @@ -10727,16 +10357,16 @@ ${err.stack}` : ""); "X-Javxy-Token": JAVXY_TOKEN }, {timeout: 8e3}); } catch (e) { - clog.debug("Javxy API 网络失败,尝试下一个节点", {endpoint: endpoint.label, error: e.message}); + clog.debug("Javxy API 网络失败,尝试下一个节点", {endpoint: endpoint.label, error: e.message}); continue; } if (!r) { - clog.debug("Javxy API 无响应,尝试下一个节点", {endpoint: endpoint.label}); + clog.debug("Javxy API 无响应,尝试下一个节点", {endpoint: endpoint.label}); continue; } const trailerUrl = String((r == null ? void 0 : r.trailer) || "").trim(); if (!trailerUrl) { - clog.debug("Javxy 无 trailer 字段", {endpoint: endpoint.label, keys: Object.keys(r || {})}); + clog.debug("Javxy 无 trailer 字段", {endpoint: endpoint.label, keys: Object.keys(r || {})}); return null; } const qualityMap = (r == null ? void 0 : r.qualities) && typeof r.qualities === "object" ? r.qualities : {}; @@ -10772,8 +10402,8 @@ ${err.stack}` : ""); const skip = [...new Set((failedSources || []).map((source2) => normalizeJavxySource(source2)).filter(Boolean))]; const source = [...new Set((options.source || []).map((s) => String(s || "").trim()).filter(Boolean))]; if (!skip.length && !source.length) return null; - clog.debug("Javxy 播放失败回落查询", {code, skip, source}); - return fromJavxyCcCd(code, rawCode, {skip, source, playbackFallback: true}); + clog.debug("Javxy 播放失败回落查询", {code, skip, source}); + return fromJavxyCcCd(code, rawCode, {skip, source, playbackFallback: true}); }; const getJavxyVideoUrls = async (code, failedSources = []) => { const result = await fallbackJavxyResult(code, code, failedSources, { @@ -10789,12 +10419,10 @@ ${err.stack}` : ""); } return null; }; - class JavxyPreviewVideoPlugin extends BasePlugin { getName() { return "JavxyPreviewVideoPlugin"; } - _attachVideoSrc(videoEl, src) { if (!videoEl || !src) return; destroyHls(videoEl); @@ -10825,7 +10453,6 @@ ${err.stack}` : ""); videoEl.load && videoEl.load(); } } - _selectDefaultQuality(qualityList, intendedDefault) { if (!qualityList || qualityList.length === 0) return null; const availableSet = new Set(qualityList); @@ -10834,7 +10461,6 @@ ${err.stack}` : ""); for (const q of priorityOrder) if (availableSet.has(q)) return q; return qualityList[0]; } - async initCss() { return ` .jhs-javxy-video-modal { @@ -10873,14 +10499,12 @@ ${err.stack}` : ""); } `; } - async handle() { if (!window.isDetailPage) return; const carNum2 = this.getPageInfo().carNum; if (!carNum2) return; this._addJavxyButton(carNum2); } - _addJavxyButton(carNum2) { let $target = null; if (isJavDb$1) { @@ -10916,7 +10540,6 @@ ${err.stack}` : ""); }); $target.after($btn); } - async _openJavxyPlayer(carNum2) { if ($("#jhs-javxy-video-modal").length === 0) { $("body").append(` @@ -11007,7 +10630,6 @@ ${err.stack}` : ""); videoEl.play().catch((e) => console.warn("视频预览播放失败:", e)); } } - class ImageRecognitionPlugin extends BasePlugin { constructor() { super(...arguments); @@ -11026,15 +10648,12 @@ ${err.stack}` : ""); }]); __publicField2(this, "isUploading", false); } - getName() { return "ImageRecognitionPlugin"; } - async initCss() { return "\n \n "; } - open(onOpenFun) { layer.open({ type: 1, @@ -11050,13 +10669,12 @@ ${err.stack}` : ""); } }); } - initEventListeners() { - const $uploadArea = $("#upload-area"), $fileInput = $("#image-file"), $selectBtn = $("#select-image-btn"), - $previewArea = $("#preview-area"), $previewImage = $("#preview-image"), $actionBtns = $("#action-btns"), - $searchImage = $("#handle-btn"), $cancelBtn = $("#cancel-btn"), - $urlInputContainer = $("#url-input-container"), $imageUrlInput = $("#image-url"), - $searchResults = $("#search-results"), $siteBtnsContainer = $("#search-img-site-btns-container"); + const $uploadArea = $("#upload-area"), $fileInput = $("#image-file"), $selectBtn = $("#select-image-btn"), + $previewArea = $("#preview-area"), $previewImage = $("#preview-image"), $actionBtns = $("#action-btns"), + $searchImage = $("#handle-btn"), $cancelBtn = $("#cancel-btn"), + $urlInputContainer = $("#url-input-container"), $imageUrlInput = $("#image-url"), + $searchResults = $("#search-results"), $siteBtnsContainer = $("#search-img-site-btns-container"); $uploadArea.on("dragover", ((e) => { e.preventDefault(); $uploadArea.addClass("highlight"); @@ -11108,8 +10726,8 @@ ${err.stack}` : ""); $siteBtnsContainer.empty(); const key = "jhs_selectedSites", selectedSites = JSON.parse(localStorage.getItem(key) || "{}"); this.siteList.forEach(((site) => { - const siteUrl = site.url.replace("{占位符}", encodeURIComponent(imgUrl)), - isChecked = false !== selectedSites[site.name]; + const siteUrl = site.url.replace("{占位符}", encodeURIComponent(imgUrl)), + isChecked = false !== selectedSites[site.name]; $siteBtnsContainer.append(` `); })); - $siteBtnsContainer.on("change", ".site-checkbox", (function () { + $siteBtnsContainer.on("change", ".site-checkbox", (function () { const siteName = $(this).data("site-name"); selectedSites[siteName] = $(this).is(":checked"); localStorage.setItem(key, JSON.stringify(selectedSites)); @@ -11147,22 +10765,20 @@ ${err.stack}` : ""); } })); $("#openAll").on("click", (() => { - $(".search-img-site-btn").each((function () { + $(".search-img-site-btn").each((function () { $(this).find(".site-checkbox").is(":checked") && window.open($(this).attr("href")); })); })); } - resetSearchUI() { $("#action-btns").show(); $("#search-results").hide(); $("#search-img-site-btns-container").hide().empty(); } - handleImageFile(file) { - const previewImage = document.getElementById("preview-image"), - previewArea = document.getElementById("preview-area"), - urlInputContainer = document.getElementById("url-input-container"); + const previewImage = document.getElementById("preview-image"), + previewArea = document.getElementById("preview-area"), + urlInputContainer = document.getElementById("url-input-container"); if (!file.type.match("image.*")) { show.info("请选择图片文件"); return; @@ -11176,19 +10792,18 @@ ${err.stack}` : ""); }; reader.readAsDataURL(file); } - async searchByImage(imageSrc) { let loadObj = loading(); try { let imageUrl = imageSrc; if (imageSrc.startsWith("data:")) { show.info("开始上传图片..."); - const imgurUrl = await (async function (base64Data) { + const imgurUrl = await (async function (base64Data) { var _a2; const matches = base64Data.match(/^data:(.+);base64,(.+)$/); if (!matches || matches.length < 3) throw new Error("无效的Base64图片数据"); - const mimeType = matches[1], imageData = matches[2], byteCharacters = atob(imageData), - byteNumbers = new Array(byteCharacters.length); + const mimeType = matches[1], imageData = matches[2], byteCharacters = atob(imageData), + byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) byteNumbers[i] = byteCharacters.charCodeAt(i); const byteArray = new Uint8Array(byteNumbers), blob = new Blob([byteArray], { type: mimeType @@ -11219,12 +10834,10 @@ ${err.stack}` : ""); } } } - class BusNavBarPlugin extends BasePlugin { getName() { return "BusNavBarPlugin"; } - handle() { $("#navbar > div > div > span").append('\n \n '); $("#search-img-btn").on("click", (() => { @@ -11232,18 +10845,15 @@ ${err.stack}` : ""); })); } } - class RelatedPlugin extends BasePlugin { constructor() { super(...arguments); __publicField2(this, "floorIndex", 1); __publicField2(this, "isInit", false); } - getName() { return "RelatedPlugin"; } - async showRelated($eleBox, movieId) { const enableLoadRelated = await storageManager.getSetting("enableLoadRelated", NO), $magnets = $eleBox; if (movieId) { @@ -11261,8 +10871,8 @@ ${err.stack}` : ""); $("#relatedFold").on("click", ((event) => { event.preventDefault(); event.stopPropagation(); - const $text = $("#relatedFold .toggle-text"), $icon = $("#relatedFold .toggle-icon"), - isFolded = "展开" === $text.text(); + const $text = $("#relatedFold .toggle-text"), $icon = $("#relatedFold .toggle-icon"), + isFolded = "展开" === $text.text(); $text.text(isFolded ? "折叠" : "展开"); $icon.text(isFolded ? "▲" : "▼"); if (isFolded) { @@ -11284,7 +10894,6 @@ ${err.stack}` : ""); enableLoadRelated === YES$1 && await this.fetchAndDisplayRelateds(movieId); } else show.error("未传入movieId"); } - async fetchAndDisplayRelateds(movieId) { const $relatedContainer = $("#relatedContainer"), $relatedFooter = $("#relatedFooter"); $relatedContainer.append('
获取清单中...
'); @@ -11330,7 +10939,6 @@ ${err.stack}` : ""); })); } } - displayRelateds(dataList, $container) { dataList.length && dataList.forEach(((item) => { let commentHtml = ` @@ -11346,17 +10954,14 @@ ${err.stack}` : ""); })); } } - class WantAndWatchedVideosPlugin extends BasePlugin { constructor() { super(...arguments); __publicField2(this, "type", null); } - getName() { return "WantAndWatchedVideosPlugin"; } - async handle() { if (window.location.href.includes("/want_watch_videos")) { $("h3").append('
导入至 JHS'); @@ -11373,7 +10978,6 @@ ${err.stack}` : ""); })); } } - importWantWatchVideos(event, title) { utils.q(null, `${title}
执行此功能前请记得备份数据`, (async () => { let loadObj = loading(); @@ -11386,7 +10990,6 @@ ${err.stack}` : ""); } })); } - async parseMovieList($dom) { let movieList, nextPageLink; if ($dom) { @@ -11397,9 +11000,9 @@ ${err.stack}` : ""); nextPageLink = $(".pagination-next").attr("href"); } for (const element of movieList) { - const item = $(element), href = item.find("a").attr("href"), - carNum2 = item.find(".video-title strong").text().trim(), - publishTime = item.find(".meta").text().trim(); + const item = $(element), href = item.find("a").attr("href"), + carNum2 = item.find(".video-title strong").text().trim(), + publishTime = item.find(".meta").text().trim(); if (href && carNum2) try { if (await storageManager.getCar(carNum2)) { show.info(`${carNum2} 已存在, 跳过`); @@ -11426,7 +11029,7 @@ ${err.stack}` : ""); const parser = new DOMParser(), next$dom = $(parser.parseFromString(html, "text/html")); this.parseMovieList(next$dom); }, - error: function (err) { + error: function (err) { console.error(err); show.error("加载下一页失败:" + err.message); } @@ -11438,6 +11041,98 @@ ${err.stack}` : ""); } } + function showCopiedFeedback($btn) { + const originalText = $btn.text(); + $btn.addClass("copied").text("已复制"); + setTimeout((() => { + $btn.removeClass("copied").text(originalText); + }), 2e3); + } + + function fallbackCopy(text, $btn) { + const textarea = document.createElement("textarea"); + textarea.value = text; + textarea.style.position = "fixed"; + document.body.appendChild(textarea); + textarea.select(); + try { + document.execCommand("copy"); + showCopiedFeedback($btn); + } catch (err) { + console.error("复制失败:", err); + alert("复制失败,请手动复制链接"); + } + document.body.removeChild(textarea); + } + + function parseSize(sizeStr) { + if (!sizeStr || sizeStr === "未知") return 0; + const match = String(sizeStr).replace(/,/g, "").match(/([\d.]+)\s*(TiB|GiB|MiB|KiB|TB|GB|MB|KB|B)?/i); + if (!match) return 0; + const num = parseFloat(match[1]); + const unit = (match[2] || "B").toUpperCase(); + const multipliers = { + TIB: 1099511627776, + TB: 1099511627776, + GIB: 1073741824, + GB: 1073741824, + MIB: 1048576, + MB: 1048576, + KIB: 1024, + KB: 1024, + B: 1 + }; + return Number.isFinite(num) ? num * (multipliers[unit] || 1) : 0; + } + + function parseDate(dateStr) { + if (!dateStr || dateStr === "未知") return 0; + const ts = Date.parse(dateStr.replace(/\//g, "-")); + return isNaN(ts) ? 0 : ts; + } + + function formatMagnetDate(dateStr) { + if (!dateStr) return ""; + const match = String(dateStr).match(/(\d{4})[-/](\d{1,2})[-/](\d{1,2})/); + if (match) return `${match[1]}-${match[2].padStart(2, "0")}-${match[3].padStart(2, "0")}`; + const ts = parseDate(dateStr); + return ts ? new Date(ts).toISOString().slice(0, 10) : dateStr; + } + + function classifyQuality(title) { + const text = String(title || "").replace(/【[^】]*(?:APP|夸克|UC搜|(?:[a-z0-9-]+\.)+(?:com|net|org|cc|sbs|top))[^】]*】/gi, " "); + const hasCJK = /[\u4e00-\u9fff]/.test(text); + const hasJP = /[\u3040-\u309f\u30a0-\u30ff]/.test(text); + const isChinese = /(?:[^A-Za-z]|^)FHDC(?:[^A-Za-z]|$)/i.test(text) || /[-_](?:UC|CH?)(?:[^A-Za-z]|$)/.test(text) || /(?:\u4e2d\u5b57|\u4e2d\u6587|\u5b57\u5e55|\u4e2d\u6587\u5b57\u5e55|\u7e41\u9ad4\u4e2d\u5b57|\u7e41\u4f53\u4e2d\u5b57|\u7e41\u9ad4\u4e2d\u6587|\u7e41\u4f53\u4e2d\u6587|\u7e41\u9ad4\u5b57\u5e55|\u7e41\u4f53\u5b57\u5e55|\u7e41\u4e2d|\u7e41\u5b57|\u81ea\u63d0|\u5f81\u7528|\u5fb5\u7528|\u6f22\u5316|\u6c49\u5316|\u5167\u5d4c|\u5185\u5d4c|\u5167\u5c01|\u5185\u5c01|\u96d9\u8a9e|\u53cc\u8bed)/.test(text) || hasCJK && !hasJP; + const is4K = /(?:[^A-Za-z0-9]|^)(?:4K(?:UHD)?|2160P)(?:[^A-Za-z0-9]|$)/i.test(text); + const isCracked = /(?:\u7834\u89e3|\u7834\u574f|\u7834\u58de|\u7834\u58ca|\u65e0\u7801|\u7121\u78bc)/.test(text) || /\b(?:uncensored|mosaic)\b/i.test(text); + return {isChinese, is4K, isCracked}; + } + + function gmFetch(url, opts = {}) { + return new Promise(((resolve) => { + _GM_xmlhttpRequest({ + method: opts.method || "GET", + url, + headers: opts.headers || {}, + data: opts.data, + onload: (r) => { + resolve({ + loadstuts: r.status >= 200 && r.status < 300, + status: r.status, + responseText: r.responseText, + finalUrl: r.finalUrl || url + }); + }, + onerror: () => resolve({loadstuts: false, status: 0, responseText: "", finalUrl: url}) + }); + })); + } + + function parseHTML(html) { + const parser = new DOMParser(); + return parser.parseFromString(html, "text/html"); + } class MagnetHubPlugin extends BasePlugin { constructor() { super(...arguments); @@ -11447,34 +11142,395 @@ ${err.stack}` : ""); id: "u9a9", url: "https://u9a9.com/?type=2&search={keyword}", targetPage: "https://u9a9.com/?type=2&search={keyword}", - parseHtml: this.parseU3C3 + parseHtml: this.parseU9A9 }, { name: "U3C3", id: "u3c3", - url: "https://u3c3.com/?search2=a8lr16lo&search={keyword}", - targetPage: "https://u3c3.com/?search2=a8lr16lo&search={keyword}", - parseHtml: this.parseU3C3 + url: "https://u3c3.com/?search2={search2}&search={keyword}", + targetPage: "https://u3c3.com/?search2={search2}&search={keyword}", + parseHtml: this.parseU3C3, + dynamicSearch2: true }, { name: "Sukebei", id: "Sukebei", url: "https://sukebei.nyaa.si/?f=0&c=0_0&q={keyword}", targetPage: "https://sukebei.nyaa.si/?f=0&c=0_0&q={keyword}", parseHtml: this.parseSukebei + }, { + name: "ØMagnet", + id: "omag", + url: "https://xn--mag-zna.net/search?q={keyword}", + targetPage: "https://xn--mag-zna.net/search?q={keyword}", + parseHtml: this.parseOmag + }, { + name: "BTSearch", + id: "btsearch", + url: "https://btsearch.love/api/search?keyword={keyword}&limit=10&offset=0&sort=size&sort_type=desc", + targetPage: "https://btsearch.love/search?keyword={keyword}", + parseJson: this.parseBTSearch + }, { + name: "SoKitty", + id: "sokitty", + url: "https://w1.sokitty.me/search?key={keyword}", + targetPage: "https://w1.sokitty.me/search?key={keyword}", + parseHtml: this.parseSokitty }]); } - getName() { return "MagnetHubPlugin"; } - async initCss() { - return "\n \n "; + return ` + + `; } - createMagnetHub(keyword) { keyword = keyword.replace("FC2-", ""); - const $container = $('
'), $tabs = $('
'), - key = "jhs_magnetHub_selectedEngine", savedEngineId = localStorage.getItem(key); + const $container = $('
'); + const $tabs = $('
'); + const key = "jhs_magnetHub_selectedEngine"; + const savedEngineId = localStorage.getItem(key); let defaultEngineIndex = 0; const $tabBox = $('
'); this.searchEngines.forEach(((engine, index) => { @@ -11492,133 +11548,453 @@ ${err.stack}` : ""); $tabs.append($tabBox); $tabs.append(`原网页`); $container.append($tabs); + const $controls = $('
'); + const sortMode = localStorage.getItem("jhs_magnetSort") || "size"; + const $sortSelect = $(``); + $controls.append($sortSelect); + $container.append($controls); const $resultsContainer = $('
'); $container.append($resultsContainer); $container.on("click", ".magnet-tab", ((e) => { const engineId = $(e.target).data("engine"); this.currentEngine = this.searchEngines.find(((engine) => engine.id === engineId)); - $("#targetBox").attr("href", this.currentEngine.targetPage.replace("{keyword}", encodeURIComponent(keyword))); + this.resolveUrl(this.currentEngine, keyword).then(((url) => { + $("#targetBox").attr("href", url); + })); localStorage.setItem(key, engineId); $container.find(".magnet-tab").removeClass("active"); $(e.target).addClass("active"); - this.searchEngine($resultsContainer, this.currentEngine, keyword); + this.searchEngine($resultsContainer, $sortSelect, this.currentEngine, keyword); })); - this.searchEngine($resultsContainer, this.currentEngine || this.searchEngines[defaultEngineIndex], keyword); + $sortSelect.on("change", () => { + localStorage.setItem("jhs_magnetSort", $sortSelect.val()); + RerenderSort($resultsContainer, $sortSelect.val()); + }); + $container.on("click", ".copy-btn", function () { + const $btn = $(this), magnet = $btn.data("magnet"); + const dnCode = $btn.data("dncode") || ""; + const magWithDn = magnet + (dnCode ? `&dn=${encodeURIComponent(dnCode)}` : ""); + navigator.clipboard ? navigator.clipboard.writeText(magWithDn).then((() => { + showCopiedFeedback($btn); + })).catch((() => { + fallbackCopy(magWithDn, $btn); + })) : fallbackCopy(magWithDn, $btn); + }); + $container.on("click", ".down-115", (async (event) => { + event.stopPropagation(); + const magnet = $(event.currentTarget).data("magnet"); + let loadObj = loading(); + try { + await this.getBean("WangPan115TaskPlugin").handleAddTask(magnet); + } catch (e) { + show.error("发生错误:" + e); + console.error(e); + } finally { + loadObj.close(); + } + })); + $container.on("click", ".check-btn", (async (event) => { + event.stopPropagation(); + const magnet = $(event.currentTarget).data("magnet"); + this.checkWhatslink(magnet); + })); + this.searchEngine($resultsContainer, $sortSelect, this.currentEngine || this.searchEngines[defaultEngineIndex], keyword); + this.resolveUrl(this.currentEngine || this.searchEngines[defaultEngineIndex], keyword).then(((url) => { + $("#targetBox").attr("href", url); + })); return $container; } - searchEngine($container, engine, keyword) { + searchEngine($container, $sortSelect, engine, keyword) { $container.html(`
正在从 ${engine.name} 搜索 "${keyword}"...
`); const cacheKey = `${engine.name}_${keyword}`; sessionStorage.getItem(cacheKey); - const url = engine.url.replace("{keyword}", encodeURIComponent(keyword)); - engine.parseHtml && _GM_xmlhttpRequest({ - method: "GET", - url, - onload: (response) => { - try { - const results = engine.parseHtml.call(this, response.responseText, keyword); - results.length > 0 && sessionStorage.setItem(cacheKey, JSON.stringify(results)); - this.displayResults($container, results, engine.name); - } catch (e) { - $container.html(`
解析 ${engine.name} 结果失败: ${e.message}
`); - } - }, - onerror: (error) => { - $container.html(`
从 ${engine.name} 获取数据失败: ${error.statusText}
`); - } - }); - engine.parseJson && engine.parseJson.call(this, $container, engine, keyword, cacheKey); - } - + this.resolveUrl(engine, keyword).then(((url) => { + const requestOpts = {method: "GET", url}; + if (engine.dynamicSearch2) { + const cookie = sessionStorage.getItem("jhs_u3c3_cookie"); + if (cookie) requestOpts.cookie = cookie; + } + if (engine.parseHtml) { + _GM_xmlhttpRequest(Object.assign(requestOpts, { + method: "GET", + url, + onload: (response) => { + try { + const results = engine.parseHtml.call(this, response.responseText, keyword); + results.length > 0 && sessionStorage.setItem(cacheKey, JSON.stringify(results)); + $container.data("_magnetData", results); + $sortSelect.prop("disabled", results.length === 0); + this.displayResults($container, results, engine.name); + } catch (e) { + $container.html(`
解析 ${engine.name} 结果失败: ${e.message}
`); + } + }, + onerror: (error) => { + $container.html(`
从 ${engine.name} 获取数据失败: ${error.statusText}
`); + } + })); + } + if (engine.parseJson) { + engine.parseJson.call(this, $container, $sortSelect, engine, keyword, cacheKey); + } + })); + } displayResults($container, results, engineName) { $container.empty(); + const sortMode = localStorage.getItem("jhs_magnetSort") || "size"; if (0 !== results.length) { + results = this.sortMagnetData(results, sortMode); + const $table = $(` + + + + + + + +
名称大小日期操作
`); + const $tbody = $table.find("tbody"); results.forEach(((result) => { - const $result = $(` -
- -
- 大小: ${result.size || "未知"} - 日期: ${result.date || "未知"} -
-
- - -
-
- `); - $container.append($result); + const quality = classifyQuality(result.title); + let badges = ""; + if (quality.is4K) badges += '4K'; + if (quality.isChinese) badges += '中字'; + if (quality.isCracked) badges += '破解'; + const displayDate = formatMagnetDate(result.date); + const dnCode = extractCode(result.title); + const $row = $(` + +
+ ${badges} + ${result.title} +
+ + ${result.size || "未知"} + ${displayDate || "未知"} + + + + + + `); + $tbody.append($row); })); - $container.on("click", ".copy-btn", (function () { - const $btn = $(this), magnet = $btn.data("magnet"); - navigator.clipboard ? navigator.clipboard.writeText(magnet).then((() => { - showCopiedFeedback($btn); - })).catch(((err) => { - fallbackCopy(magnet, $btn); - })) : fallbackCopy(magnet, $btn); + $container.append($table); + } else { + $container.append(`
无搜索结果 🔄 刷新
`); + $("#retrySearch").on("click", ((e) => { + e.preventDefault(); + this.searchEngine($container, $container.closest(".magnet-container").find(".magnet-sort-select"), this.currentEngine, this.currentKeyword); })); - $container.on("click", ".down-115", (async (event) => { - const magnet = $(event.currentTarget).data("magnet"); - let loadObj = loading(); - try { - await this.getBean("WangPan115TaskPlugin").handleAddTask(magnet); - } catch (e) { - show.error("发生错误:" + e); - console.error(e); - } finally { - loadObj.close(); - } - })); - } else $container.append('
没有找到相关结果
'); - - function showCopiedFeedback($btn) { - const originalText = $btn.text(); - $btn.addClass("copied").text("已复制"); - setTimeout((() => { - $btn.removeClass("copied").text(originalText); - }), 2e3); - } - - function fallbackCopy(text, $btn) { - const textarea = document.createElement("textarea"); - textarea.value = text; - textarea.style.position = "fixed"; - document.body.appendChild(textarea); - textarea.select(); - try { - document.execCommand("copy"); - showCopiedFeedback($btn); - } catch (err) { - console.error("复制失败:", err); - alert("复制失败,请手动复制链接"); - } - document.body.removeChild(textarea); } } - parseBTSOW($container, engine, keyword, cacheKey) { - const _this = this; - _GM_xmlhttpRequest({ - method: "POST", - url: engine.url, - headers: { - "Content-Type": "application/json" - }, - data: `[{"search":"${keyword}"},50,1]`, - onload: (response) => { - try { - const dataList = JSON.parse(response.responseText).data, results = []; - for (let i = 0; i < dataList.length; i++) { - let item = dataList[i]; - results.push({ - title: item.name, - magnet: "magnet:?xt=urn:btih:" + item.hash, - size: (item.size / 1073741824).toFixed(2) + " GB", - date: utils.formatDate(new Date(1e3 * item.lastUpdateTime)) + sortMagnetData(data, mode) { + return [...data].sort((a, b) => { + const sizeDelta = parseSize(b.size) - parseSize(a.size); + if (mode === "size") return sizeDelta; + const aTime = parseDate(a.date); + const bTime = parseDate(b.date); + if (!aTime && !bTime) return sizeDelta; + if (!aTime) return 1; + if (!bTime) return -1; + const timeDelta = mode === "oldest" ? aTime - bTime : bTime - aTime; + return timeDelta || sizeDelta; + }); + } + + async resolveUrl(engine, keyword) { + let url = engine.url.replace("{keyword}", encodeURIComponent(keyword)); + if (engine.dynamicSearch2) { + let search2 = sessionStorage.getItem("jhs_u3c3_search2"); + if (!search2) { + search2 = await this.fetchSearch2(); + if (search2) sessionStorage.setItem("jhs_u3c3_search2", search2); + } + url = url.replace("{search2}", search2 || "c2pvbmy2"); + } + return url; + } + + async fetchSearch2() { + const result = await new Promise(((resolve) => { + _GM_xmlhttpRequest({ + method: "GET", + url: "https://u3c3.com/", + onload: (r) => resolve({html: r.responseText, headers: r.responseHeaders || ""}), + onerror: () => resolve(null) }); - } + })); + if (!result) return null; + const cookie = parseSetCookie(result.headers); + if (cookie) sessionStorage.setItem("jhs_u3c3_cookie", cookie); + const match = result.html.match(/var\s+nmefafej\s*=\s*"([^"]+)"/g); + if (!match) return null; + for (const m of match) { + const val = m.match(/"([^"]+)"/)[1]; + if (val.length === 8) { + console.log("[U3C3] search2:", val); + return val; + } + } + return null; + } + + async checkWhatslink(magnet) { + var _a; + const overlay = document.createElement("div"); + overlay.className = "whatslink-overlay"; + overlay.innerHTML = ''; + overlay.addEventListener("click", (e) => { + if (e.target === overlay) overlay.remove(); + }); + document.body.appendChild(overlay); + try { + const url = `https://whatslink.info/api/v1/link?url=${encodeURIComponent(magnet)}`; + const r = await gmFetch(url); + if (!r.loadstuts) throw new Error("查询失败"); + const data = JSON.parse(r.responseText); + this.showWhatslinkModal(overlay, data, magnet); + } catch (e) { + overlay.innerHTML = ``; + (_a = overlay.querySelector(".whatslink-overlay")) == null ? void 0 : _a.classList.add("no-shots"); + } + } + + showWhatslinkModal(overlay, data, magnet) { + const screenshots = Array.isArray(data.screenshots) ? data.screenshots : []; + const hasShots = screenshots.length > 0; + const sizeStr = data.size ? formatBytes(data.size) : "-"; + const fileCount = data.count || "-"; + overlay.innerHTML = ""; + const modal = document.createElement("div"); + modal.className = "whatslink-modal" + (hasShots ? "" : " no-shots"); + const scene = document.createElement("div"); + scene.className = "whatslink-gallery-scene"; + const visual = document.createElement("div"); + visual.className = "whatslink-gallery-visual"; + const closeBtn = document.createElement("button"); + closeBtn.className = "whatslink-gallery-close"; + closeBtn.innerHTML = "×"; + closeBtn.addEventListener("click", () => overlay.remove()); + visual.appendChild(closeBtn); + let currentIdx = 0; + const hero = document.createElement("img"); + hero.className = "whatslink-gallery-hero"; + if (hasShots) { + hero.src = screenshots[0]; + visual.appendChild(hero); + const prevBtn = document.createElement("button"); + prevBtn.className = "whatslink-gallery-arrow whatslink-gallery-prev"; + prevBtn.innerHTML = "‹"; + prevBtn.addEventListener("click", (e) => { + e.stopPropagation(); + currentIdx = (currentIdx - 1 + screenshots.length) % screenshots.length; + hero.src = screenshots[currentIdx]; + updateThumbs(); + updateInfo(); + }); + visual.appendChild(prevBtn); + const nextBtn = document.createElement("button"); + nextBtn.className = "whatslink-gallery-arrow whatslink-gallery-next"; + nextBtn.innerHTML = "›"; + nextBtn.addEventListener("click", (e) => { + e.stopPropagation(); + currentIdx = (currentIdx + 1) % screenshots.length; + hero.src = screenshots[currentIdx]; + updateThumbs(); + updateInfo(); + }); + visual.appendChild(nextBtn); + } else { + const emptyDiv = document.createElement("div"); + emptyDiv.className = "whatslink-gallery-empty"; + emptyDiv.innerHTML = ''; + visual.appendChild(emptyDiv); + } + const info = document.createElement("div"); + info.className = "whatslink-gallery-info"; + const updateInfo = () => { + info.innerHTML = `${currentIdx + 1} / ${screenshots.length}${sizeStr} · ${fileCount} 文件`; + }; + if (hasShots) updateInfo(); + else info.innerHTML = `${sizeStr} · ${fileCount} 文件`; + scene.appendChild(visual); + scene.appendChild(info); + if (hasShots && screenshots.length > 1) { + const thumbs = document.createElement("div"); + thumbs.className = "whatslink-gallery-thumbs"; + const updateThumbs2 = () => { + thumbs.innerHTML = ""; + screenshots.forEach((src, i) => { + const thumb = document.createElement("button"); + thumb.className = "whatslink-gallery-thumb" + (i === currentIdx ? " active" : ""); + const img = document.createElement("img"); + img.src = src; + thumb.appendChild(img); + thumb.addEventListener("click", (e) => { + e.stopPropagation(); + currentIdx = i; + hero.src = src; + updateThumbs2(); + updateInfo(); + }); + thumbs.appendChild(thumb); + }); + }; + updateThumbs2(); + scene.appendChild(thumbs); + } + modal.appendChild(scene); + overlay.appendChild(modal); + } + + parseU9A9(html, keyword) { + const $dom = utils.htmlTo$dom(html), results = []; + const kwNorm = String(keyword).toUpperCase().replace(/[^A-Z0-9]/g, ""); + $dom.find(".torrent-list tbody tr").each(((i, el) => { + const $el = $(el); + if ($el.text().includes("置顶")) return; + const $titleA = $el.find("td:nth-child(2) a").first(); + const title = $titleA.attr("title") || $titleA.text().trim(); + if (!title) return; + if (kwNorm) { + const titleNorm = title.toUpperCase().replace(/[^A-Z0-9]/g, ""); + if (!titleNorm.includes(kwNorm)) return; + } + const magnet = $el.find("td:nth-child(3) a[href^='magnet:']").attr("href"); + const size = $el.find("td:nth-child(4)").text().trim(); + const date = $el.find("td:nth-child(5)").text().trim(); + magnet && results.push({title, magnet, size, date}); + })); + return results; + } + + parseU3C3(html, keyword) { + const $dom = utils.htmlTo$dom(html), results = []; + const kwNorm = String(keyword).toUpperCase().replace(/[^A-Z0-9]/g, ""); + $dom.find(".torrent-list tbody tr").each(((i, el) => { + const $el = $(el); + if ($el.text().includes("置顶")) return; + const $titleA = $el.find("td:nth-child(2) a"); + const title = $titleA.attr("title") || $titleA.text().trim(); + if (!title) return; + if (kwNorm) { + const titleNorm = title.toUpperCase().replace(/[^A-Z0-9]/g, ""); + if (!titleNorm.includes(kwNorm)) return; + } + const magnet = $el.find("td:nth-child(3) a[href^='magnet:']").attr("href"); + const size = $el.find("td:nth-child(4)").text().trim(); + const date = $el.find("td:nth-child(5)").text().trim(); + magnet && results.push({title, magnet, size, date}); + })); + return results; + } + + parseSukebei(html, keyword) { + const $dom = utils.htmlTo$dom(html), results = []; + $dom.find("tr.default, tr.success").each(((i, el) => { + const $el = $(el); + const title = $el.find("td:nth-child(2) a").first().attr("title") || $el.find("td:nth-child(2) a").first().text().trim(); + if (!title) return; + const magnet = $el.find("td:nth-child(3) a:last-child").attr("href"); + const size = $el.find("td:nth-child(4)").text().trim(); + const date = $el.find("td:nth-child(5)").text().trim(); + magnet && results.push({title, magnet, size, date}); + })); + return results; + } + + async parseOmag(html, keyword) { + const doc = parseHTML(html); + const base = "https://xn--mag-zna.net"; + const entries = [...doc.querySelectorAll("tr")].map((row) => { + const titleA = row.querySelector('td.result-title a[href^="/!"]'); + if (!titleA) return null; + const href = titleA.getAttribute("href") || ""; + if (!href) return null; + let src; + try { + src = new URL(href, base).href; + } catch (_) { + return null; + } + const title = titleA.textContent.trim(); + const meta = [...row.querySelectorAll(".result-meta > div")].map((item) => item.textContent.trim()); + return {title, size: meta[0] || "", date: meta[1] || "", src}; + }).filter(Boolean); + const searchUrl = `https://xn--mag-zna.net/search?q=${encodeURIComponent(keyword)}`; + const results = []; + for (const entry of entries) { + try { + const r = await gmFetch(entry.src, { + headers: {Referer: searchUrl} + }); + if (!r.loadstuts) continue; + const detailDoc = parseHTML(r.responseText); + const magnetInput = detailDoc.querySelector("#input-magnet"); + const magnetA = detailDoc.querySelector('a[href^="magnet:"]'); + const maglink = ((magnetInput == null ? void 0 : magnetInput.getAttribute("value")) || (magnetA == null ? void 0 : magnetA.getAttribute("href")) || (magnetA == null ? void 0 : magnetA.href) || "").trim(); + if (!maglink || !/^magnet:\?xt=urn:btih:/i.test(maglink)) continue; + results.push({title: entry.title, magnet: maglink, size: entry.size, date: entry.date}); + } catch (_) { + } + } + return results; + } + + parseBTSearch($container, $sortSelect, engine, keyword, cacheKey) { + const _this = this; + const apiUrl2 = engine.url.replace("{keyword}", encodeURIComponent(keyword)); + const timestamp = Math.floor(Date.now() / 1e3).toString(); + const nonce = randomString(8); + const parts = [`timestamp=${timestamp}`, `nonce=${nonce}`, `keyword=${keyword}`, `limit=10`, `offset=0`, `sort=size`, `sort_type=desc`]; + const signText = `${parts.sort().join("&")}&key=long2ice`; + const sign = window.md5 ? window.md5(signText).toUpperCase() : ""; + _GM_xmlhttpRequest({ + method: "GET", + url: apiUrl2, + headers: { + Accept: "application/json", + Referer: engine.targetPage.replace("{keyword}", encodeURIComponent(keyword)), + "x-timestamp": timestamp, + "x-nonce": nonce, + "x-sign": sign + }, + onload: (response) => { + var _a; + try { + const json = JSON.parse(response.responseText); + const items = Array.isArray(json == null ? void 0 : json.data) ? json.data : Array.isArray((_a = json == null ? void 0 : json.data) == null ? void 0 : _a.data) ? json.data.data : []; + const results = items.map((item) => { + const title = String((item == null ? void 0 : item.name) || "").replace(/<[^>]+>/g, "").replace(/\s+/g, " ").trim(); + const hash = String((item == null ? void 0 : item.hash) || "").replace(/^magnet:\?xt=urn:btih:/i, "").replace(/[^a-z0-9]/gi, ""); + if (!/^[a-f0-9]{32,40}$/i.test(hash)) return null; + const size = formatBytes(item == null ? void 0 : item.size); + const date = (item == null ? void 0 : item.created_at) || (item == null ? void 0 : item.created_time) || (item == null ? void 0 : item.create_time) || ""; + return { + title: title || `magnet:?xt=urn:btih:${hash}`, + magnet: `magnet:?xt=urn:btih:${hash}`, + size, + date + }; + }).filter(Boolean); results.length > 0 && sessionStorage.setItem(cacheKey, JSON.stringify(results)); + $container.data("_magnetData", results); + $sortSelect.prop("disabled", results.length === 0); _this.displayResults($container, results, engine.name); } catch (e) { $container.html(`
解析 ${engine.name} 结果失败: ${e.message}
`); @@ -11630,45 +12006,132 @@ ${err.stack}` : ""); }); } - parseU3C3(html, keyword) { - const $dom = utils.htmlTo$dom(html), results = []; - $dom.find(".torrent-list tbody tr").each(((i, el) => { - const $el = $(el); - if ($el.text().includes("置顶")) return; - const title = $el.find("td:nth-child(2) a").attr("title") || $el.find("td:nth-child(2) a").text().trim(); - if (!title.toLowerCase().includes(keyword.toLowerCase())) return; - const magnet = $el.find("td:nth-child(3) a[href^='magnet:']").attr("href"), - size = $el.find("td:nth-child(4)").text().trim(), date = $el.find("td:nth-child(5)").text().trim(); - magnet && results.push({ - title, - magnet, - size, - date - }); - })); - return results; - } - - parseSukebei(html, keyword) { - const $dom = utils.htmlTo$dom(html), results = []; - $dom.find(".torrent-list tbody tr").each(((i, el) => { - const $el = $(el); - if ($el.text().includes("置顶")) return; - const title = $el.find("td:nth-child(2) a").attr("title") || $el.find("td:nth-child(2) a").text().trim(); - if (!title.toLowerCase().includes(keyword.toLowerCase())) return; - const magnet = $el.find("td:nth-child(3) a[href^='magnet:']").attr("href"), - size = $el.find("td:nth-child(4)").text().trim(), date = $el.find("td:nth-child(5)").text().trim(); - magnet && results.push({ - title, - magnet, - size, - date - }); - })); + parseSokitty(html, keyword) { + const doc = parseHTML(html); + const kwNorm = String(keyword).toUpperCase().replace(/[-_\s]/g, ""); + const results = []; + doc.querySelectorAll(".panel.search-panel").forEach((panel) => { + var _a, _b, _c, _d; + const titleA = panel.querySelector("h3.panel-title > a.list-title"); + if (!titleA) return; + const href = titleA.getAttribute("href") || ""; + if (!href.startsWith("/bt/")) return; + const hash = href.replace("/bt/", ""); + if (!hash) return; + const title = titleA.textContent.trim(); + if (!title.toUpperCase().replace(/[-_\s]/g, "").includes(kwNorm)) return; + const maglink = `magnet:?xt=urn:btih:${hash}`; + const infoItems = [...panel.querySelectorAll(".panel-footer .info-item")]; + const size = ((_b = (_a = infoItems[0]) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim()) || ""; + const date = ((_d = (_c = infoItems[2]) == null ? void 0 : _c.textContent) == null ? void 0 : _d.trim()) || ""; + results.push({title, magnet: maglink, size, date}); + }); return results; } } + function parseSetCookie(headers) { + if (!headers) return ""; + const lines = headers.split("\n"); + const cookies = []; + for (const line of lines) { + const match = line.match(/^set-cookie:\s*(.+?)(?:;|$)/i); + if (match) { + const val = match[1].split(";")[0].trim(); + if (val) cookies.push(val); + } + } + return cookies.join("; "); + } + + function formatBytes(bytes) { + if (!bytes || bytes <= 0) return ""; + const units = ["B", "KB", "MB", "GB", "TB"]; + let i = 0; + let size = bytes; + while (size >= 1024 && i < units.length - 1) { + size /= 1024; + i++; + } + return size.toFixed(1) + " " + units[i]; + } + + function extractCode(text) { + if (!text) return null; + const patterns = [ + /FC2[-\s_]?(?:PPV)?[-\s_]?(\d{6,9})/i, + /([A-Z]{2,15})-(\d{2,10})(?:-(\d+))?/i, + /([A-Z]{2,15})-([A-Z]{0,2}\d{2,10})/i, + /^[A-Z0-9]+[-_](\d{6}[-_]\d{2,3})/i, + /(\d{6}[-_]\d{2,3})[-_][A-Z0-9]+$/i, + new RegExp("(? { + const sizeDelta = parseSize(b.size) - parseSize(a.size); + if (sortMode === "size") return sizeDelta; + const aTime = parseDate(a.date), bTime = parseDate(b.date); + if (!aTime && !bTime) return sizeDelta; + if (!aTime) return 1; + if (!bTime) return -1; + const timeDelta = sortMode === "oldest" ? aTime - bTime : bTime - aTime; + return timeDelta || sizeDelta; + }); + $container.empty(); + const $table = $(` + + + + + + + +
名称大小日期操作
`); + const $tbody = $table.find("tbody"); + results.forEach(((result) => { + const quality = classifyQuality(result.title); + let badges = ""; + if (quality.is4K) badges += '4K'; + if (quality.isChinese) badges += '中字'; + if (quality.isCracked) badges += '破解'; + const displayDate = formatMagnetDate(result.date); + const dnCode = extractCode(result.title); + const $row = $(` + +
+ ${badges} + ${result.title} +
+ + ${result.size || "未知"} + ${displayDate || "未知"} + + + + + + `); + $tbody.append($row); + })); + $container.append($table); + } const Thumbnail = { sources: ["javfree", "projectjav", "javstore"], cacheKey(code) { @@ -11852,7 +12315,7 @@ ${err.stack}` : ""); async get(code) { const cacheKey = this.cacheKey(code); const cached = sessionStorage.getItem(cacheKey); - if (cached) return {url: cached, source: null}; + if (cached) return {url: cached, source: null}; let url = null, source = null; for (const src of this.sourceOrder()) { url = await this.fetchFromSource(src, code); @@ -11862,11 +12325,10 @@ ${err.stack}` : ""); } } if (url) sessionStorage.setItem(cacheKey, url); - return {url, source}; + return {url, source}; } }; let previewOverlay = null; - function showPreviewOverlay$1(imgUrl, code, source = null) { if (previewOverlay) { previewOverlay.close(); @@ -11995,18 +12457,15 @@ ${err.stack}` : ""); document.addEventListener("keydown", escHandler); document.body.appendChild(container); document.body.appendChild(toolbar); - previewOverlay = {container, toolbar, close: closeOverlay}; + previewOverlay = {container, toolbar, close: closeOverlay}; } - class ScreenShotPlugin extends BasePlugin { getName() { return "ScreenShotPlugin"; } - async handle() { this.loadScreenShot().then(); } - async loadScreenShot() { if (!window.isDetailPage) return; if ("yes" !== await storageManager.getSetting("enableLoadScreenShot", "yes")) return; @@ -12029,21 +12488,17 @@ ${err.stack}` : ""); this.showErrorFallback(carNum2, e); } } - async getScreenshot(carNum2) { const result = await Thumbnail.get(carNum2); if (result.url) return result.url; throw new Error("未找到预览图"); } - async getJavStoreScreenShot(carNum2) { return await Thumbnail.javstore(carNum2); } - async getJavFreeScreenShot(carNum2) { return await Thumbnail.javfree(carNum2); } - addImg(title, imgUrl, code, source) { if (!imgUrl) return; isJavDb$1 && $(".screen-container").html( @@ -12058,7 +12513,6 @@ ${err.stack}` : ""); showPreviewOverlay$1(imgUrl, code || title, source); }); } - showErrorFallback(carNum2, error) { var _a, _b; console.error("获取缩略图失败:", ((_b = (_a = error == null ? void 0 : error.message) == null ? void 0 : _a.substring) == null ? void 0 : _b.call(_a, 0, 100)) || error); @@ -12088,23 +12542,20 @@ ${err.stack}` : ""); }); } } - window.showPreviewOverlay = showPreviewOverlay$1; const getDownPathList = async () => { const res = await gmHttp.get("https://webapi.115.com/offine/downpath"); return "object" == typeof res ? res.data : null; }; const searchFiles = async (search_value, offset = 0, limit = 30, params = {}) => { - const queryParams = new URLSearchParams({search_value, offset, limit, ...params}); + const queryParams = new URLSearchParams({search_value, offset, limit, ...params}); const url = `https://webapi.115.com/files/search?${queryParams}`; return await gmHttp.get(url); }; - class WangPan115TaskPlugin extends BasePlugin { getName() { return "WangPan115TaskPlugin"; } - async handle() { $(".buttons button[data-clipboard-text*='magnet:']").each(((i, el) => { $(el).parent().append($(" ` : match.startsWith("magnet:") ? ` @@ -14231,7 +14590,6 @@ ${err.stack}` : ""); this.rightClickFilter(); } } - async rightClickFilter() { await storageManager.getSetting("enableTitleSelectFilter", YES$1) === YES$1 && utils.rightClick(document.body, ".review-content", (async (event) => { const selectedText = window.getSelection().toString(); @@ -14245,12 +14603,10 @@ ${err.stack}` : ""); })); } } - class FilterTitleKeywordPlugin extends BasePlugin { getName() { return "FilterTitleKeywordPlugin"; } - async handle() { if (!window.isDetailPage && !window.isFc2Page) return; if (await storageManager.getSetting("enableTitleSelectFilter", YES$1) !== YES$1) return; @@ -14273,12 +14629,10 @@ ${err.stack}` : ""); })); } } - class CoverButtonPlugin extends BasePlugin { getName() { return "CoverButtonPlugin"; } - async initCss() { return ` `; } - handle() { if (window.isListPage) { this.addSvgBtn(); this.bindClick().then(); } } - async addSvgBtn() { $(this.getSelector().itemSelector).toArray().forEach(((ele) => { let $box2 = $(ele); @@ -14523,15 +14875,14 @@ ${err.stack}` : ""); })); this.enableSvgBtn(); } - async enableSvgBtn() { - const settingObj = await storageManager.getSetting(), { - enableScreenSvg = YES$1, - enableVideoSvg = YES$1, - enableHandleSvg = YES$1, - enableSiteSvg = YES$1, - enableCopySvg = YES$1 - } = settingObj; + const settingObj = await storageManager.getSetting(), { + enableScreenSvg = YES$1, + enableVideoSvg = YES$1, + enableHandleSvg = YES$1, + enableSiteSvg = YES$1, + enableCopySvg = YES$1 + } = settingObj; [{ selector: ".screenSvg", enabled: enableScreenSvg @@ -14551,7 +14902,6 @@ ${err.stack}` : ""); $(selector).toggle(enabled === YES$1); })); } - async bindClick() { this.getSelector(); const listPagePlugin = this.getBean("ListPagePlugin"); @@ -14561,22 +14911,22 @@ ${err.stack}` : ""); $(".more-tools").not($currentTools).stop(true, true).removeClass("elastic-in").addClass("elastic-out").hide(); $currentTools.is(":visible") ? $currentTools.stop(true, true).removeClass("elastic-in").addClass("elastic-out").hide() : $currentTools.stop(true, true).removeClass("elastic-out").addClass("elastic-in").show(); })); - $(document).on("click", (function (event) { + $(document).on("click", (function (event) { $(event.target).closest(".more-tools-container").length || $(".more-tools").stop(true, true).removeClass("elastic-in").addClass("elastic-out").hide(); })); $(document).on("click", ".videoSvg", ((event) => { event.preventDefault(); $('.videoSvg[title!="播放视频"]').each(((index, element) => { const $otherSvgElement = $(element); - let $otherBox = $otherSvgElement.closest(".item"), - $otherImg = $otherBox.find("img"), {carNum: carNum2} = this.getBoxCarInfo($otherBox); + let $otherBox = $otherSvgElement.closest(".item"), + $otherImg = $otherBox.find("img"), {carNum: carNum2} = this.getBoxCarInfo($otherBox); this.showImg($otherSvgElement, $otherImg, carNum2); $otherSvgElement.html(this.videoSvg).attr("title", "播放视频"); })); const $currentBox = $(event.target).closest(".item"), $svgElement = $currentBox.find(".videoSvg"); if ("播放视频" === $svgElement.attr("title")) { $svgElement.html(this.recoveryVideoSvg).attr("title", "切回封面"); - const {carNum: carNum2} = this.getBoxCarInfo($currentBox); + const {carNum: carNum2} = this.getBoxCarInfo($currentBox); let $img = $currentBox.find("img"); if (!$img.length) { show.error("没有找到图片"); @@ -14590,7 +14940,7 @@ ${err.stack}` : ""); let loadObj = loading(); try { const $box2 = $(event.currentTarget).closest(".item"); - let {carNum: carNum2} = this.getBoxCarInfo($box2); + let {carNum: carNum2} = this.getBoxCarInfo($box2); carNum2 = carNum2.replace("FC2-", ""); const imgUrl = await this.getBean("ScreenShotPlugin").getScreenshot(carNum2); loadObj.close(); @@ -14605,11 +14955,11 @@ ${err.stack}` : ""); $(document).on("click", ".filterBtn, .favoriteBtn, .hasDownBtn, .hasWatchBtn", ((event) => { event.preventDefault(); event.stopPropagation(); - const $btn = $(event.target).closest(".menu-btn"), $box2 = $btn.closest(".item"), { - carNum: carNum2, - url, - publishTime - } = this.getBoxCarInfo($box2), handleAction = async (status) => { + const $btn = $(event.target).closest(".menu-btn"), $box2 = $btn.closest(".item"), { + carNum: carNum2, + url, + publishTime + } = this.getBoxCarInfo($box2), handleAction = async (status) => { let actress = await listPagePlugin.parseActressName(url); await storageManager.saveCar({ carNum: carNum2, @@ -14624,13 +14974,13 @@ ${err.stack}` : ""); $btn.hasClass("filterBtn") ? utils.q(event, `是否屏蔽${carNum2}?`, (() => handleAction(Status_FILTER$1))) : $btn.hasClass("favoriteBtn") ? handleAction(Status_FAVORITE$1).then() : $btn.hasClass("hasDownBtn") ? handleAction(Status_HAS_DOWN$1).then() : $btn.hasClass("hasWatchBtn") && handleAction(Status_HAS_WATCH$1).then(); $(".more-tools").stop(true, true).removeClass("elastic-in").addClass("elastic-out").hide(); })); - const otherSitePlugin = this.getBean("OtherSitePlugin"), missAvUrl = await otherSitePlugin.getMissAvUrl(), - jableUrl = await otherSitePlugin.getjableUrl(), av123Url = await otherSitePlugin.getAv123Url(); + const otherSitePlugin = this.getBean("OtherSitePlugin"), missAvUrl = await otherSitePlugin.getMissAvUrl(), + jableUrl = await otherSitePlugin.getjableUrl(), av123Url = await otherSitePlugin.getAv123Url(); $(document).on("click", ".site-jable, .site-miss-av, .site-123-av", ((event) => { event.preventDefault(); event.stopPropagation(); - const $currentTarget = $(event.currentTarget), - $box2 = $currentTarget.closest(".item"), {carNum: carNum2} = this.getBoxCarInfo($box2); + const $currentTarget = $(event.currentTarget), + $box2 = $currentTarget.closest(".item"), {carNum: carNum2} = this.getBoxCarInfo($box2); let url = null; $currentTarget.hasClass("site-jable") ? url = `${jableUrl}/search/${carNum2}/` : $currentTarget.hasClass("site-miss-av") ? url = `${missAvUrl}/search/${carNum2}` : $currentTarget.hasClass("site-123-av") && (url = `${av123Url}/ja/search?keyword=${carNum2}`); event && (event.ctrlKey || event.metaKey) ? _GM_openInTab(url, { @@ -14640,8 +14990,10 @@ ${err.stack}` : ""); $(document).on("click", ".titleSvg, .carNumSvg, .downSvg", ((event) => { event.preventDefault(); event.stopPropagation(); - const $box2 = $(event.currentTarget).closest(".item"), {carNum: carNum2, title} = this.getBoxCarInfo($box2), - $img = $box2.find(isJavBus$1 ? ".photo-frame img" : ".cover img"); + const $box2 = $(event.currentTarget).closest(".item"), { + carNum: carNum2, + title + } = this.getBoxCarInfo($box2), $img = $box2.find(isJavBus$1 ? ".photo-frame img" : ".cover img"); $(event.currentTarget).hasClass("titleSvg") ? utils.copyToClipboard("标题", title) : $(event.currentTarget).hasClass("carNumSvg") ? utils.copyToClipboard("番号", carNum2) : $(event.currentTarget).hasClass("downSvg") && fetch($img.attr("src")).then(((response) => response.blob())).then(((blob) => { utils.download(blob, carNum2 + " " + title + ".jpg"); })); @@ -14651,7 +15003,7 @@ ${err.stack}` : ""); event.stopPropagation(); const $btn = $(event.currentTarget); const $box2 = $btn.closest(".item"); - const {carNum: carNum2, title, publishTime, url} = this.getBoxCarInfo($box2); + const {carNum: carNum2, title, publishTime, url} = this.getBoxCarInfo($box2); const score = $box2.find(".score").text().trim() || "无评分"; let markedList = await storageManager.forage.getItem("markedDeleteList") || []; const existingIndex = markedList.findIndex((item) => item.carNum === carNum2); @@ -14686,13 +15038,12 @@ ${err.stack}` : ""); } const matchList = JSON.parse(matchData); const $box2 = $btn.closest(".item"); - const {carNum: carNum2} = this.getBoxCarInfo($box2); + const {carNum: carNum2} = this.getBoxCarInfo($box2); this.getBean("WangPan115MatchPlugin").showDeleteDialog(carNum2, matchList, (async (newMatchList) => { this.getBean("WangPan115MatchPlugin").updateMatchStatus($box2, carNum2, newMatchList); })); })); } - showImg($svgElement, $img, carNum2) { $svgElement.html(this.videoSvg).attr("title", "播放视频"); let $video = $(`#${`${carNum2}_preview_video`}`); @@ -14704,7 +15055,6 @@ ${err.stack}` : ""); $img.removeClass("loading"); $img.next(".loading-spinner").remove(); } - async showVideo($svgElement, $img, carNum2) { const id = `${carNum2}_preview_video`; let $video = $(`#${id}`); @@ -14764,7 +15114,6 @@ ${err.stack}` : ""); $video.trigger("focus"); } } - class Fc2By123AvPlugin extends BasePlugin { constructor() { super(...arguments); @@ -14775,16 +15124,13 @@ ${err.stack}` : ""); __publicField2(this, "maxPage", null); __publicField2(this, "keyword", this.urlParams.get("keyword") || null); } - getName() { return "Fc2By123AvPlugin"; } - async getBaseUrl() { const otherSitePlugin = this.getBean("OtherSitePlugin"); return await otherSitePlugin.getAv123Url() + "/ja"; } - handle() { $("#navbar-menu-hero > div > div:nth-child(1) > div > a:nth-child(4)").after('123Av-Fc2'); $('.tabs li:contains("FC2")').after('
  • 123Av-Fc2
  • '); @@ -14793,7 +15139,6 @@ ${err.stack}` : ""); this.handleQuery().then(); } } - hookPage() { let $h2 = $("h2.section-title"); $h2.contents().first().replaceWith("123Av"); @@ -14862,7 +15207,6 @@ ${err.stack}` : ""); } })); } - renderPagination() { const $paginationList = $(".pagination-list"); $paginationList.empty(); @@ -14881,7 +15225,6 @@ ${err.stack}` : ""); $paginationList.append(`
  • ${this.maxPage}
  • `); } } - async handleQuery() { let loadObj = loading(); try { @@ -14903,9 +15246,9 @@ ${err.stack}` : ""); $dom.find(".box-item").each(((index, element) => { const $item = $(element), imgSrc = $item.find("img").attr("data-src"); let carNum2 = $item.find("img").attr("title"); - const detailLink = $item.find(".detail a"), link = detailLink.attr("href"), - href = baseUrl + (link.startsWith("/") ? link : "/" + link), - title = detailLink.text().trim().replace(carNum2 + " - ", ""); + const detailLink = $item.find(".detail a"), link = detailLink.attr("href"), + href = baseUrl + (link.startsWith("/") ? link : "/" + link), + title = detailLink.text().trim().replace(carNum2 + " - ", ""); carNum2 = carNum2.replace("FC2-PPV", "FC2"); dataList.push({ imgSrc, @@ -14940,7 +15283,6 @@ ${err.stack}` : ""); loadObj.close(); } } - async open123AvFc2Dialog(carNum2, href) { let otherHtml = ""; await storageManager.getSetting("enableLoadOtherSite", YES$1) === YES$1 && (otherHtml = '
    第三方站点:
    '); @@ -15050,7 +15392,7 @@ ${err.stack}` : ""); layer.closeAll(); })); $("#subtitleSearchBtn").on("click", (() => { - window.JavPackSubtitle.openSearchModal({details: {code: carNum2}}); + window.JavPackSubtitle.openSearchModal({details: {code: carNum2}}); })); window.JavPackSubtitle.preload115Matches(carNum2); let tempCarNum = carNum2.replace("FC2-", ""); @@ -15058,11 +15400,10 @@ ${err.stack}` : ""); } }); } - async loadData(carNum2, href) { let loadObj = loading(); try { - const {id, publishDate, title, moviePoster} = await this.get123AvVideoInfo(href); + const {id, publishDate, title, moviePoster} = await this.get123AvVideoInfo(href); $(".movie-info-container").html(`

    ${title || "无标题"}

    @@ -15097,7 +15438,6 @@ ${err.stack}` : ""); loadObj.close(); } } - handleLongImg(carNum2) { utils.loopDetector((() => $(".movie-gallery .image-list").length > 0), (async () => { $(".movie-gallery .image-list").prepend('
    正在加载缩略图
    '); @@ -15112,10 +15452,9 @@ ${err.stack}` : ""); } })); } - async get123AvVideoInfo(href) { - const html = await gmHttp.get(href), match = html.match(/v-scope="Movie\({id:\s*(\d+),/), - id = match ? match[1] : null, $dom = utils.htmlTo$dom(html); + const html = await gmHttp.get(href), match = html.match(/v-scope="Movie\({id:\s*(\d+),/), + id = match ? match[1] : null, $dom = utils.htmlTo$dom(html); return { id, publishDate: $dom.find('span:contains("リリース日:")').next("span").text(), @@ -15123,10 +15462,9 @@ ${err.stack}` : ""); moviePoster: $dom.find("#player").attr("data-poster") }; } - async getActressInfo(fc2Num) { let url = `https://fc2ppvdb.com/articles/${fc2Num.replace("FC2-", "")}`; - const html = await gmHttp.get(url), $dom = $(html), actressNodeList = $dom.find("div").filter((function () { + const html = await gmHttp.get(url), $dom = $(html), actressNodeList = $dom.find("div").filter((function () { return 0 === $(this).text().trim().indexOf("女優:"); })); if (0 === actressNodeList.length || actressNodeList.length > 1) { @@ -15145,7 +15483,7 @@ ${err.stack}` : ""); $("#data-actress").text(actress); } else actorsHtml += "暂无演员信息"; $(".actor-list").html(actorsHtml); - const sellerNodeList = $dom.find("div").filter((function () { + const sellerNodeList = $dom.find("div").filter((function () { return 0 === $(this).text().trim().indexOf("販売者:"); })); if (sellerNodeList.length > 0) { @@ -15157,14 +15495,13 @@ ${err.stack}` : ""); } } } - async getImgList(fc2Num) { - let tempCarNum = fc2Num.replace("FC2-", ""), - url = `https://adult.contents.fc2.com/article/${fc2Num.replace("FC2-", "")}/`; + let tempCarNum = fc2Num.replace("FC2-", ""), + url = `https://adult.contents.fc2.com/article/${fc2Num.replace("FC2-", "")}/`; const html = await gmHttp.get(url, null, { referer: url }); - let imgList = $(html).find(".items_article_SampleImagesArea img").map((function () { + let imgList = $(html).find(".items_article_SampleImagesArea img").map((function () { return $(this).attr("src"); })).get(), imagesHtml = ""; Array.isArray(imgList) && imgList.length > 0 ? imagesHtml = imgList.map(((img, index) => ` @@ -15175,7 +15512,6 @@ ${err.stack}` : ""); $(".image-list").html(imagesHtml); this.handleLongImg(tempCarNum); } - async getMovie(id, moviePoster) { let url = `${await this.getBaseUrl()}/ajax/v/${id}/videos`, loadObj = loading(); try { @@ -15193,7 +15529,6 @@ ${err.stack}` : ""); loadObj.close(); } } - markDataListHtml(movies) { let moviesHtml = ""; movies.forEach(((movie) => { @@ -15217,17 +15552,14 @@ ${err.stack}` : ""); return moviesHtml; } } - class DetailPageButtonPlugin extends BasePlugin { getName() { return "DetailPageButtonPlugin"; } - constructor() { super(); this.answerCount = 1; } - async handle() { let settingObj = await storageManager.getSetting(); this.filterHotKey = settingObj.filterHotKey; @@ -15239,10 +15571,9 @@ ${err.stack}` : ""); this.hideVideoControls(); window.isDetailPage && this.createMenuBtn(); } - async createMenuBtn() { - const pageInfo = this.getPageInfo(), carNum2 = pageInfo.carNum, - buttonsHtml = '\n \n '; + const pageInfo = this.getPageInfo(), carNum2 = pageInfo.carNum, + buttonsHtml = '\n \n '; isJavDb$1 && $(".tabs").after(buttonsHtml); isJavBus$1 && $("#mag-submit-show").before(buttonsHtml); $("#favoriteBtn").on("click", (() => this.favoriteOne())); @@ -15262,8 +15593,8 @@ ${err.stack}` : ""); } }); })); - const highlightMagnetPlugin = this.getBean("HighlightMagnetPlugin"), - enableMagnetsFilter = await storageManager.getSetting("enableMagnetsFilter", NO); + const highlightMagnetPlugin = this.getBean("HighlightMagnetPlugin"), + enableMagnetsFilter = await storageManager.getSetting("enableMagnetsFilter", NO); if (enableMagnetsFilter === YES$1) { const savedSettings = await storageManager.getSetting("magnetSortAndFilter", "{}"); let settings; @@ -15302,12 +15633,11 @@ ${err.stack}` : ""); } })); $("#subtitleSearchBtn").on("click", (() => { - window.JavPackSubtitle.openSearchModal({details: {code: carNum2}}); + window.JavPackSubtitle.openSearchModal({details: {code: carNum2}}); })); window.JavPackSubtitle.preload115Matches(carNum2); this.showStatus(carNum2).then(); } - async openMagnetSortFilterPanel(highlightMagnetPlugin) { const existingPanel = document.getElementById("magnet-sort-filter-panel"); if (existingPanel) { @@ -15321,35 +15651,35 @@ ${err.stack}` : ""); } catch (e) { settings = {}; } - const sortEnabled = settings.sortEnabled || (isJavBus$1 ? {date: false, size: false} : { - date: false, - size: false, - files: false - }); + const sortEnabled = settings.sortEnabled || (isJavBus$1 ? {date: false, size: false} : { + date: false, + size: false, + files: false + }); const defaultSortOrder = isJavBus$1 ? ["date", "size"] : ["date", "size", "files"]; const sortOrder = settings.sortOrder && settings.sortOrder.length === defaultSortOrder.length ? settings.sortOrder : defaultSortOrder; const filterHD = settings.filterHD || false; const filter4K = settings.filter4K || false; const filterSubtitle = settings.filterSubtitle || false; const filterUncensored = settings.filterUncensored || false; - const SORT_LABELS = isJavBus$1 ? {date: "发布日期", size: "文件大小"} : { + const SORT_LABELS = isJavBus$1 ? {date: "发布日期", size: "文件大小"} : { date: "发布日期", size: "文件大小", files: "文件数量" }; - const SORT_HINTS = isJavBus$1 ? {date: "从新到旧", size: "从大到小"} : { + const SORT_HINTS = isJavBus$1 ? {date: "从新到旧", size: "从大到小"} : { date: "从新到旧", size: "从大到小", files: "从少到多" }; const FILTER_ITEMS = [ - {key: "HD", label: "高清", checked: filterHD}, - {key: "4K", label: "4K", checked: filter4K}, - {key: "Subtitle", label: "字幕", checked: filterSubtitle}, - {key: "Uncensored", label: "无码", checked: filterUncensored} + {key: "HD", label: "高清", checked: filterHD}, + {key: "4K", label: "4K", checked: filter4K}, + {key: "Subtitle", label: "字幕", checked: filterSubtitle}, + {key: "Uncensored", label: "无码", checked: filterUncensored} ]; const currentSortOrder = [...sortOrder]; - const currentSortEnabled = {...sortEnabled}; + const currentSortEnabled = {...sortEnabled}; const currentFilters = { HD: filterHD, "4K": filter4K, @@ -15500,11 +15830,10 @@ ${err.stack}` : ""); closePanel(); }); } - async showStatus(carNum2) { - const $filterBtn = $("#filterBtn span"), $favoriteBtn = $("#favoriteBtn span"), - $hasDownBtn = $("#hasDownBtn span"), $hasWatchBtn = $("#hasWatchBtn span"), - hotKeyDisplay = (hotKey) => hotKey ? `(${hotKey})` : ""; + const $filterBtn = $("#filterBtn span"), $favoriteBtn = $("#favoriteBtn span"), + $hasDownBtn = $("#hasDownBtn span"), $hasWatchBtn = $("#hasWatchBtn span"), + hotKeyDisplay = (hotKey) => hotKey ? `(${hotKey})` : ""; $filterBtn.text(`🚫 屏蔽 ${hotKeyDisplay(this.filterHotKey)}`); $favoriteBtn.text(`⭐ 收藏 ${hotKeyDisplay(this.favoriteHotKey)}`); $hasDownBtn.text(`📥️ 已下载 ${hotKeyDisplay(this.hasDownHotKey)}`); @@ -15524,7 +15853,6 @@ ${err.stack}` : ""); $hasWatchBtn.text(`🔍 已标记观看 ${hotKeyDisplay(this.hasWatchHotKey)}`); } } - async favoriteOne() { let pageInfo = this.getPageInfo(); await storageManager.saveCar({ @@ -15538,7 +15866,6 @@ ${err.stack}` : ""); window.refresh(); utils.closePage(); } - async hasDownOne() { let pageInfo = this.getPageInfo(); await storageManager.saveCar({ @@ -15552,7 +15879,6 @@ ${err.stack}` : ""); window.refresh(); utils.closePage(); } - async hasWatchOne() { let pageInfo = this.getPageInfo(); await storageManager.saveCar({ @@ -15566,7 +15892,6 @@ ${err.stack}` : ""); window.refresh(); utils.closePage(); } - /* searchXunLeiSubtitle(carNum2) { let loadObj = loading(); @@ -15681,7 +16006,6 @@ ${err.stack}` : ""); this.answerCount = 1; })); } - speedVideo() { if ($("#preview-video").is(":visible")) { const videoEl = document.getElementById("preview-video"); @@ -15711,13 +16035,11 @@ ${err.stack}` : ""); } } else $("#javTrailersBtn").click(); } - hideVideoControls() { - $(document).on("mouseenter", "#preview-video", (function () { + $(document).on("mouseenter", "#preview-video", (function () { $(this).prop("controls", true); })); } - async bindHotkey() { const handlers = {}; this.filterHotKey && (handlers[this.filterHotKey] = () => { @@ -15745,7 +16067,6 @@ ${err.stack}` : ""); registerHotkey(key, handler); })); } - async previewSubtitle(url, name2) { if (!url) { console.error("未提供文件URL"); @@ -15771,7 +16092,7 @@ ${err.stack}` : ""); scrollbar: false, content: `
    ${finalContent}
    `, btn: ["下载", "关闭"], - btn1: function (index, layero, that) { + btn1: function (index, layero, that) { utils.download(resText, name2); return false; } @@ -15783,12 +16104,10 @@ ${err.stack}` : ""); else show.error("仅支持预览ASS和SRT字幕文件"); } } - class BlacklistPlugin extends BasePlugin { getName() { return "BlacklistPlugin"; } - async addBlacklist(event) { let tempEvent = { clientX: event.clientX, @@ -15815,7 +16134,7 @@ ${err.stack}` : ""); title = `是否将该演员 ${dataInfo.name} 加入到黑名单中?`; hasAddBlacklist && (title = `演员 ${dataInfo.name} 已在黑名单中, 是否从当前页开始追加屏蔽?`); } - const {starId, name: name2, allName, role, movieType, blacklistUrl} = dataInfo; + const {starId, name: name2, allName, role, movieType, blacklistUrl} = dataInfo; currentHref$1.includes("page") && !currentHref$1.includes("page=1") && (title += "
    注意: 当前页面非第一页, 屏蔽数据将从此页面开始"); if (isJavBus$1) { const afterStarParts = currentHref$1.split("/star/")[1].split("/"); @@ -15868,15 +16187,13 @@ ${err.stack}` : ""); })); })); } - async resetBtnTip() { - const taskPlugin = this.getBean("TaskPlugin"), - lastCheckBlacklistTimeStr = localStorage.getItem(taskPlugin.lastCheckBlacklistTimeKey) || "无", - checkBlacklist_intervalTime = await storageManager.getSetting("checkBlacklist_intervalTime", 12); + const taskPlugin = this.getBean("TaskPlugin"), + lastCheckBlacklistTimeStr = localStorage.getItem(taskPlugin.lastCheckBlacklistTimeKey) || "无", + checkBlacklist_intervalTime = await storageManager.getSetting("checkBlacklist_intervalTime", 12); this.checkBlacklist_ruleTime = await storageManager.getSetting("checkBlacklist_ruleTime", 8760); $("#checkBlacklistBtn").attr("data-tip", `上次检测时间: ${lastCheckBlacklistTimeStr}; 检测间隔时间: ${checkBlacklist_intervalTime}小时`); } - async openBlacklistDialog() { const taskPlugin = this.getBean("TaskPlugin"), settingObj = await storageManager.getSetting(); let html = ` @@ -15980,18 +16297,16 @@ ${err.stack}` : ""); } }); } - async reloadTable() { if (!this.tableObj) return; const tableData = await this.getTableData(); this.tableObj.setData(tableData); } - async getTableData() { - const taskPlugin = this.getBean("TaskPlugin"), blacklist = await storageManager.getBlacklist(), - blacklistCarList = await storageManager.getBlacklistCarList(), searchValue = $("#searchValue").val(), - statusType = $("#statusType").val(), $dataType = $("#dataType"), dataType = $dataType.val(), - urlType = $("#urlType").val(), blacklistCount = blacklist.length; + const taskPlugin = this.getBean("TaskPlugin"), blacklist = await storageManager.getBlacklist(), + blacklistCarList = await storageManager.getBlacklistCarList(), searchValue = $("#searchValue").val(), + statusType = $("#statusType").val(), $dataType = $("#dataType"), dataType = $dataType.val(), + urlType = $("#urlType").val(), blacklistCount = blacklist.length; let actorCount = 0, actressCount = 0, noStarCount = 0; const filteredBlacklist = blacklist.map(((item) => { "actor" === item.role ? actorCount++ : "actress" === item.role ? actressCount++ : "虚拟演员" === item.role && noStarCount++; @@ -16026,7 +16341,6 @@ ${err.stack}` : ""); this.currentCarCount = finalResult.reduce(((accumulator, currentObject) => accumulator + (currentObject.count || 0)), 0); return finalResult; } - async loadTableData() { this.checkBlacklist_ruleTime = await storageManager.getSetting("checkBlacklist_ruleTime") || 8760; const tableData = await this.getTableData(); @@ -16198,7 +16512,6 @@ ${err.stack}` : ""); } }); } - getCurrentStarUrl() { let urlWithoutSortType = window.location.href.replace(/([&?])sort_type=[^&]+(&|$)/, "$1"); urlWithoutSortType = urlWithoutSortType.replace(/[&?]$/, ""); @@ -16210,12 +16523,10 @@ ${err.stack}` : ""); urlWithoutPageNumber = urlWithoutPageNumber.replace(/\/(\d+)(?:\/(\d+))?(\?|$)/, ((match, id, page, suffix) => void 0 !== page ? `/${id}${suffix}` : match)); return urlWithoutPageNumber; } - parseUrlId(url) { if (!url) throw new Error("url未传入"); return new URL(url).pathname.split("/").filter(((segment) => "" !== segment.trim())).pop(); } - async filterAllVideo(actorName, $dom) { let movieList, nextPageLink; if ($dom) { @@ -16231,7 +16542,7 @@ ${err.stack}` : ""); throw new Error("解析列表失败"); } for (const element of movieList) { - const $item = $(element), {carNum: carNum2, url, publishTime} = this.getBoxCarInfo($item); + const $item = $(element), {carNum: carNum2, url, publishTime} = this.getBoxCarInfo($item); if (url && carNum2) try { if (await storageManager.getCar(carNum2)) continue; await storageManager.saveCar({ @@ -16249,26 +16560,25 @@ ${err.stack}` : ""); if (nextPageLink) { show.info("请不要关闭窗口, 正在解析下一页:" + nextPageLink); await new Promise(((resolve) => setTimeout(resolve, 500))); - const html = await gmHttp.get(nextPageLink), parser = new DOMParser(), - next$dom = $(parser.parseFromString(html, "text/html")); + const html = await gmHttp.get(nextPageLink), parser = new DOMParser(), + next$dom = $(parser.parseFromString(html, "text/html")); await this.filterAllVideo(actorName, next$dom); } else { show.ok("执行结束!"); window.refresh(); } } - async filterActorVideo(actorName, starId, $dom) { - let {nextPageLink} = await this.parseAndSaveFilterInfo($dom, actorName, starId); + let {nextPageLink} = await this.parseAndSaveFilterInfo($dom, actorName, starId); this.nextPageLink = nextPageLink; if (nextPageLink) { this.lastPageLink = nextPageLink; show.info("请不要关闭窗口, 正在解析下一页:" + nextPageLink); let next$dom; - const pageNum = utils.getUrlParam(nextPageLink, "page") || 0, - beyond60Plugin = this.getBean("Beyond60Plugin"); + const pageNum = utils.getUrlParam(nextPageLink, "page") || 0, + beyond60Plugin = this.getBean("Beyond60Plugin"); if (isJavDb$1 && beyond60Plugin && pageNum > 60) { - let {html, nextUrl, hasMore} = await beyond60Plugin.handleBeyond60(nextPageLink), mergeHtml = ` + let {html, nextUrl, hasMore} = await beyond60Plugin.handleBeyond60(nextPageLink), mergeHtml = `
    ${html}
    ${nextUrl ? `` : ""} `; @@ -16284,7 +16594,6 @@ ${err.stack}` : ""); window.refresh(); } } - async parseAndSaveFilterInfo($dom, actorName, starId) { let movieList, nextPageLink; if ($dom) { @@ -16307,7 +16616,7 @@ ${err.stack}` : ""); const filterKeywordList = await storageManager.getTitleFilterKeyword(); let carDataList = [], lastPublishTime = null; for (const element of movieList) { - const $item = $(element), {carNum: carNum2, url, publishTime, title} = this.getBoxCarInfo($item); + const $item = $(element), {carNum: carNum2, url, publishTime, title} = this.getBoxCarInfo($item); lastPublishTime || (lastPublishTime = publishTime); filterKeywordList.find(((kw) => title.includes(kw) || carNum2.startsWith(kw))) || url && carNum2 && carDataList.push({ carNum: carNum2, @@ -16324,7 +16633,6 @@ ${err.stack}` : ""); lastPublishTime }; } - async clearKeywordBlacklist() { let filterKeywordList = await storageManager.getTitleFilterKeyword(); const processedKeywordsSet = /* @__PURE__ */ new Set(); @@ -16335,10 +16643,10 @@ ${err.stack}` : ""); show.info("没有需要清理的关键词数据"); return; } - const carList = await storageManager.getCarList(), - blacklistCarList = await storageManager.getBlacklistCarList(), - carNumSet = new Set(carList.map(((car) => car.carNum))), keywords = Array.from(processedKeywordsSet), - waitRemoveCarNumList = [], removableCarData = []; + const carList = await storageManager.getCarList(), + blacklistCarList = await storageManager.getBlacklistCarList(), + carNumSet = new Set(carList.map(((car) => car.carNum))), keywords = Array.from(processedKeywordsSet), + waitRemoveCarNumList = [], removableCarData = []; for (const car of blacklistCarList) { const carNum2 = car.carNum; let matched = false; @@ -16376,7 +16684,7 @@ ${err.stack}` : "");
    `, btn: ["确定清理", "取消"], - success: function (layero, index) { + success: function (layero, index) { new Tabulator("#wait-remove-table", { data: removableCarData, virtualDom: true, @@ -16427,13 +16735,12 @@ ${err.stack}` : ""); layer.close(index); } }, - btn2: function (index) { + btn2: function (index) { layer.close(index); } }) : show.info("没有需要清理的黑名单番号数据"); } } - class ListPagePlugin extends BasePlugin { constructor() { super(...arguments); @@ -16448,11 +16755,9 @@ ${err.stack}` : ""); __publicField2(this, "cache", localStorage.getItem("jhs_translate") ? JSON.parse(localStorage.getItem("jhs_translate")) : {}); __publicField2(this, "writeQueue", Promise.resolve()); } - getName() { return "ListPagePlugin"; } - async handle() { this.cleanRepeatId(); this.replaceHdImg(); @@ -16465,20 +16770,18 @@ ${err.stack}` : ""); $(this.getSelector().itemSelector + " a").attr("target", "_blank"); this.checkDom(); } - rememberTagExpand() { if (!window.location.href.includes("actors")) return; const $expandButton = $(".tag-expand"); if (0 === $expandButton.length) return; - const isExpanded = "true" === localStorage.getItem("jhs_tag_expand"), - $actorTagsContent = $(".actor-tags .content"); + const isExpanded = "true" === localStorage.getItem("jhs_tag_expand"), + $actorTagsContent = $(".actor-tags .content"); isExpanded && $actorTagsContent.hasClass("collapse") && $expandButton[0].click(); - $expandButton.on("click", (function () { + $expandButton.on("click", (function () { const newState = !$actorTagsContent.hasClass("collapse"); localStorage.setItem("jhs_tag_expand", newState.toString()); })); } - checkDom() { if (!window.isListPage) return; const selector = this.getSelector(), targetNode = document.querySelector(selector.boxSelector); @@ -16506,7 +16809,6 @@ ${err.stack}` : ""); }; observer.observe(targetNode, config); } - fixBusTitleBox() { if (!isJavBus$1) return; $(this.getSelector().itemSelector).toArray().forEach(((ele) => { @@ -16518,12 +16820,11 @@ ${err.stack}` : ""); $box2.find("br").remove(); })); } - cleanRepeatId() { if (!isJavBus$1) return; $("#waterfall_h").removeAttr("id").attr("id", "no-page"); const $waterfalls = $('[id="waterfall"]'); - 0 !== $waterfalls.length && $waterfalls.each((function () { + 0 !== $waterfalls.length && $waterfalls.each((function () { const $current = $(this); if (!$current.hasClass("masonry")) { $current.children().insertAfter($current); @@ -16531,7 +16832,6 @@ ${err.stack}` : ""); } })); } - async doFilter() { if (!window.isListPage) return; let movieList = $(this.getSelector().itemSelector).toArray(); @@ -16541,26 +16841,25 @@ ${err.stack}` : ""); isJavBus$1 && await this.getBean("BusImgPlugin").logImageHeightsByRow(); } } - async filterMovieList(movieList) { utils.time("累计耗费时间"); utils.time("读取数据耗时"); - const [carList, filterKeywordList, blacklist, blacklistCarList, settingObj] = await Promise.all([storageManager.getCarList(), storageManager.getTitleFilterKeyword(), storageManager.getBlacklist(), storageManager.getBlacklistCarList(), storageManager.getSetting()]), - t1 = utils.time("读取数据耗时"), carNumSets = carList.reduce(((dataMap, item) => { - const statusKey = item.status; - dataMap.hasOwnProperty(statusKey) && dataMap[statusKey].add(item.carNum); - return dataMap; - }), { - [Status_FILTER$1]: /* @__PURE__ */ new Set(), - [Status_FAVORITE$1]: /* @__PURE__ */ new Set(), - [Status_HAS_DOWN$1]: /* @__PURE__ */ new Set(), - [Status_HAS_WATCH$1]: /* @__PURE__ */ new Set() - }); + const [carList, filterKeywordList, blacklist, blacklistCarList, settingObj] = await Promise.all([storageManager.getCarList(), storageManager.getTitleFilterKeyword(), storageManager.getBlacklist(), storageManager.getBlacklistCarList(), storageManager.getSetting()]), + t1 = utils.time("读取数据耗时"), carNumSets = carList.reduce(((dataMap, item) => { + const statusKey = item.status; + dataMap.hasOwnProperty(statusKey) && dataMap[statusKey].add(item.carNum); + return dataMap; + }), { + [Status_FILTER$1]: /* @__PURE__ */ new Set(), + [Status_FAVORITE$1]: /* @__PURE__ */ new Set(), + [Status_HAS_DOWN$1]: /* @__PURE__ */ new Set(), + [Status_HAS_WATCH$1]: /* @__PURE__ */ new Set() + }); utils.time("组装数据耗时"); - const starIdToRoleMap = new Map(blacklist.map(((item) => [item.starId, item.role]))), { - actorCarNumToNameMap, - actressCarNumToNameMap - } = blacklistCarList.reduce(((dataMap, carItem) => { + const starIdToRoleMap = new Map(blacklist.map(((item) => [item.starId, item.role]))), { + actorCarNumToNameMap, + actressCarNumToNameMap + } = blacklistCarList.reduce(((dataMap, carItem) => { const role = starIdToRoleMap.get(carItem.starId); if (!role) { clog.error("黑名单数据源丢失演员信息", carItem); @@ -16595,18 +16894,18 @@ ${err.stack}` : ""); await Promise.all(movieList.map((async (ele) => { let $box2 = $(ele); if (isJavBus$1 && $box2.find(".avatar-box").length > 0) return; - const {carNum: carNum2, title} = this.getBoxCarInfo($box2), { - filter, - favorite, - hasDown, - hasWatch - } = carNumSets, isFavorite = favorite.has(carNum2), isHasDown = hasDown.has(carNum2), - isHasWatch = hasWatch.has(carNum2), isFiltered = filter.has(carNum2), - isFilterActorMale = actorCarNumToNameMap.has(carNum2), - isFilterActorFemale = actressCarNumToNameMap.has(carNum2), - isFilterActor = isFilterActorMale || isFilterActorFemale, - foundKeyword = filterKeywordList.find(((kw) => title.includes(kw) || carNum2.startsWith(kw))), - isFilterKeyword = !!foundKeyword; + const {carNum: carNum2, title} = this.getBoxCarInfo($box2), { + filter, + favorite, + hasDown, + hasWatch + } = carNumSets, isFavorite = favorite.has(carNum2), isHasDown = hasDown.has(carNum2), + isHasWatch = hasWatch.has(carNum2), isFiltered = filter.has(carNum2), + isFilterActorMale = actorCarNumToNameMap.has(carNum2), + isFilterActorFemale = actressCarNumToNameMap.has(carNum2), + isFilterActor = isFilterActorMale || isFilterActorFemale, + foundKeyword = filterKeywordList.find(((kw) => title.includes(kw) || carNum2.startsWith(kw))), + isFilterKeyword = !!foundKeyword; if (!isSearchPage) { let shouldHide = settings.showFavoriteItem === NO && isFavorite || settings.showHasDownItem === NO && isHasDown || settings.showHasWatchItem === NO && isHasWatch || settings.showFilterItem === NO && isFiltered && !(isFavorite || isHasDown || isHasWatch) || settings.showFilterActorItem === NO && isFilterActor || settings.showFilterKeywordItem === NO && isFilterKeyword; if ($box2.attr("data-movieShowType") !== settings.movieShowType) { @@ -16623,8 +16922,9 @@ ${err.stack}` : ""); else { if ("visibility" !== settings.movieShowType) throw new Error("movieShowType值有误:" + settings.movieShowType); { - const $content = $box2.children(), borderStyle = shouldHide ? "1px solid rgb(192 176 176)" : "none", - visibilityValue = shouldHide ? "hidden" : "visible"; + const $content = $box2.children(), + borderStyle = shouldHide ? "1px solid rgb(192 176 176)" : "none", + visibilityValue = shouldHide ? "hidden" : "visible"; $box2.css("border", borderStyle); $content.css("visibility", visibilityValue); } @@ -16725,14 +17025,13 @@ ${err.stack}` : ""); `); } - async bindClick() { let selector = this.getSelector(); $(selector.boxSelector).on("click", ".item img", (async (event) => { event.preventDefault(); event.stopPropagation(); if ($(event.target).closest("div.meta-buttons").length) return; - const $box2 = $(event.target).closest(".item"), {carNum: carNum2, aHref} = this.getBoxCarInfo($box2); + const $box2 = $(event.target).closest(".item"), {carNum: carNum2, aHref} = this.getBoxCarInfo($box2); let dialogOpenDetail = await storageManager.getSetting("dialogOpenDetail", YES$1); if (carNum2.includes("FC2-")) { let movieId = this.parseMovieId(aHref); @@ -16750,7 +17049,10 @@ ${err.stack}` : ""); })); $(selector.boxSelector).on("click", ".item .video-title", (async (event) => { if ($(event.target).closest('[class^="jhs-match-"]').length) return; - const $box2 = $(event.currentTarget).closest(".item"), {carNum: carNum2, aHref} = this.getBoxCarInfo($box2); + const $box2 = $(event.currentTarget).closest(".item"), { + carNum: carNum2, + aHref + } = this.getBoxCarInfo($box2); if (carNum2.includes("FC2-")) { event.preventDefault(); let movieId = this.parseMovieId(aHref); @@ -16759,11 +17061,11 @@ ${err.stack}` : ""); })); $(selector.boxSelector).on("contextmenu", ".item img, .item video", (async (event) => { event.preventDefault(); - const $box2 = $(event.target).closest(".item"), { - carNum: carNum2, - url, - publishTime - } = this.getBoxCarInfo($box2); + const $box2 = $(event.target).closest(".item"), { + carNum: carNum2, + url, + publishTime + } = this.getBoxCarInfo($box2); let $actor = isJavDb$1 ? $(".actor-section-name") : $(".avatar-box .photo-info .pb10"), actorName = ""; $actor.length && (actorName = $actor.text().trim().split(",")[0].replace("(無碼)", "")); utils.q(event, `是否屏蔽番号 ${carNum2}?`, (async () => { @@ -16782,7 +17084,6 @@ ${err.stack}` : ""); })); })); } - async parseActressName(url) { let actorName = null; if (await storageManager.getSetting("enableSaveActressCarInfo", NO) === YES$1) { @@ -16794,7 +17095,6 @@ ${err.stack}` : ""); } return actorName; } - async bindListPageHotKey() { this.$currentImage = null; $(document).on("mouseenter", this.getSelector().coverImgSelector, ((e) => { @@ -16883,7 +17183,6 @@ ${err.stack}` : ""); registerImageHotkey(key, handler); })); } - replaceHdImg(coverImgNodeList) { coverImgNodeList && "string" == typeof coverImgNodeList.jquery && (coverImgNodeList = coverImgNodeList.toArray()); coverImgNodeList || (coverImgNodeList = document.querySelectorAll(this.getSelector().coverImgSelector)); @@ -16892,22 +17191,22 @@ ${err.stack}` : ""); img.title = ""; })); if (isJavBus$1) { - const THUMB_PATH_REGEX = /\/(imgs|pics)\/(thumb|thumbs)\//, IMG_EXT_REGEX = /(\.jpg|\.jpeg|\.png)$/i, - replaceWithHd = (img) => { - if (img.src && THUMB_PATH_REGEX.test(img.src) && "true" !== img.dataset.hdReplaced) { - img.src = img.src.replace(THUMB_PATH_REGEX, "/$1/cover/").replace(IMG_EXT_REGEX, "_b$1"); - img.dataset.hdReplaced = "true"; - img.dataset.title = img.title; - img.title = ""; - } - }, DMM_THUMB_REGEX = /ps(\.jpg|\.jpeg|\.png)$/i, replaceWithHdForDMM = (img) => { - if (img.src && DMM_THUMB_REGEX.test(img.src) && "true" !== img.dataset.hdReplaced) { - img.src = img.src.replace(DMM_THUMB_REGEX, "pl$1"); - img.dataset.hdReplaced = "true"; - img.dataset.title = img.title; - img.title = ""; - } - }; + const THUMB_PATH_REGEX = /\/(imgs|pics)\/(thumb|thumbs)\//, IMG_EXT_REGEX = /(\.jpg|\.jpeg|\.png)$/i, + replaceWithHd = (img) => { + if (img.src && THUMB_PATH_REGEX.test(img.src) && "true" !== img.dataset.hdReplaced) { + img.src = img.src.replace(THUMB_PATH_REGEX, "/$1/cover/").replace(IMG_EXT_REGEX, "_b$1"); + img.dataset.hdReplaced = "true"; + img.dataset.title = img.title; + img.title = ""; + } + }, DMM_THUMB_REGEX = /ps(\.jpg|\.jpeg|\.png)$/i, replaceWithHdForDMM = (img) => { + if (img.src && DMM_THUMB_REGEX.test(img.src) && "true" !== img.dataset.hdReplaced) { + img.src = img.src.replace(DMM_THUMB_REGEX, "pl$1"); + img.dataset.hdReplaced = "true"; + img.dataset.title = img.title; + img.title = ""; + } + }; coverImgNodeList.forEach(((img) => { replaceWithHd(img); replaceWithHdForDMM(img); @@ -16919,7 +17218,6 @@ ${err.stack}` : ""); })); })); } - async translate($box2) { if (await storageManager.getSetting("translateTitle", YES$1) !== YES$1) return; let content, carNum2, $title = $box2.find(".video-title"); @@ -16933,14 +17231,14 @@ ${err.stack}` : ""); if (this.cache[carNum2]) { let _this = this; $title.attr("data-original-title", content); - $title.contents().each((function () { + $title.contents().each((function () { 3 === this.nodeType && "" !== this.textContent.trim() && (this.textContent = " " + _this.cache[carNum2] + " "); })); $title.attr("title", _this.cache[carNum2]); } else translateText(content).then(((result) => { $title.attr("data-original-title", content); if (isJavDb$1) { - $title.contents().each((function () { + $title.contents().each((function () { 3 !== this.nodeType || "" === this.textContent.trim() || this.textContent.includes(carNum2) || (this.textContent = " " + result + " "); })); $title.attr("title", result); @@ -16953,7 +17251,6 @@ ${err.stack}` : ""); console.error("翻译失败:", error); })); } - async revertTranslation() { $(this.getSelector().itemSelector).toArray().forEach(((ele) => { let $box2 = $(ele); @@ -16961,13 +17258,12 @@ ${err.stack}` : ""); let carNum2; isJavDb$1 && (carNum2 = $box2.find(".video-title strong").text().trim()); const $title = $box2.find(".video-title"); - $title.contents().each((function () { + $title.contents().each((function () { 3 !== this.nodeType || "" === this.textContent.trim() || this.textContent.includes(carNum2) || (this.textContent = " " + originalContent + " "); })); $title.removeAttr("title"); })); } - addJumpPageControl() { if ($("#gemini-jump-page-control").length > 0) return; if (0 === $(".pagination-link.is-current").length) return; @@ -16996,7 +17292,7 @@ ${err.stack}` : ""); window.location.href = newUrl.toString(); }; $button.on("click", jumpToPage); - $input.on("keypress", (function (e) { + $input.on("keypress", (function (e) { if (13 === e.which) { jumpToPage(); e.preventDefault(); @@ -17004,37 +17300,36 @@ ${err.stack}` : ""); })); } } - window.javDbApi = javDbApi; const _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow !== "undefined" ? unsafeWindow : window)(); _unsafeWindow.utils = window.utils = new Utils(); _unsafeWindow.gmHttp = window.gmHttp = new GmHttp(); _unsafeWindow.storageManager = window.storageManager = new StorageManager(); const senderChannel = new BroadcastChannel("jhs-channel"); - window.refresh = function () { + window.refresh = function () { senderChannel.postMessage({ type: "refresh" }); }; - window.clean_cacheBlacklistCarList = function () { + window.clean_cacheBlacklistCarList = function () { storageManager.cacheBlacklistCarList && (storageManager.cacheBlacklistCarList = null); senderChannel.postMessage({ type: "clean_cacheBlacklistCarList" }); }; - window.clean_cacheSettingObj = function () { + window.clean_cacheSettingObj = function () { storageManager.cacheSettingObj && (storageManager.cacheSettingObj = null); senderChannel.postMessage({ type: "clean_cacheSettingObj" }); }; - window.clean_cacheFavoriteActressList = function () { + window.clean_cacheFavoriteActressList = function () { storageManager.cacheFavoriteActressList && (storageManager.cacheFavoriteActressList = null); senderChannel.postMessage({ type: "clean_cacheFavoriteActressList" }); }; - window.clean_cacheCarList = function () { + window.clean_cacheCarList = function () { storageManager.cacheCarList && (storageManager.cacheCarList = null); senderChannel.postMessage({ type: "clean_cacheCarList" @@ -17054,9 +17349,9 @@ ${err.stack}` : ""); } } else "clean_cacheBlacklistCarList" === dataType ? storageManager.cacheBlacklistCarList && (storageManager.cacheBlacklistCarList = null) : "clean_cacheSettingObj" === dataType ? storageManager.cacheSettingObj && (storageManager.cacheSettingObj = null) : "clean_cacheFavoriteActressList" === dataType ? storageManager.cacheFavoriteActressList && (storageManager.cacheFavoriteActressList = null) : "clean_cacheCarList" === dataType && storageManager.cacheCarList && (storageManager.cacheCarList = null); })); - !(function () { + !(function () { document.head.insertAdjacentHTML("beforeend", '\n \n '); - _unsafeWindow.loading = window.loading = function () { + _unsafeWindow.loading = window.loading = function () { const container = document.createElement("div"); container.className = "loading-container"; const animation = document.createElement("div"); @@ -17081,7 +17376,7 @@ ${err.stack}` : ""); }; }; })(); - !(function () { + !(function () { const showMessage = (msg, type, gravityOrOptions, positionOrOptions, options) => { let finalOptions; if ("object" == typeof gravityOrOptions) finalOptions = gravityOrOptions; @@ -17093,40 +17388,40 @@ ${err.stack}` : ""); finalOptions.gravity && "center" !== finalOptions.gravity || (finalOptions.offset = { y: "calc(50vh - 150px)" }); - const colors_infoStart = "#60A5FA", colors_infoEnd = "#93C5FD", colors_successStart = "#10B981", - colors_successEnd = "#6EE7B7", colors_errorStart = "#EF4444", colors_errorEnd = "#FCA5A5", - commonStyles = { - borderRadius: "12px", - color: "white", - padding: "12px 16px", - boxShadow: "0 4px 6px rgba(0,0,0,0.1)", - minWidth: "150px", - textAlign: "center", - zIndex: 999999999 - }, defaultConfig = { - text: msg, - duration: 1e3, - close: false, - gravity: "top", - position: "center", - style: { - info: { - ...commonStyles, - background: `linear-gradient(to right, ${colors_infoStart}, ${colors_infoEnd})` - }, - success: { - ...commonStyles, - background: `linear-gradient(to right, ${colors_successStart}, ${colors_successEnd})` - }, - error: { - ...commonStyles, - background: `linear-gradient(to right, ${colors_errorStart}, ${colors_errorEnd})` - } - }[type], - stopOnFocus: true, - oldestFirst: false, - ...finalOptions - }; + const colors_infoStart = "#60A5FA", colors_infoEnd = "#93C5FD", colors_successStart = "#10B981", + colors_successEnd = "#6EE7B7", colors_errorStart = "#EF4444", colors_errorEnd = "#FCA5A5", + commonStyles = { + borderRadius: "12px", + color: "white", + padding: "12px 16px", + boxShadow: "0 4px 6px rgba(0,0,0,0.1)", + minWidth: "150px", + textAlign: "center", + zIndex: 999999999 + }, defaultConfig = { + text: msg, + duration: 1e3, + close: false, + gravity: "top", + position: "center", + style: { + info: { + ...commonStyles, + background: `linear-gradient(to right, ${colors_infoStart}, ${colors_infoEnd})` + }, + success: { + ...commonStyles, + background: `linear-gradient(to right, ${colors_successStart}, ${colors_successEnd})` + }, + error: { + ...commonStyles, + background: `linear-gradient(to right, ${colors_errorStart}, ${colors_errorEnd})` + } + }[type], + stopOnFocus: true, + oldestFirst: false, + ...finalOptions + }; -1 === defaultConfig.duration && (defaultConfig.close = true); const toast = Toastify(defaultConfig); toast.showToast(); @@ -17141,9 +17436,8 @@ ${err.stack}` : ""); info: (msg, gravityOrOptions = "center", positionOrOptions, options) => showMessage(msg, "info", gravityOrOptions, positionOrOptions, options) }; })(); - !(function () { + !(function () { document.head.insertAdjacentHTML("beforeend", "\n \n "); - function smartToggleBodyScroll2(waitTime = 10) { setTimeout((() => { const openLayerCount = document.querySelectorAll(".layui-layer-shade").length; @@ -17151,7 +17445,7 @@ ${err.stack}` : ""); }), waitTime); } - window.showImageViewer = function (imgUrlOrContainer, altText = "") { + window.showImageViewer = function (imgUrlOrContainer, altText = "") { let $container = null, isTempContainer = false; if ("string" == typeof imgUrlOrContainer || imgUrlOrContainer instanceof String) { $container = $('