From 23983001b2f1c99c28728bd1c3f2c63605da499b Mon Sep 17 00:00:00 2001 From: harveyshao Date: Sat, 19 Feb 2022 19:51:14 +0800 Subject: [PATCH] opt code --- frame.js | 12 ++++- lib/base.js | 3 +- lib/misc.js | 9 +--- page/index.css | 18 ++++---- panel/action.js | 15 +++++++ panel/header.js | 1 + panel/river.js | 13 ------ plugin/local/code/inner.js | 81 +++++++++++++++++++++------------- plugin/local/code/vimer.js | 10 +---- plugin/state.js | 5 ++- plugin/story/pie.js | 5 ++- proto.js | 37 +++++++++++++--- publish/client/nodejs/proto.js | 34 ++++++++++++++ 13 files changed, 159 insertions(+), 84 deletions(-) create mode 100644 publish/client/nodejs/proto.js diff --git a/frame.js b/frame.js index 4a72ff36..4c502296 100644 --- a/frame.js +++ b/frame.js @@ -190,7 +190,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) }; can.core.Next(can.base.Obj(meta.inputs, can.core.Value(can, [chat.ONIMPORT, mdb.LIST])).concat(meta.type == chat.FLOAT? [{type: html.BUTTON, name: cli.CLOSE}]: []), add) }, - _action: function(can, list, action, meta) { meta = meta||can.onaction, action = action||can._action, can.onmotion.clear(can, action) + _action: function(can, list, action, meta) { + list = can.base.getValid(list, can.core.Item(meta)) + meta = meta||can.onaction, action = action||can._action, can.onmotion.clear(can, action) return can.core.List(can.base.Obj(list, can.core.Value(can, [chat.ONACTION, mdb.LIST])), function(item) { if (item == undefined) { return } can.onappend.input(can, item == ""? /*空白*/ {type: html.SPACE}: can.base.isString(item)? /*按键*/ {type: html.BUTTON, value: can.user.trans(can, item), onclick: function(event) { var cb = meta[item]||meta["_engine"]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input())) @@ -213,6 +215,13 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, can.base.isUndefined(can._daemon) && can.ondaemon._list[0] && (can._daemon = can.ondaemon._list.push(can)-1) if (can._daemon) { msg._daemon = can._daemon } } + if (meta.index.indexOf("can.") == 0) { + can.onengine._plugin(event, can, msg, can, can.misc.concat(can, [meta.index], cmds), function(msg) { + if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return } + !silent && can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)||meta.display||meta.feature.display) + }) + return + } return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1")||{}; can._msg = msg, sub._msg = msg if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return } @@ -341,6 +350,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, } function run(cmds) { var msg = can.sup.request(event, line, can.Option()) + return can.run(event, cmds, null, true) return can.run(event, cmds, function(msg) { can.run() }, true) } diff --git a/lib/base.js b/lib/base.js index 30e6f43a..1bd607ce 100644 --- a/lib/base.js +++ b/lib/base.js @@ -1,5 +1,4 @@ -Volcanos("base", {help: "数据类型", - Int: function(val, def) { return parseInt(val)||def||0 }, +Volcanos("base", {help: "数据类型", Int: function(val, def) { return parseInt(val)||def||0 }, Obj: function(val, def) { try { if (typeof val == lang.STRING) { if (val == "") { return def } val = JSON.parse(val) } diff --git a/lib/misc.js b/lib/misc.js index 13584b06..251af887 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -211,14 +211,7 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg if (from[0] == "_search") { return from } return to.concat(from) }, - proto: function(sub, sup) { - if (navigator.userAgent.indexOf("MSIE") > -1) { - for (var k in sup) { sub[k] = sub[k]||sup[k] } - } else { - sub.__proto__ = sup - } - return sub - }, + proto: function(sub, sup) { return sub.__proto__ = sup, sub }, Log: function() { var args = [this._time(), this.FileLine(2, 3)] diff --git a/page/index.css b/page/index.css index d0cc6237..3040eef6 100644 --- a/page/index.css +++ b/page/index.css @@ -127,16 +127,16 @@ fieldset>div.output td.project div.project div.item { padding:2px 10px; text-ali fieldset>div.output td.project div.project div.list { margin-left:10px; } fieldset>div.output td.profile { background-color:#71909c91; } fieldset>div.output td.profile div.profile { overflow:auto; } -fieldset>div.status { clear:both; } -fieldset>div.status>div.item { float:left; padding:4px; height:18px; } +fieldset div.status { clear:both; } +fieldset div.status>div.item { float:left; padding:4px; height:18px; } fieldset.panel>legend { display:none; } fieldset.plugin { margin:10px; padding:10px; background-color:#061c3c9e; box-shadow:2px 2px 10px 4px #626bd0; } fieldset.plugin>div.action { float:none; overflow:auto; } -fieldset.plugin>div.status { border-top:1px solid darkcyan; } +fieldset.plugin div.status { border-top:1px solid darkcyan; } fieldset.story>legend { display:block; padding:2px 20px; } -fieldset.story>div.status { border-top:1px solid darkcyan; } +fieldset.story div.status { border-top:1px solid darkcyan; } fieldset.float { position:absolute; z-index:10; background-color:#023531cf; padding:0px; margin:0px; } fieldset.float>legend { float:left; } fieldset.float>div.action { display:block; float:none; height:2.3rem; overflow:auto; } @@ -146,7 +146,7 @@ fieldset.output { margin:0; padding:0; } fieldset.output>legend { display:none; } fieldset.output>form.option { display:none; } 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.input { position:fixed; z-index:10; background-color:#0d4142a6; top:32px; } @@ -188,8 +188,8 @@ body>div.upload input[type=file] { width:240px; } textarea { tab-size:2; } input, select, option, table.content, div.item, div.code, code.story, div.story[data-type=spark] { font-size:1.1rem; font-family:monospace; } legend { font-size:1.2rem; } -/* fieldset>div.status>div.item>label { font-size:0.6rem; color:#bdb8b8e0; } */ -fieldset>div.status>div.item>label { font-size:0.6rem; } +/* fieldset div.status>div.item>label { font-size:0.6rem; color:#bdb8b8e0; } */ +fieldset div.status>div.item>label { font-size:0.6rem; } body>div.toast div.title { color:#cae850; } body>div.toast div.duration { color:gray; } @@ -220,8 +220,8 @@ body.white table td>input[type=button][value=启动] { background-color:#52ce78; body.white table td>input[type=button][name=create] { background-color:blue; } body.white table td>input[type=button][name=remove] { background-color:red; } -/* body.white fieldset>div.status>div.item>label { font-size:0.6rem; color:#cefbfbe0; } */ -body.white fieldset>div.status>div.item>label { font-size:0.6rem; } +/* body.white fieldset div.status>div.item>label { font-size:0.6rem; color:#cefbfbe0; } */ +body.white fieldset div.status>div.item>label { font-size:0.6rem; } body.white fieldset.Action { color:black; } body.white fieldset.Action>div.action { color:white; } body.white fieldset.Action>div.action div.item { height:21px; } diff --git a/panel/action.js b/panel/action.js index 10b0a514..3121fd57 100644 --- a/panel/action.js +++ b/panel/action.js @@ -84,6 +84,21 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, p Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, cb, target) { can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) can.Conf(html.MARGIN_X, 4*html.PLUGIN_MARGIN) + + can.onengine.plugin(can, "info", shy("信息", {}, ["text", "list", "back"], function(msg, cmds) { + msg.Echo(JSON.stringify(can)) + })) + can.onengine.plugin(can, "log", shy("日志", {}, ["text", "list", "back"], function(msg, cmds) { + console.log(cmds[0]) + })) + can.onengine.plugin(can, "pie", shy("比例图", {}, ["list", "back"], function(msg, cmds) { + msg.Option(ice.MSG_DISPLAY, "/plugin/story/pie.js") + msg.Push("value", 200) + msg.Push("value", 300) + msg.Push("value", 400) + })) + can.onengine.plugin(can, "can.code.inner.plugin", shy("插件", {}, [{type: "button", name: "list", action: "auto"}, "back"], function(msg, cmds) {})) + target.ontouchstart = function(event) { can.onengine.signal(can, "onaction_touch", can.request(event)) }, can.base.isFunc(cb) && cb() diff --git a/panel/header.js b/panel/header.js index 9bd26c83..1237c9aa 100644 --- a/panel/header.js +++ b/panel/header.js @@ -152,6 +152,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t onsearchfocus: function(can) { can.page.Select(can, can._output, "div.search input", function(target) { target.focus() }) }, + onwebpack: function(can, msg) { can.onaction["webpack"](msg._event, can) }, title: function(event, can) { var args = {}; can.core.List([chat.TITLE, chat.TOPIC, chat.LAYOUT], function(key) { diff --git a/panel/river.js b/panel/river.js index 55ca3930..69738177 100644 --- a/panel/river.js +++ b/panel/river.js @@ -86,19 +86,6 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, cb, t can.onmotion.hidden(can, can._target) } - can.onengine.plugin(can, "info", shy("信息", {}, ["text", "list", "back"], function(msg, cmds) { - msg.Echo(JSON.stringify(can)) - })) - can.onengine.plugin(can, "log", shy("日志", {}, ["text", "list", "back"], function(msg, cmds) { - console.log(cmds[0]) - msg.Option(ice.MSG_DISPLAY, "/plugin/story/pie.js") - })) - can.onengine.plugin(can, "pie", shy("比例图", {}, ["list", "back"], function(msg, cmds) { - msg.Option(ice.MSG_DISPLAY, "/plugin/story/pie.js") - msg.Push("value", 200) - msg.Push("value", 300) - msg.Push("value", 400) - })) can.base.isFunc(cb) && cb() }, _trans: {"river": "菜单"}, diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 64f1e979..3ae1edef 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -1,8 +1,6 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target) { - can.onengine.plugin(can, "can.code.inner.plugin", shy("插件", {}, [{type: "button", name: "list", action: "auto"}, "back"], function(msg, cmds) { - msg.Echo("can.code.inner.plugin") - msg.result = msg.result.concat(cmds||[]) - })) + if (!can.user.isMobile) { can.page.style(can, can._action, html.HEIGHT, "31", html.DISPLAY, "block") } + can.onengine.plugin(can, "can.code.inner.plugin", shy("插件", {}, [{type: "button", name: "list", action: "auto"}, "back"], function(msg, cmds) {})) 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]) @@ -16,8 +14,10 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target can.base.isFunc(cb) && cb(msg) if (can.page.ClassList.has(can, can._fields, chat.FLOAT) || can.page.ClassList.has(can, can._fields, chat.PLUGIN)) { - can.page.style(can, can.ui.project, html.MIN_HEIGHT, can.ConfHeight()) - can.page.style(can, can.ui.content, html.MIN_HEIGHT, can.ConfHeight()) + if (!can.user.mod.isCmd) { + can.page.style(can, can.ui.project, html.MIN_HEIGHT, can.ConfHeight()) + can.page.style(can, can.ui.content, html.MIN_HEIGHT, can.ConfHeight()) + } } can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE)) @@ -32,42 +32,50 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target }, _simple: function(can, target) { can.Conf(html.HEIGHT, ""), can.ui.project._toggle() - can.page.ClassList.add(can, can._fields, "output") + can.page.ClassList.add(can, can._fields, chat.OUTPUT) }, _project: function(can, target) { target._toggle = function(event) { can.onmotion.toggle(can, target), can.onimport.layout(can) } }, _profile: function(can, target) { var ui = can.page.Append(can, target, [{view: html.ACTION}, {view: html.OUTPUT}]); can.ui.profile_output = ui.output - var action = can.onappend._action(can, [cli.SHOW, cli.CLEAR, mdb.PLUGIN, cli.CLOSE, "size"], ui.action, kit.Dict( - cli.SHOW, function(event) { can.onaction["展示"](event, can) }, - cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) }, + var action = can.onappend._action(can, [], ui.action, kit.Dict( cli.CLOSE, function(event) { can.onmotion.hidden(can, target), can.onimport.layout(can) }, - "size", function(event) { - can.user.input(event, can, ["size"], function(event, button, data) { - can.profile_size[can.onexport.keys(can)] = can.ConfWidth()*parseInt(data.size)/100 - can.onaction["展示"](event, can) - }) - }, + cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) }, + cli.SHOW, function(event) { can.onaction["展示"](event, can) }, + "加载", function(event) { can.onaction["加载"](event, can), can.user.ToastSuccess(can) }, mdb.PLUGIN, function(event) { can.user.input(event, can, [ctx.INDEX], function(event, button, data) { can.onimport.plugin(can, data, ui.output) }) - } + }, + html.WIDTH, function(event) { + can.user.input(event, can, [{name: html.WIDTH, value: 50}], function(event, button, data) { + can.profile_size[can.onexport.keys(can)] = can.ConfWidth()*parseInt(data.width)/100 + can.onaction["展示"](event, can) + }) + }, )) target._toggle = function(event, show) { action[show? cli.SHOW: cli.CLOSE](event) } }, _display: function(can, target) { - var ui = can.page.Append(can, target, [{view: html.ACTION}, {view: html.OUTPUT}, {}]); can.ui.display_output = ui.output - var action = can.onappend._action(can, [cli.EXEC, cli.CLEAR, mdb.PLUGIN, cli.CLOSE], ui.action, kit.Dict( - cli.EXEC, function(event) { can.onaction["执行"](event, can) }, - cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) }, + var ui = can.page.Append(can, target, [{view: html.ACTION}, {view: html.OUTPUT}, {view: html.STATUS}]) + can.ui.display_output = ui.output, can.ui.display_status = ui.status + var action = can.onappend._action(can, [], ui.action, kit.Dict( cli.CLOSE, function(event) { can.onmotion.hidden(can, target), can.onimport.layout(can) }, + cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) }, + cli.EXEC, function(event) { can.onaction["执行"](event, can) }, mdb.PLUGIN, function(event) { can.user.input(event, can, [ctx.INDEX], function(event, button, data) { can.onimport.plugin(can, data, ui.output) }) - } + }, + html.HEIGHT, function(event) { + can.user.input(event, can, [{name: html.HEIGHT, value: 50}], function(event, button, data) { + can.profile_size[can.onexport.keys(can)] = can.ConfHeight()*parseInt(data.height)/100 + can.onaction["执行"](event, can) + }) + }, )) target._toggle = function(event, show) { action[show? cli.EXEC: cli.CLOSE](event) } }, @@ -125,8 +133,9 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target can.onmotion.hidden(can, can.ui.profile, true), can.onimport.layout(can) }, display: function(can, msg) { + var height = can.profile_size[can.onexport.keys(can)]||{sh: can.ConfHeight()/2}[can.parse]||can.ConfHeight()/4 msg && can.onimport.process(can, msg, can.ui.display_output, can.ConfWidth()) - can.page.style(can, can.ui.display_output, html.MAX_HEIGHT, can.ConfHeight()/4) + can.page.style(can, can.ui.display_output, html.MAX_HEIGHT, height) can.onmotion.hidden(can, can.ui.display, true), can.onimport.layout(can) }, toolkit: function(can, meta, cb) { @@ -156,7 +165,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target can.onmotion.clear(can, target) if (msg.Option("_process") == "_field") { msg.Table(function(meta) { meta.display = msg.Option("_display") - delete(Volcanos.meta.cache[meta.display]) + // delete(Volcanos.meta.cache[meta.display]) can.onimport.plugin(can, meta, target, function(sub) { can.onmotion.focus(can, can.page.Select(can, sub._option, html.OPTION_ARGS)[0]) width && sub.ConfWidth(width) @@ -184,7 +193,8 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target can.page.styleHeight(can, can.ui.project, can.ui.content.offsetHeight) } if (can.user.mod.isCmd) { - can.page.styleHeight(can, can.ui.content, (can.ui.project.offsetHeight||height)-can.ui.display.offsetHeight) + can.page.styleHeight(can, can.ui.content, (can.ui.project.offsetHeight||height) + -can.ui.display.offsetHeight-(can.ui.display.style.display != html.NONE && can.ui.display_status.innerText? html.ACTION_HEIGHT: 0)) } if (can.page.ClassList.has(can, can._fields, "full")) { @@ -242,11 +252,15 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], }) return } - can.onmotion.clear(can, can.ui.content) + can.onmotion.clear(can, can.ui.content) function init(p) { can.max = 0, can.core.List(can.ls = msg.Result().split(ice.NL), function(item) { can.onaction.appendLine(can, item) - }), can.onaction.selectLine(null, can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb() } + }), can.onaction.selectLine(null, can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb() + msg.Option(nfs.FILE).indexOf("website/") == 0 && can.onaction["展示"]({}, can) + p && p.render && can.onaction["展示"]({}, can) + p && p.engine && can.onaction["执行"]({}, can) + } var p = can.onsyntax[can.parse]; !p? can.run({}, [ctx.ACTION, mdb.PLUGIN, can.parse, msg.Option(nfs.FILE), msg.Option(nfs.PATH)], function(msg) { init(p = can.onsyntax[can.parse] = can.base.Obj(msg.Result())) @@ -317,9 +331,12 @@ Volcanos("onkeymap", {help: "导入数据", _init: function(can, msg, cb, target }, _engine: {}, }) Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加", "插件", "扩展"], - "刷新": function(event, can) { - can.onimport.tabview(can, "src/", "main.go", "", function() {}, skip) + _trans: {width: "宽度", height: "高度", website: "网页"}, + "加载": function(event, can) { + var file = "/require/shylinux.com/x/contexts/"+can.Option(nfs.PATH)+can.Option(nfs.FILE) + delete(Volcanos.meta.cache[file]), eval(`\n_can_name = "`+file+`"\n`+can.onexport.content(can)+`\n_can_name = ""\nconsole.log("once")`) }, + "刷新": function(event, can) { can.onimport.tabview(can, "src/", "main.go", "", function() {}, skip) }, "搜索": function(event, can) { can.user.input(event, can, [mdb.NAME, [ctx.ACTION, nfs.TAGS, nfs.GREP, cli.MAKE]], function(event, button, data) { can.ui.search.Update({}, [ctx.ACTION, data.action, data.name]) @@ -352,13 +369,15 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加", "工具": function(event, can) { can.onmotion.toggle(can, can.ui.toolkit.fieldset) }, "执行": function(event, can) { can.onimport.display(can), can.request(event, {_toast: "执行中..."}) can.run(event, [ctx.ACTION, mdb.ENGINE, can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { - can.onimport.display(can, msg) + can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.ui.display_status) + can.onimport.display(can, msg), can.onimport.layout(can) }, true) }, "展示": function(event, can) { can.onimport.profile(can), can.request(event, {_toast: "渲染中..."}) if (can.Option(nfs.FILE).indexOf("website/") == 0) { can.profile_size[can.onexport.keys(can)] = can.profile_size[can.onexport.keys(can)] || can.ConfWidth()*parseInt(70)/100 } + can.parse == "js" && can.onaction["加载"](event, can) can.run(event, [ctx.ACTION, mdb.RENDER, can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.onimport.profile(can, msg) }, true) @@ -490,7 +509,7 @@ Volcanos("onexport", {help: "导出数据", list: ["文件数", "解析器", " return (parseInt(index))+ice.PS+parseInt(total)+" = "+parseInt((index)*100/total)+"%" }, content: function(can) { - return can.page.Select(can, can.ui.content, "td.text", function(item) { return item.innerText }).join(ice.NL)+ice.NL + return can.page.Select(can, can.ui.content, "td.text", function(item) { return item.innerText }).join(ice.NL) }, }) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 123a8863..b2b5219f 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -3,6 +3,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.page.ClassList.add(can, can._fields, "inner") can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._plugin({}, can), can.base.isFunc(cb) && cb(msg) }, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init) + if (name == chat.ONACTION) { can._trans = can.base.Copy(can._trans||{}, sub._trans) } if (name == chat.ONKEYMAP) { can.base.Copy(can.onkeymap._mode, sub._mode) can.core.Item(can.onkeymap._mode.normal, function(k, v) { @@ -126,7 +127,6 @@ Volcanos("onkeymap", {help: "键盘交互", list: [], }, _engine: {}, }) Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code.COMPILE, chat.WEBSITE], - _trans: {website: "网页"}, save: function(event, can) { var msg = can.request(event, {content: can.onexport.content(can)}) can.run(event, [ctx.ACTION, nfs.SAVE, can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.user.toastSuccess(can) @@ -154,14 +154,6 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code. can.onimport.tabview(can, "src/", "website/"+list[0], "", function() {}, true) }) }, - "加载": function(event, can) { - var file = "/share/local/"+can.Option(nfs.PATH)+can.Option(nfs.FILE) - delete(Volcanos.meta.cache[file]) - // var script = `\n_can_name = "`+file+`"\n`+ - // can.onexport.content(can)+ - // `\n_can_name = ""\nconsole.log("once")` - // eval(script) - }, _selectLine: function(event, can) { can.page.Select(can, can.current.line, "td.text", function(td) { can.current.line.appendChild(can.ui.current) diff --git a/plugin/state.js b/plugin/state.js index 41c8ae74..1f024e42 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -31,7 +31,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, msg.Table(function(item) { can.onappend._plugin(can, item, {arg: can.base.Obj(item[ice.ARG], [])}, function(sub, meta) { var opt = can.base.Obj(item[ice.OPT], []) sub.Conf(html.HEIGHT, can.Conf(html.HEIGHT)) - sub.Conf(html.WIDTH, can.Conf(html.WIDTH)) + sub.Conf(html.WIDTH, can.Conf(html.WIDTH)-4*html.PLUGIN_MARGIN) sub.run = function(event, cmds, cb, silent) { var res = can.request(event, can.Option()) for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) } @@ -73,7 +73,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, }) Volcanos("onaction", {help: "交互操作", list: [ "共享工具", "切换全屏", "打开链接", "生成链接", "生成图片", "生成脚本", "刷新数据", "刷新页面", [ - "其它", "清空参数", "复制数据", "下载数据", "清空数据", "删除工具", "摄像头", + "其它", "清空参数", "复制数据", "下载数据", "清空数据", "删除工具", "打包页面", "摄像头", ], ], _init: function(can, msg, list, cb, target) {}, _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input([], true))) }, @@ -124,6 +124,7 @@ Volcanos("onaction", {help: "交互操作", list: [ can.user.copy(event, can, list[0]) }, "刷新数据": function(event, can) { can.Update({}, can.Input([], true)) }, + "打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, "刷新页面": function(event, can) { var sub = can.core.Value(can._outputs, "-1"), msg = sub._msg can.core.CallFunc([sub, chat.ONIMPORT, "_init"], {can: sub, msg: msg, list: msg.result||msg.append||[], cb: function(msg) { diff --git a/plugin/story/pie.js b/plugin/story/pie.js index b756be6b..cd6577a2 100644 --- a/plugin/story/pie.js +++ b/plugin/story/pie.js @@ -1,13 +1,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() { + var height = msg.Option(html.HEIGHT)||can.ConfHeight() can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg) can.onmotion.clear(can), can.onimport._show(can, msg) - var r = can.ConfHeight()/2-20, margin = 20; can.svg.Val(html.WIDTH, 2*(r+margin)), can.svg.Val(html.HEIGHT, 2*(r+margin)) + var r = height/2-20, margin = 20; can.svg.Val(html.WIDTH, 2*(r+margin)), can.svg.Val(html.HEIGHT, 2*(r+margin)) can._args = can.base.Copy({field: "value"}, can.base.ParseURL(can._display)) can.onimport._draw(can, msg, can._args.field, r+margin, r+margin, r, margin, 0) can.onmotion.clear(can, can.ui.project), can.onappend.table(can, msg, null, can.ui.project) can.onmotion.hidden(can, can.ui.project, true) - var rest = can.ConfWidth()-can.ConfHeight() + var rest = can.ConfWidth()-height can.page.Modify(can, can.ui.project, {style: {"max-width": rest}}) can.page.Select(can, can.ui.project, html.TR, function(tr, index) { can.page.Modify(can, tr, {onmouseenter: function(event) { diff --git a/proto.js b/proto.js index b88ff00d..b5ac5f02 100644 --- a/proto.js +++ b/proto.js @@ -264,12 +264,13 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: // 预加载 libs = []; for (var i = 0; i < Config.panels.length; i++) { var panel = Config.panels[i] panel && (libs = libs.concat(panel.list = panel.list||["/panel/"+panel.name+".css", "/panel/"+panel.name+".js"])) - }; libs = libs.concat(Config.plugin, Config.main.list) + }; libs = libs.concat(Config.plugin, Config.main.list||[]) // 根模块 _can_name = "", name = Config.name||"chat", cb = can||function(can) { can.onengine._init(can, can.Conf(Config), Config.panels, Config._init, can._target) - }, can = {_follow: name, _target: Config.target||document.body}, can._root = can + } + can = {_follow: name, _target: Config.target||meta.target}, can._root = can for (var k in Config) { can[k] = Config[k] } } @@ -355,11 +356,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: }, _conf: {}, } - can = can||{}; if (navigator.userAgent.indexOf("MSIE") > -1) { - for (var k in proto) { can[k] = proto[k] } - } else { - can.__proto__ = proto - } + can = can||{}, can.__proto__ = proto if (_can_name) { // 加入缓存 meta.cache[_can_name] = meta.cache[_can_name]||[], meta.cache[_can_name].push(can) @@ -402,3 +399,29 @@ function can(tool) { ]}) } +try { if (global) { + global.kit = kit, global.ice = ice + global.ctx = ctx, global.cli = cli, global.web = web, global.aaa = aaa + global.mdb = mdb, global.ssh = ssh, global.nfs = nfs, global.tcp = tcp + global.code = code, global.wiki = wiki, global.chat = chat, global.team = team, global.mall = mall + global.svg = svg, global.html = html, global.lang = lang + global.shy = shy, global.Volcanos = Volcanos + + Volcanos.meta._load = function(url, cb) { _can_name = url + switch (url.split("?")[0].split(ice.PT).pop().toLowerCase()) { + case nfs.JS: require(url), cb(Volcanos.meta.cache[_can_name]); break + } + } + + Volcanos.meta._load(global.plugin, function(cache) { + Volcanos.meta.volcano = "./frame.js", Volcanos({libs: [ + "./lib/base.js", "./lib/core.js", "./lib/misc.js", "./lib/page.js", // "./lib/user.js", + ], panels: [], plugin: []}, function(can) { can.core.List(cache, function(item) { can[item._name] = item }) + Volcanos.meta._load("./publish/client/nodejs/proto.js", function(cache) { + can.core.List(cache, function(item) { can.base.Copy(can[item._name]||{}, item) }) + can.onimport._init(can, can.request(), function(msg) { console.log(ice.NL) }, null) + }) + }) + }) +} } catch (e) { console.log(e) } +try { Volcanos.meta.target = document.body } catch (e) { } diff --git a/publish/client/nodejs/proto.js b/publish/client/nodejs/proto.js new file mode 100644 index 00000000..92d591b7 --- /dev/null +++ b/publish/client/nodejs/proto.js @@ -0,0 +1,34 @@ +Volcanos("onappend", {help: "渲染引擎", list: [], + table: function(can, msg) { + var max = {}; msg.Table(function(value, index, array) { + for (var k in value) { if (value[k].length > (max[k]||0)) { + max[k] = value[k].length + } } + }) + + var list = []; msg.Table(function(value, index, array) { var line = [] + if (index == 0) { + for (var i = 0; i < msg.append.length; i++) { line.push(msg.append[i]) + for (var j = 0; j <= max[msg.append[i]]-msg.append[i].length; j++) { + line.push(ice.SP) + } + line.push(ice.SP) + } + list.push(line.join("")) + } + line = []; for (var i = 0; i < msg.append.length; i++) { var k = msg.append[i] + line.push(value[k]) + for (var j = 0; j <= max[k]-value[k]; j++) { + line.push(ice.SP) + } + line.push(ice.SP) + } + list.push(line.join("")) + }) + console.log(list.join(ice.NL)) + }, + board: function(can, msg) { + console.log(msg.Result()) + }, +}) +