1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 01:04:06 +08:00

opt can.debug

This commit is contained in:
harveyshao 2023-01-21 19:02:29 +08:00
parent ba3b7713b4
commit a6726463e0
11 changed files with 150 additions and 123 deletions

View File

@ -12,6 +12,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
can.core.Item(sub.onplugin, function(key, cmd) { sub.onplugin.hasOwnProperty(key) && can.base.isFunc(cmd) && can.onengine.plugin(sub, can.core.Keys(ice.CAN, key), cmd) }) can.core.Item(sub.onplugin, function(key, cmd) { sub.onplugin.hasOwnProperty(key) && can.base.isFunc(cmd) && can.onengine.plugin(sub, can.core.Keys(ice.CAN, key), cmd) })
can.core.ItemCB(sub.onaction, function(key, cb) { can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: sub, msg: msg}) }) }) can.core.ItemCB(sub.onaction, function(key, cb) { can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: sub, msg: msg}) }) })
can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, cb: next, target: sub._target}) can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, cb: next, target: sub._target})
delete(sub._history), delete(sub._conf.feature)
}, target) }, target)
}, function() { can.onlayout._init(can, target), can.onmotion._init(can, target), can.onkeymap._init(can, target) }, function() { can.onlayout._init(can, target), can.onmotion._init(can, target), can.onkeymap._init(can, target)
can.onengine.listen(can, chat.ONSEARCH, function(msg, arg) { arg[0] == ctx.COMMAND && can.run(msg, ["can.command"]) }) can.onengine.listen(can, chat.ONSEARCH, function(msg, arg) { arg[0] == ctx.COMMAND && can.run(msg, ["can.command"]) })
@ -67,7 +68,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
}), }),
listen: shy(function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }), listen: shy(function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }),
signal: function(can, name, msg) { msg = msg||can.request(); var _msg = name == chat.ONREMOTE? msg.Option("_msg"): msg signal: function(can, name, msg) { msg = msg||can.request(); var _msg = name == chat.ONREMOTE? msg.Option("_msg"): msg
_msg.Option(ice.LOG_DISABLE) == ice.TRUE || can.misc.Log(name, can._name, (msg._cmds||[]).join(ice.SP), name == chat.ONMAIN? can: _msg, can._target) _msg.Option(ice.LOG_DISABLE) == ice.TRUE || can.misc.Log(name, can._name, (msg._cmds||[]).join(ice.SP), name == chat.ONMAIN? can: _msg, _msg._can._target)
return can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.CallFunc(cb, {event: msg._event, msg: msg}) }).length return can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.CallFunc(cb, {event: msg._event, msg: msg}) }).length
}, },
}) })
@ -116,7 +117,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
var status = can.page.SelectOne(can, field, html.DIV_STATUS) var status = can.page.SelectOne(can, field, html.DIV_STATUS)
meta.index && can.page.Append(can, option, [{view: [[html.ITEM, html.ICON], html.DIV, "\u2715"], onclick: function(event) { sub.onaction.close(event, sub) }}]) meta.index && can.page.Append(can, option, [{view: [[html.ITEM, html.ICON], html.DIV, "\u2715"], onclick: function(event) { sub.onaction.close(event, sub) }}])
var sub = Volcanos(meta.name, {_root: can._root||can, _follow: can.core.Keys(can._follow, meta.name), _target: field, var sub = Volcanos(meta.name, {_root: can._root||can, _follow: can.core.Keys(can._follow, meta.name), _target: field,
_legend: legend, _option: option, _action: action, _output: output, _status: status, _history: [], _inputs: {}, _outputs: [], _legend: legend, _option: option, _action: action, _output: output, _status: status, _history: [],
Status: function(key, value) { if (can.base.isObject(key)) { return can.core.Item(key, sub.Status), key } Status: function(key, value) { if (can.base.isObject(key)) { return can.core.Item(key, sub.Status), key }
can.page.Select(can, status, [[[html.SPAN, key]]], function(target) { can.page.Select(can, status, [[[html.SPAN, key]]], function(target) {
if (can.base.beginWith(value, ice.PS, ice.HTTP)) { value = can.page.Format(html.A, value) } if (can.base.beginWith(value, ice.PS, ice.HTTP)) { value = can.page.Format(html.A, value) }
@ -158,7 +159,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
}, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item) }, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item)
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS))._caller() sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS))._caller()
msg.RunAction(event, sub, cmds) || msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent) msg.RunAction(event, sub, cmds) || msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent)
}, can._inputs[item.name] = sub, sub.sup = can }, can._inputs = can._inputs||{}, can._inputs[item.name] = sub, sub.sup = can
can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { can.misc.Event(event, can, function(msg) { cb(event, sub) })} }) can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { can.misc.Event(event, can, function(msg) { cb(event, sub) })} })
can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { can.misc.Event(event, can, function(msg) { cb(event, sub) })} }) can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { can.misc.Event(event, can, function(msg) { cb(event, sub) })} })
skip? next(): can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, meta: item, cb: next, target: sub._target}); skip? next(): can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, meta: item, cb: next, target: sub._target});
@ -205,7 +206,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
}, [display, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf()) }, [display, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf())
sub.run = function(event, cmds, cb, silent) { sub.run = function(event, cmds, cb, silent) {
sub.request(event)._caller().RunAction(event, sub, cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent) sub.request(event)._caller().RunAction(event, sub, cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent)
}, can._outputs && can._outputs.push(sub), sub.sup = can }, can._outputs = can._outputs||[], can._outputs.push(sub), sub.sup = can
sub._index = can._index, sub._msg = msg, sub.Conf(sub._args = can.base.ParseURL(display)) sub._index = can._index, sub._msg = msg, sub.Conf(sub._args = can.base.ParseURL(display))
sub._trans = can.base.Copy(can.base.Copy(sub._trans||{}, can._trans), can.core.Value(sub, [chat.ONACTION, chat._TRANS])) sub._trans = can.base.Copy(can.base.Copy(sub._trans||{}, can._trans), can.core.Value(sub, [chat.ONACTION, chat._TRANS]))
if (sub.onimport && can.base.isArray(sub.onimport.list) && sub.onimport.list.length > 0) { if (sub.onimport && can.base.isArray(sub.onimport.list) && sub.onimport.list.length > 0) {
@ -343,7 +344,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
can.run(can.request(event, can.Option()), [ctx.ACTION, target.name]) can.run(can.request(event, can.Option()), [ctx.ACTION, target.name])
}) } }); return code.scrollBy && code.scrollBy(0, 10000), code }) } }); return code.scrollBy && code.scrollBy(0, 10000), code
}, },
tools: function(can, msg, cb, target) { can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT), []), cb, target) }, tools: function(can, msg, cb, target) {
can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT), []).concat(can.misc.Search(can, "debug") == ice.TRUE? ["can.debug"]: []), cb, target)
},
layout: function(can, target, type, list) { const FLOW = html.FLOW, FLEX = html.FLEX layout: function(can, target, type, list) { const FLOW = html.FLOW, FLEX = html.FLEX
switch (type||ice.AUTO) { switch (type||ice.AUTO) {
case FLOW: case FLOW:

View File

@ -279,6 +279,7 @@ fieldset.plugin.inner.cmd>form.option { display:none; }
fieldset.xterm div.toggle { display:none; } fieldset.xterm div.toggle { display:none; }
fieldset>div.output fieldset.plug { position:absolute; bottom:0; right:0; } fieldset>div.output fieldset.plug { position:absolute; bottom:0; right:0; }
fieldset>div.output fieldset.plug.select { display:block; } fieldset>div.output fieldset.plug.select { display:block; }
fieldset.cmd>div.output fieldset.plug { position:fixed; bottom:31px; right:0; }
body.mobile fieldset.plugin>legend { border:none; } body.mobile fieldset.plugin>legend { border:none; }
.unselectable { -webkit-touch-callout:none; -webkit-user-select:none; -khtml-user-select:none; -moz-user-select:none; -ms-user-select:none; -o-user-select:none; user-select:none; } .unselectable { -webkit-touch-callout:none; -webkit-user-select:none; -khtml-user-select:none; -moz-user-select:none; -ms-user-select:none; -o-user-select:none; user-select:none; }
/* layout */ /* layout */
@ -327,6 +328,12 @@ div.story[data-type=spark]::-webkit-scrollbar { width:0 !important; height:0 !im
div.project::-webkit-scrollbar { width:0 !important; height:0 !important; } div.project::-webkit-scrollbar { width:0 !important; height:0 !important; }
div.content::-webkit-scrollbar { width:0 !important; height:0 !important; } div.content::-webkit-scrollbar { width:0 !important; height:0 !important; }
.picker { box-shadow:4px 4px 20px 4px #626bd0; }
div.item:not(.string):not(.number):not(.boolean)>span.value { color:silver; } div.item:not(.string):not(.number):not(.boolean)>span.value { color:silver; }
span.string { color:#f29766; } div.item.function>span.value { font-style:italic; }
span.tag { color:#5cadd4; } div.item.target>span.value { font-style:italic; }
div.view span.keyword { color:#5cadd4; }
div.view span.string { color:#f29766; }
span.path { color:silver; }
body.dark span.path { color:gray; }
body.dark div.data div.item:not(.string):not(.number):not(.boolean)>span.value { color:gray; }

View File

@ -154,7 +154,7 @@ Volcanos("misc", {Message: function(event, can) { var msg = {}
msg.Reply = function() { var res = can.request({}, {_handle: ice.TRUE}) msg.Reply = function() { var res = can.request({}, {_handle: ice.TRUE})
res._target = (msg[ice.MSG_SOURCE]||[]).reverse(), res._source = (msg[ice.MSG_TARGET]||[]).reverse().slice(1)||[] res._target = (msg[ice.MSG_SOURCE]||[]).reverse(), res._source = (msg[ice.MSG_TARGET]||[]).reverse().slice(1)||[]
res.append = msg.append, can.core.List(msg.append, function(key) { res[key] = msg[key] }), res.result = (msg.result||[]).concat(can.core.List(arguments)) res.append = msg.append, can.core.List(msg.append, function(key) { res[key] = msg[key] }), res.result = (msg.result||[]).concat(can.core.List(arguments))
res.Option(ice.LOG_DISABLE, msg.Option(ice.LOG_DISABLE)) != ice.TRUE && can.misc.Log(html.WSS, ice.MSG_RESULT, msg.result||[], msg, _msg) res.Option(ice.LOG_DISABLE, msg.Option(ice.LOG_DISABLE)) != ice.TRUE && can.misc.Log(html.WSS, ice.MSG_RESULT, msg.result&&msg.result.length>0? msg.result: undefined, msg, _msg)
socket.send(JSON.stringify(res)) socket.send(JSON.stringify(res))
}, msg.detail = data.detail, msg.Copy(data) }, msg.detail = data.detail, msg.Copy(data)
try { try {
@ -211,33 +211,35 @@ Volcanos("misc", {Message: function(event, can) { var msg = {}
if (value != undefined) { localStorage.setItem(key, value) } if (value != undefined) { localStorage.setItem(key, value) }
return localStorage.getItem(key) return localStorage.getItem(key)
}, },
_signal: function(can, args) { this._list.push(args) }, _list: [], _signal: function(args) {
this._list.push(args)
}, _list: [],
Log: function() { var pos = arguments[0] && arguments[0].indexOf && arguments[0].indexOf("on") == 0? arguments[0] == "onremote"? 5: 3: 2 Log: function() { var pos = arguments[0] && arguments[0].indexOf && arguments[0].indexOf("on") == 0? arguments[0] == "onremote"? 5: 3: 2
var args = [this._time(), this.fileLine(pos).link] var args = [this._time(), this.fileLine(pos).link]
for (var i in arguments) { var arg = arguments[i]; if (!arg) { continue } args.push(arg) for (var i in arguments) { var arg = arguments[i]; if (!arg) { continue } args.push(arg)
if (arg.Option && arg.Option("log.caller")) { args[1] = arg.Option("log.caller") } if (arg.Option && arg.Option("log.caller")) { args[1] = arg.Option("log.caller") }
} }
console.log.apply(console, args), this._signal(arguments[0], args) console.log.apply(console, args), this._signal(args)
}, },
Info: function() { var args = [this._time(), this.FileLine(2, 3), log.INFO] Info: function() { var args = [this._time(), this.FileLine(2, 3), log.INFO]
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) } for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
console.info.apply(console, args), this._signal(arguments[0], args) console.info.apply(console, args), this._signal(args)
}, },
Warn: function() { var args = [this._time(), this.fileLine(2, 3).link, log.WARN] Warn: function() { var args = [this._time(), this.fileLine(2, 3).link, log.WARN]
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) } for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
console.warn.apply(console, args), this._signal(arguments[0], args) console.warn.apply(console, args), this._signal(args)
debugger debugger
}, },
Error: function() { var args = [this._time(), this.fileLine(2, 3).link, log.ERROR] Error: function() { var args = [this._time(), this.fileLine(2, 3).link, log.ERROR]
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) } for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
args.push(ice.NL, this._stacks().slice(1).join(ice.NL)) args.push(ice.NL, this._stacks().slice(1).join(ice.NL))
console.error.apply(console, args), this._signal(arguments[0], args) console.error.apply(console, args), this._signal(args)
debugger debugger
}, },
Debug: function() { var args = [this._time(), this.fileLine(2, 3).link, log.DEBUG] Debug: function() { var args = [this._time(), this.fileLine(2, 3).link, log.DEBUG]
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) } for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
args.push(ice.NL, this._stacks().slice(1, 4).join(ice.NL)) args.push(ice.NL, this._stacks().slice(1, 4).join(ice.NL))
console.debug.apply(console, args), this._signal(arguments[0], args) console.debug.apply(console, args), this._signal(args)
}, },
Trace: function() { var filter = "", output = false Trace: function() { var filter = "", output = false
var args = [this._time(), this.fileLine(2, 3).link, log.TRACE] var args = [this._time(), this.fileLine(2, 3).link, log.TRACE]
@ -246,7 +248,7 @@ Volcanos("misc", {Message: function(event, can) { var msg = {}
if (arg.Conf && arg.Conf("log.trace") == ice.TRUE) { output = true } if (arg.Conf && arg.Conf("log.trace") == ice.TRUE) { output = true }
} if (!output) { return } } if (!output) { return }
args.push(ice.NL, this._stacks().slice(1, 4).join(ice.NL)) args.push(ice.NL, this._stacks().slice(1, 4).join(ice.NL))
console.debug.apply(console, args), this._signal(arguments[0], args) console.debug.apply(console, args), this._signal(args)
debugger debugger
}, },
FileLine: function(depth, length) { var file = this.fileLine(depth+1, length||9); return file.link }, FileLine: function(depth, length) { var file = this.fileLine(depth+1, length||9); return file.link },

View File

@ -247,61 +247,67 @@ Volcanos("page", {ClassList: {
width: function() { return window.innerWidth }, width: function() { return window.innerWidth },
ismodkey: function(event) { return [lang.META, lang.ALT, lang.CONTROL, lang.SHIFT].indexOf(event.key) > -1 }, ismodkey: function(event) { return [lang.META, lang.ALT, lang.CONTROL, lang.SHIFT].indexOf(event.key) > -1 },
isDisplay: function(target) { return target && target.style.display != html.NONE && target.className.indexOf(html.HIDE) == -1 }, isDisplay: function(target) { return target && target.style.display != html.NONE && target.className.indexOf(html.HIDE) == -1 },
AppendData: function(can, target, prefix, key, value, cb) { unicode: {
var open = "\u25BE ", close = "\u25B8 " open: "\u25BE", close: "\u25B8", inner: "..",
function show(value, skip) { switch (typeof value) { },
case "object": if (!value) { return {} } AppendData: function(can, target, prefix, key, value, cb) { var open = can.page.unicode.open, close = can.page.unicode.close
if (value._path) { return {type: "plugin", open: open, close: close, value: "\""+value._path+"\""} } function show(value, deep) { deep = deep == undefined? 2: 0; switch (typeof value) {
if (value.tagName) { return {type: "html", open: open, close: close, value: value.tagName.toLowerCase()+(value.className? ice.PT+value.className.replaceAll(ice.SP, ice.PT):"")} } case lang.OBJECT: if (!value) { return {} }
if (skip) { return {value: value.length == undefined? "{...}": "[...]"} } if (deep < 0) { return {value: value.length == undefined? "{"+can.page.unicode.inner+"}": "["+can.page.unicode.inner+"]"} }
if (value.length != undefined) { return {type: "array", open: open, close: close, value: value.length+" ["+can.core.List(value, function(value) { return show(value).value }).join(",")+"]"} } if (value.tagName) { return {type: "target", value: "# "+value.tagName.toLowerCase()+(value.className? ice.PT+value.className.replaceAll(ice.SP, ice.PT):"")} }
return {type: typeof value, open: open, close: close, value: "{"+can.core.Item(value, function(key, val) { if (value._path) { return {value: "@ \""+value._path+"\""} }
if (value.hasOwnProperty(key)) { return key+":"+show(val, true).value } if (value.length != undefined) { return {value: (value.length > 3? value.length+ice.SP: "")+"["+can.core.List(value, function(value, index) { if (index < 5) { return show(value, deep-1).value } else if (index == 5) { return can.page.unicode.inner } }).join(ice.FS)+"]"} }
}).join(",")+"}"} return {value: "{"+can.core.Item(value, function(key, val) { if (value.hasOwnProperty(key)) { return key+ice.DF+show(val, deep-1).value } }).join(ice.FS)+"}"}
case "string": return {type: typeof value, open: "s ", close: "s ", value: "\""+value+"\""} case lang.STRING: return {open: "s", close: "s", value: "\""+(value.indexOf(ice.NL) > -1? value.split(ice.NL)[0]+can.page.unicode.inner: value)+"\""}
case "number": return {type: typeof value, open: "n ", close: "n ", value: value} case lang.NUMBER: return {open: "n", close: "n", value: value}
case "boolean": return {type: typeof value, open: "b ", close: "b ", value: value} case lang.BOOLEAN: return {open: "b", close: "b", value: value}
case "function": return {type: typeof value, open: "f ", close: "f ", value: (""+value).split(ice.NL)[0]} case lang.FUNCTION: return {open: "f", close: "f", value: ("$ "+value).split(ice.NL)[0]}
default: return {type: typeof value, open: " ", close: " ", value: value} default: return {value: value}
} } } } var loaded = false, _show = show(value); _show.open = _show.open||open, _show.close = _show.close||close
var loaded = false, _show = show(value) var ui = can.page.Append(can, target, [!key && value.tagName? can.page.AppendView(can, value): {view: [[html.ITEM, _show.type||typeof(value)]], list: [
var ui = can.page.Append(can, target, [{view: [[html.ITEM, _show.type]], list: [ {view: [mdb.ICON, html.SPAN, _show.close+ice.SP]}, {view: [mdb.NAME, html.SPAN, key || key === 0? key+ice.SP: ""]}, {view: [mdb.VALUE, html.SPAN, _show.value]},
{view: [html.ICON, html.SPAN, _show.close]}, {view: [mdb.NAME, html.SPAN, key || key === 0? key+ice.SP: ""]}, {view: [mdb.VALUE, html.SPAN, _show.value]}, ], onclick: function() { cb && cb(prefix, value); if (typeof value != lang.OBJECT) { return }
], onclick: function() { if (typeof value != "object") { return } cb && cb(prefix, value) if (loaded) { return ui.icon.innerText = (can.onmotion.toggle(can, ui.list)? _show.open: _show.close)+ice.SP } loaded = true, ui.icon.innerText = _show.open+ice.SP
if (loaded) { return ui.icon.innerText = can.onmotion.toggle(can, ui.list)? _show.open: _show.close } loaded = true, ui.icon.innerText = _show.open if (value.tagName) { can.page.Append(can, ui.list, [can.page.AppendView(can, value)]), can.onappend.style(can, mdb.VIEW, ui.list)
if (value.tagName) { can.page.Append(can, ui.list, [can.page.AppendView(can, value)]) can.core.List(can.core.Item(target, function(key, value) { if (["textContent", "innerHTML", "outerHTML"].indexOf(key) > -1 || typeof value == lang.FUNCTION || key.toUpperCase() == key) { return } return key }).sort(), function(key) {
can.core.List(can.core.Item(target, function(key, value) { if (["innerText", "outerText", "innerHTML", "outerHTML", "textContent"].indexOf(key) > -1 || typeof value == "function") { return } return key }).sort(), function(key) { target[key] && can.page.AppendData(can, ui.list, can.core.Keys(prefix, key), key, target[key], cb)
key.toUpperCase() != key && target[key] && can.page.AppendData(can, ui.list, can.core.Keys(prefix, key), key, target[key])
}) })
} else if (value.length != undefined) { } else if (value.length != undefined) {
can.core.List(value, function(value, index) { can.page.AppendData(can, ui.list, can.core.Keys(prefix, index), index, value) }) can.core.List(value, function(value, index) { can.page.AppendData(can, ui.list, can.core.Keys(prefix, index), index, value, cb) })
} else { } else {
can.core.List(can.core.Item(value, function(key) { if (value.hasOwnProperty(key)) { return key } }).sort(), function(key) { can.page.AppendData(can, ui.list, can.core.Keys(prefix, key), key, value[key]) }) can.core.List(can.core.Item(value, function(key) { if (value.hasOwnProperty(key)) { return key } }).sort(), function(key) { can.page.AppendData(can, ui.list, can.core.Keys(prefix, key), key, value[key], cb) })
value.__proto__ && can.core.Item(value.__proto__).length > 0 && can.page.AppendData(can, ui.list, can.core.Keys(prefix, "__proto__"), "__proto__", value.__proto__) var key = "__proto__"; value[key] && can.core.Item(value[key]).length > 0 && can.page.AppendData(can, ui.list, can.core.Keys(prefix, key), key, value[key], cb)
} }
}}, {view: html.LIST, style: {"margin-left": "20px"}}]) }}, {view: html.LIST, style: {"margin-left": "20px"}}])
return ui
}, },
AppendView: function(can, target, tag, list, loaded) { AppendView: function(can, target, tag, list, loaded, cb) {
function field(target) { return target? can.core.List(target.attributes, function(item) { function field(target) { return target? can.core.List(target.attributes, function(item) {
return item.value == "" || item.value == item.name? {type: html.SPAN, list: [{text: " "}, {text: item.name}]}: return item.value == "" || item.value == item.name? {type: html.SPAN, list: [{text: ice.SP}, {text: item.name}]}:
{type: html.SPAN, list: [{text: " "}, {text: item.name}, {text: "="}, {className: "string", text: "\""+item.value+"\""}]} {type: html.SPAN, list: [{text: ice.SP}, {text: item.name}, {text: ice.EQ}, {className: code.STRING, text: "\""+item.value+"\""}]}
}): [] } }): [] }
function show(target, tag, list, loaded) { var ui = {}; tag = tag||target.tagName.toLowerCase() var ui = {}; tag = tag||target.tagName.toLowerCase(), isclose = tag != "meta" && tag != "link", _field = field(target)
var inner = target.innerHTML? "...": ""; if (target && target.tagName) { target.innerText == target.innerHTML && (inner = target.innerText) } var inner = target.innerHTML? can.page.unicode.inner: ""; if (target && target.tagName) { target.innerText == target.innerHTML && (inner = target.innerText) }
var open = "\u25BE ", close = "\u25B8 ", isclose = tag != "meta" && tag != "link", _field = field(target) return {view: mdb.VIEW, list: [
return {view: "some", list: [ {view: [[html.ITEM]], list: [
{view: [[html.ITEM]], list: [ {text: (target.children.length > 0? can.page.unicode.close: ice.SP)+ice.SP, _init: function(target) { ui.toggle = target }},
{text: target.children.length > 0? close: " ", _init: function(target) { ui.toggle = target }}, {className: code.KEYWORD, text: can.page.replace(can, ice.LT)}, {className: code.KEYWORD, text: tag}, {type: html.SPAN, list: _field},
{className: "tag", text: can.page.replace(can, "<")}, {className: "tag", text: tag}, {type: html.SPAN, list: _field}, {className: code.KEYWORD, text: can.page.replace(can, ice.GT)}, inner && {text: inner, _init: function(target) { ui.inner = target }},
{className: "tag", text: can.page.replace(can, ">")}, inner && {text: inner, _init: function(target) { ui.inner = target }}, isclose && {className: code.KEYWORD, text: can.page.replace(can, ice.LT+ice.PS+tag+ice.GT), _init: function(target) { ui._close = target }},
isclose && {className: "tag", text: can.page.replace(can, "</"+tag+">"), _init: function(target) { ui._close = target }}, ], onclick: function(event) { ui.toggle.innerText = (can.onmotion.toggle(can, ui.list)? can.page.unicode.open: can.page.unicode.close)+ice.SP
], onclick: function(event) { ui.toggle.innerText = can.onmotion.toggle(can, ui.list)? open: close ui.inner && can.onmotion.toggle(can, ui.inner), can.onmotion.toggle(can, ui.close), can.onmotion.toggle(can, ui._close)
ui.inner && can.onmotion.toggle(can, ui.inner), can.onmotion.toggle(can, ui.close), can.onmotion.toggle(can, ui._close) if (!loaded) {
if (!loaded) { can.page.Append(can, ui.list, can.core.List(target.children, function(node) { return show(node, node.tagName.toLowerCase()) })) } loaded = true if (can.page.tagis(target, "style", "script")) { can.page.Append(can, ui.list, [{text: target.innerHTML}]) } else {
}, _init: function(target) { can.onmotion.delay(can, function() { loaded && target.click() }) }}, can.page.Append(can, ui.list, can.core.List(target.children, function(node) { return can.page.AppendView(can, node, "", null, false, cb) }))
isclose && {view: [[html.LIST, html.HIDE]], style: {"margin-left": "20px"}, _init: function(target) { ui.list = target }, list: list}, }
isclose && {view: [[html.ITEM, html.HIDE]], list: [{text: " "}, {className: "tag", text: can.page.replace(can, "</"+tag+">")}], _init: function(target) { ui.close = target }}, } loaded = true
]} can.base.isFunc(cb) && cb(target)
} return show(target, tag, list, loaded) }, onmouseenter: function() {
can.page.Select(can, document.body, ".picker", function(target) { can.page.ClassList.del(can, target, "picker") })
!can.page.tagis(target, nfs.SCRIPT) && can.onappend.style(can, "picker", target)
}, _init: function(target) { can.onmotion.delay(can, function() { loaded && target.click() }) }},
isclose && {view: [[html.LIST, html.HIDE]], style: {"margin-left": "20px"}, _init: function(target) { ui.list = target }, list: list},
isclose && {view: [[html.ITEM, html.HIDE]], list: [{text: " "}, {className: code.KEYWORD, text: can.page.replace(can, ice.LT+ice.PS+tag+ice.GT)}], _init: function(target) { ui.close = target }},
]}
}, },
}) })

View File

@ -1,4 +1,4 @@
(function() { var NTIP = "ntip", NCMD = "ncmd" (function() { var NTIP = "ntip", NCMD = "ncmd", NLOG = "nlog"
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
can.onimport._title(can, msg, target) can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target) can.onimport._state(can, msg, target)
@ -6,7 +6,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
can.onimport._command(can, msg, target) can.onimport._command(can, msg, target)
}, },
_title: function(can, msg, target) { can.user.isMobile || can.core.List(msg.result, function(item) { can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}]) }) }, _title: function(can, msg, target) { can.user.isMobile || can.core.List(msg.result, function(item) { can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}]) }) },
_state: function(can, msg, target) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [NTIP, NCMD]).reverse(), function(item) { _state: function(can, msg, target) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [NTIP, NCMD, NLOG]).reverse(), function(item) {
can.page.Append(can, target, [{view: [[chat.STATE], html.DIV, can.Conf(item)], list: [ can.page.Append(can, target, [{view: [[chat.STATE], html.DIV, can.Conf(item)], list: [
{text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]}, {text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]},
], onclick: function(event) { can.onexport[item](can) }}]) ], onclick: function(event) { can.onexport[item](can) }}])
@ -22,7 +22,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
} }}, "", target, [chat.TITLE]) }, } }}, "", target, [chat.TITLE]) },
count: function(can, name) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { item.innerHTML = can.Conf(name, parseInt(can.Conf(name)||"0")+1+"")+"" }) }, count: function(can, name) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { item.innerHTML = can.Conf(name, parseInt(can.Conf(name)||"0")+1+"")+"" }) },
toast: function(can, msg, title, content, fileline, time) { can.onimport._data(can, NTIP, {time: time, fileline: fileline, title: title, content: content}), can.page.Modify(can, can.toast, [time, title, content].join(ice.SP)) }, toast: function(can, msg, title, content, fileline, time) { can.onimport._data(can, NTIP, {time: time, fileline: fileline, title: title, content: content}), can.page.Modify(can, can.toast, [time, title, content].join(ice.SP)) },
ncmd: function(can, msg, _follow, _cmds) { can.onimport._data(can, NCMD, {time: can.base.Time(), follow: _follow, cmds: _cmds}) }, ncmd: function(can, msg, _follow, _cmds) { can.onimport._data(can, NCMD, {time: can.base.Time(), follow: _follow, cmds: _cmds}), can.onimport.nlog(can) },
nlog: function(can) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { item.innerHTML = can.misc._list.length }) },
_data: function(can, name, item) { can[name] = can[name]||can.request(), can[name].Push(item), can.onimport.count(can, name) }, _data: function(can, name, item) { can[name] = can[name]||can.request(), can[name].Push(item), can.onimport.count(can, name) },
}) })
Volcanos(chat.ONACTION, {_init: function(can) { if (can.user.isExtension || can.user.mod.isPod) { can.onmotion.hidden(can) } }, Volcanos(chat.ONACTION, {_init: function(can) { if (can.user.isExtension || can.user.mod.isPod) { can.onmotion.hidden(can) } },
@ -48,6 +49,7 @@ Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight
}, ui.output), msg && can.onappend.board(can, msg.Result(), ui.output); return ui }, ui.output), msg && can.onappend.board(can, msg.Result(), ui.output); return ui
}, },
ntip: function(can) { can.onexport.float(can, can[NTIP], NTIP, function(value, key, index, line) { can.onappend._float(can, web.CODE_INNER, [ice.USR_VOLCANOS].concat(line.fileline.split(ice.DF))) }) }, ntip: function(can) { can.onexport.float(can, can[NTIP], NTIP, function(value, key, index, line) { can.onappend._float(can, web.CODE_INNER, [ice.USR_VOLCANOS].concat(line.fileline.split(ice.DF))) }) },
nlog: function(can) { can.onappend._float(can, "can.debug") },
ncmd: function(can) { can.onexport.float(can, can[NCMD], NCMD, function(value, key, index, line) { ncmd: function(can) { can.onexport.float(can, can[NCMD], NCMD, function(value, key, index, line) {
var cmds = can.base.Obj(line.cmds); switch (line.follow) { var cmds = can.base.Obj(line.cmds); switch (line.follow) {
case "can.Action": cmds = cmds.slice(2); break case "can.Action": cmds = cmds.slice(2); break
@ -66,57 +68,44 @@ Volcanos(chat.ONPLUGIN, {
toast: shy("提示", [wiki.CONTENT, wiki.TITLE], function(can, msg, arg) { toast: shy("提示", [wiki.CONTENT, wiki.TITLE], function(can, msg, arg) {
arg && arg.length > 0 && can.user.toast(can, arg[0], arg[1]), msg.Copy(can[NTIP]), msg.StatusTimeCount() arg && arg.length > 0 && can.user.toast(can, arg[0], arg[1]), msg.Copy(can[NTIP]), msg.StatusTimeCount()
}), }),
debug: shy("日志", ["type:select=Info,Warn,Error,Debug", "_text"], function(can, msg, arg) { debug: shy("日志", ["type:select=log,info,warn,error,debug,wss,onremote", "_text"], function(can, msg, arg) { can.onmotion.delay(can, function() { var _can = can, can = msg._can
arg && arg.length > 1 && can.misc[arg[0]](can, arg[1]) var ui = can.page.Appends(can, can._output, [{type: html.TABLE, className: html.CONTENT, list: [{type: html.TR, list: [
can.onmotion.delay(can, function() { var can = msg._can {type: html.TH, inner: mdb.TIME}, {type: html.TH, inner: mdb.TEXT},
can.page.Append(can, can._output, [{type: html.TABLE, className: html.CONTENT, list: [{type: html.TR, list: [ ]}].concat(can.core.List(can.misc._list, function(list) { return (!arg || !arg[0] || arg[0] == "log" || arg[0] == list[2]) && {type: html.TR, list: [
{type: html.TH, inner: mdb.TIME}, {type: html.TD, inner: list[0]},
{type: html.TH, inner: nfs.FILE}, {type: html.TD, list: can.core.List(list.slice(1), function(item, index) { var vimer
{type: html.TH, inner: mdb.TYPE}, if (index == 0) { return {type: html.SPAN, list: [{text: can.page.unicode.close+ice.SP}, {text: [item.split("?")[0]+ice.SP, html.SPAN, nfs.PATH], onclick: function(event) {
{type: html.TH, inner: mdb.TEXT}, var _ls = /(https*:\/\/[^/]+)\/*([^:]+):([0-9]+):([0-9]+)/.exec(list[1])
]}].concat(can.core.List(can.misc._list, function(list) { return {type: html.TR, list: [ if (can.onexport.record(can, list[1], mdb.LINK, {time: list[0], link: list[1], type: list[2], path: ice.USR_VOLCANOS, file: _ls[2].split("?")[0], line: _ls[3]})) { return }
{type: html.TD, inner: list[0]}, if (vimer) { return can.page.Remove(can, vimer._target), vimer = null }
{type: html.TD, inner: list[1].indexOf(location.origin) == 0? list[1].slice(location.origin.length+1): list[1]}, vimer = can.onappend.plugin(_can, {index: "web.code.inner", args: [ice.USR_VOLCANOS, _ls[2], _ls[3]]}, function(sub) {}, event.target.parentNode)
{type: html.TD, inner: list[2]}, }}]} } if (!can.base.isObject(item)) { return {text: item+ice.SP} }
{type: html.TD, list: can.core.List(list.slice(3), function(item) { if (can.base.isString(item)) { return {text: item} } return {view: mdb.DATA, _init: function(target) { can.page.AppendData(can, target, "", "", item)}}
return {view: "data", _init: function(target) { can.page.AppendData(can, target, "", "", item, function(prefix, value) { })},
can.Option(mdb.KEY, prefix) ]} })) }]); arg && arg[1] && can.page.Select(can, can._output, html.TR, function(tr) { can.page.ClassList.set(can, tr, html.HIDE, tr.innerText.indexOf(arg[1]) == -1) })
})}} can.onappend._status(can, [{name: mdb.TIME, value: can.base.Time()}, {name: mdb.COUNT, value: can.page.Select(can, can._output, html.TR+":not(.hide)").length+"x2"}])
}), onclick: function(event) { }) }),
can.onkeymap.prevent(event) data: shy("网页标签", [mdb.KEY], function(can, msg, arg) { can.onmotion.delay(can, function() { var can = msg._can
}}, can.page.Append(can, can._output, [{text: "hello world"}])
], onclick: function(event) { if (can.Option(mdb.KEY)) {
var _ls = /(https*:\/\/[^/]+)*([^:]+):([0-9]+):([0-9]+)/.exec(list[1]) can.page.AppendData(can, can._output, can.Option(mdb.KEY), can.Option(mdb.KEY).split(ice.PT).pop(), can.core.Value(can._root, can.Option(mdb.KEY)), function(prefix, value) {
can.onexport.record(can, list[1], mdb.LINK, { can.Option(mdb.KEY, prefix)
time: list[0], })._target.click()
link: list[1], } else {
type: list[2], can.page.AppendData(can, can._output, "", can._root._name, can._root, function(prefix, value) {
path: "usr/volcanos/", can.Option(mdb.KEY, prefix)
file: _ls[2], })._target.click()
line: _ls[3], }
}) }) }),
}} })) }]) view: shy("网页标签", function(can, msg, arg) { can.onmotion.delay(can, function() { var can = msg._can
can.onappend._status(can, [{name: mdb.TIME, value: can.base.Time()}, {name: mdb.COUNT, value: can.misc._list.length+"x4"}]) can.page.Append(can, can._output, [can.page.AppendView(can, document, "html", [
}) can.page.AppendView(can, document.head, "head"), can.page.AppendView(can, document.body, "body", null, false, function(target) {
}), var list = []; for (var p = target; p && p.tagName; p = p.parentNode) {
data: shy("网页标签", ["key"], function(can, msg, arg) { list.push(p.tagName.toLowerCase()+(p.className? ice.PT+p.className.replaceAll(ice.SP, ice.PT): ""))
can.onmotion.delay(can, function() { var can = msg._can }
if (can.Option(mdb.KEY)) { can.page.Appends(can, can._action, [{view: [html.ITEM, html.DIV, list.reverse().join(ice.SP+ice.GT+ice.SP)]}])
can.page.AppendData(can, can._output, can.Option(mdb.KEY), can.Option(mdb.KEY).split(ice.PT).pop(), can.core.Value(can._root, can.Option(mdb.KEY))) }),
} else { ], true)])
can.page.AppendData(can, can._output, "", can._root._name, can._root) }) }),
}
})
}),
view: shy("网页标签", function(can, msg, arg) {
can.onmotion.delay(can, function() { var can = msg._can
can.page.Append(can, can._output, [
can.page.AppendView(can, document, "html", [
can.page.AppendView(can, document.head, "head"),
can.page.AppendView(can, document.body, "body"),
], true)
])
})
}),
}) })
})() })()

View File

@ -7,11 +7,14 @@ Volcanos(chat.ONACTION, {
onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(event) }, onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(event) },
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target) onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target)
if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } } if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
if (event.key == lang.ENTER) { return can.run(event), can.onmotion.focus(can, event.target), can.onkeymap.prevent(event) } if (event.key == lang.ENTER) { return can.onkeymap.prevent(event), can.run(event), can.onmotion.focus(can, event.target) }
if (!event.ctrlKey) { return } switch (event.key) { if (!event.ctrlKey) { return } switch (event.key) {
case "m": can.CloneField(); break case "m": can.CloneField(); break
case "b": can.CloneInput(); break case "b": can.CloneInput(); break
default: can.onkeymap.selectOutput(event, can.sup); return default: can.onkeymap.selectOutput(event, can.sup); return
} can.onkeymap.prevent(event) } can.onkeymap.prevent(event)
}, },
onkeyup: function(event, can) {
if (event.key == lang.ENTER) { return can.onkeymap.prevent(event) }
},
}) })

View File

@ -12,6 +12,7 @@ fieldset.inner>div.output div.content td.text span.function { color:lightgreen;
fieldset.inner>div.output div.content td.text span.constant { color:magenta; } fieldset.inner>div.output div.content td.text span.constant { color:magenta; }
fieldset.inner>div.output div.content td.text span.string { color:magenta; } fieldset.inner>div.output div.content td.text span.string { color:magenta; }
fieldset.inner>div.output div.content td.text span.object { color:cyan; } fieldset.inner>div.output div.content td.text span.object { color:cyan; }
fieldset.inner>div.output div.content fieldset>form.option>div.icon { display:none; }
fieldset.inner>div.output>div.project { width:230px; } fieldset.inner>div.output>div.project { width:230px; }
fieldset.inner>div.output>div.project>div.zone fieldset.plug { position:static; } fieldset.inner>div.output>div.project>div.zone fieldset.plug { position:static; }
fieldset.inner>div.output>div.project>div.zone fieldset.plug legend { display:none; } fieldset.inner>div.output>div.project>div.zone fieldset.plug legend { display:none; }

View File

@ -10,6 +10,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl
can.ui = can.onappend.layout(can, can._output, "", [html.PROJECT, [html.TABS, nfs.PATH, [html.CONTENT, html.PROFILE], html.DISPLAY, html.PLUG]]) can.ui = can.onappend.layout(can, can._output, "", [html.PROJECT, [html.TABS, nfs.PATH, [html.CONTENT, html.PROFILE], html.DISPLAY, html.PLUG]])
can.ui._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display can.ui._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display
can.onmotion.hidden(can, can.ui.plug) can.onmotion.hidden(can, can.ui.plug)
var plug = can.base.Obj(msg.Option("plug"), [])
plug.length > 0 && can.run({}, [ctx.ACTION, ctx.COMMAND].concat(plug.reverse()), function(msg) {
msg.Table(function(value) { can.onimport.toolkit(can, value) })
})
can.onengine.plugin(can, can.onplugin) can.onengine.plugin(can, can.onplugin)
switch (can.Mode()) { switch (can.Mode()) {
case chat.SIMPLE: can.onmotion.hidden(can, can.ui.project); break case chat.SIMPLE: can.onmotion.hidden(can, can.ui.project); break
@ -292,6 +296,7 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) {
sub.onexport.title = function(_, title) { can.page.Modify(can, msg._tab, title) } sub.onexport.title = function(_, title) { can.page.Modify(can, msg._tab, title) }
sub.onexport.record = function(_, value, key, line) { sub.onexport.record = function(_, value, key, line) {
line.path && can.onimport.tabview(can, line.path, line.file, line.line) line.path && can.onimport.tabview(can, line.path, line.file, line.line)
return true
} }
sub.onimport._open = function(sub, msg, _arg) { var url = can.base.ParseURL(_arg), ls = url.origin.split("/chat/pod/") sub.onimport._open = function(sub, msg, _arg) { var url = can.base.ParseURL(_arg), ls = url.origin.split("/chat/pod/")
if (_arg.indexOf(location.origin) == 0 && ls.length > 1) { if (_arg.indexOf(location.origin) == 0 && ls.length > 1) {

View File

@ -99,6 +99,8 @@ Volcanos(chat.ONACTION, {list: [
"刷新界面", "刷新数据", "切换浮动", "切换全屏", "共享工具", "远程控制", "打开链接", "生成链接", "生成脚本", "生成图片", [ "刷新界面", "刷新数据", "切换浮动", "切换全屏", "共享工具", "远程控制", "打开链接", "生成链接", "生成脚本", "生成图片", [
"其它", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据", "其它", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据",
"查看文档", "查看脚本", "查看源码", "查看配置", "清理配置", "导出配置", "导入配置", "删除配置", "删除工具", "查看文档", "查看脚本", "查看源码", "查看配置", "清理配置", "导出配置", "导入配置", "删除配置", "删除工具",
], [
"调试", "查看日志",
], ],
], ],
_engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input())) }, _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input())) },
@ -173,6 +175,11 @@ Volcanos(chat.ONACTION, {list: [
can.user.toastProcess(can), can.onmotion.delay(can, function() { can.user.toastSuccess(can), can.Update() }, 1000) can.user.toastProcess(can), can.onmotion.delay(can, function() { can.user.toastSuccess(can), can.Update() }, 1000)
}) }, }) },
"删除工具": function(event, can) { can.page.Remove(can, can._target) }, "删除工具": function(event, can) { can.page.Remove(can, can._target) },
"查看日志": function(event, can, button, sub) { sub = can._outputs[0]
sub.onimport.tool(sub, ["can.debug"], function(sub) {
sub.select()
})
},
refresh: function(event, can) { refresh: function(event, can) {
var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return } var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return }

View File

@ -1,4 +1,7 @@
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can, target) Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can, target)
if (can.isCmdMode) {
can.page.style(can, can._output, html.MAX_WIDTH, can.ConfWidth()||window.innerWidth)
}
if (can.Mode() == html.ZONE) { if (can.Mode() == html.ZONE) {
msg.Table(function(value) { var action = [] msg.Table(function(value) { var action = []
can.page.Select(can, can.page.Create(can, html.DIV, value.action), html.INPUT, function(target) { can.page.Select(can, can.page.Create(can, html.DIV, value.action), html.INPUT, function(target) {
@ -126,7 +129,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(
node = node||{"": target}; can.core.List(list, function(item) { item[field] && can.core.List(item[field].split(split), function(value, index, array) { if (!value) { return } node = node||{"": target}; can.core.List(list, function(item) { item[field] && can.core.List(item[field].split(split), function(value, index, array) { if (!value) { return }
var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split); if (node[name]) { return } var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split); if (node[name]) { return }
var ui = can.page.Append(can, node[last], [{view: html.ITEM, list: [ var ui = can.page.Append(can, node[last], [{view: html.ITEM, list: [
{view: [["switch", item.expand? cli.OPEN: ""], html.DIV, (index==array.length-1? "": "\u25B8")]}, {view: [["switch", item.expand? cli.OPEN: ""], html.DIV, (index==array.length-1? "": can.page.unicode.close)]},
{view: [mdb.NAME, html.DIV, value], _init: item._init}, {view: [mdb.NAME, html.DIV, value], _init: item._init},
], onclick: function(event) { if (node[name].childElementCount == 2) { node[name].firstChild.click() } ], onclick: function(event) { if (node[name].childElementCount == 2) { node[name].firstChild.click() }
index < array.length - 1? can.page.ClassList.set(can, ui["switch"], cli.OPEN, !can.page.ClassList.neg(can, node[name], html.HIDE)): can.base.isFunc(cb) && cb(event, item) index < array.length - 1? can.page.ClassList.set(can, ui["switch"], cli.OPEN, !can.page.ClassList.neg(can, node[name], html.HIDE)): can.base.isFunc(cb) && cb(event, item)

View File

@ -13,7 +13,8 @@ var ice = {
TB: "\t", SP: " ", DF: ":", EQ: "=", AT: "@", PS: "/", PT: ".", FS: ",", NL: "\n", LT: "<", GT: ">", TB: "\t", SP: " ", DF: ":", EQ: "=", AT: "@", PS: "/", PT: ".", FS: ",", NL: "\n", LT: "<", GT: ">",
OK: "ok", TRUE: "true", FALSE: "false", SUCCESS: "success", FAILURE: "failure", PROCESS: "process", OK: "ok", TRUE: "true", FALSE: "false", SUCCESS: "success", FAILURE: "failure", PROCESS: "process",
AUTO: "auto", HTTP: "http", LIST: "list", BACK: "back", AUTO: "auto",
HTTP: "http", HTML: "html", LIST: "list", BACK: "back",
SHOW: "show", HIDE: "hide", HELP: "help", COPY: "copy", SHOW: "show", HIDE: "hide", HELP: "help", COPY: "copy",
VIEW: "view", MODE: "mode", SHIP: "ship", EXEC: "exec", VIEW: "view", MODE: "mode", SHIP: "ship", EXEC: "exec",
@ -59,7 +60,7 @@ var ctx = {
} }
var mdb = { var mdb = {
DICT: "dict", META: "meta", HASH: "hash", LIST: "list", DICT: "dict", META: "meta", HASH: "hash", LIST: "list",
DATA: "data", VIEW: "view", DATA: "data", VIEW: "view", ICON: "icon",
ID: "id", KEY: "key", TIME: "time", ZONE: "zone", TYPE: "type", NAME: "name", TEXT: "text", LINK: "link", SCAN: "scan", HELP: "help", ID: "id", KEY: "key", TIME: "time", ZONE: "zone", TYPE: "type", NAME: "name", TEXT: "text", LINK: "link", SCAN: "scan", HELP: "help",
SHORT: "short", FIELD: "field", TOTAL: "total", COUNT: "count", LIMIT: "limit", SHORT: "short", FIELD: "field", TOTAL: "total", COUNT: "count", LIMIT: "limit",
@ -257,7 +258,7 @@ var Volcanos = shy({version: window._version||"", iceberg: "/chat/", volcano: "/
var meta = arguments.callee.meta, list = arguments.callee.list; if (typeof name == lang.OBJECT) { var meta = arguments.callee.meta, list = arguments.callee.list; if (typeof name == lang.OBJECT) {
if (name.length > 0) { return Volcanos({panels: [{name: chat.HEADER, style: html.HIDE, state: [mdb.TIME, aaa.USERNICK]}, {name: chat.ACTION, style: html.MAIN, tool: name}, {name: chat.FOOTER, style: html.HIDE}]}) } if (name.length > 0) { return Volcanos({panels: [{name: chat.HEADER, style: html.HIDE, state: [mdb.TIME, aaa.USERNICK]}, {name: chat.ACTION, style: html.MAIN, tool: name}, {name: chat.FOOTER, style: html.HIDE}]}) }
var Config = name; name = Config.name||ice.CAN, _can_name = "", _can_path = "" var Config = name; name = Config.name||ice.CAN, _can_name = "", _can_path = ""
meta.iceberg = Config.iceberg||meta.iceberg, meta.libs = Config.libs||chat.libs, panels = Config.panels||chat.panel_list meta.iceberg = Config.iceberg||meta.iceberg, meta.libs = Config.libs||chat.libs, panels = Config.panels||chat.panel_list, delete(Config.panels)
libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/panel/"+p.name+nfs._JS, "/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugin||chat.plugin_list) libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/panel/"+p.name+nfs._JS, "/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugin||chat.plugin_list)
cb = can||function(can) { can.onengine._init(can, can.Conf(Config), panels, Config._init||meta._init, can._target) } cb = can||function(can) { can.onengine._init(can, can.Conf(Config), panels, Config._init||meta._init, can._target) }
can = Config, can._follow = name, can._target = Config.target||meta.target, can._height = Config.height||meta._height, can._width = Config.width||meta._width can = Config, can._follow = name, can._target = Config.target||meta.target, can._height = Config.height||meta._height, can._width = Config.width||meta._width