diff --git a/frame.js b/frame.js index 4114c3a1..4d5c39b0 100644 --- a/frame.js +++ b/frame.js @@ -1,4 +1,4 @@ - var _can_name = "/frame.js" +var _can_name = "/frame.js" Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta, list, cb, target) { can.core.Next(list, function(item, next) { item.type = "panel" can.onappend._init(can, item, item.list, function(panel) { @@ -20,7 +20,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta, fun && (sub = mod, mod = fun, fun = mod[value], key = value) }); if (!sub || !mod || !fun) { can.base.Warn("not found", cmds[1]) - cb(msg.Echo("warn: ", "not found: ", cmds[1])) + can.base.isFunc(cb) && cb(msg.Echo("warn: ", "not found: ", cmds[1])) return } @@ -264,7 +264,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, function add(item, next) { item._input != "button" && item.type != "button" && index++ Volcanos(item.name, {_follow: can._follow+"."+item.name, _option: can._option, _action: can._action, _output: can._output, _status: can._status, - _target: can.onappend.input(can, item, args[index]||meta.option[item.name], option), + // _target: can.onappend.input(can, item, args[index]||meta.option[item.name], option), + _target: can.onappend.input(can, item, args[index], option), Option: can.Option, Action: can.Action, Status: can.Status, CloneInput: function() { add(item)._target.focus() }, CloneField: function() { can.Clone() }, @@ -339,6 +340,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, } return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1") + can._msg = msg if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return } if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return } if (can.base.isFunc(cb) && cb(msg)) { return } @@ -536,43 +538,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) { meta.type == "story" && sub.page.Remove(sub, sub._legend) - can.base.isFunc(cb) && cb(sub, meta) - can.page.Modify(sub, sub._legend, { - onmouseenter: function(event) { - Volcanos.meta.data.menu && can.page.Remove(can, Volcanos.meta.data.menu.first) - Volcanos.meta.data.menu = can.user.carte(event, can, { - "保存参数": function(event) { - var msg = can.request(event, {river: can.Conf("river"), storm: can.Conf("storm"), id: meta.id}) - can.run(event, ["action", "modify", "arg", JSON.stringify(sub.Pack([], true))], function(msg) { - can.user.toast(can, "保存成功") - }) - }, - "清空参数": function(event) { - can.page.Select(can, sub._option, '.args', function(item) { return item.value = "" }) - }, - "共享工具": function(event) { - can.user.input(event, can, ["name"], function(event, button, data, list, args) { - can.user.share(can, can.request(event), ["action", "share", "type", "field", - "name", list[0], "text", JSON.stringify(sub.Pack([], true)), - "river", meta.ctx||meta.key||"", "storm", meta.index||meta.cmd||meta.name]) - }) - }, - "刷新结果": function(event) { - sub.onappend._output(sub, meta, {}, sub.Pack([], true)) - }, - "清空结果": function(event) { - sub.onmotion.clear(sub, sub._output) - }, - }, ["保存参数", "清空参数", "共享工具", "刷新结果", "清空结果"]) - - can.page.Modify(can, Volcanos.meta.data.menu.first, {style: { - left: event.target.offsetLeft+can.run(event, ["search", "River.onexport.width"]), - top: event.target.offsetTop-can._output.scrollTop+event.target.offsetHeight+can.run(event, ["search", "Header.onexport.height"]), - }}) - }, - }) - sub._legend.onclick = function(event) { - } + sub.base.isFunc(cb) && cb(sub, meta) }, target||can._output) }, plugin: function(can, meta, cb, target) { meta = meta || {} @@ -638,7 +604,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) { top = window.innerHeight - p.offsetHeight } if (top < 32) { top = 32 } - can.page.Modify(can, p, {style: {left: left, top: top}}) + can.page.Modify(can, p, {style: {left: can.user.isMobile? 30: left, top: top+30}}) }, resize: function(can, name, cb) { var list = []; can.onengine.listen(can, name, function(width, height) { diff --git a/lib/core.js b/lib/core.js index 0680b7e9..366216f2 100644 --- a/lib/core.js +++ b/lib/core.js @@ -71,6 +71,7 @@ Volcanos("core", {help: "数据结构", return typeof cb == "function" && cb(timer, interval.interval||interval[i], i, interval)? typeof cbs == "function" && cbs(timer, interval): setTimeout(function() { loop(timer, i+1) }, interval.interval||interval[i+1]) } + if (interval.interval == 0) { cb(); return timer } setTimeout(function() { loop(timer, 0) }, interval.interval||interval[0]) return timer }), diff --git a/lib/misc.js b/lib/misc.js index 5b2b0e3f..5cad022a 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -125,8 +125,11 @@ Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg msg[item] && (form[item] = msg[item]) }) - var path = (can.Conf("iceberg")||"/chat/")+dataset.names.toLowerCase() - can.misc.POST(can, msg, can.base.MergeURL(path, "", (msg._can.sup||msg._can)._name, "_daemon", dataset.daemon), form, function(msg) { + can.misc.POST(can, msg, can.base.MergeURL( + (can.Conf("iceberg")||"/chat/")+dataset.names.toLowerCase(), + "_", (msg._can.sup||msg._can)._name, + "_daemon", dataset.daemon, + ), form, function(msg) { typeof cb == "function" && cb(msg) }) }), diff --git a/lib/page.js b/lib/page.js index 93957e2b..92babfed 100644 --- a/lib/page.js +++ b/lib/page.js @@ -38,7 +38,11 @@ Volcanos("page", {help: "网页模块", "left": true, "right": true, "top": true, "bottom": true, "margin-top": true, "margin-left": true, } - if (size[sub] && value && (typeof value == "number" || value.indexOf("px") == -1)) { + if (parseInt(value) < 0 && sub == "height") { + target[key] && (target[key][sub] = "") + return + } + if (size[sub] && value && (typeof value == "number" || value.indexOf && value.indexOf("px") == -1)) { value += "px" } target[key] && (target[key][sub] = value) diff --git a/lib/user.js b/lib/user.js index af23a662..21959da2 100644 --- a/lib/user.js +++ b/lib/user.js @@ -67,7 +67,7 @@ Volcanos("user", {help: "用户模块", agent: { var width = meta.width||400, height = meta.height||100; if (width < 0) { width = window.innerWidth + width } var ui = can.page.Append(can, document.body, [{view: "toast", style: { - width: width, bottom: 100, left: window.innerWidth/2-width/2, + width: width, bottom: 100, left: (window.innerWidth-width)/2, }, list: [ {text: [meta.title||"", "div", "title"]}, typeof meta.content == "object"? meta.content: {text: [meta.content||"执行成功", "div", "content"]}, @@ -79,7 +79,7 @@ Volcanos("user", {help: "用户模块", agent: { ui.Close = function() { can.page.Remove(can, ui.first), timer.stop = true } var timer = can.core.Timer({interval: 100, length: (parseInt(meta.duration||1000))/100}, function(event, interval, index) { - if (index > 20) { ui.duration.innerHTML = parseInt(index/10)+"."+(index%10)+"s..." } + if (index > 30) { ui.duration.innerHTML = parseInt(index/10)+"."+(index%10)+"s..." } }, ui.Close) can.onappend._action(can, meta.button||[], ui.button, { @@ -172,7 +172,7 @@ Volcanos("user", {help: "用户模块", agent: { }, input: function(event, can, form, cb) { // form [ string, array, object, {_input: }, {button: []} ] var msg = can.request(event, can.Option()) - var x = event.clientX||200, y = event.clientY+10||48 + var x = event.clientX||can.user.isMobile? 20: 200, y = event.clientY+10||48 var button; var ui = can.page.Append(can, document.body, [{view: ["input inputs", "fieldset"], style: {left: x, top: y}, list: [ {view: ["option", "table"], list: can.core.List(form, function(item) { @@ -194,6 +194,7 @@ Volcanos("user", {help: "用户模块", agent: { item = typeof item == "string"? {_input: "text", name: item}: item.length > 0? {_input: "select", name: item[0], values: item.slice(1)}: item + item._input = item.type||item._input||"text" return {type: "tr", list: [{type: "td", list: [{text: item.name||""}]}, {type: "td", list: [ item._input == "textarea"? /* textarea */ {type: "textarea", data: item, _init: _init}: @@ -271,8 +272,7 @@ Volcanos("user", {help: "用户模块", agent: { }, download: function(can, path, name) { var a = can.page.Append(can, document.body, [{type: "a", href: path, download: name||path.split("/").pop()}]).first - a.click() - can.page.Remove(can, a) + a.click(), can.page.Remove(can, a) }, logout: function(can) { if (can.user.confirm("logout?")) { diff --git a/page/index.css b/page/index.css index f1c0230f..b60c7636 100644 --- a/page/index.css +++ b/page/index.css @@ -93,6 +93,12 @@ input[type=text] { input[type=text]:hover { background-color:white; } +td>input[type=button][name=remove] { + background-color:red; +} +td>input[type=button][name=create] { + background-color:blue; +} input[type=button] { background-color:black; color:cyan; letter-spacing:4px; @@ -339,6 +345,9 @@ fieldset>div.output td.project { fieldset>div.output td.profile { background-color:#71909c91; } +fieldset>div.output td.profile div.profile { + overflow:auto; +} fieldset>div.output { clear:both; overflow:auto; @@ -348,7 +357,7 @@ fieldset>div.output div.code a { color:yellow; } fieldset>div.output div.project { - min-width:80px; max-width:240px; + min-width:88px; max-width:240px; float:left; overflow:auto; } fieldset>div.output div.project div.item { @@ -400,6 +409,12 @@ body.white { background-color:#052238bf; color:white; } +body.white td>input[type=button][name=remove] { + background-color:red; +} +body.white td>input[type=button][name=create] { + background-color:blue; +} body.white input[type=button] { background-color:#FF9900; color:white; border-radius:10px 10px 10px 10px; @@ -470,6 +485,18 @@ body.print { background-color:white; color:black; } +body.print fieldset.Header { + background-color:white; + color:black; +} +body.print fieldset.River { + background-color:white; + color:black; +} +body.print fieldset.Footer { + background-color:white; + color:black; +} body.print legend { box-shadow:0px 0px 0px 0px #626bd0; } diff --git a/panel/Action.css b/panel/Action.css index 382530c2..99e00bab 100644 --- a/panel/Action.css +++ b/panel/Action.css @@ -43,6 +43,7 @@ fieldset.Action div.output.grid fieldset.plugin>div.output { } fieldset.Action div.output.tabs fieldset.plugin { display:none; + float:left; } fieldset.Action div.output.tabs fieldset.plugin.select { display:block; diff --git a/panel/Action.js b/panel/Action.js index 81accba8..fbd2a295 100644 --- a/panel/Action.js +++ b/panel/Action.js @@ -34,6 +34,18 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) can.onmotion.select(can, can._output, "fieldset.plugin", sub._target) can.onmotion.select(can, can._action, "div.item", event.target) }}]) + + sub.page.Modify(sub, sub._legend, { + onmouseenter: function(event) { + Volcanos.meta.data.menu && sub.page.Remove(sub, Volcanos.meta.data.menu.first) + Volcanos.meta.data.menu = sub.user.carte(event, sub, sub.onaction, sub.onaction.list) + + sub.page.Modify(sub, Volcanos.meta.data.menu.first, {style: { + left: event.target.offsetLeft+can.run(event, ["search", "River.onexport.width"]), + top: event.target.offsetTop-can._output.scrollTop+event.target.offsetHeight+can.run(event, ["search", "Header.onexport.height"]), + }}) + }, + }) }, _share: function(can, msg, share) { can.Conf(can._WIDTH, window.innerWidth) @@ -42,12 +54,22 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) can.user.title(can.user.Search(can, can._TITLE)||msg.Option(can._TITLE)) can.Conf(can._RIVER, "_share"), can.Conf(can._STORM, share) can.onimport._init(can, msg) + can.onaction._layout(can, "flow") }, _menu: function(can) { !can.user.isMobile && can.run({}, [can._SEARCH, "Header.onimport.menu", can._ACTION, ["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"], ], function(event, key) { can.onaction._layout(can, key) }) }, + + height: function(can, height) { + can.page.Modify(can, can._target, {style: { + height: can.Conf(can._HEIGHT, height), + }}) + can.page.Modify(can, can._output, {style: { + height: can.Conf(can._HEIGHT, height-(can.Conf(can._LAYOUT)=="tabs"? 28: 10)), + }}) + }, }) Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, page, msg, can, cmds, cb) { @@ -74,7 +96,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.const( "output", "fields", "search", "action", "share", "river", "storm", - "title", "topic", "layout", "width", "height", + "title", "topic", "layout", "width", "height", "top", "left", "plugin", ) @@ -124,6 +146,11 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.onmotion.select(can, can._output, "fieldset.plugin", 0) can.onmotion.select(can, can._action, "div.item", 0) } + + + var header = can.get("Header", "height") + var footer = can.get("Footer", "height") + can.set("Action", "height", window.innerHeight-header-footer) }, _select: function(can, msg, river, storm) { function key(name) { return can.Conf(can._RIVER)+"."+can.Conf(can._STORM)+"."+name} @@ -153,8 +180,8 @@ Volcanos("onexport", {help: "导出数据", list: [], }) }, size: function(can, msg) { - msg.Option("top", can._target.offsetTop) - msg.Option("left", can._target.offsetLeft) + msg.Option(can._TOP, can._target.offsetTop) + msg.Option(can._LEFT, can._target.offsetLeft) msg.Option(can._WIDTH, can._target.offsetWidth) msg.Option(can._HEIGHT, can._target.offsetHeight) }, diff --git a/panel/Header.js b/panel/Header.js index bab9811b..ac6b3280 100644 --- a/panel/Header.js +++ b/panel/Header.js @@ -224,9 +224,28 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, return can.menu }, river: function(event, can) { can.onaction.River(can) }, - black: function(event, can, button) { can.onlayout.topic(can, button) }, - white: function(event, can, button) { can.onlayout.topic(can, button) }, - print: function(event, can, button) { can.onlayout.topic(can, "white print") }, + black: function(event, can, button) { + can.onlayout.topic(can, button) + + var header = can.get("Header", "height") + var footer = can.get("Footer", "height") + can.set("River", "height", window.innerHeight-header-footer) + can.set("Action", "height", window.innerHeight-header-footer) + }, + white: function(event, can, button) { + can.onlayout.topic(can, button) + + var header = can.get("Header", "height") + var footer = can.get("Footer", "height") + can.set("River", "height", window.innerHeight-header-footer) + can.set("Action", "height", window.innerHeight-header-footer) + }, + print: function(event, can, button) { + can.onlayout.topic(can, "white print") + + can.set("River", "height", -1) + can.set("Action", "height", -1) + }, pack: function(event, can) { can.user.input(event, can, [ {_input: "text", name: "name", value: "demo"}, @@ -254,6 +273,9 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, shareuser: function(event, can) { can.user.share(can, can.request(event), [can._ACTION, can._SHARE, "type", "login"]) }, + share: function(event, can, arg) { + can.user.share(can, can.request(event), [can._ACTION, can._SHARE].concat(arg)) + }, usernick: function(event, can) { can.user.input(event, can, [{_input: "text", name: "usernick", value: can.Conf(can._USERNAME)}], function(ev, button, data, list, args) { can.run(event, ["usernick", list[0]], function(msg) { diff --git a/panel/River.js b/panel/River.js index 0cee6fcc..740e2fce 100644 --- a/panel/River.js +++ b/panel/River.js @@ -53,6 +53,15 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }}) return item }, + + height: function(can, height) { + can.page.Modify(can, can._target, {style: { + height: can.Conf(can._HEIGHT, height), + }}) + can.page.Modify(can, can._output, {style: { + height: can.Conf(can._HEIGHT, height-10), + }}) + }, }) Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, can, msg, panel, cmds, cb) { cmds.length == 0 && can.core.Item(can.onengine.river, function(key, value) { diff --git a/panel/Search.js b/panel/Search.js index e932cba3..ce4d64aa 100644 --- a/panel/Search.js +++ b/panel/Search.js @@ -4,7 +4,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, if (event.key == "Escape") { can.onmotion.hide(can) } if (event.key == "Enter") { event.stopPropagation(), event.preventDefault() - if (event.ctrlKey && can.onaction.select(event, can, 0)) { return } + if (event.ctrlKey) { + can.type == "*"? can.onimport._plugin(can, can.list[0]): can.onaction.select(event, can, 0) + return + } + if (event.shiftKey) { return can.onaction["完成"](event, can) } can.input(event, event.target.value) } }]}, @@ -12,37 +16,32 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, ]), can.base.isFunc(cb) && cb(msg) can.page.ClassList.add(can, can.ui.display, "content") }, + _plugin: function(can, line) { + can.onappend.plugin(can, {index: line.ctx&&line.cmd!="command"? line.ctx+"."+line.cmd: line.text+"."+line.name||msg.Option("index"), option: line}, function(sub, meta) { + sub.run = function(event, cmds, cb) { var msg = can.request(event, line) + can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) { + can.base.isFunc(cb) && cb(msg) + }) + } + }, can.ui.preview) + }, _table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content) var table = can.onappend.table(can, msg, function(value, key, index, line) { can.Status("count", index+1) return {text: [key == "text" && can.base.isFunc(line.text) && line.text.help || value, "td"], onclick: function(event) { - if (event.shiftKey) { event.stopPropagation(), event.preventDefault() - return can.onappend.plugin(can, {index: line.ctx? line.ctx+"."+line.cmd: msg.Option("index"), option: line}, function(sub, meta) { - sub.run = function(event, cmds, cb) { var msg = can.request(event, line) - can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) { - can.base.isFunc(cb) && cb(msg) - }) - } - }, can.ui.preview) - } - - if (line.ctx == "web.chat" && line.cmd == "/search") { - return can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb) - } - if (can.onaction.select(event, can, index)) { return } + can.type == "*" || event.shiftKey? can.onimport._plugin(can, line): can.onaction.select(event, can, index) + event.stopPropagation(), event.preventDefault() }} }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(","), function(item) { return fields.indexOf(item) - })) - table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}}) + })); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}}) }, - _word: function(can, msg, cmds, fields) { - msg = can.request({}, {word: cmds, fields: fields.join(","), sort: msg.Option("sort"), index: msg.Option("index")}) + _word: function(can, msg, cmds, fields) { can.type = cmds[0] + msg.Option({word: cmds, fields: fields.join(","), sort: msg.Option("sort"), index: msg.Option("index")}) can.onengine.signal(can, "search", msg) can.run(msg._event, cmds, function(msg) { can.list = msg.Table() can.onimport._table(can, msg, fields) - }) - can.ui.word.setSelectionRange(0, -1) + }), can.ui.word.setSelectionRange(0, -1) }, select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1] @@ -51,14 +50,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.base.isFunc(cb) && cb(can.onexport.select(can)), can.onmotion.hide(can) } - can.input = function(event, word) { cmds[1] = word + can.input = function(event, word) { cmds[1] = word||cmds[1] can.onimport._word(can, msg, cmds, fields) - } + }, can.onimport._word(can, msg, cmds, fields) can.onmotion.show(can), can.ui.input.focus() - can.onimport._word(can, msg, cmds, fields) - can.run({}, ["search", "Action.onexport.size"], function(msg, top, left, width, height) { + can.search(["Action.onexport.size"], function(msg, top, left, width, height) { can.page.Modify(can, can._output, {style: {"max-width": width, "max-height": height-75}}) can.page.Modify(can, can._target, {style: {top: top, left: left}}) } ) @@ -72,6 +70,11 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] "完成": function(event, can) { can.base.isFunc(can.cb) && can.cb() }, select: function(event, can, index) { + + if (line.ctx == "web.chat" && line.cmd == "/search") { + return can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb) + } + if (can.list && can.list[index]) { var text = can.list[index].text || "" if (can.base.isFunc(text)) { diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index f199fce1..1b90e694 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -17,7 +17,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, var height = can.Conf("height")-320; height < 240 && (height = 240) can.page.Modify(can, can.ui.project, {style: {"max-height": height}}) can.page.Modify(can, can.ui.content, {style: {"max-height": height}}) - can.page.Modify(can, can.ui.content, {style: {"min-width": can.Conf("width")-170}}) + // can.page.Modify(can, can.ui.content, {style: {"min-width": can.Conf("width")-170}}) can.page.Modify(can, can.ui.display, {style: {display: "none"}}) }, _output: function(can, target) { @@ -172,7 +172,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏", "搜索", }, "项目": function(event, can) { var width = can.Conf("width")-(can.onmotion.toggle(can, can.ui.project)? 170: 0) - can.page.Modify(can, can.ui.content, {style: {"min-width": width}}) + // can.page.Modify(can, can.ui.content, {style: {"min-width": width}}) }, "收藏": function(event, can) { can.onmotion.toggle(can, can.ui.favor._target) }, "搜索": function(event, can) { can.onmotion.toggle(can, can.ui.search) }, diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index 9a12fd6d..f1f505a5 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -5,6 +5,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onmotion.hidden(can, can._action) can.onimport[can.Option("scale")||"week"](can, msg) can.page.Modify(can, can.ui.profile, {style: {display: "block"}}) + can.page.Modify(can, can.ui.project, {style: {"max-height": can.ui.content.offsetHeight}}) + can.page.Modify(can, can.ui.profile, {style: {"max-height": can.ui.content.offsetHeight}}) }, _content: function(can, msg, head, list, key, get, set) { var hash = {}; msg.Table(function(value, index) { diff --git a/plugin/state.js b/plugin/state.js index 5b3fd6ac..82d046b8 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -3,6 +3,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, _process: function(can, msg, cmds, cb, silent) { return can.core.CallFunc([can.onimport, msg.Option("_process")], [can, msg, cmds, cb, silent]) }, + _refresh: function(can, msg) { + can.core.Timer(parseInt(msg.Option("_delay")||"500"), function() { + var sub = can.request({}, {_count: parseInt(msg.Option("_count"))-1}) + can.onappend._output(can, can.Conf(), sub._event, can.Pack()) + }) + return true + }, _hold: function(can, msg) { return true }, @@ -39,13 +46,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, }) return true }, - _refresh: function(can, msg) { - can.core.Timer(parseInt(msg.Option("_delay")||"500"), function() { - var sub = can.request({}, {_count: parseInt(msg.Option("_count"))-1}) - can.onappend._output(can, can.Conf(), sub._event, can.Pack()) - }) - return true - }, _field: function(can, msg) { msg.Table(function(item) { can.onappend._plugin(can, item, {}, function(sub, meta) { sub.run = function(event, cmds, cb, silent) { @@ -62,12 +62,54 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, return true }, }) -Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) { +Volcanos("onaction", {help: "交互操作", list: ["保存参数", "清空参数", "共享工具", "刷新数据", "复制数据", "下载数据", "清空数据"], _init: function(can, msg, list, cb, target) { }, + "保存参数": function(event, can) { var meta = can.Conf() + var msg = can.request(event, {river: can.Conf("river"), storm: can.Conf("storm"), id: meta.id}) + can.run(event, ["action", "modify", "arg", JSON.stringify(can.Pack([], true))], function(msg) { + can.user.toast(can, "保存成功") + }) + }, + "清空参数": function(event, can) { + can.page.Select(can, can._option, '.args', function(item) { return item.value = "" }) + }, + "共享工具": function(event, can) { var meta = can.Conf() + can.user.input(event, can, [{name: "name", value: meta.name}], function(event, button, data, list, args) { + var msg = can.request(event, {arg: [ + "type", "field", + "name", list[0], "text", JSON.stringify(can.Pack([], true)), + "river", meta.ctx||meta.key||"", "storm", meta.index||meta.cmd||meta.name, + ]}) + can.run(event, ["search", "Header.onaction.share"]) + }) + }, + "刷新数据": function(event, can) { var meta = can.Conf() + can.onappend._output(can, meta, {}, can.Pack([], true)) + }, + "复制数据": function(event, can) { var meta = can.Conf(), msg = can._msg + var res = [msg.append && msg.append.join(",")]; msg.Table(function(line, index, array) { + res.push(can.core.Item(line, function(key, value) { return value }).join(",")) + }) + + res.length > 1 && can.user.copy(event, can, res.join("\n")) + msg.result && can.user.copy(event, can, msg.Result()) + }, + "下载数据": function(event, can) { var meta = can.Conf(), msg = can._msg + var res = [msg.append && msg.append.join(",")]; msg.Table(function(line, index, array) { + res.push(can.core.Item(line, function(key, value) { return value }).join(",")) + }) + + res.length > 1 && can.user.download(can, URL.createObjectURL(new Blob([res.join("\n")])), meta.name+".csv") + msg.result && can.user.download(can, URL.createObjectURL(new Blob([msg.Result()])), meta.name+".txt") + }, + "清空数据": function(event, can) { + can.onmotion.clear(can, can._output) + }, + change: function(event, can, name, value, cb) { return can.page.Select(can, can._option, "input.args", function(input) { if (input.name == name && value != input.value) { input.value = value - var data = input.dataset || {}; data.action == "auto" && can.run(event, can.Pack(), cb) + var data = input.dataset || {}; data.action == "auto" && can.onappend._output(can, can.Conf(), event, can.Pack(), cb) return input } }) diff --git a/plugin/table.js b/plugin/table.js index 04d00464..5a8ebc24 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -1,15 +1,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - if (can.sup.onimport._process(can.sup, msg)) { return can.base.isFunc(cb) && cb(can, msg) } - if (can.onimport._process(can, msg)) { return can.base.isFunc(cb) && cb(can, msg) } - can.onmotion.clear(can) - can.base.isFunc(cb) && cb(msg) - can.page.Append(can, target, [can.onimport._control(can, msg)]) can.onappend.table(can, msg, function(value, key, index, line, array) { return can.onimport._table(can, value, key, index, line, array, cb) }) + can.base.isFunc(cb) && cb(msg) can.onappend.board(can, msg.Result()) can.onmotion.story(can, can._output) }, @@ -20,7 +16,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, return can.run(event, ["action", target.name], function(msg) { can.run() }, true) } - if (can.sup.onaction.change(event, can.sup, key, value, function(msg) { can.onimport._init(can, msg, [], cb) }).length > 0) { return } + if (can.sup.onaction.change(event, can.sup, key, value, function(msg) {}).length > 0) { return } }, ondblclick: function(event) { can.onmotion.modify(can, event.target, function(event, value, old) { diff --git a/proto.js b/proto.js index 35961a64..9d6613c3 100644 --- a/proto.js +++ b/proto.js @@ -72,6 +72,17 @@ var Volcanos = shy("火山架", {args: {}, data: {}, pack: {}, libs: [], cache: can["_"+v.toUpperCase()] = v }) }, + set: function(target, field, value) { var event = {} + var msg = can.request(event, {}); msg.Option(field, value) + return can.run(event, ["search", target+".onimport."+field]) + }, + cmd: function(target, field) { + return can.run({}, ["search", target+".onaction."+field]) + }, + get: function(target, field) { + return can.run({}, ["search", target+".onexport."+field]) + }, + search: function(cmds, cb) { can.run({}, ["search"].concat(cmds), cb) }, Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {}, }; can = can || {}; for (var k in proto) { can.hasOwnProperty(k) || (can[k] = proto[k]) }