diff --git a/base/aaa/role.go b/base/aaa/role.go
index 90a80ba0..10e35d63 100644
--- a/base/aaa/role.go
+++ b/base/aaa/role.go
@@ -137,3 +137,12 @@ func init() {
func RoleRight(m *ice.Message, userrole string, arg ...string) bool {
return m.Cmdx(ROLE, RIGHT, userrole, arg) == ice.OK
}
+func RoleAction(cmds ...string) ice.Actions {
+ return ice.Actions{ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
+ m.Cmd(ROLE, WHITE, VOID, m.CommandKey())
+ m.Cmd(ROLE, WHITE, VOID, m.PrefixKey())
+ for _, cmd := range cmds {
+ m.Cmd(ROLE, WHITE, VOID, cmd)
+ }
+ }}}
+}
diff --git a/base/aaa/user.go b/base/aaa/user.go
index c1f6f5dc..f40fa2ae 100644
--- a/base/aaa/user.go
+++ b/base/aaa/user.go
@@ -85,6 +85,7 @@ func init() {
func UserRoot(m *ice.Message, arg ...string) *ice.Message { // password username userrole
username := m.Option(ice.MSG_USERNAME, kit.Select(ice.Info.UserName, arg, 1))
userrole := m.Option(ice.MSG_USERROLE, kit.Select(ROOT, arg, 2))
+ m.Option(ice.MSG_USERNICK, UserNick(m, username))
if len(arg) > 0 {
m.Cmd(USER, mdb.CREATE, username, kit.Select("", arg, 0), userrole)
ice.Info.UserName = username
diff --git a/base/ctx/command.go b/base/ctx/command.go
index 1a6b3791..2421ce98 100644
--- a/base/ctx/command.go
+++ b/base/ctx/command.go
@@ -87,10 +87,8 @@ const COMMAND = "command"
func init() {
Index.MergeCommands(ice.Commands{
- COMMAND: {Name: "command key auto", Help: "命令", Actions: ice.Actions{
+ COMMAND: {Name: "command key auto", Help: "命令", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(COMMAND))
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, COMMAND)
TravelCmd(m, func(key, file, line string) {
if strings.Contains(file, "icebergs") {
AddFileCmd(file, key)
@@ -114,7 +112,7 @@ func init() {
})
m.Cmd("nfs.save", "tags", m.Result())
}},
- }, Hand: func(m *ice.Message, arg ...string) {
+ }, aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 0 {
arg = append(arg, "")
}
diff --git a/base/lex/split.go b/base/lex/split.go
index 6416186a..b17c6a70 100644
--- a/base/lex/split.go
+++ b/base/lex/split.go
@@ -53,6 +53,8 @@ func _split_list(m *ice.Message, file string, arg ...string) ice.Map {
// 回调函数
ls := kit.Split(text, m.Option(SPLIT_SPACE), m.Option(SPLIT_BLOCK), m.Option(SPLIT_QUOTE), m.Option(SPLIT_TRANS))
switch cb := m.OptionCB(SPLIT).(type) {
+ case func(int, []string):
+ cb(deep, ls)
case func(int, []string) []string:
ls = cb(deep, ls)
case func(int, []string, ice.Map, ice.List):
diff --git a/base/mdb/list.go b/base/mdb/list.go
index 21730b17..06efb0bc 100644
--- a/base/mdb/list.go
+++ b/base/mdb/list.go
@@ -130,7 +130,7 @@ const LIST = "list"
func ListAction(args ...ice.Any) ice.Actions {
return ice.Actions{ice.CTX_INIT: AutoConfig(args...),
- INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ INPUTS: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INPUTS, m.PrefixKey(), "", LIST, ListArgs(m, arg))
}},
INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
diff --git a/base/nfs/tail.go b/base/nfs/tail.go
index 384a8332..2938c507 100644
--- a/base/nfs/tail.go
+++ b/base/nfs/tail.go
@@ -44,7 +44,7 @@ func init() {
m.Cmd(TAIL, mdb.CREATE, kit.SimpleKV("file,name", value))
})
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case FILE:
m.Cmdy(DIR, kit.Select(PWD, arg, 1), PATH).RenameAppend(PATH, FILE)
diff --git a/base/web/dream.go b/base/web/dream.go
index 58646b93..54a173ab 100644
--- a/base/web/dream.go
+++ b/base/web/dream.go
@@ -118,7 +118,7 @@ const DREAM = "dream"
func init() {
Index.MergeCommands(ice.Commands{
DREAM: {Name: "dream name path auto create", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case nfs.REPOS:
m.Cmd("web.code.git.server", func(value ice.Maps) {
diff --git a/base/web/option.go b/base/web/option.go
index e80f93fc..75d680c6 100644
--- a/base/web/option.go
+++ b/base/web/option.go
@@ -126,7 +126,7 @@ type Message interface {
func OptionAgentIs(m Message, arg ...string) bool {
for _, k := range arg {
- if strings.HasPrefix(m.Option(ice.MSG_USERUA), k) {
+ if strings.HasPrefix(strings.ToLower(m.Option(ice.MSG_USERUA)), k) {
return true
}
}
diff --git a/base/web/share.go b/base/web/share.go
index 1c37db9a..17117d33 100644
--- a/base/web/share.go
+++ b/base/web/share.go
@@ -148,7 +148,7 @@ func init() {
m.EchoQRCode(msg.Option(mdb.LINK))
m.ProcessInner()
}},
- }, mdb.HashAction(mdb.FIELD, "time,hash,userrole,username,river,storm,type,name,text", mdb.EXPIRE, "72h")), Hand: func(m *ice.Message, arg ...string) {
+ }, mdb.HashAction(mdb.FIELD, "time,hash,userrole,username,usernick,river,storm,type,name,text", mdb.EXPIRE, "72h")), Hand: func(m *ice.Message, arg ...string) {
if ctx.PodCmd(m, SHARE, arg) && m.Length() > 0 {
return
}
diff --git a/core/chat/action.go b/core/chat/action.go
index 98788e00..2fbbeb57 100644
--- a/core/chat/action.go
+++ b/core/chat/action.go
@@ -81,7 +81,6 @@ func init() {
Index.MergeCommands(ice.Commands{
web.P(ACTION): {Name: "/action river storm action arg...", Help: "工作台", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
m.Cmd(aaa.ROLE, aaa.BLACK, aaa.VOID, m.CommandKey(), ctx.ACTION)
}},
mdb.MODIFY: {Hand: func(m *ice.Message, arg ...string) {
@@ -90,7 +89,7 @@ func init() {
web.SHARE: {Hand: func(m *ice.Message, arg ...string) {
_action_share(m, arg...)
}},
- }, ctx.CmdAction(nfs.PATH, ice.USR_LOCAL_RIVER)), Hand: func(m *ice.Message, arg ...string) {
+ }, ctx.CmdAction(nfs.PATH, ice.USR_LOCAL_RIVER), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg) {
return
}
diff --git a/core/chat/chat.shy b/core/chat/chat.shy
index 6459c64e..0bd29b6a 100644
--- a/core/chat/chat.shy
+++ b/core/chat/chat.shy
@@ -4,19 +4,18 @@ header.go
action.go
search.go
footer.go
-
river.go
storm.go
template.go
-iframe.go
-sso.go
pod.go
cmd.go
div.go
website.go
topic.go
grant.go
+sso.go
+oauth
room.go
meet.go
@@ -25,8 +24,7 @@ paste.go
media.go
files.go
trans.go
-
+iframe.go
keyboard.go
location.go
location.shy
-oauth
diff --git a/core/chat/cmd.go b/core/chat/cmd.go
index 654864ba..c190c444 100644
--- a/core/chat/cmd.go
+++ b/core/chat/cmd.go
@@ -15,22 +15,17 @@ import (
func _cmd_file(m *ice.Message, arg ...string) bool {
switch p := path.Join(arg...); kit.Ext(p) {
+ case nfs.ZML:
+ web.RenderCmd(m, CAN_PARSE, m.Cmdx(nfs.CAT, p))
+ case nfs.IML:
+ m.RenderRedirect(web.MergePodWebSite(m, "", strings.TrimPrefix(p, SRC_WEBSITE)))
+ case nfs.SHY:
+ web.RenderCmd(m, "web.wiki.word", p)
+ case nfs.GO:
+ web.RenderCmd(m, ctx.GetFileCmd(p))
case nfs.JS:
m.Display(ctx.FileURI(p))
web.RenderCmd(m, kit.Select(ctx.CAN_PLUGIN, ctx.GetFileCmd(p)))
-
- case nfs.GO:
- web.RenderCmd(m, ctx.GetFileCmd(p))
-
- case nfs.SHY:
- web.RenderCmd(m, "web.wiki.word", p)
-
- case nfs.IML:
- m.RenderRedirect(web.MergePodWebSite(m, "", strings.TrimPrefix(p, SRC_WEBSITE)))
-
- case nfs.ZML:
- web.RenderCmd(m, "can.parse", m.Cmdx(nfs.CAT, p))
-
default:
if p = strings.TrimPrefix(p, ice.SRC+ice.PS); nfs.ExistsFile(m, path.Join(ice.SRC, p)) {
if msg := m.Cmd(mdb.RENDER, kit.Ext(p)); msg.Length() > 0 {
@@ -47,17 +42,9 @@ const CMD = "cmd"
func init() {
Index.MergeCommands(ice.Commands{
- CMD: {Name: "cmd path auto upload up home", Help: "命令", Actions: ice.MergeActions(ice.Actions{
- ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, CMD)
- m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.SVG, mdb.NAME, "web.wiki.draw")
- m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.CSV, mdb.NAME, "web.wiki.data")
- m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.JSON, mdb.NAME, "web.wiki.json")
- for _, k := range []string{"mod", "sum"} {
- m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, k, mdb.NAME, "web.code.inner")
- }
- }},
- }, mdb.HashAction(mdb.SHORT, mdb.TYPE, nfs.PATH, nfs.PWD), ctx.CmdAction(), web.ApiAction()), Hand: func(m *ice.Message, arg ...string) {
+ CMD: {Name: "cmd path auto upload up home", Help: "命令", Actions: ice.MergeActions(
+ mdb.HashAction(mdb.SHORT, mdb.TYPE, nfs.PATH, nfs.PWD), ctx.CmdAction(), web.ApiAction(), aaa.RoleAction(),
+ ), Hand: func(m *ice.Message, arg ...string) {
if _cmd_file(m, arg...) {
return
}
diff --git a/core/chat/div.go b/core/chat/div.go
index 1d12c9e1..46f60ad9 100644
--- a/core/chat/div.go
+++ b/core/chat/div.go
@@ -25,13 +25,8 @@ func _div_parse(m *ice.Message, text string) string {
const DIV = "div"
func init() {
- Index.Merge(&ice.Context{Configs: ice.Configs{
- DIV: {Name: "div", Help: "定制", Value: kit.Data(
- mdb.FIELD, "time,hash,type,name,text", nfs.PATH, ice.USR_PUBLISH,
- nfs.TEMPLATE, _div_template,
- )},
- }, Commands: ice.Commands{
- "/div/": {Name: "/div/", Help: "定制", Actions: ice.MergeActions(ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
+ Index.MergeCommands(ice.Commands{
+ web.PP(DIV): {Name: "/div/", Help: "定制", Actions: ice.MergeActions(ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
switch p := path.Join(arg...); kit.Ext(kit.Select("", p)) {
case nfs.HTML:
m.RenderDownload(p)
@@ -46,10 +41,7 @@ func init() {
}
}},
DIV: {Name: "div hash auto import", Help: "定制", Actions: ice.MergeActions(ice.Actions{
- lex.SPLIT: {Name: "split name=hi text", Help: "生成", Hand: func(m *ice.Message, arg ...string) {
- m.ProcessRewrite(mdb.HASH, m.Cmdx(DIV, mdb.CREATE, m.OptionSimple(mdb.NAME), mdb.TEXT, _div_parse(m, m.Option(mdb.TEXT))))
- }},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case nfs.PATH:
m.Cmdy(nfs.DIR, arg[1:]).ProcessAgain()
@@ -62,16 +54,11 @@ func init() {
m.Push(arg[0], "output")
}
}},
- mdb.CREATE: {Name: "create type=page name=hi text", Help: "创建"},
- mdb.IMPORT: {Name: "import path=src/", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(nfs.DIR, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH)), func(p string) {
- switch kit.Ext(p) {
- case nfs.SHY:
- m.Cmd(m.PrefixKey(), lex.SPLIT, mdb.NAME, p, mdb.TEXT, m.Cmdx(nfs.CAT, p))
- }
- })
+ mdb.CREATE: {Name: "create type=page name=hi text"},
+ lex.SPLIT: {Name: "split name=hi text", Help: "生成", Hand: func(m *ice.Message, arg ...string) {
+ m.ProcessRewrite(mdb.HASH, m.Cmdx(DIV, mdb.CREATE, m.OptionSimple(mdb.NAME), mdb.TEXT, _div_parse(m, m.Option(mdb.TEXT))))
}},
- }, mdb.HashAction(), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
+ }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text", nfs.PATH, ice.USR_PUBLISH, nfs.TEMPLATE, _div_template), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
switch kit.Ext(kit.Select("", arg, 0)) {
case nfs.SHY:
m.Fields(0)
@@ -79,25 +66,25 @@ func init() {
ctx.DisplayLocal(m, "")
default:
if mdb.HashSelect(m, arg...); len(arg) > 0 {
- m.Action("添加", "保存")
+ m.StatusTime(mdb.LINK, web.MergeURL2(m, "/chat/div/"+arg[0])).Action("添加", "保存")
ctx.DisplayLocal(m, "")
- m.StatusTime(mdb.LINK, web.MergeURL2(m, "/chat/div/"+arg[0]))
} else {
m.Action(lex.SPLIT, mdb.CREATE)
}
}
}},
- }})
+ })
}
var _div_template = `
+
volcanos
-
+
@@ -105,9 +92,9 @@ var _div_template = `
`
-
var _div_template2 = `
+
volcanos
@@ -117,6 +104,6 @@ var _div_template2 = `
-
+
`
diff --git a/core/chat/footer.go b/core/chat/footer.go
index 1a6e01ae..14d7a3b5 100644
--- a/core/chat/footer.go
+++ b/core/chat/footer.go
@@ -8,17 +8,12 @@ import (
"shylinux.com/x/icebergs/base/web"
)
-const (
- EMAIL = "email"
-)
const FOOTER = "footer"
func init() {
+ const EMAIL = "email"
Index.MergeCommands(ice.Commands{
- web.P(FOOTER): {Name: "footer", Help: "状态栏", Actions: ice.MergeActions(ice.Actions{
- ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
- }},
+ web.P(FOOTER): {Name: "/footer", Help: "状态栏", Actions: ice.MergeActions(ice.Actions{
ice.RUN: {Hand: func(m *ice.Message, arg ...string) {
if aaa.Right(m, arg) {
if m.Cmdy(arg); m.IsErrNotFound() {
@@ -26,7 +21,7 @@ func init() {
}
}
}},
- }, ctx.CmdAction(EMAIL, `shylinuxc@gmail.com`)), Hand: func(m *ice.Message, arg ...string) {
+ }, ctx.CmdAction(EMAIL, `shylinuxc@gmail.com`), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
m.Result(m.Configv(EMAIL))
}},
})
diff --git a/core/chat/grant.go b/core/chat/grant.go
index 8d84bc08..25b3e98d 100644
--- a/core/chat/grant.go
+++ b/core/chat/grant.go
@@ -12,7 +12,7 @@ const GRANT = "grant"
func init() {
Index.MergeCommands(ice.Commands{
GRANT: {Name: "grant space id auto insert", Help: "授权", Actions: ice.MergeActions(ice.Actions{
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case web.SPACE:
m.Cmdy(web.SPACE).RenameAppend(mdb.NAME, web.SPACE).Cut("space,type")
@@ -24,7 +24,7 @@ func init() {
m.Push(arg[0], m.Option(ice.MSG_USERNAME))
}
}},
- mdb.INSERT: {Name: "insert space grant userrole username", Help: "添加"},
+ mdb.INSERT: {Name: "insert space grant userrole username"},
}, mdb.ZoneAction(mdb.SHORT, web.SPACE, mdb.FIELD, "time,grant,userrole,username"))},
})
}
diff --git a/core/chat/header.go b/core/chat/header.go
index 79c037cf..9035a09e 100644
--- a/core/chat/header.go
+++ b/core/chat/header.go
@@ -80,9 +80,6 @@ func init() {
m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg)
}},
web.P(HEADER): {Name: "/header", Help: "标题栏", Actions: ice.MergeActions(ice.Actions{
- ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
- }},
aaa.LOGIN: {Hand: func(m *ice.Message, arg ...string) {
if aaa.UserLogin(m, arg[0], arg[1]) {
web.RenderCookie(m, aaa.SessCreate(m, arg[0]))
@@ -95,7 +92,8 @@ func init() {
aaa.BACKGROUND: {Hand: func(m *ice.Message, arg ...string) { _header_users(m, arg...) }},
aaa.AVATAR: {Hand: func(m *ice.Message, arg ...string) { _header_users(m, arg...) }},
web.SHARE: {Hand: func(m *ice.Message, arg ...string) { _header_share(m, arg...) }},
- }, ctx.ConfAction(aaa.LOGIN, kit.List("密码登录", "扫码授权"))), Hand: func(m *ice.Message, arg ...string) {
+ "webpack": {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("webpack", "build") }},
+ }, ctx.ConfAction(aaa.LOGIN, kit.List("密码登录", "扫码授权")), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
if gdb.Event(m, HEADER_AGENT); !_header_check(m, arg...) {
return
}
diff --git a/core/chat/keyboard.go b/core/chat/keyboard.go
index 858502d6..a16e7c49 100644
--- a/core/chat/keyboard.go
+++ b/core/chat/keyboard.go
@@ -16,7 +16,7 @@ func init() {
"_refresh": {Name: "refresh", Help: "刷新", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(web.SPACE, m.Option(web.SPACE), "refresh")
}},
- "inputs": {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {}},
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {}},
"input": {Name: "input", Help: "刷新", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(web.SPACE, m.Option(web.SPACE), "input", arg)
ctx.ProcessHold(m)
diff --git a/core/chat/pod.go b/core/chat/pod.go
index 2bf38582..325851ad 100644
--- a/core/chat/pod.go
+++ b/core/chat/pod.go
@@ -17,33 +17,25 @@ const POD = "pod"
func init() {
Index.MergeCommands(ice.Commands{
- POD: {Name: "pod", Help: "节点", Actions: ice.MergeActions(ice.Actions{
- ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, POD) }},
- }, ctx.CmdAction(), web.ApiAction()), Hand: func(m *ice.Message, arg ...string) {
- if web.OptionAgentIs(m, "curl", "Wget") {
- aaa.UserRoot(m)
- m.Option(ice.POD, kit.Select("", arg, 0))
- m.Cmdy(web.SHARE_LOCAL, ice.BIN_ICE_BIN)
- return // 下载程序
+ web.PP(POD): {Name: "/pod/", Help: "节点", Actions: ice.MergeActions(ctx.CmdAction(), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
+ if web.OptionAgentIs(m, "curl", "wget") {
+ aaa.UserRoot(m).Cmdy(web.SHARE_LOCAL, ice.BIN_ICE_BIN, kit.Dict(ice.POD, kit.Select("", arg, 0)))
+ return
}
-
if len(arg) == 0 || kit.Select("", arg, 0) == "" {
- web.RenderCmd(m, web.ROUTE) // 节点列表
-
+ web.RenderCmd(m, web.ROUTE)
} else if len(arg) == 1 {
if m.Cmd(web.SPACE, arg[0]).Length() == 0 && !strings.Contains(arg[0], ice.PT) {
- m.Cmd(web.DREAM, cli.START, mdb.NAME, arg[0]) // 启动节点
+ m.Cmd(web.DREAM, cli.START, mdb.NAME, arg[0])
}
aaa.UserRoot(m)
if web.RenderWebsite(m, arg[0], ice.INDEX_IML, "Header", "", "River", "", "Footer", ""); m.Result() == "" {
- web.RenderIndex(m, ice.VOLCANOS) // 节点首页
+ web.RenderIndex(m, ice.VOLCANOS)
}
-
} else if arg[1] == CMD {
- m.Cmdy(web.SPACE, arg[0], m.Prefix(CMD), path.Join(arg[2:]...)) // 节点命令
-
+ m.Cmdy(web.SPACE, arg[0], m.Prefix(CMD), path.Join(arg[2:]...))
} else if arg[1] == WEBSITE {
- web.RenderWebsite(m, arg[0], path.Join(arg[2:]...)) // 节点网页
+ web.RenderWebsite(m, arg[0], path.Join(arg[2:]...))
}
}},
})
diff --git a/core/chat/river.go b/core/chat/river.go
index 1be01462..55a1a1bb 100644
--- a/core/chat/river.go
+++ b/core/chat/river.go
@@ -41,7 +41,6 @@ func init() {
Index.MergeCommands(ice.Commands{
web.P(RIVER): {Name: "/river hash auto create", Help: "群组", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
m.Cmd(aaa.ROLE, aaa.BLACK, aaa.VOID, m.CommandKey(), ctx.ACTION)
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
@@ -65,7 +64,7 @@ func init() {
m.Cmd(mdb.EXPORT, m.Prefix(RIVER), "", mdb.HASH)
m.Cmd(mdb.IMPORT, m.Prefix(RIVER), "", mdb.HASH)
}},
- }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,template")), Hand: func(m *ice.Message, arg ...string) {
+ }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,template"), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) {
m.RenderStatusUnauthorized()
return
diff --git a/core/chat/sso.go b/core/chat/sso.go
index e70864ce..32b58990 100644
--- a/core/chat/sso.go
+++ b/core/chat/sso.go
@@ -13,9 +13,7 @@ const SSO = "sso"
func init() {
Index.MergeCommands(ice.Commands{
- web.P(SSO): {Name: "/sso", Help: "登录", Actions: ice.Actions{
- ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, SSO) }},
- }, Hand: func(m *ice.Message, arg ...string) {
+ web.P(SSO): {Name: "/sso", Help: "授权", Actions: aaa.RoleAction(), Hand: func(m *ice.Message, arg ...string) {
if m.Option(ice.MSG_USERNAME) == "" {
web.RenderIndex(m, ice.VOLCANOS)
return
diff --git a/core/chat/topic.go b/core/chat/topic.go
index 95366123..443565a8 100644
--- a/core/chat/topic.go
+++ b/core/chat/topic.go
@@ -5,6 +5,7 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
+ "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
@@ -15,20 +16,12 @@ const TOPIC = "topic"
func init() {
form := ice.Map{
- "body.background": ice.Map{
- mdb.TYPE: "text", mdb.NAME: "background", mdb.VALUE: "black",
- },
- "header.height": ice.Map{
- "tags": "panel.Header,panel.Header>div.output",
- mdb.TYPE: "text", mdb.NAME: "height", mdb.VALUE: "31",
- },
+ "body.background": ice.Map{mdb.TYPE: "text", mdb.NAME: "background", mdb.VALUE: "black"},
+ "header.height": ice.Map{"tags": "panel.Header,panel.Header>div.output", mdb.TYPE: "text", mdb.NAME: "height", mdb.VALUE: "31"},
}
Index.MergeCommands(ice.Commands{
TOPIC: {Name: "topic zone id auto create insert", Help: "主题", Actions: ice.MergeActions(ice.Actions{
- ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, TOPIC)
- }},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case "tags":
for k := range form {
@@ -58,11 +51,56 @@ func init() {
}
m.Cmdy(mdb.INPUTS, m.PrefixKey(), "", mdb.ZONE, arg)
}},
+ "create": {Name: "create topic=demo hover=gray float=lightgray color=black background=white", Hand: func(m *ice.Message, arg ...string) {
+ m.Cmd(nfs.SAVE, path.Join("src/website/topic/"+m.Option("topic")+".css"), kit.Renders(_topic_template, m))
+ }},
+ "form": {Name: "form", Help: "表单", Hand: func(m *ice.Message, arg ...string) {
+ m.Cmd(m.CommandKey(), m.Option(mdb.ZONE), func(value ice.Maps) {
+ tags, _ := form[value["tags"]]
+ m.Push("tags", value["tags"])
+ m.Push("type", kit.Select(kit.Format(kit.Value(tags, "type")), value["type"]))
+ m.Push("name", kit.Select(kit.Format(kit.Value(tags, "name")), value["name"]))
+ m.Push("value", kit.Select(kit.Format(kit.Value(tags, "value")), value["value"]))
+ })
+ kit.Fetch(form, func(k string, v ice.Map) {
+ m.Push("tags", k)
+ m.Push("", v, kit.Split("type,name,value"))
+ })
+ m.EchoButton("submit")
+ }},
+ "submit": {Name: "form zone", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
+ m.Echo("done")
+ }},
"choose": {Name: "choose", Help: "切换", Hand: func(m *ice.Message, arg ...string) {
m.ProcessLocation(web.MergeURL2(m, "", "topic", kit.TrimExt(m.Option(mdb.ZONE), nfs.CSS)))
}},
- "create": {Name: "create topic=demo hover=gray float=lightgray color=black background=white", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
- buf, err := kit.Render(`
+ }, mdb.ZoneAction(mdb.FIELD, "time,id,tags,type,name,value"), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
+ if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
+ m.Cmd(nfs.DIR, nfs.PWD, ice.OptionFields(), kit.Dict(nfs.DIR_ROOT, "src/website/topic/")).RenameAppend(nfs.PATH, mdb.ZONE, nfs.SIZE, mdb.COUNT).Tables(func(values ice.Maps) {
+ m.Push("", values)
+ })
+ m.PushAction("choose", "form", mdb.REMOVE)
+ } else {
+ if p := "src/website/topic/" + arg[0]; nfs.ExistsFile(m, p) {
+ m.Cmdy(nfs.CAT, p)
+ } else {
+ m.Tables(func(value ice.Maps) {
+ m.Echo("body.%s %s { %s:%s }\n", arg[0], value["tag"], value[mdb.NAME], value[mdb.VALUE])
+ })
+ }
+ }
+ }},
+ web.PP(TOPIC): {Name: "/topic/", Help: "主题", Hand: func(m *ice.Message, arg ...string) {
+ if p := "src/website/topic/" + arg[0]; nfs.ExistsFile(m, p) {
+ m.RenderDownload(p)
+ return
+ }
+ m.Cmdy("", kit.TrimExt(kit.Select(cli.BLACK, arg, 0), nfs.CSS)).RenderResult().W.Header()[web.ContentType] = kit.Simple(web.ContentCSS)
+ }},
+ })
+}
+
+var _topic_template = `
body.{{.Option "topic"}} { background-color:{{.Option "background" }}; color:{{.Option "color" }}; }
body.{{.Option "topic"}} legend { background-color:{{.Option "hover" }}; color:{{.Option "color" }}; }
body.{{.Option "topic"}} select { background-color:{{.Option "background" }}; color:{{.Option "color" }}; }
@@ -103,51 +141,4 @@ body.{{.Option "topic"}} table.content td.select { background-color:{{.Option "h
body.{{.Option "topic"}} fieldset.plugin:hover { box-shadow:12px 12px 12px 6px {{.Option "float" }}; }
body.{{.Option "topic"}} fieldset.story:hover { box-shadow:12px 12px 12px 6px {{.Option "float" }}; }
body.{{.Option "topic"}} fieldset.panel.Header>div.output div:hover { background-color:{{.Option "float" }}; }
-`, m)
- m.Assert(err)
- m.Cmd(nfs.SAVE, path.Join("src/website/topic/"+m.Option("topic")+".css"), string(buf))
- }},
- "form": {Name: "form", Help: "表单", Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(m.CommandKey(), m.Option(mdb.ZONE), func(value ice.Maps) {
- tags, _ := form[value["tags"]]
- m.Push("tags", value["tags"])
- m.Push("type", kit.Select(kit.Format(kit.Value(tags, "type")), value["type"]))
- m.Push("name", kit.Select(kit.Format(kit.Value(tags, "name")), value["name"]))
- m.Push("value", kit.Select(kit.Format(kit.Value(tags, "value")), value["value"]))
- })
- kit.Fetch(form, func(k string, v ice.Map) {
- m.Push("tags", k)
- m.Push("", v, kit.Split("type,name,value"))
- })
- m.EchoButton("submit")
- }},
- "submit": {Name: "form zone", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
- m.Echo("dome")
- }},
- }, mdb.ZoneAction(mdb.SHORT, "zone", mdb.FIELD, "time,id,tags,type,name,value")), Hand: func(m *ice.Message, arg ...string) {
- if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
- m.Cmd(nfs.DIR, nfs.PWD, ice.OptionFields(), kit.Dict(nfs.DIR_ROOT, "src/website/topic/")).RenameAppend(nfs.PATH, mdb.ZONE, nfs.SIZE, mdb.COUNT).Tables(func(values ice.Maps) {
- m.Push("", values)
- })
- m.PushAction("choose", "form", mdb.REMOVE)
- } else {
- if p := "src/website/topic/" + arg[0]; nfs.ExistsFile(m, p) {
- m.Cmdy(nfs.CAT, p)
- } else {
- m.Tables(func(value ice.Maps) {
- m.Echo("body.%s %s { %s:%s }\n", arg[0], value["tag"], value["name"], value["value"])
- })
- }
- }
- }},
- "/topic/": {Name: "/topic/", Help: "主题", Hand: func(m *ice.Message, arg ...string) {
- if p := "src/website/topic/" + arg[0]; nfs.ExistsFile(m, p) {
- m.RenderDownload(p)
- return
- }
- m.Cmdy(m.CommandKey(), kit.TrimExt(kit.Select("black", arg, 0), nfs.CSS))
- m.W.Header()[web.ContentType] = kit.Simple(web.ContentCSS)
- m.RenderResult()
- }},
- })
-}
+`
diff --git a/core/chat/website.go b/core/chat/website.go
index 0ef33c61..e5eae6dd 100644
--- a/core/chat/website.go
+++ b/core/chat/website.go
@@ -2,7 +2,6 @@ package chat
import (
"net/http"
- "os"
"path"
"strings"
@@ -42,14 +41,14 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
), kit.Dict(), kit.Dict()
nriver, nstorm, prefix := 0, 0, ""
- m.Cmd(lex.SPLIT, "", mdb.KEY, mdb.NAME, kit.Dict(nfs.CAT_CONTENT, text), func(deep int, ls []string) []string {
+ m.Cmd(lex.SPLIT, "", mdb.KEY, mdb.NAME, kit.Dict(nfs.CAT_CONTENT, text), func(deep int, ls []string) {
if deep == 1 {
switch ls[0] {
case HEADER, RIVER, FOOTER:
for i := 1; i < len(ls); i += 2 {
kit.Value(river, kit.Keys(ls[0], ls[i]), ls[i+1])
}
- return ls
+ return
}
}
@@ -59,10 +58,10 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
ls[0], data[ctx.DISPLAY] = kit.Select(ctx.CAN_PLUGIN, ctx.GetFileCmd(ls[0])), ctx.FileURI(ls[0])
case nfs.GO:
ls[0] = ctx.GetFileCmd(ls[0])
- case nfs.SH:
- ls[0], data[ctx.ARGS] = "web.code.sh.sh", ls[0]
case nfs.SHY:
ls[0], data[ctx.ARGS] = "web.wiki.word", ls[0]
+ case nfs.SH:
+ ls[0], data[ctx.ARGS] = "web.code.sh.sh", ls[0]
case nfs.PY:
ls[0], data[ctx.ARGS] = "web.code.sh.py", ls[0]
case "~":
@@ -72,11 +71,11 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
for _, v := range ls[1:] {
last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.INDEX, kit.Keys(prefix, v)))
}
- return ls
+ return
}
if ls[0] == "" {
- return ls
+ return
} else if len(ls) == 1 && deep > 2 {
ls = append(ls, m.Cmd(ctx.COMMAND, ls[0]).Append(mdb.HELP))
} else if len(ls) == 1 {
@@ -115,7 +114,6 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
default:
last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.NAME, kit.Select(ls[0], data[mdb.NAME]), mdb.HELP, ls[1], mdb.INDEX, ls[0], data))
}
- return ls
})
return river, true
}
@@ -123,7 +121,7 @@ func _website_render(m *ice.Message, w http.ResponseWriter, r *http.Request, kin
msg := m.Spawn(w, r)
switch kind {
case nfs.ZML:
- web.RenderCmd(msg, "can.parse", text, name)
+ web.RenderCmd(msg, CAN_PARSE, text, name)
case nfs.IML:
res, _ := _website_parse(msg, text)
msg.RenderResult(_website_template2, kit.Format(res))
@@ -134,10 +132,10 @@ func _website_render(m *ice.Message, w http.ResponseWriter, r *http.Request, kin
r.URL.Path = "/chat/cmd/web.chat.div"
return false
}
- case nfs.JSON:
- msg.RenderResult(_website_template2, kit.Format(kit.UnMarshal(text)))
case nfs.JS:
msg.RenderResult(_website_template, text)
+ case nfs.JSON:
+ msg.RenderResult(_website_template2, kit.Format(kit.UnMarshal(text)))
case nfs.HTML:
msg.RenderResult(text)
case nfs.SVG:
@@ -148,13 +146,9 @@ func _website_render(m *ice.Message, w http.ResponseWriter, r *http.Request, kin
web.Render(msg, msg.Option(ice.MSG_OUTPUT), msg.Optionv(ice.MSG_ARGS).([]ice.Any)...)
return true
}
-func _website_search(m *ice.Message, kind, name, text string, arg ...string) {
- m.Cmd(m.PrefixKey(), ice.OptionFields(""), func(value ice.Maps) {
- m.PushSearch(value, mdb.TEXT, web.MergePodWebSite(m, "", value[nfs.PATH]))
- })
-}
const (
+ CAN_PARSE = "can.parse"
SRC_WEBSITE = "src/website/"
CHAT_WEBSITE = "/chat/website/"
)
@@ -164,17 +158,14 @@ func init() {
Index.MergeCommands(ice.Commands{
WEBSITE: {Name: "website path auto create import", Help: "网站", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(mdb.RENDER, mdb.CREATE, nfs.TXT, m.PrefixKey())
- m.Cmd(mdb.ENGINE, mdb.CREATE, nfs.TXT, m.PrefixKey())
m.Cmd(mdb.RENDER, mdb.CREATE, nfs.IML, m.PrefixKey())
m.Cmd(mdb.ENGINE, mdb.CREATE, nfs.IML, m.PrefixKey())
- m.Cmd(aaa.ROLE, aaa.WHITE, WEBSITE)
web.AddRewrite(func(w http.ResponseWriter, r *http.Request) bool {
if r.Method != http.MethodGet {
return false
}
- if strings.HasSuffix(r.URL.Path, "/") {
+ if strings.HasSuffix(r.URL.Path, ice.PS) {
return false
}
if !strings.HasPrefix(r.Header.Get(web.UserAgent), "Mozilla") {
@@ -194,15 +185,13 @@ func init() {
}},
lex.PARSE: {Hand: func(m *ice.Message, arg ...string) {
switch kit.Ext(arg[0]) {
- case nfs.ZML: // 前端解析
- web.RenderCmd(m, "can.parse", m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])))
-
- case nfs.IML: // 文件解析
+ case nfs.ZML:
+ web.RenderCmd(m, CAN_PARSE, m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])))
+ case nfs.IML:
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))
}
-
- default: // 缓存解析
+ default:
if text := m.CmdAppend("", path.Join(ice.PS, arg[0]), mdb.TEXT); text != "" {
if res, ok := _website_parse(m, text, arg[1:]...); ok {
m.Echo(_website_template2, kit.Format(res))
@@ -210,7 +199,7 @@ func init() {
}
}
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch m.Option(ctx.ACTION) {
case mdb.CREATE:
mdb.HashInputs(m, arg)
@@ -221,8 +210,8 @@ func init() {
m.Cmdy(nfs.DIR, arg[1:]).ProcessAgain()
}
}},
- mdb.CREATE: {Name: "create path type=iml,zml,json,js,html name text", Help: "创建"},
- mdb.IMPORT: {Name: "import path=src/website/", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
+ mdb.CREATE: {Name: "create path type=zml,iml,json,js,html name text"},
+ mdb.IMPORT: {Name: "import path=src/website/", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.DIR, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH)), func(p string) {
switch name := strings.TrimPrefix(p, m.Option(nfs.PATH)); kit.Ext(p) {
case nfs.HTML, nfs.JS, nfs.JSON, nfs.ZML, nfs.IML, nfs.TXT:
@@ -242,29 +231,8 @@ func init() {
m.Echo(_website_url(m, strings.TrimPrefix(path.Join(arg[2], arg[1]), SRC_WEBSITE)))
}
}},
- }, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path,type,name,text"), ctx.CmdAction(), web.ApiAction()), Hand: func(m *ice.Message, arg ...string) {
+ }, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path,type,name,text"), ctx.CmdAction(), web.ApiAction(), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) { m.PushAnchor(web.MergePodWebSite(m, "", value[nfs.PATH])) })
- if len(arg) == 0 { // 文件列表
- m.Cmd(nfs.DIR, SRC_WEBSITE, func(f os.FileInfo, p string) {
- m.Push("", kit.Dict(
- mdb.TIME, f.ModTime().Format(ice.MOD_TIME),
- nfs.PATH, ice.PS+strings.TrimPrefix(p, SRC_WEBSITE),
- mdb.TYPE, kit.Ext(p), mdb.NAME, path.Base(p), mdb.TEXT, m.Cmdx(nfs.CAT, p),
- ), kit.Split(m.Config(mdb.FIELD))).PushButton("")
- m.PushAnchor(web.MergeURL2(m, path.Join(CHAT_WEBSITE, strings.TrimPrefix(p, SRC_WEBSITE))))
- }).Sort(nfs.PATH)
- }
- p := path.Join(SRC_WEBSITE, path.Join(arg...))
- if m.Length() == 0 && len(arg) > 0 && !strings.HasSuffix(arg[0], ice.PS) && nfs.ExistsFile(m, p) { // 文件详情
- m.Push(mdb.TYPE, kit.Ext(p))
- m.Push(mdb.TEXT, m.Cmdx(nfs.CAT, p))
- m.Push(nfs.PATH, path.Join(CHAT_WEBSITE, path.Join(arg...)))
- m.PushAnchor(web.MergeLink(m, m.Append(nfs.PATH)))
- }
- if m.Length() > 0 && len(arg) > 0 { // 文件预览
- m.PushQRCode(mdb.SCAN, web.MergeURL2(m, m.Append(nfs.PATH)))
- m.EchoIFrame(m.Append(nfs.PATH))
- }
}},
})
}
@@ -284,7 +252,6 @@ var _website_template = `
`
-
var _website_template2 = `
diff --git a/core/code/autogen.go b/core/code/autogen.go
index c6150f2f..72cea347 100644
--- a/core/code/autogen.go
+++ b/core/code/autogen.go
@@ -165,7 +165,7 @@ const AUTOGEN = "autogen"
func init() {
Index.MergeCommands(ice.Commands{
AUTOGEN: {Name: "autogen path auto create binpack script relay", Help: "生成", Actions: ice.Actions{
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case cli.MAIN:
m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH))
diff --git a/core/code/inner.go b/core/code/inner.go
index 6a7a6a42..d9cff323 100644
--- a/core/code/inner.go
+++ b/core/code/inner.go
@@ -1,5 +1,5 @@
package code
-
+
import (
"bufio"
"path"
@@ -94,10 +94,6 @@ const INNER = "inner"
func init() {
Index.MergeCommands(ice.Commands{
INNER: {Name: "inner path=src/@key file=main.go@key line=1 auto", Help: "源代码", Actions: ice.MergeActions(ice.Actions{
- ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey())
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.SRC_MAIN_GO)
- }},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case nfs.PATH:
@@ -143,7 +139,7 @@ func init() {
}
m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent_cmd", nfs.FILE, arg[0])
}},
- }, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
+ }, ctx.CmdAction(), aaa.RoleAction(ice.SRC_MAIN_GO)), Hand: func(m *ice.Message, arg ...string) {
if arg[0] = strings.Split(arg[0], ice.FS)[0]; !strings.HasSuffix(arg[0], ice.PS) && len(arg) == 1 {
arg[1] = kit.Slice(strings.Split(arg[0], ice.PS), -1)[0]
arg[0] = strings.TrimSuffix(arg[0], arg[1])
diff --git a/core/code/oauth.go b/core/code/oauth.go
index 37fac4b0..367ab2e6 100644
--- a/core/code/oauth.go
+++ b/core/code/oauth.go
@@ -32,7 +32,7 @@ func init() {
ctx.CONFIG: {Name: "config client_id client_secret redirect_uri", Help: "配置", Hand: func(m *ice.Message, arg ...string) {
ctx.ConfigFromOption(m, CLIENT_ID, CLIENT_SECRET, REDIRECT_URI)
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.HASH {
m.Cmdy(aaa.RSA).Cut("hash,title,public")
return
diff --git a/core/code/pprof.go b/core/code/pprof.go
index 2306fc4f..ea1cca05 100644
--- a/core/code/pprof.go
+++ b/core/code/pprof.go
@@ -35,7 +35,7 @@ func init() {
return false
})
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case BINNARY:
m.Cmdy(nfs.DIR, ice.BIN, nfs.DIR_CLI_FIELDS).RenameAppend(nfs.PATH, BINNARY)
diff --git a/core/code/publish.go b/core/code/publish.go
index 3ef9d475..45b9e0e2 100644
--- a/core/code/publish.go
+++ b/core/code/publish.go
@@ -91,9 +91,8 @@ const PUBLISH = "publish"
func init() {
Index.Merge(&ice.Context{Commands: ice.Commands{
- PUBLISH: {Name: "publish path auto create volcanos icebergs intshell", Help: "发布", Actions: ice.Actions{
+ PUBLISH: {Name: "publish path auto create volcanos icebergs intshell", Help: "发布", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.USR_PUBLISH)
m.Config(ice.CONTEXTS, _contexts)
}},
web.SERVE_START: {Name: "serve.start", Help: "服务启动", Hand: func(m *ice.Message, arg ...string) {
@@ -115,7 +114,7 @@ func init() {
ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
_publish_contexts(m, arg...)
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.DIR, kit.Select(nfs.PWD, arg, 1)).ProcessAgain()
}},
mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
@@ -124,7 +123,7 @@ func init() {
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.TRASH, path.Join(ice.USR_PUBLISH, m.Option(nfs.PATH)))
}},
- }, Hand: func(m *ice.Message, arg ...string) {
+ }, aaa.RoleAction(ice.USR_PUBLISH)), Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_ROOT, ice.USR_PUBLISH)
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), nfs.DIR_WEB_FIELDS)
}},
diff --git a/core/code/xterm.go b/core/code/xterm.go
index cf705059..80702298 100644
--- a/core/code/xterm.go
+++ b/core/code/xterm.go
@@ -77,7 +77,7 @@ func init() {
}
ctx.ProcessField(m, "", arg, arg...)
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_system_term", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] {
case mdb.TYPE:
if m.Option(nfs.LINE) != "" && m.Option(nfs.FILE) != "" {
diff --git a/core/wiki/word.go b/core/wiki/word.go
index dbd80d84..0e99befe 100644
--- a/core/wiki/word.go
+++ b/core/wiki/word.go
@@ -22,8 +22,6 @@ func init() {
Index.MergeCommands(ice.Commands{
WORD: {Name: "word path=src/main.shy@key list play", Help: "笔记文档", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey())
- m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.SRC_MAIN_SHY)
WordAlias(m, NAVMENU, TITLE, NAVMENU)
WordAlias(m, PREMENU, TITLE, PREMENU)
WordAlias(m, CHAPTER, TITLE, CHAPTER)
@@ -43,7 +41,7 @@ func init() {
})
}}, "play": {Name: "play", Help: "演示"},
ice.STORY: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], ice.RUN, arg[2:]) }},
- }, WikiAction("", nfs.SHY), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
+ }, WikiAction("", nfs.SHY), ctx.CmdAction(), aaa.RoleAction(ice.SRC_MAIN_SHY)), Hand: func(m *ice.Message, arg ...string) {
if m.Option(nfs.DIR_DEEP, ice.TRUE); len(arg) == 0 {
arg = append(arg, "src/")
}
diff --git a/misc/bash/sync.go b/misc/bash/sync.go
index acbe1b96..5815a1bc 100644
--- a/misc/bash/sync.go
+++ b/misc/bash/sync.go
@@ -32,7 +32,7 @@ func init() {
ctx.ProcessCommand(m, cli.SYSTEM, kit.Split(m.Option(mdb.TEXT)), arg...)
ctx.ProcessCommandOpt(m, arg, cli.PWD)
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(FAVOR, mdb.INPUTS, arg)
}},
FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
diff --git a/misc/git/status.go b/misc/git/status.go
index 69c946db..52004616 100644
--- a/misc/git/status.go
+++ b/misc/git/status.go
@@ -201,7 +201,7 @@ const STATUS = "status"
func init() {
Index.MergeCommands(ice.Commands{
STATUS: {Name: "status repos auto", Help: "状态机", Actions: ice.Actions{
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case mdb.NAME, REPOS:
m.Cmdy(REPOS).Cut(REPOS)
diff --git a/misc/git/trend.go b/misc/git/trend.go
index 02ef9406..b58adae6 100644
--- a/misc/git/trend.go
+++ b/misc/git/trend.go
@@ -13,7 +13,7 @@ const TREND = "trend"
func init() {
Index.MergeCommands(ice.Commands{
TREND: {Name: "trend repos@key begin_time@date auto", Help: "趋势图", Actions: ice.MergeActions(ice.Actions{
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(REPOS, ice.OptionFields("name,time"))
}}, code.INNER: {Name: "web.code.inner"},
}, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
diff --git a/misc/tmux/session.go b/misc/tmux/session.go
index 0fda4bc7..5e49e277 100644
--- a/misc/tmux/session.go
+++ b/misc/tmux/session.go
@@ -88,7 +88,7 @@ func init() {
m.Cmd("", mdb.CREATE)
}
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(ctx.ACTION) == SCRIPT {
m.Cmdy(SCRIPT, mdb.INPUTS, arg)
return
diff --git a/misc/vim/sync.go b/misc/vim/sync.go
index d0a891ca..184fc811 100644
--- a/misc/vim/sync.go
+++ b/misc/vim/sync.go
@@ -31,7 +31,7 @@ func init() {
p := path.Join(m.Option(cli.PWD), m.Option(BUF))
ctx.ProcessCommand(m, code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(ROW)}, arg...)
}},
- mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(FAVOR, mdb.INPUTS, arg)
}},
FAVOR: {Name: "favor zone=some@key type name text buf row pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
diff --git a/misc/vim/tags.go b/misc/vim/tags.go
index 5fd18c7e..58805d6a 100644
--- a/misc/vim/tags.go
+++ b/misc/vim/tags.go
@@ -146,7 +146,7 @@ func init() {
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
ctx.ProcessCommand(m, code.INNER, m.OptionSplit("path,file,line"), arg...)
}},
- INPUT: {Name: "input name text", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
+ INPUT: {Name: "input name text", Hand: func(m *ice.Message, arg ...string) {
if kit.Ext(m.Option(BUF)) == nfs.SHY && arg[1] == "" {
for _, k := range []string{
"field",