1
0
forked from x/volcanos
This commit is contained in:
harveyshao 2021-12-30 17:37:26 +08:00
parent 6538e662f3
commit 1002e633dd
4 changed files with 90 additions and 3 deletions

25
plugin/story/json.css Normal file
View File

@ -0,0 +1,25 @@
fieldset.plugin div.output div.item div.item {
border:solid 1px #0000000d;
border-left:dashed 1px lightblue;
margin-left:5px; padding-left:15px;
font-size:14px; font-family:monospace;
cursor:pointer;
}
fieldset.plugin div.output div.item div.item:hover {
border:solid 1px red;
}
fieldset.plugin div.output div.item span.nonce {
font-size:12px; font-family:auto;
color:lightblue;
cursor:pointer;
}
fieldset.plugin div.output div.item span.key {
color:yellow;
}
fieldset.plugin div.output div.item span.string {
color:magenta;
}
fieldset.plugin div.output div.item span.const {
color:cyan;
}

60
plugin/story/json.js Normal file
View File

@ -0,0 +1,60 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
can.onimport.show(can, can.base.Obj(msg.Result(), {}), target)
},
show: function(can, data, target) {
function show(data, target, index, total) { var list
switch (typeof data) {
case lang.OBJECT:
if (data == null) {
return can.page.Append(can, list, [{text: "null"}]).item
return
}
function wrap(begin, end, add, cb) {
can.page.Append(can, target, [{text: begin}])
add && can.page.Append(can, target, [{text: ["...", html.SPAN, "nonce"]}]), cb()
can.page.Append(can, target, [{text: end}])
}
function toggle(list) { list && can.onmotion.toggle(can, list) }
function _item() {
list = list || can.page.Append(can, target, [{view: html.LIST}]).list
return can.page.Append(can, list, [{view: html.ITEM}]).item
}
if (can.base.isArray(data)) { // 数组
wrap("[", "]", data.length > 0, function() { can.core.List(data, function(value, index) { var item = _item()
show(value, item, index, data.length)
}) })
} else { // 对象
var length = can.core.Item(data).length, count = 0
wrap("{", "}", length > 0, function() { can.core.Item(data, function(key, value) { var item = _item()
can.page.Append(can, item, [{text: ['"'+key+'"', html.SPAN, "key"], onclick: function(event) { toggle(sub) }}, {text: ': '}])
var sub = show(value, item, count++, length)
}) })
}
break
case lang.STRING: /* 字串 */ can.page.Append(can, target, [{text: ['"'+data+'"', html.SPAN, lang.STRING]}]); break
default: /* 其它 */ can.page.Append(can, target, [{text: [''+data+'', html.SPAN, "const"]}])
}
(index < total-1) && can.page.Append(can, target, [{text: ice.FS}])
return list
}; show(data, can.page.Append(can, target, [{view: html.ITEM}]).item, 0, 0)
},
}, [""])
Volcanos("onaction", {help: "组件菜单", list: ["展开", "折叠", "复制"],
"展开": function(event, can) {
can.page.Select(can, can._output, "div.list div.list", function(list) {
can.onmotion.hidden(can, list, true)
})
},
"折叠": function(event, can) {
can.page.Select(can, can._output, "div.list div.list", function(list) {
can.onmotion.hidden(can, list)
})
},
"复制": function(event, can) {
can.user.copy(event, can, can._msg.Result())
},
})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -1,14 +1,16 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() {
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
can.onmotion.clear(can), can.onimport._show(can, msg)
var r = 200, margin = 20; can.svg.Val(html.WIDTH, 2*(r+margin)), can.svg.Val(html.HEIGHT, 2*(r+margin))
can.onimport._draw(can, msg, "value", r+margin, r+margin, r, margin, 0)
can._args = can.base.Copy({field: "value"}, can.base.ParseURL(can._display))
can.onimport._draw(can, msg, can._args.field, r+margin, r+margin, r, margin, 0)
can.onmotion.clear(can, can.ui.project), can.onappend.table(can, msg, null, can.ui.project)
can.onmotion.hidden(can, can.ui.project, true)
can.page.Modify(can, can.ui.project, {style: {"max-width": 480}})
can.page.Select(can, can.ui.project, html.TR, function(tr, index) {
can.page.Modify(can, tr, {onmouseenter: function(event) {
can.onmotion.clear(can, can.svg), can.onimport._draw(can, msg, "value", r+margin, r+margin, r, margin, index-1)
can.onmotion.clear(can, can.svg), can.onimport._draw(can, msg, can._args.field, r+margin, r+margin, r, margin, index-1)
}})
})
})

View File

@ -184,7 +184,7 @@ var html = {
CLASS: "class", BLOCK: "block", NONE: "none",
TITLE: "title", A: "a", LABEL: "label", INNER: "inner",
STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", MONOSPACE: "monospace",
LIST: "list", ITEM: "item", MENU: "menu",
LIST: "list", ITEM: "item", MENU: "menu", NODE: "node",
SUBMIT: "submit", CANCEL: "cancel",
WSS: "wss", SVG: "svg",
MAX_HEIGHT: "max-height", MAX_WIDTH: "max-width",