From 87daa0cf53b23b7b73fd0dbc8cbfeaf630fa8926 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Fri, 3 Sep 2021 20:51:35 +0800 Subject: [PATCH] opt cmd.go --- base/ctx/ctx.go | 2 +- base/ctx/message.go | 25 ++++++++++++++++++++++ base/web/serve.go | 3 +++ core/chat/cmd.go | 18 ++++++++++------ core/chat/header.go | 6 +----- core/chat/pod.go | 16 +++++++++++--- core/code/webpack.go | 6 ++++++ core/wiki/json.go | 50 ++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 111 insertions(+), 15 deletions(-) create mode 100644 base/ctx/message.go diff --git a/base/ctx/ctx.go b/base/ctx/ctx.go index c83a4767..4e1ace00 100644 --- a/base/ctx/ctx.go +++ b/base/ctx/ctx.go @@ -15,4 +15,4 @@ var Index = &ice.Context{Name: CTX, Help: "标准模块", Commands: map[string]* }}, }} -func init() { ice.Index.Register(Index, nil, CONTEXT, COMMAND, CONFIG) } +func init() { ice.Index.Register(Index, nil, CONTEXT, COMMAND, CONFIG, MESSAGE) } diff --git a/base/ctx/message.go b/base/ctx/message.go new file mode 100644 index 00000000..2a1fbff9 --- /dev/null +++ b/base/ctx/message.go @@ -0,0 +1,25 @@ +package ctx + +import ( + "reflect" + "strings" + + ice "shylinux.com/x/icebergs" + kit "shylinux.com/x/toolkits" +) + +const MESSAGE = "message" + +func init() { + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + MESSAGE: {Name: "message", Help: "消息", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + t := reflect.TypeOf(m) + for i := 0; i < t.NumMethod(); i++ { + method := t.Method(i) + p := kit.FileLine(method.Func.Interface(), 4) + m.Push(kit.MDB_NAME, method.Name) + m.Push(kit.MDB_TEXT, strings.Split(p, ice.ICEBERGS+"/")[1]) + } + }}, + }}) +} diff --git a/base/web/serve.go b/base/web/serve.go index c55ffad5..f1bc7cf3 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -90,6 +90,9 @@ func _serve_params(msg *ice.Message, path string) { msg.Logs("refer", ls[2], ls[3]) msg.Option(ls[2], ls[3]) } + case "pod": + msg.Logs("refer", ls[1], ls[2]) + msg.Option(ls[1], ls[2]) } } func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.ResponseWriter, r *http.Request) { diff --git a/core/chat/cmd.go b/core/chat/cmd.go index 9c3567aa..cd4beca2 100644 --- a/core/chat/cmd.go +++ b/core/chat/cmd.go @@ -40,14 +40,9 @@ func init() { return // 目录 } - if msg := m.Cmd(ctx.COMMAND, arg[0]); msg.Append("meta") != "" { - _cmd_render(m, arg[0], arg[1:]) - return // 命令 - } - switch p := path.Join(m.Conf(CMD, kit.META_PATH), path.Join(arg...)); kit.Ext(p) { case "svg": - _cmd_render(m, "web.wiki.draw", path.Dir(p)+"/", path.Base(p)) + _cmd_render(m, "web.wiki.draw", p) case "csv": _cmd_render(m, "web.wiki.data", p) case "json": @@ -57,6 +52,17 @@ func init() { case "go", "mod", "sum": _cmd_render(m, "web.code.inner", path.Dir(p)+"/", path.Base(p)) default: + if m.Option(cli.POD) != "" { + if m.PodCmd(ctx.COMMAND, arg[0]); m.Append("meta") != "" { + _cmd_render(m, arg[0], arg[1:]) + return // 远程命令 + } + } else { + if msg := m.Cmd(ctx.COMMAND, arg[0]); msg.Append("meta") != "" { + _cmd_render(m, arg[0], arg[1:]) + return // 本地命令 + } + } m.RenderDownload(p) } }}, diff --git a/core/chat/header.go b/core/chat/header.go index 193bc57c..64c2aa2b 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -1,13 +1,10 @@ package chat import ( - "path" - ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" @@ -112,8 +109,7 @@ func init() { m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(kit.MDB_NAME)) }}, "devops": {Name: "devops", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js")) - m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css")) + m.Cmdy(code.WEBPACK, "devops") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(TRANS, kit.Format(kit.Value(c.Commands[cmd].Meta, "_trans"))) diff --git a/core/chat/pod.go b/core/chat/pod.go index 6b6ec069..32035c24 100644 --- a/core/chat/pod.go +++ b/core/chat/pod.go @@ -1,6 +1,8 @@ package chat import ( + "path" + ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" @@ -20,17 +22,25 @@ func init() { m.Push("args", "") return } - m.Cmdy(ctx.COMMAND, arg[0]) + if !m.PodCmd(ctx.COMMAND, arg[0]) { + m.Cmdy(ctx.COMMAND, arg[0]) + } }}, cli.RUN: {Name: "command", Help: "执行", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(arg) + if !m.PodCmd(arg) { + m.Cmdy(arg) + } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if kit.Select("", arg, 0) == "" { _cmd_render(m, web.ROUTE) return } - m.RenderIndex(web.SERVE, ice.VOLCANOS) + if len(arg) == 1 { + m.RenderIndex(web.SERVE, ice.VOLCANOS) + return + } + m.Cmdy(m.Prefix("/cmd/"), path.Join(arg[2:]...)) }}, }, Configs: map[string]*ice.Config{ diff --git a/core/code/webpack.go b/core/code/webpack.go index c0911cf8..d9e280c0 100644 --- a/core/code/webpack.go +++ b/core/code/webpack.go @@ -90,6 +90,12 @@ func init() { m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "") m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "") }}, + "devops": {Name: "devops", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js")) + m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css")) + m.Cmd(nfs.COPY, _volcanos("page/cmd.css"), _volcanos("page/index.css"), _volcanos("page/cache.css")) + m.Cmd(nfs.COPY, _volcanos("page/cmd.js"), _volcanos("proto.js"), _volcanos("page/cache.js")) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(nfs.DIR_DEEP, true) m.Option(nfs.DIR_TYPE, nfs.CAT) diff --git a/core/wiki/json.go b/core/wiki/json.go index 91d379de..03619a09 100644 --- a/core/wiki/json.go +++ b/core/wiki/json.go @@ -1,11 +1,53 @@ package wiki import ( + "encoding/json" + ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/nfs" kit "shylinux.com/x/toolkits" ) +func _json_show(m *ice.Message, data interface{}) { + switch data := data.(type) { + case map[string]interface{}: + i := 0 + if m.Echo(`{`); len(data) > 0 { + m.Echo(`...`) + } + m.Echo(`
`) + for k, v := range data { + m.Echo(`
`) + m.Echo(`"%s": `, k) + _json_show(m, v) + if i++; i < len(data) { + m.Echo(",") + } + m.Echo("
") + } + m.Echo(`
`) + m.Echo("}") + case []interface{}: + if m.Echo(`[`); len(data) > 0 { + m.Echo(`...`) + } + m.Echo(`
`) + for i, v := range data { + _json_show(m, v) + if i < len(data)-1 { + m.Echo(",") + } + } + m.Echo(`
`) + m.Echo("]") + case string: + m.Echo(`"%v"`, data) + default: + m.Echo(`%v`, data) + } +} + const JSON = "json" func init() { @@ -20,6 +62,14 @@ func init() { nfs.SAVE: {Name: "save path text", Help: "保存", Hand: func(m *ice.Message, arg ...string) { _wiki_save(m, JSON, arg[0], arg[1]) }}, + cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { + var data interface{} + json.Unmarshal([]byte(m.Cmdx(arg)), &data) + m.Option("type", "json") + m.RenderTemplate(`
`) + _json_show(m, data) + m.Echo(`
`) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if !_wiki_list(m, JSON, kit.Select("./", arg, 0)) { m.Cmdy(nfs.CAT, arg[0])