@@ -60,6 +60,14 @@ function handleFileSelect(event) {
6060function handleFileLoad ( event ) {
6161 try {
6262 var all = JSON . parse ( event . target . result ) ;
63+ // fix for version <= 2.1
64+ // fixing json info
65+ for ( const f of all . fields ) {
66+ if ( f . others == undefined ) {
67+ f . others = [ ] ;
68+ }
69+ }
70+
6371 app . flds = all . fields ;
6472 app . old = all . old ;
6573 } catch ( e ) {
@@ -109,7 +117,8 @@ var app = new Vue({
109117 label : '' ,
110118 size : 12 ,
111119 id : '' ,
112- options : ''
120+ options : '' ,
121+ // others: [] // additional
113122 }
114123 } ,
115124 mounted ( ) {
@@ -240,6 +249,18 @@ var app = new Vue({
240249
241250 // loop fields make
242251 for ( const field of this . flds ) {
252+
253+ var additinalCls = '' ;
254+ var attrs = '' ;
255+ for ( const oth of field . others ) {
256+ if ( oth . name == 'class' ) {
257+ additinalCls = ' ' + oth . value ;
258+ } else {
259+ attrs += ' ' + oth . name + '="' + oth . value + '"' ;
260+ }
261+ }
262+
263+
243264 // var field = this.flds[i]; // must remove in next major version this comment
244265 switch ( field . type ) {
245266 case "row" :
@@ -251,6 +272,7 @@ var app = new Vue({
251272 hasRowBefore = true ;
252273 }
253274 // make grid row
275+ rowClass += additinalCls ;
254276 out += `\t <div class="${ rowClass } ">\n` ;
255277 break ;
256278 case 'input' :
@@ -268,15 +290,16 @@ var app = new Vue({
268290 var genClass = generalClass + ` @error('${ field . name } ') is-invalid @enderror` ;
269291 }
270292 } else
271- // handle bootstrap class
293+ // handle bootstrap class
272294 if ( this . theme == 'semanticui' ) {
273295 var genClass = ` @error('${ field . name } ') error @enderror` ;
274296 } else {
275297 var genClass = generalClass + ` @error('${ field . name } ') invalid @enderror` ;
276298 }
277299
300+ genClass += additinalCls ;
278301
279- var inp = `\t\t\t <input name="${ field . name } " type="${ field . option } " class="${ genClass } " placeholder="{{__('${ field . label } ')}}" value="{{old('${ field . name } '${ old } )}}" /> \n` ;
302+ var inp = `\t\t\t <input name="${ field . name } " type="${ field . option } " class="${ genClass } " placeholder="{{__('${ field . label } ')}}" value="{{old('${ field . name } '${ old } )}}" ${ attrs } /> \n` ;
280303 out += this . makeLabel ( field , inp ) ;
281304 break ;
282305
@@ -292,15 +315,16 @@ var app = new Vue({
292315 var genClass = generalClass + ` @error('${ field . name } ') is-invalid @enderror` ;
293316 } else
294317
295- // handle bootstrap class
318+ // handle bootstrap class
296319 if ( this . theme == 'semanticui' ) {
297320 var genClass = ` @error('${ field . name } ') error @enderror` ;
298321 } else {
299- var genClass = `materialize-textarea @error('${ field . name } ') invalid @enderror` ;
322+ var genClass = `materialize-textarea @error('${ field . name } ') invalid @enderror` ;
300323 }
301324
325+ genClass += additinalCls ;
302326
303- var inp = `\t\t\t <textarea name="${ field . name } " class="${ genClass } " placeholder="{{__('${ field . label } ')}}" >{{old('${ field . name } '${ old } )}}</textarea> \n` ;
327+ var inp = `\t\t\t <textarea name="${ field . name } " class="${ genClass } " placeholder="{{__('${ field . label } ')}}" ${ attrs } >{{old('${ field . name } '${ old } )}}</textarea> \n` ;
304328 out += this . makeLabel ( field , inp ) ;
305329 break ;
306330 case 'select' :
@@ -310,15 +334,15 @@ var app = new Vue({
310334 if ( this . theme == 'bootstrap' ) {
311335 var genClass = generalClass + ` @error('${ field . name } ') is-invalid @enderror` ;
312336 } else
313- // handle bootstrap class
337+ // handle bootstrap class
314338 if ( this . theme == 'semanticui' ) {
315339 var genClass = 'ui dropdown' + ` @error('${ field . name } ') error @enderror` ;
316340 } else {
317341 var genClass = generalClass + ` @error('${ field . name } ') invalid @enderror` ;
318342 }
319343
320-
321- var inp = `\t\t\t <select name="${ field . name } " id="${ field . id } " class="${ genClass } " > \n` ;
344+ genClass += additinalCls ;
345+ var inp = `\t\t\t <select name="${ field . name } " id="${ field . id } " class="${ genClass } " ${ attrs } > \n` ;
322346 try {
323347 var ops = field . option . split ( ':' ) ;
324348 var rs = ops [ 0 ] ;
@@ -365,8 +389,9 @@ var app = new Vue({
365389 }
366390
367391
392+ genClass += additinalCls ;
368393 out += `\t\t\t <label> </label> \n` ;
369- out += `\t\t\t <input name="${ field . name } " type="submit" class="${ genClass } " value="{{__('${ field . label } ')}}" /> \n` ;
394+ out += `\t\t\t <input name="${ field . name } " type="submit" class="${ genClass } " value="{{__('${ field . label } ')}}" ${ attrs } /> \n` ;
370395 out += `\t\t </div>\n` ;
371396 break ;
372397 case 'form-divider' :
@@ -375,25 +400,20 @@ var app = new Vue({
375400 case "bootstrap" :
376401 out += `\t </div> \n \t <div class="row"> \n` ;
377402 out += `\t\t <div class="col"><hr></div> \n` ;
378- out += `\t\t <div class="col-auto">{{ __('${ field . label } ')}}</div> \n` ;
403+ out += `\t\t <div class="col-auto"><span ${ attrs } class=" ${ additinalCls } ">{{ __('${ field . label } ')}}</span> </div> \n` ;
379404 out += `\t\t <div class="col"><hr></div> \n` ;
380405 out += `\t </div> \n \t <div class="row"> \n` ;
381406
382407 break ;
383408 case "semanticui" :
384- out += `\t\t <h4 class="ui dividing header">{__('${ field . label } ')}}</h4>\n` ;
409+ out += `\t\t <h4 ${ attrs } class="ui dividing header ${ additinalCls } ">{__('${ field . label } ')}}</h4>\n` ;
385410 break ;
386411 case "materialize" :
387- out += `\t\t <h5 >{__('${ field . label } ')}}</h5> <hr />\n` ;
412+ out += `\t\t <h5 ${ attrs } class=" ${ additinalCls } " >{__('${ field . label } ')}}</h5> <hr />\n` ;
388413 break ;
389414 default :
390415 console . log ( 'unknow theme' ) ;
391416 }
392-
393-
394- out += `\t\t\t <label> </label> \n` ;
395- out += `\t\t\t <input name="${ field . name } " type="submit" class="${ genClass } " value="{{__('${ field . label } ')}}" /> \n` ;
396- out += `\t\t </div>\n` ;
397417 break ;
398418 }
399419 }
@@ -412,7 +432,9 @@ var app = new Vue({
412432 // add field
413433 addField : function ( ) {
414434 this . raw . size = this . maxSize ;
415- this . flds . push ( clone ( this . raw ) ) ;
435+ var tmp = clone ( this . raw ) ;
436+ tmp . others = [ ] ;
437+ this . flds . push ( tmp ) ;
416438 this . initSemanticui ( ) ;
417439 } ,
418440 // initial semantic ui
@@ -432,6 +454,16 @@ var app = new Vue({
432454 }
433455 this . flds = fls ;
434456
457+ } ,
458+ // add attrib to filed from fields
459+ addAttr : function ( i ) {
460+ this . flds [ i ] . others . push (
461+ clone ( {
462+ 'name' : '' ,
463+ 'value' : ''
464+ } )
465+ ) ;
466+
435467 } ,
436468 // save json
437469 saveJson : function ( ) {
0 commit comments