forked from x/icebergs
opt favor
This commit is contained in:
parent
e63626b873
commit
592dff8a9e
@ -71,8 +71,8 @@ func init() {
|
||||
_qrcode_cli(m, kit.Select(kit.Select(ice.Info.Make.Domain, ice.Info.Domain), arg, 0))
|
||||
} else {
|
||||
m.OptionDefault(SIZE, kit.Select("320", "368", m.IsWeixinUA()))
|
||||
m.Option(FG, kit.Select(m.Option("--plugin-fg-color"), arg, 1))
|
||||
m.Option(BG, kit.Select(m.Option("--plugin-bg-color"), arg, 2))
|
||||
m.Option(FG, kit.Select(m.Option(ice.MSG_FG), arg, 1))
|
||||
m.Option(BG, kit.Select(m.Option(ice.MSG_BG), arg, 2))
|
||||
switch m.Option(ice.MSG_THEME) {
|
||||
case LIGHT, WHITE:
|
||||
m.OptionDefault(FG, BLACK, BG, WHITE)
|
||||
|
1
base/web/agent.go
Normal file
1
base/web/agent.go
Normal file
@ -0,0 +1 @@
|
||||
package web
|
@ -103,6 +103,7 @@ const (
|
||||
WRITE = "write"
|
||||
UPLOAD = "upload"
|
||||
DOWNLOAD = "download"
|
||||
PREVIEW = "preview"
|
||||
|
||||
IMAGE = "image"
|
||||
VIDEO = "video"
|
||||
|
@ -35,7 +35,11 @@ func _dream_list(m *ice.Message) *ice.Message {
|
||||
} else {
|
||||
m.Push(nfs.VERSION, "")
|
||||
m.Push(mdb.TYPE, WORKER)
|
||||
m.Push(cli.STATUS, cli.STOP)
|
||||
if nfs.Exists(m, path.Join(ice.USR_LOCAL_WORK, value[mdb.NAME])) {
|
||||
m.Push(cli.STATUS, cli.STOP)
|
||||
} else {
|
||||
m.Push(cli.STATUS, cli.BEGIN)
|
||||
}
|
||||
m.Push(mdb.TEXT, "")
|
||||
if nfs.Exists(m, path.Join(ice.USR_LOCAL_WORK, value[mdb.NAME])) {
|
||||
m.PushButton(cli.START, nfs.TRASH)
|
||||
@ -46,8 +50,7 @@ func _dream_list(m *ice.Message) *ice.Message {
|
||||
}
|
||||
}
|
||||
})
|
||||
return m.Sort("status,type,name", ice.STR, ice.STR, ice.STR_R).StatusTimeCount()
|
||||
|
||||
return m.Sort("status,type,name", []string{cli.START, cli.STOP, cli.BEGIN}, ice.STR, ice.STR_R).StatusTimeCount()
|
||||
}
|
||||
func _dream_start(m *ice.Message, name string) {
|
||||
if m.Warn(name == "", ice.ErrNotValid, mdb.NAME) {
|
||||
@ -179,7 +182,7 @@ func init() {
|
||||
gdb.Event(m, DREAM_INPUTS, arg)
|
||||
}
|
||||
}},
|
||||
mdb.CREATE: {Name: "create name*=hi icon@icon repos binary template", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.CREATE: {Name: "create name*=hi icon@icons repos binary template", Hand: func(m *ice.Message, arg ...string) {
|
||||
kit.If(!strings.Contains(m.Option(mdb.NAME), "-") || !strings.HasPrefix(m.Option(mdb.NAME), "20"), func() { m.Option(mdb.NAME, m.Time("20060102-")+m.Option(mdb.NAME)) })
|
||||
m.OptionDefault(mdb.ICON, nfs.USR_ICONS_ICEBERGS)
|
||||
kit.If(mdb.Config(m, nfs.REPOS), func(p string) { m.OptionDefault(nfs.REPOS, p+m.Option(mdb.NAME)) })
|
||||
|
@ -51,3 +51,13 @@ func IsVideo(name, mime string) bool {
|
||||
func IsAudio(name, mime string) bool {
|
||||
return strings.HasPrefix(mime, "audio/")
|
||||
}
|
||||
|
||||
const (
|
||||
GetLocation = "getLocation"
|
||||
ConnectWifi = "ConnectWifi"
|
||||
GetClipboardData = "getClipboardData"
|
||||
ScanQRCode = "scanQRCode"
|
||||
ChooseImage = "chooseImage"
|
||||
Record1 = "record1"
|
||||
Record2 = "record2"
|
||||
)
|
||||
|
3
conf.go
3
conf.go
@ -199,6 +199,7 @@ const ( // MSG
|
||||
MSG_ACTION = "_action"
|
||||
MSG_STATUS = "_status"
|
||||
|
||||
MSG_SPACE = "_space"
|
||||
MSG_INDEX = "_index"
|
||||
MSG_SCRIPT = "_script"
|
||||
MSG_OUTPUT = "_output"
|
||||
@ -221,6 +222,8 @@ const ( // MSG
|
||||
MSG_USERZONE = "user.zone"
|
||||
MSG_LANGUAGE = "user.lang"
|
||||
|
||||
MSG_BG = "sess.bg"
|
||||
MSG_FG = "sess.fg"
|
||||
MSG_MODE = "sess.mode"
|
||||
MSG_THEME = "sess.theme"
|
||||
MSG_TITLE = "sess.title"
|
||||
|
@ -74,7 +74,13 @@ func init() {
|
||||
} else if m.Warn(!_river_right(m, arg[0]), ice.ErrNotRight, arg) {
|
||||
return
|
||||
}
|
||||
if len(arg) == 2 {
|
||||
if web.PodCmd(m, web.SPACE, arg...) {
|
||||
m.Table(func(value ice.Maps) {
|
||||
m.StatusTimeCount()
|
||||
m.Push(web.SPACE, m.Option(ice.MSG_USERPOD))
|
||||
})
|
||||
return
|
||||
} else if len(arg) == 2 {
|
||||
ctx.OptionFromConfig(m, MENUS)
|
||||
_action_list(m, arg[0], arg[1])
|
||||
} else {
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
"shylinux.com/x/icebergs/base/web/html"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
@ -53,34 +54,28 @@ func init() {
|
||||
}
|
||||
gdb.Event(m, "", arg)
|
||||
}},
|
||||
"getClipboardData": {Name: "favor create", Help: "粘贴"},
|
||||
"getLocation": {Name: "favor create", Help: "定位"},
|
||||
"scanQRCode": {Name: "favor create", Help: "扫码"},
|
||||
"record1": {Name: "favor upload", Help: "截图"},
|
||||
"record2": {Name: "favor upload", Help: "录屏"},
|
||||
mdb.CREATE: {Name: "create type name text*", Hand: func(m *ice.Message, arg ...string) {
|
||||
html.GetLocation: {Name: "favor create", Help: "定位"},
|
||||
html.GetClipboardData: {Name: "favor create", Help: "粘贴"},
|
||||
html.ScanQRCode: {Name: "favor create", Help: "扫码"},
|
||||
html.Record1: {Name: "favor upload", Help: "截图"},
|
||||
html.Record2: {Name: "favor upload", Help: "录屏"},
|
||||
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if strings.HasPrefix(m.Option(mdb.TEXT), ice.HTTP) {
|
||||
m.OptionDefault(mdb.TYPE, mdb.LINK, mdb.NAME, kit.ParseURL(m.Option(mdb.TEXT)).Host)
|
||||
}
|
||||
mdb.HashCreate(m, m.OptionSimple())
|
||||
}},
|
||||
mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
kit.If(!web.PodCmd(m, web.SPACE, kit.Simple(ctx.ACTION, m.ActionKey(), arg)...), func() { mdb.HashRemove(m, arg) })
|
||||
}},
|
||||
web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd("", mdb.CREATE, m.OptionSimple(mdb.TYPE, mdb.NAME, mdb.TEXT))
|
||||
}},
|
||||
web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.ProcessOpen(web.MergeURL2(m, web.SHARE_LOCAL+m.Option(mdb.TEXT), nfs.FILENAME, m.Option(mdb.NAME)))
|
||||
}},
|
||||
ctx.INDEX: {Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
if kit.HasPrefixList(arg, ctx.RUN) {
|
||||
msg := mdb.HashSelects(m.Spawn(), arg[1])
|
||||
ctx.ProcessField(m, msg.Append(mdb.NAME), kit.Split(msg.Append(mdb.TEXT)), kit.Simple(ctx.RUN, arg[2:])...)
|
||||
} else {
|
||||
msg := mdb.HashSelects(m.Spawn(), m.Option(mdb.HASH))
|
||||
ctx.ProcessField(m, msg.Append(mdb.NAME), kit.Split(msg.Append(mdb.TEXT)), arg...)
|
||||
m.Option(ice.FIELD_PREFIX, ctx.ACTION, m.ActionKey(), ctx.RUN, m.Option(mdb.HASH))
|
||||
}
|
||||
}},
|
||||
cli.OPENS: {Hand: func(m *ice.Message, arg ...string) { cli.Opens(m, m.Option(mdb.TEXT)) }},
|
||||
web.PREVIEW: {Hand: FavorPreview},
|
||||
cli.OPENS: {Hand: func(m *ice.Message, arg ...string) { cli.Opens(m, m.Option(mdb.TEXT)) }},
|
||||
}, FavorAction(), mdb.ExportHashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == ctx.ACTION {
|
||||
if m.Option(ice.MSG_INDEX) == m.PrefixKey() {
|
||||
@ -90,24 +85,16 @@ func init() {
|
||||
m.Cmdy(m.Option(ice.MSG_INDEX), arg[3:])
|
||||
}
|
||||
return
|
||||
}
|
||||
if mdb.HashSelect(m, arg...); len(arg) == 0 {
|
||||
} else if mdb.HashSelect(m, arg...); len(arg) == 0 {
|
||||
defer web.PushPodCmd(m, "", arg...)
|
||||
if m.IsMobileUA() {
|
||||
m.Action(mdb.CREATE, web.UPLOAD, "getClipboardData", "getLocation", "scanQRCode")
|
||||
if m.SortStrR(mdb.TIME); m.IsMobileUA() {
|
||||
m.Action(mdb.CREATE, web.UPLOAD, html.GetClipboardData, html.GetLocation, html.ScanQRCode)
|
||||
} else {
|
||||
m.Action(mdb.CREATE, web.UPLOAD, "getClipboardData", "record1", "record2")
|
||||
m.Action(mdb.CREATE, web.UPLOAD, html.GetClipboardData, html.Record1, html.Record2)
|
||||
}
|
||||
m.SortStrR(mdb.TIME)
|
||||
} else {
|
||||
if web.PodCmd(m, web.SPACE, arg...) {
|
||||
return
|
||||
} else if m.Length() == 0 {
|
||||
return
|
||||
}
|
||||
text := m.Append(mdb.TEXT)
|
||||
m.PushQRCode(cli.QRCODE, text)
|
||||
m.PushScript(text)
|
||||
m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
|
||||
m.PushScript(m.Append(mdb.TEXT))
|
||||
}
|
||||
m.Table(func(value ice.Maps) {
|
||||
delete(value, ctx.ACTION)
|
||||
@ -116,12 +103,10 @@ func init() {
|
||||
return
|
||||
}
|
||||
switch value[mdb.TYPE] {
|
||||
case ctx.INDEX:
|
||||
m.PushButton(ctx.INDEX, mdb.REMOVE)
|
||||
case cli.OPENS:
|
||||
m.PushButton(cli.OPENS, mdb.REMOVE)
|
||||
default:
|
||||
m.PushButton(mdb.REMOVE)
|
||||
m.PushButton(web.PREVIEW, mdb.REMOVE)
|
||||
}
|
||||
})
|
||||
}},
|
||||
@ -129,3 +114,29 @@ func init() {
|
||||
}
|
||||
|
||||
func FavorAction() ice.Actions { return gdb.EventsAction(FAVOR_INPUTS, FAVOR_TABLES, FAVOR_ACTION) }
|
||||
func FavorPreview(m *ice.Message, arg ...string) {
|
||||
if kit.HasPrefixList(arg, ctx.RUN) {
|
||||
if pod := arg[1]; pod != "" {
|
||||
arg[1] = ""
|
||||
m.Options(ice.MSG_USERPOD, pod).Cmdy(web.SPACE, pod, m.CommandKey(), ctx.ACTION, m.ActionKey(), arg)
|
||||
} else {
|
||||
index, args := favorPreview(m, arg[2], arg...)
|
||||
ctx.ProcessField(m, index, args, kit.Simple(ctx.RUN, arg[3:])...)
|
||||
}
|
||||
} else if !web.PodCmd(m, web.SPACE, kit.Simple(ctx.ACTION, m.ActionKey(), arg)...) {
|
||||
index, args := favorPreview(m, m.Option(mdb.HASH), arg...)
|
||||
ctx.ProcessField(m, index, args, arg...).Push(ice.MSG_SPACE, m.Option(ice.MSG_USERPOD))
|
||||
m.Option(ice.FIELD_PREFIX, ctx.ACTION, m.ActionKey(), ctx.RUN, m.Option(ice.MSG_USERPOD), m.Option(mdb.HASH))
|
||||
}
|
||||
}
|
||||
func favorPreview(m *ice.Message, h string, arg ...string) (string, []string) {
|
||||
msg := mdb.HashSelects(m.Spawn(), h)
|
||||
index, args := msg.Append(mdb.TYPE), kit.Split(msg.Append(mdb.TEXT))
|
||||
switch msg.Append(mdb.TYPE) {
|
||||
case ctx.INDEX:
|
||||
index = msg.Append(mdb.NAME)
|
||||
case nfs.SHY:
|
||||
index = web.WIKI_WORD
|
||||
}
|
||||
return index, args
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
}))
|
||||
},
|
||||
_style: function(can, style) {
|
||||
style = {"light": "normal", "dark": "grey"}[style]||style
|
||||
style = {"light": "normal", "dark": "grey", "black": "blue", "white": "macaron", "silver": "grey", "blue": "graffiti", "red": "graffiti"}[style]||style
|
||||
can.ui.map.setMapStyle("amap://styles/"+can.Action("style", style))
|
||||
return style
|
||||
},
|
||||
|
@ -26,7 +26,9 @@ fieldset.macos.desktop>div.output>div.desktop>fieldset>div.item.button { border-
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>legend { padding:0 10px; margin:10px; box-shadow:none; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>legend:not(:hover) { background-color:transparent; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>*:not(.textarea) { margin:10px 0px 10px 10px; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.icon { margin:12px 0 8px; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.icon { margin:10px 0; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.icon.refresh { margin:8px 0 12px; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.icon.goback { margin:8px 0 12px; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset:not(:hover)>form.option>div.icon { visibility:hidden; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.button:not(.select)>span.icon { font-size:32px; line-height:30px; }
|
||||
fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.button.prunes>span.icon { font-size:20px; line-height:32px; }
|
||||
|
@ -4,7 +4,6 @@ import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
@ -19,11 +18,6 @@ func init() {
|
||||
}, ctx.ConfAction(ctx.TOOLS, Prefix(GOODS)), GOODS), Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(GOODS, arg).PushAction(mdb.MODIFY, mdb.REMOVE)
|
||||
m.Action(mdb.CREATE)
|
||||
kit.If(len(arg) > 0, func() {
|
||||
kit.For(kit.Split(m.Append(nfs.IMAGE)), func(p string) {
|
||||
m.EchoImages(web.MergeURL2(m, web.SHARE_CACHE+p, ice.POD, m.Append(web.SPACE)))
|
||||
})
|
||||
})
|
||||
ctx.DisplayTable(m)
|
||||
_status_amount(m)
|
||||
}},
|
||||
|
@ -2,6 +2,7 @@ package wiki
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
@ -24,7 +25,7 @@ const WORD = "word"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
WORD: {Name: "word path=src/main.shy@key auto play", Help: "上下文", Icon: "Books.png", Actions: ice.MergeActions(ice.Actions{
|
||||
WORD: {Name: "word path=src/main.shy@key auto favor play", Help: "上下文", Icon: "Books.png", Actions: ice.MergeActions(ice.Actions{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
WordAlias(m, NAVMENU, TITLE, NAVMENU)
|
||||
WordAlias(m, PREMENU, TITLE, PREMENU)
|
||||
@ -36,6 +37,14 @@ func init() {
|
||||
WordAlias(m, CHAIN, CHART, CHAIN)
|
||||
WordAlias(m, SEQUENCE, CHART, SEQUENCE)
|
||||
}},
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
mdb.HashSelects(m.Spawn()).SortStrR(mdb.TIME).TablesLimit(5, func(value ice.Maps) {
|
||||
// m.PushSearch(mdb.TYPE, nfs.SHY, mdb.NAME, path.Base(value[nfs.PATH]), mdb.TEXT, value[nfs.PATH])
|
||||
m.PushSearch(mdb.TYPE, nfs.SHY, mdb.NAME, value[mdb.TIME], mdb.TEXT, value[nfs.PATH])
|
||||
})
|
||||
}
|
||||
}},
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.OptionFields("path,size,time")
|
||||
@ -59,6 +68,10 @@ func init() {
|
||||
code.COMPLETE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
kit.If(kit.IsIn(kit.Split(m.Option(mdb.TEXT))[0], IMAGE, VIDEO, AUDIO), func() { m.Cmdy(FEEL).CutTo(nfs.PATH, mdb.NAME) })
|
||||
}},
|
||||
"favor": {Help: "收藏", Icon: "bi bi-star", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(web.CHAT_FAVOR, mdb.CREATE, mdb.TYPE, nfs.SHY, mdb.NAME, path.Base(arg[0]), mdb.TEXT, arg[0])
|
||||
m.ProcessHold("favor success")
|
||||
}},
|
||||
}, aaa.RoleAction(), WikiAction("", nfs.SHY), mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path")), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
mdb.HashCreate(m.Spawn(), nfs.PATH, arg[0])
|
||||
|
28
meta.go
28
meta.go
@ -261,13 +261,28 @@ const (
|
||||
INT = "int"
|
||||
)
|
||||
|
||||
func (m *Message) Sort(key string, arg ...string) *Message {
|
||||
func (m *Message) Sort(key string, arg ...Any) *Message {
|
||||
if m.FieldsIsDetail() {
|
||||
return m
|
||||
}
|
||||
order := map[string]map[string]int{}
|
||||
keys, cmps := kit.Split(kit.Select("type,name,text", key)), kit.Simple()
|
||||
for i, k := range keys {
|
||||
cmp := kit.Select("", arg, i)
|
||||
cmp := ""
|
||||
if i < len(arg) {
|
||||
switch v := arg[i].(type) {
|
||||
case string:
|
||||
cmp = v
|
||||
case map[string]int:
|
||||
order[k] = v
|
||||
case []string:
|
||||
list := map[string]int{}
|
||||
for i, v := range v {
|
||||
list[v] = i + 1
|
||||
}
|
||||
order[k] = list
|
||||
}
|
||||
}
|
||||
if cmp == "" {
|
||||
cmp = INT
|
||||
for _, v := range m.value(k) {
|
||||
@ -283,6 +298,15 @@ func (m *Message) Sort(key string, arg ...string) *Message {
|
||||
gt := func(i, j int) bool {
|
||||
for s, k := range keys {
|
||||
if a, b := list[i][k], list[j][k]; a != b {
|
||||
if v, ok := order[k]; ok {
|
||||
if v[a] > v[b] {
|
||||
return true
|
||||
} else if v[a] < v[b] {
|
||||
return false
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
}
|
||||
switch cmp := cmps[s]; cmp {
|
||||
case STR, STR_R:
|
||||
if a > b {
|
||||
|
@ -79,9 +79,10 @@ func (m *Message) Status(arg ...Any) *Message {
|
||||
return m.Options(MSG_STATUS, kit.Format(list))
|
||||
}
|
||||
func (m *Message) StatusTime(arg ...Any) *Message {
|
||||
traceid := []string{}
|
||||
kit.If(m.Option(MSG_DEBUG) == TRUE, func() { traceid = m.OptionSimple(LOG_TRACEID) })
|
||||
return m.Status(TIME, m.Time(), arg, kit.MDB_COST, m.FormatCost(), traceid)
|
||||
args := []string{}
|
||||
kit.If(m.Option(MSG_USERPOD), func(p string) { args = append(args, SPACE, p) })
|
||||
kit.If(m.Option(MSG_DEBUG) == TRUE, func() { args = append(args, m.OptionSimple(LOG_TRACEID)...) })
|
||||
return m.Status(TIME, m.Time(), arg, kit.MDB_COST, m.FormatCost(), args)
|
||||
}
|
||||
func (m *Message) StatusTimeCount(arg ...Any) *Message {
|
||||
return m.StatusTime(append([]Any{kit.MDB_COUNT, kit.Split(m.FormatSize())[0]}, arg...))
|
||||
|
Loading…
x
Reference in New Issue
Block a user