pervert-monkey 1.0.12 → 1.0.15
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 +85 -30
- package/dist/core/pervertmonkey.core.es.js +250 -114
- package/dist/core/pervertmonkey.core.es.js.map +1 -1
- package/dist/core/pervertmonkey.core.umd.js +250 -114
- package/dist/core/pervertmonkey.core.umd.js.map +1 -1
- package/dist/userscripts/3hentai.user.js +4 -11
- package/dist/userscripts/camgirlfinder.user.js +2 -2
- package/dist/userscripts/camwhores.user.js +7 -16
- package/dist/userscripts/e-hentai.user.js +3 -4
- package/dist/userscripts/ebalka.user.js +13 -5
- package/dist/userscripts/eporner.user.js +21 -41
- package/dist/userscripts/erome.user.js +9 -8
- package/dist/userscripts/eroprofile.user.js +5 -14
- package/dist/userscripts/javhdporn.user.js +6 -5
- package/dist/userscripts/missav.user.js +10 -4
- package/dist/userscripts/motherless.user.js +14 -6
- package/dist/userscripts/namethatporn.user.js +8 -14
- package/dist/userscripts/nhentai.user.js +5 -13
- package/dist/userscripts/obmenvsem.user.js +10 -4
- package/dist/userscripts/pornhub.user.js +14 -6
- package/dist/userscripts/spankbang.user.js +28 -7
- package/dist/userscripts/thisvid.user.js +12 -30
- package/dist/userscripts/xhamster.user.js +12 -24
- package/dist/userscripts/xvideos.user.js +34 -6
- package/package.json +1 -1
- package/src/core/data-handler/data-filter-fn-defaults.ts +52 -0
- package/src/core/data-handler/data-filter-fn.ts +60 -0
- package/src/core/data-handler/data-filter.ts +22 -96
- package/src/core/data-handler/data-manager.ts +75 -26
- package/src/core/jabroni-config/default-scheme.ts +54 -5
- package/src/core/jabroni-config/index.ts +1 -0
- package/src/core/jabroni-config/jabroni-gui-controller.ts +2 -1
- package/src/core/jabroni-config/scheme-selectors-mapping.ts +12 -0
- package/src/core/parsers/thumb-data-parser.ts +10 -16
- package/src/core/rules/index.ts +15 -9
- package/src/userscripts/index.ts +1 -1
- package/src/userscripts/scripts/3hentai.ts +3 -6
- package/src/userscripts/scripts/camgirlfinder.ts +1 -1
- package/src/userscripts/scripts/camwhores.ts +5 -14
- package/src/userscripts/scripts/e-hentai.ts +4 -6
- package/src/userscripts/scripts/ebalka.ts +11 -3
- package/src/userscripts/scripts/eporner.ts +20 -39
- package/src/userscripts/scripts/erome.ts +9 -7
- package/src/userscripts/scripts/eroprofile.ts +5 -13
- package/src/userscripts/scripts/javhdporn.ts +7 -8
- package/src/userscripts/scripts/missav.ts +10 -4
- package/src/userscripts/scripts/motherless.ts +12 -6
- package/src/userscripts/scripts/namethatporn.ts +8 -15
- package/src/userscripts/scripts/nhentai.ts +6 -13
- package/src/userscripts/scripts/obmenvsem.ts +9 -3
- package/src/userscripts/scripts/pornhub.ts +13 -4
- package/src/userscripts/scripts/spankbang.ts +29 -5
- package/src/userscripts/scripts/thisvid.ts +14 -29
- package/src/userscripts/scripts/xhamster.ts +14 -17
- package/src/userscripts/scripts/xvideos.ts +33 -4
- package/src/utils/parsers/index.ts +19 -0
|
@@ -18,57 +18,63 @@ export declare function circularShift(n: number, c?: number, s?: number): number
|
|
|
18
18
|
|
|
19
19
|
export declare function copyAttributes<T extends Element = HTMLElement>(target: T, source: T): void;
|
|
20
20
|
|
|
21
|
-
export declare type DataElement =
|
|
21
|
+
export declare type DataElement = {
|
|
22
|
+
element: HTMLElement;
|
|
23
|
+
[key: string]: HTMLElement | string | number | boolean;
|
|
24
|
+
};
|
|
22
25
|
|
|
23
26
|
export declare class DataFilter {
|
|
24
27
|
private rules;
|
|
25
|
-
filters: Map<string, () =>
|
|
28
|
+
filters: Map<string, () => DataFilterFnRendered>;
|
|
26
29
|
constructor(rules: Rules);
|
|
27
30
|
static isFiltered(el: HTMLElement): boolean;
|
|
28
31
|
applyCSSFilters(wrapper?: (cssRule: string) => string): void;
|
|
29
|
-
|
|
30
|
-
registerFilters(customFilters: (Record<string,
|
|
31
|
-
private customSelectorParser;
|
|
32
|
+
customDataFilterFns: Record<string, DataFilterFnFrom<any>>;
|
|
33
|
+
registerFilters(customFilters: (Record<string, DataFilterFnFrom<any>> | string)[]): void;
|
|
32
34
|
registerFilter(customSelectorName: string): void;
|
|
33
35
|
filterMapping: Record<string, string>;
|
|
34
36
|
selectFilters(filters: {
|
|
35
37
|
[key: string]: boolean;
|
|
36
|
-
}): (() =>
|
|
37
|
-
|
|
38
|
+
}): (() => DataFilterFnRendered)[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
declare class DataFilterFn<R> {
|
|
42
|
+
handle: DataFilterFnHandle<R>;
|
|
43
|
+
deps: string[];
|
|
44
|
+
name: string;
|
|
45
|
+
$preDefine?: ((state: StoreState) => R) | undefined;
|
|
46
|
+
private tag;
|
|
47
|
+
constructor(handle: DataFilterFnHandle<R>, deps: string[] | undefined, name: string, $preDefine?: ((state: StoreState) => R) | undefined);
|
|
48
|
+
static from<R>(options: DataFilterFnFrom<R>, name: string): DataFilterFn<R>;
|
|
49
|
+
renderFn(state: StoreState): () => DataFilterFnRendered;
|
|
38
50
|
}
|
|
39
51
|
|
|
40
|
-
|
|
52
|
+
declare type DataFilterFnFrom<R> = Partial<DataFilterFn<R>> | DataFilterFnHandle<R>;
|
|
53
|
+
|
|
54
|
+
declare type DataFilterFnHandle<R> = (el: DataElement, state: StoreState, $preDefineResult?: R) => boolean;
|
|
55
|
+
|
|
56
|
+
declare type DataFilterFnRendered = (v: DataElement) => DataFilterFnRenderedResult;
|
|
41
57
|
|
|
42
|
-
declare
|
|
58
|
+
declare type DataFilterFnRenderedResult = {
|
|
43
59
|
tag: string;
|
|
44
60
|
condition: boolean;
|
|
45
|
-
}
|
|
61
|
+
};
|
|
46
62
|
|
|
47
63
|
export declare class DataManager {
|
|
48
64
|
private rules;
|
|
49
|
-
private
|
|
65
|
+
private containerHomogenity?;
|
|
50
66
|
data: Map<string, DataElement>;
|
|
51
67
|
private lazyImgLoader;
|
|
52
68
|
dataFilter: DataFilter;
|
|
53
|
-
constructor(rules: Rules,
|
|
69
|
+
constructor(rules: Rules, containerHomogenity?: Parameters<typeof checkHomogenity>[2] | undefined);
|
|
54
70
|
applyFilters: (filters?: Record<string, boolean>, offset?: number) => Promise<void>;
|
|
55
71
|
filterAll: (offset?: number) => Promise<void>;
|
|
56
72
|
parseData: (html: HTMLElement, container?: HTMLElement, removeDuplicates?: boolean, shouldLazify?: boolean) => void;
|
|
57
73
|
sortBy<K extends keyof DataElement>(key: K, direction?: boolean): void;
|
|
58
74
|
}
|
|
59
75
|
|
|
60
|
-
export declare type DataSelectorFn<R> = DataSelectorFnAdvanced<R> | DataSelectorFnShort;
|
|
61
|
-
|
|
62
|
-
export declare type DataSelectorFnAdvanced<R> = {
|
|
63
|
-
handle: (el: DataElement, state: StoreState, $preDefineResult?: R) => boolean;
|
|
64
|
-
$preDefine?: (state: StoreState) => R;
|
|
65
|
-
deps?: string[];
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export declare type DataSelectorFnShort = (e: DataElement, state: StoreState) => boolean;
|
|
69
|
-
|
|
70
76
|
declare const DefaultScheme: [{
|
|
71
|
-
readonly title: "
|
|
77
|
+
readonly title: "Title Filter";
|
|
72
78
|
readonly collapsed: true;
|
|
73
79
|
readonly content: [{
|
|
74
80
|
readonly filterExclude: false;
|
|
@@ -87,6 +93,26 @@ declare const DefaultScheme: [{
|
|
|
87
93
|
readonly watch: "filterInclude";
|
|
88
94
|
readonly placeholder: "word, f:full_word, r:RegEx...";
|
|
89
95
|
}];
|
|
96
|
+
}, {
|
|
97
|
+
readonly title: "Uploader Filter";
|
|
98
|
+
readonly collapsed: true;
|
|
99
|
+
readonly content: [{
|
|
100
|
+
readonly filterUploaderExclude: false;
|
|
101
|
+
readonly label: "exclude";
|
|
102
|
+
}, {
|
|
103
|
+
readonly filterUploaderExcludeWords: "";
|
|
104
|
+
readonly label: "keywords";
|
|
105
|
+
readonly watch: "filterUploaderExclude";
|
|
106
|
+
readonly placeholder: "word, f:full_word, r:RegEx...";
|
|
107
|
+
}, {
|
|
108
|
+
readonly filterUploaderInclude: false;
|
|
109
|
+
readonly label: "include";
|
|
110
|
+
}, {
|
|
111
|
+
readonly filterUploaderIncludeWords: "";
|
|
112
|
+
readonly label: "keywords";
|
|
113
|
+
readonly watch: "filterUploaderInclude";
|
|
114
|
+
readonly placeholder: "word, f:full_word, r:RegEx...";
|
|
115
|
+
}];
|
|
90
116
|
}, {
|
|
91
117
|
readonly title: "Duration Filter";
|
|
92
118
|
readonly collapsed: true;
|
|
@@ -106,13 +132,27 @@ declare const DefaultScheme: [{
|
|
|
106
132
|
}];
|
|
107
133
|
}, {
|
|
108
134
|
readonly title: "Sort By";
|
|
135
|
+
readonly collapsed: true;
|
|
109
136
|
readonly content: [{
|
|
110
137
|
readonly 'sort by views': () => void;
|
|
111
138
|
}, {
|
|
112
139
|
readonly 'sort by duration': () => void;
|
|
113
140
|
}];
|
|
141
|
+
}, {
|
|
142
|
+
readonly title: "Sort By Duration";
|
|
143
|
+
readonly collapsed: true;
|
|
144
|
+
readonly content: [{
|
|
145
|
+
readonly 'sort by duration': () => void;
|
|
146
|
+
}];
|
|
147
|
+
}, {
|
|
148
|
+
readonly title: "Sort By Views";
|
|
149
|
+
readonly collapsed: true;
|
|
150
|
+
readonly content: [{
|
|
151
|
+
readonly 'sort by views': () => void;
|
|
152
|
+
}];
|
|
114
153
|
}, {
|
|
115
154
|
readonly title: "Privacy Filter";
|
|
155
|
+
readonly collapsed: true;
|
|
116
156
|
readonly content: [{
|
|
117
157
|
readonly filterPrivate: false;
|
|
118
158
|
readonly label: "private";
|
|
@@ -122,6 +162,15 @@ declare const DefaultScheme: [{
|
|
|
122
162
|
}, {
|
|
123
163
|
readonly 'check access \uD83D\uDD13': () => void;
|
|
124
164
|
}];
|
|
165
|
+
}, {
|
|
166
|
+
readonly title: "HD Filter";
|
|
167
|
+
readonly content: [{
|
|
168
|
+
readonly filterHD: false;
|
|
169
|
+
readonly label: "hd";
|
|
170
|
+
}, {
|
|
171
|
+
readonly filterNonHD: false;
|
|
172
|
+
readonly label: "non-hd";
|
|
173
|
+
}];
|
|
125
174
|
}, {
|
|
126
175
|
readonly title: "Advanced";
|
|
127
176
|
readonly collapsed: true;
|
|
@@ -137,6 +186,8 @@ declare const DefaultScheme: [{
|
|
|
137
186
|
}, {
|
|
138
187
|
readonly writeHistory: false;
|
|
139
188
|
readonly label: "write history";
|
|
189
|
+
}, {
|
|
190
|
+
readonly reset: () => void;
|
|
140
191
|
}];
|
|
141
192
|
}, {
|
|
142
193
|
readonly title: "Badge";
|
|
@@ -323,11 +374,13 @@ export declare function parseHtml(html: string): HTMLElement;
|
|
|
323
374
|
|
|
324
375
|
export declare function parseIntegerOr(n: string | number, or: number): number;
|
|
325
376
|
|
|
377
|
+
export declare function parseNumberWithLetter(str: string): number;
|
|
378
|
+
|
|
326
379
|
export declare function parseUrl(s: HTMLAnchorElement | Location | URL | string): URL;
|
|
327
380
|
|
|
328
381
|
declare type Primitive = string | number | boolean;
|
|
329
382
|
|
|
330
|
-
declare type PrimitiveString = 'boolean' | 'string' | 'number' | 'duration';
|
|
383
|
+
declare type PrimitiveString = 'boolean' | 'string' | 'number' | 'float' | 'duration';
|
|
331
384
|
|
|
332
385
|
export declare function querySelectorLast<T extends Element = HTMLElement>(root: ParentNode | undefined, selector: string): T | undefined;
|
|
333
386
|
|
|
@@ -365,8 +418,9 @@ export declare class Rules {
|
|
|
365
418
|
paginationStrategyOptions: Partial<PaginationStrategy>;
|
|
366
419
|
paginationStrategy: PaginationStrategy;
|
|
367
420
|
dataManager: DataManager;
|
|
368
|
-
|
|
369
|
-
|
|
421
|
+
containerHomogenity: ConstructorParameters<typeof DataManager>[1];
|
|
422
|
+
customDataFilterFns: (Record<string, DataFilterFnFrom<any>> | string)[];
|
|
423
|
+
private hookDataFilterFns;
|
|
370
424
|
animatePreview?: (doc: HTMLElement) => void;
|
|
371
425
|
storeOptions?: JabroniTypes.StoreStateOptions;
|
|
372
426
|
schemeOptions: SchemeOptions;
|
|
@@ -392,7 +446,9 @@ export declare class Rules {
|
|
|
392
446
|
|
|
393
447
|
export declare function sanitizeStr(s: string): string;
|
|
394
448
|
|
|
395
|
-
declare type
|
|
449
|
+
declare type SchemeKeys = JabroniTypes.ExtractValuesByKey<typeof DefaultScheme, 'title'>;
|
|
450
|
+
|
|
451
|
+
declare type SchemeOptions = (Parameters<typeof setupScheme>[0][0] | SchemeKeys)[];
|
|
396
452
|
|
|
397
453
|
export declare function splitWith(s: string, c?: string): Array<string>;
|
|
398
454
|
|
|
@@ -402,15 +458,14 @@ export declare class ThumbDataParser {
|
|
|
402
458
|
strategy: 'manual' | 'auto-select' | 'auto-text';
|
|
403
459
|
selectors: ThumbDataSelectorsRaw;
|
|
404
460
|
callback?: ((thumb: HTMLElement, thumbData: ThumbData) => void) | undefined;
|
|
405
|
-
stringsMeltInTitle: boolean;
|
|
406
461
|
private autoParseText;
|
|
407
462
|
getUrl(thumb: HTMLElement | HTMLAnchorElement): string;
|
|
408
463
|
private preprocessCustomThumbDataSelectors;
|
|
409
464
|
private thumbDataSelectors;
|
|
410
465
|
private readonly defaultThumbDataSelectors;
|
|
411
466
|
private getThumbDataWith;
|
|
412
|
-
constructor(strategy?: 'manual' | 'auto-select' | 'auto-text', selectors?: ThumbDataSelectorsRaw, callback?: ((thumb: HTMLElement, thumbData: ThumbData) => void) | undefined
|
|
413
|
-
static create(o?: Partial<Pick<ThumbDataParser, 'strategy' | 'selectors' | 'callback'
|
|
467
|
+
constructor(strategy?: 'manual' | 'auto-select' | 'auto-text', selectors?: ThumbDataSelectorsRaw, callback?: ((thumb: HTMLElement, thumbData: ThumbData) => void) | undefined);
|
|
468
|
+
static create(o?: Partial<Pick<ThumbDataParser, 'strategy' | 'selectors' | 'callback'>>): ThumbDataParser;
|
|
414
469
|
getThumbData(thumb: HTMLElement): ThumbData;
|
|
415
470
|
}
|
|
416
471
|
|