diff --git a/base/web/render.go b/base/web/render.go
index 34aa6a71..f6be24da 100644
--- a/base/web/render.go
+++ b/base/web/render.go
@@ -108,12 +108,16 @@ var RENDER = struct {
Field string
Frame string
Button string
+
+ Download string
}{
A: "a",
IMG: "img",
Field: "field",
Frame: "frame",
Button: "button",
+
+ Download: "download",
}
func init() {
@@ -137,6 +141,10 @@ func init() {
RENDER.Button: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(``, arg[0])
}},
+ RENDER.Download: {Hand: func(m *ice.Message, arg ...string) {
+ u := kit.Select(arg[0], arg, 1)
+ m.Echo(`%s`, u, path.Base(arg[0]), arg[0])
+ }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if arg[0] == mdb.RENDER {
m.Search("_render", func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
diff --git a/core/chat/header.go b/core/chat/header.go
index a6ac521d..2aa59422 100644
--- a/core/chat/header.go
+++ b/core/chat/header.go
@@ -1,9 +1,9 @@
package chat
import (
- "github.com/shylinux/icebergs"
+ ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/nfs"
- "github.com/shylinux/toolkits"
+ kit "github.com/shylinux/toolkits"
"fmt"
)
@@ -52,20 +52,20 @@ func init() {
"pack": {Name: "pack", Help: "打包", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.webpack", "pack")
- if f, _, e := kit.Create("usr/volcanos/pack/" + m.Option("name") + "/cache.js"); m.Assert(e) {
+ if f, _, e := kit.Create("usr/volcanos/pack/" + m.Option("name") + ".js"); m.Assert(e) {
defer f.Close()
data := kit.UnMarshal(m.Option("content"))
f.WriteString(`Volcanos.meta.pack = ` + kit.Formats(data))
}
- if f, p, e := kit.Create("usr/volcanos/pack/" + m.Option("name") + "/index.html"); m.Assert(e) {
+ if f, p, e := kit.Create("usr/volcanos/pack/" + m.Option("name") + ".html"); m.Assert(e) {
f.WriteString(fmt.Sprintf(_pack,
m.Cmdx(nfs.CAT, "usr/volcanos/cache.css"),
m.Cmdx(nfs.CAT, "usr/volcanos/index.css"),
m.Cmdx(nfs.CAT, "usr/volcanos/proto.js"),
m.Cmdx(nfs.CAT, "usr/volcanos/cache.js"),
- m.Cmdx(nfs.CAT, "usr/volcanos/pack/"+m.Option("name")+"/cache.js"),
+ m.Cmdx(nfs.CAT, "usr/volcanos/pack/"+m.Option("name")+".js"),
m.Cmdx(nfs.CAT, "usr/volcanos/index.js"),
))
m.Echo(p)
diff --git a/core/code/pack.go b/core/code/pack.go
index 4cdc0335..4912c719 100644
--- a/core/code/pack.go
+++ b/core/code/pack.go
@@ -1,7 +1,11 @@
package code
import (
+ "bufio"
+ "bytes"
+
ice "github.com/shylinux/icebergs"
+ "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/web"
@@ -117,6 +121,7 @@ func _pack_intshell(m *ice.Message, pack *os.File) {
const (
WEBPACK = "webpack"
BINPACK = "binpack"
+ MODPACK = "modpack"
)
func init() {
@@ -160,28 +165,161 @@ func init() {
m.Option(nfs.DIR_DEEP, "true")
m.Cmdy(nfs.DIR, "pack")
m.Table(func(index int, value map[string]string, head []string) {
- m.Push("link", m.Cmdx(mdb.RENDER, web.RENDER.A, "/"+value["path"]))
+ m.Push("link", m.Cmdx(mdb.RENDER, web.RENDER.Download, "/"+value["path"]))
})
}},
- BINPACK: {Name: "binpack", Help: "打包", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
- pack, p, e := kit.Create("usr/icebergs/pack/binpack.go")
- m.Assert(e)
- defer pack.Close()
+ BINPACK: {Name: "binpack", Help: "打包", Action: map[string]*ice.Action{
+ "pack": {Name: "pack", Help: "pack", Hand: func(m *ice.Message, arg ...string) {
+ pack, p, e := kit.Create("usr/icebergs/pack/binpack.go")
+ m.Assert(e)
+ defer pack.Close()
- pack.WriteString(`package pack` + "\n\n")
- pack.WriteString(`import "github.com/shylinux/icebergs"` + "\n\n")
- pack.WriteString(`func init() {` + "\n")
- pack.WriteString(` ice.BinPack = map[string][]byte{` + "\n")
+ pack.WriteString(`package pack` + "\n\n")
+ pack.WriteString(`import "github.com/shylinux/icebergs"` + "\n\n")
+ pack.WriteString(`func init() {` + "\n")
+ pack.WriteString(` ice.BinPack = map[string][]byte{` + "\n")
- _pack_volcanos(m, pack)
- _pack_learning(m, pack)
- _pack_icebergs(m, pack)
- _pack_intshell(m, pack)
+ _pack_volcanos(m, pack)
+ _pack_learning(m, pack)
+ _pack_icebergs(m, pack)
+ _pack_intshell(m, pack)
- pack.WriteString(` }` + "\n")
- pack.WriteString(`}` + "\n")
- m.Echo(p)
+ pack.WriteString(` }` + "\n")
+ pack.WriteString(`}` + "\n")
+ m.Echo(p)
+ }},
+ }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
+ m.Option(nfs.DIR_ROOT, "usr/icebergs")
+ m.Option(nfs.DIR_TYPE, nfs.FILE)
+ m.Option(nfs.DIR_DEEP, "true")
+ m.Cmdy(nfs.DIR, "pack")
+ m.Table(func(index int, value map[string]string, head []string) {
+ m.Push("link", m.Cmdx(mdb.RENDER, web.RENDER.Download, value["path"], "/share/local/usr/icebergs/"+value["path"]))
+ })
}},
+ MODPACK: {Name: "modpack path=auto 查看:button 返回:button 创建:button", Help: "打包", Meta: kit.Dict(
+ "style", "editor", "创建", kit.List("_input", "text", "name", "name"),
+ ), Action: map[string]*ice.Action{
+ mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
+ m.Option("name", "hi")
+ m.Option("help", "hello")
+ for i := 0; i < len(arg)-1; i += 2 {
+ m.Option(arg[i], arg[i+1])
+ }
+ os.Mkdir(path.Join("src/", arg[1]), ice.MOD_DIR)
+ name := m.Option("name")
+
+ kit.Fetch(m.Confv(MODPACK, "meta.base"), func(key string, value string) {
+ p := path.Join("src/", arg[1], arg[1]+"."+key)
+ if _, e := os.Stat(p); e != nil && os.IsNotExist(e) {
+ if f, p, e := kit.Create(p); m.Assert(e) {
+ if b, e := kit.Render(value, m); m.Assert(e) {
+ if n, e := f.Write(b); m.Assert(e) {
+ m.Log_EXPORT("file", p, arg[1], "size", n)
+ m.Echo(p)
+ }
+ }
+ }
+ }
+ })
+
+ mod := ""
+ if f, e := os.Open("go.mod"); e == nil {
+ defer f.Close()
+ for bio := bufio.NewScanner(f); bio.Scan(); {
+ if strings.HasPrefix(bio.Text(), "module") {
+ mod = strings.Split(bio.Text(), " ")[1]
+ break
+ }
+ }
+ }
+
+ begin, has := false, false
+ if f, e := os.Open("src/main.go"); e == nil {
+ for bio := bufio.NewScanner(f); bio.Scan(); {
+ if strings.HasPrefix(bio.Text(), "import (") {
+ begin = true
+ continue
+ }
+ if strings.HasPrefix(bio.Text(), "import") {
+ begin = true
+ continue
+ }
+ if strings.HasPrefix(bio.Text(), ")") {
+ begin = false
+ continue
+ }
+ if begin {
+ if strings.Contains(bio.Text(), mod+"/src/"+name) {
+ has = true
+ }
+ }
+ }
+ f.Close()
+ }
+ if !has {
+ if f, e := os.Open("src/main.go"); e == nil {
+ if b, e := ioutil.ReadAll(f); e == nil {
+ f.Close()
+
+ if f, e := os.Create("src/main.go"); e == nil {
+ for bio := bufio.NewScanner(bytes.NewBuffer(b)); bio.Scan(); {
+ f.WriteString(bio.Text())
+ f.WriteString("\n")
+ if strings.HasPrefix(bio.Text(), "package") {
+ f.WriteString("\n")
+ f.WriteString(`import _ "` + mod + "/src/" + name + `"`)
+ f.WriteString("\n")
+
+ m.Debug("src/main.go import: %v", begin, mod+"/src/"+name)
+ }
+ }
+ }
+ }
+ }
+ }
+
+ m.Cmd(cli.SYSTEM, "gofmt", "-w", "src/main.go")
+ }},
+ }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
+ m.Option(nfs.DIR_TYPE, nfs.FILE)
+ m.Option(nfs.DIR_DEEP, "true")
+ m.Option(nfs.DIR_ROOT, "src")
+ m.Cmdy(nfs.DIR, kit.Select("", arg, 0))
+ if len(arg) > 0 {
+ m.Option("_display", "/plugin/local/code/inner.js")
+ }
+ }},
+ },
+ Configs: map[string]*ice.Config{
+ MODPACK: {Name: MODPACK, Help: "modpack", Value: kit.Data(
+ "base", kit.Dict(
+ "shy", `title {{.Option "name"}}
+`,
+ "go", `package {{.Option "name"}}
+
+import (
+ ice "github.com/shylinux/icebergs"
+ "github.com/shylinux/icebergs/base/web"
+ "github.com/shylinux/icebergs/core/chat"
+ kit "github.com/shylinux/toolkits"
+)
+
+var Index = &ice.Context{Name: "{{.Option "name"}}", Help: "{{.Option "help"}}",
+ Configs: map[string]*ice.Config{
+ "{{.Option "name"}}": {Name: "{{.Option "name"}}", Help: "{{.Option "name"}}", Value: kit.Data()},
+ },
+ Commands: map[string]*ice.Command{
+ "{{.Option "name"}}": {Name: "{{.Option "name"}}", Help: "{{.Option "name"}}", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
+ m.Echo("hello {{.Option "name"}} world")
+ }},
+ },
+}
+
+func init() { chat.Index.Register(Index, &web.Frame{}) }
+`,
+ ),
+ )},
},
}, nil)
}
diff --git a/misc/mp/mp.go b/misc/mp/mp.go
index c9671505..d71e3d50 100644
--- a/misc/mp/mp.go
+++ b/misc/mp/mp.go
@@ -1,12 +1,12 @@
package mp
import (
- "github.com/shylinux/icebergs"
+ ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
"github.com/shylinux/icebergs/core/chat"
- "github.com/shylinux/toolkits"
+ kit "github.com/shylinux/toolkits"
"net/http"
"path"
@@ -15,7 +15,6 @@ import (
const MP = "mp"
var Index = &ice.Context{Name: "mp", Help: "小程序",
- Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{
"login": {Name: "login", Help: "认证", Value: kit.Data(
"auth", "/sns/jscode2session?grant_type=authorization_code",
diff --git a/misc/tmux/tmux.go b/misc/tmux/tmux.go
index ccf1be37..f4f05d31 100644
--- a/misc/tmux/tmux.go
+++ b/misc/tmux/tmux.go
@@ -56,11 +56,14 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
)},
},
Commands: map[string]*ice.Command{
- TEXT: {Name: "text 保存:button text:textarea", Help: "文本", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
+ TEXT: {Name: "text 保存:button 清空:button text:textarea", Help: "文本", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && arg[0] != "" {
m.Cmd(_tmux, "set-buffer", arg[0])
+ m.Cmdy("web.wiki.image", "qrcode", arg[0])
+ m.Echo("\n")
}
m.Echo(m.Cmdx(_tmux, "show-buffer"))
+ m.Render("")
}},
BUFFER: {Name: "buffer [buffer=auto [value]] auto", Help: "缓存", Action: map[string]*ice.Action{
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
diff --git a/misc/wx/wx.shy b/misc/wx/wx.shy
index 38ca8727..d457efd2 100644
--- a/misc/wx/wx.shy
+++ b/misc/wx/wx.shy
@@ -7,10 +7,6 @@ refer "" `
`
image qrcode `https://weixin.qq.com`
-chapter "技术"
-field webpack web.code.webpack
-field binpack web.code.binpack
-
chapter "应用"
field "阅读器" web.code.inner args `[ src/ main.shy ]`