forked from x/ContextOS
tce add code.scroll
This commit is contained in:
parent
0c8debc6f9
commit
5302004d03
@ -107,7 +107,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
||||
"nuser": &ctx.Cache{Name: "nuser", Value: "0", Help: "用户数量"},
|
||||
},
|
||||
Configs: map[string]*ctx.Config{
|
||||
"expire": &ctx.Config{Name: "expire(s)", Value: "7200", Help: "会话超时"},
|
||||
"expire": &ctx.Config{Name: "expire(s)", Value: "72000", Help: "会话超时"},
|
||||
"cert": &ctx.Config{Name: "cert", Value: "etc/pem/cert.pem", Help: "证书文件"},
|
||||
"pub": &ctx.Config{Name: "pub", Value: "etc/pem/pub.pem", Help: "公钥文件"},
|
||||
"key": &ctx.Config{Name: "key", Value: "etc/pem/key.pem", Help: "私钥文件"},
|
||||
|
@ -341,7 +341,9 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
}
|
||||
|
||||
m.Target().Message().Set("result").Set("append").Copy(msg, "result").Copy(msg, "append")
|
||||
m.Set("append").Set("result").Copy(msg, "append").Copy(msg, "result")
|
||||
m.Set("append").Copy(msg, "append")
|
||||
m.Set("result").Copy(msg, "result")
|
||||
|
||||
// m.Capi("last_msg", 0, msg.Code())
|
||||
// m.Capi("ps_count", 1)
|
||||
}
|
||||
@ -580,55 +582,57 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
}
|
||||
m.Add("append", "return", arg[1:])
|
||||
}},
|
||||
"source": &ctx.Command{Name: "source [stdio [init.shy [exit.shy]]]|[filename [async]]|string", Help: "解析脚本, filename: 文件名, async: 异步执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||
if _, ok := m.Source().Server.(*CLI); ok {
|
||||
msg := m.Spawn(c)
|
||||
m.Copy(msg, "target")
|
||||
}
|
||||
|
||||
if len(arg) == 0 || arg[0] == "stdio" {
|
||||
m.Sess("log", false).Cmd("init")
|
||||
|
||||
if m.Start("shy", "shell", "stdio"); m.Sess("nfs").Cmd("path", m.Confx("init.shy", arg, 1)).Results(0) {
|
||||
msg := m.Spawn().Add("option", "scan_end", "false").Cmd("source", m.Conf("init.shy"))
|
||||
m.Cap("ps_target", msg.Append("last_target"))
|
||||
m.Option("prompt", m.Conf("prompt"))
|
||||
m.Find("nfs.stdio").Cmd("prompt")
|
||||
"source": &ctx.Command{Name: "source [stdio [init.shy [exit.shy]]]|[filename [async]]|string", Help: "解析脚本, filename: 文件名, async: 异步执行",
|
||||
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||
if _, ok := m.Source().Server.(*CLI); ok {
|
||||
msg := m.Spawn(c)
|
||||
m.Copy(msg, "target")
|
||||
}
|
||||
if m.Wait(); m.Sess("nfs").Cmd("path", m.Confx("exit.shy", arg, 2)).Results(0) {
|
||||
m.Spawn().Add("option", "scan_end", "false").Cmd("source", m.Conf("exit.shy"))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if m.Sess("nfs").Cmd("path", arg[0]).Results(0) {
|
||||
m.Start(fmt.Sprintf("shell%d", m.Capi("nshell", 1)), "shell", arg...)
|
||||
if len(arg) < 2 || arg[1] != "async" {
|
||||
m.Wait()
|
||||
} else {
|
||||
m.Options("async", true)
|
||||
}
|
||||
return
|
||||
}
|
||||
if len(arg) == 0 || arg[0] == "stdio" {
|
||||
m.Sess("log", false).Cmd("init")
|
||||
|
||||
m.Confv("source_list", -1, map[string]interface{}{
|
||||
"source_time": m.Time(),
|
||||
"source_ctx": m.Option("current_ctx"),
|
||||
"source_cmd": strings.Join(arg, " "),
|
||||
})
|
||||
|
||||
if m.Options("current_ctx") {
|
||||
args := []string{"context", m.Option("current_ctx")}
|
||||
arg = append(args, arg...)
|
||||
}
|
||||
m.Sess("yac").Call(func(msg *ctx.Message) *ctx.Message {
|
||||
switch msg.Cmd().Detail(0) {
|
||||
case "cmd":
|
||||
m.Set("append").Copy(msg, "append").Set("result").Copy(msg, "result")
|
||||
if m.Start("shy", "shell", "stdio"); m.Sess("nfs").Cmd("path", m.Confx("init.shy", arg, 1)).Results(0) {
|
||||
msg := m.Spawn().Add("option", "scan_end", "false").Cmd("source", m.Conf("init.shy"))
|
||||
m.Cap("ps_target", msg.Append("last_target"))
|
||||
m.Option("prompt", m.Conf("prompt"))
|
||||
m.Find("nfs.stdio").Cmd("prompt")
|
||||
}
|
||||
if m.Wait(); m.Sess("nfs").Cmd("path", m.Confx("exit.shy", arg, 2)).Results(0) {
|
||||
m.Spawn().Add("option", "scan_end", "false").Cmd("source", m.Conf("exit.shy"))
|
||||
}
|
||||
return
|
||||
}
|
||||
return nil
|
||||
}, "parse", "line", "void", strings.Join(arg, " "))
|
||||
}},
|
||||
|
||||
if m.Sess("nfs").Cmd("path", arg[0]).Results(0) {
|
||||
m.Start(fmt.Sprintf("shell%d", m.Capi("nshell", 1)), "shell", arg...)
|
||||
if len(arg) < 2 || arg[1] != "async" {
|
||||
m.Wait()
|
||||
} else {
|
||||
m.Options("async", true)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
m.Confv("source_list", -1, map[string]interface{}{
|
||||
"source_time": m.Time(),
|
||||
"source_ctx": m.Option("current_ctx"),
|
||||
"source_cmd": strings.Join(arg, " "),
|
||||
})
|
||||
|
||||
if m.Options("current_ctx") {
|
||||
args := []string{"context", m.Option("current_ctx")}
|
||||
arg = append(args, arg...)
|
||||
}
|
||||
m.Sess("yac").Call(func(msg *ctx.Message) *ctx.Message {
|
||||
switch msg.Cmd().Detail(0) {
|
||||
case "cmd":
|
||||
m.Set("append").Copy(msg, "append")
|
||||
m.Set("result").Copy(msg, "result")
|
||||
}
|
||||
return nil
|
||||
}, "parse", "line", "void", strings.Join(arg, " "))
|
||||
}},
|
||||
"arguments": &ctx.Command{Name: "arguments", Help: "脚本参数", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||
if cli, ok := m.Source().Server.(*CLI); ok {
|
||||
msg := cli.Message().Spawn().Cmd("detail", arg)
|
||||
|
@ -7,6 +7,8 @@ var code = {
|
||||
ncommand: 1,
|
||||
show_result: true,
|
||||
show_height: "30px",
|
||||
scroll_x: 50,
|
||||
scroll_y: 50,
|
||||
}
|
||||
|
||||
function copy_to_clipboard(text) {
|
||||
@ -225,6 +227,53 @@ function onaction(event, action) {
|
||||
var dataset = target.dataset
|
||||
|
||||
switch (action) {
|
||||
case "scroll":
|
||||
var body = document.getElementsByTagName("body")[0]
|
||||
if (target.tagName == "BODY") {
|
||||
switch (event.key) {
|
||||
case "h":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(-code.scroll_x*10, 0)
|
||||
} else {
|
||||
window.scrollBy(-code.scroll_x, 0)
|
||||
}
|
||||
break
|
||||
case "H":
|
||||
window.scrollBy(-body.scrollWidth, 0)
|
||||
break
|
||||
case "l":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(code.scroll_x*10, 0)
|
||||
} else {
|
||||
window.scrollBy(code.scroll_x, 0)
|
||||
}
|
||||
break
|
||||
case "L":
|
||||
window.scrollBy(body.scrollWidth, 0)
|
||||
break
|
||||
case "j":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(0, code.scroll_y*10)
|
||||
} else {
|
||||
window.scrollBy(0, code.scroll_y)
|
||||
}
|
||||
break
|
||||
case "J":
|
||||
window.scrollBy(0, body.scrollHeight)
|
||||
break
|
||||
case "k":
|
||||
if (event.ctrlKey) {
|
||||
window.scrollBy(0, -code.scroll_y*10)
|
||||
} else {
|
||||
window.scrollBy(0, -code.scroll_y)
|
||||
}
|
||||
break
|
||||
case "K":
|
||||
window.scrollBy(0, -body.scrollHeight)
|
||||
break
|
||||
}
|
||||
}
|
||||
return
|
||||
case "keymap":
|
||||
if (target.tagName == "INPUT" && target.type == "text") {
|
||||
return
|
||||
@ -236,12 +285,6 @@ function onaction(event, action) {
|
||||
item.className = code.showmap? "keymap show": "keymap hide"
|
||||
})
|
||||
break
|
||||
case "j":
|
||||
window.scrollBy(0, context.scroll_by)
|
||||
break
|
||||
case "k":
|
||||
window.scrollBy(0, -context.scroll_by)
|
||||
break
|
||||
case "m":
|
||||
add_command()
|
||||
break
|
||||
@ -249,10 +292,10 @@ function onaction(event, action) {
|
||||
code.show_result = !code.show_result
|
||||
document.querySelectorAll("form.option input[name=cmd]").forEach(function(input) {
|
||||
for (var command = input; command.tagName != "FIELDSET"; command = command.parentElement) {}
|
||||
var result = command.querySelector("code.result pre")
|
||||
var append = command.querySelector("table.append")
|
||||
var result = command.querySelector("code.result pre")
|
||||
// append.style.display = (code.show_result||!append.querySelector("tr"))? "": "none"
|
||||
result.style.height = (code.show_result||result.innerText=="")? "": code.show_height
|
||||
append.style.display = (code.show_result||!append.querySelector("tr"))? "": "none"
|
||||
})
|
||||
break
|
||||
case "0":
|
||||
@ -367,13 +410,11 @@ function onaction(event, action) {
|
||||
result.innerHTML = ""
|
||||
break
|
||||
case "z":
|
||||
append.style.display = (result.style.height||!append.querySelector("tr"))? "": "none"
|
||||
// append.style.display = (result.style.height||!append.querySelector("tr"))? "": "none"
|
||||
result.style.height = result.style.height? "": code.show_height
|
||||
break
|
||||
case "x":
|
||||
target.value = ""
|
||||
append.innerHTML = ""
|
||||
result.innerHTML = ""
|
||||
result.style.height = result.style.height? "": "1px"
|
||||
break
|
||||
case "s":
|
||||
copy_to_clipboard(result.innerText)
|
||||
@ -457,6 +498,8 @@ function init_option() {
|
||||
case "g".charCodeAt(0):
|
||||
case "j".charCodeAt(0):
|
||||
case "k".charCodeAt(0):
|
||||
case "h".charCodeAt(0):
|
||||
case "l".charCodeAt(0):
|
||||
case "z".charCodeAt(0):
|
||||
case "m".charCodeAt(0):
|
||||
continue
|
||||
|
@ -99,7 +99,7 @@
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body onkeyup="return onaction(event, 'keymap')">
|
||||
<body onkeyup="return onaction(event, 'keymap')" onkeydown="return onaction(event, 'scroll')">
|
||||
{{end}}
|
||||
|
||||
{{define "void"}}{{end}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user