diff --git a/frame.js b/frame.js index 81e1d638..bb1feaf7 100644 --- a/frame.js +++ b/frame.js @@ -282,6 +282,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, key && value && cmds.push(key, value) }) + var msg = can.request(event, can.Option()) can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1") if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return } if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return } @@ -446,7 +447,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }, plugin: function(can, meta, cb, target) { meta = meta || {} meta.inputs && meta.inputs.length > 0? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cb, target): - can.run({}, ["action", "command", meta.index||item.ctx+"."+item.cmd], function(msg) { msg.Table(function(value) { + can.run({}, ["action", "command", meta.index||meta.ctx+"."+meta.cmd], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, cb, target) }) }, true) }, @@ -555,8 +556,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe } }, _parse: function(event, can, mode, list, target) { list.push(event.key) - can.Status && can.Status("keys", list.join("")) - for (var pre = 0; pre < list.length; pre++) { if ("0" <= list[pre] && list[pre] <= "9") { continue } break }; var count = parseInt(list.slice(0, pre).join(""))||1 @@ -564,7 +563,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe function repeat(cb, count) { list = [] for (var i = 1; i <= count; i++) { if (cb(event, can, target, count)) { break } } event.stopPropagation(), event.preventDefault() - can.Status && can.Status("keys", list.join("")) } var map = can.onkeypop._mode[mode] diff --git a/lib/core.js b/lib/core.js index 9557f6e6..a5f3348d 100644 --- a/lib/core.js +++ b/lib/core.js @@ -93,7 +93,7 @@ Volcanos("core", {help: "核心模块", var cb = args["cb"] var ls = func.toString().split(")")[0].split("(")[1].split(",") var list = [], echo = false; this.List(ls, function(item, index) { item = item.trim() - list.push(args[item] || msg&&msg.Option&&msg.Option(item) || args[index] || can&&can.Conf&&can.Conf(item) || null) + list.push(args[item] || args[index] || msg&&msg.Option&&msg.Option(item) || can&&can.Conf&&can.Conf(item) || null) if (item == "cb") { echo = true } }) diff --git a/lib/page.js b/lib/page.js index 70b7da2b..9aa51c6f 100644 --- a/lib/page.js +++ b/lib/page.js @@ -226,6 +226,7 @@ Volcanos("page", {help: "网页模块", index = typeof index == "object"? index: [index] index = can.core.List(index, function(item) { if (item > -1) { return item} }) + if (index.length == 0) { return } var is_time = true, is_number = true can.core.List(list, function(tr) { diff --git a/lib/user.js b/lib/user.js index bbc5e843..89556d03 100644 --- a/lib/user.js +++ b/lib/user.js @@ -166,10 +166,11 @@ Volcanos("user", {help: "用户模块", agent: { }, input: function(event, can, form, cb) { // form [ string, {_input: }, array, object, button ] function cbs(event, button) { - var data = {}; var list = can.page.Select(can, ui.table, "select,input,textarea", function(item) { + var data = {}, args = []; var list = can.page.Select(can, ui.table, "select,input,textarea", function(item) { + args.push(item.name, item.value) return data[item.name] = item.value }) - if (typeof cb == "function" && cb(event, button, data, list)) { + if (typeof cb == "function" && cb(event, button, data, list, args)) { can.page.Remove(can, ui.first) } } @@ -231,7 +232,7 @@ Volcanos("user", {help: "用户模块", agent: { return ui }, select: function(event, can, type, fields, cb, cbs) { - var msg = can.request(event, {fields: fields||"pod,name,text"}) + var msg = can.request(event, {fields: fields||"type,name,text"}) can.run(msg._event, ["search", "Search.onimport.select", type, "", ""], function(list) { can.core.Next(list, cb, cbs||function() { can.user.toast(can, "添加成功") diff --git a/page/index.css b/page/index.css index c9e059d6..19853cc4 100644 --- a/page/index.css +++ b/page/index.css @@ -97,7 +97,7 @@ table { cursor:pointer; overflow: auto; } table tr { - background:#04272f85; + background-color:#04272f45; } table th { background-color:#0fbd45; @@ -110,6 +110,12 @@ table td { table td.select { background-color:red; } +table td.select { + background-color:red; +} +table td.done { + background-color:green; +} table.content tr:hover { background-color:green; @@ -341,7 +347,7 @@ body.white table { color:black; } body.white table tr { - background-color:#e1f1ff6b; + background-color:#e1f1ff1f; } body.white table th { background-color:#99CCFF; @@ -360,15 +366,20 @@ body.white table input[type=button][value=启动] { } body.white fieldset.story { - background-color:#7c8ea5ab; + /* background-color:#7c8ea5ab; */ } body.white fieldset.Action { - background-color:#a2dceab3; color:black; } +body.white fieldset.Action>div.action { + color:white; +} +body.white fieldset.Action>div.action div.item { + height:21px; +} body.white fieldset.Action fieldset.plugin { - background-color:#ffffff9c; + background-color:#ffffff78; } body.white fieldset.Action fieldset.plugin legend { background-color:#339999; color:white; diff --git a/pane/Action.css b/pane/Action.css index 133bf24a..1e83a7d8 100644 --- a/pane/Action.css +++ b/pane/Action.css @@ -1,6 +1,6 @@ fieldset.Action { + background-color:#7299a28c; min-width:160px; - background-color:#a2dceab3; } fieldset.Action>div.action { display:none; @@ -35,11 +35,11 @@ fieldset.Action div.output.flow fieldset.plugin { float:left; } fieldset.Action div.output.grid fieldset.plugin { - width:240px; height:240px; overflow:auto; + width:480px; height:320px; overflow:auto; float:left; } fieldset.Action div.output.grid fieldset.plugin>div.output { - width:240px; height:240px; overflow:auto; + width:480px; height:320px; overflow:auto; } fieldset.Action div.output.tabs fieldset.plugin { display:none; position:absolute; diff --git a/pane/Action.js b/pane/Action.js index 4c831fcf..726a17c7 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -130,7 +130,7 @@ Volcanos("onexport", {help: "导出数据", list: [], }) }, plugin: function(can, msg, word) { - var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") + var fields = (msg.Option("fields")||"ctx,cmd,type,name,text").split(",") can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) { if (item.innerHTML.indexOf(word[1]) == -1) { return } diff --git a/pane/Header.js b/pane/Header.js index f99dc63a..fca7d37b 100644 --- a/pane/Header.js +++ b/pane/Header.js @@ -33,9 +33,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], onclick: function(event) { can.core.CallFunc([can.onaction, item], [event, can, item]) }, _init: function(target) { - item == "time" && can.core.Timer({interval: 1000, length: -1}, function() { - can.onimport.time(can, target) - }) && can.onappend.figure(can, {}, "@date", target) + item == "time" && can.onimport._time(can, target) }}]) }) }, @@ -101,6 +99,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }) }) }, + _time: function(can, target) { + can.core.Timer({interval: 1000, length: -1}, function() { + can.onimport.time(can, target) + }) + can.onappend.figure(can, {style: {left: "", right: "0", top: can._target.offsetHeight}}, "@date", target) + }, time: function(can, target) { can.onlayout.topic(can) target.innerHTML = can.base.Time(null, "%w %H:%M:%S") @@ -133,13 +137,19 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, function init() { can.run({}, [], function(msg) { can.Conf("username", msg.Option("user.nick")||msg.Option("user.name")) can.onimport._init(can, msg, list, function(msg) { - can.run({}, ["search", "Search.onaction._init"]) - can.run({}, ["search", "Action.onaction._init"]) - can.run({}, ["search", "River.onaction._init"]) - can.run({}, ["search", "Footer.onaction._init"]) + can.run(msg._event, ["search", "Search.onaction._init"]) + can.run(msg._event, ["search", "Action.onaction._init"]) + can.run(msg._event, ["search", "River.onaction._init"]) + can.run(msg._event, ["search", "Footer.onaction._init"]) typeof cb == "function" && cb(msg) }, can._output) + can.page.Select(can, document.body, "fieldset.River", function(item) { + can.onmotion.toggle(can, item) + }) }) } + can.page.Select(can, document.body, "fieldset.River", function(item) { + can.onmotion.hidden(can, item) + }) can.onlayout.topic(can) can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { diff --git a/pane/River.js b/pane/River.js index 9e52fd35..24c05deb 100644 --- a/pane/River.js +++ b/pane/River.js @@ -43,9 +43,9 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, }) can.run({}, ["search", "Header.onimport.menu", "river", - ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备"], - ["访问", "访问研发", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"], - ["共享", "共享群组", "共享应用", "共享工具", "邀请用户", "邀请设备"], + ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"], + ["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"], + ["共享", "共享群组", "共享应用", "共享工具", "共享用户", "邀请设备"], ], function(event, item) { can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf("river"), can.Conf("storm")]) }) @@ -113,15 +113,15 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }) }, "添加用户": function(event, can, button, river) { - can.user.select(event, can, "user", "pod,name,text", function(item, next) { - can.run({}, [river, "user", "action", "insert", "username", item[2]], function(msg) { + can.user.select(event, can, "user", "usernick,username", function(item, next) { + can.run({}, [river, "user", "action", "insert", "username", item[0]], function(msg) { next() }) }) }, "添加设备": function(event, can, button, river) { - can.user.select(event, can, "space", "pod,type,name,text", function(item, next) { - can.run({}, [river, "node", "action", "insert", "type", item[1], "name", item[2]], function(msg) { + can.user.select(event, can, "space", "type,name,text", function(item, next) { + can.run({}, [river, "node", "action", "insert", "type", item[0], "name", item[1]], function(msg) { next() }) }) @@ -163,8 +163,8 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }) }, "添加工具": function(event, can, button, river, storm) { - can.user.select(event, can, "command", "pod,name,text", function(item, next) { - can.run({}, [river, "tool", "action", "insert", "hash", storm].concat(["pod", item[0], "ctx", item[2], "cmd", item[1]]), function(msg) { + can.user.select(event, can, "command", "context,command", function(item, next) { + can.run({}, [river, "tool", "action", "insert", "hash", storm].concat(["pod", "", "ctx", item[0], "cmd", item[1]]), function(msg) { next() }) }, function() { @@ -194,13 +194,15 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }) }, - "访问研发": function(event, can, button, river, storm) { + "内部系统": function(event, can, button, river, storm) { can.user.select(event, can, "github", "time,type,name,text") }, "访问应用": function(event, can, button, river, storm) { + var msg = can.request(event, {sort: ","}) can.user.select(event, can, "storm", "type,name,text") }, "访问工具": function(event, can, button, river, storm) { + var msg = can.request(event, {sort: ","}) can.user.select(event, can, "plugin", "type,name,text") }, "访问用户": function(event, can, button, river, storm) { @@ -213,8 +215,14 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 var msg = can.request(event, {index: "web.team.task"}) can.user.select(event, can, "task", "time,zone,id,type,name,text") }, - "邀请用户": function(event, can, button, river, storm) { - can.user.toast(can, "what", "邀请用户") + + "共享用户": function(event, can, button, river, storm) { + can.user.input(event, can, [ + {_input: "text", name: "name", value: river}, + ], function(event, button, meta, list) { + can.user.share(can, can.request(event), [river, "action", "share", "type", "login"]) + return true + }) }, "邀请设备": function(event, can, button, river, storm) { can.run(event, ["action", "invite"], function(msg) { @@ -226,12 +234,29 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }) }) }, + + "创建空间": function(event, can, button, river, storm) { + can.user.input(event, {__proto__: can, run: function(event, cmds, cb, silent) { + var msg = can.request(event, {action: "start"}) + can.run(event, cmds, cb, silent) + }}, [ + {_input: "text", name: "name", value: "@key"}, + {_input: "text", name: "repos", value: "@key"}, + {_input: "text", name: "template", value: "@key"}, + ], function(event, button, data, list, args) { + can.run(event, ["action", "start"].concat(args), function(msg) { + can.user.open(can.user.MergeURL(can, {pod: msg.Option("name")})) + can.user.toast(can, can.user.MergeURL(can, {pod: msg.Option("name")})) + }) + return true + }) + }, }) Volcanos("onexport", {help: "导出数据", list: [], width: function(can) { return can._target.offsetWidth }, height: function(can) { return can._target.offsetHeight }, storm: function(can, msg, word) { - var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") + var fields = (msg.Option("fields")||"ctx,cmd,type,name,text").split(",") can.core.Item(can.onengine.river, function(river, value) { can.core.Item(value.storm, function(storm, item) { if (word[1] != "" && word[1] != storm && word[1] != item.name) { return } diff --git a/pane/Search.css b/pane/Search.css index 94189b61..e5a7a1e2 100644 --- a/pane/Search.css +++ b/pane/Search.css @@ -1,8 +1,11 @@ fieldset.Search { - background:#041a258a; padding:10px; + background:#041a25bd; padding:10px; position:fixed; z-index:20; display:none; } +body.white fieldset.Search table { + color:white; +} fieldset.Search input.word { width:-webkit-fill-available; } diff --git a/pane/Search.js b/pane/Search.js index 465248c8..b4b3a7c4 100644 --- a/pane/Search.js +++ b/pane/Search.js @@ -20,33 +20,25 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, return {text: [key == "text" && typeof line.text == "function" && 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) { + sub.run = function(event, cmds, cb) { var msg = can.request(event, line) can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) { typeof cb == "function" && 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 (typeof line.text == "function") { - return can.onmotion.hide(can), line.text(event) - } - - can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { - return line[item] - }), data: {index: index}, onclick: function(event) { - can.page.Remove(can, event.target.parentNode) - can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1) - }}]), can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1) + if (can.onaction.select(event, can, index)) { return } }} - }, can.ui.content, [fields.indexOf("pod"), fields.indexOf("ctx"), fields.indexOf("cmd"), - fields.indexOf("type"), fields.indexOf("name"), fields.indexOf("text")]) - + }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(","), function(item) { + return fields.indexOf(item) + })) }, _word: function(can, msg, cmds, fields) { - msg = can.request({}, {fields: fields.join(","), word: cmds, index: msg.Option("index")}) + msg = can.request({}, {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() @@ -56,7 +48,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1] - var fields = (cmds[2]||msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") + var fields = (cmds[2]||msg.Option("fields")||"ctx,cmd,type,name,text").split(",") can.page.Appends(can, can.ui.display, [{th: fields}]), can.cb = function() { typeof cb == "function" && cb(can.onexport.select(can)), can.onmotion.hide(can) } @@ -84,12 +76,21 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] "完成": function(event, can) { typeof can.cb == "function" && can.cb() }, select: function(event, can, index) { - if (can.list && can.list[index]) { can.onmotion.hide(can) - if (typeof can.list[index].text == "function") { + if (can.list && can.list[index]) { + var text = can.list[index].text || "" + if (typeof text == "function") { can.list[index].text(event) - } else if (can.list[index].text.indexOf("http") == 0) { - can.user.open(can.list[index].text) + } else { var line = can.list[index] + var fields = can.page.Select(can, can.ui.display, "th", function(item) { return item.innerText }) + can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { + return line[item] + }), data: {index: index}, onclick: function(event) { + can.page.Remove(can, event.target.parentNode) + can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1) + }}]), can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1) + return false } + can.onmotion.hide(can) return true } return false diff --git a/plugin/input/date.js b/plugin/input/date.js index 8aea0411..869b0056 100644 --- a/plugin/input/date.js +++ b/plugin/input/date.js @@ -1,4 +1,5 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, item, target, figure) { + item.style && can.page.Modify(can, figure.fieldset, {style: item.style}) // 设置输入 function set(now) { diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 7ed60585..12630277 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -17,7 +17,7 @@ fieldset.editor { background:#0b2c54ab; } fieldset.editor>div.output { - background-color:#173d40ab; + background-color:#173d4047; } fieldset.editor>div.output>table>tr { background-color:#99CCFF00; @@ -88,6 +88,9 @@ fieldset.editor>div.output table.content td.text span.datatype { fieldset.editor>div.output table.content td.text span.string { color:magenta; } +body.white fieldset.editor>div.output table.content td.text span.string { + color:#a703a7; +} fieldset.editor>div.output div.search { background-color:#060627ab; color:white; diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 9c21e1b7..e4f3d378 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -262,7 +262,9 @@ Volcanos("onaction", {help: "控件交互", list: [], if (can.current) { var pos = can.current.offset()-can.current.line.offsetTop - can.current.scroll(0, -pos) + if (pos > 0 || -pos > can._output.offsetHeight) { + can.current.scroll(0, -pos) + } } }, searchLine: function(event, can, value) { value = value.trim() diff --git a/plugin/state.js b/plugin/state.js index 5dd8204d..a18643c7 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -20,7 +20,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, }) can.core.Timer(1000, function() { - var res = can.request({}, {_process: msg.Option("_progress")}) + var res = can.request({}, {_progress: msg.Option("_progress")}) return can.onappend._output(can, can.Conf(), res._event, can.Pack(cmds), cb, silent) }) return true