mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-25 16:58:06 +08:00
tce add funcmap.msg
This commit is contained in:
parent
8fa1cfe077
commit
5a30fc6bb9
@ -85,70 +85,88 @@ type WEB struct {
|
||||
*ctx.Context
|
||||
}
|
||||
|
||||
var funcmap = template.FuncMap{"meta": func(arg ...interface{}) string {
|
||||
if len(arg) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
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 {
|
||||
var funcmap = template.FuncMap{
|
||||
"meta": func(arg ...interface{}) string { // {{{
|
||||
if len(arg) == 0 {
|
||||
return ""
|
||||
}
|
||||
return fmt.Sprintf("%v", data)
|
||||
}
|
||||
|
||||
if len(arg) == 1 {
|
||||
return strings.Join(list, "")
|
||||
}
|
||||
up := ""
|
||||
|
||||
index, ok := arg[1].(int)
|
||||
if !ok {
|
||||
return strings.Join(list, "")
|
||||
}
|
||||
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 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 list[index]
|
||||
}}
|
||||
}, // }}}
|
||||
}
|
||||
|
||||
func (web *WEB) generate(m *ctx.Message, uri string, arg ...string) string { // {{{
|
||||
add, e := url.Parse(uri)
|
||||
@ -671,10 +689,6 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
m.Option("file", m.Cap("directory"))
|
||||
}
|
||||
|
||||
if !m.Options("username") {
|
||||
m.Option("username", "")
|
||||
}
|
||||
|
||||
m.Option("right", "")
|
||||
m.Option("message", "")
|
||||
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 {
|
||||
f, e := os.Create(name)
|
||||
m.Assert(e)
|
||||
defer f.Close()
|
||||
|
||||
_, e = f.WriteString(m.Option("content"))
|
||||
defer f.Close()
|
||||
m.Assert(e)
|
||||
m.Option("message", name, "upload success!")
|
||||
} else {
|
||||
@ -731,6 +745,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
if _, e := os.Stat(name); e != nil {
|
||||
f, e := os.Create(name)
|
||||
m.Assert(e)
|
||||
defer f.Close()
|
||||
|
||||
_, e = io.Copy(f, file)
|
||||
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") {
|
||||
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, "login", m.Meta)
|
||||
m.Option("message", "your do not have the right, please contact manager")
|
||||
tmpl.ExecuteTemplate(w, "message", m.Meta)
|
||||
tmpl.ExecuteTemplate(w, "tail", m.Meta)
|
||||
return
|
||||
}
|
||||
|
||||
file := m.Option("file")
|
||||
s, e := os.Stat(file)
|
||||
s, e := os.Stat(m.Option("file"))
|
||||
if m.Assert(e); !s.IsDir() {
|
||||
http.ServeFile(w, r, file)
|
||||
http.ServeFile(w, r, m.Option("file"))
|
||||
return
|
||||
}
|
||||
|
||||
fs, e := ioutil.ReadDir(file)
|
||||
fs, e := ioutil.ReadDir(m.Option("file"))
|
||||
m.Assert(e)
|
||||
|
||||
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 {
|
||||
name := v.Name()
|
||||
if v.IsDir() {
|
||||
@ -807,46 +844,21 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
continue
|
||||
}
|
||||
|
||||
m.Add("append", "time", v.ModTime().Format("2006-01-02 15:04:05"))
|
||||
m.Add("append", "size", kit.FmtSize(v.Size()))
|
||||
m.Add("append", "name", name)
|
||||
m.Add("append", "path", path.Join(m.Option("file"), name))
|
||||
list.Add("append", "time", v.ModTime().Format("2006-01-02 15:04:05"))
|
||||
list.Add("append", "size", kit.FmtSize(v.Size()))
|
||||
list.Add("append", "name", name)
|
||||
list.Add("append", "path", path.Join(m.Option("file"), name))
|
||||
}
|
||||
|
||||
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, "userinfo", 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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if m.Options("message") {
|
||||
tmpl.ExecuteTemplate(w, "message", m.Meta)
|
||||
}
|
||||
|
||||
tmpl.ExecuteTemplate(w, "share", msg.Meta)
|
||||
tmpl.ExecuteTemplate(w, "upload", m.Meta)
|
||||
tmpl.ExecuteTemplate(w, "userinfo", m.Meta)
|
||||
tmpl.ExecuteTemplate(w, "share", share)
|
||||
tmpl.ExecuteTemplate(w, "list", list.Meta)
|
||||
|
||||
switch m.Option("cmd") {
|
||||
case "git":
|
||||
@ -857,15 +869,9 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
tmpl.ExecuteTemplate(w, "git", m.Meta)
|
||||
}
|
||||
|
||||
if m.Options("message") {
|
||||
tmpl.ExecuteTemplate(w, "message", m.Meta)
|
||||
}
|
||||
|
||||
tmpl.ExecuteTemplate(w, "list", m.Meta)
|
||||
tmpl.ExecuteTemplate(w, "upload", m.Meta)
|
||||
tmpl.ExecuteTemplate(w, "create", 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) {
|
||||
|
@ -14,22 +14,20 @@
|
||||
code {
|
||||
font-size:14px;
|
||||
}
|
||||
.message {
|
||||
color:red;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<pre>
|
||||
{{meta .Meta}}<br/>
|
||||
{{meta . "context"}}<br/>
|
||||
</pre>
|
||||
{{end}}
|
||||
|
||||
{{define "message"}}
|
||||
<fieldset class="message"><legend>message</legend>
|
||||
<pre>{{meta . "message"}}</pre>
|
||||
<pre>{{meta .message}}</pre>
|
||||
</fieldset>
|
||||
<style>
|
||||
.message {
|
||||
color:red;
|
||||
}
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
{{define "tail"}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{{define "login"}}
|
||||
<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>password:</label><input type="password" name="password" required>
|
||||
<input type="submit">
|
||||
@ -24,9 +24,15 @@
|
||||
|
||||
{{define "userinfo"}}
|
||||
<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>
|
||||
</fieldset>
|
||||
<style>
|
||||
.username {
|
||||
color:red;
|
||||
font-weight:bold;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function logout(event) {
|
||||
ctx.Cookie("sessid", "");
|
||||
@ -38,43 +44,35 @@
|
||||
|
||||
{{define "share"}}
|
||||
<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>
|
||||
<input type="submit">
|
||||
</form>
|
||||
<table>
|
||||
<colgroup>
|
||||
{{range .append}}
|
||||
<col class="{{.}}">
|
||||
{{end}}
|
||||
</colgroup>
|
||||
<tr>
|
||||
{{range .append}}
|
||||
<th class="{{.}}">{{.}}</th>
|
||||
{{end}}
|
||||
</tr>
|
||||
<colgroup>{{range .Meta.append}}<col class="{{.}}">{{end}}</colgroup>
|
||||
<tr>{{range .Meta.append}}<th class="{{.}}">{{.}}</th>{{end}}</tr>
|
||||
|
||||
{{$meta := .}}
|
||||
{{if .append}}
|
||||
{{$first := index .append 0}}
|
||||
{{range $i, $k := index . $first}}
|
||||
<tr>
|
||||
{{range $key := index $meta "append"}}
|
||||
<td class="{{$key}}">
|
||||
{{if eq $key "delete"}}
|
||||
<button onclick="return deleteshare(event, '{{index $meta "value" $i}}', '{{index $meta "group" $i}}')">delete</button>
|
||||
{{else}}
|
||||
<code>{{index $meta $key $i}}</code>
|
||||
{{end}}
|
||||
</td>
|
||||
{{if .Meta.append}}
|
||||
{{$meta := .Meta}}
|
||||
{{$first := index .Meta.append 0}}
|
||||
{{range $i, $k := index $meta $first}}
|
||||
<tr>
|
||||
{{range $key := index $meta "append"}}
|
||||
<td class="{{$key}}">
|
||||
{{if eq $key "delete"}}
|
||||
<button onclick="return deleteshare(event, '{{index $meta "value" $i}}', '{{index $meta "group" $i}}')">delete</button>
|
||||
{{else}}
|
||||
<code>{{index $meta $key $i}}</code>
|
||||
{{end}}
|
||||
</tr>
|
||||
</td>
|
||||
{{end}}
|
||||
</tr>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</table>
|
||||
</fieldset>
|
||||
<script>
|
||||
function share(event) {
|
||||
function share(event, file) {
|
||||
var fields = event.target.elements;
|
||||
var shareto = fields["shareto"].value
|
||||
ctx.POST("/upload", {
|
||||
|
@ -7,25 +7,14 @@
|
||||
</fieldset>
|
||||
{{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"}}
|
||||
<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>
|
||||
<colgroup>
|
||||
{{range .append}}
|
||||
<col class="{{.}}">
|
||||
{{end}}
|
||||
</colgroup>
|
||||
<colgroup>{{range .append}}<col class="{{.}}">{{end}}</colgroup>
|
||||
|
||||
<tr>
|
||||
{{$sort := index . "sort" 0}}
|
||||
{{$reverse := index . "reverse" 0}}
|
||||
{{$sort := meta .sort}}
|
||||
{{$reverse := meta .reverse}}
|
||||
{{range .append}}
|
||||
{{if eq $sort .}}
|
||||
<th class="{{.}} sort" onclick="list('{{.}}')">{{.}}</th>
|
||||
@ -38,25 +27,25 @@
|
||||
{{end}}
|
||||
</tr>
|
||||
|
||||
{{$meta := .}}
|
||||
{{if .append}}
|
||||
{{$first := index .append 0}}
|
||||
{{range $i, $k := index . $first}}
|
||||
<tr>
|
||||
{{range $key := index $meta "append"}}
|
||||
{{if eq $key "name"}}
|
||||
<td class="{{$key}}">
|
||||
<a href="/upload?file={{index $meta "path" $i}}"><code>{{index $meta $key $i}}</code></a>
|
||||
</td>
|
||||
{{else if eq $key "path"}}
|
||||
{{else}}
|
||||
<td class="{{$key}}">
|
||||
<code>{{index $meta $key $i}}</code>
|
||||
</td>
|
||||
{{end}}
|
||||
{{$meta := .}}
|
||||
{{$first := index .append 0}}
|
||||
{{range $i, $k := index . $first}}
|
||||
<tr>
|
||||
{{range $key := index $meta "append"}}
|
||||
{{if eq $key "name"}}
|
||||
<td class="{{$key}}">
|
||||
<a href="/upload?file={{index $meta "path" $i}}"><code>{{index $meta $key $i}}</code></a>
|
||||
</td>
|
||||
{{else if eq $key "path"}}
|
||||
{{else}}
|
||||
<td class="{{$key}}">
|
||||
<code>{{index $meta $key $i}}</code>
|
||||
</td>
|
||||
{{end}}
|
||||
</tr>
|
||||
{{end}}
|
||||
</tr>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</table>
|
||||
</fieldset>
|
||||
@ -80,7 +69,6 @@
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var file = '{{index .file 0}}';
|
||||
function Change(event) {
|
||||
if (event.keyCode == 13) {
|
||||
ctx.Search("file", event.target.value);
|
||||
@ -88,13 +76,21 @@
|
||||
}
|
||||
|
||||
function list(what) {
|
||||
ctx.Cookie("order", ctx.Cookie("order")*1 + 1);
|
||||
ctx.Cookie("list", what);
|
||||
ctx.Cookie("order", ctx.Cookie("order")*1 + 1)
|
||||
location.assign(location.href)
|
||||
ctx.Refresh();
|
||||
}
|
||||
</script>
|
||||
{{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"}}
|
||||
<fieldset><legend>create</legend>
|
||||
<form method="POST" action="/upload">
|
||||
|
Loading…
x
Reference in New Issue
Block a user