@@ -19,6 +19,8 @@ export class MarkdownInputField extends MarkdownRenderChild {
1919 intervalCounter : number ;
2020 valueQueue : any [ ] ;
2121
22+ arguments : { name : string , value : any } [ ] ;
23+
2224 constructor ( containerEl : HTMLElement , fullDeclaration : string , plugin : MetaBindPlugin , filePath : string , uid : number ) {
2325 super ( containerEl ) ;
2426
@@ -33,14 +35,50 @@ export class MarkdownInputField extends MarkdownRenderChild {
3335 this . intervalCounter = 0 ;
3436 this . limitInterval = window . setInterval ( this . incrementInterval . bind ( this ) , 10 ) ;
3537
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 ] ;
3840 declaration = declaration . replace ( '[' , '' ) . replace ( ']' , '' ) ;
3941 let declarationParts : string [ ] = declaration . split ( ':' ) ;
4042 let boundTo : string = declarationParts [ 1 ] ?? '' ;
4143
4244 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+
4482
4583 if ( this . isBound ) {
4684 let boundToParts = boundTo . split ( '#' ) ;
@@ -75,6 +113,7 @@ export class MarkdownInputField extends MarkdownRenderChild {
75113 this . metaData = plugin . getMetaDataForFile ( this . file ) ;
76114 }
77115
116+
78117 // console.log(this, 3)
79118 }
80119
@@ -112,7 +151,7 @@ export class MarkdownInputField extends MarkdownRenderChild {
112151 }
113152
114153 async onload ( ) {
115- //console.log('load', this);
154+ Logger . logDebug ( this ) ;
116155
117156 this . metaData = await this . metaData ;
118157
@@ -128,28 +167,54 @@ export class MarkdownInputField extends MarkdownRenderChild {
128167
129168 this . plugin . registerMarkdownInputField ( this ) ;
130169
170+ let element : HTMLElement = null ;
171+
131172 if ( this . inputFieldType === 'toggle' ) {
132173 const newEl = new ToggleComponent ( container ) ;
133174 newEl . setValue ( this . getInitialValue ( ) ) ;
134175 newEl . onChange ( async ( value ) => {
135176 await this . updateMetaData ( value ) ;
136177 } ) ;
137178 this . inputElement = newEl ;
179+ element = newEl . toggleEl ;
138180 } 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+
139189 const newEl = new SliderComponent ( container ) ;
140190 newEl . setValue ( this . getInitialValue ( ) ) ;
141191 newEl . onChange ( async ( value ) => {
142192 await this . updateMetaData ( value ) ;
143193 } ) ;
144194 newEl . setDynamicTooltip ( ) ;
195+
196+ if ( labelArgument && labelArgument . value === true ) {
197+ container . createSpan ( { text : maxValue . toString ( ) } ) ;
198+ }
199+
145200 this . inputElement = newEl ;
201+ element = newEl . sliderEl ;
146202 } else if ( this . inputFieldType === 'text' ) {
147203 const newEl = new TextComponent ( container ) ;
148204 newEl . setValue ( this . getInitialValue ( ) ) ;
149205 newEl . onChange ( async ( value ) => {
150206 await this . updateMetaData ( value ) ;
151207 } ) ;
152208 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+ }
153218 }
154219
155220 this . containerEl . empty ( ) ;
0 commit comments