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.
Files changed (56) hide show
  1. package/dist/core/pervertmonkey.core.es.d.ts +85 -30
  2. package/dist/core/pervertmonkey.core.es.js +250 -114
  3. package/dist/core/pervertmonkey.core.es.js.map +1 -1
  4. package/dist/core/pervertmonkey.core.umd.js +250 -114
  5. package/dist/core/pervertmonkey.core.umd.js.map +1 -1
  6. package/dist/userscripts/3hentai.user.js +4 -11
  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 +3 -4
  10. package/dist/userscripts/ebalka.user.js +13 -5
  11. package/dist/userscripts/eporner.user.js +21 -41
  12. package/dist/userscripts/erome.user.js +9 -8
  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 +14 -6
  17. package/dist/userscripts/namethatporn.user.js +8 -14
  18. package/dist/userscripts/nhentai.user.js +5 -13
  19. package/dist/userscripts/obmenvsem.user.js +10 -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 +12 -30
  23. package/dist/userscripts/xhamster.user.js +12 -24
  24. package/dist/userscripts/xvideos.user.js +34 -6
  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 +60 -0
  28. package/src/core/data-handler/data-filter.ts +22 -96
  29. package/src/core/data-handler/data-manager.ts +75 -26
  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 +2 -1
  33. package/src/core/jabroni-config/scheme-selectors-mapping.ts +12 -0
  34. package/src/core/parsers/thumb-data-parser.ts +10 -16
  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 -6
  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 +4 -6
  41. package/src/userscripts/scripts/ebalka.ts +11 -3
  42. package/src/userscripts/scripts/eporner.ts +20 -39
  43. package/src/userscripts/scripts/erome.ts +9 -7
  44. package/src/userscripts/scripts/eroprofile.ts +5 -13
  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 +12 -6
  48. package/src/userscripts/scripts/namethatporn.ts +8 -15
  49. package/src/userscripts/scripts/nhentai.ts +6 -13
  50. package/src/userscripts/scripts/obmenvsem.ts +9 -3
  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 +14 -29
  54. package/src/userscripts/scripts/xhamster.ts +14 -17
  55. package/src/userscripts/scripts/xvideos.ts +33 -4
  56. 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 = 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>;
26
29
  constructor(rules: Rules);
27
30
  static isFiltered(el: HTMLElement): boolean;
28
31
  applyCSSFilters(wrapper?: (cssRule: string) => string): void;
29
- customDataSelectorFns: Record<string, DataSelectorFn<any>>;
30
- registerFilters(customFilters: (Record<string, DataSelectorFn<any>> | string)[]): void;
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
- }): (() => 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
+ 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
- export declare type DataFilterFn = (v: DataElement) => DataFilterResult;
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 interface DataFilterResult {
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 parentHomogenity?;
65
+ private containerHomogenity?;
50
66
  data: Map<string, DataElement>;
51
67
  private lazyImgLoader;
52
68
  dataFilter: DataFilter;
53
- constructor(rules: Rules, parentHomogenity?: Parameters<typeof checkHomogenity>[2] | undefined);
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: "Text Filter";
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
- dataHomogenity: ConstructorParameters<typeof DataManager>[1];
369
- customDataSelectorFns: (Record<string, DataSelectorFn<any>> | string)[];
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 SchemeOptions = (Parameters<typeof setupScheme>[0][0] | JabroniTypes.ExtractValuesByKey<typeof DefaultScheme, 'title'>)[];
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, stringsMeltInTitle?: boolean);
413
- static create(o?: Partial<Pick<ThumbDataParser, 'strategy' | 'selectors' | 'callback' | 'stringsMeltInTitle'>>): ThumbDataParser;
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