forked from x/volcanos
opt plugin
This commit is contained in:
parent
52f3801585
commit
03b4897b13
72
frame.js
72
frame.js
@ -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, meta, cb, target) { meta = meta || {}
|
||||
can.run({}, ["action", "command", meta.index], function(msg) {
|
||||
_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._target.offsetWidth
|
||||
meta.width = meta.width || can.Conf("width")
|
||||
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)
|
||||
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) {
|
||||
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)
|
||||
|
@ -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 }
|
||||
})
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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: []})
|
||||
|
||||
|
@ -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()
|
||||
}},
|
||||
})
|
||||
|
@ -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;
|
||||
}
|
@ -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"])
|
||||
}} }, [])
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
fieldset.input.key div.output {
|
||||
max-height:400px;
|
||||
overflow:auto;
|
||||
}
|
@ -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() }}, }, [])
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
|
||||
},
|
||||
})
|
||||
|
@ -1,3 +0,0 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
|
||||
},
|
||||
})
|
@ -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)
|
||||
})
|
||||
})
|
||||
}},
|
||||
})
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
|
||||
},
|
||||
})
|
||||
|
@ -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);
|
||||
})
|
||||
}},
|
||||
})
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
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) {
|
||||
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)
|
||||
})
|
||||
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)
|
||||
}
|
||||
})
|
||||
|
@ -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)
|
||||
|
180
plugin/table.js
180
plugin/table.js
@ -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: []})
|
||||
|
Loading…
x
Reference in New Issue
Block a user