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

opt frame.js

This commit is contained in:
harveyshao 2021-05-17 20:43:33 +08:00
parent 0c3f6033a3
commit 9f1c7644fa
14 changed files with 90 additions and 102 deletions

View File

@ -29,8 +29,9 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
"list": cmds.slice(2), "cb": cb, "target": sub._target,
}, mod)
},
_engine: function(event, can, msg, panel, cmds, cb) { return false },
_remote: function(event, can, msg, panel, cmds, cb) {
if (panel.onengine.engine(event, can, msg, panel, cmds, cb)) { return }
if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return }
var key = panel._name+"."+cmds.join(",")
if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear("append")
@ -39,11 +40,10 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
}
can.misc.Run(event, can, {names: (can.Conf("iceberg")||"/chat/")+panel._name, daemon: can.ondaemon._list[0]+"."+msg._daemon}, cmds, function(msg) {
delete(msg._handle), delete(msg._toast)
Volcanos.meta.pack[key] = msg
Volcanos.meta.pack[key] = msg, delete(msg._handle), delete(msg._toast)
can.base.isFunc(cb) && cb(msg)
})
}, engine: function(event, can, msg, panel, cmds, cb) { return false },
},
listen: shy("监听事件", {}, [], function(can, name, cb) {
arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb)
@ -57,33 +57,25 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
for (var k in sub["river"]) { can.onengine["river"] = sub["river"]; break }
},
})
Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can) {
if (can.user.isLocalFile) { return }
can.misc.WSS(can, {type: "chrome", name: can.user.Search(can, "daemon")||""}, function(event, msg, cmd, arg) { if (!msg) { return }
if (can.base.isFunc(can.ondaemon[cmd])) {
can.core.CallFunc(can.ondaemon[cmd], {
"can": can, "msg": msg, "cmd": cmd, "arg": arg,
"cb": function() { msg.Reply() },
})
} else {
can.onengine._search({}, can, msg, can, ["_search", cmd].concat(arg), function() {
msg.Reply()
})
}
Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) { if (can.user.isLocalFile) { return }
can.misc.WSS(can, {type: "chrome", name: can.user.Search(can, "daemon")||name}, function(event, msg, cmd, arg) { if (!msg) { return }
can.base.isFunc(can.ondaemon[cmd])? can.core.CallFunc(can.ondaemon[cmd], {
"can": can, "msg": msg, "cmd": cmd, "arg": arg, "cb": function() { msg.Reply() },
}): can.onengine._search({}, can, msg, can, ["_search", cmd].concat(arg), function() {
msg.Reply()
})
})
}, _list: [""],
toast: function(can, msg, arg) { arg[0] = can
can.onmotion.float.add(can, "float", can.core.CallFunc(can.user.toast, {can: can, msg: msg, cmds: arg}))
},
pwd: function(can, msg, arg) { can.ondaemon._list[0] = arg[0] },
grow: function(can, msg, arg) {
var sub = can.ondaemon._list[msg.Option("_target")]
if (!sub._outputs || !sub._outputs.length) { return }
if (!sub || !sub._outputs || !sub._outputs.length) { return }
var out = sub._outputs[sub._outputs.length-1]
out.onimport._grow(out, arg.join(""))
},
pwd: function(can, msg, arg) {
can.ondaemon._list[0] = arg[0]
toast: function(can, msg, arg) {
can.onmotion.float.add(can, "float", can.core.CallFunc(can.user.toast, {can: can, msg: msg, cmds: arg}))
},
})
Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) {
@ -95,9 +87,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var output = can.page.Select(can, field, "div.output")[0]
var status = can.page.Select(can, field, "div.status")[0]
var sub = Volcanos(meta.name, {_follow: can._follow+"."+meta.name,
var sub = Volcanos(meta.name, {_follow: can.core.Keys(can._follow, meta.name), _target: field,
_legend: legend, _option: option, _action: action, _output: output, _status: status,
_target: field, _inputs: {}, _outputs: [], _history: [],
_inputs: {}, _outputs: [], _history: [],
Option: function(key, value) {
if (key == undefined) { value = {}
sub.page.Select(sub, option, "textarea.args,input.args,select.args", function(item) {
@ -190,7 +182,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
key.indexOf("on") == 0 && !input._target[key] && (input._target[key] = function(event) {
value(event, input)
})
}), can.onappend.figure(input, item, item.value, input._target)
}), can.onappend.figure(input, item, item.value, function() {}, input._target)
can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target])
})
@ -383,7 +375,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return sort && can.page.RangeTable(can, table, sort), table
},
board: function(can, text, target) { text = can.page.Display(text||"")
board: function(can, text, target) { text = can.page.Color(text||"")
var code = text && can.page.Append(can, target||can._output, [{view: ["code", "div", text]}]).code
can.page.Select(can, code, "input[type=button]", function(target) {
target.onclick = function(event) {
@ -395,13 +387,13 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return code
},
figure: function(can, meta, key, target) {
figure: function(can, meta, key, cb, target) {
if (!key || key[0] != "@") { return }
var list = can.core.Split(key, "@=", "@=")
var pkey = list[0], pval = list[1]||""
target.type != "button" && (target.value = pval||""), can.require(["/plugin/input/"+pkey+".js"], function(can) {
can.core.Item(can.onfigure[pkey], function(key, cb) { if (key.indexOf("on") == 0) { target[key] = function(event) {
can.core.Item(can.onfigure[pkey], function(key, on) { if (key.indexOf("on") == 0) { target[key] = function(event) {
can.onappend._init(can, {type: "input", name: pkey, pos: "float"}, [], function(sub) {
sub.run = function(event, cmds, cb) {
var msg = sub.request(event, can.Option());
@ -411,7 +403,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.onmotion.float.add(can, "input", sub)
meta.style && sub.page.Modify(sub, sub._target, {style: meta.style})
cb(event, sub, meta, target)
on(event, sub, meta, cb, target)
}, document.body)
} } })
})
@ -568,11 +560,10 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
},
auto: function(can, target, key) { var that = this
var list = can.core.List(arguments).slice(2)
can.page.Modify(can, target, {onmouseover: function(event) {
if (event.target.tagName == "img") { return }
can.core.List(arguments, function(key, index) {
index > 1 && that.del(can, key)
})
if (event.target.tagName == "IMG") { return }
can.core.List(list, function(key, index) { that.del(can, key) })
}})
},
},

View File

@ -103,7 +103,7 @@ Volcanos("core", {help: "数据结构",
return res
}),
List: shy("迭代器", function(list, cb, interval, cbs) { list = list || []
List: shy("迭代器", function(list, cb, interval, cbs) {
if (typeof list == "string") { // 默认序列
list = [list]
@ -116,20 +116,19 @@ Volcanos("core", {help: "数据结构",
}
}
list = list || []
if (interval > 0) { // 时间序列
function loop(i) { if (i >= list.length) { return typeof cbs == "function" && cbs(list) }
cb(list[i], i, list), setTimeout(function() { loop(i+1) }, interval)
}
typeof cb == "function" && list.length > 0 && setTimeout(function() { loop(0) }, interval/4)
} else { // 选择序列
var slice = [], res
for (var i = 0; i < list.length; i++) {
typeof cb == "function"? (res = cb(list[i], i, list)) != undefined && slice.push(res): slice.push(list[i])
}
list = slice
}; list = slice
}
return list
}),
Next: shy("迭代器", function(list, cb, cbs) {

View File

@ -163,7 +163,7 @@ Volcanos("page", {help: "网页模块", ClassList: {
// 递归节点
item.list && can.page.Append(can, node, item.list, value)
target && target.append && target.appendChild(node)
typeof item._init == "function" && item._init(node)
can.base.isFunc(item._init) && item._init(node)
})
return value
}),
@ -182,7 +182,7 @@ Volcanos("page", {help: "网页模块", ClassList: {
}])
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, array)
return cb(can.page.Color(line[key]).trim(), key, index, line, array)
})}
}))
return can.page.OrderTable(can, table)
@ -248,13 +248,19 @@ Volcanos("page", {help: "网页模块", ClassList: {
}
},
Display: function(text) { if (typeof text != "string") { return "" }
Format: function(type, src) {
switch (type) {
case "a": return "<a href='"+arguments[1]+"' target='_blank'>"+(arguments[2]||arguments[1])+"</a>"
case "img": return arguments[2]? "<img src='"+arguments[1]+"' height="+arguments[2]+">": "<img src='"+arguments[1]+"'>"
}
},
Color: function(text) { if (typeof text != "string") { return "" }
if (text.indexOf("http://") == 0 || text.indexOf("https://") == 0 || text.indexOf("ftp://") == 0) {
var ls = text.split(" ");
text = "<a href='"+ls[0]+"' target='_blank'>"+ls[0]+"</a>"+ls.slice(1).join(" ")
}; text = text.replace(/\\n/g, "<br>")
// if (!text.indexOf("\033\[")) { return text }
if (text.indexOf("\033\[") == -1) { return text }
text = text.replace(/\033\[31m/g, "<span style='color:#f00'>")
text = text.replace(/\033\[32m/g, "<span style='color:#0f0'>")
text = text.replace(/\033\[33m/g, "<span style='color:#ff0'>")
@ -267,12 +273,6 @@ Volcanos("page", {help: "网页模块", ClassList: {
text = text.replace(/\033\[m/g, "</span>")
return text
},
Format: function(type, src) {
switch (type) {
case "a": return "<a href='"+arguments[1]+"' target='_blank'>"+(arguments[2]||arguments[1])+"</a>"
case "img": return arguments[2]? "<img src='"+arguments[1]+"' height="+arguments[2]+">": "<img src='"+arguments[1]+"'>"
}
},
Cache: function(name, output, data) { var cache = output._cache || {}; output._cache = cache
if (data) { if (output.children.length == 0) { return }
var temp = document.createDocumentFragment()

View File

@ -169,7 +169,7 @@ Volcanos("user", {help: "用户操作", agent: {
}); can.run(event, cmds, cb, true)
}
can.onappend.figure(can, item, item.value, target)
can.onappend.figure(can, item, item.value, function() {}, target)
target.value = target.value || msg.Option(item.name)
}

View File

@ -161,6 +161,7 @@ table.content tr {
table.content th {
background-color:#0fbd45;
padding:2px 6px;
cursor:pointer;
}
table.content td {
padding:2px 6px;

View File

@ -112,9 +112,6 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
]},
}},
"operate": {name: "运维群", storm: {
"ctx": {name: "模块 ctx", index: [
"context", "command", "config",
]},
"cli": {name: "系统 cli", index: [
"system", "daemon", "python", "output",
"runtime", "process",
@ -123,10 +120,6 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
"route", "serve", "space", "dream",
"spide", "share", "cache", "story",
]},
"aaa": {name: "权限 aaa", index: [
"user", "sess", "role", "totp",
]},
"nfs": {name: "文件 nfs", index: [
"nfs.cat", "nfs.dir", "nfs.tail", "nfs.trash",
]},

View File

@ -62,7 +62,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
},
})
Volcanos("onengine", {help: "解析引擎", list: [],
engine: function(event, page, msg, can, cmds, cb) {
_engine: function(event, page, msg, can, cmds, cb) {
var river = can.onengine.river[cmds[0]]
var storm = river && river.storm[cmds[1]]
if (!storm || cmds.length != 2) { return false }
@ -92,7 +92,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
var share = can.user.Search(can, can._SHARE); if (share) {
can.run({}, ["_share", share], function(msg) { msg.Length()>0? can.onimport._share(can, msg, share):
can.onengine.engine({}, can, msg, can, [msg.Option("sess.river"), msg.Option("sess.storm")], function(msg) {
can.onengine._engine({}, can, msg, can, [msg.Option("sess.river"), msg.Option("sess.storm")], function(msg) {
can.onimport._share(can, msg, share)
})
})
@ -136,7 +136,11 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
can.onmotion.select(can, can._output, "fieldset.plugin", 0)
can.onmotion.select(can, can._action, "div.item", 0)
}
if (key == "free") {
can.page.Select(can, can._target, "div.output>fieldset.plugin", function(item, index) {
can.onmotion.move(can, item, {left: 10*index, top: 10*index})
})
}
var header = can.get("Header", "height")
var footer = can.get("Footer", "height")

View File

@ -1,12 +1,4 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
const GRANT = "grant"; if (can.user.Search(can, GRANT)) {
if (can.user.confirm(GRANT+" "+can.user.Search(can, GRANT))) {
can.run(event, [can._ACTION, GRANT, "space", can.user.Search(can, GRANT)])
}
can.user.Search(can, GRANT, "")
return
}
can._trans = {
"river": "菜单",
"search": "搜索",
@ -24,16 +16,37 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}
can.onmotion.clear(can)
can.onimport._agent(can, msg, target)
can.onimport._grant(can, msg, target)
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
can.onimport._search(can, msg, target)
can.onimport._background(can, msg, target)
can.onimport._agent(can, msg, target)
can.onimport._menu(can, msg, target)
can.base.isFunc(cb) && cb(msg)
can.onmotion.float.auto(can, can._output, "carte", "input")
can.base.isFunc(cb) && cb(msg)
},
_agent: function(can, msg, target) {
if (can.user.isMobile) {
can.onaction.River(can)
can.onaction.Footer(can)
} else if (can.user.isExtension) {
can.onaction.River(can)
} else if (can.user.Search(can, "pod")) {
can.onaction.River(can)
can.onaction.Footer(can)
}
can.user.isWeiXin && can.onimport._weixin(can)
},
_grant: function() {
const GRANT = "grant"; if (can.user.Search(can, GRANT)) {
if (can.user.confirm(GRANT+" "+can.user.Search(can, GRANT))) {
can.run(event, [can._ACTION, GRANT, "space", can.user.Search(can, GRANT)])
}
can.user.Search(can, GRANT, "")
return true
}
},
_title: function(can, msg, target) {
can.user.title(can.user.Search(can, can._TITLE)||can.user.Search(can, "pod"))
@ -68,26 +81,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
// ; can.onmotion.autosize(can, ui.input, 240, 120)
can.user.isMobile && can.page.Modify(can, ui.first, {style: {float: "right"}})
},
_avatar: function(can, msg) {
!can.user.isLocalFile && can.page.Modify(can, "div.output div.state.avatar>img", {src: can.Conf(can._AVATAR, msg.Option(can._AVATAR))})
},
_background: function(can, msg) {
if (can.user.isLocalFile) { return }
if (can.user.isExtension) { return }
can.onlayout.background(can, msg.Option(can._BACKGROUND), document.body)
},
_agent: function(can, msg, target) {
if (can.user.isMobile) {
can.onaction.River(can)
can.onaction.Footer(can)
} else if (can.user.isExtension) {
can.onaction.River(can)
} else if (can.user.Search(can, "pod")) {
can.onaction.River(can)
can.onaction.Footer(can)
}
can.user.isWeiXin && can.onimport._weixin(can)
},
_menu: function(can, msg, target) {
can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, "pod")? ["header", can._RIVER]:
["header", ["setting", "black", "white", "print", "pack"]], function(event, item) {
@ -121,17 +119,18 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
}) })
},
_avatar: function(can, msg) {
!can.user.isLocalFile && can.page.Modify(can, "div.output div.state.avatar>img", {src: can.Conf(can._AVATAR, msg.Option(can._AVATAR))})
},
_time: function(can, target) {
can.core.Timer({interval: 1000}, function() { can.onimport.time(can, target) })
can.onappend.figure(can, {style: {"min-width": 306}}, "@date", target)
target.onmouseenter = function(event) { target.click()
can.core.Timer(10, function() {
// can.onlayout.figure(event, can, Volcanos.meta.float.input._target)
can.onappend.figure(can, {style: {"min-width": 306}}, "@date", function(sub) {
can.search({}, ["Action.onexport.size"], function(msg, top) {
can.page.Modify(can, sub._target, {style: {top: top, left: window.innerWidth-sub._target.offsetWidth}})
})
}
}, target), target.onmouseenter = function() { target.click() }
},
time: function(can, target) { can.onlayout.topic(can)
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
},

View File

@ -89,7 +89,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}})
},
})
Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, can, msg, panel, cmds, cb) {
Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, can, msg, panel, cmds, cb) {
cmds.length == 0 && can.core.Item(can.onengine.river, function(key, value) {
msg.Push({hash: key, name: value.name})
}); if (cmds.length != 1 && cmds[1] != "tool") { return false }
@ -153,6 +153,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
var carte = can.user.carte(event, can, can.ondetail, list, cb)
can.page.Modify(can, carte._target, {style: {
left: event.clientX-event.offsetX+event.target.offsetWidth-3,
top: carte._target.offsetTop-event.target.offsetHeight,
}})
},

View File

@ -1,6 +1,6 @@
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, item, target) {
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, meta, cb, target) {
function set(now) { target.value = can.base.Time(now), can.page.Remove(can, can._target)
item && item.action == "auto" && can.run({})
meta && meta.action == "auto" && can.run({})
}
// 添加控件
@ -56,7 +56,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) {add(day, "main")}
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) {add(day, "next")}
return can.onlayout.figure(event, can), now
return can.onlayout.figure(event, can), cb(can), now
}; show(now)
}} }, ["/plugin/input/date.css"])

View File

@ -1,5 +1,5 @@
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, item, target) {
can.run(event, ["action", "inputs", item.name, target.value], function(msg) {
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, meta, cb, target) {
can.run(event, ["action", "inputs", meta.name, target.value], function(msg) {
if (msg.Length() == 0) { return can.page.Remove(can, can._target) }
can.onappend._action(can, ["关闭", "清空"], can._action, {

View File

@ -1,4 +1,4 @@
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, item, target) {
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, meta, cb, target) {
can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() {
can.onappend._action(can, ["关闭", "清空"], can._action, {
"关闭": function(event) { can.page.Remove(can, can._target) },

View File

@ -86,7 +86,7 @@ Volcanos("ondetail", {help: "组件菜单", list: ["关闭", "下载", "上一
can.onappend._init(can, {type: "story feel float"}, [], function(sub) { can.sub = sub
sub.run = function(event, cmds, cb) { return can.run(event, cmds, cb, true) }
sub.search(["Action.onexport.size"], function(msg, left, top, width, height) {
sub.search({}, ["Action.onexport.size"], function(msg, left, top, width, height) {
sub.page.Modify(sub, sub._target, {style: {left: left, top: top}})
sub.page.Modify(sub, sub._output, {style: {"max-width": width, "max-height": height}})
sub.onappend._action(can, can.ondetail.list, sub._action, can.ondetail)

View File

@ -45,7 +45,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
item.type = "story"
can.onappend._init(can, item, ["/plugin/state.js"], function(sub) {
sub.run = function(event, cmds, cb, silent) {
can.run(event, (cmds && cmds[0] == "search"? []: ["action", "story", data.type, data.name, data.text]).concat(cmds), cb, true)
can.run(event, (cmds && cmds[0] == "_search"? []: ["action", "story", data.type, data.name, data.text]).concat(cmds), cb, true)
}
can.page.Modify(can, sub._output, {style: {"max-width": item.width-40}})