Skip to content

Commit 01a3be9

Browse files
committed
improve generation
1 parent 74fcd94 commit 01a3be9

23 files changed

+18355
-12
lines changed

dist/json-schema-form-generator.js

+16,959-3
Large diffs are not rendered by default.

dist/json-schema-form-generator.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/json-schema-form-generator.min.js

+3-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/json-schema-form-generator.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gulpfile.js

+7
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ const watchFiles = ['src/**/*', 'test/**/*', 'package.json', '**/.eslintrc', '.j
115115
function watch() {
116116
gulp.watch(watchFiles, ['test']);
117117
}
118+
// Run the headless unit tests as you make changes.
119+
function watchAndBuild() {
120+
gulp.watch(watchFiles, ['build']);
121+
}
118122

119123
function testBrowser() {
120124
// Our testing bundle is made up of our unit tests, which
@@ -196,5 +200,8 @@ gulp.task('test-browser', ['lint', 'clean-tmp'], testBrowser);
196200
// Run the headless unit tests as you make changes.
197201
gulp.task('watch', watch);
198202

203+
// Build new dist as you make changes.
204+
gulp.task('watch-build', watchAndBuild);
205+
199206
// An alias of test
200207
gulp.task('default', ['test']);

package.json

+6-3
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
},
1414
"repository": {
1515
"type": "git",
16-
"url": "https://github.com/json-schema-form/json-schema-form-genetator-es6.git"
16+
"url": "https://github.com/json-schema-form/json-schema-form-generator-es6.git"
1717
},
1818
"keywords": [],
1919
"author": "Raphael Owino <[email protected]>",
2020
"license": "MIT",
2121
"bugs": {
22-
"url": "https://github.com/json-schema-form/json-schema-form-genetator-es6/issues"
22+
"url": "https://github.com/json-schema-form/json-schema-form-generator-es6/issues"
2323
},
24-
"homepage": "https://github.com/json-schema-form/json-schema-form-genetator-es6",
24+
"homepage": "https://github.com/json-schema-form/json-schema-form-generator-es6",
2525
"devDependencies": {
2626
"babel-core": "^6.3.26",
2727
"babel-loader": "^6.2.0",
@@ -54,5 +54,8 @@
5454
"babelBoilerplateOptions": {
5555
"entryFileName": "json-schema-form-generator.js",
5656
"mainVarName": "jsonSchemaFormGenerator"
57+
},
58+
"dependencies": {
59+
"lodash": "^4.13.1"
5760
}
5861
}

src/form-definitions-generator.js

+176
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
var _ = require('lodash');
2+
3+
const formDefinitionsGenerator = {
4+
generateField(field, definitions){
5+
"use strict";
6+
let morpher = _.camelCase('_generate_' + field.type.replace('-', '_') + '_field');
7+
8+
definitions = this.generateStandardFormAttributes(field, definitions);
9+
definitions = this.generateStandardSchemaAttributes(field, definitions);
10+
11+
if (_.isFunction(this[morpher])) {
12+
definitions = this[morpher](field, definitions);
13+
}
14+
15+
return definitions;
16+
},
17+
generateStandardFormAttributes(field, definitions) {
18+
19+
let form, formIndex, formProps = [
20+
'key',
21+
'condition',
22+
'onChange',
23+
'notitle',
24+
'showAdvanced',
25+
'validationMessage',
26+
'onChange',
27+
'ngModelOptions',
28+
'condition',
29+
'fieldAddonLeft',
30+
'fieldAddonRight',
31+
'showAdvanced',
32+
'validationMessage',
33+
'onChange',
34+
'feedback',
35+
'disableSuccessState',
36+
'disableErrorState',
37+
'placeholder',
38+
'ngModelOptions',
39+
'readonly',
40+
'htmlClass',
41+
'destroyStrategy',
42+
'copyValueTo',
43+
'fieldHtmlClass',
44+
'labelHtmlClass',
45+
'items'
46+
];
47+
form = _.pick(field, formProps);
48+
formIndex = _.findIndex(definitions, {key: field.key});
49+
if (!form.key) {
50+
form.type = field.type;
51+
form.title = field.title;
52+
formIndex = _.findIndex(definitions, {key: undefined, type: field.type, title: field.title});
53+
}
54+
if (formIndex > -1) {
55+
definitions.form[formIndex] = form;
56+
} else {
57+
definitions.form.push(form);
58+
}
59+
return definitions;
60+
},
61+
generateStandardSchemaAttributes(field, definitions) {
62+
63+
let schemaProps = [
64+
'type',
65+
'format',
66+
'description',
67+
'title',
68+
'minLength',
69+
'maxLength'
70+
];
71+
if (field.key) {
72+
definitions.schema.properties[field.key] = _.pick(field, schemaProps);
73+
}
74+
return definitions;
75+
},
76+
updateForm(definitions, key, attr, value) {
77+
let index = _.findKey(definitions.form, 'key', key);
78+
definitions.form[index][attr] = value;
79+
return definitions;
80+
},
81+
generateTextField(field, definitions){
82+
definitions.schema.properties[field.key]['type'] = 'string';
83+
return definitions;
84+
},
85+
generateTextareaField(field, definitions){
86+
definitions.schema.properties[field.key]['type'] = 'string';
87+
definitions = this.updateForm(definitions, field.key, 'type', 'textarea');
88+
return definitions;
89+
},
90+
generateEmailField(field, definitions){
91+
definitions.schema.properties[field.key]['type'] = 'string';
92+
definitions.schema.properties[field.key]['format'] = 'email';
93+
return definitions;
94+
},
95+
generateSelectField(field, definitions){
96+
definitions.schema.properties[field.key]['type'] = 'string';
97+
definitions.schema.properties[field.key]['enum'] = field.enum;
98+
return definitions;
99+
},
100+
generateCheckboxField(field, definitions){
101+
definitions.schema.properties[field.key]['type'] = 'string';
102+
definitions.schema.properties[field.key]['enum'] = field.enum;
103+
return definitions;
104+
},
105+
generateDateField(field, definitions){
106+
definitions.schema.properties[field.key]['type'] = 'string';
107+
definitions.schema.properties[field.key]['format'] = 'date';
108+
return definitions;
109+
},
110+
generateTimeField(field, definitions){
111+
definitions.schema.properties[field.key]['type'] = 'string';
112+
definitions.schema.properties[field.key]['format'] = 'time';
113+
return definitions;
114+
},
115+
generateDateTimeField(field, definitions){
116+
definitions.schema.properties[field.key]['type'] = 'string';
117+
definitions.schema.properties[field.key]['format'] = 'date-time';
118+
return definitions;
119+
},
120+
generateFieldsetField(field, definitions){
121+
if (field.key) {
122+
delete definitions.schema.properties[field.key]
123+
}
124+
return definitions;
125+
},
126+
generateSectionField(field, definitions){
127+
return definitions;
128+
},
129+
generateActionsField(field, definitions){
130+
return definitions;
131+
},
132+
generateNumberField(field, definitions){
133+
return definitions;
134+
},
135+
generatePasswordField(field, definitions){
136+
return definitions;
137+
},
138+
generateCheckboxField(field, definitions){
139+
return definitions;
140+
},
141+
generateCheckboxesField(field, definitions){
142+
return definitions;
143+
},
144+
generateSubmitField(field, definitions){
145+
return definitions;
146+
},
147+
generateButtonField(field, definitions){
148+
return definitions;
149+
},
150+
generateRadiosField(field, definitions){
151+
return definitions;
152+
},
153+
generateRadiosInlineField(field, definitions){
154+
return definitions;
155+
},
156+
generateRadioButtonsField(field, definitions){
157+
return definitions;
158+
},
159+
generateHelpField(field, definitions){
160+
return definitions;
161+
},
162+
generateTemplateField(field, definitions){
163+
return definitions;
164+
},
165+
generateTabField(field, definitions){
166+
return definitions;
167+
},
168+
generateArrayField(field, definitions){
169+
return definitions;
170+
},
171+
generateTabArrayField(field, definitions){
172+
return definitions;
173+
},
174+
}
175+
176+
export default formDefinitionsGenerator;

src/generator-form.js

+163
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
module.exports.form = [
2+
{
3+
key: 'fields',
4+
type: 'array',
5+
title: 'Form Fields',
6+
add: 'Add a new Field',
7+
remove: 'Remove Field',
8+
startEmpty: true,
9+
items: [
10+
{
11+
key: 'fields[].title',
12+
htmlClass: 'hide-label',
13+
placeholder: 'Title'
14+
},
15+
{
16+
type: 'section',
17+
htmlClass: 'row',
18+
items: [
19+
{
20+
key: 'fields[].type',
21+
placeholder: 'Type',
22+
notitle: true,
23+
htmlClass: 'col-sm-6 hide-label',
24+
},
25+
{
26+
key: 'fields[].key',
27+
//type: 'section',
28+
placeholder: 'Key (Unique Identifier)',
29+
notitle: true,
30+
htmlClass: 'col-sm-6 hide-label',
31+
}
32+
]
33+
},
34+
{
35+
key: 'fields[].open',
36+
notitle: true,
37+
type: 'hidden'
38+
},
39+
{
40+
key: 'fields[].description',
41+
type: 'textarea',
42+
placeholder: 'Description',
43+
notitle: true,
44+
},
45+
{
46+
type: 'section',
47+
htmlClass: 'row',
48+
items: [
49+
{
50+
key: 'fields[].notitle',
51+
htmlClass: 'col-sm-6'
52+
},
53+
{
54+
key: 'fields[].showAdvanced',
55+
htmlClass: 'col-sm-6'
56+
},
57+
]
58+
},
59+
{
60+
condition: 'model.fields[arrayIndex].showAdvanced',
61+
type: 'help',
62+
helpvalue: '<hr/>'
63+
},
64+
{
65+
type: 'section',
66+
htmlClass: 'row',
67+
items: [
68+
{
69+
type: 'section',
70+
htmlClass: 'col-md-4',
71+
items: [
72+
{
73+
condition: 'model.fields[arrayIndex].showAdvanced',
74+
key: 'fields[].disableSuccessState'
75+
}
76+
]
77+
},
78+
{
79+
type: 'section',
80+
htmlClass: 'col-md-4',
81+
items: [
82+
{
83+
condition: 'model.fields[arrayIndex].showAdvanced',
84+
key: 'fields[].disableErrorState'
85+
}
86+
]
87+
},
88+
{
89+
type: 'section',
90+
htmlClass: 'col-md-4',
91+
items: [
92+
{
93+
condition: 'model.fields[arrayIndex].showAdvanced',
94+
key: 'fields[].readonly'
95+
},
96+
]
97+
}
98+
]
99+
},
100+
{
101+
condition: 'model.fields[arrayIndex].showAdvanced',
102+
type: 'help',
103+
helpvalue: '<hr/>'
104+
},
105+
{
106+
condition: 'model.fields[arrayIndex].showAdvanced',
107+
key: 'fields[].validationMessage',
108+
type: 'textarea'
109+
},
110+
{
111+
condition: 'model.fields[arrayIndex].showAdvanced',
112+
key: 'fields[].onChange',
113+
type: 'textarea'
114+
},
115+
{
116+
condition: 'model.fields[arrayIndex].showAdvanced',
117+
key: 'fields[].feedback'
118+
},
119+
{
120+
condition: 'model.fields[arrayIndex].showAdvanced',
121+
key: 'fields[].placeholder'
122+
},
123+
{
124+
condition: 'model.fields[arrayIndex].showAdvanced',
125+
key: 'fields[].ngModelOptions',
126+
type: 'textarea'
127+
},
128+
{
129+
condition: 'model.fields[arrayIndex].showAdvanced',
130+
key: 'fields[].htmlClass'
131+
},
132+
{
133+
condition: 'model.fields[arrayIndex].showAdvanced',
134+
key: 'fields[].destroyStrategy'
135+
},
136+
{
137+
condition: 'model.fields[arrayIndex].showAdvanced',
138+
key: 'fields[].copyValueTo'
139+
},
140+
{
141+
condition: 'model.fields[arrayIndex].showAdvanced',
142+
key: 'fields[].fieldHtmlClass'
143+
},
144+
{
145+
condition: 'model.fields[arrayIndex].showAdvanced',
146+
key: 'fields[].labelHtmlClass'
147+
},
148+
{
149+
condition: 'model.fields[arrayIndex].showAdvanced',
150+
key: 'fields[].condition'
151+
},
152+
{
153+
condition: 'model.fields[arrayIndex].showAdvanced',
154+
'key': 'fields[].fieldAddonLeft'
155+
},
156+
{
157+
condition: 'model.fields[arrayIndex].showAdvanced',
158+
key: 'fields[].fieldAddonRight'
159+
}
160+
161+
]
162+
}
163+
];

0 commit comments

Comments
 (0)