1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
shaoying 2021-08-08 23:17:06 +08:00
parent e4fb65d9a0
commit f5631ab80a
16 changed files with 217 additions and 141 deletions

View File

@ -14,6 +14,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
can.onengine.listen(can, key, function(msg) { can.core.CallFunc(item, {can: panel, msg: msg}) })
} }), panel.const(panel.onaction._const||[]), panel._trans = panel.onaction._trans
panel.onaction._init(panel, item, item.list, next, panel._target)
can.onmotion.float.auto(can, panel._output, "carte", "input")
}, target)
}, function() { can.onlayout.topic(can)
can.misc.Log(can.user.title(), cli.RUN, can)
@ -114,8 +115,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
value == undefined? (value = item.value): (item.value = value)
}); return value
},
Update: function() {
sub.onappend._output(sub, sub.Conf(), {}, sub.Pack())
Update: function(event, cmds, cb, silent) {
sub.onappend._output(sub, sub.Conf(), event||{}, cmds||sub.Input(), cb, silent)
},
Action: function(key, value) {
if (typeof key == "object") { return sub.core.Item(key, sub.Action), key }
@ -143,7 +144,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.base.isFunc(cb) && cb(sub)
}, target)
},
Pack: function(cmds, silent) {
Input: function(cmds, silent) {
cmds = cmds && cmds.length > 0? cmds: sub.page.Select(sub, option, "textarea.args,input.args,select.args", function(item) {
return item.name && item.value || ""
}); for (var i = cmds.length-1; i >= 0; i--) {
@ -185,7 +186,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return msg.Option("_handle", "true"), can.core.CallFunc(table.onaction[cmds[1]], {event: event, can: table, msg: msg})
}
return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent)
return can.Update(event, can.Input(cmds, silent), cb, silent)
}, can._inputs[item.name] = input
can.core.Item(input.onaction, function(key, value) {
@ -202,7 +203,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.core.List(list, function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: "space"}:
typeof item == "string"? /*按键*/ {type: html.BUTTON, value: item, onclick: function(event) {
var cb = meta[item]||meta["_engine"]
cb? can.core.CallFunc(cb, [event, can, item]): can.run(event, [ctx.ACTION,item].concat(can.sup.Pack()))
cb? can.core.CallFunc(cb, [event, can, item]): can.run(event, [ctx.ACTION,item].concat(can.sup.Input()))
}}: item.length > 0? /*列表*/ {type: "select", name: item[0], values: item.slice(1), onchange: function(event) {
var which = item[event.target.selectedIndex+1]
@ -226,8 +227,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var input = msg.Option("_handle") != "true" && cmds && cmds[0] == ctx.ACTION && feature && feature[cmds[1]]; if (input) {
can.user.input(event, can, input, function(ev, button, data, list, args) {
var msg = can.request(event, {_handle: "true"}, can.Option())
can.onappend._output(can, meta, event, cmds.slice(0, 2).concat(args), function(msg) {
can.onappend._output(can, meta, {}, can.Pack(), cb)
can.Update(event, cmds.slice(0, 2).concat(args), function(msg) {
can.Update({}, can.Input(), cb)
}, true)
})
return
@ -253,7 +254,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return msg.Option("_handle", "true"), can.core.CallFunc(table.onaction[cmds[1]], {event: event, can: table, msg: msg})
}
return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent)
return can.Update(event, can.Input(cmds, silent), cb, silent)
}, can._outputs.push(table), table._msg = msg
table._display = display
@ -305,7 +306,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var title = can.Conf(["feature", "title", item.name].join("."))||""
var input = {type: html.INPUT, name: item.name, data: item, dataset: {}}
var input = {type: html.INPUT, name: item.name, data: item, dataset: {}, _init: item._init, style: item.style}
item.value == "auto" && (item.value = "", item.action = "auto")
item.action == "auto" && (input.dataset.action = "auto")
title && (input.title = title)
@ -457,21 +458,44 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
float: function(can, msg, cb) {
var ui = can.onappend.field(can, "story toast float", {}, document.body)
ui.close = function() { can.page.Remove(can, ui.first), can.onengine.signal(can, "keymap.focus") }
can.onmotion.float.auto(can, ui.output, "carte", "input")
can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) {
can.page.Modify(can, ui.output, {style: {"max-width": width, "max-height": height-28}})
can.page.Modify(can, ui.first, {style: {top: top, left: left}})
})
can.onappend._action(can, ["关闭", "刷新"], ui.action, {
"关闭": function(event) { can.page.Remove(can, ui.first) },
"刷新": function(event) { can.page.Remove(can, ui.first), can.toast.click() },
can.onappend._action(can, ["关闭", "刷新", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) {
can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) {
if (event.target.tagName == "INPUT") { return }
if (event.key == "Escape") { ui.close(); return }
if (event.key == " ") { input.focus()
event.stopPropagation(), event.preventDefault()
}
}}))
}, onkeydown: function(event) {
can.onkeypop.input(event, can)
if (event.key != "Enter") { return }
event.target.setSelectionRange(0, -1)
can.page.Select(can, ui.output, "tr", function(tr, index) { if (index == 0) { return }
can.page.Modify(can, tr, {style: {display: "none"}})
can.page.Select(can, tr, "td", function(td) {
if (td.innerText.indexOf(event.target.value) > -1) {
can.page.Modify(can, tr, {style: {display: ""}})
}
})
})
}}], ui.action, { "关闭": ui.close,
"刷新": function(event) { ui.close(), can.toast.click() },
})
can.onappend.table(can, msg, function(value, key, index, line, list) {
return {text: [value, "td"], onclick: function(event) {
can.base.isFunc(cb) && cb(value, key, index, line, list)
}}
}, ui.output)
can.onappend.board(can, msg.Result(), ui.output)
return ui
},
}, [], function(can) {})
@ -655,7 +679,7 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
if (back.length > 120 || back.indexOf("\n") > -1) {
return can.onmotion.modifys(can, target, cb)
}
var ui = can.page.Appends(can, target, [{type: html.INPUT, value: back, style: {width: target.offsetWidth > 400? 400: target.offsetWidth-20}, onkeydown: function(event) {
var ui = can.page.Appends(can, target, [{type: html.INPUT, value: target.innerText, style: {width: target.offsetWidth > 400? 400: target.offsetWidth-20}, onkeydown: function(event) {
switch (event.key) {
case "Enter":
target.innerHTML = event.target.value
@ -924,15 +948,13 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
return status
},
})
Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, target) {
var focus = []; can.onengine.listen(can, "keymap.focus", function(cb) {
cb? focus.push(cb): focus.pop()
})
Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: function(can, target) {
var focus = can.onkeypop._focus
// can.onengine.listen(can, "keymap.focus", function(cb) { cb? focus.push(cb): focus.pop() })
can.onengine.listen(can, "keymap.focus", function(cb) { cb? focus.push(cb): can.onkeypop._focus.length = 0 })
can.onkeypop._build(can)
target.onkeydown = function(event) {
if (focus.length > 0) { return focus[focus.length-1](event) }
if (event.target != target) { return }
can.page.Select(can, target, "fieldset.Action>div.output", function(item) {
target.onkeydown = function(event) { if (focus.length > 0) { return focus[focus.length-1](event) }
event.target == target && can.page.Select(can, target, "fieldset.Action>div.output", function(item) {
target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], item)
})
}
@ -947,7 +969,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
})
},
_parse: function(event, can, mode, list, target) { list = list||[], list.push(event.key)
// can.Status("按键", list.join(""))
for (var pre = 0; pre < list.length; pre++) {
if ("0" <= list[pre] && list[pre] <= "9") { continue } break
}; var count = parseInt(list.slice(0, pre).join(""))||1
@ -955,7 +976,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
function repeat(cb, count) { list = []
for (var i = 1; i <= count; i++) { if (cb(event, can, target, count)) { break } }
event.stopPropagation(), event.preventDefault()
// can.Status("按键", list.join(""))
}
var map = can.onkeypop._mode[mode]
@ -987,6 +1007,11 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
s: function(event, can, target) { can.search(event, ["River.ondetail.添加应用"]) },
t: function(event, can, target) { can.search(event, ["River.ondetail.添加工具"]) },
":": function(event, can, target) {
can.page.Select(can, document.body, "fieldset.panel.Footer input.cmd", function(target) {
target.focus()
})
},
" ": function(event, can, target) {
can.page.Select(can, document.body, "fieldset.panel.Header div.search input", function(target) {
target.focus()
@ -994,6 +1019,12 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
},
enter: function(event, can, target) { can.misc.Log("enter") },
escape: function(event, can, target) {
can.page.Select(can, document.body, "fieldset.float", function(item) {
can.page.Remove(can, item)
})
can.page.Select(can, document.body, "fieldset.auto", function(item) {
can.onmotion.hidden(can, item)
})
can.search(event, ["Search.onaction.hide"])
can.misc.Log("enter")
},
@ -1010,7 +1041,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
var his = target._history || []
his.push(target.value)
// can.misc.Log("input", target, his)
target.setSelectionRange(0, -1)
target._current = his.length
target._history = his

View File

@ -74,9 +74,8 @@ Volcanos("core", {help: "数据结构",
}
// 剩余字符
begin > 0 && (s? push({type: "string", text: str.slice(begin), left: s, right: ""})
: push(str.slice(begin)))
// begin > 0 && (s? push({type: "string", text: str.slice(begin), left: s, right: ""})
begin > 0 && (s? push({type: "string", text: str.slice(begin), left: s, right: ""}): push(str.slice(begin)))
return res
}),
CallFunc: shy("调用器", function(func, args, mod) { args = args || {}
@ -89,7 +88,7 @@ Volcanos("core", {help: "数据结构",
// 解析参数
var list = [], echo = false, cb = args["cb"]
this.List(func.toString().split(")")[0].split("(")[1].split(","), function(item, index) { item = item.trim()
this.List(func.toString().split(")")[0].split("(")[1].split(","), function(item, index) { item = item.trim(); if (item == "") { return }
var arg = args[item] || msg&&msg.Option&&msg.Option(item) || can&&can.Conf&&can.Conf(item) || cmds[index] || args[index] || null
if (item == "cb") { echo = true }
list.push(arg)

View File

@ -1,4 +1,4 @@
Volcanos("page", {help: "网页模块", ClassList: {
Volcanos("page", {help: "用户界面", ClassList: {
has: function(can, obj, key) { var list = obj.className? obj.className.split(" "): []
return list.indexOf(key) > -1
},
@ -15,7 +15,7 @@ Volcanos("page", {help: "网页模块", ClassList: {
condition? this.add(can, obj, key): this.del(can, obj, key)
},
neg: function(can, obj, key) {
this.has(can, obj, key)? this.del(can, obj, key): this.add(can, obj, key)
return (this.has(can, obj, key)? this.del(can, obj, key): this.add(can, obj, key)).indexOf > -1
},
},
Select: shy("选择节点", function(can, target, key, cb, interval, cbs) { if (key == ".") { return [] }

View File

@ -111,6 +111,7 @@ input[name=text] {
width:160px;
}
input[type=text] {
height:21px; font-size:16px;
box-shadow: 4px 4px 10px 1px #626bd0;
background-color:cyan; color:black;
padding: 0 4px;
@ -295,7 +296,7 @@ div.carte div.item {
div.carte div.item:hover {
background:red;
}
div.input {
body>div.input {
position:fixed;
background-color:#0d4142a6;
z-index:50;
@ -303,7 +304,7 @@ div.input {
div.input textarea {
box-shadow: 4px 4px 10px 1px #626bd0;
border:2px inset #14a58e;
width:145px; height:60px;
width:165px; height:60px;
background-color: cyan;
padding:4px;

View File

@ -107,6 +107,7 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
]},
"research": {name: "测试 research", index: [
"web.code.favor", "web.code.bench", "web.code.pprof",
"web.code.case",
]},
}},
"operate": {name: "运维群", storm: {

View File

@ -25,7 +25,19 @@ fieldset.Action>div.action div.item.select {
background-color:#2e515f;
}
fieldset.Action div.output {
fieldset.Action div.output fieldset.plugin.fixed {
position:fixed;
left:0px;
top:0px;
margin:0px;
padding:0px;
background-color:black;
z-index:10;
height: -webkit-fill-available;
width: -webkit-fill-available;
overflow: auto;
background-color: #061c3cd9;
}
fieldset.Action div.output.tabs {
margin-top:28px;

View File

@ -11,7 +11,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
})
}, function() {
can.onaction.layout(can, can.user.Search(can, can._LAYOUT)||can.Conf(can._LAYOUT))
!can.user.isMobile && can.onimport._menu(can)
!can.user.isMobile && can.onimport._menu(can, msg)
})
can.onmotion.float.auto(can, can._output, "carte")
@ -38,7 +38,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
meta.id && (sub._option.dataset.id = meta.id)
sub._target.Meta = meta
},
_menu: function(can) {
_menu: function(can, msg) {
can._menu && can.page.Remove(can, can._menu)
can._menu = can.search({}, ["Header.onimport.menu", can._ACTION,
["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"],

View File

@ -6,6 +6,9 @@ fieldset.Footer div.toast {
position:static;
float:left;
}
fieldset.Footer>div.output {
height:32px; overflow:hidden;
}
fieldset.Footer>div.output>div {
height:22px; padding:5px;
cursor:pointer;
@ -25,3 +28,10 @@ fieldset.Footer>div.output div.state {
float:right;
}
fieldset.Footer>div.output input[name=cmd] {
background-color:black; color:white;
width:120px; height:25px;
}
fieldset.Footer>div.output input[name=cmd]:focus {
width:320px;
}

View File

@ -2,49 +2,45 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onmotion.clear(can)
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
can.onimport._cli(can, msg, target)
can.onimport._toast(can, msg, target)
can.onmotion.float.auto(can, can._output, "carte", "input")
can.base.isFunc(cb) && cb(msg)
},
_title: function(can, msg, target) { const TITLE = "title"
_title: function(can, msg, target) { const TITLE = chat.TITLE
!can.user.isMobile && can.core.List(msg.result, function(item) {
can.page.Append(can, target, [{view: [TITLE, "div", item], title: "联系站长"}])
can.page.Append(can, target, [{view: [TITLE, html.DIV, item], title: "联系站长"}])
})
},
_state: function(can, msg, target) { const STATE = "state"
can.core.List(can.base.Obj(msg.Option(STATE), can.Conf(STATE)||["ncmd"]), function(item) {
can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), ["ncmd"]), function(item) {
can.page.Append(can, target, [{view: [STATE+" "+item, html.DIV, can.Conf(item)], list: [
{text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]},
], onclick: function(event) {
can.show = can.show? (can.page.Remove(can, can.show), null): can.onimport._cmd(can)
can.show = can.show? (can.page.Remove(can, can.show), null): can.onaction._cmd(can)
}}])
})
},
_cmd: function(can) {
return can.onappend.float(can, can._cmds, function(value, key, index, line, list) {
var commands = can.base.Obj(line.commands)
commands.length > 2 && can.onappend.plugin(can, {index: commands[2]}, function(sub) {
sub.run = function(event, cmds, cb) {
can.run(event, [ctx.ACTION, cli.RUN, commands[2]].concat(cmds), cb)
}
can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) {
can.page.Modify(can, sub._output, {style: {"max-width": width, "max-height": height-28}})
can.page.Modify(can, sub._target, {style: {top: top+100, left: left}})
can.page.Modify(can, sub._legend, {style: {display: "block"}})
can.page.ClassList.add(can, sub._target, "float")
})
}, document.body)
}).first
},
_toast: function(can, msg, target) {
can.toast = can.page.Append(can, target, [{view: "toast", onclick: function(event) {
can.show = can.show? (can.page.Remove(can, can.show), null): can.onappend.float(can, can._toast).first
}}]).first
},
_cli: function(can, msg, target) {
can.page.Append(can, target, [{input: ["cmd", function(event) {
can.onkeypop.input(event, can); if (event.key != "Enter") { return }
switch (event.target.value) {
case "close": can.cli && can.cli.close(); break
case "clear": can.cli && can.cli.close(); break
default:
can.run(event, [cli.RUN].concat(can.core.Split(event.target.value+" ")), function(msg) {
can.cli && can.cli.close()
can.cli = can.onappend.float(can, msg, function(value, key, index, line, list) {
}), can.page.Modify(can, can.cli.first, {style: {bottom: 32, top: ""}})
})
}
}]}])
},
toast: function(can, msg, title, content, fileline, time) { can._toast = can._toast || can.request()
can.page.Modify(can, can.toast, [time.split(" ").pop(), title, content].join(" "))
@ -63,6 +59,31 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
onlogin: function(can, msg) {
can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) })
},
_cmd: function(can) {
return can.onappend.float(can, can._cmds, function(value, key, index, line, list) {
var commands = can.base.Obj(line.commands); switch (line.follow) {
case "chat.Action": commands = commands.slice(2); break
case "chat.Footer": commands = commands.slice(2); break
}
switch (commands[0]) {
case "web.wiki.word": commands = commands.slice(5); break
}
can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) {
can.onappend.plugin(can, {index: commands[0], args: commands.slice(1), width: width, height: height-100}, function(sub) {
sub.run = function(event, cmds, cb) {
can.run(event, [ctx.ACTION, cli.RUN, commands[0]].concat(cmds), cb)
}
can.page.Modify(can, sub._output, {style: {"max-width": width}})
can.page.Modify(can, sub._target, {style: {top: top+100, left: left}})
can.page.Modify(can, sub._legend, {style: {display: "block"}})
can.page.ClassList.add(can, sub._target, "float")
}, document.body)
})
}).first
},
})
Volcanos("onexport", {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight },

View File

@ -1,5 +1,5 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.Conf(aaa.USERNAME, msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME)||can.Conf(aaa.USERNAME))
can.Conf(aaa.USERNAME, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNAME)||can.Conf(aaa.USERNAME))
can.Conf(aaa.BACKGROUND, msg.Option(aaa.BACKGROUND))
can.Conf(aaa.AVATAR, msg.Option(aaa.AVATAR))
@ -10,9 +10,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onimport._state(can, msg, target)
can.onimport._search(can, msg, target)
can.onimport._background(can, msg, target)
can.onimport._menu(can, msg, target)
can.onmotion.float.auto(can, can._output, "carte", "input")
can.onimport._menus(can, msg, target)
can.base.isFunc(cb) && cb(msg)
},
_agent: function(can, msg, target) {
@ -35,7 +33,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.user.Search(can, chat.GRANT, "")
}
},
_title: function(can, msg, target) { const TITLE = "title"
_title: function(can, msg, target) { const TITLE = chat.TITLE
can.user.title(can.user.Search(can, TITLE)||can.user.Search(can, cli.POD))
!can.user.isMobile && can.core.List(msg.result||["github.com/shylinux/contexts"], function(item) {
can.page.Append(can, target, [{view: [TITLE, html.DIV, item], title: "返回主页", onclick: function(event) {
@ -44,7 +42,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
},
_state: function(can, msg, target) { const STATE = "state"
can.core.List(can.base.Obj(msg.Option(STATE), can.Conf(STATE)||["time", aaa.USERNAME]), function(item) {
can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), [kit.MDB_TIME, aaa.USERNAME]), function(item) {
if (item == aaa.AVATAR) {
can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)}], onmouseenter: function(event) {
can.onaction.carte(event, can, [can.page.Format(html.IMG, can.Conf(item), 160)])
@ -55,7 +53,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.page.Append(can, target, [{view: [STATE+" "+item, html.DIV, (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) {
can.core.CallFunc([can.onaction, item], [event, can, item])
}, _init: function(target) {
item == "time" && can.onimport._time(can, target)
item == kit.MDB_TIME && can.onimport._time(can, target)
}}])
})
},
@ -69,15 +67,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
// can.onmotion.autosize(can, ui.input, 240, 120)
},
_background: function(can, msg) {
if (can.user.isExtension) { return }
if (can.user.isLocalFile) { return }
if (can.user.isExtension) { return }
can.onlayout.background(can, msg.Option(aaa.BACKGROUND), document.body)
},
_menu: function(can, msg, target) {
can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, cli.POD)? [chat.HEADER, chat.RIVER]:
[chat.HEADER, ["setting", "black", "white", "print", "pack"]], function(event, item) {
can.core.CallFunc([can.onaction, item], [event, can, item])
})
_menus: function(can, msg, target) {
var menus = can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), [chat.HEADER, ["setting", "black", "white", "print"]])
can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, cli.POD)? [chat.HEADER, chat.RIVER]: menus, function(event, item) {
can.core.CallFunc(can.onaction[item]||function(event, can) {
can.run(event, [item], function(msg) { can.user.toast(can, "执行成功", can.user.trans(can, item)) })
}, {event: event, can: can, button: item})
})
},
_weixin: function(can, msg) { can.run({}, [ctx.ACTION, chat.AGENT], function(msg) {
@ -152,9 +152,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, list, cb, target) {
can.base.isFunc(cb) && cb()
},
_const: [
"title",
],
_trans: {
"river": "菜单",
"search": "搜索",
@ -163,24 +160,20 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
"black": "黑色主题",
"white": "白色主题",
"print": "打印主题",
"clear": "清除背景",
"pack": "打包页面",
"shareuser": "共享用户",
"usernick": "修改昵称",
"logout": "退出登录",
"clear": "清除背景",
},
onmain: function(can, msg) {
function init() { can.run({}, [], function(msg) {
can.onimport._init(can, msg, [], function(msg) {
can.onengine.signal(can, "onlogin", msg)
}, can._output)
can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {}))
can.onimport._init(can, msg, [], function(msg) { can.onengine.signal(can, "onlogin", msg) }, can._output)
can.search({}, ["River.onmotion.toggle"])
}) }; can.search({}, ["River.onmotion.hidden"])
// 登录检查
can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) {
can.user.isLocalFile? init(): can.run({}, [chat.CHECK], function(msg) {
can.Conf(aaa.USERNAME, msg.Option(ice.MSG_USERNAME))? init():
msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init)
})
@ -190,7 +183,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
},
title: function(event, can) {
var args = {}; can.core.List([chat.TITLE, "topic", "layout"], function(key) {
var args = {}; can.core.List([chat.TITLE, chat.TOPIC, "layout"], function(key) {
var value = can.user.Search(can, key); value && (args[key] = value)
})
can.user.jumps(can.user.MergeURL(can, args, true))
@ -211,7 +204,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
can.set("River", "height", -1)
can.set("Action", "height", -1)
},
pack: function(event, can) {
webpack: function(event, can) {
can.user.input(event, can, [
{name: "name", value: can.user.title()},
], function(ev, button, meta, list) {

View File

@ -8,8 +8,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
(index == 0 || item.hash == can._main_river) && (select = target)
})
})), select && select.click()
can.onmotion.float.auto(can, target, "carte", "input")
},
_main: function(can, msg) {
can._main_river = "project", can._main_storm = "studio"
@ -22,11 +20,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can._main_storm = can.user.Search(can, chat.STORM) || msg.Option(ice.MSG_STORM) || Volcanos.meta.args.storm || can._main_storm
},
_menu: function(can, msg) {
can.search({}, ["Header.onimport.menu", chat.RIVER,
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"],
!can.user.isMobile && ["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "工作任务"],
["共享", "共享群组", "共享应用", "共享工具", "共享主机"],
], function(event, item) {
can.user.Search(can, cli.POD) || can.search({}, ["Header.onimport.menu"].concat(can.base.Obj(msg.Option(chat.MENUS), can.ondetail.menus)), function(event, item) {
can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf(chat.RIVER), can.Conf(chat.STORM)])
})
},
@ -35,8 +29,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onaction.storm(event, can, meta.hash)
}, onmouseenter: function(event) {
if (can.user.isMobile) { return }
can.onaction.carte(event, can, can.ondetail.list, function(event, button, module) {
!can.user.isMobile && can.onaction.carte(event, can, can.ondetail.list, function(event, button, module) {
module[button](event, can, button, meta.hash)
})
}, _init: function(target) { cb(target)
@ -49,8 +42,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.user.title(can._main_title || meta.name)
}, onmouseenter: function(event) {
if (can.user.isMobile) { return }
can.onaction.carte(event, can, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(event, button, module) {
!can.user.isMobile && can.onaction.carte(event, can, can.ondetail.sublist, function(event, button, module) {
module[button](event, can, button, river, meta.hash)
})
}, _init: function(target) {
@ -139,6 +131,12 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
},
})
Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户", "添加应用", "添加设备", "重命名群组", "删除群组"],
sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"],
menus: [chat.RIVER,
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"],
["共享", "共享群组", "共享应用", "共享工具", "共享主机"],
],
"创建群组": function(event, can) { can.onaction.create(event, can) },
"共享群组": function(event, can, button, river) {
@ -155,13 +153,6 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
})
})
},
"添加设备": function(event, can, button, river) {
can.user.select(event, can, web.SPACE, "type,name,text", function(item, next) {
can.run({}, [river, chat.NODE, ctx.ACTION, mdb.INSERT, kit.MDB_TYPE, item[0], kit.MDB_NAME, item[1]], function(msg) {
next()
})
})
},
"添加应用": function(event, can, button, river) {
can.user.trans(can, {"public": "公开应用", "protected": "群组应用", "private": "个人应用"})
can.user.input(event, can, [
@ -173,6 +164,13 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
})
})
},
"添加设备": function(event, can, button, river) {
can.user.select(event, can, web.SPACE, "type,name,text", function(item, next) {
can.run({}, [river, chat.NODE, ctx.ACTION, mdb.INSERT, kit.MDB_TYPE, item[0], kit.MDB_NAME, item[1]], function(msg) {
next()
})
})
},
"重命名群组": function(event, can, button, river) {
can.user.input(event, can, [kit.MDB_NAME], function(event, button, meta, list) {
var msg = can.request(event, {hash: river})
@ -257,7 +255,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
"共享主机": function(event, can, button, river, storm) {
can.run(event, [ctx.ACTION, aaa.INVITE], function(msg) {
can.user.toast(can, {
title: "共享主机", duration: -1, width: -100,
title: "共享主机", duration: -1, width: -300,
content: msg.Result(), action: [cli.CLOSE],
})
})
@ -281,8 +279,8 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
{name: "template", value: "@key"},
], function(event, button, data, list, args) {
can.run(event, [ctx.ACTION, cli.START].concat(args), function(msg) {
can.user.open(can.user.MergeURL(can, {pod: can.core.Keys(can.user.Search(can, cli.POD), msg.Option(kit.MDB_NAME))}))
can.user.toast(can, can.user.MergeURL(can, {pod: msg.Option(kit.MDB_NAME)}))
var link = can.user.MergeURL(can, {_path: "/chat/pod/"+can.core.Keys(can.user.Search(can, cli.POD), msg.Option(kit.MDB_NAME))})
can.user.toast(can, link), can.user.open(link)
})
})
},

View File

@ -11,6 +11,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
_word: function(can, msg, cmds, fields) { can.type = cmds[0]
var res = can.request({}, {word: cmds, fields: fields.join(","), sort: msg.Option("sort"), index: msg.Option("index")})
if (cmds[1] == "clear") { can.onaction["清空"]({}, can); return }
can.onengine.signal(can, "onsearch", res)
can.run(res._event, cmds, function(res) {
can.list = res.Table()

View File

@ -10,7 +10,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
},
"执行": function(event, can) {
var title = can.sup._name+" "+can.sup.Pack([], true)
var title = can.sup._name+" "+can.sup.Input([], true)
var toast = can.user.toast(can, "执行中...", title, -1)
can.run(event, [], function() { toast.close(), can.user.toast(can, "执行成功...", title) })
},
@ -25,7 +25,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
if (can.Conf("type") == "text") { event.target.setSelectionRange(0, -1) }
},
onclick: function(event, can) {
if (can.Conf("type") == "button") { can.run(event, [ctx.ACTION, can.Conf("name")].concat(can.sup.Pack())) }
if (can.Conf("type") == "button") { can.run(event, [ctx.ACTION, can.Conf("name")].concat(can.sup.Input())) }
},
onkeydown: function(event, can) { var target = event.target

View File

@ -297,7 +297,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
can.onaction.rerankLine(can)
},
})
Volcanos("onaction", {help: "控件交互", list: ["项目"],
Volcanos("onaction", {help: "控件交互", list: ["项目", "autogen"],
save: function(event, can) { var msg = can.request(event, {content: can.onexport.content(can)})
can.run(event, [ctx.ACTION, "save", can.parse, can.Option("file"), can.Option("path")], function(msg) {
can.user.toast(can, "保存成功")

View File

@ -11,13 +11,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
location.href = msg._arg[0]
},
_rewrite: function(can, msg) { can.Option(msg._arg[0], msg._arg[1])
can.onappend._output(can, can.Conf(), {}, can.Pack())
can.Update()
return true
},
_refresh: function(can, msg) {
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(), sub._event, can.Pack())
can.Update()
})
return true
},
@ -52,10 +52,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
if (his[0] == ctx.ACTION) { continue }
can.page.Select(can, can._option, "textarea.args,input.args,select.args", function(item, index) {
item.value = his[index]||""
}), can.onappend._output(can, can.Conf(), {}, can.Pack())
}), can.Update()
break
}
!his && can.onappend._output(can, can.Conf(), {}, can.Pack())
!his && can.Update()
return true
},
@ -77,11 +77,23 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
},
})
Volcanos("onaction", {help: "交互操作", list: [
"共享工具", "保存参数", "清空参数", "刷新数据", ["其它 ->", "生成链接", "复制数据", "下载数据", "清空数据", "删除工具", "摄像头"],
"共享工具", "保存参数", "清空参数", "刷新数据", ["其它 ->", "全屏", "生成链接", "复制数据", "下载数据", "清空数据", "删除工具", "摄像头"],
], _init: function(can, msg, list, cb, target) {
},
_engine: function(event, can, button) {
can.onappend._output(can, can.Conf(), event, [ctx.ACTION, button].concat(can.Pack([], true)))
can.Update(event, [ctx.ACTION, button].concat(can.Input([], true)))
},
"共享工具": function(event, can) { var meta = can.Conf()
var ui = can.user.input(event, can, [{name: "name", value: meta.name}], function(event, button, data, list, args) {
var msg = can.request(event, {arg: [
kit.MDB_TYPE, "field",
kit.MDB_NAME, list[0], kit.MDB_TEXT, JSON.stringify(can.Input([], true)),
// "river", meta.ctx||meta.key||"", "storm", meta.index||meta.cmd||meta.name,
"storm", meta.index,
]})
can.search(event, ["Header.onaction.share"])
})
can.onlayout.figure(event, can, ui._target, true)
},
"保存参数": function(event, can) { var meta = can.Conf()
var msg = can.request(event, {river: can.Conf("river"), storm: can.Conf("storm"), id: meta.id})
@ -92,30 +104,21 @@ Volcanos("onaction", {help: "交互操作", list: [
"清空参数": function(event, can) {
can.page.Select(can, can._option, '.args', function(item) { return item.value = "" })
},
"共享工具": function(event, can) { var meta = can.Conf()
var ui = can.user.input(event, can, [{name: "name", value: meta.name}], function(event, button, data, list, args) {
var msg = can.request(event, {arg: [
kit.MDB_TYPE, "field",
kit.MDB_NAME, list[0], kit.MDB_TEXT, JSON.stringify(can.Pack([], true)),
// "river", meta.ctx||meta.key||"", "storm", meta.index||meta.cmd||meta.name,
"storm", meta.index,
]})
can.search(event, ["Header.onaction.share"])
})
can.onlayout.figure(event, can, ui._target, true)
"刷新数据": function(event, can) {
can.Update({}, can.Input([], true))
},
"全屏": function(event, can) {
if (can.page.ClassList.neg(can, can._target, "fixed")) {
}
},
"生成链接": function(event, can) { var meta = can.Conf()
var args = can.Option(); args._path = "/chat/cmd/"+(meta.index||can.core.Keys(meta.ctx, meta.cmd))
args._path == "/chat/cmd/web.wiki.word" && (args = {_path: "/chat/cmd/"+args.path})
var msg = can.request(event, {link: can.user.MergeURL(can, args)})
can.search(event, ["Header.onaction.share"])
},
"删除工具": function(event, can) {
can.page.Remove(can, can._target)
},
"刷新数据": function(event, can) { var meta = can.Conf()
can.onappend._output(can, meta, {}, can.Pack([], true))
},
"复制数据": function(event, can) { var meta = can.Conf(), msg = can._msg
var res = [msg.append && msg.append.join(",")]; msg.Table(function(line, index, array) {
res.push(can.core.Item(line, function(key, value) { return value }).join(","))
@ -135,6 +138,9 @@ Volcanos("onaction", {help: "交互操作", list: [
"清空数据": function(event, can) {
can.onmotion.clear(can, can._output)
},
"删除工具": function(event, can) {
can.page.Remove(can, can._target)
},
"摄像头": function(event, can) {
var constraints = {audio: false, video: {width: 200, height: 200}}
var ui = can.page.Append(can, can._output, [{view: ctx.ACTION}, {view: "capture", list: [{type: "video", _init: function(item) {
@ -164,7 +170,7 @@ Volcanos("onaction", {help: "交互操作", list: [
change: function(event, can, name, value, cb) {
return can.page.Select(can, can._option, "input.args", function(input) {
if (input.name == name && value != input.value) { input.value = value
var data = input.dataset || {}; data.action == "auto" && can.onappend._output(can, can.Conf(), event, can.Pack(), cb)
var data = input.dataset || {}; data.action == "auto" && can.Update(event, can.Input(), cb)
return input
}
})
@ -215,8 +221,8 @@ Volcanos("onaction", {help: "交互操作", list: [
openLocation: function(event, can) { can.user.agent.openLocation(can.request(event)) },
"参数": function(event, can) { can.onmotion.Toggle(can, can._action) },
"关闭": function(event, can) { can.page.Remove(can, can._target) },
"清空": function(event, can, name) { can.onmotion.clear(can, can._output) },
"关闭": function(event, can) { can.page.Remove(can, can._target) },
})
Volcanos("onexport", {help: "导出数据", list: []})
var _can_name = ""

View File

@ -86,15 +86,10 @@ const wiki = {
SHELL: "shell",
}
const chat = {
TITLE: "title",
RIVER: "river",
STORM: "storm",
FIELD: "field",
AGENT: "agent",
SHARE: "share",
GRANT: "grant",
PUBLIC: "public",
PROTECTED: "protected",
PRIVATE: "private",
@ -102,7 +97,16 @@ const chat = {
USER: "user",
TOOL: "tool",
NODE: "node",
HEADER: "header",
TOPIC: "topic",
TITLE: "title",
MENUS: "menus",
TRANS: "trans",
AGENT: "agent",
CHECK: "check",
SHARE: "share",
GRANT: "grant",
}
const team = {
TASK: "task",
@ -166,7 +170,7 @@ var Volcanos = shy("火山架", {volcano: "/frame.js", args: {}, pack: {}, libs:
}
}
var proto = {_name: name, _load: function(name, cb) { // 加载缓存
var proto = {__proto__: meta, _name: name, _load: function(name, cb) { // 加载缓存
var cache = meta.cache[name] || []; for (list.reverse(); list.length > 0; list) {
var sub = list.pop(); sub != can && cache.push(sub)
}; meta.cache[name] = cache