diff --git a/base/mdb/list.go b/base/mdb/list.go index 15802b60..101267d9 100644 --- a/base/mdb/list.go +++ b/base/mdb/list.go @@ -169,7 +169,11 @@ func ListAction(fields ...string) map[string]*ice.Action { }, fields...) } func ListSelect(m *ice.Message, arg ...string) *ice.Message { - m.Fields(len(arg), m.Config(kit.MDB_FIELD)) + m.OptionPage(kit.Slice(arg, 1)...) + m.Fields(len(kit.Slice(arg, 0, 1)), m.Config(kit.MDB_FIELD)) m.Cmdy(SELECT, m.PrefixKey(), "", LIST, kit.MDB_ID, arg) + if !m.FieldsIsDetail() { + m.StatusTimeCountTotal(m.Config(kit.MDB_COUNT)) + } return m } diff --git a/base/mdb/zone.go b/base/mdb/zone.go index 572aba06..52d3cfd2 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -186,8 +186,8 @@ func ZoneAction(fields ...string) map[string]*ice.Action { } func ZoneSelect(m *ice.Message, arg ...string) *ice.Message { m.Fields(len(arg), kit.Fields(kit.MDB_TIME, m.Config(kit.MDB_SHORT), kit.MDB_COUNT), m.Config(kit.MDB_FIELD)) - m.Debug(m.Config(kit.MDB_FIELD)) - m.Cmdy(SELECT, m.PrefixKey(), "", ZONE, arg) - m.Sort(m.Config(kit.MDB_SHORT)) + if m.Cmdy(SELECT, m.PrefixKey(), "", ZONE, arg); kit.Select("", arg, 0) == "" { + m.Sort(m.Config(kit.MDB_SHORT)) + } return m } diff --git a/misc.go b/misc.go index cc1bb7a7..4d4cf20a 100644 --- a/misc.go +++ b/misc.go @@ -175,9 +175,9 @@ func (m *Message) cmd(arg ...interface{}) *Message { } // 查找命令 - if cmd, ok := m.target.Commands[list[0]]; ok { + if cmd, ok := m.target.Commands[strings.TrimPrefix(list[0], m.target.Cap(CTX_FOLLOW)+PT)]; ok { run(m.Spawn(), m.target, cmd, list[0], list[1:]...) - } else if cmd, ok := m.source.Commands[list[0]]; ok { + } else if cmd, ok := m.source.Commands[strings.TrimPrefix(list[0], m.source.Cap(CTX_FOLLOW)+PT)]; ok { run(m.Spawn(m.source), m.source, cmd, list[0], list[1:]...) } else { m.Search(list[0], func(p *Context, s *Context, key string, cmd *Command) { diff --git a/misc/chrome/chrome.go b/misc/chrome/chrome.go index 536e665b..b79c7b6a 100644 --- a/misc/chrome/chrome.go +++ b/misc/chrome/chrome.go @@ -3,6 +3,7 @@ package chrome import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" + "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" kit "shylinux.com/x/toolkits" @@ -10,25 +11,23 @@ import ( const CHROME = "chrome" -var Index = &ice.Context{Name: CHROME, Help: "浏览器", - Configs: map[string]*ice.Config{ - CHROME: {Name: CHROME, Help: "浏览器", Value: kit.Data()}, - }, - Commands: map[string]*ice.Command{ - ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }}, - ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, - - CHROME: {Name: "chrome wid tid url auto start build download", Help: "浏览器", Action: map[string]*ice.Action{ - web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - }}, - cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - }}, - cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(web.SPACE, CHROME, CHROME, arg) +var Index = &ice.Context{Name: CHROME, Help: "浏览器", Configs: map[string]*ice.Config{ + CHROME: {Name: CHROME, Help: "浏览器", Value: kit.Data()}, +}, Commands: map[string]*ice.Command{ + CHROME: {Name: "chrome wid tid url auto start build download", Help: "浏览器", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(CHROME).Table(func(index int, value map[string]string, head []string) { + m.Cmd(CHROME, value["wid"]).Table(func(index int, value map[string]string, head []string) { + m.Push(kit.MDB_ZONE, kit.ParseURL(value["url"]).Host) + }) + }) }}, - }, -} + cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, cli.ORDER, m.Config(cli.SOURCE), "_install/bin") + }}, + }, code.InstallAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(web.SPACE, CHROME, CHROME, arg) + }}, +}} func init() { code.Index.Register(Index, &web.Frame{}) } diff --git a/misc/chrome/chrome.shy b/misc/chrome/chrome.shy index ed6ba865..e8ed2ebc 100644 --- a/misc/chrome/chrome.shy +++ b/misc/chrome/chrome.shy @@ -1,17 +1,19 @@ title "HTML5" -refer "官网" ` +refer ` 官网 https://www.w3.org/ 文档 https://developer.mozilla.org/ +官网 https://www.google.com/chrome/ 源码 https://github.com/chromium/chromium/ +扩展 https://chrome.google.com/webstore/category/extensions ` chapter "安装" -field chrome web.code.chrome.chrome +field "浏览器" web.code.chrome.chrome chapter "应用" field "同步流" web.code.chrome.sync field "收藏夹" web.code.chrome.favor -field "工具箱" web.code.chrome.field field "样式表" web.code.chrome.style +field "工具箱" web.code.chrome.field field "蜘蛛侠" web.code.chrome.spide field "缓存池" web.code.chrome.cache field "相册簿" web.wiki.feel diff --git a/misc/chrome/favor.go b/misc/chrome/favor.go index 829d5bfd..aab89420 100644 --- a/misc/chrome/favor.go +++ b/misc/chrome/favor.go @@ -10,52 +10,20 @@ import ( const FAVOR = "favor" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( - kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text", - )}, - }, - Commands: map[string]*ice.Command{ - FAVOR: {Name: "favor zone id auto export import", Help: "收藏夹", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg) - }}, - mdb.INSERT: {Name: "insert zone=数据结构 type name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE)) - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.LIST, arg) - }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.ZONE, m.OptionSimple(kit.MDB_ZONE)) - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD)) - m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.ZONE) - m.Conf(FAVOR, kit.MDB_HASH, "") - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.ZONE) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - switch arg[0] { - case kit.MDB_ZONE: - m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg) - default: - m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.LIST, arg) - } - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD)) - if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 { - m.Action(mdb.CREATE) - m.PushAction(mdb.REMOVE) - } else { - m.PushAction(code.INNER) - } - }}, - }, - }) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( + kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text", + )}, + }, Commands: map[string]*ice.Command{ + FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.INSERT: {Name: "insert zone=官网文档 type name=hi text=hello", Help: "添加"}, + }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if mdb.ZoneSelect(m, arg...); len(arg) == 0 { + m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) + m.PushAction(mdb.REMOVE) + } else { + m.PushAction(code.INNER) + } + }}, + }}) } diff --git a/misc/chrome/field.go b/misc/chrome/field.go index a76ca186..0030bc08 100644 --- a/misc/chrome/field.go +++ b/misc/chrome/field.go @@ -2,7 +2,9 @@ package chrome import ( ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) @@ -12,18 +14,35 @@ const FIELD = "field" func init() { Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ FIELD: {Name: "field", Help: "工具", Value: kit.Data( - kit.MDB_SHORT, "zone", kit.MDB_FIELD, "time,id,index,args,style,left,top,selection", + kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,index,args,style,left,top,right,bottom,selection", )}, }, Commands: map[string]*ice.Command{ FIELD: {Name: "field zone id auto insert", Help: "工具", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case kit.MDB_ZONE: + m.Cmdy(CHROME, mdb.INPUTS) + case kit.MDB_INDEX: + m.Cmdy(ctx.COMMAND) + } + }}, mdb.INSERT: {Name: "insert zone=golang.google.cn index=cli.system args=pwd", Help: "添加"}, - SYNC: {Name: "sync hostname", Help: "同步", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(FIELD, m.Option("hostname")).Table(func(index int, value map[string]string, head []string) { - m.Option(ice.MSG_OPTS, head) - for k, v := range value { - m.Option(k, v) + ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(FIELD, m.Option(tcp.HOST), arg).Table(func(index int, value map[string]string, head []string) { + if len(arg) == 0 { // 命令列表 + m.Option(ice.MSG_OPTS, head) + for k, v := range value { + m.Option(k, v) + } + m.Cmdy(web.SPACE, CHROME, CHROME, "1", m.Option("tid"), FIELD, value[kit.MDB_ID], value[kit.MDB_ARGS]) + } else { // 命令详情 + m.Cmdy(ctx.COMMAND, value[kit.MDB_INDEX]) } - m.Cmd(web.SPACE, CHROME, CHROME, "1", m.Option("tid"), FIELD, value["index"], value["args"], value["top"]) + }) + }}, + ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(FIELD, m.Option(tcp.HOST), arg[0]).Table(func(index int, value map[string]string, head []string) { + m.Cmdy(value[kit.MDB_INDEX], arg[1:]) }) }}, }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/misc/chrome/page.go b/misc/chrome/page.go index d21a9098..44421247 100644 --- a/misc/chrome/page.go +++ b/misc/chrome/page.go @@ -14,21 +14,12 @@ func init() { }, Commands: map[string]*ice.Command{ "/page": {Name: "/page", Help: "网页", Action: map[string]*ice.Action{ ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - if len(arg) == 0 { - m.Cmdy(STYLE, SYNC, m.OptionSimple("hostname"), ice.OptionFields("")) - m.Cmdy(FIELD, SYNC, m.OptionSimple("hostname"), ice.OptionFields("")) - return - } - m.Cmdy(ctx.COMMAND, arg) - }}, - FIELD: {Name: "field", Help: "执行", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(FIELD, arg) + m.Cmdy(STYLE, ctx.ACTION, ctx.COMMAND, arg) + m.Cmdy(FIELD, ctx.ACTION, ctx.COMMAND, arg) }}, ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(arg) + m.Cmdy(FIELD, ice.RUN, arg) }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - }}, }}) } diff --git a/misc/chrome/spide.go b/misc/chrome/spide.go index c7d0574c..b6b09118 100644 --- a/misc/chrome/spide.go +++ b/misc/chrome/spide.go @@ -10,39 +10,37 @@ import ( const SPIDE = "spide" func init() { - Index.Merge(&ice.Context{ - Commands: map[string]*ice.Command{ - SPIDE: {Name: "spide wid tid cmd auto", Help: "网页爬虫", Action: map[string]*ice.Action{ - web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(CACHE, mdb.CREATE, arg) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - switch msg := m.Cmd(web.SPACE, CHROME, CHROME, arg); kit.Select(SPIDE, arg, 2) { - case SPIDE: - if len(arg) > 1 { - msg.Table(func(index int, value map[string]string, head []string) { - m.Push(kit.MDB_TIME, value[kit.MDB_TIME]) - m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE]) - m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) - - switch m.PushButton(web.DOWNLOAD); value[kit.MDB_TYPE] { - case "img": - m.PushImages(kit.MDB_TEXT, value[kit.MDB_LINK]) - case "video": - m.PushVideos(kit.MDB_TEXT, value[kit.MDB_LINK]) - default: - m.Push(kit.MDB_TEXT, "") - } - m.Push(kit.MDB_LINK, value[kit.MDB_LINK]) - }) - m.StatusTimeCount() - break - } - fallthrough - default: - m.Copy(msg) - } + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + SPIDE: {Name: "spide wid tid cmd auto", Help: "网页爬虫", Action: map[string]*ice.Action{ + web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(CACHE, mdb.CREATE, arg) }}, - }, - }) + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + switch msg := m.Cmd(web.SPACE, CHROME, CHROME, arg); kit.Select(SPIDE, arg, 2) { + case SPIDE: + if len(arg) > 1 { + msg.Table(func(index int, value map[string]string, head []string) { + m.Push(kit.MDB_TIME, value[kit.MDB_TIME]) + m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE]) + m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) + + switch m.PushButton(web.DOWNLOAD); value[kit.MDB_TYPE] { + case "img": + m.PushImages(kit.MDB_TEXT, value[kit.MDB_LINK]) + case "video": + m.PushVideos(kit.MDB_TEXT, value[kit.MDB_LINK]) + default: + m.Push(kit.MDB_TEXT, "") + } + m.Push(kit.MDB_LINK, value[kit.MDB_LINK]) + }) + m.StatusTimeCount() + break + } + fallthrough + default: + m.Copy(msg) + } + }}, + }}) } diff --git a/misc/chrome/style.go b/misc/chrome/style.go index b00e281b..7b714624 100644 --- a/misc/chrome/style.go +++ b/misc/chrome/style.go @@ -2,7 +2,9 @@ package chrome import ( ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) @@ -12,15 +14,20 @@ const STYLE = "style" func init() { Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ STYLE: {Name: "style", Help: "样式", Value: kit.Data( - kit.MDB_SHORT, "zone", kit.MDB_FIELD, "time,id,target,style", + kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,target,style", )}, }, Commands: map[string]*ice.Command{ STYLE: {Name: "style zone id auto insert", Help: "样式", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case kit.MDB_ZONE: + m.Cmdy(CHROME, mdb.INPUTS) + } + }}, mdb.INSERT: {Name: "insert zone=golang.google.cn target=. style:textarea", Help: "添加"}, - SYNC: {Name: "sync hostname", Help: "同步", Hand: func(m *ice.Message, arg ...string) { - m.Fields(0, m.Conf(STYLE, kit.META_FIELD)) - m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.ZONE, m.Option("hostname")).Table(func(index int, value map[string]string, head []string) { - m.Cmd(web.SPACE, CHROME, CHROME, "1", m.Option("tid"), STYLE, value["target"], value["style"]) + ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(STYLE, m.Option(tcp.HOST)).Table(func(index int, value map[string]string, head []string) { + m.Cmdy(web.SPACE, CHROME, CHROME, "1", m.Option("tid"), STYLE, value["target"], value["style"]) }) }}, }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/misc/chrome/sync.go b/misc/chrome/sync.go index 89863ab5..72be2299 100644 --- a/misc/chrome/sync.go +++ b/misc/chrome/sync.go @@ -6,10 +6,6 @@ import ( kit "shylinux.com/x/toolkits" ) -const _sync_index = 1 - -func _sync_count(m *ice.Message) string { return m.Conf(SYNC, kit.Keym(kit.MDB_COUNT)) } - const SYNC = "sync" func init() { @@ -20,20 +16,11 @@ func init() { m.Cmdy(SYNC, mdb.INSERT, arg) }}, SYNC: {Name: "sync id auto page export import", Help: "同步流", Action: ice.MergeAction(map[string]*ice.Action{ - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - switch arg[0] { - case kit.MDB_ZONE: - m.Cmdy(FAVOR, ice.OptionFields("zone,count,time")) - } - }}, - FAVOR: {Name: "favor zone=some name", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(FAVOR, mdb.INSERT, m.OptionSimple("zone,type,name,text")) + FAVOR: {Name: "favor zone=hi name", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(FAVOR, mdb.INSERT) }}, }, mdb.ListAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.OptionPage(kit.Slice(arg, _sync_index)...) - m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD)) - m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.LIST, kit.MDB_ID, arg) - m.StatusTimeCountTotal(_sync_count(m)) + mdb.ListSelect(m, arg...) m.PushAction(FAVOR) }}, }}) diff --git a/type.go b/type.go index 04ff2d1b..ea26251c 100644 --- a/type.go +++ b/type.go @@ -470,7 +470,7 @@ func (m *Message) Confi(key string, sub string) int { return kit.Int(m.Conf(key, sub)) } func (m *Message) Confv(arg ...interface{}) (val interface{}) { - m.Search(kit.Format(arg[0]), func(p *Context, s *Context, key string, conf *Config) { + run := func(conf *Config) { if len(arg) == 1 { val = conf.Value return // 读配置 @@ -484,7 +484,16 @@ func (m *Message) Confv(arg ...interface{}) (val interface{}) { } } val = kit.Value(conf.Value, arg[1]) // 读配置项 - }) + } + + key := kit.Format(arg[0]) + if conf, ok := m.target.Configs[strings.TrimPrefix(key, m.target.Cap(CTX_FOLLOW)+PT)]; ok { + run(conf) + } else if conf, ok := m.source.Configs[strings.TrimPrefix(key, m.source.Cap(CTX_FOLLOW)+PT)]; ok { + run(conf) + } else { + m.Search(key, func(p *Context, s *Context, key string, conf *Config) { run(conf) }) + } return } func (m *Message) Confm(key string, chain interface{}, cbs ...interface{}) map[string]interface{} {