1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt table.js

This commit is contained in:
shaoying 2020-09-09 20:22:11 +08:00
parent c702306219
commit 10199a893b
9 changed files with 176 additions and 174 deletions

View File

@ -289,7 +289,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
if (typeof key == "object") { return sub.core.Item(key, sub.Option), key }
if (key == undefined) { value = {}
sub.page.Select(sub, option, "select.args,input.args,textarea.args", function(item) {
value[item.name] = item.value
item.name && item.value && (value[item.name] = item.value)
})
return value
}
@ -333,28 +333,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
CloneInput: function() { add(item, function() {})._target.focus() },
CloneField: function() { can.Clone() },
}, Volcanos.meta.libs.concat([item.display||"/plugin/input.js", "/frame.js"]), function(input) { input.sup = can
input.run = function(event, cmds, cb, silent) { var msg = can.request(event)
var prefix = []; can.onkeypop.show({key: meta.name[0]}, can)
switch (item.name) {
case "打开":
case "查看":
break
case "返回":
can._history.pop(); var his = can._history.pop(); if (his) {
can.page.Select(can, can._option, "input.args", function(item, index) {
item.value = his[index] || ""
})
}
break
case "清空":
can._output.innerHTML = ""
return typeof cb == "function" && cb(can.request(event))
default:
cmds && cmds[0] == "action" || prefix.push(item.name||item.value)
}
msg.Option(can.Conf("option"))
return can.onappend._output(can, meta, event, prefix.concat(can.Pack(cmds)), cb, silent)
input.run = function(event, cmds, cb, silent) {
var msg = can.request(event); msg.Option(can.Conf("option"))
return can.onappend._output(can, meta, event, can.Pack(cmds), cb, silent)
}
input.onimport && input.onimport._init(input, input.Conf(item), item.list||[], function() {}, input._target)
@ -401,7 +382,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
_target: can._output, _option: can._option, _action: can._action, _output: can._output, _status: can._status,
_fields: can._target, Option: can.Option, Action: can.Action, Status: can.Status,
}, Volcanos.meta.libs.concat([display, "/frame.js"]), function(table) { table.Conf(can.Conf()), table._msg = msg
table.run = function(event, cmds, cb, silent) { var msg = can.request(event)
table.sup = can, table.run = function(event, cmds, cb, silent) { var msg = can.request(event)
can.core.Item(can.Conf("option"), msg.Option)
return can.onappend._output(can, meta, event, can.Pack(cmds), cb, silent)
}
@ -534,63 +515,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return target
},
table: function(can, target, type, msg, cb) {
var table = can.page.AppendTable(can, target, msg, msg.append, cb || function(value, key, index, line) {
function run(event, item, value) {
var msg = can.request(event); msg.Option(can.Option()), msg.Option(line)
var toast = can.user.toast(can, item+"中...", item, 1000000)
var cb = can.onaction[item] || can.onaction["运行"]
cb? cb(event, can, item): can.run(event, ["action", item, key=="value"? line.key: key, value.trim()], function(res) {
toast.Close(), can.user.toast(can, item+"成功"), can.run({})
}, true)
}
return {type: "td", inner: value, click: function(event) {
var target = event.target; if (target.tagName == "INPUT" && target.type == "button") {
if (can.Conf("feature")[target.value]) {
// 输入参数
can.user.input(event, can, can.Conf("feature")[target.value], function(event, button, data, list) {
var msg = can.request(event); msg.Option(can.Option()), msg.Option(line), msg.Option(data)
var args = ["action", target.value]; can.core.Item(data, function(key, value) {
key && value && args.push(key, value)
})
can.run(event, args, function(msg) {
can.user.toast(can, target.value+"成功"), can.run({})
}, true)
return true
})
return
}
return run(event, event.target.value, value)
}
can.page.Select(can, can._option, "input.args", function(input) { if (input.name == key) { var data = input.dataset || {}
// 补全参数
input.value = value, typeof cb == "function" && cb(event, value); if (data.action == "auto") {
var msg = can.request(event); msg.Option(can.Option()), msg.Option(line)
can.Option("_action", msg.Option("_action"))
can.run(event)
}
} })
}, ondblclick: function(event) {
can.onmotion.modify(can, event.target, function(event, value, old) {
run(event, "编辑", value)
})
}, oncontextmenu: function(event) {
can.user.carte(can, can.ondetail||{}, msg["_detail"] || can.Conf("detail") || can.ondetail.list, function(event, item, meta) {
switch (item) {
case "编辑":
can.onmotion.modify(can, event.target, function(event, value, old) {
run(event, "编辑", value)
})
break
default:
run(event, item, value)
}
})
}, }
})
return table
return can.page.AppendTable(can, target, msg, msg.append, cb)
},
board: function(can, target, type, msg, text) { text = text || can.page.Display(msg.Result())
return text && can.page.Append(can, target, [{view: ["code", "div", text]}]).code

View File

@ -270,6 +270,12 @@ body.white input[type=button] {
background-color:#FF9900;
color:white;
}
body.white table input[type=button][value=结束] {
background:red;
}
body.white table input[type=button][value=启动] {
background:#52ce78;
}
body.white input[type=button]:hover {
border-radius:10px 10px 10px 10px;
border:2px solid #FFCC33;
@ -377,6 +383,9 @@ body.white fieldset.Action fieldset.plugin div.item input[type=button] {
body.white fieldset.Action fieldset.plugin div.item input {
box-shadow: 4px 4px 10px 1px #626bd0;
}
body.white fieldset.Action fieldset.plugin div.item input[name=cmd] {
width:160px;
}
body.white fieldset.Action fieldset.plugin div.item select {
box-shadow: 4px 4px 10px 1px #626bd0;
margin-top:-2px;

View File

@ -199,9 +199,9 @@ var page = Volcanos("page", {help: "网页模块",
}
});
can.page.Append(can, table, can.core.List(msg.Table(), function(line, index) {
can.page.Append(can, table, can.core.List(msg.Table(), function(line, index, array) {
return {type: "tr", dataset: {index: index}, list: can.core.List(list, function(key) {if (key.indexOf("_") == 0) {return}
return cb(can.page.Display(line[key]).trim(), key, index, line)
return cb(can.page.Display(line[key]).trim(), key, index, line, array)
})}
}))
return table;

View File

@ -6,31 +6,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
can.onexport._init(can, msg, list, cb, target)
},
add_plugin: function(can, river, storm, value) {
if (can.user.Search(can, "river") == river && can.user.Search(can, "storm") == storm && can.user.Search(can, "active") == value.name) {
value.args = can.core.List(value.inputs, function(item) {
if (item._input == "text" || item._input == "select") {
return can.user.Search(can, item.name) || item.value
}
})
}
value.name && can.onappend._init(can, value, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) {
sub._legend.onclick = function(event) {
var opt = {pod: can.user.Search(can, "pod"), river: river, storm: storm, active: value.name}
can.core.Item(sub.Option(), function(key, value) { opt[key] = value })
location.href = can.user.Share(can, opt, true)
}
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event)
var _action = msg.Option("_action")
can.Conf("active", sub.Option())
can.Conf("action", value.name)
can.Conf("current", sub)
// 插件回调
//
return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) {
can.run(msg._event, ["search", "Footer.onaction.ncmd"])
typeof cb == "function" && cb(msg)
_progress: function(can, msg) {
if (msg.Option("_progress")) {
if (msg.Append("count") != msg.Append("total")) {
can.user.toast(can, {
@ -48,7 +24,32 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
return
}
}
can.user.toast(can, "执行成功", value.name, 400)
},
add_plugin: function(can, river, storm, value) {
if (can.user.Search(can, "river") == river && can.user.Search(can, "storm") == storm && can.user.Search(can, "active") == value.name) {
value.args = can.core.List(value.inputs, function(item) {
if (item._input == "text" || item._input == "select") {
return can.user.Search(can, item.name) || item.value
}
})
}
value.name && can.onappend._init(can, value, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) {
sub._legend.onclick = function(event) {
var opt = {pod: can.user.Search(can, "pod"), river: river, storm: storm, active: value.name}
can.core.Item(sub.Option(), function(key, value) { opt[key] = value })
location.href = can.user.Share(can, opt, true)
}
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event); cmds = cmds || []
can.Conf("active", sub.Option())
can.Conf("action", value.name)
can.Conf("current", sub)
// 插件回调
var toast = can.user.toast(can, "执行中...", value.name)
return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) {
toast.Close(), can.user.toast(can, "执行成功", value.name, 400)
can.run(msg._event, ["search", "Footer.onaction.ncmd"])
can.onaction._progress(can, msg)
typeof cb == "function" && cb(msg)
}, silent)
}
sub._target.oncontextmenu = function(event) {

View File

@ -1,47 +1,50 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, output, action, option, field) {
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
},
})
Volcanos("onaction", {help: "控件交互", list: [],
"上传": function(event, can) { can.user.upload(event, can) },
"查看": function(event, can) { can.run(event) },
"返回": function(event, can) {
can.sup._history.pop(); var his = can.sup._history.pop(); if (his) {
can.page.Select(can, can._option, "input.args", function(item, index) {
item.value = his[index] || ""
})
}
can.run(event)
},
onchange: function(event, can) {
if (event.target.tagName == "SELECT") { can.run(event) }
},
onclick: function(event, can) { var name = can.Conf("name")
var msg = can.sup.request(event)
// 前端回调
var sub = can.sup && can.sup._outputs && can.sup._outputs[can.sup._outputs.length-1]
onclick: function(event, can) { var msg = can.sup.request(event)
// 插件回调
var name = can.Conf("name")
var sub = can.sup._outputs && can.sup._outputs[can.sup._outputs.length-1]
var cb = sub && sub.onaction && sub.onaction[name]
if (typeof cb == "function") { return cb(event, sub, name) }
// 通用回调
var cb = can.onaction[name]
if (can.sup && typeof cb == "function") { return cb(event, can.sup, name) }
// 后端回调
// 交互回调
var feature = can.sup.Conf("feature")
var input = feature && feature[name]; if (input) {
return can.user.input(event, can, input,function(event, button, data, list) {
var msg = can.request(event); msg.Option(can.sup.Option())
var args = ["action", name]; can.core.Item(data, function(key, value) {
key && value && args.push(key, value)
})
can.run(event, args, function(msg) { can.run(event) }, true)
return true
return can.sup.onaction.input(event, can.sup, name, function(msg) {
can.run({})
})
}
// 控件回调
var cb = can.onaction[name]
if (typeof cb == "function") { return cb(event, can, name) }
// 通用回调
if (can.Conf("type") == "button") { can.run(event) }
if (can.Conf("type") == "button") { can.run(event, [name].concat(can.sup.Pack())) }
if (event.target.tagName == "INPUT") { event.target.setSelectionRange(0, -1) }
},
onkeydown: function(event, can) {
can.onkeypop.show(event, can)
switch (event.key) {
case "Enter":
if (event.target.tagName == "TEXTAREA") {
break
}
if (event.target.tagName == "INPUT") {
can.run(event)
}
if (event.target.tagName == "INPUT") { event.target.setSelectionRange(0, -1), can.run(event) }
if (event.target.tagName == "TEXTAREA") { break }
event.stopPropagation()
event.preventDefault()
break
@ -53,13 +56,12 @@ Volcanos("onaction", {help: "控件交互", list: [],
onkeyup: function(event, can) {
switch (event.key) {
case "Enter":
if (event.target.tagName == "TEXTAREA") { break }
event.stopPropagation()
event.preventDefault()
break
default: return
}
},
"上传": function(event, can) { can.user.upload(event, can) },
})

View File

@ -1,25 +1,24 @@
Volcanos("onfigure", {help: "控件详情", list: [],
key: {onclick: function(event, can, item, target) {
function run() { var msg = can.request(event); msg.Option(item)
can.page.Select(can, event.target.parentNode.parentNode.parentNode, "input", function(item) {
msg.Option(item.name, item.value)
})
function run() { var msg = can.request(event); msg.Option(can.Option())
can.run(event, ["action", "inputs", item.name, target.value], function(msg) {
if (!msg.append) { return }
var figure = can.onappend.field(can, document.body, "input key", {})
can.page.Modify(can, figure.fieldset, {style: {top: event.clientY+10, left: event.clientX}})
can.page.Remove(can, figure.legend)
can._figure && can.page.Remove(can, can._figure.fieldset)
can._figure = can.onappend.field(can, document.body, "input key", {})
can.page.Append(can, figure.action, [
can.page.Modify(can, can._figure.fieldset, {style: {top: event.clientY+10, left: event.clientX}})
can.page.Remove(can, can._figure.legend)
can.page.Append(can, can._figure.action, [
{button: ["清空", function(event) { target.value = "" }]},
{button: ["关闭", function(event) { can.page.Remove(can, figure.fieldset) }]},
{button: ["关闭", function(event) { can.page.Remove(can, can._figure.fieldset) }]},
])
can.page.AppendTable(can, figure.output, msg, msg.append, function(value, key, index, line) {
can.page.AppendTable(can, can._figure.output, msg, msg.append, function(value, key, index, line) {
return {type: "td", inner: value, onclick: function() {
target.value = value; msg.Option("_refresh") && run()
can.page.Remove(can, figure.fieldset)
can.page.Remove(can, can._figure.fieldset)
}}
})
}, true)

View File

@ -9,6 +9,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
return typeof cb == "function" && cb(msg)
},
table: function(can, list, target) {
can.page.Select(can, target, "td", function(item) {
item.title = "点击复制"
item.onclick = function(event) {
can.user.copy(can, item.innerText)
}
})
},
spark: function(can, list, target) {
if (list["name"] == "inner") {
target.title = "点击复制"

View File

@ -1,4 +1,28 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
},
})
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
},
input: function(event, can, name, cb) { var feature = can.Conf("feature")
feature[name]? can.user.input(event, can, feature[name], function(ev, button, data, list) {
var msg = can.request(event); msg.Option(can.Option())
var args = ["action", name]; can.core.Item(data, function(key, value) {
key && value && args.push(key, value)
})
can.run(event, args, function(msg) {
typeof cb == "function" && cb(msg)
})
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) { var data = input.dataset || {}
if (value != input.value) { input.value = value;
data.action == "auto" && typeof cb == "function" && cb()
}
} })
},
})

View File

@ -1,53 +1,87 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
if (msg.Option("_progress")) {
// 异步进度
can.page.Select(can, can._output, "td", function(td) {
if (td.innerText == msg.Option("name")) {
can.page.Modify(can, td, {style: {
"background-color": "green",
}})
}
})
return
if (can.onimport._process(can, msg)) {
return typeof cb == "function" && cb(msg)
}
// 自动刷新
var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"]
var i = 0; refresh && can.Timer(refresh, function(timer) {
if (i > 100) { timer.stop = true} else { can.run({}) }
})
// 展示数据
can.ui = can.page.Appends(can, can._target, [
can.ui = can.page.Appends(can, target, [
{view: ["content", "div"]}, {view: ["display", "pre"]},
])
can.onappend.table(can, can.ui.content, "table", msg)
can.onappend.board(can, can.ui.display, "board", msg)
can.page.Select(can, target, ".story", function(item) { var data = item.dataset
can.page.Modify(can, item, {style: can.base.Obj(data.style)})
var cb = can.onimport[data.type]; typeof cb == "function" && cb(can, data, item)
can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line, array) {
return can.onimport._table(can, value, key, index, line, array)
})
can.onappend.board(can, can.ui.display, "board", msg)
can.onimport._board(can, msg)
return typeof cb == "function" && cb(msg)
},
_process: function(can, msg) {
return
var process = msg.Option("_process") || can.Conf("feature")["_process"]
var cb = can.onaction[process]; typeof cb == "function" && cb(can, msg)
if (can.onimport._progress(can, msg)) {
return true
}; can.onimport._refresh(can, msg)
},
_progress: function(can, msg) {
var progress = msg.Option("_progress") || can.Conf("feature")["_progress"]
if (progress) {
can.page.Select(can, can._output, "td", function(td) {
if (td.innerText == msg.Option("name")) {
can.page.Modify(can, td, {style: {"background-color": "green"}})
}
})
return true
}
},
_refresh: function(can, msg) {
var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"]
can.Timer({interval: 500, length: parseInt(refresh)}, function(timer) {
can.run({})
})
},
_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); msg.Option(line)
var cb = can.onaction[target.value]; return typeof cb == "function"? cb(event, can, target.value):
can.sup.onaction.input(event, can.sup, target.value, function(msg) { can.run({}) })
}
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
can.run(event)
})
}, ondblclick: function(event) {
can.onmotion.modify(can, event.target, function(event, value, old) {
can.run(event, ["action", "编辑", 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)})
})
},
spark: function(can, list, target) {
if (list["name"] == "inner") {
target.title = "点击复制"
target.onclick = function(event) {
target.title = "点击复制", target.onclick = function(event) {
can.user.copy(can, target.innerText)
}
return
}
can.page.Select(can, target, "span", function(item) {
item.title = "点击复制"
item.onclick = function(event) {
item.title = "点击复制", item.onclick = function(event) {
can.user.copy(can, item.innerText)
}
})
},
})
Volcanos("onaction", {help: "控件交互", list: [],
onclick: function(event, can) {
can.run(event, [], function() {})
},
"清空": function(event, can, name) { can._output.innerHTML = "" },
"结束": function(event, can, name) { can.user.confirm("确定结束?") && can.run(event, ["action", name], function(msg) {
can.run({})
}, true) },
})