1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 01:04:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-09-29 10:34:25 +08:00
parent 877e70e952
commit 44d0c00b7f
22 changed files with 452 additions and 725 deletions

View File

@ -672,6 +672,14 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) {
}) })
}, },
tableFilter: function(can, target, value) {
can.page.Select(can, target, html.TR, function(tr, index) { if (index == 0) { return }
can.page.ClassList.add(can, tr, html.HIDDEN)
can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(value) > -1) {
can.page.ClassList.del(can, tr, html.HIDDEN)
} })
})
},
hidden: function(can, target, show) { hidden: function(can, target, show) {
can.page.styleDisplay(can, target||can._target, show? "": html.NONE) can.page.styleDisplay(can, target||can._target, show? "": html.NONE)
return show return show

View File

@ -95,13 +95,13 @@ Volcanos("core", {help: "数据结构",
// 查找调用 // 查找调用
func = typeof func == lang.FUNCTION? func: typeof func == lang.STRING? this.Value(mod||can, func): func = typeof func == lang.FUNCTION? func: typeof func == lang.STRING? this.Value(mod||can, func):
typeof func == lang.OBJECT && func.length > 0? this.Value(func[0], this.Keys(func.slice(1))): null typeof func == lang.OBJECT && func.length > 0? this.Value(func[0], this.Keys(func.slice(1))): null
if (typeof func != lang.FUNCTION) { return } if (typeof func != lang.FUNCTION) { if (typeof args["cb"] == lang.FUNCTION) { args["cb"]() } return }
// 解析参数 // 解析参数
var list = [], echo = false, cb = args["cb"] var list = [], echo = false, cb = args["cb"]
this.List(func.toString().split(")")[0].split("(")[1].split(ice.FS), function(item, index) { item = item.trim(); if (item == "") { return } this.List(func.toString().split(")")[0].split("(")[1].split(ice.FS), 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) || var arg = args[item] || msg&&msg.Option&&msg.Option(item) || can&&can.Conf&&can.Conf(item) ||
event&&!(event instanceof Event)&&event[item] || args[index] || cmds[index] || args.res|| null event&&!(event instanceof Event)&&event[item] || args[index] || cmds[index] || args.res || null
if (item == "cb") { echo = true } if (item == "cb") { echo = true }
list.push(arg) list.push(arg)
}) })

View File

@ -11,7 +11,7 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
DisplayStory: function(file) { msg.Option(ice.MSG_DISPLAY, "/plugin/story/"+file) }, DisplayStory: function(file) { msg.Option(ice.MSG_DISPLAY, "/plugin/story/"+file) },
OptionStatus: function() { return msg.Option(ice.MSG_STATUS) }, OptionStatus: function() { return msg.Option(ice.MSG_STATUS) },
OptionProcess: function() { return msg.Option(ice.MSG_PROCESS) }, OptionProcess: function() { return msg.Option(ice.MSG_PROCESS) },
OptionOrSearch: function(key) { return can.misc.Search(can, key)||msg.Option(key) }, SearchOrOption: function(key) { return can.misc.Search(can, key)||msg.Option(key) },
Option: function(key, val) { Option: function(key, val) {
if (key == undefined) { return msg && msg.option || [] } if (key == undefined) { return msg && msg.option || [] }
if (can.base.isObject(key)) { can.core.Item(key, msg.Option) } if (can.base.isObject(key)) { can.core.Item(key, msg.Option) }
@ -75,11 +75,12 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
}, },
Push: function(key, value, detail) { Push: function(key, value, detail) {
if (can.base.isObject(key)) { if (can.base.isObject(key)) {
value = value||can.core.Item(key), can.core.List(value, function(item) { can.core.List(value||can.base.Obj(msg.Option(ice.MSG_FIELDS))||can.core.Item(key), function(item) {
detail? msg.Push(mdb.KEY, item).Push(mdb.VALUE, key[item]||""): msg.Push(item, key[item]||"") detail? msg.Push(mdb.KEY, item).Push(mdb.VALUE, key[item]||""): msg.Push(item, key[item]||"")
}) })
return msg return msg
} }
var i = msg.option && msg.option.indexOf(key); if (i > -1) { msg.option[i] = "", msg[key] = [] }
msg.append = can.base.AddUniq(msg.append, key), msg[key] = msg[key] || [] msg.append = can.base.AddUniq(msg.append, key), msg[key] = msg[key] || []
msg[key].push(can.base.isString(value)||can.base.isFunction(value)? value: JSON.stringify(value)) msg[key].push(can.base.isString(value)||can.base.isFunction(value)? value: JSON.stringify(value))

View File

@ -186,7 +186,6 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() }) can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() })
}) })
}, },
"飞书": function() { location.href = "/chat/lark/sso" },
}; if (auto) { return list["授权"]() } else if (method.length == 1) { list[method[0]](); return } }; if (auto) { return list["授权"]() } else if (method.length == 1) { list[method[0]](); return }
var ui = can.user.input({}, can, [{type: html.USERNAME}, {type: html.PASSWORD}], function(event, button, data) { return list[button](event, button, data) }, method) var ui = can.user.input({}, can, [{type: html.USERNAME}, {type: html.PASSWORD}], function(event, button, data) { return list[button](event, button, data) }, method)

View File

@ -1,5 +1,5 @@
body, fieldset, table, tr, th, td { padding:0; border:0; margin:0; } body, fieldset, table, tr, th, td { padding:0; border:0; margin:0; }
body { background-color:black; color:cyan; font-size:16px; } body { background-color:black; color:cyan; font-size:16px; overflow:hidden; }
legend { background-color:cadetblue; color:white; padding:0 20px; } legend { background-color:cadetblue; color:white; padding:0 20px; }
select { background-color:black; color:cyan; padding:0 10px; border:0; } select { background-color:black; color:cyan; padding:0 10px; border:0; }
textarea { background-color:cyan; width:400px; padding:5px; border:0; } textarea { background-color:cyan; width:400px; padding:5px; border:0; }
@ -25,11 +25,12 @@ input[type=button][name=remove] { background-color:red; }
table.layout { border-spacing:0; } table.layout { border-spacing:0; }
table.layout td { vertical-align:top; } table.layout td { vertical-align:top; }
table.layout td.content div.toggle { background-color:#4682b46b; color:white; font-size:24px; position:absolute; z-index:10; } /* table.layout td.content div.toggle { background-color:#4682b46b; color:white; font-size:24px; position:absolute; z-index:10; } */
table.layout td.content div.toggle { background-color:#4682b46b; color:white; font-size:24px; position:absolute; }
table.layout td.content div.toggle>div { display:table-cell; } table.layout td.content div.toggle>div { display:table-cell; }
table.layout td.content div.toggle.project { padding-top: 50px; height:100px; width:15px; top:20%; left:0px; border-top-right-radius:10px; border-bottom-right-radius:10px; } table.layout td.content div.toggle.project { padding-top: 50px; height:100px; width:15px; top:20%; left:0px; border-top-right-radius:10px; border-bottom-right-radius:10px; }
table.layout td.content div.toggle.profile { padding-top: 50px; height:100px; width:15px; top:20%; right:0px; border-top-left-radius:10px; border-bottom-left-radius:10px; } table.layout td.content div.toggle.profile { padding-top: 50px; height:100px; width:15px; top:20%; right:0px; border-top-left-radius:10px; border-bottom-left-radius:10px; }
table.layout td.content div.toggle.display { margin-top:-15px; height:15px; width:100px; position:sticky; left:40%; border-top-left-radius:10px; border-top-right-radius:10px; } table.layout td.content div.toggle.display { margin-top:-15px; height:15px; width:100px; position:sticky; left:40%; border-top-left-radius:10px; border-top-right-radius:10px; overflow:hidden; }
table.layout td.content div.toggle.display>div { text-align:center; width:100px; transform: rotate(-90deg) translate(5px, 0px); } table.layout td.content div.toggle.display>div { text-align:center; width:100px; transform: rotate(-90deg) translate(5px, 0px); }
table.content thead { position:sticky; top:2px; } table.content thead { position:sticky; top:2px; }
table.content th { background-color:steelblue; padding:2px 6px; } table.content th { background-color:steelblue; padding:2px 6px; }
@ -59,11 +60,9 @@ fieldset.story>legend { margin:10px 0; }
fieldset.plug>legend { float:left; margin-right:5px; } fieldset.plug>legend { float:left; margin-right:5px; }
fieldset.float>legend { float:left; margin-right:5px; } fieldset.float>legend { float:left; margin-right:5px; }
body.white fieldset.float>div.status { color:white; } body.white fieldset.float>div.status { color:white; }
fieldset.story.float>div.status { display:none; }
fieldset.plugin.float>div.status { display:none; } fieldset.plugin.float>div.status { display:none; }
fieldset.full>legend { float:left; margin:0; margin-right:5px; } fieldset.full>legend { float:left; margin:0; margin-right:5px; }
fieldset.plugin>form.option input[type=button][name=close]{ display:none; } fieldset>form.option input[type=button][name=close]{ display:none; }
fieldset.word>div.output>fieldset.story>form.option input[type=button][name=close]{ display:none; }
fieldset.plugin div.status { border-top:1px solid darkcyan; } fieldset.plugin div.status { border-top:1px solid darkcyan; }
fieldset.story div.status { border-top:1px solid darkcyan; } fieldset.story div.status { border-top:1px solid darkcyan; }
fieldset.output>form.option { display:none; } fieldset.output>form.option { display:none; }
@ -71,8 +70,12 @@ fieldset.output>div.action { display:none; }
fieldset.output div.status { display:none; } fieldset.output div.status { display:none; }
fieldset.output div.toggle { display:none; } fieldset.output div.toggle { display:none; }
fieldset.float>form.option input[type=button][name=close]{ display:block; }
fieldset.full>form.option input[type=button][name=close]{ display:block; }
fieldset.plug>form.option input[type=button][name=close]{ display:block; }
fieldset.story>legend { float:left; margin:0px; margin-right:5px; } fieldset.story>legend { float:left; margin:0px; margin-right:5px; }
fieldset.story { margin-top:10px; } fieldset.plugin.word fieldset.story { margin-top:10px; }
fieldset.story.full { margin-top:0px; } fieldset.story.full { margin-top:0px; }
fieldset.input.key { overflow:auto; } fieldset.input.key { overflow:auto; }
@ -335,8 +338,8 @@ body.white div.project.auto { background-color:whitesmoke; }
body.white div.profile.auto { background-color:whitesmoke; } body.white div.profile.auto { background-color:whitesmoke; }
body.black div.project.auto { background-color:#1d3349; } body.black div.project.auto { background-color:#1d3349; }
body.black div.profile.auto { background-color:#1d3349; } body.black div.profile.auto { background-color:#1d3349; }
div.project.auto { position:absolute; left:0; z-index:10; } /* div.project.auto { position:absolute; left:0; z-index:10; } */
div.profile.auto { position:absolute; right:0; z-index:10; } /* div.profile.auto { position:absolute; right:0; z-index:10; } */
fieldset.plugin.location>div.action input[type=text] { fieldset.plugin.location>div.action input[type=text] {
width:40px; width:40px;
} }

View File

@ -1,6 +1,6 @@
fieldset.Action { background-color:rgba(114, 153, 162, 0.54); min-width:160px; } fieldset.Action { background-color:rgba(114, 153, 162, 0.54); min-width:160px; }
fieldset.Action>div.action { background-color:#4682b46b; width:inherit; display:none; } fieldset.Action>div.action { background-color:#4682b46b; width:inherit; display:none; }
fieldset.Action>div.action div { font-size:1.1rem; padding:5px; height:21px; float:left; cursor:pointer; } fieldset.Action>div.action div { font-size:1.1rem; padding:5px 20px; height:21px; float:left; cursor:pointer; }
fieldset.Action>div.action div.select { background:#6495ed63; } fieldset.Action>div.action div.select { background:#6495ed63; }
fieldset.Action>div.action div:hover { background:#6495ed63; } fieldset.Action>div.action div:hover { background:#6495ed63; }
fieldset.Action.tabs>div.action { display:block; } fieldset.Action.tabs>div.action { display:block; }
@ -11,11 +11,19 @@ fieldset.Action.tabs>div.output fieldset.plugin.select { display:block; }
fieldset.Action.grid>div.output fieldset.plugin { overflow:auto; float:left; } fieldset.Action.grid>div.output fieldset.plugin { overflow:auto; float:left; }
fieldset.Action.grid>div.output fieldset.plugin>div.output { overflow:auto; } fieldset.Action.grid>div.output fieldset.plugin>div.output { overflow:auto; }
fieldset.Header action>div.tabs { padding:0; margin-left:20px; display:contents; }
fieldset.Header action>div.tabs:hover { background:none; }
fieldset.Header div.tabs div.tabs { padding:5px 10px; }
fieldset.Header div.tabs div.tabs:hover { background:#6495ed63; }
fieldset.Action>div.action div.tabview { font-size:1.1rem; padding:5px; height:21px; } fieldset.Action>div.action div.tabview { font-size:1.1rem; padding:5px; height:21px; }
fieldset.Action>div.action div.tabview.select { background:#6495ed63; } fieldset.Action>div.action div.tabview.select { background:#6495ed63; }
fieldset.Action>div.action div.tabview:hover { background:#6495ed63; } fieldset.Action>div.action div.tabview:hover { background:#6495ed63; }
fieldset.Action.tabview>div.output { overflow:hidden; }
fieldset.Action.tabs>div.output { overflow:hidden; }
fieldset.iframe>div.output { overflow:hidden; }
fieldset.Action.tabview>div.output>fieldset>legend { display:none; } fieldset.Action.tabview>div.output>fieldset>legend { display:none; }
fieldset.Action.tabview>div.output fieldset.plugin { display:none; overflow:auto; padding:0; margin:10px 0; } fieldset.Action.tabview>div.output fieldset.plugin { display:none; overflow:auto; padding:0; margin:0; }
fieldset.Action.tabview>div.output fieldset.plugin.select { display:block; } fieldset.Action.tabview>div.output fieldset.plugin.select { display:block; }
fieldset.Action.tabview>div.output fieldset.plugin>form.option { display:none; } fieldset.Action.tabview>div.output fieldset.plugin>form.option { display:none; }
fieldset.Action.tabview>div.output fieldset.plugin>div.action { display:none; } fieldset.Action.tabview>div.output fieldset.plugin>div.action { display:none; }

View File

@ -1,17 +1,11 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
can.onimport._menu(can, msg), can.onkeymap._init(can)
can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout, true)
var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM) var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM)
can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) {
item.inputs = can.base.Obj(item.inputs||item.list),
item.feature = can.base.Obj(item.feature||item.meta) item.feature = can.base.Obj(item.feature||item.meta)
item.inputs = can.base.Obj(item.inputs||item.list)
can.onappend.plugin(can, item, function(sub, meta, skip) { can.onappend.plugin(can, item, function(sub, meta, skip) {
can.page.style(can, sub._output, html.MAX_WIDTH, meta.width-(can.user.isWindows? 20: 0))
can.onimport._plugin(can, river, storm, sub, meta), skip || next() can.onimport._plugin(can, river, storm, sub, meta), skip || next()
}) })
}, function() {
// can.onimport._menu(can, msg), can.onkeymap._init(can)
}) })
}, },
_plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta _plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta
@ -21,45 +15,35 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
return can.run(sub.request(event), can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb) return can.run(sub.request(event), can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb)
}, can._plugins = can.misc.concat(can, can._plugins, [sub]) }, can._plugins = can.misc.concat(can, can._plugins, [sub])
sub._tabs = can.page.Append(can, can._action, [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { var tabs = [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) {
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target) can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target)
can.onmotion.select(can, can._action, html.DIV_TABS, event.target) can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs)
}, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}]).first can.onmotion.select(can, can._action, html.DIV_TABS, sub._tabs)
sub._header_tabs = can.page.Append(can, can._header_tabs, [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { }, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}]
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target)
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, event.target) sub._header_tabs = can.page.Append(can, can._header_tabs, tabs).first
}, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}]).first sub._tabs = can.page.Append(can, can._action, tabs).first
},
_menu: function(can, msg) { if (can.user.mod.isPod || can.user.isMobile) { return }
can.setHeaderMenu(can.base.Obj(msg.Option(chat.MENUS), can.Conf(chat.MENUS)||can.onaction._menus), function(event, button, list) {
can.core.CallFunc([can.onaction, list[0]], [can, button])
})
can.page.Select(can, can._root.Header._output, "action", function(target) {
can._header_tabs = can.page.Append(can, target, [{view: "tabs", style: {padding: 0, "padding-left": "40px"}}]).first
})
}, },
_share: function(can, share) { share && can.run({}, [web.SHARE, share], function(msg) { _share: function(can, share) { share && can.run({}, [web.SHARE, share], function(msg) {
msg.Length() == 1 && can.onengine.signal(can, chat.ONACTION_CMD) msg.Length() == 1? can.onengine.signal(can, chat.ONACTION_CMD): can.onlayout._init(can)
can.setHeader(chat.TOPIC, msg.OptionOrSearch(chat.TOPIC)) can.setHeader(chat.TOPIC, msg.SearchOrOption(chat.TOPIC))
can.user.title(msg.OptionOrSearch(chat.TITLE)) can.user.title(msg.SearchOrOption(chat.TITLE))
can.Conf(chat.RIVER, web.SHARE, chat.STORM, share) can.Conf(chat.RIVER, web.SHARE, chat.STORM, share)
msg.Length() > 0 && can.onimport._init(can, msg) msg.Length() > 0 && can.onimport._init(can, msg)
}) }, }) },
_cmd: function(can, item, next) { _cmd: function(can, item, next) { can.onengine.signal(can, chat.ONACTION_CMD)
can.onengine.signal(can, chat.ONACTION_CMD) can.onappend.plugin(can, can.base.Copy(item, {mode: "cmd", opts: can.misc.Search(can)}), function(sub, meta, skip) {
can.onappend.plugin(can, can.base.Copy(item, {opts: can.misc.Search(can), mode: "cmd"}), function(sub, meta, skip) { sub.run = function(event, cmds, cb) { can.runActionCommand(event, sub._index, cmds, cb) }
sub.run = function(event, cmds, cb) {
can.request(event, {height: sub.ConfHeight(), width: can.ConfWidth()})
can.runActionCommand(event, sub._index, cmds, cb)
}
sub.ConfHeight(can.ConfHeight()-can.Conf(html.MARGIN_Y))
can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth())
can.user.title(meta.name), skip || next() can.user.title(meta.name), skip || next()
}) })
}, },
height: function(can, height) { _menu: function(can, msg) { if (can.user.mod.isPod || can.user.isMobile) { return }
can.page.styleHeight(can._target, height) can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) {
can.core.CallFunc([can.onaction, list[0]], [can, button])
})
can.page.Select(can, can._root.Header._output, "action", function(target) {
can._header_tabs = can.page.Append(can, target, ["tabs"]).first
})
}, },
}) })
Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, page, msg, can, cmds, cb) { Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, page, msg, can, cmds, cb) {
@ -80,42 +64,24 @@ Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, page, ms
msg.Push(ctx.DISPLAY, value.display||"") msg.Push(ctx.DISPLAY, value.display||"")
msg.Push(ice.MSG_ACTION, value._action||"") msg.Push(ice.MSG_ACTION, value._action||"")
}), can.base.isFunc(cb) && cb(msg) }), can.base.isFunc(cb) && cb(msg)
} } return true
return true
}}) }})
Volcanos(chat.ONPLUGIN, {help: "注册插件", Volcanos(chat.ONPLUGIN, {help: "注册插件",
"parse": shy("解析", { "parse": shy("解析", {
"show": function(can, msg, cmds) { var name = cmds[1]||"can" "show": function(can, msg, cmds) { var name = cmds[1]||"can"; can.isCmdMode() && can.user.title(name)
can.isCmdMode() && can.user.title(name)
cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, ["/plugin/story/parse.js"], function(sub) { cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, ["/plugin/story/parse.js"], function(sub) {
sub.run = can.run, sub.Option = function() {}, can.isCmdMode() && sub.ConfHeight(window.innerHeight) sub.run = can.run, sub.Option = function() {}
can.isCmdMode() && sub.ConfHeight(window.innerHeight)
can.onengine.listen(can, "menu", function(msg) { console.log(msg) })
sub.onappend.parse(sub, sub.onappend._parse(sub, cmds[0], name, sub.ConfHeight()), can._output) sub.onappend.parse(sub, sub.onappend._parse(sub, cmds[0], name, sub.ConfHeight()), can._output)
can.onengine.listen(can, "menu", function(msg) {
delete(msg._event), delete(msg._can)
can.user.toast(can, JSON.stringify(msg))
})
}) })
}, },
}, ["text", "name", "show:button@auto", "clear:button"], function(can, msg, cmds, cb) { }, ["text", "name", "show:button@auto", "clear:button"]),
cmds && cmds[0] && can._root.Action.run({}, cmds, cb, true) "plugin": shy("插件", {}, ["text", "list", "back"]),
}),
"plugin": shy("插件", {}, ["list", "back"], function(can, msg, cmds) { "nfs.save": shy("保存文件", {
msg.Echo("hello world") "save": function(can, msg, cmds) { can.user.downloads(can, cmds[1], cmds[0]) }
}), }, ["file=hi.txt", "text:textarea='hello world'", "save:button"]),
"output": shy("插件", {}, ["some"], function(can, msg, cmds) {}),
"nfs.save": shy("保存文件", {}, ["file=hi.txt", "text:textarea='hello world'", "save:button"], function(can, msg, cmds, cb) {
can.misc.runAction(can, msg, cmds, cb, kit.Dict(
"save", function(cmds) { can.user.downloads(can, cmds[1], cmds[0]) }
))
}),
"pie": shy("比例图", {}, ["list", "back"], function(can, msg, cmds) {
msg.DisplayStory("pie.js")
msg.Push("value", 200)
msg.Push("value", 300)
msg.Push("value", 400)
}),
"can.code.inner._plugin": shy("插件", {}, [{type: "button", name: "list", action: "auto"}, "back"], function(can, msg, cmds) {}),
}) })
Volcanos(chat.ONKEYMAP, {help: "键盘交互", _focus: [], _init: function(can, target) { Volcanos(chat.ONKEYMAP, {help: "键盘交互", _focus: [], _init: function(can, target) {
can.onkeymap._build(can), can.onengine.listen(can, chat.ONKEYDOWN, function(msg, model) { can.onkeymap._build(can), can.onengine.listen(can, chat.ONKEYDOWN, function(msg, model) {
@ -134,31 +100,25 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互", _focus: [], _init: function(can,
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) { " ": function(event, can, target) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },
can.onengine.signal(can, chat.ONSEARCHFOCUS), can.onkeymap.prevent(event) ":": function(event, can, target) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
}, Enter: function(event, can, target) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event)) },
":": function(event, can, target) {
can.onengine.signal(can, chat.ONCOMMANDFOCUS), can.onkeymap.prevent(event)
},
Enter: function(event, can, target) {
can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: ""}))
},
Escape: function(event, can, target) { Escape: function(event, can, target) {
can.page.Select(can, can._root._target, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(item) { can.page.Select(can, can._root._target, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(target) {
can.page.Remove(can, item) can.page.Remove(can, target)
}) })
}, },
}, },
}, _engine: {}, }, _engine: {},
}) })
Volcanos(chat.ONACTION, {help: "交互操作", _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "操作数据", _init: function(can, cb, target) {
can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN)
can.Conf(html.MARGIN_X, 4*html.PLUGIN_MARGIN) can.Conf(html.MARGIN_X, 4*html.PLUGIN_MARGIN)
if (can.user.mod.isPod || can.user.isMobile) { if (can.user.mod.isPod || can.user.isMobile) {
var gt = "❯", lt = "❮"; function toggle(view) { return !can.setRiver("display") } var gt = "❯", lt = "❮"; function toggle(view) { return can.onmotion.toggle(can, can._root.River._target) }
can.page.Append(can, target, [{view: [[html.TOGGLE, chat.PROJECT]], list: [{text: [gt, html.DIV]}], onclick: function(event) { can.page.Append(can, target, [{view: [[html.TOGGLE, chat.PROJECT]], list: [{text: [gt, html.DIV]}], onclick: function(event) {
event.target.innerHTML = toggle()? gt: lt, can.onaction.refresh(can) event.target.innerHTML = toggle()? gt: lt, can.onaction.layout(can, can.Conf(chat.LAYOUT))
}}]) }}])
} }
@ -166,18 +126,18 @@ Volcanos(chat.ONACTION, {help: "交互操作", _init: function(can, cb, target)
can.base.isFunc(cb) && cb() can.base.isFunc(cb) && cb()
}, },
_menus: [ _menus: [
[chat.LAYOUT, "auto", "tabs", "tabview", "vertical", "horizon", "grid", "free", "flow", "page", "toimage"], [chat.LAYOUT, "auto", "tabs", "tabview", "horizon", "vertical", "grid", "flow", "free", "page", "toimage"],
[ice.HELP, "tutor", "manual", "service", "devops", "refer"], [ice.HELP, "tutor", "manual", "service", "devops", "refer"],
], ],
_trans: { _trans: {
"layout": "布局", "layout": "布局",
"auto": "默认布局", "auto": "默认布局",
"flow": "流动布局",
"vertical": "上下分屏",
"horizon": "左右分屏",
"tabview": "标签分屏",
"grid": "网格布局",
"tabs": "标签布局", "tabs": "标签布局",
"tabview": "标签分屏",
"horizon": "左右分屏",
"vertical": "上下分屏",
"grid": "网格布局",
"flow": "流动布局",
"free": "自由布局", "free": "自由布局",
"page": "网页布局", "page": "网页布局",
"toimage": "生成图片", "toimage": "生成图片",
@ -191,23 +151,12 @@ Volcanos(chat.ONACTION, {help: "交互操作", _init: function(can, cb, target)
}, },
onmain: function(can) { can.onimport._share(can, can.misc.Search(can, web.SHARE)) }, onmain: function(can) { can.onimport._share(can, can.misc.Search(can, web.SHARE)) },
onlogin: function(can) { if (!can.user.mod.isCmd && !can.Conf(chat.TOOL)) { return } onlogin: function(can) { if (!can.user.mod.isCmd && !can.Conf(chat.TOOL)) { return }
can._names = location.pathname can._names = location.pathname, can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
can.onimport._cmd(can, item, next) can.onimport._cmd(can, item, next)
}): can.runAction(can.request(), ctx.COMMAND, [], function(msg) { can.core.Next(msg.Table(), function(item, next) { }): can.runAction(can.request(), ctx.COMMAND, [], function(msg) { can.core.Next(msg.Table(), function(item, next) {
can.onimport._cmd(can, item, next) can.onimport._cmd(can, item, next)
}) }) }) })
}, },
onkeydown: function(can, msg) { var event = msg._event
if (event.ctrlKey && event.key >= "1" && event.key <= "9") {
can.onmotion.select(can, can._action, html.DIV_TABS, parseInt(event.key)-1), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, parseInt(event.key)-1)
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, parseInt(event.key)-1), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, parseInt(event.key)-1)
}
},
onsearch: function(can, msg, word) {
if (word[0] == mdb.PLUGIN || word[0] == mdb.FOREACH) { can.onexport.plugin(can, msg, word) }
},
onsize: function(can, msg, height, width) { can.Conf({height: height, width: width}) },
onstorm_select: function(can, msg, river, storm) { onstorm_select: function(can, msg, river, storm) {
if (can.onmotion.cache(can, function() { if (can.onmotion.cache(can, function() {
return can.core.Keys(can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm)) return can.core.Keys(can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm))
@ -215,58 +164,73 @@ Volcanos(chat.ONACTION, {help: "交互操作", _init: function(can, cb, target)
var conf = can.core.Value(can._root, can.core.Keys(chat.RIVER, river, chat.STORM, storm))||{} var conf = can.core.Value(can._root, can.core.Keys(chat.RIVER, river, chat.STORM, storm))||{}
return can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout||conf.layout, true) return can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout||conf.layout, true)
} }
can.run({}, [river, storm], function(msg) {
can.page.Append(can, can._action, [ if (msg.Length() == 0) { return can.onengine.signal(can, chat.ONACTION_NOTOOL, can.request({}, {river: river, storm: storm})) }
{text: [msg.Option("river_name")||river, html.DIV]}, can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout, true)
{text: [msg.Option("storm_name")||storm, html.DIV]} can.onimport._menu(can, msg), can.onkeymap._init(can)
]) return can.onimport._init(can, msg)
can.run({}, [river, storm], function(msg) { if (msg.Length() > 0) { return can.onimport._init(can, msg) }
can.onengine.signal(can, chat.ONACTION_NOTOOL, can.request({}, {river: river, storm: storm}))
}) })
}, },
onaction_cmd: function(can, msg) { onaction_cmd: function(can, msg) { can.Mode("cmd")
can.ConfHeight(can._root._height), can.ConfWidth(can._root._width) can.page.style(can, can._target, html.HEIGHT, can._root._height, html.WIDTH, can._root._width)
can.Conf(html.MARGIN_X, 0, html.MARGIN_Y, 2*html.ACTION_HEIGHT) can.ConfHeight(can._root._height-2*html.ACTION_HEIGHT), can.ConfWidth(can._root._width)
can.page.ClassList.add(can, can._root._target, "simple") can.page.ClassList.add(can, can._root._target, "simple")
can.page.ClassList.add(can, can._target, "cmd") can.page.ClassList.add(can, can._target, "cmd")
can.onlayout._init(can)
can.isCmdMode()
}, },
onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } },
refresh: function(can) { onkeydown: function(can, msg) { var event = msg._event
can._root._height = window.innerHeight, can._root._width = window.innerWidth if (event.ctrlKey && event.key >= "1" && event.key <= "9") {
can.onlayout._init(can) can.onmotion.select(can, can._action, html.DIV_TABS, parseInt(event.key)-1)
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, parseInt(event.key)-1)
var width = can.ConfWidth()-can.Conf(html.MARGIN_X) can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, parseInt(event.key)-1)
can.core.List(can._plugins, function(sub) { var table = can.core.Value(sub, chat._OUTPUT_CURRENT) }
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(width)-(can.user.isWindows? 20: 0))
table.ConfWidth(width)
table.onimport.layout? table.onimport.layout(table): can.onappend._output(sub, table._msg, sub._display)
})
}, },
onsize: function(can, msg, height, width) { can.Conf({height: height-can.Conf(html.MARGIN_Y), width: width-can.Conf(html.MARGIN_X)}) },
onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") },
layout: function(can, button, silent) { button = button||ice.AUTO layout: function(can, button, silent) { button = button||ice.AUTO
can.page.ClassList.del(can, can._target, can.Conf(chat.LAYOUT)); if (button == ice.AUTO) { button = "" } can.page.ClassList.del(can, can._target, can.Conf(chat.LAYOUT)); if (button == ice.AUTO) { button = "" }
can.page.ClassList.add(can, can._target, can.Conf(chat.LAYOUT, button)), can.onlayout._init(can) can.page.ClassList.add(can, can._target, can.Conf(chat.LAYOUT, button))
can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true), can.onlayout._init(can) can.isCmdMode() || (can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true))
can._header_tabs && can.onmotion.hidden(can, can._header_tabs) can._header_tabs && can.onmotion.hidden(can, can._header_tabs)
can.onlayout._init(can)
var cb = can.onlayout[button]; if (can.base.isFunc(cb)? cb(can, silent): (can.getActionSize(function(height, width) { var cb = can.onlayout[button]; if (can.base.isFunc(cb)? cb(can, silent): (can.getActionSize(function(height, width) {
can.ConfHeight(can.base.Min(200, height-3*html.ACTION_HEIGHT-4*html.PLUGIN_MARGIN-200)), can.ConfWidth(width-4*html.PLUGIN_MARGIN) can.ConfHeight(can.base.Min(200, height-can.Conf(html.MARGIN_Y)-200)), can.ConfWidth(width-can.Conf(html.MARGIN_X))
}), false)) { return } }), false)) { return }
can.core.Next(can._plugins, function(sub, next) { can.core.Next(can._plugins, function(sub, next) { can.onmotion.delay(can, function() {
sub.onaction._resize(sub, button != ice.AUTO, can.ConfHeight(), can.ConfWidth()) sub.onaction._resize(sub, button == "" || button == ice.AUTO, can.ConfHeight(), can.ConfWidth()), next()
can.onmotion.delay(can, next) }, 10) })
})
}, },
help: function(can, button) { can.user.open("/help/"+button+".shy") }, help: function(can, button) { can.user.open("/help/"+button+".shy") },
}) })
Volcanos(chat.ONLAYOUT, {help: "导出数据", Volcanos(chat.ONLAYOUT, {help: "界面布局",
tabs: function(can) {
can.getActionSize(function(height, width) {
can.ConfHeight(height-2*html.ACTION_HEIGHT-4*html.PLUGIN_MARGIN-1), can.ConfWidth(width-4*html.PLUGIN_MARGIN)
})
if (can.page.Select(can, can._output, "fieldset.plugin.select").length > 0) { return }
can.onmotion.select(can, can._action, html.DIV_TABS, 0), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0)
},
tabview: function(can) { can.onmotion.toggle(can, can._header_tabs, true)
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
can.getActionSize(function(height, width) { can.ConfHeight(height), can.ConfWidth(width) })
if (can.page.Select(can, can._output, "fieldset.plugin.select").length > 0) { return }
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, 0), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0)
},
horizon: function(can) {
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
can.getActionSize(function(height, width) { can.ConfHeight(height), can.ConfWidth(width/2) })
},
vertical: function(can) {
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
can.getActionSize(function(height, width) { can.ConfHeight(height/2), can.ConfWidth(width) })
},
_grid: function(can, m, n) { _grid: function(can, m, n) {
can.getActionSize(function(height, width) { can.getActionSize(function(height, width) {
var h = (height-(4*n+1)*html.PLUGIN_MARGIN)/n, w = (width-(4*m+1)*html.PLUGIN_MARGIN)/m var h = (height-(4*n+1)*html.PLUGIN_MARGIN)/n, w = (width-(4*m+1)*html.PLUGIN_MARGIN)/m
can.ConfHeight(h-2*html.ACTION_HEIGHT-3*html.PLUGIN_MARGIN), can.ConfWidth(w) can.ConfHeight(h-2*html.ACTION_HEIGHT-3*html.PLUGIN_MARGIN), can.ConfWidth(w)
can.core.List(can._plugins, function(sub) { sub.onaction._resize(sub, true, can.ConfHeight(), can.ConfWidth()) })
}) })
}, },
grid: function(can, silent) { grid: function(can, silent) {
@ -275,32 +239,6 @@ Volcanos(chat.ONLAYOUT, {help: "导出数据",
}, silent) }, silent)
return true return true
}, },
vertical: function(can) {
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
can.getActionSize(function(height, width) { can.ConfHeight(height/2), can.ConfWidth(width)
can.core.List(can._plugins, function(sub) { sub.onaction._resize(sub, true, can.ConfHeight(), can.ConfWidth()) })
})
},
horizon: function(can) {
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
can.getActionSize(function(height, width) { can.ConfHeight(height), can.ConfWidth(width/2)
can.core.List(can._plugins, function(sub) { sub.onaction._resize(sub, true, can.ConfHeight(), can.ConfWidth()) })
})
},
tabview: function(can) {
can.onmotion.toggle(can, can._header_tabs, true)
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
can.onmotion.delay(can, function() {
can.onmotion.select(can, can._action, html.DIV_TABS, 0), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0)
})
can.getActionSize(function(height, width) { can.ConfHeight(height-2*html.PLUGIN_MARGIN), can.ConfWidth(width) })
},
tabs: function(can) {
can.onmotion.select(can, can._action, html.DIV_TABS, 0), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0)
can.getActionSize(function(height, width) {
can.ConfHeight(height-3*html.ACTION_HEIGHT-4*html.PLUGIN_MARGIN), can.ConfWidth(width-4*html.PLUGIN_MARGIN)
})
},
free: function(can) { free: function(can) {
can.page.Select(can, can._target, [[html.DIV_OUTPUT, html.FIELDSET_PLUGIN]], function(item, index) { can.page.Select(can, can._target, [[html.DIV_OUTPUT, html.FIELDSET_PLUGIN]], function(item, index) {
can.onmotion.move(can, item, {left: 40*index, top: 40*index}) can.onmotion.move(can, item, {left: 40*index, top: 40*index})

View File

@ -1,5 +1,5 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, target) {
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg) 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._toast(can, msg, target) can.onimport._toast(can, msg, target)
@ -11,7 +11,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}) })
}, },
_state: function(can, msg, target) { _state: function(can, msg, target) {
can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), ["ncmd", "ntip"]), function(item) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), ["ncmd", "ntip"]), function(item) {
can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, can.Conf(item)], list: [ can.page.Append(can, target, [{view: [can.base.join([chat.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) { can.onexport[item](can) }}]) ], onclick: function(event) { can.onexport[item](can) }}])
@ -21,14 +21,16 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport["ntip"](can) }}]).first can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport["ntip"](can) }}]).first
}, },
_command: function(can, msg, target) { _command: function(can, msg, target) {
can.onappend.input(can, {type: html.TEXT, name: "cmd", onkeydown: function(event) { can.onappend.input(can, {type: html.TEXT, name: ice.CMD, onkeydown: function(event) {
can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return } can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return }
switch (event.target.value) { switch (event.target.value) {
case cli.CLOSE: can.cli && can.cli.close(); break case cli.CLOSE: can.cli && can.cli.close(); break
case cli.CLEAR: can.cli && can.cli.close(); break case cli.CLEAR: can.cli && can.cli.close(); break
default: default:
can.runAction(event, ice.RUN, can.core.Split(event.target.value, ice.SP), function(msg) { can.runAction(event, ice.RUN, can.core.Split(event.target.value, ice.SP), function(msg) { can.cli && can.cli.close()
can.cli && can.cli.close(), can.onexport.float(can, msg, function(value, key, index, line, list) {}, "cli", true) var ui = can.onexport.float(can, msg, "cli"); can.getActionSize(function(left, top, height, width) {
can.page.style(can, ui.first, html.LEFT, left, html.RIGHT, "", html.BOTTOM, can.onexport.height(can))
})
}) })
} }
}}, "", target, "title cmd") }}, "", target, "title cmd")
@ -36,8 +38,8 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
toast: function(can, msg, title, content, fileline, time) { can._tips = can._tips||can.request() toast: function(can, msg, title, content, fileline, time) { can._tips = can._tips||can.request()
can._tips.Push({time: time, fileline: fileline, title: title, content: content}) can._tips.Push({time: time, fileline: fileline, title: title, content: content})
can.onimport.count(can, "ntip")
can.page.Modify(can, can.toast, [time, title, content].join(ice.SP)) can.page.Modify(can, can.toast, [time, title, content].join(ice.SP))
can.onimport.count(can, "ntip")
}, },
count: function(can, name) { count: function(can, name) {
can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) {
@ -49,59 +51,43 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.onimport.count(can, "ncmd") can.onimport.count(can, "ncmd")
}, },
}) })
Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb) {
if (can.user.mod.isPod || can.user.isExtension) { can.onmotion.hidden(can, can._target) } if (can.user.mod.isPod || can.user.isExtension) { can.onmotion.hidden(can) }
can.base.isFunc(cb) && cb() can.base.isFunc(cb) && cb()
}, },
onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onimport._init(can, msg, null, can._output) }) }, onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onimport._init(can, msg, can._output) }) },
ontoast: function(can, msg) { can.core.CallFunc(can.onimport.toast, {can: can, msg: msg}) }, ontoast: function(can, msg) { can.core.CallFunc(can.onimport.toast, {can: can, msg: msg}) },
onremote: function(can, msg) { can.core.CallFunc(can.onimport.ncmd, {can: can, msg: msg}) }, onremote: function(can, msg) { can.core.CallFunc(can.onimport.ncmd, {can: can, msg: msg}) },
onaction_cmd: function(can, msg) { can.onmotion.hidden(can) }, onaction_cmd: function(can, msg) { can.onmotion.hidden(can) },
oncommandfocus: function(can) { can.page.Select(can, can._output, ["div.cmd", "input"], function(target) { can.onmotion.focus(can, target) }) }, oncommand_focus: function(can) { can.page.Select(can, can._output, ["div.cmd", "input"], function(target) { can.onmotion.focus(can, target) }) },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", Volcanos(chat.ONEXPORT, {help: "导出数据",
height: function(can) { return can._target.offsetHeight }, height: function(can) { return can._target.offsetHeight },
float: function(can, msg, cb, name, bottom) { if (can[name]) { return can[name].close() } float: function(can, msg, name, cb) { if (can[name]) { return can[name].close() }
var ui = can.onappend.field(can, "story toast float", {}, can._root._target) var ui = can.onappend.field(can, "story toast float", {}, can._root._target); can[name] = ui
ui.close = function() { can.page.Remove(can, ui.first), delete(can[name]) } ui.close = function() { can.page.Remove(can, ui.first), delete(can[name]) }
ui.refresh = function() { ui.close(), can.toast.click() }
can.getActionSize(function(left, top, height, width) { can.getActionSize(function(left, top, height, width) {
can.page.style(can, ui.first, html.LEFT, left, html.TOP, top) // can.page.style(can, ui.first, html.LEFT, left, html.TOP, top)
can.page.style(can, ui.output, html.MAX_HEIGHT, height-28, html.MAX_WIDTH, width) can.page.style(can, ui.first, html.RIGHT, 0, html.BOTTOM, can.onexport.height(can))
can.page.style(can, ui.output, html.MAX_HEIGHT, height-html.ACTION_HEIGHT, html.MAX_WIDTH, width)
}) })
can.onappend._action(can, [cli.CLOSE, cli.REFRESH, {input: html.TEXT, placeholder: "filter", _init: function(input) { can.onappend._action(can, [cli.CLOSE, cli.REFRESH, {input: html.TEXT, placeholder: "filter", onkeydown: function(event) {
can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) { can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return }
if (can.page.tagis(event.target, html.INPUT)) { return } can.onmotion.tableFilter(can, ui.output, event.target.value)
if (event.key == lang.ESCAPE) { ui.close(); return } can.onmotion.focus(can, event.target)
if (event.key == ice.SP) { input.focus(), can.onkeymap.prevent(event) } }}], ui.action, ui)
}}))
}, onkeydown: function(event) { can.onkeymap.input(event, can)
if (event.key != lang.ENTER) { return }
event.target.setSelectionRange(0, -1)
can.page.Select(can, ui.output, html.TR, function(tr, index) { if (index == 0) { return }
can.page.ClassList.add(can, tr, html.HIDDEN)
can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(event.target.value) > -1) {
can.page.ClassList.del(can, tr, html.HIDDEN)
} })
})
}}], ui.action, kit.Dict(cli.CLOSE, ui.close, cli.REFRESH, function(event) { ui.close(), can.toast.click()}))
if (msg) {
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, html.TD], onclick: function(event) { return {text: [value, html.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), can.onappend.board(can, msg.Result(), ui.output) }, ui.output), can.onappend.board(can, msg.Result(), ui.output)
} return ui
return can.page.style(can, ui.first, bottom? {bottom: html.ACTION_HEIGHT, top: ""}: {}), can[name] = ui
},
ntip: function(can) {
can.onexport.float(can, can._tips, function() {}, "ntip")
}, },
ntip: function(can) { can.onexport.float(can, can._tips, "ntip") },
ncmd: function(can) { ncmd: function(can) {
can.onexport.float(can, can._cmds, function(value, key, index, line, list) { can.onexport.float(can, can._cmds, "ncmd", function(value, key, index, line) {
var cmds = can.base.Obj(line.cmds); switch (line.follow) { var cmds = can.base.Obj(line.cmds); switch (line.follow) {
case "can.Action": cmds = cmds.slice(2); break case "can.Action": cmds = cmds.slice(2); break
case "can.Footer": cmds = cmds.slice(2); break case "can.Footer": cmds = cmds.slice(2); break
@ -110,16 +96,13 @@ Volcanos(chat.ONEXPORT, {help: "导出数据",
case "web.wiki.word": cmds = cmds.slice(5); break case "web.wiki.word": cmds = cmds.slice(5); break
} }
can.getActionSize(function(msg, top, left, width, height) { can.getActionSize(function(msg, left, top, width, height) {
can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), height: height-100, width: width}, function(sub) { can.onappend.plugin(can, {type: "story", mode: "float", index: cmds[0], args: cmds.slice(1)}, function(sub) {
sub.run = function(event, cmd, cb) { can.runActionCommand(event, cmds[0], cmd, cb) } sub.run = function(event, cmd, cb) { can.runActionCommand(event, cmds[0], cmd, cb) }
sub.onimport.size(sub, height-120-2*html.ACTION_HEIGHT-can.onexport.height(can), width, true)
can.page.style(can, sub._target, {top: top+100, left: left}) sub.onmotion.move(sub, sub._target, {left: left, top: top+120})
can.page.style(can, sub._legend, {display: html.BLOCK})
can.page.style(can, sub._output, {"max-width": width})
can.page.ClassList.add(can, sub._target, chat.FLOAT)
}, can._root._target) }, can._root._target)
}) })
}, "ncmd") })
}, },
}) })

View File

@ -10,24 +10,20 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg)
}, },
_title: function(can, msg, target) { if (can.user.isMobile) { return } _title: function(can, msg, target) { if (can.user.isMobile) { return }
can.core.List(can.base.getValid(msg.result, can.Conf(chat.TITLE)||["shylinux.com/x/contexts"]), function(item) { can.core.List(can.base.getValid(can.Conf(chat.TITLE)||msg.result, ["shylinux.com/x/contexts"]), function(item) {
can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) { can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) {
can.onaction.title(event, can) can.onaction.title(event, can)
}, onmouseenter: function(event) { var list = msg.Table()
can.user.carte(event, can, {}, can.core.List(list, function(item) { return item.name }), function(event, item, meta, index) {
event.shiftKey? can.user.open(list[index].path): can.user.jumps(list[index].path)
})
}}]) }}])
}) })
}, },
_state: function(can, msg, target) { _state: function(can, msg, target) {
can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), [mdb.TIME, aaa.USERNICK]), function(item) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [mdb.TIME, aaa.USERNICK]), function(item) {
if (item == aaa.AVATAR ) { if (can.user.isLocalFile) { return } if (item == aaa.AVATAR ) { if (can.user.isLocalFile) { return }
can.page.Append(can, target, [{view: can.base.join([chat.STATE, item]), list: [{img: ice.SP}], onmouseenter: function(event) { can.page.Append(can, target, [{view: can.base.join([chat.STATE, item]), list: [{img: ice.SP}], onmouseenter: function(event) {
can.onaction.carte(event, can, [can.page.Format(html.IMG, can.onexport.avatar(can), 160)]) can.onaction.carte(event, can, [can.page.Format(html.IMG, can.onexport.avatar(can), 160)])
}}]); return }}]); return
} }
can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) { can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, (can.Conf(item)||msg.Option(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) { item == mdb.TIME && can.onimport._time(can, target) }}]) }, _init: function(target) { item == mdb.TIME && can.onimport._time(can, target) }}])
}) })
@ -41,18 +37,17 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
_search: function(can, msg, target) { _search: function(can, msg, target) {
var ui = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) { var ui = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) {
can.onkeymap.input(event, can); switch (event.key) { can.onkeymap.input(event, can); switch (event.key) {
case lang.ENTER: can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: "command,space,word,text"||mdb.FOREACH, word: event.target.value})) case lang.ENTER: can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: event.target.value||""}))
} }
}}, "", target, "title search") }}, "", target, "title search"); can._search = ui, can.onimport.menu(can, mdb.SEARCH, function() {
can.onimport.menu(can, mdb.SEARCH, function() { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: ui.value||""}))
can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: ui.value}))
}) })
}, },
_menus: function(can, msg, target) { if (can.user.mod.isPod) { return } _menus: function(can, msg, target) { if (can.user.mod.isPod) { return }
can.setHeaderMenu(can.user.mod.isPod? []: can.setHeaderMenu(can.user.mod.isPod? []:
can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), can.onaction._menus), function(event, button) { can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button) {
can.core.CallFunc(can.onaction[button]||function(event, can) { can.core.CallFunc(can.onaction[button]||function(event, can) {
can.run(event, [button], function(msg) { can.user.toastSuccess(can, can.user.trans(can, button)) }) can.run(event, [button], function(msg) { can.user.toastSuccess(can, button) })
}, {event: event, can: can, button: button}) }, {event: event, can: can, button: button})
}) })
}, },
@ -63,30 +58,23 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.getActionSize(function(msg, top) { can.page.style(can, sub._target, {top: top, right: 0, left: ""}) }) can.getActionSize(function(msg, top) { can.page.style(can, sub._target, {top: top, right: 0, left: ""}) })
}}, target), target.onmouseenter = target.click }}, target), target.onmouseenter = target.click
}, },
time: function(can, target) { can.onimport.topic(can) time: function(can, target) { can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") },
target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")
},
avatar: function(event, can, avatar) { if (can.user.isExtension || can.user.isLocalFile) { return } avatar: function(event, can, avatar) { if (can.user.isExtension || can.user.isLocalFile) { return }
can.runAction(event, aaa.AVATAR, [avatar], function(msg) { can.runAction(event, aaa.AVATAR, [avatar], function(msg) {
can.user.info.avatar = avatar, can.onimport._avatar(can, msg), can.user.toastSuccess(can) can.user.info.avatar = avatar, can.onimport._avatar(can, msg), can.user.toastSuccess(can)
}) })
}, },
topic: function(can, topic) { topic && (can._topic = topic)
topic = can._topic || can.misc.Search(can, chat.TOPIC) || Volcanos.meta.args.topic || (can.base.isNight()? chat.BLACK: chat.WHITE)
// can.require(["/chat/topic/"+topic+".css"])
can.user.topic(can, topic)
},
background: function(event, can, background) { if (can.user.isExtension || can.user.isLocalFile) { return } background: function(event, can, background) { if (can.user.isExtension || can.user.isLocalFile) { return }
can.runAction(event, aaa.BACKGROUND, [background], function(msg) { can.runAction(event, aaa.BACKGROUND, [background], function(msg) {
can.user.info.background = background, can.onimport._background(can, msg), can.user.toastSuccess(can) can.user.info.background = background, can.onimport._background(can, msg), can.user.toastSuccess(can)
}) })
}, },
topic: function(can, topic) { topic && (can._topic = topic), can.user.topic(can, can.onexport.topic(can)) },
menu: function(can, cmds, cb, trans) { can.base.isString(cmds) && (cmds = [cmds]) menu: function(can, cmds, cb, trans) { can.base.isString(cmds) && (cmds = [cmds])
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(can.base.getValid(cmds.slice(1), [cmds[0]]), function(item) { return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(can.base.getValid(cmds.slice(1), [cmds[0]]), function(item) {
if (can.base.isString(item)) { if (can.base.isString(item)) {
return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) { return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) {
can.base.isFunc(cb) && cb(event, item, [item]) can.base.isFunc(cb) && cb(event, item, [item])
// can.base.isFunc(cb) && cb(event, item, cmds)
}} }}
} else if (can.base.isArray(item)) { } else if (can.base.isArray(item)) {
@ -104,30 +92,27 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
}) })
Volcanos(chat.ONPLUGIN, {help: "注册插件", Volcanos(chat.ONPLUGIN, {help: "注册插件",
"topic": shy("主题", { "title": shy("标题", {}, ["title", "run:button"], function(can, msg, cmds) {
"demo": function(can, msg, cmds) { can.onimport.topic(can, cmds[0]) }, can.user.title(cmds[0])
}, ["topic:select=white,black", "run:button", "demo:button"], function(can, msg, cmds) { }),
"topic": shy("主题", {}, ["topic:select=white,black", "run:button"], function(can, msg, cmds) {
can.onimport.topic(can, cmds[0]) can.onimport.topic(can, cmds[0])
}), }),
"cookie": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) { "cookie": shy("参数", {}, ["name", "value", "list", "back"], function(can, msg, cmds) {
can.core.Item(can.misc.Cookie(can), function(key, value) { can.core.Item(can.misc.Cookie(can), function(key, value) {
msg.Push("key", key), msg.Push("value", value) if (cmds[0] && key != cmds[0]) { return }
msg.Push(mdb.NAME, key), msg.Push(mdb.VALUE, value)
}) })
}), }),
"alert": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) { "alert": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) {
cmds && cmds[0] && can.user.alert(cmds[0]) cmds && cmds[0] && can.user.alert(cmds[0])
}), }),
"info": shy("信息", {}, ["text", "list", "back"], function(can, msg, cmds) {
msg.Echo("hello world")
}),
"log": shy("日志", {}, ["text", "list", "back"], function(can, msg, cmds) { "log": shy("日志", {}, ["text", "list", "back"], function(can, msg, cmds) {
console.log(cmds[0]) console.log(cmds[0])
}), }),
}) })
Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "交互数据",
can.base.isFunc(cb) && cb() _menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, "toimage"]],
},
_menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, "toimage", ctx.CONFIG]],
_trans: { _trans: {
"search": "搜索", "search": "搜索",
@ -137,7 +122,6 @@ Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb, target)
"print": "打印主题", "print": "打印主题",
"webpack": "打包页面", "webpack": "打包页面",
"toimage": "生成图片", "toimage": "生成图片",
"config": "拉取配置",
"shareuser": "共享用户", "shareuser": "共享用户",
"setnick": "设置昵称", "setnick": "设置昵称",
@ -154,78 +138,60 @@ Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb, target)
}, msg.Option(aaa.LOGIN), msg.Option("login.dev")) }, msg.Option(aaa.LOGIN), msg.Option("login.dev"))
return // 登录认证 return // 登录认证
} }
can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {}))
can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND)
can.user.info.language = can.misc.Search(can, aaa.LANGUAGE)||msg.Option(aaa.LANGUAGE) can.user.info.language = can.misc.Search(can, aaa.LANGUAGE)||msg.Option(aaa.LANGUAGE)
can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND)
msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) })
can.onimport._init(can, msg, function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output) can.onimport._init(can, msg, function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output)
}) })
}, },
onsearchfocus: function(can) { can.page.Select(can, can._output, ["div.search", html.INPUT], function(target) { target.focus() }) },
onwebpack: function(can, msg) { can.onaction[code.WEBPACK](msg._event, can) },
onstorm_select: function(can, msg, river, storm) { can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) }, onstorm_select: function(can, msg, river, storm) { can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) },
onsearch_focus: function(can) { can._search && can._search.focus() },
onaction_cmd: function(can, msg) { can.onmotion.hidden(can) }, onaction_cmd: function(can, msg) { can.onmotion.hidden(can) },
onwebpack: function(can, msg) {
can.user.input(msg._event, can, [{name: mdb.NAME, value: can.user.title()}], function(data) {
can.core.Item(Volcanos.meta.pack, function(key, msg) {
can.core.List(["_event", "_can", "_xhr", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) })
})
var msg = can.request({}, {
name: data.name, content: JSON.stringify(Volcanos.meta.pack),
river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM),
topic: can._topic, layout: can.getAction(chat.LAYOUT),
args: "name,river,storm,topic,layout",
_toast: "打包中...",
})
can.runAction(msg._event, code.WEBPACK, [], function(msg) {
can.user.download(can, "/share/local/"+msg.Result(), name, nfs.HTML)
can.user.toastSuccess(can, "打包成功", code.WEBPACK)
})
})
},
title: function(event, can) { title: function(event, can) {
var args = {}; can.core.List([chat.TITLE, chat.TOPIC, chat.LAYOUT], function(key) { var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) })
var value = can.misc.Search(can, key); value && (args[key] = value)
})
can.user.jumps(can.misc.MergeURL(can, args, true)) can.user.jumps(can.misc.MergeURL(can, args, true))
}, },
black: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) }, black: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) },
white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) }, white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) },
print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.setRiver(html.HEIGHT, ""), can.setAction(html.HEIGHT, "") }, print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.onengine.signal(can, chat.ONPRINT) },
webpack: function(event, can) { webpack: function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
can.user.input(event, can, [{name: mdb.NAME, value: can.user.title()}], function(data) { toimage: function(event, can, button) { can.onmotion.toimage(event, can, can.user.title(), can._target.parentNode) },
can.core.Item(Volcanos.meta.pack, function(key, msg) {
can.core.List(["_event", "_can", "_xhr", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) })
})
var msg = can.request(event, {
topic: can._topic, layout: can.getAction(chat.LAYOUT),
river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM),
name: data.name, content: JSON.stringify(Volcanos.meta.pack),
args: "name,topic,layout,river,storm",
})
var toast = can.user.toastProcess(can, "打包中...", code.WEBPACK) carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) },
can.runAction(event, code.WEBPACK, [], function(msg) { share: function(event, can, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) },
toast.close(), can.user.toastSuccess(can, "打包成功", code.WEBPACK)
can.user.download(can, "/share/local/"+msg.Result(), name, nfs.HTML)
})
})
},
toimage: function(event, can, button) {
can.onmotion.toimage(event, can, can.user.title(), can._root._target)
},
config: function(event, can) {
can.user.input(event, can, [{name: "scope", value: "etc/local.shy"}], function(args) {
can.runAction(event, ctx.CONFIG, args, function(msg) { can.user.jumps(msg.Result()) })
})
},
carte: function(event, can, list, cb) {
can.user.carte(event, can, can.onaction, list, cb)
},
share: function(event, can, args) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[], [chat.RIVER, can.Conf(chat.RIVER)||"", chat.STORM, can.Conf(chat.STORM)||""]))
},
usernick: function(event, can) { if (can.user.mod.isPod || can.user.isExtension || can.user.isLocalFile) { return } usernick: function(event, can) { if (can.user.mod.isPod || can.user.isExtension || can.user.isLocalFile) { return }
can.onaction.carte(event, can, ["shareuser", "setnick", aaa.PASSWORD, [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT]) can.onaction.carte(event, can, ["shareuser", "setnick", aaa.PASSWORD, [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT])
}, },
shareuser: function(event, can) { shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN]) },
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN])
},
setnick: function(event, can) { setnick: function(event, can) {
var ui = can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(list) { can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(list) {
can.runAction(event, aaa.USERNICK, [list[0]], function(msg) { can.runAction(event, aaa.USERNICK, [list[0]], function(msg) {
can.page.Select(can, can._output, can.core.Keys(html.DIV, aaa.USERNICK), function(item) { can.page.Select(can, can._output, can.core.Keys(html.DIV, aaa.USERNICK), function(item) {
can.page.Modify(can, item, can.Conf(aaa.USERNICK, list[0])) can.page.Modify(can, item, can.Conf(aaa.USERNICK, list[0]))
}), can.user.toastSuccess(can) }), can.user.toastSuccess(can)
}) })
}) })
can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""})
}, },
password: function(event, can) { password: function(event, can) {
var ui = can.user.input(event, can, [ var ui = can.user.input(event, can, [
@ -235,7 +201,6 @@ Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb, target)
if (list[0] != list[1]) { return can.user.toast(can, "密码不一致"), ui.focus(), true } if (list[0] != list[1]) { return can.user.toast(can, "密码不一致"), ui.focus(), true }
can.runAction(event, aaa.PASSWORD, [list[0]]) can.runAction(event, aaa.PASSWORD, [list[0]])
}) })
can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""})
}, },
chinese: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "zh") }, chinese: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "zh") },
english: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "en") }, english: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "en") },
@ -244,20 +209,7 @@ Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb, target)
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", Volcanos(chat.ONEXPORT, {help: "导出数据",
height: function(can) { return can._target.offsetHeight }, height: function(can) { return can._target.offsetHeight },
topic: function(can) { topic: function(can) { return can._topic || can.misc.Search(can, chat.TOPIC) || Volcanos.meta.args.topic || (can.base.isNight()? chat.BLACK: chat.WHITE) },
return can._topic || can.misc.Search(can, chat.TOPIC) || Volcanos.meta.args.topic || (can.base.isNight()? chat.BLACK: chat.WHITE) background: function(can) { return can.user.info.background == "void"? "": can.user.info.background },
return can._topic avatar: function(can) { return can.user.info.avatar == "void"? "": can.user.info.avatar },
},
avatar: function(can) {
if (can.user.info.avatar == "void") {
return ""
}
return can.user.info.avatar
},
background: function(can) {
if (can.user.info.background == "void") {
return ""
}
return can.user.info.background
},
}) })

View File

@ -1,58 +1,37 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
can.onmotion.clear(can), can.river_list = {}, can.storm_list = {} can.onmotion.clear(can), can.onimport._main(can, msg), can.onimport._menu(can, msg)
can.onimport._main(can, msg), can.onimport._menu(can, msg) can.river_list = {}, can.storm_list = {}
can._name_list = {}
var select; can.page.Append(can, can._output, msg.Table(function(item, index) { var select; can.page.Append(can, can._output, msg.Table(function(item, index) {
return can.onimport._river(can, item, function(target) { return can.onimport._river(can, item, function(target) { (index == 0 || item.hash == can._main_river) && (select = target) })
(index == 0 || item.hash == can._main_river) && (select = target)
})
})), select && select.click() })), select && select.click()
}, },
_main: function(can, msg) { _main: function(can, msg) {
// if (can.user.isMobile) { can._main_river = "product", can._main_storm = "office" } can._main_river = can.misc.Search(can, chat.RIVER)||Volcanos.meta.args.river||msg.Option(ice.MSG_RIVER)||can._main_river||"project"
// if (can.user.isWeiXin) { can._main_river = "service", can._main_storm = "wx" } can._main_storm = can.misc.Search(can, chat.STORM)||Volcanos.meta.args.storm||msg.Option(ice.MSG_STORM)||can._main_storm||"studio"
can._main_river = can.misc.Search(can, chat.RIVER)||msg.Option(ice.MSG_RIVER)||Volcanos.meta.args.river||can._main_river||"project"
can._main_storm = can.misc.Search(can, chat.STORM)||msg.Option(ice.MSG_STORM)||Volcanos.meta.args.storm||can._main_storm||"studio"
}, },
_menu: function(can, msg) { if (can.user.mod.isPod||can.user.isMobile) { return } _menu: function(can, msg) { if (can.user.mod.isPod||can.user.isMobile) { return }
can.setHeaderMenu(can.base.Obj(msg.Option(chat.MENUS), can.Conf(chat.MENUS)||can.ondetail._menus), function(event, button) { can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.ondetail._menus), function(event, button) {
can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)]) can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)])
}) })
}, },
_carte: function(can, list, river, storm) { if (can.user.isMobile) { return }
if (can.core.Value(can._root, can.core.Keys(chat.RIVER, river))) { return }
can.onaction.carte(event, can, list, function(event, button, module) {
module[button](event, can, button, river, storm)
})
},
_river: function(can, meta, cb) { _river: function(can, meta, cb) {
can._name_list[meta.hash] = meta.name
return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) { return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) {
can.onaction.storm(event, can, meta.hash) can.onaction.storm(event, can, meta.hash)
}, onmouseenter: function(event) { }, onmouseenter: function(event) {
can.onimport._carte(can, can.ondetail.list, meta.hash) can.onimport._carte(can, can.ondetail.list, meta.hash)
}, _init: function(target) { can.river_list[meta.hash] = target, cb(target) }}
}, _init: function(target) {
can.river_list[meta.hash] = target, cb(target)
}}
}, },
_storm: function(can, meta, river) { _storm: function(can, meta, river) {
can._name_list[can.core.Keys(river, meta.hash)] = meta.name
return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) { return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) {
can.onaction.action(event, can, river, meta.hash) can.onaction.action(event, can, river, meta.hash)
}, onmouseenter: function(event) { }, onmouseenter: function(event) {
can.onimport._carte(can, can.ondetail.sublist, river, meta.hash) can.onimport._carte(can, can.ondetail.sublist, river, meta.hash)
}, _init: function(target) { can.storm_list[can.core.Keys(river, meta.hash)] = target }}
}, _init: function(target) {
can.storm_list[can.core.Keys(river, meta.hash)] = target
}}
}, },
display: function(event, can) { _carte: function(can, list, river, storm) { if (can.user.isMobile) { return }
var show = can.onmotion.toggle(can, can._target); can.onlayout._init(can); return show if (can.core.Value(can._root, can.core.Keys(chat.RIVER, river))) { return }
can.onaction.carte(event, can, list, function(event, button, meta) { meta[button](event, can, button, river, storm) })
}, },
}) })
Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, can, msg, panel, cmds, cb) { Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, can, msg, panel, cmds, cb) {
@ -67,32 +46,21 @@ Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, can, msg
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 应用列表 msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 应用列表
}), can.base.isFunc(cb) && cb(msg); return true }), can.base.isFunc(cb) && cb(msg); return true
}}) }})
Volcanos(chat.ONACTION, {help: "控件交互", list: ["create", "share", "refresh"], _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "操作数据", list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: function(can, cb) {
can.onmotion.hidden(can, target), can.base.isFunc(cb) && cb() can.onmotion.hidden(can), can.base.isFunc(cb) && cb()
}, },
onlogin: function(can, msg) { onlogin: function(can, msg) {
can.run({}, [], function(msg) { if (msg.Option(ice.MSG_RIVER) == "_share") { return } can.run({}, [], function(msg) { if (msg.Option(ice.MSG_RIVER) == "_share") { return }
can.onimport._init(can, msg, null, can._output), can.onappend._action(can, can.Conf(ctx.ACTION)||can.onaction.list) can.onimport._init(can, msg), can.onappend._action(can, can.Conf(ctx.ACTION)||can.onaction.list)
if (can.user.mod.isPod ||can.user.isExtension || can.user.isMobile) { return } if (can.user.mod.isPod ||can.user.isExtension || can.user.isMobile) { return }
can.onmotion.toggle(can, can._target, true) can.onmotion.toggle(can, can._target, true)
}) })
}, },
onsearch: function(can, msg, word) { onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || word[0] == chat.STORM) { can.onexport.storm(can, msg, word) } },
if (word[0] == chat.STORM) { can.onexport.storm(can, msg, word) } onaction_notool: function(can, msg, river, storm) { can.ondetail["添加工具"](msg._event, can, "添加工具", river, storm) },
}, onaction_touch: function(can, msg) { can.user.isMobile && can.onmotion.hidden(can) },
onstorm_select: function(can, msg, river, storm) { onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") },
if (can.user.isExtension) { localStorage.setItem(ctx.ARGS, JSON.stringify({river: river, storm: storm})) }
},
onaction_touch: function(can, msg) {
can.user.isMobile && can.onmotion.hidden(can)
},
onaction_notool: function(can, msg, river, storm) {
can.ondetail["添加工具"](msg._event, can, "添加工具", river, storm)
},
carte: function(event, can, list, cb) {
can.user.carteRight(event, can, can.ondetail, list, cb)
},
storm: function(event, can, river) { can.sublist = can.sublist||{} storm: function(event, can, river) { can.sublist = can.sublist||{}
can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river]) can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river])
var list = can.sublist[river]; if (list) { return can.onmotion.toggle(can, list) } var list = can.sublist[river]; if (list) { return can.onmotion.toggle(can, list) }
@ -101,158 +69,99 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: ["create", "share", "refres
var select = 0; list = can.page.Append(can, can._output, [{view: html.LIST, list: msg.Table(function(item, index) { var select = 0; list = can.page.Append(can, can._output, [{view: html.LIST, list: msg.Table(function(item, index) {
river == can._main_river && item.hash == can._main_storm && (select = index) river == can._main_river && item.hash == can._main_storm && (select = index)
return can.onimport._storm(can, item, river) return can.onimport._storm(can, item, river)
}) }]).first, list.children.length > 0 && list.children[select].click() }) }]).first, can.sublist[river] = list, list.children.length > 0 && list.children[select].click()
event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling) event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling)
can.sublist[river] = list
}) })
}, },
action: function(event, can, river, storm) { action: function(event, can, river, storm) {
can.page.style(can, can.sublist[river], {display: html.BLOCK}) can.onmotion.toggle(can, can.sublist[river], true)
can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river]) can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river])
can.onmotion.select(can, can._output, [html.DIV_LIST, html.DIV_ITEM], can.storm_list[can.core.Keys(river, storm)]) can.onmotion.select(can, can._output, [html.DIV_LIST, html.DIV_ITEM], can.storm_list[can.core.Keys(river, storm)])
can.onmotion.delay(can, function() { can.onmotion.delay(can, function() { can.onlayout._init(can)
can.onlayout._init(can)
can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, { can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, {
river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm), river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm),
river_name: can._name_list[river], storm_name: can._name_list[can.core.Keys(river, storm)],
})) }))
}) })
}, },
create: function(event, can) { create: function(event, can) {
can.user.trans(can, {"public": "公开群", "protected": "内部群", "private": "私有群"})
can.user.input(event, can, [ can.user.input(event, can, [
{name: mdb.TYPE, values: [chat.PUBLIC, chat.PROTECTED, chat.PRIVATE], _trans: "类型"}, {name: mdb.TYPE, values: [aaa.TECH, aaa.VOID], _trans: "类型"},
{name: mdb.NAME, value: "hi", _trans: "群名"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}, {name: mdb.NAME, value: "hi", _trans: "群名"},
{name: mdb.TEXT, value: "hello", _trans: "简介"},
], function(args) { ], function(args) {
can.runAction(event, mdb.CREATE, args, function(msg) { can.runAction(event, mdb.CREATE, args, function(msg) { can.misc.Search(can, {river: msg.Result()}) })
can.misc.Search(can, {river: msg.Result()}) })
}) })
}, },
share: function(event, can) { share: function(event, can) {
can.onmotion.share(event, can, [{name: chat.TITLE, value: can.Conf(chat.STORM)}], [mdb.TYPE, chat.STORM]) can.onmotion.share(event, can, [{name: chat.TITLE, value: can.Conf(chat.STORM)}], [mdb.TYPE, chat.STORM, RIVER, can.Conf(RIVER), STORM, can.Conf(STORM)])
}, },
refresh: function(event, can) { refresh: function(event, can) {
var args = {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), layout: can.getAction(chat.LAYOUT)} can.misc.Search(can, {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), layout: can.getAction(chat.LAYOUT)})
if (can.user.isExtension) { localStorage.setItem(ctx.ARGS, JSON.stringify(args)) }
can.misc.Search(can, args)
}, },
carte: function(event, can, list, cb) { can.user.carteRight(event, can, can.ondetail, list, cb) },
}) })
Volcanos(chat.ONDETAIL, {help: "菜单交互", Volcanos(chat.ONDETAIL, {help: "操作数据",
list: ["共享群组", "添加应用", "添加设备", "添加用户", "重命名群组", "删除群组"], list: ["添加应用", "重命名群组", "删除群组"],
sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"],
// _menus: [
// ["create", "创建群组", "添加应用", "添加工具", "添加设备", "创建空间"],
// ["share", "共享群组", "共享应用", "共享工具", "共享设备", "访问空间"],
// ],
"创建群组": function(event, can) { can.onaction.create(event, can) }, "创建群组": function(event, can) { can.onaction.create(event, can) },
"共享群组": function(event, can, button, river) {
can.onmotion.share(event, can, [{name: chat.TITLE, value: river}], [mdb.TYPE, chat.RIVER])
},
"添加应用": function(event, can, button, river) { can.ondetail.create(event, can, button, river) },
"共享应用": function(event, can, button, river, storm) {
can.onmotion.share(event, can, [{name: chat.TITLE, value: storm}], [mdb.TYPE, chat.STORM])
},
"添加工具": function(event, can, button, river, storm) {
can.user.select(event, can, ctx.COMMAND, "index", function(item, next) {
can.run({}, [river, chat.STORM, ctx.ACTION, mdb.INSERT, mdb.HASH, storm].concat([web.SPACE, "", ctx.INDEX, item[0]]), function(msg) { next() })
}, function() { can.misc.Search(can, {river: river, storm: storm}) })
},
"共享工具": function(event, can, button, river, storm) {
can.user.select(event, can, mdb.PLUGIN, "name,index,args", function(item, next) {
can.user.share(can, can.request(event), [river, ctx.ACTION, chat.SHARE, mdb.TYPE, chat.FIELD,
mdb.NAME, item[1], mdb.TEXT, item[2], chat.TITLE, item[0], chat.RIVER, river, chat.STORM, storm,
])
})
},
"添加设备": function(event, can, button, river) {
can.user.select(event, can, web.SPACE, "type,name,text", function(item, next) {
can.run({}, [river, chat.NODES, ctx.ACTION, mdb.INSERT, mdb.TYPE, item[0], mdb.NAME, item[1]], function(msg) { next() })
})
},
"共享设备": function(event, can, button, river, storm) {
can.runAction(event, aaa.INVITE, [], function(msg) { can.user.toastScript(can, msg.Result(), button) })
},
"创建空间": function(event, can, button, river, storm) { can.request(event, {action: button})
can.user.input(event, can, [{name: "name", value: "hi"}, {name: "repos"}, {name: "template"}], function(args) {
can.runAction(event, cli.START, args.concat(chat.RIVER, river), function(msg) {
var link = can.misc.MergeURL(can, {pod: can.core.Keys(can.misc.Search(can, ice.POD), msg.Option(mdb.NAME))})
can.user.toast(can, link), can.user.open(link)
})
})
},
"访问空间": function(event, can, button, river, storm) {
can.user.select({river: river}, can, web.SPACE, "time,type,name,text")
},
"添加用户": function(event, can, button, river) {
can.user.select(event, can, chat.USER, "usernick,username", function(item, next) {
can.run({}, [river, chat.USER, ctx.ACTION, mdb.INSERT, aaa.USERNAME, item[0]], function(msg) { next() })
})
},
"重命名群组": function(event, can, button, river) { "重命名群组": function(event, can, button, river) {
can.user.input(event, can, [mdb.NAME], function(data) { can.user.input(event, can, [mdb.NAME], function(args) {
can.runAction(can.request(event, {hash: river}), mdb.MODIFY, [mdb.NAME, data.name], function(msg) { can.misc.Search(can, {river: river}) }) can.runAction(event, mdb.MODIFY, [mdb.HASH, river].concat(args), function(msg) {
can.page.Modify(can, can.river_list[river], args[1]), can.user.toastSuccess(can)
})
}) })
}, },
"删除群组": function(event, can, button, river) { "删除群组": function(event, can, button, river) {
can.runAction(can.request(event, {hash: river}), mdb.REMOVE, [], function(msg) { can.misc.Search(can, {river: "", storm: ""}) }) can.runAction(event, mdb.REMOVE, [mdb.HASH, river], function(msg) { can.misc.Search(can, {river: "", storm: ""}) })
}, },
"添加应用": function(event, can, button, river) { can.ondetail.create(event, can, button, river) },
"共享应用": function(event, can, button, river, storm) {
can.onmotion.share(event, can, [
{name: chat.TITLE, value: can.user.title()},
{name: chat.TOPIC, values: [cli.WHITE, cli.BLACK]},
], [mdb.TYPE, chat.STORM, chat.RIVER, river, chat.STORM, storm])
},
"添加工具": function(event, can, button, river, storm) {
can.user.select(event, can, ctx.COMMAND, ctx.INDEX, function(item, next) {
can.run({}, [river, storm, chat.STORM, ctx.ACTION, mdb.INSERT].concat([web.SPACE, can.misc.Search(can, ice.POD)||"", ctx.INDEX, item[0]]), function(msg) { next() })
}, function() { can.misc.Search(can, {river: river, storm: storm}) })
},
"保存参数": function(event, can, button, river, storm) { "保存参数": function(event, can, button, river, storm) {
can.getAction(ctx.ARGS, function(item, next, index, array) { var msg = can.request({}, {hash: storm, id: item.dataset.id}) can.getAction(ctx.ARGS, function(item, next, index, array) { var toast = can.user.toast(can, (index+1)+ice.PS+array.length, button, 10000, (index+1)*100/array.length)
var toast = can.user.toast(can, (index+1)+ice.PS+array.length, button, 10000, (index+1)*100/array.length) can.run({}, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY, mdb.ID, item.dataset.id, ctx.ARGS, item.dataset.args], function() {
can.run(msg, [river, chat.STORM, ctx.ACTION, mdb.MODIFY, ctx.ARGS, item.dataset.args], function(msg) { can.onmotion.delay(can, function() { toast.close(), next(), index == array.length-1 && can.user.toastSuccess(can) })
can.onmotion.delay(can, function() {
toast.close(), next(), index == array.length-1 && can.user.toastSuccess(can, button)
})
}) })
}) })
}, },
"重命名应用": function(event, can, button, river, storm) { "重命名应用": function(event, can, button, river, storm) {
can.user.input(event, can, [mdb.NAME], function(args) { can.user.input(event, can, [mdb.NAME], function(args) {
can.run(can.request(event, {hash: storm}), [river, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function(msg) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function() {
can.misc.Search(can, {river: river, storm: storm}) can.page.Modify(can, can.storm_list[can.core.Keys(river, storm)], args[1]), can.user.toastSuccess(can)
}) })
}) })
}, },
"删除应用": function(event, can, button, river, storm) { "删除应用": function(event, can, button, river, storm) {
can.run(can.request(event, {hash: storm}), [river, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) })
can.misc.Search(can, {river: river, storm: ""})
})
}, },
create: function(event, can, button, river) { create: function(event, can, button, river) {
can.user.trans(can, {"public": "公开应用", "protected": "群组应用", "private": "个人应用"})
can.user.input(event, can, [ can.user.input(event, can, [
{name: mdb.TYPE, values: [chat.PUBLIC, chat.PROTECTED, chat.PRIVATE], _trans: "类型"},
{name: mdb.NAME, value: "hi", _trans: "名称"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}, {name: mdb.NAME, value: "hi", _trans: "名称"}, {name: mdb.TEXT, value: "hello", _trans: "简介"},
], function(args) { ], function(args) {
can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.misc.Search(can, {river: river, storm: msg.Result()}) })
can.misc.Search(can, {river: river, storm: msg.Result()})
})
}) })
}, },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", Volcanos(chat.ONEXPORT, {help: "导出数据",
width: function(can) { return can._target.offsetWidth }, width: function(can) { return can._target.offsetWidth },
storm: function(can, msg, word) { storm: function(can, msg, word) {
var fields = (msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(",") can.core.Item(can._root.river, function(river, value) { can.core.Item(value.storm, function(storm, item) {
can.core.Item(can._root.river, function(river, value) { if (word[1] != "" && storm.indexOf(word[1]) == -1 && item.name.indexOf(word[1]) == -1) { return }
can.core.Item(value.storm, function(storm, item) { m.Push({ctx: "can", cmd: "Storm", type: river, name: storm, text: shy("跳转", function(event) { can.onaction.action(event, can, river, storm) })})
if (word[1] != "" && word[1] != storm && word[1] != item.name) { return } }) })
var data = {ctx: "can", cmd: "Storm",
type: river, name: storm, text: shy("跳转", function(event) {
can.onaction.action(event, can, river, storm)
}),
}; can.core.List(fields, function(key) { msg.Push(key, data[key]||"") })
})
})
}, },
}) })

View File

@ -1,3 +1,4 @@
fieldset.Search { background:#041a25bd; padding:10px; position:fixed; left:0px; top:31px; display:none; } fieldset.Search { background:#041a25bd; padding:10px; position:fixed; left:0px; top:31px; display:none; }
fieldset.Search input.word { width:-webkit-fill-available; } fieldset.Search input.word { width:-webkit-fill-available; }
fieldset.panel.Search>div.status { border-top:1px solid darkcyan; } fieldset.panel.Search>div.status { border-top:1px solid darkcyan; }
fieldset.panel.Search>div.output table { width:-webkit-fill-available; }

View File

@ -1,126 +1,95 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, list, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.onmotion.clear(can, can.ui.content)
can._foreach = "*" var table = can.onappend.table(can, msg, function(value, key, index, line) { can.Status(mdb.TOTAL, index+1)
can._foreach = "command,space,word,text"
can.list = msg.Table(), can.onmotion.clear(can, can.ui.content)
var table = can.onappend.table(can, msg, function(value, key, index, line, array) { can.Status(mdb.TOTAL, index+1)
return {text: [key == mdb.TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) { return {text: [key == mdb.TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) {
can.onaction[can.type == can._foreach||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index) if (can.page.tagis(event.target, html.A)) { return }
can.onaction[can.type==mdb.FOREACH||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index)
}} }}
}, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS), function(item) { }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS)))
return list.indexOf(item)
})); table && can.page.styleWidth(can, can.ui.display, table.offsetWidth)
can.page.Select(can, can._output, html.A, function(item) { can.page.Select(can, can._output, html.A, function(item) {
item.onclick = function(event) { can.user.open(item.href), can.onkeymap.prevent(event) } item.onclick = function(event) { can.user.open(item.href), can.onkeymap.prevent(event) }
}), can.onmotion.story.auto(can) }), can.onmotion.story.auto(can), can.list = msg.Table()
can.onappend._status(can, can.base.Obj(msg.Option(ice.MSG_STATUS), []).concat({name: "selected", value: "0"})) can.onappend._status(can, can.base.Obj(msg.Option(ice.MSG_STATUS), []).concat({name: "selected", value: "0"}))
msg.Length() == 1 && can.ui.profile.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click() msg.Length() == 1 && can.ui.profile.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click()
},
_word: function(can, msg, cmds, fields) { can.type = cmds[0]
var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return }
var res = can.request({}, {
word: cmds, fields: fields.join(ice.FS), sort: msg.Option("sort"),
river: msg.Option(chat.RIVER), index: msg.Option(mdb.INDEX),
})
can.onengine.signal(can, chat.ONSEARCH, res)
can.run(res, cmds, function(res) { can.onimport._init(can, res, fields) })
can.onmotion.show(can), can.onmotion.delay(can, function() {
can.onmotion.focus(can, can.ui.word) can.onmotion.focus(can, can.ui.word)
}) },
_word: function(can, msg, cmds, fields) {
if (cmds[1].indexOf(";") > -1) { var ls = can.core.Split(cmds[1], "\t ;", "\t ;"); cmds[0] = ls[0], cmds[1] = ls[1] }
can.run(can.request({}, {word: cmds, fields: fields.join(ice.FS)}, msg), cmds, function(res) {
can.type = cmds[0], can.onengine.signal(can, chat.ONSEARCH, res), can.onimport._init(can, res)
}), can.onmotion.show(can)
}, },
select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1] select: function(can, msg, cmds, cb) {
var fields = (cmds[2]||msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(ice.FS) can.getActionSize(function(left, top, width, height) {
can.page.Appends(can, can.ui.display, [{th: fields}]), can.cb = function() { can.ConfHeight(height-2*html.ACTION_HEIGHT-2*html.PLUGIN_MARGIN), can.ConfWidth(width-2*html.PLUGIN_MARGIN)
can.base.isFunc(cb) && cb(can.onexport.select(can)), can.onmotion.hide(can) can.page.style(can, can._target, {left: left, top: top})
} can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight())
can.input = function(event, word) { cmds[1] = word||cmds[1]
can.onimport._word(can, msg, cmds, fields)
}, can.onimport._word(can, msg, cmds, fields)
can.getActionSize(function(msg, top, left, width, height) {
can.ConfHeight(height-2*html.ACTION_HEIGHT-2*html.PLUGIN_MARGIN)
can.ConfWidth(width-2*html.PLUGIN_MARGIN)
can.page.style(can, can._target, {top: top, left: left})
can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight(), html.MAX_WIDTH, can.ConfWidth())
can.page.style(can, can.ui.content, html.MAX_WIDTH, can.ConfWidth()) can.page.style(can, can.ui.content, html.MAX_WIDTH, can.ConfWidth())
can.page.style(can, can.ui.display, html.MAX_WIDTH, can.ConfWidth()) can.page.style(can, can.ui.display, html.MAX_WIDTH, can.ConfWidth())
can.page.style(can, can.ui.profile, html.MAX_WIDTH, can.ConfWidth()) can.page.style(can, can.ui.profile, html.MAX_WIDTH, can.ConfWidth())
}) })
var fields = (cmds[2]||msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(ice.FS)
can.page.Appends(can, can.ui.display, [{th: fields}]), can.ui.word.value = cmds[1]
can.cb = function() { can.base.isFunc(cb) && cb(can.onexport.select(can)), can.onmotion.hide(can) }
can.input = function(event, word) { cmds[1] = word||cmds[1]
can.onimport._word(can, msg, cmds, fields)
}, can.onimport._word(can, msg, cmds, fields)
}, },
}) })
Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLOSE, cli.CLEAR, cli.DONE], _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLOSE, cli.CLEAR, cli.DONE], _init: function(can, cb) {
can.onmotion.hidden(can, can._target), can.base.isFunc(cb) && cb() can.onmotion.hidden(can), can.base.isFunc(cb) && cb()
}, },
onlogin: function(can, msg) { onlogin: function(can, msg) {
can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list) can.ui = can.page.Append(can, can._output, [chat.CONTENT, {view: [chat.DISPLAY, html.TABLE]}, chat.PROFILE])
can.ui = can.page.Append(can, can._output, [ can.page.ClassList.add(can, can.ui.display, chat.CONTENT)
{input: ["word", function(event) { can.onkeymap.input(event, can)
if (event.ctrlKey) {
if (event.key == "0") {
can.onaction.clear(event, can)
}
if ("1" <= event.key && event.key <= "9") {
can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr, index) {
if (index+1 == event.key) {
can.page.Select(can, tr, html.TD, function(td, index) {
index == 0 && td.click()
})
}
})
return
}
}
if (event.key == lang.ESCAPE) { return can.onmotion.hide(can) }
can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list)
can.ui.word = can.page.Append(can, can._action, [{input: ["word", function(event) { can.onkeymap.input(event, can)
if (event.key == lang.ESCAPE) { return can.onmotion.hide(can) }
if (event.key == lang.ENTER) { can.onkeymap.prevent(event) if (event.key == lang.ENTER) { can.onkeymap.prevent(event)
if (event.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1] if (event.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1]
return can.onaction[can.type == can._foreach? chat.PLUGIN: html.SELECT](event, can, first.dataset.index) return can.onaction[can.type==mdb.FOREACH? chat.PLUGIN: html.SELECT](event, can, first.dataset.index)
} }
if (event.ctrlKey) { return can.onaction[cli.DONE](event, can) } if (event.ctrlKey) { return can.onaction[cli.DONE](event, can) }
return can.input(event, event.target.value) return can.input(event, event.target.value)
} }
can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr) {
var has = false; can.page.Select(can, tr, html.TD, function(td) { if (event.ctrlKey) { if (event.key == "0") { return can.onaction.clear(event, can) }
has = has || td.innerText.indexOf(event.target.value) > -1 if ("1" <= event.key && event.key <= "9") {
}), can.page.ClassList.set(can, tr, html.HIDDEN, !has) return can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr, index) {
index+1 == event.key && tr.firstChild.click()
}) })
}]}, }
chat.CONTENT, html.STATUS, {view: [chat.DISPLAY, html.TABLE]}, chat.PROFILE, }
]), can.page.ClassList.add(can, can.ui.display, chat.CONTENT) can.onmotion.tableFilter(can, can.ui.content, event.target.value)
}] }]).first
}, },
onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||can._foreach, word||""]) }, onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||mdb.FOREACH, word||""]) },
clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) }, clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) },
done: function(event, can) { can.base.isFunc(can.cb) && can.cb() }, done: function(event, can) { can.base.isFunc(can.cb) && can.cb() },
close: function(event, can) { can.onmotion.hide(can) }, close: function(event, can) { can.onmotion.hide(can) },
plugin: function(event, can, index) { var line = can.list[index]
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
var cmd = line.cmd == ctx.COMMAND? can.core.Keys(line.type, line.name.split(ice.SP)[0]): can.core.Keys(line.ctx, line.cmd)
can.onappend.plugin(can, {type: "story", index: cmd||msg.Option(mdb.INDEX), args: cmd == "web.wiki.word"? [line.name]: []}, function(sub, meta) {
sub.onimport.size(sub, can.base.Min(320, can.ConfHeight()-html.ACTION_HEIGHT-can.ui.content.offsetHeight-can.ui.display.offsetHeight)-2*html.ACTION_HEIGHT-1, can.ConfWidth()-1, true)
sub.run = function(event, cmds, cb) { can.runActionCommand(event, meta.index, cmds, cb) }
can.onmotion.delay(can, function() { sub.Focus() }, 20)
}, can.ui.profile)
},
select: function(event, can, index) { var line = can.list[index] select: function(event, can, index) { var line = can.list[index]
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText }) var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText })
can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { return line[item] }), data: {index: index}, onclick: function(event) { can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { return line[item] }), data: {index: index}, onclick: function(event) {
can.page.Remove(can, event.target.parentNode) can.page.Remove(can, event.target.parentNode), can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1)
can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1)
}}]), can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1) }}]), can.Status("selected", can.page.Select(can, can.ui.display, html.TR).length-1)
}, },
plugin: function(event, can, index) { var line = can.list[index], args = []
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
if (can.page.tagis(event.target, html.A)) { return }
var cmd = line.cmd == ctx.COMMAND? can.core.Keys(line.type, line.name.split(ice.SP)[0]): can.core.Keys(line.ctx, line.cmd)
can.onappend.plugin(can, {type: "story", index: cmd||msg.Option(mdb.INDEX), args: cmd == "web.wiki.word"? [line.name]: args}, function(sub, meta) {
sub.run = function(event, cmds, cb) { can.runActionCommand(event, meta.index, cmds, cb) }
can.page.style(can, sub._output, html.MAX_HEIGHT, sub.ConfHeight(can.base.Min(320, can.ConfHeight()-2*html.ACTION_HEIGHT-html.ACTION_HEIGHT-can.ui.content.offsetHeight-can.ui.display.offsetHeight)-1))
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(can.ConfWidth()-1))
sub.Focus()
}, can.ui.profile)
},
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", Volcanos(chat.ONEXPORT, {help: "导出数据",
select: function(can) { select: function(can) {

View File

@ -1,5 +1,6 @@
fieldset.word fieldset.inner>form.option input[name=path] { width:240px; } fieldset.word fieldset.inner>form.option input[name=path] { width:240px; }
fieldset.inner.cmd>div.output { overflow:hidden; }
fieldset.inner>form.option input[name=path] { width:80px; } fieldset.inner>form.option input[name=path] { width:80px; }
fieldset.inner>form.option input[name=file] { width:160px; } fieldset.inner>form.option input[name=file] { width:160px; }
fieldset.inner>div.action>div.tabs { padding:5px; margin:0 1px; } fieldset.inner>div.action>div.tabs { padding:5px; margin:0 1px; }
@ -43,7 +44,7 @@ fieldset>div.output>fieldset.plug.select { background-color:#0e3369b3; color:whi
fieldset>div.status legend { float:right; height:30px; } fieldset>div.status legend { float:right; height:30px; }
fieldset>div.status legend.select { background-color:green; } fieldset>div.status legend.select { background-color:green; }
fieldset>div.status legend:hover { background-color:green; } fieldset>div.status legend:hover { background-color:green; }
fieldset.inner>div.status { height:31px; overflow:auto; } fieldset.inner>div.status { height:30px; overflow:auto; }
fieldset.panel>div.status { display:none; overflow:auto; } fieldset.panel>div.status { display:none; overflow:auto; }
fieldset.Search.panel>div.status { display:block; overflow:auto; } fieldset.Search.panel>div.status { display:block; overflow:auto; }
fieldset.inner.simple>legend { display:none; } fieldset.inner.simple>legend { display:none; }
@ -51,6 +52,8 @@ fieldset.inner.simple>form.option { display:none; }
fieldset.inner.simple>div.status { display:none; } fieldset.inner.simple>div.status { display:none; }
fieldset.inner.simple div.toggle { display:none; } fieldset.inner.simple div.toggle { display:none; }
fieldset.inner.float>div.action { display:none; }
fieldset.Action>div.status { display:none; } fieldset.Action>div.status { display:none; }
body.white fieldset.inner>div.output div.content { color:black; } body.white fieldset.inner>div.output div.content { color:black; }

View File

@ -107,7 +107,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
}, },
_index: function(can, msg, cb) { _index: function(can, msg, cb) {
if (can.Option(nfs.LINE) == web.DREAM) { if (can.Option(nfs.LINE) == web.DREAM) {
return can.base.isFunc(cb) && cb(msg._content = msg._content||can.page.insertBefore(can, [{type: html.IFRAME, src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), width: can.ui.content.offsetWidth, height: can.ui.content.offsetHeight}], can.ui._content)) return can.base.isFunc(cb) && cb(msg._content = msg._content||can.page.insertBefore(can, [{type: html.IFRAME,
src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), style: {height: can.ui.content.offsetHeight-4, width: can.ui.content.offsetWidth}}], can.ui._content))
} }
return can.onimport.plug(can, {index: msg.Option(ctx.INDEX), args: can.Option(nfs.PATH) == ctx.COMMAND && can.Option(nfs.LINE) != ctx.INDEX? [can.Option(nfs.LINE)]: []}, can.ui._content, function(sub) { return can.onimport.plug(can, {index: msg.Option(ctx.INDEX), args: can.Option(nfs.PATH) == ctx.COMMAND && can.Option(nfs.LINE) != ctx.INDEX? [can.Option(nfs.LINE)]: []}, can.ui._content, function(sub) {
@ -416,7 +417,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
switch (can.Mode()) { switch (can.Mode()) {
case "simple": can.onmotion.hidden(can, can.ui.project); break case "simple": can.onmotion.hidden(can, can.ui.project); break
case "float": break case "float": can.onmotion.hidden(can, can.ui.project); break
case "cmd": can.onimport._tabs(can), can.onmotion.hidden(can, can._status) // no break case "cmd": can.onimport._tabs(can), can.onmotion.hidden(can, can._status) // no break
case "full": // no break case "full": // no break
default: can.onimport.project(can, paths) default: can.onimport.project(can, paths)
@ -444,56 +445,48 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
_session: function(can, msg) { _session: function(can, msg) {
can.onimport.sess(can, "", function() { can.onimport.sess(can, { can.onimport.sess(can, "", function() { can.onimport.sess(can, {
exts: can.core.Split(msg.OptionOrSearch("exts")).reverse(), exts: can.core.Split(msg.SearchOrOption("exts")).reverse(),
plug: can.core.Split(msg.OptionOrSearch("plug")).reverse(), plug: can.core.Split(msg.SearchOrOption("plug")).reverse(),
tabs: can.core.Split(msg.OptionOrSearch("tabs")), tabs: can.core.Split(msg.SearchOrOption("tabs")),
}) }) }) })
}, },
layout: function(can) { if (can.isSimpleMode()) { layout: function(can) {
return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) if (can.isSimpleMode()) { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) }
}
if (can.isFloatMode()) { can.onmotion.hidden(can, can._action), can.onmotion.hidden(can, can.ui.project) }
var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.ConfHeight()
var width = can.ConfWidth()+(can.user.isMobile && can.isCmdMode() && can.user.isLandscape()? 16: 0)-(can.user.isWindows && !can.isCmdMode()? 20: 0) var width = can.ConfWidth()+(can.user.isMobile && can.isCmdMode() && can.user.isLandscape()? 16: 0)-(can.user.isWindows && !can.isCmdMode()? 20: 0)
can.page.styleWidth(can, can.ui.profile_output, can.profile_size[can.onexport.keys(can)]||(width-can.ui.project.offsetWidth)/2) var project_width = can.ui.project.style.display == html.NONE? 0: (can.ui.project.offsetWidth||240)
can.page.styleWidth(can, can.ui.content, width-can.ui.project.offsetWidth-can.ui.profile.offsetWidth) var profile_width = can.ui.profile.style.display == html.NONE? 0: can.profile_size[can.onexport.keys(can)]||(width-project_width)/2
can.page.styleWidth(can, can.ui.display_output, width-can.ui.project.offsetWidth) var content_width = width-project_width-profile_width
can.page.styleWidth(can, can.ui.content, content_width)
can.page.styleWidth(can, can.ui.profile_output, profile_width)
can.page.styleWidth(can, can.ui.display_output, width-project_width)
var displayHeight = can.display_size[can.onexport.keys(can)] var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.ConfHeight()-1
can.page.style(can, can.ui.display_output, html.HEIGHT, displayHeight||"") var display_height = can.ui.display.style.display == html.NONE? 0: (can.display_size[can.onexport.keys(can)]||120)
if (can.isCmdMode()) { height += html.ACTION_HEIGHT
var content_height = height-display_height - can.ui._tabs.offsetHeight - can.ui._path.offsetHeight - 4
can.page.style(can, can._output, html.MAX_HEIGHT, "")
} else {
var content_height = height-display_height
}
var profile_height = height-html.ACTION_HEIGHT-display_height
can.page.styleHeight(can, can.ui.profile_output, profile_height)
can.page.styleHeight(can, can.ui.display_output, display_height)
can.page.styleHeight(can, can.ui.content, content_height-(can.ui.content != can.ui._content? 4: 0))
can.page.styleHeight(can, can.ui.project, height)
if (can.isCmdMode()) {
if (can.ui.display.display != html.NONE) {
if (can.ui.display.offsetHeight > can.base.Min(can.ConfHeight() / 2, 200)) {
can.page.style(can, can.ui.display_output, html.MAX_HEIGHT, can.base.Min(can.ConfHeight() / 2, 200))
}
}
if (can._status.style.display == html.NONE) { height += html.ACTION_HEIGHT }
var rest = can.ui.display.offsetHeight+can.ui._tabs.offsetHeight+can.ui._path.offsetHeight+4
can.page.styleHeight(can, can.ui.content, height+html.ACTION_HEIGHT-rest)
can.page.styleHeight(can, can.ui.profile_output, height-can.ui.display.offsetHeight)
can.page.styleHeight(can, can.ui.project, height+html.ACTION_HEIGHT)
} else { var rest = can.ui.display.offsetHeight; if (height < 320) { height = 320 }
if (!can.isFullMode()) {
can._min_height = can._min_height||height, height >= can._min_height && (can._min_height = height)
can.page.style(can, can.ui.content, html.MIN_HEIGHT, can._min_height)
}
can.page.style(can, can.ui.content, can.user.isMobile? html.HEIGHT: html.MAX_HEIGHT, height-rest)
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight-html.ACTION_HEIGHT)
can.page.styleHeight(can, can.ui.project, can.ui.content.offsetHeight+rest)
}
can.page.Select(can, can.ui.profile, html.IFRAME, function(iframe) { can.page.Select(can, can.ui.profile, html.IFRAME, function(iframe) {
can.page.Modify(can, iframe, {height: can.ui.profile.offsetHeight-html.ACTION_HEIGHT-4, width: can.ui.profile.offsetWidth}) can.page.Modify(can, iframe, {height: profile_height-html.ACTION_HEIGHT-4, width: profile_width})
}) })
var sub = can.ui.content._plugin; if (sub) { var sub = can.ui.content._plugin; if (sub) {
sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT), sub.ConfWidth(can.ui.content.offsetWidth) sub.ConfHeight(content_height-2*html.ACTION_HEIGHT), sub.ConfWidth(content_width)
sub && sub.onaction.refresh({}, sub) sub && sub.onaction.refresh({}, sub)
} }
}, },
toolkit: function(can, meta, cb) { meta.msg = true toolkit: function(can, meta, cb) { meta.msg = true
can.onimport.plug(can, meta, can.ui.toolkit.output, function(sub) { can.onimport.plug(can, meta, can.ui.toolkit.output, function(sub) {
sub.ConfHeight(can.ConfHeight()/2), sub.ConfWidth(can.ui.content.offsetWidth+can.ui.profile.offsetWidth) sub.ConfHeight(can.ConfHeight()/2), sub.ConfWidth(can.ConfWidth()-can.ui.project.offsetWidth)
sub.page.style(sub, sub._output, html.MAX_HEIGHT, sub.ConfHeight()) sub.page.style(sub, sub._output, html.MAX_HEIGHT, sub.ConfHeight())
sub.page.style(sub, sub._output, html.MAX_WIDTH, sub.ConfWidth()) sub.page.style(sub, sub._output, html.MAX_WIDTH, sub.ConfWidth())

View File

@ -22,6 +22,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb) { c
term.open(can._output), term.focus() term.open(can._output), term.focus()
}, },
_resize: function(can, size) { _resize: function(can, size) {
can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "")
can.runAction(can.request({}, size, can._current._item), "resize", [], function() { can.onexport.term(can) }) can.runAction(can.request({}, size, can._current._item), "resize", [], function() { can.onexport.term(can) })
}, },
_input: function(can, data) { if (!can._current) { return } _input: function(can, data) { if (!can._current) { return }
@ -31,8 +32,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb) { c
}) })
Volcanos(chat.ONLAYOUT, {help: "界面布局", Volcanos(chat.ONLAYOUT, {help: "界面布局",
_init: function(can) { _init: function(can) {
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(), html.WIDTH, can.ConfWidth()+20, html.MAX_WIDTH, "") can.page.style(can, can._output, html.HEIGHT, can.ConfHeight()+8, html.WIDTH, can.ConfWidth()+18, html.MAX_WIDTH, "")
can.onmotion.delay(can, function() { can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "") }, 500)
can._current && can._current._fit.fit(), can.onexport.term(can) can._current && can._current._fit.fit(), can.onexport.term(can)
}, },
cmd: function(can) { can._current && can.onimport._title(can, can._current._item.name), can.ConfWidth(can.ConfWidth()-10) cmd: function(can) { can._current && can.onimport._title(can, can._current._item.name), can.ConfWidth(can.ConfWidth()-10)

View File

@ -2,3 +2,4 @@ fieldset.feel div.output img { display:block; float:left; }
fieldset.feel div.output video { display:block; float:left; } fieldset.feel div.output video { display:block; float:left; }
fieldset.feel.float div.output img { display:block; float:none; margin:auto; } fieldset.feel.float div.output img { display:block; float:none; margin:auto; }
fieldset.feel.float div.output video { display:block; float:none; margin:auto; } fieldset.feel.float div.output video { display:block; float:none; margin:auto; }
fieldset.feel.float div.status { display:block; }

View File

@ -31,9 +31,10 @@ fieldset.word svg.story.auto text { stroke:yellow; fill:yellow; }
fieldset.word svg.story.auto line { stroke:red; stroke-width:1; } fieldset.word svg.story.auto line { stroke:red; stroke-width:1; }
fieldset.word svg.story.auto path { stroke:red; stroke-width:1; } fieldset.word svg.story.auto path { stroke:red; stroke-width:1; }
fieldset.word.float { padding:0; margin:0; width:-webkit-fill-available; position:fixed; left:0; top:0; z-index:10; } fieldset.word.float { padding:0; margin:0; position:fixed; left:0; top:0; z-index:10; }
/* fieldset.word.float { padding:0; margin:0; width:-webkit-fill-available; position:fixed; left:0; top:0; z-index:10; } */
fieldset.word.float>div.action { display:contents; } fieldset.word.float>div.action { display:contents; }
fieldset.word.float>div.status { clear:none; } fieldset.word.float>div.status { clear:none; display:block; }
fieldset.word.float>div.output { background-color:#f0f8ff80; padding:20px; overflow:auto; } fieldset.word.float>div.output { background-color:#f0f8ff80; padding:20px; overflow:auto; }
fieldset.word.float>div.output>div.project { background:#4682b46b; padding:10px; position:fixed; right:0; top:31px; z-index:10; } fieldset.word.float>div.output>div.project { background:#4682b46b; padding:10px; position:fixed; right:0; top:31px; z-index:10; }
fieldset.word.float div.content div.page { margin-top:31px; display:none; } fieldset.word.float div.content div.page { margin-top:31px; display:none; }

View File

@ -121,6 +121,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
field: function(can, data, target, width) { var item = can.base.Obj(data.meta) field: function(can, data, target, width) { var item = can.base.Obj(data.meta)
can.onappend._init(can, item, [chat.PLUGIN_STATE_JS], function(sub) { can.onappend._init(can, item, [chat.PLUGIN_STATE_JS], function(sub) {
can._plugins = (can._plugins||[]).concat([sub])
sub.run = function(event, cmds, cb, silent) { sub.run = function(event, cmds, cb, silent) {
can.runAction(event, chat.STORY, can.misc.concat(can, [data.type, data.name, data.text], cmds), cb) can.runAction(event, chat.STORY, can.misc.concat(can, [data.type, data.name, data.text], cmds), cb)
} }
@ -133,8 +134,12 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}) })
}, can._output, target) }, can._output, target)
}, },
// layout: function(can) { layout: function(can) {
// }, can.core.List(can._plugins, function(sub) {
sub.ConfHeight(can.base.Min(300, can.ConfHeight()-300)), sub.ConfWidth(can.ConfWidth()-(can.user.isWindows? 40: 20))
sub.onaction._resize(sub, true, sub.ConfHeight(), sub.ConfWidth())
})
},
}, [""]) }, [""])
Volcanos(chat.ONKEYMAP, {help: "键盘交互", Volcanos(chat.ONKEYMAP, {help: "键盘交互",
_mode: { _mode: {

View File

@ -8,29 +8,24 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) {
_history: function(can, msg) { history.back(); return true }, _history: function(can, msg) { history.back(); return true },
_confirm: function(can, msg, _arg) { can.user.confirm(_arg) && can.runAction(can.request({}, msg), "confirm"); return true }, _confirm: function(can, msg, _arg) { can.user.confirm(_arg) && can.runAction(can.request({}, msg), "confirm"); 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")||"300"), function() {
can.Update(can.request({}, {_count: parseInt(msg.Option("_count"))-1})) can.Update(can.request({}, {_count: parseInt(msg.Option("_count")||"3")-1}))
}) }); return true
return true
}, },
_rewrite: function(can, msg) { _rewrite: function(can, msg) {
for (var i = 0; i < msg._arg.length; i += 2) { for (var i = 0; i < msg._arg.length; i += 2) {
can.Option(msg._arg[i], msg._arg[i+1]), can.Action(msg._arg[i], msg._arg[i+1]) can.Option(msg._arg[i], msg._arg[i+1]), can.Action(msg._arg[i], msg._arg[i+1])
} }; return can.Update()
return can.Update()
}, },
_display: function(can, msg) { _display: function(can, msg) {
return can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)), true return can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)), true
}, },
_inner: function(can, msg) { _inner: function(can, msg) {
can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can) can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can)
can.page.style(can, can._output, html.DISPLAY, html.BLOCK) can.page.style(can, can._output, html.DISPLAY, html.BLOCK); return true
return true
}, },
_field: function(can, msg) { var opts = {} _field: function(can, msg) { var opts = {}
can.page.Select(can, can._option, html.INPUT_ARGS, function(target) { can.page.Select(can, can._option, html.INPUT_ARGS, function(target) { var value = msg.Option(target.name); target.name && value && (opts[target.name] = value) })
var value = msg.Option(target.name); target.name && value && (opts[target.name] = value)
})
msg.Table(function(item) { can.onappend._plugin(can, item, {type: chat.STORY, index: item.index, args: can.base.Obj(item[ice.ARG], [])}, function(sub, meta) { msg.Table(function(item) { can.onappend._plugin(can, item, {type: chat.STORY, index: item.index, args: can.base.Obj(item[ice.ARG], [])}, function(sub, meta) {
sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { (function() { sub.ConfHeight(can.ConfHeight()/2) sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { (function() { sub.ConfHeight(can.ConfHeight()/2)
var msg = can.request(); msg.Echo(sub.Conf(ice.MSG_RESULT)) var msg = can.request(); msg.Echo(sub.Conf(ice.MSG_RESULT))
@ -44,20 +39,17 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) {
for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) } for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) }
can.run(event, (msg[ice.MSG_PREFIX]||[]).concat(cmds), cb, true) can.run(event, (msg[ice.MSG_PREFIX]||[]).concat(cmds), cb, true)
} }
}) }) }) }); return true
return true
}, },
_float: function(can, msg) { var _arg = msg._arg _float: function(can, msg) { var _arg = msg._arg
msg.Table(function(item) { can.onappend._plugin(can, item, {type: chat.FLOAT, index: item.index, args: _arg.slice(1), mode: chat.FLOAT}, function(sub, meta) { msg.Table(function(item) { can.onappend._plugin(can, item, {type: chat.STORY, mode: chat.FLOAT, index: item.index, args: _arg.slice(1), mode: chat.FLOAT}, function(sub, meta) {
sub.run = function(event, cmds, cb) { can.runAction(can.request(event, {path: msg.Option(nfs.PATH), text: msg.Option(mdb.TEXT)}), [ice.RUN, msg._arg[0]], cmds, cb) } sub.run = function(event, cmds, cb) { can.runAction(can.request(event, {path: msg.Option(nfs.PATH), text: msg.Option(mdb.TEXT)}), [ice.RUN, msg._arg[0]], cmds, cb) }
sub.Mode(chat.FLOAT), can.getActionSize(function(left, top, width, height) { left = left||0 can.getActionSize(function(left, top, width, height) { left = left||0
var top = can.Mode() == undefined? 120: 0; if (can.user.isMobile) { top = can.user.isLandscape()? 0: 48 } var top = can.Mode() == undefined? 120: 0; if (can.user.isMobile) { top = can.user.isLandscape()? 0: 48 }
sub.ConfHeight(height-top-2*html.ACTION_HEIGHT-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0)), sub.ConfWidth(width) sub.onimport.size(sub, can.base.Max(height, window.innerHeight)-top-2*html.ACTION_HEIGHT-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0), width, true)
can.page.style(can, sub._output, html.MAX_HEIGHT, window.innerHeight - top, html.OVERFLOW, ice.AUTO) can.onmotion.move(can, sub._target, {left: left, top: top})
can.onmotion.move(can, sub._target, {position: html.FIXED, left: left, top: top})
}) })
}, document.body) }) }, document.body) }); return true
return true
}, },
_hold: function(can, msg, _arg) { return _arg && can.user.toast(can, _arg), true }, _hold: function(can, msg, _arg) { return _arg && can.user.toast(can, _arg), true },
@ -66,16 +58,14 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) {
can.page.SelectArgs(can, can._option, "", function(item) { item.value = his[index++]||"" }) can.page.SelectArgs(can, can._option, "", function(item) { item.value = his[index++]||"" })
can.page.SelectArgs(can, can._action, "", function(item) { item.value = his[index++]||"" }) can.page.SelectArgs(can, can._action, "", function(item) { item.value = his[index++]||"" })
can.Update(); break can.Update(); break
} !his && can.Update() } !his && can.Update(); return true
return true
}, },
_rich: function(can, msg, _arg) { _rich: function(can, msg, _arg) {
if (can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TBODY], function(table) { if (can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TBODY], function(table) {
var head = can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TH], function(th) { return th.innerText }) var head = can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TH], function(th) { return th.innerText })
can.page.Append(can, table, msg.Table(function(value) { return {row: can.core.List(head, function(key) { return value[key] })} })) can.page.Append(can, table, msg.Table(function(value) { return {row: can.core.List(head, function(key) { return value[key] })} }))
return true return true
}).length == 0) { can.onappend.table(can, msg) } }).length == 0) { can.onappend.table(can, msg) }; return true
return true
}, },
_grow: function(can, msg, _arg) { _grow: function(can, msg, _arg) {
sub = can.core.Value(can, chat._OUTPUTS_CURRENT) sub = can.core.Value(can, chat._OUTPUTS_CURRENT)
@ -91,12 +81,20 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) {
}).length == 0) { can.onappend.board(can, _arg) } }).length == 0) { can.onappend.board(can, _arg) }
return true return true
}, },
_open: function(can, msg, _arg) { _open: function(can, msg, _arg) { return can.user.open(_arg), can.Update() },
return can.user.open(_arg), can.Update()
size: function(can, height, width, auto, mode) { height += html.ACTION_HEIGHT-can.onexport.statusHeight(can)
if (auto) {
can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, can.ConfHeight(height), html.MAX_WIDTH, can.ConfWidth(width))
} else {
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_HEIGHT, "", html.MAX_WIDTH, "")
}
var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return } sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth())
if (mode) { sub.Mode(can.Mode(mode)), sub.onlayout[mode](sub) } else { can.onaction["刷新页面"]({}, can, "刷新页面", sub) }
}, },
}) })
Volcanos(chat.ONACTION, {help: "交互操作", list: [ Volcanos(chat.ONACTION, {help: "交互操作", list: [
"刷新页面", "刷新数据", "共享工具", "切换浮动", "切换全屏", "远程控制", "打开链接", "生成链接", "生成脚本", "生成图片", [ "刷新页面", "刷新数据", "切换浮动", "切换全屏", "共享工具", "远程控制", "打开链接", "生成链接", "生成脚本", "生成图片", [
"其它", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据", "其它", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据",
"查看文档", "查看脚本", "查看源码", "查看配置", "删除配置", "删除工具", "查看文档", "查看脚本", "查看源码", "查看配置", "删除配置", "删除工具",
], ],
@ -105,12 +103,10 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
_switch: function(can, sub, mode, save, load) { _switch: function(can, sub, mode, save, load) {
if (can.page.ClassList.neg(can, can._target, mode)) { if (can.page.ClassList.neg(can, can._target, mode)) {
can._mode_bak = can.Mode(), can._height_bak = can.ConfHeight()||"", can._width_bak = can.ConfWidth()||"" can._mode_bak = can.Mode(), can._height_bak = can.ConfHeight()||"", can._width_bak = can.ConfWidth()||""
can._output_bak = {}, can.core.List([html.HEIGHT, html.MAX_HEIGHT, html.WIDTH, html.MAX_WIDTH], function(key) { can._output_bak = {}, can.core.List([html.HEIGHT, html.WIDTH, html.MAX_HEIGHT, html.MAX_WIDTH], function(key) {
can._output_bak[key] = can._output.style[key] can._output_bak[key] = can._output.style[key]
}) })
save(), sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()) save(), can.onimport.size(can, can.ConfHeight(), can.ConfWidth(), false, mode)
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(), html.WIDTH, can.ConfWidth(), html.MAX_WIDTH, can.ConfWidth())
sub.Mode(can.Mode(mode)), sub.onlayout[mode](sub)
} else { } else {
can.Mode(can._mode_bak||""), can.ConfHeight(can._height_bak), can.ConfWidth(can._width_bak) can.Mode(can._mode_bak||""), can.ConfHeight(can._height_bak), can.ConfWidth(can._width_bak)
can.page.style(can, can._output, can._output_bak) can.page.style(can, can._output, can._output_bak)
@ -118,45 +114,23 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
sub.Mode(can.Mode()), sub.onlayout._init(sub) sub.Mode(can.Mode()), sub.onlayout._init(sub)
} }
}, },
_resize: function(can, auto, height, width) { can.ConfHeight(height), can.ConfWidth(width) _resize: function(can, auto, height, width) { can.onimport.size(can, height, width, auto) },
auto? can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_WIDTH, can.ConfWidth()):
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_WIDTH, can.ConfWidth())
// can.onaction["刷新页面"]({}, can, "刷新页面", can.core.Value(can, chat._OUTPUTS_CURRENT))
can.onaction["刷新数据"]({}, can, "刷新数据", can.core.Value(can, chat._OUTPUTS_CURRENT))
},
"刷新页面": function(event, can, button, sub) { "刷新页面": function(event, can, button, sub) { can.core.CallFunc([sub.onlayout, "_init"], {can: sub}) },
can.core.CallFunc([sub.onimport, "_init"], {can: sub, msg: sub._msg, cb: function(msg) { can.user.toastSuccess(can) }, target: can._output}) "刷新数据": function(event, can) { can.Update({}, can.Input([], true)) },
},
"刷新数据": function(event, can) {
can.Update({}, can.Input([], true))
},
"共享工具": function(event, can) { var meta = can.Conf()
can.onmotion.share(event, can, [{name: chat.TITLE, value: meta.name}, {name: chat.TOPIC, values: [cli.WHITE, cli.BLACK]}], [
mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)),
])
},
"切换浮动": function(event, can, button, sub) { "切换浮动": function(event, can, button, sub) {
can.onaction._switch(can, sub, "float", function() { can.onaction._switch(can, sub, "float", function() {
can.onmotion.move(can, can._target, {left: window.innerWidth/2, top: window.innerHeight/2})
can.ConfHeight(window.innerHeight/2), html.WIDTH, can.ConfWidth(window.innerWidth/2) can.ConfHeight(window.innerHeight/2), html.WIDTH, can.ConfWidth(window.innerWidth/2)
}, function() { can.onmotion.move(can, can._target, {left: window.innerWidth/2, top: window.innerHeight/2})
can.page.style(can, can._target, html.LEFT, "", html.TOP, "") }, function() { can.page.style(can, can._target, html.LEFT, "", html.TOP, "") })
})
}, },
"切换全屏": function(event, can, button, sub) { "切换全屏": function(event, can, button, sub) {
can.onaction._switch(can, sub, "full", function() { can.onaction._switch(can, sub, "full", function() { can.ConfWidth(window.innerWidth)
if (sub.isCmdMode()) { if (sub.isCmdMode()) { can.ConfHeight(window.innerHeight) } else { can.ConfHeight(window.innerHeight-html.ACTION_HEIGHT-can.onexport.statusHeight(can)-(can.user.isMobile? 2*html.ACTION_HEIGHT: 0)) }
can.onmotion.hidden(can, can._legend), can.onmotion.hidden(can, can._option), can.onmotion.hidden(can, can._action), can.onmotion.hidden(can, can._status) }, function() {})
can.ConfHeight(window.innerHeight), can.ConfWidth(window.innerWidth) },
} else { "共享工具": function(event, can) { var meta = can.Conf()
can.ConfHeight(window.innerHeight - (can._status.innerText? 2: 1)*html.ACTION_HEIGHT - (can.user.isMobile? 2*html.ACTION_HEIGHT: 0)), can.ConfWidth(window.innerWidth) can.onmotion.share(event, can, [{name: chat.TITLE, value: meta.name}, {name: chat.TOPIC, values: [cli.WHITE, cli.BLACK]}], [mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true))])
}
}, function() {
if (sub.isCmdMode()) {
can.onmotion.toggle(can, can._legend, true), can.onmotion.toggle(can, can._option, true), can.onmotion.toggle(can, can._action, true), can.onmotion.toggle(can, can._status, true)
}
})
}, },
"远程控制": function(event, can) { "远程控制": function(event, can) {
can.base.isUndefined(can._daemon) && can.ondaemon._list[0] && (can._daemon = can.ondaemon._list.push(can)-1) can.base.isUndefined(can._daemon) && can.ondaemon._list[0] && (can._daemon = can.ondaemon._list.push(can)-1)
@ -164,8 +138,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
can.runAction(event, "keyboard", [], function(msg) { can.runAction(event, "keyboard", [], function(msg) {
can.onmotion.move(can, can.user.toast(can, { can.onmotion.move(can, can.user.toast(can, {
title: msg.Append(mdb.NAME), duration: -1, title: msg.Append(mdb.NAME), duration: -1, content: msg.Append(mdb.TEXT), action: [cli.CLOSE, cli.OPEN],
content: msg.Append(mdb.TEXT), action: [cli.CLOSE, cli.OPEN],
})._target, {}), can.user.copy(msg._event, can, msg.Append(mdb.NAME)) })._target, {}), can.user.copy(msg._event, can, msg.Append(mdb.NAME))
}, true) }, true)
}, },
@ -187,13 +160,12 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
can.user.copy(event, can, list[0]) can.user.copy(event, can, list[0])
}, },
"生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) }, "生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) },
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
"保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) }, "保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) },
"清空参数": function(event, can) { can.page.SelectArgs(can, can._option, "", function(item) { return item.value = "" }) }, "清空参数": function(event, can) { can.page.SelectArgs(can, can._option, "", function(item) { return item.value = "" }) },
"扩展参数": function(event, can) { can.onmotion.toggle(can, can._action) }, "扩展参数": function(event, can) { can.onmotion.toggle(can, can._action) },
"复制数据": function(event, can, button, sub) { "复制数据": function(event, can, button, sub) { can.user.copy(event, can, sub.onexport.table(sub)||sub.onexport.board(sub)) },
can.user.copy(event, can, sub.onexport.table(sub)||sub.onexport.board(sub))
},
"下载数据": function(event, can, button, sub) { var meta = can.Conf() "下载数据": function(event, can, button, sub) { var meta = can.Conf()
can.user.input(event, can, [{name: "filename", value: meta.name}], function(list) { can.user.input(event, can, [{name: "filename", value: meta.name}], function(list) {
can.user.downloads(can, sub.onexport.table(sub), list[0], nfs.CSV)||can.user.downloads(can, sub.onexport.board(sub), meta.name, nfs.TXT) can.user.downloads(can, sub.onexport.table(sub), list[0], nfs.CSV)||can.user.downloads(can, sub.onexport.board(sub), meta.name, nfs.TXT)
@ -201,68 +173,42 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
}, },
"清空数据": function(event, can) { can.onmotion.clear(can, can._output) }, "清空数据": function(event, can) { can.onmotion.clear(can, can._output) },
"查看文档": function(event, can) { can.runAction(event, "config", ["help"]) }, "查看文档": function(event, can) { can.runAction(event, ctx.CONFIG, ["help"]) },
"查看脚本": function(event, can) { can.runAction(event, "config", ["script"]) }, "查看脚本": function(event, can) { can.runAction(event, ctx.CONFIG, ["script"]) },
"查看源码": function(event, can) { can.runAction(event, "config", ["source"]) }, "查看源码": function(event, can) { can.runAction(event, ctx.CONFIG, ["source"]) },
"查看配置": function(event, can) { can.runAction(event, "config", ["select"], function(msg) { "查看配置": function(event, can) { can.runAction(event, ctx.CONFIG, ["select"], function(msg) { can.onappend.board(can, msg) }) },
can.onappend.board(can, msg) "删除配置": function(event, can) { can.runAction(event, ctx.CONFIG, ["reset"]) },
}) },
"删除配置": function(event, can) { can.runAction(event, "config", ["reset"]) },
"删除工具": function(event, can) { can.page.Remove(can, can._target) }, "删除工具": function(event, can) { can.page.Remove(can, can._target) },
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, change: function(event, can, name, value, cb) {
"摄像头": function(event, can) { return can.page.SelectArgs(can, can._option, "", function(input) {
var constraints = {audio: false, video: {width: 200, height: 200}} if (input.name == name && value != input.value) { input.value = value
var ui = can.page.Append(can, can._output, [{view: ctx.ACTION}, {view: "capture", list: [{type: "video", _init: function(item) { var data = input.dataset||{}; can.Update(event, can.Input(), cb); return input
navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { }
item.srcObject = stream, item.onloadedmetadata = function(e) {
item.play()
}, ui.stream = stream
}).catch(function(err) { console.log(err.name + ": " + err.message); })
}}]}])
can.onappend._action(can, ["关闭", "抓拍"], ui.action, {
"抓拍": function(event) {
var canvas = can.page.Append(can, ui.capture, [{type: "canvas", width: ui.video.offsetWidth, height: ui.video.offsetHeight}]).first
canvas.getContext("2d").drawImage(ui.video, 0, 0)
can.page.Append(can, ui.capture, [{img: canvas.toDataURL('image/png'), style: {width: ui.video.offsetWidth, height: ui.video.offsetHeight}}])
can.page.Remove(can, canvas)
},
"关闭": function(event) {
can.core.List(ui.stream.getTracks(), function(track) { track.stop() })
can.page.Remove(can, ui.action)
can.page.Remove(can, ui.video)
can.page.Remove(can, ui.capture)
},
}) })
}, },
refresh: function(event, can) {
keyboard: function(event, can) { can.onaction["远程控制"](event, can, "远程控制", can.core.Value(can, chat._OUTPUTS_CURRENT)) }, var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return }
full: function(event, can) { can.onaction["切换全屏"](event, can, "切换全屏", can.core.Value(can, chat._OUTPUTS_CURRENT)) },
refresh: function(event, can) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)
if (!sub) { return }
sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), sub.onimport.layout(sub) sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), sub.onimport.layout(sub)
}, },
clear: function(event, can, name) { can.onmotion.clear(can, can._output) }, clear: function(event, can, name) { can.onmotion.clear(can, can._output) },
close: function(event, can) { close: function(event, can) {
if (can.isFullMode()) { if (can.isFullMode()) {
can.onaction["切换全屏"](event, can) can.onaction["切换全屏"](event, can, "切换全屏", can.core.Value(can, chat._OUTPUTS_CURRENT))
} else if (can.isFloatMode()) {
can.onaction["切换浮动"](event, can, "切换浮动", can.core.Value(can, chat._OUTPUTS_CURRENT))
} else { } else {
can.page.Remove(can, can._target) can.page.Remove(can, can._target)
} }
}, },
upload: function(event, can) { can.user.upload(event, can) }, upload: function(event, can) { can.user.upload(event, can) },
actions: function(event, can) { can.onmotion.toggle(can, can._action) }, actions: function(event, can) { can.onmotion.toggle(can, can._action) },
full: function(event, can) { can.onaction["切换全屏"](event, can, "切换全屏", can.core.Value(can, chat._OUTPUTS_CURRENT)) },
keyboard: function(event, can) { can.onaction["远程控制"](event, can, "远程控制", can.core.Value(can, chat._OUTPUTS_CURRENT)) },
next: function(event, can) { can.Update(event, [ctx.ACTION, mdb.NEXT, can.Status(mdb.TOTAL)||0, can.Option(mdb.LIMIT)||can.Action(mdb.LIMIT)||"", can.Option(mdb.OFFEND)||can.Action(mdb.OFFEND)||""]) }, next: function(event, can) { can.Update(event, [ctx.ACTION, mdb.NEXT, can.Status(mdb.TOTAL)||0, can.Option(mdb.LIMIT)||can.Action(mdb.LIMIT)||"", can.Option(mdb.OFFEND)||can.Action(mdb.OFFEND)||""]) },
prev: function(event, can) { can.Update(event, [ctx.ACTION, mdb.PREV, can.Status(mdb.TOTAL)||0, can.Option(mdb.LIMIT)||can.Action(mdb.LIMIT)||"", can.Option(mdb.OFFEND)||can.Action(mdb.OFFEND)||""]) }, prev: function(event, can) { can.Update(event, [ctx.ACTION, mdb.PREV, can.Status(mdb.TOTAL)||0, can.Option(mdb.LIMIT)||can.Action(mdb.LIMIT)||"", can.Option(mdb.OFFEND)||can.Action(mdb.OFFEND)||""]) },
change: function(event, can, name, value, cb) {
return can.page.SelectArgs(can, can._option, "", function(input) {
if (input.name == name && value != input.value) { input.value = value
var data = input.dataset||{}; can.Update(event, can.Input(), cb)
return input
}
})
},
getClipboardData: function(event, can, button) { getClipboardData: function(event, can, button) {
function add(text) { can.runAction(event, button, can.base.Simple(can.base.ParseJSON(text)), function() { can.Update() }) } function add(text) { can.runAction(event, button, can.base.Simple(can.base.ParseJSON(text)), function() { can.Update() }) }
navigator.clipboard? navigator.clipboard.readText().then(add).catch(function(err) { can.misc.Log(err) }): navigator.clipboard? navigator.clipboard.readText().then(add).catch(function(err) { can.misc.Log(err) }):
@ -283,3 +229,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
}) })
}, },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据",
actionHeight: function(can) { return can._action.style.display == html.NONE || can._action.innerHTML == ""? 0: html.ACTION_HEIGHT },
statusHeight: function(can) { return can._status.style.display == html.NONE || can._status.innerHTML == "" || can._status.offsetHeight == 0? 0: html.ACTION_HEIGHT }
})

View File

@ -10,7 +10,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.margin = parseInt(can.Action("margin")||30) can.margin = parseInt(can.Action("margin")||30)
can.page.ClassList.add(can, can._fields, "draw") can.page.ClassList.add(can, can._fields, "draw")
can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() { can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() {
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg), can.onimport.layout(can)
}) })
}, },
_tree: function(can, list, field, split) { _tree: function(can, list, field, split) {

View File

@ -6,7 +6,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
can.page.ClassList.add(can, can._fields, "draw") can.page.ClassList.add(can, can._fields, "draw")
can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() { can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() {
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg), can.onimport.layout(can)
}) })
}, },
_sum: function(can) { _sum: function(can) {
@ -49,7 +49,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, [""]) }, [""])
Volcanos(chat.ONACTION, {help: "组件菜单", list: [ Volcanos(chat.ONACTION, {help: "组件菜单", list: [
[ice.VIEW, "趋势图", "柱状图", "数据源"], [ice.VIEW, "趋势图", "柱状图", "数据源"],
[html.HEIGHT, 100, 200, 400, 600, 800, ice.AUTO], [html.HEIGHT, ice.AUTO, 100, 200, 400, 600, 800, ice.AUTO],
["space", 10, 20, 50, 100], ["space", 10, 20, 50, 100],
[html.SPEED, 10, 20, 50, 100], [html.SPEED, 10, 20, 50, 100],
], ],

View File

@ -115,9 +115,11 @@ var aaa = {
LANGUAGE: "language", ENGLISH: "english", CHINESE: "chinese", LANGUAGE: "language", ENGLISH: "english", CHINESE: "chinese",
LOGIN: "login", LOGOUT: "logout", INVITE: "invite", LOGIN: "login", LOGOUT: "logout", INVITE: "invite",
TOKEN: "token", TOKEN: "token",
VOID: "void", TECH: "tech",
} }
var web = { var web = {
SPACE: "space", DREAM: "dream", SHARE: "share", SPACE: "space", DREAM: "dream", SHARE: "share",
REFRESH: "refresh",
} }
var tcp = { var tcp = {
HOST: "host", PORT: "port", HOST: "host", PORT: "port",
@ -211,7 +213,8 @@ var chat = {
ONKEYUP: "onkeyup", ONKEYUP: "onkeyup",
ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange",
ONSTORM_SELECT: "onstorm_select", ONACTION_TOUCH: "onaction_touch", ONACTION_NOTOOL: "onaction_notool", ONACTION_CMD: "onaction_cmd", ONSTORM_SELECT: "onstorm_select", ONACTION_TOUCH: "onaction_touch", ONACTION_NOTOOL: "onaction_notool", ONACTION_CMD: "onaction_cmd",
ONOPENSEARCH: "onopensearch", ONSEARCHFOCUS: "onsearchfocus", ONCOMMANDFOCUS: "oncommandfocus", ONOPENSEARCH: "onopensearch", ONSEARCH_FOCUS: "onsearch_focus", ONCOMMAND_FOCUS: "oncommand_focus",
ONPRINT: "onprint",
_INIT: "_init", _ENGINE: "_engine", _SEARCH: "_search", _OUTPUTS_CURRENT: "_outputs.-1", _INIT: "_init", _ENGINE: "_engine", _SEARCH: "_search", _OUTPUTS_CURRENT: "_outputs.-1",
_NAMES: "_names", _TOAST: "_toast", _NAMES: "_names", _TOAST: "_toast",
@ -451,7 +454,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", pack:
} }
_can_path = _can_name||_can_path _can_path = _can_name||_can_path
if (can._follow) { libs = libs.concat(meta.volcano, meta.libs) } if (can._follow) { libs = libs.concat(meta.libs, meta.volcano) }
if (libs && libs.length > 0) { // 解析参数 if (libs && libs.length > 0) { // 解析参数
for (var i = 0; i < libs.length; i++) { for (var i = 0; i < libs.length; i++) {
if (libs[i] == undefined) { if (libs[i] == undefined) {