jam/js/ui/webui/form.js

110 lines
3.3 KiB
JavaScript
Raw Normal View History

2025-07-21 23:20:11 +02:00
Forms=[];
Form = {
index : 0,
// typeof @config={}
create : function (config,options,callback) {
var id = Form.index++,
form = {};
form.index=id;
if (typeof options=='function') { callback=options;options={}};
options=options||{};
var rows = [];
function toValue(v) {
if (v == undefined) return;
if (typeof v == 'string' ||
typeof v == 'number' ||
typeof v == 'boolean') return v.toString();
if (Utils.isArray(v)) return v.join(',');
return v.toString();
}
function fromValue(key,v,root) {
if (v == undefined) return;
var text = UI('formWin'+id+'-'+root+key).getValue();
if (typeof v == 'string') return text;
if (typeof v == 'number') return isNaN(Number(text))?text:Number(text);
if (typeof v == 'boolean') return Number(text)?true:false;
if (Utils.isArray(v)) return text.split(',');
return text;
}
function createRows(config,root) {
root=root||'';
for(var key in config) {
var entry = config[key];
if (toValue(entry)==undefined) continue;
if (!Utils.isArray(entry) && Utils.isObject(entry)) {
rows.push({ view:"label", label:key, align:'left', css:'webix_primary blue'});
createRows(entry,key);
} else {
if (typeof entry == 'boolean') rows.push({
view:"checkbox",
id:"formWin"+id+"-"+root+key,
customCheckbox:false,
label:key,
height:'2',
labelWidth:options.labelWidth||150,
value:entry?1:0,
click: function (o) {
config[key]=Number(UI(o).getValue())?true:false;
}
}); else rows.push({
view:"text",
id:"formWin"+id+"-"+root+key,
label:key,
labelWidth:options.labelWidth||150,
value:toValue(entry),
css:"webix_primary"
});
}
}
}
createRows(config);
rows.push({
view:'label'
})
function createValues(config,root) {
root=root||'';
for(var key in config) {
var entry = config[key];
if (toValue(entry)==undefined) continue;
if (!Utils.isArray(entry) && Utils.isObject(entry)) {
createValues(entry,key);
} else {
config[key]=fromValue(key,entry,root);
}
}
}
var window = webix.ui({
id:'formWin'+id,
view:"window",
width:options.width||300,
height:options.height||450,
left:options.x||90, top:options.y||90,
move:true,
resize: true,
toFront:true,
head: {
view:"toolbar",
cols:[
{ view:"label", label:options.title||options.label||"Form", align:'right'},
{ view:"button", type:"icon", icon:"check-square", align:'center', width:30, click: function () {
createValues(config);
if (callback) callback(config);
delete Forms[id];
window.close();
}}
]
},
body: {
rows:[
{ view:"form", scroll:true, width:options.width||300, height:options.height||400, elements: rows}
]
}
});
window.show();
form.window=window;
return form;
}
}
UI.Form=Form;