1
0
forked from x/volcanos

opt river

This commit is contained in:
shaoying 2021-01-22 09:22:42 +08:00
parent 7324ee211a
commit 8557dee71a
12 changed files with 97 additions and 26 deletions

View File

@ -218,10 +218,11 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
})
},
_option: function(can, meta, option) { var index = -1, args = can.base.Obj(meta.args||meta.arg, [])
meta.option = can.base.Obj(meta.option||"{}", {})
function add(item, next) { item._input != "button" && item.type != "button" && index++
Volcanos(item.name, {_follow: can._follow+"."+item.name,
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
_target: can.onappend.input(can, item, args[index], option),
_target: can.onappend.input(can, item, args[index]||meta.option[item.name], option),
Option: can.Option, Action: can.Action, Status: can.Status,
CloneInput: function() { add(item)._target.focus() },
CloneField: function() { can.Clone() },
@ -312,8 +313,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent)
}, can._outputs.push(table), table._msg = msg
can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "")
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) {
can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "")
table.onaction && table.onappend._action(table, msg._action||meta._action||table.onaction.list)
table.ondetail && table.onappend._detail(table, msg._detail||meta._detail||table.ondetail.list)
table.onexport && table.onappend._status(table, msg._export||meta._export||table.onexport.list)
@ -423,6 +424,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var figure = can.onappend.field(can, "input "+pkey, {}, document.body)
can._figure = figure; can.onlayout.figure(can, figure, event)
meta.run = meta.run||can.run
cb(event, can, meta, target, figure)
}
} })

View File

@ -118,7 +118,7 @@ Volcanos("page", {help: "网页模块",
data.placeholder = data.placeholder || data.name
data.placeholder = data.placeholder.split(".").pop()
data.title = data.title || data.placeholder
data.autocomplete = "none"
data.autocomplete = "off"
data.onfocus = data.onfocus || function(event) {
event.target.setSelectionRange(0, -1)
@ -164,6 +164,7 @@ Volcanos("page", {help: "网页模块",
}
item.type == "input" && data.type == "button" && (data.value = can.user.trans(can, data.value))
item.type == "input" && data.type == "text" && (data.autocomplete = data.autocomplete||"off")
data.placeholder && (data.placeholder = can.user.trans(can, data.placeholder))
data.title && (data.title = can.user.trans(can, data.title))
@ -224,6 +225,7 @@ Volcanos("page", {help: "网页模块",
}).slice(1)
index = typeof index == "object"? index: [index]
index = can.core.List(index, function(item) { if (item > -1) { return item} })
var is_time = true, is_number = true
can.core.List(list, function(tr) {

View File

@ -67,6 +67,7 @@ Volcanos("user", {help: "用户模块", agent: {
toast: function(can, text, title, duration, progress) {
var meta = typeof text == "object"? text: {text: text, title: title||can._help, duration: duration, progress: progress}
var width = meta.width||400, height = meta.height||100
if (width < 0) { width = window.innerWidth + width }
var ui = can.page.Append(can, document.body, [{view: "toast", style: {
width: width, bottom: 100, left: document.body.clientWidth/2-width/2,
@ -87,6 +88,24 @@ Volcanos("user", {help: "用户模块", agent: {
})
ui.Close = function() { can.page.Remove(can, ui.first), timer.stop = true }
can.page.Select(can, ui.first, ".story", function(target) { var data = target.dataset
can.page.Modify(can, target, {style: can.base.Obj(data.style)})
switch (data.type) {
case "spark":
if (data["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)
}
})
}
})
return ui
},
share: function(can, msg, cmd) {
@ -159,12 +178,32 @@ Volcanos("user", {help: "用户模块", agent: {
var x = event.clientX||200, y = event.clientY||48; y += 10; if (x > 600) { x -= 160 }
if (can.user.isMobile) { x = 100, y = 100 }
function Option(key, value) {
if (key == undefined) { value = {}
can.page.Select(can, ui.first, "input", function(item) {
item.name && item.value && (value[item.name] = item.value)
}); return value
}
if (typeof key == "object") {
return can.core.Item(key, arguments.callee), key
}
can.page.Select(can, ui.first, 'input[name='+key+']', function(item) {
value == undefined? value = item.value: item.value = value
}); return value
}
var button; var ui = can.page.Append(can, document.body, [{view: ["input", "fieldset"], style: {left: x+"px", top: y+"px"}, list: [
{view: ["option", "table"], list: can.core.List(form, function(item) {
if (item.button) { button = can.core.List(item.button, function(item) {
return {button: typeof item == "object"? item: [item, function(event) { cbs(event, item) }]}
}); return }
item.run = function(event, cmds, cb) {
var msg = can.request(event, Option())
can.run(event, cmds, cb, true)
}
function _init(target) { can.onappend.figure(can, item, item.value, target) }
return {type: ["tr"], list: [

View File

@ -281,6 +281,7 @@ div.upload div.item {
div.toast {
background:#0e3369b3; color:yellow;
position:fixed;
overflow:auto;
padding:5px;
z-index:20;
}
@ -408,3 +409,7 @@ body.print fieldset.Action fieldset.plugin>form.option {
body.print fieldset.River>div.output div.list div.item {
background-color:white;
}
div.story {
text-align:left;
}

View File

@ -70,7 +70,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
})
can.onengine.listen(can, "search", function(msg, word) {
if (word[0] == "*" || word[0] == "plugin") { can.onexport.plugin(can, msg) }
if (word[0] == "*" || word[0] == "plugin") { can.onexport.plugin(can, msg, word) }
})
can._target.ontouchstart = function(event) {
@ -129,7 +129,7 @@ Volcanos("onexport", {help: "导出数据", list: [],
item.dataset.args = JSON.stringify(list), cb(item, next)
})
},
plugin: function(can, msg) {
plugin: function(can, msg, word) {
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) {
if (item.innerHTML.indexOf(word[1]) == -1) { return }

View File

@ -33,7 +33,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
can.run({}, [], function(msg) { can.onimport._init(can, msg, list, cb, can._output) })
can.onengine.listen(can, "search", function(msg, word) {
if (word[0] == "*" || word[0] == "storm") { can.onexport.storm(can, msg) }
if (word[0] == "*" || word[0] == "storm") { can.onexport.storm(can, msg, word) }
})
can.onengine.listen(can, "action.touch", function() {
@ -45,7 +45,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
can.run({}, ["search", "Header.onimport.menu", "river",
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备"],
["访问", "访问研发", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"],
["共享", "共享群组", "共享应用", "共享工具", "共享用户", "共享设备"],
["共享", "共享群组", "共享应用", "共享工具", "邀请用户", "邀请设备"],
], function(event, item) {
can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf("river"), can.Conf("storm")])
})
@ -211,13 +211,26 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
},
"访问任务": function(event, can, button, river, storm) {
var msg = can.request(event, {index: "web.team.task"})
can.user.select(event, can, "task", "time,type,name,text")
can.user.select(event, can, "task", "time,zone,id,type,name,text")
},
"邀请用户": function(event, can, button, river, storm) {
can.user.toast(can, "what", "邀请用户")
},
"邀请设备": function(event, can, button, river, storm) {
can.run(event, ["action", "invite"], function(msg) {
var toast = can.user.toast(can, {
text: msg.Result(), title: "邀请设备",
width: -100, duration: -1, button: [
{button: ["关闭", function() { toast.Close() }]},
]
})
})
},
})
Volcanos("onexport", {help: "导出数据", list: [],
width: function(can) { return can._target.offsetWidth },
height: function(can) { return can._target.offsetHeight },
storm: function(can, msg) {
storm: function(can, msg, word) {
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
can.core.Item(can.onengine.river, function(river, value) {
can.core.Item(value.storm, function(storm, item) {

View File

@ -6,6 +6,10 @@ fieldset.Search {
fieldset.Search input.word {
width:-webkit-fill-available;
}
fieldset.Search div.output {
max-height:600px;
overflow:auto;
}
fieldset.Search div.output div.content {
max-height:400px;
overflow:auto;

View File

@ -10,12 +10,16 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}]},
{view: "content"}, {view: ["display", "table"]}, {view: "preview"},
]), typeof cb == "function" && cb(msg)
var header = can.run({}, ["search", "Header.onexport.height"])||0
var footer = can.run({}, ["search", "Footer.onexport.height"])||0
can.page.Modify(can, can._output, {style: {"max-height": window.innerHeight-header-footer-64}})
},
_table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content)
can.onappend.table(can, msg, function(value, key, index, line) { can.Status("count", index+1)
return {text: [key == "text" && typeof line.text == "function" && line.text.help || value, "td"], onclick: function(event) {
if (event.shiftKey) { var msg = can.request(event, line)
return can.onappend.plugin(can, {index: line.ctx+"."+line.cmd}, function(sub) {
if (event.shiftKey) { event.stopPropagation(), event.preventDefault()
return can.onappend.plugin(can, {index: line.ctx? line.ctx+"."+line.cmd: msg.Option("index"), option: line}, function(sub, meta) {
sub.run = function(event, cmds, cb) {
can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) {
typeof cb == "function" && cb(msg)
@ -42,7 +46,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
_word: function(can, msg, cmds, fields) {
msg = can.request({}, {fields: fields.join(","), word: cmds})
msg = can.request({}, {fields: fields.join(","), word: cmds, index: msg.Option("index")})
can.onengine.signal(can, "search", msg)
can.run(msg._event, cmds, function(msg) { can.list = msg.Table()
@ -76,7 +80,7 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"]
can.onimport._init(can, msg, list, cb, can._output)
},
"关闭": function(event, can) { can.onmotion.hide(can) },
"清空": function(event, can) { can.onmotion.clear(can, can.ui.display), can.onmotion.clear(can, can.ui.display) },
"清空": function(event, can) { can.onmotion.clear(can, can.ui.display), can.onmotion.clear(can, can.ui.preview) },
"完成": function(event, can) { typeof can.cb == "function" && can.cb() },
select: function(event, can, index) {

View File

@ -1,12 +1,12 @@
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) {
item.run(event, ["action", "inputs", item.name, target.value], function(msg) {
if (!msg.append) { return }
can.onappend._action(can, [
{button: ["清空", function(event) { target.value = "" }]},
{button: ["关闭", function(event) { can.page.Remove(can, figure.fieldset) }]},
], figure.action)
can.onappend._action(can, ["关闭", "清空"], figure.action, {
"关闭": function(event) { can.page.Remove(can, figure.fieldset) },
"清空": function(event) { target.value = "" },
})
can.onappend.table(can, msg, function(value, key, index, line) {
return {type: "td", inner: value, onclick: function() {

View File

@ -1,9 +1,9 @@
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, item, target, figure) {
can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() {
can.onappend._action(can, [
{type: "button", name: "清空", onclick: function(event) { target.value = "" }},
{type: "button", name: "关闭", onclick: function(event) { can.page.Remove(can, figure.fieldset) }},
], figure.action)
can.onappend._action(can, ["关闭", "清空"], figure.action, {
"关闭": function(event) { can.page.Remove(can, figure.fieldset) },
"清空": function(event) { target.value = "" },
})
can.page.Modify(can, figure.fieldset, {style: {left: 120}})
var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first);

View File

@ -19,13 +19,13 @@ body fieldset p.story[data-name=inner] {
body fieldset p.story[data-name=inner]:hover {
cursor:copy;
}
body fieldset div.story[data-type=spark] {
body 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 0px;
}
body fieldset div.story[data-type=spark] span:hover {
body div.story[data-type=spark] span:hover {
background-color:#c10c8a;
cursor:copy;
box-shadow: 4px 4px 10px 1px #626bd0;

View File

@ -58,8 +58,10 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
},
request: function(event, option) { event = event || {}
event._msg = event._msg || can.misc.Message(event, can)
can.core.Item(option, event._msg.Option)
return event._msg
can.core.List(arguments, function(arg, index) {
index > 0 && can.core.Item(arg, event._msg.Option)
}); return event._msg
},
Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {},
}