@@ -19,6 +19,8 @@ export class MarkdownInputField extends MarkdownRenderChild {
19
19
intervalCounter : number ;
20
20
valueQueue : any [ ] ;
21
21
22
+ arguments : { name : string , value : any } [ ] ;
23
+
22
24
constructor ( containerEl : HTMLElement , fullDeclaration : string , plugin : MetaBindPlugin , filePath : string , uid : number ) {
23
25
super ( containerEl ) ;
24
26
@@ -33,14 +35,50 @@ export class MarkdownInputField extends MarkdownRenderChild {
33
35
this . intervalCounter = 0 ;
34
36
this . limitInterval = window . setInterval ( this . incrementInterval . bind ( this ) , 10 ) ;
35
37
36
- const regExp = new RegExp ( / \[ .* ?\] / ) ;
37
- let declaration = regExp . exec ( fullDeclaration ) [ 0 ] ;
38
+ const declarationRegExp : RegExp = new RegExp ( / \[ .* ?\] / ) ;
39
+ let declaration : string = declarationRegExp . exec ( fullDeclaration ) [ 0 ] ;
38
40
declaration = declaration . replace ( '[' , '' ) . replace ( ']' , '' ) ;
39
41
let declarationParts : string [ ] = declaration . split ( ':' ) ;
40
42
let boundTo : string = declarationParts [ 1 ] ?? '' ;
41
43
42
44
this . isBound = ! ! boundTo ;
43
- this . inputFieldType = declarationParts [ 0 ] . toLowerCase ( ) ;
45
+ let inputFieldTypeWithArguments : string = declarationParts [ 0 ] ;
46
+ const inputFieldArgumentsRegExp : RegExp = new RegExp ( / \( .* \) / ) ;
47
+ this . inputFieldType = inputFieldTypeWithArguments . replace ( inputFieldArgumentsRegExp , '' ) ;
48
+
49
+ this . arguments = [ ] ;
50
+ let inputFieldArgumentsRegExpResult = inputFieldArgumentsRegExp . exec ( inputFieldTypeWithArguments ) ;
51
+ let inputFieldArgumentsString = inputFieldArgumentsRegExpResult ? inputFieldArgumentsRegExpResult [ 0 ] : '' ;
52
+ console . log ( inputFieldArgumentsString ) ;
53
+ if ( inputFieldArgumentsString ) {
54
+ inputFieldArgumentsString = inputFieldArgumentsString . substring ( 1 , inputFieldArgumentsString . length - 1 ) ;
55
+ let inputFieldArguments : string [ ] = inputFieldArgumentsString . split ( ',' ) ;
56
+
57
+ inputFieldArguments = inputFieldArguments . map ( x => x . trim ( ) ) ;
58
+ for ( const inputFieldArgument of inputFieldArguments ) {
59
+ if ( inputFieldArgument . startsWith ( 'class' ) ) {
60
+ let classArgumentsString : string = inputFieldArgumentsRegExp . exec ( inputFieldArgument ) [ 0 ] ;
61
+ if ( ! classArgumentsString && classArgumentsString . length >= 2 ) {
62
+ this . error = 'class needs an argument' ;
63
+ return ;
64
+ }
65
+ classArgumentsString = classArgumentsString . substring ( 1 , classArgumentsString . length - 1 ) ;
66
+ if ( ! classArgumentsString ) {
67
+ this . error = 'class argument can not be empty' ;
68
+ return ;
69
+ }
70
+
71
+ let inputFieldStyleArgument : { name : string , value : string } = { name : 'class' , value : classArgumentsString } ;
72
+
73
+ this . arguments . push ( inputFieldStyleArgument ) ;
74
+ }
75
+
76
+ if ( inputFieldArgument . startsWith ( 'addLabels' ) ) {
77
+ this . arguments . push ( { name : 'labels' , value : true } ) ;
78
+ }
79
+ }
80
+ }
81
+
44
82
45
83
if ( this . isBound ) {
46
84
let boundToParts = boundTo . split ( '#' ) ;
@@ -75,6 +113,7 @@ export class MarkdownInputField extends MarkdownRenderChild {
75
113
this . metaData = plugin . getMetaDataForFile ( this . file ) ;
76
114
}
77
115
116
+
78
117
// console.log(this, 3)
79
118
}
80
119
@@ -112,7 +151,7 @@ export class MarkdownInputField extends MarkdownRenderChild {
112
151
}
113
152
114
153
async onload ( ) {
115
- //console.log('load', this);
154
+ Logger . logDebug ( this ) ;
116
155
117
156
this . metaData = await this . metaData ;
118
157
@@ -128,28 +167,54 @@ export class MarkdownInputField extends MarkdownRenderChild {
128
167
129
168
this . plugin . registerMarkdownInputField ( this ) ;
130
169
170
+ let element : HTMLElement = null ;
171
+
131
172
if ( this . inputFieldType === 'toggle' ) {
132
173
const newEl = new ToggleComponent ( container ) ;
133
174
newEl . setValue ( this . getInitialValue ( ) ) ;
134
175
newEl . onChange ( async ( value ) => {
135
176
await this . updateMetaData ( value ) ;
136
177
} ) ;
137
178
this . inputElement = newEl ;
179
+ element = newEl . toggleEl ;
138
180
} else if ( this . inputFieldType === 'slider' ) {
181
+ let minValue = 0 ;
182
+ let maxValue = 100 ;
183
+
184
+ let labelArgument = this . arguments . filter ( x => x . name === 'labels' ) . first ( ) ;
185
+ if ( labelArgument && labelArgument . value === true ) {
186
+ container . createSpan ( { text : minValue . toString ( ) } ) ;
187
+ }
188
+
139
189
const newEl = new SliderComponent ( container ) ;
140
190
newEl . setValue ( this . getInitialValue ( ) ) ;
141
191
newEl . onChange ( async ( value ) => {
142
192
await this . updateMetaData ( value ) ;
143
193
} ) ;
144
194
newEl . setDynamicTooltip ( ) ;
195
+
196
+ if ( labelArgument && labelArgument . value === true ) {
197
+ container . createSpan ( { text : maxValue . toString ( ) } ) ;
198
+ }
199
+
145
200
this . inputElement = newEl ;
201
+ element = newEl . sliderEl ;
146
202
} else if ( this . inputFieldType === 'text' ) {
147
203
const newEl = new TextComponent ( container ) ;
148
204
newEl . setValue ( this . getInitialValue ( ) ) ;
149
205
newEl . onChange ( async ( value ) => {
150
206
await this . updateMetaData ( value ) ;
151
207
} ) ;
152
208
this . inputElement = newEl ;
209
+ element = newEl . inputEl ;
210
+ }
211
+
212
+ if ( element ) {
213
+ for ( const argument of this . arguments ) {
214
+ if ( argument . name === 'class' ) {
215
+ element . addClass ( argument . value ) ;
216
+ }
217
+ }
153
218
}
154
219
155
220
this . containerEl . empty ( ) ;
0 commit comments