pervert-monkey 1.0.7 → 1.0.8
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/userscripts/3hentai.user.js +34 -0
- package/dist/userscripts/camgirlfinder.user.js +66 -0
- package/dist/userscripts/camwhores.user.js +375 -0
- package/dist/userscripts/e-hentai.user.js +70 -0
- package/dist/userscripts/ebalka.user.js +63 -0
- package/dist/userscripts/eporner.user.js +103 -0
- package/dist/userscripts/erome.user.js +105 -0
- package/dist/userscripts/eroprofile.user.js +52 -0
- package/dist/userscripts/javhdporn.user.js +36 -0
- package/dist/userscripts/missav.user.js +40 -0
- package/dist/userscripts/motherless.user.js +178 -0
- package/dist/userscripts/namethatporn.user.js +77 -0
- package/dist/userscripts/nhentai.user.js +120 -0
- package/dist/userscripts/pornhub.user.js +57 -0
- package/dist/userscripts/spankbang.user.js +71 -0
- package/dist/userscripts/thisvid.user.js +1411 -0
- package/dist/userscripts/xhamster.user.js +161 -0
- package/dist/userscripts/xvideos.user.js +87 -0
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Eporner PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 2.0.2
|
|
5
|
+
// @author violent-orangutan
|
|
6
|
+
// @description Infinite scroll [optional], Filter by Title, Duration and HD
|
|
7
|
+
// @license MIT
|
|
8
|
+
// @icon https://www.google.com/s2/favicons?sz=64&domain=eporner.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://*.eporner.com/*
|
|
14
|
+
// @match https://*.eporner.*/*
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/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 _unsafeWindow = (() => typeof unsafeWindow != "undefined" ? unsafeWindow : undefined)();
|
|
26
|
+
|
|
27
|
+
const show_video_prev = _unsafeWindow.show_video_prev;
|
|
28
|
+
new core.RulesGlobal({
|
|
29
|
+
paginationStrategyOptions: {
|
|
30
|
+
paginationSelector: ".numlist2"
|
|
31
|
+
},
|
|
32
|
+
customThumbDataSelectors: {
|
|
33
|
+
quality: { type: "number", selector: '[title="Quality"]' }
|
|
34
|
+
},
|
|
35
|
+
containerSelectorLast: "#vidresults",
|
|
36
|
+
thumbsSelector: "div[id^=vf][data-id]",
|
|
37
|
+
uploaderSelector: '[title="Uploader"]',
|
|
38
|
+
titleSelector: "a",
|
|
39
|
+
durationSelector: '[title="Duration"]',
|
|
40
|
+
getThumbImgDataStrategy: "auto",
|
|
41
|
+
getThumbImgDataAttrDelete: "auto",
|
|
42
|
+
customDataSelectorFns: [
|
|
43
|
+
"filterInclude",
|
|
44
|
+
"filterExclude",
|
|
45
|
+
"filterDuration",
|
|
46
|
+
{
|
|
47
|
+
quality360: (el, state) => !!state.quality360 && el.quality !== 360
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
quality480: (el, state) => !!state.quality480 && el.quality !== 480
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
quality720: (el, state) => !!state.quality720 && el.quality !== 720
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
quality1080: (el, state) => !!state.quality1080 && el.quality !== 1080
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
quality4k: (el, state) => !!state.quality4k && el.quality !== 4
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
schemeOptions: [
|
|
63
|
+
"Text Filter",
|
|
64
|
+
"Badge",
|
|
65
|
+
"Duration Filter",
|
|
66
|
+
{
|
|
67
|
+
title: "Quality Filter ",
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
quality360: false
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
quality480: false
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
quality720: false
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
quality1080: false
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
quality4k: false
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"Advanced"
|
|
87
|
+
],
|
|
88
|
+
animatePreview
|
|
89
|
+
});
|
|
90
|
+
function animatePreview(doc) {
|
|
91
|
+
utils.OnHover.create(
|
|
92
|
+
doc,
|
|
93
|
+
(e) => e instanceof HTMLImageElement,
|
|
94
|
+
(e) => {
|
|
95
|
+
const target = e;
|
|
96
|
+
const thumb = target.closest("[data-id]");
|
|
97
|
+
const id = thumb?.getAttribute("data-id");
|
|
98
|
+
show_video_prev(id);
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
})(core, utils);
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Erome PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 5.0.1
|
|
5
|
+
// @author violent-orangutan
|
|
6
|
+
// @description Infinite scroll [optional], Filter by Title and Video/Photo albums
|
|
7
|
+
// @license MIT
|
|
8
|
+
// @icon https://www.google.com/s2/favicons?sz=64&domain=erome.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 *://*.erome.com/*
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/dist/core/pervertmonkey.core.umd.js
|
|
15
|
+
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
|
+
// @grant GM_addStyle
|
|
17
|
+
// @grant unsafeWindow
|
|
18
|
+
// @run-at document-idle
|
|
19
|
+
// ==/UserScript==
|
|
20
|
+
|
|
21
|
+
(function (core) {
|
|
22
|
+
'use strict';
|
|
23
|
+
|
|
24
|
+
var _GM_addStyle = (() => typeof GM_addStyle != "undefined" ? GM_addStyle : undefined)();
|
|
25
|
+
var _unsafeWindow = (() => typeof unsafeWindow != "undefined" ? unsafeWindow : undefined)();
|
|
26
|
+
|
|
27
|
+
const $ = _unsafeWindow.$;
|
|
28
|
+
const rules = new core.RulesGlobal({
|
|
29
|
+
containerSelector: "#albums",
|
|
30
|
+
thumbsSelector: "div[id^=album-]",
|
|
31
|
+
titleSelector: ".album-title",
|
|
32
|
+
uploaderSelector: ".album-user",
|
|
33
|
+
gropeStrategy: "all-in-one",
|
|
34
|
+
customThumbDataSelectors: {
|
|
35
|
+
videoAlbum: {
|
|
36
|
+
type: "boolean",
|
|
37
|
+
selector: ".album-videos"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
storeOptions: { showPhotos: true },
|
|
41
|
+
customDataSelectorFns: [
|
|
42
|
+
"filterInclude",
|
|
43
|
+
"filterExclude",
|
|
44
|
+
{
|
|
45
|
+
filterPhotoAlbums: (el, state) => state.filterPhotoAlbums && !el.videoAlbum
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
filterVideoAlbums: (el, state) => state.filterVideoAlbums && el.videoAlbum
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
schemeOptions: [
|
|
52
|
+
"Text Filter",
|
|
53
|
+
{
|
|
54
|
+
title: "Filter Albums",
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
filterVideoAlbums: false,
|
|
58
|
+
label: "video albums"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
filterPhotoAlbums: false,
|
|
62
|
+
label: "photo albums"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"Badge",
|
|
67
|
+
"Advanced"
|
|
68
|
+
]
|
|
69
|
+
});
|
|
70
|
+
rules.infiniteScroller?.onScroll(() => {
|
|
71
|
+
setTimeout(() => new LazyLoad(), 100);
|
|
72
|
+
});
|
|
73
|
+
_GM_addStyle(`
|
|
74
|
+
.inactive-gm { background: #a09f9d; }
|
|
75
|
+
.active-gm { background: #eb6395 !important; }
|
|
76
|
+
`);
|
|
77
|
+
(function disableDisclaimer() {
|
|
78
|
+
if (!$("#disclaimer").length) return;
|
|
79
|
+
$.ajax({ type: "POST", url: "/user/disclaimer", async: true });
|
|
80
|
+
$("#disclaimer").remove();
|
|
81
|
+
$("body").css("overflow", "visible");
|
|
82
|
+
})();
|
|
83
|
+
const IS_ALBUM_PAGE = /^\/a\//.test(window.location.pathname);
|
|
84
|
+
function togglePhotoElements() {
|
|
85
|
+
$(".media-group > div:last-child:not(.video)").toggle(rules.store.state.showPhotos);
|
|
86
|
+
$("#togglePhotos").toggleClass("active-gm", rules.store.state.showPhotos);
|
|
87
|
+
$("#togglePhotos").text(!rules.store.state.showPhotos ? "show photos" : "hide photos");
|
|
88
|
+
}
|
|
89
|
+
function setupAlbumPage() {
|
|
90
|
+
$("#user_name").parent().append(
|
|
91
|
+
'<button id="togglePhotos" class="btn btn-pink inactive-gm">show/hide photos</button>'
|
|
92
|
+
);
|
|
93
|
+
$("#togglePhotos").on("click", () => {
|
|
94
|
+
rules.store.state.showPhotos = !rules.store.state.showPhotos;
|
|
95
|
+
});
|
|
96
|
+
rules.store.stateSubject.subscribe(() => {
|
|
97
|
+
togglePhotoElements();
|
|
98
|
+
});
|
|
99
|
+
togglePhotoElements();
|
|
100
|
+
}
|
|
101
|
+
if (IS_ALBUM_PAGE) {
|
|
102
|
+
setupAlbumPage();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
})(core);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Eroprofile PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 2.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=eroprofile.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://*.eroprofile.com/*
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/dist/core/pervertmonkey.core.umd.js
|
|
15
|
+
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
|
+
// @grant GM_addStyle
|
|
17
|
+
// @grant unsafeWindow
|
|
18
|
+
// @run-at document-idle
|
|
19
|
+
// ==/UserScript==
|
|
20
|
+
|
|
21
|
+
(function (core) {
|
|
22
|
+
'use strict';
|
|
23
|
+
|
|
24
|
+
document.querySelector(".videoGrid")?.after(document.querySelector(".clB"));
|
|
25
|
+
new core.RulesGlobal({
|
|
26
|
+
paginationStrategyOptions: {
|
|
27
|
+
paginationSelector: ".boxNav2",
|
|
28
|
+
searchParamSelector: "pnum"
|
|
29
|
+
},
|
|
30
|
+
titleSelector: "[title]",
|
|
31
|
+
durationSelector: ".videoDur",
|
|
32
|
+
containerSelector: ".videoGrid",
|
|
33
|
+
thumbsSelector: ".video",
|
|
34
|
+
customDataSelectorFns: ["filterInclude", "filterExclude", "filterDuration"],
|
|
35
|
+
schemeOptions: [
|
|
36
|
+
"Text Filter",
|
|
37
|
+
"Duration Filter",
|
|
38
|
+
{
|
|
39
|
+
title: "Sort By ",
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
"sort by duration": () => {
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"Badge",
|
|
48
|
+
"Advanced"
|
|
49
|
+
]
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
})(core);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Javhdporn PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 3.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=javhdporn.net
|
|
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://*.javhdporn.net/*
|
|
14
|
+
// @match https://*.javhdporn.*/*
|
|
15
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/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) {
|
|
23
|
+
'use strict';
|
|
24
|
+
|
|
25
|
+
new core.RulesGlobal({
|
|
26
|
+
containerSelector: "div:has(> article)",
|
|
27
|
+
thumbsSelector: "article.thumb-block",
|
|
28
|
+
titleSelector: "header.entry-header",
|
|
29
|
+
durationSelector: ".duration",
|
|
30
|
+
paginationStrategyOptions: {
|
|
31
|
+
pathnameSelector: /\/page\/(\d+)\/?$/
|
|
32
|
+
},
|
|
33
|
+
schemeOptions: ["Text Filter", "Badge", "Duration Filter", "Advanced"]
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
})(core);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Missav PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 3.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=missav123.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://*.missav123.com/*
|
|
14
|
+
// @match https://*.missav.*/*
|
|
15
|
+
// @match https://*.missav.ws/*
|
|
16
|
+
// @match https://*.missav.to/*
|
|
17
|
+
// @match https://*.missav.live/*
|
|
18
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/dist/core/pervertmonkey.core.umd.js
|
|
19
|
+
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
20
|
+
// @grant GM_addStyle
|
|
21
|
+
// @grant unsafeWindow
|
|
22
|
+
// @run-at document-idle
|
|
23
|
+
// ==/UserScript==
|
|
24
|
+
|
|
25
|
+
(function (core) {
|
|
26
|
+
'use strict';
|
|
27
|
+
|
|
28
|
+
new core.RulesGlobal({
|
|
29
|
+
paginationStrategyOptions: {
|
|
30
|
+
paginationSelector: "nav[x-data]"
|
|
31
|
+
},
|
|
32
|
+
containerSelector: ".grid[x-data]",
|
|
33
|
+
thumbsSelector: "div:has(> .thumbnail.group)",
|
|
34
|
+
getThumbImgDataStrategy: "auto",
|
|
35
|
+
titleSelector: "div > div > a.text-secondary",
|
|
36
|
+
durationSelector: "div > a > span.text-xs",
|
|
37
|
+
schemeOptions: ["Text Filter", "Duration Filter", "Badge", "Advanced"]
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
})(core);
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Motherless PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 5.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=motherless.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://motherless.com/*
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/dist/core/pervertmonkey.core.umd.js
|
|
15
|
+
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
|
+
// @grant GM_addStyle
|
|
17
|
+
// @grant unsafeWindow
|
|
18
|
+
// @run-at document-idle
|
|
19
|
+
// ==/UserScript==
|
|
20
|
+
|
|
21
|
+
(function (core, utils) {
|
|
22
|
+
'use strict';
|
|
23
|
+
|
|
24
|
+
var _GM_addStyle = (() => typeof GM_addStyle != "undefined" ? GM_addStyle : undefined)();
|
|
25
|
+
var _unsafeWindow = (() => typeof unsafeWindow != "undefined" ? unsafeWindow : undefined)();
|
|
26
|
+
|
|
27
|
+
_unsafeWindow.__is_premium = true;
|
|
28
|
+
const $ = _unsafeWindow.$;
|
|
29
|
+
const rules = new core.RulesGlobal({
|
|
30
|
+
containerSelectorLast: ".content-inner",
|
|
31
|
+
thumbsSelector: ".thumb-container, .mobile-thumb",
|
|
32
|
+
uploaderSelector: ".uploader",
|
|
33
|
+
titleSelector: ".title",
|
|
34
|
+
durationSelector: ".size",
|
|
35
|
+
getThumbImgDataStrategy: "auto",
|
|
36
|
+
paginationStrategyOptions: {
|
|
37
|
+
paginationSelector: ".pagination_link, .ml-pagination"
|
|
38
|
+
},
|
|
39
|
+
animatePreview,
|
|
40
|
+
gropeStrategy: "all-in-all",
|
|
41
|
+
schemeOptions: ["Text Filter", "Duration Filter", "Badge", "Advanced"]
|
|
42
|
+
});
|
|
43
|
+
function animatePreview(_) {
|
|
44
|
+
const ANIMATION_INTERVAL = 500;
|
|
45
|
+
const tick = new utils.Tick(ANIMATION_INTERVAL);
|
|
46
|
+
let currentOverlay = null;
|
|
47
|
+
function onLeave(target) {
|
|
48
|
+
tick.stop();
|
|
49
|
+
const img = target.querySelector("img.static");
|
|
50
|
+
img.classList.remove("animating");
|
|
51
|
+
if (currentOverlay) {
|
|
52
|
+
currentOverlay.style.display = "none";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function onOver(target) {
|
|
56
|
+
$(".video").off();
|
|
57
|
+
const container = target.closest(".desktop-thumb.video");
|
|
58
|
+
const img = container.querySelector("img.static");
|
|
59
|
+
const stripSrc = img.getAttribute("data-strip-src");
|
|
60
|
+
img.classList.add("animating");
|
|
61
|
+
let overlay = img.nextElementSibling;
|
|
62
|
+
if (!overlay || overlay.tagName !== "DIV") {
|
|
63
|
+
overlay = document.createElement("div");
|
|
64
|
+
overlay.setAttribute(
|
|
65
|
+
"style",
|
|
66
|
+
"z-index: 8; position: absolute; top: 0; left: 0; pointer-events: none;"
|
|
67
|
+
);
|
|
68
|
+
img.parentNode?.insertBefore(overlay, img.nextSibling);
|
|
69
|
+
}
|
|
70
|
+
currentOverlay = overlay;
|
|
71
|
+
overlay.style.display = "block";
|
|
72
|
+
let j = 0;
|
|
73
|
+
const containerHeight = container.offsetHeight;
|
|
74
|
+
tick.start(() => {
|
|
75
|
+
const w = img.offsetWidth;
|
|
76
|
+
const h = img.offsetHeight;
|
|
77
|
+
const widthRatio = Math.floor(1000.303 * w / 100);
|
|
78
|
+
const heightRatio = Math.floor(228.6666 * h / 100);
|
|
79
|
+
const verticalOffset = (containerHeight - h) / 2;
|
|
80
|
+
Object.assign(overlay.style, {
|
|
81
|
+
width: `${w}px`,
|
|
82
|
+
height: `${containerHeight}px`,
|
|
83
|
+
backgroundImage: `url('${stripSrc}')`,
|
|
84
|
+
backgroundSize: `${widthRatio}px ${heightRatio}px`,
|
|
85
|
+
backgroundPosition: `-${j++ * w % widthRatio}px ${verticalOffset}px`,
|
|
86
|
+
backgroundRepeat: "no-repeat"
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
const onOverCallback = () => onLeave(container);
|
|
90
|
+
return { onOverCallback, leaveTarget: container };
|
|
91
|
+
}
|
|
92
|
+
utils.OnHover.create(
|
|
93
|
+
document.body,
|
|
94
|
+
(e) => {
|
|
95
|
+
const container = e.closest(".desktop-thumb.video");
|
|
96
|
+
if (!container) return false;
|
|
97
|
+
const img = container.querySelector("img.static");
|
|
98
|
+
if (!img) return false;
|
|
99
|
+
const stripSrc = img.getAttribute("data-strip-src");
|
|
100
|
+
if (!stripSrc || img.classList.contains("animating")) return false;
|
|
101
|
+
return true;
|
|
102
|
+
},
|
|
103
|
+
onOver
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
function fixURLs() {
|
|
107
|
+
document.querySelectorAll(".gallery-container").forEach((g) => {
|
|
108
|
+
const x = g.innerText.match(/([\d|.]+)k? videos/gi)?.[0];
|
|
109
|
+
const hasVideos = parseInt(x) > 0;
|
|
110
|
+
const header = hasVideos ? "/GV" : "/GI";
|
|
111
|
+
g.querySelectorAll("a").forEach((a) => {
|
|
112
|
+
a.href = a.href.replace(/\/G/, () => header);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
document.querySelectorAll('a[href^="/term/"]:not([href^="/term/videos/"])').forEach((a) => {
|
|
116
|
+
a.href = a.href.replace(
|
|
117
|
+
/[\w|+]+$/,
|
|
118
|
+
(v) => `videos/${v}?term=${v}&range=0&size=0&sort=date`
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
document.querySelectorAll('#media-groups-container a[href^="/g/"]').forEach((a) => {
|
|
122
|
+
a.href = a.href.replace(/\/g\//, "/gv/");
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function mobileGalleryToDesktop(e) {
|
|
126
|
+
e.querySelector(".clear-left")?.remove();
|
|
127
|
+
const container = e.firstElementChild;
|
|
128
|
+
container.appendChild(container.nextElementSibling);
|
|
129
|
+
e.className = "thumb-container gallery-container";
|
|
130
|
+
container.className = "desktop-thumb image medium";
|
|
131
|
+
(container.firstElementChild?.nextElementSibling).className = "gallery-captions";
|
|
132
|
+
utils.replaceElementTag(container.firstElementChild, "a");
|
|
133
|
+
return e;
|
|
134
|
+
}
|
|
135
|
+
async function desktopAddMobGalleries() {
|
|
136
|
+
const galleries = document.querySelector(".media-related-galleries");
|
|
137
|
+
if (!galleries) return;
|
|
138
|
+
const galleriesContainer = galleries.querySelector(".content-inner");
|
|
139
|
+
const galleriesCount = galleries.querySelectorAll(".gallery-container").length;
|
|
140
|
+
const mobDom = await utils.fetchWith(window.location.href, { type: "html", mobile: true });
|
|
141
|
+
const mobGalleries = mobDom.querySelectorAll(
|
|
142
|
+
".ml-gallery-thumb"
|
|
143
|
+
);
|
|
144
|
+
for (const [i, x] of mobGalleries.entries()) {
|
|
145
|
+
if (i > galleriesCount - 1) {
|
|
146
|
+
galleriesContainer.append(mobileGalleryToDesktop(x));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const overwrite1 = (x) => `@media only screen and (max-width: 1280px) {
|
|
151
|
+
#categories-page.inner ${x} }`;
|
|
152
|
+
rules.dataManager.dataFilter.applyCSSFilters(overwrite1);
|
|
153
|
+
_GM_addStyle(`
|
|
154
|
+
.img-container, .desktop-thumb { min-height: 150px; max-height: 150px; }
|
|
155
|
+
|
|
156
|
+
.group-minibio, .gallery-container { display: block !important; }
|
|
157
|
+
|
|
158
|
+
.ml-masonry-images.masonry-columns-4 .content-inner { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
|
159
|
+
.ml-masonry-images.masonry-columns-6 .content-inner { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); }
|
|
160
|
+
.ml-masonry-images.masonry-columns-8 .content-inner { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); }
|
|
161
|
+
`);
|
|
162
|
+
function applySearchFilters() {
|
|
163
|
+
let pathname = window.location.pathname;
|
|
164
|
+
const wordsToFilter = rules.store.state.filterExcludeWords.replace(/f:/g, "").match(/(?<!user:)\b\w+\b(?!\s*:)/g) || [];
|
|
165
|
+
wordsToFilter.filter((w) => !pathname.includes(w)).forEach((w) => {
|
|
166
|
+
pathname += `+-${w.trim()}`;
|
|
167
|
+
});
|
|
168
|
+
if (wordsToFilter.some((w) => !window.location.href.includes(w))) {
|
|
169
|
+
window.location.href = pathname;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
desktopAddMobGalleries().then(() => fixURLs());
|
|
173
|
+
const IS_SEARCH = /^\/term\//.test(location.pathname);
|
|
174
|
+
if (IS_SEARCH) {
|
|
175
|
+
applySearchFilters();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
})(core, utils);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name NameThatPorn PervertMonkey
|
|
3
|
+
// @namespace pervertmonkey
|
|
4
|
+
// @version 3.0.1
|
|
5
|
+
// @author violent-orangutan
|
|
6
|
+
// @description Infinite scroll [optional], Filter by Title and Un/Solved
|
|
7
|
+
// @license MIT
|
|
8
|
+
// @icon https://www.google.com/s2/favicons?sz=64&domain=namethatporn.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://namethatporn.com/*
|
|
14
|
+
// @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/dist/core/pervertmonkey.core.umd.js
|
|
15
|
+
// @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
|
|
16
|
+
// @grant GM_addStyle
|
|
17
|
+
// @grant unsafeWindow
|
|
18
|
+
// @run-at document-idle
|
|
19
|
+
// ==/UserScript==
|
|
20
|
+
|
|
21
|
+
(function (core) {
|
|
22
|
+
'use strict';
|
|
23
|
+
|
|
24
|
+
var _unsafeWindow = (() => typeof unsafeWindow != "undefined" ? unsafeWindow : undefined)();
|
|
25
|
+
|
|
26
|
+
new core.RulesGlobal({
|
|
27
|
+
thumbsSelector: ".item, .nsw_r_w",
|
|
28
|
+
containerSelector: "#items_wrapper, #nsw_r",
|
|
29
|
+
titleSelector: ".item_title, .nsw_r_tit",
|
|
30
|
+
uploaderSelector: ".item_answer b, .nsw_r_desc",
|
|
31
|
+
paginationStrategyOptions: {
|
|
32
|
+
paginationSelector: "#smi_wrp, #nsw_p"
|
|
33
|
+
},
|
|
34
|
+
customThumbDataSelectors: {
|
|
35
|
+
solved: {
|
|
36
|
+
type: "boolean",
|
|
37
|
+
selector: ".item_solved, .nsw_r_slvd"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
gropeStrategy: "all-in-all",
|
|
41
|
+
getThumbImgDataStrategy: "auto",
|
|
42
|
+
getThumbImgDataAttrSelector: (img) => img.getAttribute("data-dyn")?.concat(".webp") || img.getAttribute("src"),
|
|
43
|
+
customDataSelectorFns: [
|
|
44
|
+
"filterInclude",
|
|
45
|
+
"filterExclude",
|
|
46
|
+
{
|
|
47
|
+
filterSolved: (el, state) => state.filterSolved && el.solved
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
filterUnsolved: (el, state) => state.filterUnsolved && !el.solved
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
schemeOptions: [
|
|
54
|
+
"Text Filter",
|
|
55
|
+
{
|
|
56
|
+
title: "Filter Status",
|
|
57
|
+
content: [
|
|
58
|
+
{ filterSolved: false, label: "solved" },
|
|
59
|
+
{ filterUnsolved: false, label: "unsolved" }
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"Badge",
|
|
63
|
+
"Advanced"
|
|
64
|
+
]
|
|
65
|
+
});
|
|
66
|
+
_unsafeWindow.confirm = () => true;
|
|
67
|
+
function handleKeys(event) {
|
|
68
|
+
if (event.key === "c") {
|
|
69
|
+
const name = document.querySelector("#loggedin_box_new_username")?.innerText;
|
|
70
|
+
if (!document.querySelector(`.ida_confirm_usernames a[href$="${name}.html"]`)) {
|
|
71
|
+
document.querySelector(".id_answer_buttons > .iab.iac")?.click();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
_unsafeWindow.addEventListener("keydown", handleKeys, { once: true });
|
|
76
|
+
|
|
77
|
+
})(core);
|