1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt vimer.js

This commit is contained in:
harveyshao 2022-01-21 17:48:17 +08:00
parent 711534702a
commit c83313029e
7 changed files with 102 additions and 23 deletions

View File

@ -60,7 +60,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
var names = msg.Option("_names")||panel._names||((can.Conf("iceberg")||"/chat/")+panel._name)
can.misc.Run(event, can, {names: names, daemon: can.core.Keys(can.ondaemon._list[0], msg._daemon)}, cmds, function(msg) {
Volcanos.meta.pack[key] = msg, delete(msg._handle), delete(msg._toast)
if (msg.result && msg.result[0] == ice.ErrWarn) { can.user.toast(can, msg.Result(), "", 10000); return }
// if (msg.result && msg.result[0] == ice.ErrWarn) { can.user.toast(can, msg.Result(), "", 10000); return }
can.base.isFunc(cb) && cb(msg)
})
},
@ -234,9 +234,9 @@ 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, sub._msg = msg
toast && toast.close()
var process = msg._can == can || msg._can == sub
if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return }
if (process && can.core.CallFunc([sub, "onimport._process"], {can: sub, msg: msg})) { return }
if (process && can.core.CallFunc([can, "onimport._process"], {can: can, msg: msg})) { return }
if (can.base.isFunc(cb) && can.core.CallFunc(cb, {can: can, msg: msg})) { return }
if (silent) { return }
can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)||meta.display||meta.feature.display)
@ -246,12 +246,17 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
Volcanos(display, {_follow: can.core.Keys(can._follow, display), _display: display, _target: output, _fields: can._target,
_option: can._option, _action: can._action, _output: can._output, _status: can._status, _legend: can._legend,
Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status,
_inputs: {},
}, [display, chat.PLUGIN_TABLE_JS], function(table) { table.Conf(can.Conf())
table.run = function(event, cmds, cb, silent) { var msg = can.request(event)
if (msg.RunAction(event, table, cmds)) { return }
return can.Update(event, can.Input(cmds, silent), cb, silent)
}, can._outputs.push(table), table.sup = can, table._msg = msg
if (msg.result && msg.result[0] == "can.code.inner.plugin" && table.onimport && table.onimport.list.length > 0) {
can.onmotion.clear(can, can._option)
can.onappend._option(can, {inputs: table.onimport.list, args: msg.result.slice(1)})
}
table.onimport && can.core.CallFunc(table.onimport._init, {can: table, msg: msg, list: msg.result||msg.append||[], cb: function(msg) {
table.onappend._action(table, msg.Option(ice.MSG_ACTION)||can.Conf(ice.MSG_ACTION))
table.onappend._status(table, msg.Option(ice.MSG_STATUS))
@ -341,7 +346,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var br = input.type == html.TEXTAREA? [{type: html.BR, style: {clear: html.BOTH}}]: []
var title = can.Conf([ctx.FEATURE, chat.TITLE, item.name].join(ice.PT))||""; title && (input.title = title)
return can.page.Append(can, target, ([{view: style||can.base.join([html.ITEM, item.type]), onkeydown: function(event) {
item.type == "text" && can.onkeymap.input(event, can)
item.type == "text" && can.onkeymap.input(event, can), can.onmotion.selectField(event, can)
}, list: [input]}]).concat(br))[item.name]
},
table: function(can, msg, cb, target, sort) {
@ -767,6 +772,17 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
})
},
selectField: function(event, can) {
if (event.ctrlKey && event.key >= "0" && event.key <= "9") {
if (event.key == "0") { return can.onimport._back(can) }
can.page.Select(can, can._output, html.TR, function(tr, index) { if (index == event.key) {
var head = can.page.Select(can, can._output, html.TH, function(th, order) { return th.innerText })
can.page.Select(can, tr, html.TD, function(td, index) { can.Option(head[index], td.innerText) })
can.Update(event)
} })
}
},
selectTable: function(event, can, target, cb) {
if (event.ctrlKey) {
function select(order) {

View File

@ -68,6 +68,7 @@ Volcanos("user", {help: "用户操作", agent: {
"list": "查看", "back": "返回", "run": "执行", "done": "完成", "share": "共享",
"edit": "编辑", "save": "保存", "copy": "复制", "show": "显示", "hide": "隐藏",
"project": "项目", "profile": "详情", "actions": "参数",
"plugin": "插件",
"open": "打开", "close": "关闭",
"start": "启动", "stop": "停止",
@ -258,11 +259,11 @@ Volcanos("user", {help: "用户操作", agent: {
})}, {view: chat.ACTION},
]}]);
var layout = can.onlayout.figure(event, can, ui._target)
if (!layout.left) { if (!layout.top) { layout.top = 32 }
if (layout.left == undefined) { if (!layout.top) { layout.top = 32 }
layout.left = window.innerWidth/2-ui._target.offsetWidth/2
layout.right = ""
can.page.style(can, ui._target, layout)
}
can.page.ClassList.add(can, ui._target, chat.FLOAT)
var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, {

View File

@ -58,6 +58,7 @@ fieldset.inner>div.output div.content td.text {
text-align:left; height:20px;
padding-left:10px;
white-space:pre;
tab-size:4;
}
fieldset.inner>div.output div.content td.text span.comment {
color:cyan; background-color:blue;
@ -86,6 +87,12 @@ fieldset.inner>div.output div.profile>div.action>div.item {
fieldset.inner>div.output div.profile>div.output {
clear:both; overflow:auto;
}
fieldset.inner>div.output div.profile>div.output>fieldset {
margin:0; padding:0;
}
fieldset.inner>div.output div.profile>div.output>fieldset>legend {
display:none;
}
fieldset.inner>div.output div.display>div.output {
clear:both; overflow:auto;
}

View File

@ -1,6 +1,11 @@
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||[])
}))
can.tabview = can.tabview||{}, can.tabview[can.Option(nfs.PATH)+ice.DF+can.Option(nfs.FILE)] = msg
can.history = can.history||[], can.toolkit = {}, can.extentions = {}
can.history = can.history||[], can.toolkit = {}, can.extentions = {}, can.profile_size = {}
can.onmotion.clear(can), can.onlayout.profile(can)
can.onimport._project(can, can.ui.project)
@ -22,10 +27,16 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
},
_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], ui.action, kit.Dict(
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) },
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.Option(nfs.PATH)+":"+can.Option(nfs.FILE)] = can.ConfWidth()*parseInt(data.size)/100
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)
@ -88,20 +99,13 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
line == ctx.INDEX? show(can.request({}, {index: file, line: line})): can.run({}, [path, file], show, true)
},
profile: function(can, msg) {
if (msg) { can.onmotion.clear(can, can.ui.profile_output)
// can.onappend.table(can, msg, null, can.ui.profile_output)
can.onappend.board(can, msg.Result(), can.ui.profile_output)
can.user.toastSuccess(can)
}
can.page.styleWidth(can, can.ui.profile_output, (can.ConfWidth()-can.ui.project.offsetWidth)/2)
var width = can.profile_size[can.Option(nfs.PATH)+":"+can.Option(nfs.FILE)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2
msg && can.onimport.process(can, msg, can.ui.profile_output, width-32)
can.page.styleWidth(can, can.ui.profile_output, width)
can.onmotion.hidden(can, can.ui.profile, true), can.onimport.layout(can)
},
display: function(can, msg) {
if (msg) { can.onmotion.clear(can, can.ui.display_output)
// can.onappend.table(can, msg, null, can.ui.display_output)
can.onappend.board(can, msg.Result(), can.ui.display_output)
can.user.toastSuccess(can)
}
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.onmotion.hidden(can, can.ui.display, true), can.onimport.layout(can)
},
@ -126,6 +130,22 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
}, can.base.isFunc(cb) && cb(sub)
})
},
process: function(can, msg, target, width) {
can.user.toastSuccess(can)
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])
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)
})
})
} else {
can.onappend.table(can, msg, null, target)
can.onappend.board(can, msg.Result(), target)
}
},
plugin: function(can, meta, target, cb) {
can.onappend.plugin(can, meta, function(sub) {
sub.run = function(event, cmds, cb) {

View File

@ -1,5 +1,6 @@
Volcanos("onimport", {help: "导入数据", _init: function(can, args, cb) { var history = []; const SEARCH = "can.code.inner.search"
function show(msg, word) { if (!msg) { return } history.push(msg); var sub = msg._can; sub.Option("word", word||msg._word)
!sub.page.ClassList.has(sub, sub._legend, "select") && can.ui.search.select()
sub.onmotion.clear(sub), sub.onappend.table(sub, msg, function(value, key, index, line) {
return {text: ["", html.TD], list: [{text: [can.page.replace(can, value, ice.PWD, ""), html.DIV]}], onclick: function(event) {
line.line && can.onimport.tabview(can, can.Option(nfs.PATH), line.file.replace(ice.PWD, ""), parseInt(line.line))
@ -52,6 +53,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, args, cb) { var
))) { return } can.run(msg._event, cmds, function(msg) { show(msg) }, true) }))
can.onimport.toolkit(can, {index: SEARCH}, function(sub) {
can.ui.search = sub, can.base.isFunc(cb) && cb(sub)
can.ui.search._show = show
})
}})

View File

@ -5,6 +5,7 @@ fieldset.vimer>div.output input.current {
margin:0; margin-top:-2px;
padding:0; padding-left:9px;
width:-webkit-fill-available;
tab-size:4;
}
fieldset.vimer>div.output input.current.insert {
caret-color:yellow;

View File

@ -2,7 +2,15 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() {
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)
name == chat.ONKEYMAP && (can.base.Copy(can.onkeymap._mode, sub._mode))
if (name == chat.ONKEYMAP) {
can.base.Copy(can.onkeymap._mode, sub._mode)
can.core.Item(can.onkeymap._mode.normal, function(k, v) {
if (!sub._mode.plugin[k]) { sub._mode.plugin[k] = v }
})
can.core.Item(sub._mode.plugin, function(k, v) {
if (!can.onkeymap._mode.normal[k]) { can.onkeymap._mode.normal[k] = v }
})
}
})
},
_input: function(can) {
@ -80,9 +88,8 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
P: function(event, can) { can.onaction.insertLine(can, can._last_text, can.current.line) },
s: function(event, can) { can.onaction.save(event, can) },
":": function(event, can) { can.onimport.toolkit(can, {index: "cli.system"}, function(sub) { can.toolkit["cli.system"] = sub.select() }) },
r: function(event, can) { can.onaction["执行"](event, can) },
v: function(event, can) { can.onaction["展示"](event, can) },
m: function(event, can) { can.onaction.autogen(event, can, "autogen") },
c: function(event, can) { can.onaction.compile(event, can, "compile") },
},
insert: {
jk: function(event, can, target) { can.onkeymap._normal(event, can),
@ -117,7 +124,32 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
},
}, _engine: {},
})
Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, "autogen", "compile", "binpack"],
Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, "autogen", "compile", "binpack", "加载"],
"加载": 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)
},
autogen: function(event, can, button) { var meta = can.Conf(), msg = can.request(event, {_handle: ice.TRUE})
can.user.input(event, can, meta.feature[button], function(ev, btn, data, list, args) {
can.run(event, [ctx.ACTION, button].concat(args), function(msg) {
can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(nfs.FILE))
can.onimport.project(can, can.Option(nfs.PATH))
}, true)
})
},
compile: function(event, can, button) { var msg = can.ui.search.request(event, {_handle: ice.TRUE, _toast: "编译中..."})
can.run(event, [ctx.ACTION, button], function(msg) {
if (msg.Length() == 0) { var toast = can.user.toast(can, "重启中...", "", -1)
can.core.Timer(3000, function() { toast.close(), can.onaction["展示"]({}, can) })
} else {
can.ui.search._show(msg)
}
}, true)
},
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)