1
0
forked from x/icebergs

add chat/favor.go

This commit is contained in:
harveyshao 2022-11-17 15:43:25 +08:00
parent 5db51d4724
commit 8e8470d910
21 changed files with 240 additions and 154 deletions

View File

@ -123,17 +123,7 @@ func init() {
})
}
func CmdHandler(args ...ice.Any) ice.Handler {
return func(m *ice.Message, arg ...string) { m.Cmdy(args...) }
}
func CmdAction(args ...ice.Any) ice.Actions {
return ice.Actions{ice.CTX_INIT: mdb.AutoConfig(args...),
COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
if !PodCmd(m, COMMAND, arg) {
m.Cmdy(COMMAND, arg)
}
}},
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
func Run(m *ice.Message, arg ...string) {
if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG {
switch arg[3] {
case "help":
@ -158,7 +148,18 @@ func CmdAction(args ...ice.Any) ice.Actions {
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...) }
}
func CmdAction(args ...ice.Any) ice.Actions {
return ice.Actions{ice.CTX_INIT: mdb.AutoConfig(args...),
COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
if !PodCmd(m, COMMAND, arg) {
m.Cmdy(COMMAND, arg)
}
}},
ice.RUN: {Name: "run", Help: "执行", Hand: Run},
}
}
func PodCmd(m *ice.Message, arg ...ice.Any) bool {

View File

@ -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))
}

View File

@ -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)
}

View File

@ -119,6 +119,7 @@ const (
WRITE = "write"
UPLOAD = "upload"
DOWNLOAD = "download"
DISPLAY = "display"
UPLOAD_WATCH = "upload_watch"
)

View File

@ -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) == "" {

View File

@ -351,6 +351,9 @@ const (
CLIENT_URL = "client.url"
LOGHEADERS = "logheaders"
OPEN = "open"
FULL = "full"
LINK = "link"
HTTP = "http"
FORM = "form"
ADDRESS = "address"

View File

@ -289,6 +289,7 @@ const ( // mdb
MDB = "mdb"
KEY = "key"
VALUE = "value"
FIELD = "field"
EXTRA = "extra"
SCRIPT = "script"
META = "meta"

View File

@ -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))
}

View File

@ -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

103
core/chat/favor.go Normal file
View File

@ -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) }

View File

@ -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)
}},
})
}

View File

@ -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)) {

View File

@ -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, "")
}
}},

View File

@ -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)))

View File

@ -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)
}
}},
})
}

View File

@ -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)
}
}},
})
}

View File

@ -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
}

View File

@ -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{

View File

@ -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) {

View File

@ -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

View File

@ -21,6 +21,9 @@ func Render(m *Message, cmd string, args ...Any) string {
return kit.Format(`<a href="%s" target="_blank">%s</a>`, p, arg[0])
case RENDER_BUTTON: // name...
if strings.HasPrefix(kit.Join(arg), "<input") {
return kit.Join(arg)
}
list := []string{}
for _, k := range kit.Split(kit.Join(arg)) {
list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`, 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(`<img src="%s" style="max-height:%spx; max-width:%spx">`, arg[0], m.Option("height"), m.Option("width"))
}
if strings.Contains(m.Option(MSG_USERUA), "Mobile") {
return kit.Format(`<img src="%s" width=%d>`, arg[0], kit.Int(kit.Select(kit.Select("120", m.Option("width")), arg, 1))-24)
}