diff --git a/etc/init.shy b/etc/init.shy
index dec1c1e5..be69fb0a 100644
--- a/etc/init.shy
+++ b/etc/init.shy
@@ -26,3 +26,4 @@
~cli
~code
+~wiki
diff --git a/src/contexts/ctx/cgi.go b/src/contexts/ctx/cgi.go
index 886ad4fa..fd87f1d0 100644
--- a/src/contexts/ctx/cgi.go
+++ b/src/contexts/ctx/cgi.go
@@ -135,6 +135,21 @@ var CGI = template.FuncMap{
}
return nil
},
+ "trans": func(arg ...interface{}) interface{} {
+ switch m := arg[0].(type) {
+ case *Message:
+ list := [][]string{m.Meta["append"]}
+ m.Table(func(index int, value map[string]string) {
+ line := []string{}
+ for _, k := range m.Meta["append"] {
+ line = append(line, value[k])
+ }
+ list = append(list, line)
+ })
+ return list
+ }
+ return nil
+ },
"result": func(arg ...interface{}) interface{} {
switch m := arg[0].(type) {
case *Message:
@@ -153,33 +168,6 @@ var CGI = template.FuncMap{
func LocalCGI(m *Message, c *Context) *template.FuncMap {
cgi := template.FuncMap{
- "table": func(arg ...interface{}) interface{} {
- if len(arg) == 0 {
- return ""
- }
- switch msg := arg[0].(type) {
- case *Message:
- res := []map[string]string{}
- msg.Table(func(index int, value map[string]string) {
- res = append(res, value)
- })
- return res
- case string:
- sub := m.Spawn()
- head := []string{}
- for i, l := range strings.Split(strings.TrimSpace(msg), "\n") {
- if i == 0 {
- head = kit.Split(l, ' ', 100)
- continue
- }
- for j, v := range strings.Split(l, " ") {
- sub.Push(head[j], v)
- }
- }
- return sub
- }
- return nil
- },
"format": func(arg ...interface{}) interface{} {
switch msg := arg[0].(type) {
case *Message:
diff --git a/src/examples/wiki/wiki.go b/src/examples/wiki/wiki.go
index 9a309d7d..b6b24304 100644
--- a/src/examples/wiki/wiki.go
+++ b/src/examples/wiki/wiki.go
@@ -51,6 +51,12 @@ var Index = &ctx.Context{Name: "wiki", Help: "文档中心",
"level": {Name: "level", Value: "usr/local/wiki", Help: "文档路径"},
"class": {Name: "class", Value: "", Help: "文档目录"},
"favor": {Name: "favor", Value: "index.md", Help: "默认文档"},
+
+ "commit": {Name: "data", Value: map[string]interface{}{
+ "data": map[string]interface{}{},
+ "ship": map[string]interface{}{},
+ "head": map[string]interface{}{},
+ }, Help: "数据"},
},
Commands: map[string]*ctx.Command{
"tree": {Name: "tree", Help: "目录", Form: map[string]int{"level": 1, "class": 1}, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
@@ -69,18 +75,82 @@ var Index = &ctx.Context{Name: "wiki", Help: "文档中心",
tmpl = template.Must(tmpl.ParseFiles(which))
m.Optionv("tmpl", tmpl)
- m.Assert(tmpl.ExecuteTemplate(buffer, path.Base(which), m))
+ m.Assert(tmpl.ExecuteTemplate(buffer, m.Option("filename", path.Base(which)), m))
m.Echo(string(markdown.ToHTML(buffer.Bytes(), nil, nil)))
return
}},
"note": {Name: "note file", Help: "便签", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
- if len(arg) > 0 {
+ if len(arg) > 1 && arg[0] == "commit" {
+ m.Cmd("commit", arg[1:])
+ } else if len(arg) > 0 {
m.Cmd(kit.Select("tree", "text", strings.HasSuffix(arg[0], ".md")), arg[0])
} else {
m.Cmd("tree")
}
return
}},
+ "commit": {Name: "commit file name type text", Help: "提交", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
+ head := kit.Hashs(arg[0], arg[1])
+ prev := m.Conf("commit", []string{"head", head, "ship"})
+ m.Log("info", "head: %v %v", head, m.Conf("commit", []string{"head", head}))
+ if len(arg) == 2 {
+ meta := m.Confm("commit", []string{"ship", prev})
+ m.Push("time", meta["time"])
+ m.Push("data", m.Conf("commit", []string{"data", kit.Format(meta["data"])}))
+ m.Table()
+ return
+ }
+
+ data := kit.Hashs(arg[3])
+ m.Log("info", "data: %v %v", data, arg[3])
+ m.Conf("commit", []string{"data", data}, arg[3])
+
+ meta := map[string]interface{}{
+ "prev": prev,
+ "time": m.Time(),
+ "file": arg[0],
+ "name": arg[1],
+ "type": arg[2],
+ "data": data,
+ }
+ ship := kit.Hashs(kit.Format(meta))
+ m.Log("info", "ship: %v %v", ship, meta)
+ m.Conf("commit", []string{"ship", ship}, meta)
+
+ m.Log("info", "head: %v %v", head, ship)
+ m.Conf("commit", []string{"head", head, "ship"}, ship)
+ m.Echo("%v", kit.Formats(meta))
+ return
+ }},
+ "table": {Name: "table", Help: "表格", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
+ if len(arg) == 0 {
+ return
+ }
+ switch arg[1] {
+ case "data":
+ arg = []string{arg[0], m.Conf("commit", []string{"data", arg[2]})}
+
+ default:
+ msg := m.Spawn().Cmd("commit", m.Option("filename"), arg[0])
+ m.Option("prev_data", msg.Append("data"))
+ m.Option("prev_time", msg.Append("time"))
+ m.Option("file", m.Option("filename"))
+ m.Option("name", arg[0])
+ m.Option("data", arg[1])
+ }
+
+ head := []string{}
+ for i, l := range strings.Split(strings.TrimSpace(arg[1]), "\n") {
+ if i == 0 {
+ head = kit.Split(l, ' ', 100)
+ continue
+ }
+ for j, v := range strings.Split(l, " ") {
+ m.Push(head[j], v)
+ }
+ }
+ return
+ }},
"runs": {Name: "run", Help: "便签", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
m.Cmdy(arg).Set("append")
return
diff --git a/usr/librarys/example.js b/usr/librarys/example.js
index 3d21e924..f284c7c1 100644
--- a/usr/librarys/example.js
+++ b/usr/librarys/example.js
@@ -1528,6 +1528,15 @@ function Output(plugin, type, msg, cb, target, option) {
target.innerHTML = "", plugin.onfigure.meta.max(target)
output.onimport.meta._table(msg, msg.append) || kit.OrderCode(kit.ModifyNode(target, msg.result.join("")))
kit._call(cb, [msg])
+ kit.Selector(target, ".commit", function(item) {
+ var data = item.dataset
+ item.oncontextmenu = function(event) {
+ plugin.oncarte(event, shy("", {}, ["提交"], function(event, value, meta) {
+ plugin.Run(event, [option.you.vaule||"", "commit", option.doc.value||"", data.name, "table", data.data], function(msg) {
+ }, true)
+ }))
+ }
+ })
},
_svg: function(target, width, height, src) {
target.innerHTML = ''
diff --git a/usr/template/wiki/wiki.tmpl b/usr/template/wiki/wiki.tmpl
index 699a2859..4042322e 100644
--- a/usr/template/wiki/wiki.tmpl
+++ b/usr/template/wiki/wiki.tmpl
@@ -1,9 +1,11 @@
-{{define "table"}}
{{range $i, $line := .|table}}
- {{if eq $i 0}}
- {{range $k, $v := $line}}{{$k}} | {{end}}
- {{end}}
- {{range $k, $v := $line}}{{$v}} | {{end}}
+{{define "table"}}{{range $i, $line := .|trans}}
+{{if eq $i 0}}
+{{range $i, $v := $line}}{{$v}} | {{end}}
+{{else}}
+{{range $i, $v := $line}}{{$v}} | {{end}}
+{{end}}
{{end}}
{{end}}
{{define "code"}}{{results .}}
{{end}}