From 5f957fb1d2e39b9dc7ddf0d24e226f9cf00891e5 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 6 Mar 2024 14:04:55 +0800 Subject: [PATCH] bugfix --- bricks/build.sh | 2 +- bricks/form.js | 281 +++++++++++++++++------------------------------ bricks/widget.js | 6 + 3 files changed, 107 insertions(+), 182 deletions(-) diff --git a/bricks/build.sh b/bricks/build.sh index 1894fb1..47130db 100755 --- a/bricks/build.sh +++ b/bricks/build.sh @@ -3,7 +3,7 @@ SOURCES=" factory.js uitypesdef.js utils.js i18n.js widget.js \ jsoncall.js myoperator.js scroll.js menu.js modal.js \ markdown_viewer.js video.js audio.js toolbar.js tab.js \ input.js registerfunction.js button.js accordion.js \ - tree.js multiple_state_image.js form.js message.js \ + tree.js multiple_state_image.js dynamiccolumn.js form.js message.js \ paging.js datagrid.js dataviewer.js iframe.js \ miniform.js wterm.js dynamicaccordion.js " echo ${SOURCES} diff --git a/bricks/form.js b/bricks/form.js index cf7df48..67cce2a 100644 --- a/bricks/form.js +++ b/bricks/form.js @@ -6,16 +6,16 @@ bricks.FieldGroup = class extends bricks.VBox { super(opts); } build_fields(form, parent, fields){ - var dc = new DynColumn({}); - for (var i=0;i<=fields.length;i++){ + var dc = new bricks.DynamicColumn({mobile_cols:2}); + for (var i=0;i0){ parent.add_widget(dc); - dc = new DynColumn({}); + dc = new bricks.DynamicColumn({mobile_cols:2}); } - build_fields(dc, fields[i].fields); + this.build_fields(form, dc, fields[i].fields); parent.add_widget(dc); - dc = new DynColumn({}); + dc = new bricks.DynamicColumn({mobile_cols:2}); } else { var box; if (! form.opts.input_layout || form.opts.input_layout == 'VBox'){ @@ -34,11 +34,7 @@ bricks.FieldGroup = class extends bricks.VBox { var w = Input.factory(fields[i]); if (w){ box.add_widget(w); - this.name_inputs[fields[i].name] = w; - if (form.max_item_height < box.height){ - form.max_item_height = box.height; - } - console.log(fields[i].uitype, 'create Input ok'); + form.name_inputs[fields[i].name] = w; } else { console.log(fields[i], 'createInput failed'); } @@ -66,25 +62,105 @@ bricks.FormBody = class extends bricks.VScrollPanel { ] } */ - constructor(opts){ + constructor(form, opts){ opts.width = '100%'; opts.height = '100%'; super(opts); + this.form = form; this.name_inputs = {}; - this.max_item_height = 50; - this.dc = new DynamicColumn({}); - this.dc.build_field(this.form, this, form.fields) - console.log('max_item_height=', this.max_item_height); - var v = this.max_item_height + 'px'; - console.log('v=', v); - // this.set_style('columnHeight', v); - v = this.opts.input_width || 400 + 'px'; - console.log('v=', v); - this.set_style('columnWidth', v); - this.set_style('columnGap', '40px'); - this.set_style('overflowX', 'none'); + this.fg = new bricks.FieldGroup({}); + this.fg.build_fields(this.form, this, form.opts.fields) } - render(){ +} + +bricks.Form = class extends bricks.VBox { + /* + { + title: + description: + notoolbar:False, + input_layout:"VBox" or "HBox", default is "VBox", + cols: + dataurl: + toolbar: + submit_url: + method: + fields + } + */ + constructor(opts){ + opts.height = "100%"; + opts.width = "100%"; + opts.overflow = "auto"; + super(opts); + this.name_inputs = {}; + if (this.opts.title){ + var t = new bricks.Title3({ + otext:this.opts.title, + height:'auto', + i18n:true}); + this.add_widget(t, 0); + } + if (this.opts.description){ + var d = new bricks.Text({ + otext:this.opts.description, + height:'auto', + i18n:true}); + this.add_widget(d); + } + var filler = new bricks.Filler({}); + this.add_widget(filler); + this.body = new bricks.FormBody(this, opts); + filler.add_widget(this.body); + if (! opts.notoolbar) + this.build_toolbar(this); + } + build_toolbar(widget){ + var box = new bricks.HBox({height:'auto', width:'100%'}); + widget.add_widget(box); + var tb_desc = this.opts.toolbar || { + width:"auto", + tools:[ + { + icon:bricks_resource('imgs/submit.png'), + name:'submit', + label:'Submit' + }, + { + icon:bricks_resource('imgs/cancel.png'), + name:'cancel', + label:'Cancel' + } + ] + }; + var tbw = new bricks.Toolbar(tb_desc); + tbw.bind('command', this.command_handle.bind(this)); + box.add_widget(new bricks.HFiller()); + box.add_widget(tbw); + box.add_widget(new bricks.HFiller()); + } + command_handle(event){ + var params = event.params; + console.log('Form(): click_handle() params=', params); + if (!params){ + error('click_handle() get a null params'); + return + } + if (params.name == 'submit'){ + this.validation(this); + } else if (params.name == 'cancel'){ + this.cancel(); + } else if (params.name == 'reset'){ + this.reset_data(); + } else { + if (params.action){ + f = bricks.buildEventHandler(this, params); + if (f) f(event); + } + } + } + cancel(){ + this.dispatch('cancel'); } reset_data(){ for (var name in this.name_inputs){ @@ -127,164 +203,7 @@ bricks.FormBody = class extends bricks.VScrollPanel { } } - build_fields(){ - var fields = this.opts.fields; - for (var i=0; i