1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 09:34:05 +08:00
This commit is contained in:
shaoying 2020-10-18 14:26:17 +08:00
parent 91f290fb98
commit 9ff665a275
18 changed files with 265 additions and 209 deletions

View File

@ -45,15 +45,17 @@ func (f *Frame) Close(m *ice.Message, arg ...string) bool {
} }
const ( const (
RESTART = "restart" BUILD = "build"
BUILD = "build" SPAWN = "spawn"
SPAWN = "spawn" START = "start"
START = "start" STOP = "stop"
STOP = "stop"
BENCH = "bench" RESTART = "restart"
BEGIN = "begin" RELOAD = "reload"
END = "end" BENCH = "bench"
PPROF = "pprof"
BEGIN = "begin"
END = "end"
) )
const GDB = "gdb" const GDB = "gdb"

View File

@ -88,8 +88,7 @@ func _file_list(m *ice.Message, root string, name string, level int, deep bool,
if f.IsDir() { if f.IsDir() {
m.Push("link", "") m.Push("link", "")
} else { } else {
m.PushRender("link", "a", kit.MergeURL(path.Join("/share/local/", m.PushDownload(f.Name(), path.Join(root, name, f.Name()))
root, name, f.Name()), "pod", m.Option(ice.MSG_USERPOD)), f.Name())
} }
case "size": case "size":
@ -389,6 +388,9 @@ var Index = &ice.Context{Name: "nfs", Help: "存储模块",
_file_show(m, arg[0]) _file_show(m, arg[0])
}}, }},
SAVE: {Name: "save file text...", Help: "保存", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { SAVE: {Name: "save file text...", Help: "保存", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 1 {
arg = append(arg, m.Option("content"))
}
_file_save(m, arg[0], arg[1:]...) _file_save(m, arg[0], arg[1:]...)
}}, }},
COPY: {Name: "copy file from...", Help: "复制", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { COPY: {Name: "copy file from...", Help: "复制", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {

View File

@ -69,5 +69,6 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心",
func init() { func init() {
web.Index.Register(Index, &web.Frame{}, web.Index.Register(Index, &web.Frame{},
HEADER, RIVER, STORM, ACTION, FOOTER, HEADER, RIVER, STORM, ACTION, FOOTER,
LOCATION, PASTE, SCAN,
) )
} }

View File

@ -38,20 +38,19 @@ func init() {
LOCATION: {Name: "location text auto create@location", Help: "地理位置", Action: map[string]*ice.Action{ LOCATION: {Name: "location text auto create@location", Help: "地理位置", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "insert type=text name address latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "insert type=text name address latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_trans(arg, map[string]string{"address": "text"}) _trans(arg, map[string]string{"address": "text"})
m.Conf(LOCATION, kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT)
m.Cmdy(mdb.INSERT, LOCATION, "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, LOCATION, "", mdb.HASH, arg)
}}, }},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, LOCATION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg) m.Cmdy(mdb.MODIFY, LOCATION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, LOCATION, "", mdb.HASH, kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) m.Cmdy(mdb.DELETE, LOCATION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.EXPORT, m.Prefix(LOCATION), "", mdb.HASH) m.Cmdy(mdb.EXPORT, LOCATION, "", mdb.HASH)
}}, }},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.IMPORT, m.Prefix(LOCATION), "", mdb.HASH) m.Cmdy(mdb.IMPORT, LOCATION, "", mdb.HASH)
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INPUTS, LOCATION, "", mdb.HASH, arg) m.Cmdy(mdb.INPUTS, LOCATION, "", mdb.HASH, arg)

View File

@ -26,7 +26,7 @@ func init() {
m.Cmdy(mdb.INSERT, m.Prefix(MISS), "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, m.Prefix(MISS), "", mdb.HASH, arg)
}}, }},
mdb.MODIFY: {Name: "modify key value", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { mdb.MODIFY: {Name: "modify key value", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME), arg[0], arg[1]) m.Cmdy(mdb.MODIFY, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME), arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME)) m.Cmdy(mdb.DELETE, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME))
@ -39,8 +39,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,name,照片,性别,年龄,身高,体重,籍贯,户口,学历,学校,职业,公司,年薪,资产,家境", mdb.DETAIL, len(arg) > 0)) m.Option(mdb.FIELDS, kit.Select("time,name,照片,性别,年龄,身高,体重,籍贯,户口,学历,学校,职业,公司,年薪,资产,家境", mdb.DETAIL, len(arg) > 0))
msg := m.Cmd(mdb.SELECT, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, arg) m.Cmd(mdb.SELECT, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, arg).Table(func(index int, value map[string]string, head []string) {
msg.Table(func(index int, value map[string]string, head []string) {
value["照片"] = kit.Format(`<img src="%s" height=%s>`, value["照片"], kit.Select("100", "400", m.Option(mdb.FIELDS) == mdb.DETAIL)) value["照片"] = kit.Format(`<img src="%s" height=%s>`, value["照片"], kit.Select("100", "400", m.Option(mdb.FIELDS) == mdb.DETAIL))
m.Push("", value, kit.Split(m.Option(mdb.FIELDS))) m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))
}) })

View File

@ -18,31 +18,33 @@ func init() {
PASTE: {Name: "paste hash auto create@paste", Help: "粘贴板", Action: map[string]*ice.Action{ PASTE: {Name: "paste hash auto create@paste", Help: "粘贴板", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create type=text name=hi data:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type=text name=hi data:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_trans(arg, map[string]string{"data": "text"}) _trans(arg, map[string]string{"data": "text"})
m.Conf(m.Prefix(PASTE), kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT) m.Cmdy(mdb.INSERT, PASTE, "", mdb.HASH, arg)
m.Cmdy(mdb.INSERT, m.Prefix(PASTE), "", mdb.HASH, arg) }},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, PASTE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(PASTE), "", mdb.HASH, kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) m.Cmdy(mdb.DELETE, PASTE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.EXPORT, m.Prefix(PASTE), "", mdb.HASH) m.Cmdy(mdb.EXPORT, PASTE, "", mdb.HASH)
}}, }},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.IMPORT, m.Prefix(PASTE), "", mdb.HASH) m.Cmdy(mdb.IMPORT, PASTE, "", mdb.HASH)
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INPUTS, m.Prefix(PASTE), "", mdb.HASH, arg) m.Cmdy(mdb.INPUTS, PASTE, "", mdb.HASH, arg)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 { if len(arg) > 0 {
text := m.Cmd(mdb.SELECT, m.Prefix(PASTE), "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT) text := m.Cmd(mdb.SELECT, PASTE, "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT)
m.Cmdy(wiki.SPARK, "inner", text)
m.Cmdy(wiki.IMAGE, "qrcode", text) m.Cmdy(wiki.IMAGE, "qrcode", text)
m.Cmdy(wiki.SPARK, "inner", text)
m.Render("") m.Render("")
return return
} }
m.Cmdy(mdb.SELECT, m.Prefix(PASTE), "", mdb.HASH) m.Cmdy(mdb.SELECT, PASTE, "", mdb.HASH)
m.SortTimeR(kit.MDB_TIME) m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},

View File

@ -17,31 +17,30 @@ func init() {
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SCAN: {Name: "scan hash auto create@scan", Help: "扫码", Action: map[string]*ice.Action{ SCAN: {Name: "scan hash auto create@scan", Help: "扫码", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Conf(m.Prefix(SCAN), kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT) m.Cmdy(mdb.INSERT, SCAN, "", mdb.HASH, arg)
m.Cmdy(mdb.INSERT, m.Prefix(SCAN), "", mdb.HASH, arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(SCAN), "", mdb.HASH, kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) m.Cmdy(mdb.DELETE, SCAN, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.EXPORT, m.Prefix(SCAN), "", mdb.HASH) m.Cmdy(mdb.EXPORT, SCAN, "", mdb.HASH)
}}, }},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.IMPORT, m.Prefix(SCAN), "", mdb.HASH) m.Cmdy(mdb.IMPORT, SCAN, "", mdb.HASH)
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INPUTS, m.Prefix(SCAN), "", mdb.HASH, arg) m.Cmdy(mdb.INPUTS, SCAN, "", mdb.HASH, arg)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 { if len(arg) > 0 {
text := m.Cmd(mdb.SELECT, m.Prefix(SCAN), "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT) text := m.Cmd(mdb.SELECT, SCAN, "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT)
m.Cmdy(wiki.SPARK, "inner", text)
m.Cmdy(wiki.IMAGE, "qrcode", text) m.Cmdy(wiki.IMAGE, "qrcode", text)
m.Cmdy(wiki.SPARK, "inner", text)
m.Render("") m.Render("")
return return
} }
m.Cmdy(mdb.SELECT, m.Prefix(SCAN), "", mdb.HASH) m.Cmdy(mdb.SELECT, SCAN, "", mdb.HASH)
m.SortTimeR(kit.MDB_TIME) m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},

View File

@ -1,15 +1,75 @@
package code package code
import ( import (
"path"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"path"
"strings"
) )
func _autogen_script(m *ice.Message, p string) {
// if b, e := kit.Render(m.Conf(AUTOGEN, "meta.shy"), m); m.Assert(e) {
if b, e := kit.Render(`
chapter {{.Option "name"}}
field {{.Option "name"}} web.code.{{.Option "name"}}.{{.Option "name"}}
`, m); m.Assert(e) {
m.Cmd(nfs.SAVE, p, string(b))
}
}
func _autogen_source(m *ice.Message, name string) {
m.Cmd("nfs.file", "append", "src/main.shy", "\n", `source `+name+"/"+name+".shy", "\n")
}
func _autogen_index(m *ice.Message, p string, from string, ctx string) {
list := []string{}
up, low := "", ""
key := strings.ToUpper(ctx)
m.Option(nfs.CAT_CB, func(line string, index int) {
if strings.HasPrefix(line, "package") {
line = "package " + ctx
}
if up == "" && strings.HasPrefix(line, "const") {
if ls := kit.Split(line); len(ls) > 3 {
up, low = ls[1], ls[3]
}
}
if up != "" {
line = strings.ReplaceAll(line, up, key)
line = strings.ReplaceAll(line, low, ctx)
}
list = append(list, line)
})
m.Cmd(nfs.CAT, from)
m.Cmdy(nfs.SAVE, p, strings.Join(list, "\n"))
}
func _autogen_main(m *ice.Message, file string, mod string, ctx string) {
list := []string{}
m.Option(nfs.CAT_CB, func(line string, index int) {
list = append(list, line)
if strings.HasPrefix(line, "import (") {
list = append(list, ` _ "`+mod+"/src/"+ctx+`"`, "")
}
})
m.Cmd(nfs.CAT, file)
m.Cmd(nfs.SAVE, file, strings.Join(list, "\n"))
}
func _autogen_mod(m *ice.Message, file string) (mod string) {
m.Option(nfs.CAT_CB, func(line string, index int) {
if strings.HasPrefix(line, "module") {
mod = strings.Split(line, " ")[1]
m.Info("module", mod)
}
})
m.Cmd(nfs.CAT, "go.mod")
return
}
const AUTOGEN = "autogen" const AUTOGEN = "autogen"
func init() { func init() {
@ -21,81 +81,36 @@ func init() {
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
AUTOGEN: {Name: "autogen path auto create", Help: "生成", Action: map[string]*ice.Action{ AUTOGEN: {Name: "autogen path auto create", Help: "生成", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create name=hi@key from=usr/icebergs/misc/zsh/zsh.go@key", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/zsh/zsh.go@key", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
if p := path.Join("src", m.Option("name"), m.Option("name")+".shy"); !kit.FileExists(p) { if p := path.Join("src", m.Option("name"), m.Option("name")+".shy"); !kit.FileExists(p) {
m.Cmd(nfs.SAVE, p, `chapter "`+m.Option("name")+`"`, "\n", `field "`+m.Option("name")+`" web.code.`+m.Option("name")+"."+m.Option("name")) _autogen_script(m, p)
m.Cmd("nfs.file", "append", "src/main.shy", "\n", `source `+m.Option("name")+"/"+m.Option("name")+".shy", "\n") _autogen_source(m, m.Option("name"))
} }
p := path.Join("src", m.Option("name"), m.Option("name")+".go") if p := path.Join("src", m.Option("name"), m.Option("name")+".go"); !kit.FileExists(p) {
if kit.FileExists(p) { _autogen_index(m, p, m.Option("from"), m.Option("name"))
m.Echo(p) _autogen_main(m, m.Option("main"), _autogen_mod(m, "go.mod"), m.Option("name"))
return
} }
// module file
list := []string{}
up, low := "", ""
name := m.Option("name")
key := strings.ToUpper(m.Option("name"))
m.Option(nfs.CAT_CB, func(line string, index int) {
if strings.HasPrefix(line, "package") {
line = "package " + m.Option("name")
}
if up == "" && strings.HasPrefix(line, "const") {
if ls := kit.Split(line); len(ls) > 3 {
up, low = ls[1], ls[3]
}
}
if up != "" {
line = strings.ReplaceAll(line, up, key)
line = strings.ReplaceAll(line, low, name)
}
list = append(list, line)
})
m.Cmd(nfs.CAT, m.Option("from"))
m.Cmdy(nfs.SAVE, p, strings.Join(list, "\n"))
// go.mod
mod := ""
m.Option(nfs.CAT_CB, func(line string, index int) {
if strings.HasPrefix(line, "module") {
mod = strings.Split(line, " ")[1]
m.Info("module", mod)
}
})
m.Cmd(nfs.CAT, "go.mod")
// src/main.go
list = []string{}
m.Option(nfs.CAT_CB, func(line string, index int) {
list = append(list, line)
if strings.HasPrefix(line, "import (") {
list = append(list, ` _ "`+mod+"/src/"+m.Option("name")+`"`, "")
}
})
m.Cmd(nfs.CAT, "src/main.go")
m.Cmd(nfs.SAVE, "src/main.go", strings.Join(list, "\n"))
m.Cmd(mdb.INSERT, m.Prefix(AUTOGEN), "", mdb.LIST, arg)
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case "main":
m.Cmdy(nfs.DIR, "src")
m.Appendv(ice.MSG_APPEND, "path", "size", "time")
m.Sort(kit.MDB_PATH)
case "from": case "from":
m.Option(nfs.DIR_DEEP, true) m.Option(nfs.DIR_DEEP, true)
m.Cmdy(nfs.DIR, "usr/icebergs") m.Cmdy(nfs.DIR, "usr/icebergs")
m.Sort("path") m.Appendv(ice.MSG_APPEND, "path", "size", "time")
m.Sort(kit.MDB_PATH)
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && !strings.HasSuffix(arg[0], "/") { if m.Option(nfs.DIR_ROOT, "src"); len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
m.Option(nfs.DIR_ROOT, "src") m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
m.Cmdy(nfs.CAT, kit.Select("./", arg, 0)) } else {
return m.Cmdy(nfs.CAT, arg[0])
} }
m.Option(nfs.DIR_ROOT, "src")
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
}}, }},
}, },
}, nil) }, nil)

View File

@ -20,8 +20,8 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心",
func init() { func init() {
web.Index.Register(Index, &web.Frame{}, web.Index.Register(Index, &web.Frame{},
INSTALL, COMPILE, PUBLISH, UPGRADE, INSTALL, AUTOGEN, COMPILE, PUBLISH, UPGRADE,
INNER, VIMER, BENCH, PPROF, INNER, VIMER, FAVOR, BENCH, PPROF,
C, SH, GO, SHY, JS, C, SH, SHY, GO, JS,
) )
} }

View File

@ -1,6 +1,22 @@
chapter "code" chapter "code"
field "安装" web.code.install
field "编译" web.code.compile # field "安装" web.code.install
field "发布" web.code.publish # field "生成" web.code.autogen
field "升级" web.code.upgrade # field "编译" web.code.compile
field "编程" web.code.autogen # field "发布" web.code.publish
# field "升级" web.code.upgrade
field "查看" web.code.inner
return
field "编辑" web.code.vimer
field "收藏" web.code.favor
field "测试" web.code.bench
field "优化" web.code.pprof
return
field "查看" web.code.c
field "编辑" web.code.sh
field "测试" web.code.shy
field "收藏" web.code.go
field "优化" web.code.js

View File

@ -1,16 +1,16 @@
package code package code
import ( import (
"fmt"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"fmt"
"os" "os"
"path" "path"
"strings"
) )
const COMPILE = "compile" const COMPILE = "compile"
@ -19,18 +19,21 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data( COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data(
kit.MDB_PATH, "usr/publish", "env", kit.Dict( kit.MDB_PATH, "usr/publish", kit.SSH_ENV, kit.Dict(
"PATH", os.Getenv("PATH"), "CGO_ENABLED", "0", "GOCACHE", os.Getenv("GOCACHE"),
"HOME", os.Getenv("HOME"), "HOME", os.Getenv("HOME"), "PATH", os.Getenv("PATH"),
"GOCACHE", os.Getenv("GOCACHE"), "GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "github.com",
"GOPROXY", "https://goproxy.cn,direct",
"GOPRIVATE", "github.com",
"CGO_ENABLED", "0",
), "go", []interface{}{"go", "build"}, ), "go", []interface{}{"go", "build"},
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
COMPILE: {Name: "compile os=linux,darwin,windows arch=amd64,386,arm src=src/main.go 执行:button", Help: "编译", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { COMPILE: {Name: "compile os=linux,darwin,windows arch=amd64,386,arm src=src/main.go@key 执行:button", Help: "编译", Action: map[string]*ice.Action{
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.DIR, "src")
m.Appendv(ice.MSG_APPEND, "path", "size", "time")
m.Sort(kit.MDB_PATH)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { if len(arg) == 0 {
// 目录列表 // 目录列表
m.Cmdy(nfs.DIR, m.Conf(COMPILE, kit.META_PATH), "time size path") m.Cmdy(nfs.DIR, m.Conf(COMPILE, kit.META_PATH), "time size path")
@ -52,7 +55,7 @@ func init() {
} }
// 编译目标 // 编译目标
file := path.Join(m.Conf(cmd, "meta.path"), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "src/main.go"), goos, arch)) file := path.Join(m.Conf(cmd, kit.META_PATH), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "src/main.go"), goos, arch))
args := []string{"-ldflags"} args := []string{"-ldflags"}
list := []string{ list := []string{
fmt.Sprintf(`-X main.Time="%s"`, m.Time()), fmt.Sprintf(`-X main.Time="%s"`, m.Time()),

View File

@ -2,75 +2,63 @@ package code
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
func _sub_key(m *ice.Message, topic string) string {
return kit.Keys(kit.MDB_HASH, kit.Hashs(topic))
}
const FAVOR = "favor" const FAVOR = "favor"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TOPIC)},
kit.MDB_SHORT, kit.MDB_TOPIC, kit.MDB_FIELD, "time,id,type,name,text,path,file,line",
)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
FAVOR: {Name: "favor topic=auto id=auto auto 创建 导出 导入", Help: "收藏夹", Action: map[string]*ice.Action{ FAVOR: {Name: "favor topic id auto create export import", Help: "收藏夹", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, arg)
}}, }},
mdb.INSERT: {Name: "insert topic=数据结构 name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert topic=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(FAVOR), "", m.Option(kit.MDB_TOPIC), func(key string, value map[string]interface{}) { m.Cmdy(mdb.INSERT, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, arg)
})
}}, }},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(FAVOR), "", m.Option(kit.MDB_TOPIC), func(key string, value map[string]interface{}) { m.Cmdy(mdb.MODIFY, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
})
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC)) m.Cmdy(mdb.DELETE, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
}}, }},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH) m.Cmdy(mdb.EXPORT, FAVOR, "", mdb.HASH)
}}, }},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.HASH) m.Cmdy(mdb.IMPORT, FAVOR, "", mdb.HASH)
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case kit.MDB_TOPIC: case kit.MDB_TOPIC:
m.Option(mdb.FIELDS, "topic,count,time") m.Cmdy(mdb.INPUTS, FAVOR, "", mdb.HASH, arg)
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) default:
m.Cmdy(mdb.INPUTS, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg)
} }
}}, }},
INNER: {Name: "inner", Help: "inner", Hand: func(m *ice.Message, arg ...string) { INNER: {Name: "inner", Help: "inner", Hand: func(m *ice.Message, arg ...string) {
m.Option("_process", "_field") if len(arg) > 0 && arg[0] == mdb.RENDER {
m.Option("_prefix", "_inner") m.Cmdy(INNER, arg[1:])
m.Cmdy(ctx.COMMAND, INNER) return
m.Push("args", kit.Format([]string{m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)})) }
m.PushPlugin(INNER, INNER, mdb.RENDER)
m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)}))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && arg[0] == "_inner" { m.Option(mdb.FIELDS, kit.Select("time,count,topic", kit.Select("time,id,type,name,text,path,file,line", mdb.DETAIL, len(arg) > 1)), len(arg) > 0)
m.Cmdy(INNER, arg[1:]) m.Cmdy(mdb.SELECT, FAVOR, "", mdb.ZONE, arg)
return m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0))
}
if len(arg) > 0 {
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1))
m.Richs(m.Prefix(FAVOR), "", arg[0], func(key string, value map[string]interface{}) {
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, arg[1:])
})
m.PushAction("inner")
return
}
m.Option(mdb.FIELDS, "time,count,topic")
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH)
m.PushAction("删除")
}}, }},
}, },
}, nil) }, nil)

View File

@ -22,10 +22,10 @@ func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) {
} }
if m.Warn(!m.Right(dir, file), ice.ErrNotAuth, path.Join(dir, file)) { if m.Warn(!m.Right(dir, file), ice.ErrNotAuth, path.Join(dir, file)) {
return return // 没有权限
} }
if m.Cmdy(mdb.RENDER, ext, file, dir, arg); m.Result() != "" { if m.Cmdy(mdb.RENDER, ext, file, dir, arg); m.Result() != "" {
return return // 解析成功
} }
if m.Conf(INNER, kit.Keys("meta.source", ext)) == "true" { if m.Conf(INNER, kit.Keys("meta.source", ext)) == "true" {
@ -37,10 +37,10 @@ func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) {
} }
func _inner_show(m *ice.Message, ext, file, dir string, arg ...string) { func _inner_show(m *ice.Message, ext, file, dir string, arg ...string) {
if m.Warn(!m.Right(dir, file), ice.ErrNotAuth, path.Join(dir, file)) { if m.Warn(!m.Right(dir, file), ice.ErrNotAuth, path.Join(dir, file)) {
return return // 没有权限
} }
if m.Cmdy(mdb.ENGINE, ext, file, dir, arg); m.Result() != "" { if m.Cmdy(mdb.ENGINE, ext, file, dir, arg); m.Result() != "" {
return return // 执行成功
} }
if ls := kit.Simple(m.Confv(INNER, kit.Keys("meta.show", ext))); len(ls) > 0 { if ls := kit.Simple(m.Confv(INNER, kit.Keys("meta.show", ext))); len(ls) > 0 {
@ -53,8 +53,9 @@ const INNER = "inner"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
INNER: {Name: "inner path=src/ file=main.go line=1 auto 项目", Help: "阅读器", Meta: kit.Dict( INNER: {Name: "inner path=src/ file=main.go line=1 auto project search", Help: "阅读器", Meta: kit.Dict(
"display", "/plugin/local/code/inner.js", "style", "editor", "display", "/plugin/local/code/inner.js", "style", "editor",
"trans", kit.Dict("project", "项目"),
), Action: map[string]*ice.Action{ ), Action: map[string]*ice.Action{
mdb.PLUGIN: {Name: "plugin", Help: "插件", Hand: func(m *ice.Message, arg ...string) { mdb.PLUGIN: {Name: "plugin", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(mdb.PLUGIN, arg); m.Result() == "" { if m.Cmdy(mdb.PLUGIN, arg); m.Result() == "" {
@ -66,18 +67,18 @@ func init() {
mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) { mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
_inner_list(m, arg[0], arg[1], arg[2], arg[3:]...) _inner_list(m, arg[0], arg[1], arg[2], arg[3:]...)
}}, }},
mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.SEARCH, arg)
}},
mdb.ENGINE: {Name: "engine", Help: "引擎", Hand: func(m *ice.Message, arg ...string) { mdb.ENGINE: {Name: "engine", Help: "引擎", Hand: func(m *ice.Message, arg ...string) {
_inner_show(m, arg[0], arg[1], arg[2], arg[3:]...) _inner_show(m, arg[0], arg[1], arg[2], arg[3:]...)
}}, }},
mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.SEARCH, arg)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(m.Prefix(FAVOR), mdb.INPUTS, arg) m.Cmdy(FAVOR, mdb.INPUTS, arg)
}}, }},
FAVOR: {Name: "favor", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { FAVOR: {Name: "favor", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, arg) m.Cmdy(FAVOR, mdb.INSERT, arg)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) < 2 { if len(arg) < 2 {
@ -90,8 +91,7 @@ func init() {
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
INNER: {Name: "inner", Help: "阅读器", Value: kit.Data( INNER: {Name: "inner", Help: "阅读器", Value: kit.Data(
"source", kit.Dict( "source", kit.Dict(
"license", "true", "license", "true", "makefile", "true",
"makefile", "true",
"shy", "true", "py", "true", "shy", "true", "py", "true",
"csv", "true", "json", "true", "csv", "true", "json", "true",
"css", "true", "html", "true", "css", "true", "html", "true",

View File

@ -29,14 +29,14 @@ func init() {
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
INSTALL: {Name: "install name port path auto", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{ INSTALL: {Name: "install name port path auto", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
web.DOWNLOAD: {Name: "download link", Help: "下载", Hand: func(m *ice.Message, arg ...string) { web.DOWNLOAD: {Name: "download link", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
name := path.Base(m.Option(kit.MDB_LINK)) link := m.Option(kit.MDB_LINK)
name := path.Base(link)
p := path.Join(m.Conf(INSTALL, kit.META_PATH), name) p := path.Join(m.Conf(INSTALL, kit.META_PATH), name)
m.Option(ice.MSG_PROCESS, "_progress") m.Option(ice.MSG_PROCESS, "_progress")
m.Option(mdb.FIELDS, m.Conf(INSTALL, kit.META_FIELD)) m.Option(mdb.FIELDS, m.Conf(INSTALL, kit.META_FIELD))
if m.Cmd(mdb.SELECT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name).Table(func(index int, value map[string]string, head []string) { if m.Cmd(mdb.SELECT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name).Table(func(index int, value map[string]string, head []string) {
if _, e := os.Stat(p); e == nil { if _, e := os.Stat(p); e == nil {
m.Set(kit.MDB_LINK)
m.Push("", value, kit.Split(m.Option(mdb.FIELDS))) m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))
} }
}); len(m.Appendv(kit.MDB_NAME)) > 0 { }); len(m.Appendv(kit.MDB_NAME)) > 0 {
@ -47,9 +47,9 @@ func init() {
m.Cmd(nfs.SAVE, p, "") m.Cmd(nfs.SAVE, p, "")
// 进度 // 进度
m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, m.Option(kit.MDB_LINK)) m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link)
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) { m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
value = value[kit.MDB_META].(map[string]interface{}) value = kit.GetMeta(value)
m.Optionv(web.DOWNLOAD_CB, func(size int, total int) { m.Optionv(web.DOWNLOAD_CB, func(size int, total int) {
s := size * 100 / total s := size * 100 / total
if s != kit.Int(value[kit.SSH_STEP]) && s%10 == 0 { if s != kit.Int(value[kit.SSH_STEP]) && s%10 == 0 {
@ -62,26 +62,22 @@ func init() {
// 下载 // 下载
m.Go(func() { m.Go(func() {
m.Option(cli.CMD_DIR, m.Conf(INSTALL, kit.META_PATH)) m.Option(cli.CMD_DIR, m.Conf(INSTALL, kit.META_PATH))
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(kit.MDB_LINK)) msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, link)
m.Cmdy(nfs.LINK, p, msg.Append(kit.MDB_FILE)) m.Cmdy(nfs.LINK, p, msg.Append(kit.MDB_FILE))
m.Cmd(cli.SYSTEM, "tar", "xvf", name) m.Cmd(cli.SYSTEM, "tar", "xvf", name)
}) })
}}, }},
gdb.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) { gdb.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
m.Option("cache.action", "build")
m.Option(ice.MSG_PROCESS, "_follow") m.Option(ice.MSG_PROCESS, "_follow")
if m.Option("cache.hash") != "" { if m.Option("cache.action", "build"); m.Option("cache.hash") != "" {
m.Cmdy(cli.OUTPUT, m.Option("cache.hash")) m.Cmdy(cli.OUTPUT, m.Option("cache.hash"))
m.Sort(kit.MDB_ID).Table(func(index int, value map[string]string, head []string) { m.Sort(kit.MDB_ID).Table(func(index int, value map[string]string, head []string) {
m.Option("cache.begin", value[kit.MDB_ID]) m.Option("cache.begin", value[kit.MDB_ID])
m.Echo(value[kit.SSH_RES]) m.Echo(value[kit.SSH_RES])
}) })
if len(m.Resultv()) > 0 {
return
}
if m.Conf(cli.OUTPUT, kit.Keys(kit.MDB_HASH, m.Option("cache.hash"), kit.MDB_META, kit.MDB_STATUS)) == gdb.STOP { if len(m.Resultv()) == 0 && m.Conf(cli.OUTPUT, kit.Keys(kit.MDB_HASH, m.Option("cache.hash"), kit.MDB_META, kit.MDB_STATUS)) == gdb.STOP {
m.Echo(gdb.STOP) m.Echo(gdb.STOP)
} }
return return
@ -144,7 +140,7 @@ func init() {
if len(arg) == 1 { if len(arg) == 1 {
// 服务列表 // 服务列表
arg = kit.Split(arg[0], "-.") arg = kit.Split(path.Base(arg[0]), "-.")
m.Option(mdb.FIELDS, "time,port,status,pid,cmd,dir") m.Option(mdb.FIELDS, "time,port,status,pid,cmd,dir")
m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) {
if strings.Contains(value["cmd"], "bin/"+arg[0]) { if strings.Contains(value["cmd"], "bin/"+arg[0]) {

View File

@ -9,7 +9,6 @@ import (
"fmt" "fmt"
"os" "os"
"path" "path"
"runtime"
"strings" "strings"
) )
@ -42,7 +41,7 @@ func init() {
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
PUBLISH: {Name: "publish path auto can ice ish", Help: "发布", Action: map[string]*ice.Action{ PUBLISH: {Name: "publish path auto ish ice can", Help: "发布", Action: map[string]*ice.Action{
"contexts": {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { "contexts": {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1))) m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1)))
@ -52,28 +51,48 @@ func init() {
m.Option("userhost", fmt.Sprintf("%s@%s", m.Option(ice.MSG_USERNAME), strings.Split(u.Host, ":")[0])) m.Option("userhost", fmt.Sprintf("%s@%s", m.Option(ice.MSG_USERNAME), strings.Split(u.Host, ":")[0]))
m.Option("hostpath", kit.Path("./.ish/pluged")) m.Option("hostpath", kit.Path("./.ish/pluged"))
if buf, err := kit.Render(m.Conf(PUBLISH, kit.Keys("meta.contexts", kit.Select("base", arg, 0))), m); m.Assert(err) { if len(arg) == 0 {
m.Cmdy("web.wiki.spark", "shell", string(buf)) arg = append(arg, "base")
}
for _, k := range arg {
if buf, err := kit.Render(m.Conf(PUBLISH, kit.Keys("meta.contexts", k)), m); m.Assert(err) {
m.Cmdy("web.wiki.spark", "shell", string(buf))
}
} }
}}, }},
"ish": {Name: "ish", Help: "神农架", Hand: func(m *ice.Message, arg ...string) { "ish": {Name: "ish", Help: "神农架", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_DEEP, true)
m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)") m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)")
m.Cmdy(nfs.DIR, m.Conf(PUBLISH, kit.META_PATH), "time size line path link") m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, "./", "time size line path link")
m.Cmdy(PUBLISH, "contexts", "tmux")
}}, }},
"ice": {Name: "ice", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { "ice": {Name: "ice", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) {
_publish_file(m, "bin/ice.bin", fmt.Sprintf("ice.%s.%s", runtime.GOOS, runtime.GOARCH)) p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
_publish_file(m, "bin/ice.sh") ls := strings.Split(m.Cmdx(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable"), "\n")
m.Option(nfs.DIR_REG, "ice.*") for _, ls := range ls {
m.Cmdy(nfs.DIR, m.Conf(PUBLISH, kit.META_PATH), "time size path link") if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" {
if s, e := os.Stat(path.Join(p, file)); m.Assert(e) {
m.Push(kit.MDB_TIME, s.ModTime())
m.Push(kit.MDB_SIZE, kit.FmtSize(s.Size()))
m.Push(kit.MDB_FILE, file)
m.PushDownload(file, path.Join(p, file))
}
}
}
m.SortTimeR(kit.MDB_TIME)
m.Cmdy(PUBLISH, "contexts", "base")
}}, }},
"can": {Name: "can", Help: "火山架", Hand: func(m *ice.Message, arg ...string) { "can": {Name: "can", Help: "火山架", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_DEEP, true) m.Option(nfs.DIR_DEEP, true)
m.Option(nfs.DIR_REG, ".*\\.(js|css|html)") m.Option(nfs.DIR_REG, ".*\\.(js|css|html)")
m.Cmdy(nfs.DIR, m.Conf(PUBLISH, kit.META_PATH), "time size line path link") m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, "./", "time size line path link")
m.Cmdy(PUBLISH, "contexts", "miss")
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(nfs.DIR_ROOT, m.Conf(cmd, kit.META_PATH)) m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time size path") m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time size path link")
}}, }},
}, },
}, nil) }, nil)

View File

@ -22,7 +22,7 @@ func init() {
))}, ))},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
UPGRADE: {Name: "upgrade item", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { UPGRADE: {Name: "upgrade item:select=system 执行:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
exit := false exit := false
m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select("system", arg, 0)), "", "", func(index int, value map[string]interface{}) { m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select("system", arg, 0)), "", "", func(index int, value map[string]interface{}) {
if value[kit.MDB_FILE] == "ice.bin" { if value[kit.MDB_FILE] == "ice.bin" {

View File

@ -2,6 +2,7 @@ package code
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
@ -9,13 +10,15 @@ import (
"path" "path"
) )
func _vimer_save(m *ice.Message, ext, file, dir string, text string) { func _vimer_path(m *ice.Message, arg ...string) string {
if f, p, e := kit.Create(path.Join(dir, file)); e == nil { return path.Join(m.Option(ice.MSG_LOCAL), path.Join(arg...))
defer f.Close() }
if n, e := f.WriteString(text); m.Assert(e) { func _vimer_upload(m *ice.Message, dir string) {
m.Log_EXPORT("file", path.Join(dir, file), "size", n) up := kit.Simple(m.Optionv(ice.MSG_UPLOAD))
} if p := _vimer_path(m, dir, up[1]); m.Option(ice.MSG_USERPOD) == "" {
m.Echo(p) m.Cmdy(web.CACHE, web.WATCH, up[0], p)
} else {
m.Cmdy(web.SPIDE, web.SPIDE_DEV, web.SPIDE_SAVE, p, web.SPIDE_GET, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/cache/"+up[0]))
} }
} }
@ -25,19 +28,20 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{}, Configs: map[string]*ice.Config{},
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
VIMER: {Name: "vimer path=usr/demo file=hi.sh line=1 刷新:button=auto 保存:button 运行:button 项目:button", Help: "编辑器", Meta: kit.Dict( VIMER: {Name: "vimer path=usr/demo file=hi.sh line=1 刷新:button=auto save project", Help: "编辑器", Meta: kit.Dict(
"display", "/plugin/local/code/vimer.js", "style", "editor", "display", "/plugin/local/code/vimer.js", "style", "editor",
"trans", kit.Dict("project", "项目"),
), Action: map[string]*ice.Action{ ), Action: map[string]*ice.Action{
web.UPLOAD: {Name: "upload path name", Help: "上传", Hand: func(m *ice.Message, arg ...string) { web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.CACHE, web.UPLOAD) _vimer_upload(m, m.Option(kit.MDB_PATH))
m.Cmdy(web.CACHE, web.WATCH, m.Option(web.DATA), path.Join(m.Option("path"), m.Option("name")))
}}, }},
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
_vimer_save(m, arg[0], arg[1], arg[2], m.Option("content")) m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE)))
}}, }},
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
"cmd": {Name: "cmd type file path", Help: "命令", Hand: func(m *ice.Message, arg ...string) { if !m.Warn(!m.Right(arg)) {
m.Cmdy(arg) m.Cmdy(arg)
}
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy(INNER, arg) m.Cmdy(INNER, arg)

11
misc.go
View File

@ -95,6 +95,17 @@ func (m *Message) PushRender(key, view, name string, arg ...string) *Message {
func (m *Message) PushButton(arg ...string) { func (m *Message) PushButton(arg ...string) {
m.PushRender("action", "button", strings.Join(arg, ",")) m.PushRender("action", "button", strings.Join(arg, ","))
} }
func (m *Message) PushAnchor(name string, arg ...string) {
m.PushRender("link", "a", name, arg...)
}
func (m *Message) PushDownload(name string, arg ...string) {
if len(arg) == 0 {
name = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join("/share/local", name), "pod", m.Option(MSG_USERPOD))
} else {
arg[0] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join("/share/local", arg[0]), "pod", m.Option(MSG_USERPOD))
}
m.PushRender("link", "download", name, arg...)
}
func (m *Message) PushAction(list ...interface{}) { func (m *Message) PushAction(list ...interface{}) {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushRender(kit.MDB_ACTION, kit.MDB_BUTTON, strings.Join(kit.Simple(list...), ",")) m.PushRender(kit.MDB_ACTION, kit.MDB_BUTTON, strings.Join(kit.Simple(list...), ","))