diff --git a/frame.js b/frame.js index d0303bf1..9bb67d39 100644 --- a/frame.js +++ b/frame.js @@ -97,15 +97,13 @@ var can = Volcanos("chat", { }, }, Config.libs.concat(["pane/"+name]), function(pane) { can.Dream(document.head, "pane/"+name+".css") - pane.onimport._init && pane.onimport._init(pane, pane.Conf(meta), pane.output, pane.action, pane.option, field) - function deal(event, value) { typeof pane.onaction[value] == "function" && pane.onaction[value](event, pane, meta, value, pane.output) } - can.page.Append(can, pane.action, can.core.List(pane.onaction.list, function(line) { return typeof line == "string"? {button: [line, deal]}: line.length > 0? {select: [line, deal]}: line })) + pane.onimport._init && pane.onimport._init(pane, pane.Conf(meta), pane.output, pane.action, pane.option, field) typeof cb == "function" && cb(pane) }, meta) return pane diff --git a/lib/user.js b/lib/user.js index 4d1cabf2..7772a100 100644 --- a/lib/user.js +++ b/lib/user.js @@ -23,6 +23,7 @@ Volcanos("user", {help: "用户模块", if (typeof key == "object") { can.core.Item(key, function(key, value) { if (value != undefined) {args[key] = value} + args[key] == "" && delete(args[key]) }) } else if (key == undefined) { return args diff --git a/pane/Action.js b/pane/Action.js index c7520b8a..6f9ec4bd 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -1,10 +1,16 @@ Volcanos("onimport", {help: "导入数据", list: [], + _init: function(can, conf, output, action, option, field) { + can.page.Select(can, action, "input", function(input) { + input.value = can.user.Search(can, input.name) || "" + }) + }, init: function(event, can, msg, cmd, output) {output.innerHTML = ""; msg.Table(function(item, index) {if (!item.name) {return} can._plugins.push(can[item.name] = can.Plugin(can, item.name, item, function(event, cmds, cbs) { can.run(event, [item.river, item.storm, item.action].concat(cmds), cbs) }, can.page.AppendField(can, output, "item "+item.group+" "+item.name, item))) }) + }, size: function(event, can, value, cmd, output) { }, diff --git a/pane/Header.js b/pane/Header.js index 433d5678..6ae6e923 100644 --- a/pane/Header.js +++ b/pane/Header.js @@ -38,11 +38,15 @@ Volcanos("onchoice", {help: "组件菜单", list: []}) Volcanos("ondetail", {help: "组件详情", list: []}) Volcanos("onexport", {help: "导出数据", list: [], title: function(event, can, value, cmd, output) { - can.user.Search(can, { + var args = { river: can.Conf("river"), storm: can.Conf("storm"), layout: can.Conf("layout"), + } + can.page.Select(can, document.body, "fieldset.Action>div.action>input", function(input) { + args[input.name] = input.value }) + can.user.Search(can, args) }, link: function(event, can, value, cmd, output) { can.ui[cmd].innerHTML = value diff --git a/plugin/inner.js b/plugin/inner.js index bcdad49d..a867fef0 100644 --- a/plugin/inner.js +++ b/plugin/inner.js @@ -22,6 +22,43 @@ Volcanos("onimport", {help: "导入数据", list: [], })) } }) + can.page.Select(can, output, "div.stack", function(stack) {var data = stack.dataset||{}; + function fold(stack) { + stack.nextSibling && (stack.nextSibling.style.display = "none") + can.page.ClassList.add(can, stack, "fold") + can.page.ClassList.del(can, stack, "span") + can.page.Select(can, stack, "span.state", function(state) { + state.innerText = ">" + }) + } + function span(stack) { + stack.nextSibling && (stack.nextSibling.style.display = "") + can.page.ClassList.add(can, stack, "span") + can.page.ClassList.del(can, stack, "fold") + can.page.Select(can, stack, "span.state", function(state) { + state.innerText = "v" + }) + } + + stack.oncontextmenu = function(event) {var detail = can.feature.detail || can.ondetail.list, target = event.target; + can.user.carte(event, shy("", can.ondetail, ["全部折叠", "全部展开", "标记颜色"], function(event, cmd, meta) {var cb = meta[cmd]; + switch (cmd) { + case "标记颜色": + can.user.prompt("请输入颜色:", function(color) { + target.style.background = color; + }) + break + case "全部折叠": + fold(stack), can.page.Select(can, stack.nextSibling, "div.stack", fold) + break + case "全部展开": + span(stack), can.page.Select(can, stack.nextSibling, "div.stack", span) + break + } + })) + } + stack.onclick = function(event) {stack.nextSibling && (stack.nextSibling.style.display == "none"? span(stack): fold(stack))} + }) }, favor: function(event, can, msg, cmd, output) {var key = msg.detail[0]; var cb = can.onaction[key]; if (typeof cb == "function") {cb(event, can, msg, cmd, output); return msg.Echo(can._name, " onaction ", key), msg._hand = true} diff --git a/style.css b/style.css index 1aebac62..b6cf087b 100644 --- a/style.css +++ b/style.css @@ -223,6 +223,20 @@ fieldset table td.select { background-color:red; } +fieldset div.stack { + cursor:pointer; + width:fit-content; +} +fieldset div.stack.fold { + font-weight:bold; +} +fieldset ul.stack { + margin:0px; +} +fieldset ul.stack:hover { + border:solid 2px red; +} + fieldset div.code { color:white; font-size:14px;