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

add can.page.AppendData

This commit is contained in:
harveyshao 2023-01-21 00:46:00 +08:00
parent ecf90a81da
commit ba3b7713b4
8 changed files with 98 additions and 60 deletions

View File

@ -67,7 +67,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)
_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)
return can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.CallFunc(cb, {event: msg._event, msg: msg}) }).length
},
})

View File

@ -327,4 +327,6 @@ 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; }
fieldset.data 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; }
span.tag { color:#5cadd4; }

View File

@ -247,4 +247,61 @@ 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])
})
} 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) })
} 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__)
}
}}, {view: html.LIST, style: {"margin-left": "20px"}}])
},
AppendView: function(can, target, tag, list, loaded) {
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+"\""}]}
}): [] }
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)
},
})

View File

@ -235,43 +235,6 @@ Volcanos(chat.ONPLUGIN, {
can.Option(chat.LAYOUT, can.getAction(chat.LAYOUT)||ice.AUTO)
},
}, ["layout:select=auto,tabs,tabview,horizon,vertical,free,grid,flow,page", ice.RUN], function(can, msg, arg) { can.onaction.layout(can, arg[0], true) }),
data: shy("网页标签", function(can, msg, arg) {
can.onmotion.delay(can, function() { var can = msg._can
function show(value) { switch (typeof value) {
case "object":
if (value._path) {
return {type: "plugin", open: "- ", close: "+ ", value: "\""+value._path+"\""}
}
if (value.tagName) {
return {type: "html", open: "- ", close: "+ ", value: value.tagName.toLowerCase()+ice.PT+value.className.replaceAll(ice.SP, ice.PT)}
}
if (value.length != undefined) {
return {type: "array", open: "- ", close: "+ ", value: "["+can.core.List(value, function(value) { return show(value).value }).join(",")+"]"}
}
return {type: typeof value, open: "- ", close: "+ ", value: ""}
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}
} }
function add(target, key, 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+" "]},
{view: [mdb.VALUE, html.SPAN, _show.value]},
], onclick: function() { if (typeof value != "object") { return }
if (loaded) { return ui.icon.innerText = can.onmotion.toggle(can, ui.list)? _show.open: _show.close } loaded = true, ui.icon.innerText = _show.open
can.core.List(can.core.Item(value, function(key) { if (value.hasOwnProperty(key)) { return key } }).sort(), function(key) { add(ui.list, key, value[key]) })
}}, {view: html.LIST, style: {"margin-left": "20px"}}])
} add(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, [{view: [html.ITEM, html.DIV, "html"]}])
})
}),
"parse": shy("生成网页", {
"show": function(can, msg, arg) { var name = arg[1]||ice.CAN; can.isCmdMode() && can.user.title(name)
arg && arg[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, [chat.PLUGIN_STORY+"parse.js"], function(sub) {

View File

@ -68,8 +68,8 @@ Volcanos(chat.ONPLUGIN, {
}),
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 sub = msg._can; sub.page.style(can, sub._output, html.MAX_HEIGHT, 200)
can.page.Append(can, sub._output, [{type: html.TABLE, className: html.CONTENT, list: [{type: html.TR, list: [
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},
@ -78,20 +78,16 @@ Volcanos(chat.ONPLUGIN, {
{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, inner: can.core.List(list.slice(3), function(item) {
if (item.Conf) {
return "can"
} else if (item.Option) {
return "msg"
} else if (can.base.isString(item)) {
return item
} else {
return JSON.stringify(item)
}
}).join(ice.SP)},
{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])
sub.onexport.record(sub, list[1], mdb.LINK, {
can.onexport.record(can, list[1], mdb.LINK, {
time: list[0],
link: list[1],
type: list[2],
@ -100,6 +96,26 @@ Volcanos(chat.ONPLUGIN, {
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)
])
})
}),
})

View File

@ -282,7 +282,7 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) {
})
},
_index: function(can, msg, cb) {
if (can.Option(nfs.LINE) == web.DREAM) { can.ui.dream && can.onmotion.delay(can, function() { can.ui.dream.refresh() }, 5000)
if (can.Option(nfs.LINE) == web.DREAM) { can.ui.zone.dream && can.onmotion.delay(can, function() { can.ui.dream.refresh() }, 5000)
return can.base.isFunc(cb) && cb(msg._content = msg._content||can.page.insertBefore(can, [{view: [html.CONTENT, html.IFRAME],
src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), height: can.ui.content.offsetHeight, width: can.ui.content.offsetWidth}], can.ui._content))
} var meta = {type: "story", index: msg.Option(ctx.INDEX), args: can.Option(nfs.PATH) == ctx.COMMAND && can.Option(nfs.LINE) != ctx.INDEX? [can.Option(nfs.LINE)]: []}

View File

@ -29,7 +29,7 @@ Volcanos(chat.ONFIGURE, {
source: function(can, target, zone, path) { var args = can.base.getValid(can.misc.SearchHash(can), [can.Option(nfs.PATH), can.Option(nfs.FILE)])
zone._icon({"+": function(event) { can.user.carteRight(event, can, {}, ["script", "autogen"]) } })
function show(target, zone, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) { can.onmotion.clear(can, target)
if (path == nfs.SRC) { can.ui.source.refresh = function() { show(target, zone, path) } }
if (path == nfs.SRC) { can.ui.zone.source.refresh = function() { show(target, zone, path) } }
var total, node; function add(list) {
can.core.List(list, function(item) { if (path == args[0] && args[1].indexOf(item.path) == 0) { item.expand = true } item._menu = shy({
create: function(event) { can.user.input(event, can, ["filename"], function(list) {
@ -79,17 +79,17 @@ Volcanos(chat.ONACTION, {list: ["首页", "官网", "文档"],
_daemon: function(event, can, arg) { switch (arg[0]) {
case web.DREAM: can.runAction({}, arg[0], arg.slice(1), function(msg) { can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys(can.misc.Search(can, ice.POD), msg.Option(mdb.NAME)), web.DREAM) }); break
case code.XTERM: can.runAction({}, arg[0], arg.slice(1), function(msg) { can.onimport.tabview(can, ctx.COMMAND, code.XTERM, msg.Result()) }); break
default: can.runAction({}, arg[0], arg.slice(1), function(msg) { can.onimport.tabview(can, msg.Option(nfs.PATH)||can.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.source.refresh() })
default: can.runAction({}, arg[0], arg.slice(1), function(msg) { can.onimport.tabview(can, msg.Option(nfs.PATH)||can.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.zone.source.refresh() })
} },
_run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) {
can.onimport.tabview(can, msg.Option(nfs.PATH)||can.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.source.refresh(), can.user.toastSuccess(can, button)
can.onimport.tabview(can, msg.Option(nfs.PATH)||can.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.zone.source.refresh(), can.user.toastSuccess(can, button)
}) },
_runs: function(event, can, button, cb) { var meta = can.Conf(); can.request(event, {action: button})
can.user.input(event, can, meta.feature[button], function(args) { can.onaction._run(event, can, button, args, cb) })
},
autogen: function(event, can, button) { can.onaction._runs(can.request(event, {path: nfs.SRC}), can, button, function(msg) {
can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(cli.MAIN), "", function() {
can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.source.refresh(), can.user.toastSuccess(can)
can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.zone.source.refresh(), can.user.toastSuccess(can)
}, true)
}) },
script: function(event, can, button) {
@ -97,7 +97,7 @@ Volcanos(chat.ONACTION, {list: ["首页", "官网", "文档"],
},
dream: function(event, can, button) {
can.onaction._runs(can.request(event, {name: can.base.trimSuffix(can.Option(nfs.FILE).split(ice.PS).pop(), ice.PT+can.base.Ext(can.Option(nfs.FILE)))}), can, button, function(msg) {
can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(mdb.NAME), web.DREAM), can.ui.dream.refresh(), can.user.toastSuccess(can)
can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(mdb.NAME), web.DREAM), can.ui.zone.dream.refresh(), can.user.toastSuccess(can)
})
},
website: function(event, can, button) {

View File

@ -112,7 +112,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(
}
}, onfocus: function(event) { var target = event.target; target.setSelectionRange && target.setSelectionRange(0, target.value.length) }}], target, {})
}},
{view: html.LIST, _init: function(target) { can.ui[zone.name] = zone, zone._target = target, zone.refresh = function() { can.onmotion.clear(can, target), zone._init(target, zone) }
{view: html.LIST, _init: function(target) { can.ui.zone = can.ui.zone||{}, can.ui.zone[zone.name] = zone, zone._target = target, zone.refresh = function() { can.onmotion.clear(can, target), zone._init(target, zone) }
zone._total = function(total) { return can.page.Modify(can, zone._search, {placeholder: "search in "+total+" item"}), total }
zone._icon = function(list) {
can.page.Select(can, zone._legend, "span.icon", function(target) { can.page.Remove(can, target) })