1
0
Fork 0
confection/static/app.js

83 lines
2.4 KiB
JavaScript

/*
* Confection App
*/
function loadFields(callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/fields.json', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
var fields = JSON.parse(xhr.responseText);
callback(fields);
}
}
};
xhr.send(null);
}
function drawForm(fields) {
var container = document.getElementById('fields');
for (var i = 0; i < fields.length; i++) {
var field = fields[i],
formGroup = document.createElement('div'),
label = document.createElement('label'),
input;
formGroup.setAttribute('class', 'form-group');
label.setAttribute('for', field.path);
label.appendChild(document.createTextNode(field.title));
formGroup.appendChild(label);
if (field.options !== null) {
input = document.createElement('select');
if (field.is_required === false) {
var option = document.createElement('option');
option.setAttribute('value', '');
option.appendChild(document.createTextNode('Not selected'));
input.appendChild(option);
}
for (var j = 0; j < field.options.length; j++) {
var value = field.options[j],
option = document.createElement('option');
option.setAttribute('value', value);
option.appendChild(document.createTextNode(value));
input.appendChild(option);
}
} else {
input = document.createElement('input');
}
input.setAttribute('value', field.value);
input.setAttribute('id', field.path);
input.setAttribute('class', 'form-control');
if (field.is_readonly) {
input.setAttribute('readonly', 'readonly');
}
switch (field.type) {
case "string":
input.setAttribute('type', 'text');
break;
default:
console.log("Invalid field type: "+ field.type, field)
}
formGroup.appendChild(input);
container.appendChild(formGroup);
}
}
loadFields(drawForm);
// TODO: Support for various types
// bool
// string
// int int8 int16 int32 int64
// uint uint8 uint16 uint32 uint64
// float32 float64