1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 01:04:06 +08:00
This commit is contained in:
shylinux@163.com 2022-10-02 18:55:23 +08:00
parent b64e0bfa8a
commit 4bb09e9bd0
9 changed files with 69 additions and 20 deletions

View File

@ -220,7 +220,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list,
can.onmotion.delay(can, function() { can.Update() }) can.onmotion.delay(can, function() { can.Update() })
}) })
}) })
}; can.core.Next(can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs)).concat([{type: html.BUTTON, name: cli.CLOSE}]), add) }; can.core.Next(can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs, [])).concat([{type: html.BUTTON, name: cli.CLOSE}]), add)
}, },
_action: function(can, list, action, meta) { list = can.base.Obj(can.base.getValid(list, can.core.Item(meta)), can.core.Value(can, [chat.ONACTION, mdb.LIST])); if (!list) { return } _action: function(can, list, action, meta) { list = can.base.Obj(can.base.getValid(list, can.core.Item(meta)), can.core.Value(can, [chat.ONACTION, mdb.LIST])); if (!list) { return }
var _list = can.page.inputs(can, list); action = action||can._action, can.onmotion.clear(can, action), meta = meta||can.onaction||{} var _list = can.page.inputs(can, list); action = action||can._action, can.onmotion.clear(can, action), meta = meta||can.onaction||{}
@ -577,8 +577,8 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta
return show return show
} }
// var gt = "❯", lt = "❮", down = "˅", up = "˄" // var gt = "", lt = "", down = "˅", up = "˄"
var gt = "❯", lt = "❮", down = lt, up = gt var gt = "", lt = "", down = lt, up = gt
var ui = can.page.Append(can, target, [{view: [chat.LAYOUT, html.TABLE], list: [ var ui = can.page.Append(can, target, [{view: [chat.LAYOUT, html.TABLE], list: [
{view: [chat.PROJECT, html.TD], list: [{view: [chat.PROJECT]}]}, {view: [chat.PROJECT, html.TD], list: [{view: [chat.PROJECT]}]},
{type: html.TD, list: [ {type: html.TD, list: [
@ -663,7 +663,8 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) {
if (pos) { item.scrollTo && item.scrollTo(0, pos-1); return item } if (pos) { item.scrollTo && item.scrollTo(0, pos-1); return item }
}).length > 0 }).length > 0
}, },
delay: function(can, cb, interval) { can.core.Timer(interval||300, cb) }, delay: function(can, cb, interval) { can.core.Timer(interval||30, cb) },
delayLong: function(can, cb, interval) { can.core.Timer(interval||300, cb) },
focus: function(can, target) { if (!target) { return } focus: function(can, target) { if (!target) { return }
target.setSelectionRange && target.setSelectionRange(0, -1), target.focus() target.setSelectionRange && target.setSelectionRange(0, -1), target.focus()
}, },

View File

@ -52,7 +52,7 @@ div.output div.project div.zone>div.action>div.item { float:right; clear:none; p
div.output div.project div.zone>div.action>div.item input[type=text] { background-color:#ff000000; padding-left:10px; color:white; } div.output div.project div.zone>div.action>div.item input[type=text] { background-color:#ff000000; padding-left:10px; color:white; }
fieldset.plugin { background-color:#061c3c9e; padding:10px; margin:10px; } fieldset.plugin { background-color:#061c3c9e; padding:10px; margin:10px; }
fieldset.float { background-color:#0e3369; color:white; position:absolute; } fieldset.float { background-color:#0e3369; color:white; padding:0; margin:0; }
fieldset.full { background-color:#0e3369; color:white; padding:0; margin:0; left:0; top:0; overflow:auto; } fieldset.full { background-color:#0e3369; color:white; padding:0; margin:0; left:0; top:0; overflow:auto; }
fieldset.story>legend { float:left; margin:0px; margin-right:5px; } fieldset.story>legend { float:left; margin:0px; margin-right:5px; }
@ -72,7 +72,6 @@ fieldset.output>div.action { display:none; }
fieldset.output>div.status { display:none; } fieldset.output>div.status { display:none; }
fieldset.output div.toggle { display:none; } fieldset.output div.toggle { display:none; }
fieldset.plugin.word fieldset.story { margin-top:10px; }
fieldset.story.full { margin-top:0px; } fieldset.story.full { margin-top:0px; }
fieldset.input.key { overflow:auto; } fieldset.input.key { overflow:auto; }

View File

@ -4,6 +4,15 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", key: {
can.onfigure.key._show(can, msg, cbs, target, name) can.onfigure.key._show(can, msg, cbs, target, name)
}) })
}, },
_select: function(event, can, target) {
if (event.ctrlKey) { var sub = target._can
if (event.key <= "9" && event.key >= "0") {
can.page.Select(can, sub._output, "tr:not(.hidden) td:first-child", function(td, index) {
if (index+1 == event.key) { target.value = td.innerText }
}); return true
}
} return false
},
_show: function(can, msg, cbs, target, name) { _show: function(can, msg, cbs, target, name) {
if (!can.onmotion.toggle(can, can._target, msg.Length() != 0)) { return } if (!can.onmotion.toggle(can, can._target, msg.Length() != 0)) { return }
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) { value = line[key] can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) { value = line[key]
@ -46,6 +55,7 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", key: {
can.onfigure.key._make(event, can, meta, cb, target) can.onfigure.key._make(event, can, meta, cb, target)
}, },
onkeyup: function(event, can, meta, cb, target, last) { var sub = target._can; if (!sub) { return } onkeyup: function(event, can, meta, cb, target, last) { var sub = target._can; if (!sub) { return }
if (can.onfigure.key._select(event, can, target)) { return }
switch (event.key) { switch (event.key) {
case ice.PS: can.onfigure.key._init(event, sub, sub._cbs, target, meta.name, event.target.value); break case ice.PS: can.onfigure.key._init(event, sub, sub._cbs, target, meta.name, event.target.value); break
} }

View File

@ -30,6 +30,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
}) })
can.onexport.hash(can), can.onimport.layout(can), can.base.isFunc(cb) && cb(), cb = null can.onexport.hash(can), can.onimport.layout(can), can.base.isFunc(cb) && cb(), cb = null
msg._plugin && can.onmotion.delay(can, function() { msg._plugin.Focus() }) msg._plugin && can.onmotion.delay(can, function() { msg._plugin.Focus() })
can.onmotion.select(can, msg._tab.parentNode, "div.tabs", msg._tab)
can.onengine.signal(can, "tabview.view.show", msg) can.onengine.signal(can, "tabview.view.show", msg)
}) })
} }
@ -84,11 +85,12 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
can.page.style(can, can.ui.profile, {display: p? p.profile_display: html.NONE}) can.page.style(can, can.ui.profile, {display: p? p.profile_display: html.NONE})
can.page.style(can, can.ui.display, {display: p? p.display_display: html.NONE}) can.page.style(can, can.ui.display, {display: p? p.display_display: html.NONE})
can.parse = can.base.Ext(can.file), can.Status("模式", "plugin") can.parse = can.base.Ext(can.file), can.Status("模式", "plugin")
can.onengine.signal(can, "tabview.data.load", msg) p && p.scrollTop && can.ui.content.scrollTo(0, p.scrollTop)
return can.file return can.file
}, can.ui._content, can.ui._profile_output, can.ui.display_output)) { }, can.ui._content, can.ui._profile_output, can.ui.display_output)) {
can.onengine.signal(can, "tabview.view.load", msg) // can.onengine.signal(can, "tabview.view.load", msg)
// var scrollTop = can.ui.content.scrollTop; can.onmotion.delay(can, function() { can.ui.content.scrollTo(0, scrollTop) }, 10)
return can.onaction.selectLine(null, can, can.Option(nfs.LINE)), can.base.isFunc(cb) && cb(msg._content) return can.onaction.selectLine(null, can, can.Option(nfs.LINE)), can.base.isFunc(cb) && cb(msg._content)
} }
@ -280,6 +282,11 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2 var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2
can.ui.profile_output = sup._profile_output = can.ui._profile_output can.ui.profile_output = sup._profile_output = can.ui._profile_output
can.onimport.process(can, msg, can.ui._profile_output, width, can.ui.profile.offsetHeight) can.onimport.process(can, msg, can.ui._profile_output, width, can.ui.profile.offsetHeight)
can.page.Select(can, can.ui._profile_output, html.TABLE, function(target) { can.onmotion.delay(can, function() {
if (target.offsetWidth < can.ui._profile_output.offsetWidth) {
can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can)
}
}, 10) })
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS]).first) can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS]).first)
can.page.Select(can, can.ui._profile_output, "table.content", function(target) { can.page.style(can, target, html.MAX_HEIGHT, "1000px") }) can.page.Select(can, can.ui._profile_output, "table.content", function(target) { can.page.style(can, target, html.MAX_HEIGHT, "1000px") })
} }
@ -288,22 +295,34 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
can.onmotion.toggle(can, can.ui.profile, true), can.onimport.layout(can) can.onmotion.toggle(can, can.ui.profile, true), can.onimport.layout(can)
}, },
display: function(can, msg) { display: function(can, msg) {
var height = can.display_size[can.onexport.keys(can)]||{sh: can.ConfHeight()/2}[can.parse]||can.ConfHeight()/4 var height = can.display_size[can.onexport.keys(can)]||{sh: can.ConfHeight()/2}[can.parse]||can.ConfHeight()/2
if (msg) { if (msg) {
can.onimport.process(can, msg, can.ui.display_output, can.ui.display.offsetWidth, height) can.onimport.process(can, msg, can.ui.display_output, can.ui.display.offsetWidth, height)
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.ui.display_status) can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.ui.display_status)
can.onmotion.delay(can, function() {
can.page.Select(can, can.ui.display_output, html.TABLE, function(target) {
if (target.offsetHeight < can.ui.display_output.offsetHeight-3*html.ACTION_HEIGHT) {
can.display_size[can.onexport.keys(can)] = target.offsetHeight-3*html.ACTION_HEIGHT, can.onimport.layout(can)
}
})
})
} }
can.onmotion.toggle(can, can.ui.display, true), can.onimport.layout(can) can.onmotion.toggle(can, can.ui.display, true), can.onimport.layout(can)
}, },
process: function(can, msg, target, width, height) { can.onmotion.clear(can, target), can.user.toastSuccess(can) process: function(can, msg, target, width, height) { can.onmotion.clear(can, target), can.user.toastSuccess(can)
if (msg.Option(ice.MSG_PROCESS) == "_field") { if (msg.Option(ice.MSG_PROCESS) == "_field") {
msg.Table(function(item) { item.display = msg.Option(ice.MSG_DISPLAY) msg.Table(function(item) { item.display = msg.Option(ice.MSG_DISPLAY)
can.onimport.plug(can, item, target, function(sub) { width && sub.ConfWidth(width), height && sub.ConfHeight(height), sub.Focus() }) can.onimport.plug(can, item, target, function(sub) { width && sub.ConfWidth(width)
, height && sub.ConfHeight(height-3*html.ACTION_HEIGHT), sub.Focus() })
}) })
} else if (msg.Option(ice.MSG_DISPLAY) != "") { } else if (msg.Option(ice.MSG_DISPLAY) != "") {
can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY), target, false, function(msg) { can.onmotion.delay(can, function() { can.onimport.layout(can) }) }) can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY), target, false, function(msg) { can.onmotion.delay(can, function() { can.onimport.layout(can) }) })
} else { } else {
can.onappend.table(can, msg, null, target), can.onappend.board(can, msg, target) can.onappend.table(can, msg, function(value, key, index, line, array) {
return {text: [value, html.TD], onclick: function(event) {
if (line.line || line.file) { can.onimport.tabview(can, line.path||can.Option(nfs.PATH), line.file||can.Option(nfs.FILE), line.line||can.Option(nfs.LINE)) }
}}
}, target), can.onappend.board(can, msg, target)
} }
}, },
}, [""]) }, [""])
@ -313,10 +332,16 @@ Volcanos(chat.ONACTION, {help: "控件交互", _trans: {link: "链接", width: "
can.ui.search.Update({}, [ctx.ACTION, data.action, data.name]) can.ui.search.Update({}, [ctx.ACTION, data.action, data.name])
}) })
}, },
"打开": function(event, can) { "打开": function(event, can) { var msg = can.request(event, {paths: can.sup.paths.join(ice.FS)})
can.request() can.user.input(event, can, [nfs.FILE], function(list) {
can.request(event, {path: can.sup.paths.join(",")}) if (list[0].indexOf("line:") == 0) { var ls = can.core.Split(list[0], ice.DF, ice.DF)
can.user.input(event, can, [nfs.FILE], function(list) { can.onimport.tabview(can, can.Option(nfs.PATH), list[0]) }) can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), ls[1])
return
}
can.core.List(can.sup.paths, function(path) {
if (list[0].indexOf(path) == 0) { can.onimport.tabview(can, path, list[0].slice(path.length)) }
})
})
}, },
show: function(event, can) { can.request(event, {_toast: "渲染中..."}) show: function(event, can) { can.request(event, {_toast: "渲染中..."})
if (can.base.endWith(can.Option(nfs.FILE), ".js")) { if (can.base.endWith(can.Option(nfs.FILE), ".js")) {
@ -464,8 +489,8 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.page.styleWidth(can, can.ui.display_output, width-project_width) can.page.styleWidth(can, can.ui.display_output, width-project_width)
var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.base.Min(can.ConfHeight(), 320)-1 var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.base.Min(can.ConfHeight(), 320)-1
var display_height = can.ui.display.style.display == html.NONE? 0: (can.display_size[can.onexport.keys(can)]||120) var display_height = can.ui.display.style.display == html.NONE? 0: (can.display_size[can.onexport.keys(can)]||height/2)
if (can.isCmdMode()) { height += html.ACTION_HEIGHT if (can.isCmdMode()) { // height += html.ACTION_HEIGHT
var content_height = height-display_height - can.ui._tabs.offsetHeight - can.ui._path.offsetHeight - 4 var content_height = height-display_height - can.ui._tabs.offsetHeight - can.ui._path.offsetHeight - 4
can.page.style(can, can._output, html.MAX_HEIGHT, "") can.page.style(can, can._output, html.MAX_HEIGHT, "")
} else { } else {

View File

@ -173,6 +173,9 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
}, },
go: { go: {
render: {}, render: {},
split: {
operator: "{([:.,*])}",
},
prefix: { prefix: {
"//": code.COMMENT, "//": code.COMMENT,
}, },
@ -218,6 +221,7 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
"bool": code.DATATYPE, "error": code.DATATYPE, "chan": code.DATATYPE, "map": code.DATATYPE, "bool": code.DATATYPE, "error": code.DATATYPE, "chan": code.DATATYPE, "map": code.DATATYPE,
"msg": code.FUNCTION, "m": code.FUNCTION, "msg": code.FUNCTION, "m": code.FUNCTION,
"ice": code.FUNCTION, "kit": code.FUNCTION,
"init": code.FUNCTION, "main": code.FUNCTION, "print": code.FUNCTION, "println": code.FUNCTION, "panic": code.FUNCTION, "recover": code.FUNCTION, "init": code.FUNCTION, "main": code.FUNCTION, "print": code.FUNCTION, "println": code.FUNCTION, "panic": code.FUNCTION, "recover": code.FUNCTION,
"new": code.FUNCTION, "make": code.FUNCTION, "len": code.FUNCTION, "cap": code.FUNCTION, "copy": code.FUNCTION, "append": code.FUNCTION, "delete": code.FUNCTION, "close": code.FUNCTION, "new": code.FUNCTION, "make": code.FUNCTION, "len": code.FUNCTION, "cap": code.FUNCTION, "copy": code.FUNCTION, "append": code.FUNCTION, "delete": code.FUNCTION, "close": code.FUNCTION,
"complex": code.FUNCTION, "real": code.FUNCTION, "imag": code.FUNCTION, "complex": code.FUNCTION, "real": code.FUNCTION, "imag": code.FUNCTION,
@ -271,6 +275,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
"if": code.KEYWORD, "if": code.KEYWORD,
"else": code.KEYWORD, "else": code.KEYWORD,
"for": code.KEYWORD,
"while": code.KEYWORD,
"switch": code.KEYWORD, "switch": code.KEYWORD,
"case": code.KEYWORD, "case": code.KEYWORD,
"default": code.KEYWORD, "default": code.KEYWORD,
@ -295,6 +301,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮",
"false": code.CONSTANT, "false": code.CONSTANT,
"function": code.FUNCTION, "function": code.FUNCTION,
"arguments": code.FUNCTION,
"this": code.FUNCTION,
"Volcanos": code.FUNCTION, "Volcanos": code.FUNCTION,
"shy": code.FUNCTION, "shy": code.FUNCTION,
"cb": code.FUNCTION, "cb": code.FUNCTION,

View File

@ -117,6 +117,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
t: shy("添加命令", function(event, can) { can.onaction["添加"](event, can) }), t: shy("添加命令", function(event, can) { can.onaction["添加"](event, can) }),
p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }), p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }),
e: shy("添加扩展", function(event, can) { can.onaction["扩展"](event, can) }), e: shy("添加扩展", function(event, can) { can.onaction["扩展"](event, can) }),
f: shy("打开文件", function(event, can) { can.onaction["打开"](event, can) }),
i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }), i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }), n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }),

View File

@ -19,6 +19,7 @@ fieldset.word p.story[data-name=inner]:hover { background-color:#c10c8a; cursor:
fieldset.word table.content { display:block; max-height:400px; } fieldset.word table.content { display:block; max-height:400px; }
fieldset.word fieldset.story { margin:10px; } fieldset.word fieldset.story { margin:10px; }
fieldset.word fieldset.story.full { margin:0px; } fieldset.word fieldset.story.full { margin:0px; }
fieldset.word fieldset.story.float { margin:0px; }
body.white fieldset.word svg.story.auto defs marker { stroke:red; fill:red; } body.white fieldset.word svg.story.auto defs marker { stroke:red; fill:red; }
body.white fieldset.word svg.story.auto rect { stroke:blue; fill:yellow; } body.white fieldset.word svg.story.auto rect { stroke:blue; fill:yellow; }

View File

@ -157,7 +157,7 @@ Volcanos(chat.ONDETAIL, {help: "用户交互",
can.getActionSize(function(left, top, width, height) { left = left||0 can.getActionSize(function(left, top, width, height) { left = left||0
var top = can.Mode() == undefined? 120: 0; if (can.user.isMobile) { top = can.user.isLandscape()? 0: 48 } var top = can.Mode() == undefined? 120: 0; if (can.user.isMobile) { top = can.user.isLandscape()? 0: 48 }
sub.ConfHeight(height-top-2*html.ACTION_HEIGHT-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0)), sub.ConfWidth(width) sub.ConfHeight(height-top-2*html.ACTION_HEIGHT-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0)), sub.ConfWidth(width)
can.onmotion.move(can, sub._target, {position: html.FIXED, left: left, top: top}) can.onmotion.move(can, sub._target, {left: left, top: top})
}) })
}) })
}, },

View File

@ -23,7 +23,11 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) }, cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) },
cli.SHOW, function(event) { can.onaction[cli.SHOW](event, can) }, cli.SHOW, function(event) { can.onaction[cli.SHOW](event, can) },
action, action,
mdb.PLUGIN, function(event) { can.user.input(event, can, [ctx.INDEX, ctx.ARGS], function(data) { can.onimport.plug(can, data, ui.output) }) }, mdb.PLUGIN, function(event) { can.user.input(event, can, [ctx.INDEX, ctx.ARGS], function(data) {
can.onimport.plug(can, data, ui.output, function(sub) {
sub.ConfHeight(target.offsetHeight-4*html.ACTION_HEIGHT)
})
}) },
)); target._toggle = function(event, show) { action[show? cli.SHOW: cli.CLOSE](event) } )); target._toggle = function(event, show) { action[show? cli.SHOW: cli.CLOSE](event) }
return ui return ui
}, },
@ -69,7 +73,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
node = node||{"": target}; can.core.List(list, function(item) { node = node||{"": target}; can.core.List(list, function(item) {
item[field] && can.core.List(item[field].split(split), function(value, index, array) { if (!value) { return } item[field] && can.core.List(item[field].split(split), function(value, index, array) { if (!value) { return }
var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split); if (node[name]) { return } var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split); if (node[name]) { return }
var ui = can.page.Append(can, node[last], [{view: "item", list: [{view: ["switch", "div", (index==array.length-1?"":"&#8963;")]}, {view: ["name", html.DIV, value+(index==array.length-1?"":"")], _init: item._init, onmouseenter: function(event) { if (!item._menu) { return } var ui = can.page.Append(can, node[last], [{view: "item", list: [{view: ["switch", "div", (index==array.length-1?"":"")]}, {view: ["name", html.DIV, value+(index==array.length-1?"":"")], _init: item._init, onmouseenter: function(event) { if (!item._menu) { return }
can.user.carteRight(event, can, item._menu.meta, item._menu.list||can.core.Item(item._meta.meta), function(event, button) { can.user.carteRight(event, can, item._menu.meta, item._menu.list||can.core.Item(item._meta.meta), function(event, button) {
(item._menu.meta[button]||item._menu)(event, can, button) (item._menu.meta[button]||item._menu)(event, can, button)
}) })