1
0
forked from x/icebergs

add iframe

This commit is contained in:
shylinux@163.com 2022-09-23 23:38:39 +08:00
parent a91766548a
commit 0b9ec7cab0
24 changed files with 167 additions and 239 deletions

View File

@ -149,6 +149,7 @@ const (
CTX_OPS = "ctx_ops"
CTX_POD = "ctx_pod"
CTX_ARG = "ctx_arg"
CTX_ENV = "ctx_env"
CTX_PID = "ctx_pid"
CTX_LOG = "ctx_log"

View File

@ -48,8 +48,8 @@ func ProcessFloat(m *ice.Message, arg ...string) {
func ProcessHold(m *ice.Message, text ...ice.Any) {
m.Process(ice.PROCESS_HOLD, text...)
}
func ProcessRefresh(m *ice.Message) {
m.ProcessRefresh("300ms")
func ProcessRefresh(m *ice.Message, arg ...string) {
m.ProcessRefresh(kit.Select("300ms", arg, 0))
}
func ProcessRewrite(m *ice.Message, arg ...ice.Any) {
m.ProcessRewrite(arg...)

View File

@ -21,7 +21,7 @@ func _dream_list(m *ice.Message) *ice.Message {
if dream, ok := list[value[mdb.NAME]]; ok {
m.Push(mdb.TYPE, dream[mdb.TYPE])
m.Push(cli.STATUS, cli.START)
m.PushButton(cli.OPEN, "vimer", "xterm", cli.STOP)
m.PushButton(cli.OPEN, "xterm", "vimer", cli.STOP)
m.PushAnchor(strings.Split(MergePod(m, value[mdb.NAME]), "?")[0])
text := []string{}
for _, line := range kit.Split(m.Cmdx(SPACE, value[mdb.NAME], cli.SYSTEM, "git", "diff", "--shortstat"), ice.FS, ice.FS) {
@ -87,7 +87,6 @@ func _dream_show(m *ice.Message, name string) {
}
}
}
m.Cmd(nfs.DEFS, path.Join(p, ice.ETC_MISS_SH), m.Config(nfs.SCRIPT))
// 环境变量
m.Optionv(cli.CMD_DIR, kit.Path(p))
@ -119,7 +118,6 @@ const DREAM = "dream"
func init() {
Index.MergeCommands(ice.Commands{
DREAM: {Name: "dream name path auto create", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Config(nfs.SCRIPT, _dream_script) }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case nfs.REPOS:
@ -137,19 +135,20 @@ func init() {
cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
_dream_show(m, m.Option(mdb.NAME))
}},
cli.OPEN: {Name: "open", Help: "打开", Hand: func(m *ice.Message, arg ...string) {
ProcessWebsite(m, m.Option(mdb.NAME), "", "", "")
cli.OPEN: {Name: "open", Help: "系统", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(MergePod(m, m.Option(mdb.NAME), "", ""))
}},
"vimer": {Name: "vimer", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
"xterm": {Name: "xterm", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
ProcessWebsite(m, m.Option(mdb.NAME), "web.code.xterm", mdb.HASH,
m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, m.OptionSimple(mdb.NAME), mdb.TEXT, ""))
}},
"vimer": {Name: "vimer", Help: "编程", Hand: func(m *ice.Message, arg ...string) {
ProcessWebsite(m, m.Option(mdb.NAME), "web.code.vimer", "", "")
}},
"xterm": {Name: "xterm", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
ProcessWebsite(m, m.Option(mdb.NAME), "web.code.xterm", mdb.HASH, m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, mdb.NAME, "xterm"))
}},
cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP)
m.Go(func() { m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT) })
m.Sleep3s()
ctx.ProcessRefresh(m, "1s")
}},
DREAM_STOP: {Name: "dream.stop type name", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
if m.CmdAppend(SPACE, m.Option(mdb.NAME), mdb.STATUS) == cli.STOP {
@ -161,9 +160,9 @@ func init() {
}},
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.TRASH, mdb.CREATE, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME)))
m.ProcessRefresh30ms()
ctx.ProcessRefresh(m)
}},
}, mdb.HashAction(nfs.SCRIPT, _dream_script)), Hand: func(m *ice.Message, arg ...string) {
}, mdb.HashAction()), Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 0 {
if _dream_list(m); !m.IsMobileUA() {
ctx.DisplayTableCard(m)
@ -174,17 +173,3 @@ func init() {
}},
})
}
var _dream_script = `#! /bin/sh
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
ish_miss_prepare_compile
ish_miss_prepare_develop
ish_miss_prepare_operate
ish_miss_make; if [ -n "$*" ]; then ish_miss_serve "$@"; fi
`

View File

@ -7,6 +7,7 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
@ -152,3 +153,9 @@ func MergePodCmd(m Message, pod, cmd string, arg ...ice.Any) string {
func ProcessWebsite(m *ice.Message, pod, cmd string, arg ...ice.Any) {
m.ProcessOpen(MergePodCmd(m, pod, cmd, arg...))
}
func ProcessIframe(m *ice.Message, link string, arg ...string) {
if len(arg) == 0 || arg[0] != ice.RUN {
arg = []string{m.Cmdx("web.chat.iframe", mdb.CREATE, mdb.LINK, link)}
}
ctx.ProcessField(m, "web.chat.iframe", arg, arg...)
}

View File

@ -353,7 +353,9 @@ func init() {
ssh.SOURCE_STDIO: {Name: "source.stdio", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
m.Go(func() {
m.Sleep("2s")
m.Cmd(ssh.PRINTF, kit.Dict(nfs.CONTENT, ice.Render(m, ice.RENDER_QRCODE, m.Cmdx(SPACE, DOMAIN))+ice.NL))
url := m.Cmdx(SPACE, DOMAIN)
url2 := kit.MergePOD(m.Cmd(SPIDE, ice.DEV).Append(CLIENT_URL), ice.Info.NodeName)
m.Cmd(ssh.PRINTF, kit.Dict(nfs.CONTENT, ice.Render(m, ice.RENDER_QRCODE, url)+ice.NL+kit.Select("", url2+ice.NL, url != url2)))
})
}},
DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) {

View File

@ -10,6 +10,7 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
@ -154,7 +155,7 @@ func _space_echo(msg *ice.Message, source, target []string, c *websocket.Conn, n
msg.Optionv(ice.MSG_SOURCE, source)
msg.Optionv(ice.MSG_TARGET, target)
if e := c.WriteMessage(1, []byte(msg.FormatMeta())); msg.Warn(e) { // 回复失败
mdb.HashRemove(msg, mdb.NAME, name)
msg.Go(func() { mdb.HashRemove(msg, mdb.NAME, name) })
c.Close()
return
}
@ -349,15 +350,20 @@ func init() {
m.StatusTimeCount("nCPU", ncpu, "nmem", kit.Format("%.2fG", nmem/1000.0))
m.Debug("what %v", m.FormatMeta())
}},
cli.OPEN: {Name: "open", Help: "打开", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(MergePod(m, m.Option(mdb.NAME), "", ""))
cli.OPEN: {Name: "open", Help: "系统", Hand: func(m *ice.Message, arg ...string) {
ProcessIframe(m, MergePod(m, m.Option(mdb.NAME), "", ""), arg...)
}},
"vimer": {Name: "vimer", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(MergePod(m, m.Option(mdb.NAME)+"/cmd/web.code.vimer", "", ""))
"xterm": {Name: "xterm", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
ProcessIframe(m, MergePodCmd(m, m.Option(mdb.NAME), "web.code.xterm", mdb.HASH,
m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, m.OptionSimple(mdb.NAME), mdb.TEXT, "")), arg...)
}},
"xterm": {Name: "xterm", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(MergePod(m, m.Option(mdb.NAME)+"/cmd/web.code.xterm", mdb.HASH,
m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, mdb.NAME, "xterm")))
"vimer": {Name: "vimer", Help: "编程", Hand: func(m *ice.Message, arg ...string) {
ProcessIframe(m, MergePodCmd(m, m.Option(mdb.NAME), "web.code.vimer", "", ""), arg...)
}},
"exit": {Name: "exit", Help: "关闭", Hand: func(m *ice.Message, arg ...string) {
m.Cmd("", m.Option(mdb.NAME), "close")
m.Cmd("", m.Option(mdb.NAME), "exit")
ctx.ProcessRefresh(m)
}},
}, mdb.HashCloseAction()), Hand: func(m *ice.Message, arg ...string) {
if len(arg) < 2 { // 节点列表
@ -365,7 +371,13 @@ func init() {
m.Tables(func(value ice.Maps) {
switch value[mdb.TYPE] {
case SERVER, WORKER:
m.PushButton(cli.OPEN, "vimer", "xterm")
m.PushButton(cli.OPEN, "xterm", "vimer")
case CHROME:
if value[mdb.NAME] == kit.Select("", kit.Split(m.Option(ice.MSG_DAEMON), ice.PT), 0) {
m.PushButton("")
} else {
m.PushButton("exit")
}
default:
m.PushButton("")
}

26
core/chat/iframe.go Normal file
View File

@ -0,0 +1,26 @@
package chat
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
)
const IFRAME = "iframe"
func init() {
Index.MergeCommands(ice.Commands{
IFRAME: {Name: "iframe hash auto", Help: "网页", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create link name type", Help: "创建"},
}, mdb.HashAction(mdb.SHORT, mdb.LINK, mdb.FIELD, "time,hash,type,name,link")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) == 0 || arg[0] == "" {
m.Action(mdb.CREATE, mdb.PRUNES)
} else {
m.StatusTime(mdb.LINK, m.Append(mdb.LINK))
m.Action(cli.OPEN)
ctx.DisplayLocal(m, "")
}
}},
})
}

View File

@ -128,7 +128,8 @@ func _autogen_version(m *ice.Message) {
m.Cmd(cli.SYSTEM, GIT, "remote", "add", "origin", "https://"+mod)
m.Cmd("web.code.git.repos", mdb.CREATE, "repos", "https://"+mod, mdb.NAME, path.Base(mod), nfs.PATH, nfs.PWD)
m.Cmd(cli.SYSTEM, GIT, "add", ice.GO_MOD, ice.SRC, ice.ETC_MISS_SH)
m.Cmd(nfs.DEFS, ".gitignore", kit.Format(`src/binpack.go
m.Cmd(nfs.DEFS, ".gitignore", kit.Format(`
src/binpack.go
src/version.go
etc/
bin/
@ -143,9 +144,7 @@ usr/
m.Cmd(nfs.SAVE, ice.SRC_VERSION_GO, kit.Format(`package main
import (
ice "shylinux.com/x/icebergs"
)
import ice "shylinux.com/x/icebergs"
func init() {
ice.Info.Make = ice.MakeInfo{
@ -167,8 +166,8 @@ func init() {
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case cli.MAIN:
m.Option(nfs.DIR_ROOT, ice.SRC)
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).RenameAppend(nfs.PATH, arg[0])
m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH))
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go$`)).RenameAppend(nfs.PATH, arg[0])
}
}},
mdb.CREATE: {Name: "create name=hi help type=Zone,Hash,Data,Code main=main.go@key zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
@ -177,28 +176,25 @@ func init() {
m.Option(mdb.TEXT, kit.Format("`name:\"%s\" help:\"%s\"`", _defs_list(m), m.Option(mdb.HELP)))
nfs.OptionFiles(m, nfs.DiskFile)
if p := path.Join(ice.SRC, m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO)); !nfs.ExistsFile(m, p) {
if p := path.Join(m.Option(nfs.PATH), m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO)); !nfs.ExistsFile(m, p) {
_autogen_module(m, p)
_autogen_import(m, path.Join(ice.SRC, m.Option(cli.MAIN)), m.Option(mdb.ZONE), _autogen_mod(m, ice.GO_MOD))
_autogen_import(m, path.Join(m.Option(nfs.PATH), m.Option(cli.MAIN)), m.Option(mdb.ZONE), _autogen_mod(m, ice.GO_MOD))
}
if p := path.Join(ice.SRC, m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), SHY)); !nfs.ExistsFile(m, p) {
if p := path.Join(m.Option(nfs.PATH), m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), SHY)); !nfs.ExistsFile(m, p) {
_autogen_script(m, p)
_autogen_source(m, path.Join(ice.SRC, m.Option(cli.MAIN)), p)
_autogen_source(m, path.Join(m.Option(nfs.PATH), m.Option(cli.MAIN)), p)
}
m.Option(nfs.FILE, path.Join(m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO)))
_autogen_version(m.Spawn())
}},
ssh.SCRIPT: {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.DEFS, ice.ETC_MISS_SH, m.Conf(web.DREAM, kit.Keym(nfs.SCRIPT)))
m.Cmd(nfs.DEFS, ice.ETC_MISS_SH, _miss_script)
defer m.Cmdy(nfs.CAT, ice.ETC_MISS_SH)
m.Cmdy(nfs.DIR, ice.ETC_MISS_SH)
m.Cmdy(nfs.DIR, ice.GO_MOD)
m.Cmdy(nfs.DIR, ice.GO_SUM)
}},
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.TRASH, path.Join(ice.SRC, m.Option(nfs.PATH)))
}},
BINPACK: {Name: "binpack", Help: "打包:生成 src/binpack.go", Hand: func(m *ice.Message, arg ...string) {
_autogen_version(m)
if m.Cmd(BINPACK, mdb.CREATE); nfs.ExistsFile(m, ice.USR_RELEASE) && m.Option(ice.MSG_USERPOD) == "" {
@ -207,7 +203,7 @@ func init() {
m.Cmdy(nfs.DIR, "usr/release/binpack.go")
m.Cmdy(nfs.DIR, "usr/release/conf.go")
}
m.Cmdy(nfs.CAT, "src/version.go")
m.Cmdy(nfs.CAT, ice.SRC_VERSION_GO)
}},
RELAY: {Name: "relay alias username host port list", Help: "跳板", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(COMPILE, RELAY)
@ -216,7 +212,21 @@ func init() {
kit.Formats(kit.Dict(m.OptionSimple("username,host,port,list"))))
}},
}, Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, kit.Select("version.go", arg, 0), kit.Dict(nfs.DIR_ROOT, ice.SRC))
m.Cmdy(nfs.CAT, kit.Select(path.Base(ice.SRC_VERSION_GO), arg, 0), kit.Dict(nfs.DIR_ROOT, ice.SRC))
}},
})
}
var _miss_script = `#! /bin/sh
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
ish_miss_prepare_compile
ish_miss_prepare_develop
ish_miss_prepare_operate
ish_miss_make; if [ -n "$*" ]; then ish_miss_serve "$@"; fi
`

View File

@ -72,6 +72,7 @@ func _binpack_all(m *ice.Message) {
import (
"encoding/base64"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/nfs"
)
@ -129,7 +130,7 @@ func init() {
}
list[dir] = true
m.Cmd(nfs.DIR, dir, nfs.PATH, kit.Dict(nfs.DIR_ROOT, nfs.PWD, nfs.DIR_REG, ".*.(shy|js)")).Tables(func(value ice.Maps) {
m.Cmd(nfs.DIR, dir, nfs.PATH, kit.Dict(nfs.DIR_ROOT, nfs.PWD, nfs.DIR_REG, `.*\.(sh|shy|js)$`)).Tables(func(value ice.Maps) {
if list[value[nfs.PATH]] {
return
}
@ -153,8 +154,6 @@ func init() {
mdb.INSERT: {Name: "insert path", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m, nfs.PATH, m.Option(nfs.PATH))
}},
}, mdb.HashAction(mdb.SHORT, nfs.PATH)), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m)
}},
}, mdb.HashAction(mdb.SHORT, nfs.PATH))},
})
}

View File

@ -47,6 +47,11 @@ func init() {
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { _c_exec(m, arg...) }},
NAVIGATE: {Hand: func(m *ice.Message, arg ...string) { _c_tags(m, MAN, "ctags", "-a", "-R", nfs.PWD) }},
}, PlugAction(), LangAction())},
H: {Name: "c path auto", Help: "系统", Actions: ice.MergeActions(ice.Actions{
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { _c_show(m, arg...) }},
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { _c_exec(m, arg...) }},
NAVIGATE: {Hand: func(m *ice.Message, arg ...string) { _c_tags(m, MAN, "ctags", "-a", "-R", nfs.PWD) }},
}, PlugAction(), LangAction())},
MAN: {Name: MAN, Help: "手册", Actions: ice.MergeActions(ice.Actions{
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 1 {

View File

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

View File

@ -1,8 +1,8 @@
chapter "源码"
code.go
code.shy
section "开发流程"
install.go
webpack.go
binpack.go
@ -11,20 +11,23 @@ compile.go
publish.go
upgrade.go
oauth.go
section "编程工具"
favor.go
xterm.go
xterm.shy
inner.go
vimer.go
bench.go
pprof.go
bench.go
oauth.go
case.go
section "编程语言"
c.go
sh.go
shy.go
zml.go
py.go
go.go
js.go
py.go
zml.go

View File

@ -2,19 +2,18 @@ package code
import (
"path"
"runtime"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
func _compile_target(m *ice.Message, arg ...string) (string, string, string, string) {
arch := m.Conf(cli.RUNTIME, kit.Keys(tcp.HOST, cli.GOARCH))
goos := m.Conf(cli.RUNTIME, kit.Keys(tcp.HOST, cli.GOOS))
arch, goos := runtime.GOARCH, runtime.GOOS
main, file := ice.SRC_MAIN_GO, ""
for _, k := range arg {
switch k {
@ -43,8 +42,8 @@ const COMPILE = "compile"
func init() {
Index.Merge(&ice.Context{Configs: ice.Configs{
COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data(nfs.PATH, ice.USR_PUBLISH,
cli.ENV, kit.Dict("GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "shylinux.com,github.com", "CGO_ENABLED", "0"),
COMPILE: {Value: kit.Data(nfs.PATH, ice.USR_PUBLISH,
cli.ENV, kit.Dict("GOPRIVATE", "shylinux.com,github.com", "GOPROXY", "https://goproxy.cn,direct", "CGO_ENABLED", "0"),
)},
}, Commands: ice.Commands{
COMPILE: {Name: "compile arch=amd64,386,arm,arm64,mipsle os=linux,darwin,windows src=src/main.go@key run binpack relay", Help: "编译", Actions: ice.Actions{
@ -55,7 +54,7 @@ func init() {
m.Cmdy(AUTOGEN, BINPACK)
}},
RELAY: {Name: "relay", Help: "跳板", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(COMPILE, ice.SRC_RELAY_GO, path.Join(ice.USR_PUBLISH, RELAY))
m.Cmdy(COMPILE, ice.SRC_RELAY_GO, path.Join(ice.USR_PUBLISH, RELAY))
}},
}, Hand: func(m *ice.Message, arg ...string) {
// 下载依赖
@ -77,7 +76,7 @@ func init() {
m.Cmdy(nfs.DIR, file, nfs.DIR_WEB_FIELDS)
m.Cmdy(PUBLISH, ice.CONTEXTS)
m.StatusTimeCount()
m.Option(ice.MSG_PROCESS, "")
m.Process("")
}},
}})
}

View File

@ -17,7 +17,7 @@ func init() {
INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
ctx.Process(m, m.ActionKey(), m.OptionSplit(nfs.PATH, nfs.FILE, nfs.LINE), arg...)
}},
XTERM: {Name: "xterm", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
XTERM: {Name: "xterm", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
ctx.Process(m, m.ActionKey(), m.OptionSimple(mdb.TYPE, mdb.NAME, mdb.TEXT), arg...)
}},
}, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) {

View File

@ -135,7 +135,7 @@ const SUM = "sum"
func init() {
Index.MergeCommands(ice.Commands{
GO: {Name: "go", Help: "后端", Actions: ice.MergeActions(ice.Actions{
GO: {Name: "go path auto", Help: "后端", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(NAVIGATE, mdb.CREATE, GODOC, m.PrefixKey())
}},

View File

@ -80,12 +80,12 @@ func _install_build(m *ice.Message, arg ...string) string {
// 编译
if msg := m.Cmd(cli.SYSTEM, cli.MAKE, "-j8"); !cli.IsSuccess(msg) {
return msg.Append(cli.CMD_ERR)
return msg.Append(cli.CMD_ERR) + msg.Append(cli.CMD_OUT)
}
// 安装
if msg := m.Cmd(cli.SYSTEM, cli.MAKE, "PREFIX="+pp, INSTALL); !cli.IsSuccess(msg) {
return msg.Append(cli.CMD_ERR)
return msg.Append(cli.CMD_ERR) + msg.Append(cli.CMD_OUT)
}
return ""
}
@ -178,7 +178,10 @@ const INSTALL = "install"
func init() {
Index.MergeCommands(ice.Commands{
INSTALL: {Name: "install name port path:text auto download", Help: "安装", Meta: kit.Dict(), Actions: ice.MergeActions(ice.Actions{
INSTALL: {Name: "install name port path:text auto download", Help: "安装", Actions: ice.MergeActions(ice.Actions{
nfs.PATH: {Name: "path", Help: "路径", Hand: func(m *ice.Message, arg ...string) {
m.Echo(_install_path(m, kit.Select("", arg, 0)))
}},
web.DOWNLOAD: {Name: "download link path", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
_install_download(m)
}},
@ -208,9 +211,6 @@ func init() {
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
_install_trash(m, arg...)
}},
nfs.PATH: {Name: "path", Help: "路径", Hand: func(m *ice.Message, arg ...string) {
m.Echo(_install_path(m, kit.Select("", arg, 0)))
}},
nfs.SOURCE: {Name: "source link path", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
if m.Option(nfs.DIR_ROOT, path.Join(_install_path(m, ""), _INSTALL)); !nfs.ExistsFile(m, m.Option(nfs.DIR_ROOT)) {
m.Option(nfs.DIR_ROOT, path.Join(_install_path(m, "")))

View File

@ -71,7 +71,7 @@ func init() {
}
}
}},
"/oauth": {Name: "/oauth", Help: "授权", Actions: ice.MergeActions(ice.Actions{}, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
web.P(OAUTH): {Name: "/oauth", Help: "授权", Actions: ice.MergeActions(ice.Actions{}, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
if m.Warn(m.Option(CODE) == "", ice.ErrNotValid) {
return
}

View File

@ -42,13 +42,14 @@ func _publish_list(m *ice.Message, arg ...string) {
}
func _publish_bin_list(m *ice.Message, dir string) {
p := m.Option(cli.CMD_DIR, dir)
for _, ls := range strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.NL) {
for _, ls := range strings.Split(strings.TrimSpace(m.Cmdx(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable")), ice.NL) {
if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" {
if s, e := nfs.StatFile(m, path.Join(p, file)); e == nil {
m.Push(mdb.TIME, s.ModTime())
m.Push(nfs.SIZE, kit.FmtSize(s.Size()))
m.Push(nfs.FILE, file)
m.Push(nfs.PATH, file)
m.PushDownload(mdb.LINK, file, path.Join(p, file))
m.PushButton(nfs.TRASH)
}
}
}
@ -72,19 +73,19 @@ func init() {
m.Config(ice.CONTEXTS, _contexts)
}},
web.SERVE_START: {Name: "serve.start", Help: "服务启动", Hand: func(m *ice.Message, arg ...string) {
_publish_file(m, ice.ICE_BIN)
// _publish_file(m, ice.ICE_BIN)
}},
ice.VOLCANOS: {Name: "volcanos", Help: "火山架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }()
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS) }()
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.MISC) }()
_publish_list(m, `.*\.(html|css|js)$`)
}},
ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS) }()
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.CORE) }()
_publish_bin_list(m, ice.USR_PUBLISH)
}},
ice.INTSHELL: {Name: "intshell", Help: "神农架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS) }()
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.BASE) }()
_publish_list(m, `.*\.(sh|vim|conf)$`)
}},
ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
@ -93,11 +94,11 @@ func init() {
if host == tcp.LOCALHOST {
host = m.Cmd(tcp.HOST).Append(aaa.IP)
}
m.Option("ctx_env", kit.Select("", " "+kit.JoinKV("=", " ", "ctx_pod", m.Option(ice.MSG_USERPOD)), m.Option(ice.MSG_USERPOD) != ""))
m.Option(cli.CTX_ENV, kit.Select("", " "+kit.JoinKV("=", " ", cli.CTX_POD, m.Option(ice.MSG_USERPOD)), m.Option(ice.MSG_USERPOD) != ""))
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, host, kit.Select(kit.Select("443", "80", u.Scheme == ice.HTTP), strings.Split(u.Host, ice.DF), 1)))
if len(arg) == 0 {
arg = append(arg, ice.MISC, ice.CORE, ice.BASE)
arg = append(arg, ice.MISC)
}
for _, k := range arg {
switch k {
@ -109,7 +110,7 @@ func init() {
m.Cmd(nfs.LINK, bin, m.Cmdx(cli.RUNTIME, "boot.bin"))
}
case ice.CORE:
case ice.CORE, ice.BASE:
if !nfs.ExistsFile(m, ".git") {
repos := web.MergeURL2(m, "/x/"+kit.Select(ice.Info.PathName, m.Option(ice.MSG_USERPOD)))
m.Cmd(cli.SYSTEM, "git", "init")
@ -118,7 +119,6 @@ func init() {
}
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)))

View File

@ -7,10 +7,9 @@ import (
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
)
func _py_main_script(m *ice.Message, arg ...string) {
func _py_exec(m *ice.Message, arg ...string) {
const PYTHON2 = "python2"
if _, e := nfs.DiskFile.StatFile(path.Join(arg[2], arg[1])); e == nil {
@ -19,64 +18,34 @@ func _py_main_script(m *ice.Message, arg ...string) {
} else if b, e := nfs.ReadFile(m, path.Join(arg[2], arg[1])); e == nil {
m.Cmdy(cli.SYSTEM, PYTHON2, "-c", string(b))
}
if m.StatusTime(); cli.IsSuccess(m) {
m.SetAppend()
}
m.Echo(ice.NL)
}
const PY = nfs.PY
func init() {
Index.Merge(&ice.Context{Commands: ice.Commands{
Index.MergeCommands(ice.Commands{
PY: {Name: "py path auto", Help: "脚本", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Go(func() {
m.Sleep300ms() // after runtime init
m.Sleep300ms()
cli.IsAlpine(m, "python", "python2")
cli.IsAlpine(m, "python2")
cli.IsAlpine(m, "python3")
})
m.Cmd(mdb.ENGINE, mdb.CREATE, PY, m.PrefixKey())
m.Cmd(mdb.RENDER, mdb.CREATE, PY, m.PrefixKey())
m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}},
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
return
}
m.Echo(`
print "hello world"
`)
}},
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
_py_main_script(m, arg...)
}},
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
_py_main_script(m, arg...)
// _py_exec(m, arg...)
}},
}, PlugAction()), Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 0 && kit.Ext(arg[0]) == PY {
_py_main_script(m, PY, arg[0], ice.SRC)
return
}
m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_ROOT, ice.SRC)
m.Option(nfs.DIR_REG, ".*.(py)$")
m.Cmdy(nfs.DIR, arg)
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
_py_exec(m, arg...)
}},
}, Configs: ice.Configs{
PY: {Name: PY, Help: "脚本", Value: kit.Data(PLUG, kit.Dict(
SPLIT, kit.Dict(SPACE, " ", OPERATE, "{[(.,;!|<>)]}"),
PREFIX, kit.Dict("#!", COMMENT, "# ", COMMENT), SUFFIX, kit.Dict(" {", COMMENT),
PREPARE, kit.Dict(
KEYWORD, kit.Simple(
"import", "from", "return",
),
FUNCTION, kit.Simple(
"print",
),
), KEYWORD, kit.Dict(),
))},
}})
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(`print "hello world"`)
}},
}, PlugAction(), LangAction())},
})
}

View File

@ -1,87 +0,0 @@
package code
import (
"path"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
)
// const TEMPLATE = "template"
func init() {
return
Index.MergeCommands(ice.Commands{
TEMPLATE: {Name: "template name auto", Help: "模板", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
for _, _template := range _template_list {
m.Cmd(TEMPLATE, mdb.CREATE, kit.SimpleKV(kit.Format(_template[0]), _template[1:]...))
}
}},
mdb.CREATE: {Name: "create type name text args", Help: "创建"},
nfs.DEFS: {Name: "defs file=hi/hi.js", Help: "生成", Hand: func(m *ice.Message, arg ...string) {
m.Option("tags", "`"+m.Option("tags")+"`")
if buf, err := kit.Render(m.Option(mdb.TEXT), m); !m.Warn(err) {
switch m.Cmd(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), string(buf)); kit.Ext(m.Option(nfs.FILE)) {
case GO:
if m.Option(cli.MAIN) != "" && m.Option(mdb.ZONE) != "" {
_autogen_import(m, path.Join(m.Option(nfs.PATH), m.Option(cli.MAIN)), m.Option(mdb.ZONE), _autogen_mod(m, ice.GO_MOD))
}
default:
m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Option(mdb.TEXT))
}
}
}},
}, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,type,name,text,args")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...).Sort(mdb.NAME); len(arg) == 0 {
m.Cut("time,action,type,name,text,args")
m.Action(mdb.CREATE)
}
m.PushAction(nfs.DEFS, mdb.REMOVE)
}},
})
}
var _template_list = [][]ice.Any{
[]ice.Any{"", "txt", "网站索引", `
hi
hi
cli.qrcode
cli.system
cli.runtime
`},
[]ice.Any{"", "js", "前端模块", `Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.onmotion.clear(can)
can.onappend.table(can, msg)
can.onappend.board(can, msg)
}})`},
[]ice.Any{"", "go", "后端模块", `package {{.Option "zone"}}
import (
"shylinux.com/x/ice"
)
type {{.Option "name"}} struct {
ice.{{.Option "type"}}
list string {{.Option "tags"}}
}
func (h {{.Option "name"}}) List(m *ice.Message, arg ...string) {
h.{{.Option "type"}}.List(m, arg...)
}
func init() { ice.Cmd("{{.Option "key"}}", {{.Option "name"}}{}) }
`, "args", `[
{"name": "zone", "value": "hi"},
{"name": "name", "value": "hi"},
{"name": "key", "value": "web.code.hi.hi"},
{"name": "type", "values": "Hash,Zone,List"},
{"name": "tags", "value": "name:\"list hash id auto insert\" help:\"数据\""},
{"name": "main", "value": "main.go"}
]`},
}

View File

@ -62,6 +62,7 @@ func init() {
m.Cmd(nfs.TRASH, arg[0])
}},
nfs.SCRIPT: {Name: "script file=hi/hi.js", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.PATH, "src/")
m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx("", TEMPLATE))
}},
web.WEBSITE: {Name: "website file=hi.zml", Help: "网页", Hand: func(m *ice.Message, arg ...string) {
@ -109,7 +110,8 @@ func init() {
web.ToastSuccess(m)
m.ProcessInner()
}},
AUTOGEN: {Name: "create name=hi help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
AUTOGEN: {Name: "create name=h2 help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.PATH, "src/")
m.Cmdy(AUTOGEN, mdb.CREATE, arg)
}},
COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {

View File

@ -53,6 +53,7 @@ func _webpack_cache(m *ice.Message, dir string, write bool) {
js, _, e := nfs.CreateFile(m, path.Join(dir, PAGE_CACHE_JS))
m.Assert(e)
defer js.Close()
defer fmt.Fprintln(js, `_can_name = ""`)
defer _webpack_can(m)
if !write {
@ -71,6 +72,7 @@ func _webpack_cache(m *ice.Message, dir string, write bool) {
})
}
fmt.Fprintln(js)
for _, k := range []string{LIB, PANEL, PLUGIN} {
m.Cmd(nfs.DIR, k).Sort(nfs.PATH).Tables(func(value ice.Maps) {
if kit.Ext(value[nfs.PATH]) == JS {
@ -141,8 +143,8 @@ const (
const (
PAGE_INDEX_CSS = "page/index.css"
PAGE_CACHE_CSS = "page/cache.css"
PAGE_CACHE_JS = "page/cache.js"
PAGE_INDEX_JS = "page/index.js"
PAGE_CACHE_JS = "page/cache.js"
PAGE_CAN_CSS = "page/can.css"
PAGE_CAN_JS = "page/can.js"
)
@ -153,10 +155,10 @@ const WEBPACK = "webpack"
func init() {
Index.MergeCommands(ice.Commands{
WEBPACK: {Name: "webpack path auto create remove", Help: "打包", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
mdb.CREATE: {Name: "create", Help: "发布", Hand: func(m *ice.Message, arg ...string) {
_webpack_cache(m.Spawn(), _volcanos(m), true)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
mdb.REMOVE: {Name: "remove", Help: "调试", Hand: func(m *ice.Message, arg ...string) {
_webpack_cache(m.Spawn(), _volcanos(m), false)
}},
mdb.INSERT: {Name: "insert path", Help: "添加", Hand: func(m *ice.Message, arg ...string) {

View File

@ -100,7 +100,7 @@ func init() {
_xterm_get(m, kit.Select("", arg, 0)).Write(m.Cmdx(PUBLISH, ice.CONTEXTS, INSTALL) + ice.NL)
ctx.ProcessHold(m)
}},
web.WEBSITE: {Name: "website", Help: "打开", Hand: func(m *ice.Message, arg ...string) {
web.WEBSITE: {Name: "website", Help: "网页", Hand: func(m *ice.Message, arg ...string) {
web.ProcessWebsite(m, "", "", m.OptionSimple(mdb.HASH))
}},
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,view", mdb.TOOLS, FAVOR), ctx.CmdAction(), ctx.ProcessAction()), Hand: func(m *ice.Message, arg ...string) {
@ -108,7 +108,7 @@ func init() {
m.PushAction(web.WEBSITE, mdb.REMOVE)
m.Action(mdb.CREATE, mdb.PRUNES)
} else {
m.Action("波浪线", "反引号", "refresh", "full", INSTALL)
m.Action(INSTALL, "波浪线", "反引号")
ctx.DisplayLocal(m, "")
ctx.Toolkit(m)
}

View File

@ -23,16 +23,9 @@ func init() {
const (
SRC_WEBSITE = "src/website/"
)
Index.Register(&ice.Context{Name: ZML, Help: "网页", Commands: ice.Commands{
Index.MergeCommands(ice.Commands{
ZML: {Name: "zml", Help: "网页", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.RENDER, mdb.CREATE, nfs.ZML, m.PrefixKey())
m.Cmd(mdb.ENGINE, mdb.CREATE, nfs.ZML, m.PrefixKey())
m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
m.Cmd(COMPLETE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {}},
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
switch kit.Ext(m.Option(mdb.FILE)) {
case ZML:
@ -76,7 +69,7 @@ func init() {
if len(arg) > 0 && arg[0] == mdb.FOREACH {
switch m.Option(ctx.ACTION) {
case web.WEBSITE:
m.Cmdy(nfs.DIR, nfs.PWD, kit.Dict(nfs.DIR_ROOT, "src/website/"), nfs.PATH)
m.Cmdy(nfs.DIR, nfs.PWD, kit.Dict(nfs.DIR_ROOT, SRC_WEBSITE), nfs.PATH)
}
return
}
@ -113,6 +106,6 @@ func init() {
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(_website_url(m, strings.TrimPrefix(path.Join(arg[2], arg[1]), SRC_WEBSITE)))
}},
})},
}}, nil)
}, PlugAction(), LangAction())},
})
}