diff --git a/js/ui/webui/form.js b/js/ui/webui/form.js new file mode 100644 index 0000000..e44e70d --- /dev/null +++ b/js/ui/webui/form.js @@ -0,0 +1,109 @@ + +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;