From 56b6f61b0e3e79f4d2dcae54db6f3621024bde31 Mon Sep 17 00:00:00 2001 From: shaoying Date: Mon, 14 Oct 2019 08:46:34 +0800 Subject: [PATCH] add chat.storm.delete --- src/contexts/cli/version.go | 2 +- src/examples/chat/chat.go | 12 ++++++ usr/librarys/chat.js | 66 ++++++++++++++++++++++------ usr/librarys/context.js | 4 +- usr/librarys/example.js | 85 ++++++++++++++++++++----------------- usr/librarys/toolkit.js | 24 ++++++----- usr/librarys/wiki.js | 74 +++++++++++++++++++------------- 7 files changed, 173 insertions(+), 94 deletions(-) diff --git a/src/contexts/cli/version.go b/src/contexts/cli/version.go index 844460b5..152aa72d 100644 --- a/src/contexts/cli/version.go +++ b/src/contexts/cli/version.go @@ -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, } diff --git a/src/examples/chat/chat.go b/src/examples/chat/chat.go index 8de13c66..cac28227 100644 --- a/src/examples/chat/chat.go +++ b/src/examples/chat/chat.go @@ -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") diff --git a/usr/librarys/chat.js b/usr/librarys/chat.js index 5d58cd89..a14ab110 100644 --- a/usr/librarys/chat.js +++ b/usr/librarys/chat.js @@ -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) { diff --git a/usr/librarys/context.js b/usr/librarys/context.js index 4c61413c..f0badbcb 100644 --- a/usr/librarys/context.js +++ b/usr/librarys/context.js @@ -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("&") diff --git a/usr/librarys/example.js b/usr/librarys/example.js index 7343ce07..f0fcc170 100644 --- a/usr/librarys/example.js +++ b/usr/librarys/example.js @@ -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 }), diff --git a/usr/librarys/toolkit.js b/usr/librarys/toolkit.js index 028c552a..b2d57d61 100644 --- a/usr/librarys/toolkit.js +++ b/usr/librarys/toolkit.js @@ -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() diff --git a/usr/librarys/wiki.js b/usr/librarys/wiki.js index 59be0120..63c15bee 100644 --- a/usr/librarys/wiki.js +++ b/usr/librarys/wiki.js @@ -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: 'shylinux@163.com', 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") }, })