pervert-monkey 1.0.13 → 1.0.17

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 (58) hide show
  1. package/dist/core/pervertmonkey.core.es.d.ts +90 -36
  2. package/dist/core/pervertmonkey.core.es.js +258 -129
  3. package/dist/core/pervertmonkey.core.es.js.map +1 -1
  4. package/dist/core/pervertmonkey.core.umd.js +258 -129
  5. package/dist/core/pervertmonkey.core.umd.js.map +1 -1
  6. package/dist/userscripts/3hentai.user.js +4 -5
  7. package/dist/userscripts/camgirlfinder.user.js +2 -2
  8. package/dist/userscripts/camwhores.user.js +7 -16
  9. package/dist/userscripts/e-hentai.user.js +8 -8
  10. package/dist/userscripts/ebalka.user.js +18 -10
  11. package/dist/userscripts/eporner.user.js +24 -41
  12. package/dist/userscripts/erome.user.js +13 -16
  13. package/dist/userscripts/eroprofile.user.js +5 -14
  14. package/dist/userscripts/javhdporn.user.js +6 -5
  15. package/dist/userscripts/missav.user.js +10 -4
  16. package/dist/userscripts/motherless.user.js +13 -6
  17. package/dist/userscripts/namethatporn.user.js +10 -16
  18. package/dist/userscripts/nhentai.user.js +5 -13
  19. package/dist/userscripts/obmenvsem.user.js +11 -4
  20. package/dist/userscripts/pornhub.user.js +14 -6
  21. package/dist/userscripts/spankbang.user.js +28 -7
  22. package/dist/userscripts/thisvid.user.js +15 -33
  23. package/dist/userscripts/xhamster.user.js +13 -18
  24. package/dist/userscripts/xvideos.user.js +33 -5
  25. package/package.json +1 -1
  26. package/src/core/data-handler/data-filter-fn-defaults.ts +52 -0
  27. package/src/core/data-handler/data-filter-fn.ts +62 -0
  28. package/src/core/data-handler/data-filter.ts +31 -103
  29. package/src/core/data-handler/data-manager.ts +91 -28
  30. package/src/core/jabroni-config/default-scheme.ts +54 -5
  31. package/src/core/jabroni-config/index.ts +1 -0
  32. package/src/core/jabroni-config/jabroni-gui-controller.ts +1 -1
  33. package/src/core/jabroni-config/scheme-selectors-mapping.ts +12 -0
  34. package/src/core/parsers/thumb-data-parser.ts +15 -19
  35. package/src/core/rules/index.ts +15 -9
  36. package/src/userscripts/index.ts +1 -1
  37. package/src/userscripts/scripts/3hentai.ts +3 -4
  38. package/src/userscripts/scripts/camgirlfinder.ts +1 -1
  39. package/src/userscripts/scripts/camwhores.ts +5 -14
  40. package/src/userscripts/scripts/e-hentai.ts +12 -12
  41. package/src/userscripts/scripts/ebalka.ts +16 -8
  42. package/src/userscripts/scripts/eporner.ts +23 -39
  43. package/src/userscripts/scripts/erome.ts +13 -17
  44. package/src/userscripts/scripts/eroprofile.ts +4 -12
  45. package/src/userscripts/scripts/javhdporn.ts +7 -8
  46. package/src/userscripts/scripts/missav.ts +10 -4
  47. package/src/userscripts/scripts/motherless.ts +13 -7
  48. package/src/userscripts/scripts/namethatporn.ts +10 -17
  49. package/src/userscripts/scripts/nhentai.ts +6 -13
  50. package/src/userscripts/scripts/obmenvsem.ts +14 -4
  51. package/src/userscripts/scripts/pornhub.ts +13 -4
  52. package/src/userscripts/scripts/spankbang.ts +29 -5
  53. package/src/userscripts/scripts/thisvid.ts +16 -31
  54. package/src/userscripts/scripts/xhamster.ts +13 -18
  55. package/src/userscripts/scripts/xvideos.ts +32 -3
  56. package/src/utils/dom/dom-observers.ts +3 -3
  57. package/src/utils/dom/index.ts +1 -1
  58. package/src/utils/parsers/index.ts +5 -2
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name 3Hentai PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 1.0.4
4
+ // @version 1.0.7
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title
6
+ // @description Infinite scroll [optional], Filter by Title, thumb preview
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=3hentai.net
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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://*.3hentai.net/*
14
- // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.13/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -35,8 +35,7 @@
35
35
  strategy: "auto"
36
36
  },
37
37
  gropeStrategy: "all-in-all",
38
- customDataSelectorFns: ["filterInclude", "filterExclude"],
39
- schemeOptions: ["Text Filter", "Badge", "Advanced"],
38
+ schemeOptions: ["Title Filter", "Badge", "Advanced"],
40
39
  animatePreview
41
40
  });
42
41
  function animatePreview() {
@@ -1,7 +1,7 @@
1
1
  // ==UserScript==
2
2
  // @name CamGirlFinder PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 1.6.2
4
+ // @version 1.6.6
5
5
  // @author violent-orangutan
6
6
  // @description Adds model links for CamWhores, webcamrecordings, recu.me, camvideos, privat-zapisi
7
7
  // @license MIT
@@ -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.13/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name CamWhores PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 3.0.6
4
+ // @version 3.0.10
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional]. Filter by Title, Duration and Private/Public. Mass friend request button. Download button
6
+ // @description Infinite scroll [optional]. Filter by Title, Duration and Private/Public. Sort by Duration and Views. Mass friend request button. Download button
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=camwhores.tv
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
16
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -103,28 +103,19 @@
103
103
  thumb: {
104
104
  strategy: "auto-select",
105
105
  selectors: {
106
- private: { type: "boolean", selector: "[class*=private]" }
106
+ private: { type: "boolean", selector: "[class*=private]" },
107
+ views: { selector: ".views", type: "float" }
107
108
  }
108
109
  },
109
110
  thumbImg: {
110
111
  selector: "data-original"
111
112
  },
112
113
  gropeStrategy: "all-in-all",
113
- customDataSelectorFns: [
114
- "filterInclude",
115
- "filterExclude",
116
- "filterDuration",
117
- {
118
- filterPrivate: (e, state) => state.filterPrivate && e.private
119
- },
120
- {
121
- filterPublic: (e, state) => state.filterPublic && !e.private
122
- }
123
- ],
124
114
  schemeOptions: [
125
- "Text Filter",
115
+ "Title Filter",
126
116
  "Duration Filter",
127
117
  "Privacy Filter",
118
+ "Sort By",
128
119
  "Badge",
129
120
  {
130
121
  title: "Advanced",
@@ -1,7 +1,7 @@
1
1
  // ==UserScript==
2
2
  // @name E-Hentai PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 1.0.2
4
+ // @version 1.0.7
5
5
  // @author violent-orangutan
6
6
  // @description Infinite scroll [optional], Filter by Title
7
7
  // @license MIT
@@ -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.13/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -33,15 +33,14 @@
33
33
  },
34
34
  containerSelectorLast: ".itg.gld",
35
35
  paginationStrategyOptions: createPaginationStrategyOptions(),
36
- customDataSelectorFns: ["filterInclude", "filterExclude"],
37
- schemeOptions: ["Text Filter", "Badge", "Advanced"]
36
+ schemeOptions: ["Title Filter", "Badge", "Advanced"]
38
37
  });
39
38
  function createPaginationStrategyOptions() {
40
39
  let nextLink;
40
+ function getNextLink(doc = document) {
41
+ return [...doc.querySelectorAll("a#dnext[href]")].pop()?.href;
42
+ }
41
43
  function getPaginationUrlGenerator() {
42
- function getNextLink(doc = document) {
43
- return [...doc.querySelectorAll("a#dnext[href]")].pop()?.href;
44
- }
45
44
  const paginationUrlGenerator = async (_) => {
46
45
  if (!nextLink) {
47
46
  nextLink = getNextLink();
@@ -53,9 +52,10 @@
53
52
  };
54
53
  return paginationUrlGenerator;
55
54
  }
55
+ const totalTitles = Number.parseInt(getNextLink()?.match(/\d+$/)?.[0] || "0");
56
56
  return {
57
57
  paginationSelector: ".searchnav + div + .searchnav",
58
- overwritePaginationLast: () => 9999999,
58
+ overwritePaginationLast: () => totalTitles,
59
59
  getPaginationUrlGenerator
60
60
  };
61
61
  }
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name Ebalka PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 3.0.3
4
+ // @version 3.0.7
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title and Duration
6
+ // @description Infinite scroll [optional], Filter by Title and Duration, Sort by Duration
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=ebalka.zip
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
18
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -36,22 +36,30 @@
36
36
  thumb: {
37
37
  selectors: {
38
38
  title: ".card__title",
39
- duration: ".card__spot > span:last-child"
39
+ duration: ".card__spot > span:last-child",
40
+ hd: { selector: ".card__icons > .card__icon", type: "boolean" }
40
41
  }
41
42
  },
42
43
  animatePreview,
43
- schemeOptions: ["Text Filter", "Badge", "Duration Filter", "Advanced"]
44
+ schemeOptions: [
45
+ "Title Filter",
46
+ "Duration Filter",
47
+ "HD Filter",
48
+ "Sort By Duration",
49
+ "Badge",
50
+ "Advanced"
51
+ ]
44
52
  });
45
53
  function animatePreview(container) {
46
54
  function animateThumb(thumb) {
47
- const el = thumb.querySelector(".card__thumb_video");
48
- el.classList.toggle("video-on");
49
- const src = el.querySelector(".card__image")?.getAttribute("data-preview");
55
+ const e = thumb.querySelector(".card__thumb_video");
56
+ e.classList.toggle("video-on");
57
+ const src = e.querySelector(".card__image")?.getAttribute("data-preview");
50
58
  const videoElem = utils.parseHtml(`<video style="position: absolute; left: 0px; top: 0px; visibility: visible; margin-top: -1px;"
51
59
  autoplay="" loop="" playsinline="true" webkit-playsinline="true" src="${src}"></video>`);
52
- el.appendChild(videoElem);
60
+ e.appendChild(videoElem);
53
61
  return () => {
54
- el.classList.toggle("video-on");
62
+ e.classList.toggle("video-on");
55
63
  utils.exterminateVideo(videoElem);
56
64
  };
57
65
  }
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name Eporner PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 2.0.4
4
+ // @version 2.0.9
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title, Duration and HD
6
+ // @description Infinite scroll [optional], Filter by Title, Uploader, Duration and HD, Sort by Views and Duration
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=eporner.com
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
15
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -32,10 +32,11 @@
32
32
  thumbs: { selector: "div[id^=vf][data-id]" },
33
33
  thumb: {
34
34
  selectors: {
35
- quality: { type: "number", selector: '[title="Quality"]' },
36
35
  title: "a",
37
36
  uploader: '[title="Uploader"]',
38
- duration: '[title="Duration"]'
37
+ duration: '[title="Duration"]',
38
+ views: { selector: '[title="Views"]', type: "float" },
39
+ quality: { selector: '[title="Quality"]', type: "number" }
39
40
  }
40
41
  },
41
42
  thumbImg: {
@@ -43,52 +44,34 @@
43
44
  remove: "auto"
44
45
  },
45
46
  containerSelectorLast: "#vidresults",
46
- customDataSelectorFns: [
47
- "filterInclude",
48
- "filterExclude",
49
- "filterDuration",
50
- {
51
- quality360: (el, state) => !!state.quality360 && el.quality !== 360
52
- },
53
- {
54
- quality480: (el, state) => !!state.quality480 && el.quality !== 480
55
- },
56
- {
57
- quality720: (el, state) => !!state.quality720 && el.quality !== 720
58
- },
59
- {
60
- quality1080: (el, state) => !!state.quality1080 && el.quality !== 1080
61
- },
62
- {
63
- quality4k: (el, state) => !!state.quality4k && el.quality !== 4
64
- }
47
+ customDataFilterFns: [
48
+ { quality360: (el, state) => !!state.quality360 && el.quality !== 360 },
49
+ { quality480: (el, state) => !!state.quality480 && el.quality !== 480 },
50
+ { quality720: (el, state) => !!state.quality720 && el.quality !== 720 },
51
+ { quality1080: (el, state) => !!state.quality1080 && el.quality !== 1080 },
52
+ { quality2k: (el, state) => !!state.quality2k && el.quality !== 2 },
53
+ { quality4k: (el, state) => !!state.quality4k && el.quality !== 4 }
65
54
  ],
66
55
  schemeOptions: [
67
- "Text Filter",
68
- "Badge",
56
+ "Title Filter",
57
+ "Uploader Filter",
69
58
  "Duration Filter",
70
59
  {
71
60
  title: "Quality Filter ",
72
61
  content: [
73
- {
74
- quality360: false
75
- },
76
- {
77
- quality480: false
78
- },
79
- {
80
- quality720: false
81
- },
82
- {
83
- quality1080: false
84
- },
85
- {
86
- quality4k: false
87
- }
62
+ { quality360: false },
63
+ { quality480: false },
64
+ { quality720: false },
65
+ { quality1080: false },
66
+ { quality2k: false },
67
+ { quality4k: false }
88
68
  ]
89
69
  },
70
+ "Sort By",
71
+ "Badge",
90
72
  "Advanced"
91
73
  ],
74
+ gropeStrategy: "all-in-all",
92
75
  animatePreview
93
76
  });
94
77
  function animatePreview(doc) {
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name Erome PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 5.0.3
4
+ // @version 5.0.8
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title and Video/Photo albums
6
+ // @description Infinite scroll [optional], Filter by Title, Uploader and Video/Photo albums, Sort by Views. Show/Hide Photos in album. Remove disclaimer.
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=erome.com
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -35,35 +35,32 @@
35
35
  selectors: {
36
36
  title: ".album-title",
37
37
  uploader: ".album-user",
38
- videoAlbum: { type: "boolean", selector: ".album-videos" }
38
+ videoAlbum: { selector: ".album-videos", type: "boolean" },
39
+ views: { selector: ".album-bottom-views", type: "float" }
39
40
  }
40
41
  },
41
42
  storeOptions: { showPhotos: true },
42
- customDataSelectorFns: [
43
- "filterInclude",
44
- "filterExclude",
45
- {
46
- filterPhotoAlbums: (el, state) => state.filterPhotoAlbums && !el.videoAlbum
47
- },
48
- {
49
- filterVideoAlbums: (el, state) => state.filterVideoAlbums && el.videoAlbum
50
- }
43
+ customDataFilterFns: [
44
+ { filterPhotoAlbums: (el, state) => !!state.filterPhotoAlbums && !el.videoAlbum },
45
+ { filterVideoAlbums: (el, state) => !!state.filterVideoAlbums && !!el.videoAlbum }
51
46
  ],
52
47
  schemeOptions: [
53
- "Text Filter",
48
+ "Title Filter",
49
+ "Uploader Filter",
54
50
  {
55
51
  title: "Filter Albums",
56
52
  content: [
57
53
  {
58
54
  filterVideoAlbums: false,
59
- label: "video albums"
55
+ label: "photo"
60
56
  },
61
57
  {
62
58
  filterPhotoAlbums: false,
63
- label: "photo albums"
59
+ label: "video"
64
60
  }
65
61
  ]
66
62
  },
63
+ "Sort By Views",
67
64
  "Badge",
68
65
  "Advanced"
69
66
  ]
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name Eroprofile PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 2.0.3
4
+ // @version 2.0.7
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title and Duration
6
+ // @description Infinite scroll [optional], Filter by Title and Duration, Sort by Duration
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=eroprofile.com
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -35,19 +35,10 @@
35
35
  }
36
36
  },
37
37
  containerSelector: ".videoGrid",
38
- customDataSelectorFns: ["filterInclude", "filterExclude", "filterDuration"],
39
38
  schemeOptions: [
40
- "Text Filter",
39
+ "Title Filter",
41
40
  "Duration Filter",
42
- {
43
- title: "Sort By ",
44
- content: [
45
- {
46
- "sort by duration": () => {
47
- }
48
- }
49
- ]
50
- },
41
+ "Sort By Duration",
51
42
  "Badge",
52
43
  "Advanced"
53
44
  ]
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name Javhdporn PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 3.0.3
4
+ // @version 3.0.7
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title and Duration
6
+ // @description Infinite scroll [optional], Filter by Title and Duration, Sort By Duration and Views
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=javhdporn.net
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
15
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -28,13 +28,14 @@
28
28
  thumb: {
29
29
  selectors: {
30
30
  title: "header.entry-header",
31
- duration: ".duration"
31
+ duration: ".duration",
32
+ views: { selector: ".views", type: "float" }
32
33
  }
33
34
  },
34
35
  paginationStrategyOptions: {
35
36
  pathnameSelector: /\/page\/(\d+)\/?$/
36
37
  },
37
- schemeOptions: ["Text Filter", "Badge", "Duration Filter", "Advanced"]
38
+ schemeOptions: ["Title Filter", "Duration Filter", "Sort By", "Badge", "Advanced"]
38
39
  });
39
40
 
40
41
  })(core);
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name Missav PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 3.0.3
4
+ // @version 3.0.7
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title and Duration
6
+ // @description Infinite scroll [optional], Filter by Title and Duration, Sort by Duration
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=missav123.com
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
18
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -38,7 +38,13 @@
38
38
  }
39
39
  },
40
40
  thumbImg: { strategy: "auto" },
41
- schemeOptions: ["Text Filter", "Duration Filter", "Badge", "Advanced"]
41
+ schemeOptions: [
42
+ "Title Filter",
43
+ "Duration Filter",
44
+ "Sort By Duration",
45
+ "Badge",
46
+ "Advanced"
47
+ ]
42
48
  });
43
49
 
44
50
  })(core);
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name Motherless PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 5.0.4
4
+ // @version 5.0.8
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title and Duration
6
+ // @description Infinite scroll [optional], Filter by Title, Uploader and Duration, Sort by Duration and Views
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=motherless.com
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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://motherless.com/*
14
- // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.13/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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_addElement
17
17
  // @grant GM_addStyle
@@ -45,7 +45,14 @@
45
45
  },
46
46
  animatePreview,
47
47
  gropeStrategy: "all-in-all",
48
- schemeOptions: ["Text Filter", "Sort By", "Duration Filter", "Badge", "Advanced"]
48
+ schemeOptions: [
49
+ "Title Filter",
50
+ "Uploader Filter",
51
+ "Duration Filter",
52
+ "Sort By",
53
+ "Badge",
54
+ "Advanced"
55
+ ]
49
56
  });
50
57
  function animatePreview(_) {
51
58
  const tick = new utils.Tick(500);
@@ -135,7 +142,7 @@
135
142
  }
136
143
  const overwrite1 = (x) => `@media only screen and (max-width: 1280px) {
137
144
  #categories-page.inner ${x} }`;
138
- rules.dataManager.dataFilter.applyCSSFilters(overwrite1);
145
+ rules.dataManager.dataFilter.createCssFilters(overwrite1);
139
146
  _GM_addStyle(`
140
147
  .img-container, .desktop-thumb { min-height: 150px; max-height: 150px; }
141
148
 
@@ -148,7 +155,7 @@
148
155
  document.querySelector(".ml-pagination")?.before(_GM_addElement("div", { class: "clear-left" }));
149
156
  function applySearchFilters() {
150
157
  let pathname = window.location.pathname;
151
- const wordsToFilter = rules.store.state.filterExcludeWords.replace(/f:/g, "").match(/(?<!user:)\b\w+\b(?!\s*:)/g) || [];
158
+ const wordsToFilter = rules.store.state.filterExcludeWords.match(/\w+/g) || [];
152
159
  wordsToFilter.filter((w) => !pathname.includes(w)).forEach((w) => {
153
160
  pathname += `+-${w.trim()}`;
154
161
  });
@@ -1,9 +1,9 @@
1
1
  // ==UserScript==
2
2
  // @name NameThatPorn PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 3.0.3
4
+ // @version 3.0.7
5
5
  // @author violent-orangutan
6
- // @description Infinite scroll [optional], Filter by Title and Un/Solved
6
+ // @description Infinite scroll [optional], Filter by Title, Uploader and Solved/Unsolved
7
7
  // @license MIT
8
8
  // @icon https://www.google.com/s2/favicons?sz=64&domain=namethatporn.com
9
9
  // @homepage https://github.com/smartacephale/sleazy-fork
@@ -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.13/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -30,33 +30,27 @@
30
30
  selectors: {
31
31
  title: ".item_title, .nsw_r_tit",
32
32
  uploader: ".item_answer b, .nsw_r_desc",
33
- solved: {
34
- type: "boolean",
35
- selector: ".item_solved, .nsw_r_slvd"
36
- }
33
+ solved: { selector: ".item_solved, .nsw_r_slvd", type: "boolean" }
37
34
  }
38
35
  },
39
36
  thumbImg: {
40
- selector: (img) => {
41
- return img.getAttribute("data-dyn")?.concat(".webp") || img.getAttribute("src");
42
- }
37
+ selector: (img) => img.getAttribute("data-dyn")?.concat(".webp") || img.getAttribute("src")
43
38
  },
44
39
  paginationStrategyOptions: {
45
40
  paginationSelector: "#smi_wrp, #nsw_p"
46
41
  },
47
42
  gropeStrategy: "all-in-all",
48
- customDataSelectorFns: [
49
- "filterInclude",
50
- "filterExclude",
43
+ customDataFilterFns: [
51
44
  {
52
- filterSolved: (el, state) => state.filterSolved && el.solved
45
+ filterSolved: (e, state) => state.filterSolved && e.solved
53
46
  },
54
47
  {
55
- filterUnsolved: (el, state) => state.filterUnsolved && !el.solved
48
+ filterUnsolved: (e, state) => state.filterUnsolved && !e.solved
56
49
  }
57
50
  ],
58
51
  schemeOptions: [
59
- "Text Filter",
52
+ "Title Filter",
53
+ "Uploader Filter",
60
54
  {
61
55
  title: "Filter Status",
62
56
  content: [
@@ -1,7 +1,7 @@
1
1
  // ==UserScript==
2
2
  // @name NHentai PervertMonkey
3
3
  // @namespace pervertmonkey
4
- // @version 4.0.3
4
+ // @version 4.0.7
5
5
  // @author violent-orangutan
6
6
  // @description Infinite scroll [optional], Filter by Title
7
7
  // @license MIT
@@ -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.13/dist/core/pervertmonkey.core.umd.js
15
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.17/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
@@ -26,18 +26,10 @@
26
26
  const IS_SEARCH_PAGE = /^\/search\//.test(location.pathname);
27
27
  const nhentaiRules = new core.Rules({
28
28
  thumbs: { selector: ".gallery" },
29
- thumb: {
30
- selectors: {
31
- title: ".caption"
32
- }
33
- },
34
- thumbImg: {
35
- strategy: "auto",
36
- remove: "auto"
37
- },
29
+ thumb: { selectors: { title: ".caption" } },
30
+ thumbImg: { strategy: "auto", remove: "auto" },
38
31
  containerSelectorLast: ".index-container, .container",
39
- customDataSelectorFns: ["filterInclude", "filterExclude"],
40
- schemeOptions: ["Text Filter", "Badge", "Advanced"],
32
+ schemeOptions: ["Title Filter", "Badge", "Advanced"],
41
33
  gropeStrategy: "all-in-all"
42
34
  });
43
35
  const filterDescriptors = {