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
@@ -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 = Record<string, string | number | boolean | HTMLElement>;
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, () => DataFilterFn>;
28
+ filters: Map<string, () => DataFilterFnRendered>;
29
+ filterMapping: Record<string, string>;
26
30
  constructor(rules: Rules);
27
- static isFiltered(el: HTMLElement): boolean;
28
- applyCSSFilters(wrapper?: (cssRule: string) => string): void;
29
- customDataSelectorFns: Record<string, DataSelectorFn<any>>;
30
- registerFilters(customFilters: (Record<string, DataSelectorFn<any>> | string)[]): void;
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
- }): (() => DataFilterFn)[];
37
- static customDataSelectorFnsDefault: Record<string, DataSelectorFn<any>>;
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
- export declare type DataFilterFn = (v: DataElement) => DataFilterResult;
53
+ declare type DataFilterFnFrom<R> = Partial<DataFilterFn<R>> | DataFilterFnHandle<R>;
41
54
 
42
- declare interface DataFilterResult {
43
- tag: string;
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 parentHomogenity?;
66
+ private containerHomogenity?;
50
67
  data: Map<string, DataElement>;
51
68
  private lazyImgLoader;
52
69
  dataFilter: DataFilter;
53
- constructor(rules: Rules, parentHomogenity?: Parameters<typeof checkHomogenity>[2] | undefined);
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: "Text Filter";
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
- dataHomogenity: ConstructorParameters<typeof DataManager>[1];
371
- customDataSelectorFns: (Record<string, DataSelectorFn<any>> | string)[];
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 SchemeOptions = (Parameters<typeof setupScheme>[0][0] | JabroniTypes.ExtractValuesByKey<typeof DefaultScheme, 'title'>)[];
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, stringsMeltInTitle?: boolean);
415
- static create(o?: Partial<Pick<ThumbDataParser, 'strategy' | 'selectors' | 'callback' | 'stringsMeltInTitle'>>): ThumbDataParser;
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: PrimitiveString;
476
+ type: 'boolean' | 'string' | 'number' | 'float' | 'duration';
423
477
  };
424
478
 
425
479
  declare type ThumbDataSelectorsRaw = Record<string, string | Pick<ThumbDataSelector, 'selector' | 'type'>>;