diff --git a/lib/user.js b/lib/user.js index 7f14d693..d2f2ad3d 100644 --- a/lib/user.js +++ b/lib/user.js @@ -176,7 +176,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { }) }, "授权": function() { - can.misc.WSS(can, {type: html.CHROME, cmd: "sso", "user.web": location.href}, function(event, msg, cmd, arg) { if (!msg) { return } + can.misc.WSS(can, {type: html.CHROME, cmd: "sso", "back": location.href}, function(event, msg, cmd, arg) { if (!msg) { return } if (cmd == "pwd") { return location.href = arg[1] } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 105609c1..7a236ae5 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -1,21 +1,21 @@ -Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { if (msg.Result() == "" && msg.Length() == 0) { can.onmotion.hidden(can, can._output); return } +Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { + if (msg.Result() == "" && msg.Length() == 0) { can.onmotion.hidden(can, can._output); return } + can.onmotion.toggle(can, can._output, true) if (msg.Option(nfs.FILE)) { msg.Option(nfs.PATH) && can.Option(nfs.PATH, msg.Option(nfs.PATH)) can.Option(nfs.FILE, msg.Option(nfs.FILE)) msg.Option(nfs.LINE) && can.Option(nfs.LINE, msg.Option(nfs.LINE)) } - if (can.Option(nfs.PATH) == "man") { - // msg.result = [msg.Option(mdb.TEXT)] - } var paths = can.core.Split(can.Option(nfs.PATH), ice.FS); can.Option(nfs.PATH, paths[0]) var files = can.core.Split(can.Option(nfs.FILE), ice.FS); can.Option(nfs.FILE, files[0]) - can.tabview = can.tabview||{}, can.history = can.history||[], can.toolkit = {}, can.extentions = {} - can.profile_size = {}, can.display_size = {} can.core.List(paths.concat(msg.modules||[], can.sup.paths||[]), function(p) { if (paths.indexOf(p) == -1) { paths.push(p) } }), can.sup.paths = paths + can.tabview = can.tabview||{}, can.history = can.history||[], can.toolkit = {}, can.extentions = {} + can.profile_size = {}, can.display_size = {} + can.page.ClassList.add(can, can._fields, "inner") can.onmotion.clear(can), can.onlayout.profile(can) can.page.styleWidth(can, can.ui.project, 240) @@ -51,8 +51,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar } }) }, - _input: function(can) { - }, + _input: function(can) {}, _project: function(can, target) { target._toggle = function(event, show) { can.onimport.layout(can) } }, @@ -392,7 +391,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", list: ["keyword", "prefix", "line case code.FUNCTION: return wrap(type, text) default: var t = can.core.Item(p.regexp, function(reg, type) { - if ((new RegExp(reg)).test(text)) { return type } + var m = text.match(new RegExp(reg)) + if (m && m.length > 0 && m[0] == text) { return type} }); if (t && t.length > 0) { return wrap(t[0], text) } return wrap(type, text) } @@ -654,6 +654,47 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", "2": code.CONSTANT, }, }, + sh: { + // render: {}, + split: { + operator: "=", + }, + prefix: { + "#": code.COMMENT, + }, + suffix: { + " {": code.COMMENT, + }, + regexp: { + "[A-Z0-9_]+": code.CONSTANT, + }, + keyword: { + "local": code.KEYWORD, + "export": code.KEYWORD, + "require": code.KEYWORD, + "source": code.KEYWORD, + "return": code.KEYWORD, + "exit": code.KEYWORD, + ".": code.KEYWORD, + + "if": code.KEYWORD, + "then": code.KEYWORD, + "elif": code.KEYWORD, + "else": code.KEYWORD, + "fi": code.KEYWORD, + + "case": code.KEYWORD, + "in": code.KEYWORD, + "esac": code.KEYWORD, + + "eval": code.FUNCTION, + "test": code.FUNCTION, + "echo": code.FUNCTION, + "mkdir": code.FUNCTION, + "cat": code.FUNCTION, + "rm": code.FUNCTION, + }, + }, configure: {link: "sh"}, go: { render: {}, keyword: { @@ -703,30 +744,6 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", "complex": code.FUNCTION, "real": code.FUNCTION, "imag": code.FUNCTION, }, }, - zml: { - prefix: { - "# ": code.COMMENT, - }, - keyword: { - "return": code.KEYWORD, - - "head": code.KEYWORD, - "left": code.KEYWORD, - "main": code.KEYWORD, - "foot": code.KEYWORD, - "tabs": code.KEYWORD, - - "index": code.FUNCTION, - "action": code.FUNCTION, - "args": code.FUNCTION, - "type": code.FUNCTION, - "style": code.FUNCTION, - "width": code.FUNCTION, - - "auto": "constant", - "username": "constant", - }, - }, js: { split: { operator: "{[(.,:;!|<*>)]}", @@ -858,4 +875,28 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", "fixed": "constant", }, }, + zml: { + prefix: { + "# ": code.COMMENT, + }, + keyword: { + "return": code.KEYWORD, + + "head": code.KEYWORD, + "left": code.KEYWORD, + "main": code.KEYWORD, + "foot": code.KEYWORD, + "tabs": code.KEYWORD, + + "index": code.FUNCTION, + "action": code.FUNCTION, + "args": code.FUNCTION, + "type": code.FUNCTION, + "style": code.FUNCTION, + "width": code.FUNCTION, + + "auto": "constant", + "username": "constant", + }, + }, }) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index a99f5ccd..bbf3b56b 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -79,7 +79,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar var color = item.status == "start"? "": "gray" can.page.Append(can, target, [{view: html.ITEM, list: [{text: [item.name, html.DIV], style: {color: color}, onmouseenter: carte}], onclick: function() { - can.onimport.tabview(can, can.Option(nfs.PATH), item.name, web.DREAM) // 显示空间 + can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys(can.misc.Search(can, "pod"), item.name), web.DREAM) // 显示空间 }}]) }) }) @@ -277,7 +277,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [], }, dream: function(event, can, button) { can.onaction._runs(can.request(event, {name: can.base.trimSuffix(can.Option(nfs.FILE).split(ice.PS).pop(), ice.PT+can.base.Ext(can.Option(nfs.FILE)))}), can, button, function(msg) { can.ui.dreams.refresh() - can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(mdb.NAME), web.DREAM) // 显示空间 + can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys(can.misc.Search(can, "pod"), msg.Option(mdb.NAME)), web.DREAM) // 显示空间 can.user.toastSuccess(can) }) }, diff --git a/plugin/local/code/xterm.js b/plugin/local/code/xterm.js index bb98e795..fac545d0 100644 --- a/plugin/local/code/xterm.js +++ b/plugin/local/code/xterm.js @@ -2,6 +2,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.o can.requireModules(["xterm/css/xterm.css", "xterm", "xterm-addon-fit", "xterm-addon-web-links"], function() { var item = {hash: can.Option(mdb.HASH)}; msg.Table(function(value) { can.core.Value(item, value.key, value.value) }) can.onimport.layout(can), can.onappend._status(can), can.onimport._connect(can, item) + can.isCmdMode() && can.misc.Search(can, "hash") && can.onaction.full({}, can) }) }, _connect: function(can, item) { item.extra = can.base.Obj(item.extra, {}) @@ -19,10 +20,11 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.o term.open(can._output), term.focus() }, _resize: function(can, item, size) { - can.runAction(can.request({}, size, item), "resize", function() { can.onexport.term(can) }) + can.runAction(can.request({}, size, item), "resize", [], function() { can.onexport.term(can) }) }, _input: function(can, item, val) { can.runAction(can.request({}, item, {"log.disable": ice.TRUE}), "input", [btoa(val)], function() {}) + // can.runAction(can.request({}, item, {}), "input", [btoa(val)], function() {}) }, layout: function(can) { can.page.style(can, can._output, html.HEIGHT, can.ConfHeight()+(can.ConfHeight() == window.innerHeight? 10: 0), html.WIDTH, can.ConfWidth()+20, html.MAX_WIDTH, "") diff --git a/plugin/state.js b/plugin/state.js index 0b9dbc71..07822ac4 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -1,7 +1,6 @@ -Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, conf, cb, target) {}, - _process: function(can, msg) { - msg.OptionStatus() && can.onmotion.clear(can, can._status) && can.onappend._status(can, can.base.Obj(msg.OptionStatus())) - return can.core.CallFunc([can.onimport, msg.OptionProcess()], {can: can, sub: can, msg: msg}) +Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) { + msg.OptionStatus() && can.onmotion.clear(can, can._status) && can.onappend._status(can, msg.OptionStatus()) + return can.core.CallFunc([can.onimport, msg.OptionProcess()], {can: can, msg: msg}) }, _location: function(can, msg, _arg) { can.user.jumps(_arg); return true }, @@ -23,64 +22,57 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, conf, cb, ta _display: function(can, msg) { return can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)), true }, + _inner: function(can, msg) { + can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can) + can.page.style(can, can._output, html.DISPLAY, html.BLOCK) + return true + }, _field: function(can, msg) { var opts = {} - can.page.Select(can, can._option, "input.args", function(target) { + can.page.Select(can, can._option, html.INPUT_ARGS, function(target) { var value = msg.Option(target.name); target.name && value && (opts[target.name] = value) }) - msg.Table(function(item) { item.type = chat.STORY, can.onappend._plugin(can, item, {type: chat.STORY, index: item.index, args: can.base.Obj(item[ice.ARG], [])}, function(sub, meta) { - sub.Conf(can.base.Obj(item.conf)) - if (sub.Conf("mode") == "simple") { (function() { - var msg = can.request(); msg.Echo(sub.Conf("result")), sub.ConfHeight(can.ConfHeight()/2) - can.onappend._output(sub, msg, msg.Option(ice.MSG_DISPLAY)||sub.Conf("feature.display")) + msg.Table(function(item) { can.onappend._plugin(can, item, {type: chat.STORY, index: item.index, args: can.base.Obj(item[ice.ARG], [])}, function(sub, meta) { + sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { (function() { sub.ConfHeight(can.ConfHeight()/2) + var msg = can.request(); msg.Echo(sub.Conf(ice.MSG_RESULT)) + can.onappend._output(sub, msg, sub.Conf("feature.display")) })(); return } var opt = can.base.Obj(item[ice.OPT], []) - sub.ConfHeight(can.ConfHeight()) - sub.ConfWidth(can.ConfWidth()-4*html.PLUGIN_MARGIN) - sub.run = function(event, cmds, cb, silent) { - var res = can.request(event, can.Option(), {pid: msg.Option("pid")}, opts) + sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()-4*html.PLUGIN_MARGIN) + sub.run = function(event, cmds, cb) { + var res = can.request(event, can.Option(), opts, {pid: msg.Option("pid")}) for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) } can.run(event, (msg[ice.MSG_PREFIX]||[]).concat(cmds), cb, true) } }) }) return true }, - _inner: function(can, msg) { - can.onappend.table(can, msg) - can.onappend.board(can, msg) - can.onmotion.story.auto(can) - can.page.style(can, can._output, html.DISPLAY, html.BLOCK) - return true - }, _float: function(can, msg) { var _arg = msg._arg - msg.Table(function(item) { can.onappend._plugin(can, item, {type: "float", index: item.index, args: _arg.slice(1), mode: "float"}, function(sub, meta) { + msg.Table(function(item) { can.onappend._plugin(can, item, {type: chat.FLOAT, index: item.index, args: _arg.slice(1), mode: chat.FLOAT}, function(sub, meta) { sub.run = function(event, cmds, cb) { can.runAction(can.request(event, {path: msg.Option(nfs.PATH), text: msg.Option(mdb.TEXT)}), [ice.RUN, msg._arg[0]], cmds, cb) } - sub.Mode("float"), can.getActionSize(function(left, top, width, height) { left = left||0 + sub.Mode(chat.FLOAT), 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 } sub.ConfHeight(height-top-2*html.ACTION_HEIGHT-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0)), sub.ConfWidth(width) - can.page.style(can, sub._output, "max-height", window.innerHeight - top, "overflow", "auto") + can.page.style(can, sub._output, html.MAX_HEIGHT, window.innerHeight - top, html.OVERFLOW, ice.AUTO) can.onmotion.move(can, sub._target, {position: html.FIXED, left: left, top: top}) }) }, document.body) }) + return true }, - _hold: function(can, msg, _arg) { _arg && can.user.toast(can, _arg); return true }, + _hold: function(can, msg, _arg) { return _arg && can.user.toast(can, _arg), true }, _back: function(can) { can._history.pop() - for (var his = can._history.pop(); his; his = can._history.pop()) { if (his[0] == ctx.ACTION) { continue } - var index = 0 + for (var index = 0, his = can._history.pop(); his; his = can._history.pop()) { if (his[0] == ctx.ACTION) { continue } can.page.SelectArgs(can, can._option, "", function(item) { item.value = his[index++]||"" }) can.page.SelectArgs(can, can._action, "", function(item) { item.value = his[index++]||"" }) can.Update(); break - } - !his && can.Update() + } !his && can.Update() return true }, _rich: function(can, msg, _arg) { if (can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TBODY], function(table) { var head = can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TH], function(th) { return th.innerText }) - can.page.Append(can, table, msg.Table(function(value) { - return {row: can.core.List(head, function(key) { return value[key] })} - })) + can.page.Append(can, table, msg.Table(function(value) { return {row: can.core.List(head, function(key) { return value[key] })} })) return true }).length == 0) { can.onappend.table(can, msg) } return true @@ -112,7 +104,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [ _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input([], true))) }, "刷新数据": function(event, can) { can.Update({}, can.Input([], true)) }, - "切换全屏": function(event, can) { var sub = can._outputs[can._outputs.length-1] + "切换全屏": function(event, can) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT) if (can.page.ClassList.neg(can, can._target, "full")) { var height = window.innerHeight-(can._status.innerText? 2: 1)*html.ACTION_HEIGHT; can.user.isMobile && (height -= 2*html.ACTION_HEIGHT) can._mode_bak = can.Mode(), can._height_bak = sub.ConfHeight(), can._width_bak = sub.ConfWidth() @@ -149,7 +141,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [ }, "生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) }, - "刷新页面": function(event, can) { var sub = can.core.Value(can._outputs, "-1") + "刷新页面": function(event, can) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT) can.core.CallFunc([sub, chat.ONIMPORT, "_init"], {can: sub, msg: sub._msg, cb: function(msg) {}, target: can._output}) }, "保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) }, @@ -162,18 +154,17 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [ }) }, "清空数据": function(event, can) { can.onmotion.clear(can, can._output) }, - "删除工具": function(event, can) { can.page.Remove(can, can._target) }, - "删除配置": function(event, can) { can.runAction(event, "config", ["reset"]) }, - "查看配置": function(event, can) { can.runAction(event, "config", ["select"], function(msg) { - can.onappend.board(can, msg) - }) }, + "查看文档": function(event, can) { can.runAction(event, "config", ["help"]) }, "查看脚本": function(event, can) { can.runAction(event, "config", ["script"]) }, "查看源码": function(event, can) { can.runAction(event, "config", ["source"]) }, - "帮助文档": function(event, can) { can.runAction(event, "help") }, + "查看配置": function(event, can) { can.runAction(event, "config", ["select"], function(msg) { + can.onappend.board(can, msg) + }) }, + "删除配置": function(event, can) { can.runAction(event, "config", ["reset"]) }, + "删除工具": function(event, can) { can.page.Remove(can, can._target) }, "打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, - "摄像头": function(event, can) { var constraints = {audio: false, video: {width: 200, height: 200}} var ui = can.page.Append(can, can._output, [{view: ctx.ACTION}, {view: "capture", list: [{type: "video", _init: function(item) { diff --git a/plugin/table.js b/plugin/table.js index 14a23b82..4c88f219 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -1,5 +1,5 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { - can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_WIDTH, "") + can.page.style(can, can._output, html.HEIGHT, "") can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can._action) var cbs = can.onimport[can.Conf(ctx.STYLE)]; if (can.base.isFunc(cbs)) { can.core.CallFunc(cbs, {can: can, msg: msg, target: target, list: msg.Table()}) diff --git a/proto.js b/proto.js index 50c1d828..e3d7ef2c 100644 --- a/proto.js +++ b/proto.js @@ -242,6 +242,7 @@ var html = { BACKGROUND: "background", SELECT: "select", HIDDEN: "hidden", DISPLAY: "display", BLOCK: "block", NONE: "none", FIXED: "fixed", OPACITY: "opacity", + OVERFLOW: "overflow", STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", FONT_FAMILY: "font-family", MONOSPACE: "monospace", SCROLL: "scroll", HEIGHT: "height", WIDTH: "width", LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom", SPEED: "speed", PADDING: "padding", MARGIN: "margin",