1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-06-26 18:07:30 +08:00

add love.pics

This commit is contained in:
shaoying 2019-10-02 09:27:45 +08:00
parent 79ef6c8718
commit c2cdeef2b1
9 changed files with 97 additions and 17 deletions

View File

@ -779,8 +779,8 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
// 生成证书
template := x509.Certificate{
SerialNumber: big.NewInt(1),
IsCA: true,
SerialNumber: big.NewInt(1),
IsCA: true,
BasicConstraintsValid: true,
KeyUsage: x509.KeyUsageCertSign,
Subject: pkix.Name{CommonName: kit.Format(common)},

View File

@ -7,5 +7,5 @@ var version = struct {
self int
}{
[]string{"2017-11-01 01:02:03", "2019-07-13 18:02:21"},
`2019-09-30 15:01:56`, `centos`, 622,
`2019-10-01 22:57:21`, `mac`, 631,
}

View File

@ -187,7 +187,12 @@ func (web *WEB) HandleCmd(m *ctx.Message, key string, cmd *ctx.Command) {
}
// 请求参数
r.ParseMultipartForm(int64(msg.Confi("serve", "form_size")))
if r.ParseMultipartForm(int64(msg.Confi("serve", "form_size"))); r.MultipartForm != nil && len(r.MultipartForm.Value) > 0 {
for k, v := range r.MultipartForm.Value {
msg.Log("info", "%s: %v", k, v)
msg.Add("option", k, v)
}
}
if r.ParseForm(); len(r.PostForm) > 0 {
for k, v := range r.PostForm {
msg.Log("info", "%s: %v", k, v)
@ -215,6 +220,8 @@ func (web *WEB) HandleCmd(m *ctx.Message, key string, cmd *ctx.Command) {
}
}
msg.Short("river")
// 用户登录
if msg.Put("option", "request", r).Put("option", "response", w).Sess("web", msg); web.Login(msg, w, r) {
msg.Log("cmd", "%s [] %v", key, msg.Meta["option"])
@ -945,8 +952,6 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
if f, h, e := r.FormFile("upload"); m.Assert(e) {
defer f.Close()
m.Log("info", "waht %v", h.Header)
name := kit.Hashx(f)
if o, p, e := kit.Create(path.Join(m.Conf("web.upload", "path"), "list", name)); m.Assert(e) {
defer o.Close()
@ -959,18 +964,25 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
if o, p, e := kit.Create(path.Join(m.Conf("web.upload", "path"), "meta", code)); m.Assert(e) {
defer o.Close()
kind := h.Header.Get("Content-Type")
m.Log("upload", "file: %s %d", p, n)
fmt.Fprintf(o, "create_time: %s\n", m.Time())
fmt.Fprintf(o, "create_user: %s\n", m.Option("username"))
fmt.Fprintf(o, "type: %s\n", h.Header.Get("Content-Type"))
fmt.Fprintf(o, "name: %s\n", h.Filename)
fmt.Fprintf(o, "type: %s\n", kind)
fmt.Fprintf(o, "hash: %s\n", name)
fmt.Fprintf(o, "size: %d\n", n)
m.Append("size", kit.FmtSize(n))
m.Append("code", code)
m.Append("link", fmt.Sprintf(`<a href="/download/%s" target="_blank">%s</a>`, code, h.Filename))
m.Append("type", h.Header.Get("Content-Type"))
m.Append("type", kind)
m.Append("hash", name)
kind = strings.Split(kind, "/")[0]
m.Cmd("nfs.copy", path.Join(m.Conf("web.upload", "path"), kind, code), p)
m.Cmd("ssh.data", "insert", kit.Select(kind, m.Option("table")),
"name", h.Filename, "kind", kind, "hash", name, "size", n)
}
m.Table()
}
@ -982,15 +994,21 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
r := m.Optionv("request").(*http.Request)
w := m.Optionv("response").(http.ResponseWriter)
kind := kit.Select("meta", kit.Select(m.Option("meta"), arg, 0))
file := strings.TrimPrefix(key, "/download/")
if file == "" {
if fs, e := ioutil.ReadDir(path.Join(m.Conf("web.upload", "path"), "meta")); e == nil {
// 文件列表
if fs, e := ioutil.ReadDir(path.Join(m.Conf("web.upload", "path"), kind)); e == nil {
for _, f := range fs {
meta := kit.Linex(path.Join(m.Conf("web.upload", "path"), "meta", f.Name()))
meta := kit.Linex(path.Join(m.Conf("web.upload", "path"), kind, f.Name()))
m.Push("time", meta["create_time"])
m.Push("user", meta["create_user"])
m.Push("size", kit.FmtSize(int64(kit.Int(meta["size"]))))
m.Push("name", fmt.Sprintf(`<a href="/download/%s" target="_blank">%s</a>`, f.Name(), meta["name"]))
if kind == "image" {
m.Push("name", f.Name())
} else {
m.Push("name", fmt.Sprintf(`<a href="/download/%s" target="_blank">%s</a>`, f.Name(), meta["name"]))
}
m.Push("hash", meta["hash"][:8])
}
m.Sort("time", "time_r").Table()
@ -998,7 +1016,14 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
return
}
if p := m.Cmdx("nfs.path", path.Join(m.Conf("web.upload", "path"), "meta", file)); p != "" {
// 直接下载
if p := m.Cmdx("nfs.path", path.Join(m.Conf("web.upload", "path"), "list", file)); p != "" {
m.Log("info", "download %s direct", p)
http.ServeFile(w, r, p)
return
}
// 下载文件
if p := m.Cmdx("nfs.path", path.Join(m.Conf("web.upload", "path"), kind, file)); p != "" {
meta := kit.Linex(p)
if p := m.Cmdx("nfs.path", path.Join(m.Conf("web.upload", "path"), "list", meta["hash"])); p != "" {
m.Log("info", "download %s %s", p, m.Cmdx("nfs.hash", meta["hash"]))
@ -1014,6 +1039,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
return
}
// 任意文件
if p := m.Cmdx("nfs.path", file); p != "" {
m.Log("info", "download %s %s", p, m.Cmdx("nfs.hash", p))
http.ServeFile(w, r, p)

View File

@ -30,3 +30,8 @@ fieldset.item.love.media table td {
text-align:center;
min-width:60px;
}
fieldset.item.love.pics img {
border:solid 2px red;
margin:10px;
}

View File

@ -60,13 +60,20 @@ fun detail "详情" "index.js" protected \
end
end
kit note "回忆" "index.js" protected "ssh.data" update _ _ extra \
kit append "扩展" "index.js" protected "ssh.data" update _ _ extra \
text "love" name table imports plugin_table \
text "1" name index imports plugin_index action auto view tiny \
text "" name field \
text "" name value \
button "添加"
kit pics "图片" "pics.js" "index.css" private "ssh.data" show \
text "image" name table imports plugin_table \
upfile "" name upload \
button "上传" cb upload \
button "记录" \
button "展示" cb show
fun delay "以后告诉你" protected \
text "delay" name table imports plugin_table \
text "" name when init date\

30
src/plugin/love/pics.js Normal file
View File

@ -0,0 +1,30 @@
{init: function(run, field, option, output) {
return {
onexport: {"": function(value, name, line) {var plugin = field.Plugin
kit.AppendChilds(output, [{img: ["/download/"+line.hash], data: {width: output.clientWidth, onclick: function() {
plugin.display("table")
}}}])
}},
show: function() {var plugin = field.Plugin
var msg = plugin.msg
var width = output.clientWidth
output.innerHTML = "", kit.List(ctx.Table(msg), function(line) {
kit.Opacity(kit.AppendChilds(output, [{img: ["/download/"+line.hash], data: {width: width, onclick: function(event) {
}}}]).last)
}, 1000, function() {
output.innerHTML = "", kit.List(ctx.Table(msg), function(line) {
kit.Opacity(kit.AppendChild(output, [{img: ["/download/"+line.hash], data: {width: 200, onclick: function(event) {
plugin.ontoast({width: width, height: width*3/5+40,
text: {img: ["/download/"+line.hash], data: {width: width-20, onclick: function(event) {
plugin.ontoast()
}}}, button: ["确定"], cb: function() {
plugin.ontoast()
}
})
}}}]).last)
}, 500)
})
},
}}}

View File

@ -122,9 +122,12 @@ ctx = context = {__proto__: kit,
}
return ret
},
Upload: function(file, cb, detail) {
Upload: function(form, file, cb, detail) {
var data = new FormData()
data.append("upload", file)
for (var k in form) {
data.append(k, form[k])
}
var xhr = new XMLHttpRequest()
xhr.onload = function(event) {

View File

@ -190,7 +190,9 @@ function Page(page) {
})
if (!args.duration && args.button) {args.duration = -1}
var list = [{text: [args.title||"", "div", "title"]}, {text: [args.text||"", "div", "content"]}]
var main = typeof args.text == "string"? {text: [args.text||"", "div", "content"]}: args.text
var list = [{text: [args.title||"", "div", "title"]}, main]
args.inputs && args.inputs.forEach(function(input) {
if (typeof input == "string") {
list.push({inner: input, type: "label", style: {"margin-right": "5px"}})
@ -726,6 +728,7 @@ function Plugin(page, pane, field, runs) {
}
var plugin = Meta(field, (field.Script && field.Script.init || function() {
})(run, field, option, output)||{}, {
ontoast: page.ontoast,
Inputs: {},
Appends: function() {
var name = "args"+kit.Selector(option, "input.args.temp").length
@ -943,8 +946,14 @@ function Plugin(page, pane, field, runs) {
})
},
show_after: function(msg) {},
Option: function(key, value) {
if (value != undefined) {
option[key] && (option[key].value = value)
}
return option[key]? option[key].value: ""
},
upload: function(event) {
ctx.Upload(option.upload.files[0], function(event, msg) {
ctx.Upload({river: meta.river, table: plugin.Option("table")}, option.upload.files[0], function(event, msg) {
kit.OrderTable(kit.AppendTable(kit.AppendChilds(output, "table"), ctx.Table(msg), msg.append))
page.ontoast("上传成功")
}, function(event) {

View File

@ -658,7 +658,7 @@ kit = toolkit = {__proto__: document,
}
return list
},
Opacity: function(obj, list, interval) {
Opacity: function(obj, interval, list) {
kit.List(kit.Value(list, [0, 0.2, 0.4, 0.6, 1.0]), function(value) {
obj.style.opacity = value
}, kit.Value(interval, 150))