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.
Files changed (37) hide show
  1. package/dist/core/pervertmonkey.core.es.js +12 -8
  2. package/dist/core/pervertmonkey.core.es.js.map +1 -1
  3. package/dist/core/pervertmonkey.core.umd.js +12 -8
  4. package/dist/core/pervertmonkey.core.umd.js.map +1 -1
  5. package/dist/userscripts/3hentai.user.js +1 -1
  6. package/dist/userscripts/camgirlfinder.user.js +1 -1
  7. package/dist/userscripts/camwhores.user.js +1 -1
  8. package/dist/userscripts/e-hentai.user.js +1 -1
  9. package/dist/userscripts/ebalka.user.js +2 -2
  10. package/dist/userscripts/eporner.user.js +4 -4
  11. package/dist/userscripts/erome.user.js +1 -1
  12. package/dist/userscripts/eroprofile.user.js +1 -1
  13. package/dist/userscripts/javhdporn.user.js +1 -1
  14. package/dist/userscripts/missav.user.js +1 -1
  15. package/dist/userscripts/motherless.user.js +1 -1
  16. package/dist/userscripts/namethatporn.user.js +1 -1
  17. package/dist/userscripts/nhentai.user.js +1 -1
  18. package/dist/userscripts/obmenvsem.user.js +1 -1
  19. package/dist/userscripts/pornhub.user.js +3 -3
  20. package/dist/userscripts/simpcity.user.js +59 -4
  21. package/dist/userscripts/socialmediagirls.user.js +1 -1
  22. package/dist/userscripts/spankbang.user.js +1 -1
  23. package/dist/userscripts/thisvid.user.js +1 -1
  24. package/dist/userscripts/xhamster.user.js +1 -1
  25. package/dist/userscripts/xmegadrive.user.js +82 -0
  26. package/dist/userscripts/xvideos.user.js +1 -1
  27. package/package.json +1 -1
  28. package/src/core/data-handler/data-filter.ts +1 -2
  29. package/src/core/data-handler/data-manager.ts +11 -3
  30. package/src/core/rules/index.ts +3 -3
  31. package/src/userscripts/index.ts +1 -1
  32. package/src/userscripts/scripts/ebalka.ts +1 -1
  33. package/src/userscripts/scripts/eporner.ts +3 -3
  34. package/src/userscripts/scripts/pornhub.ts +3 -1
  35. package/src/userscripts/scripts/simpcity.ts +72 -5
  36. package/src/userscripts/scripts/xhamster.ts +1 -1
  37. 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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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: 0px; top: 0px; visibility: visible; margin-top: -1px;"
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.3
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.26/dist/core/pervertmonkey.core.umd.js
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: "#vidresults",
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-one",
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.2
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
- // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.26/dist/core/pervertmonkey.core.umd.js
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
- new ___core.Rules({
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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.26/dist/core/pervertmonkey.core.umd.js
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
@@ -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.26",
4
+ "version": "1.0.27",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "userscript",
@@ -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
- private rules: Rules,
20
- private containerHomogenity?: Parameters<typeof areElementsAlike>[2],
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 = false,
76
+ removeDuplicates = this.removeDuplicates,
69
77
  shouldLazify = true,
70
78
  ) {
71
79
  const thumbs = this.rules.thumbsParser.getThumbs(html);
@@ -62,7 +62,7 @@ export class Rules {
62
62
  public paginationStrategy: PaginationStrategy;
63
63
 
64
64
  public dataManager: DataManager;
65
- public containerHomogenity: ConstructorParameters<typeof DataManager>[1];
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 = new DataManager(this, this.containerHomogenity);
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 = new DataManager(this, this.containerHomogenity);
191
+ this.dataManager = DataManager.create(this, this.dataManagerOptions);
192
192
  this.inputController = new JabronioGuiController(this.store, this.dataManager);
193
193
 
194
194
  this.reset();
@@ -1 +1 @@
1
- import './scripts/eporner';
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: 0px; top: 0px; visibility: visible; margin-top: -1px;"
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.3',
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: '#vidresults',
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-one',
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
- containerHomogenity: { id: true, className: true },
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.2',
7
- description: 'Infinite scroll [optional], Filter by Title',
8
- match: 'https://simpcity.cr/threads/*',
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 rules = new Rules({
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
+ );