1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-25 17:18:05 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-10-04 15:00:27 +08:00
parent 154ec9cb70
commit 16889fefc9
36 changed files with 227 additions and 240 deletions

View File

@ -63,7 +63,7 @@ func init() {
}
}},
ALPINE: {Name: "alpine cli cmd", Hand: func(m *ice.Message, arg ...string) { IsAlpine(m, arg...) }},
}, mdb.ZoneAction(mdb.SHORT, CLI, mdb.FIELD, "time,id,osid,cmd"), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ZoneAction(mdb.SHORT, CLI, mdb.FIELDS, "time,id,osid,cmd"), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.Table(func(value ice.Maps) {
p := SystemFind(m, value[CLI])

View File

@ -27,7 +27,7 @@ func init() {
m.Cmdy(kit.Split(value[ice.CMD]), arg[1], arg[2:], ice.OptionFields(""))
})
}},
}, mdb.ZoneAction(mdb.SHORT, EVENT, mdb.FIELD, "time,id,cmd"), mdb.ClearOnExitHashAction())},
}, mdb.ZoneAction(mdb.SHORT, EVENT, mdb.FIELDS, "time,id,cmd"), mdb.ClearOnExitHashAction())},
})
}

View File

@ -35,6 +35,6 @@ func init() {
}
}},
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { _tail_create(m, arg...) }},
}, mdb.PageZoneAction(mdb.SHORT, mdb.NAME, mdb.FIELDS, "time,name,file,count", mdb.FIELD, "time,id,file,size,text"))},
}, mdb.PageZoneAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,file,count", mdb.FIELDS, "time,id,file,size,text"))},
})
}

View File

@ -255,16 +255,10 @@ func AutoConfig(arg ...Any) *ice.Action {
return
}
if cmd.Actions[INSERT] != nil {
if cmd.Meta[INSERT] == nil {
m.Design(INSERT, "", add(kit.Simple(Config(m, SHORT), kit.Split(ListField(m))))...)
}
if cmd.Meta[CREATE] == nil {
m.Design(CREATE, "", add(kit.Split(Config(m, SHORT)))...)
}
kit.If(cmd.Meta[INSERT] == nil, func() { m.Design(INSERT, "", add(kit.Simple(Config(m, SHORT), kit.Split(ListField(m))))...) })
kit.If(cmd.Meta[CREATE] == nil, func() { m.Design(CREATE, "", add(kit.Split(Config(m, SHORT)))...) })
} else if cmd.Actions[CREATE] != nil {
if cmd.Meta[CREATE] == nil {
m.Design(CREATE, "", add(kit.Split(HashField(m)))...)
}
kit.If(cmd.Meta[CREATE] == nil, func() { m.Design(CREATE, "", add(kit.Split(HashField(m)))...) })
}
}
}}

View File

@ -17,7 +17,7 @@ func RenderAction(arg ...ice.Any) ice.Actions {
HashSelect(m, arg...)
return
}
m.OptionDefault(ice.MSG_FIELDS, kit.Select("", arg, 2))
m.OptionDefault(ice.MSG_FIELDS, kit.Select("type,name,text", arg, 2))
kit.For(kit.Split(arg[0]), func(k string) {
HashSelects(m.Spawn(), k).Table(func(value ice.Maps) {
m.Cmdy(kit.Keys(value[TEXT], value[NAME]), m.CommandKey(), k, arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))

View File

@ -4,6 +4,7 @@ import (
"encoding/csv"
"os"
"path"
"strings"
ice "shylinux.com/x/icebergs"
kit "shylinux.com/x/toolkits"
@ -146,21 +147,50 @@ const (
)
const ZONE = "zone"
func ZoneConfig(arg ...Any) *ice.Action {
return &ice.Action{Hand: func(m *ice.Message, args ...string) {
if cs := m.Target().Configs; cs[m.CommandKey()] == nil {
cs[m.CommandKey()] = &ice.Config{Value: kit.Data(arg...)}
} else {
kit.For(kit.Dict(arg...), func(k string, v Any) { Config(m, k, v) })
}
if cmd := m.Target().Commands[m.CommandKey()]; cmd == nil {
return
} else {
s := kit.Select(ZONE, Config(m, SHORT))
kit.If(s == UNIQ || strings.Contains(s, ","), func() { s = HASH })
if cmd.Name == "" {
cmd.Name = kit.Format("%s %s id auto", m.CommandKey(), s)
cmd.List = ice.SplitCmd(cmd.Name, cmd.Actions)
}
add := func(list []string) (inputs []Any) {
kit.For(list, func(k string) {
kit.If(!kit.IsIn(k, TIME, HASH, COUNT, ID), func() {
inputs = append(inputs, k+kit.Select("", "*", strings.Contains(s, k)))
})
})
return
}
kit.If(cmd.Meta[INSERT] == nil, func() { m.Design(INSERT, "", add(kit.Simple(kit.Split(s), kit.Split(ZoneField(m))))...) })
kit.If(cmd.Meta[CREATE] == nil, func() { m.Design(CREATE, "", add(kit.Split(kit.Select(s, Config(m, FIELD))))...) })
}
}}
}
func ZoneAction(arg ...ice.Any) ice.Actions {
return ice.Actions{ice.CTX_INIT: AutoConfig(append(kit.List(SHORT, ZONE, FIELD, ZONE_FIELD), arg...)...),
return ice.Actions{ice.CTX_INIT: ZoneConfig(append(kit.List(SHORT, ZONE, FIELDS, ZONE_FIELD), arg...)...),
INPUTS: {Hand: func(m *ice.Message, arg ...string) { ZoneInputs(m, arg) }},
CREATE: {Hand: func(m *ice.Message, arg ...string) { ZoneCreate(m, arg) }},
REMOVE: {Hand: func(m *ice.Message, arg ...string) { ZoneRemove(m, arg) }},
INSERT: {Hand: func(m *ice.Message, arg ...string) { ZoneInsert(m, arg) }},
MODIFY: {Hand: func(m *ice.Message, arg ...string) { ZoneModify(m, arg) }},
SELECT: {Name: "select zone id auto insert", Hand: func(m *ice.Message, arg ...string) { ZoneSelect(m, arg...) }},
SELECT: {Hand: func(m *ice.Message, arg ...string) { ZoneSelect(m, arg...) }},
EXPORT: {Hand: func(m *ice.Message, arg ...string) { ZoneExport(m, arg) }},
IMPORT: {Hand: func(m *ice.Message, arg ...string) { ZoneImport(m, arg) }},
}
}
func PageZoneAction(arg ...ice.Any) ice.Actions {
return ice.MergeActions(ice.Actions{
SELECT: {Name: "select zone id auto insert page", Hand: func(m *ice.Message, arg ...string) { PageZoneSelect(m, arg...) }},
SELECT: {Hand: func(m *ice.Message, arg ...string) { PageZoneSelect(m, arg...) }},
PREV: {Hand: func(m *ice.Message, arg ...string) { PrevPageLimit(m, arg[0], arg[1:]...) }},
NEXT: {Hand: func(m *ice.Message, arg ...string) { NextPage(m, arg[0], arg[1:]...) }},
}, ZoneAction(arg...))
@ -174,7 +204,7 @@ func ZoneKey(m *ice.Message) string {
func ZoneShort(m *ice.Message) string {
return kit.Select(ZONE, Config(m, SHORT), Config(m, SHORT) != UNIQ)
}
func ZoneField(m *ice.Message) string { return kit.Select(ZONE_FIELD, Config(m, FIELD)) }
func ZoneField(m *ice.Message) string { return kit.Select(ZONE_FIELD, Config(m, FIELDS)) }
func ZoneInputs(m *ice.Message, arg ...Any) {
m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, m.Option(ZoneKey(m)), arg)
}
@ -205,7 +235,7 @@ func ZoneModify(m *ice.Message, arg ...Any) {
}
func ZoneSelect(m *ice.Message, arg ...string) *ice.Message {
arg = kit.Slice(arg, 0, 2)
m.Fields(len(arg), kit.Select(kit.Fields(TIME, Config(m, SHORT), COUNT), Config(m, FIELDS)), ZoneField(m))
m.Fields(len(arg), kit.Select(kit.Fields(TIME, Config(m, SHORT), COUNT), Config(m, FIELD)), ZoneField(m))
if m.Cmdy(SELECT, m.PrefixKey(), "", ZONE, arg, logs.FileLineMeta(-1)); len(arg) == 0 {
m.Sort(ZoneShort(m)).PushAction(Config(m, ACTION), REMOVE).Action(CREATE).StatusTimeCount()
} else if len(arg) == 1 {
@ -235,5 +265,10 @@ func ZoneSelectCB(m *ice.Message, zone string, cb Any) *ice.Message {
}
func PageZoneSelect(m *ice.Message, arg ...string) *ice.Message {
OptionPages(m, kit.Slice(arg, 2)...)
return ZoneSelect(m, arg...)
if ZoneSelect(m, arg...); len(kit.Slice(arg, 0, 2)) == 0 {
m.Action(CREATE)
} else {
m.Action(INSERT, "page")
}
return m
}

View File

@ -49,6 +49,8 @@ func _cat_list(m *ice.Message, p string) {
kit.For(f, cb)
case func([]string, string):
kit.For(f, cb)
case func([]string):
kit.For(f, cb)
case nil:
if b, e := ioutil.ReadAll(f); !m.Warn(e) {
m.Echo(string(b)).StatusTime(FILE, p, SIZE, len(b))

View File

@ -98,9 +98,9 @@ func init() {
}
if len(arg) == 0 {
if m.IsMobileUA() {
m.Action("upload", "getClipboardData", "getLocation", "scanQRCode")
m.Action(mdb.CREATE, web.UPLOAD, "getClipboardData", "getLocation", "scanQRCode")
} else {
m.Action("getClipboardData", "upload", "record1", "record2")
m.Action(mdb.CREATE, web.UPLOAD, "getClipboardData", "record1", "record2")
}
}
m.Table(func(value ice.Maps) {

View File

@ -13,7 +13,7 @@ func init() {
FLOWS: {Name: "flows zone hash auto", Icon: "Automator.png", Help: "工作流", Actions: ice.MergeActions(ice.Actions{
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if mdb.IsSearchPreview(m, arg) {
mdb.HashSelect(m.Spawn(ice.OptionFields(""))).Table(func(value ice.Maps) {
mdb.HashSelects(m).Table(func(value ice.Maps) {
m.PushSearch(mdb.TYPE, "", mdb.NAME, value[mdb.ZONE], mdb.TEXT, value[mdb.ZONE], value)
})
}

View File

@ -149,7 +149,9 @@ Volcanos(chat.ONDETAIL, {
can.Update(can.request(event, can.Action("direct") == "horizon"? {from: item.hash}: {prev: item.hash}), [ctx.ACTION, mdb.INSERT]); break
default: can.ondetail._select(event, can, item)
} can.onkeymap.prevent(event) },
oncontextmenu: function(event, can, _sub, item) { can.user.carteItem(event, can, item) },
oncontextmenu: function(event, can, _sub, item) {
can.user.carteItem(event, can, can.base.CopyStr({action: item.action, zone: can.Option(mdb.ZONE)}, item))
},
})
Volcanos(chat.ONEXPORT, {
margin: function(can) { var margin = can.Action(html.MARGIN); return parseFloat(margin) },

View File

@ -14,7 +14,7 @@ const IFRAME = "iframe"
func init() {
Index.MergeCommands(ice.Commands{
IFRAME: {Name: "iframe hash@key auto app", Help: "浏览器", Icon: "Safari.png", Actions: ice.MergeActions(ice.Actions{
IFRAME: {Name: "iframe hash@key auto", Help: "浏览器", Icon: "Safari.png", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch mdb.HashInputs(m, arg); arg[0] {
case mdb.NAME:

View File

@ -12,7 +12,7 @@ const KEYBOARD = "keyboard"
func init() {
Index.MergeCommands(ice.Commands{
KEYBOARD: {Name: "keyboard hash auto", Help: "键盘", Actions: ice.MergeActions(ice.Actions{
KEYBOARD: {Help: "键盘", Actions: ice.MergeActions(ice.Actions{
web.SPACE: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.SPACE, m.Option(web.SPACE), arg) }},
}, mdb.HashAction(mdb.FIELD, "time,hash,space,index,input")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) > 0 {

View File

@ -84,10 +84,9 @@ func _autogen_gits(m *ice.Message, arg ...string) string {
func _autogen_git(m *ice.Message, arg ...string) ice.Map {
msg := m.Cmd("web.code.git.repos", "remote")
return kit.Dict(arg, aaa.USERNAME, ice.Info.Username, tcp.HOSTNAME, ice.Info.Hostname, nfs.PATH, kit.Path("")+nfs.PS, mdb.TIME, m.Time(),
GIT, m.Cmdx(cli.SYSTEM, GIT, VERSION), GO, m.Cmdx(cli.SYSTEM, GO, VERSION),
GIT, m.Cmdx(cli.SYSTEM, GIT, VERSION), GO, m.Cmdx(cli.SYSTEM, GO, VERSION), nfs.MODULE, _autogen_mod(m, ice.GO_MOD),
msg.AppendSimple("remote,branch,version,forword,author,email,hash,when,message"),
web.DOMAIN, strings.ReplaceAll(tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB)), "%2F", "/"),
nfs.MODULE, _autogen_mod(m, ice.GO_MOD),
web.DOMAIN, strings.ReplaceAll(tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB)), "%2F", nfs.PS),
cli.SYSTEM, ice.Info.System,
)
}

View File

@ -8,8 +8,7 @@ import (
"sync/atomic"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/lex"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
@ -17,11 +16,14 @@ import (
)
func _bench_http(m *ice.Message, target string, arg ...string) {
list := []*http.Request{}
nconn := kit.Int64(kit.Select("10", m.Option(NCONN)))
nreqs := kit.Int64(kit.Select("100", m.Option(NREQS)))
list := []*http.Request{}
for _, v := range strings.Split(target, lex.NL) {
switch ls := kit.Split(v); ls[0] {
m.Cmd(nfs.CAT, "", kit.Dict(nfs.CAT_CONTENT, target), func(ls []string, text string) {
if len(ls) == 0 || strings.HasPrefix(text, "#") {
return
}
switch ls[0] {
case http.MethodPost:
if f, e := nfs.OpenFile(m, ls[2]); m.Assert(e) {
defer f.Close()
@ -29,12 +31,15 @@ func _bench_http(m *ice.Message, target string, arg ...string) {
list = append(list, req)
}
}
case http.MethodGet:
ls = ls[1:]
fallthrough
default:
if req, err := http.NewRequest(http.MethodGet, v, nil); m.Assert(err) {
if req, err := http.NewRequest(http.MethodGet, ls[0], nil); m.Assert(err) {
list = append(list, req)
}
}
}
})
var ndata int64
if s, e := bench.HTTP(nconn, nreqs, list, func(req *http.Request, res *http.Response) {
n, _ := io.Copy(ioutil.Discard, res.Body)
@ -58,9 +63,9 @@ const BENCH = "bench"
func init() {
Index.MergeCommands(ice.Commands{
BENCH: {Name: "bench zone id auto insert", Help: "压测", Actions: ice.MergeActions(ice.Actions{
mdb.INSERT: {Name: "insert zone*=demo type*=http,redis name=demo text*='http://localhost:9020/chat/cmd/run/web.chat.favor' nconn=10 nreqs=100"},
ctx.RUN: {Hand: func(m *ice.Message, arg ...string) {
BENCH: {Help: "压测", Actions: ice.MergeActions(ice.Actions{
mdb.INSERT: {Name: "insert zone*=demo type*=http,redis name=demo text*='http://localhost:9020/chat/cmd/web.chat.favor' nconn=10 nreqs=100"},
cli.START: {Hand: func(m *ice.Message, arg ...string) {
switch m.Option(mdb.TYPE) {
case HTTP:
_bench_http(m, m.Option(mdb.TEXT))
@ -68,8 +73,8 @@ func init() {
_bench_redis(m, m.Option(mdb.TEXT))
}
}},
}, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,nconn,nreqs")), Hand: func(m *ice.Message, arg ...string) {
mdb.ZoneSelect(m, arg...).PushAction(kit.Select(ctx.RUN, mdb.REMOVE, len(arg) == 0))
}, mdb.ZoneAction(mdb.FIELDS, "time,id,type,name,text,nconn,nreqs")), Hand: func(m *ice.Message, arg ...string) {
mdb.ZoneSelect(m, arg...).PushAction(kit.Select(cli.START, mdb.REMOVE, len(arg) == 0))
}},
})
}

View File

@ -19,11 +19,9 @@ import (
func _binpack_file(m *ice.Message, w io.Writer, arg ...string) {
if kit.IsIn(kit.Ext(arg[0]), "zip", "gz") {
return
}
if kit.Contains(arg[0], "/dist/", "/bin/", "/log/") {
} else if kit.Contains(arg[0], "/dist/", "/bin/", "/log/") {
return
}
if strings.HasPrefix(arg[0], "usr/volcanos/publish/") && !strings.HasSuffix(arg[0], "/proto.js") {
} else if strings.HasPrefix(arg[0], "usr/volcanos/publish/") && !strings.HasSuffix(arg[0], "/proto.js") {
return
}
switch arg[0] {
@ -36,9 +34,7 @@ func _binpack_file(m *ice.Message, w io.Writer, arg ...string) {
if f, e := nfs.OpenFile(m, arg[0]); !m.Warn(e, ice.ErrNotFound, arg[0]) {
defer f.Close()
if b, e := ioutil.ReadAll(f); !m.Warn(e, ice.ErrNotValid, arg[0]) {
if len(b) > 1<<20 {
m.Warn("too larger %s %s", arg[0], len(b))
}
kit.If(len(b) > 1<<20, func() { m.Warn("too larger %s %s", arg[0], len(b)) })
fmt.Fprintf(w, " \"%s\": \"%s\",\n", kit.Select(arg[0], arg, 1), base64.StdEncoding.EncodeToString(b))
}
}

View File

@ -49,7 +49,7 @@ func init() {
m.Cmdy(web.SPIDE, m.Option(ice.DEV), web.SPIDE_RAW, m.Option(ice.CMD), m.Option(cli.API), web.SPIDE_DATA, m.Option(ice.ARG)).ProcessInner()
m.StatusTime(nfs.SCRIPT, `curl "`+kit.MergeURL2(m.Cmd(web.SPIDE, m.Option(ice.DEV)).Append(web.CLIENT_ORIGIN), m.Option(cli.API))+`" -H "Content-Type: application/json"`+` -d '`+m.Option(ice.ARG)+`'`)
}},
}, mdb.ZoneAction(mdb.FIELD, "time,id,name,cmd,api,arg,res")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ZoneAction(mdb.FIELDS, "time,id,name,cmd,api,arg,res")), Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 0 {
m.Cmdy(web.SPIDE).RenameAppend(web.CLIENT_NAME, ice.DEV, web.CLIENT_URL, "address")
} else if mdb.ZoneSelect(m, arg[1:]...); len(arg) > 1 {

View File

@ -9,14 +9,14 @@ publish.go
upgrade.go
install.go
vimer.go
inner.go
xterm.go
xterm.shy
xterm.go
inner.go
vimer.go
repos.go
favor.go
bench.go
pprof.go
favor.go
repos.go
case.go
c.go

View File

@ -51,26 +51,8 @@ func _compile_get(m *ice.Message, main string) {
}
}
})
_list := map[string]bool{}
m.Cmd(lex.SPLIT, ice.GO_MOD, func(ls []string) {
switch ls[0] {
case "module":
_list[ls[1]] = true
case "require":
if ls[1] == "(" {
block = true
} else {
_list[ls[1]] = true
}
case ")":
block = false
default:
if block {
_list[kit.Select("", ls, 0)] = true
}
}
})
kit.For(list, func(p string) {
_list := _compile_mod(m)
if _, ok := _list[p]; ok {
return
} else if ls := kit.Slice(strings.Split(p, nfs.PS), 0, 3); _list[path.Join(ls...)] {
@ -79,6 +61,28 @@ func _compile_get(m *ice.Message, main string) {
m.Cmd(cli.SYSTEM, GO, "get", p)
})
}
func _compile_mod(m *ice.Message) map[string]bool {
block, list := false, map[string]bool{}
m.Cmd(lex.SPLIT, ice.GO_MOD, func(ls []string) {
switch ls[0] {
case "module":
list[ls[1]] = true
case "require":
if ls[1] == "(" {
block = true
} else {
list[ls[1]] = true
}
case ")":
block = false
default:
if block {
list[kit.Select("", ls, 0)] = true
}
}
})
return list
}
const COMPILE = "compile"
@ -90,11 +94,6 @@ func init() {
Index.MergeCommands(ice.Commands{
COMPILE: {Name: "compile arch=amd64,386,arm,arm64,mipsle os=linux,darwin,windows src=src/main.go@key run binpack webpack devpack install", Icon: "go.png", Help: "编译", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { cli.IsAlpine(m, GO, "go git") }},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
mdb.IsSearchPreview(m, arg, func() []string {
return []string{ice.CMD, m.CommandKey(), kit.Format(kit.Simple(runtime.GOARCH, runtime.GOOS))}
})
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case SERVICE:

View File

@ -12,7 +12,8 @@ const FAVOR = "favor"
func init() {
Index.MergeCommands(ice.Commands{
FAVOR: {Name: "favor zone id auto insert page", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
FAVOR: {Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create zone*=数据结构"},
mdb.INSERT: {Name: "insert zone*=数据结构 type=go name*=hi text*=hello path file line"},
XTERM: {Help: "命令", Hand: func(m *ice.Message, arg ...string) {
msg := mdb.ZoneSelects(m.Spawn(), m.Option(mdb.ZONE), m.Option(mdb.ID))
@ -22,9 +23,10 @@ func init() {
msg := mdb.ZoneSelects(m.Spawn(), m.Option(mdb.ZONE), m.Option(mdb.ID))
ctx.Process(m, "", msg.OptionSplit(nfs.PATH, nfs.FILE, nfs.LINE), arg...)
}},
}, mdb.PageZoneAction(mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.PageZoneAction(mdb.FIELDS, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) {
if mdb.PageZoneSelect(m, arg...); len(arg) > 0 && arg[0] != "" {
m.Table(func(value ice.Maps) { m.PushButton(kit.Select(INNER, XTERM, value[nfs.FILE] == "")) }).Option(ctx.STYLE, arg[0])
m.Table(func(value ice.Maps) { m.PushButton(kit.Select(INNER, XTERM, value[nfs.FILE] == "")) })
m.Option(ctx.STYLE, arg[0])
}
}},
})

View File

@ -68,7 +68,6 @@ const (
OPERATOR = lex.OPERATOR
PREFIX = lex.PREFIX
SUFFIX = lex.SUFFIX
INCLUDE = "include"
)
const (
COMMENT = "comment"

View File

@ -31,37 +31,33 @@ func _install_download(m *ice.Message) {
link := m.Option(web.LINK)
name := path.Base(kit.ParseURL(link).Path)
file := path.Join(kit.Select(ice.USR_INSTALL, m.Option(nfs.PATH)), name)
defer m.Cmdy(nfs.DIR, file)
if nfs.Exists(m, file) {
m.Cmdy(nfs.DIR, file)
return
}
mdb.HashCreate(m.Cmd(nfs.SAVE, file, ""), mdb.NAME, name, nfs.PATH, file, web.LINK, link)
web.GoToast(m, name, func(toast func(string, int, int)) (list []string) {
defer nfs.TarExport(m, file)
begin := time.Now()
if mdb.Config(m, "repos") != "" {
web.SpideSave(m, file, mdb.Config(m, "repos")+path.Base(link), func(count, total, value int) {
_toast := func(count, total, value int) {
cost := time.Now().Sub(begin)
mdb.HashSelectUpdate(m, name, func(value ice.Map) { value[mdb.COUNT], value[mdb.TOTAL], value[mdb.VALUE] = count, total, value })
toast(kit.FormatShow(nfs.FROM, begin.Format("15:04:05"), cli.COST, kit.FmtDuration(cost), cli.REST, kit.FmtDuration(cost*time.Duration(101)/time.Duration(value+1)-cost)), count, total)
})
mdb.HashSelectUpdate(m, name, func(value ice.Map) { value[mdb.COUNT], value[mdb.TOTAL], value[mdb.VALUE] = count, total, value })
}
defer nfs.TarExport(m, file)
if mdb.Config(m, nfs.REPOS) != "" {
web.SpideSave(m, file, mdb.Config(m, nfs.REPOS)+path.Base(link), _toast)
if s, e := nfs.StatFile(m, file); e == nil && s.Size() > 0 {
return
}
}
web.SpideSave(m, file, link, func(count, total, value int) {
cost := time.Now().Sub(begin)
mdb.HashSelectUpdate(m, name, func(value ice.Map) { value[mdb.COUNT], value[mdb.TOTAL], value[mdb.VALUE] = count, total, value })
toast(kit.FormatShow(nfs.FROM, begin.Format("15:04:05"), cli.COST, kit.FmtDuration(cost), cli.REST, kit.FmtDuration(cost*time.Duration(101)/time.Duration(value+1)-cost)), count, total)
})
web.SpideSave(m, file, link, _toast)
return
})
if s, e := nfs.StatFile(m, file); e == nil && s.Size() > 0 {
m.Cmdy(nfs.DIR, file)
web.ToastSuccess(m)
} else {
nfs.Trash(m, file)
web.ToastFailure(m)
nfs.Trash(m, file)
}
}
func _install_build(m *ice.Message, arg ...string) string {
@ -106,9 +102,7 @@ func _install_spawn(m *ice.Message, arg ...string) {
target, source := path.Join(ice.USR_LOCAL_DAEMON, m.Option(tcp.PORT)), _install_path(m, "")
nfs.MkdirAll(m, target)
defer m.Echo(target)
if m.Option(INSTALL) == "" && nfs.Exists(m, kit.Path(source, _INSTALL)) {
m.Option(INSTALL, _INSTALL)
}
kit.If(m.Option(INSTALL) == "" && nfs.Exists(m, kit.Path(source, _INSTALL)), func() { m.Option(INSTALL, _INSTALL) })
nfs.DirDeepAll(m.Spawn(), path.Join(source, m.Option(INSTALL)), "", func(value ice.Maps) {
m.Cmd(nfs.LINK, path.Join(target, value[nfs.PATH]), path.Join(source, m.Option(INSTALL), value[nfs.PATH]), kit.Dict(ice.LOG_DISABLE, ice.TRUE))
})
@ -222,7 +216,3 @@ func InstallAction(args ...ice.Any) ice.Actions {
nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { nfs.Trash(m, m.Option(nfs.PATH)) }},
}
}
func init() {
return
ice.Info.Stack[Prefix(InstallAction)] = func(m *ice.Message, key string, arg ...ice.Any) ice.Any { return InstallAction(arg...) }
}

View File

@ -9,6 +9,7 @@ import (
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/lex"
"shylinux.com/x/icebergs/base/log"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp"
@ -24,12 +25,14 @@ func init() {
SERVICE = "service"
SECONDS = "seconds"
)
web.Index.MergeCommands(ice.Commands{"/debug/": {Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) {
defer m.Render(ice.RENDER_VOID)
web.Index.MergeCommands(ice.Commands{
web.PP(log.DEBUG): {Hand: func(m *ice.Message, arg ...string) {
http.DefaultServeMux.ServeHTTP(m.W, m.R)
}}})
m.Render(ice.RENDER_VOID)
}},
})
Index.MergeCommands(ice.Commands{
PPROF: {Name: "pprof zone id auto", Help: "优化", Actions: ice.MergeActions(ice.Actions{
PPROF: {Help: "优化", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case BINNARY:
@ -38,16 +41,15 @@ func init() {
m.Cmd(web.SPIDE, func(value ice.Maps) { m.Push(SERVICE, kit.MergeURL2(value[web.CLIENT_URL], "/debug/pprof/profile")) })
}
}},
mdb.CREATE: {Name: "create zone*=some binnary*=bin/ice.bin service*='http://localhost:9020/debug/pprof/profile' seconds*=30"},
mdb.CREATE: {Name: "create zone*=demo binnary*=bin/ice.bin service*='http://localhost:9020/debug/pprof/profile' seconds*=30"},
cli.START: {Help: "启动", Hand: func(m *ice.Message, arg ...string) {
if m.Option(BINNARY) == "" {
return
}
msg := m.Cmd(web.SPIDE, ice.DEV, web.SPIDE_CACHE, http.MethodGet, m.Option(SERVICE), m.OptionSimple(SECONDS))
cmd := kit.Simple(mdb.Configv(m, PPROF), "-text", m.Option(BINNARY), msg.Append(nfs.FILE))
defer web.ToastProcess(m)()
mdb.HashSelect(m, m.Option(mdb.ZONE))
msg := m.Cmd(web.SPIDE, ice.DEV, web.SPIDE_CACHE, http.MethodGet, m.Append(SERVICE), m.AppendSimple(SECONDS))
cmd := kit.Simple(mdb.Configv(m, PPROF), "-text", m.Append(BINNARY), msg.Append(nfs.FILE))
m.Option(mdb.TEXT, strings.Join(kit.Slice(strings.Split(m.Cmdx(cli.SYSTEM, cmd), lex.NL), 0, 20), lex.NL))
mdb.ZoneInsert(m, m.OptionSimple("zone,text"), msg.AppendSimple(nfs.FILE))
m.Echo(m.Option(mdb.TEXT)).ProcessInner()
m.SetAppend().Echo(m.Option(mdb.TEXT)).ProcessInner()
}},
web.SERVE: {Help: "展示", Hand: func(m *ice.Message, arg ...string) {
u := web.UserWeb(m)
@ -55,12 +57,13 @@ func init() {
m.Cmd(cli.DAEMON, mdb.Configv(m, PPROF), "-http="+p, m.Option(BINNARY), m.Option(nfs.FILE))
m.Sleep3s().ProcessOpen(kit.Format("http://%s/ui/top", p))
}},
}, mdb.ZoneAction(mdb.FIELDS, "time,zone,count,binnary,service,seconds", mdb.FIELD, "time,id,text,file", PPROF, kit.List(GO, "tool", PPROF))), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ZoneAction(mdb.FIELD, "time,zone,count,binnary,service,seconds", mdb.FIELDS, "time,id,text,file", PPROF, kit.List(GO, "tool", PPROF))), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.EchoAnchor(web.MergeLink(m, "/debug/pprof/"))
m.PushAction(cli.START, mdb.REMOVE).Action(mdb.CREATE)
} else {
m.Table(func(value ice.Maps) { m.PushDownload(mdb.LINK, "pprof.pd.gz", value[nfs.FILE]).PushButton(web.SERVE) })
m.Action(cli.START)
}
}},
})

View File

@ -37,14 +37,12 @@ func _publish_file(m *ice.Message, file string, arg ...string) string {
return m.Cmdx(nfs.LINK, path.Join(ice.USR_PUBLISH, kit.Select(path.Base(file), arg, 0)), file)
}
func _publish_contexts(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_ROOT, "")
m.OptionDefault(ice.MSG_USERNAME, "demo")
m.Options(nfs.DIR_ROOT, "").OptionDefault(ice.MSG_USERNAME, "demo")
for _, k := range kit.Default(arg, ice.MISC) {
m.Options(web.DOMAIN, web.UserHost(m), cli.CTX_ENV, kit.Select("", lex.SP+kit.JoinKV(mdb.EQ, lex.SP, cli.CTX_POD, m.Option(ice.MSG_USERPOD)), m.Option(ice.MSG_USERPOD) != ""))
switch k {
case INSTALL:
m.Echo(strings.TrimSpace(nfs.Template(m, kit.Keys(ice.MISC, SH))))
return
m.Option("format", "raw")
case ice.BASE:
m.Option(web.DOMAIN, m.Cmd(web.SPIDE, ice.SHY).Append(web.CLIENT_ORIGIN))
case ice.CORE:
@ -52,12 +50,9 @@ func _publish_contexts(m *ice.Message, arg ...string) {
case nfs.SOURCE, "dev":
m.Options(nfs.SOURCE, ice.Info.Make.Remote)
case nfs.BINARY, "app":
case "wget", "curl":
case "curl", "wget":
case "manual":
m.Options(nfs.BINARY, "ice.linux.amd64")
default:
// _publish_file(m, ice.ICE_BIN)
}
if m.Option("format") == "raw" {
m.Echo(strings.TrimSpace(nfs.Template(m, kit.Keys(k, SH))))
@ -70,57 +65,44 @@ func _publish_contexts(m *ice.Message, arg ...string) {
const PUBLISH = "publish"
func init() {
web.Index.MergeCommands(ice.Commands{
web.PP(ice.PUBLISH): {Name: "/publish/", Help: "定制化", Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) {
Index.MergeCommands(ice.Commands{
web.PP(ice.PUBLISH): {Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) {
web.ShareLocalFile(m, ice.USR_PUBLISH, path.Join(arg...))
}},
})
Index.MergeCommands(ice.Commands{
PUBLISH: {Name: "publish path auto create volcanos icebergs intshell", Help: "发布", Actions: ice.MergeActions(ice.Actions{
ice.VOLCANOS: {Help: "火山架", Hand: func(m *ice.Message, arg ...string) {
_publish_list(m, kit.ExtReg(HTML, CSS, JS)).EchoQRCode(m.Option(ice.MSG_USERWEB))
}},
ice.ICEBERGS: {Help: "冰山架", Hand: func(m *ice.Message, arg ...string) {
_publish_bin_list(m).Cmdy("", ice.CONTEXTS)
}},
ice.INTSHELL: {Help: "神农架", Hand: func(m *ice.Message, arg ...string) {
_publish_list(m, kit.ExtReg(SH, VIM, CONF))
}},
ice.VOLCANOS: {Help: "火山架", Hand: func(m *ice.Message, arg ...string) { _publish_list(m, kit.ExtReg(HTML, CSS, JS)) }},
ice.ICEBERGS: {Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { _publish_bin_list(m).Cmdy("", ice.CONTEXTS) }},
ice.INTSHELL: {Help: "神农架", Hand: func(m *ice.Message, arg ...string) { _publish_list(m, kit.ExtReg(SH, VIM, CONF)) }},
ice.CONTEXTS: {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, arg...) }},
nfs.SOURCE: {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, nfs.SOURCE) }},
nfs.BINARY: {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, nfs.BINARY) }},
"curl": {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, "curl") }},
"wget": {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, "wget") }},
"manual": {Hand: func(m *ice.Message, arg ...string) {
host := web.UserHost(m)
args := ""
if m.Option(ice.MSG_USERPOD) != "" {
args = "?pod=" + m.Option(ice.MSG_USERPOD)
}
host, args := web.UserHost(m), ""
kit.If(m.Option(ice.MSG_USERPOD), func(p string) { args = "?pod=" + p })
m.Cmdy("web.wiki.spark", "shell",
cli.LINUX, kit.Format(`curl -fSL -O "%s/publish/ice.linux.amd64%s"`, host, args),
cli.DARWIN, kit.Format(`curl -fSL -O "%s/publish/ice.darwin.amd64%s"`, host, args),
cli.WINDOWS, kit.Format(`curl -fSL -O "%s/publish/ice.windows.amd64%s"`, host, args),
)
}},
"wget": {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, "wget") }},
"curl": {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, "curl") }},
"version": {Hand: func(m *ice.Message, arg ...string) {
nfs.VERSION: {Hand: func(m *ice.Message, arg ...string) {
defer m.Echo("<table>").Echo("</table>")
for _, cpu := range []string{cli.AMD64, cli.X86, cli.ARM} {
m.Echo("<tr>")
for _, sys := range []string{cli.LINUX, cli.WINDOWS, cli.DARWIN} {
m.Echo("<td>")
if file := fmt.Sprintf("ice.%s.%s", sys, cpu); nfs.Exists(m, "usr/publish/"+file) {
kit.For([]string{cli.AMD64, cli.X86, cli.ARM}, func(cpu string) {
defer m.Echo("<tr>").Echo("</tr>")
kit.For([]string{cli.LINUX, cli.WINDOWS, cli.DARWIN}, func(sys string) {
defer m.Echo("<td>").Echo("</td>")
if file := fmt.Sprintf("ice.%s.%s", sys, cpu); nfs.Exists(m, ice.USR_PUBLISH+file) {
m.EchoAnchor(file, "/publish/"+file)
}
m.Echo("</td>")
}
m.Echo("</tr>")
}
})
})
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.DIR, arg[1:], nfs.DIR_CLI_FIELDS) }},
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { _publish_file(m, m.Option(nfs.PATH)) }},
nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { nfs.Trash(m, path.Join(ice.USR_PUBLISH, m.Option(nfs.PATH))) }},
}, ctx.ConfAction(mdb.FIELD, nfs.PATH), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
}, aaa.RoleAction(), ctx.ConfAction(mdb.FIELD, nfs.PATH)), Hand: func(m *ice.Message, arg ...string) {
if m.Option(nfs.DIR_ROOT, ice.USR_PUBLISH); len(arg) == 0 {
_publish_list(m).Cmdy("", ice.CONTEXTS, ice.APP)
} else {

View File

@ -2,7 +2,9 @@ package code
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
)
const (
@ -11,7 +13,9 @@ const (
const REPOS = nfs.REPOS
func init() {
Index.MergeCommands(ice.Commands{REPOS: {Name: "repos repos auto", Actions: ice.Actions{
"status": {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.git.status", arg) }},
}, Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.git.repos", arg) }}})
Index.MergeCommands(ice.Commands{
REPOS: {Name: "repos repos branch commit file auto", Actions: ice.Actions{
mdb.STATUS: {Help: "状态", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.CODE_GIT_STATUS, arg) }},
}, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.CODE_GIT_REPOS, arg) }},
})
}

View File

@ -18,17 +18,20 @@ const UPGRADE = "upgrade"
func init() {
Index.Merge(&ice.Context{Configs: ice.Configs{
UPGRADE: {Value: kit.Dict(mdb.HASH, kit.Dict(
UPGRADE: {Value: kit.Dict(
mdb.META, kit.Dict(mdb.FIELD, "type,file,path"),
mdb.HASH, kit.Dict(
nfs.TARGET, kit.Dict(mdb.LIST, kit.List(mdb.TYPE, ice.BIN, nfs.FILE, ice.ICE_BIN)),
ctx.CONFIG, kit.Dict(mdb.LIST, kit.List(mdb.TYPE, nfs.SHY, nfs.FILE, ice.ETC_LOCAL_SHY)),
nfs.BINARY, kit.Dict(mdb.LIST, kit.List(mdb.TYPE, nfs.TAR, nfs.FILE, "contexts.bin.tar.gz")),
nfs.SOURCE, kit.Dict(mdb.LIST, kit.List(mdb.TYPE, nfs.TAR, nfs.FILE, "contexts.src.tar.gz")),
ctx.CONFIG, kit.Dict(mdb.LIST, kit.List(mdb.TYPE, nfs.SHY, nfs.FILE, ice.ETC_LOCAL_SHY)),
COMPILE, kit.Dict(mdb.LIST, kit.List(mdb.TYPE, nfs.TAR, nfs.FILE, "go1.15.5", nfs.PATH, ice.USR_LOCAL)),
), mdb.META, kit.Dict(mdb.FIELD, "type,file,path"))},
)),
},
}, Commands: ice.Commands{
UPGRADE: {Name: "upgrade item=target,config,binary,source,compile run restart", Help: "升级", Actions: ice.MergeActions(ice.Actions{
UPGRADE: {Name: "upgrade item=target,config,binary,source,compile run restart", Help: "升级", Actions: ice.Actions{
cli.RESTART: {Hand: func(m *ice.Message, arg ...string) { m.Go(func() { m.Sleep30ms(ice.EXIT, 1) }) }},
}), Hand: func(m *ice.Message, arg ...string) {
}, Hand: func(m *ice.Message, arg ...string) {
mdb.ZoneSelect(m.Spawn(), kit.Select(nfs.TARGET, arg, 0)).Table(func(value ice.Maps) {
if kit.Select("", arg, 0) == COMPILE {
value[nfs.FILE] = kit.Keys(kit.Format(value[nfs.FILE]), runtime.GOOS+"-"+runtime.GOARCH, kit.Select("tar.gz", "zip", runtime.GOOS == cli.WINDOWS))
@ -39,9 +42,9 @@ func init() {
m.Option(ice.EXIT, ice.TRUE)
}
uri := "/publish/" + kit.Format(value[nfs.FILE])
if os.Getenv(cli.CTX_POD) != "" {
uri = kit.MergeURL2(os.Getenv(cli.CTX_DEV), "/chat/pod/"+os.Getenv(cli.CTX_POD), cli.GOOS, runtime.GOOS, cli.GOARCH, runtime.GOARCH)
}
kit.If(os.Getenv(cli.CTX_POD), func(p string) {
uri = kit.MergeURL2(os.Getenv(cli.CTX_DEV), web.CHAT_POD+p, cli.GOOS, runtime.GOOS, cli.GOARCH, runtime.GOARCH)
})
dir := path.Join(kit.Format(value[nfs.PATH]), kit.Format(value[nfs.FILE]))
switch web.SpideSave(m, dir, uri, nil); value[mdb.TYPE] {
case nfs.TAR:
@ -53,8 +56,8 @@ func init() {
m.Cmdy(nfs.DIR, dir, "time,size,path,hash")
})
if web.ToastSuccess(m); m.Option(ice.EXIT) == ice.TRUE {
m.Cmd("", cli.RESTART)
web.Toast(m, cli.RESTART)
m.Cmd("", cli.RESTART)
}
}},
}})

View File

@ -134,9 +134,7 @@ func init() {
_webpack_cache(m.Spawn(), _volcanos(m), false)
m.Cmdy("")
}},
mdb.INSERT: {Name: "insert path*", Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m)
}},
mdb.INSERT: {Name: "insert path*", Hand: func(m *ice.Message, arg ...string) { mdb.HashCreate(m) }},
cli.BUILD: {Name: "build name*=hi", Hand: func(m *ice.Message, arg ...string) {
// kit.If(!nfs.Exists(m, USR_PUBLISH_CAN_JS), func() { m.Cmd("", mdb.CREATE) })
_webpack_build(m, _publish(m, m.Option(mdb.NAME)))

View File

@ -2,7 +2,6 @@ package code
import (
"encoding/base64"
"os"
"path"
"strings"
@ -22,9 +21,7 @@ import (
func _xterm_get(m *ice.Message, h string) xterm.XTerm {
h = kit.Select(m.Option(mdb.HASH), h)
m.Assert(h != "")
m.Option("skip.important", ice.TRUE)
if m.Option(ice.MSG_USERPOD) == "" {
if m.Assert(h != ""); m.Option(ice.MSG_USERPOD) == "" {
mdb.HashModify(m, mdb.TIME, m.Time(), cli.DAEMON, kit.Keys(m.Option(ice.MSG_DAEMON)))
} else {
mdb.HashModify(m, mdb.TIME, m.Time(), cli.DAEMON, kit.Keys(kit.Slice(kit.Simple(m.Optionv("__target")), 0, -1), m.Option(ice.MSG_DAEMON)))
@ -33,25 +30,18 @@ func _xterm_get(m *ice.Message, h string) xterm.XTerm {
text := strings.Split(value[mdb.TEXT], lex.NL)
ls := kit.Split(strings.Split(kit.Select(ISH, value[mdb.TYPE]), " # ")[0])
kit.If(value[nfs.PATH] != "" && !strings.HasSuffix(value[nfs.PATH], nfs.PS), func() { value[nfs.PATH] = path.Dir(value[nfs.PATH]) })
m.Debug("command %v %v", ls, value)
term, e := xterm.Command(m, value[nfs.PATH], kit.Select(ls[0], cli.SystemFind(m, ls[0], value[nfs.PATH])), ls[1:]...)
if m.Warn(e) {
return nil
}
m.Go(func() {
defer term.Close()
defer mdb.HashRemove(m, mdb.HASH, h)
m.Log(cli.START, strings.Join(ls, lex.SP))
defer mdb.HashRemove(m, mdb.HASH, h)
buf := make([]byte, ice.MOD_BUFS)
for {
if n, e := term.Read(buf); !m.Warn(e) && e == nil {
if _xterm_echo(m, h, string(buf[:n])); len(text) > 0 {
if cmd := text[0]; text[0] != "" {
m.Go(func() {
m.Sleep30ms()
term.Writeln(cmd)
})
}
kit.If(text[0], func(cmd string) { m.Go(func() { m.Sleep30ms(); term.Writeln(cmd) }) })
text = text[1:]
}
} else {
@ -78,16 +68,17 @@ const (
const XTERM = "xterm"
func init() {
shell := kit.Env("SHELL", "/bin/sh")
Index.MergeCommands(ice.Commands{
XTERM: {Name: "xterm hash auto", Icon: "Terminal.png", Help: "命令行", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
kit.If(m.Cmd("").Length() == 0, func() { m.Cmd("", mdb.CREATE, mdb.TYPE, ISH) })
kit.If(m.Cmd("").Length() == 0, func() {
m.Cmd("", mdb.CREATE, mdb.TYPE, shell)
m.Cmd("", mdb.CREATE, mdb.TYPE, "/bin/ish")
})
}},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == SHELL {
m.PushSearch(mdb.TYPE, ssh.SHELL, mdb.NAME, SH, mdb.TEXT, "/bin/sh")
}
mdb.IsSearchPreview(m, arg, func() []string { return []string{ssh.SHELL, SH, kit.Select("/bin/sh", os.Getenv("SHELL"))} })
mdb.IsSearchPreview(m, arg, func() []string { return []string{ssh.SHELL, SH, shell} })
mdb.IsSearchPreview(m, arg, func() []string { return []string{ssh.SHELL, ISH, "/bin/ish"} })
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
@ -95,8 +86,7 @@ func init() {
case mdb.HASH:
fallthrough
case mdb.TYPE:
m.Push(arg[0], "/bin/ish", kit.Select("/bin/sh", os.Getenv("SHELL")))
m.Cmd(mdb.SEARCH, mdb.FOREACH, ssh.SHELL, ice.OptionFields("type,name,text"), func(value ice.Maps) {
m.Cmd(mdb.SEARCH, mdb.FOREACH, "", "", func(value ice.Maps) {
kit.If(value[mdb.TYPE] == ssh.SHELL, func() { m.Push(arg[0], value[mdb.TEXT]) })
})
case mdb.NAME:
@ -117,7 +107,7 @@ func init() {
}
}},
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
m.ProcessRewrite(mdb.HASH, mdb.HashCreate(m, arg))
m.ProcessRewrite(mdb.HASH, mdb.HashCreate(m))
}},
html.RESIZE: {Hand: func(m *ice.Message, arg ...string) {
_xterm_get(m, "").Setsize(m.OptionDefault("rows", "24"), m.OptionDefault("cols", "80"))
@ -128,29 +118,17 @@ func init() {
}
}},
html.OUTPUT: {Help: "全屏", Hand: func(m *ice.Message, arg ...string) {
web.ProcessPodCmd(m, "", "", m.OptionSimple(mdb.HASH), ctx.STYLE, html.OUTPUT)
web.ProcessPodCmd(m, "", "", mdb.HASH, kit.Select(m.Option(mdb.HASH), arg, 0), ctx.STYLE, html.OUTPUT)
}},
web.DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) {
kit.Switch(m.Option(mdb.TYPE), kit.Simple(web.SERVER, web.WORKER), func() { m.PushButton(kit.Dict(m.CommandKey(), "终端")) })
}},
web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { web.DreamProcess(m, []string{}, arg...) }},
ctx.PROCESS: {Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 1 {
ctx.ProcessField(m, m.PrefixKey(), arg, arg...)
} else {
ctx.ProcessField(m, m.PrefixKey(), func() string { return m.Cmdx("", mdb.CREATE, arg) }, arg...)
}
}},
"install": {Help: "安装", Hand: func(m *ice.Message, arg ...string) {
INSTALL: {Help: "安装", Hand: func(m *ice.Message, arg ...string) {
_xterm_get(m, kit.Select("", arg, 0)).Write([]byte(m.Cmdx(PUBLISH, ice.CONTEXTS, ice.APP, kit.Dict("format", "raw")) + ice.NL))
m.ProcessHold()
}},
"terminal": {Help: "本机", Hand: func(m *ice.Message, arg ...string) {
ice.APP: {Help: "本机", Hand: func(m *ice.Message, arg ...string) {
if h := kit.Select(m.Option(mdb.HASH), arg, 0); h == "" {
cli.Opens(m, "Terminal.app")
} else {
msg := m.Cmd("", h)
cli.OpenCmds(m, msg.Append(mdb.TYPE))
cli.OpenCmds(m, m.Cmdv("", h, mdb.TYPE))
}
m.ProcessHold()
}},
@ -160,35 +138,33 @@ func init() {
m.Push(arg[0], SHELL)
case mdb.TEXT:
if m.Option(mdb.TYPE) == SHELL {
m.Push(arg[0], "/bin/ish", kit.Select("/bin/sh", os.Getenv("SHELL")))
m.Cmd(mdb.SEARCH, mdb.FOREACH, "", "", func(value ice.Maps) {
kit.If(value[mdb.TYPE] == ssh.SHELL, func() { m.Push(arg[0], value[mdb.TEXT]) })
})
}
}
}},
chat.FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) {
kit.If(m.Option(mdb.TYPE) == SHELL, func() {
m.PushButton(kit.Dict(m.CommandKey(), "终端"))
})
kit.If(m.Option(mdb.TYPE) == SHELL, func() { m.PushButton(kit.Dict(m.CommandKey(), "终端")) })
}},
chat.FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(mdb.TYPE) == SHELL {
kit.If(m.Option(mdb.TYPE) == SHELL, func() {
ctx.ProcessField(m, m.PrefixKey(), m.Cmdx("", mdb.CREATE, mdb.TYPE, m.Option(mdb.TEXT), mdb.NAME, m.Option(mdb.NAME), mdb.TEXT, ""))
}
})
}},
}, chat.FavorAction(), ctx.ProcessAction(), mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,path,theme,daemon")), Hand: func(m *ice.Message, arg ...string) {
web.DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) {
kit.Switch(m.Option(mdb.TYPE), kit.Simple(web.WORKER, web.SERVER), func() { m.PushButton(kit.Dict(m.CommandKey(), "终端")) })
}},
web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) {
web.DreamProcess(m, []string{}, arg...)
}},
}, chat.FavorAction(), ctx.ProcessAction(), mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,path")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) == 0 {
if m.Length() == 0 {
m.Action(mdb.CREATE)
m.Action(mdb.CREATE, mdb.PRUNES, ice.APP)
} else {
m.PushAction(html.OUTPUT, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES, "terminal")
}
} else {
if m.Length() == 0 {
arg[0] = m.Cmdx("", mdb.CREATE, kit.SimpleKV("type,name,text,path", arg))
mdb.HashSelect(m, arg[0])
}
m.Push(mdb.HASH, arg[0])
kit.If(m.Length() == 0, func() { arg[0] = m.Cmdx("", mdb.CREATE, arg); mdb.HashSelect(m, arg[0]) })
m.Push(mdb.HASH, arg[0]).Action(html.OUTPUT, ice.APP)
ctx.DisplayLocal(m, "")
m.Action("terminal")
}
}},
})

View File

@ -91,8 +91,7 @@ func init() {
}
web.Toast(m, "核算成功")
}},
}, mdb.ZoneAction()), Hand: func(m *ice.Message, arg ...string) {
m.Fields(len(arg), "time,account,amount,count", mdb.ZoneField(m))
}, mdb.ZoneAction(mdb.FIELD, "time,account,amount,count")), Hand: func(m *ice.Message, arg ...string) {
amount, count := 0, 0
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.PushAction(CHECK)

View File

@ -106,7 +106,7 @@ func init() {
CANCEL: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, CANCEL) }},
BEGIN: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, PROCESS) }},
END: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, FINISH) }},
}, mdb.ImportantZoneAction(mdb.FIELD, "begin_time,close_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ImportantZoneAction(mdb.FIELDS, "begin_time,close_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) > 0 && arg[0] != "" {
status := map[string]int{}
m.Table(func(value ice.Maps) { m.PushButton(_task_action(m, value[STATUS])) })

View File

@ -27,7 +27,7 @@ func init() {
}
}},
web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) { web.RenderCache(m, m.Option(mdb.TEXT)) }},
}, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,pwd,username,hostname")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ZoneAction(mdb.FIELDS, "time,id,type,name,text,pwd,username,hostname")), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.Action(mdb.EXPORT, mdb.IMPORT)
} else {

View File

@ -55,7 +55,7 @@ func init() {
}
}},
mdb.REPEAT: {Help: "执行", Hand: func(m *ice.Message, arg ...string) { m.Cmdy("", ctx.COMMAND, CMD, m.Option(mdb.TEXT)) }},
}, mdb.HashAction(mdb.FIELDS, "time,hash,status,tty,count,username,hostport", mdb.FIELD, "time,id,type,text")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.HashAction(mdb.FIELD, "time,hash,status,tty,count,username,hostport", mdb.FIELDS, "time,id,type,text")), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.Table(func(value ice.Maps) {
m.PushButton(kit.Select("", ctx.COMMAND, value[mdb.STATUS] == tcp.OPEN), mdb.REMOVE)

View File

@ -157,7 +157,7 @@ func init() {
if mdb.HashSelect(m, m.Option(tcp.PORT)).Length() > 0 {
mdb.HashModify(m, m.Option(tcp.PORT), mdb.STATUS, tcp.OPEN)
} else {
mdb.HashCreate(m.Spawn(), m.OptionSimple(mdb.Config(m, mdb.FIELDS)), mdb.STATUS, tcp.OPEN)
mdb.HashCreate(m.Spawn(), m.OptionSimple(), mdb.STATUS, tcp.OPEN)
m.Cmd("", ctx.LOAD, m.OptionSimple(AUTHKEY))
}
m.Go(func() {
@ -195,7 +195,7 @@ func init() {
}
}},
}, mdb.StatusHashAction(
mdb.SHORT, tcp.PORT, mdb.FIELDS, "time,port,status,private,authkey,count", mdb.FIELD, "time,id,type,name,text",
mdb.SHORT, tcp.PORT, mdb.FIELD, "time,port,status,private,authkey,count", mdb.FIELDS, "time,id,type,name,text",
WELCOME, "welcome to contexts world\r\n", GOODBYE, "goodbye of contexts world\r\n",
)), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {

View File

@ -61,7 +61,6 @@ func init() {
}
}},
}, mdb.PageZoneAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,count,status,connect", mdb.FIELDS, "time,id,type,text")), Hand: func(m *ice.Message, arg ...string) {
m.Fields(len(kit.Slice(arg, 0, 2)), mdb.Config(m, mdb.FIELD), mdb.Config(m, mdb.FIELDS))
if mdb.PageZoneSelect(m, arg...); len(arg) == 0 {
m.Table(func(value ice.Maps) {
m.PushButton(kit.Select("", ctx.COMMAND, value[mdb.STATUS] == tcp.OPEN), mdb.REMOVE)

View File

@ -22,7 +22,7 @@ func init() {
ls := nfs.SplitPath(m, path.Join(kit.Select("", m.Option(cli.PWD), !path.IsAbs(m.Option(nfs.FILE))), m.Option(nfs.FILE)))
ctx.ProcessField(m, "", []string{ls[0], ls[1], m.Option(nfs.LINE)}, arg...)
}},
}, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,file,line,pwd")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ZoneAction(mdb.FIELDS, "time,id,type,name,text,file,line,pwd")), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.Action(mdb.EXPORT, mdb.IMPORT)
} else {

View File

@ -52,7 +52,7 @@ func init() {
}},
INPUT: {Hand: func(m *ice.Message, arg ...string) { _tags_input(m, arg...) }},
code.INNER: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessField(m, "", m.OptionSplit("path,file,line"), arg...) }},
}, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ZoneAction(mdb.FIELDS, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelectAll(m, arg...); len(arg) == 0 {
m.Action(nfs.LOAD, mdb.EXPORT, mdb.IMPORT)
} else {

View File

@ -38,7 +38,7 @@ func init() {
Index.MergeCommands(ice.Commands{
MENU: {Name: "menu zone id auto insert", Help: "菜单", Actions: ice.MergeActions(ice.Actions{
mdb.INSERT: {Name: "insert zone=home title=hi refer=hello image"},
}, mdb.ZoneAction(mdb.FIELD, "time,id,title,refer,image")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ZoneAction(mdb.FIELDS, "time,id,title,refer,image")), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) > 0 {
_wx_action(m)
}