pervert-monkey 1.0.22 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/pervertmonkey.core.es.d.ts +15 -14
- package/dist/core/pervertmonkey.core.es.js +1568 -1570
- package/dist/core/pervertmonkey.core.es.js.map +1 -1
- package/dist/core/pervertmonkey.core.umd.js +1568 -1570
- package/dist/core/pervertmonkey.core.umd.js.map +1 -1
- package/dist/userscripts/3hentai.user.js +5 -5
- package/dist/userscripts/camgirlfinder.user.js +5 -5
- package/dist/userscripts/camwhores.user.js +5 -5
- package/dist/userscripts/e-hentai.user.js +5 -5
- package/dist/userscripts/ebalka.user.js +5 -5
- package/dist/userscripts/eporner.user.js +5 -5
- package/dist/userscripts/erome.user.js +10 -6
- package/dist/userscripts/eroprofile.user.js +5 -5
- package/dist/userscripts/javhdporn.user.js +5 -5
- package/dist/userscripts/missav.user.js +5 -5
- package/dist/userscripts/motherless.user.js +5 -5
- package/dist/userscripts/namethatporn.user.js +5 -5
- package/dist/userscripts/nhentai.user.js +5 -5
- package/dist/userscripts/obmenvsem.user.js +5 -5
- package/dist/userscripts/pornhub.user.js +5 -5
- package/dist/userscripts/socialmediagirls.user.js +40 -0
- package/dist/userscripts/spankbang.user.js +5 -5
- package/dist/userscripts/thisvid.user.js +5 -5
- package/dist/userscripts/xhamster.user.js +5 -5
- package/dist/userscripts/xvideos.user.js +5 -5
- package/package.json +2 -2
- package/src/core/data-handler/data-manager.ts +13 -16
- package/src/core/parsers/pagination-parser/pagination-strategies/PaginationStrategyPathnameParams.ts +4 -2
- package/src/userscripts/index.ts +1 -1
- package/src/userscripts/meta.json +3 -4
- package/src/userscripts/scripts/3hentai.ts +1 -1
- package/src/userscripts/scripts/camgirlfinder.ts +1 -1
- package/src/userscripts/scripts/camwhores.ts +1 -1
- package/src/userscripts/scripts/e-hentai.ts +1 -1
- package/src/userscripts/scripts/ebalka.ts +1 -1
- package/src/userscripts/scripts/eporner.ts +1 -1
- package/src/userscripts/scripts/erome.ts +8 -3
- package/src/userscripts/scripts/eroprofile.ts +1 -1
- package/src/userscripts/scripts/javhdporn.ts +1 -1
- package/src/userscripts/scripts/missav.ts +1 -1
- package/src/userscripts/scripts/motherless.ts +1 -1
- package/src/userscripts/scripts/namethatporn.ts +1 -1
- package/src/userscripts/scripts/nhentai.ts +1 -1
- package/src/userscripts/scripts/obmenvsem.ts +1 -1
- package/src/userscripts/scripts/pornhub.ts +1 -1
- package/src/userscripts/scripts/socialmediagirls.ts +26 -0
- package/src/userscripts/scripts/spankbang.ts +1 -1
- package/src/userscripts/scripts/thisvid.ts +1 -1
- package/src/userscripts/scripts/xhamster.ts +2 -2
- package/src/userscripts/scripts/xvideos.ts +1 -1
- package/src/utils/dom/attributes.ts +54 -0
- package/src/utils/dom/index.ts +4 -165
- package/src/utils/dom/miscellaneous.ts +55 -0
- package/src/utils/dom/selectors.ts +48 -0
- package/src/utils/events/index.ts +2 -2
- package/src/utils/observers/index.ts +16 -11
- package/src/utils/observers/lazy-image-loader.ts +13 -11
- package/src/utils/performance/index.ts +10 -4
- /package/src/utils/dom/{dom-observers.ts → observers.ts} +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { sanitizeStr } from '../strings';
|
|
2
|
+
|
|
3
|
+
export function querySelectorOrSelf<T extends Element = HTMLElement>(
|
|
4
|
+
element: T,
|
|
5
|
+
selector: string,
|
|
6
|
+
): T | null {
|
|
7
|
+
if (element.matches?.(selector)) {
|
|
8
|
+
return element as T;
|
|
9
|
+
}
|
|
10
|
+
return element.querySelector<T>(selector);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function querySelectorLast<T extends Element = HTMLElement>(
|
|
14
|
+
root: ParentNode = document,
|
|
15
|
+
selector: string,
|
|
16
|
+
): T | undefined {
|
|
17
|
+
const nodes = root.querySelectorAll<T>(selector);
|
|
18
|
+
if (nodes.length < 1) {
|
|
19
|
+
return querySelectorOrSelf<T>(root as T, selector) || undefined;
|
|
20
|
+
}
|
|
21
|
+
return nodes[nodes.length - 1];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function querySelectorLastNumber(selector: string, e: ParentNode = document) {
|
|
25
|
+
const text = querySelectorText(e, selector);
|
|
26
|
+
return Number(text.match(/\d+/g)?.pop() || 0);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function querySelectorText(e: ParentNode, selector?: string): string {
|
|
30
|
+
if (typeof selector !== 'string') return '';
|
|
31
|
+
const text = querySelectorOrSelf(e as HTMLElement, selector)?.innerText || '';
|
|
32
|
+
return sanitizeStr(text);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function getCommonParents<T extends HTMLElement>(
|
|
36
|
+
elements: Iterable<T>,
|
|
37
|
+
): HTMLElement[] {
|
|
38
|
+
return Map.groupBy(elements, (e) => e.parentElement)
|
|
39
|
+
.keys()
|
|
40
|
+
.filter((e) => e !== null)
|
|
41
|
+
.toArray();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function findNextSibling<T extends Element = HTMLElement>(e: T) {
|
|
45
|
+
if (e.nextElementSibling) return e.nextElementSibling;
|
|
46
|
+
if (e.parentElement) return findNextSibling(e.parentElement);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export * from './on-hover';
|
|
2
|
+
export * from './tick';
|
|
@@ -1,40 +1,45 @@
|
|
|
1
1
|
export { LazyImgLoader } from './lazy-image-loader';
|
|
2
2
|
|
|
3
|
-
export class Observer {
|
|
4
|
-
public observer: IntersectionObserver;
|
|
3
|
+
export class Observer<T extends Element = HTMLElement> {
|
|
5
4
|
private timeout?: number;
|
|
6
|
-
|
|
5
|
+
private observer: IntersectionObserver;
|
|
6
|
+
|
|
7
|
+
constructor(private callback: (entry: T) => void) {
|
|
7
8
|
this.observer = new IntersectionObserver(this.handleIntersection.bind(this));
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
observe(target:
|
|
11
|
+
public observe(target: T) {
|
|
11
12
|
this.observer.observe(target);
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
public unobserve(target: T) {
|
|
15
16
|
this.observer.unobserve(target);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private throttle(target: T, throttleTime: number) {
|
|
20
|
+
this.unobserve(target);
|
|
16
21
|
this.timeout = window.setTimeout(() => this.observer.observe(target), throttleTime);
|
|
17
22
|
}
|
|
18
23
|
|
|
19
|
-
handleIntersection(entries: Iterable<IntersectionObserverEntry>) {
|
|
24
|
+
private handleIntersection(entries: Iterable<IntersectionObserverEntry>) {
|
|
20
25
|
for (const entry of entries) {
|
|
21
26
|
if (entry.isIntersecting) {
|
|
22
|
-
this.callback(entry.target);
|
|
27
|
+
this.callback(entry.target as T);
|
|
23
28
|
}
|
|
24
29
|
}
|
|
25
30
|
}
|
|
26
31
|
|
|
27
|
-
dispose() {
|
|
32
|
+
public dispose() {
|
|
28
33
|
if (this.timeout) clearTimeout(this.timeout);
|
|
29
34
|
this.observer.disconnect();
|
|
30
35
|
}
|
|
31
36
|
|
|
32
|
-
static observeWhile(
|
|
33
|
-
target:
|
|
37
|
+
public static observeWhile<T extends Element = HTMLElement>(
|
|
38
|
+
target: T,
|
|
34
39
|
callback: () => Promise<boolean> | boolean,
|
|
35
40
|
throttleTime: number,
|
|
36
41
|
) {
|
|
37
|
-
const observer = new Observer(async (target:
|
|
42
|
+
const observer = new Observer(async (target: T) => {
|
|
38
43
|
const condition = await callback();
|
|
39
44
|
if (condition) {
|
|
40
45
|
observer.throttle(target, throttleTime);
|
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
import { Observer } from
|
|
1
|
+
import { Observer } from '.';
|
|
2
2
|
|
|
3
|
-
export class LazyImgLoader {
|
|
4
|
-
|
|
5
|
-
private attributeName = 'data-lazy-load';
|
|
3
|
+
export class LazyImgLoader<T extends Element = HTMLElement> {
|
|
4
|
+
private lazyImgObserver: Observer;
|
|
6
5
|
|
|
7
|
-
constructor(
|
|
6
|
+
constructor(
|
|
7
|
+
shouldDelazify: (target: T) => boolean,
|
|
8
|
+
private attributeName = 'data-lazy-orangutan',
|
|
9
|
+
) {
|
|
8
10
|
this.lazyImgObserver = new Observer((target: Element) => {
|
|
9
|
-
if (shouldDelazify(target)) {
|
|
10
|
-
this.
|
|
11
|
+
if (shouldDelazify(target as T)) {
|
|
12
|
+
this.unlazify(target as HTMLImageElement);
|
|
11
13
|
}
|
|
12
14
|
});
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
lazify(
|
|
17
|
+
public lazify(img?: HTMLImageElement, imgSrc?: string) {
|
|
16
18
|
if (!img || !imgSrc) return;
|
|
17
19
|
img.setAttribute(this.attributeName, imgSrc);
|
|
18
20
|
img.src = '';
|
|
19
21
|
this.lazyImgObserver.observe(img);
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
this.lazyImgObserver.
|
|
24
|
+
private unlazify(target: HTMLImageElement) {
|
|
25
|
+
this.lazyImgObserver.unobserve(target);
|
|
24
26
|
target.src = target.getAttribute(this.attributeName) as string;
|
|
25
27
|
target.removeAttribute(this.attributeName);
|
|
26
|
-
}
|
|
28
|
+
}
|
|
27
29
|
}
|
|
@@ -30,15 +30,21 @@ export function runIdleJob<T>(iterator: Iterator<T>, job: (v: T) => void) {
|
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export function containMutation(container: HTMLElement, mutation: () => void) {
|
|
33
|
+
export async function containMutation(container: HTMLElement, mutation: () => void) {
|
|
34
|
+
const originalContain = container.style.contain;
|
|
34
35
|
container.style.contain = 'content';
|
|
36
|
+
|
|
35
37
|
try {
|
|
36
38
|
mutation();
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
|
|
40
|
+
await new Promise<void>((resolve) => {
|
|
39
41
|
requestAnimationFrame(() => {
|
|
40
|
-
|
|
42
|
+
requestAnimationFrame(() => {
|
|
43
|
+
resolve();
|
|
44
|
+
});
|
|
41
45
|
});
|
|
42
46
|
});
|
|
47
|
+
} finally {
|
|
48
|
+
container.style.contain = originalContain;
|
|
43
49
|
}
|
|
44
50
|
}
|
|
File without changes
|