1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 17:44:05 +08:00

add location

This commit is contained in:
shaoying 2020-07-26 01:44:07 +08:00
parent 48fe6bfe83
commit 7c60b99624
9 changed files with 306 additions and 5 deletions

View File

@ -32,8 +32,8 @@ func _user_modify(m *ice.Message, name string, arg ...string) {
} }
m.Richs(USER, nil, name, func(key string, value map[string]interface{}) { m.Richs(USER, nil, name, func(key string, value map[string]interface{}) {
m.Log_MODIFY(USERNAME, name, arg)
for i := 0; i < len(arg)-1; i += 2 { for i := 0; i < len(arg)-1; i += 2 {
m.Log_MODIFY(USERNAME, name, arg[i], arg[i+1])
kit.Value(value, arg[i], arg[i+1]) kit.Value(value, arg[i], arg[i+1])
} }
}) })

View File

@ -106,11 +106,13 @@ var RENDER = struct {
A string A string
IMG string IMG string
Field string Field string
Frame string
Button string Button string
}{ }{
A: "a", A: "a",
IMG: "img", IMG: "img",
Field: "field", Field: "field",
Frame: "frame",
Button: "button", Button: "button",
} }
@ -119,7 +121,8 @@ func init() {
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
"_render": {Action: map[string]*ice.Action{ "_render": {Action: map[string]*ice.Action{
RENDER.A: {Hand: func(m *ice.Message, arg ...string) { RENDER.A: {Hand: func(m *ice.Message, arg ...string) {
u := kit.Select(m.Conf(SHARE, "meta.domain"), arg, 1) // u := kit.Select(m.Conf(SHARE, "meta.domain"), arg, 1)
u := kit.Select(arg[0], arg, 1)
m.Echo(`<a href="%s" target="_blank">%s</a>`, u, arg[0]) m.Echo(`<a href="%s" target="_blank">%s</a>`, u, arg[0])
}}, }},
RENDER.IMG: {Hand: func(m *ice.Message, arg ...string) { RENDER.IMG: {Hand: func(m *ice.Message, arg ...string) {
@ -128,6 +131,9 @@ func init() {
RENDER.Field: {Hand: func(m *ice.Message, arg ...string) { RENDER.Field: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(`<fieldset><legend>%s(%s)</legend><form></form></fieldset>`, arg[0], arg[1]) m.Echo(`<fieldset><legend>%s(%s)</legend><form></form></fieldset>`, arg[0], arg[1])
}}, }},
RENDER.Frame: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(`<iframe src=%s width=800 height=400 ></iframe>`, arg[0])
}},
RENDER.Button: {Hand: func(m *ice.Message, arg ...string) { RENDER.Button: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(`<input type="button" value="%s">`, arg[0]) m.Echo(`<input type="button" value="%s">`, arg[0])
}}, }},

View File

@ -85,8 +85,8 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
}}, }},
web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(ice.MSG_RIVER, "") m.Option(ice.MSG_RIVER, m.Option("river"))
m.Option(ice.MSG_STORM, "") m.Option(ice.MSG_STORM, m.Option("storm"))
if len(arg) > 0 { if len(arg) > 0 {
switch arg[0] { switch arg[0] {

102
core/chat/location.go Normal file
View File

@ -0,0 +1,102 @@
package chat
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
"net/url"
"strings"
)
const (
LOCATION = "location"
LONGITUDE = "longitude"
LATITUDE = "latitude"
)
func init() {
Index.Register(&ice.Context{Name: LOCATION, Help: "地理位置",
Configs: map[string]*ice.Config{
LOCATION: {Name: "location", Help: "地理位置", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load(LOCATION)
m.Cmd(mdb.SEARCH, mdb.CREATE, LOCATION, m.Prefix(LOCATION))
m.Cmd(mdb.RENDER, mdb.CREATE, LOCATION, m.Prefix(LOCATION))
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save(LOCATION) }},
LOCATION: {Name: "location text auto 添加:button", Help: "地理位置", Action: map[string]*ice.Action{
mdb.INSERT: {Hand: func(m *ice.Message, arg ...string) {
m.Conf(LOCATION, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT)
h := m.Rich(LOCATION, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.Dict(
kit.MDB_TYPE, arg[0], kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2],
LONGITUDE, arg[3], LATITUDE, arg[4],
))
m.Log_INSERT(LOCATION, arg[2])
m.Echo(h)
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Richs(LOCATION, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), m.Option(kit.MDB_TEXT), func(key string, value map[string]interface{}) {
if arg[0] == kit.MDB_TEXT {
return
}
m.Log_MODIFY(PASTE, m.Option(kit.MDB_TEXT))
value[arg[0]] = arg[1]
})
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Richs(LOCATION, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), m.Option(kit.MDB_TEXT), func(key string, value map[string]interface{}) {
m.Log_REMOVE(LOCATION, m.Option(kit.MDB_TEXT))
m.Conf(LOCATION, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), kit.MDB_HASH, key), "")
})
}},
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Richs(LOCATION, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
if strings.Contains(kit.Format(value[kit.MDB_NAME]), arg[1]) ||
strings.Contains(kit.Format(value[kit.MDB_TEXT]), arg[1]) {
m.Push("pod", m.Option("pod"))
m.Push("ctx", m.Cap(ice.CTX_FOLLOW))
m.Push("cmd", LOCATION)
m.Push(kit.MDB_TIME, value["time"])
m.Push(kit.MDB_SIZE, value["size"])
m.Push(kit.MDB_TYPE, LOCATION)
m.Push(kit.MDB_NAME, value["name"])
m.Push(kit.MDB_TEXT, value["text"])
}
})
}},
mdb.RENDER: {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.RENDER, web.RENDER.Frame, kit.Format(
"https://map.baidu.com/search/%s/@12958750.085,4825785.55,16z?querytype=s&da_src=shareurl&wd=%s",
arg[2], arg[2]))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(LOCATION, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.Select(kit.MDB_FOREACH, arg, 0), func(key string, value map[string]interface{}) {
if len(arg) == 0 {
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT,
LONGITUDE, LATITUDE})
if strings.Contains(m.Option(ice.MSG_USERUA), "MicroMessenger") {
return
}
m.Push("action", m.Cmdx(mdb.RENDER, web.RENDER.Button, "删除"))
loc := m.Cmdx(mdb.RENDER, web.RENDER.A, "百度地图", kit.Format(
"https://map.baidu.com/search/%s/@12958750.085,4825785.55,16z?querytype=s&da_src=shareurl&wd=%s",
url.QueryEscape(kit.Format(value[kit.MDB_TEXT])),
url.QueryEscape(kit.Format(value[kit.MDB_TEXT])),
))
m.Push("location", loc)
return
}
m.Push("detail", value)
})
m.Sort("time", "time_r")
}},
},
}, nil)
}

91
core/chat/paste.go Normal file
View File

@ -0,0 +1,91 @@
package chat
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
"strings"
)
const (
PASTE = "paste"
)
func init() {
Index.Register(&ice.Context{Name: PASTE, Help: "粘贴板",
Configs: map[string]*ice.Config{
PASTE: {Name: "paste", Help: "粘贴板", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load(PASTE)
m.Cmd(mdb.SEARCH, mdb.CREATE, PASTE, m.Prefix(PASTE))
m.Cmd(mdb.RENDER, mdb.CREATE, PASTE, m.Prefix(PASTE))
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save(PASTE)
}},
PASTE: {Name: "paste text auto 添加:button", Help: "粘贴板", Action: map[string]*ice.Action{
mdb.INSERT: {Hand: func(m *ice.Message, arg ...string) {
m.Conf(PASTE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT)
h := m.Rich(PASTE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.Dict(
kit.MDB_TYPE, arg[0], kit.MDB_NAME, arg[1], kit.MDB_TEXT, strings.TrimSpace(arg[2]),
))
m.Log_INSERT(PASTE, arg[2])
m.Echo(h)
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Richs(PASTE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), m.Option(kit.MDB_TEXT), func(key string, value map[string]interface{}) {
if arg[0] == kit.MDB_TEXT {
return
}
m.Log_MODIFY(PASTE, m.Option(kit.MDB_TEXT))
value[arg[0]] = arg[1]
})
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Richs(PASTE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), m.Option(kit.MDB_TEXT), func(key string, value map[string]interface{}) {
m.Log_REMOVE(PASTE, m.Option(kit.MDB_TEXT))
m.Conf(PASTE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), kit.MDB_HASH, key), "")
})
}},
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Richs(PASTE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
if strings.Contains(kit.Format(value[kit.MDB_NAME]), arg[1]) ||
strings.Contains(kit.Format(value[kit.MDB_TEXT]), arg[1]) {
m.Push("pod", m.Option("pod"))
m.Push("ctx", m.Cap(ice.CTX_FOLLOW))
m.Push("cmd", PASTE)
m.Push(kit.MDB_TIME, value["time"])
m.Push(kit.MDB_SIZE, value["size"])
m.Push(kit.MDB_TYPE, PASTE)
m.Push(kit.MDB_NAME, value["name"])
m.Push(kit.MDB_TEXT, value["text"])
}
})
}},
mdb.RENDER: {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
m.Echo(arg[2])
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(PASTE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.Select(kit.MDB_FOREACH, arg, 0), func(key string, value map[string]interface{}) {
if len(arg) == 0 {
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
if strings.Contains(m.Option(ice.MSG_USERUA), "MicroMessenger") {
return
}
m.Push("action", m.Cmdx(mdb.RENDER, web.RENDER.Button, "删除"))
return
}
m.Push("detail", value)
})
m.Sort("time", "time_r")
}},
},
}, nil)
}

93
core/chat/qrcode.go Normal file
View File

@ -0,0 +1,93 @@
package chat
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
"strings"
)
const (
QRCODE = "qrcode"
)
func init() {
Index.Register(&ice.Context{Name: QRCODE, Help: "二维码",
Configs: map[string]*ice.Config{
QRCODE: {Name: "qrcode", Help: "二维码", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load(QRCODE)
m.Cmd(mdb.SEARCH, mdb.CREATE, QRCODE, m.Prefix(QRCODE))
m.Cmd(mdb.RENDER, mdb.CREATE, QRCODE, m.Prefix(QRCODE))
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save(QRCODE)
}},
QRCODE: {Name: "qrcode text auto 添加:button", Help: "二维码", Action: map[string]*ice.Action{
mdb.INSERT: {Hand: func(m *ice.Message, arg ...string) {
m.Conf(QRCODE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT)
h := m.Rich(QRCODE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.Dict(
kit.MDB_TYPE, arg[0], kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2],
))
m.Log_INSERT(QRCODE, arg[2])
m.Echo(h)
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Richs(QRCODE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), m.Option(kit.MDB_TEXT), func(key string, value map[string]interface{}) {
if arg[0] == kit.MDB_TEXT {
return
}
m.Log_MODIFY(PASTE, m.Option(kit.MDB_TEXT))
value[arg[0]] = arg[1]
})
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Richs(QRCODE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), m.Option(kit.MDB_TEXT), func(key string, value map[string]interface{}) {
m.Log_REMOVE(QRCODE, m.Option(kit.MDB_TEXT))
m.Conf(QRCODE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), kit.MDB_HASH, key), "")
})
}},
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Richs(QRCODE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
if strings.Contains(kit.Format(value[kit.MDB_NAME]), arg[1]) ||
strings.Contains(kit.Format(value[kit.MDB_TEXT]), arg[1]) {
m.Push("pod", m.Option("pod"))
m.Push("ctx", m.Cap(ice.CTX_FOLLOW))
m.Push("cmd", QRCODE)
m.Push(kit.MDB_TIME, value["time"])
m.Push(kit.MDB_SIZE, value["size"])
m.Push(kit.MDB_TYPE, QRCODE)
m.Push(kit.MDB_NAME, value["name"])
m.Push(kit.MDB_TEXT, value["text"])
}
})
}},
mdb.RENDER: {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
m.Echo(m.Cmdx("web.wiki.image", "qrcode", arg[2]))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(QRCODE, kit.Keys(kit.MDB_META, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)), kit.Select(kit.MDB_FOREACH, arg, 0), func(key string, value map[string]interface{}) {
if len(arg) == 0 {
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
if strings.Contains(m.Option(ice.MSG_USERUA), "MicroMessenger") {
return
}
m.Push("action", m.Cmdx(mdb.RENDER, web.RENDER.Button, "删除"))
img := m.Cmdx("web.wiki.image", "qrcode", value[kit.MDB_TEXT])
m.Push("qrcode", img)
return
}
m.Push("detail", value)
})
m.Sort("time", "time_r")
}},
},
}, nil)
}

View File

@ -124,14 +124,16 @@ func init() {
_river_user(m, m.Option(ice.MSG_RIVER), arg...) _river_user(m, m.Option(ice.MSG_RIVER), arg...)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(aaa.USER, mdb.MODIFY, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK))
if len(arg) > 0 && arg[0] == "storm" { if len(arg) > 0 && arg[0] == "storm" {
m.Cmdy("/storm", arg[1:]) m.Cmdy("/storm", arg[1:])
return return
} }
if m.Option(ice.MSG_SESSID) == "" { if m.Option("_source") == "" && m.Option(ice.MSG_SESSID) == "" {
m.Render("status", "401") m.Render("status", "401")
return return
} }
_river_list(m) _river_list(m)
}}, }},
}, },

View File

@ -59,6 +59,7 @@ func (f *Frame) Close(m *Message, arg ...string) bool {
return true return true
} }
var wait = make(chan bool, 1)
var Index = &Context{Name: "ice", Help: "冰山模块", var Index = &Context{Name: "ice", Help: "冰山模块",
Caches: map[string]*Cache{ Caches: map[string]*Cache{
CTX_FOLLOW: {Value: ""}, CTX_FOLLOW: {Value: ""},
@ -133,6 +134,7 @@ var Index = &Context{Name: "ice", Help: "冰山模块",
}) })
} }
}) })
wait <- true
}}, }},
}, },
} }
@ -176,6 +178,7 @@ func Run(arg ...string) string {
Pulse.Table(nil) Pulse.Table(nil)
} }
fmt.Printf(Pulse.Result()) fmt.Printf(Pulse.Result())
<-wait
os.Exit(frame.code) os.Exit(frame.code)
return "" return ""
} }

View File

@ -7,6 +7,10 @@ refer "" `
` `
chapter "应用" chapter "应用"
field "user" user
field "qrcode" web.chat.qrcode.qrcode
field "qrcode" web.chat.qrcode.qrcode args `[ insert qrcode hi hello ]`
section "二维码" section "二维码"
field "qrcode 源码" web.code.inner args `[ usr/icebergs core/code/qrcode.go 1 ]` field "qrcode 源码" web.code.inner args `[ usr/icebergs core/code/qrcode.go 1 ]`