diff --git a/base/ctx/config.go b/base/ctx/config.go index 685d0aaa..b8fc7c36 100644 --- a/base/ctx/config.go +++ b/base/ctx/config.go @@ -160,3 +160,9 @@ func ConfigFromOption(m *ice.Message, arg ...string) { m.Config(k, kit.Select(m.Config(k), m.Option(k))) } } +func ConfigAuto(m *ice.Message, arg ...string) { + if cs := m.Target().Configs; cs[m.CommandKey()] == nil { + cs[m.CommandKey()] = &ice.Config{Value: kit.Data()} + ice.Info.Load(m, m.CommandKey()) + } +} diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index ae06ccc2..2ba8b414 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -290,6 +290,9 @@ func AutoConfig(args ...ice.Any) *ice.Action { } inputs = append(inputs, k) }) + if len(inputs) == 0 { + return + } cs := m.Target().Commands if cs[m.CommandKey()] == nil { @@ -298,7 +301,7 @@ func AutoConfig(args ...ice.Any) *ice.Action { if cs[m.CommandKey()].Actions[INSERT] != nil { if cs[m.CommandKey()].Meta[INSERT] == nil { - m.Design(INSERT, "添加", append([]ice.Any{ZONE}, inputs...)...) + m.Design(INSERT, "添加", append([]ice.Any{kit.Select(ZONE, m.Config(SHORT))}, inputs...)...) } } else if cs[m.CommandKey()].Actions[CREATE] != nil { if cs[m.CommandKey()].Meta[CREATE] == nil { diff --git a/core/wiki/data.go b/core/wiki/data.go index 8f4460d6..d16c6800 100644 --- a/core/wiki/data.go +++ b/core/wiki/data.go @@ -35,16 +35,6 @@ func init() { }}, }) } -func FileAction(arg ...ice.Any) ice.Actions { - return ice.Actions{ice.CTX_INIT: mdb.AutoConfig(arg...), - nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { - m.Cmd(nfs.TRASH, path.Join(m.Config(nfs.PATH), m.Option(nfs.PATH))) - }}, - nfs.SAVE: {Name: "save path text", Help: "保存", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(nfs.SAVE, arg[0], arg[1], kit.Dict(nfs.DIR_ROOT, m.Config(nfs.PATH))) - }}, - } -} func CSV(m *ice.Message, text string, head ...string) *ice.Message { bio := bytes.NewBufferString(text) r := csv.NewReader(bio) diff --git a/core/wiki/field.go b/core/wiki/field.go index bd70e8e8..1c819999 100644 --- a/core/wiki/field.go +++ b/core/wiki/field.go @@ -119,7 +119,7 @@ func init() {
`), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { - if arg[1] == "args" { + if arg[1] == ctx.ARGS { arg = kit.Simple("", arg) } if arg = _name(m, arg); strings.Contains(arg[1], ice.NL) { diff --git a/core/wiki/spark.go b/core/wiki/spark.go index d4901c13..47e2af6e 100644 --- a/core/wiki/spark.go +++ b/core/wiki/spark.go @@ -54,7 +54,7 @@ func init() { } list := []string{kit.Format(`
`, arg[0])} for _, l := range kit.SplitLine(strings.Join(arg[1:], ice.NL)) { - list = append(list, "
", Format("label", kit.Select("> ", "$ ", arg[0] == SHELL)), Format("span", l), "
") + list = append(list, Format("div", Format("label", kit.Select("> ", "$ ", arg[0] == SHELL)), Format("span", l))) } return strings.Join(append(list, "
"), "") }) @@ -77,7 +77,6 @@ func init() { return } } - if strings.HasPrefix(line, "```") { if block == "" { text() @@ -88,7 +87,6 @@ func init() { } return } - code = append(code, line) }) text() diff --git a/core/wiki/wiki.go b/core/wiki/wiki.go index 4027c140..9448fe33 100644 --- a/core/wiki/wiki.go +++ b/core/wiki/wiki.go @@ -36,13 +36,13 @@ func _wiki_path(m *ice.Message, arg ...string) string { return path.Join(m.Config(nfs.PATH), path.Join(arg...)) } func _wiki_link(m *ice.Message, text string) string { - if !strings.HasPrefix(text, ice.PS) && !strings.HasPrefix(text, ice.HTTP) { + if !kit.HasPrefix(text, ice.PS, ice.HTTP) { text = path.Join(web.SHARE_LOCAL, _wiki_path(m, text)) } return text } func _wiki_list(m *ice.Message, arg ...string) bool { - if m.Option(nfs.DIR_ROOT, _wiki_path(m)); len(arg) == 0 || strings.HasSuffix(arg[0], ice.PS) { + if m.Option(nfs.DIR_ROOT, _wiki_path(m)); len(arg) == 0 || kit.HasSuffix(arg[0], ice.PS) { if m.Option(nfs.DIR_DEEP) != ice.TRUE { m.Cmdy(nfs.DIR, kit.Slice(arg, 0, 1), kit.Dict(nfs.DIR_TYPE, nfs.DIR)) } @@ -78,24 +78,10 @@ func init() { } func WikiAction(dir string, ext ...string) ice.Actions { - return ice.Actions{ - ice.CTX_INIT: &ice.Action{Hand: func(m *ice.Message, arg ...string) { - if cs := m.Target().Configs; cs[m.CommandKey()] == nil { - cs[m.CommandKey()] = &ice.Config{Value: kit.Data()} - ice.Info.Load(m, m.CommandKey()) - } - m.Config(nfs.PATH, dir) - m.Config(lex.REGEXP, kit.FileReg(ext...)) - }}, - nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { - m.Cmd(nfs.TRASH, path.Join(m.Config(nfs.PATH), m.Option(nfs.PATH))) - }}, - nfs.SAVE: {Name: "save path text", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(nfs.SAVE, arg[0], arg[1], kit.Dict(nfs.DIR_ROOT, m.Config(nfs.PATH))) - }}, - web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) { - _wiki_upload(m, m.Option(nfs.PATH)) - }}, + return ice.Actions{ice.CTX_INIT: mdb.AutoConfig(nfs.PATH, dir, lex.REGEXP, kit.FileReg(ext...)), + web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) { _wiki_upload(m, m.Option(nfs.PATH)) }}, + nfs.SAVE: {Name: "save path text", Hand: func(m *ice.Message, arg ...string) { _wiki_save(m, m.Option(nfs.PATH), m.Option(mdb.TEXT)) }}, + nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(nfs.TRASH, _wiki_path(m, m.Option(nfs.PATH))) }}, } } diff --git a/core/wiki/word.go b/core/wiki/word.go index ef3ed111..383a0dc4 100644 --- a/core/wiki/word.go +++ b/core/wiki/word.go @@ -6,16 +6,14 @@ import ( "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/icebergs/base/ssh" + "shylinux.com/x/icebergs/misc/git" kit "shylinux.com/x/toolkits" ) func _word_show(m *ice.Message, name string, arg ...string) { - m.SetResult() - defer m.StatusTime() - m.Option(TITLE, map[string]int{}) - m.Option(MENU, kit.Dict(mdb.LIST, kit.List())) - m.Option(ice.MSG_ALIAS, m.Configv(mdb.ALIAS)) - m.Cmdy("ssh.source", name, kit.Dict(nfs.DIR_ROOT, _wiki_path(m))) + m.OptionMulti(ice.MSG_ALIAS, m.Configv(mdb.ALIAS), TITLE, map[string]int{}, MENU, kit.Dict(mdb.LIST, kit.List())) + m.Cmdy(ssh.SOURCE, name, kit.Dict(nfs.DIR_ROOT, _wiki_path(m))) } const WORD = "word" @@ -36,12 +34,15 @@ func init() { WordAlias(m, SEQUENCE, CHART, SEQUENCE) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Option(nfs.DIR_DEEP, ice.TRUE) - for _, p := range []string{"src/", "usr/icebergs/", "usr/learning/", "usr/linux-story/", "usr/nginx-story/", "usr/golang-story/", "usr/redis-story/", "usr/mysql-story/"} { - _wiki_list(m, p) - } + m.Cmd(git.REPOS, ice.OptionFields(nfs.PATH)).Tables(func(value ice.Maps) { + if m.Option(nfs.DIR_DEEP, ice.TRUE); kit.Path(value[nfs.PATH]) == kit.Path("") { + _wiki_list(m, value[nfs.PATH]+"/src/") + } else { + _wiki_list(m, value[nfs.PATH]) + } + }) }}, "play": {Name: "play", Help: "演示"}, - ice.STORY: {Name: "story", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], ice.RUN, arg[2:]) }}, + ice.STORY: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], ice.RUN, arg[2:]) }}, }, WikiAction("", nfs.SHY), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { if m.Option(nfs.DIR_DEEP, ice.TRUE); len(arg) == 0 { arg = append(arg, "src/") @@ -52,18 +53,9 @@ func init() { }}, }) } +func WordAction(template string, arg ...ice.Any) ice.Actions { + return ice.Actions{ice.CTX_INIT: mdb.AutoConfig(append([]ice.Any{nfs.TEMPLATE, template}, arg...)...)} +} func WordAlias(m *ice.Message, cmd string, cmds ...string) { m.Conf(WORD, kit.Keym(mdb.ALIAS, cmd), cmds) } -func WordAction(template string, arg ...ice.Any) ice.Actions { - return ice.Actions{ice.CTX_INIT: &ice.Action{Hand: func(m *ice.Message, args ...string) { - if cs := m.Target().Configs; cs[m.CommandKey()] == nil { - cs[m.CommandKey()] = &ice.Config{Value: kit.Data()} - ice.Info.Load(m, m.CommandKey()) - } - m.Config(nfs.TEMPLATE, template) - for i := 0; i < len(arg)-1; i += 2 { - m.Config(kit.Format(arg[i]), arg[i+1]) - } - }}} -} diff --git a/misc.go b/misc.go index 1dedfc5a..1d57d4a0 100644 --- a/misc.go +++ b/misc.go @@ -78,6 +78,12 @@ func (m *Message) PushDetail(value Any, arg ...string) *Message { return m.Push(FIELDS_DETAIL, value, kit.Split(kit.Join(arg))) } +func (m *Message) OptionMulti(arg ...Any) *Message { + for i := 0; i < len(arg); i += 2 { + m.Option(kit.Format(arg[i]), arg[i+1]) + } + return m +} func (m *Message) ToLowerAppend(arg ...string) *Message { for _, k := range m.meta[MSG_APPEND] { m.RenameAppend(k, strings.ToLower(k)) @@ -347,16 +353,16 @@ func MergeActions(list ...Any) Actions { m.Search(from, func(p *Context, s *Context, key string, cmd *Command) { for k, v := range cmd.Actions { func(k string) { - if h, ok := base[k]; !ok { - base[k] = &Action{Name: v.Name, Help: v.Help, Hand: func(m *Message, arg ...string) { - m.Cmdy(from, k, arg) - }} - } else if h.Hand == nil { - h.Hand = func(m *Message, arg ...string) { - m.Cmdy(from, k, arg) + if h, ok := base[k]; !ok { + base[k] = &Action{Name: v.Name, Help: v.Help, Hand: func(m *Message, arg ...string) { + m.Cmdy(from, k, arg) + }} + } else if h.Hand == nil { + h.Hand = func(m *Message, arg ...string) { + m.Cmdy(from, k, arg) + } } - } - } (k) + }(k) } m.target.Merge(m.target) }) @@ -418,11 +424,11 @@ func SplitCmd(name string, actions Actions) (list []Any) { case "image": item = kit.Dict(TYPE, TEXT, NAME, ls[i], ACTION, "img") list = append(list, item) - + case "time": item = kit.Dict(TYPE, TEXT, NAME, ls[i], ACTION, "date") list = append(list, item) - + case "*": item["need"] = "must" case DF: