Skip to content

Commit ee3ea0f

Browse files
author
daffl
committed
Generating froms from JSON objects
1 parent ff3a2bb commit ee3ea0f

File tree

2 files changed

+86
-29
lines changed

2 files changed

+86
-29
lines changed

src/dform.converters.js

Lines changed: 85 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,44 +10,101 @@
1010
*/
1111
(function($)
1212
{
13-
$.dform.converters = {
13+
$.dform.options.converters =
14+
{
15+
"json" :
16+
{
17+
"types" :
18+
{
19+
"boolean" :
20+
{
21+
"type" : "checkbox"
22+
},
23+
"integer" :
24+
{
25+
"type" : "text",
26+
"validate" : "int"
27+
}
28+
}
29+
}
30+
};
31+
32+
$.dform.converters =
33+
{
1434
"dform" : function(data)
1535
{
1636
return data;
1737
},
18-
38+
1939
"json" : function(data)
2040
{
21-
41+
var converters = $.dform.options.converters.json.types;
42+
var getElements = function(obj)
43+
{
44+
var result = [];
45+
$.each(data, function(key, value)
46+
{
47+
var instance = typeof (value);
48+
var element;
49+
if (instance == 'object')
50+
{
51+
element =
52+
{
53+
'type' : 'fieldset',
54+
'caption' : key
55+
};
56+
// element.elements = getElements(value);
57+
} else
58+
{
59+
var baseElement = converters[instance] || { 'type' : 'text' };
60+
element = $.extend(baseElement, { 'caption' : key, 'name' : key, 'value' : value });
61+
}
62+
result.push(element);
63+
});
64+
return result;
65+
};
66+
return {
67+
"type" : "form",
68+
"elements" : getElements(data)
69+
};
2270
},
23-
71+
2472
"json-schema" : function(data)
2573
{
26-
var dform = { elements : [] };
74+
var dform =
75+
{
76+
elements : []
77+
};
2778

28-
for (var propName in schema.properties) {
29-
var property = schema.properties[propName];
30-
var type = property.type;
31-
if (type == "string") {
32-
var value = obj[propName];
33-
if (!value) value = "";
34-
var element = {
35-
"name" : "ui-form-" + propName,
36-
"id" : "ui-form-" + propName,
37-
"caption" : property.title,
38-
"type" : "text",
39-
"value" : value
40-
};
41-
dform.elements.push(element);
42-
dform.elements.push({
43-
"type" : "br"
44-
});
45-
} else if (type == "object") {
46-
var element = jsonSchemaToDForm(property, obj);
47-
element.type = "fieldset";
48-
element.caption = property.title;
49-
dform.elements.push(element);
50-
}
79+
for ( var propName in schema.properties)
80+
{
81+
var property = schema.properties[propName];
82+
var type = property.type;
83+
if (type == "string")
84+
{
85+
var value = obj[propName];
86+
if (!value)
87+
value = "";
88+
var element =
89+
{
90+
"name" : "ui-form-" + propName,
91+
"id" : "ui-form-" + propName,
92+
"caption" : property.title,
93+
"type" : "text",
94+
"value" : value
95+
};
96+
dform.elements.push(element);
97+
dform.elements.push(
98+
{
99+
"type" : "br"
100+
});
101+
} else if (type == "object")
102+
{
103+
var element = jsonSchemaToDForm(property, obj);
104+
element.type = "fieldset";
105+
element.caption = property.title;
106+
dform.elements.push(element);
107+
}
51108
}
52109
return dform;
53110
}

src/dform.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110
{
111111
options = $.dform.converters.dform(options);
112112
if(converter && $.dform.converters[converter]) {
113-
options = $.dform.converters[converter];
113+
options = $.dform.converters[converter](options);
114114
}
115115
// Create element (run builder function for type)
116116
var element = $.dform.createElement(options);

0 commit comments

Comments
 (0)