1
0
mirror of https://shylinux.com/x/volcanos synced 2025-07-05 05:38:08 +08:00

opt search.js

This commit is contained in:
harveyshao 2022-07-04 18:02:06 +08:00
parent 0a54310d91
commit a256c59d19
11 changed files with 180 additions and 231 deletions

View File

@ -6,7 +6,7 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", list: [], _init: function(can, me
can.require([can.volcano], null, function(can, key, sub) { can[key] = sub }) can.require([can.volcano], null, function(can, key, sub) { can[key] = sub })
can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds||[] can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds||[]
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb) return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb)
}, Volcanos.meta.args = can.user.args(can), can.onlayout.topic(can) }, Volcanos.meta.args = can.user.args(can)
can.user.title(can.misc.Search(can, chat.TITLE)||can.misc.Search(can, ice.POD)||location.host) can.user.title(can.misc.Search(can, chat.TITLE)||can.misc.Search(can, ice.POD)||location.host)
can.core.Next(list, function(item, next) { item.type = chat.PANEL can.core.Next(list, function(item, next) { item.type = chat.PANEL
@ -23,7 +23,7 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", list: [], _init: function(can, me
}), can.core.CallFunc([panel.onaction, chat._INIT], {can: panel, cb: next, target: panel._target}) }), can.core.CallFunc([panel.onaction, chat._INIT], {can: panel, cb: next, target: panel._target})
}, target) }, target)
}, function() { can.misc.Log(can.user.title(), ice.RUN, can) }, function() { can.misc.Log(can.user.title(), ice.RUN, can)
can.onmotion._init(can, target), can.onkeymap._init(can) can.onmotion._init(can, target), can.onkeymap._init(can), can.setHeader(chat.TOPIC)
can.onengine.signal(can, chat.ONMAIN, can.request()), can.base.isFunc(cb) && cb() can.onengine.signal(can, chat.ONMAIN, can.request()), can.base.isFunc(cb) && cb()
}) })
@ -258,7 +258,8 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
if (can._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], can._daemon)) } if (can._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], can._daemon)) }
} }
return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)||{}; can._msg = msg, sub._msg = msg return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)||{};
(!cmds || cmds[0] != ctx.ACTION) && (can._msg = msg, sub._msg = msg)
if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return } if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return }
var process = msg._can == can || msg._can == sub var process = msg._can == can || msg._can == sub
if (process && can.core.CallFunc([sub, chat.ONIMPORT, ice.MSG_PROCESS], {can: sub, msg: msg})) { return } if (process && can.core.CallFunc([sub, chat.ONIMPORT, ice.MSG_PROCESS], {can: sub, msg: msg})) { return }
@ -267,6 +268,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
}) })
}, },
_output: function(can, msg, display, output, action, cb) { display = display||chat.PLUGIN_TABLE_JS, output = output||can._output _output: function(can, msg, display, output, action, cb) { display = display||chat.PLUGIN_TABLE_JS, output = output||can._output
can._display = display
Volcanos(display, {_follow: can.core.Keys(can._follow, display), _target: output, _fields: can._target, _display: display, Volcanos(display, {_follow: can.core.Keys(can._follow, display), _target: output, _fields: can._target, _display: display,
_legend: can._legend, _option: can._option, _action: can._action, _output: can._output, _status: can._status, _root: can._root, _legend: can._legend, _option: can._option, _action: can._action, _output: can._output, _status: can._status, _root: can._root,
Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status, Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status,
@ -462,9 +464,6 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", list: [], _init: function(can, ta
can.onengine.signal(can, chat.ONSIZE, can.request({}, {width: width, height: height})) can.onengine.signal(can, chat.ONSIZE, can.request({}, {width: width, height: height}))
}, },
topic: function(can, topic) { topic && (can._topic = topic)
can.user.topic(can, can._topic || can.misc.Search(can, chat.TOPIC) || Volcanos.meta.args.topic || (can.base.isNight()? chat.BLACK: chat.WHITE))
},
background: function(can, url, target) { background: function(can, url, target) {
can.page.style(can, target||can._root._target, html.BACKGROUND, url == "" || url == "void"? "": 'url("'+url+'")') can.page.style(can, target||can._root._target, html.BACKGROUND, url == "" || url == "void"? "": 'url("'+url+'")')
}, },
@ -666,7 +665,7 @@ Volcanos(chat.ONMOTION, {help: "动态特效", list: [], _init: function(can, ta
var toast = can.user.toast(can, {content: {img: url, style: {"max-height": 240, display: html.BLOCK}}, duration: -1, var toast = can.user.toast(can, {content: {img: url, style: {"max-height": 240, display: html.BLOCK}}, duration: -1,
action: shy({}, [cli.CLOSE, "download"], function(event, button) { action: shy({}, [cli.CLOSE, "download"], function(event, button) {
can.user.input(event, can, [{name: mdb.NAME, value: name}], function(ev, button, data) { toast.close() can.user.input(event, can, [{name: mdb.NAME, value: name}], function(ev, button, data) { toast.close()
can.page.Create(can, html.A, {href: url, download: data.name}).click() can.page.Create(can, html.A, {href: url, download: data.name+".png"}).click()
}) })
}), }),
}) })
@ -784,7 +783,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [], _focus: [], _init: func
case "q": window.terminate(); break case "q": window.terminate(); break
case "w": can.user.close(); break case "w": can.user.close(); break
case "r": can.user.reload(); break case "r": can.user.reload(); break
case "f": can.onengine.signal(can, "onopensearch", can.request({}, {type: "*"})); break case "f": can.onengine.signal(can, chat.ONOPENSEARCH, can.request({}, {type: "*"})); break
case "[": history.back(); break case "[": history.back(); break
case "]": history.forward(); break case "]": history.forward(); break
} }

View File

@ -89,6 +89,7 @@ Volcanos("core", {help: "数据结构",
}), }),
CallFunc: shy("调用器", function(func, args, mod) { args = args||{} CallFunc: shy("调用器", function(func, args, mod) { args = args||{}
var event = args["event"]||{}, can = args["can"]||args[0], msg = args["msg"]||args[1], cmds = args["cmds"]||[] var event = args["event"]||{}, can = args["can"]||args[0], msg = args["msg"]||args[1], cmds = args["cmds"]||[]
event = event._event||event
// 查找调用 // 查找调用
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):

View File

@ -66,7 +66,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
can.Conf("display") && (name += " "+can.Conf("display")) can.Conf("display") && (name += " "+can.Conf("display"))
can.user.isMobile && (name += " mobile") && can.user.isLandscape() && (name += " landscape") can.user.isMobile && (name += " mobile") && can.user.isLandscape() && (name += " landscape")
can.user.language(can) && (name += " "+can.user.language(can)) can.user.language(can) && (name += " "+can.user.language(can))
can.page.styleClass(can, document.body, name) can.page.styleClass(can, can._root._target, name)
}, },
language: function(can) { return can.misc.Search(can, "language") }, language: function(can) { return can.misc.Search(can, "language") },
trans: function(can, text, list) { if (can.base.isObject(text)) { trans: function(can, text, list) { if (can.base.isObject(text)) {

View File

@ -7,6 +7,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
item.inputs = can.base.Obj(item.inputs||item.list) 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() { }, function() {
@ -17,49 +18,39 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
_plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta _plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta
meta.id && (sub._option.dataset = sub._option.dataset||{}, sub._option.dataset.id = meta.id) meta.id && (sub._option.dataset = sub._option.dataset||{}, sub._option.dataset.id = meta.id)
sub.run = function(event, cmds, cb) { var msg = sub.request(event) sub.run = function(event, cmds, cb) {
return can.run(event, can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), function(msg) { return can.run(sub.request(event), can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb)
can.base.isFunc(cb) && cb(msg)
})
}, can._plugins = can.misc.concat(can, can._plugins, [sub]) }, can._plugins = can.misc.concat(can, can._plugins, [sub])
can.page.style(can, sub._output, html.MAX_WIDTH, meta.width-(can.user.isWindows? 20: 0))
can.onengine.listen(can, chat.ORIENTATIONCHANGE, function(event) {
can.page.style(can, sub._output, html.MAX_WIDTH, meta.width-(can.user.isWindows? 20: 0))
})
can.page.Append(can, can._action, [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { can.page.Append(can, can._action, [{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._action, html.DIV_TABS, event.target)
}, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}]) }, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}])
}, },
_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.onaction._menus), function(event, button, list) { 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.core.CallFunc([can.onaction, list[0]], [can, button])
}) })
}, },
_cmd: function(can, item, next) {
can.base.Copy(item, {
height: can._root._height-can.Conf(html.MARGIN_Y)+(can.user.isWindows? 17: 0),
width: can._root._width,
opts: can.misc.Search(can),
})
can.onappend.plugin(can, item, function(sub, meta, skip) {
can.page.style(can, sub._output, html.MAX_WIDTH, can._root._width)
can.user.title(meta.name), skip || next()
})
},
_share: function(can, share) { share && can.run({}, ["_share", share], function(msg) { _share: function(can, share) { share && can.run({}, ["_share", share], function(msg) {
msg.Length() == 1 && can.onengine.signal(can, chat.ONACTION_CMD)
can.setHeader(chat.TOPIC, msg.OptionOrSearch(chat.TOPIC)) can.setHeader(chat.TOPIC, msg.OptionOrSearch(chat.TOPIC))
can.user.title(msg.OptionOrSearch(chat.TITLE)) can.user.title(msg.OptionOrSearch(chat.TITLE))
msg.Length() == 1 && can.onengine.signal(can, chat.ONACTION_CMD)
can.Conf(html.MARGIN_X, 0, html.MARGIN_Y, 2*html.ACTION_HEIGHT)
can.onlayout._init(can, can._root._target)
can.Conf(chat.RIVER, "_share", chat.STORM, share) can.Conf(chat.RIVER, "_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) {
can.onengine.signal(can, chat.ONACTION_CMD)
can.onappend.plugin(can, can.base.Copy(item, {opts: can.misc.Search(can)}), function(sub, meta, skip) {
can.page.style(can, sub._output, html.MAX_WIDTH, can._root._width)
can.user.title(meta.name), skip || next()
})
},
height: function(can, height) {
can.page.styleHeight(can._target, height)
},
}) })
Volcanos(chat.ONENGINE, {help: "解析引擎", list: [], _engine: function(event, page, msg, can, cmds, cb) { Volcanos(chat.ONENGINE, {help: "解析引擎", list: [], _engine: function(event, page, msg, can, cmds, cb) {
var storm = can.core.Value(can._root, can.core.Keys(chat.RIVER, cmds[0], chat.STORM, cmds[1])) var storm = can.core.Value(can._root, can.core.Keys(chat.RIVER, cmds[0], chat.STORM, cmds[1]))
@ -83,9 +74,6 @@ Volcanos(chat.ONENGINE, {help: "解析引擎", list: [], _engine: function(event
return true return true
}}) }})
Volcanos(chat.ONPLUGIN, {help: "注册插件", list: [], Volcanos(chat.ONPLUGIN, {help: "注册插件", list: [],
"alert": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) {
can.user.alert(cmds[0])
}),
"parse": shy("解析", { "parse": shy("解析", {
"show": function(can, msg, cmds) { "show": function(can, msg, cmds) {
can.require(["/plugin/story/parse.js"], function() { can.require(["/plugin/story/parse.js"], function() {
@ -104,28 +92,14 @@ Volcanos(chat.ONPLUGIN, {help: "注册插件", list: [],
}, },
}, ["text", "show:button@auto"], function(can, msg, cmds, cb) { can.run({}, cmds, cb, true) }), }, ["text", "show:button@auto"], function(can, msg, cmds, cb) { can.run({}, cmds, cb, true) }),
"cookie": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) {
can.core.Item(can.misc.Cookie(can), function(key, value) {
msg.Push("key", key)
msg.Push("value", value)
})
}),
"plugin": shy("插件", {}, ["text", "list", "back"], function(can, msg, cmds) { "plugin": shy("插件", {}, ["text", "list", "back"], function(can, msg, cmds) {
msg.Echo("hello world") msg.Echo("hello world")
}), }),
"info": shy("信息", {}, ["text", "list", "back"], function(can, msg, cmds) {
msg.Echo("hello world")
}),
"log": shy("日志", {}, ["text", "list", "back"], function(can, msg, cmds) {
console.log(cmds[0])
}),
"nfs.save": shy("保存文件", {}, ["file=hi.txt", "text:textarea='hello world'", "save:button"], function(can, msg, cmds, cb) { "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( can.misc.runAction(can, msg, cmds, cb, kit.Dict(
"save", function(cmds) { can.user.downloads(can, cmds[1], cmds[0]) } "save", function(cmds) { can.user.downloads(can, cmds[1], cmds[0]) }
)) ))
}), }),
"pie": shy("比例图", {}, ["list", "back"], function(can, msg, cmds) { "pie": shy("比例图", {}, ["list", "back"], function(can, msg, cmds) {
msg.DisplayStory("pie.js") msg.DisplayStory("pie.js")
msg.Push("value", 200) msg.Push("value", 200)
@ -152,12 +126,11 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [], _focus: [], _init: func
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, "onsearchfocus"), can.onkeymap.prevent(event) can.onengine.signal(can, chat.ONSEARCHFOCUS), can.onkeymap.prevent(event)
}, },
":": function(event, can, target) { ":": function(event, can, target) {
can.onengine.signal(can, "oncommandfocus"), can.onkeymap.prevent(event) can.onengine.signal(can, chat.ONCOMMANDFOCUS), can.onkeymap.prevent(event)
}, },
enter: function(event, can, target) { can.misc.Log("enter") },
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(item) {
can.page.Remove(can, item) can.page.Remove(can, item)
@ -183,6 +156,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [], _init: function(can, cb
_menus: [ _menus: [
[chat.LAYOUT, "auto", "tabs", "grid", "free", "flow", "page", "toimage"], [chat.LAYOUT, "auto", "tabs", "grid", "free", "flow", "page", "toimage"],
[ice.HELP, "tutor", "manual", "service", "devops", "refer"], [ice.HELP, "tutor", "manual", "service", "devops", "refer"],
"refresh",
], ],
_trans: { _trans: {
"layout": "布局", "layout": "布局",
@ -202,11 +176,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [], _init: function(can, cb
"refer": "参考手册", "refer": "参考手册",
}, },
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.Conf(chat.TOOL) && !can.user.mod.isCmd) { return } onlogin: function(can) { if (!can.user.mod.isCmd && !can.Conf(chat.TOOL)) { return }
can.Conf(html.MARGIN_X, 0, html.MARGIN_Y, 2*html.ACTION_HEIGHT)
can.page.ClassList.add(can, can._target, ice.CMD)
can.onlayout._init(can)
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)
@ -214,10 +184,10 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [], _init: function(can, cb
can.onimport._cmd(can, item, next) can.onimport._cmd(can, item, next)
}) }) }) })
}, },
onsize: function(can, msg, height, width) { can.Conf({height: height, width: width}) },
onsearch: function(can, msg, word) { onsearch: function(can, msg, word) {
if (word[0] == mdb.PLUGIN || word[1] != "") { can.onexport.plugin(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))
@ -231,9 +201,11 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [], _init: function(can, cb
}) })
}, },
onaction_cmd: function(can, msg) { onaction_cmd: function(can, msg) {
can.ConfHeight(can._root._height), can.ConfWidth(can._root._width)
can.Conf(html.MARGIN_X, 0, html.MARGIN_Y, 2*html.ACTION_HEIGHT)
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.ConfHeight(can._root._height) can.onlayout._init(can)
can.ConfWidth(can._root._width)
}, },
layout: function(can, button, silent) { button = button||ice.AUTO layout: function(can, button, silent) { button = button||ice.AUTO
@ -243,14 +215,29 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [], _init: function(can, cb
can.onlayout._init(can) can.onlayout._init(can)
}, },
help: function(can, button) { can.user.open("/help/"+button+".shy") }, help: function(can, button) { can.user.open("/help/"+button+".shy") },
refresh: function(can, button) {
can._root._height = window.innerHeight, can._root._width = window.innerWidth
can.onlayout._init(can)
var width = can.ConfWidth()-can.Conf(html.MARGIN_X)
can.core.List(can._plugins, function(sub) {
can.page.style(can, sub._output, html.MAX_WIDTH, sub.ConfWidth(width)-(can.user.isWindows? 20: 0))
can.onappend._output(sub, can.core.Value(sub, chat._OUTPUT_CURRENT)._msg, sub._display)
})
},
}) })
Volcanos(chat.ONLAYOUT, {help: "导出数据", list: [], Volcanos(chat.ONLAYOUT, {help: "导出数据", list: [],
toimage: function(can) {
return can.onmotion.toimage(event, can, can.Conf(chat.STORM), can._output), true
},
auto: function(can) { auto: function(can) {
can.Conf(chat.LAYOUT, "") can.Conf(chat.LAYOUT, "")
}, },
grid: function(can, silent) {
var ACTION_LAYOUT_FMT = " fieldset.Action.grid>div.output fieldset.plugin { width:_width; height:_height; } fieldset.Action.grid>div.output fieldset.plugin>div.output { width:_width; height:_height; } "
can.user.input(event, can, [{name: "m", value: 2}, {name: "n", value: 2}], function(event, button, data, list, args) {
can.getActionSize(function(height, width) { var m = parseInt(data.m)||2, n = parseInt(data.n)||2
can.page.css(can.base.replaceAll(ACTION_LAYOUT_FMT, "_width", (width-(4*m+1)*html.PLUGIN_MARGIN)/m+"px", "_height", (height-(4*n+1)*html.PLUGIN_MARGIN)/n+"px"))
})
}, silent)
},
tabs: function(can) { tabs: function(can) {
can.onmotion.select(can, can._action, html.DIV_TABS, 0) can.onmotion.select(can, can._action, html.DIV_TABS, 0)
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0) can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0)
@ -261,13 +248,8 @@ Volcanos(chat.ONLAYOUT, {help: "导出数据", list: [],
can.onmotion.move(can, item, {left: 40*index, top: 40*index}) can.onmotion.move(can, item, {left: 40*index, top: 40*index})
}) })
}, },
grid: function(can, silent) { toimage: function(can) {
var ACTION_LAYOUT_FMT = " fieldset.Action.grid>div.output fieldset.plugin { width:_width; height:_height; } fieldset.Action.grid>div.output fieldset.plugin>div.output { width:_width; height:_height; } " return can.onmotion.toimage(event, can, can.Conf(chat.STORM), can._output), true
can.user.input(event, can, [{name: "m", value: 2}, {name: "n", value: 2}], function(event, button, data, list, args) {
can.getActionSize(function(height, width) { var m = parseInt(data.m)||2, n = parseInt(data.n)||2
can.page.css(can.base.replaceAll(ACTION_LAYOUT_FMT, "_width", (width-(4*m+1)*html.PLUGIN_MARGIN)/m+"px", "_height", (height-(4*n+1)*html.PLUGIN_MARGIN)/n+"px"))
})
}, silent)
}, },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", list: [], Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
@ -296,7 +278,7 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
var list = can.page.Select(can, item.nextSibling, html.OPTION_ARGS, function(item) { return item.value||"" }) var list = can.page.Select(can, item.nextSibling, html.OPTION_ARGS, function(item) { return item.value||"" })
var meta = item.parentNode._meta; if (!meta) { return } var meta = item.parentNode._meta; if (!meta) { return }
var data = {ctx: "web.chat", cmd: ctx.ACTION, var data = {ctx: "can", cmd: "Action",
type: mdb.PLUGIN, name: item.innerHTML, text: shy("跳转", function(event) { type: mdb.PLUGIN, name: item.innerHTML, text: shy("跳转", function(event) {
var input = can.page.Select(can, item.parentNode, html.INPUT_ARGS)[0]; input && input.focus() var input = can.page.Select(can, item.parentNode, html.INPUT_ARGS)[0]; input && input.focus()
}), argument: JSON.stringify(list), }), argument: JSON.stringify(list),

View File

@ -3,7 +3,7 @@ fieldset.Footer>div.output { height:32px; overflow:hidden; }
fieldset.Footer>div.output>div { padding:5px; height:22px; cursor:pointer; } fieldset.Footer>div.output>div { padding:5px; height:22px; cursor:pointer; }
fieldset.Footer>div.output>div:hover { background-color:#2e515f; border-top:solid 2px red; } fieldset.Footer>div.output>div:hover { background-color:#2e515f; border-top:solid 2px red; }
fieldset.Footer>div.output div.title { float:left; } fieldset.Footer>div.output div.title { float:left; }
fieldset.Footer>div.output div.state { float:right; } fieldset.Footer>div.output div.state { float:right; font-family:monospace; }
fieldset.Footer>div.output div.toast { background-color:darkcyan; float:right; } fieldset.Footer>div.output div.toast { background-color:darkcyan; float:right; }
fieldset.Footer>div.output div.cmd { padding:0px; float:left; } fieldset.Footer>div.output div.cmd { padding:0px; float:left; }
fieldset.Footer>div.output input[name=cmd] { height:25px; width:120px; border-radius:0; } fieldset.Footer>div.output input[name=cmd] { height:25px; width:120px; border-radius:0; }

View File

@ -1,23 +1,12 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.onmotion.clear(can) can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
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)
can.onimport._cli(can, msg, target) can.onimport._command(can, msg, target)
can.base.isFunc(cb) && cb(msg)
can.core.Timer(100, function() {
window.webview && can.setHeaderMenu(["后退", "列表"], function(event, button, list) {
switch (button) {
case "后退": history.back(); break
case "列表": window.menu(); break
}
can.core.CallFunc([can.onaction, list[0]], [can, button])
})
})
}, },
_title: function(can, msg, target) { _title: function(can, msg, target) { if (can.user.isMobile) { return }
!can.user.isMobile && can.core.List(msg.result, function(item) { can.core.List(msg.result, function(item) {
can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}]) can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}])
}) })
}, },
@ -25,28 +14,21 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), ["ncmd", "ntip"]), function(item) { can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(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) { ], onclick: function(event) { can.onexport[item](can) }}])
can[item] = can[item]? (can.page.Remove(can, can[item]), null): can.onexport[item](can)
can.page.style(can, can.show, {left: "", top: "", right: 0, bottom: can.onexport.height(can)})
}}])
}) })
}, },
_toast: function(can, msg, target) { _toast: function(can, msg, target) {
can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { var item = "ntip" can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport["ntip"](can) }}]).first
can[item] = can[item]? (can.page.Remove(can, can[item]), null): can.onexport[item](can)
can.page.style(can, can.show, {left: "", top: "", right: 0, bottom: can.onexport.height(can)})
}}]).first
}, },
_cli: 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: "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.CLEAR: can.cli && can.cli.close(); break
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
default: default:
can.run(event, [ice.RUN].concat(can.core.Split(event.target.value, ice.SP)), function(msg) { can.run(event, [ice.RUN].concat(can.core.Split(event.target.value, ice.SP)), function(msg) {
can.cli && can.cli.close(), can.cli = can.onexport.float(can, msg, function(value, key, index, line, list) {}) can.cli && can.cli.close(), can.onexport.float(can, msg, function(value, key, index, line, list) {}, "cli", true)
can.page.style(can, can.cli.first, "bottom", can.onexport.height(can), "top", "")
}) })
} }
}}, "", target, "title cmd") }}, "", target, "title cmd")
@ -75,22 +57,22 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
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) { target.focus() }) }, oncommandfocus: function(can) { can.page.Select(can, can._output, ["div.cmd", "input"], function(target) { can.onmotion.focus(can, target) }) },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", list: [], Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight }, height: function(can) { return can._target.offsetHeight },
float: function(can, msg, cb) { float: function(can, msg, cb, name, bottom) { 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)
ui.close = function() { can.page.Remove(can, ui.first) } ui.close = function() { can.page.Remove(can, ui.first), delete(can[name]) }
can.getActionSize(function(left, top, height, width) { can.getActionSize(function(left, top, height, width) {
can.page.style(can, ui.output, html.MAX_HEIGHT, height-28, html.MAX_WIDTH, 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.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", _init: function(input) {
can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) { can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) {
if (event.target.tagName == "INPUT") { return } if (can.page.tagis(html.INPUT, event.target)) { return }
if (event.key == lang.ESCAPE) { ui.close(); return } if (event.key == lang.ESCAPE) { ui.close(); return }
if (event.key == ice.SP) { input.focus(), can.onkeymap.prevent(event) } if (event.key == ice.SP) { input.focus(), can.onkeymap.prevent(event) }
}})) }}))
@ -106,31 +88,31 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
}) })
}}], ui.action, kit.Dict(cli.CLOSE, ui.close, cli.REFRESH, function(event) { ui.close(), can.toast.click()})) }}], ui.action, kit.Dict(cli.CLOSE, ui.close, cli.REFRESH, function(event) { ui.close(), can.toast.click()}))
can.onappend.table(can, msg, function(value, key, index, line, list) { if (msg) {
return {text: [value, html.TD], onclick: function(event) { can.onappend.table(can, msg, function(value, key, index, line, list) {
can.base.isFunc(cb) && cb(value, key, index, line, list) return {text: [value, html.TD], onclick: function(event) {
}} can.base.isFunc(cb) && cb(value, key, index, line, list)
}, ui.output), can.onappend.board(can, msg.Result(), ui.output) }}
return ui }, ui.output), can.onappend.board(can, msg.Result(), ui.output)
}
return can.page.style(can, ui.first, bottom? {bottom: 32, top: ""}: {}), can[name] = ui
}, },
ntip: function(can) { ntip: function(can) {
return can.onexport.float(can, can._tips).first can.onexport.float(can, can._tips, function() {}, "ntip")
}, },
ncmd: function(can) { ncmd: function(can) {
return can.onexport.float(can, can._cmds, function(value, key, index, line, list) { can.onexport.float(can, can._cmds, function(value, key, index, line, list) {
var cmds = can.base.Obj(line.cmds); switch (line.follow) { var cmds = can.base.Obj(line.cmds); switch (line.follow) {
case "chat.Action": cmds = cmds.slice(2); break case "can.Action": cmds = cmds.slice(2); break
case "chat.Footer": cmds = cmds.slice(2); break case "can.Footer": cmds = cmds.slice(2); break
} }
switch (cmds[0]) { switch (cmds[0]) {
case "web.wiki.word": cmds = cmds.slice(5); break case "web.wiki.word": cmds = cmds.slice(5); break
} }
can.get("Action", "size", function(msg, top, left, width, height) { can.getActionSize(function(msg, top, left, width, height) {
can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), height: height-100, width: width}, function(sub) { can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), height: height-100, width: width}, function(sub) {
sub.run = function(event, cmd, cb) { sub.run = function(event, cmd, cb) { can.runAction(event, ice.RUN, [cmds[0]].concat(cmd), cb) }
can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, cmds[0]], cmd), cb)
}
can.page.style(can, sub._target, {top: top+100, left: left}) can.page.style(can, sub._target, {top: top+100, left: left})
can.page.style(can, sub._legend, {display: html.BLOCK}) can.page.style(can, sub._legend, {display: html.BLOCK})
@ -138,6 +120,6 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
can.page.ClassList.add(can, sub._target, chat.FLOAT) can.page.ClassList.add(can, sub._target, chat.FLOAT)
}, can._root._target) }, can._root._target)
}) })
}).first }, "ncmd")
}, },
}) })

View File

@ -1,42 +1,15 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME)||can.Conf(aaa.USERNICK)) can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
can.user.info.usernick = can.Conf(aaa.USERNICK) can.onimport._title(can, msg, target)
can.user.info.avatar = msg.Option(aaa.AVATAR) can.onimport._state(can, msg, target)
can.onimport._avatar(can, msg, target)
can.onimport._background(can, msg, target)
can.onimport._search(can, msg, target)
can.onimport._menus(can, msg, target)
can.ondaemon._init(can) can.ondaemon._init(can)
can.onlayout.topic(can, can.Conf("topic"))
if (can.user.mod.isCmd) {
can.onmotion.hidden(can, can._fields)
can.page.ClassList.add(can, can._root._target, "simple")
}
can.onmotion.clear(can)
can.onimport._agent(can, msg, target)
can.onimport._grant(can, msg, target)
if (can.Conf("display") != "simple") {
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
can.onimport._search(can, msg, target)
can.onimport._background(can, msg, target)
can.onimport._avatar(can, msg, target)
can.onimport._menus(can, msg, target)
}
can.base.isFunc(cb) && cb(msg)
}, },
_agent: function(can, msg, target) { if (!msg.Option(nfs.SCRIPT)) { return } _title: function(can, msg, target) { if (can.user.isMobile) { return }
can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) can.core.List(can.base.getValid(msg.result, can.Conf(chat.TITLE)||["shylinux.com/x/contexts"]), function(item) {
},
_grant: function(can, msg, target) {
if (can.misc.Search(can, chat.GRANT)) {
if (can.user.confirm(chat.GRANT+ice.SP+can.misc.Search(can, chat.GRANT))) {
can.run(event, [ctx.ACTION, chat.GRANT, web.SPACE, can.misc.Search(can, chat.GRANT)])
}
can.misc.Search(can, chat.GRANT, "")
}
},
_title: function(can, msg, target) {
!can.user.isMobile && can.core.List(can.base.getValid(msg.result, can.Conf(chat.TITLE)||["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() }, onmouseenter: function(event) { var list = msg.Table()
@ -50,47 +23,36 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
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(msg.Option(chat.STATE)||can.Conf(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) {
if (msg.Option(aaa.AVATAR).indexOf("http") == 0) { 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, msg.Option(aaa.AVATAR), 160)])
} else {
can.onaction.carte(event, can, [can.page.Format(html.IMG, "/share/local/avatar", 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)||"").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) }}])
}) })
}, },
_avatar: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile || !msg.Option(aaa.AVATAR)) { return }
can.page.Modify(can, "div.state.avatar>img", {src: can.onexport.avatar(can)})
},
_background: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile || can.Conf(aaa.BACKGROUND) == "_") { return }
msg.Option(aaa.BACKGROUND) && can.onlayout.background(can, "/share/local/background")
},
_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, "onopensearch", can.request(event, {type: "*", 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").parentNode }}, "", target, "title search")
can.page.Append(can, target, [{type: "search", list: [{view: ["menu", "div", can.user.trans(can, "search")], onclick: function() { can.onimport.menu(can, mdb.SEARCH, function() {
can.onengine.signal(can, "onopensearch", can.request(event, {type: "*", word: ""})) can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: ui.value}))
}}] }]) })
can.user.isMobile && can.page.style(can, ui, {float: html.RIGHT}) can.user.isMobile && can.page.style(can, ui.parentNode, {float: html.RIGHT})
},
_background: function(can, msg) {
if (can.Conf("background") == "_") { return }
if (can.user.isExtension || can.user.isLocalFile) { return }
msg.Option(aaa.BACKGROUND) && can.onlayout.background(can, "/share/local/background", can._root._target)
},
_avatar: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return } if (!msg.Option(aaa.AVATAR)) { return }
if (msg.Option(aaa.AVATAR).indexOf("http") == 0) {
can.page.Modify(can, "div.state.avatar>img", {src: msg.Option(aaa.AVATAR)})
} else {
can.page.Modify(can, "div.state.avatar>img", {src: "/share/local/avatar"})
}
}, },
_menus: function(can, msg, target) { _menus: function(can, msg, target) {
can.setHeaderMenu(can.user.mod.isPod||can.user.isExtension||can.user.isMobile? [ctx.CONFIG]: can.setHeaderMenu(can.user.mod.isPod||can.user.isExtension||can.user.isMobile? [ctx.CONFIG]:
can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), can.onaction._menus), function(event, button) { can.base.Obj(msg.Option(chat.MENUS)||can.Conf(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.toast(can, "执行成功", can.user.trans(can, button)) }) can.run(event, [button], function(msg) { can.user.toastSuccess(can, can.user.trans(can, button)) })
}, {event: event, can: can, button: button}) }, {event: event, can: can, button: button})
}) })
}, },
@ -98,26 +60,27 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
_time: function(can, target) { _time: function(can, target) {
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) }) can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target, function(sub) { can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target, function(sub) {
can.get("Action", "size", function(msg, top) { can.getActionSize(function(msg, top) { can.page.style(can, sub._target, {top: top, right: 0, left: ""}) })
can.page.style(can, sub._target, {top: top, right: 0, left: null})
})
}), target.onmouseenter = target.click }), target.onmouseenter = target.click
}, },
time: function(can, target) { can.onlayout.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")
}, },
topic: function(can, topic) { can.onlayout.topic(can, can._topic = topic) },
background: function(event, can, url) { if (can.user.isExtension || can.user.isLocalFile) { return }
can.run(event, [ctx.ACTION, aaa.BACKGROUND, url], function(msg) { can.onimport._background(can, msg) })
},
avatar: function(event, can, url) { if (can.user.isExtension || can.user.isLocalFile) { return } avatar: function(event, can, url) { if (can.user.isExtension || can.user.isLocalFile) { return }
can.run(event, [ctx.ACTION, aaa.AVATAR, url], function(msg) { can.onimport._avatar(can, msg) }) can.runAction(event, aaa.AVATAR, [url], function(msg) { can.onimport._avatar(can, msg) })
}, },
menu: function(can, cmds, cb, trans) { topic: function(can, topic) { topic && (can._topic = topic)
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) { can.user.topic(can, can._topic || can.misc.Search(can, chat.TOPIC) || Volcanos.meta.args.topic || (can.base.isNight()? chat.BLACK: chat.WHITE))
},
background: function(event, can, url) { if (can.user.isExtension || can.user.isLocalFile) { return }
can.runAction(event, aaa.BACKGROUND, [url], function(msg) { can.onimport._background(can, msg) })
},
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) {
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, cmds) 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)) {
@ -136,9 +99,23 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
}) })
Volcanos(chat.ONPLUGIN, {help: "注册插件", list: [], Volcanos(chat.ONPLUGIN, {help: "注册插件", list: [],
"topic": shy("主题", { "topic": shy("主题", {
"demo": function(can, msg, cmds) { can.onlayout.topic(can, cmds[0]) }, "demo": function(can, msg, cmds) { can.onimport.topic(can, cmds[0]) },
}, ["topic:select=white,black", "run:button", "demo:button"], function(can, msg, cmds) { }, ["topic:select=white,black", "run:button", "demo:button"], function(can, msg, cmds) {
can.onlayout.topic(can, cmds[0]) can.onimport.topic(can, cmds[0])
}),
"cookie": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) {
can.core.Item(can.misc.Cookie(can), function(key, value) {
msg.Push("key", key), msg.Push("value", value)
})
}),
"alert": shy("提示", {}, ["text", "list", "back"], function(can, msg, cmds) {
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) {
console.log(cmds[0])
}), }),
}) })
Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb, target) {
@ -172,6 +149,8 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
return // 登录认证 return // 登录认证
} }
can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {})) 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)
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)
}) })
}, },
@ -187,11 +166,9 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
can.user.jumps(can.misc.MergeURL(can, args, true)) can.user.jumps(can.misc.MergeURL(can, args, true))
}, },
black: function(event, can, button) { can.onlayout.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.onlayout.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.onlayout.topic(can, [chat.WHITE, button]) print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.setRiver(html.HEIGHT, ""), can.setAction(html.HEIGHT, "") },
can.setRiver(html.HEIGHT, -1), can.setAction(html.HEIGHT, -1)
},
webpack: function(event, can) { webpack: function(event, can) {
can.user.input(event, can, [{name: mdb.NAME, value: can.user.title()}], function(ev, button, meta, list) { can.user.input(event, can, [{name: mdb.NAME, value: can.user.title()}], function(ev, button, meta, list) {
can.core.Item(Volcanos.meta.pack, function(key, msg) { can.core.Item(Volcanos.meta.pack, function(key, msg) {
@ -207,7 +184,7 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
var toast = can.user.toastProcess(can, "打包中...", code.WEBPACK) var toast = can.user.toastProcess(can, "打包中...", code.WEBPACK)
can.runAction(event, code.WEBPACK, [], function(msg) { can.runAction(event, code.WEBPACK, [], function(msg) {
toast.close(), can.user.toastSuccess(can, "打包成功", code.WEBPACK) toast.close(), can.user.toastSuccess(can, "打包成功", code.WEBPACK)
can.user.download(can, "/share/local/"+msg.Result(), name, "html") can.user.download(can, "/share/local/"+msg.Result(), name, nfs.HTML)
}) })
}) })
}, },
@ -220,37 +197,36 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
}) })
}, },
carte: function(event, can, list, cb, trans) { can.user.carte(event, can, can.onaction, list, cb) }, carte: function(event, can, list, cb) {
can.user.carte(event, can, can.onaction, list, cb)
},
share: function(event, can, args) { share: function(event, can, args) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(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)]))
[chat.RIVER, can.Conf(chat.RIVER), chat.STORM, can.Conf(chat.STORM)]))
}, },
usernick: function(event, can) { usernick: function(event, can) { if (can.user.mod.isPod || can.user.isExtension || can.user.isLocalFile) { return }
can.user.mod.isPod || can.user.isExtension || can.user.isLocalFile || can.onaction.carte(event, can, ["shareuser", "setnick", "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) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN])
}, },
shareuser: function(event, can) { 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(ev, button, data, list, args) { var ui = can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(ev, button, data, list, args) {
can.run(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)
}, true) })
}) })
can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""}) 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, [{name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}, {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}], function(ev, button, data, list, args) { var ui = can.user.input(event, can, [
if (list[0] != list[1]) { {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO},
can.user.toast(can, "密码不一致") {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO},
ui.focus() ], function(ev, button, data, list, args) {
return true if (list[0] != list[1]) { return can.user.toast(can, "密码不一致"), ui.focus(), true }
} can.runAction(event, aaa.PASSWORD, [list[0]])
can.run(event, [aaa.PASSWORD, list[0]], function(msg) {
can.user.toastSuccess(can)
}, true)
}) })
can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""}) can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""})
}, },
@ -262,4 +238,11 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb
Volcanos(chat.ONEXPORT, {help: "导出数据", list: [], Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight }, height: function(can) { return can._target.offsetHeight },
topic: function(can) { return can._topic }, topic: function(can) { return can._topic },
avatar: function(can) {
if (can.user.info.avatar.indexOf("http") == 0) {
return can.user.info.avatar
} else {
return "/share/local/avatar"
}
},
}) })

View File

@ -240,7 +240,7 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
can.core.Item(value.storm, function(storm, item) { can.core.Item(value.storm, function(storm, item) {
if (word[1] != "" && word[1] != storm && word[1] != item.name) { return } if (word[1] != "" && word[1] != storm && word[1] != item.name) { return }
var data = {ctx: "web.chat", cmd: chat.STORM, var data = {ctx: "can", cmd: "Storm",
type: river, name: storm, text: shy("跳转", function(event) { type: river, name: storm, text: shy("跳转", function(event) {
can.onaction.action(event, can, river, storm) can.onaction.action(event, can, river, storm)
}), }),

View File

@ -29,7 +29,9 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.onengine.signal(can, chat.ONSEARCH, res) can.onengine.signal(can, chat.ONSEARCH, res)
can.run(res, cmds, function(res) { can.onimport._init(can, res, fields) }) can.run(res, cmds, function(res) { can.onimport._init(can, res, fields) })
can.onmotion.show(can), can.onmotion.focus(can, can.ui.word) can.onmotion.show(can), can.onmotion.delay(can, function() {
can.onmotion.focus(can, can.ui.word)
})
}, },
select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1] select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1]
@ -45,12 +47,12 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms
can.getActionSize(function(msg, top, left, width, height) { can.getActionSize(function(msg, top, left, width, height) {
can.page.style(can, can._target, {top: top, left: left}) can.page.style(can, can._target, {top: top, left: left})
can.page.style(can, can._output, html.MAX_HEIGHT, height-71, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN) can.page.style(can, can._output, html.MAX_HEIGHT, height-71, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)
can.page.style(can, can.ui.content, html.MAX_HEIGHT, height/2, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN) can.page.style(can, can.ui.content, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)
can.page.style(can, can.ui.display, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN) can.page.style(can, can.ui.display, html.MAX_WIDTH, width-2*html.PLUGIN_MARGIN)
}) })
}, },
}) })
Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DONE], _init: function(can, cb, target) { Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLOSE, cli.CLEAR, cli.DONE], _init: function(can, cb, target) {
can.onmotion.hidden(can, can._target), can.base.isFunc(cb) && cb() can.onmotion.hidden(can, can._target), can.base.isFunc(cb) && cb()
}, },
onlogin: function(can, msg) { onlogin: function(can, msg) {

View File

@ -86,7 +86,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, me
}) })
Volcanos(chat.ONACTION, {help: "交互操作", list: [ Volcanos(chat.ONACTION, {help: "交互操作", list: [
"刷新数据", "切换全屏", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", [ "刷新数据", "切换全屏", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", [
"其它", "刷新页面", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据", "删除工具","摄像头", "其它", "刷新页面", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据", "删除工具","摄像头",
], ],
], _init: function(can, msg, list, cb, target) {}, ], _init: function(can, msg, list, cb, target) {},
_engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input([], true))) }, _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input([], true))) },
@ -129,18 +129,18 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
"刷新页面": function(event, can) { var sub = can.core.Value(can._outputs, "-1") "刷新页面": function(event, can) { var sub = can.core.Value(can._outputs, "-1")
can.core.CallFunc([sub, chat.ONIMPORT, "_init"], {can: sub, msg: sub._msg, cb: function(msg) {}, target: can._output}) can.core.CallFunc([sub, chat.ONIMPORT, "_init"], {can: sub, msg: sub._msg, cb: function(msg) {}, target: can._output})
}, },
"保存参数": 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) { can.user.copy(event, can, can.onexport.table(can)||can.onexport.board(can)) }, "复制数据": function(event, can) { can.user.copy(event, can, can.onexport.table(can)||can.onexport.board(can)) },
"下载数据": function(event, can) { var meta = can.Conf() "下载数据": function(event, can) { var meta = can.Conf()
can.user.input(event, can, [{name: "filename", value: meta.name}], function(ev, button, data, list) { can.user.input(event, can, [{name: "filename", value: meta.name}], function(ev, button, data, list) {
can.user.downloads(can, can.onexport.table(can), list[0], "csv")||can.user.downloads(can, can.onexport.board(can), meta.name, "txt") can.user.downloads(can, can.onexport.table(can), list[0], nfs.CSV)||can.user.downloads(can, can.onexport.board(can), meta.name, nfs.TXT)
}) })
}, },
"清空数据": function(event, can) { can.onmotion.clear(can, can._output) }, "清空数据": function(event, can) { can.onmotion.clear(can, can._output) },
"删除工具": function(event, can) { can.page.Remove(can, can._target) }, "删除工具": function(event, can) { can.page.Remove(can, can._target) },
"保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) },
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, "打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
"摄像头": function(event, can) { "摄像头": function(event, can) {

View File

@ -72,7 +72,7 @@ var cli = {
SHOW: "show", SHOW: "show",
} }
var nfs = { var nfs = {
ZML: "zml", IML: "iml", ZML: "zml", IML: "iml", TXT: "txt",
HTML: "html", CSS: "css", JS: "js", GO: "go", SH: "sh", CSV: "csv", JSON: "json", HTML: "html", CSS: "css", JS: "js", GO: "go", SH: "sh", CSV: "csv", JSON: "json",
PATH: "path", FILE: "file", LINE: "line", SIZE: "size", PATH: "path", FILE: "file", LINE: "line", SIZE: "size",
SAVE: "save", LOAD: "load", TAGS: "tags", FIND: "find", GREP: "grep", SAVE: "save", LOAD: "load", TAGS: "tags", FIND: "find", GREP: "grep",
@ -183,8 +183,8 @@ var chat = {
ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch", ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch",
ONSIZE: "onsize", ONTOAST: "ontoast", ONREMOTE: "onremote", ONSIZE: "onsize", ONTOAST: "ontoast", ONREMOTE: "onremote",
ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange",
ONSTORM_SELECT: "onstorm_select", ONACTION_TOUCH: "onaction_touch", ONACTION_NOTOOL: "onaction_notool", ONSTORM_SELECT: "onstorm_select", ONACTION_TOUCH: "onaction_touch", ONACTION_NOTOOL: "onaction_notool", ONACTION_CMD: "onaction_cmd",
ONACTION_CMD: "onaction_cmd", ONOPENSEARCH: "onopensearch", ONSEARCHFOCUS: "onsearchfocus", ONCOMMANDFOCUS: "oncommandfocus",
_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",