diff --git a/base/ctx/command.go b/base/ctx/command.go
index 3da51f57..df1d4102 100644
--- a/base/ctx/command.go
+++ b/base/ctx/command.go
@@ -123,6 +123,32 @@ func init() {
})
}
+func Run(m *ice.Message, arg ...string) {
+ if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG {
+ switch arg[3] {
+ case "help":
+ if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".shy"); nfs.ExistsFile(m, file) {
+ ProcessFloat(m, "web.wiki.word", file)
+ }
+ case "script":
+ if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".js"); nfs.ExistsFile(m, file) {
+ ProcessFloat(m, "web.code.inner", file)
+ }
+ case "source":
+ if file := GetCmdFile(m, arg[0]); nfs.ExistsFile(m, file) {
+ ProcessFloat(m, "web.code.inner", file)
+ }
+ case "select":
+ m.Cmdy(CONFIG, arg[0])
+ case "reset":
+ m.Cmd(CONFIG, "reset", arg[0])
+ }
+ return
+ }
+ if !PodCmd(m, arg) && aaa.Right(m, arg) {
+ m.Cmdy(arg)
+ }
+}
func CmdHandler(args ...ice.Any) ice.Handler {
return func(m *ice.Message, arg ...string) { m.Cmdy(args...) }
}
@@ -133,32 +159,7 @@ func CmdAction(args ...ice.Any) ice.Actions {
m.Cmdy(COMMAND, arg)
}
}},
- ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
- if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG {
- switch arg[3] {
- case "help":
- if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".shy"); nfs.ExistsFile(m, file) {
- ProcessFloat(m, "web.wiki.word", file)
- }
- case "script":
- if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".js"); nfs.ExistsFile(m, file) {
- ProcessFloat(m, "web.code.inner", file)
- }
- case "source":
- if file := GetCmdFile(m, arg[0]); nfs.ExistsFile(m, file) {
- ProcessFloat(m, "web.code.inner", file)
- }
- case "select":
- m.Cmdy(CONFIG, arg[0])
- case "reset":
- m.Cmd(CONFIG, "reset", arg[0])
- }
- return
- }
- if !PodCmd(m, arg) && aaa.Right(m, arg) {
- m.Cmdy(arg)
- }
- }},
+ ice.RUN: {Name: "run", Help: "执行", Hand: Run},
}
}
func PodCmd(m *ice.Message, arg ...ice.Any) bool {
diff --git a/base/ctx/process.go b/base/ctx/process.go
index e92d73b4..94bb1064 100644
--- a/base/ctx/process.go
+++ b/base/ctx/process.go
@@ -30,7 +30,8 @@ func Process(m *ice.Message, key string, args []string, arg ...string) {
func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) {
cmd = kit.Select(m.PrefixKey(), cmd)
if len(arg) == 0 || arg[0] != ice.RUN {
- if m.Cmdy(COMMAND, cmd).ProcessField(m.ActionKey(), ice.RUN); len(args) > 0 {
+ m.Option("_index", m.PrefixKey())
+ if m.Cmdy(COMMAND, cmd).ProcessField(ACTION, m.ActionKey(), ice.RUN); len(args) > 0 {
m.Push(ARGS, kit.Format(args))
}
return
@@ -48,6 +49,9 @@ func ProcessFloat(m *ice.Message, arg ...string) {
func ProcessHold(m *ice.Message, text ...ice.Any) {
m.Process(ice.PROCESS_HOLD, text...)
}
+func ProcessOpen(m *ice.Message, url string) {
+ m.Process(ice.PROCESS_OPEN, url)
+}
func ProcessRefresh(m *ice.Message, arg ...string) {
m.ProcessRefresh(kit.Select("300ms", arg, 0))
}
diff --git a/base/gdb/event.go b/base/gdb/event.go
index 6bc04cfe..b091a7a9 100644
--- a/base/gdb/event.go
+++ b/base/gdb/event.go
@@ -15,7 +15,7 @@ func init() {
mdb.ZoneInsert(m, m.OptionSimple(EVENT, ice.CMD))
}},
HAPPEN: {Name: "happen event arg", Help: "触发", Hand: func(m *ice.Message, arg ...string) {
- mdb.ZoneSelect(m.Spawn(), m.Option(EVENT)).Tables(func(value ice.Maps) {
+ mdb.ZoneSelect(m.Spawn(ice.OptionFields("")), m.Option(EVENT)).Tables(func(value ice.Maps) {
m.Cmdy(kit.Split(value[ice.CMD]), m.Option(EVENT), arg[2:], ice.OptionFields("")).Cost()
})
}},
@@ -38,5 +38,5 @@ func Watch(m *ice.Message, key string, arg ...string) *ice.Message {
return m.Cmd("gdb.event", LISTEN, EVENT, key, ice.CMD, kit.Join(arg, ice.SP))
}
func Event(m *ice.Message, key string, arg ...ice.Any) *ice.Message {
- return m.Cmdy("gdb.event", HAPPEN, EVENT, key, arg)
+ return m.Cmdy("gdb.event", HAPPEN, EVENT, kit.Select(kit.Keys(m.CommandKey(), m.ActionKey()), key), arg)
}
diff --git a/base/web/cache.go b/base/web/cache.go
index 30871d81..9edc780f 100644
--- a/base/web/cache.go
+++ b/base/web/cache.go
@@ -119,6 +119,7 @@ const (
WRITE = "write"
UPLOAD = "upload"
DOWNLOAD = "download"
+ DISPLAY = "display"
UPLOAD_WATCH = "upload_watch"
)
diff --git a/base/web/option.go b/base/web/option.go
index 83affac0..78b33f60 100644
--- a/base/web/option.go
+++ b/base/web/option.go
@@ -12,19 +12,16 @@ import (
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
- "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/toolkits/file"
)
-func Upload(m *ice.Message) []string { // hash name size
- up := kit.Simple(m.Optionv(ice.MSG_UPLOAD))
- if len(up) < 2 {
- msg := m.Cmdy(CACHE, UPLOAD)
- up = kit.Simple(msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE))
+func Upload(m *ice.Message) *ice.Message {
+ if up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)); len(up) < 2 {
+ m.Cmdy(CACHE, UPLOAD)
}
- return up
+ return m
}
func PushNotice(m *ice.Message, arg ...ice.Any) {
if m.Option(ice.MSG_DAEMON) == "" {
diff --git a/base/web/spide.go b/base/web/spide.go
index 8bc25bb0..b88d90cc 100644
--- a/base/web/spide.go
+++ b/base/web/spide.go
@@ -351,6 +351,9 @@ const (
CLIENT_URL = "client.url"
LOGHEADERS = "logheaders"
+ OPEN = "open"
+ FULL = "full"
+ LINK = "link"
HTTP = "http"
FORM = "form"
ADDRESS = "address"
diff --git a/conf.go b/conf.go
index 5562d3b0..edda3810 100644
--- a/conf.go
+++ b/conf.go
@@ -289,6 +289,7 @@ const ( // mdb
MDB = "mdb"
KEY = "key"
VALUE = "value"
+ FIELD = "field"
EXTRA = "extra"
SCRIPT = "script"
META = "meta"
diff --git a/core/chat/action.go b/core/chat/action.go
index 5e0acb0c..f87eee89 100644
--- a/core/chat/action.go
+++ b/core/chat/action.go
@@ -69,7 +69,7 @@ func _action_share(m *ice.Message, arg ...string) {
}
}
func _action_upload(m *ice.Message) {
- msg := m.Cmd(web.CACHE, web.UPLOAD)
+ msg := m.Cmdy(web.CACHE, web.UPLOAD)
m.Option(ice.MSG_UPLOAD, msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE))
}
diff --git a/core/chat/chat.shy b/core/chat/chat.shy
index f3d83b6b..9c3eaccd 100644
--- a/core/chat/chat.shy
+++ b/core/chat/chat.shy
@@ -6,28 +6,24 @@ search.go
action.go
river.go
storm.go
-template.go
pod.go
cmd.go
grant.go
sso.go
-oauth
-scan.go
-paste.go
+favor.go
iframe.go
-location.go
-location.shy
-
-files.go
-trans.go
media.go
-topic.go
div.go
+topic.go
website.go
+template.go
keyboard.go
+location.go
+location.shy
+trans.go
room.go
meet.go
-
+oauth
diff --git a/core/chat/favor.go b/core/chat/favor.go
new file mode 100644
index 00000000..3606cc94
--- /dev/null
+++ b/core/chat/favor.go
@@ -0,0 +1,103 @@
+package chat
+
+import (
+ "strings"
+
+ 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/ssh"
+ "shylinux.com/x/icebergs/base/web"
+ kit "shylinux.com/x/toolkits"
+)
+
+const (
+ FAVOR_INPUTS = "favor.inputs"
+ FAVOR_TABLES = "favor.tables"
+ FAVOR_ACTION = "favor.action"
+)
+const FAVOR = "favor"
+
+func init() {
+ Index.MergeCommands(ice.Commands{
+ FAVOR: {Name: "favor hash auto create getClipboardData getLocation scanQRCode upload", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
+ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
+ switch mdb.HashInputs(m, arg); arg[0] {
+ case mdb.TYPE:
+ m.Push(arg[0], mdb.TEXT, ctx.INDEX)
+ case mdb.NAME:
+ switch m.Option(mdb.TYPE) {
+ case ctx.INDEX:
+ m.Copy(m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, arg[1:], ice.OptionFields(ctx.INDEX)).RenameAppend(ctx.INDEX, arg[0]))
+ }
+ }
+ gdb.Event(m, "", arg)
+ }},
+ "getClipboardData": {Name: "favor create", Help: "粘贴"},
+ "getLocation": {Name: "favor create", Help: "定位"},
+ "scanQRCode": {Name: "favor create", Help: "扫码"},
+ mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
+ m.OptionDefault(mdb.TYPE, mdb.LINK, mdb.NAME, kit.ParseURL(m.Option(mdb.TEXT)).Host)
+ mdb.HashCreate(m, m.OptionSimple())
+ }},
+ web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) {
+ web.Upload(m).Cmd("", mdb.CREATE, m.AppendSimple(mdb.TYPE, mdb.NAME, mdb.TEXT))
+ }},
+ web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) {
+ ctx.ProcessOpen(m, web.MergeURL2(m, web.SHARE_LOCAL+m.Option(mdb.TEXT), "filename", m.Option(mdb.NAME)))
+ }},
+ web.DISPLAY: {Help: "预览", Hand: func(m *ice.Message, arg ...string) {
+ m.EchoImages(web.SHARE_LOCAL + m.Option(mdb.TEXT)).ProcessInner()
+ }},
+ ctx.INDEX: {Help: "命令", Hand: func(m *ice.Message, arg ...string) {
+ ctx.ProcessField(m, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.NAME), kit.Simple(kit.UnMarshal(m.Option(mdb.TEXT))), arg...)
+ }},
+ ice.RUN: {Hand: func(m *ice.Message, arg ...string) {
+ m.Option(mdb.TYPE, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.TYPE))
+ ctx.Run(m, arg...)
+ }},
+ }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
+ if len(arg) > 0 && arg[0] == ctx.ACTION {
+ m.Option(mdb.TYPE, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.TYPE))
+ gdb.Event(m, FAVOR_ACTION, arg)
+ return
+ }
+ if mdb.HashSelect(m, arg...); len(arg) == 0 {
+ m.Tables(func(value ice.Maps) {
+ if msg := gdb.Event(m.Spawn(), FAVOR_TABLES, mdb.TYPE, value[mdb.TYPE]); msg.Append(ctx.ACTION) != "" {
+ m.PushButton(msg.Append(ctx.ACTION))
+ return
+ }
+ switch value[mdb.TYPE] {
+ case ctx.INDEX:
+ m.PushButton(ctx.INDEX, mdb.REMOVE)
+ default:
+ if strings.HasPrefix(value[mdb.TEXT], ice.VAR_FILE) {
+ if kit.ExtIsImage(value[mdb.NAME]) {
+ m.PushButton(web.DISPLAY, web.DOWNLOAD, mdb.REMOVE)
+ } else {
+ m.PushButton(web.DOWNLOAD, mdb.REMOVE)
+ }
+ } else {
+ m.PushButton(mdb.REMOVE)
+ }
+ }
+ })
+ } else {
+ if strings.HasPrefix(m.Append(mdb.TEXT), ice.VAR_FILE) {
+ link := web.SHARE_LOCAL + m.Append(mdb.TEXT)
+ if m.PushDownload(mdb.LINK, m.Append(mdb.NAME), link); len(arg) > 0 && kit.ExtIsImage(m.Append(mdb.NAME)) {
+ m.PushImages(web.DISPLAY, link)
+ }
+ }
+ m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
+ m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
+ m.PushAction(mdb.REMOVE)
+ }
+ }},
+ })
+}
+
+func FavorAction() ice.Actions { return gdb.EventAction(FAVOR_INPUTS, FAVOR_TABLES, FAVOR_ACTION) }
diff --git a/core/chat/files.go b/core/chat/files.go
deleted file mode 100644
index 46172217..00000000
--- a/core/chat/files.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package chat
-
-import (
- 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/web"
- kit "shylinux.com/x/toolkits"
-)
-
-const FILES = "files"
-
-func init() {
- Index.MergeCommands(ice.Commands{
- FILES: {Name: "files hash auto upload", Help: "文件夹", Actions: ice.MergeActions(ice.Actions{
- web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
- up := web.Upload(m)
- mdb.HashCreate(m, mdb.TYPE, kit.Ext(up[1]), mdb.NAME, up[1], nfs.SIZE, up[2], mdb.DATA, up[0])
- }},
- }, mdb.HashAction(mdb.SHORT, mdb.DATA, mdb.FIELD, "time,hash,type,name,size,data")), Hand: func(m *ice.Message, arg ...string) {
- mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) {
- link := web.SHARE_CACHE + value[mdb.DATA]
- if m.PushDownload(mdb.LINK, value[mdb.NAME], link); len(arg) > 0 && kit.ExtIsImage(value[mdb.NAME]) {
- m.PushImages("image", link)
- }
- m.PushQRCode(cli.QRCODE, web.MergeURL2(m, link))
- }).PushAction(mdb.REMOVE)
- }},
- })
-}
diff --git a/core/chat/grant.go b/core/chat/grant.go
index 800c3623..4cf99c2b 100644
--- a/core/chat/grant.go
+++ b/core/chat/grant.go
@@ -27,10 +27,7 @@ func init() {
})
}},
CONFIRM: {Help: "授权", Hand: func(m *ice.Message, arg ...string) {
- if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) {
- return
- }
- if m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) {
+ if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) || m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) {
return
}
if msg := m.Cmd(web.SPACE, m.Option(web.SPACE)); m.Warn(msg.Append(mdb.TYPE) != aaa.LOGIN, ice.ErrNotFound, m.Option(web.SPACE)) {
diff --git a/core/chat/iframe.go b/core/chat/iframe.go
index 197de4c6..6f880e04 100644
--- a/core/chat/iframe.go
+++ b/core/chat/iframe.go
@@ -2,9 +2,9 @@ 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"
+ "shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
@@ -13,18 +13,51 @@ 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", Hand: func(m *ice.Message, arg ...string) {
- m.OptionDefault(mdb.NAME, kit.ParseURL(m.Option(mdb.LINK)).Host, mdb.TYPE, mdb.LINK)
- mdb.HashCreate(m, m.OptionSimple("link,name,type"))
+ FAVOR_INPUTS: {Hand: func(m *ice.Message, arg ...string) {
+ switch arg[0] {
+ case mdb.TYPE:
+ m.Push(arg[0], web.LINK)
+ default:
+ if m.Option(mdb.TYPE) != web.LINK {
+ return
+ }
+ switch arg[0] {
+ case mdb.NAME:
+ m.Push(arg[0], web.OptionUserWeb(m).Host)
+ case mdb.TEXT:
+ m.Push(arg[0], m.Option(ice.MSG_USERWEB))
+ }
+ }
}},
- }, 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)
+ FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) {
+ switch arg[1] {
+ case web.LINK:
+ m.PushButton(IFRAME, web.OPEN, mdb.REMOVE)
+ }
+ }},
+ FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) {
+ if m.Option(mdb.TYPE) != web.LINK {
+ return
+ }
+ switch kit.Select("", arg, 1) {
+ case web.OPEN:
+ ctx.ProcessOpen(m, m.Option(mdb.TEXT))
+ default:
+ ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...)
+ }
+ }},
+ mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
+ mdb.HashCreate(m, mdb.TYPE, web.LINK, mdb.NAME, kit.ParseURL(m.Option(web.LINK)).Host, m.OptionSimple())
+ }},
+ web.OPEN: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessOpen(m, m.Option(web.LINK)) }},
+ }, mdb.HashAction(mdb.SHORT, web.LINK, mdb.FIELD, "time,hash,type,name,link"), FavorAction()), Hand: func(m *ice.Message, arg ...string) {
+ if mdb.HashSelect(m, arg...); len(arg) == 0 {
+ m.PushAction(web.OPEN, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES)
} else {
if m.Length() == 0 {
- m.Append(mdb.LINK, arg[0])
+ m.Append(web.LINK, arg[0])
}
- m.Action(cli.OPEN).StatusTime(mdb.LINK, m.Append(mdb.LINK))
+ m.Action(web.FULL, web.OPEN).StatusTime(m.AppendSimple(web.LINK))
ctx.DisplayLocal(m, "")
}
}},
diff --git a/core/chat/location.go b/core/chat/location.go
index 65dd3ef5..bc4e5631 100644
--- a/core/chat/location.go
+++ b/core/chat/location.go
@@ -38,6 +38,24 @@ func init() {
Index.MergeCommands(ice.Commands{
LOCATION: {Name: "location hash auto", Help: "地理位置", Actions: ice.MergeActions(ice.Actions{
+ FAVOR_INPUTS: {Hand: func(m *ice.Message, arg ...string) {
+ switch arg[0] {
+ case mdb.TYPE:
+ m.Push(arg[0], LOCATION)
+ }
+ }},
+ FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) {
+ if m.Option(mdb.TYPE) != LOCATION {
+ return
+ }
+ ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...)
+ }},
+ FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) {
+ switch arg[1] {
+ case LOCATION:
+ m.PushButton(LOCATION, mdb.REMOVE)
+ }
+ }},
"explore": {Name: "explore", Help: "周边", Hand: func(m *ice.Message, arg ...string) {
m.Echo(get(m, "place/v1/explore", m.OptionSimple("boundary,page_index")))
}},
@@ -53,7 +71,7 @@ func init() {
"district": {Name: "district", Help: "地区", Hand: func(m *ice.Message, arg ...string) {
m.Echo(get(m, "district/v1/getchildren", m.OptionSimple(mdb.ID)))
}},
- }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,latitude,longitude,extra"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
+ }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,latitude,longitude,extra"), ctx.CmdAction(), FavorAction()), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, kit.Slice(arg, 0, 1)...)
ctx.DisplayLocal(m, "", m.ConfigSimple(aaa.TOKEN))
m.Option(LOCATION, get(m, "location/v1/ip", aaa.IP, m.Option(ice.MSG_USERIP)))
diff --git a/core/chat/paste.go b/core/chat/paste.go
deleted file mode 100644
index b811753f..00000000
--- a/core/chat/paste.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package chat
-
-import (
- ice "shylinux.com/x/icebergs"
- "shylinux.com/x/icebergs/base/cli"
- "shylinux.com/x/icebergs/base/mdb"
- "shylinux.com/x/icebergs/base/ssh"
-)
-
-const PASTE = "paste"
-
-func init() {
- Index.MergeCommands(ice.Commands{
- PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴", Actions: ice.MergeActions(ice.Actions{
- "getClipboardData": {Name: "getClipboardData", Help: "粘贴", Hand: func(m *ice.Message, arg ...string) {
- m.Cmdy(PASTE, mdb.CREATE, arg)
- }},
- mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
- }, mdb.HashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
- if mdb.HashSelect(m, arg...); len(arg) > 0 {
- m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
- m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
- m.PushAction(mdb.REMOVE)
- }
- }},
- })
-}
diff --git a/core/chat/scan.go b/core/chat/scan.go
deleted file mode 100644
index 142d0000..00000000
--- a/core/chat/scan.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package chat
-
-import (
- ice "shylinux.com/x/icebergs"
- "shylinux.com/x/icebergs/base/cli"
- "shylinux.com/x/icebergs/base/mdb"
- "shylinux.com/x/icebergs/base/ssh"
-)
-
-const SCAN = "scan"
-
-func init() {
- Index.MergeCommands(ice.Commands{
- SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "扫码", Actions: ice.MergeActions(ice.Actions{
- "scanQRCode0": {Name: "scan create", Help: "本机扫码"},
- "scanQRCode": {Name: "scan create", Help: "扫码"},
- mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
- }, mdb.HashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
- if mdb.HashSelect(m, arg...); len(arg) > 0 {
- if m.Append(mdb.TYPE) == "image" {
- m.PushImages("image", m.Append(mdb.TEXT))
- }
- m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
- m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
- m.PushAction(mdb.REMOVE)
- }
- }},
- })
-}
diff --git a/misc.go b/misc.go
index 862fa340..6a2ea404 100644
--- a/misc.go
+++ b/misc.go
@@ -282,7 +282,7 @@ func (m *Message) CmdHand(cmd *Command, key string, arg ...string) *Message {
}
func (c *Context) _command(m *Message, cmd *Command, key string, arg ...string) *Message {
key = kit.Slice(strings.Split(key, PT), -1)[0]
- if m._key, m._cmd = key, cmd; cmd == nil {
+ if m._key, m._sub, m._cmd = key, "select", cmd; cmd == nil {
return m
}
diff --git a/misc/mp/login.go b/misc/mp/login.go
index e7274988..e7221fd5 100644
--- a/misc/mp/login.go
+++ b/misc/mp/login.go
@@ -57,12 +57,12 @@ func init() {
m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE),
)
}},
- chat.SCAN: {Name: "scan", Help: "扫码", Hand: func(m *ice.Message, arg ...string) {
+ "scan": {Name: "scan", Help: "扫码", Hand: func(m *ice.Message, arg ...string) {
if m.Option(chat.GRANT) != "" {
m.Cmdy(chat.HEADER, chat.GRANT, web.SPACE, m.Option(chat.GRANT))
return
}
- m.Cmdy(chat.SCAN, arg)
+ m.Cmdy("scan", arg)
}},
}},
LOGIN: {Name: "login appid auto qrcode tokens create", Help: "认证", Actions: ice.Actions{
diff --git a/misc/wx/login.go b/misc/wx/login.go
index 5c0b1530..aef35f59 100644
--- a/misc/wx/login.go
+++ b/misc/wx/login.go
@@ -87,10 +87,10 @@ func init() {
"latitude", m.Option("LocationX"), "longitude", m.Option("LocationY"), "scale", m.Option("Scale"),
)
case mdb.LINK: // 打卡
- m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
+ m.Cmdy("scan", mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
case "image": // 文本
- m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
+ m.Cmdy("scan", mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
case TEXT: // 文本
if cmds := kit.Split(m.Option("Content")); aaa.Right(m, cmds) {
diff --git a/option.go b/option.go
index 4ffae62d..ea3acb96 100644
--- a/option.go
+++ b/option.go
@@ -35,6 +35,19 @@ func (m *Message) OptionDefault(arg ...string) string {
return m.Option(arg[0])
}
func (m *Message) OptionSimple(key ...string) (res []string) {
+ if len(key) == 0 {
+ for _, k := range kit.Split(m.Config(FIELD)) {
+ switch k {
+ case "", TIME, HASH:
+ continue
+ }
+ if m.Option(k) == "" {
+ continue
+ }
+ res = append(res, k, m.Option(k))
+ }
+ return
+ }
for _, k := range kit.Split(kit.Join(key)) {
if k == "" || m.Option(k) == "" {
continue
diff --git a/render.go b/render.go
index 7c3b8277..f6b76266 100644
--- a/render.go
+++ b/render.go
@@ -21,6 +21,9 @@ func Render(m *Message, cmd string, args ...Any) string {
return kit.Format(`%s`, p, arg[0])
case RENDER_BUTTON: // name...
+ if strings.HasPrefix(kit.Join(arg), "`, k,
@@ -29,6 +32,9 @@ func Render(m *Message, cmd string, args ...Any) string {
return strings.Join(list, "")
case RENDER_IMAGES: // src [height]
+ if m.Option("height") != "" && m.Option("width") != "" {
+ return kit.Format(`
`, arg[0], m.Option("height"), m.Option("width"))
+ }
if strings.Contains(m.Option(MSG_USERUA), "Mobile") {
return kit.Format(`
`, arg[0], kit.Int(kit.Select(kit.Select("120", m.Option("width")), arg, 1))-24)
}