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.
@@ -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);