@@ -16,18 +16,19 @@ function clone(obj) {
1616 * for number in function
1717 * @type {*[] }
1818 */
19- var a = [ '' , 'one ' , 'two ' , 'three ' , 'four ' , 'five ' , 'six ' , 'seven ' , 'eight ' , 'nine ' , 'ten ' , 'eleven ' , 'twelve ' , 'thirteen ' , 'fourteen ' , 'fifteen ' , 'sixteen ' , 'seventeen ' , 'eighteen ' , 'nineteen ' ] ;
20- var b = [ '' , '' , 'twenty' , 'thirty' , 'forty' , 'fifty' , 'sixty' , 'seventy' , 'eighty' , 'ninety' ] ;
19+ var a = [ '' , 'one ' , 'two ' , 'three ' , 'four ' , 'five ' , 'six ' , 'seven ' , 'eight ' , 'nine ' , 'ten ' , 'eleven ' , 'twelve ' , 'thirteen ' , 'fourteen ' , 'fifteen ' , 'sixteen ' , 'seventeen ' , 'eighteen ' , 'nineteen ' ] ;
20+ var b = [ '' , '' , 'twenty' , 'thirty' , 'forty' , 'fifty' , 'sixty' , 'seventy' , 'eighty' , 'ninety' ] ;
2121
2222/**
2323 * number to words
2424 * @param num
2525 * @returns {string }
2626 */
27- function inWords ( num ) {
27+ function inWords ( num ) {
2828 if ( ( num = num . toString ( ) ) . length > 9 ) return 'overflow' ;
2929 n = ( '000000000' + num ) . substr ( - 9 ) . match ( / ^ ( \d { 2 } ) ( \d { 2 } ) ( \d { 2 } ) ( \d { 1 } ) ( \d { 2 } ) $ / ) ;
30- if ( ! n ) return ; var str = '' ;
30+ if ( ! n ) return ;
31+ var str = '' ;
3132 str += ( n [ 1 ] != 0 ) ? ( a [ Number ( n [ 1 ] ) ] || b [ n [ 1 ] [ 0 ] ] + ' ' + a [ n [ 1 ] [ 1 ] ] ) + 'crore ' : '' ;
3233 str += ( n [ 2 ] != 0 ) ? ( a [ Number ( n [ 2 ] ) ] || b [ n [ 2 ] [ 0 ] ] + ' ' + a [ n [ 2 ] [ 1 ] ] ) + 'lakh ' : '' ;
3334 str += ( n [ 3 ] != 0 ) ? ( a [ Number ( n [ 3 ] ) ] || b [ n [ 3 ] [ 0 ] ] + ' ' + a [ n [ 3 ] [ 1 ] ] ) + 'thousand ' : '' ;
@@ -41,13 +42,21 @@ function init() {
4142 document . getElementById ( 'json-file' ) . addEventListener ( 'change' , handleFileSelect , false ) ;
4243}
4344
45+ /**
46+ * handle file selected
47+ * @param event
48+ */
4449function handleFileSelect ( event ) {
4550 const reader = new FileReader ( ) ;
4651 reader . onload = handleFileLoad ;
4752 reader . readAsText ( event . target . files [ 0 ] ) ;
4853
4954}
5055
56+ /**
57+ * handl file loads
58+ * @param event
59+ */
5160function handleFileLoad ( event ) {
5261 try {
5362 var all = JSON . parse ( event . target . result ) ;
@@ -80,17 +89,19 @@ var app = new Vue({
8089 el : '#app' ,
8190 data : {
8291 code : '' ,
83- theme : 'bootstrap' ,
84- method : 'get' ,
92+ theme : 'bootstrap' , // default theme
93+ method : 'get' , // default methods
8594 old : '' ,
86- flds : [ ] ,
95+ flds : [ ] , // list of field
96+ // type of inputs
8797 typ : [
8898 'row' ,
8999 'input' ,
90100 'textaera' ,
91101 'select' ,
92102 'submit'
93103 ] ,
104+ // raw field for edit
94105 raw : {
95106 type : 'input' ,
96107 name : '' ,
@@ -105,12 +116,15 @@ var app = new Vue({
105116 this . initSemanticui ( ) ;
106117
107118 } , computed : {
119+ // size for handle
108120 siz : function ( ) {
109121 if ( this . theme == 'semanticui' ) {
110122 return [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ] ;
111123 }
112124 return [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ] ;
113125 } ,
126+
127+ // calculate max column count
114128 maxSize : function ( ) {
115129 if ( this . theme == 'semanticui' ) {
116130 return 16 ;
@@ -120,20 +134,23 @@ var app = new Vue({
120134 }
121135 } , methods : {
122136
137+ // set old default
123138 defaultOld : function ( ) {
124- $ ( "#old" ) . val ( $ ( "#old" ) . attr ( 'placeholder' ) ) ;
139+ $ ( "#old" ) . val ( $ ( "#old" ) . attr ( 'placeholder' ) ) ;
125140 } ,
141+ // make labael
126142 makeLabel : function ( field , inp ) {
127143
128144 var out = '' ;
145+ // set default id
129146 if ( field . id . trim ( ) == '' ) {
130147 field . id = field . name ;
131148 }
132149
133150
134151 switch ( this . theme ) {
135152 case "bootstrap" :
136-
153+ // make bootstrap column
137154 out += `\t\t <div class="col-md-${ field . size } mt-3">\n` ;
138155 out += `\t\t\t <div class="form-control">\n` ;
139156 out += `\t\t\t\t <label for="${ field . id } "> \n` ;
@@ -145,14 +162,14 @@ var app = new Vue({
145162
146163 break ;
147164 case "semanticui" :
148-
165+ // make semanticui column
149166 out += `\t\t <div class="${ $ . trim ( inWords ( field . size ) ) } wide column">\n` ;
150167 out += `\t\t\t <div class="field">\n` ;
151168 out += `\t\t\t\t <label for="${ field . id } "> \n` ;
152169 out += `\t\t\t\t\t {{__('${ field . label } ')}} \n` ;
153170 out += `\t\t\t\t </label> \n` ;
154171 out += `\t\t\t\t <div class="ui input"> \n` ;
155- out += inp ;
172+ out += '\t\t' + inp ;
156173 out += `\t\t\t\t </div> \n` ;
157174 out += `\t\t\t </div>\n` ;
158175 out += `\t\t </div>\n` ;
@@ -165,6 +182,8 @@ var app = new Vue({
165182
166183 return out ;
167184 } ,
185+
186+ // generate form
168187 generateForm : function ( ) {
169188 var out = '' ;
170189 var hasRowBefore = false ;
@@ -177,10 +196,12 @@ var app = new Vue({
177196 extMethod = `@method('${ this . method . toUpperCase ( ) } ')` ;
178197 }
179198 }
180- // make class
199+ // make reset class
181200 var formClass = '' ;
182201 var generalClass = '' ;
183202 var rowClass = '' ;
203+
204+ // make default classes
184205 switch ( this . theme ) {
185206 case "bootstrap" :
186207 generalClass = 'form-control' ;
@@ -199,8 +220,10 @@ var app = new Vue({
199220 out += `<form class="${ formClass } " method="${ method } " action=""> \n` ;
200221 out += `\t @csrf \n` ;
201222 out += `\t ${ extMethod } \n` ;
202- for ( const i in this . flds ) {
203- var field = this . flds [ i ] ;
223+
224+ // loop fields make
225+ for ( const field of this . flds ) {
226+ // var field = this.flds[i]; // must remove in next major version this comment
204227 switch ( field . type ) {
205228 case "row" :
206229
@@ -210,9 +233,11 @@ var app = new Vue({
210233 } else {
211234 hasRowBefore = true ;
212235 }
236+ // make grid row
213237 out += `\t <div class="${ rowClass } ">\n` ;
214238 break ;
215239 case 'input' :
240+
216241 var old = '' ;
217242 if ( this . old . trim ( ) !== '' ) {
218243 old = ',' + this . old . replace ( '#name' , field . name ) ;
@@ -226,7 +251,6 @@ var app = new Vue({
226251 var genClass = generalClass + ` @error('${ field . name } ') is-invalid @enderror` ;
227252 }
228253 } else
229-
230254 // handle bootstrap class
231255 if ( this . theme == 'semanticui' ) {
232256 var genClass = ` @error('${ field . name } ') error @enderror` ;
@@ -238,6 +262,8 @@ var app = new Vue({
238262 var inp = `\t\t\t <input name="${ field . name } " type="${ field . option } " class="${ genClass } " placeholder="{{__('${ field . label } ')}}" value="{{old('${ field . name } '${ old } )}}" /> \n` ;
239263 out += this . makeLabel ( field , inp ) ;
240264 break ;
265+
266+
241267 case 'textaera' :
242268 var old = '' ;
243269 if ( this . old . trim ( ) !== '' ) {
@@ -257,7 +283,6 @@ var app = new Vue({
257283 }
258284
259285
260-
261286 var inp = `\t\t\t <textarea name="${ field . name } " class="${ genClass } " placeholder="{{__('${ field . label } ')}}" >{{old('${ field . name } '${ old } )}}</textarea> \n` ;
262287 out += this . makeLabel ( field , inp ) ;
263288 break ;
@@ -276,7 +301,6 @@ var app = new Vue({
276301 }
277302
278303
279-
280304 var inp = `\t\t\t <select name="${ field . name } " id="${ field . id } " class="${ genClass } " > \n` ;
281305 try {
282306 var ops = field . option . split ( ':' ) ;
@@ -338,16 +362,20 @@ var app = new Vue({
338362 hljs . highlightBlock ( block ) ;
339363 } ) ;
340364 } ,
365+ // add field
341366 addField : function ( ) {
342367 this . raw . size = this . maxSize ;
343368 this . flds . push ( clone ( this . raw ) ) ;
344369 this . initSemanticui ( ) ;
345370 } ,
371+ // initial semantic ui
346372 initSemanticui : function ( ) {
347373 setTimeout ( function ( ) {
348374 $ ( '.ui.dropdown' ) . dropdown ( ) ;
349375 } , 200 ) ;
350- } , removeField : function ( i ) {
376+ } ,
377+ // remove filed from fields
378+ removeField : function ( i ) {
351379 var fls = [ ] ;
352380 for ( const k in this . flds ) {
353381 let itm = this . flds [ k ] ;
@@ -357,19 +385,26 @@ var app = new Vue({
357385 }
358386 this . flds = fls ;
359387
360- } , saveJson : function ( ) {
388+ } ,
389+ // save json
390+ saveJson : function ( ) {
361391 var all = {
362392 fields : this . flds ,
363393 old : this . old
364394 } ;
365395 downloadObjectAsJson ( all , '4xmen-laravel-form-builder-export' ) ;
366- } , loadJson : function ( ) {
396+ } ,
397+ // load json
398+ loadJson : function ( ) {
367399 init ( ) ;
368400 $ ( "#json-file" ) . click ( ) ;
369- } , clearAll : function ( ) {
401+ } ,
402+ // clear all fields
403+ clearAll : function ( ) {
370404 this . flds = [ ] ;
371405 this . old = '' ;
372- } , changeTheme : function ( ) {
406+ } ,
407+ changeTheme : function ( ) {
373408 }
374409 }
375410} ) ;
0 commit comments