1
0
forked from x/icebergs

add wiki.field

This commit is contained in:
shylinux 2020-02-26 01:59:24 +08:00
parent 33352c4fd3
commit 1e601771b5
5 changed files with 150 additions and 51 deletions

View File

@ -1611,7 +1611,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
// 执行命令 // 执行命令
meta := kit.Value(value, kit.Format("extra.tool.%s", arg[2])).(map[string]interface{}) meta := kit.Value(value, kit.Format("extra.tool.%s", arg[2])).(map[string]interface{})
if meta["single"] == "yes" { if meta["single"] == "yes" && kit.Select("", arg, 3) != "action" {
arg = append(arg[:3], kit.Simple(kit.UnMarshal(kit.Format(meta["args"])))...) arg = append(arg[:3], kit.Simple(kit.UnMarshal(kit.Format(meta["args"])))...)
for i := len(arg) - 1; i >= 0; i-- { for i := len(arg) - 1; i >= 0; i-- {
if arg[i] != "" { if arg[i] != "" {

View File

@ -14,6 +14,49 @@ data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Opti
var shell = `<code class="story" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "input"}}" data-dir="{{.Option "cmd_dir"}}">$ {{.Option "input"}} # {{.Option "name"}} var shell = `<code class="story" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "input"}}" data-dir="{{.Option "cmd_dir"}}">$ {{.Option "input"}} # {{.Option "name"}}
{{.Option "output"}}</code> {{.Option "output"}}</code>
` `
var field = `<fieldset class="story {{.Option "name"}}" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}" data-meta='{{.Optionv "meta"|Format}}'>
<legend>{{.Option "name"}}</legend>
<form class="option"></form>
<div class="action"></div>
<div class="output"></div>
<div class="status"></div>
</fieldset>
`
var field0 = `<fieldset class="story" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}">
<legend>{{.Option "name"}} </legend>{{$meta := .Optionv "meta"}}
<form class="option">
{{if $meta}}
{{range $index, $value := index $meta "inputs"}}
{{$type := index $value "_input"}}
<div class="item input">
<input
{{if eq $type "text"}}class="args"{{end}}
type="{{index $value "_input"}}"
name="{{index $value "name"|Format}}"
value="{{index $value "value"|Format}}"
data-action="{{index $value "action"|Format}}"
>
</div>
{{end}}
{{end}}
</form>
<div class="action">
</div>
<div class="output">
{{if .Result}}
<div class="code">{{.Result}}</div>
{{else if .Appendv "append"}}
<table>{{$msg := .}}
<tr>{{range $index, $value := .Appendv "append"}}<th>{{$value}}</th>{{end}}</tr>
{{range $index, $_ := .Appendv "_index"}}<tr>{{range $_, $key := $msg.Appendv "append"}}{{$line := $msg.Appendv $key}}
<td>{{index $line $index}}</td>
{{end}}</tr>{{end}}
</table>
{{end}}
</div>
</fieldset>
`
var order = `<ul class="story" var order = `<ul class="story"
data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}"> data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}">
{{range $index, $value := .Optionv "list"}}<li>{{$value}}</li>{{end}}</ul>` {{range $index, $value := .Optionv "list"}}<li>{{$value}}</li>{{end}}</ul>`
@ -29,14 +72,12 @@ data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Opti
var stack = `<div class="story" var stack = `<div class="story"
data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}">` data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}">`
var prefix = `<svg class="story" vertion="1.1" xmlns="http://www.w3.org/2000/svg" var prefix = `<svg class="story" vertion="1.1" xmlns="http://www.w3.org/2000/svg" dominant-baseline="middle" text-anchor="middle"
data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}"
width="{{.Option "width"}}" height="{{.Option "height"}}" width="{{.Option "width"}}" height="{{.Option "height"}}"
font-size="{{.Option "font-size"}}" style="{{.Option "style"}}" font-size="{{.Option "font-size"}}" stroke="{{.Option "stroke"}}" fill="{{.Option "fill"}}"
dominant-baseline="middle" text-anchor="middle" stroke-width="{{.Option "stroke-width"}}" font-family="{{.Option "font-family"}}"
stroke="{{.Option "stroke"}}" fill="{{.Option "fill"}}" style="{{.Option "style"}}"
stroke-width="{{.Option "stroke-width"}}"
font-family="{{.Option "font-family"}}"
>` >`
var premenu = `<ul class="story" data-type="premenu"></ul>` var premenu = `<ul class="story" data-type="premenu"></ul>`

View File

@ -14,6 +14,23 @@ import (
"strings" "strings"
) )
func reply(m *ice.Message, cmd string, arg ...string) bool {
// 文件列表
m.Option("dir_root", m.Conf(cmd, "meta.path"))
m.Option("dir_reg", m.Conf(cmd, "meta.regs"))
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
m.Sort("time", "time_r")
if len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
// 目录列表
m.Option("dir_reg", "")
m.Option("dir_type", "dir")
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
return true
}
return false
}
var Index = &ice.Context{Name: "wiki", Help: "文档中心", var Index = &ice.Context{Name: "wiki", Help: "文档中心",
Caches: map[string]*ice.Cache{}, Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
@ -28,6 +45,15 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
"local": {Name: "local", Help: "文件", Value: kit.Data("template", local)}, "local": {Name: "local", Help: "文件", Value: kit.Data("template", local)},
"shell": {Name: "shell", Help: "命令", Value: kit.Data("template", shell)}, "shell": {Name: "shell", Help: "命令", Value: kit.Data("template", shell)},
"field": {Name: "shell", Help: "命令", Value: kit.Data("template", field,
"some", kit.Dict("simple", kit.Dict(
"inputs", kit.List(
kit.MDB_INPUT, "text", "name", "name",
kit.MDB_INPUT, "button", "value", "查看",
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
),
)),
)},
"order": {Name: "order", Help: "列表", Value: kit.Data("template", order)}, "order": {Name: "order", Help: "列表", Value: kit.Data("template", order)},
"table": {Name: "table", Help: "表格", Value: kit.Data("template", table)}, "table": {Name: "table", Help: "表格", Value: kit.Data("template", table)},
"stack": {Name: "stack", Help: "结构", Value: kit.Data("template", stack)}, "stack": {Name: "stack", Help: "结构", Value: kit.Data("template", stack)},
@ -209,6 +235,35 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
m.Option("output", output) m.Option("output", output)
m.Render(m.Conf(cmd, "meta.template")) m.Render(m.Conf(cmd, "meta.template"))
}}, }},
"field": {Name: "field name text", Help: "列表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(kit.MDB_TYPE, cmd)
m.Option(kit.MDB_NAME, arg[0])
m.Option(kit.MDB_TEXT, arg[1])
if len(arg) > 2 {
if meta := m.Confv("field", kit.Keys("meta.some", arg[2])); meta != nil {
arg = arg[3:]
m.Option("meta", meta)
} else {
list := []string{}
for _, line := range kit.Split(strings.Join(arg[2:], " "), "\n") {
ls := kit.Split(line)
for i := 0; i < len(ls); i++ {
if strings.HasPrefix(ls[i], "#") {
ls = ls[:i]
break
}
}
list = append(list, ls...)
}
meta := kit.Parse(nil, "", list...)
m.Option("meta", meta)
}
}
m.Render(m.Conf(cmd, "meta.template"))
}},
"order": {Name: "order name text", Help: "列表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "order": {Name: "order name text", Help: "列表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(kit.MDB_TYPE, cmd) m.Option(kit.MDB_TYPE, cmd)
m.Option(kit.MDB_NAME, arg[0]) m.Option(kit.MDB_NAME, arg[0])
@ -306,12 +361,18 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
}}, }},
"word": {Name: "word", Help: "语言文字", Meta: kit.Dict("remote", "pod", "display", "wiki/word"), List: kit.List( "word": {Name: "word", Help: "语言文字", Meta: kit.Dict("remote", "pod", "display", "wiki/word"), List: kit.List(
kit.MDB_INPUT, "text", "name", "name", "value", "自然/编程/hi.shy", kit.MDB_INPUT, "text", "name", "path", "value", "自然/编程/hi.shy",
kit.MDB_INPUT, "button", "name", "执行", "action", "auto", kit.MDB_INPUT, "button", "name", "执行", "action", "auto",
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last", kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && arg[0] == "action" { if len(arg) > 0 && arg[0] == "action" {
switch arg[1] { switch arg[1] {
case "story":
cmds := kit.Split(strings.Join(arg[4:], " "))
if m.Right(cmds) {
m.Cmdy(cmds)
}
return
case "追加": case "追加":
if f, e := os.OpenFile(path.Join(m.Conf(cmd, "meta.path"), arg[2]), os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666); m.Assert(e) { if f, e := os.OpenFile(path.Join(m.Conf(cmd, "meta.path"), arg[2]), os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666); m.Assert(e) {
defer f.Close() defer f.Close()
@ -344,17 +405,8 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
return return
} }
// 文件列表 if reply(m, cmd, arg...) {
m.Option("dir_root", m.Conf(cmd, "meta.path"))
m.Option("dir_reg", m.Conf(cmd, "meta.regs"))
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
m.Sort("time", "time_r")
if len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
// 目录列表 // 目录列表
m.Option("dir_reg", "")
m.Option("dir_type", "dir")
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
return return
} }
@ -365,17 +417,12 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
m.Optionv(ice.MSG_ALIAS, m.Confv("word", "meta.alias")) m.Optionv(ice.MSG_ALIAS, m.Confv("word", "meta.alias"))
m.Set("result").Cmdy("ssh.scan", arg[0], arg[0], path.Join(m.Conf(cmd, "meta.path"), arg[0])) m.Set("result").Cmdy("ssh.scan", arg[0], arg[0], path.Join(m.Conf(cmd, "meta.path"), arg[0]))
}}, }},
"data": {Name: "data", Help: "数据表格", Meta: kit.Dict("display", "wiki/data"), List: kit.List( // "data": {Name: "data", Help: "数据表格", Meta: kit.Dict("display", "wiki/data"), List: kit.List(
kit.MDB_INPUT, "text", "name", "name", "data": {Name: "data", Help: "数据表格", Meta: kit.Dict("display", "story/trend"), List: kit.List(
kit.MDB_INPUT, "button", "name", "执行", kit.MDB_INPUT, "text", "name", "path",
kit.MDB_INPUT, "button", "name", "执行", "action", "auto",
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last", kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
kit.MDB_INPUT, "button", "name", "上传", "figure", "upload",
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if m.Option("_action") == "上传" {
web.Upload(m, path.Join(m.Conf(cmd, "meta.path"), kit.Select("", arg, 0)))
return
}
if len(arg) > 0 && arg[0] == "action" { if len(arg) > 0 && arg[0] == "action" {
switch arg[1] { switch arg[1] {
case "保存": case "保存":
@ -384,25 +431,17 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
return return
} }
// 文件列表 if reply(m, cmd, arg...) {
m.Option("dir_root", m.Conf(cmd, "meta.path"))
m.Option("dir_reg", m.Conf(cmd, "meta.regs"))
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
m.Sort("time", "time_r")
if len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
// 目录列表 // 目录列表
m.Option("dir_reg", "")
m.Option("dir_type", "dir")
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
return return
} }
// 解析数据
m.CSV(m.Result()) m.CSV(m.Result())
}}, }},
"draw": {Name: "draw", Help: "思维导图", Meta: kit.Dict("display", "wiki/draw"), List: kit.List( "draw": {Name: "draw", Help: "思维导图", Meta: kit.Dict("display", "wiki/draw"), List: kit.List(
kit.MDB_INPUT, "text", "name", "name", "value", "what/he.svg", kit.MDB_INPUT, "text", "name", "path",
kit.MDB_INPUT, "button", "name", "执行", "action", "auto", kit.MDB_INPUT, "button", "name", "执行", "action", "auto",
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last", kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
kit.MDB_INPUT, "button", "name", "上传", "cb", "upload",
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && arg[0] == "action" { if len(arg) > 0 && arg[0] == "action" {
switch arg[1] { switch arg[1] {
@ -412,18 +451,7 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
return return
} }
// 文件列表 reply(m, cmd, arg...)
m.Option("dir_root", m.Conf(cmd, "meta.path"))
m.Option("dir_reg", m.Conf(cmd, "meta.regs"))
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
m.Sort("time", "time_r")
if len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
// 目录列表
m.Option("dir_reg", "")
m.Option("dir_type", "dir")
m.Cmdy("nfs.dir", kit.Select("./", arg, 0))
}
}}, }},
"feel": {Name: "feel", Help: "影音媒体", Meta: kit.Dict("display", "wiki/feel", "detail", []string{"标签", "删除"}), List: kit.List( "feel": {Name: "feel", Help: "影音媒体", Meta: kit.Dict("display", "wiki/feel", "detail", []string{"标签", "删除"}), List: kit.List(
kit.MDB_INPUT, "text", "name", "name", kit.MDB_INPUT, "text", "name", "name",

View File

@ -244,6 +244,20 @@ var Index = &ice.Context{Name: "git", Help: "代码库",
m.Push("rest", count_add-count_del) m.Push("rest", count_add-count_del)
} }
}}, }},
"trend": {Name: "check name [path [repos]]", Help: "检查", Meta: kit.Dict(
"display", "/plugin/story/trend",
), List: kit.List(
kit.MDB_INPUT, "text", "name", "repos", "action", "auto",
kit.MDB_INPUT, "text", "name", "begin_time", "figure", "date",
kit.MDB_INPUT, "button", "name", "执行", "action", "auto",
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
m.Option("_display", "table")
}
m.Cmdy("total", arg)
}},
}, },
} }

18
type.go
View File

@ -714,6 +714,19 @@ func (m *Message) Append(key string, arg ...interface{}) string {
return kit.Select("", m.Appendv(key, arg...), 0) return kit.Select("", m.Appendv(key, arg...), 0)
} }
func (m *Message) Appendv(key string, arg ...interface{}) []string { func (m *Message) Appendv(key string, arg ...interface{}) []string {
if key == "_index" {
max := 0
for _, k := range m.meta[MSG_APPEND] {
if len(m.meta[k]) > max {
max = len(m.meta[k])
}
}
index := []string{}
for i := 0; i < max; i++ {
index = append(index, kit.Format(i))
}
return index
}
if len(arg) > 0 { if len(arg) > 0 {
m.meta[key] = kit.Simple(arg...) m.meta[key] = kit.Simple(arg...)
} }
@ -1421,7 +1434,10 @@ func (m *Message) Cmd(arg ...interface{}) *Message {
}) })
}) })
m.Warn(m.Hand == false, "not found %v", list) if m.Warn(m.Hand == false, "not found %v", list) {
m.Cmdy(CLI_SYSTEM, list)
m.Hand = true
}
return m return m
} }
func (m *Message) Confv(arg ...interface{}) (val interface{}) { func (m *Message) Confv(arg ...interface{}) (val interface{}) {