pervert-monkey 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/pervertmonkey.core.es.js +1502 -1445
- package/dist/core/pervertmonkey.core.es.js.map +1 -1
- package/dist/core/pervertmonkey.core.umd.js +1501 -1444
- package/dist/core/pervertmonkey.core.umd.js.map +1 -1
- package/dist/userscripts/3hentai.user.js +37 -5
- package/dist/userscripts/camgirlfinder.user.js +1 -1
- package/dist/userscripts/camwhores.user.js +1 -1
- package/dist/userscripts/e-hentai.user.js +1 -1
- package/dist/userscripts/ebalka.user.js +1 -1
- package/dist/userscripts/eporner.user.js +1 -1
- package/dist/userscripts/erome.user.js +1 -1
- package/dist/userscripts/eroprofile.user.js +1 -1
- package/dist/userscripts/javhdporn.user.js +1 -1
- package/dist/userscripts/missav.user.js +1 -1
- package/dist/userscripts/motherless.user.js +5 -2
- package/dist/userscripts/namethatporn.user.js +1 -1
- package/dist/userscripts/nhentai.user.js +1 -1
- package/dist/userscripts/obmenvsem.user.js +73 -0
- package/dist/userscripts/pornhub.user.js +1 -1
- package/dist/userscripts/spankbang.user.js +1 -1
- package/dist/userscripts/thisvid.user.js +1 -1
- package/dist/userscripts/xhamster.user.js +1 -1
- package/dist/userscripts/xvideos.user.js +1 -1
- package/package.json +2 -2
- package/src/core/data-control/data-filter.ts +3 -2
- package/src/userscripts/ascii-logos.js +43 -0
- package/src/userscripts/index.ts +1 -1
- package/src/userscripts/scripts/3hentai.ts +33 -1
- package/src/userscripts/scripts/motherless.ts +7 -2
- package/src/userscripts/scripts/obmenvsem.ts +55 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ==UserScript==
|
|
2
2
|
// @name 3Hentai PervertMonkey
|
|
3
3
|
// @namespace pervertmonkey
|
|
4
|
-
// @version 1.0.
|
|
4
|
+
// @version 1.0.2
|
|
5
5
|
// @author violent-orangutan
|
|
6
6
|
// @description Infinite scroll [optional], Filter by Title
|
|
7
7
|
// @license MIT
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.3hentai.net/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
18
18
|
// @run-at document-idle
|
|
19
19
|
// ==/UserScript==
|
|
20
20
|
|
|
21
|
-
(function (core) {
|
|
21
|
+
(function (core, utils) {
|
|
22
22
|
'use strict';
|
|
23
23
|
|
|
24
24
|
new core.RulesGlobal({
|
|
@@ -28,7 +28,39 @@
|
|
|
28
28
|
getThumbImgDataStrategy: "auto",
|
|
29
29
|
gropeStrategy: "all-in-all",
|
|
30
30
|
customDataSelectorFns: ["filterInclude", "filterExclude"],
|
|
31
|
-
schemeOptions: ["Text Filter", "Badge", "Advanced"]
|
|
31
|
+
schemeOptions: ["Text Filter", "Badge", "Advanced"],
|
|
32
|
+
animatePreview
|
|
32
33
|
});
|
|
34
|
+
function animatePreview() {
|
|
35
|
+
const tick = new utils.Tick(500, false);
|
|
36
|
+
const end = 999;
|
|
37
|
+
function rotate(src) {
|
|
38
|
+
return src.replace(
|
|
39
|
+
/(\d+)(?=t\.jpg$)/,
|
|
40
|
+
(_, n) => `${utils.circularShift(parseInt(n), end)}`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
utils.OnHover.create(
|
|
44
|
+
document.body,
|
|
45
|
+
(e) => e instanceof HTMLImageElement && e.src.endsWith(".jpg"),
|
|
46
|
+
(e) => {
|
|
47
|
+
const t = e;
|
|
48
|
+
const origin = t.src;
|
|
49
|
+
t.src = t.src.replace(/\w+\.\w+$/, "1t.jpg");
|
|
50
|
+
t.onerror = (_) => {
|
|
51
|
+
t.src = origin;
|
|
52
|
+
};
|
|
53
|
+
tick.start(
|
|
54
|
+
() => {
|
|
55
|
+
t.src = rotate(t.src);
|
|
56
|
+
},
|
|
57
|
+
() => {
|
|
58
|
+
t.src = origin;
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
},
|
|
62
|
+
(_) => tick.stop()
|
|
63
|
+
);
|
|
64
|
+
}
|
|
33
65
|
|
|
34
|
-
})(core);
|
|
66
|
+
})(core, utils);
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://camgirlfinder.net/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant none
|
|
17
17
|
// @run-at document-idle
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// @match https://*.camwhores.tv
|
|
14
14
|
// @match https://*.camwhores.*/*
|
|
15
15
|
// @exclude https://*.camwhores.tv/*mode=async*
|
|
16
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
16
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
17
17
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
18
18
|
// @grant GM_addStyle
|
|
19
19
|
// @grant unsafeWindow
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.e-hentai.org/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// @match https://*ebalka.*.*/*
|
|
16
16
|
// @match https://*.ebalk*.*/*
|
|
17
17
|
// @match https://*.fuckingbear*.*/*
|
|
18
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
18
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
19
19
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
20
20
|
// @grant GM_addStyle
|
|
21
21
|
// @grant unsafeWindow
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.eporner.com/*
|
|
14
14
|
// @match https://*.eporner.*/*
|
|
15
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
17
17
|
// @grant GM_addStyle
|
|
18
18
|
// @grant unsafeWindow
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match *://*.erome.com/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.eroprofile.com/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.javhdporn.net/*
|
|
14
14
|
// @match https://*.javhdporn.*/*
|
|
15
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
17
17
|
// @grant GM_addStyle
|
|
18
18
|
// @grant unsafeWindow
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// @match https://*.missav.ws/*
|
|
16
16
|
// @match https://*.missav.to/*
|
|
17
17
|
// @match https://*.missav.live/*
|
|
18
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
18
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
19
19
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
20
20
|
// @grant GM_addStyle
|
|
21
21
|
// @grant unsafeWindow
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ==UserScript==
|
|
2
2
|
// @name Motherless PervertMonkey
|
|
3
3
|
// @namespace pervertmonkey
|
|
4
|
-
// @version 5.0.
|
|
4
|
+
// @version 5.0.2
|
|
5
5
|
// @author violent-orangutan
|
|
6
6
|
// @description Infinite scroll [optional], Filter by Title and Duration
|
|
7
7
|
// @license MIT
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://motherless.com/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
|
+
// @grant GM_addElement
|
|
16
17
|
// @grant GM_addStyle
|
|
17
18
|
// @grant unsafeWindow
|
|
18
19
|
// @run-at document-idle
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
(function (core, utils) {
|
|
22
23
|
'use strict';
|
|
23
24
|
|
|
25
|
+
var _GM_addElement = (() => typeof GM_addElement != "undefined" ? GM_addElement : undefined)();
|
|
24
26
|
var _GM_addStyle = (() => typeof GM_addStyle != "undefined" ? GM_addStyle : undefined)();
|
|
25
27
|
var _unsafeWindow = (() => typeof unsafeWindow != "undefined" ? unsafeWindow : undefined)();
|
|
26
28
|
|
|
@@ -159,6 +161,7 @@
|
|
|
159
161
|
.ml-masonry-images.masonry-columns-6 .content-inner { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); }
|
|
160
162
|
.ml-masonry-images.masonry-columns-8 .content-inner { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); }
|
|
161
163
|
`);
|
|
164
|
+
document.querySelector(".ml-pagination")?.before(_GM_addElement("div", { class: "clear-left" }));
|
|
162
165
|
function applySearchFilters() {
|
|
163
166
|
let pathname = window.location.pathname;
|
|
164
167
|
const wordsToFilter = rules.store.state.filterExcludeWords.replace(/f:/g, "").match(/(?<!user:)\b\w+\b(?!\s*:)/g) || [];
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://namethatporn.com/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.nhentai.net/*
|
|
14
14
|
// @match https://*.nhentai.*/*
|
|
15
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
17
17
|
// @grant GM_addStyle
|
|
18
18
|
// @grant unsafeWindow
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Obmensvem PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 1.0.1
|
|
5
|
+
// @author violent-orangutan
|
|
6
|
+
// @description Infinite scroll [optional], Filter by Title and Duration
|
|
7
|
+
// @license MIT
|
|
8
|
+
// @icon https://www.google.com/s2/favicons?sz=64&domain=obmenvsem.com
|
|
9
|
+
// @homepage https://github.com/smartacephale/sleazy-fork
|
|
10
|
+
// @homepageURL https://github.com/smartacephale/sleazy-fork
|
|
11
|
+
// @source github:smartacephale/sleazy-fork
|
|
12
|
+
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
|
+
// @match https://*.obmenvsem.com/*
|
|
14
|
+
// @match https://*.obmenvsem.*/*
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
16
|
+
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
17
|
+
// @grant GM_addStyle
|
|
18
|
+
// @grant unsafeWindow
|
|
19
|
+
// @run-at document-idle
|
|
20
|
+
// ==/UserScript==
|
|
21
|
+
|
|
22
|
+
(function (core, utils) {
|
|
23
|
+
'use strict';
|
|
24
|
+
|
|
25
|
+
var _GM_addStyle = (() => typeof GM_addStyle != "undefined" ? GM_addStyle : undefined)();
|
|
26
|
+
|
|
27
|
+
var Pe=Object.defineProperty;var a=(e,t)=>Pe(e,"name",{value:t,configurable:true});var P=class{type=3;name="";prefix="";value="";suffix="";modifier=3;constructor(t,r,n,c,l,f){this.type=t,this.name=r,this.prefix=n,this.value=c,this.suffix=l,this.modifier=f;}hasCustomName(){return this.name!==""&&typeof this.name!="number"}};a(P,"Part");var Re=/[$_\p{ID_Start}]/u,Ee=/[$_\u200C\u200D\p{ID_Continue}]/u,v=".*";function Oe(e,t){return (t?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test(e)}a(Oe,"isASCII");function D(e,t=false){let r=[],n=0;for(;n<e.length;){let c=e[n],l=a(function(f){if(!t)throw new TypeError(f);r.push({type:"INVALID_CHAR",index:n,value:e[n++]});},"ErrorOrInvalid");if(c==="*"){r.push({type:"ASTERISK",index:n,value:e[n++]});continue}if(c==="+"||c==="?"){r.push({type:"OTHER_MODIFIER",index:n,value:e[n++]});continue}if(c==="\\"){r.push({type:"ESCAPED_CHAR",index:n++,value:e[n++]});continue}if(c==="{"){r.push({type:"OPEN",index:n,value:e[n++]});continue}if(c==="}"){r.push({type:"CLOSE",index:n,value:e[n++]});continue}if(c===":"){let f="",s=n+1;for(;s<e.length;){let i=e.substr(s,1);if(s===n+1&&Re.test(i)||s!==n+1&&Ee.test(i)){f+=e[s++];continue}break}if(!f){l(`Missing parameter name at ${n}`);continue}r.push({type:"NAME",index:n,value:f}),n=s;continue}if(c==="("){let f=1,s="",i=n+1,o=false;if(e[i]==="?"){l(`Pattern cannot start with "?" at ${i}`);continue}for(;i<e.length;){if(!Oe(e[i],false)){l(`Invalid character '${e[i]}' at ${i}.`),o=true;break}if(e[i]==="\\"){s+=e[i++]+e[i++];continue}if(e[i]===")"){if(f--,f===0){i++;break}}else if(e[i]==="("&&(f++,e[i+1]!=="?")){l(`Capturing groups are not allowed at ${i}`),o=true;break}s+=e[i++];}if(o)continue;if(f){l(`Unbalanced pattern at ${n}`);continue}if(!s){l(`Missing pattern at ${n}`);continue}r.push({type:"REGEX",index:n,value:s}),n=i;continue}r.push({type:"CHAR",index:n,value:e[n++]});}return r.push({type:"END",index:n,value:""}),r}a(D,"lexer");function F(e,t={}){let r=D(e);t.delimiter??="/#?",t.prefixes??="./";let n=`[^${x(t.delimiter)}]+?`,c=[],l=0,f=0,i=new Set,o=a(u=>{if(f<r.length&&r[f].type===u)return r[f++].value},"tryConsume"),h=a(()=>o("OTHER_MODIFIER")??o("ASTERISK"),"tryConsumeModifier"),p=a(u=>{let d=o(u);if(d!==void 0)return d;let{type:g,index:y}=r[f];throw new TypeError(`Unexpected ${g} at ${y}, expected ${u}`)},"mustConsume"),A=a(()=>{let u="",d;for(;d=o("CHAR")??o("ESCAPED_CHAR");)u+=d;return u},"consumeText"),xe=a(u=>u,"DefaultEncodePart"),N=t.encodePart||xe,H="",$=a(u=>{H+=u;},"appendToPendingFixedValue"),M=a(()=>{H.length&&(c.push(new P(3,"","",N(H),"",3)),H="");},"maybeAddPartFromPendingFixedValue"),X=a((u,d,g,y,Z)=>{let m=3;switch(Z){case "?":m=1;break;case "*":m=0;break;case "+":m=2;break}if(!d&&!g&&m===3){$(u);return}if(M(),!d&&!g){if(!u)return;c.push(new P(3,"","",N(u),"",m));return}let S;g?g==="*"?S=v:S=g:S=n;let k=2;S===n?(k=1,S=""):S===v&&(k=0,S="");let E;if(d?E=d:g&&(E=l++),i.has(E))throw new TypeError(`Duplicate name '${E}'.`);i.add(E),c.push(new P(k,E,N(u),S,N(y),m));},"addPart");for(;f<r.length;){let u=o("CHAR"),d=o("NAME"),g=o("REGEX");if(!d&&!g&&(g=o("ASTERISK")),d||g){let m=u??"";t.prefixes.indexOf(m)===-1&&($(m),m=""),M();let S=h();X(m,d,g,"",S);continue}let y=u??o("ESCAPED_CHAR");if(y){$(y);continue}if(o("OPEN")){let m=A(),S=o("NAME"),k=o("REGEX");!S&&!k&&(k=o("ASTERISK"));let E=A();p("CLOSE");let be=h();X(m,S,k,E,be);continue}M(),p("END");}return c}a(F,"parse");function x(e){return e.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}a(x,"escapeString");function B(e){return e&&e.ignoreCase?"ui":"u"}a(B,"flags");function q(e,t,r){return W(F(e,r),t,r)}a(q,"stringToRegexp");function T(e){switch(e){case 0:return "*";case 1:return "?";case 2:return "+";case 3:return ""}}a(T,"modifierToString");function W(e,t,r={}){r.delimiter??="/#?",r.prefixes??="./",r.sensitive??=false,r.strict??=false,r.end??=true,r.start??=true,r.endsWith="";let n=r.start?"^":"";for(let s of e){if(s.type===3){s.modifier===3?n+=x(s.value):n+=`(?:${x(s.value)})${T(s.modifier)}`;continue}t&&t.push(s.name);let i=`[^${x(r.delimiter)}]+?`,o=s.value;if(s.type===1?o=i:s.type===0&&(o=v),!s.prefix.length&&!s.suffix.length){s.modifier===3||s.modifier===1?n+=`(${o})${T(s.modifier)}`:n+=`((?:${o})${T(s.modifier)})`;continue}if(s.modifier===3||s.modifier===1){n+=`(?:${x(s.prefix)}(${o})${x(s.suffix)})`,n+=T(s.modifier);continue}n+=`(?:${x(s.prefix)}`,n+=`((?:${o})(?:`,n+=x(s.suffix),n+=x(s.prefix),n+=`(?:${o}))*)${x(s.suffix)})`,s.modifier===0&&(n+="?");}let c=`[${x(r.endsWith)}]|$`,l=`[${x(r.delimiter)}]`;if(r.end)return r.strict||(n+=`${l}?`),r.endsWith.length?n+=`(?=${c})`:n+="$",new RegExp(n,B(r));r.strict||(n+=`(?:${l}(?=${c}))?`);let f=false;if(e.length){let s=e[e.length-1];s.type===3&&s.modifier===3&&(f=r.delimiter.indexOf(s)>-1);}return f||(n+=`(?=${l}|${c})`),new RegExp(n,B(r))}a(W,"partsToRegexp");var b={delimiter:"",prefixes:"",sensitive:true,strict:true},J={delimiter:".",prefixes:"",sensitive:true,strict:true},Q={delimiter:"/",prefixes:"/",sensitive:true,strict:true};function ee(e,t){return e.length?e[0]==="/"?true:!t||e.length<2?false:(e[0]=="\\"||e[0]=="{")&&e[1]=="/":false}a(ee,"isAbsolutePathname");function te(e,t){return e.startsWith(t)?e.substring(t.length,e.length):e}a(te,"maybeStripPrefix");function ke(e,t){return e.endsWith(t)?e.substr(0,e.length-t.length):e}a(ke,"maybeStripSuffix");function _(e){return !e||e.length<2?false:e[0]==="["||(e[0]==="\\"||e[0]==="{")&&e[1]==="["}a(_,"treatAsIPv6Hostname");var re=["ftp","file","http","https","ws","wss"];function U(e){if(!e)return true;for(let t of re)if(e.test(t))return true;return false}a(U,"isSpecialScheme");function ne(e,t){if(e=te(e,"#"),t||e==="")return e;let r=new URL("https://example.com");return r.hash=e,r.hash?r.hash.substring(1,r.hash.length):""}a(ne,"canonicalizeHash");function se(e,t){if(e=te(e,"?"),t||e==="")return e;let r=new URL("https://example.com");return r.search=e,r.search?r.search.substring(1,r.search.length):""}a(se,"canonicalizeSearch");function ie(e,t){return t||e===""?e:_(e)?K(e):j(e)}a(ie,"canonicalizeHostname");function ae(e,t){if(t||e==="")return e;let r=new URL("https://example.com");return r.password=e,r.password}a(ae,"canonicalizePassword");function oe(e,t){if(t||e==="")return e;let r=new URL("https://example.com");return r.username=e,r.username}a(oe,"canonicalizeUsername");function ce(e,t,r){if(r||e==="")return e;if(t&&!re.includes(t))return new URL(`${t}:${e}`).pathname;let n=e[0]=="/";return e=new URL(n?e:"/-"+e,"https://example.com").pathname,n||(e=e.substring(2,e.length)),e}a(ce,"canonicalizePathname");function le(e,t,r){return z(t)===e&&(e=""),r||e===""?e:G(e)}a(le,"canonicalizePort");function fe(e,t){return e=ke(e,":"),t||e===""?e:w(e)}a(fe,"canonicalizeProtocol");function z(e){switch(e){case "ws":case "http":return "80";case "wws":case "https":return "443";case "ftp":return "21";default:return ""}}a(z,"defaultPortForProtocol");function w(e){if(e==="")return e;if(/^[-+.A-Za-z0-9]*$/.test(e))return e.toLowerCase();throw new TypeError(`Invalid protocol '${e}'.`)}a(w,"protocolEncodeCallback");function he(e){if(e==="")return e;let t=new URL("https://example.com");return t.username=e,t.username}a(he,"usernameEncodeCallback");function ue(e){if(e==="")return e;let t=new URL("https://example.com");return t.password=e,t.password}a(ue,"passwordEncodeCallback");function j(e){if(e==="")return e;if(/[\t\n\r #%/:<>?@[\]^\\|]/g.test(e))throw new TypeError(`Invalid hostname '${e}'`);let t=new URL("https://example.com");return t.hostname=e,t.hostname}a(j,"hostnameEncodeCallback");function K(e){if(e==="")return e;if(/[^0-9a-fA-F[\]:]/g.test(e))throw new TypeError(`Invalid IPv6 hostname '${e}'`);return e.toLowerCase()}a(K,"ipv6HostnameEncodeCallback");function G(e){if(e===""||/^[0-9]*$/.test(e)&&parseInt(e)<=65535)return e;throw new TypeError(`Invalid port '${e}'.`)}a(G,"portEncodeCallback");function de(e){if(e==="")return e;let t=new URL("https://example.com");return t.pathname=e[0]!=="/"?"/-"+e:e,e[0]!=="/"?t.pathname.substring(2,t.pathname.length):t.pathname}a(de,"standardURLPathnameEncodeCallback");function pe(e){return e===""?e:new URL(`data:${e}`).pathname}a(pe,"pathURLPathnameEncodeCallback");function ge(e){if(e==="")return e;let t=new URL("https://example.com");return t.search=e,t.search.substring(1,t.search.length)}a(ge,"searchEncodeCallback");function me(e){if(e==="")return e;let t=new URL("https://example.com");return t.hash=e,t.hash.substring(1,t.hash.length)}a(me,"hashEncodeCallback");var C=class{#i;#n=[];#t={};#e=0;#s=1;#l=0;#o=0;#d=0;#p=0;#g=false;constructor(t){this.#i=t;}get result(){return this.#t}parse(){for(this.#n=D(this.#i,true);this.#e<this.#n.length;this.#e+=this.#s){if(this.#s=1,this.#n[this.#e].type==="END"){if(this.#o===0){this.#b(),this.#f()?this.#r(9,1):this.#h()?this.#r(8,1):this.#r(7,0);continue}else if(this.#o===2){this.#u(5);continue}this.#r(10,0);break}if(this.#d>0)if(this.#A())this.#d-=1;else continue;if(this.#T()){this.#d+=1;continue}switch(this.#o){case 0:this.#P()&&this.#u(1);break;case 1:if(this.#P()){this.#C();let t=7,r=1;this.#E()?(t=2,r=3):this.#g&&(t=2),this.#r(t,r);}break;case 2:this.#S()?this.#u(3):(this.#x()||this.#h()||this.#f())&&this.#u(5);break;case 3:this.#O()?this.#r(4,1):this.#S()&&this.#r(5,1);break;case 4:this.#S()&&this.#r(5,1);break;case 5:this.#y()?this.#p+=1:this.#w()&&(this.#p-=1),this.#k()&&!this.#p?this.#r(6,1):this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 6:this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 7:this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 8:this.#f()&&this.#r(9,1);break;}}this.#t.hostname!==void 0&&this.#t.port===void 0&&(this.#t.port="");}#r(t,r){switch(this.#o){case 0:break;case 1:this.#t.protocol=this.#c();break;case 2:break;case 3:this.#t.username=this.#c();break;case 4:this.#t.password=this.#c();break;case 5:this.#t.hostname=this.#c();break;case 6:this.#t.port=this.#c();break;case 7:this.#t.pathname=this.#c();break;case 8:this.#t.search=this.#c();break;case 9:this.#t.hash=this.#c();break;}this.#o!==0&&t!==10&&([1,2,3,4].includes(this.#o)&&[6,7,8,9].includes(t)&&(this.#t.hostname??=""),[1,2,3,4,5,6].includes(this.#o)&&[8,9].includes(t)&&(this.#t.pathname??=this.#g?"/":""),[1,2,3,4,5,6,7].includes(this.#o)&&t===9&&(this.#t.search??="")),this.#R(t,r);}#R(t,r){this.#o=t,this.#l=this.#e+r,this.#e+=r,this.#s=0;}#b(){this.#e=this.#l,this.#s=0;}#u(t){this.#b(),this.#o=t;}#m(t){return t<0&&(t=this.#n.length-t),t<this.#n.length?this.#n[t]:this.#n[this.#n.length-1]}#a(t,r){let n=this.#m(t);return n.value===r&&(n.type==="CHAR"||n.type==="ESCAPED_CHAR"||n.type==="INVALID_CHAR")}#P(){return this.#a(this.#e,":")}#E(){return this.#a(this.#e+1,"/")&&this.#a(this.#e+2,"/")}#S(){return this.#a(this.#e,"@")}#O(){return this.#a(this.#e,":")}#k(){return this.#a(this.#e,":")}#x(){return this.#a(this.#e,"/")}#h(){if(this.#a(this.#e,"?"))return true;if(this.#n[this.#e].value!=="?")return false;let t=this.#m(this.#e-1);return t.type!=="NAME"&&t.type!=="REGEX"&&t.type!=="CLOSE"&&t.type!=="ASTERISK"}#f(){return this.#a(this.#e,"#")}#T(){return this.#n[this.#e].type=="OPEN"}#A(){return this.#n[this.#e].type=="CLOSE"}#y(){return this.#a(this.#e,"[")}#w(){return this.#a(this.#e,"]")}#c(){let t=this.#n[this.#e],r=this.#m(this.#l).index;return this.#i.substring(r,t.index)}#C(){let t={};Object.assign(t,b),t.encodePart=w;let r=q(this.#c(),void 0,t);this.#g=U(r);}};a(C,"Parser");var V=["protocol","username","password","hostname","port","pathname","search","hash"],O="*";function Se(e,t){if(typeof e!="string")throw new TypeError("parameter 1 is not of type 'string'.");let r=new URL(e,t);return {protocol:r.protocol.substring(0,r.protocol.length-1),username:r.username,password:r.password,hostname:r.hostname,port:r.port,pathname:r.pathname,search:r.search!==""?r.search.substring(1,r.search.length):void 0,hash:r.hash!==""?r.hash.substring(1,r.hash.length):void 0}}a(Se,"extractValues");function R(e,t){return t?I(e):e}a(R,"processBaseURLString");function L(e,t,r){let n;if(typeof t.baseURL=="string")try{n=new URL(t.baseURL),t.protocol===void 0&&(e.protocol=R(n.protocol.substring(0,n.protocol.length-1),r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&(e.username=R(n.username,r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&t.password===void 0&&(e.password=R(n.password,r)),t.protocol===void 0&&t.hostname===void 0&&(e.hostname=R(n.hostname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&(e.port=R(n.port,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&(e.pathname=R(n.pathname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&(e.search=R(n.search.substring(1,n.search.length),r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&t.hash===void 0&&(e.hash=R(n.hash.substring(1,n.hash.length),r));}catch{throw new TypeError(`invalid baseURL '${t.baseURL}'.`)}if(typeof t.protocol=="string"&&(e.protocol=fe(t.protocol,r)),typeof t.username=="string"&&(e.username=oe(t.username,r)),typeof t.password=="string"&&(e.password=ae(t.password,r)),typeof t.hostname=="string"&&(e.hostname=ie(t.hostname,r)),typeof t.port=="string"&&(e.port=le(t.port,e.protocol,r)),typeof t.pathname=="string"){if(e.pathname=t.pathname,n&&!ee(e.pathname,r)){let c=n.pathname.lastIndexOf("/");c>=0&&(e.pathname=R(n.pathname.substring(0,c+1),r)+e.pathname);}e.pathname=ce(e.pathname,e.protocol,r);}return typeof t.search=="string"&&(e.search=se(t.search,r)),typeof t.hash=="string"&&(e.hash=ne(t.hash,r)),e}a(L,"applyInit");function I(e){return e.replace(/([+*?:{}()\\])/g,"\\$1")}a(I,"escapePatternString");function Te(e){return e.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}a(Te,"escapeRegexpString");function Ae(e,t){t.delimiter??="/#?",t.prefixes??="./",t.sensitive??=false,t.strict??=false,t.end??=true,t.start??=true,t.endsWith="";let r=".*",n=`[^${Te(t.delimiter)}]+?`,c=/[$_\u200C\u200D\p{ID_Continue}]/u,l="";for(let f=0;f<e.length;++f){let s=e[f];if(s.type===3){if(s.modifier===3){l+=I(s.value);continue}l+=`{${I(s.value)}}${T(s.modifier)}`;continue}let i=s.hasCustomName(),o=!!s.suffix.length||!!s.prefix.length&&(s.prefix.length!==1||!t.prefixes.includes(s.prefix)),h=f>0?e[f-1]:null,p=f<e.length-1?e[f+1]:null;if(!o&&i&&s.type===1&&s.modifier===3&&p&&!p.prefix.length&&!p.suffix.length)if(p.type===3){let A=p.value.length>0?p.value[0]:"";o=c.test(A);}else o=!p.hasCustomName();if(!o&&!s.prefix.length&&h&&h.type===3){let A=h.value[h.value.length-1];o=t.prefixes.includes(A);}o&&(l+="{"),l+=I(s.prefix),i&&(l+=`:${s.name}`),s.type===2?l+=`(${s.value})`:s.type===1?i||(l+=`(${n})`):s.type===0&&(!i&&(!h||h.type===3||h.modifier!==3||o||s.prefix!=="")?l+="*":l+=`(${r})`),s.type===1&&i&&s.suffix.length&&c.test(s.suffix[0])&&(l+="\\"),l+=I(s.suffix),o&&(l+="}"),s.modifier!==3&&(l+=T(s.modifier));}return l}a(Ae,"partsToPattern");var Y=class{#i;#n={};#t={};#e={};#s={};#l=false;constructor(t={},r,n){try{let c;if(typeof r=="string"?c=r:n=r,typeof t=="string"){let i=new C(t);if(i.parse(),t=i.result,c===void 0&&typeof t.protocol!="string")throw new TypeError("A base URL must be provided for a relative constructor string.");t.baseURL=c;}else {if(!t||typeof t!="object")throw new TypeError("parameter 1 is not of type 'string' and cannot convert to dictionary.");if(c)throw new TypeError("parameter 1 is not of type 'string'.")}typeof n>"u"&&(n={ignoreCase:!1});let l={ignoreCase:n.ignoreCase===!0},f={pathname:O,protocol:O,username:O,password:O,hostname:O,port:O,search:O,hash:O};this.#i=L(f,t,!0),z(this.#i.protocol)===this.#i.port&&(this.#i.port="");let s;for(s of V){if(!(s in this.#i))continue;let i={},o=this.#i[s];switch(this.#t[s]=[],s){case "protocol":Object.assign(i,b),i.encodePart=w;break;case "username":Object.assign(i,b),i.encodePart=he;break;case "password":Object.assign(i,b),i.encodePart=ue;break;case "hostname":Object.assign(i,J),_(o)?i.encodePart=K:i.encodePart=j;break;case "port":Object.assign(i,b),i.encodePart=G;break;case "pathname":U(this.#n.protocol)?(Object.assign(i,Q,l),i.encodePart=de):(Object.assign(i,b,l),i.encodePart=pe);break;case "search":Object.assign(i,b,l),i.encodePart=ge;break;case "hash":Object.assign(i,b,l),i.encodePart=me;break}try{this.#s[s]=F(o,i),this.#n[s]=W(this.#s[s],this.#t[s],i),this.#e[s]=Ae(this.#s[s],i),this.#l=this.#l||this.#s[s].some(h=>h.type===2);}catch{throw new TypeError(`invalid ${s} pattern '${this.#i[s]}'.`)}}}catch(c){throw new TypeError(`Failed to construct 'URLPattern': ${c.message}`)}}get[Symbol.toStringTag](){return "URLPattern"}test(t={},r){let n={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&r)throw new TypeError("parameter 1 is not of type 'string'.");if(typeof t>"u")return false;try{typeof t=="object"?n=L(n,t,!1):n=L(n,Se(t,r),!1);}catch{return false}let c;for(c of V)if(!this.#n[c].exec(n[c]))return false;return true}exec(t={},r){let n={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&r)throw new TypeError("parameter 1 is not of type 'string'.");if(typeof t>"u")return;try{typeof t=="object"?n=L(n,t,!1):n=L(n,Se(t,r),!1);}catch{return null}let c={};r?c.inputs=[t,r]:c.inputs=[t];let l;for(l of V){let f=this.#n[l].exec(n[l]);if(!f)return null;let s={};for(let[i,o]of this.#t[l].entries())if(typeof o=="string"||typeof o=="number"){let h=f[i+1];s[o]=h;}c[l]={input:n[l]??"",groups:s};}return c}static compareComponent(t,r,n){let c=a((i,o)=>{for(let h of ["type","modifier","prefix","value","suffix"]){if(i[h]<o[h])return -1;if(i[h]===o[h])continue;return 1}return 0},"comparePart"),l=new P(3,"","","","",3),f=new P(0,"","","","",3),s=a((i,o)=>{let h=0;for(;h<Math.min(i.length,o.length);++h){let p=c(i[h],o[h]);if(p)return p}return i.length===o.length?0:c(i[h]??l,o[h]??l)},"comparePartList");return !r.#e[t]&&!n.#e[t]?0:r.#e[t]&&!n.#e[t]?s(r.#s[t],[f]):!r.#e[t]&&n.#e[t]?s([f],n.#s[t]):s(r.#s[t],n.#s[t])}get protocol(){return this.#e.protocol}get username(){return this.#e.username}get password(){return this.#e.password}get hostname(){return this.#e.hostname}get port(){return this.#e.port}get pathname(){return this.#e.pathname}get search(){return this.#e.search}get hash(){return this.#e.hash}get hasRegExpGroups(){return this.#l}};a(Y,"URLPattern");
|
|
28
|
+
|
|
29
|
+
function parseUrl(s) {
|
|
30
|
+
return new URL(typeof s === "string" ? s : s.href);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const IS_USER_FILES = location.pathname.startsWith("/user_files");
|
|
34
|
+
const SEARCH_PARAM = IS_USER_FILES ? "start" : "page";
|
|
35
|
+
function setup() {
|
|
36
|
+
const container = document.createElement("div");
|
|
37
|
+
container.classList.add("container");
|
|
38
|
+
container.append(
|
|
39
|
+
...document.querySelectorAll(".item:has(> a.block[href *= info] > img)")
|
|
40
|
+
);
|
|
41
|
+
document.querySelector(".c2")?.after(container);
|
|
42
|
+
_GM_addStyle("a.block[href *= info] > img:first-child { height: 240px; }");
|
|
43
|
+
}
|
|
44
|
+
setup();
|
|
45
|
+
new core.RulesGlobal({
|
|
46
|
+
paginationStrategyOptions: {
|
|
47
|
+
getPaginationUrlGenerator() {
|
|
48
|
+
const url = parseUrl(location.href);
|
|
49
|
+
return (offset) => {
|
|
50
|
+
const offsetValue = IS_USER_FILES ? offset * 24 : offset;
|
|
51
|
+
url.searchParams.set(SEARCH_PARAM, offsetValue.toString());
|
|
52
|
+
return url.href;
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
overwritePaginationLast: () => 9999,
|
|
56
|
+
searchParamSelector: "page",
|
|
57
|
+
paginationSelector: ".item.pages, .pagination"
|
|
58
|
+
},
|
|
59
|
+
containerSelectorLast: ".container",
|
|
60
|
+
thumbsSelector: ".item:has(> a.block[href *= info] > img)",
|
|
61
|
+
getThumbImgDataAttrSelector(img) {
|
|
62
|
+
const url = img.closest("a").href;
|
|
63
|
+
utils.fetchHtml(url).then((dom) => {
|
|
64
|
+
img.src = dom.querySelector("img[src*=attach]")?.src || img.src;
|
|
65
|
+
});
|
|
66
|
+
return img.src;
|
|
67
|
+
},
|
|
68
|
+
getThumbImgDataStrategy: "auto",
|
|
69
|
+
getThumbDataStrategy: "auto-text",
|
|
70
|
+
schemeOptions: ["Text Filter", "Duration Filter", "Badge", "Advanced"]
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
})(core, utils);
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.pornhub.com/*
|
|
14
14
|
// @exclude https://*.pornhub.com/embed/*
|
|
15
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
17
17
|
// @grant GM_addStyle
|
|
18
18
|
// @grant unsafeWindow
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.spankbang.com/*
|
|
14
14
|
// @match https://*.spankbang.*/*
|
|
15
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
17
17
|
// @grant GM_addStyle
|
|
18
18
|
// @grant unsafeWindow
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.thisvid.com/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// @match https://*.xhamster.com/*
|
|
14
14
|
// @match https://*.xhamster.*/*
|
|
15
15
|
// @exclude https://*.xhamster.com/embed*
|
|
16
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
16
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
17
17
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
18
18
|
// @grant GM_addStyle
|
|
19
19
|
// @grant unsafeWindow
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source github:smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://*.xvideos.com/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.9/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pervert-monkey",
|
|
3
3
|
"description": "daddy told us not to be ashamed of our userscripts",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.9",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"userscript",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/node": "^25.2.3",
|
|
43
|
-
"jabroni-outfit": "^2.1.
|
|
43
|
+
"jabroni-outfit": "^2.1.3",
|
|
44
44
|
"typescript": "^5.9.3",
|
|
45
45
|
"vite": "^6.4.1",
|
|
46
46
|
"vite-plugin-dts": "^4.0.3"
|
|
@@ -111,12 +111,13 @@ export class DataFilter {
|
|
|
111
111
|
static customDataSelectorFnsDefault: Record<string, DataSelectorFn<any>> = {
|
|
112
112
|
filterDuration: {
|
|
113
113
|
handle(el, state, notInRange) {
|
|
114
|
-
|
|
114
|
+
if (!state.filterDuration) return false;
|
|
115
|
+
return notInRange(el.duration);
|
|
115
116
|
},
|
|
116
117
|
$preDefine: (state) => {
|
|
117
118
|
const from = state.filterDurationFrom as number;
|
|
118
119
|
const to = state.filterDurationTo as number;
|
|
119
|
-
function notInRange(d: number) {
|
|
120
|
+
function notInRange(d: number): boolean {
|
|
120
121
|
return d < from || d > to;
|
|
121
122
|
}
|
|
122
123
|
return notInRange;
|
|
@@ -466,3 +466,46 @@ export const NamethatPorn_Logo = `
|
|
|
466
466
|
⣯⣗⡯⡯⡮⣏⣗⢽⣱⡳⣝⢼⡪⣞⣽⣺⣽⡾⣿⣿⣿⡳⣳⣝⢮⡳⡝⣜⢜⢜⢜⢜⠜⡜⡜⡜⣜⢜⢵⡱⡵⡕⣗⢽⢕⡯⣫⢞⡽⣪⢷⢽⣝⣗⣝⢷⣝⣗⢧⢇
|
|
467
467
|
⢵⡳⡯⣯⣻⣺⢾⢽⣺⢾⢽⡽⡽⣗⡿⣞⣷⢿⣿⡿⡮⡯⡺⣜⢵⢝⢞⢎⡗⣝⢜⢼⢸⢪⡪⡎⡮⣪⡣⢧⡳⣝⢎⣗⢽⡪⣗⡽⣺⢵⣫⣗⣗⢷⢝⣗⣗⢷⢽⠸
|
|
468
468
|
⢿⣝⢽⣺⣺⡪⡯⡯⣺⢽⣕⢯⡻⡮⡯⣟⣾⢿⣿⢽⢽⢝⡽⡜⣎⢮⢳⢕⢧⢳⢹⡸⣱⢣⡣⡳⣹⡸⡼⡕⣗⢵⡳⡽⣕⣯⡳⣝⡮⣗⡧⣗⡾⡵⣯⣲⡳⡧⡯⢢`;
|
|
469
|
+
|
|
470
|
+
export const Obmenvsem_Logo = `
|
|
471
|
+
⢆⠕⡡⡑⢌⠢⡑⢌⠢⡑⠔⢌⠪⡐⢌⢊⠢⡑⢌⠢⡑⡡⡑⢌⡊⡆⣕⡱⣌⣦⣎⣦⣧⣎⡆⢕⠐⢔⠨⡨⢂⠅⢕⠨⡂⡅⡢⢡⠢⡑⢌⠢⡢⢱⠰⡨⢢⢑⠌⡆
|
|
472
|
+
⠕⡨⢂⠪⡐⡑⢌⠢⡑⢌⢌⠢⡡⢊⠔⡐⢅⠪⡐⢌⢢⡲⣜⡵⣽⣽⣾⣿⣿⣿⣿⣿⣿⣿⣿⡎⡜⢔⢱⠨⡢⠱⡡⠱⠨⠢⠱⡑⠜⠌⢆⠣⡊⡢⢃⠣⡃⡣⢃⠣
|
|
473
|
+
⢇⢪⠸⡨⢌⠜⢌⠜⠌⢆⢕⠱⡘⢔⢑⠜⡐⢕⠸⡸⡷⣿⣻⣿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣽⣿⡿⣄⢕⣐⢅⢆⡕⣌⢎⢬⢕⢕⢜⢜⢜⢆⢗⢜⡔⣇⢧⢳⢸⢪⡣
|
|
474
|
+
⢱⢐⢕⢔⣑⢌⢆⡕⡕⡥⡢⡕⡬⡲⡰⡱⡪⡲⣱⣻⣯⣷⣿⣻⣽⣿⣿⢿⣿⣟⣯⣷⣿⣿⣻⣿⡝⣜⢜⢜⡜⣜⢜⢜⢕⢕⢕⢜⢜⢜⢎⢎⢇⢇⡇⡧⡳⡹⡜⡮
|
|
475
|
+
⢸⢱⢕⢇⢇⢗⢕⢵⢱⢣⢳⢱⢕⢵⢹⢜⢎⢞⢼⣽⡾⣷⣻⣟⣞⣷⣿⣿⣿⣿⢿⣟⣿⣟⣿⣿⢸⢱⡣⡣⡣⡣⡣⡳⡱⡹⡌⢜⢜⢕⢕⢵⢹⢸⡸⡜⡜⡎⡮⡺
|
|
476
|
+
⡕⡕⣕⢕⢇⢏⢎⢇⢗⢕⢇⢧⢳⢱⢱⡱⡱⡕⡵⣿⣽⢿⣽⡯⣿⣻⣿⣟⣷⣻⡿⣯⣿⢯⢷⣻⢇⢇⢧⢣⢣⢣⡣⡣⡣⡣⡣⢱⢱⢱⢱⢕⢕⢕⢕⢕⢝⢜⢎⢎
|
|
477
|
+
⢜⢜⢜⢜⢎⢎⢇⢗⢕⢕⢇⢇⢧⢳⢱⢱⢱⢕⢽⢷⣟⣿⢾⣟⣿⢽⣿⣿⣽⣿⡿⡯⡯⣟⡵⣗⢕⢕⢝⡜⡜⡜⡜⡜⡜⡜⡬⢸⢸⢸⢸⢸⢸⢱⢱⢹⢸⢱⡱⡹
|
|
478
|
+
⡇⡏⡎⡎⡎⡮⡪⣪⢪⢣⡣⡳⡱⡱⡱⡱⡕⣕⣽⢿⣯⡿⣿⡿⣾⣻⡿⣿⣳⣿⢯⣿⣽⣗⣿⣳⣵⢵⢹⢸⢸⢸⢸⢸⢸⢸⢂⠕⡕⡕⡕⡕⡕⡕⣕⢕⢇⢇⢇⢏
|
|
479
|
+
⢪⢪⡪⡪⣪⢪⡪⡪⡪⡣⡺⡸⡸⡸⡪⡪⡪⡲⣽⣻⡷⣿⣿⣿⣿⣾⢿⣿⣵⣿⣽⣿⣿⣻⣿⣿⡮⡣⡣⣣⡣⡣⡣⡣⡣⡣⡃⡪⡪⡪⡪⡪⡪⡪⡪⡪⡪⡪⡣⡳
|
|
480
|
+
⢸⢸⢸⢸⢸⢸⢸⢸⢱⡱⡕⡕⡝⡜⡜⡎⡮⡪⡺⣽⣟⣯⣿⡿⣟⡿⣿⣿⣻⡽⣟⢟⢞⡕⡗⣕⣝⣾⣽⣿⣿⡿⣷⣕⢕⢕⠕⡸⡸⡘⡬⡪⡪⡪⡪⡪⡪⡣⣓⢝
|
|
481
|
+
⢸⢸⢸⢸⢸⢸⢜⡪⡪⡪⡪⡪⡪⣪⢪⡪⣪⣮⢿⣺⣯⣿⣷⣟⡞⡞⡮⡹⡕⡏⡮⡳⡱⣕⢽⣺⣾⣿⢿⣻⡿⣿⣿⣿⢜⢔⠕⡅⡇⢇⢇⢎⢎⢎⢎⢎⢎⢎⢎⢮
|
|
482
|
+
⡘⡜⡜⡜⡜⡜⡆⡇⡇⡇⡇⡇⡇⡇⡧⣳⣿⣽⣿⣻⣿⣿⣿⣿⣿⣎⣗⢝⡜⣜⢵⢝⣜⣾⣿⣿⣿⣻⣽⣿⣿⣿⣿⣿⢱⢱⠡⡃⡎⡎⢎⢪⢸⢸⢘⢜⢜⢜⢜⢜
|
|
483
|
+
⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⣺⡿⣷⢿⣿⣽⣿⣾⣻⣿⣿⣿⣿⣷⣧⣧⣳⣷⢟⣟⣽⣿⣳⣟⣾⣿⣿⣿⣿⣿⢸⢰⠱⡡⢣⢣⢣⢣⢣⠣⡣⡣⡣⡣⡣⡣
|
|
484
|
+
⡱⡱⡱⡱⡱⡱⡱⡱⡱⡱⡱⡱⡱⡱⡺⣟⣿⣻⣿⣿⣿⣿⣾⣻⣿⣿⣽⣿⣽⣿⣿⣽⣝⣞⢟⣗⢽⣻⣿⣿⣿⣿⣾⡇⡇⡕⢕⠅⡣⡣⡣⡕⡜⡜⡜⡜⢜⢜⢜⢜
|
|
485
|
+
⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⢪⣿⣯⣿⣻⣿⣷⣿⣿⣻⣿⡿⣿⣿⣿⣿⣾⣿⣿⣞⣗⢗⣯⣻⣿⣿⣿⣽⣿⡇⡕⡜⡌⡂⡇⡏⣣⢣⢪⠪⡢⡣⡣⡣⡣⡣
|
|
486
|
+
⢇⢇⢇⢇⢇⢇⢇⢇⢇⢇⢇⢇⢇⢇⢗⡿⣾⣯⣿⣿⣿⣿⣿⣷⡽⡿⡿⣿⣻⣻⣿⢿⣿⣟⡿⣿⢽⣾⣿⣿⣽⣿⣿⢕⠕⡜⢌⠢⡱⣱⡪⡊⡆⡇⢇⢣⢣⠣⡣⡣
|
|
487
|
+
⠱⡱⡱⡱⡑⡕⡕⢕⢱⢑⢕⢕⢕⢕⢕⣿⣻⣾⣻⣿⣟⣟⣿⣿⣽⣿⡿⣿⣻⣿⣾⣿⡿⡿⣿⣿⣿⣿⣫⣿⣻⣽⣾⡇⡇⢎⢎⠢⡱⡸⡸⡨⢪⢸⠸⡸⡸⡸⡸⡸
|
|
488
|
+
⢱⢱⢱⢸⢸⢸⢸⢸⢸⢸⢸⢰⢱⢑⢕⣯⣿⢾⣻⣿⣽⣿⣻⣿⣯⣷⣿⣿⣿⡷⡿⡿⣿⣿⣷⣻⣽⣷⣿⣿⣿⣿⣿⣇⢇⢣⠪⡐⡱⡸⣆⢇⠕⡅⢇⢇⢎⢪⢸⢸
|
|
489
|
+
⡨⡪⡪⡪⡪⡪⡪⡪⡪⡪⡪⡪⡪⡪⣺⣿⣽⢿⣿⣿⣿⣿⣿⣿⡿⣟⡿⣽⣺⣝⡯⡿⣽⣺⢯⢿⣻⣿⣿⣿⣿⣿⢿⣿⠰⡑⡕⡨⢌⢗⢕⢱⢑⠕⡕⡜⢜⢜⢜⢜
|
|
490
|
+
⡸⡸⣘⠬⡪⡪⡪⢪⠪⡪⡪⢪⢪⢪⣿⢷⣟⣿⣿⣿⣿⣻⣿⣟⣞⣗⣯⢷⣳⣗⡿⣽⣳⣽⡽⣿⢽⣿⣿⣿⣽⣾⣿⡗⢕⢱⢑⢌⢢⠣⡪⢢⢃⢇⢕⢜⢜⢔⢕⢜
|
|
491
|
+
⣊⢎⢆⢇⢇⢇⢎⢎⢎⢎⢎⢎⢎⣾⣟⣿⣽⢿⣿⣷⣿⣿⣿⢽⡾⣵⣭⣽⣼⣼⣼⣼⣴⣵⡾⡾⡫⢽⣷⣿⣿⣿⣿⡏⡪⡢⢣⢊⢢⠣⡣⢣⢱⢡⢣⢱⢡⢣⢱⢑
|
|
492
|
+
⢆⢇⢇⢣⢣⢣⢣⢣⢣⢣⠣⡣⡱⣷⣟⣿⢾⣿⣿⣿⣿⣿⡳⡱⡑⠝⢯⡿⣿⣽⣟⣿⠯⡣⡃⢎⠜⢜⣿⣿⣿⣿⣿⢚⣎⢞⣧⡪⠢⡣⡃⡇⡕⡜⢔⠕⡅⡇⡣⡣
|
|
493
|
+
⡇⡇⡣⡣⡣⡱⡸⡸⡨⡒⡕⡕⡕⣿⣽⣟⣿⣻⡿⡻⣯⣗⢇⢇⢊⢊⠢⡙⣿⣯⡿⢡⢑⠔⢌⠢⡑⢕⢻⢏⢛⠾⣿⠪⡒⡵⡨⡷⡕⡅⡇⢎⠆⡇⡣⡣⢣⢱⢑⢅
|
|
494
|
+
⡜⢜⢜⢌⢎⠎⡎⡪⡪⢪⠪⡪⣺⡿⣷⣟⣯⢗⢕⠡⡹⡱⡑⢔⠡⢂⢑⢐⢹⡗⢕⢅⠢⢊⢐⠐⢌⠢⡹⡨⠂⢕⢜⢕⠱⡱⡹⣾⢮⣮⣪⡸⡘⡌⡎⡜⢜⢌⢎⢎
|
|
495
|
+
⢪⢪⢢⢣⠣⡣⡣⡣⢣⢣⠣⣝⣿⣻⣽⡾⣿⢱⢂⠕⡨⠊⡌⡢⠨⢂⠂⡂⣹⢑⠕⢄⠕⡐⠄⡑⡰⢑⠡⢂⠅⡑⡜⡐⢕⢱⢹⡺⣟⣾⣽⣻⢷⣧⠪⡊⡎⡪⡢⡣
|
|
496
|
+
⡣⡱⡑⡕⢕⢕⢜⢜⠜⡌⡎⡎⣾⣿⣽⣟⣯⣳⢜⠔⡌⢌⢂⡊⡪⡐⡐⡐⣾⢐⢕⠡⡂⡢⢡⢘⢐⢐⠨⡐⡨⡂⢧⢑⢕⢱⢱⢝⣿⣳⣟⣾⣻⢾⣿⡨⡪⡊⡆⡇
|
|
497
|
+
⡕⡕⢕⠕⡕⡅⡇⡎⢎⢪⢊⢎⢿⣞⣷⣿⣗⡵⣣⢳⢘⢔⠡⡊⡢⡱⡰⣸⡗⡜⡼⡸⡐⣔⠪⡐⢅⠢⡑⠔⡌⡌⢆⢕⢜⢜⢜⢮⣷⣻⣞⢾⣺⣟⡾⣷⢱⠸⡘⡌
|
|
498
|
+
⡱⡸⡸⡸⡘⡌⡎⡪⡪⡪⢪⢮⣿⢯⣿⢾⣿⡮⣇⠇⢧⡣⡓⣌⡒⡌⡮⡺⡪⡪⣇⢯⢪⢎⢎⢊⠎⡎⡢⡱⡱⡑⡌⡎⡎⡮⣺⣽⣞⡷⣽⢻⡺⡮⣟⣟⠜⡜⢜⢜
|
|
499
|
+
⢸⢨⢪⢢⠣⡣⡣⢣⠣⡪⣺⢿⣽⣿⡽⡯⣞⡿⣾⣕⡕⣪⡪⣢⡱⡱⡱⣼⣮⣯⡪⣾⢵⣝⢎⡎⡎⡎⡪⡪⡪⡪⡪⣪⣣⣯⡷⣟⡾⣝⢮⣳⢽⢽⡽⡇⡣⡣⢣⢱
|
|
500
|
+
⢜⢜⢔⢕⢕⢕⢜⢜⢜⠜⣜⣿⣽⡾⣟⣯⢷⢯⣟⣗⣿⢶⣝⣼⡸⠼⡸⡸⡱⡫⡹⡙⡝⡝⡟⡞⡽⡜⡮⡺⡪⡮⣯⡾⣾⢷⣿⢿⢽⢽⢵⣫⣯⢿⢋⢎⢜⢌⢎⢎
|
|
501
|
+
⢸⢰⠱⡱⡸⡰⡱⡱⡸⡘⡬⣷⣟⣿⣻⣽⣻⡽⣷⣻⡾⣓⢢⠲⡨⡣⡱⡸⡨⡊⡆⢇⢣⢱⢑⢕⠱⡑⡕⢅⢇⢮⣷⢿⣻⣟⣯⢯⢯⢾⢽⡾⡙⡅⢇⢪⠢⡣⡱⡸
|
|
502
|
+
⢕⠕⡕⢕⢜⢌⢆⢇⢎⢎⢪⢺⣯⣯⡿⣯⡷⣿⢽⡿⡨⡢⢣⠣⡣⡱⢱⢘⢌⢎⢜⢜⢸⠰⡑⡅⢇⠇⡎⡪⣪⣿⡽⣟⣿⣽⣳⢯⢿⣽⡛⡅⢇⢕⢱⢡⢣⢱⢸⢨
|
|
503
|
+
⠀⢣⠣⡣⡱⡑⡅⡇⢎⢪⠸⡼⣟⣾⣻⣯⢿⢽⢯⡗⢜⢌⢆⢇⢣⠪⡊⡎⡢⢣⠪⡂⡇⡕⢕⠱⡑⢕⢅⢷⣻⣾⣻⢿⣽⡺⡺⣽⢿⠪⡂⢇⠕⡜⡰⡑⡜⢔⢕⠱
|
|
504
|
+
⢂⠀⠣⢑⠡⢃⢑⢘⢘⠘⠌⣟⣯⣟⣾⢽⣯⢿⣽⣻⠨⢂⢃⢊⢂⢃⠣⢑⠡⢃⢑⠑⢌⢘⢈⠪⢘⠨⣪⣿⣽⣳⣿⣻⢾⣝⣝⣾⢃⠡⠁⢅⠡⢁⢊⠨⠨⠨⠈⡊
|
|
505
|
+
⠐⡡⠀⠡⢐⠐⡐⡀⡂⠌⣸⡺⣳⣻⣞⣿⢽⣽⢾⣯⠈⡐⠠⠁⡂⠡⠨⠠⠁⠅⠌⠨⠠⢁⠂⠡⠁⠌⡉⡞⡾⡽⣞⣯⡿⣯⣷⣟⣆⠈⡈⠠⠐⠀⠄⠂⠀⠁⡂⠔
|
|
506
|
+
⠂⠌⠠⠁⢐⠐⢀⠂⠠⠁⡳⣳⢯⢷⣻⡾⣟⣾⣻⣞⠀⠄⢈⠠⠀⢁⠀⡁⢈⠀⡁⢈⠠⠀⢈⠀⠡⠀⠠⢈⢂⢻⣯⢷⣻⣽⢾⣽⢾⡀⠠⠐⠀⠐⠀⠄⠁⠡⠀⢂
|
|
507
|
+
⠄⠈⠌⢂⠀⢂⢂⠄⠅⡂⡾⡽⣝⣯⡿⡯⣿⣺⢷⣻⡄⠂⢀⠠⠈⠀⠠⠀⠂⠀⠄⠀⠄⠈⠀⠐⠀⠈⠀⠀⠂⢱⠍⢿⢽⢾⢻⢽⣯⢷⣄⡀⠄⠂⠁⠀⡁⠨⠀⠄
|
|
508
|
+
⢁⠐⠊⠠⠀⠂⠢⠨⢂⢂⢯⡯⣗⣯⣟⢸⡯⡢⣟⣷⡃⠠⠀⠄⡀⠂⠄⢂⠐⡀⡂⢐⠀⡂⠌⡀⢂⠡⠈⠠⠐⡸⡧⣿⢽⢧⠱⡐⢝⣯⢿⡦⢀⠠⠀⡁⠀⢐⠀⠂
|
|
509
|
+
⣖⠀⡊⠨⡂⠨⣨⡪⠦⠖⡫⣏⢯⢞⡦⡽⡪⡌⣗⣯⠡⠈⡀⢁⠠⠈⡀⠄⠠⠀⠠⠀⠄⠠⠀⠄⠠⠀⡈⠀⠄⢸⠅⣪⡯⣻⠬⡬⡢⡹⡽⡉⠀⠀⡀⠂⡁⢐⠀⡁
|
|
510
|
+
⠳⠑⡂⡑⠉⡐⠄⡂⡂⡡⣺⡪⣯⣫⡇⢾⡜⠬⣞⡮⡇⠠⠐⡀⠄⢂⢀⠂⡂⢁⠂⠡⠐⢐⠐⢈⠠⠐⡀⡐⢌⢜⡵⣜⢧⡻⡜⢔⢜⢼⣝⢗⠈⡀⠄⡁⡐⢐⠄⢂
|
|
511
|
+
⡠⠡⡐⠄⡁⠆⠕⢌⠔⠔⠜⡞⠷⢽⠽⡜⡯⡇⡿⢝⠇⡨⢐⠠⠨⠠⢐⠠⠂⡂⠌⠄⠅⡂⠌⡐⠄⠅⠄⠪⠆⠯⠺⠝⠝⠣⠃⡓⠚⢙⠊⢃⠁⡂⠅⡂⢢⢑⢕⠁`;
|
package/src/userscripts/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import './scripts/
|
|
1
|
+
import './scripts/xvideos';
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { MonkeyUserScript } from 'vite-plugin-monkey';
|
|
2
2
|
import { RulesGlobal } from '../../core';
|
|
3
|
+
import { circularShift, OnHover, Tick } from '../../utils';
|
|
3
4
|
|
|
4
5
|
export const meta: MonkeyUserScript = {
|
|
5
6
|
name: '3Hentai PervertMonkey',
|
|
6
|
-
version: '1.0.
|
|
7
|
+
version: '1.0.2',
|
|
7
8
|
description: 'Infinite scroll [optional], Filter by Title',
|
|
8
9
|
match: 'https://*.3hentai.net/*',
|
|
9
10
|
};
|
|
@@ -16,4 +17,35 @@ const rules = new RulesGlobal({
|
|
|
16
17
|
gropeStrategy: 'all-in-all',
|
|
17
18
|
customDataSelectorFns: ['filterInclude', 'filterExclude'],
|
|
18
19
|
schemeOptions: ['Text Filter', 'Badge', 'Advanced'],
|
|
20
|
+
animatePreview,
|
|
19
21
|
});
|
|
22
|
+
|
|
23
|
+
function animatePreview() {
|
|
24
|
+
const tick = new Tick(500, false);
|
|
25
|
+
const end = 999;
|
|
26
|
+
|
|
27
|
+
function rotate(src: string) {
|
|
28
|
+
return src.replace(/(\d+)(?=t\.jpg$)/,
|
|
29
|
+
(_, n) => `${circularShift(parseInt(n), end)}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
OnHover.create(
|
|
33
|
+
document.body,
|
|
34
|
+
(e) => e instanceof HTMLImageElement && e.src.endsWith('.jpg'),
|
|
35
|
+
(e) => {
|
|
36
|
+
const t = e as HTMLImageElement;
|
|
37
|
+
const origin = t.src;
|
|
38
|
+
t.src = t.src.replace(/\w+\.\w+$/, '1t.jpg');
|
|
39
|
+
t.onerror = (_) => { t.src = origin };
|
|
40
|
+
tick.start(
|
|
41
|
+
() => {
|
|
42
|
+
t.src = rotate(t.src);
|
|
43
|
+
},
|
|
44
|
+
() => {
|
|
45
|
+
t.src = origin;
|
|
46
|
+
},
|
|
47
|
+
);
|
|
48
|
+
},
|
|
49
|
+
(_) => tick.stop()
|
|
50
|
+
);
|
|
51
|
+
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { MonkeyUserScript } from 'vite-plugin-monkey';
|
|
2
|
-
import { GM_addStyle, unsafeWindow } from '$';
|
|
2
|
+
import { GM_addElement, GM_addStyle, unsafeWindow } from '$';
|
|
3
3
|
import { RulesGlobal } from '../../core';
|
|
4
4
|
import { fetchWith, OnHover, replaceElementTag, Tick } from '../../utils';
|
|
5
5
|
|
|
6
6
|
export const meta: MonkeyUserScript = {
|
|
7
7
|
name: 'Motherless PervertMonkey',
|
|
8
|
-
version: '5.0.
|
|
8
|
+
version: '5.0.2',
|
|
9
9
|
description: 'Infinite scroll [optional], Filter by Title and Duration',
|
|
10
10
|
match: ['https://motherless.com/*'],
|
|
11
|
+
grant: ['GM_addElement', 'GM_addStyle', 'unsafeWindow']
|
|
11
12
|
};
|
|
12
13
|
|
|
13
14
|
(unsafeWindow as any).__is_premium = true;
|
|
@@ -188,6 +189,10 @@ GM_addStyle(`
|
|
|
188
189
|
.ml-masonry-images.masonry-columns-8 .content-inner { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); }
|
|
189
190
|
`);
|
|
190
191
|
|
|
192
|
+
document
|
|
193
|
+
.querySelector('.ml-pagination')
|
|
194
|
+
?.before(GM_addElement('div', { class: 'clear-left' }));
|
|
195
|
+
|
|
191
196
|
//====================================================================================================
|
|
192
197
|
|
|
193
198
|
function applySearchFilters() {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { MonkeyUserScript } from 'vite-plugin-monkey';
|
|
2
|
+
import { GM_addStyle } from '$';
|
|
3
|
+
import { RulesGlobal } from '../../core';
|
|
4
|
+
import { parseUrl } from '../../core/pagination-parsing/pagination-utils';
|
|
5
|
+
import { fetchHtml } from '../../utils';
|
|
6
|
+
|
|
7
|
+
export const meta: MonkeyUserScript = {
|
|
8
|
+
name: 'Obmensvem PervertMonkey',
|
|
9
|
+
version: '1.0.1',
|
|
10
|
+
description: 'Infinite scroll [optional], Filter by Title and Duration',
|
|
11
|
+
match: ['https://*.obmenvsem.com/*', 'https://*.obmenvsem.*/*'],
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const IS_USER_FILES = location.pathname.startsWith('/user_files');
|
|
15
|
+
const SEARCH_PARAM = IS_USER_FILES ? 'start' : 'page';
|
|
16
|
+
|
|
17
|
+
function setup() {
|
|
18
|
+
const container = document.createElement('div');
|
|
19
|
+
container.classList.add('container');
|
|
20
|
+
container.append(
|
|
21
|
+
...document.querySelectorAll('.item:has(> a.block[href *= info] > img)'),
|
|
22
|
+
);
|
|
23
|
+
document.querySelector('.c2')?.after(container);
|
|
24
|
+
GM_addStyle('a.block[href *= info] > img:first-child { height: 240px; }');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
setup();
|
|
28
|
+
|
|
29
|
+
const rules = new RulesGlobal({
|
|
30
|
+
paginationStrategyOptions: {
|
|
31
|
+
getPaginationUrlGenerator() {
|
|
32
|
+
const url = parseUrl(location.href);
|
|
33
|
+
return (offset) => {
|
|
34
|
+
const offsetValue = IS_USER_FILES ? offset * 24 : offset;
|
|
35
|
+
url.searchParams.set(SEARCH_PARAM, offsetValue.toString());
|
|
36
|
+
return url.href;
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
overwritePaginationLast: () => 9999,
|
|
40
|
+
searchParamSelector: 'page',
|
|
41
|
+
paginationSelector: '.item.pages, .pagination',
|
|
42
|
+
},
|
|
43
|
+
containerSelectorLast: '.container',
|
|
44
|
+
thumbsSelector: '.item:has(> a.block[href *= info] > img)',
|
|
45
|
+
getThumbImgDataAttrSelector(img) {
|
|
46
|
+
const url = (img.closest('a') as HTMLAnchorElement).href;
|
|
47
|
+
fetchHtml(url).then(dom => {
|
|
48
|
+
img.src = dom.querySelector<HTMLImageElement>('img[src*=attach]')?.src || img.src;
|
|
49
|
+
})
|
|
50
|
+
return img.src;
|
|
51
|
+
},
|
|
52
|
+
getThumbImgDataStrategy: 'auto',
|
|
53
|
+
getThumbDataStrategy: 'auto-text',
|
|
54
|
+
schemeOptions: ['Text Filter', 'Duration Filter', 'Badge', 'Advanced'],
|
|
55
|
+
});
|