1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-04-26 09:14:06 +08:00

tce opt web.travel&web.upload

This commit is contained in:
shaoying 2018-05-24 15:12:33 +08:00
parent 05d99a7bbb
commit 934fab38df
4 changed files with 203 additions and 129 deletions

View File

@ -199,9 +199,6 @@ func (web *WEB) Trans(m *ctx.Message, key string, hand func(*ctx.Message, *ctx.C
for k, v := range r.Form { for k, v := range r.Form {
msg.Add("option", k, v...) msg.Add("option", k, v...)
} }
for k, v := range r.PostForm {
msg.Add("option", k, v...)
}
for _, v := range r.Cookies() { for _, v := range r.Cookies() {
msg.Add("option", v.Name, v.Value) msg.Add("option", v.Name, v.Value)
} }
@ -373,7 +370,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
"query": &ctx.Config{Name: "query", Value: "", Help: "主机参数"}, "query": &ctx.Config{Name: "query", Value: "", Help: "主机参数"},
"output": &ctx.Config{Name: "output", Value: "stdout", Help: "响应输出"}, "output": &ctx.Config{Name: "output", Value: "stdout", Help: "响应输出"},
"editor": &ctx.Config{Name: "editor", Value: "vim", Help: "响应编辑器"}, "editor": &ctx.Config{Name: "editor", Value: "vim", Help: "响应编辑器"},
"upload_tpl": &ctx.Config{Name: "upload_tpl", Value: "usr/up.html", Help: "上传文件路径"}, "upload_tpl": &ctx.Config{Name: "upload_tpl", Value: "usr/upload.html", Help: "上传文件路径"},
"travel_tpl": &ctx.Config{Name: "travel_tpl", Value: "usr/travel.html", Help: "上传文件路径"}, "travel_tpl": &ctx.Config{Name: "travel_tpl", Value: "usr/travel.html", Help: "上传文件路径"},
}, },
Commands: map[string]*ctx.Command{ Commands: map[string]*ctx.Command{
@ -603,36 +600,54 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
r := m.Data["request"].(*http.Request) // {{{ r := m.Data["request"].(*http.Request) // {{{
w := m.Data["response"].(http.ResponseWriter) w := m.Data["response"].(http.ResponseWriter)
m.Option("message", "")
if !m.Options("file") { if !m.Options("file") {
m.Option("file", m.Cap("directory")) m.Option("file", m.Cap("directory"))
} }
dir := m.Option("file") dir := m.Option("file")
if m.Option("method") == "POST" { if m.Option("method") == "POST" {
file, header, e := r.FormFile("file") if m.Options("content") {
m.Assert(e) name := path.Join(dir, m.Option("filename"))
if _, e := os.Stat(name); e != nil {
f, e := os.Create(name)
m.Assert(e)
name := path.Join(dir, header.Filename) _, e = f.WriteString(m.Option("content"))
defer f.Close()
if _, e := os.Stat(name); e != nil { m.Assert(e)
f, e := os.Create(name) m.Option("message", name, "upload success!")
m.Assert(e) } else {
m.Option("message", name, "already exist!")
_, e = io.Copy(f, file) }
m.Assert(e)
m.Option("message", "", "\n", name)
} else { } else {
m.Option("message", "", "\n", name, "already exist!") file, header, e := r.FormFile("file")
m.Assert(e)
name := path.Join(dir, header.Filename)
if _, e := os.Stat(name); e != nil {
f, e := os.Create(name)
m.Assert(e)
_, e = io.Copy(f, file)
m.Assert(e)
m.Option("message", name)
} else {
m.Option("message", name, "already exist!")
}
} }
} }
branch := m.Find("nfs").Cmd("git", "-C", dir, "branch") switch m.Option("cmd") {
m.Option("branch", branch.Result(0)) case "git":
status := m.Find("nfs").Cmd("git", "-C", dir, "status") branch := m.Find("nfs").Cmd("git", "-C", dir, "branch")
m.Option("status", status.Result(0)) m.Option("branch", branch.Result(0))
status := m.Find("nfs").Cmd("git", "-C", dir, "status")
m.Option("status", status.Result(0))
}
file := m.Option("file") file := m.Option("file")
s, e := os.Stat(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, file)
@ -647,42 +662,46 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
max = i%2 == 1 max = i%2 == 1
} }
m.Option("sort", "")
m.Option("reverse", "")
switch m.Option("list") { switch m.Option("list") {
case "time": case "time":
if max { if max {
m.Option("message", "sort by time") m.Option("sort", "time")
sort.Sort(listtime(fs)) sort.Sort(listtime(fs))
} else { } else {
m.Option("message", "sort by time reverse") m.Option("reverse", "time")
sort.Sort(sort.Reverse(listtime(fs))) sort.Sort(sort.Reverse(listtime(fs)))
} }
case "size": case "size":
if max { if max {
m.Option("message", "sort by size") m.Option("sort", "size")
sort.Sort(listsize(fs)) sort.Sort(listsize(fs))
} else { } else {
m.Option("message", "sort by size reverse") m.Option("reverse", "size")
sort.Sort(sort.Reverse(listsize(fs))) sort.Sort(sort.Reverse(listsize(fs)))
} }
case "name": case "name":
if max { if max {
m.Option("message", "sort by name") m.Option("sort", "name")
sort.Sort(listname(fs)) sort.Sort(listname(fs))
} else { } else {
m.Option("message", "sort by name reverse") m.Option("reverse", "name")
sort.Sort(sort.Reverse(listname(fs))) sort.Sort(sort.Reverse(listname(fs)))
} }
} }
for _, v := range fs { for _, v := range fs {
m.Add("append", "time", v.ModTime().Format("2006-01-02 15:04:05"))
m.Add("append", "size", kit.FmtSize(v.Size()))
name := v.Name() name := v.Name()
if v.IsDir() { if v.IsDir() {
name += "/" name += "/"
} }
if name[0] == '.' {
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", "name", name)
} }

View File

@ -102,7 +102,7 @@
{{if gt $l 0}} {{if gt $l 0}}
{{$meta := .}} {{$first := index .append 0}} {{$meta := .}} {{$first := index .append 0}}
{{range $i, $k := index . $first}} {{range $i, $k := index . $first}}
<tr onclick="return Direct(event)">{{$command := index $meta "key" $i}} <tr>{{$command := index $meta "key" $i}}
{{range $key := index $meta "append"}} {{range $key := index $meta "append"}}
<td class="{{$key}}"> <td class="{{$key}}">
{{if eq $key "input"}} {{if eq $key "input"}}
@ -119,7 +119,7 @@
{{end}} {{end}}
</table> </table>
</fieldset> </fieldset>
<fieldset><legend>result<input id="direct" type="text" onkeydown="return Direct(event)"></legend> <fieldset><legend><input id="direct" type="text" onkeydown="return Command(event)"></legend>
<pre class="result"><code id="result"> <pre class="result"><code id="result">
</code></pre> </code></pre>
</fieldset> </fieldset>
@ -222,28 +222,33 @@
} }
} }
function Result(msg) {
var result = document.getElementById("result");
result.innerHTML = msg.result.join("");
}
function Command(event, name) { function Command(event, name) {
if (event.keyCode == 13) { if (event.keyCode == 13) {
var direct = document.getElementById("direct");
if (name) { if (name) {
POST("", {ccc:"command", name:name, value:event.currentTarget.value}, function(msg) {alert(msg.result.join(""))}) direct.value = name;
POST("", {ccc:"command", name:name, value:event.currentTarget.value}, Result)
} else {
POST("", {ccc:"command", name:event.currentTarget.value}, Result)
} }
} }
} }
function Direct(event, name, value) { function Direct(event, name, value) {
console.log(event) console.log(event)
if (event.keyCode == 13) { if (!name) {
if (!name) { name = event.currentTarget.value;
name = event.currentTarget.value;
}
POST("", {ccc:"command", name:name, value:value||""}, function(msg) {
var result = document.getElementById("result");
var direct = document.getElementById("direct");
direct.innerHTML = name;
result.innerHTML = msg.result.join("");
})
return false;
} }
var direct = document.getElementById("direct");
direct.value = name;
POST("", {ccc:"command", name:name, value:value||""}, Result)
return false;
} }
function list(what) { function list(what) {

View File

@ -1,85 +0,0 @@
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<style>
th {
cursor:pointer;
background-color:lightgray;
}
.time {
padding-right:20px;
}
.size {
text-align:right;
padding-right:20px;
}
.name {
padding-left:10px;
text-align:left;
}
code {
font-size:14px;
}
</style>
</head>
<body>
<form method="POST" action="/upload" enctype="multipart/form-data">
<fieldset><legend>upload</legend>
<input type="file" name="file"><input type="submit">
</fieldset>
<fieldset><legend>message</legend>
<pre>{{index . "message"}}</pre>
</fieldset>
<fieldset><legend>branch</legend>
<pre>{{index . "branch"}}</pre>
</fieldset>
<fieldset><legend>status</legend>
<pre>{{index . "status"}}</pre>
</fieldset>
</form>
<table>
<colgroup>{{range .append}}<col class="{{.}}">{{end}}</colgroup>
<tr>{{range .append}}<th class="{{.}}" onclick="list('{{.}}')">{{.}}</th>{{end}}</tr>
{{$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 "file" 0}}/{{index $meta $key $i}}"><code>{{index $meta $key $i}}</code></a>
</td>
{{else}}
<td class="{{$key}}">
<code>{{index $meta $key $i}}</code>
</td>
{{end}}
{{end}}
</tr>
{{end}}
</table>
<script>
function Cookie(name, value) {
if (value == undefined) {
var pattern = new RegExp(name+"=([^;]*);?");
var result = pattern.exec(document.cookie);
if (result && result.length > 0) {
return result[1];
}
return ""
}
document.cookie = name+"="+value;
return Cookie(name);
}
function list(what) {
Cookie("list", what);
Cookie("order", Cookie("order")*1 + 1)
location.assign(location.href)
}
</script>
</body>

135
usr/upload.html Normal file
View File

@ -0,0 +1,135 @@
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<style>
legend {
font-size:16px;
font-weight:bold;
}
th {
cursor:pointer;
background-color:lightgray;
}
.time {
padding-right:20px;
}
.size {
text-align:right;
padding-right:20px;
}
.name {
padding-left:10px;
text-align:left;
}
.sort {
color:red;
}
.reverse {
color:green;
}
.message {
color:red;
}
code {
font-size:14px;
}
</style>
</head>
<body>
{{if index . "cmd"}}
{{$cmd := index . "cmd" 0}}
{{if eq $cmd "git"}}
<fieldset><legend>branch</legend>
<pre>{{index . "branch"}}</pre>
</fieldset>
<fieldset><legend>status</legend>
<pre>{{index . "status"}}</pre>
</fieldset>
{{end}}
{{end}}
<fieldset><legend>upload</legend>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"><input type="submit">
</form>
</fieldset>
{{if index . "message" 0}}
<fieldset class="message"><legend>message</legend>
<pre>{{index . "message"}}</pre>
</fieldset>
{{end}}
<fieldset><legend>list</legend>
<table>
<colgroup>
{{range .append}}
<col class="{{.}}">
{{end}}
</colgroup>
<tr>
{{$sort := index . "sort" 0}}
{{$reverse := index . "reverse" 0}}
{{range .append}}
{{if eq $sort .}}
<th class="{{.}} sort" onclick="list('{{.}}')">{{.}}</th>
{{else if eq $reverse .}}
<th class="{{.}} reverse" onclick="list('{{.}}')">{{.}}</th>
{{else}}
<th class="{{.}}" onclick="list('{{.}}')">{{.}}</th>
{{end}}
{{end}}
</tr>
{{$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 "file" 0}}/{{index $meta $key $i}}"><code>{{index $meta $key $i}}</code></a>
</td>
{{else}}
<td class="{{$key}}">
<code>{{index $meta $key $i}}</code>
</td>
{{end}}
{{end}}
</tr>
{{end}}
</table>
</fieldset>
<fieldset><legend>create</legend>
<form method="POST" action="/upload">
<table>
<tr><td>filename:</td><td><input type="text" name="filename" required><input type="submit"></td></tr>
<tr><td>content:</td><td><textarea rows="5" cols="80" name="content" required></textarea></td></tr>
</table>
</form>
</fieldset>
<script>
function Cookie(name, value) {
if (value == undefined) {
var pattern = new RegExp(name+"=([^;]*);?");
var result = pattern.exec(document.cookie);
if (result && result.length > 0) {
return result[1];
}
return ""
}
document.cookie = name+"="+value;
return Cookie(name);
}
function list(what) {
Cookie("list", what);
Cookie("order", Cookie("order")*1 + 1)
location.assign(location.href)
}
</script>
</body>