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}) }) 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.const(panel.onaction._const||[]), panel._trans = panel.onaction._trans
panel.onaction._init(panel, item, item.list, next, panel._target) panel.onaction._init(panel, item, item.list, next, panel._target)
can.onmotion.float.auto(can, panel._output, "carte", "input")
}, target) }, target)
}, function() { can.onlayout.topic(can) }, function() { can.onlayout.topic(can)
can.misc.Log(can.user.title(), cli.RUN, 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) value == undefined? (value = item.value): (item.value = value)
}); return value }); return value
}, },
Update: function() { Update: function(event, cmds, cb, silent) {
sub.onappend._output(sub, sub.Conf(), {}, sub.Pack()) sub.onappend._output(sub, sub.Conf(), event||{}, cmds||sub.Input(), cb, silent)
}, },
Action: function(key, value) { Action: function(key, value) {
if (typeof key == "object") { return sub.core.Item(key, sub.Action), key } 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) can.base.isFunc(cb) && cb(sub)
}, target) }, 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) { cmds = cmds && cmds.length > 0? cmds: sub.page.Select(sub, option, "textarea.args,input.args,select.args", function(item) {
return item.name && item.value || "" return item.name && item.value || ""
}); for (var i = cmds.length-1; i >= 0; i--) { }); 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 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._inputs[item.name] = input
can.core.Item(input.onaction, function(key, value) { 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"}: can.core.List(list, function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: "space"}:
typeof item == "string"? /*按键*/ {type: html.BUTTON, value: item, onclick: function(event) { typeof item == "string"? /*按键*/ {type: html.BUTTON, value: item, onclick: function(event) {
var cb = meta[item]||meta["_engine"] 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) { }}: item.length > 0? /*列表*/ {type: "select", name: item[0], values: item.slice(1), onchange: function(event) {
var which = item[event.target.selectedIndex+1] 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) { 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) { can.user.input(event, can, input, function(ev, button, data, list, args) {
var msg = can.request(event, {_handle: "true"}, can.Option()) var msg = can.request(event, {_handle: "true"}, can.Option())
can.onappend._output(can, meta, event, cmds.slice(0, 2).concat(args), function(msg) { can.Update(event, cmds.slice(0, 2).concat(args), function(msg) {
can.onappend._output(can, meta, {}, can.Pack(), cb) can.Update({}, can.Input(), cb)
}, true) }, true)
}) })
return 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 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 }, can._outputs.push(table), table._msg = msg
table._display = display 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 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.value == "auto" && (item.value = "", item.action = "auto")
item.action == "auto" && (input.dataset.action = "auto") item.action == "auto" && (input.dataset.action = "auto")
title && (input.title = title) title && (input.title = title)
@ -457,21 +458,44 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
float: function(can, msg, cb) { float: function(can, msg, cb) {
var ui = can.onappend.field(can, "story toast float", {}, document.body) 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.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.output, {style: {"max-width": width, "max-height": height-28}})
can.page.Modify(can, ui.first, {style: {top: top, left: left}}) 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) }, can.onappend._action(can, ["关闭", "刷新", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) {
"刷新": function(event) { can.page.Remove(can, ui.first), can.toast.click() }, 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) { can.onappend.table(can, msg, function(value, key, index, line, list) {
return {text: [value, "td"], onclick: function(event) { return {text: [value, "td"], onclick: function(event) {
can.base.isFunc(cb) && cb(value, key, index, line, list) can.base.isFunc(cb) && cb(value, key, index, line, list)
}} }}
}, ui.output) }, ui.output)
can.onappend.board(can, msg.Result(), ui.output)
return ui return ui
}, },
}, [], function(can) {}) }, [], function(can) {})
@ -655,7 +679,7 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
if (back.length > 120 || back.indexOf("\n") > -1) { if (back.length > 120 || back.indexOf("\n") > -1) {
return can.onmotion.modifys(can, target, cb) 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) { switch (event.key) {
case "Enter": case "Enter":
target.innerHTML = event.target.value target.innerHTML = event.target.value
@ -924,15 +948,13 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
return status return status
}, },
}) })
Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, target) { Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: function(can, target) {
var focus = []; can.onengine.listen(can, "keymap.focus", function(cb) { var focus = can.onkeypop._focus
cb? focus.push(cb): focus.pop() // 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) can.onkeypop._build(can)
target.onkeydown = function(event) { target.onkeydown = function(event) { if (focus.length > 0) { return focus[focus.length-1](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) {
if (event.target != target) { return }
can.page.Select(can, target, "fieldset.Action>div.output", function(item) {
target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], 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) _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++) { for (var pre = 0; pre < list.length; pre++) {
if ("0" <= list[pre] && list[pre] <= "9") { continue } break if ("0" <= list[pre] && list[pre] <= "9") { continue } break
}; var count = parseInt(list.slice(0, pre).join(""))||1 }; 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 = [] function repeat(cb, count) { list = []
for (var i = 1; i <= count; i++) { if (cb(event, can, target, count)) { break } } for (var i = 1; i <= count; i++) { if (cb(event, can, target, count)) { break } }
event.stopPropagation(), event.preventDefault() event.stopPropagation(), event.preventDefault()
// can.Status("按键", list.join(""))
} }
var map = can.onkeypop._mode[mode] 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.添加应用"]) }, s: function(event, can, target) { can.search(event, ["River.ondetail.添加应用"]) },
t: 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) { " ": function(event, can, target) {
can.page.Select(can, document.body, "fieldset.panel.Header div.search input", function(target) { can.page.Select(can, document.body, "fieldset.panel.Header div.search input", function(target) {
target.focus() target.focus()
@ -994,6 +1019,12 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
}, },
enter: function(event, can, target) { can.misc.Log("enter") }, enter: function(event, can, target) { can.misc.Log("enter") },
escape: function(event, can, target) { 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.search(event, ["Search.onaction.hide"])
can.misc.Log("enter") can.misc.Log("enter")
}, },
@ -1010,7 +1041,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
var his = target._history || [] var his = target._history || []
his.push(target.value) his.push(target.value)
// can.misc.Log("input", target, his)
target.setSelectionRange(0, -1) target.setSelectionRange(0, -1)
target._current = his.length target._current = his.length
target._history = his 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: ""}) // 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: ""}): push(str.slice(begin)))
return res return res
}), }),
CallFunc: shy("调用器", function(func, args, mod) { args = args || {} CallFunc: shy("调用器", function(func, args, mod) { args = args || {}
@ -89,7 +88,7 @@ Volcanos("core", {help: "数据结构",
// 解析参数 // 解析参数
var list = [], echo = false, cb = args["cb"] 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 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 } if (item == "cb") { echo = true }
list.push(arg) 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(" "): [] has: function(can, obj, key) { var list = obj.className? obj.className.split(" "): []
return list.indexOf(key) > -1 return list.indexOf(key) > -1
}, },
@ -15,7 +15,7 @@ Volcanos("page", {help: "网页模块", ClassList: {
condition? this.add(can, obj, key): this.del(can, obj, key) condition? this.add(can, obj, key): this.del(can, obj, key)
}, },
neg: function(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 [] } Select: shy("选择节点", function(can, target, key, cb, interval, cbs) { if (key == ".") { return [] }

View File

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

View File

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

View File

@ -25,7 +25,19 @@ fieldset.Action>div.action div.item.select {
background-color:#2e515f; 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 { fieldset.Action div.output.tabs {
margin-top:28px; margin-top:28px;

View File

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

View File

@ -6,6 +6,9 @@ fieldset.Footer div.toast {
position:static; position:static;
float:left; float:left;
} }
fieldset.Footer>div.output {
height:32px; overflow:hidden;
}
fieldset.Footer>div.output>div { fieldset.Footer>div.output>div {
height:22px; padding:5px; height:22px; padding:5px;
cursor:pointer; cursor:pointer;
@ -25,3 +28,10 @@ fieldset.Footer>div.output div.state {
float:right; 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.onmotion.clear(can)
can.onimport._title(can, msg, target) can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target) can.onimport._state(can, msg, target)
can.onimport._cli(can, msg, target)
can.onimport._toast(can, msg, target) can.onimport._toast(can, msg, target)
can.onmotion.float.auto(can, can._output, "carte", "input")
can.base.isFunc(cb) && cb(msg) 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.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" _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: [ 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]}, {text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]},
], onclick: function(event) { ], 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) { _toast: function(can, msg, target) {
can.toast = can.page.Append(can, target, [{view: "toast", onclick: function(event) { 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 can.show = can.show? (can.page.Remove(can, can.show), null): can.onappend.float(can, can._toast).first
}}]).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() 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(" ")) 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) { onlogin: function(can, msg) {
can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) }) 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: [], Volcanos("onexport", {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight }, height: function(can) { return can._target.offsetHeight },

View File

@ -1,5 +1,5 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { 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.BACKGROUND, msg.Option(aaa.BACKGROUND))
can.Conf(aaa.AVATAR, msg.Option(aaa.AVATAR)) 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._state(can, msg, target)
can.onimport._search(can, msg, target) can.onimport._search(can, msg, target)
can.onimport._background(can, msg, target) can.onimport._background(can, msg, target)
can.onimport._menu(can, msg, target) can.onimport._menus(can, msg, target)
can.onmotion.float.auto(can, can._output, "carte", "input")
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg)
}, },
_agent: function(can, msg, target) { _agent: function(can, msg, target) {
@ -35,7 +33,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.user.Search(can, chat.GRANT, "") 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.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.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) { 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" _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) { if (item == aaa.AVATAR) {
can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)}], onmouseenter: function(event) { 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)]) 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.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]) can.core.CallFunc([can.onaction, item], [event, can, item])
}, _init: function(target) { }, _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) // can.onmotion.autosize(can, ui.input, 240, 120)
}, },
_background: function(can, msg) { _background: function(can, msg) {
if (can.user.isExtension) { return }
if (can.user.isLocalFile) { return } if (can.user.isLocalFile) { return }
if (can.user.isExtension) { return }
can.onlayout.background(can, msg.Option(aaa.BACKGROUND), document.body) can.onlayout.background(can, msg.Option(aaa.BACKGROUND), document.body)
}, },
_menu: function(can, msg, target) { _menus: function(can, msg, target) {
can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, cli.POD)? [chat.HEADER, chat.RIVER]: var menus = can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), [chat.HEADER, ["setting", "black", "white", "print"]])
[chat.HEADER, ["setting", "black", "white", "print", "pack"]], function(event, item) { 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], [event, can, 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) { _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) { Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, list, cb, target) {
can.base.isFunc(cb) && cb() can.base.isFunc(cb) && cb()
}, },
_const: [
"title",
],
_trans: { _trans: {
"river": "菜单", "river": "菜单",
"search": "搜索", "search": "搜索",
@ -163,24 +160,20 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
"black": "黑色主题", "black": "黑色主题",
"white": "白色主题", "white": "白色主题",
"print": "打印主题", "print": "打印主题",
"clear": "清除背景",
"pack": "打包页面",
"shareuser": "共享用户", "shareuser": "共享用户",
"usernick": "修改昵称", "clear": "清除背景",
"logout": "退出登录",
}, },
onmain: function(can, msg) { onmain: function(can, msg) {
function init() { can.run({}, [], function(msg) { function init() { can.run({}, [], function(msg) {
can.onimport._init(can, msg, [], function(msg) { can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {}))
can.onengine.signal(can, "onlogin", msg) can.onimport._init(can, msg, [], function(msg) { can.onengine.signal(can, "onlogin", msg) }, can._output)
}, can._output)
can.search({}, ["River.onmotion.toggle"]) can.search({}, ["River.onmotion.toggle"])
}) }; can.search({}, ["River.onmotion.hidden"]) }) }; 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(): can.Conf(aaa.USERNAME, msg.Option(ice.MSG_USERNAME))? init():
msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, 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) { 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) var value = can.user.Search(can, key); value && (args[key] = value)
}) })
can.user.jumps(can.user.MergeURL(can, args, true)) 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("River", "height", -1)
can.set("Action", "height", -1) can.set("Action", "height", -1)
}, },
pack: function(event, can) { webpack: function(event, can) {
can.user.input(event, can, [ can.user.input(event, can, [
{name: "name", value: can.user.title()}, {name: "name", value: can.user.title()},
], function(ev, button, meta, list) { ], 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) (index == 0 || item.hash == can._main_river) && (select = target)
}) })
})), select && select.click() })), select && select.click()
can.onmotion.float.auto(can, target, "carte", "input")
}, },
_main: function(can, msg) { _main: function(can, msg) {
can._main_river = "project", can._main_storm = "studio" 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 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) { _menu: function(can, msg) {
can.search({}, ["Header.onimport.menu", chat.RIVER, 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.user.isMobile && ["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "工作任务"],
["共享", "共享群组", "共享应用", "共享工具", "共享主机"],
], function(event, item) {
can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf(chat.RIVER), can.Conf(chat.STORM)]) 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) can.onaction.storm(event, can, meta.hash)
}, onmouseenter: function(event) { }, onmouseenter: function(event) {
if (can.user.isMobile) { return } !can.user.isMobile && can.onaction.carte(event, can, can.ondetail.list, function(event, button, module) {
can.onaction.carte(event, can, can.ondetail.list, function(event, button, module) {
module[button](event, can, button, meta.hash) module[button](event, can, button, meta.hash)
}) })
}, _init: function(target) { cb(target) }, _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) can.user.title(can._main_title || meta.name)
}, onmouseenter: function(event) { }, onmouseenter: function(event) {
if (can.user.isMobile) { return } !can.user.isMobile && can.onaction.carte(event, can, can.ondetail.sublist, function(event, button, module) {
can.onaction.carte(event, can, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(event, button, module) {
module[button](event, can, button, river, meta.hash) module[button](event, can, button, river, meta.hash)
}) })
}, _init: function(target) { }, _init: function(target) {
@ -139,6 +131,12 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
}, },
}) })
Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户", "添加应用", "添加设备", "重命名群组", "删除群组"], Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户", "添加应用", "添加设备", "重命名群组", "删除群组"],
sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"],
menus: [chat.RIVER,
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"],
["共享", "共享群组", "共享应用", "共享工具", "共享主机"],
],
"创建群组": function(event, can) { can.onaction.create(event, can) }, "创建群组": function(event, can) { can.onaction.create(event, can) },
"共享群组": function(event, can, button, river) { "共享群组": 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) { "添加应用": function(event, can, button, river) {
can.user.trans(can, {"public": "公开应用", "protected": "群组应用", "private": "个人应用"}) can.user.trans(can, {"public": "公开应用", "protected": "群组应用", "private": "个人应用"})
can.user.input(event, can, [ 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) { "重命名群组": function(event, can, button, river) {
can.user.input(event, can, [kit.MDB_NAME], function(event, button, meta, list) { can.user.input(event, can, [kit.MDB_NAME], function(event, button, meta, list) {
var msg = can.request(event, {hash: river}) var msg = can.request(event, {hash: river})
@ -257,7 +255,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
"共享主机": function(event, can, button, river, storm) { "共享主机": function(event, can, button, river, storm) {
can.run(event, [ctx.ACTION, aaa.INVITE], function(msg) { can.run(event, [ctx.ACTION, aaa.INVITE], function(msg) {
can.user.toast(can, { can.user.toast(can, {
title: "共享主机", duration: -1, width: -100, title: "共享主机", duration: -1, width: -300,
content: msg.Result(), action: [cli.CLOSE], content: msg.Result(), action: [cli.CLOSE],
}) })
}) })
@ -281,8 +279,8 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
{name: "template", value: "@key"}, {name: "template", value: "@key"},
], function(event, button, data, list, args) { ], function(event, button, data, list, args) {
can.run(event, [ctx.ACTION, cli.START].concat(args), function(msg) { 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))})) 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, can.user.MergeURL(can, {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] _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")}) 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.onengine.signal(can, "onsearch", res)
can.run(res._event, cmds, function(res) { can.run(res._event, cmds, function(res) {
can.list = res.Table() can.list = res.Table()

View File

@ -10,7 +10,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
}, },
"执行": function(event, can) { "执行": 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) var toast = can.user.toast(can, "执行中...", title, -1)
can.run(event, [], function() { toast.close(), can.user.toast(can, "执行成功...", title) }) 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) } if (can.Conf("type") == "text") { event.target.setSelectionRange(0, -1) }
}, },
onclick: function(event, can) { 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 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) 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)}) 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.run(event, [ctx.ACTION, "save", can.parse, can.Option("file"), can.Option("path")], function(msg) {
can.user.toast(can, "保存成功") can.user.toast(can, "保存成功")

View File

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

View File

@ -86,15 +86,10 @@ const wiki = {
SHELL: "shell", SHELL: "shell",
} }
const chat = { const chat = {
TITLE: "title",
RIVER: "river", RIVER: "river",
STORM: "storm", STORM: "storm",
FIELD: "field", FIELD: "field",
AGENT: "agent",
SHARE: "share",
GRANT: "grant",
PUBLIC: "public", PUBLIC: "public",
PROTECTED: "protected", PROTECTED: "protected",
PRIVATE: "private", PRIVATE: "private",
@ -102,7 +97,16 @@ const chat = {
USER: "user", USER: "user",
TOOL: "tool", TOOL: "tool",
NODE: "node", NODE: "node",
HEADER: "header", HEADER: "header",
TOPIC: "topic",
TITLE: "title",
MENUS: "menus",
TRANS: "trans",
AGENT: "agent",
CHECK: "check",
SHARE: "share",
GRANT: "grant",
} }
const team = { const team = {
TASK: "task", 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 cache = meta.cache[name] || []; for (list.reverse(); list.length > 0; list) {
var sub = list.pop(); sub != can && cache.push(sub) var sub = list.pop(); sub != can && cache.push(sub)
}; meta.cache[name] = cache }; meta.cache[name] = cache