From e41ca7ee5d9376fa34878cfbca3175dbe6177629 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 29 Aug 2025 22:19:36 +0800 Subject: [PATCH] bugfix --- bricks/menu.js | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/bricks/menu.js b/bricks/menu.js index 1552aa9..c503e83 100644 --- a/bricks/menu.js +++ b/bricks/menu.js @@ -23,21 +23,24 @@ bricks.Menu = class extends bricks.VBox { return cp; } async menu_clicked(event){ - console.log(event); let e = event.target; let opts = event.params; var t; var popts; - if (this.target == 'PopupWindow'){ + var target = opts.target || this.target; + var popup_options = opts.popup_options || this.popup_options; + if (target == 'PopupWindow'){ popts = bricks.get_popupwindow_default_options(); - bricks.extend(popts, this.popup_options || {}); + bricks.extend(popts, popup_options || {}); + popts.icon = opts.icon; + popts.title = opts.label || opts.name t = new bricks.PopupWindow(popts); } else if (this.target == 'Popup'){ popts = bricks.get_popup_default_options(); - bricks.extend(popts, this.popup_options || {}); + bricks.extend(popts, popup_options || {}); t = new bricks.Popup(popts); } else { - t = bricks.getWidgetById(this.target); + t = bricks.getWidgetById(target); } if (t){ var desc = { @@ -64,18 +67,41 @@ bricks.Menu = class extends bricks.VBox { let subw = this.create_menuitem(item); if (item.hasOwnProperty('items')){ var itw = new bricks.VBox({}); - w.add_widget(itw); let w1 = this.create_submenu_container(); itw.add_widget(subw); itw.add_widget(w1); this.create_children(w1, item.items); subw.bind('click', this.items_toggle_hide.bind(this, w1)); + w.add_widget(itw); + else if(item.submenu){ + var itw = new bricks.VBox({}); + let w1 = this.create_submenu_container(); + w1.submenu_loaded = false; + w1.submenu_url = item.submenu; + itw.add_widget(subw); + itw.add_widget(w1); + w.add_widget(itw); + subw.bind('click', this.load_submenu.bind(this, w1)); } else { subw.bind('click', this.regen_menuitem_event.bind(this, item)) w.add_widget(subw); } } } + async get_submenu_items(url){ + var jc = new bricks.HttpJson(); + var d = jc.get(url); + return d.items + } + async load_submenu(container, event){ + event.stopPropagation(); + if (! container.submenu_loaded){ + var items = this.get_submenu_items(container.submenu_url); + this.create_children(container, items); + container.submenu_loaded = true; + } + container.toggle_hide(); + } items_toggle_hide(w, event){ w.toggle_hide(); event.stopPropagation();