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