1
0
forked from x/ContextOS

tce add funcmap.msg

This commit is contained in:
shaoying 2018-05-31 22:07:19 +08:00
parent 8fa1cfe077
commit 5a30fc6bb9
4 changed files with 181 additions and 183 deletions

View File

@ -85,70 +85,88 @@ type WEB struct {
*ctx.Context *ctx.Context
} }
var funcmap = template.FuncMap{"meta": func(arg ...interface{}) string { var funcmap = template.FuncMap{
if len(arg) == 0 { "meta": func(arg ...interface{}) string { // {{{
return "" if len(arg) == 0 {
}
up := ""
if m, ok := arg[0].(*ctx.Message); ok {
if len(arg) == 1 {
return fmt.Sprintf("%v", m)
} else {
arg[0] = m.Meta
if key, ok := arg[1].(string); ok {
switch key {
case "context":
msg := m.Spawn(m.Target())
msg.Cmd("context")
up = strings.Join(msg.Meta["result"], "")
}
}
}
}
list := []string{}
switch data := arg[0].(type) {
case map[string][]string:
if len(arg) == 1 {
list = append(list, fmt.Sprintf("detail: %s\n", data["detail"]))
list = append(list, fmt.Sprintf("option: %s\n", data["option"]))
list = append(list, fmt.Sprintf("result: %s\n", data["result"]))
list = append(list, fmt.Sprintf("append: %s\n", data["append"]))
break
}
if key, ok := arg[1].(string); ok {
if list, ok = data[key]; ok {
arg = arg[1:]
} else {
return up
}
} else {
return fmt.Sprintf("%v", data)
}
case []string:
list = data
default:
if data == nil {
return "" return ""
} }
return fmt.Sprintf("%v", data)
}
if len(arg) == 1 { up := ""
return strings.Join(list, "")
}
index, ok := arg[1].(int) list := []string{}
if !ok { switch data := arg[0].(type) {
return strings.Join(list, "") case map[string][]string:
} if len(arg) == 1 {
list = append(list, fmt.Sprintf("detail: %s\n", data["detail"]))
list = append(list, fmt.Sprintf("option: %s\n", data["option"]))
list = append(list, fmt.Sprintf("result: %s\n", data["result"]))
list = append(list, fmt.Sprintf("append: %s\n", data["append"]))
break
}
if key, ok := arg[1].(string); ok {
if list, ok = data[key]; ok {
arg = arg[1:]
} else {
return up
}
} else {
return fmt.Sprintf("%v", data)
}
case []string:
list = data
default:
if data == nil {
return ""
}
return fmt.Sprintf("%v", data)
}
if index >= len(list) { if len(arg) == 1 {
return strings.Join(list, "")
}
index, ok := arg[1].(int)
if !ok {
return strings.Join(list, "")
}
if index >= len(list) {
return ""
}
return list[index]
}, // }}}
"msg": func(arg ...interface{}) string { // {{{
if len(arg) == 0 {
return ""
}
if m, ok := arg[0].(*ctx.Message); ok {
if len(arg) == 1 {
return fmt.Sprintf("%v", m)
}
switch action := arg[1].(type) {
case string:
switch action {
case "option":
if len(arg) == 2 {
return fmt.Sprintf("%v", m.Meta["option"])
}
key, _ := arg[2].(string)
if len(arg) == 3 {
return m.Option(key)
}
value, _ := arg[3].(string)
if len(arg) == 4 {
return m.Option(key, value)
}
}
case int:
}
}
return "" return ""
} }, // }}}
return list[index] }
}}
func (web *WEB) generate(m *ctx.Message, uri string, arg ...string) string { // {{{ func (web *WEB) generate(m *ctx.Message, uri string, arg ...string) string { // {{{
add, e := url.Parse(uri) add, e := url.Parse(uri)
@ -671,10 +689,6 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
m.Option("file", m.Cap("directory")) m.Option("file", m.Cap("directory"))
} }
if !m.Options("username") {
m.Option("username", "")
}
m.Option("right", "") m.Option("right", "")
m.Option("message", "") m.Option("message", "")
aaa := m.Find("aaa").Cmd("login", m.Option("sessid")) aaa := m.Find("aaa").Cmd("login", m.Option("sessid"))
@ -714,9 +728,9 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
if _, e := os.Stat(name); e != nil { if _, e := os.Stat(name); e != nil {
f, e := os.Create(name) f, e := os.Create(name)
m.Assert(e) m.Assert(e)
defer f.Close()
_, e = f.WriteString(m.Option("content")) _, e = f.WriteString(m.Option("content"))
defer f.Close()
m.Assert(e) m.Assert(e)
m.Option("message", name, "upload success!") m.Option("message", name, "upload success!")
} else { } else {
@ -731,6 +745,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
if _, e := os.Stat(name); e != nil { if _, e := os.Stat(name); e != nil {
f, e := os.Create(name) f, e := os.Create(name)
m.Assert(e) m.Assert(e)
defer f.Close()
_, e = io.Copy(f, file) _, e = io.Copy(f, file)
m.Assert(e) m.Assert(e)
@ -741,27 +756,25 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
} }
} }
tmpl := template.Must(template.Must(template.New("fuck").Funcs(funcmap).ParseGlob(m.Conf("template_dir") + "/common/*.html")).ParseGlob(m.Conf("template_dir") + "upload.html"))
m.Assert(tmpl)
if !m.Options("right") { if !m.Options("right") {
w.Header().Add("Content-Type", "text/html") w.Header().Add("Content-Type", "text/html")
tmpl := template.Must(template.Must(template.New("fuck").Funcs(funcmap).ParseGlob(m.Conf("template_dir") + "/common/*.html")).ParseGlob(m.Conf("template_dir") + "upload.html"))
m.Assert(tmpl)
tmpl.ExecuteTemplate(w, "head", m.Meta) tmpl.ExecuteTemplate(w, "head", m.Meta)
tmpl.ExecuteTemplate(w, "login", m.Meta) tmpl.ExecuteTemplate(w, "login", m.Meta)
m.Option("message", "your do not have the right, please contact manager")
tmpl.ExecuteTemplate(w, "message", m.Meta) tmpl.ExecuteTemplate(w, "message", m.Meta)
tmpl.ExecuteTemplate(w, "tail", m.Meta) tmpl.ExecuteTemplate(w, "tail", m.Meta)
return return
} }
file := m.Option("file") s, e := os.Stat(m.Option("file"))
s, e := os.Stat(file)
if m.Assert(e); !s.IsDir() { if m.Assert(e); !s.IsDir() {
http.ServeFile(w, r, file) http.ServeFile(w, r, m.Option("file"))
return return
} }
fs, e := ioutil.ReadDir(file) fs, e := ioutil.ReadDir(m.Option("file"))
m.Assert(e) m.Assert(e)
max := true max := true
@ -798,6 +811,30 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
} }
} }
share := m.Spawn(m.Target())
index := share.Target().Index
if index != nil && index[m.Option("right")] != nil {
for k, v := range index[m.Option("right")].Index {
for i, j := range v.Commands {
for v, n := range j.Shares {
for _, nn := range n {
match, e := regexp.MatchString(nn, m.Option("file"))
m.Assert(e)
if match {
share.Add("append", "group", k)
share.Add("append", "command", i)
share.Add("append", "argument", v)
share.Add("append", "value", nn)
share.Add("append", "delete", "delete")
}
}
}
}
}
}
list := m.Spawn(m.Target())
list.Option("file", m.Option("file"))
for _, v := range fs { for _, v := range fs {
name := v.Name() name := v.Name()
if v.IsDir() { if v.IsDir() {
@ -807,46 +844,21 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
continue continue
} }
m.Add("append", "time", v.ModTime().Format("2006-01-02 15:04:05")) list.Add("append", "time", v.ModTime().Format("2006-01-02 15:04:05"))
m.Add("append", "size", kit.FmtSize(v.Size())) list.Add("append", "size", kit.FmtSize(v.Size()))
m.Add("append", "name", name) list.Add("append", "name", name)
m.Add("append", "path", path.Join(m.Option("file"), name)) list.Add("append", "path", path.Join(m.Option("file"), name))
} }
w.Header().Add("Content-Type", "text/html") w.Header().Add("Content-Type", "text/html")
tmpl := template.Must(template.Must(template.New("fuck").Funcs(funcmap).ParseGlob(m.Conf("template_dir") + "/common/*.html")).ParseGlob(m.Conf("template_dir") + "upload.html"))
m.Assert(tmpl)
tmpl.ExecuteTemplate(w, "head", m.Meta) tmpl.ExecuteTemplate(w, "head", m.Meta)
tmpl.ExecuteTemplate(w, "userinfo", m.Meta) if m.Options("message") {
tmpl.ExecuteTemplate(w, "message", m.Meta)
msg := m.Spawn(m.Target())
index := msg.Target().Index
if index != nil && index[m.Option("right")] != nil {
for k, v := range index[m.Option("right")].Index {
// for k, v := range index {
for i, j := range v.Commands {
for v, n := range j.Shares {
for _, nn := range n {
match, e := regexp.MatchString(nn, m.Option("file"))
m.Log("fuck", nil, "why %s %s", nn, m.Option("file"))
m.Assert(e)
if match {
msg.Add("append", "group", k)
msg.Add("append", "command", i)
msg.Add("append", "argument", v)
msg.Add("append", "value", nn)
msg.Add("append", "delete", "delete")
}
}
}
}
}
} }
tmpl.ExecuteTemplate(w, "share", msg.Meta) tmpl.ExecuteTemplate(w, "userinfo", m.Meta)
tmpl.ExecuteTemplate(w, "upload", m.Meta) tmpl.ExecuteTemplate(w, "share", share)
tmpl.ExecuteTemplate(w, "list", list.Meta)
switch m.Option("cmd") { switch m.Option("cmd") {
case "git": case "git":
@ -857,15 +869,9 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
tmpl.ExecuteTemplate(w, "git", m.Meta) tmpl.ExecuteTemplate(w, "git", m.Meta)
} }
if m.Options("message") { tmpl.ExecuteTemplate(w, "upload", m.Meta)
tmpl.ExecuteTemplate(w, "message", m.Meta)
}
tmpl.ExecuteTemplate(w, "list", m.Meta)
tmpl.ExecuteTemplate(w, "create", m.Meta) tmpl.ExecuteTemplate(w, "create", m.Meta)
tmpl.ExecuteTemplate(w, "tail", m.Meta) tmpl.ExecuteTemplate(w, "tail", m.Meta)
delete(m.Meta, "result")
delete(m.Meta, "append")
// }}} // }}}
}}, }},
"/travel": &ctx.Command{Name: "/travel", Help: "文件上传", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { "/travel": &ctx.Command{Name: "/travel", Help: "文件上传", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {

View File

@ -14,22 +14,20 @@
code { code {
font-size:14px; font-size:14px;
} }
.message {
color:red;
}
</style> </style>
</head> </head>
<body> <body>
<pre>
{{meta .Meta}}<br/>
{{meta . "context"}}<br/>
</pre>
{{end}} {{end}}
{{define "message"}} {{define "message"}}
<fieldset class="message"><legend>message</legend> <fieldset class="message"><legend>message</legend>
<pre>{{meta . "message"}}</pre> <pre>{{meta .message}}</pre>
</fieldset> </fieldset>
<style>
.message {
color:red;
}
</style>
{{end}} {{end}}
{{define "tail"}} {{define "tail"}}

View File

@ -1,6 +1,6 @@
{{define "login"}} {{define "login"}}
<fieldset><legend>login</legend> <fieldset><legend>login</legend>
<form method="POST" action="/login" onsubmit="return login(event)"> <form method="POST" onsubmit="return login(event)">
<label>username:</label><input type="text" name="username" value="{{meta .username}}" required autofocus> <label>username:</label><input type="text" name="username" value="{{meta .username}}" required autofocus>
<label>password:</label><input type="password" name="password" required> <label>password:</label><input type="password" name="password" required>
<input type="submit"> <input type="submit">
@ -24,9 +24,15 @@
{{define "userinfo"}} {{define "userinfo"}}
<fieldset><legend>userinfo</legend> <fieldset><legend>userinfo</legend>
welcome {{index .username 0}} welcome <span class="username">{{meta .username}}</span> to context world
<button onclick="return logout(event)">logout</button> <button onclick="return logout(event)">logout</button>
</fieldset> </fieldset>
<style>
.username {
color:red;
font-weight:bold;
}
</style>
<script> <script>
function logout(event) { function logout(event) {
ctx.Cookie("sessid", ""); ctx.Cookie("sessid", "");
@ -38,43 +44,35 @@
{{define "share"}} {{define "share"}}
<fieldset><legend>share</legend> <fieldset><legend>share</legend>
<form method="POST" onsubmit="return share(event)"> <form method="POST" onsubmit="return share(event, '{{msg . "option" "file"}}')">
<label>share to:</label><input type="text" name="shareto" required> <label>share to:</label><input type="text" name="shareto" required>
<input type="submit"> <input type="submit">
</form> </form>
<table> <table>
<colgroup> <colgroup>{{range .Meta.append}}<col class="{{.}}">{{end}}</colgroup>
{{range .append}} <tr>{{range .Meta.append}}<th class="{{.}}">{{.}}</th>{{end}}</tr>
<col class="{{.}}">
{{end}}
</colgroup>
<tr>
{{range .append}}
<th class="{{.}}">{{.}}</th>
{{end}}
</tr>
{{$meta := .}} {{if .Meta.append}}
{{if .append}} {{$meta := .Meta}}
{{$first := index .append 0}} {{$first := index .Meta.append 0}}
{{range $i, $k := index . $first}} {{range $i, $k := index $meta $first}}
<tr> <tr>
{{range $key := index $meta "append"}} {{range $key := index $meta "append"}}
<td class="{{$key}}"> <td class="{{$key}}">
{{if eq $key "delete"}} {{if eq $key "delete"}}
<button onclick="return deleteshare(event, '{{index $meta "value" $i}}', '{{index $meta "group" $i}}')">delete</button> <button onclick="return deleteshare(event, '{{index $meta "value" $i}}', '{{index $meta "group" $i}}')">delete</button>
{{else}} {{else}}
<code>{{index $meta $key $i}}</code> <code>{{index $meta $key $i}}</code>
{{end}}
</td>
{{end}} {{end}}
</tr> </td>
{{end}} {{end}}
</tr>
{{end}}
{{end}} {{end}}
</table> </table>
</fieldset> </fieldset>
<script> <script>
function share(event) { function share(event, file) {
var fields = event.target.elements; var fields = event.target.elements;
var shareto = fields["shareto"].value var shareto = fields["shareto"].value
ctx.POST("/upload", { ctx.POST("/upload", {

View File

@ -7,25 +7,14 @@
</fieldset> </fieldset>
{{end}} {{end}}
{{define "upload"}}
<fieldset><legend>upload</legend>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"><input type="submit">
</form>
</fieldset>
{{end}}
{{define "list"}} {{define "list"}}
<fieldset><legend><input type="text" id="dir" value="{{index .file 0}}" onkeydown="return Change(event)"></legend> <fieldset><legend><input type="text" id="dir" value="{{meta .file}}" onkeydown="return Change(event)"></legend>
<table> <table>
<colgroup> <colgroup>{{range .append}}<col class="{{.}}">{{end}}</colgroup>
{{range .append}}
<col class="{{.}}">
{{end}}
</colgroup>
<tr> <tr>
{{$sort := index . "sort" 0}} {{$sort := meta .sort}}
{{$reverse := index . "reverse" 0}} {{$reverse := meta .reverse}}
{{range .append}} {{range .append}}
{{if eq $sort .}} {{if eq $sort .}}
<th class="{{.}} sort" onclick="list('{{.}}')">{{.}}</th> <th class="{{.}} sort" onclick="list('{{.}}')">{{.}}</th>
@ -38,25 +27,25 @@
{{end}} {{end}}
</tr> </tr>
{{$meta := .}}
{{if .append}} {{if .append}}
{{$first := index .append 0}} {{$meta := .}}
{{range $i, $k := index . $first}} {{$first := index .append 0}}
<tr> {{range $i, $k := index . $first}}
{{range $key := index $meta "append"}} <tr>
{{if eq $key "name"}} {{range $key := index $meta "append"}}
<td class="{{$key}}"> {{if eq $key "name"}}
<a href="/upload?file={{index $meta "path" $i}}"><code>{{index $meta $key $i}}</code></a> <td class="{{$key}}">
</td> <a href="/upload?file={{index $meta "path" $i}}"><code>{{index $meta $key $i}}</code></a>
{{else if eq $key "path"}} </td>
{{else}} {{else if eq $key "path"}}
<td class="{{$key}}"> {{else}}
<code>{{index $meta $key $i}}</code> <td class="{{$key}}">
</td> <code>{{index $meta $key $i}}</code>
{{end}} </td>
{{end}} {{end}}
</tr>
{{end}} {{end}}
</tr>
{{end}}
{{end}} {{end}}
</table> </table>
</fieldset> </fieldset>
@ -80,7 +69,6 @@
} }
</style> </style>
<script> <script>
var file = '{{index .file 0}}';
function Change(event) { function Change(event) {
if (event.keyCode == 13) { if (event.keyCode == 13) {
ctx.Search("file", event.target.value); ctx.Search("file", event.target.value);
@ -88,13 +76,21 @@
} }
function list(what) { function list(what) {
ctx.Cookie("order", ctx.Cookie("order")*1 + 1);
ctx.Cookie("list", what); ctx.Cookie("list", what);
ctx.Cookie("order", ctx.Cookie("order")*1 + 1) ctx.Refresh();
location.assign(location.href)
} }
</script> </script>
{{end}} {{end}}
{{define "upload"}}
<fieldset><legend>upload</legend>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"><input type="submit">
</form>
</fieldset>
{{end}}
{{define "create"}} {{define "create"}}
<fieldset><legend>create</legend> <fieldset><legend>create</legend>
<form method="POST" action="/upload"> <form method="POST" action="/upload">