From d6c842461aa8dbac089e4ef28999a7a40b9fd0f4 Mon Sep 17 00:00:00 2001 From: shaoying Date: Wed, 4 Aug 2021 00:21:08 +0800 Subject: [PATCH] add json --- lib/base.js | 3 ++ plugin/local/wiki/json.css | 12 ++++++++ plugin/local/wiki/json.js | 56 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 plugin/local/wiki/json.css create mode 100644 plugin/local/wiki/json.js diff --git a/lib/base.js b/lib/base.js index e46fd5e3..00889615 100644 --- a/lib/base.js +++ b/lib/base.js @@ -200,6 +200,9 @@ Volcanos("base", {help: "数据类型", isNight: function() { var now = new Date() return now.getHours() < 7 || now.getHours() > 17 }, + isArray: function(arg) { + return typeof arg == "object" && arg.length != undefined + }, isFunc: function(cb) { return typeof cb == "function" }, diff --git a/plugin/local/wiki/json.css b/plugin/local/wiki/json.css new file mode 100644 index 00000000..1223a7e7 --- /dev/null +++ b/plugin/local/wiki/json.css @@ -0,0 +1,12 @@ +div.node { + border:solid 1px #0000000d; + border-left:dashed 1px lightblue; + margin-left:5px; + padding-left:15px; + font-size:14px; + font-family:monospace; + cursor:pointer; +} +div.node:hover { + border:solid 1px red; +} diff --git a/plugin/local/wiki/json.js b/plugin/local/wiki/json.js new file mode 100644 index 00000000..75412ac5 --- /dev/null +++ b/plugin/local/wiki/json.js @@ -0,0 +1,56 @@ +Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) { + can.base.isFunc(cb) && cb(msg) + function show(data, target) { var node + switch (typeof data) { + case "object": break + case "string": can.page.Append(can, target, [{text: '"'+data+'"'}]); return + default: can.page.Append(can, target, [{text: ''+data+''}]); return + } + + if (can.base.isArray(data)) { + can.page.Append(can, target, [{text: "["}]) + can.core.List(data, function(value, index) { + node = node || can.page.Append(can, target, [{view: "node"}]).node + + sub = show(value, node); + (index < data.length-1) && can.page.Append(can, node, [{text: ","}]) + can.page.Append(can, node, [{type: "br"}]) + }) + can.page.Append(can, target, [{text: "]"}]) + return node + } + + can.page.Append(can, target, [{text: "{"}]) + var total = can.core.Item(data).length, count = 0 + can.core.Item(data, function(key, value) { var sub + node = node || can.page.Append(can, target, [{view: "node"}]).node + + can.page.Append(can, node, [{text: '"'+key+'": ', onclick: function(event) { + sub && can.onmotion.toggle(can, sub) + }}]) + + sub = show(value, node); + (++count < total) && can.page.Append(can, node, [{text: ","}]) + can.page.Append(can, node, [{type: "br"}]) + }) + can.page.Append(can, target, [{text: "}"}]) + return node + } + show(JSON.parse(msg.Result()), can._output) + }, +}, ["/plugin/local/wiki/json.css"]) +Volcanos("onaction", {help: "组件菜单", list: ["全部展开", "全部折叠"], + "全部展开": function(event, can) { + can.page.Select(can, can._output, "div.node div.node", function(node) { + can.page.Modify(can, node, {style: {display: "block"}}) + }) + }, + "全部折叠": function(event, can) { + can.page.Select(can, can._output, "div.node div.node", function(node) { + can.page.Modify(can, node, {style: {display: "none"}}) + }) + }, +}) +Volcanos("onexport", {help: "导出数据", list: []}) + +