1
0
forked from x/ContextOS

tce add code.scroll

This commit is contained in:
shaoying 2018-11-21 22:35:17 +08:00
parent 0c8debc6f9
commit 5302004d03
4 changed files with 107 additions and 60 deletions

View File

@ -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: "私钥文件"},

View File

@ -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)

View File

@ -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

View File

@ -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}}