mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
add can.page.AppendData
This commit is contained in:
parent
ecf90a81da
commit
ba3b7713b4
2
frame.js
2
frame.js
@ -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
|
||||
},
|
||||
})
|
||||
|
@ -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; }
|
||||
|
57
lib/page.js
57
lib/page.js
@ -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)
|
||||
},
|
||||
})
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
])
|
||||
})
|
||||
}),
|
||||
})
|
||||
|
@ -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)]: []}
|
||||
|
@ -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) {
|
||||
|
@ -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) })
|
||||
|
Loading…
x
Reference in New Issue
Block a user