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:
parent
05d99a7bbb
commit
934fab38df
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
85
usr/up.html
85
usr/up.html
@ -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
135
usr/upload.html
Normal 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>
|
Loading…
x
Reference in New Issue
Block a user