1
0
forked from x/volcanos

opt plugin

This commit is contained in:
shaoying 2021-01-16 05:21:21 +08:00
parent 52f3801585
commit 03b4897b13
18 changed files with 225 additions and 335 deletions

View File

@ -235,9 +235,25 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
Option: can.Option, Action: can.Action, Status: can.Status,
}, [item.display||"/plugin/input.js"].concat(Volcanos.meta.volcano).concat(Volcanos.meta.libs), function(input) {
input.Conf(item), input.sup = can, input.run = function(event, cmds, cb, silent) {
return can.onappend._output(can, meta, event, can.Pack(cmds), cb, silent)
if (cmds && cmds[0] == "action" && input.onaction[cmds[1]]) {
return input.onaction[cmds[1]](event, input)
}
var sub = can.core.Value(can, "_outputs.-1")
if (cmds && cmds[0] == "action" && sub && sub.onaction[cmds[1]]) {
return sub.onaction[cmds[1]](event, sub)
}
return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent)
}
can.onappend.figure(input, item, item.value, input._target)
can.core.Item(input.onaction, function(key, value) {
key.indexOf("on") == 0 && (input._target[key] = input._target[key] || function(event) {
value(event, input)
})
})
input.onaction && input.onaction._init && input.onaction._init(input, item, [], next, input._target)
}); return can._inputs[item.name] = input
}; can.core.Next(can.base.Obj(meta.inputs, []), add)
@ -268,8 +284,28 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return can.onaction[cmds[1]](event, can)
}
var feature = can.Conf("feature")
var input = feature && feature[cmds[1]]; if (cmds[0] == "action" && input) {
can.user.input(event, can, input, function(ev, button, data, list) {
can.core.Item(data, function(key, value) {
key && value && cmds.push(key, value)
})
can.run(event, cmds, function(msg) {
var sub = can.core.Value(can, "_outputs.-1")
if (can.core.CallFunc("onimport._process", [sub, msg, cmds, cb], sub)) { return }
if (can.core.CallFunc("onimport._process", [can, msg, cmds, cb], can)) { return }
typeof cb == "function" && cb(msg)
}, silent)
return true
})
return
}
return can.run(event, cmds||[], function(msg) {
if (can.onimport._process(can, msg, cmds, cb)) { return }
var sub = can.core.Value(can, "_outputs.-1")
if (can.core.CallFunc("onimport._process", [sub, msg, cmds, cb], sub)) { return }
if (can.core.CallFunc("onimport._process", [can, msg, cmds, cb], can)) { return }
typeof cb == "function" && cb(msg)
if (silent) { return }
@ -281,6 +317,10 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
Option: can.Option, Action: can.Action, Status: can.Status,
}, [display].concat(Volcanos.meta.volcano).concat(Volcanos.meta.libs), function(table) {
table.Conf(can.Conf()), table.sup = can, table.run = function(event, cmds, cb, silent) {
if (cmds && cmds[0] == "action" && table.onaction[cmds[1]]) {
return table.onaction[cmds[1]](event, table)
}
return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent)
}, table._msg = msg
@ -319,6 +359,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var node = {}; can.core.List(list, function(item) {
item[field] && can.core.List(item[field].split(split), function(value, index, array) {
var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split)
node[name] || (node[name] = can.page.Append(can, node[last]||target, [{view: ["item", "div", value+(index==array.length-1?"":split)], onclick: function(event) {
index < array.length - 1? can.onmotion.toggle(can, node[name]): typeof cb == "function" && cb(event, item)
}}, {view: "list", style: {display: "none"}}]).last)
@ -361,6 +402,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
case "text":
item.value = value || item.value || ""
item.className || can.page.ClassList.add(can, item, "args")
item.autocomplete = "off"
break
}
@ -381,28 +423,38 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
if (key.indexOf("@") != 0) { return }
var list = can.core.Split(key, "@=", "@=", {simple: true})
var pkey = list[0], pval = list[1]||""
can.page.Modify(can, target, {autocomplete: "off"})
target.type != "button" && target.value.startsWith("@") && (target.value = pval||"")
pkey && can.require(["/plugin/input/"+pkey+".js"], function(can) {
can.onfigure && can.core.Item(can.onfigure[pkey], function(key, cb) { if (key.startsWith("on")) {
target[key] = function(event) { cb(event, can, meta, target) }
target[key] = function(event) {
can._figure && can.page.Remove(can, can._figure.fieldset)
var figure = can.onappend.field(can, "input "+pkey, {}, document.body)
can._figure = figure; can.onlayout.figure(can, figure, event)
cb(event, can, meta, target, figure)
}
} })
})
},
_plugin: function(can, msg, meta, cb, target) {
meta.feature = can.base.Obj(msg.meta&&msg.meta[0] || "{}", {})
meta.inputs = can.base.Obj(msg.list&&msg.list[0] || "[]", [])
meta.name = meta.name || msg.name&&msg.name[0] || "story"
meta.help = meta.help || msg.help&&msg.help[0] || "story"
meta.width = meta.width || can.Conf("width")
meta.type = "story"
can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) {
typeof cb == "function" && cb(sub, meta)
sub.page.Remove(sub, sub._legend)
}, target || can._output)
},
plugin: function(can, meta, cb, target) { meta = meta || {}
can.run({}, ["action", "command", meta.index], function(msg) {
meta.feature = can.base.Obj(msg.meta&&msg.meta[0] || "{}", {})
meta.inputs = can.base.Obj(msg.list&&msg.list[0] || "[]", [])
meta.name = meta.name || msg.name&&msg.name[0] || "story"
meta.help = meta.help || msg.help&&msg.help[0] || "story"
meta.width = meta.width || can._target.offsetWidth
meta.type = "story"
can.onappend._init(can, meta, ["/plugin/state.js"], function(story) {
typeof cb == "function" && cb(story, meta)
story.page.Remove(story, story._legend)
}, target || can._output)
can.onappend._plugin(can, msg, meta, cb, target)
}, true)
},
plugins: function(can, meta, cb, target) {
@ -653,7 +705,7 @@ Volcanos("onmotion", {help: "动态交互", list: [], _init: function(can, targe
show: function(can, time, cb, target) { target = target || can._target
time = typeof time == "object"? time: {value: 10, length: time||20}
can.page.Modify(can, target, {style: {opacity: 0, display: ""}})
can.page.Modify(can, target, {style: {opacity: 0, display: "block"}})
can.core.Timer(time, function(event, value, index) {
can.page.Modify(can, target, {style: {opacity: (index+1)/time.length}})
}, cb)

View File

@ -56,6 +56,7 @@ Volcanos("core", {help: "核心模块",
}),
Value: function(data, key, value) {
if (data == undefined) { return }
if (key == undefined) { return data }
if (typeof key == "object") { for (var k in key) {
arguments.callee.call(this, data, k, key[k])
@ -65,6 +66,7 @@ Volcanos("core", {help: "核心模块",
if (data[key] != undefined) { return data[key] }
var p = data, ls = key.split("."); while (p && ls.length > 0) {
if (ls[0] == "-1") { ls[0] = p.length-1 }
p = p[ls[0]], ls = ls.slice(1)
}; return p
},
@ -75,8 +77,8 @@ Volcanos("core", {help: "核心模块",
var ls = func.toString(); ls = ls.split(")")[0], ls = ls.split("(")[1]
var msg = args["msg"], can = args["can"], echo = false
var list = []; this.List(ls.split(","), function(item) { item = item.trim()
list.push(args[item] || msg&&msg.Option(item) || can&&can.Conf(item) || args)
var list = []; this.List(ls.split(","), function(item, index) { item = item.trim()
list.push(args[index] || args[item] || msg&&msg.Option(item) || can&&can.Conf(item))
if (item == "cb") { echo = true }
})

View File

@ -236,6 +236,13 @@ body>fieldset.input.key {
body>fieldset.input.date {
z-index:70;
}
body>fieldset.input.date table {
text-align:center;
width:260px;
}
body>fieldset.input.date table td:hover {
background-color:red;
}
div.carte {
position:fixed;

View File

@ -2,38 +2,28 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
},
})
Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, list, cb, target) {
can.core.Item(can.onaction, function(key, value) {
key.indexOf("on") == 0 && (can._target[key] = can._target[key] || function(event) {
value(event, can)
})
}) , typeof cb == "function" && cb()
switch (meta.type) {
typeof cb == "function" && cb(); switch (meta.type) {
case "textarea":
case "text":
!target.placeholder && (target.placeholder = meta.name || "")
!target.placeholder && (target.placeholder = can.user.trans(can, meta.name) || "")
!target.title && (target.title = target.placeholder)
break
case "button": meta.action == "auto" && can._target.click(); break
case "select": meta.value && (target.value = meta.value); break
case "button": meta.action == "auto" && target.click(); break
}
can.onappend.figure(can, meta, meta.value, target)
},
"upload": function(event, can) { can.user.upload(event, can) },
"关闭": function(event, can) { can.page.Remove(can, can.sup._target) },
"上传": function(event, can) { can.user.upload(event, can) },
"执行": function(event, can) { can.run(event) },
"刷新": function(event, can) { can.run(event) },
"查看": function(event, can) { can.run(event) },
"返回": function(event, can) {
can.sup._history.pop(); var his = can.sup._history.pop(); if (his) {
can.sup._history.pop(); for (var his = can.sup._history.pop(); his; his = can.sup._history.pop()) {
if (his[0] == "action") { continue }
can.page.Select(can, can._option, "textarea.args,input.args,select.args", function(item, index) {
item.value = his[index] || ""
})
}), can.run(event); break
}
can.run(event)
},
onchange: function(event, can) {
@ -41,58 +31,22 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
},
ondblclick: function(event, can) {
if (can.Conf("type") == "text") { event.target.setSelectionRange(0, -1) }
if (can.Conf("type") == "textarea") { event.target.setSelectionRange(0, -1) }
},
onclick: function(event, can) { var msg = can.sup.request(event)
// 插件回调
var name = can.Conf("name"), action = can.Conf("action")
var sub = can.sup._outputs && can.sup._outputs[can.sup._outputs.length-1]
var cb = sub && sub.onaction && (sub.onaction[action] || sub.onaction[name])
if (typeof cb == "function") { return cb(event, sub, name) }
// 交互回调
var feature = can.sup.Conf("feature")
var input = feature && feature[name]; if (input) {
return can.sup.onaction.input(event, can.sup, name, function(msg) {
can.user.toast(can, can.Conf("value")+"成功")
if (can.sup._outputs && can.sup._outputs.length > 0) { var i = can.sup._outputs.length - 1
can.sup._outputs[i].onimport._process && can.sup._outputs[i].onimport._process(can.sup._outputs[i], msg)
return
}; can.sup.onimport._process(can.sup, msg)
})
}
// 控件回调
var cb = can.onaction[action] || can.onaction[name]
if (typeof cb == "function") { return cb(event, can, name) }
// 组件回调
var cb = can.sup.onaction[action] || can.sup.onaction[name]
if (typeof cb == "function") { return cb(event, can, name) }
// 通用回调
if (can.Conf("type") == "button") { can.run(event, [name].concat(can.sup.Pack())) }
onclick: function(event, can) {
if (can.Conf("type") == "button") { can.run(event, ["action", can.Conf("name")].concat(can.sup.Pack())) }
},
onkeydown: function(event, can) { var target = event.target
can.onkeypop.input(event, can, target)
switch (event.key) {
can.onkeypop.input(event, can, target); switch (event.key) {
case "Enter":
if (can.Conf("type") == "text") { event.target.setSelectionRange(0, -1), can.run(event) }
if (can.Conf("type") == "textarea") { if (!event.ctrlKey) { break }; can.run(event) }
event.stopPropagation(), event.preventDefault()
break
case "b": if (!event.ctrlKey) { break }; can.CloneInput(); break
case "m": if (!event.ctrlKey) { break }; can.CloneField(); break
}
},
onkeyup: function(event, can) {
switch (event.key) {
case "Enter":
if (can.Conf("type") == "textarea") { break }
event.stopPropagation(), event.preventDefault()
break
if (can.Conf("type") == "textarea") { if (event.ctrlKey) { break } can.run(event) }
event.stopPropagation(), event.preventDefault(); break
case "b": if (event.ctrlKey) { can.CloneInput() } break
case "m": if (event.ctrlKey) { can.CloneField() } break
}
},
onkeyup: function(event, can) { },
})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -1,13 +0,0 @@
Volcanos("onfigure", {help: "控件详情", list: [],
city: {click: function(event, can, value, cmd, target, figure) {
function run() {figure.output.innerHTML = ""
can.Run(event, ["action", "input", can.item.name, target.value], function(msg) {
can.page.AppendTable(can, msg, figure.output, msg.append, function(event, value, key, index, tr, td) {
target.value = value; msg.Option("_refresh") && run()
})
}, true)
}
run()
}},
})

View File

@ -1,12 +0,0 @@
fieldset.input.date {
background-color:black;
position:fixed;
z-index:100;
}
fieldset.input.date div.action>hr {
clear:both;
}
fieldset.input.date div.output table {
text-align:center;
width:260px;
}

View File

@ -1,4 +1,4 @@
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, item, target) {
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, item, target, figure) {
// 设置输入
function set(now) {
@ -6,10 +6,6 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
item && item.action == "auto" && can.run({})
}
// 添加插件
can._figure && can.page.Remove(can, can._figure.fieldset)
var figure = can.onappend.field(can, "input date", {}, document.body)
can._figure = figure; can.onlayout.figure(can, figure, event)
figure.table = can.page.Append(can, figure.output, [{type: "table"}]).first
// 添加控件
@ -73,5 +69,5 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) {add(day, "next")}
return now
}; show(now)
}} }, ["/plugin/input/date.css"])
}} }, [])

View File

@ -1,4 +0,0 @@
fieldset.input.key div.output {
max-height:400px;
overflow:auto;
}

View File

@ -1,23 +1,19 @@
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, item, target) { function run() {
var msg = can.request(event, can.Option()); msg.Option("action", item._action)
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, item, target, figure) { function run() {
var msg = can.request(event, can.Option())
can.run(event, ["action", "inputs", item.name, target.value], function(msg) {
if (!msg.append) { return }
can._figure && can.page.Remove(can, can._figure.fieldset)
var figure = can.onappend.field(can, "input key", {}, document.body)
can._figure = figure; can.onlayout.figure(can, figure, event)
can.onappend._action(can, [
{button: ["清空", function(event) { target.value = "" }]},
{button: ["关闭", function(event) { can.page.Remove(can, can._figure.fieldset) }]},
], can._figure.action)
{button: ["关闭", function(event) { can.page.Remove(can, figure.fieldset) }]},
], figure.action)
can.onappend.table(can, "content", msg, function(value, key, index, line) {
return {type: "td", inner: value, onclick: function() {
target.value = value; msg.Option("_refresh") && run()
can.page.Remove(can, can._figure.fieldset)
target.value = value, msg.Option("_refresh") && run()
can.page.Remove(can, figure.fieldset)
}}
}, can._figure.output)
}, figure.output)
}, true)
}; run() }}, }, ["/plugin/input/key.css"])
}; run() }}, }, [])

View File

@ -1,4 +0,0 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
},
})

View File

@ -1,3 +0,0 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
},
})

View File

@ -1,17 +1,18 @@
Volcanos("onfigure", {help: "控件详情", list: [],
province: {click: function(event, can, value, cmd, target, figure) {
figure.fieldset.style.left = "20px"
figure.fieldset.style.top = "200px"
province: {onclick: function(event, can, item, target, figure) {
can.onappend._action(can, [
{button: ["清空", function(event) { target.value = "" }]},
{button: ["关闭", function(event) { can.page.Remove(can, figure.fieldset) }]},
], figure.action)
var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).last);
var option = {geo: {map: 'china'}};
china_chart.setOption(option);
china_chart.on('click', function (params) {
target.value = params.name;
});
// , ["require/github.com/shylinux/echarts/echarts.js","require/github.com/shylinux/echarts/china.js"])
can.page.Modify(can, figure.fieldset, {style: {left: 120}})
can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() {
var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first);
china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) {
target.value = params.name, msg.Option("_refresh") && run()
can.page.Remove(can, figure.fieldset)
})
})
}},
})

View File

@ -1,4 +0,0 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
},
})

View File

@ -1,39 +0,0 @@
Volcanos("onfigure", {help: "控件详情", list: [],
upload: {click: function(event, can, value, cmd, target, figure) {figure.stick = true
var begin = new Date();
function show(event, value, total, loaded) {
var now = new Date(); can.page.Appends(can, figure.output, [
{view: ["progress"], style: {height: "10px", border: "solid 2px red"}, list: [{
view: ["progress"], style: {height: "10px", width: value + "%", background: "red"},
}]},
{text: [value+"%", "div"], style: {"float": "right"}},
{text: [can.base.Duration(now - begin), "div"], style: {"float": "left"}},
{text: [can.base.Size(loaded)+"/"+can.base.Size(total), "div"], style: {"text-align": "center"}},
]);
}
var action = can.page.AppendAction(can, figure.action, [
{type: "input", data: {name: "upload", type: "file", onchange: function(event) {
var file = action.upload.files[0]
console.log(file)
show(event, 0, file.size, 0)
}}, style: {width: "200px"}}, "上传", "关闭"], function(event, value, cmd) {
if (action.upload.files.length == 0) {return action.upload.focus()}
if (value == "关闭") {figure.stick = false; return}
var msg = can.Event(event);
can.page.Select(can, can._plugin.option, "input", function(item) {
item.name && item.value && msg.Option(item.name, item.value)
})
// 上传文件
begin = new Date();
msg._progress = show
msg.upload = action.upload.files[0];
can.run(event, ["action", "upload"], function(msg) {
can.user.toast(can, "上传成功")
}, true);
})
}},
})

View File

@ -23,7 +23,7 @@ body fieldset div.story[data-type=spark] {
background-color:#2169a9; color:white;
box-shadow: 4px 4px 10px 1px #626bd0;
border-left:solid 4px blue;
padding:4px 10px; margin:10px;
padding:4px 10px; margin:10px 0px;
}
body fieldset div.story[data-type=spark] span:hover {
background-color:#c10c8a;

View File

@ -30,48 +30,28 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
return true
},
_refresh: function(can, msg) {
can.core.Timer(500, function(timer) {
can.core.Timer(parseInt(msg.Option("_delay")||"500"), function() {
var sub = can.request({}, {_count: parseInt(msg.Option("_count"))-1})
can.onappend._output(can, can.Conf(), {}, can.Pack())
can.onappend._output(can, can.Conf(), sub._event, can.Pack())
})
},
_field: function(can, msg) {
msg.Table(function(value) {
value.feature = can.base.Obj(msg.meta&&msg.meta[0]||"{}", {})
value.inputs = can.base.Obj(msg.list&&msg.list[0]||"[]", [])
value.width = can._target.offsetWidth
value.type = "story"
can.onappend._init(can, value, ["/plugin/state.js"], function(sub) {
sub.run = function(event, cmds, cb, silent) {
var res = can.request(event)
can.core.Item(can.Option(), function(key, value) {
res.Option(key) || res.Option(key, value)
})
can.run(event, (msg["_prefix"]||[]).concat(cmds), cb, true)
}
}, can._output)
can.onappend._plugin(can, msg, {}, function(sub, meta) {
sub.run = function(event, cmds, cb, silent) {
var res = can.request(event); can.core.Item(can.Option(), function(key, value) {
res.Option(key) || res.Option(key, value)
})
can.run(event, (msg["_prefix"]||[]).concat(cmds), cb, true)
}
})
return true
},
})
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
},
input: function(event, can, name, cb) { var feature = can.Conf("feature")
var msg = can.request(event, can.Option())
feature[name]? can.user.input(event, can, feature[name], function(ev, button, data, list) {
var args = ["action", name]; can.core.Item(data, function(key, value) {
key && value && args.push(key, value)
})
var sub = can._outputs && can._outputs[can._outputs.length-1] || can
sub.run(event, args, function(msg) { typeof cb == "function" && cb(msg) }, true)
return true
}): can.run(event, ["action", name], function(msg) { typeof cb == "function" && cb(msg) }, true)
},
change: function(event, can, name, value, cb) {
can.page.Select(can, can._option, "input.args", function(input) {
if (input.name == name && value != input.value) { input.value = value;
if (input.name == name && value != input.value) { input.value = value
var data = input.dataset || {}; data.action == "auto" && can.run(event, can.Pack(), cb)
}
})

View File

@ -2,8 +2,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
typeof cb == "function" && cb(msg)
can.msg = msg, can.data = msg.Table()
can.dir_root = msg.Option("dir_root")
can._tree = can.onimport._tree(can, msg)
can.Action("scale", parseInt(msg.Option("scale")||"1"))
can._tree = can.onimport._tree(can, msg.Table(), "path", "/")
can.onmotion.clear(can)
can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) {
@ -23,20 +23,24 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
},
_tree: function(can, msg) { var list = {}
msg.Table(function(value, index) {
value.path && can.core.List(value.path.split("/"), function(item, index, array) {
var last = array.slice(0, index).join("/") || ""
var name = array.slice(0, index+1).join("/")
list[last] = list[last] || {name: last, list: []}
if (!item || list[name]) { return }
list[last].list.push(list[name] = {hide: true, file: value.path, name: item+(index==array.length-1? "": "/"), last: last, list: []})
_tree: function(can, list, field, split) {
var node = {}; can.core.List(list, function(item) {
item[field] && can.core.List(item[field].split(split), function(value, index, array) {
var last = array.slice(0, index).join(split) || "", name = array.slice(0, index+1).join(split)
if (!value || node[name]) { return }
node[last] = node[last] || {name: last, list: []}
node[last].list.push(node[name] = {
name: value+(index==array.length-1? "": split),
meta: item, list: [], last: last,
file: item[field], hide: true,
})
})
})
return list
return node
},
_height: function(can, tree) {
if (!tree) { return }
if (!tree) { return 0 }
if (tree.hide) { return tree.height = 1 }
if (tree.list.length == 0) { return tree.height = 1 }
@ -66,17 +70,16 @@ Volcanos("onaction", {help: "操作数据", list: ["编辑", ["view", "横向",
},
_show: function(can, args, layout) {
can.page.Remove(can, can.inner), can.onappend.plugin(can, {
can.onappend.plugin(can, {
index: "web.code.inner", args: args,
_action: ["关闭", "最大", "分屏", "复制"],
width: layout.width, height: layout.height,
}, function(sub) { can.inner = sub._target
}, function(sub) { can.page.Modify(can, sub._target, {style: layout})
sub.run = function(event, cmds, cb, silent) {
can.run(event, ["action", "inner"].concat(cmds), function(msg) {
typeof cb == "function" && cb(msg)
}, true)
}
can.page.Modify(can, sub._target, {style: layout})
})
},
_draw: function(can, tree, x, y) { var sub = can.sub, name = tree.name || can.Option("name") || "."
@ -151,8 +154,8 @@ Volcanos("onaction", {help: "操作数据", list: ["编辑", ["view", "横向",
},
"横向": function(event, can) {
if (!can._tree[""]) { return }
can.onmotion.clear(can, can.sub.svg)
can.onimport._height(can, can._tree[""])
can.sub.svg.Val("height", can._tree[""].height*30)
can.width = 0, can.onaction._draw(can, can._tree[""], 0, 0)

View File

@ -1,47 +1,113 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
if (can.onimport._process(can, msg)) { return typeof cb == "function" && cb(can, msg) }
if (can.sup.onimport._process(can.sup, msg)) { return typeof cb == "function" && cb(can, msg) }
can.onmotion.clear(can)
can.ui = can.onlayout.display(can)
// can.ui = can.page.Appends(can, target, [can.onimport._control(can, msg)].concat([
// {view: ["content", "div"]}, {view: ["display", "pre"]},
// ]))
typeof cb == "function" && cb(msg)
can.page.Append(can, can.ui.content, [can.onimport._control(can, msg)])
can.onappend.table(can, "content", msg, function(value, key, index, line, array) {
return can.onimport._table(can, value, key, index, line, array)
}, can.ui.content)
can.onappend.board(can, "content", msg.Result(), can.ui.display)
can.onimport._board(can, msg)
typeof cb == "function" && cb(msg)
},
_table: function(can, value, key, index, line, array) {
return {text: [value, "td"], onclick: function(event) { var target = event.target
if (target.tagName == "INPUT" && target.type == "button") { var msg = can.sup.request(event, can.Option())
key == "value"? can.core.List(array, function(item, index) { msg.Option(item.key, item.value) }): msg.Option(line)
return can.run(event, ["action", target.name], function(msg) { can.run() }, true)
}
can.sup.onaction.change(event, can.sup, key, value, function(msg) { can.onimport._init(can, msg) })
}, ondblclick: function(event) {
can.onmotion.modify(can, event.target, function(event, value, old) {
var msg = can.sup.request(event, can.Option());
can.run(event, ["action", "modify", key == "value"? line.key: key, value], function(msg) { }, true)
})
}, onmouseover: function(event) {
can.user.toast(can, index+1+"/"+array.length)
}}
},
_board: function(can, msg) {
can.page.Select(can, can._output, ".story", function(item) { var data = item.dataset
can.page.Modify(can, item, {style: can.base.Obj(data.style)})
can.core.CallFunc(can.onimport[data.type], [can, data, item])
})
},
spark: function(can, list, target) {
if (list["name"] == "inner") {
target.title = "点击复制", target.onclick = function(event) {
can.user.copy(event, can, target.innerText)
}
return
}
can.page.Select(can, target, "span", function(item) {
item.title = "点击复制", item.onclick = function(event) {
can.user.copy(event, can, item.innerText)
}
})
},
_process: function(can, msg) {
var cb = can.onimport[msg.Option("_process")]
return typeof cb == "function" && cb(can, msg)
},
_follow: function(can, msg) {
if (msg.Option("cache.status") == "stop") { return can.user.toast(can, msg.Option("cache.action")+" done!")}
can.page.Modify(can, can.ui.display, {className: "code", style: {"max-height": 400}})
can.page.Append(can, can.ui.display, [{text: msg.Result()}])
can.ui.display.scrollBy(0, 1000)
can.core.Timer(100, function() { var sub = can.request({})
sub.Option("cache.hash", msg.Option("cache.hash"))
sub.Option("cache.begin", msg.Option("cache.begin"))
sub.Option("cache.limit", msg.Option("cache.limit"))
can.run(sub._event, ["action", msg.Option("cache.action")], function(msg) {
can.onimport._follow(can, msg)
}, true)
})
return true
},
_inner: function(can, msg) {
can.onappend.table(can, "content", msg, function(value, key, index, line, array) {
return can.onimport._table(can, value, key, index, line, array)
}, can.ui.display)
can.onappend.board(can, "content", msg.Result(), can.ui.display)
can.onimport._board(can, msg)
return true
},
_control: function(can, msg) {
var cb = can.onimport[msg.Option("_control")]
return typeof cb == "function" && cb(can, msg)
},
_page: function(can, msg) {
_page: function(can, msg) { var ui = {}
return {view: ["control", "div"], list: [
{button: ["上一页", function(event) {
can.ui["cache.offend"].value = parseInt(can.ui["cache.offend"].value||0) + parseInt(can.ui["cache.limit"].value)
ui.offend.value = parseInt(ui.offend.value||0) + parseInt(ui.limit.value)
can.run(event)
}]},
{input: ["cache.offend", function(event) {
event.key == "Enter" && can.run(event)
}], style: {width: 50}, _init: function(item) {
item.value = msg.Option("cache.offend")
ui.offend = item, item.value = msg.Option("cache.offend")
}, data: {"className": "args"}},
{select: [["cache.limit", 10, 30, 100, 1000], function(event) {
can.run(event)
}], _init: function(item) {
item.value = msg.Option("cache.limit")
ui.limit = item, item.value = msg.Option("cache.limit")
}, data: {"className": "args"}},
{button: ["下一页", function(event) {
can.ui["cache.offend"].value = parseInt(can.ui["cache.offend"].value||0) - parseInt(can.ui["cache.limit"].value)
if (can.ui["cache.offend"].value < 0) {
can.ui["cache.offend"].value = 0
ui.offend.value = parseInt(ui.offend.value||0) - parseInt(ui.limit.value)
if (ui.offend.value < 0) {
ui.offend.value = 0
}
can.run(event)
}]},
@ -56,7 +122,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
{input: ["cache.value", function(event) {
if (event.key == "Enter") {
can.page.Select(can, can.ui.content, "tr", function(tr, index) {
if (event.target.value == "" && can.page.Modify(can, tr, {style: {"display": ""}})) { return }
if (event.target.value == "") { can.page.Modify(can, tr, {style: {"display": ""}}); return }
index > 0 && can.page.Modify(can, tr, {style: {"display": "none"}})
can.page.Select(can, tr, "td", function(td, index) {
if (td.innerText.indexOf(event.target.value) > -1) {
@ -70,95 +136,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}, data: {"className": "args"}},
]}
},
_table: function(can, value, key, index, line, array) {
return {type: "td", inner: value, click: function(event) { var target = event.target
if (target.tagName == "INPUT" && target.type == "button") {
var msg = can.sup.request(event, can.Option())
key == "value"? can.core.List(array, function(item, index) { msg.Option(item.key, item.value) }): msg.Option(line)
var cb = can.onaction[msg.Option("action", target.name)]
typeof cb == "function"? cb(event, can, target.name): can.sup.onaction.input(event, can.sup, target.name, function(msg) {
can.onimport._process(can, msg) || can.run({})
})
} else {
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
can.run(event)
})
}
}, ondblclick: function(event) {
can.onmotion[value.indexOf("\n") >= 0 || event.ctrlKey? "modifys": "modify"](can, event.target, function(event, value, old) {
var msg = can.sup.request(event); msg.Option(can.Option())
if (can._msg.Option("modify.hold") == "true") {
if (can._msg.append.length == 2 && can._msg.append[0] == "key" && can._msg.append[1] == "value") {
can.core.List(can._msg.key, function(key, index) {
msg.Option(key, can._msg.value[index])
})
}
can.run(event, ["action", "modify"])
return
}
msg.Option(line)
if (key == "value") { key = line.key }
can.run(event, ["action", "modify", key, value], function(msg) { can.run({}) }, true)
})
}, onmouseover: function(event) {
can.user.toast(can, index+1+"/"+array.length)
}}
},
_board: function(can, msg) {
can.page.Select(can, can.ui.display, ".story", function(item) { var data = item.dataset
var cb = can.onimport[data.type]; typeof cb == "function" && cb(can, data, item)
can.page.Modify(can, item, {style: can.base.Obj(data.style)})
})
},
_process: function(can, msg) {
var cb = can.onimport[msg.Option("_process") || can.Conf("feature._process")]
return typeof cb == "function" && cb(can, msg)
},
_follow: function(can, msg) {
if (msg.Option("cache.status") == "stop") { return can.user.toast(can, msg.Option("cache.action")+" done!")}
can.ui || (can.ui = can.page.Appends(can, can._target, [{view: ["content", "div"]}]))
can.page.ClassList.add(can, can.ui.content, "code")
can.page.Modify(can, can.ui.content, {style: {"max-height": 400}})
can.page.Append(can, can.ui.content, [{text: msg.Result()}])
can.ui.content.scrollBy(0, 1000)
can.core.Timer(100, function() {
var sub = can.request({})
sub.Option("cache.hash", msg.Option("cache.hash"))
sub.Option("cache.begin", msg.Option("cache.begin"))
sub.Option("cache.limit", msg.Option("cache.limit"))
can.run(sub._event, [msg.Option("cache.action")], function(msg) {
can.onimport._follow(can, msg)
}, true)
})
return true
},
_inner: function(can, msg) {
can.onappend.table(can, "content", msg, function(value, key, index, line, array) {
return can.onimport._table(can, value, key, index, line, array)
}, can._output)
can.onappend.board(can, "content", msg.Result(), can._output)
// can.onimport._board(can, msg)
return true
},
spark: function(can, list, target) {
if (list["name"] == "inner") {
target.title = "点击复制", target.onclick = function(event) {
can.user.copy(event, can, target.innerText)
}
return
}
can.page.Select(can, target, "span", function(item) {
item.title = "点击复制", item.onclick = function(event) {
can.user.copy(event, can, item.innerText)
}
})
},
})
Volcanos("onaction", {help: "控件交互", list: []})
Volcanos("onexport", {help: "导出数据", list: []})