diff --git a/base/web/dream.go b/base/web/dream.go index 2dcdaf30..9cd98c35 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -20,7 +20,7 @@ func _dream_list(m *ice.Message) *ice.Message { m.Push(mdb.TYPE, val[mdb.TYPE]) m.Push(cli.STATUS, cli.START) m.PushButton("edit", "open", cli.STOP) - m.PushAnchor(strings.Split(m.MergePOD(value[mdb.NAME]), "?")[0]) + m.PushAnchor(strings.Split(m.MergePod(value[mdb.NAME]), "?")[0]) }) == nil { m.Push(mdb.TYPE, WORKER) m.Push(cli.STATUS, cli.STOP) @@ -33,8 +33,8 @@ func _dream_show(m *ice.Message, name string) { if !strings.Contains(name, "-") || !strings.HasPrefix(name, "20") { name = m.Time("20060102-") + kit.ReplaceAll(name, "-", "_") } - defer m.ProcessOpen(m.MergePOD(m.Option(mdb.NAME, name))) - defer m.Echo(m.MergePOD(m.Option(mdb.NAME, name))) + defer m.ProcessOpen(m.MergePod(m.Option(mdb.NAME, name))) + defer m.Echo(m.MergePod(m.Option(mdb.NAME, name))) // 任务目录 p := path.Join(m.Config(nfs.PATH), name) @@ -115,10 +115,10 @@ func init() { _dream_show(m, m.Option(mdb.NAME, kit.Select(path.Base(m.Option(nfs.REPOS)), m.Option(mdb.NAME)))) }}, "open": {Name: "open", Help: "打开", Hand: func(m *ice.Message, arg ...string) { - m.ProcessOpen(m.MergePOD(m.Option(mdb.NAME), "", "")) + m.ProcessOpen(m.MergePod(m.Option(mdb.NAME), "", "")) }}, "edit": {Name: "edit", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.ProcessOpen(m.MergePOD(m.Option(mdb.NAME)+"/cmd/web.code.vimer", "", "")) + m.ProcessOpen(m.MergePod(m.Option(mdb.NAME)+"/cmd/web.code.vimer", "", "")) }}, cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP) diff --git a/core/chat/website.go b/core/chat/website.go index fb659967..3ec14ec2 100644 --- a/core/chat/website.go +++ b/core/chat/website.go @@ -179,8 +179,8 @@ func _website_render(m *ice.Message, w http.ResponseWriter, r *http.Request, kin return true } func _website_search(m *ice.Message, kind, name, text string, arg ...string) { - m.Cmd(m.PrefixKey()).Table(func(index int, value map[string]string, head []string) { - m.PushSearch(value, mdb.TEXT, m.MergeURL2(path.Join("/chat/website", value[nfs.PATH]))) + m.Cmd(m.PrefixKey(), ice.OptionFields("")).Table(func(index int, value map[string]string, head []string) { + m.PushSearch(value, mdb.TEXT, m.MergeWebsite(value[nfs.PATH])) }) } @@ -216,13 +216,21 @@ func init() { }) }}, "show": {Hand: func(m *ice.Message, arg ...string) { + if text := m.Cmd(m.PrefixKey(), ice.PS+arg[0]).Append(mdb.TEXT); text != "" { + if res, ok := _website_parse(m, text, arg[1:]...); ok { + m.Echo(_website_template2, kit.Format(res)) + return + } + } if res, ok := _website_parse(m, m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])), arg[1:]...); ok { m.Echo(_website_template2, kit.Format(res)) } }}, "inner": {Hand: func(m *ice.Message, arg ...string) {}}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - _website_search(m, arg[0], arg[1], kit.Select("", arg, 2)) + if arg[0] == mdb.FOREACH && arg[1] == "" { + _website_search(m, arg[0], arg[1], kit.Select("", arg, 2)) + } }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.EchoIFrame(_website_url(m, strings.TrimPrefix(path.Join(arg[2], arg[1]), SRC_WEBSITE))) @@ -256,7 +264,7 @@ func init() { }}, }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { mdb.HashSelect(m, arg...).Table(func(index int, value map[string]string, head []string) { - m.PushAnchor(m.MergeLink(value[nfs.PATH])) + m.PushAnchor(m.MergeWebsite(value[nfs.PATH])) }) if len(arg) == 0 { m.Cmd(nfs.DIR, SRC_WEBSITE, func(f os.FileInfo, p string) { diff --git a/core/code/vimer.go b/core/code/vimer.go index 086ef79a..409f2492 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -37,7 +37,9 @@ func init() { m.Cmdy(TEMPLATE, nfs.DEFS) }}, mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - m.PushSearch(mdb.TYPE, "go", mdb.NAME, "src/main.go", mdb.TEXT, m.MergeURL2("/chat/cmd/web.code.vimer")) + if arg[0] == mdb.FOREACH && arg[1] == "" { + m.PushSearch(mdb.TYPE, "go", mdb.NAME, "src/main.go", mdb.TEXT, m.MergeCmd("")) + } }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch m.Option(ctx.ACTION) { diff --git a/core/team/plan.go b/core/team/plan.go index a838f702..1967f4ae 100644 --- a/core/team/plan.go +++ b/core/team/plan.go @@ -76,6 +76,11 @@ func init() { mdb.PLUGIN: {Name: "plugin extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) { _task_modify(m, arg[0], arg[1], arg[2:]...) }}, + mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { + if arg[0] == mdb.FOREACH && arg[1] == "" { + m.PushSearch(mdb.TYPE, "plan", mdb.NAME, "", mdb.TEXT, m.MergeCmd("")) + } + }}, ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { m.Option(ice.POD, m.Option("task.pod")) m.Option("task.pod", "") diff --git a/core/wiki/word.go b/core/wiki/word.go index 7b91030c..e19176b7 100644 --- a/core/wiki/word.go +++ b/core/wiki/word.go @@ -39,7 +39,9 @@ func init() { }, Commands: map[string]*ice.Command{ WORD: {Name: "word path=src/main.shy@key auto play", Help: "语言文字", Meta: kit.Dict(ice.DisplayLocal("")), Action: ice.MergeAction(map[string]*ice.Action{ mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - m.PushSearch(mdb.TYPE, "shy", mdb.NAME, "src/main.shy", mdb.TEXT, m.MergeURL2("/chat/cmd/web.wiki.word")) + if arg[0] == mdb.FOREACH && arg[1] == "" { + m.PushSearch(mdb.TYPE, "shy", mdb.NAME, "src/main.shy", mdb.TEXT, m.MergeCmd("")) + } m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { if arg[1] == "" { if value[mdb.TYPE] == SPARK { diff --git a/info.go b/info.go index 164eb1d7..c5c2d049 100644 --- a/info.go +++ b/info.go @@ -71,6 +71,7 @@ func FileKey(dir string) string { if Info.Make.Path != "" && strings.HasPrefix(dir, Info.Make.Path+PS) { dir = strings.TrimPrefix(dir, Info.Make.Path+PS) } + // println("what ", dir, kit.Path(""), Info.Make.Path) if strings.HasPrefix(dir, kit.Path("")+PS) { dir = strings.TrimPrefix(dir, kit.Path("")+PS) } diff --git a/misc.go b/misc.go index 03102a26..de7f635d 100644 --- a/misc.go +++ b/misc.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/csv" "net/url" + "path" "reflect" "strings" @@ -171,9 +172,24 @@ func (m *Message) MergeLink(url string, arg ...interface{}) string { func (m *Message) MergeURL2(url string, arg ...interface{}) string { return kit.MergeURL2(m.Option(MSG_USERWEB), url, arg...) } -func (m *Message) MergePOD(name string, arg ...interface{}) string { +func (m *Message) MergePod(name string, arg ...interface{}) string { return kit.MergePOD(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), name, arg...) } +func (m *Message) MergeCmd(name string, arg ...interface{}) string { + if name == "" { + name = m.PrefixKey() + } + if m.Option(MSG_USERPOD) == "" { + return kit.MergeURL2(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), path.Join("/chat/cmd", name)) + } + return kit.MergeURL2(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), path.Join("cmd", name), arg...) +} +func (m *Message) MergeWebsite(name string, arg ...interface{}) string { + if m.Option(MSG_USERPOD) == "" { + return kit.MergeURL2(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), path.Join("/chat/website", name)) + } + return kit.MergeURL2(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), path.Join("website", name), arg...) +} func (m *Message) cmd(arg ...interface{}) *Message { opts := map[string]interface{}{} diff --git a/misc/bash/grant.go b/misc/bash/grant.go index 10f5e88b..11b9530c 100644 --- a/misc/bash/grant.go +++ b/misc/bash/grant.go @@ -9,13 +9,27 @@ const GRANT = "grant" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - "grant": {Name: "grant sid auto", Help: "授权", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) > 0 { - if m.Confirm("grant "+arg[0]+"?") == ice.TRUE { - m.Cmdy(SESS, mdb.MODIFY, GRANT, m.Option(ice.MSG_USERNAME), ice.Option{mdb.HASH, arg[0]}) - } + "grant": {Name: "grant hash auto", Help: "授权", Action: ice.MergeAction(map[string]*ice.Action{ + "confirm": {Name: "confirm", Help: "同意", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(SESS, mdb.MODIFY, GRANT, m.Option(ice.MSG_USERNAME), ice.Option{mdb.HASH, m.Option("hash")}) + }}, + "revert": {Name: "confirm", Help: "撤销", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(SESS, mdb.MODIFY, GRANT, "", ice.Option{mdb.HASH, m.Option("hash")}) + }}, + "remove": {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(SESS, mdb.REMOVE, mdb.HASH, m.Option(mdb.HASH)) + }}, + }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if m.Cmdy(SESS, arg); len(arg) > 0 && m.Append("grant") == "" { + m.Process("_confirm", "授权设备") } - m.Cmdy(SESS, arg) + m.Table(func(index int, value map[string]string, head []string) { + if value["grant"] == "" { + m.PushButton("confirm", mdb.REMOVE) + } else { + m.PushButton("revert", mdb.REMOVE) + } + }) }}, }}) }