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

add chat.storm.delete

This commit is contained in:
shaoying 2019-10-14 08:46:34 +08:00
parent 57ba474020
commit 56b6f61b0e
7 changed files with 173 additions and 94 deletions

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-10-13 12:01:52`, `mac`, 640,
`2019-10-13 19:19:17`, `mac`, 639,
}

View File

@ -333,11 +333,13 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
return
}
m.Option("river", rid)
// 命令列表
if len(arg) == 0 {
m.Confm("flow", []string{rid, "tool"}, func(key string, value map[string]interface{}) {
m.Push("key", key)
m.Push("count", len(value["list"].([]interface{})))
m.Push("status", kit.Format(value["status"]))
})
m.Sort("key").Table()
return
@ -351,6 +353,16 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
m.Conf("flow", []string{rid, "tool", arg[1]}, "")
m.Echo(str)
case "clone":
args := []string{}
m.Confm("flow", []string{rid, "tool", arg[2], "list"}, func(index int, value map[string]interface{}) {
args = append(args, kit.Format(value["node"]), kit.Format(value["group"]), kit.Format(value["index"]), kit.Format(value["name"]))
})
m.Cmdy(".steam", rid, "spawn", arg[1], args)
case "save":
m.Confv("flow", []string{rid, "tool", arg[1], "status"}, arg[2])
default:
// 命令列表
m.Set("option", "name")

View File

@ -93,7 +93,7 @@ var page = Page({
"退出登录": function(event) {
kit.confirm("logout?") && page.login.Pane.Exit()
},
}, ["修改昵称", "退出登录"], function(value, meta, event) {
}, ["修改昵称", "退出登录"], function(event, value, meta) {
meta[value](event)
}))
},
@ -232,6 +232,7 @@ var page = Page({
},
},
Button: ["创建", "共享"],
Choice: ["创建", "共享"],
}
},
initTarget: function(page, field, option, output) {
@ -371,8 +372,8 @@ var page = Page({
page.plugin && page.plugin.Plugin.onfigure("canvas")
},
"添加": function(event, value) {
page.plugin && page.plugin.Plugin.Clone().Select()
"复制": function(event, value) {
page.plugin && page.plugin.Plugin.Clone()
},
"删除": function(event, value) {
page.plugin && page.plugin.Plugin.Delete()
@ -402,7 +403,7 @@ var page = Page({
Button: [["layout", "聊天", "办公", "工作", "最高", "最宽", "最大"],
"", "刷新", "清屏", "并行", "串行",
"", ["display", "表格", "编辑", "绘图"],
"", "添加", "删除", "加参", "减参",
"", "复制", "删除", "加参", "减参",
"", "执行", "下载", "清空", "返回",
],
Choice: [
@ -439,13 +440,13 @@ var page = Page({
"创建": function(event) {
page.steam.Pane.Show()
},
"共享": function(event) {
"共享": function(event, value, meta, line) {
var user = kit.prompt("分享给用户")
if (user == null) {return}
page.login.Pane.Run(event, ["relay", "storm", "username", user, "url", ctx.Share({
"river": page.river.Pane.which.get(),
"storm": page.storm.Pane.which.get(),
"storm": line.key,
"layout": page.action.Pane.Layout(),
})], function(msg) {
var url = location.origin+location.pathname+"?relay="+msg.result.join("")
@ -454,12 +455,43 @@ var page = Page({
}})
})
},
"刷新": function(event) {
"刷新": function(event) {var pane = field.Pane
pane.Save(""), field.Pane.Show()
},
"复制": function(event, value, meta, line) {var pane = field.Pane
var name = kit.prompt("名称")
name && pane.Run(event, [river, "clone", name, line.key], function(msg) {
field.Pane.Show(name)
})
},
"删除": function(event, value, meta, line) {var pane = field.Pane
kit.confirm("删除") && pane.Run(event, [river, "delete", line.key], function(msg) {
field.Pane.Show()
})
},
"恢复": function(event, value, meta, line) {
var status = JSON.parse(line.status)
kit.Selector(page.action, "fieldset.item", function(field, index) {
var args = status[index].args
kit.Selector(field, "input.args", function(input, index) {
input.value = args[index]||""
})
})
},
"保存": function(event, value, meta, line) {var pane = field.Pane
field.Pane.Run(event, [river, "save", pane.which.get(),
JSON.stringify(kit.Selector(page.action, "fieldset.item", function(field) {
return {name: field.Meta.name, args: kit.Selector(field, "input.args", function(input) {
return input.value
})}
}))], function(msg) {
page.toast.Pane.Show("保存成功")
})
},
},
Button: ["创建", "共享"],
Choice: ["创建", "共享"],
Detail: ["刷新"],
Button: ["刷新", "创建"],
Choice: ["刷新", "创建"],
Detail: ["保存", "恢复", "共享", "复制", "删除"],
}
},
initSteam: function(page, field, option, output) {
@ -537,8 +569,8 @@ var page = Page({
kit.AppendTable(device, list, ["key", "index", "name", "help"], function(value, key, com, i, tr, event) {
pane.Select(com, pod)
}, function(value, key, com, i, tr, event) {
page.carte.Pane.Show(event, shy({}, ["创建"], function(event, item) {
pane.Create(com.key)
page.carte.Pane.Show(event, shy(pane.Action, pane.Detail, function(event, item, meta) {
meta[item](event, value, key, com)
}))
})
},
@ -577,8 +609,16 @@ var page = Page({
"全选": function(event) {
kit.Selector(device, "tr.normal", function(item) {item.firstChild.click()})
},
"刷新": function(event) {
field.Pane.Save(""), field.Pane.Show(), field.Pane.Show()
},
"创建": function(event, value, key, line) {
field.Pane.Create(line.key)
},
},
Button: ["取消", "清空", "全选"],
Button: ["取消", "清空", "全选", "刷新"],
Choice: ["取消", "清空", "全选", "刷新"],
Detail: ["创建"],
}
},
init: function(page) {

View File

@ -58,11 +58,11 @@ ctx = context = (function(kit) {var ctx = {__proto__: kit,
},
}, msg.event = event
kit.Log("event", ++arguments.callee.meta.order, event.type, proto.name.join("."), msg)
kit.Log("event", ++arguments.callee.meta.order, event.type, (proto.name||[document.title]).join("."), msg)
return msg
}),
Share: shy("共享链接", function(objs, clear) {objs = objs || {}
!clear && kit.Item(this.Search(), function(key, value) {objs[key] = value})
!clear && kit.Item(this.Search(), function(key, value) {objs[key] || (objs[key] = value)})
return location.origin+location.pathname+"?"+kit.Item(objs, function(key, value) {
return kit.List(value, function(value) {return key+"="+encodeURIComponent(value)}).join("&")
}).join("&")

View File

@ -127,6 +127,7 @@ function Meta(zone, target, obj) {
return meta
}
function Page(page) {
kit.device.isWeiXin = true
var script = {}, record = ""
page = Meta([document.title], document.body, page, {check: true,
onload: function(event) {
@ -144,6 +145,8 @@ function Page(page) {
msg.result && msg.result[0]? (page.who.set(msg.nickname[0]), page.init(page))
:page.login.Pane.Dialog(1, 1)
}): page.init(page)
page.Button()
page.Status()
}
// 事件回调
@ -411,7 +414,7 @@ function Page(page) {
Show: function(event, cb) {if (!cb.list || cb.list.length == 0) {return}
output.innerHTML = ""
kit.AppendActions(output, cb.list, function(event, value) {
kit._call(cb, [value, cb.meta, event]) && field.Pane.Hide()
kit._call(cb, [event, value, cb.meta]) && field.Pane.Hide()
}, true)
var pos = {display: "block", left: event.x, top: event.y}
@ -506,25 +509,27 @@ function Page(page) {
}]}, {type: "br"},
])
// 微信接口
kit.device.isWeiXin && page.login.Pane.Run(event, ["weixin"], function(msg) {
msg.appid[0] && page.Include(["https://res.wx.qq.com/open/js/jweixin-1.4.0.js"], function(event) {
wx.error(function(res){})
wx.ready(function(){
page.scanQRCode = function(cb) {
}
page.getLocation = function(cb) {
wx.getLocation({success: cb})
}
page.openLocation = function(latitude, longitude, name) {
wx.openLocation({latitude: parseFloat(latitude), longitude: parseFloat(longitude), name:name||"here"})
}
}), wx.config({jsApiList: ["closeWindow", "scanQRCode", "getLocation", "openLocation"],
appId: msg.appid[0], nonceStr: msg.nonce[0], timestamp: msg.timestamp[0], signature: msg.signature[0]})
})
})
return {
WeiXin: function() {
// 微信接口
kit.device.isWeiXin && page.login.Pane.Run(event, ["weixin"], function(msg) {
msg.appid[0] && page.Include(["https://res.wx.qq.com/open/js/jweixin-1.4.0.js"], function(event) {
wx.error(function(res){})
wx.ready(function(){
page.scanQRCode = function(cb) {
}
page.getLocation = function(cb) {
wx.getLocation({success: cb})
}
page.openLocation = function(latitude, longitude, name) {
wx.openLocation({latitude: parseFloat(latitude), longitude: parseFloat(longitude), name:name||"here"})
}
}), wx.config({jsApiList: ["closeWindow", "scanQRCode", "getLocation", "openLocation"],
appId: msg.appid[0], nonceStr: msg.nonce[0], timestamp: msg.timestamp[0], signature: msg.signature[0]})
})
})
},
Login: function(username, password, cb) {
field.Pane.Run(event, [username, password], function(msg) {cb(msg.result && msg.result[0] || "")})
},
@ -601,6 +606,7 @@ function Page(page) {
},
Pane: Pane,
}), page.which = page.Sync("layout"), page.who = page.Sync("username")
kit.Log("init", "page", page)
return window.onload = page.onload, page
}
@ -633,6 +639,7 @@ function Pane(page, field) {
}),
Append: shy("添加列表", function(type, line, key, which, cb) {type = type || line.type
var ui = pane.View(output, type, line, key)
if (!ui.item) {return}
ui.item.onclick = function(event) { if (pane.which.get() == line[which]) {return}
pane.Event(event, {}, {name: pane.Zone("select", line[key[0]])})
@ -658,8 +665,8 @@ function Pane(page, field) {
event.stopPropagation()
}
ui.item.oncontextmenu = function(event) {
pane.Detail && page.carte.Pane.Show(event, shy({}, pane.Detail, function(value, meta, event) {
pane.Check(event, value)
pane.Detail && page.carte.Pane.Show(event, shy({}, pane.Detail, function(event, value, meta) {
pane.Check(event, value, meta, line)
}))
}
@ -784,25 +791,27 @@ function Pane(page, field) {
pane.Event(event, {}, {name: pane.Zone("click", value)})
page.script("record", [name, value])
var cb = function() {}
if (pane.Action && pane.Action.meta && typeof pane.Action.meta[value] == "function") {
kit._call(pane.Action.meta[value], [event, value])
cb = pane.Action.meta[value]
} else if (pane.Action && typeof pane.Action[value] == "function") {
kit._call(pane.Action[value], [event, value])
cb = pane.Action[value]
} else if (typeof pane.Action == "function") {
kit._call(pane.Action, [event, value])
cb = pane.Action
} else if (typeof pane[value] == "function") {
kit._call(pane[value], [event, value])
cb = pane[value]
}
if (page.Action && page.Action.meta && typeof page.Action.meta[value] == "function") {
kit._call(page.Action.meta[value], [event, value])
cb = page.Action.meta[value]
} else if (page.Action && typeof page.Action[value] == "function") {
kit._call(page.Action[value], [event, value])
cb = page.Action[value]
} else if (typeof page.Action == "function") {
kit._call(page.Action, [event, value])
cb = page.Action
} else if (typeof page[value] == "function") {
kit._call(page[value], [event, value])
cb = page[value]
}
kit._call(cb, arguments)
}),
Tutor: function() {var pane = field.Pane
var event = window.event
@ -978,7 +987,7 @@ function Pane(page, field) {
onaction: shy("事件列表", {
oncontextmenu: function(event) {
pane.Choice && page.carte.Pane.Show(event, shy({}, pane.Choice, function(value, meta, event) {
pane.Choice && page.carte.Pane.Show(event, shy({}, pane.Choice, function(event, value, meta) {
pane.Check(event, value)
}))
},
@ -1056,7 +1065,7 @@ function Plugin(page, pane, field, inits, runs) {
return JSON.stringify(field.Meta)
}),
Clone: shy("复制插件", function() {
return pane.Append("field", {text: plugin.Reveal(), init: meta.init, view: meta.view}, [], "").item.Plugin.Select()
return pane.Append("field", {text: plugin.Reveal(), init: meta.init, view: meta.view, group: meta.group}, [], "")
}),
Move: function() {
@ -1140,7 +1149,7 @@ function Plugin(page, pane, field, inits, runs) {
return item
}).length == 0 && plugin.Runs(event, cb)
}),
Last: shy("历史命令", function() {kit.notNone(plugin.History()) && plugin.Check(event)}),
Last: shy("历史命令", function(event) {kit.notNone(plugin.History()) && plugin.Check(event)}),
Runs: shy("执行命令", function(event, cb) {plugin.Run(event, plugin.Option(), cb)}),
Run: shy("执行命令", function(event, args, cb, silent) {var show = true
page.script("record", ["action", name].concat(args))
@ -1199,11 +1208,11 @@ function Plugin(page, pane, field, inits, runs) {
}),
onchoice: shy("菜单列表", {
"返回": "Last",
"添加": "Clone",
"复制": "Clone",
"加参": "Appends",
"减参": "Remove",
"删除": "Delete",
}, ["返回", "添加", "加参", "减参", "删除"], function(value, meta, event) {
}, ["返回", "复制", "加参", "减参", "删除"], function(event, value, meta) {
kit._call(plugin, plugin[meta[value]])
return true
}),
@ -1273,13 +1282,13 @@ function Inputs(plugin, meta, item, target, option) {
onblur: function(event) {type == "text" && input.which.set(target.value)},
onclick: function(event) {plugin.Select()
// Event入口 2.0
type == "button" && input.Event(event, {}) && kit.Value(input[item.cb], plugin[item.cb], function() {
type == "button" && input.Event(event, {}) && kit.Value(input[item.cb], plugin[item.cb], function(event, target) {
plugin.Check(event)
})(event, input)
})(event, target)
},
onchange: function(event) {
// Event入口 2.1
type == "select" && input.Event(event, {}) && plugin.Check(event, item.action == "auto"? undefined: target)
type == "select" && input.Event(event, {}) && plugin.History(target.value, target) && plugin.Check(event, item.action == "auto"? undefined: target)
},
ondblclick: function(event) {
var txt = kit.History("txt", -1);
@ -1433,7 +1442,7 @@ function Output(plugin, type, msg, cb, target, option) {
"绘图": "_canvas",
"下载": "Download",
"清空": "clear",
}, ["表格", "绘图", "下载", "清空"], function(value, meta, event) {
}, ["表格", "绘图", "下载", "清空"], function(event, value, meta) {
kit._call(output, output[meta[value]])
return true
}),

View File

@ -24,7 +24,11 @@ kit = toolkit = (function() {var kit = {__proto__: document,
},
alert: function(text) {alert(JSON.stringify(text))},
confirm: function(text) {return confirm(text)},
prompt: function(text) {return prompt(text)},
prompt: function(text, cb) {
var text = prompt(text)
text && kit._call(cb, text)
return text
},
reload: function() {location.reload()},
// 日志调试
History: shy("历史记录", {lay: [], cmd: [], txt: [], key: []}, function(type, index, data) {var meta = arguments.callee.meta
@ -642,7 +646,7 @@ function Canvas(plugin, option, output, width, height, space, msg) {
var conf = {
font: "monospace", text: "hi", tool: "stroke", style: "black",
type: "trend", shape: "drawText", means: "drawPoint",
type: "ticket", shape: "drawText", means: "drawPoint",
limits: {scale: 3, drawPoint: 1, drawPoly: 3},
axies: {style: "black", width: 2},
@ -1229,8 +1233,8 @@ function Canvas(plugin, option, output, width, height, space, msg) {
what.refresh()
},
trans: {
"折线图": ["type", "trend"],
"股价图": ["type", "ticket"],
"折线图": ["type", "trend"],
"柱状图": ["type", "stick"],
"饼状图": ["type", "weight"],
@ -1311,15 +1315,15 @@ function Canvas(plugin, option, output, width, height, space, msg) {
}
var action = kit.AppendAction(kit.AppendChild(output, [{view: ["action"]}]).last, [
["折线图", "股价图", "柱状图", "饼状图"],
["移动", "旋转", "缩放"],
["文本", "直线", "折线", "矩形", "圆形", "椭圆"],
["辅助点", "辅助线"],
["画笔", "画刷"],
["黑色", "红色", "绿色", "黄色", "蓝色", "紫色", "青色", "白色", "随机色", "默认色"],
["", "股价图", "折线图", "柱状图", "饼状图"],
["", "移动", "旋转", "缩放"],
["", "文本", "直线", "折线", "矩形", "圆形", "椭圆"],
["", "辅助点", "辅助线"],
["", "画笔", "画刷"],
["", "黑色", "红色", "绿色", "黄色", "蓝色", "紫色", "青色", "白色", "随机色", "默认色"],
"", "清屏", "刷新", "播放", "回退",
"", "标签", "快捷键",
], function(value, event) {
], function(event, value) {
var map = what.trans[value]
conf[map[0]] && (conf[map[0]] = map[1]) || what[map[0]] && what[map[0]](value, event)
what.refresh()

View File

@ -1,6 +1,4 @@
var page = Page({
login: true,
conf: {border: 4},
var page = Page({check: false, conf: {border: 4},
onlayout: function(event, sizes) {
var height = document.body.clientHeight-page.conf.border
var width = document.body.clientWidth-page.conf.border
@ -36,6 +34,40 @@ var page = Page({
}
},
Action: {
title: function(event, item, value, page) {
ctx.Search("layout", ctx.Search("layout")? "": "max")
},
user: function(event, item, value, page) {
page.carte.Pane.Show(event, shy({
"修改昵称": function(event) {
var name = kit.prompt("new name")
name && page.login.Pane.Run(event, ["rename", name], function(msg) {
page.header.Pane.State("user", name)
})
},
"退出登录": function(event) {
kit.confirm("logout?") && page.login.Pane.Exit()
},
}, ["修改昵称", "退出登录"], function(event, value, meta) {
meta[value](event)
}))
},
menu: function() {
page.text.Pane.Menu()
},
tree: function() {
page.tree.Pane.Tree()
},
},
Button: shy({title: "github.com/shylinux/context", tree: "tree", menu: "menu"}, ["tree", "menu"], function(key, value) {var meta = arguments.callee.meta
return kit.isNone(key)? meta: kit.isNone(value)? meta[key]: (meta[key] = value, page.header.Pane.Show())
}),
Status: shy({title: '<a href="mailto:shylinux@163.com">shylinux@163.com</a>', text: "0", menu: "0"}, ["text", "menu"], function(key, value) {var meta = arguments.callee.meta
return kit.isNone(key)? meta: kit.isNone(value)? meta[key]: (meta[key] = value, page.footer.Pane.Show())
}),
initTree: function(page, field, form, output) {
var ui = kit.AppendChild(output, [
{"view": ["back"], "name": "back"}, {"view": ["gap"]},
@ -53,7 +85,7 @@ var page = Page({
page.onlayout()
})
ctx.Run(form.dataset, [], function(msg) {
ctx.Run(event, form.dataset, [], function(msg) {
ui.back.innerHTML = "", kit.AppendChild(ui.back, [
{"button": ["知识", function(event) {
ctx.Search({"level": "", "class": "", "favor": ""})
@ -64,12 +96,12 @@ var page = Page({
}]}
})))
ui.tree.innerHTML = "", kit.AppendChild(ui.tree, ctx.Table(msg, function(value, index) {
ui.tree.innerHTML = "", kit.AppendChild(ui.tree, msg.Table(function(value, index) {
return value.file.endsWith("/") && {"text": [value.file, "div"], click: function(event, target) {
location.hash = "", ctx.Search({"class": ctx.Search("class")+value.file, "favor": ""})
}}
}))
ui.list.innerHTML = "", kit.AppendChild(ui.list, ctx.Table(msg, function(value, index) {
ui.list.innerHTML = "", kit.AppendChild(ui.list, msg.Table(function(value, index) {
return !value.file.endsWith("/") && {"text": [value.time.substr(5, 5)+" "+value.file, "div"], click: function(event, target) {
location.hash = "", ctx.Search("favor", value.file)
}}
@ -84,10 +116,10 @@ var page = Page({
{"view": ["text", "div", "", "text"]},
])
ui.text.onscroll = function(event) {
page.footer.Pane.State("text", kit.Position(ui.text))
page.Status("text", kit.Position(ui.text))
}
ui.menu.onscroll = function(event) {
page.footer.Pane.State("menu", kit.Position(ui.menu))
page.Status("menu", kit.Position(ui.menu))
}
return {
Menu: function(value) {
@ -129,11 +161,11 @@ var page = Page({
ctx.Search("layout") == "max" && (page.Conf("tree.display", "none"), page.Conf("menu.display", "none"))
ctx.Run(form.dataset, [], function(msg) {
ctx.Run(event, form.dataset, [], function(msg) {
ui.menu.innerHTML = "", ui.text.innerHTML = msg.result? msg.result.join(""): ""
kit.AppendChild(ui.menu, [{"tree": kit.OrderText(field, ui.text)}])
page.footer.Pane.State("count", msg.visit_count)
page.footer.Pane.State("visit", msg.visit_total)
page.Status("count", msg.visit_count)
page.Status("visit", msg.visit_total)
page.onlayout()
return
})
@ -141,26 +173,8 @@ var page = Page({
}
},
init: function(page) {
page.footer.Pane.Order({"text": "", "menu": "", "count": "0", "visit": "0"}, ["visit", "count", "menu", "text"])
page.header.Pane.Order({"tree": "tree", "menu": "menu"}, ["tree", "menu"], function(event, item, value) {
switch (item) {
case "menu":
page.text.Pane.Menu()
break
case "tree":
page.tree.Pane.Tree()
break
case "title":
ctx.Search("layout", ctx.Search("layout")? "": "max")
break
default:
page.confirm("logout?") && page.login.Pane.Exit()
}
})
page.header.style.height = "32px"
page.footer.style.height = "32px"
page.tree.Pane.Show()
page.text.Pane.Show()
page.Button("tree", "tree")
},
})