Skip to content

Commit 81566c0

Browse files
committed
finished new API
1 parent 7c6888a commit 81566c0

File tree

6 files changed

+48
-56
lines changed

6 files changed

+48
-56
lines changed

exampleVault/Meta Bind JS.md

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,19 @@
22
select: c
33
---
44

5-
test
6-
```meta-bind-js
7-
const declaration = mb.createDeclaration(
8-
'select',
9-
[
10-
{type: 'option', value: 'a'},
11-
{type: 'option', value: 'c'},
12-
]
13-
);
5+
```js-engine
6+
const mb = engine.getPlugin('obsidian-meta-bind-plugin').api;
147
15-
mb.bindDeclaration(declaration, 'select');
8+
const options = ['a', 'b', 'c'];
169
17-
const inputField = mb.createInputField(declaration, undefined, 'block');
10+
let declaration = mb.inputField.createInputFieldDeclaration();
11+
declaration = mb.inputField.setType(declaration, 'select');
12+
declaration = mb.inputField.setBindTargetMetadataField(declaration, 'select');
1813
19-
inputField.readSignal.registerListener({callback: (value) => console.log(`test ${value}`)})
14+
for (const option of options) {
15+
declaration = mb.inputField.addArgument(declaration, {name: 'option', value: option});
16+
}
2017
21-
ctx.addChild(inputField);
22-
```
18+
mb.createInputField(declaration, 'block', context.file.path, container, component);
2319
24-
```meta-bind-js
25-
const declaration = mb.createDeclaration(
26-
'select',
27-
[
28-
{type: 'option', value: 'd'},
29-
{type: 'option', value: 'e'},
30-
]
31-
);
32-
33-
mb.bindDeclaration(declaration, 'select');
34-
35-
const inputField = mb.createInputField(declaration, undefined, 'block');
36-
37-
ctx.addChild(inputField);
38-
```
39-
40-
```js
41-
const declaration = mb.createDeclaration(
42-
'select',
43-
[
44-
{type: 'option', value: 'a'},
45-
{type: 'option', value: 'c'},
46-
],
47-
'select'
48-
);
49-
50-
0000
51-
52-
const inputField = mb.createInputField(declaration, undefined, 'block');
53-
54-
ctx.addChild(inputField);
55-
```
56-
57-
test
20+
```

exampleVault/View Fields/View Field.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
number1: 11
33
number2: 20
4-
unit: km
4+
unit: m
55
---
66

77
`INPUT[number:number1]`

src/api/API.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { JsViewFieldMDRC } from '../renderChildren/JsViewFieldMDRC';
77
import MetaBindPlugin from '../main';
88
import { NewInputFieldDeclarationParser, UnvalidatedInputFieldDeclaration } from '../parsers/newInputFieldParser/InputFieldParser';
99
import { Component, MarkdownPostProcessorContext } from 'obsidian';
10+
import { InputFieldAPI } from './InputFieldAPI';
1011

1112
export class API {
1213
public plugin: MetaBindPlugin;
@@ -15,13 +16,17 @@ export class API {
1516
public viewFieldParser: ViewFieldDeclarationParser;
1617
public bindTargetParser: BindTargetParser;
1718

19+
public readonly inputField: InputFieldAPI;
20+
1821
constructor(plugin: MetaBindPlugin) {
1922
this.plugin = plugin;
2023

2124
// this.inputFieldParser = new InputFieldDeclarationParser();
2225
this.newInputFieldParser = new NewInputFieldDeclarationParser(this.plugin);
2326
this.viewFieldParser = new ViewFieldDeclarationParser();
2427
this.bindTargetParser = new BindTargetParser(this.plugin);
28+
29+
this.inputField = new InputFieldAPI(this);
2530
}
2631

2732
public createInputField(

src/api/InputFieldAPI.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { InputFieldArgumentType, InputFieldType } from '../parsers/InputFieldDeclarationParser';
2-
import { UnvalidatedInputFieldDeclaration } from '../parsers/newInputFieldParser/InputFieldParser';
2+
import { StructureParserResult, UnvalidatedInputFieldDeclaration } from '../parsers/newInputFieldParser/InputFieldParser';
33
import { ErrorCollection } from '../utils/errors/ErrorCollection';
44
import { API } from './API';
55
import { useSyncExternalStore } from 'preact/compat';
@@ -89,4 +89,25 @@ export class InputFieldAPI {
8989

9090
return unvalidatedDeclaration;
9191
}
92+
93+
public getTemplate(templateName: string): Readonly<UnvalidatedInputFieldDeclaration> | undefined {
94+
return this.api.newInputFieldParser.getTemplate(templateName);
95+
}
96+
97+
public merge(unvalidatedDeclaration: UnvalidatedInputFieldDeclaration, override: UnvalidatedInputFieldDeclaration): UnvalidatedInputFieldDeclaration {
98+
return {
99+
fullDeclaration: '',
100+
inputFieldType: override.inputFieldType !== undefined ? override.inputFieldType : unvalidatedDeclaration.inputFieldType,
101+
bindTargetFile: override.bindTargetFile !== undefined ? override.bindTargetFile : unvalidatedDeclaration.bindTargetFile,
102+
bindTargetPath: override.bindTargetPath !== undefined ? override.bindTargetPath : unvalidatedDeclaration.bindTargetPath,
103+
arguments: override.arguments.concat(unvalidatedDeclaration.arguments).reduce((arr, currentValue) => {
104+
// filter out duplicates
105+
if (arr.find(x => x.name === currentValue.name) === undefined) {
106+
arr.push(currentValue);
107+
}
108+
return arr;
109+
}, [] as { name: StructureParserResult; value?: StructureParserResult | undefined }[]),
110+
errorCollection: unvalidatedDeclaration.errorCollection.merge(override.errorCollection),
111+
};
112+
}
92113
}

src/parsers/newInputFieldParser/InputFieldParser.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { InputFieldParsingTreeParser } from './InputFieldParsingTreeParser';
1919
import { Abstract_PT_Node, ParsingTree, PT_Closure, PT_Element, PT_Element_Type, PT_Literal } from './ParsingTree';
2020
import { InputFieldToken, InputFieldTokenizer, InputFieldTokenType } from './InputFieldTokenizer';
2121
import { InputFieldTemplate } from '../../settings/Settings';
22+
import { deepFreeze } from '../../utils/Utils';
2223

2324
export interface UnvalidatedInputFieldDeclaration {
2425
fullDeclaration: string;
@@ -544,8 +545,8 @@ export class InputFieldDeclarationValidator {
544545
}
545546

546547
export interface InputFieldDeclarationTemplate {
547-
name: string;
548-
template: UnvalidatedInputFieldDeclaration;
548+
readonly name: string;
549+
readonly template: Readonly<UnvalidatedInputFieldDeclaration>;
549550
}
550551

551552
export class NewInputFieldDeclarationParser {
@@ -649,16 +650,18 @@ export class NewInputFieldDeclarationParser {
649650

650651
errorCollection.merge(templateDeclaration.errorCollection);
651652

652-
this.templates.push({
653+
const temp: InputFieldDeclarationTemplate = {
653654
name: template.name,
654655
template: templateDeclaration,
655-
});
656+
};
657+
658+
this.templates.push(deepFreeze(temp));
656659
}
657660

658661
return errorCollection;
659662
}
660663

661-
public getTemplate(templateName: string): UnvalidatedInputFieldDeclaration | undefined {
664+
public getTemplate(templateName: string): Readonly<UnvalidatedInputFieldDeclaration> | undefined {
662665
return this.templates.find(x => x.name === templateName)?.template;
663666
}
664667
}

src/utils/Utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ export function deepEquals(any1: unknown, any2: unknown): boolean {
254254
return any1 === any2;
255255
}
256256

257-
export function deepFreeze<T extends object>(object: T): T {
257+
export function deepFreeze<T extends object>(object: T): Readonly<T> {
258258
// Retrieve the property names defined on object
259259
const propNames: (string | symbol)[] = Reflect.ownKeys(object);
260260

0 commit comments

Comments
 (0)