forked from x/icebergs
opt chat
This commit is contained in:
parent
975791294c
commit
20b60b11bf
@ -137,3 +137,12 @@ func init() {
|
|||||||
func RoleRight(m *ice.Message, userrole string, arg ...string) bool {
|
func RoleRight(m *ice.Message, userrole string, arg ...string) bool {
|
||||||
return m.Cmdx(ROLE, RIGHT, userrole, arg) == ice.OK
|
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)
|
||||||
|
}
|
||||||
|
}}}
|
||||||
|
}
|
||||||
|
@ -85,6 +85,7 @@ func init() {
|
|||||||
func UserRoot(m *ice.Message, arg ...string) *ice.Message { // password username userrole
|
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))
|
username := m.Option(ice.MSG_USERNAME, kit.Select(ice.Info.UserName, arg, 1))
|
||||||
userrole := m.Option(ice.MSG_USERROLE, kit.Select(ROOT, arg, 2))
|
userrole := m.Option(ice.MSG_USERROLE, kit.Select(ROOT, arg, 2))
|
||||||
|
m.Option(ice.MSG_USERNICK, UserNick(m, username))
|
||||||
if len(arg) > 0 {
|
if len(arg) > 0 {
|
||||||
m.Cmd(USER, mdb.CREATE, username, kit.Select("", arg, 0), userrole)
|
m.Cmd(USER, mdb.CREATE, username, kit.Select("", arg, 0), userrole)
|
||||||
ice.Info.UserName = username
|
ice.Info.UserName = username
|
||||||
|
@ -87,10 +87,8 @@ const COMMAND = "command"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
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) {
|
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) {
|
TravelCmd(m, func(key, file, line string) {
|
||||||
if strings.Contains(file, "icebergs") {
|
if strings.Contains(file, "icebergs") {
|
||||||
AddFileCmd(file, key)
|
AddFileCmd(file, key)
|
||||||
@ -114,7 +112,7 @@ func init() {
|
|||||||
})
|
})
|
||||||
m.Cmd("nfs.save", "tags", m.Result())
|
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 {
|
if len(arg) == 0 {
|
||||||
arg = append(arg, "")
|
arg = append(arg, "")
|
||||||
}
|
}
|
||||||
|
@ -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))
|
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) {
|
switch cb := m.OptionCB(SPLIT).(type) {
|
||||||
|
case func(int, []string):
|
||||||
|
cb(deep, ls)
|
||||||
case func(int, []string) []string:
|
case func(int, []string) []string:
|
||||||
ls = cb(deep, ls)
|
ls = cb(deep, ls)
|
||||||
case func(int, []string, ice.Map, ice.List):
|
case func(int, []string, ice.Map, ice.List):
|
||||||
|
@ -130,7 +130,7 @@ const LIST = "list"
|
|||||||
|
|
||||||
func ListAction(args ...ice.Any) ice.Actions {
|
func ListAction(args ...ice.Any) ice.Actions {
|
||||||
return ice.Actions{ice.CTX_INIT: AutoConfig(args...),
|
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))
|
m.Cmdy(INPUTS, m.PrefixKey(), "", LIST, ListArgs(m, arg))
|
||||||
}},
|
}},
|
||||||
INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -44,7 +44,7 @@ func init() {
|
|||||||
m.Cmd(TAIL, mdb.CREATE, kit.SimpleKV("file,name", value))
|
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] {
|
switch arg[0] {
|
||||||
case FILE:
|
case FILE:
|
||||||
m.Cmdy(DIR, kit.Select(PWD, arg, 1), PATH).RenameAppend(PATH, FILE)
|
m.Cmdy(DIR, kit.Select(PWD, arg, 1), PATH).RenameAppend(PATH, FILE)
|
||||||
|
@ -118,7 +118,7 @@ const DREAM = "dream"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
DREAM: {Name: "dream name path auto create", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{
|
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] {
|
switch arg[0] {
|
||||||
case nfs.REPOS:
|
case nfs.REPOS:
|
||||||
m.Cmd("web.code.git.server", func(value ice.Maps) {
|
m.Cmd("web.code.git.server", func(value ice.Maps) {
|
||||||
|
@ -126,7 +126,7 @@ type Message interface {
|
|||||||
|
|
||||||
func OptionAgentIs(m Message, arg ...string) bool {
|
func OptionAgentIs(m Message, arg ...string) bool {
|
||||||
for _, k := range arg {
|
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
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ func init() {
|
|||||||
m.EchoQRCode(msg.Option(mdb.LINK))
|
m.EchoQRCode(msg.Option(mdb.LINK))
|
||||||
m.ProcessInner()
|
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 {
|
if ctx.PodCmd(m, SHARE, arg) && m.Length() > 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,6 @@ func init() {
|
|||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
web.P(ACTION): {Name: "/action river storm action arg...", Help: "工作台", Actions: ice.MergeActions(ice.Actions{
|
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) {
|
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)
|
m.Cmd(aaa.ROLE, aaa.BLACK, aaa.VOID, m.CommandKey(), ctx.ACTION)
|
||||||
}},
|
}},
|
||||||
mdb.MODIFY: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.MODIFY: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
@ -90,7 +89,7 @@ func init() {
|
|||||||
web.SHARE: {Hand: func(m *ice.Message, arg ...string) {
|
web.SHARE: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
_action_share(m, arg...)
|
_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) {
|
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -4,19 +4,18 @@ header.go
|
|||||||
action.go
|
action.go
|
||||||
search.go
|
search.go
|
||||||
footer.go
|
footer.go
|
||||||
|
|
||||||
river.go
|
river.go
|
||||||
storm.go
|
storm.go
|
||||||
template.go
|
template.go
|
||||||
iframe.go
|
|
||||||
|
|
||||||
sso.go
|
|
||||||
pod.go
|
pod.go
|
||||||
cmd.go
|
cmd.go
|
||||||
div.go
|
div.go
|
||||||
website.go
|
website.go
|
||||||
topic.go
|
topic.go
|
||||||
grant.go
|
grant.go
|
||||||
|
sso.go
|
||||||
|
oauth
|
||||||
|
|
||||||
room.go
|
room.go
|
||||||
meet.go
|
meet.go
|
||||||
@ -25,8 +24,7 @@ paste.go
|
|||||||
media.go
|
media.go
|
||||||
files.go
|
files.go
|
||||||
trans.go
|
trans.go
|
||||||
|
iframe.go
|
||||||
keyboard.go
|
keyboard.go
|
||||||
location.go
|
location.go
|
||||||
location.shy
|
location.shy
|
||||||
oauth
|
|
||||||
|
@ -15,22 +15,17 @@ import (
|
|||||||
|
|
||||||
func _cmd_file(m *ice.Message, arg ...string) bool {
|
func _cmd_file(m *ice.Message, arg ...string) bool {
|
||||||
switch p := path.Join(arg...); kit.Ext(p) {
|
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:
|
case nfs.JS:
|
||||||
m.Display(ctx.FileURI(p))
|
m.Display(ctx.FileURI(p))
|
||||||
web.RenderCmd(m, kit.Select(ctx.CAN_PLUGIN, ctx.GetFileCmd(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:
|
default:
|
||||||
if p = strings.TrimPrefix(p, ice.SRC+ice.PS); nfs.ExistsFile(m, path.Join(ice.SRC, p)) {
|
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 {
|
if msg := m.Cmd(mdb.RENDER, kit.Ext(p)); msg.Length() > 0 {
|
||||||
@ -47,17 +42,9 @@ const CMD = "cmd"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
CMD: {Name: "cmd path auto upload up home", Help: "命令", Actions: ice.MergeActions(ice.Actions{
|
CMD: {Name: "cmd path auto upload up home", Help: "命令", Actions: ice.MergeActions(
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.HashAction(mdb.SHORT, mdb.TYPE, nfs.PATH, nfs.PWD), ctx.CmdAction(), web.ApiAction(), aaa.RoleAction(),
|
||||||
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, CMD)
|
), Hand: func(m *ice.Message, arg ...string) {
|
||||||
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) {
|
|
||||||
if _cmd_file(m, arg...) {
|
if _cmd_file(m, arg...) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -25,13 +25,8 @@ func _div_parse(m *ice.Message, text string) string {
|
|||||||
const DIV = "div"
|
const DIV = "div"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: ice.Configs{
|
Index.MergeCommands(ice.Commands{
|
||||||
DIV: {Name: "div", Help: "定制", Value: kit.Data(
|
web.PP(DIV): {Name: "/div/", Help: "定制", Actions: ice.MergeActions(ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||||
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) {
|
|
||||||
switch p := path.Join(arg...); kit.Ext(kit.Select("", p)) {
|
switch p := path.Join(arg...); kit.Ext(kit.Select("", p)) {
|
||||||
case nfs.HTML:
|
case nfs.HTML:
|
||||||
m.RenderDownload(p)
|
m.RenderDownload(p)
|
||||||
@ -46,10 +41,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
DIV: {Name: "div hash auto import", Help: "定制", Actions: ice.MergeActions(ice.Actions{
|
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) {
|
mdb.INPUTS: {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) {
|
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case nfs.PATH:
|
case nfs.PATH:
|
||||||
m.Cmdy(nfs.DIR, arg[1:]).ProcessAgain()
|
m.Cmdy(nfs.DIR, arg[1:]).ProcessAgain()
|
||||||
@ -62,16 +54,11 @@ func init() {
|
|||||||
m.Push(arg[0], "output")
|
m.Push(arg[0], "output")
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
mdb.CREATE: {Name: "create type=page name=hi text", Help: "创建"},
|
mdb.CREATE: {Name: "create type=page name=hi text"},
|
||||||
mdb.IMPORT: {Name: "import path=src/", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
lex.SPLIT: {Name: "split name=hi text", Help: "生成", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(nfs.DIR, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH)), func(p string) {
|
m.ProcessRewrite(mdb.HASH, m.Cmdx(DIV, mdb.CREATE, m.OptionSimple(mdb.NAME), mdb.TEXT, _div_parse(m, m.Option(mdb.TEXT))))
|
||||||
switch kit.Ext(p) {
|
|
||||||
case nfs.SHY:
|
|
||||||
m.Cmd(m.PrefixKey(), lex.SPLIT, mdb.NAME, p, mdb.TEXT, m.Cmdx(nfs.CAT, p))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}},
|
}},
|
||||||
}, 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)) {
|
switch kit.Ext(kit.Select("", arg, 0)) {
|
||||||
case nfs.SHY:
|
case nfs.SHY:
|
||||||
m.Fields(0)
|
m.Fields(0)
|
||||||
@ -79,19 +66,19 @@ func init() {
|
|||||||
ctx.DisplayLocal(m, "")
|
ctx.DisplayLocal(m, "")
|
||||||
default:
|
default:
|
||||||
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
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, "")
|
ctx.DisplayLocal(m, "")
|
||||||
m.StatusTime(mdb.LINK, web.MergeURL2(m, "/chat/div/"+arg[0]))
|
|
||||||
} else {
|
} else {
|
||||||
m.Action(lex.SPLIT, mdb.CREATE)
|
m.Action(lex.SPLIT, mdb.CREATE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var _div_template = `<!DOCTYPE html>
|
var _div_template = `<!DOCTYPE html>
|
||||||
<head>
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=0.8,maximum-scale=0.8,user-scalable=no"/>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>volcanos</title>
|
<title>volcanos</title>
|
||||||
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
|
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
|
||||||
@ -105,9 +92,9 @@ var _div_template = `<!DOCTYPE html>
|
|||||||
<script>%s</script>
|
<script>%s</script>
|
||||||
</body>
|
</body>
|
||||||
`
|
`
|
||||||
|
|
||||||
var _div_template2 = `<!DOCTYPE html>
|
var _div_template2 = `<!DOCTYPE html>
|
||||||
<head>
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=0.8,maximum-scale=0.8,user-scalable=no"/>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>volcanos</title>
|
<title>volcanos</title>
|
||||||
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
|
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
|
||||||
@ -117,6 +104,6 @@ var _div_template2 = `<!DOCTYPE html>
|
|||||||
<body>
|
<body>
|
||||||
<script src="/proto.js"></script>
|
<script src="/proto.js"></script>
|
||||||
<script src="/page/cache.js"></script>
|
<script src="/page/cache.js"></script>
|
||||||
<script>Volcanos({name: "chat", river: JSON.parse('%s')})</script>
|
<script>Volcanos({river: JSON.parse('%s')})</script>
|
||||||
</body>
|
</body>
|
||||||
`
|
`
|
||||||
|
@ -8,17 +8,12 @@ import (
|
|||||||
"shylinux.com/x/icebergs/base/web"
|
"shylinux.com/x/icebergs/base/web"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
EMAIL = "email"
|
|
||||||
)
|
|
||||||
const FOOTER = "footer"
|
const FOOTER = "footer"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
const EMAIL = "email"
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
web.P(FOOTER): {Name: "footer", Help: "状态栏", Actions: ice.MergeActions(ice.Actions{
|
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())
|
|
||||||
}},
|
|
||||||
ice.RUN: {Hand: func(m *ice.Message, arg ...string) {
|
ice.RUN: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if aaa.Right(m, arg) {
|
if aaa.Right(m, arg) {
|
||||||
if m.Cmdy(arg); m.IsErrNotFound() {
|
if m.Cmdy(arg); m.IsErrNotFound() {
|
||||||
@ -26,7 +21,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}, ctx.CmdAction(EMAIL, `<a href="mailto:shylinuxc@gmail.com">shylinuxc@gmail.com</a>`)), 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))
|
m.Result(m.Configv(EMAIL))
|
||||||
}},
|
}},
|
||||||
})
|
})
|
||||||
|
@ -12,7 +12,7 @@ const GRANT = "grant"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
GRANT: {Name: "grant space id auto insert", Help: "授权", Actions: ice.MergeActions(ice.Actions{
|
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] {
|
switch arg[0] {
|
||||||
case web.SPACE:
|
case web.SPACE:
|
||||||
m.Cmdy(web.SPACE).RenameAppend(mdb.NAME, web.SPACE).Cut("space,type")
|
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))
|
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"))},
|
}, mdb.ZoneAction(mdb.SHORT, web.SPACE, mdb.FIELD, "time,grant,userrole,username"))},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -80,9 +80,6 @@ func init() {
|
|||||||
m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg)
|
m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg)
|
||||||
}},
|
}},
|
||||||
web.P(HEADER): {Name: "/header", Help: "标题栏", Actions: ice.MergeActions(ice.Actions{
|
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) {
|
aaa.LOGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if aaa.UserLogin(m, arg[0], arg[1]) {
|
if aaa.UserLogin(m, arg[0], arg[1]) {
|
||||||
web.RenderCookie(m, aaa.SessCreate(m, arg[0]))
|
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.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...) }},
|
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...) }},
|
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...) {
|
if gdb.Event(m, HEADER_AGENT); !_header_check(m, arg...) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ func init() {
|
|||||||
"_refresh": {Name: "refresh", Help: "刷新", Hand: func(m *ice.Message, arg ...string) {
|
"_refresh": {Name: "refresh", Help: "刷新", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(web.SPACE, m.Option(web.SPACE), "refresh")
|
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) {
|
"input": {Name: "input", Help: "刷新", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(web.SPACE, m.Option(web.SPACE), "input", arg)
|
m.Cmd(web.SPACE, m.Option(web.SPACE), "input", arg)
|
||||||
ctx.ProcessHold(m)
|
ctx.ProcessHold(m)
|
||||||
|
@ -17,33 +17,25 @@ const POD = "pod"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
POD: {Name: "pod", Help: "节点", Actions: ice.MergeActions(ice.Actions{
|
web.PP(POD): {Name: "/pod/", Help: "节点", Actions: ice.MergeActions(ctx.CmdAction(), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, POD) }},
|
if web.OptionAgentIs(m, "curl", "wget") {
|
||||||
}, ctx.CmdAction(), web.ApiAction()), Hand: func(m *ice.Message, arg ...string) {
|
aaa.UserRoot(m).Cmdy(web.SHARE_LOCAL, ice.BIN_ICE_BIN, kit.Dict(ice.POD, kit.Select("", arg, 0)))
|
||||||
if web.OptionAgentIs(m, "curl", "Wget") {
|
return
|
||||||
aaa.UserRoot(m)
|
|
||||||
m.Option(ice.POD, kit.Select("", arg, 0))
|
|
||||||
m.Cmdy(web.SHARE_LOCAL, ice.BIN_ICE_BIN)
|
|
||||||
return // 下载程序
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(arg) == 0 || kit.Select("", arg, 0) == "" {
|
if len(arg) == 0 || kit.Select("", arg, 0) == "" {
|
||||||
web.RenderCmd(m, web.ROUTE) // 节点列表
|
web.RenderCmd(m, web.ROUTE)
|
||||||
|
|
||||||
} else if len(arg) == 1 {
|
} else if len(arg) == 1 {
|
||||||
if m.Cmd(web.SPACE, arg[0]).Length() == 0 && !strings.Contains(arg[0], ice.PT) {
|
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)
|
aaa.UserRoot(m)
|
||||||
if web.RenderWebsite(m, arg[0], ice.INDEX_IML, "Header", "", "River", "", "Footer", ""); m.Result() == "" {
|
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 {
|
} 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 {
|
} else if arg[1] == WEBSITE {
|
||||||
web.RenderWebsite(m, arg[0], path.Join(arg[2:]...)) // 节点网页
|
web.RenderWebsite(m, arg[0], path.Join(arg[2:]...))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
})
|
})
|
||||||
|
@ -41,7 +41,6 @@ func init() {
|
|||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
web.P(RIVER): {Name: "/river hash auto create", Help: "群组", Actions: ice.MergeActions(ice.Actions{
|
web.P(RIVER): {Name: "/river hash auto create", Help: "群组", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
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)
|
m.Cmd(aaa.ROLE, aaa.BLACK, aaa.VOID, m.CommandKey(), ctx.ACTION)
|
||||||
}},
|
}},
|
||||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
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.EXPORT, m.Prefix(RIVER), "", mdb.HASH)
|
||||||
m.Cmd(mdb.IMPORT, 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) {
|
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) {
|
||||||
m.RenderStatusUnauthorized()
|
m.RenderStatusUnauthorized()
|
||||||
return
|
return
|
||||||
|
@ -13,9 +13,7 @@ const SSO = "sso"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
web.P(SSO): {Name: "/sso", Help: "登录", Actions: ice.Actions{
|
web.P(SSO): {Name: "/sso", Help: "授权", Actions: aaa.RoleAction(), Hand: func(m *ice.Message, arg ...string) {
|
||||||
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) {
|
|
||||||
if m.Option(ice.MSG_USERNAME) == "" {
|
if m.Option(ice.MSG_USERNAME) == "" {
|
||||||
web.RenderIndex(m, ice.VOLCANOS)
|
web.RenderIndex(m, ice.VOLCANOS)
|
||||||
return
|
return
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/aaa"
|
"shylinux.com/x/icebergs/base/aaa"
|
||||||
|
"shylinux.com/x/icebergs/base/cli"
|
||||||
"shylinux.com/x/icebergs/base/mdb"
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/nfs"
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
"shylinux.com/x/icebergs/base/web"
|
"shylinux.com/x/icebergs/base/web"
|
||||||
@ -15,20 +16,12 @@ const TOPIC = "topic"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
form := ice.Map{
|
form := ice.Map{
|
||||||
"body.background": ice.Map{
|
"body.background": ice.Map{mdb.TYPE: "text", mdb.NAME: "background", mdb.VALUE: "black"},
|
||||||
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"},
|
||||||
},
|
|
||||||
"header.height": ice.Map{
|
|
||||||
"tags": "panel.Header,panel.Header>div.output",
|
|
||||||
mdb.TYPE: "text", mdb.NAME: "height", mdb.VALUE: "31",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
TOPIC: {Name: "topic zone id auto create insert", Help: "主题", Actions: ice.MergeActions(ice.Actions{
|
TOPIC: {Name: "topic zone id auto create insert", Help: "主题", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.INPUTS: {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) {
|
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case "tags":
|
case "tags":
|
||||||
for k := range form {
|
for k := range form {
|
||||||
@ -58,11 +51,56 @@ func init() {
|
|||||||
}
|
}
|
||||||
m.Cmdy(mdb.INPUTS, m.PrefixKey(), "", mdb.ZONE, arg)
|
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) {
|
"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)))
|
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) {
|
}, mdb.ZoneAction(mdb.FIELD, "time,id,tags,type,name,value"), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||||
buf, err := kit.Render(`
|
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"}} { background-color:{{.Option "background" }}; color:{{.Option "color" }}; }
|
||||||
body.{{.Option "topic"}} legend { background-color:{{.Option "hover" }}; 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" }}; }
|
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.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.story:hover { box-shadow:12px 12px 12px 6px {{.Option "float" }}; }
|
||||||
body.{{.Option "topic"}} fieldset.panel.Header>div.output div:hover { background-color:{{.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()
|
|
||||||
}},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
@ -2,7 +2,6 @@ package chat
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -42,14 +41,14 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
|
|||||||
), kit.Dict(), kit.Dict()
|
), kit.Dict(), kit.Dict()
|
||||||
|
|
||||||
nriver, nstorm, prefix := 0, 0, ""
|
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 {
|
if deep == 1 {
|
||||||
switch ls[0] {
|
switch ls[0] {
|
||||||
case HEADER, RIVER, FOOTER:
|
case HEADER, RIVER, FOOTER:
|
||||||
for i := 1; i < len(ls); i += 2 {
|
for i := 1; i < len(ls); i += 2 {
|
||||||
kit.Value(river, kit.Keys(ls[0], ls[i]), ls[i+1])
|
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])
|
ls[0], data[ctx.DISPLAY] = kit.Select(ctx.CAN_PLUGIN, ctx.GetFileCmd(ls[0])), ctx.FileURI(ls[0])
|
||||||
case nfs.GO:
|
case nfs.GO:
|
||||||
ls[0] = ctx.GetFileCmd(ls[0])
|
ls[0] = ctx.GetFileCmd(ls[0])
|
||||||
case nfs.SH:
|
|
||||||
ls[0], data[ctx.ARGS] = "web.code.sh.sh", ls[0]
|
|
||||||
case nfs.SHY:
|
case nfs.SHY:
|
||||||
ls[0], data[ctx.ARGS] = "web.wiki.word", ls[0]
|
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:
|
case nfs.PY:
|
||||||
ls[0], data[ctx.ARGS] = "web.code.sh.py", ls[0]
|
ls[0], data[ctx.ARGS] = "web.code.sh.py", ls[0]
|
||||||
case "~":
|
case "~":
|
||||||
@ -72,11 +71,11 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
|
|||||||
for _, v := range ls[1:] {
|
for _, v := range ls[1:] {
|
||||||
last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.INDEX, kit.Keys(prefix, v)))
|
last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.INDEX, kit.Keys(prefix, v)))
|
||||||
}
|
}
|
||||||
return ls
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if ls[0] == "" {
|
if ls[0] == "" {
|
||||||
return ls
|
return
|
||||||
} else if len(ls) == 1 && deep > 2 {
|
} else if len(ls) == 1 && deep > 2 {
|
||||||
ls = append(ls, m.Cmd(ctx.COMMAND, ls[0]).Append(mdb.HELP))
|
ls = append(ls, m.Cmd(ctx.COMMAND, ls[0]).Append(mdb.HELP))
|
||||||
} else if len(ls) == 1 {
|
} else if len(ls) == 1 {
|
||||||
@ -115,7 +114,6 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
|
|||||||
default:
|
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))
|
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
|
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)
|
msg := m.Spawn(w, r)
|
||||||
switch kind {
|
switch kind {
|
||||||
case nfs.ZML:
|
case nfs.ZML:
|
||||||
web.RenderCmd(msg, "can.parse", text, name)
|
web.RenderCmd(msg, CAN_PARSE, text, name)
|
||||||
case nfs.IML:
|
case nfs.IML:
|
||||||
res, _ := _website_parse(msg, text)
|
res, _ := _website_parse(msg, text)
|
||||||
msg.RenderResult(_website_template2, kit.Format(res))
|
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"
|
r.URL.Path = "/chat/cmd/web.chat.div"
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
case nfs.JSON:
|
|
||||||
msg.RenderResult(_website_template2, kit.Format(kit.UnMarshal(text)))
|
|
||||||
case nfs.JS:
|
case nfs.JS:
|
||||||
msg.RenderResult(_website_template, text)
|
msg.RenderResult(_website_template, text)
|
||||||
|
case nfs.JSON:
|
||||||
|
msg.RenderResult(_website_template2, kit.Format(kit.UnMarshal(text)))
|
||||||
case nfs.HTML:
|
case nfs.HTML:
|
||||||
msg.RenderResult(text)
|
msg.RenderResult(text)
|
||||||
case nfs.SVG:
|
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)...)
|
web.Render(msg, msg.Option(ice.MSG_OUTPUT), msg.Optionv(ice.MSG_ARGS).([]ice.Any)...)
|
||||||
return true
|
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 (
|
const (
|
||||||
|
CAN_PARSE = "can.parse"
|
||||||
SRC_WEBSITE = "src/website/"
|
SRC_WEBSITE = "src/website/"
|
||||||
CHAT_WEBSITE = "/chat/website/"
|
CHAT_WEBSITE = "/chat/website/"
|
||||||
)
|
)
|
||||||
@ -164,17 +158,14 @@ func init() {
|
|||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
WEBSITE: {Name: "website path auto create import", Help: "网站", Actions: ice.MergeActions(ice.Actions{
|
WEBSITE: {Name: "website path auto create import", Help: "网站", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
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.RENDER, mdb.CREATE, nfs.IML, m.PrefixKey())
|
||||||
m.Cmd(mdb.ENGINE, 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 {
|
web.AddRewrite(func(w http.ResponseWriter, r *http.Request) bool {
|
||||||
if r.Method != http.MethodGet {
|
if r.Method != http.MethodGet {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if strings.HasSuffix(r.URL.Path, "/") {
|
if strings.HasSuffix(r.URL.Path, ice.PS) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if !strings.HasPrefix(r.Header.Get(web.UserAgent), "Mozilla") {
|
if !strings.HasPrefix(r.Header.Get(web.UserAgent), "Mozilla") {
|
||||||
@ -194,15 +185,13 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
lex.PARSE: {Hand: func(m *ice.Message, arg ...string) {
|
lex.PARSE: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch kit.Ext(arg[0]) {
|
switch kit.Ext(arg[0]) {
|
||||||
case nfs.ZML: // 前端解析
|
case nfs.ZML:
|
||||||
web.RenderCmd(m, "can.parse", m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])))
|
web.RenderCmd(m, CAN_PARSE, m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])))
|
||||||
|
case nfs.IML:
|
||||||
case nfs.IML: // 文件解析
|
|
||||||
if res, ok := _website_parse(m, m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])), arg[1:]...); ok {
|
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))
|
m.Echo(_website_template2, kit.Format(res))
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
default: // 缓存解析
|
|
||||||
if text := m.CmdAppend("", path.Join(ice.PS, arg[0]), mdb.TEXT); text != "" {
|
if text := m.CmdAppend("", path.Join(ice.PS, arg[0]), mdb.TEXT); text != "" {
|
||||||
if res, ok := _website_parse(m, text, arg[1:]...); ok {
|
if res, ok := _website_parse(m, text, arg[1:]...); ok {
|
||||||
m.Echo(_website_template2, kit.Format(res))
|
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) {
|
switch m.Option(ctx.ACTION) {
|
||||||
case mdb.CREATE:
|
case mdb.CREATE:
|
||||||
mdb.HashInputs(m, arg)
|
mdb.HashInputs(m, arg)
|
||||||
@ -221,8 +210,8 @@ func init() {
|
|||||||
m.Cmdy(nfs.DIR, arg[1:]).ProcessAgain()
|
m.Cmdy(nfs.DIR, arg[1:]).ProcessAgain()
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
mdb.CREATE: {Name: "create path type=iml,zml,json,js,html name text", Help: "创建"},
|
mdb.CREATE: {Name: "create path type=zml,iml,json,js,html name text"},
|
||||||
mdb.IMPORT: {Name: "import path=src/website/", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
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) {
|
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) {
|
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:
|
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)))
|
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])) })
|
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 = `<!DOCTYPE html>
|
|||||||
<script>%s</script>
|
<script>%s</script>
|
||||||
</body>
|
</body>
|
||||||
`
|
`
|
||||||
|
|
||||||
var _website_template2 = `<!DOCTYPE html>
|
var _website_template2 = `<!DOCTYPE html>
|
||||||
<head>
|
<head>
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=0.8,maximum-scale=0.8,user-scalable=no"/>
|
<meta name="viewport" content="width=device-width,initial-scale=0.8,maximum-scale=0.8,user-scalable=no"/>
|
||||||
|
@ -165,7 +165,7 @@ const AUTOGEN = "autogen"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
AUTOGEN: {Name: "autogen path auto create binpack script relay", Help: "生成", Actions: ice.Actions{
|
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] {
|
switch arg[0] {
|
||||||
case cli.MAIN:
|
case cli.MAIN:
|
||||||
m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH))
|
m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH))
|
||||||
|
@ -94,10 +94,6 @@ const INNER = "inner"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
INNER: {Name: "inner path=src/@key file=main.go@key line=1 auto", Help: "源代码", Actions: ice.MergeActions(ice.Actions{
|
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) {
|
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case nfs.PATH:
|
case nfs.PATH:
|
||||||
@ -143,7 +139,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent_cmd", nfs.FILE, arg[0])
|
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 {
|
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[1] = kit.Slice(strings.Split(arg[0], ice.PS), -1)[0]
|
||||||
arg[0] = strings.TrimSuffix(arg[0], arg[1])
|
arg[0] = strings.TrimSuffix(arg[0], arg[1])
|
||||||
|
@ -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.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)
|
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 {
|
if arg[0] == mdb.HASH {
|
||||||
m.Cmdy(aaa.RSA).Cut("hash,title,public")
|
m.Cmdy(aaa.RSA).Cut("hash,title,public")
|
||||||
return
|
return
|
||||||
|
@ -35,7 +35,7 @@ func init() {
|
|||||||
return false
|
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] {
|
switch arg[0] {
|
||||||
case BINNARY:
|
case BINNARY:
|
||||||
m.Cmdy(nfs.DIR, ice.BIN, nfs.DIR_CLI_FIELDS).RenameAppend(nfs.PATH, BINNARY)
|
m.Cmdy(nfs.DIR, ice.BIN, nfs.DIR_CLI_FIELDS).RenameAppend(nfs.PATH, BINNARY)
|
||||||
|
@ -91,9 +91,8 @@ const PUBLISH = "publish"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Commands: ice.Commands{
|
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) {
|
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)
|
m.Config(ice.CONTEXTS, _contexts)
|
||||||
}},
|
}},
|
||||||
web.SERVE_START: {Name: "serve.start", Help: "服务启动", Hand: func(m *ice.Message, arg ...string) {
|
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) {
|
ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_publish_contexts(m, arg...)
|
_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()
|
m.Cmdy(nfs.DIR, kit.Select(nfs.PWD, arg, 1)).ProcessAgain()
|
||||||
}},
|
}},
|
||||||
mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
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) {
|
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)))
|
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.Option(nfs.DIR_ROOT, ice.USR_PUBLISH)
|
||||||
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), nfs.DIR_WEB_FIELDS)
|
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), nfs.DIR_WEB_FIELDS)
|
||||||
}},
|
}},
|
||||||
|
@ -77,7 +77,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
ctx.ProcessField(m, "", arg, arg...)
|
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] {
|
switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_system_term", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] {
|
||||||
case mdb.TYPE:
|
case mdb.TYPE:
|
||||||
if m.Option(nfs.LINE) != "" && m.Option(nfs.FILE) != "" {
|
if m.Option(nfs.LINE) != "" && m.Option(nfs.FILE) != "" {
|
||||||
|
@ -22,8 +22,6 @@ func init() {
|
|||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
WORD: {Name: "word path=src/main.shy@key list play", Help: "笔记文档", Actions: ice.MergeActions(ice.Actions{
|
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) {
|
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, NAVMENU, TITLE, NAVMENU)
|
||||||
WordAlias(m, PREMENU, TITLE, PREMENU)
|
WordAlias(m, PREMENU, TITLE, PREMENU)
|
||||||
WordAlias(m, CHAPTER, TITLE, CHAPTER)
|
WordAlias(m, CHAPTER, TITLE, CHAPTER)
|
||||||
@ -43,7 +41,7 @@ func init() {
|
|||||||
})
|
})
|
||||||
}}, "play": {Name: "play", Help: "演示"},
|
}}, "play": {Name: "play", Help: "演示"},
|
||||||
ice.STORY: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], ice.RUN, arg[2:]) }},
|
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 {
|
if m.Option(nfs.DIR_DEEP, ice.TRUE); len(arg) == 0 {
|
||||||
arg = append(arg, "src/")
|
arg = append(arg, "src/")
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ func init() {
|
|||||||
ctx.ProcessCommand(m, cli.SYSTEM, kit.Split(m.Option(mdb.TEXT)), arg...)
|
ctx.ProcessCommand(m, cli.SYSTEM, kit.Split(m.Option(mdb.TEXT)), arg...)
|
||||||
ctx.ProcessCommandOpt(m, arg, cli.PWD)
|
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)
|
m.Cmdy(FAVOR, mdb.INPUTS, arg)
|
||||||
}},
|
}},
|
||||||
FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -201,7 +201,7 @@ const STATUS = "status"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
STATUS: {Name: "status repos auto", Help: "状态机", Actions: ice.Actions{
|
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] {
|
switch arg[0] {
|
||||||
case mdb.NAME, REPOS:
|
case mdb.NAME, REPOS:
|
||||||
m.Cmdy(REPOS).Cut(REPOS)
|
m.Cmdy(REPOS).Cut(REPOS)
|
||||||
|
@ -13,7 +13,7 @@ const TREND = "trend"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
TREND: {Name: "trend repos@key begin_time@date auto", Help: "趋势图", Actions: ice.MergeActions(ice.Actions{
|
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"))
|
m.Cmdy(REPOS, ice.OptionFields("name,time"))
|
||||||
}}, code.INNER: {Name: "web.code.inner"},
|
}}, code.INNER: {Name: "web.code.inner"},
|
||||||
}, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
|
}, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -88,7 +88,7 @@ func init() {
|
|||||||
m.Cmd("", mdb.CREATE)
|
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 {
|
if m.Option(ctx.ACTION) == SCRIPT {
|
||||||
m.Cmdy(SCRIPT, mdb.INPUTS, arg)
|
m.Cmdy(SCRIPT, mdb.INPUTS, arg)
|
||||||
return
|
return
|
||||||
|
@ -31,7 +31,7 @@ func init() {
|
|||||||
p := path.Join(m.Option(cli.PWD), m.Option(BUF))
|
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...)
|
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)
|
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) {
|
FAVOR: {Name: "favor zone=some@key type name text buf row pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -146,7 +146,7 @@ func init() {
|
|||||||
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||||
ctx.ProcessCommand(m, code.INNER, m.OptionSplit("path,file,line"), arg...)
|
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] == "" {
|
if kit.Ext(m.Option(BUF)) == nfs.SHY && arg[1] == "" {
|
||||||
for _, k := range []string{
|
for _, k := range []string{
|
||||||
"field",
|
"field",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user