1
0
forked from x/ContextOS
This commit is contained in:
shaoying 2018-12-08 21:30:46 +08:00
parent 927fc6e5db
commit 6c8439711e
7 changed files with 166 additions and 15 deletions

View File

@ -1,7 +1,7 @@
~stdio ~stdio
config load history.json history config load history.json history
~web ~web
config load web.json # config load web.json
~aaa ~aaa
login root root login root root

View File

@ -2257,6 +2257,15 @@ var CGI = template.FuncMap{
return template.HTML(str) return template.HTML(str)
}, },
"json": func(arg ...interface{}) interface{} {
if len(arg) == 0 {
return ""
}
b, _ := json.Marshal(arg[0])
return string(b)
},
"list": func(arg interface{}) interface{} { "list": func(arg interface{}) interface{} {
n := 0 n := 0
switch v := arg.(type) { switch v := arg.(type) {

View File

@ -227,8 +227,7 @@ func (web *WEB) Begin(m *ctx.Message, arg ...string) ctx.Server {
web.ServeMux = http.NewServeMux() web.ServeMux = http.NewServeMux()
web.Template = template.New("render").Funcs(ctx.CGI) web.Template = template.New("render").Funcs(ctx.CGI)
web.Template.ParseGlob(path.Join(m.Conf("template_dir"), "/*.tmpl")) template.Must(web.Template.ParseGlob(path.Join(m.Conf("template_dir"), m.Conf("template_sub"), "/*.tmpl")))
web.Template.ParseGlob(path.Join(m.Conf("template_dir"), m.Conf("template_sub"), "/*.tmpl"))
return web return web
} }
func (web *WEB) Start(m *ctx.Message, arg ...string) bool { func (web *WEB) Start(m *ctx.Message, arg ...string) bool {
@ -1079,8 +1078,12 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
if order != "" || (val["pre_run"] != nil && val["pre_run"].(bool)) { if order != "" || (val["pre_run"] != nil && val["pre_run"].(bool)) {
if val["componet_cmd"] != nil { if val["componet_cmd"] != nil {
if bench_share != "protected" { if bench_share != "protected" {
m.Confv("bench", []interface{}{m.Option("bench"), "commands", m.Option("componet_name_order")}, args[1:]) now := time.Now().Format(m.Conf("time_format"))
m.Confv("bench", []interface{}{m.Option("bench"), "modify_time"}, time.Now().Format(m.Conf("time_format"))) m.Confv("bench", []interface{}{m.Option("bench"), "commands", m.Option("componet_name_order")}, map[string]interface{}{
"cmd": args[1:],
"now": now,
})
m.Confv("bench", []interface{}{m.Option("bench"), "modify_time"}, now)
} }
msg.Cmd(args) msg.Cmd(args)

View File

@ -36,6 +36,7 @@ var Index = &ctx.Context{Name: "code", Help: "代码中心",
}, },
"index": []interface{}{ "index": []interface{}{
map[string]interface{}{"componet_name": "head", "template": "head"}, map[string]interface{}{"componet_name": "head", "template": "head"},
map[string]interface{}{"componet_name": "docker", "componet_help": "docker", "template": "docker"},
map[string]interface{}{"componet_name": "login", "componet_help": "login", "template": "componet", map[string]interface{}{"componet_name": "login", "componet_help": "login", "template": "componet",
"componet_ctx": "aaa", "componet_cmd": "login", "arguments": []interface{}{"@username", "@password"}, "componet_ctx": "aaa", "componet_cmd": "login", "arguments": []interface{}{"@username", "@password"},
"inputs": []interface{}{ "inputs": []interface{}{

View File

@ -87,7 +87,7 @@ function del_command(target) {
} }
} }
} }
function add_command() { function add_command(init) {
var name = "command"+code.ncommand++ var name = "command"+code.ncommand++
var fieldset = append_child(document.querySelector("body"), "fieldset") var fieldset = append_child(document.querySelector("body"), "fieldset")
@ -112,6 +112,21 @@ function add_command() {
add_sort(append_child(fieldset, "table", {"className": "append "+name})) add_sort(append_child(fieldset, "table", {"className": "append "+name}))
append_child(append_child(fieldset, "code", {"className": "result "+name}), "pre") append_child(append_child(fieldset, "code", {"className": "result "+name}), "pre")
if (init) {
return fieldset
}
var cmds = document.querySelector("div.workflow ul.cmd")
var cmd = append_child(cmds, "li", {
"innertText": code.ncommand+": ",
"className": name,
"dataset": {
"cmd": code.ncommand-1,
}
})
init_docker()
return fieldset return fieldset
} }
@ -124,6 +139,11 @@ function send_command(form, cb) {
data[form[i].name] = form[i].value data[form[i].name] = form[i].value
} }
var order = (data["componet_name_order"]||"")
var cmd = document.querySelector("div.workflow>ul>li>ul>li.command"+order)
var now = new Date()
cmd && (cmd.innerText = now.getFullYear()+"-"+(now.getMonth()+1)+"-"+now.getDay()+" "+now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" : "+order+" "+data["cmd"])
context.GET("", data, function(msg) { context.GET("", data, function(msg) {
msg = msg[0] msg = msg[0]
@ -261,11 +281,13 @@ function sort_table(table, index, sort_asc) {
return sort_order return sort_order
} }
function onaction(event, action) { function onaction(event, action, arg) {
var target = event.target var target = event.target
var dataset = target.dataset var dataset = target.dataset
switch (action) { switch (action) {
case "workflow":
break
case "scroll": case "scroll":
var body = document.getElementsByTagName("body")[0] var body = document.getElementsByTagName("body")[0]
if (target.tagName == "BODY") { if (target.tagName == "BODY") {
@ -692,15 +714,15 @@ function init_bench() {
if (bench.commands[""]) { if (bench.commands[""]) {
var option = document.querySelector("form.option.command") var option = document.querySelector("form.option.command")
var cmd = option.querySelector("input[name=cmd]") var cmd = option.querySelector("input[name=cmd]")
cmd.value = bench.commands[""].join(" ") cmd.value = bench.commands[""].cmd.join(" ")
check_option(option) check_option(option)
} }
for (var i = 1; i <= max; i++) { for (var i = 1; i <= max; i++) {
var fieldset = add_command() var fieldset = add_command(true)
if (bench.commands[i]) { if (bench.commands[i]) {
var cmd = fieldset.querySelector("input[name=cmd]") var cmd = fieldset.querySelector("input[name=cmd]")
cmd.value = bench.commands[i].join(" ") cmd.value = bench.commands[i].cmd.join(" ")
var option = fieldset.querySelector("form.option") var option = fieldset.querySelector("form.option")
check_option(option) check_option(option)
var option = fieldset.querySelector("form.option") var option = fieldset.querySelector("form.option")
@ -708,9 +730,58 @@ function init_bench() {
} }
} }
function init_control() { function init_docker() {
var option = document.querySelector("form.option.command") document.querySelectorAll("div.workflow").forEach(function(item) {
var append = document.querySelector("table.append.command") what = item
var moving = false
item.onclick = function(event) {
if (event.target != item) {
return
}
moving = !moving
}
item.onmousemove = function(event) {
if (event.target != item) {
return
}
if (moving) {
item.style.left = (item.offsetLeft+event.movementX)+"px"
item.style.top = (item.offsetTop+event.movementY)+"px"
}
}
})
document.querySelectorAll("div.workflow>span").forEach(function(item) {
item.onclick = function(event) {
item.dataset["hide"] = !right(item.dataset["hide"])
item.parentElement.className = right(item.dataset["hide"])? "workflow min": "workflow"
}
})
document.querySelectorAll("ul.docker>li>span").forEach(function(item) {
item.onclick = function(event) {
item.dataset["hide"] = !right(item.dataset["hide"])
item.nextElementSibling.style.display = right(item.dataset["hide"])? "none": ""
}
})
document.querySelectorAll("ul.docker>li>ul>li").forEach(function(item) {
item.onclick = function(event) {
var data = item.dataset
switch (data["action"]) {
case "create_fly":
location.search = ""
return
case "create_cmd":
add_command()
return
}
if (data["key"] && context.Search("bench") != data["key"]) {
context.Search("bench", data["key"])
return
}
var cmd = document.querySelector("form.option.command"+data["cmd"]+" input[name=cmd]")
cmd.focus()
}
})
} }
window.onload = function() { window.onload = function() {
@ -722,6 +793,6 @@ window.onload = function() {
init_command() init_command()
init_userinfo() init_userinfo()
init_bench() init_bench()
init_control() init_docker()
} }

View File

@ -174,3 +174,16 @@ function insert_button(which, value, callback) {
"type": "button", "value": value, "onclick": callback, "type": "button", "value": value, "onclick": callback,
}) })
} }
function right(arg) {
if (arg == "true") {
return true
}
if (arg == "false") {
return false
}
if (arg) {
return true
}
return false
}

View File

@ -21,6 +21,35 @@
} }
</style> </style>
<style> <style>
div.workflow {
position:fixed;
background-color:red;
top:200px;
left:20px;
width:40px;
height:20px;
overflow:hidden;
}
div.workflow:hover {
width:480px;
height:200px;
overflow:scroll;
}
div.workflow.min {
width:40px;
height:20px;
}
div.workflow ul.docker ul li {
}
div.workflow ul.docker ul li:hover {
background-color:green;
}
div.workflow ul.docker li span:hover {
background-color:green;
}
form.option div {
float:left;
}
textarea.clipboard { textarea.clipboard {
color:white; color:white;
background-color:#272822; background-color:#272822;
@ -124,7 +153,32 @@
</fieldset> </fieldset>
{{end}} {{end}}
{{define "docker"}}{{conf . bench}}{{end}} {{define "docker"}}
{{$key := option . "bench"}}
{{$bench := conf . "bench" $key}}
<script>var workflow = {{conf . "bench"}}</script>
<div class="workflow">
<span>flow</span>
<ul class="docker">
<li><span>工作流</span>
<ul class="fly">
<li data-action="create_fly">+ 创建工作流</li>
{{range $key, $item := conf . "bench"}}
<li data-key="{{$key}}">{{index $item "modify_time"}} {{index $item "comment"}}({{index $item "creator"}})</li>
{{end}}
</ul>
</li>
<li><span>命令行</span>
<ul class="cmd">
<li data-action="create_cmd">+ 创建命令行</li>
{{range $index, $cmd := index $bench "commands"}}
<li class="command{{$index}}" data-cmd="{{$index}}">{{index $cmd "now"|option}} {{$index}}: {{index $cmd "cmd"|option}}</li>
{{end}}
</ul>
</li>
</ul>
</div>
{{end}}
{{define "componet"}} {{define "componet"}}
<fieldset><legend title="{{option .Meta "componet_help"}}">{{option .Meta "componet_help"}}({{option .Meta "componet_ctx"}}.{{option .Meta "componet_cmd"}})</legend> <fieldset><legend title="{{option .Meta "componet_help"}}">{{option .Meta "componet_help"}}({{option .Meta "componet_ctx"}}.{{option .Meta "componet_cmd"}})</legend>