diff --git a/bricks/.DS_Store b/bricks/.DS_Store index 412be8b..575fa2b 100755 Binary files a/bricks/.DS_Store and b/bricks/.DS_Store differ diff --git a/bricks/conform.js b/bricks/conform.js index 8cee484..dc6e74c 100644 --- a/bricks/conform.js +++ b/bricks/conform.js @@ -28,10 +28,12 @@ bricks.Conform = class extends bricks.BMessage { this.message_w.add_widget(w); } conform_hndl(event){ + console.log(' --- conform event handling ...'); this.dismiss(); this.dispatch('conform'); } discard_hndl(event){ + console.log(' --- discard event handling ...'); this.dismiss(); } } diff --git a/bricks/dynamicaccordion.js b/bricks/dynamicaccordion.js index 3df0d0f..4c61a47 100644 --- a/bricks/dynamicaccordion.js +++ b/bricks/dynamicaccordion.js @@ -63,12 +63,7 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { if (this.toolbar){ await this.build_toolbar(); } - if (this.editable && this.fields){ - await this.build_new_form(); - } - if (! this.noheader){ - await this.build_header(); - } + await this.build_header(); var filler = new bricks.Filler(); this.container = new bricks.VScrollPanel({ }); filler.add_widget(this.container); @@ -78,7 +73,34 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { await this.render(); } async build_header(){ - await this.build_info(this); + this.header_w = await this.build_item(); + this.add_widget(this.header_w); + } + async build_item(record){ + var item = new bricks.AccordionItem({}); + var info = await this.build_info(item, record); + var content = new bricks.VBox({ + height:'auto', + display:'none' + }); + var build_content = true; + if (!record){ + build_content = false; + } else { + if (this.content_rely_on){ + var v = this.content_rely_value || true; + if(record[this.content_rely_on] != v){ + build_content = false; + } + } + } + content.set_css('accordion-item-content'); + content.hide(); + if ( build_content ){ + info.bind('click', this.toggle_content.bind(this, info, content, record)); + } + item.add_widget(content); + return item; } async build_info(item, record){ @@ -111,12 +133,34 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { } return info; } + add_record(info){ + var w = info.parent; + var hided; + var content = w.children[1]; + content.clear_widgets(); + var hided = content.is_hide(); + var fields = this.fields; + var f = new bricks.Form({ + "cheight":this.editable.form_cheight||7, + "submit_url":this.editable.new_data_url, + "fields":fields + }); + f.bind('cancel', this.add_record_finish.bind(this, info)); + content.add_widget(f, 0); + content.show(); + f.bind('submited', this.add_record_finish.bind(this, info)); + } + add_record_finish(info,record){ + var content = info.parent.children[1]; + content.hide(); + this.render(); + } update_record(info, record){ console.log('update_record():info=', info) var w = info.parent; var hided; var content = w.children[1]; - var hided = content.is_hide(); + content.clear_widgets(); var fields = []; for (var i=0; i< this.fields.length; i++){ var f = bricks.extend({}, this.fields[i]); @@ -129,10 +173,13 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { "fields":fields }); content.add_widget(f, 0); - if (hided){ - content.show(); - } f.bind('submited', this.update_record_finish.bind(this, info, content, hided, f)); + f.bind('cancel', this.update_cancel.bind(this, info, content)); + content.show(); + } + update_cancel(info, content){ + content.clear_widgets(); + content.hide(); } async update_record_finish(info, content, hided, form){ var d = form.getValue(); @@ -155,11 +202,17 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { message:'Are you sure to delete is record?' }); conform_w.bind('conform', this.delete_record_act.bind(this, info, record)); + conform_w.bind('discard', conform_w.dismiss.bind(conform_w)); } - delete_record_act(info, record){ - url = this.editable.delete_record_url + '?id=' + record.id; - var hc = new bricks.HttpClient(); - var r = hc.get(url); + + async delete_record_act(info, record){ + var url = this.editable.delete_data_url + '?id=' + record.id; + var hc = new bricks.HttpJson(); + var desc = await hc.get(url); + var w = await bricks.widgetBuild(desc); + if (desc.widgettype == 'Message'){ + this.container.remove_widget(info.parent); + } } async build_new_form(){ var desc = { @@ -223,10 +276,26 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { } build_record_toolbar(info, record){ var c = new bricks.Layout({cwidth:2.5, height:'auto'}) + var desc; if (! record){ - c.set_style('height', '20px'); + desc = { + cwidth:2.5, + tools:[ + { + name:'add', + tip:'add new record', + icon:this.editable.add_icon || bricks_resource('imgs/add.png') + }, + { + name:'blankicon' + } + ] + } + var w = new bricks.IconBar(desc); + w.bind('add', this.add_record.bind(this, info, record)); + c.add_widget(w); return c; - } + } var desc = { cwidth:2.5, tools:[ @@ -257,27 +326,7 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { pos = i; } var record = data[i]; - var item = new bricks.AccordionItem({}); - var info = await this.build_info(item, record); - this.content_rely_value = this.content_rely_value || true; - var build_content = true; - if (this.content_rely_on){ - var v = this.content_rely_value || true; - if(record[this.content_rely_on] != v){ - build_content = false; - } - } - content = null; - var content = new bricks.VBox({ - height:'auto', - display:'none' - }); - content.set_css('accordion-item-content'); - content.hide(); - if ( build_content ){ - info.bind('click', this.toggle_content.bind(this, info, content, record)); - } - item.add_widget(content); + var item = await this.build_item(record); item.set_attribute('data-page', page); this.container.add_widget(item, pos); }; diff --git a/bricks/floaticonbar.js b/bricks/floaticonbar.js index 232b6f3..946b33e 100644 --- a/bricks/floaticonbar.js +++ b/bricks/floaticonbar.js @@ -30,27 +30,33 @@ bricks.IconBar = class extends bricks.HBox { w.widget_id = tools[i].name; } w.set_style('cursor', 'pointer'); - w.bind('click', this.regen_event.bind(this,tools[i])) this.add_widget(w); } this.set_style('height', this.height_int + 'px'); } build_item(opts){ - var rate = this.opts.rate || 1; - var desc = { - url:opts.icon, - rate:opts.rate || rate, - dynsize:opts.dynsize||true, - tip:opts.tip - }; + var rate = opts.rate || this.opts.rate || 1; var h = bricks.app.charsize * rate; if (this.height_int < h){ this.height_int = h; } - var w = new bricks.Icon(desc); + if (opts.name == 'blankicon'){ + return new bricks.BlankIcon({ + rate:rate, + dynsize:opts.dynsize||true + }); + } + var w = new bricks.Icon({ + url:opts.icon, + rate:opts.rate || rate, + dynsize:opts.dynsize||true, + tip:opts.tip + }); + w.bind('click', this.regen_event.bind(this,opts)); return w; } regen_event(desc, event){ + console.log('regen_event desc=', desc); this.dispatch(desc.name, desc); this.dispatch('command', desc); event.stopPropagation(); @@ -94,6 +100,7 @@ bricks.IconTextBar = class extends bricks.IconBar { if (this.height_int < h){ this.height_int = h; } + box.bind('click', this.regen_event.bind(this,opts)); return box; } } diff --git a/bricks/message.js b/bricks/message.js index 0bcee2f..3c9a03f 100644 --- a/bricks/message.js +++ b/bricks/message.js @@ -12,11 +12,10 @@ bricks.BPopup = class extends bricks.VBox { */ constructor(opts){ super(opts); - this.holder = opts.holder; this.task = null; this.title = opts.title|| 'Title'; this.archor = opts.archor || 'cc'; - this.timeout = opts.timeout; + this.timeout = opts.timeout || 0; this.panel.set_css('message'); this.build(); archorize(this.dom_element, this.archor); @@ -41,7 +40,7 @@ bricks.BPopup = class extends bricks.VBox { } open(){ this.holder.add_widget(this); - if (this.timeout && this.timeout > 0){ + if (this.timeout > 0){ this.task = schedule_once(this.dismiss.bind(this), this.timeout); } } @@ -56,7 +55,7 @@ bricks.BPopup = class extends bricks.VBox { this.task.cancel(); this.task = null } - this.holder.remove_widget(this); + this.target_w.remove_widget(this); } }