1
0
forked from x/icebergs
This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-07-01 21:32:23 +08:00
parent 1ee314e4f5
commit 5587905708
9 changed files with 94 additions and 97 deletions

View File

@ -104,6 +104,9 @@ const DREAM = "dream"
func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
DREAM: {Name: "dream name path auto start", Help: "梦想家", Action: map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Config("miss", _dream_miss)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case "repos":
@ -171,11 +174,14 @@ func init() {
m.Cmdy(nfs.CAT, arg[1:])
}},
}, Configs: map[string]*ice.Config{
DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(nfs.PATH, ice.USR_LOCAL_WORK,
"miss", `#! /bin/sh
if [ "$ISH_CONF_PRE" = "" ]; then
[ -f $PWD/.ish/plug.sh ] || [ -f $HOME/.ish/plug.sh ] || git clone https://shylinux.com/x/intshell $PWD/.ish
source $PWD/.ish/plug.sh || source $HOME/.ish/plug.sh
DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(nfs.PATH, ice.USR_LOCAL_WORK, "miss", _dream_miss)},
}})
}
var _dream_miss = `#! /bin/sh
require &>/dev/null || if [ -f $PWD/.ish/plug.sh ]; then source $PWD/.ish/plug.sh; elif [ -f $HOME/.ish/plug.sh ]; then source $HOME/.ish/plug.sh; else
ctx_temp=$(mktemp); if curl -h &>/dev/null; then curl -o $ctx_temp -fsSL https://shylinux.com; else wget -O $ctx_temp -q http://shylinux.com; fi; source $ctx_temp intshell
fi
require miss.sh
@ -183,19 +189,5 @@ ish_miss_prepare_compile
ish_miss_prepare_develop
ish_miss_prepare_install
# ish_miss_prepare redis-story
# ish_miss_prepare mysql-story
# ish_miss_prepare release
# ish_miss_prepare_contexts
# ish_miss_prepare_intshell
# ish_miss_prepare_icebergs
# ish_miss_prepare_toolkits
# ish_miss_prepare_volcanos
# ish_miss_prepare_learning
ish_miss_make; if [ -n "$*" ]; then ./bin/ice.bin forever serve "$@"; fi
`,
)},
}})
}
`

View File

@ -11,6 +11,7 @@ import (
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/lex"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp"
@ -302,22 +303,15 @@ func init() {
switch r.URL.Path {
case ice.PS:
msg := m.Spawn(SERVE, w, r)
if share := r.URL.Query().Get("share"); share != "" {
switch msg := msg.Cmd(SHARE, share); msg.Append(mdb.TYPE) {
case "login":
RenderCookie(msg, aaa.SessCreate(msg, msg.Append(aaa.USERNAME)))
}
}
repos := kit.Select(ice.INTSHELL, ice.VOLCANOS, strings.Contains(r.Header.Get("User-Agent"), "Mozilla/5.0"))
if repos == ice.VOLCANOS {
if s := msg.Cmdx("web.chat.website", "show", "index.iml", "Header", "", "River", ""); s != "" {
if s := msg.Cmdx("web.chat.website", lex.PARSE, "index.iml", "Header", "", "River", ""); s != "" {
Render(msg, ice.RENDER_RESULT, s)
return true
return true // 定制主页
}
}
Render(msg, ice.RENDER_DOWNLOAD, path.Join(msg.Config(kit.Keys(repos, nfs.PATH)), msg.Config(kit.Keys(repos, INDEX))))
return true // 网站主页
return true // 默认主页
case "/help/":
r.URL.Path = "/help/tutor.shy"
@ -325,7 +319,6 @@ func init() {
}
return false
})
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, nfs.CAT, "usr/publish/order.js")
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SERVE).Table(func(index int, value map[string]string, head []string) {
@ -400,19 +393,9 @@ func init() {
_share_repos(m, path.Join(arg[0], arg[1], arg[2]), arg[3:]...)
}},
"/publish/": {Name: "/publish/", Help: "定制化", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == ice.ORDER_JS {
if p := path.Join(ice.USR_PUBLISH, ice.ORDER_JS); m.PodCmd(nfs.CAT, p) {
if m.IsErr() {
m.RenderResult("")
} else {
m.RenderResult()
}
return
}
}
if strings.HasPrefix(arg[0], "ice.") && m.Option(ice.POD) != "" {
_share_local(aaa.UserRoot(m), ice.BIN_ICE_BIN)
// _share_local(aaa.UserRoot(m), arg[0])
_share_local(aaa.UserRoot(m), path.Join(ice.USR_PUBLISH, arg[0]))
// _share_local(aaa.UserRoot(m), ice.BIN_ICE_BIN)
return
}
_share_local(m, m.Conf(SERVE, kit.Keym(ice.PUBLISH)), path.Join(arg...))

View File

@ -125,6 +125,7 @@ const ( // DIR
USR_LOCAL_RIVER = "usr/local/river"
USR_LOCAL_DAEMON = "usr/local/daemon"
USR_LOCAL_EXPORT = "usr/local/export"
USR_LOCAL_REPOS = "usr/local/repos"
VAR_RUN = "var/run"
VAR_TMP = "var/tmp"

View File

@ -27,31 +27,37 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
return nil, false
}
m.Option(nfs.CAT_CONTENT, text)
river, storm, last := kit.Dict(
"Header", kit.Dict("menus", kit.List(), "style", kit.Dict("display", "none")),
"River", kit.Dict("menus", kit.List(), "action", kit.List()),
args,
), kit.Dict(), kit.Dict()
prefix := ""
const (
HEADER = "Header"
RIVER = "River"
nriver := 0
nstorm := 0
ORDER = "order"
TITLE = "title"
MENUS = "menus"
)
river, storm, last := kit.Dict(
HEADER, kit.Dict(MENUS, kit.List(), ctx.STYLE, kit.Dict(ctx.DISPLAY, "none")),
RIVER, kit.Dict(MENUS, kit.List(), ctx.ACTION, kit.List()), args,
), kit.Dict(), kit.Dict()
nriver, nstorm, prefix := 0, 0, ""
m.Option(nfs.CAT_CONTENT, text)
m.Cmd(lex.SPLIT, "", mdb.KEY, mdb.NAME, func(deep int, ls []string, meta ice.Map) []string {
if deep == 1 {
switch ls[0] {
case "header":
case HEADER, RIVER:
for i := 1; i < len(ls); i += 2 {
kit.Value(river, kit.Keys("Header", ls[i]), ls[i+1])
kit.Value(river, kit.Keys(ls[0], ls[i]), ls[i+1])
}
return ls
}
}
data := kit.Dict()
switch kit.Ext(ls[0]) {
case nfs.JS:
data[ctx.DISPLAY] = ice.FileURI(ls[0])
ls[0] = kit.Select(ctx.CAN_PLUGIN, ice.GetFileCmd(ls[0]))
ls[0], data[ctx.DISPLAY] = kit.Select(ctx.CAN_PLUGIN, ice.GetFileCmd(ls[0])), ice.FileURI(ls[0])
case nfs.GO:
ls[0] = ice.GetFileCmd(ls[0])
@ -66,12 +72,11 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
ls[0], data[ctx.ARGS] = "web.code.sh.py", ls[0]
case "~":
prefix = ls[1]
ls = ls[1:]
prefix, ls = ls[1], ls[1:]
fallthrough
case "-":
for _, v := range ls[1:] {
last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.INDEX, kit.Keys(prefix, v), "order", len(last)))
last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.INDEX, kit.Keys(prefix, v)))
}
return ls
}
@ -92,8 +97,7 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
data[ls[i]] = kit.Split(ls[i+1])
case ctx.DISPLAY:
data[ls[i]] = ice.Display(ls[i+1])[ctx.DISPLAY]
case "title", "menus", "action", "style":
case ctx.STYLE, ctx.ACTION, TITLE, MENUS:
data[ls[i]] = kit.UnMarshal(ls[i+1])
default:
data[ls[i]] = ls[i+1]
@ -102,24 +106,20 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool)
switch deep {
case 1:
nriver++
nstorm = 0
storm = kit.Dict()
if ls[0] == "auto" {
if nriver++; ls[0] == ice.AUTO {
ls[0] = kit.Format(nriver)
}
river[ls[0]] = kit.Dict(mdb.NAME, ls[1], STORM, storm, data, "order", len(river))
nstorm, storm = 0, kit.Dict()
river[ls[0]] = kit.Dict(mdb.NAME, ls[1], STORM, storm, data, ORDER, len(river))
case 2:
nstorm++
if ls[0] == "auto" {
if nstorm++; ls[0] == ice.AUTO {
ls[0] = kit.Format(nstorm)
}
last = kit.Dict(mdb.NAME, ls[1], mdb.LIST, kit.List(), data, "order", len(storm))
last = kit.Dict(mdb.NAME, ls[1], mdb.LIST, kit.List(), data, ORDER, len(storm))
storm[ls[0]] = last
prefix = ""
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], "order", len(last), 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
})
@ -196,16 +196,16 @@ func init() {
return false
})
}},
"show": {Hand: func(m *ice.Message, arg ...string) {
lex.PARSE: {Hand: func(m *ice.Message, arg ...string) {
switch kit.Ext(arg[0]) {
case nfs.ZML:
m.RenderCmd("can.parse", m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])))
case nfs.IML:
if res, ok := _website_parse(m, m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])), arg[1:]...); ok {
m.Echo(_website_template2, kit.Format(res))
}
case nfs.ZML:
m.RenderCmd("can.parse", m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])))
default:
if text := m.Cmd(m.PrefixKey(), ice.PS+arg[0]).Append(mdb.TEXT); text != "" {
if res, ok := _website_parse(m, text, arg[1:]...); ok {
@ -214,7 +214,6 @@ func init() {
}
}
}},
"inner": {Hand: func(m *ice.Message, arg ...string) {}},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH && arg[1] == "" {
_website_search(m, arg[0], arg[1], kit.Select("", arg, 2))

View File

@ -61,18 +61,23 @@ func init() { ice.Cmd("{{.Option "key"}}", {{.Option "name"}}{}) }
func _autogen_import(m *ice.Message, main string, ctx string, mod string) {
m.Cmd(nfs.DEFS, main, `package main
import "shylinux.com/x/ice"
import (
"shylinux.com/x/ice"
)
func main() { println(ice.Run()) }
func main() { print(ice.Run()) }
`)
done, list := false, []string{}
begin, done, list := false, false, []string{}
m.Cmd(nfs.CAT, main, func(line string, index int) {
if begin && !done && strings.HasPrefix(line, ")") {
done, list = true, append(list, "", kit.Format(` _ "%s/src/%s"`, mod, ctx))
}
if list = append(list, line); done {
return
}
if strings.HasPrefix(line, "import (") {
done, list = true, append(list, kit.Format(` _ "%s/src/%s"`, mod, ctx), "")
begin = true
} else if strings.HasPrefix(line, "import") {
done, list = true, append(list, kit.Format(`import _ "%s/src/%s"`, mod, ctx))
}
@ -87,7 +92,7 @@ field "{{.Option "help"}}" {{.Option "key"}}
}
func _autogen_source(m *ice.Message, main, file string) {
main = strings.ReplaceAll(main, ice.PT+GO, ice.PT+SHY)
m.Cmd(nfs.DEFS, main, `chapter "{{.Option "name"}}"
m.Cmd(nfs.DEFS, main, `title "{{.Option "name"}}"
`)
m.Cmd(nfs.PUSH, main, ice.NL, "source "+strings.TrimPrefix(file, ice.SRC+ice.PS))
}
@ -102,9 +107,6 @@ func _autogen_mod(m *ice.Message, file string) (mod string) {
m.Cmd(nfs.DEFS, file, kit.Format(`module %s
go 1.11
`, host))
m.Cmd(nfs.DEFS, ice.GO_SUM, kit.Format(`
`, host))
m.Cmd(nfs.CAT, file, func(line string) {

View File

@ -188,8 +188,8 @@ func init() {
m.Option("keys", list)
m.Option("module", ice.Info.Make.Module)
m.Option("plug", "web.chat.website,web.dream")
m.Option("exts", "inner/search.js?a=1,inner/favor.js,inner/template.js")
// m.Option("plug", "web.chat.website,web.dream")
// m.Option("exts", "inner/search.js?a=1,inner/favor.js,inner/template.js")
arg[1] = strings.Split(arg[1], ice.FS)[0]
if _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]); m.IsErrNotFound() {

View File

@ -98,13 +98,27 @@ func init() {
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ice.DF)[0],
kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ice.DF), 1)))
m.Option("remote", kit.Select(ice.Info.Make.Remote, strings.TrimSpace(m.Cmdx(cli.SYSTEM, "git", "config", "remote.origin.url"))))
m.Option("pathname", strings.TrimSuffix(path.Base(m.Option("remote")), ".git"))
if len(arg) == 0 {
arg = append(arg, ice.MISC, ice.CORE, ice.BASE)
}
for _, k := range arg {
switch k {
case ice.MISC:
if bin := path.Join(ice.USR_PUBLISH, kit.Keys("ice", runtime.GOOS, runtime.GOARCH)); !kit.FileExists(bin) {
m.Cmd(nfs.LINK, bin, m.Cmdx(cli.RUNTIME, "boot.bin"))
}
case ice.CORE:
if !kit.FileExists(".git") {
repos := m.MergeURL2("/x/" + m.Option(ice.MSG_USERPOD))
m.Cmd(cli.SYSTEM, "git", "init")
m.Cmd(cli.SYSTEM, "git", "remote", "add", "origin", repos)
m.Cmd("web.code.git.repos", mdb.CREATE, repos, "master", "", nfs.PWD)
}
m.Option("remote", kit.Select(ice.Info.Make.Remote, strings.TrimSpace(m.Cmdx(cli.SYSTEM, "git", "config", "remote.origin.url"))))
m.Option("pathname", strings.TrimSuffix(path.Base(m.Option("remote")), ".git"))
case ice.BASE:
}
if buf, err := kit.Render(m.Config(kit.Keys(ice.CONTEXTS, k)), m); m.Assert(err) {
m.EchoScript(strings.TrimSpace(string(buf)))
}
@ -151,14 +165,15 @@ func init() {
}
var _contexts = kit.Dict(
ice.MISC, `# 命令下载
export ctx_dev={{.Option "httphost"}} ctx_pod={{.Option "user.pod"}}; ctx_temp=$(mktemp); wget -O $ctx_temp $ctx_dev; source $ctx_temp app
ice.MISC, `# 下载命令
export ctx_dev={{.Option "httphost"}} ctx_pod={{.Option "user.pod"}}; ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL $ctx_dev; source $ctx_temp app
export ctx_dev={{.Option "httphost"}} ctx_pod={{.Option "user.pod"}}; ctx_temp=$(mktemp); wget -O $ctx_temp -q $ctx_dev; source $ctx_temp app
`,
ice.CORE, `# 源码下载
ice.CORE, `# 克隆源码
git clone {{.Option "remote"}}; cd {{.Option "pathname"}} && source etc/miss.sh port 9020
`,
ice.BASE, `# 官方下载
ice.BASE, `# 下载工具
ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL {{.Cmdx "spide" "shy" "url"}}; source $ctx_temp binary
ctx_temp=$(mktemp); wget -O $ctx_temp {{.Cmdx "spide" "shy" "url"}}; source $ctx_temp binary
ctx_temp=$(mktemp); wget -O $ctx_temp -q {{.Cmdx "spide" "shy" "url"}}; source $ctx_temp binary
`,
)

View File

@ -177,7 +177,7 @@ func init() {
}
}},
SERVER: {Name: "server path auto create import", Help: "服务器", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create name", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
mdb.CREATE: {Name: "create name", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, path.Join(ice.USR_LOCAL, REPOS))
m.Cmdy(cli.SYSTEM, GIT, INIT, "--bare", m.Option(mdb.NAME))
}},
@ -189,11 +189,16 @@ func init() {
m.Cmd(cli.SYSTEM, GIT, PUSH, "--tags", remote, MASTER)
})
}},
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Assert(m.Option(nfs.PATH) != "")
m.Cmd(nfs.TRASH, path.Join(ice.USR_LOCAL_REPOS, m.Option(nfs.PATH)))
}},
}, Hand: func(m *ice.Message, arg ...string) {
if m.Option(nfs.DIR_ROOT, path.Join(ice.USR_LOCAL, REPOS)); len(arg) == 0 {
if m.Option(nfs.DIR_ROOT, ice.USR_LOCAL_REPOS); len(arg) == 0 {
m.Cmdy(nfs.DIR, nfs.PWD).Table(func(index int, value map[string]string, head []string) {
m.PushScript("git clone " + m.MergeLink("/x/"+strings.TrimSuffix(value[nfs.PATH], ice.PS)))
})
m.Cut("time,path,size,script,action")
m.StatusTimeCount()
return
}

View File

@ -95,7 +95,7 @@ func (m *Message) RenderDownload(args ...Any) *Message {
return m.Render(RENDER_DOWNLOAD, args...)
}
func (m *Message) RenderWebsite(pod string, dir string, arg ...string) *Message {
m.Echo(m.Cmdx(m.Space(pod), WEBSITE, SHOW, dir, arg))
m.Echo(m.Cmdx(m.Space(pod), WEBSITE, "parse", dir, arg))
return m.RenderResult()
}
func (m *Message) RenderIndex(serve, repos string, file ...string) *Message {