@@ -90,53 +90,96 @@ export class InputFieldMarkdownRenderChild extends MarkdownRenderChild {
90
90
91
91
inputFieldArguments = inputFieldArguments . map ( x => x . trim ( ) ) ;
92
92
for ( const inputFieldArgument of inputFieldArguments ) {
93
- if ( inputFieldArgument . startsWith ( 'class' ) ) {
94
- let classArgumentsString : string = inputFieldArgumentsRegExp . exec ( inputFieldArgument ) [ 0 ] ;
95
- if ( ! classArgumentsString && classArgumentsString . length >= 2 ) {
96
- throw new Error ( 'class needs an argument' ) ;
97
- }
98
- classArgumentsString = classArgumentsString . substring ( 1 , classArgumentsString . length - 1 ) ;
99
- if ( ! classArgumentsString ) {
100
- throw new Error ( 'class argument can not be empty' ) ;
101
- }
93
+ const inputFieldArgumentName : string = this . extractInputFieldArgumentName ( inputFieldArgument ) ;
102
94
103
- let inputFieldStyleArgument : { name : string , value : string } = { name : 'class' , value : classArgumentsString } ;
95
+ if ( inputFieldArgumentName === 'class' ) {
96
+ const inputFieldArgumentValue : string = this . extractInputFieldArgumentValue ( inputFieldArgument ) ;
104
97
105
- this . arguments . push ( inputFieldStyleArgument ) ;
98
+ let inputFieldClassArgument : { name : string , value : string } = { name : inputFieldArgumentName , value : inputFieldArgumentValue } ;
99
+ this . arguments . push ( inputFieldClassArgument ) ;
106
100
}
107
101
108
- if ( inputFieldArgument . startsWith ( 'addLabels' ) ) {
102
+ if ( inputFieldArgumentName === 'addLabels' ) {
109
103
this . arguments . push ( { name : 'labels' , value : true } ) ;
110
104
}
105
+
106
+ if ( inputFieldArgumentName === 'minValue' ) {
107
+ const inputFieldArgumentValue : string = this . extractInputFieldArgumentValue ( inputFieldArgument ) ;
108
+ const inputFieldArgumentValueAsNumber : number = Number . parseInt ( inputFieldArgumentValue ) ;
109
+
110
+ if ( Number . isNaN ( inputFieldArgumentValueAsNumber ) ) {
111
+ throw new Error ( `argument \'${ inputFieldArgumentName } \' value must be of type number` ) ;
112
+ }
113
+
114
+ let inputFieldClassArgument : { name : string , value : number } = { name : inputFieldArgumentName , value : inputFieldArgumentValueAsNumber } ;
115
+ this . arguments . push ( inputFieldClassArgument ) ;
116
+ }
117
+
118
+ if ( inputFieldArgumentName === 'maxValue' ) {
119
+ const inputFieldArgumentValue : string = this . extractInputFieldArgumentValue ( inputFieldArgument ) ;
120
+ const inputFieldArgumentValueAsNumber : number = Number . parseInt ( inputFieldArgumentValue ) ;
121
+
122
+ if ( Number . isNaN ( inputFieldArgumentValueAsNumber ) ) {
123
+ throw new Error ( `argument \'${ inputFieldArgumentName } \' value must be of type number` ) ;
124
+ }
125
+
126
+ let inputFieldClassArgument : { name : string , value : number } = { name : inputFieldArgumentName , value : inputFieldArgumentValueAsNumber } ;
127
+ this . arguments . push ( inputFieldClassArgument ) ;
128
+ }
111
129
}
112
130
}
113
131
132
+ extractInputFieldArgumentName ( argumentString : string ) : string {
133
+ const argumentsRegExp : RegExp = new RegExp ( / \( .* \) / ) ;
134
+
135
+ return argumentString . replace ( argumentsRegExp , '' ) ;
136
+ }
137
+
138
+ extractInputFieldArgumentValue ( argumentString : string ) : string {
139
+ const argumentsRegExp : RegExp = new RegExp ( / \( .* \) / ) ;
140
+
141
+ let argumentName = this . extractInputFieldArgumentName ( argumentString ) ;
142
+
143
+ let argumentValueRegExpResult = argumentsRegExp . exec ( argumentString ) ;
144
+ if ( ! argumentValueRegExpResult ) {
145
+ throw new Error ( `argument \'${ argumentName } \' requires a value` ) ;
146
+ }
147
+ let argumentValue = argumentsRegExp . exec ( argumentString ) [ 0 ] ;
148
+ if ( ! argumentValue && argumentValue . length >= 2 ) {
149
+ throw new Error ( `argument \'${ argumentName } \' requires a value` ) ;
150
+ }
151
+ argumentValue = argumentValue . substring ( 1 , argumentValue . length - 1 ) ;
152
+ if ( ! argumentValue ) {
153
+ throw new Error ( `argument \'${ argumentName } \' value can not be empty` ) ;
154
+ }
155
+
156
+ return argumentValue ;
157
+ }
158
+
114
159
parseBindTarget ( bindTarget : string ) {
115
160
let bindTargetParts = bindTarget . split ( '#' ) ;
116
161
if ( bindTargetParts . length === 1 ) { // same file
117
162
this . bindTargetMetadataField = bindTarget ;
118
163
const files = this . plugin . getFilesByName ( this . filePath ) ;
119
164
if ( files . length === 0 ) {
120
- this . error = 'file not fond.' ;
121
- return ;
165
+ throw new Error ( 'file not found' ) ;
122
166
} else if ( files . length === 1 ) {
123
167
this . file = files [ 0 ] ;
124
168
} else {
125
- throw new Error ( 'multiple files found. please specify the file path. ' ) ;
169
+ throw new Error ( 'multiple files found. please specify the file path' ) ;
126
170
}
127
171
} else if ( bindTargetParts . length === 2 ) {
128
172
this . bindTargetMetadataField = bindTargetParts [ 1 ] ;
129
173
const files = this . plugin . getFilesByName ( bindTargetParts [ 0 ] ) ;
130
174
if ( files . length === 0 ) {
131
- this . error = 'file not fond.' ;
132
- return ;
175
+ throw new Error ( 'file not found' ) ;
133
176
} else if ( files . length === 1 ) {
134
177
this . file = files [ 0 ] ;
135
178
} else {
136
- throw new Error ( 'multiple files found. please specify the file path. ' ) ;
179
+ throw new Error ( 'multiple files found. please specify the file path' ) ;
137
180
}
138
181
} else {
139
- throw new Error ( 'invalid binding. ' ) ;
182
+ throw new Error ( 'invalid binding' ) ;
140
183
}
141
184
this . metaData = this . plugin . getMetaDataForFile ( this . file ) ;
142
185
}
@@ -170,8 +213,12 @@ export class InputFieldMarkdownRenderChild extends MarkdownRenderChild {
170
213
}
171
214
}
172
215
216
+ getArguments ( name : string ) {
217
+ return this . arguments . filter ( x => x . name === name ) ;
218
+ }
219
+
173
220
getArgument ( name : string ) {
174
- return this . arguments . filter ( x => x . name === name ) . first ( ) ;
221
+ return this . getArguments ( name ) . first ( ) ;
175
222
}
176
223
177
224
async onload ( ) {
@@ -193,9 +240,9 @@ export class InputFieldMarkdownRenderChild extends MarkdownRenderChild {
193
240
194
241
this . inputField . render ( container ) ;
195
242
196
- const classArgument = this . getArgument ( 'class' ) ;
243
+ const classArgument = this . getArguments ( 'class' ) ;
197
244
if ( classArgument ) {
198
- this . inputField . getHtmlElement ( ) . addClass ( classArgument . value ) ;
245
+ this . inputField . getHtmlElement ( ) . addClasses ( classArgument . map ( x => x . value ) ) ;
199
246
}
200
247
201
248
this . containerEl . empty ( ) ;
0 commit comments