Skip to content

Commit 505576e

Browse files
committed
fix #221
1 parent 6291f18 commit 505576e

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

src/api/API.ts

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,18 @@ export function isFieldTypeAllowedInline(type: FieldType): boolean {
3131
return type === FieldType.INPUT_FIELD || type === FieldType.VIEW_FIELD || type === FieldType.INLINE_BUTTON;
3232
}
3333

34-
export class API<Plugin extends IPlugin> {
34+
export interface APIFieldOverrides {
35+
inputFieldParser?: InputFieldDeclarationParser;
36+
viewFieldParser?: ViewFieldParser;
37+
bindTargetParser?: BindTargetParser;
38+
inputFieldFactory?: InputFieldFactory;
39+
viewFieldFactory?: ViewFieldFactory;
40+
buttonActionRunner?: ButtonActionRunner;
41+
buttonManager?: ButtonManager;
42+
syntaxHighlighting?: SyntaxHighlightingAPI;
43+
}
44+
45+
export abstract class API<Plugin extends IPlugin> {
3546
readonly plugin: Plugin;
3647
readonly inputField: InputFieldAPI;
3748

@@ -47,21 +58,21 @@ export class API<Plugin extends IPlugin> {
4758

4859
readonly syntaxHighlighting: SyntaxHighlightingAPI;
4960

50-
constructor(plugin: Plugin) {
61+
constructor(plugin: Plugin, overrides?: APIFieldOverrides) {
5162
this.plugin = plugin;
5263
this.inputField = new InputFieldAPI(plugin);
5364

54-
this.inputFieldParser = new InputFieldDeclarationParser(plugin);
55-
this.viewFieldParser = new ViewFieldParser(plugin);
56-
this.bindTargetParser = new BindTargetParser(plugin);
65+
this.inputFieldParser = overrides?.inputFieldParser ?? new InputFieldDeclarationParser(plugin);
66+
this.viewFieldParser = overrides?.viewFieldParser ?? new ViewFieldParser(plugin);
67+
this.bindTargetParser = overrides?.bindTargetParser ?? new BindTargetParser(plugin);
5768

58-
this.inputFieldFactory = new InputFieldFactory(plugin);
59-
this.viewFieldFactory = new ViewFieldFactory(plugin);
69+
this.inputFieldFactory = overrides?.inputFieldFactory ?? new InputFieldFactory(plugin);
70+
this.viewFieldFactory = overrides?.viewFieldFactory ?? new ViewFieldFactory(plugin);
6071

61-
this.buttonActionRunner = new ButtonActionRunner(plugin);
62-
this.buttonManager = new ButtonManager();
72+
this.buttonActionRunner = overrides?.buttonActionRunner ?? new ButtonActionRunner(plugin);
73+
this.buttonManager = overrides?.buttonManager ?? new ButtonManager(plugin);
6374

64-
this.syntaxHighlighting = new SyntaxHighlightingAPI(plugin);
75+
this.syntaxHighlighting = overrides?.syntaxHighlighting ?? new SyntaxHighlightingAPI(plugin);
6576
}
6677

6778
public createField(

src/api/ObsidianAPI.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,17 @@ import { InputFieldBase } from '../fields/inputFields/InputFieldBase';
2828
import { FieldMDRC } from '../renderChildren/FieldMDRC';
2929
import { MarkdownRenderChildWidget } from '../cm6/Cm6_Widgets';
3030
import { ErrorLevel, MetaBindInternalError } from '../utils/errors/MetaBindErrors';
31+
import { ObsidianButtonActionRunner } from '../fields/button/ObsidianButtonActionRunner';
3132

3233
export interface ComponentLike {
3334
addChild(child: Component): void;
3435
}
3536

3637
export class ObsidianAPI extends API<MetaBindPlugin> {
3738
constructor(plugin: MetaBindPlugin) {
38-
super(plugin);
39+
super(plugin, {
40+
buttonActionRunner: new ObsidianButtonActionRunner(plugin),
41+
});
3942
}
4043

4144
public createMDRC(

src/fields/button/ButtonManager.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@ import { getUUID } from '../../utils/Utils';
33
import { ErrorCollection } from '../../utils/errors/ErrorCollection';
44
import { ErrorLevel, MetaBindButtonError } from '../../utils/errors/MetaBindErrors';
55
import { RefCounter } from '../../utils/RefCounter';
6+
import { type IPlugin } from '../../IPlugin';
67

78
export class ButtonManager {
9+
readonly plugin: IPlugin;
10+
811
// filePath -> buttonId -> ref counter of buttonConfig
912
buttons: Map<string, Map<string, RefCounter<ButtonConfig>>>;
1013
// filePath -> buttonId -> listenerId -> callback
1114
buttonLoadListeners: Map<string, Map<string, Map<string, (config: ButtonConfig) => void>>>;
1215
buttonTemplates: Map<string, ButtonConfig>;
1316

14-
constructor() {
17+
constructor(plugin: IPlugin) {
18+
this.plugin = plugin;
19+
1520
this.buttons = new Map();
1621
this.buttonLoadListeners = new Map();
1722
this.buttonTemplates = new Map();

0 commit comments

Comments
 (0)