bugfix
This commit is contained in:
parent
96310d5378
commit
2cdac6e815
@ -15,6 +15,7 @@ bricks.Menu = class extends bricks.VScrollPanel {
|
|||||||
this.build_title();
|
this.build_title();
|
||||||
this.build_description();
|
this.build_description();
|
||||||
this.create_children(this, this.opts.items);
|
this.create_children(this, this.opts.items);
|
||||||
|
this.user_data = opts;
|
||||||
this.bind('item_click', this.menu_clicked.bind(this));
|
this.bind('item_click', this.menu_clicked.bind(this));
|
||||||
}
|
}
|
||||||
create_submenu_container(){
|
create_submenu_container(){
|
||||||
@ -41,9 +42,10 @@ bricks.Menu = class extends bricks.VScrollPanel {
|
|||||||
bricks.extend(popts, popup_options || {});
|
bricks.extend(popts, popup_options || {});
|
||||||
t = new bricks.Popup(popts);
|
t = new bricks.Popup(popts);
|
||||||
} else {
|
} else {
|
||||||
t = bricks.getWidgetById(target);
|
t = bricks.getWidgetById(target, this);
|
||||||
}
|
}
|
||||||
if (t){
|
if (t){
|
||||||
|
if (opts.url){
|
||||||
var desc = {
|
var desc = {
|
||||||
"widgettype":"urlwidget",
|
"widgettype":"urlwidget",
|
||||||
"options":{
|
"options":{
|
||||||
@ -57,6 +59,26 @@ bricks.Menu = class extends bricks.VScrollPanel {
|
|||||||
} else {
|
} else {
|
||||||
console.log('menu_clicked():widgetBuild() failed', desc);
|
console.log('menu_clicked():widgetBuild() failed', desc);
|
||||||
}
|
}
|
||||||
|
} else if (opts.script){
|
||||||
|
var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;
|
||||||
|
var f = new AsyncFunction('menu', 'event', opts.script);
|
||||||
|
if (!f){
|
||||||
|
console.log('menu item define error', opts);
|
||||||
|
}
|
||||||
|
f.bind(t, this)(event);
|
||||||
|
} else if (opts.method){
|
||||||
|
var f = target[opts.method];
|
||||||
|
if (!f){
|
||||||
|
console.log('menu item define error', opts);
|
||||||
|
}
|
||||||
|
f.bind(t, this)(evnet);
|
||||||
|
} else if (opts.rfname){
|
||||||
|
var f = bricks.RF.get(opts.rfname);
|
||||||
|
if (!f){
|
||||||
|
console.log('menu item define error', opts);
|
||||||
|
}
|
||||||
|
f.bind(t, this)(event);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('menu_clicked():', this.target, 'not found')
|
console.log('menu_clicked():', this.target, 'not found')
|
||||||
}
|
}
|
||||||
@ -66,25 +88,21 @@ bricks.Menu = class extends bricks.VScrollPanel {
|
|||||||
for (let i=0;i<items.length;i++){
|
for (let i=0;i<items.length;i++){
|
||||||
let item = items[i];
|
let item = items[i];
|
||||||
let subw = this.create_menuitem(item);
|
let subw = this.create_menuitem(item);
|
||||||
|
if (item.submenu){
|
||||||
|
item.items = await this.get_submenu_items(item.submenu);
|
||||||
|
}
|
||||||
if (item.hasOwnProperty('items')){
|
if (item.hasOwnProperty('items')){
|
||||||
var itw = new bricks.VBox({});
|
var itw = new bricks.VBox({});
|
||||||
|
itw.user_data = item;
|
||||||
let w1 = this.create_submenu_container();
|
let w1 = this.create_submenu_container();
|
||||||
itw.add_widget(subw);
|
itw.add_widget(subw);
|
||||||
itw.add_widget(w1);
|
itw.add_widget(w1);
|
||||||
this.create_children(w1, item.items);
|
this.create_children(w1, item.items);
|
||||||
subw.bind('click', this.items_toggle_hide.bind(this, w1));
|
subw.bind('click', this.items_toggle_hide.bind(this, w1));
|
||||||
w.add_widget(itw);
|
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 {
|
} else {
|
||||||
subw.bind('click', this.regen_menuitem_event.bind(this, item))
|
subw.bind('click', this.regen_menuitem_event.bind(this, item))
|
||||||
|
subw.user_data = item;
|
||||||
w.add_widget(subw);
|
w.add_widget(subw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,14 +112,35 @@ bricks.Menu = class extends bricks.VScrollPanel {
|
|||||||
var d = await jc.get(url);
|
var d = await jc.get(url);
|
||||||
return d.options.items;
|
return d.options.items;
|
||||||
}
|
}
|
||||||
async load_submenu(container, event){
|
get_container(w, mpath){
|
||||||
event.stopPropagation();
|
var x = mpath.split('/');
|
||||||
if (! container.submenu_loaded){
|
var name = x.shift()
|
||||||
var items = await this.get_submenu_items(container.submenu_url);
|
var container = w.children[w.children.length - 1];
|
||||||
this.create_children(container, items);
|
var fc;
|
||||||
container.submenu_loaded = true;
|
containers.children.forEach(c=>{
|
||||||
|
if (c.user_data){
|
||||||
|
if (c.user_data.name == name) fc = c;
|
||||||
|
} else {
|
||||||
|
throw 'menu data error';
|
||||||
}
|
}
|
||||||
container.toggle_hide();
|
});
|
||||||
|
if (! fc) return null;
|
||||||
|
if (x.length == 0){
|
||||||
|
return fc;
|
||||||
|
}
|
||||||
|
mpath = x.join('/')
|
||||||
|
return this.get_container(fc, mpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
hide_item(menu_path, event){
|
||||||
|
var w = this.get_container(this, mpath);
|
||||||
|
w.hide();
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
show_item(menu_path, event){
|
||||||
|
var w = this.get_container(this, mpath);
|
||||||
|
w.show();
|
||||||
|
event.stopPropagation();
|
||||||
}
|
}
|
||||||
items_toggle_hide(w, event){
|
items_toggle_hide(w, event){
|
||||||
w.toggle_hide();
|
w.toggle_hide();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user