pervert-monkey 1.0.26 → 1.0.27
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 +12 -8
- package/dist/core/pervertmonkey.core.es.js.map +1 -1
- package/dist/core/pervertmonkey.core.umd.js +12 -8
- package/dist/core/pervertmonkey.core.umd.js.map +1 -1
- package/dist/userscripts/3hentai.user.js +1 -1
- 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 +2 -2
- package/dist/userscripts/eporner.user.js +4 -4
- 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 +1 -1
- package/dist/userscripts/namethatporn.user.js +1 -1
- package/dist/userscripts/nhentai.user.js +1 -1
- package/dist/userscripts/obmenvsem.user.js +1 -1
- package/dist/userscripts/pornhub.user.js +3 -3
- package/dist/userscripts/simpcity.user.js +59 -4
- package/dist/userscripts/socialmediagirls.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/xmegadrive.user.js +82 -0
- package/dist/userscripts/xvideos.user.js +1 -1
- package/package.json +1 -1
- package/src/core/data-handler/data-filter.ts +1 -2
- package/src/core/data-handler/data-manager.ts +11 -3
- package/src/core/rules/index.ts +3 -3
- package/src/userscripts/index.ts +1 -1
- package/src/userscripts/scripts/ebalka.ts +1 -1
- package/src/userscripts/scripts/eporner.ts +3 -3
- package/src/userscripts/scripts/pornhub.ts +3 -1
- package/src/userscripts/scripts/simpcity.ts +72 -5
- package/src/userscripts/scripts/xhamster.ts +1 -1
- package/src/userscripts/scripts/xmegadrive.ts +78 -0
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-idle
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant none
|
|
16
16
|
// @run-at document-idle
|
|
17
17
|
// ==/UserScript==
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
17
17
|
// @grant GM_addStyle
|
|
18
18
|
// @grant unsafeWindow
|
|
19
19
|
// @run-at document-idle
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-idle
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
19
19
|
// @grant GM_addStyle
|
|
20
20
|
// @grant unsafeWindow
|
|
21
21
|
// @run-at document-idle
|
|
@@ -54,7 +54,7 @@ var ___utils = ___core;
|
|
|
54
54
|
const e = thumb.querySelector(".card__thumb_video");
|
|
55
55
|
e.classList.toggle("video-on");
|
|
56
56
|
const src = e.querySelector(".card__image")?.getAttribute("data-preview");
|
|
57
|
-
const videoElem = (0, ___utils.parseHtml)(`<video style="position: absolute; left:
|
|
57
|
+
const videoElem = (0, ___utils.parseHtml)(`<video style="position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%) scale(1.1); visibility: visible; margin-top: -1px;"
|
|
58
58
|
autoplay="" loop="" playsinline="true" webkit-playsinline="true" src="${src}"></video>`);
|
|
59
59
|
e.appendChild(videoElem);
|
|
60
60
|
return () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ==UserScript==
|
|
2
2
|
// @name Eporner PervertMonkey
|
|
3
3
|
// @namespace pervertmonkey
|
|
4
|
-
// @version 2.1.
|
|
4
|
+
// @version 2.1.4
|
|
5
5
|
// @author violent-orangutan
|
|
6
6
|
// @description Infinite scroll [optional], Filter by Title, Uploader, Duration and HD, Sort by Views and Duration
|
|
7
7
|
// @license MIT
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// @supportURL https://sleazyfork.org/en/scripts/552559-eporner-pervertmonkey/feedback
|
|
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.27/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
18
18
|
// @run-at document-idle
|
|
@@ -48,7 +48,7 @@ var ___utils = ___core;
|
|
|
48
48
|
strategy: "auto",
|
|
49
49
|
remove: "auto"
|
|
50
50
|
},
|
|
51
|
-
containerSelectorLast: "
|
|
51
|
+
containerSelectorLast: "div:has(div[id^=vf][data-id])",
|
|
52
52
|
customDataFilterFns: [{ qualityFilter: {
|
|
53
53
|
handle(el, state) {
|
|
54
54
|
if (!(state.quality360 || state.quality480 || state.quality720 || state.quality1080 || state.quality2k || state.quality4k)) return false;
|
|
@@ -82,7 +82,7 @@ var ___utils = ___core;
|
|
|
82
82
|
"Badge",
|
|
83
83
|
"Advanced"
|
|
84
84
|
],
|
|
85
|
-
gropeStrategy: "all-in-
|
|
85
|
+
gropeStrategy: "all-in-all",
|
|
86
86
|
animatePreview
|
|
87
87
|
});
|
|
88
88
|
function animatePreview(doc) {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-idle
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-idle
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
18
18
|
// @run-at document-idle
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
19
19
|
// @grant GM_addStyle
|
|
20
20
|
// @grant unsafeWindow
|
|
21
21
|
// @run-at document-idle
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://motherless.xxx/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addElement
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-idle
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
18
18
|
// @run-at document-idle
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// @match https://*.obmenvsem.com/*
|
|
14
14
|
// @match https://*.obmenvsem.*/*
|
|
15
15
|
// @match https://*.obmenvsems.*/*
|
|
16
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
16
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.27/dist/core/pervertmonkey.core.umd.js
|
|
17
17
|
// @grant GM_addElement
|
|
18
18
|
// @grant GM_addStyle
|
|
19
19
|
// @grant unsafeWindow
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
18
18
|
// @run-at document-idle
|
|
@@ -30,10 +30,10 @@ var ___utils = ___core;
|
|
|
30
30
|
overwritePaginationLast: (n) => n === 9 ? 9999 : n
|
|
31
31
|
},
|
|
32
32
|
containerSelector: () => [...document.querySelectorAll("ul:has(> li[data-video-vkey])")].filter((e) => e.children.length > 0 && e.checkVisibility()).sort((a, b) => b.children.length - a.children.length)?.[0],
|
|
33
|
-
containerHomogenity: {
|
|
33
|
+
dataManagerOptions: { containerHomogenity: {
|
|
34
34
|
id: true,
|
|
35
35
|
className: true
|
|
36
|
-
},
|
|
36
|
+
} },
|
|
37
37
|
thumbs: { selector: "li[data-video-vkey]" },
|
|
38
38
|
thumb: { selectors: {
|
|
39
39
|
title: "span.title",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// ==UserScript==
|
|
2
2
|
// @name Simpcity PervertMonkey
|
|
3
3
|
// @namespace pervertmonkey
|
|
4
|
-
// @version 1.0.
|
|
4
|
+
// @version 1.0.3
|
|
5
5
|
// @author violent-orangutan
|
|
6
|
-
// @description Infinite scroll [optional], Filter by Title
|
|
6
|
+
// @description Infinite scroll [optional], Filter by Title and Uploader, Sort by Views
|
|
7
7
|
// @license MIT
|
|
8
8
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=simpcity.cr
|
|
9
9
|
// @homepage https://github.com/smartacephale/sleazy-fork#readme
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
// @source https://github.com/smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://simpcity.cr/threads/*
|
|
14
|
-
// @
|
|
14
|
+
// @match https://simpcity.cr/watched/threads*
|
|
15
|
+
// @match https://simpcity.cr/forums/*
|
|
16
|
+
// @match https://simpcity.cr/account/bookmarks*
|
|
17
|
+
// @match https://simpcity.cr/tags/*
|
|
18
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.27/dist/core/pervertmonkey.core.umd.js
|
|
15
19
|
// @grant GM_addStyle
|
|
16
20
|
// @grant unsafeWindow
|
|
17
21
|
// @run-at document-end
|
|
@@ -23,7 +27,58 @@ var ___utils = ___core;
|
|
|
23
27
|
|
|
24
28
|
(function(___core) {
|
|
25
29
|
"use strict";
|
|
26
|
-
|
|
30
|
+
var IS_WATCHED_THREADS = /^\/watched\/threads/.test(location.pathname);
|
|
31
|
+
var IS_FORUM_PAGE = /^\/forums\//.test(location.pathname);
|
|
32
|
+
var IS_BOOKMARKS_PAGE = /^\/account\/bookmarks/.test(location.pathname);
|
|
33
|
+
var IS_TAGS_PAGE = /^\/tags\//.test(location.pathname);
|
|
34
|
+
new ___core.Rules(IS_BOOKMARKS_PAGE || IS_TAGS_PAGE ? {
|
|
35
|
+
containerSelector: "ol.block-body, ol.listPlain",
|
|
36
|
+
paginationStrategyOptions: {
|
|
37
|
+
paginationSelector: ".block-outer--after .pageNav",
|
|
38
|
+
pathnameSelector: /\/page-(\d+)\/?$/
|
|
39
|
+
},
|
|
40
|
+
thumbs: { selector: "li.block-row" },
|
|
41
|
+
thumb: {
|
|
42
|
+
selectors: {
|
|
43
|
+
title: ".contentRow-title a",
|
|
44
|
+
uploader: ".contentRow-minor .username"
|
|
45
|
+
},
|
|
46
|
+
getUrlSelector: ".contentRow-title a"
|
|
47
|
+
},
|
|
48
|
+
schemeOptions: [
|
|
49
|
+
"Title Filter",
|
|
50
|
+
"Uploader Filter",
|
|
51
|
+
"Badge",
|
|
52
|
+
"Advanced"
|
|
53
|
+
]
|
|
54
|
+
} : IS_WATCHED_THREADS || IS_FORUM_PAGE ? {
|
|
55
|
+
containerSelectorLast: ".structItemContainer-group, .structItemContainer",
|
|
56
|
+
paginationStrategyOptions: {
|
|
57
|
+
paginationSelector: ".block-outer--after .pageNav",
|
|
58
|
+
pathnameSelector: /\/page-(\d+)\/?$/
|
|
59
|
+
},
|
|
60
|
+
thumbs: { selector: ".structItem.structItem--thread" },
|
|
61
|
+
thumb: { selectors: {
|
|
62
|
+
title: ".structItem-title a",
|
|
63
|
+
uploader: ".structItem-parts .username",
|
|
64
|
+
views: {
|
|
65
|
+
selector: ".structItem-cell--meta dl:nth-of-type(2) dd",
|
|
66
|
+
type: "float"
|
|
67
|
+
},
|
|
68
|
+
replies: {
|
|
69
|
+
selector: ".structItem-cell--meta dl:nth-of-type(1) dd",
|
|
70
|
+
type: "float"
|
|
71
|
+
}
|
|
72
|
+
} },
|
|
73
|
+
gropeStrategy: "all-in-all",
|
|
74
|
+
schemeOptions: [
|
|
75
|
+
"Title Filter",
|
|
76
|
+
"Uploader Filter",
|
|
77
|
+
"Sort By Views",
|
|
78
|
+
"Badge",
|
|
79
|
+
"Advanced"
|
|
80
|
+
]
|
|
81
|
+
} : {
|
|
27
82
|
containerSelector: ".js-replyNewMessageContainer",
|
|
28
83
|
paginationStrategyOptions: {
|
|
29
84
|
paginationSelector: ".block-container + * .pageNav",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/smartacephale/sleazy-fork
|
|
12
12
|
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
13
|
// @match https://forums.socialmediagirls.com/threads/*
|
|
14
|
-
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-end
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
16
16
|
// @grant GM_addStyle
|
|
17
17
|
// @grant unsafeWindow
|
|
18
18
|
// @run-at document-idle
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-idle
|
|
@@ -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.27/dist/core/pervertmonkey.core.umd.js
|
|
17
17
|
// @grant GM_addElement
|
|
18
18
|
// @grant GM_addStyle
|
|
19
19
|
// @grant unsafeWindow
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name xmegadrive PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 1.0.0
|
|
5
|
+
// @author violent-orangutan
|
|
6
|
+
// @description Infinite scroll [optional]. Filter by Title and Duration. Sort by Duration and Views.
|
|
7
|
+
// @license MIT
|
|
8
|
+
// @icon https://www.google.com/s2/favicons?sz=64&domain=xmegadrive.com
|
|
9
|
+
// @homepage https://github.com/smartacephale/sleazy-fork#readme
|
|
10
|
+
// @homepageURL https://sleazyfork.org/en/users/1253342-smartacephale
|
|
11
|
+
// @source https://github.com/smartacephale/sleazy-fork
|
|
12
|
+
// @supportURL https://github.com/smartacephale/sleazy-fork/issues
|
|
13
|
+
// @match https://*.xmegadrive.com/*
|
|
14
|
+
// @exclude https://*.xmegadrive.com/*mode=async*
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.27/dist/core/pervertmonkey.core.umd.js
|
|
16
|
+
// @grant GM_addStyle
|
|
17
|
+
// @grant unsafeWindow
|
|
18
|
+
// @run-at document-idle
|
|
19
|
+
// ==/UserScript==
|
|
20
|
+
|
|
21
|
+
var ___core = window.pervertmonkey.core || pervertmonkey.core;
|
|
22
|
+
var ___utils = ___core;
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
(function(___core, ___utils) {
|
|
26
|
+
"use strict";
|
|
27
|
+
var $ = (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)().$;
|
|
28
|
+
new ___core.Rules({
|
|
29
|
+
containerSelector: "[id*=\"playlist\"]:has(> .item .title),[id*=\"videos\"]:has(> .item .title),form:has(>.item .title)",
|
|
30
|
+
paginationStrategyOptions: { paginationSelector: ".pagination:not([id *= member])" },
|
|
31
|
+
thumbs: { selector: ".list-videos .item, .playlist .item, .list-playlists > div > .item, .item:has(.title)" },
|
|
32
|
+
thumb: {
|
|
33
|
+
strategy: "auto-select",
|
|
34
|
+
selectors: {
|
|
35
|
+
private: {
|
|
36
|
+
type: "boolean",
|
|
37
|
+
selector: "[class*=private]"
|
|
38
|
+
},
|
|
39
|
+
views: {
|
|
40
|
+
selector: ".views",
|
|
41
|
+
type: "float"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
dataManagerOptions: { removeDuplicates: true },
|
|
46
|
+
thumbImg: { selector: "data-original" },
|
|
47
|
+
gropeStrategy: "all-in-all",
|
|
48
|
+
schemeOptions: [
|
|
49
|
+
"Title Filter",
|
|
50
|
+
"Duration Filter",
|
|
51
|
+
"Sort By",
|
|
52
|
+
"Badge",
|
|
53
|
+
"Advanced"
|
|
54
|
+
],
|
|
55
|
+
animatePreview
|
|
56
|
+
});
|
|
57
|
+
function animatePreview(container) {
|
|
58
|
+
const tick = new ___utils.Tick(500);
|
|
59
|
+
function killjquery(n = 10) {
|
|
60
|
+
if (n > 0) {
|
|
61
|
+
n--;
|
|
62
|
+
$("img[data-cnt]").off();
|
|
63
|
+
setTimeout(() => killjquery(n), 250);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
killjquery();
|
|
67
|
+
function rotateImg(src, count) {
|
|
68
|
+
return src.replace(/(\d)(?=\.jpg$)/, (_, n) => `${(0, ___utils.circularShift)(parseInt(n), count)}`);
|
|
69
|
+
}
|
|
70
|
+
___utils.OnHover.create(container, ".list-videos .item, .playlist .item, .list-playlists > div > .item, .item:has(.title)", (e) => {
|
|
71
|
+
const img = e.querySelector("img");
|
|
72
|
+
const origin = img.src;
|
|
73
|
+
const count = parseInt(img.getAttribute("data-cnt")) || 5;
|
|
74
|
+
tick.start(() => {
|
|
75
|
+
img.src = rotateImg(img.src, count);
|
|
76
|
+
}, () => {
|
|
77
|
+
img.src = origin;
|
|
78
|
+
});
|
|
79
|
+
return () => tick.stop();
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
})(___core, ___utils);
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// @source https://github.com/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.27/dist/core/pervertmonkey.core.umd.js
|
|
15
15
|
// @grant GM_addStyle
|
|
16
16
|
// @grant unsafeWindow
|
|
17
17
|
// @run-at document-idle
|
package/package.json
CHANGED
|
@@ -23,8 +23,7 @@ export class DataFilter {
|
|
|
23
23
|
public createCssFilters() {
|
|
24
24
|
this.filters.forEach((_, name) => {
|
|
25
25
|
const className = DataFilterFn.setPrefix(name);
|
|
26
|
-
const cssRule = `@layer userscriptOverride {
|
|
27
|
-
.${className} { display: none !important; } }`;
|
|
26
|
+
const cssRule = `@layer userscriptOverride { .${className} { display: none !important; } }`;
|
|
28
27
|
GM_addStyle(cssRule);
|
|
29
28
|
});
|
|
30
29
|
}
|
|
@@ -15,9 +15,17 @@ export class DataManager {
|
|
|
15
15
|
);
|
|
16
16
|
public dataFilter: DataFilter;
|
|
17
17
|
|
|
18
|
+
public static create(
|
|
19
|
+
rules: Rules,
|
|
20
|
+
o: Partial<Pick<DataManager, 'removeDuplicates' | 'containerHomogenity'>> = {},
|
|
21
|
+
) {
|
|
22
|
+
return new DataManager(rules, o.removeDuplicates, o.containerHomogenity);
|
|
23
|
+
}
|
|
24
|
+
|
|
18
25
|
constructor(
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
public rules: Rules,
|
|
27
|
+
public removeDuplicates = false,
|
|
28
|
+
public containerHomogenity?: Parameters<typeof areElementsAlike>[2],
|
|
21
29
|
) {
|
|
22
30
|
this.dataFilter = new DataFilter(this.rules);
|
|
23
31
|
}
|
|
@@ -65,7 +73,7 @@ export class DataManager {
|
|
|
65
73
|
public async parseData(
|
|
66
74
|
html: HTMLElement,
|
|
67
75
|
container?: HTMLElement,
|
|
68
|
-
removeDuplicates =
|
|
76
|
+
removeDuplicates = this.removeDuplicates,
|
|
69
77
|
shouldLazify = true,
|
|
70
78
|
) {
|
|
71
79
|
const thumbs = this.rules.thumbsParser.getThumbs(html);
|
package/src/core/rules/index.ts
CHANGED
|
@@ -62,7 +62,7 @@ export class Rules {
|
|
|
62
62
|
public paginationStrategy: PaginationStrategy;
|
|
63
63
|
|
|
64
64
|
public dataManager: DataManager;
|
|
65
|
-
public
|
|
65
|
+
public dataManagerOptions: Parameters<typeof DataManager.create>[1] = {};
|
|
66
66
|
|
|
67
67
|
public customDataFilterFns: (Record<string, DataFilterFnFrom<any>> | string)[] = [];
|
|
68
68
|
private hookDataFilterFns() {
|
|
@@ -157,7 +157,7 @@ export class Rules {
|
|
|
157
157
|
|
|
158
158
|
this.paginationStrategy = getPaginationStrategy(this.paginationStrategyOptions);
|
|
159
159
|
|
|
160
|
-
this.dataManager =
|
|
160
|
+
this.dataManager = DataManager.create(this, this.dataManagerOptions);
|
|
161
161
|
|
|
162
162
|
this.inputController.dispose();
|
|
163
163
|
this.inputController = new JabronioGuiController(this.store, this.dataManager);
|
|
@@ -188,7 +188,7 @@ export class Rules {
|
|
|
188
188
|
this.gui = this.createGui();
|
|
189
189
|
|
|
190
190
|
this.hookDataFilterFns();
|
|
191
|
-
this.dataManager =
|
|
191
|
+
this.dataManager = DataManager.create(this, this.dataManagerOptions);
|
|
192
192
|
this.inputController = new JabronioGuiController(this.store, this.dataManager);
|
|
193
193
|
|
|
194
194
|
this.reset();
|
package/src/userscripts/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import './scripts/
|
|
1
|
+
import './scripts/xmegadrive';
|
|
@@ -49,7 +49,7 @@ function animatePreview(container: HTMLElement) {
|
|
|
49
49
|
const src = e.querySelector('.card__image')?.getAttribute('data-preview') as string;
|
|
50
50
|
|
|
51
51
|
const videoElem =
|
|
52
|
-
parseHtml(`<video style="position: absolute; left:
|
|
52
|
+
parseHtml(`<video style="position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%) scale(1.1); visibility: visible; margin-top: -1px;"
|
|
53
53
|
autoplay="" loop="" playsinline="true" webkit-playsinline="true" src="${src}"></video>`) as HTMLVideoElement;
|
|
54
54
|
e.appendChild(videoElem);
|
|
55
55
|
|
|
@@ -5,7 +5,7 @@ import { OnHover } from '../../utils';
|
|
|
5
5
|
|
|
6
6
|
export const meta: MonkeyUserScript = {
|
|
7
7
|
name: 'Eporner PervertMonkey',
|
|
8
|
-
version: '2.1.
|
|
8
|
+
version: '2.1.4',
|
|
9
9
|
description:
|
|
10
10
|
'Infinite scroll [optional], Filter by Title, Uploader, Duration and HD, Sort by Views and Duration',
|
|
11
11
|
match: ['https://*.eporner.com/*', 'https://*.eporner.*/*'],
|
|
@@ -33,7 +33,7 @@ const rules = new Rules({
|
|
|
33
33
|
strategy: 'auto',
|
|
34
34
|
remove: 'auto',
|
|
35
35
|
},
|
|
36
|
-
containerSelectorLast: '
|
|
36
|
+
containerSelectorLast: 'div:has(div[id^=vf][data-id])',
|
|
37
37
|
customDataFilterFns: [
|
|
38
38
|
{
|
|
39
39
|
qualityFilter: {
|
|
@@ -87,7 +87,7 @@ const rules = new Rules({
|
|
|
87
87
|
'Badge',
|
|
88
88
|
'Advanced',
|
|
89
89
|
],
|
|
90
|
-
gropeStrategy: 'all-in-
|
|
90
|
+
gropeStrategy: 'all-in-all',
|
|
91
91
|
animatePreview,
|
|
92
92
|
});
|
|
93
93
|
|
|
@@ -20,7 +20,9 @@ const rules = new Rules({
|
|
|
20
20
|
.filter((e) => e.children.length > 0 && e.checkVisibility())
|
|
21
21
|
.sort((a, b) => b.children.length - a.children.length)?.[0] as HTMLElement,
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
dataManagerOptions: {
|
|
24
|
+
containerHomogenity: { id: true, className: true },
|
|
25
|
+
},
|
|
24
26
|
thumbs: { selector: 'li[data-video-vkey]' },
|
|
25
27
|
thumb: {
|
|
26
28
|
selectors: {
|
|
@@ -3,13 +3,72 @@ import { Rules } from '../../core';
|
|
|
3
3
|
|
|
4
4
|
export const meta: MonkeyUserScript = {
|
|
5
5
|
name: 'Simpcity PervertMonkey',
|
|
6
|
-
version: '1.0.
|
|
7
|
-
description: 'Infinite scroll [optional], Filter by Title',
|
|
8
|
-
match:
|
|
6
|
+
version: '1.0.3',
|
|
7
|
+
description: 'Infinite scroll [optional], Filter by Title and Uploader, Sort by Views',
|
|
8
|
+
match: [
|
|
9
|
+
'https://simpcity.cr/threads/*',
|
|
10
|
+
'https://simpcity.cr/watched/threads*',
|
|
11
|
+
'https://simpcity.cr/forums/*',
|
|
12
|
+
'https://simpcity.cr/account/bookmarks*',
|
|
13
|
+
'https://simpcity.cr/tags/*',
|
|
14
|
+
],
|
|
9
15
|
'run-at': 'document-end',
|
|
10
16
|
};
|
|
11
17
|
|
|
12
|
-
const
|
|
18
|
+
const IS_WATCHED_THREADS = /^\/watched\/threads/.test(location.pathname);
|
|
19
|
+
const IS_FORUM_PAGE = /^\/forums\//.test(location.pathname);
|
|
20
|
+
const IS_BOOKMARKS_PAGE = /^\/account\/bookmarks/.test(location.pathname);
|
|
21
|
+
const IS_TAGS_PAGE = /^\/tags\//.test(location.pathname);
|
|
22
|
+
|
|
23
|
+
type RulesConfig = ConstructorParameters<typeof Rules>[0];
|
|
24
|
+
|
|
25
|
+
const structItemConfig: RulesConfig = {
|
|
26
|
+
containerSelectorLast: '.structItemContainer-group, .structItemContainer',
|
|
27
|
+
paginationStrategyOptions: {
|
|
28
|
+
paginationSelector: '.block-outer--after .pageNav',
|
|
29
|
+
pathnameSelector: /\/page-(\d+)\/?$/,
|
|
30
|
+
},
|
|
31
|
+
thumbs: {
|
|
32
|
+
selector: '.structItem.structItem--thread',
|
|
33
|
+
},
|
|
34
|
+
thumb: {
|
|
35
|
+
selectors: {
|
|
36
|
+
title: '.structItem-title a',
|
|
37
|
+
uploader: '.structItem-parts .username',
|
|
38
|
+
views: {
|
|
39
|
+
selector: '.structItem-cell--meta dl:nth-of-type(2) dd',
|
|
40
|
+
type: 'float',
|
|
41
|
+
},
|
|
42
|
+
replies: {
|
|
43
|
+
selector: '.structItem-cell--meta dl:nth-of-type(1) dd',
|
|
44
|
+
type: 'float',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
gropeStrategy: 'all-in-all',
|
|
49
|
+
schemeOptions: ['Title Filter', 'Uploader Filter', 'Sort By Views', 'Badge', 'Advanced'],
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const contentRowConfig: RulesConfig = {
|
|
53
|
+
containerSelector: 'ol.block-body, ol.listPlain',
|
|
54
|
+
paginationStrategyOptions: {
|
|
55
|
+
paginationSelector: '.block-outer--after .pageNav',
|
|
56
|
+
pathnameSelector: /\/page-(\d+)\/?$/,
|
|
57
|
+
},
|
|
58
|
+
thumbs: {
|
|
59
|
+
selector: 'li.block-row',
|
|
60
|
+
},
|
|
61
|
+
thumb: {
|
|
62
|
+
selectors: {
|
|
63
|
+
title: '.contentRow-title a',
|
|
64
|
+
uploader: '.contentRow-minor .username',
|
|
65
|
+
},
|
|
66
|
+
getUrlSelector: '.contentRow-title a',
|
|
67
|
+
},
|
|
68
|
+
schemeOptions: ['Title Filter', 'Uploader Filter', 'Badge', 'Advanced'],
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const threadConfig: RulesConfig = {
|
|
13
72
|
containerSelector: '.js-replyNewMessageContainer',
|
|
14
73
|
paginationStrategyOptions: {
|
|
15
74
|
paginationSelector: '.block-container + * .pageNav',
|
|
@@ -24,4 +83,12 @@ const rules = new Rules({
|
|
|
24
83
|
},
|
|
25
84
|
gropeStrategy: 'all-in-all',
|
|
26
85
|
schemeOptions: ['Title Filter', 'Badge', 'Advanced'],
|
|
27
|
-
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const rules = new Rules(
|
|
89
|
+
IS_BOOKMARKS_PAGE || IS_TAGS_PAGE
|
|
90
|
+
? contentRowConfig
|
|
91
|
+
: IS_WATCHED_THREADS || IS_FORUM_PAGE
|
|
92
|
+
? structItemConfig
|
|
93
|
+
: threadConfig,
|
|
94
|
+
);
|