mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-26 09:14:06 +08:00
add chat.js
This commit is contained in:
parent
54ea478135
commit
75ae5cdb80
@ -1,3 +1,5 @@
|
|||||||
|
~chat
|
||||||
|
config save tmp/flow.json flow
|
||||||
~ssh
|
~ssh
|
||||||
config save tmp/cert.json cert trust
|
config save tmp/cert.json cert trust
|
||||||
~aaa
|
~aaa
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
config load tmp/auth.json auth
|
config load tmp/auth.json auth
|
||||||
~ssh
|
~ssh
|
||||||
config load tmp/cert.json cert trust
|
config load tmp/cert.json cert trust
|
||||||
|
~chat
|
||||||
|
config load tmp/flow.json flow
|
||||||
|
|
||||||
source etc/common.shy
|
source etc/common.shy
|
||||||
~ssh
|
~ssh
|
||||||
|
@ -1788,6 +1788,14 @@ func (m *Message) Confi(key string, arg ...interface{}) int {
|
|||||||
return kit.Int(m.Confv(key, arg...))
|
return kit.Int(m.Confv(key, arg...))
|
||||||
}
|
}
|
||||||
func (m *Message) Confv(key string, args ...interface{}) interface{} {
|
func (m *Message) Confv(key string, args ...interface{}) interface{} {
|
||||||
|
if strings.Contains(key, ".") {
|
||||||
|
target := m.target
|
||||||
|
defer func() { m.target = target }()
|
||||||
|
|
||||||
|
ps := strings.Split(key, ".")
|
||||||
|
m.target, key = m.Sess(ps[0], false).target, ps[1]
|
||||||
|
}
|
||||||
|
|
||||||
var config *Config
|
var config *Config
|
||||||
m.Match(key, false, func(m *Message, s *Context, c *Context, key string) bool {
|
m.Match(key, false, func(m *Message, s *Context, c *Context, key string) bool {
|
||||||
if x, ok := c.Configs[key]; ok {
|
if x, ok := c.Configs[key]; ok {
|
||||||
|
@ -51,10 +51,27 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
"componet_view": "Ocean", "componet_init": "initOcean",
|
"componet_view": "Ocean", "componet_init": "initOcean",
|
||||||
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"ocean"},
|
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"ocean"},
|
||||||
},
|
},
|
||||||
|
map[string]interface{}{"componet_name": "steam", "componet_tmpl": "fieldset",
|
||||||
|
"componet_view": "Steam", "componet_init": "initSteam",
|
||||||
|
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"steam"},
|
||||||
|
},
|
||||||
map[string]interface{}{"componet_name": "river", "componet_tmpl": "fieldset",
|
map[string]interface{}{"componet_name": "river", "componet_tmpl": "fieldset",
|
||||||
"componet_view": "River", "componet_init": "initRiver",
|
"componet_view": "River", "componet_init": "initRiver",
|
||||||
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"river"},
|
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"river"},
|
||||||
},
|
},
|
||||||
|
map[string]interface{}{"componet_name": "storm", "componet_tmpl": "fieldset",
|
||||||
|
"componet_view": "Storm", "componet_init": "initStorm",
|
||||||
|
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"storm"},
|
||||||
|
},
|
||||||
|
|
||||||
|
map[string]interface{}{"componet_name": "target", "componet_tmpl": "fieldset",
|
||||||
|
"componet_view": "Target", "componet_init": "initTarget",
|
||||||
|
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"target"},
|
||||||
|
},
|
||||||
|
map[string]interface{}{"componet_name": "source", "componet_tmpl": "fieldset",
|
||||||
|
"componet_view": "Source", "componet_init": "initSource",
|
||||||
|
"componet_ctx": "web.chat", "componet_cmd": "flow", "arguments": []interface{}{"source"},
|
||||||
|
},
|
||||||
|
|
||||||
map[string]interface{}{"componet_name": "footer", "componet_tmpl": "fieldset",
|
map[string]interface{}{"componet_name": "footer", "componet_tmpl": "fieldset",
|
||||||
"componet_view": "Footer", "componet_init": "initFooter",
|
"componet_view": "Footer", "componet_init": "initFooter",
|
||||||
@ -89,15 +106,75 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
"tool_path": "/Applications/wechatwebdevtools.app/Contents/MacOS/cli",
|
"tool_path": "/Applications/wechatwebdevtools.app/Contents/MacOS/cli",
|
||||||
"project_path": "/Users/shaoying/context/usr/client/mp",
|
"project_path": "/Users/shaoying/context/usr/client/mp",
|
||||||
}, Help: "聊天记录"},
|
}, Help: "聊天记录"},
|
||||||
|
|
||||||
|
"flow": &ctx.Config{Name: "flow", Value: map[string]interface{}{}, Help: "聊天记录"},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ctx.Command{
|
Commands: map[string]*ctx.Command{
|
||||||
"flow": &ctx.Command{Name: "flow", Help: "信息流", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
"flow": &ctx.Command{Name: "flow", Help: "信息流", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case "ocean":
|
case "ocean":
|
||||||
m.Confm("")
|
m.Confm("ssh.cert", func(key string, value map[string]interface{}) {
|
||||||
m.Echo("ocean")
|
m.Add("append", "key", key)
|
||||||
|
m.Add("append", "user", value["user"])
|
||||||
|
})
|
||||||
|
m.Table()
|
||||||
case "river":
|
case "river":
|
||||||
m.Echo("river")
|
if len(arg) == 1 {
|
||||||
|
m.Confm("flow", func(key string, value map[string]interface{}) {
|
||||||
|
m.Add("append", "key", key)
|
||||||
|
m.Add("append", "name", kit.Chains(value, "conf.name"))
|
||||||
|
m.Add("append", "create_user", kit.Chains(value, "conf.create_user"))
|
||||||
|
m.Add("append", "create_time", kit.Chains(value, "conf.create_time"))
|
||||||
|
})
|
||||||
|
m.Table()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch arg[1] {
|
||||||
|
case "create":
|
||||||
|
h := kit.Hashs("uniq")
|
||||||
|
|
||||||
|
m.Conf("flow", h, map[string]interface{}{
|
||||||
|
"conf": map[string]interface{}{
|
||||||
|
"create_time": m.Time(),
|
||||||
|
"create_user": m.Option("username"),
|
||||||
|
"name": kit.Select("what", arg, 2),
|
||||||
|
},
|
||||||
|
"user": map[string]interface{}{},
|
||||||
|
"text": map[string]interface{}{},
|
||||||
|
})
|
||||||
|
m.Echo(h)
|
||||||
|
|
||||||
|
case "wave":
|
||||||
|
if len(arg) == 3 {
|
||||||
|
m.Confm("flow", []string{arg[2], "text.list"}, func(index int, value map[string]interface{}) {
|
||||||
|
m.Add("append", "index", index)
|
||||||
|
m.Add("append", "type", value["type"])
|
||||||
|
m.Add("append", "text", value["text"])
|
||||||
|
})
|
||||||
|
m.Table()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Conf("flow", []string{arg[2], "text.list.-2"}, map[string]interface{}{
|
||||||
|
"create_time": m.Time(),
|
||||||
|
"type": arg[3],
|
||||||
|
"text": arg[4],
|
||||||
|
})
|
||||||
|
|
||||||
|
count := m.Confi("flow", []string{arg[2], "text.count"}) + 1
|
||||||
|
m.Confi("flow", []string{arg[2], "text.count"}, count)
|
||||||
|
m.Echo("%d", count)
|
||||||
|
}
|
||||||
|
case "storm":
|
||||||
|
switch arg[1] {
|
||||||
|
case "wind":
|
||||||
|
switch arg[2] {
|
||||||
|
case "text":
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "steam":
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}},
|
}},
|
||||||
|
42
usr/librarys/chat.css
Normal file
42
usr/librarys/chat.css
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
fieldset.Ocean {
|
||||||
|
display:none;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
fieldset.River {
|
||||||
|
overflow:auto;
|
||||||
|
padding:0;
|
||||||
|
min-width:160px;
|
||||||
|
min-height:200px;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
fieldset.River div.output div.item {
|
||||||
|
|
||||||
|
}
|
||||||
|
fieldset.River div.output div.item:hover {
|
||||||
|
background-color:red;
|
||||||
|
|
||||||
|
}
|
||||||
|
fieldset.Target {
|
||||||
|
padding:0;
|
||||||
|
min-width:160px;
|
||||||
|
min-height:80px;
|
||||||
|
}
|
||||||
|
fieldset.Target div.output {
|
||||||
|
overflow:auto;
|
||||||
|
}
|
||||||
|
fieldset.Source {
|
||||||
|
padding:0;
|
||||||
|
min-width:160px;
|
||||||
|
min-height:30px;
|
||||||
|
}
|
||||||
|
fieldset.Storm {
|
||||||
|
padding:0;
|
||||||
|
min-width:160px;
|
||||||
|
min-height:200px;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
fieldset.Steam {
|
||||||
|
display:none;
|
||||||
|
padding:0;
|
||||||
|
}
|
163
usr/librarys/chat.js
Normal file
163
usr/librarys/chat.js
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
var page = Page({
|
||||||
|
initOcean: function(page, field, option) {
|
||||||
|
page.panes.ocean = field
|
||||||
|
ctx.Run(page, option.dataset, ["ocean"], function(msg) {
|
||||||
|
kit.Log(msg.result)
|
||||||
|
})
|
||||||
|
return [{"text": ["ocean"]}]
|
||||||
|
},
|
||||||
|
initRiver: function(page, field, option, output) {
|
||||||
|
page.panes.river = field
|
||||||
|
page.panes.channel = output
|
||||||
|
page.showRiver(page, option)
|
||||||
|
},
|
||||||
|
showRiver: function(page, option) {
|
||||||
|
page.panes.channel.innerHTML = ""
|
||||||
|
page.getRiver(page, option, function(line, index) {
|
||||||
|
page.conf.river = page.conf.river || page.showTarget(page, option, line.key) || line.key
|
||||||
|
kit.AppendChild(page.panes.channel, [{view: ["item", "div", line.name], click: function(event) {
|
||||||
|
if (page.conf.river == line.key) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
page.conf.river = line.key
|
||||||
|
page.showTarget(page, option, line.key)
|
||||||
|
}}])
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getRiver: function(page, option, cb) {
|
||||||
|
ctx.Run(page, option.dataset, ["river"], function(msg) {
|
||||||
|
ctx.Table(msg, function(line, index) {
|
||||||
|
cb(line, index)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
initTarget: function(page, field, option) {
|
||||||
|
page.panes.target = field
|
||||||
|
page.panes.output = field.querySelector("div.target.output")
|
||||||
|
ctx.Run(page, option.dataset, ["river"], function(msg) {
|
||||||
|
kit.Log(msg.result)
|
||||||
|
})
|
||||||
|
return [{"text": ["target"]}]
|
||||||
|
},
|
||||||
|
showTarget: function(page, option, id) {
|
||||||
|
page.panes.output.innerHTML = ""
|
||||||
|
page.getTarget(page, option, id, function(line, index) {
|
||||||
|
kit.AppendChild(page.panes.output, [{"view": ["item", "div", line.text]}])
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getTarget: function(page, option, id, cb) {
|
||||||
|
ctx.Run(page, option.dataset, ["river", "wave", id], function(msg) {
|
||||||
|
ctx.Table(msg, function(line, index) {
|
||||||
|
cb(line, index)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
initSource: function(page, field, option) {
|
||||||
|
var ui = kit.AppendChild(option, [{"view": ["input", "textarea"], "name": "input", "data": {"onkeyup": function(event){
|
||||||
|
if (event.key == "Enter" && !event.shiftKey) {
|
||||||
|
var value = event.target.value
|
||||||
|
kit.AppendChild(page.panes.output, [{"text" :[value, "div"]}])
|
||||||
|
page.panes.output.scrollBy(0,100)
|
||||||
|
// event.target.value = ""
|
||||||
|
ctx.Run(page, option.dataset, ["river", "wave", page.conf.river, "text", value], function(msg) {
|
||||||
|
kit.Log(msg.result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, "onkeydown": function(event) {
|
||||||
|
if (event.key == "Enter" && !event.shiftKey) {
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
}}}])
|
||||||
|
page.panes.input = ui.input
|
||||||
|
|
||||||
|
page.panes.source = field
|
||||||
|
ctx.Run(page, option.dataset, ["river"], function(msg) {
|
||||||
|
msg.Table(function(index, line) {
|
||||||
|
console.log(index)
|
||||||
|
console.log(line)
|
||||||
|
})
|
||||||
|
kit.Log(msg.result)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
},
|
||||||
|
initStorm: function(page, field, option) {
|
||||||
|
page.panes.storm = field
|
||||||
|
ctx.Run(page, option.dataset, ["river"], function(msg) {
|
||||||
|
kit.Log(msg.result)
|
||||||
|
})
|
||||||
|
return [{"text": ["storm"]}]
|
||||||
|
},
|
||||||
|
initSteam: function(page, field, option) {
|
||||||
|
page.panes.steam = field
|
||||||
|
ctx.Run(page, option.dataset, ["river"], function(msg) {
|
||||||
|
kit.Log(msg.result)
|
||||||
|
})
|
||||||
|
return [{"text": ["steam"]}]
|
||||||
|
},
|
||||||
|
|
||||||
|
panes: {},
|
||||||
|
range: function(sizes) {
|
||||||
|
sizes = sizes || {}
|
||||||
|
var width = document.body.offsetWidth
|
||||||
|
var river_width = page.panes.river.offsetWidth
|
||||||
|
var storm_width = page.panes.storm.offsetWidth
|
||||||
|
var source_width = page.panes.source.offsetWidth
|
||||||
|
var source_height = page.panes.source.offsetHeight
|
||||||
|
var height = document.body.offsetHeight-80
|
||||||
|
|
||||||
|
|
||||||
|
page.panes.river.style.height = height+"px"
|
||||||
|
page.panes.storm.style.height = height+"px"
|
||||||
|
page.panes.target.style.height = (height-source_height)+"px"
|
||||||
|
if (sizes.left != undefined) {
|
||||||
|
if (sizes.left == 0) {
|
||||||
|
page.panes.river.style.display = "none"
|
||||||
|
} else {
|
||||||
|
page.panes.river.style.display = "block"
|
||||||
|
page.panes.river.style.width = sizes.left+"px"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sizes.right != undefined) {
|
||||||
|
if (sizes.right == 0) {
|
||||||
|
page.panes.storm.style.display = "none"
|
||||||
|
} else {
|
||||||
|
page.panes.storm.style.display = "block"
|
||||||
|
page.panes.storm.style.width = sizes.right+"px"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sizes.middle != undefined) {
|
||||||
|
page.panes.source.style.height = sizes.middle+"px"
|
||||||
|
page.panes.target.style.height = (height-sizes.middle-4)+"px"
|
||||||
|
page.panes.output.style.height = (height-sizes.middle-8)+"px"
|
||||||
|
page.panes.input.style.height = (sizes.middle-7)+"px"
|
||||||
|
} else {
|
||||||
|
var source_height = page.panes.source.offsetHeight-10
|
||||||
|
page.panes.input.style.height = source_height+"px"
|
||||||
|
page.panes.output.style.height = source_height+"px"
|
||||||
|
}
|
||||||
|
|
||||||
|
var source_width = page.panes.source.offsetWidth-10
|
||||||
|
page.panes.input.style.width = source_width+"px"
|
||||||
|
page.panes.output.style.width = source_width+"px"
|
||||||
|
},
|
||||||
|
|
||||||
|
init: function(exp) {
|
||||||
|
var page = this
|
||||||
|
|
||||||
|
document.querySelectorAll("body>fieldset").forEach(function(field) {
|
||||||
|
var option = field.querySelector("form.option")
|
||||||
|
var output = field.querySelector("div.output")
|
||||||
|
|
||||||
|
var init = page[field.dataset.init]
|
||||||
|
if (typeof init == "function") {
|
||||||
|
var conf = page[field.dataset.init](page, field, option, output)
|
||||||
|
if (conf) {
|
||||||
|
kit.AppendChild(output, conf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
window.onresize = this.range
|
||||||
|
this.range({left:120, middle:60, right:120})
|
||||||
|
},
|
||||||
|
conf: {},
|
||||||
|
})
|
@ -7,7 +7,7 @@ ctx = context = {
|
|||||||
}
|
}
|
||||||
this.GET("", option, function(msg) {
|
this.GET("", option, function(msg) {
|
||||||
msg = msg && msg[0]
|
msg = msg && msg[0]
|
||||||
// msg && (msg.__proto__ = (page || {}))
|
msg && (msg.__proto__ = (page || {}))
|
||||||
typeof cb == "function" && cb(msg || {})
|
typeof cb == "function" && cb(msg || {})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user