1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
shylinux@163.com 2022-09-21 17:45:21 +08:00
parent c062d2e73b
commit d63260e7d1
10 changed files with 315 additions and 35 deletions

View File

@ -120,6 +120,14 @@ Volcanos(chat.ONDAEMON, {help: "推荐引擎", _init: function(can, name) { if (
pwd: function(can, msg, arg) { can._wss_name = can.ondaemon._list[0] = arg[0] },
toast: function(can, msg, arg) { can.core.CallFunc(can.user.toast, {can: can, msg: msg, cmds: arg}) },
refresh: function(can, msg, sub) { sub.Update() },
action: function(can, msg, sub, arg) {
var _sub = can.core.Value(sub, chat._OUTPUTS_CURRENT)
if (_sub && _sub.onaction) {
_sub.onaction && _sub.onaction._daemon({}, _sub, arg)
return
}
sub.runAction({}, arg[0], arg.slice(1))
},
grow: function(can, msg, sub, arg) { sub.onimport._grow(sub, msg, can.page.Color(arg.join(""))) },
exit: function(can, msg, sub) { can.user.close() },
})
@ -344,6 +352,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list,
}, list: [input]}]).concat(br))[item.name]
},
table: function(can, msg, cb, target, sort) { if (msg.Length() == 0) { return }
var meta = can.base.Obj(msg.Option("meta"))
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) {
if (msg.append.length == 2 && msg.append[0] == mdb.KEY && msg.append[1] == mdb.VALUE) {
if (key == mdb.VALUE) { key = line.key }
@ -372,7 +381,15 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list,
}
return {text: [value, html.TD], onclick: function(event) { var target = event.target
if (can.page.tagis(target, html.INPUT) && target.type == html.BUTTON) { return run([ctx.ACTION, target.name]) }
if (can.page.tagis(target, html.INPUT) && target.type == html.BUTTON) {
if (meta && meta[target.name]) {
var msg = can.request(event, {action: target.name})
return can.user.input(event, can, meta[target.name], function(args) { var msg = can.request(event, {_handle: ice.TRUE}, line, can.Option())
can.runAction(event, target.name, args)
})
}
return run([ctx.ACTION, target.name])
}
if (key == mdb.HASH && can.user.mod.isDiv) { return can.user.jumps("/chat/div/"+value) }
if (can.sup.onaction.change(event, can.sup, key, event.target.innerText).length == 0) {
can.sup && can.sup._item_click && can.sup._item_click(value, key)
@ -383,6 +400,10 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list,
can.onmotion.modifys(can, event.target, function(event, value, old) { run([ctx.ACTION, mdb.MODIFY, key, value]) }, item)
}}
}); table && can.page.styleClass(can, table, chat.CONTENT)
meta && meta._trans && can.page.Select(can, table, "input", function(target) {
target.value = meta._trans[target.value]||target.value
})
if (msg.append && msg.append[msg.append.length-1] == ctx.ACTION) { can.page.ClassList.add(can, table, ctx.ACTION) }
can._table = table, can.sup && (can.sup._table = table)
return sort && can.page.RangeTable(can, table, sort), table

View File

@ -1,4 +1,4 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", key: {
Volcanos(chat.ONFIGURE, {help: "控件详情", keyboard: {
_init: function(event, can, cbs, target, name, value) {
can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) {
can.onfigure.key._show(can, msg, cbs, target, name)

72
plugin/input/keyboard.css Normal file
View File

@ -0,0 +1,72 @@
fieldset.input.keyboard div.output div.small.key {
font-size:16px; white-space:pre;
}
fieldset.input.keyboard div.output div.key {
color:white;
margin:5px;
background-color:green;
font-size:24px; text-align:center;
height:40px; width:40px; float:left;
padding:0;
}
fieldset.input.keyboard div.output div.key.Tab {
width:60px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.CapsLock {
width:70px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.Ctrl {
width:70px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.Win {
width:60px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.special {
font-size:16px;
}
fieldset.input.keyboard div.output div.key span {
display:block;
margin-top:2px;
}
fieldset.input.keyboard div.output div.key.special span {
display:block;
margin-top:10px;
}
fieldset.input.keyboard div.output div.key.Alt {
width:60px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.Shift {
width:90px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.tail {
width:70px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.Shift.tail {
width:140px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.Enter {
width:110px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.Space {
width:300px;
background-color:red;
}
fieldset.input.keyboard div.output div.key.Backspace {
width:90px;
background-color:red;
}
fieldset.input.keyboard div.output br {
clear:both;
}
fieldset.input.keyboard div.output div.key:hover {
background-color:green;
}

126
plugin/input/keyboard.js Normal file
View File

@ -0,0 +1,126 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", keyboard: {
onclick: function(event, can, meta, cb, target) {
can.onfigure.keyboard._make(event, can, meta, cb, target)
},
onfocus: function(event, can, meta, cb, target, last) {
can.onfigure.keyboard._make(event, can, meta, cb, target)
},
_make: function(event, can, meta, cb, target, last) {
var sub = target._can; if (sub && sub._cbs) { return }
cb(function(sub, cbs) { sub._cbs = cbs
can.require(["/plugin/input/keyboard.css"])
var msg = can.request({}); can.onfigure.keyboard._normal(can, msg)
var keys = {}
msg.Table(function(value) { value.type == "head" && can.page.Append(can, can._output, "br")
var t = value.type+" "+value.name+(value.name.indexOf("\n")>-1? " small": value.name.length>1? " special": "")
var div = can.page.Append(can, sub._output, [{view: t, list: [{text: [value.name]}], onclick: function(event) {
switch (value.name) {
case "Ctrl":
can._ctrl = !can._ctrl
keys[value.name] = div
can.page.style(can, div, "background-color", "green")
break
case "Shift":
can._shift = !can._shift
keys[value.name] = div
can.page.style(can, div, "background-color", "green")
break
case "Backspace":
target.value = target.value.slice(0, -1)
break
case "Enter":
break
case "Esc":
break
default:
can._shift = can._shift||event.shiftKey
if (value.name == "Space") {
target.value += " "
} else if (value.name.indexOf("\n") > -1) {
var ls = can.core.Split(value.name, "\n", "\n", "\n")
target.value += can._shift? ls[0]: ls[1]
} else if (can._shift) {
target.value += value.name.toUpperCase()
} else {
target.value += value.name
}
can.core.Item(keys, function(key, target) {
can.page.style(can, target, "background-color", "")
}), can._ctrl = false, can._shift = false
}
target.focus(), can.user.toast(can, value.name)
} }]).first
})
})
},
_normal: function(can, msg) {
msg.Push({type: "key head", name: "Esc"})
msg.Push({type: "key head", name: "~\n`"})
msg.Push({type: "key", name: "!\n1"})
msg.Push({type: "key", name: "@\n2"})
msg.Push({type: "key", name: "#\n3"})
msg.Push({type: "key", name: "$\n4"})
msg.Push({type: "key", name: "%\n5"})
msg.Push({type: "key", name: "^\n6"})
msg.Push({type: "key", name: "&\n7"})
msg.Push({type: "key", name: "*\n8"})
msg.Push({type: "key", name: "(\n9"})
msg.Push({type: "key", name: ")\n0"})
msg.Push({type: "key", name: "_\n-"})
msg.Push({type: "key", name: "+\n="})
msg.Push({type: "key", name: "Backspace"})
msg.Push({type: "key head", name: "Tab"})
msg.Push({type: "key", name: "q"})
msg.Push({type: "key", name: "w"})
msg.Push({type: "key", name: "e"})
msg.Push({type: "key", name: "r"})
msg.Push({type: "key", name: "t"})
msg.Push({type: "key", name: "y"})
msg.Push({type: "key", name: "u"})
msg.Push({type: "key", name: "i"})
msg.Push({type: "key", name: "o"})
msg.Push({type: "key", name: "p"})
msg.Push({type: "key", name: "{\n["})
msg.Push({type: "key", name: "}\n]"})
msg.Push({type: "key tail", name: "|\n\\"})
// msg.Push({type: "key head", name: "CapsLock"})
msg.Push({type: "key head", name: "Ctrl"})
msg.Push({type: "key", name: "a"})
msg.Push({type: "key", name: "s"})
msg.Push({type: "key", name: "d"})
msg.Push({type: "key", name: "f"})
msg.Push({type: "key", name: "g"})
msg.Push({type: "key", name: "h"})
msg.Push({type: "key", name: "j"})
msg.Push({type: "key", name: "k"})
msg.Push({type: "key", name: "l"})
msg.Push({type: "key", name: ":\n;"})
msg.Push({type: "key", name: "\"\n'"})
msg.Push({type: "key", name: "Enter"})
msg.Push({type: "key head", name: "Shift"})
msg.Push({type: "key", name: "z"})
msg.Push({type: "key", name: "x"})
msg.Push({type: "key", name: "c"})
msg.Push({type: "key", name: "v"})
msg.Push({type: "key", name: "b"})
msg.Push({type: "key", name: "n"})
msg.Push({type: "key", name: "m"})
msg.Push({type: "key", name: "<\n,"})
msg.Push({type: "key", name: ">\n."})
msg.Push({type: "key", name: "?\n/"})
msg.Push({type: "key tail", name: "Shift"})
msg.Push({type: "key head", name: "Ctrl"})
msg.Push({type: "key", name: "Win"})
msg.Push({type: "key", name: "Alt"})
msg.Push({type: "key", name: "Space"})
msg.Push({type: "key", name: "Alt"})
msg.Push({type: "key", name: "Win"})
msg.Push({type: "key", name: "Ctrl"})
}
}})

View File

@ -16,6 +16,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
function show() { if (can.isCmdMode()) { can.onimport._title(can, path+file) }
can._msg && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.tabview[key]
can.Option(can.onimport.history(can, {path: path, file: file, line: line||can._msg.Option(nfs.LINE)||1}))
if (isCommand()||isDream()) { can._msg.Option(ctx.INDEX, file) }
can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg
can.ui._path && (can.ui._path.innerHTML = isDream()? can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)})):
isCommand()? can.Option(nfs.FILE): can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)))
@ -23,14 +24,13 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
can.page.Select(can, can.ui._content.parentNode, can.page.Keys(html.DIV_CONTENT, html.IFRAME), function(item) {
if (can.onmotion.toggle(can, item, item == msg._content)) { can.ui.content = msg._content }
})
}), can.ui.content._plugin = msg._plugin
can.page.Select(can, can.ui._profile_output.parentNode, can.page.Keys(html.DIV_OUTPUT, html.IFRAME), function(item) {
if (can.onmotion.toggle(can, item, item == msg._profile_output)) { can.ui.profile_output = msg._profile_output }
})
can.onexport.hash(can), can.onimport.layout(can), can.base.isFunc(cb) && cb(), cb = null
isCommand() && can.onmotion.delay(can, function() {
can.onmotion.focus(can, can.page.Select(can, can.ui._content, html.OPTION_ARGS)[0])
}), can.onengine.signal(can, "tabview.view.show", msg)
msg._plugin && can.onmotion.delay(can, function() { msg._plugin.Focus() })
can.onengine.signal(can, "tabview.view.show", msg)
})
}
function load(msg) { can.tabview[key] = msg
@ -46,7 +46,9 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
}, can.ui._tabs)
}
if (can.tabview[key]) { return can.isCmdMode() && !can._msg._tab? load(can.tabview[key]): show() }
if (can.tabview[key]) {
return can.isCmdMode() && !can._msg._tab? load(can.tabview[key]): show()
}
isCommand()||isDream()? load(can.request({}, {index: file, line: line})): can.run({}, [path, file], load, true)
},
history: function(can, push) {
@ -109,14 +111,15 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
}
return can.onimport.plug(can, {index: msg.Option(ctx.INDEX), args: can.Option(nfs.PATH) == ctx.COMMAND && can.Option(nfs.LINE) != ctx.INDEX? [can.Option(nfs.LINE)]: []}, can.ui._content, function(sub) {
can.page.style(can, sub._output, html.MAX_HEIGHT, sub.ConfHeight(can.ui._content.offsetHeight-2*html.ACTION_HEIGHT))
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(can.ui._content.offsetWidth))
can.onmotion.delay(can, function() { sub.Focus() }), can.base.isFunc(cb) && cb(msg._content = can.ui._content)
can.page.style(can, sub._output, html.MAX_HEIGHT, sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT))
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(can.ui.content.offsetWidth))
msg._plugin = sub, can.base.isFunc(cb) && cb(msg._content = can.ui._content)
can.onmotion.delay(can, function() { sub.Focus() })
sub.onaction.close = function() { can.onaction.back({}, can), msg._tab._close() }
sub.onimport._open = function(sub, msg, _arg) { var url = can.base.ParseURL(_arg), ls = url.origin.split("/chat/pod/")
if (_arg.indexOf(location.origin) == 0 && ls.length > 1) {
return can.onimport.tabview(can, can.Option(nfs.PATH), ls[1].split("/")[0], web.DREAM), sub.Update() // 显示空间
return can.onimport.tabview(can, can.Option(nfs.PATH), ls[1].split(ice.PS)[0], web.DREAM), sub.Update()
}
return can.user.open(_arg), sub.Update()
}
@ -270,14 +273,14 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
if (msg.Result().indexOf("<iframe") > -1) {
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/4*3
if (sup._profile_output != can.ui._profile_output) { can.page.Remove(can, sup._profile_output) }
can.ui.profile_output = sup._profile_output = can.page.Append(can, can.ui._profile_output.parentNode, [{view: "output", inner: msg.Result()}]).output
can.ui.profile_output = sup._profile_output = can.page.Append(can, can.ui._profile_output.parentNode, [{view: html.OUTPUT, inner: msg.Result()}]).output
can.profile_size[can.onexport.keys(can)] = width
} else {
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/3
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2
can.ui.profile_output = sup._profile_output = can.ui._profile_output
can.onimport.process(can, msg, can.ui._profile_output, width, can.ui.profile.offsetHeight)
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, ["status"]).first)
can.page.Select(can, can.ui._profile_output, "table.content", function(target) { can.page.style(can, target, "max-height", "1000px") })
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS]).first)
can.page.Select(can, can.ui._profile_output, "table.content", function(target) { can.page.style(can, target, html.MAX_HEIGHT, "1000px") })
}
}
can.onmotion.toggle(can, can.ui.profile_output, true)
@ -394,7 +397,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.onmotion.clear(can), can.onlayout.profile(can)
can.onimport._profile(can, can.ui.profile)
can.onimport._display(can, can.ui.display)
if (msg.Result() == "") { return }
if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return }
if (msg.Option(nfs.FILE)) {
msg.Option(nfs.PATH) && can.Option(nfs.PATH, msg.Option(nfs.PATH))
@ -454,12 +457,12 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.ConfHeight()
var width = can.ConfWidth()+(can.user.isMobile && can.isCmdMode() && can.user.isLandscape()? 16: 0)-(can.user.isWindows && !can.isCmdMode()? 20: 0)
can.page.styleWidth(can, can.ui.profile_output, can.profile_size[can.onexport.keys(can)]||(width-can.ui.project.offsetWidth)/3)
can.page.styleWidth(can, can.ui.profile_output, can.profile_size[can.onexport.keys(can)]||(width-can.ui.project.offsetWidth)/2)
can.page.styleWidth(can, can.ui.content, width-can.ui.project.offsetWidth-can.ui.profile.offsetWidth)
can.page.styleWidth(can, can.ui.display, width-can.ui.project.offsetWidth)
can.page.styleWidth(can, can.ui.display_output, width-can.ui.project.offsetWidth)
var displayHeight = can.display_size[can.onexport.keys(can)]
can.page.style(can, can.ui.display, html.HEIGHT, displayHeight||200)
can.page.style(can, can.ui.display_output, html.HEIGHT, displayHeight||200)
if (can.isCmdMode()) {
if (can.ui.display.display != html.NONE) {
@ -484,6 +487,10 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.page.Select(can, can.ui.profile, html.IFRAME, function(iframe) {
can.page.Modify(can, iframe, {height: can.ui.profile.offsetHeight-html.ACTION_HEIGHT-4, width: can.ui.profile.offsetWidth})
})
var sub = can.ui.content._plugin; if (sub) {
sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT), sub.ConfWidth(can.ui.content.offsetWidth)
sub && sub.onaction.refresh({}, sub)
}
},
toolkit: function(can, meta, cb) { meta.msg = true
can.onimport.plug(can, meta, can.ui.toolkit.output, function(sub) {

View File

@ -19,6 +19,9 @@ fieldset.vimer>div.output div.complete div.pre {
fieldset.vimer>div.output div.complete table {
background:darkblue; max-height:400px; max-width:800px; overflow:auto; display:block; float:left;
}
body.white fieldset.vimer>div.output div.complete table {
background:aliceblue; max-height:400px; max-width:800px; overflow:auto; display:block; float:left;
}
fieldset.vimer>div.output div.complete table.content th {
display:none;
}

View File

@ -1,9 +1,8 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) {
can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() { can.undo = [], can.redo = []
can.onengine.listen(can, "tabview.line.select", function(msg) { can.onaction._selectLine(msg._event, can) })
can.core.Item(can.onkeymap._mode.plugin, function(key, value) {
can.onkeymap._mode.normal[key] = can.onkeymap._mode.normal[key]||value
}), can.onimport._input(can), can.onkeymap._build(can), can.onkeymap._plugin({}, can)
can.core.Item(can.onkeymap._mode.plugin, function(key, value) { can.onkeymap._mode.normal[key] = can.onkeymap._mode.normal[key]||value })
can.onimport._input(can), can.onkeymap._build(can), can.onkeymap._plugin({}, can)
can.page.ClassList.add(can, can._fields, code.VIMER), can.base.isFunc(cb) && cb(msg)
can.onengine.plugin(can, can.onplugin)
}, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
@ -100,7 +99,7 @@ Volcanos(chat.ONFIGURE, {help: "索引导航",
Volcanos(chat.ONKEYMAP, {help: "键盘交互",
_model: function(can, value) { can.Status("模式", can.mode = value)
can.page.styleClass(can, can.ui.current, ["current", can.mode]), value
can.page.styleClass(can, can.ui.complete, ["complete", can.mode]), value
can.page.styleClass(can, can.ui.complete, [code.COMPLETE, can.mode]), value
},
_plugin: function(event, can) { can.onkeymap._model(can, "plugin")
can.ui.current.blur()
@ -159,8 +158,12 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
h: shy("光标左移", function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) }),
l: shy("光标右移", function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) }),
L: shy("跳到行尾", function(event, can, target) { can.onkeymap.cursorMove(can, target, 0, -1) }),
j: shy("光标下移", function(event, can) { can.onaction.selectLine(event, can, can.current.next()) }),
k: shy("光标上移", function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) }),
j: shy("光标下移", function(event, can) {
can.onaction.selectLine(event, can, can.current.next())
}),
k: shy("光标上移", function(event, can) {
can.onaction.selectLine(event, can, can.current.prev())
}),
gg: shy("跳到某行", function(event, can, target, count) { return can.onaction.selectLine(event, can, count), true }),
G: shy("跳到某行", function(event, can, target, count) { return can.onaction.selectLine(event, can, count = count>1? count: can.max), true }),
@ -242,6 +245,24 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
})
Volcanos(chat.ONACTION, {help: "控件交互",
_trans: {source: "源码", module: "模块", dreams: "空间", website: "网页"},
_daemon: function(event, can, arg) {
switch (arg[0]) {
case "dream":
can.runAction({}, arg[0], arg.slice(1), function(msg) {
can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys(can.misc.Search(can, ice.POD), msg.Option(mdb.NAME)), web.DREAM)
})
break
case "xterm":
can.runAction({}, arg[0], arg.slice(1), function(msg) {
can.onimport.tabview(can, ctx.COMMAND, code.XTERM, msg.Result())
})
break
default:
can.runAction({}, arg[0], arg.slice(1), function(msg) {
can.onimport.tabview(can, msg.Option(nfs.PATH)||can.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.source.refresh()
})
}
},
_run: function(event, can, button, args, cb) {
can.runAction(event, button, args, cb||function(msg) {
can.onimport.tabview(can, msg.Option(nfs.PATH)||can.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.source.refresh()
@ -273,7 +294,7 @@ Volcanos(chat.ONACTION, {help: "控件交互",
can.onaction._runs(can.request(event, {file: can.base.trimSuffix(can.Option(nfs.FILE), can.base.Ext(can.Option(nfs.FILE)))+nfs.JS}), can, button)
},
website: function(event, can, button) {
can.onaction._runs(can.request(event, {path: "src/", file: (can.base.trimSuffix(can.Option(nfs.FILE), can.base.Ext(can.Option(nfs.FILE)))+nfs.ZML).split(ice.PS).pop()}), can, button)
can.onaction._runs(can.request(event, {path: "src/website/", file: (can.base.trimSuffix(can.Option(nfs.FILE), can.base.Ext(can.Option(nfs.FILE)))+nfs.ZML).split(ice.PS).pop()}), can, button)
},
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.dream.refresh()
@ -366,14 +387,16 @@ Volcanos(chat.ONACTION, {help: "控件交互",
}
},
_selectLine: function(event, can) {
can.page.Select(can, can.current.line, "td.text", function(td) { can.ui.current.value = td.innerText
can.current.line.appendChild(can.ui.current), can.page.style(can, can.ui.current, html.LEFT, td.offsetLeft-1, html.WIDTH, can.ui.content.style.width)
can.page.Select(can, can.current.line, "td.text", function(td) { var target = can.ui.current; target.value = td.innerText
can.current.line.appendChild(target), can.page.style(can, target, html.LEFT, td.offsetLeft-1, html.WIDTH, can.ui.content.style.width)
if (event && event.type) {
if (event.type == "click" && can.mode != "insert") { can.onkeymap._insert(event, can)
can.onmotion.delay(can, function() { can.onaction._complete(event, can) })
}
can.ui.current.focus(), can.ui.content.scrollLeft -= 10000
can.onkeymap.cursorMove(can, can.ui.current, 0, (event.offsetX)/12-1)
target.focus(), can.ui.content.scrollLeft -= 10000
if (event.type == "click") {
can.onkeymap.cursorMove(can, target, 0, (event.offsetX)/12-1)
}
}
})
},

View File

@ -4,7 +4,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.o
item.text && can.onmotion.delay(can, function() { can.onimport._input(can, item.text+ice.NL) })
can.onimport.layout(can), can.onappend._status(can), can.onappend.tools(can, msg, function(sub) {
sub._item_click = function(value, key) { can.onimport._input(can, value+ice.NL) }
}), can.isCmdMode() && can.misc.Search(can, mdb.HASH) && can.sup.onaction.full({}, can.sup)
}), can.isCmdMode() && can.Option(mdb.HASH) && can.Option(mdb.HASH) == can.misc.Search(can, mdb.HASH) && can.runAction({}, "full")
can.onimport._connect(can, item)
})
},
@ -15,7 +15,13 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.o
term.onTitleChange(function(title) { can.isCmdMode() && can.user.title(title) })
term.onResize(function(size) { can.onimport._resize(can, size) })
term.onData(function(data) { can.onimport._input(can, data) })
term.onData(function(data) {
console.log(data)
can.onimport._input(can, data)
})
term.onKey(function(data) {
console.log(data)
})
term.onCursorMove(function() { can.onexport.term(can) })
can._current = term, term._item = item
@ -38,6 +44,13 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.o
},
grow: function(can, msg) { can._current.write(msg.Option(mdb.TEXT)) },
})
Volcanos(chat.ONACTION, {help: "操作数据",
refresh: function(event, can, button) {
can.onimport.layout(can), can._current.focus()
},
"波浪线": function(event, can, button) { can.onimport._input(can, "~"), can._current.focus() },
"反引号": function(event, can, button) { can.onimport._input(can, "`"), can._current.focus() },
})
Volcanos(chat.ONEXPORT, {help: "导出数据", list: [mdb.TYPE, mdb.NAME, "rows", "cols", "cursorY", "cursorX"],
term: function(can) { var term = can._current, item = term._item
can.core.List(can.onexport.list, function(key) {

View File

@ -96,7 +96,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) {
},
})
Volcanos(chat.ONACTION, {help: "交互操作", list: [
"刷新数据", "切换全屏", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", [
"刷新数据", "切换全屏", "keyboard", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", [
"其它", "刷新页面", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据",
"查看文档", "查看脚本", "查看源码", "查看配置", "删除配置", "删除工具",
],
@ -122,6 +122,17 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)),
])
},
"keyboard": function(event, can) {
can.base.isUndefined(can._daemon) && can.ondaemon._list[0] && (can._daemon = can.ondaemon._list.push(can)-1)
can.request(event, kit.Dict(ctx.INDEX, can._index, ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], can._daemon)))
can.runAction(event, "keyboard", [], function(msg) {
can.user.toast(can, {
title: msg.Append(mdb.NAME), duration: -1,
content: msg.Append(mdb.TEXT), action: [cli.CLOSE, cli.OPEN],
}), can.user.copy(msg._event, can, msg.Append(mdb.NAME))
}, true)
},
"打开链接": function(event, can) { var meta = can.Conf(), args = can.Option(); args.river = "", args.storm = ""
args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == "web.wiki.word" && (args.cmd = args.path)
can.user.isWeiXin? can.user.jumps(can.misc.MergeURL(can, args)): can.user.open(can.misc.MergeURL(can, args))
@ -201,6 +212,10 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
can.onaction["切换全屏"](event, can)
}
},
refresh: function(event, can) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)
if (!sub) { return }
sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), sub.onimport.layout(sub)
},
clear: function(event, can, name) { can.onmotion.clear(can, can._output) },
close: function(event, can) {
if (can.isFullMode()) {

View File

@ -143,10 +143,10 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
},
plug: function(can, meta, target, cb) { if (!meta || !meta.index) { return }
meta.type = "plug", can.onappend.plugin(can, meta, function(sub) { sub.sup = can
sub.ConfHeight(target.offsetHeight-2*html.ACTION_HEIGHT), sub.ConfWidth(target.offsetWidth)
sub.run = function(event, cmds, cb) { can.runActionCommand(can.request(event, can.Option()), meta.index, cmds, cb) }
sub.onaction.close = function() { can.ui && target == can.ui.profile? can.onmotion.hidden(sub, target): can.onmotion.hidden(sub, sub._target) }
can.page.style(can, sub._output, html.MAX_HEIGHT, can.ConfHeight()-2*html.ACTION_HEIGHT, html.MAX_WIDTH, can.ConfWidth())
can.base.isFunc(cb) && cb(sub)
can.base.isFunc(cb) && cb(sub), can.page.style(can, sub._output, html.MAX_HEIGHT, sub.ConfHeight(), html.MAX_WIDTH, sub.ConfWidth())
}, target)
},
tool: function(can, list, cb, target) { target = target||can._output