mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
opt can.debug
This commit is contained in:
parent
ba3b7713b4
commit
a6726463e0
13
frame.js
13
frame.js
@ -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.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})
|
||||
delete(sub._history), delete(sub._conf.feature)
|
||||
}, 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"]) })
|
||||
@ -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) }),
|
||||
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
|
||||
},
|
||||
})
|
||||
@ -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)
|
||||
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,
|
||||
_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 }
|
||||
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) }
|
||||
@ -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)
|
||||
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)
|
||||
}, 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(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});
|
||||
@ -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())
|
||||
sub.run = function(event, cmds, 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._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) {
|
||||
@ -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])
|
||||
}) } }); 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
|
||||
switch (type||ice.AUTO) {
|
||||
case FLOW:
|
||||
|
11
index.css
11
index.css
@ -279,6 +279,7 @@ fieldset.plugin.inner.cmd>form.option { display:none; }
|
||||
fieldset.xterm div.toggle { display:none; }
|
||||
fieldset>div.output fieldset.plug { position:absolute; bottom:0; right:0; }
|
||||
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; }
|
||||
.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 */
|
||||
@ -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.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; }
|
||||
span.string { color:#f29766; }
|
||||
span.tag { color:#5cadd4; }
|
||||
div.item.function>span.value { font-style:italic; }
|
||||
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; }
|
||||
|
18
lib/misc.js
18
lib/misc.js
@ -154,7 +154,7 @@ Volcanos("misc", {Message: function(event, can) { var msg = {}
|
||||
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.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))
|
||||
}, msg.detail = data.detail, msg.Copy(data)
|
||||
try {
|
||||
@ -211,33 +211,35 @@ Volcanos("misc", {Message: function(event, can) { var msg = {}
|
||||
if (value != undefined) { localStorage.setItem(key, value) }
|
||||
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
|
||||
var args = [this._time(), this.fileLine(pos).link]
|
||||
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") }
|
||||
}
|
||||
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]
|
||||
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]
|
||||
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
|
||||
},
|
||||
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]) }
|
||||
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
|
||||
},
|
||||
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]) }
|
||||
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
|
||||
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 (!output) { return }
|
||||
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
|
||||
},
|
||||
FileLine: function(depth, length) { var file = this.fileLine(depth+1, length||9); return file.link },
|
||||
|
102
lib/page.js
102
lib/page.js
@ -247,61 +247,67 @@ Volcanos("page", {ClassList: {
|
||||
width: function() { return window.innerWidth },
|
||||
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 },
|
||||
AppendData: function(can, target, prefix, key, value, cb) {
|
||||
var open = "\u25BE ", close = "\u25B8 "
|
||||
function show(value, skip) { switch (typeof value) {
|
||||
case "object": if (!value) { return {} }
|
||||
if (value._path) { return {type: "plugin", open: open, close: close, value: "\""+value._path+"\""} }
|
||||
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):"")} }
|
||||
if (skip) { return {value: value.length == undefined? "{...}": "[...]"} }
|
||||
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(",")+"]"} }
|
||||
return {type: typeof value, open: open, close: close, value: "{"+can.core.Item(value, function(key, val) {
|
||||
if (value.hasOwnProperty(key)) { return key+":"+show(val, true).value }
|
||||
}).join(",")+"}"}
|
||||
case "string": return {type: typeof value, open: "s ", close: "s ", value: "\""+value+"\""}
|
||||
case "number": return {type: typeof value, open: "n ", close: "n ", value: value}
|
||||
case "boolean": return {type: typeof value, open: "b ", close: "b ", value: value}
|
||||
case "function": return {type: typeof value, open: "f ", close: "f ", value: (""+value).split(ice.NL)[0]}
|
||||
default: return {type: typeof value, open: " ", close: " ", value: value}
|
||||
} }
|
||||
var loaded = false, _show = show(value)
|
||||
var ui = can.page.Append(can, target, [{view: [[html.ITEM, _show.type]], list: [
|
||||
{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() { 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 } loaded = true, ui.icon.innerText = _show.open
|
||||
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 (["innerText", "outerText", "innerHTML", "outerHTML", "textContent"].indexOf(key) > -1 || typeof value == "function") { return } return key }).sort(), function(key) {
|
||||
key.toUpperCase() != key && target[key] && can.page.AppendData(can, ui.list, can.core.Keys(prefix, key), key, target[key])
|
||||
unicode: {
|
||||
open: "\u25BE", close: "\u25B8", inner: "..",
|
||||
},
|
||||
AppendData: function(can, target, prefix, key, value, cb) { var open = can.page.unicode.open, close = can.page.unicode.close
|
||||
function show(value, deep) { deep = deep == undefined? 2: 0; switch (typeof value) {
|
||||
case lang.OBJECT: if (!value) { return {} }
|
||||
if (deep < 0) { return {value: value.length == undefined? "{"+can.page.unicode.inner+"}": "["+can.page.unicode.inner+"]"} }
|
||||
if (value.tagName) { return {type: "target", value: "# "+value.tagName.toLowerCase()+(value.className? ice.PT+value.className.replaceAll(ice.SP, ice.PT):"")} }
|
||||
if (value._path) { return {value: "@ \""+value._path+"\""} }
|
||||
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)+"]"} }
|
||||
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 lang.STRING: return {open: "s", close: "s", value: "\""+(value.indexOf(ice.NL) > -1? value.split(ice.NL)[0]+can.page.unicode.inner: value)+"\""}
|
||||
case lang.NUMBER: return {open: "n", close: "n", value: value}
|
||||
case lang.BOOLEAN: return {open: "b", close: "b", value: value}
|
||||
case lang.FUNCTION: return {open: "f", close: "f", value: ("$ "+value).split(ice.NL)[0]}
|
||||
default: return {value: value}
|
||||
} } var loaded = false, _show = show(value); _show.open = _show.open||open, _show.close = _show.close||close
|
||||
var ui = can.page.Append(can, target, [!key && value.tagName? can.page.AppendView(can, value): {view: [[html.ITEM, _show.type||typeof(value)]], 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]},
|
||||
], onclick: function() { cb && cb(prefix, value); if (typeof value != lang.OBJECT) { return }
|
||||
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 (value.tagName) { can.page.Append(can, ui.list, [can.page.AppendView(can, value)]), can.onappend.style(can, mdb.VIEW, ui.list)
|
||||
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) {
|
||||
target[key] && can.page.AppendData(can, ui.list, can.core.Keys(prefix, key), key, target[key], cb)
|
||||
})
|
||||
} 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 {
|
||||
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]) })
|
||||
value.__proto__ && can.core.Item(value.__proto__).length > 0 && can.page.AppendData(can, ui.list, can.core.Keys(prefix, "__proto__"), "__proto__", value.__proto__)
|
||||
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) })
|
||||
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"}}])
|
||||
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) {
|
||||
return item.value == "" || item.value == item.name? {type: html.SPAN, list: [{text: " "}, {text: item.name}]}:
|
||||
{type: html.SPAN, list: [{text: " "}, {text: item.name}, {text: "="}, {className: "string", text: "\""+item.value+"\""}]}
|
||||
return item.value == "" || item.value == item.name? {type: html.SPAN, list: [{text: ice.SP}, {text: item.name}]}:
|
||||
{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 inner = target.innerHTML? "...": ""; 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: "some", list: [
|
||||
{view: [[html.ITEM]], list: [
|
||||
{text: target.children.length > 0? close: " ", _init: function(target) { ui.toggle = target }},
|
||||
{className: "tag", text: can.page.replace(can, "<")}, {className: "tag", text: tag}, {type: html.SPAN, list: _field},
|
||||
{className: "tag", text: can.page.replace(can, ">")}, inner && {text: inner, _init: function(target) { ui.inner = 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)? open: close
|
||||
ui.inner && can.onmotion.toggle(can, ui.inner), can.onmotion.toggle(can, ui.close), can.onmotion.toggle(can, ui._close)
|
||||
if (!loaded) { can.page.Append(can, ui.list, can.core.List(target.children, function(node) { return show(node, node.tagName.toLowerCase()) })) } loaded = true
|
||||
}, _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: "tag", text: can.page.replace(can, "</"+tag+">")}], _init: function(target) { ui.close = target }},
|
||||
]}
|
||||
} return show(target, tag, list, loaded)
|
||||
var ui = {}; tag = tag||target.tagName.toLowerCase(), isclose = tag != "meta" && tag != "link", _field = field(target)
|
||||
var inner = target.innerHTML? can.page.unicode.inner: ""; if (target && target.tagName) { target.innerText == target.innerHTML && (inner = target.innerText) }
|
||||
return {view: mdb.VIEW, list: [
|
||||
{view: [[html.ITEM]], list: [
|
||||
{text: (target.children.length > 0? can.page.unicode.close: ice.SP)+ice.SP, _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: code.KEYWORD, text: can.page.replace(can, ice.GT)}, 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 }},
|
||||
], onclick: function(event) { ui.toggle.innerText = (can.onmotion.toggle(can, ui.list)? can.page.unicode.open: can.page.unicode.close)+ice.SP
|
||||
ui.inner && can.onmotion.toggle(can, ui.inner), can.onmotion.toggle(can, ui.close), can.onmotion.toggle(can, ui._close)
|
||||
if (!loaded) {
|
||||
if (can.page.tagis(target, "style", "script")) { can.page.Append(can, ui.list, [{text: target.innerHTML}]) } else {
|
||||
can.page.Append(can, ui.list, can.core.List(target.children, function(node) { return can.page.AppendView(can, node, "", null, false, cb) }))
|
||||
}
|
||||
} loaded = true
|
||||
can.base.isFunc(cb) && cb(target)
|
||||
}, 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 }},
|
||||
]}
|
||||
},
|
||||
})
|
||||
|
@ -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) {
|
||||
can.onimport._title(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)
|
||||
},
|
||||
_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: [
|
||||
{text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]},
|
||||
], onclick: function(event) { can.onexport[item](can) }}])
|
||||
@ -22,7 +22,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
} }}, "", 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+"")+"" }) },
|
||||
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) },
|
||||
})
|
||||
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
|
||||
},
|
||||
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) {
|
||||
var cmds = can.base.Obj(line.cmds); switch (line.follow) {
|
||||
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) {
|
||||
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) {
|
||||
arg && arg.length > 1 && can.misc[arg[0]](can, arg[1])
|
||||
can.onmotion.delay(can, function() { var can = msg._can
|
||||
can.page.Append(can, can._output, [{type: html.TABLE, className: html.CONTENT, list: [{type: html.TR, list: [
|
||||
{type: html.TH, inner: mdb.TIME},
|
||||
{type: html.TH, inner: nfs.FILE},
|
||||
{type: html.TH, inner: mdb.TYPE},
|
||||
{type: html.TH, inner: mdb.TEXT},
|
||||
]}].concat(can.core.List(can.misc._list, function(list) { return {type: html.TR, list: [
|
||||
{type: html.TD, inner: list[0]},
|
||||
{type: html.TD, inner: list[1].indexOf(location.origin) == 0? list[1].slice(location.origin.length+1): list[1]},
|
||||
{type: html.TD, inner: list[2]},
|
||||
{type: html.TD, list: can.core.List(list.slice(3), function(item) { if (can.base.isString(item)) { return {text: item} }
|
||||
return {view: "data", _init: function(target) { can.page.AppendData(can, target, "", "", item, function(prefix, value) {
|
||||
can.Option(mdb.KEY, prefix)
|
||||
})}}
|
||||
}), onclick: function(event) {
|
||||
can.onkeymap.prevent(event)
|
||||
}},
|
||||
], onclick: function(event) {
|
||||
var _ls = /(https*:\/\/[^/]+)*([^:]+):([0-9]+):([0-9]+)/.exec(list[1])
|
||||
can.onexport.record(can, list[1], mdb.LINK, {
|
||||
time: list[0],
|
||||
link: list[1],
|
||||
type: list[2],
|
||||
path: "usr/volcanos/",
|
||||
file: _ls[2],
|
||||
line: _ls[3],
|
||||
})
|
||||
}} })) }])
|
||||
can.onappend._status(can, [{name: mdb.TIME, value: can.base.Time()}, {name: mdb.COUNT, value: can.misc._list.length+"x4"}])
|
||||
})
|
||||
}),
|
||||
data: shy("网页标签", ["key"], function(can, msg, arg) {
|
||||
can.onmotion.delay(can, function() { var can = msg._can
|
||||
if (can.Option(mdb.KEY)) {
|
||||
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 {
|
||||
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)
|
||||
])
|
||||
})
|
||||
}),
|
||||
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
|
||||
var ui = can.page.Appends(can, can._output, [{type: html.TABLE, className: html.CONTENT, list: [{type: html.TR, list: [
|
||||
{type: html.TH, inner: mdb.TIME}, {type: html.TH, inner: mdb.TEXT},
|
||||
]}].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.TD, inner: list[0]},
|
||||
{type: html.TD, list: can.core.List(list.slice(1), function(item, index) { var vimer
|
||||
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) {
|
||||
var _ls = /(https*:\/\/[^/]+)\/*([^:]+):([0-9]+):([0-9]+)/.exec(list[1])
|
||||
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 }
|
||||
if (vimer) { return can.page.Remove(can, vimer._target), vimer = null }
|
||||
vimer = can.onappend.plugin(_can, {index: "web.code.inner", args: [ice.USR_VOLCANOS, _ls[2], _ls[3]]}, function(sub) {}, event.target.parentNode)
|
||||
}}]} } if (!can.base.isObject(item)) { return {text: item+ice.SP} }
|
||||
return {view: mdb.DATA, _init: function(target) { can.page.AppendData(can, target, "", "", item)}}
|
||||
})},
|
||||
]} })) }]); 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"}])
|
||||
}) }),
|
||||
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"}])
|
||||
if (can.Option(mdb.KEY)) {
|
||||
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.Option(mdb.KEY, prefix)
|
||||
})._target.click()
|
||||
} else {
|
||||
can.page.AppendData(can, can._output, "", can._root._name, can._root, function(prefix, value) {
|
||||
can.Option(mdb.KEY, prefix)
|
||||
})._target.click()
|
||||
}
|
||||
}) }),
|
||||
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", null, false, function(target) {
|
||||
var list = []; for (var p = target; p && p.tagName; p = p.parentNode) {
|
||||
list.push(p.tagName.toLowerCase()+(p.className? ice.PT+p.className.replaceAll(ice.SP, ice.PT): ""))
|
||||
}
|
||||
can.page.Appends(can, can._action, [{view: [html.ITEM, html.DIV, list.reverse().join(ice.SP+ice.GT+ice.SP)]}])
|
||||
}),
|
||||
], true)])
|
||||
}) }),
|
||||
})
|
||||
})()
|
||||
|
@ -7,11 +7,14 @@ Volcanos(chat.ONACTION, {
|
||||
onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(event) },
|
||||
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target)
|
||||
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) {
|
||||
case "m": can.CloneField(); break
|
||||
case "b": can.CloneInput(); break
|
||||
default: can.onkeymap.selectOutput(event, can.sup); return
|
||||
} can.onkeymap.prevent(event)
|
||||
},
|
||||
onkeyup: function(event, can) {
|
||||
if (event.key == lang.ENTER) { return can.onkeymap.prevent(event) }
|
||||
},
|
||||
})
|
||||
|
@ -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.string { color:magenta; }
|
||||
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>div.zone fieldset.plug { position:static; }
|
||||
fieldset.inner>div.output>div.project>div.zone fieldset.plug legend { display:none; }
|
||||
|
@ -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._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display
|
||||
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)
|
||||
switch (can.Mode()) {
|
||||
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.record = function(_, value, key, 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/")
|
||||
if (_arg.indexOf(location.origin) == 0 && ls.length > 1) {
|
||||
|
@ -99,6 +99,8 @@ Volcanos(chat.ONACTION, {list: [
|
||||
"刷新界面", "刷新数据", "切换浮动", "切换全屏", "共享工具", "远程控制", "打开链接", "生成链接", "生成脚本", "生成图片", [
|
||||
"其它", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据",
|
||||
"查看文档", "查看脚本", "查看源码", "查看配置", "清理配置", "导出配置", "导入配置", "删除配置", "删除工具",
|
||||
], [
|
||||
"调试", "查看日志",
|
||||
],
|
||||
],
|
||||
_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)
|
||||
}) },
|
||||
"删除工具": 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) {
|
||||
var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return }
|
||||
|
@ -1,4 +1,7 @@
|
||||
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) {
|
||||
msg.Table(function(value) { var action = []
|
||||
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 }
|
||||
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: [
|
||||
{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},
|
||||
], 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)
|
||||
|
7
proto.js
7
proto.js
@ -13,7 +13,8 @@ var ice = {
|
||||
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",
|
||||
|
||||
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",
|
||||
VIEW: "view", MODE: "mode", SHIP: "ship", EXEC: "exec",
|
||||
|
||||
@ -59,7 +60,7 @@ var ctx = {
|
||||
}
|
||||
var mdb = {
|
||||
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",
|
||||
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) {
|
||||
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 = ""
|
||||
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)
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user