Skip to content

Commit b19ea8b

Browse files
committed
add other property
1 parent 3dff5c0 commit b19ea8b

File tree

4 files changed

+77
-21
lines changed

4 files changed

+77
-21
lines changed

assets/css/style.css

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@ h1, h2, h3, h4, h5, h6, input, select {
2020
margin-bottom: 5px;
2121
}
2222

23+
.attr-base{
24+
border: 1px dashed silver;
25+
margin-bottom: 0;
26+
padding: 10px 0;
27+
}
28+
2329
#code{
2430
padding: 10px;
2531
background: #111;
2632
-ms-overflow-x: scroll;
27-
}
33+
}

assets/js/engine.js

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ function handleFileSelect(event) {
6060
function 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> &nbsp; </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> &nbsp; </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 () {

index.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,25 @@ <h4 class="ui dividing header">Elements</h4>
131131
<i class="times icon"></i>
132132
</div>
133133
</div>
134+
<div class="two wide field">
135+
<label> &nbsp;</label>
136+
<div class="ui button green fluid" title="Add additional attributes" @click="addAttr(i)">+ Attr</div>
137+
</div>
138+
139+
134140

141+
</div>
142+
<div class="three fields">
143+
<div class="field attr-base" v-for="attr in fld.others">
144+
<div class="ui grid ">
145+
<div class="eight wide column">
146+
<input type="text" placeholder="Name of attribute" v-model="attr.name"/>
147+
</div>
148+
<div class="eight wide column">
149+
<input type="text" placeholder="Value of attribute " v-model="attr.value"/>
150+
</div>
151+
</div>
152+
</div>
135153
</div>
136154
</div>
137155
<br>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "laravel-form-builder",
3-
"version": "2.1.0",
3+
"version": "2.2.0",
44
"description": "The laravel form builder code generator",
55
"main": "index.htm",
66
"scripts": {

0 commit comments

Comments
 (0)