diff --git a/src/contexts/cli/version.go b/src/contexts/cli/version.go index 85ba8c64..ef51d834 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-05 11:17:52`, `mac`, 638, + `2019-10-05 14:55:37`, `mac`, 639, } diff --git a/src/examples/chat/chat.go b/src/examples/chat/chat.go index a5d32e01..8de13c66 100644 --- a/src/examples/chat/chat.go +++ b/src/examples/chat/chat.go @@ -44,6 +44,9 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心", map[string]interface{}{"name": "carte", "tmpl": "fieldset", "view": "Carte dialog", "init": "initCarte", }, + map[string]interface{}{"name": "debug", + "tmpl": "fieldset", "view": "Debug dialog", "init": "initDebug", + }, map[string]interface{}{"name": "login", "tmpl": "fieldset", "view": "Login dialog", "init": "initLogin", "ctx": "web.chat", "cmd": "login", diff --git a/usr/librarys/chat.js b/usr/librarys/chat.js index 3302d155..effb41fe 100644 --- a/usr/librarys/chat.js +++ b/usr/librarys/chat.js @@ -537,6 +537,9 @@ var page = Page({check: true, "返回": function(event, value) { page.plugin && page.plugin.Plugin.Last() }, + "调试": function(event, value) { + page.debug.Pane.Show() + }, }, Button: [["layout", "聊天", "办公", "工作", "最高", "最宽", "最大"], "", "刷新", "清屏", "并行", "串行", @@ -546,7 +549,7 @@ var page = Page({check: true, ], Choice: [ ["layout", "聊天", "办公", "工作"], - "刷新", "清屏", "并行", "串行", + "刷新", "清屏", "并行", "串行", "调试", ], } }, diff --git a/usr/librarys/example.css b/usr/librarys/example.css index 57e5985b..00af4927 100644 --- a/usr/librarys/example.css +++ b/usr/librarys/example.css @@ -216,6 +216,28 @@ fieldset.dialog.Carte>div.output div.space { border:solid 1px gray; margin-top:8px; } +fieldset.dialog.Debug { + height:300px; + opacity:0.8; +} +fieldset.dialog.Debug tr.hide { + display:none; +} +fieldset.dialog.Debug tr.event { + display:red; +} +fieldset.dialog.Debug tr.run { + background-color:lightgreen; +} +fieldset.dialog.Debug tr.key { + background-color:lightyellow; +} +fieldset.dialog.Debug>div.output table th { + min-width:30px; +} +fieldset.dialog.Debug>div.output table td { + min-width:10px; +} fieldset.Login { font-size:28px; diff --git a/usr/librarys/example.js b/usr/librarys/example.js index b7c94b20..d047aa25 100644 --- a/usr/librarys/example.js +++ b/usr/librarys/example.js @@ -5,6 +5,8 @@ function Meta(zone, target, obj) { a.__proto__ = arguments[i], a = arguments[i] } + var names = obj && obj.Event && obj.Event.meta && obj.Event.meta.name && obj.Event.meta.name.concat([zone]) || [zone] + // 构造对象 var id = 1 var conf = {}, conf_cb = {}, old @@ -12,6 +14,9 @@ function Meta(zone, target, obj) { var cache = {} var history = [] var meta = {__proto__: obj, target: target, + Event: shy("事件入口", {name: names}, function(event, msg) { + return ctx.Event(event, msg||{}, arguments.callee.meta) + }), ID: shy("单一序列", function() {return id++}), Conf: shy("配置变量", function(key, value, cb) { if (kit.isNone(key)) {return conf} @@ -433,6 +438,60 @@ function Page(page) { }, } }, + initDebug: function(page, field, option, output) { + var list = kit.AppendChilds(output, "table") + var caption = kit.AppendChilds(list, [{type: "caption"}]).last + var head = kit.AppendChild(list, [{row: ["time", "type", "main", "arg", "args"], sub: "th"}]).last + kit.OrderTable(list) + var data, types = {all: 0, event: 0, run: 0, key: 0} + + + kit.Log.meta.call.push(function(time, type, main, arg) {var Choice = field.Pane && field.Pane.Choice || [] + if (kit.isNone(types[type])) {types[type] = 0, Choice.push(type)} + types[type]++ + types.all++ + + data = kit.AppendChild(list, [{className: type, row: [time, type, main, arg||"", kit.List(arguments, function(item) { + return typeof item == "object"? "{...}": item + }).slice(4).join(" ")]}]).last + data.scrollIntoView() + caption.innerHTML = kit.List(Choice.slice(1), function(item) {return item+": "+types[item]}).join(" ") + }) + return { + Show: function() { + kit.ModifyView(field, {display: field.style.display != "block"? "block": "none"}) + }, + clear: function() { + var th = kit.AppendChilds(list, [{row: ["time", "type", "main", "arg", "args"], sub: "th"}]).last + }, + Action: shy({ + "关闭": function() { + field.Pane.Show() + }, + "最大": function() { + kit.size(field, document.body.clientWidth, document.body.clientHeight) + }, + "最小": function() { + kit.size(field, document.body.clientWidth/2, document.body.clientHeight/2) + }, + "左边": function() { + field.style.left = "0px" + kit.size(field, document.body.clientWidth/2, document.body.clientHeight) + }, + "右边": function() { + field.style.left = document.body.clientWidth/2+"px" + kit.size(field, document.body.clientWidth/2, document.body.clientHeight) + }, + }, function(event, type) { + kit.Selector(list, "tr", function(item, index) { + index == 0 || type == "all" || kit.classList.has(item, type)? + kit.classList.del(item, "hide"): kit.classList.add(item, "hide") + }) + }), + Choice: ["关闭", "all", "event", "run", "key"], + Button: ["关闭", "最大", "最小", "左边", "右边"], + } + }, initLogin: function(page, field, option, output) { var ui = kit.AppendChilds(option, [ {label: "username"}, {input: ["username"]}, {type: "br"}, @@ -648,6 +707,9 @@ function Pane(page, field) { }, Run: function(cmds, cb) {ctx.Run(option.dataset, cmds, cb||pane.ondaemon)}, + Show: function() { + kit.ModifyView(field, {display: "block"}) + }, Hide: function() { kit.ModifyView(field, {display: "none"}) }, @@ -690,7 +752,7 @@ function Pane(page, field) { onaction: shy("事件列表", { oncontextmenu: function(event) { pane.Choice && page.carte.Pane.Show(event, shy({}, pane.Choice, function(value, meta, event) { - kit._call(pane.Action[value], [event]) + call(value, event) })) }, }, function(event, key, cb) {cb(event)}), @@ -700,7 +762,16 @@ function Pane(page, field) { // Event入口 1.1 ctx.Event(event, {}, {name: name+"."+value}) page.script("record", [name, value]) - typeof pane.Action == "function"? pane.Action(value, event): pane.Action[value](event, value) + + if (pane.Action && pane.Action.meta && typeof pane.Action.meta[value] == "function") { + kit._call(pane.Action.meta[value], [event, value]) + } else if (pane.Action && typeof pane.Action[value] == "function") { + kit._call(pane.Action[value], [event, value]) + } else if (typeof pane.Action == "function") { + kit._call(pane.Action, [event, value]) + } else if (typeof pane[value] == "function") { + kit._call(pane[value], [event, value]) + } } kit.AppendAction(action, pane.Button, call) diff --git a/usr/librarys/toolkit.js b/usr/librarys/toolkit.js index 7e7ee75a..1cc6ed03 100644 --- a/usr/librarys/toolkit.js +++ b/usr/librarys/toolkit.js @@ -38,11 +38,12 @@ kit = toolkit = (function() {var kit = {__proto__: document, Debug: shy("调试断点", {why: true, msg: true}, function(key) { if (arguments.callee.meta[key]) {debugger} }), - Log: shy("输出日志", {hide: {"init": true, "wss": false}, + Log: shy("输出日志", {hide: {"init": true, "wss": false}, call: [], func: {debug: "debug", info: "info", parn: "warn", err: "error"}, }, function(type, arg) {var meta = arguments.callee.meta var args = [kit.time().split(" ")[1]].concat(kit.List(kit.isNone(arg)? type: arguments)) !meta.hide[args[1]] && console[meta.func[args[1]]||"log"](args) + kit.List(meta.call, function(cb) {kit._call(cb, args)}) kit.Debug(args[1]) return args.slice(1) }), @@ -50,6 +51,15 @@ kit = toolkit = (function() {var kit = {__proto__: document, // HTML节点操作 classList: { + has: function(obj, key) { + var list = obj.className? obj.className.split(" "): [] + for (var i = 1; i < arguments.length; i++) { + if (list.indexOf(arguments[i]) == -1) { + return false + } + } + return true + }, add: function(obj, key) {var list = obj.className? obj.className.split(" "): [] return obj.className = list.concat(kit.List(arguments, function(value, index) { return index > 0 && list.indexOf(value) == -1? value: undefined