mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
opt chat
This commit is contained in:
parent
bf2e9f9d34
commit
7e658a4206
14
frame.js
14
frame.js
@ -83,7 +83,7 @@ Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile)
|
||||
})
|
||||
Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
meta.name = (meta.name||"").split(ice.SP)[0].split(ice.PT).pop()
|
||||
field = field||can.onappend.field(can, meta.type, meta, target).first
|
||||
field = field||can.onappend.field(can, meta.type, meta, target)._target
|
||||
var legend = can.page.Select(can, field, html.LEGEND)[0]
|
||||
var option = can.page.Select(can, field, html.FORM_OPTION)[0]
|
||||
var action = can.page.Select(can, field, html.DIV_ACTION)[0]
|
||||
@ -210,7 +210,6 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
]}])
|
||||
},
|
||||
input: function(can, item, value, target, style) {
|
||||
// switch (item.type) { case "": return can.page.Append(can, target, [item]) }
|
||||
if (item.type == html.SPACE) { return can.page.Append(can, target, [{view: can.base.join([html.ITEM, html.SPACE])}]) }
|
||||
var input = can.page.input(can, can.base.Copy({}, item), value)
|
||||
if (item.type == html.SELECT && item.value) { input._init = function(target) { target.value = item.value } }
|
||||
@ -222,7 +221,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
}) } }
|
||||
var br = input.type == html.TEXTAREA? [{type: html.BR, style: {clear: html.BOTH}}]: []
|
||||
var title = can.Conf(can.core.Keys(ctx.FEATURE, chat.TITLE, item.name))||""; title && (input.title = title)
|
||||
return can.page.Append(can, target, ([{view: style||can.base.join([html.ITEM, item.type]), list: [input]}]).concat(br))[item.name]
|
||||
return can.page.Append(can, target, ([{view: can.base.join(style||[html.ITEM, item.type]), list: [input]}]).concat(br))[item.name]
|
||||
},
|
||||
table: function(can, msg, cb, target, sort) { if (msg.Length() == 0) { return } var meta = can.base.Obj(msg.Option(mdb.META))
|
||||
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) {
|
||||
@ -265,6 +264,13 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, _cb, target, field); return res }
|
||||
can.runAction(can.request({}, meta), ctx.COMMAND, [meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, _cb, target, field) })}); return res
|
||||
},
|
||||
_float: function(can, index, args) {
|
||||
can.onappend.plugin(can, {mode: chat.FLOAT, index: index, args: args}, function(sub) {
|
||||
can.getActionSize(function(left, top, width, height) { sub.onimport.size(sub, sub.ConfHeight(height/2), sub.ConfWidth(width))
|
||||
can.onmotion.move(can, sub._target, {left: left||0, top: (top||0)+height/4})
|
||||
}), sub.onaction.close = function() { can.page.Remove(can, sub._target) }
|
||||
}, can._root._target)
|
||||
},
|
||||
figure: function(can, meta, target, cb) { if (meta.action == ice.AUTO || meta.type == html.BUTTON) { return }
|
||||
var input = meta.action||mdb.KEY, path = chat.PLUGIN_INPUT+input+nfs._JS; can.require([path], function(can) {
|
||||
function _cb(sub, value, old) { if (value == old) { return } can.base.isFunc(cb)? cb(sub, value, old): target.value = value||"", can.onmotion.delay(can, function() { can.onmotion.focus(can, target) }) }
|
||||
@ -402,7 +408,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) {
|
||||
} }, _init: function(target) { item && can.onappend.figure(can, item, target), can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) }}])
|
||||
},
|
||||
tableFilter: function(can, target, value) { can.page.Select(can, target, html.TR, function(tr, index) {
|
||||
index == 0 && can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(value) > -1) { return td } }) == 0)
|
||||
index > 0 && can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(value) > -1) { return td } }) == 0)
|
||||
}) },
|
||||
|
||||
delay: function(can, cb, interval) { can.core.Timer(interval||30, cb) },
|
||||
|
@ -141,7 +141,7 @@ Volcanos("base", {
|
||||
if (str.indexOf(pre) == -1) { return str } return str.slice(pre.length)
|
||||
},
|
||||
trimSuffix: function(str, end) { var index = str.lastIndexOf(end); if (index == -1 || index+end.length != str.length) { return str } return str.slice(0, index) },
|
||||
join: function(list, sp) { return (list||[]).join(sp||ice.SP) },
|
||||
join: function(list, sp) { return typeof list == lang.STRING? list: (list||[]).join(sp||ice.SP) },
|
||||
joins: function(list, inner, outer) { for (var i = 0; i < list.length; i++) { list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(inner||ice.FS) } return list.join(outer||ice.SP) },
|
||||
joinKV: function(list, inner, outer) { var res = []; for (var i = 0; i < list.length-1; i += 2) { res.push(list[i]+(inner||": ")+list[i+1]) } return res.join(outer||ice.SP) },
|
||||
count: function(str, s) { var n = 0; for (var i = 0; i < str.length; i++) { if (str[i] == s) { n++ } } return n },
|
||||
|
@ -92,7 +92,7 @@ Volcanos("page", {ClassList: {
|
||||
} else if (type == html.TEXTAREA) { data.placeholder = can.user.trans(can, (data.placeholder||data.name||"").split(ice.PT).pop()) }
|
||||
|
||||
!data.name && item.name && (data.name = item.name); var node = can.page.Create(can, type, data)
|
||||
value[name||""] = value[data.className||""] = value[type] = node, value._target = value._target||node, value.first = value.first||node, value.last = node
|
||||
value[name||""] = value[can.core.Split(data.className)[0]||""] = value[type] = node, value._target = value._target||node, value.first = value.first||node, value.last = node
|
||||
item.list && can.page.Append(can, node, item.list, value), target && target.appendChild && target.appendChild(node), can.base.isFunc(item._init) && item._init(node, value)
|
||||
}); return value
|
||||
},
|
||||
@ -142,6 +142,9 @@ Volcanos("page", {ClassList: {
|
||||
inputs: function(can, list) {
|
||||
var _list = []; for (var i = 0; i < list.length; i++) { switch (list[i]) {
|
||||
case "": _list.push(""); break
|
||||
case ice.RUN:
|
||||
_list.push({type: html.BUTTON, name: ice.RUN})
|
||||
break
|
||||
case ice.AUTO:
|
||||
_list.push({type: html.BUTTON, name: ice.LIST})
|
||||
_list.push({type: html.BUTTON, name: ice.BACK})
|
||||
@ -188,7 +191,7 @@ Volcanos("page", {ClassList: {
|
||||
} return input
|
||||
},
|
||||
|
||||
replace: function(can, text, key, value) { return can.base.replaceAll(text, "<", "<", ">", ">", key, value) },
|
||||
replace: function(can, text, key, value) { return can.base.replaceAll(text, "<", "<", ">", ">", key, value) },
|
||||
Format: function(type) { var args = arguments; switch (type) {
|
||||
case html.A: return "<a href='"+args[1]+"' target='_blank'>"+(args[2]||args[1])+"</a>"
|
||||
case html.IMG: return args[2]? "<img src='"+args[1]+"' height="+args[2]+">": "<img src='"+args[1]+"'>"
|
||||
@ -232,7 +235,7 @@ Volcanos("page", {ClassList: {
|
||||
},
|
||||
|
||||
insertBefore: function(can, list, before, parent) { parent = parent||before.parentNode
|
||||
var item = can.base.isArray(list)? can.page.Append(can, parent, list).first: list
|
||||
var item = can.base.isArray(list)? can.page.Append(can, parent, list)._target: list
|
||||
return before && parent.insertBefore(item, before), item
|
||||
},
|
||||
styleDisplay: function(can, target, value) { return can.page.style(can, target, html.DISPLAY, value), target.style.display },
|
||||
|
@ -51,7 +51,7 @@ Volcanos("user", {info: {}, agent: {
|
||||
if (can.user.language(can) == "en") { return text } if (can.base.isString(list)) { return list }
|
||||
return list&&list[text] || can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || {
|
||||
"plugin": "插件", "label": "标签", "height": "高度", "width": "宽度", "show": "显示", "hide": "隐藏", "project": "项目", "profile": "详情", "actions": "参数",
|
||||
"create": "创建", "remove": "删除", "insert": "添加", "delete": "删除", "modify": "修改", "prunes": "清理", "export": "导出", "import": "导入",
|
||||
"create": "创建", "remove": "删除", "insert": "添加", "delete": "删除", "modify": "修改", "prunes": "清理", "export": "导出", "import": "导入", "search": "搜索",
|
||||
"link": "链接", "copy": "复制", "edit": "编辑", "save": "保存", "trash": "删除", "share": "共享", "toimage": "截图", "download": "下载", "upload": "上传",
|
||||
"run": "执行", "list": "查看", "back": "返回", "prev": "上一页", "next": "下一页",
|
||||
"source": "源码", "module": "模块", "action": "操作", "recent": "最近",
|
||||
@ -102,7 +102,7 @@ Volcanos("user", {info: {}, agent: {
|
||||
if (navigator.clipboard) { var ok = false; navigator.clipboard.writeText(text).then(function() { ok = true })
|
||||
if (ok) { return can.user.toastSuccess(can, text, "copy success"), can.misc.Log("copy", text), text }
|
||||
}
|
||||
var input = can.page.Append(can, event.target.parentNode, [{type: html.TEXTAREA, value: text}]).first
|
||||
var input = can.page.Append(can, event.target.parentNode, [{type: html.TEXTAREA, value: text}])._target
|
||||
can.onmotion.focus(can, input), document.execCommand("Copy"), can.page.Remove(can, input)
|
||||
return can.user.toastSuccess(can, text, "copy success"), can.misc.Log("copy", text), text
|
||||
},
|
||||
@ -146,7 +146,7 @@ Volcanos("user", {info: {}, agent: {
|
||||
})}]}, html.ACTION,
|
||||
]}])
|
||||
var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, {
|
||||
focus: function() { can.onmotion.focus(can, can.page.Select(can, ui.first, html.INPUT_ARGS)[0]) },
|
||||
focus: function() { can.onmotion.focus(can, can.page.Select(can, ui._target, html.INPUT_ARGS)[0]) },
|
||||
cancel: function() { can.page.Remove(can, ui._target) },
|
||||
submit: function(event, can, button) { var args = [], data = {}, err = false
|
||||
var list = can.page.Select(can, ui.table, html.OPTION_ARGS, function(item) {
|
||||
@ -186,7 +186,7 @@ Volcanos("user", {info: {}, agent: {
|
||||
}); can.page.Select(can, ui.action, html.INPUT_FILE)[0].click(), silent && can.onmotion.hidden(can, ui._target); return action
|
||||
},
|
||||
download: function(can, path, name, ext) {
|
||||
var a = can.page.Append(can, can._root._target, [{type: html.A, href: path, download: can.core.Keys(name, ext)||path.split(ice.PS).pop()}]).first
|
||||
var a = can.page.Append(can, can._root._target, [{type: html.A, href: path, download: can.core.Keys(name, ext)||path.split(ice.PS).pop()}])._target
|
||||
return a.click(), can.page.Remove(can, a), path
|
||||
},
|
||||
downloads: function(can, text, name, ext) { if (!text) { return }
|
||||
|
127
panel/action.js
127
panel/action.js
@ -1,47 +1,37 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can)
|
||||
var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM); can.core.Next(msg.Table(), function(item, next) {
|
||||
item.type = chat.PLUGIN, item.inputs = can.base.Obj(item.inputs||item.list), item.feature = can.base.Obj(item.feature||item.meta)
|
||||
if (can.misc.Debug(can, chat.PLUGIN, item.index, item.args, item)) { debugger }
|
||||
can.onappend.plugin(can, item, function(sub, meta, skip) { can.onimport._run(can, sub, function(event, cmds, cb) {
|
||||
return can.run(event, can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb)
|
||||
}), can.onimport._tabs(can, sub, meta), skip || next() })
|
||||
})
|
||||
},
|
||||
_share: function(can, share) { share && can.run({}, [web.SHARE, share], function(msg) {
|
||||
can.user.mod.isCmd = true, msg.Length() > 1? can.onlayout._init(can): can.onengine.signal(can, chat.ONACTION_CMD)
|
||||
can.user.title(msg.SearchOrOption(chat.TITLE)), can.setHeader(chat.TOPIC, msg.SearchOrOption(chat.TOPIC))
|
||||
msg.Length() > 1? can.onlayout._init(can): can.onengine.signal(can, chat.ONACTION_CMD)
|
||||
can.Conf(chat.RIVER, web.SHARE, chat.STORM, share), can.onimport._init(can, msg)
|
||||
can.user.mod.isCmd = true
|
||||
}) },
|
||||
_cmd: function(can, item, next) { can.base.Copy(item, {type: chat.PLUGIN, mode: chat.CMD, opts: can.misc.Search(can)}), can.onengine.signal(can, chat.ONACTION_CMD)
|
||||
if (can.misc.Debug(can, chat.PLUGIN, item.index, item.args, item)) { debugger }
|
||||
can.onappend.plugin(can, item, function(sub, meta, skip) { can.onimport._run(can, sub, function(event, cmds, cb) {
|
||||
return can.runActionCommand(event, sub._index, cmds, cb)
|
||||
}), can.user.title(meta.name), skip || next() })
|
||||
can.onlayout._init(can)
|
||||
}), can.user.title(meta.name), skip || next() }), can.onlayout._init(can)
|
||||
},
|
||||
_run: function(can, sub, cbs) {
|
||||
sub.run = function(event, cmds, cb) { (!cmds || cmds[0] != ctx.ACTION) && sub.request(event, {height: sub.ConfHeight(), width: sub.ConfWidth()})
|
||||
return cbs(event, cmds, cb)
|
||||
}, can._plugins = can.misc.concat(can, can._plugins, [sub])
|
||||
sub.Mode(can.Mode()), sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth())
|
||||
can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth())
|
||||
sub.Mode(can.Mode()), sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth())
|
||||
},
|
||||
_tabs: function(can, sub, meta) {
|
||||
var tabs = [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) {
|
||||
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs)
|
||||
var tabs = [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs)
|
||||
can.onmotion.select(can, can._action, html.DIV_TABS, sub._tabs), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target)
|
||||
if (sub._delay_refresh) { sub._delay_refresh = false, sub.onaction._resize(sub, can.Conf(chat.LAYOUT) == "", can.ConfHeight(), can.ConfWidth()) }
|
||||
}, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}]
|
||||
sub._header_tabs = can.page.Append(can, can._header_tabs, tabs).first, sub._tabs = can.page.Append(can, can._action, tabs).first
|
||||
sub._header_tabs = can.page.Append(can, can._header_tabs, tabs)._target, sub._tabs = can.page.Append(can, can._action, tabs)._target
|
||||
},
|
||||
_menu: function(can, msg) { if (can.user.isMobile || can.user.mod.isPod) { return }
|
||||
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, html.ACTION, function(target) {
|
||||
can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS]).first)
|
||||
})
|
||||
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, html.ACTION, function(target) { can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS])._target) })
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can)
|
||||
@ -64,11 +54,8 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can)
|
||||
}, _engine: {},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {_init: function(can, target) {
|
||||
can.Conf(html.MARGIN_X, (can.user.isMobile? 2: 4)*html.PLUGIN_MARGIN)
|
||||
can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN)
|
||||
|
||||
if (can.user.isMobile || can.user.mod.isPod) { var gt = "❯", lt = "❮"
|
||||
function toggle(view) { return can.onmotion.toggle(can, can._root.River._target) }
|
||||
can.Conf(html.MARGIN_X, (can.user.isMobile? 2: 4)*html.PLUGIN_MARGIN), can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN)
|
||||
if (can.user.isMobile || can.user.mod.isPod) { 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) {
|
||||
event.target.innerHTML = toggle()? gt: lt, can.onaction.layout(can, can.Conf(chat.LAYOUT))
|
||||
}}])
|
||||
@ -125,28 +112,21 @@ Volcanos(chat.ONACTION, {_init: function(can, target) {
|
||||
can.page.style(can, can._target, html.HEIGHT, can.page.height(), html.WIDTH, can.page.width())
|
||||
can.page.ClassList.add(can, can._target, can.Mode(chat.CMD)), can.page.ClassList.add(can, can._root._target, chat.SIMPLE)
|
||||
},
|
||||
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._header_tabs, html.DIV_TABS, parseInt(event.key)-1)
|
||||
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, parseInt(event.key)-1)
|
||||
}
|
||||
},
|
||||
onresize: function(can, height, width) {
|
||||
can.onlayout._init(can), can.onaction.layout(can, can.Conf(chat.LAYOUT))
|
||||
window.setsize && window.setsize(can.page.width(), can.page.height())
|
||||
},
|
||||
onkeydown: function(can, msg) { var event = msg._event; if (event.ctrlKey && event.key >= "1" && event.key <= "9") { var index = parseInt(event.key)-1
|
||||
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, index), can.onmotion.select(can, can._action, html.DIV_TABS, index)
|
||||
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, index)
|
||||
} },
|
||||
onresize: function(can, height, width) { can.onlayout._init(can), can.onaction.layout(can, can.Conf(chat.LAYOUT)), window.setsize && window.setsize(can.page.width(), can.page.height()) },
|
||||
onsize: function(can, msg, height, width) { can.Conf({height: height-can.Conf(html.MARGIN_Y), width: width-can.Conf(html.MARGIN_X)}) },
|
||||
onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } },
|
||||
onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") },
|
||||
|
||||
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.add(can, can._target, can.Conf(chat.LAYOUT, button))
|
||||
can._header_tabs && can.onmotion.hidden(can, can._header_tabs)
|
||||
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 = "" } else { can.page.ClassList.add(can, can._target, can.Conf(chat.LAYOUT, button)) }
|
||||
can.user.isMobile || can.isCmdMode() || (can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true))
|
||||
can.user.isMobile && can.isCmdMode() && can.page.style(can, can._target, html.WIDTH, "", html.HEIGHT, "")
|
||||
can.onlayout._init(can); var cb = can.onlayout[button]; if (can.base.isFunc(cb) && cb(can, silent)) { return } can.onlayout._plugin(can, button)
|
||||
can.onlayout._init(can), can._header_tabs && can.onmotion.hidden(can, can._header_tabs)
|
||||
var cb = can.onlayout[button]; can.base.isFunc(cb) && cb(can, silent) || can.onlayout._plugin(can, button)
|
||||
},
|
||||
help: function(can, button) { can.user.open("/help/"+button+".shy") },
|
||||
})
|
||||
@ -162,12 +142,10 @@ Volcanos(chat.ONLAYOUT, {
|
||||
can.onmotion.select(can, can._action, html.DIV_TABS) || can.onmotion.select(can, can._action, html.DIV_TABS, 0, function(target) { target.click() })
|
||||
return true
|
||||
},
|
||||
horizon: function(can) {
|
||||
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
|
||||
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)
|
||||
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) })
|
||||
},
|
||||
free: function(can) {
|
||||
@ -177,19 +155,12 @@ Volcanos(chat.ONLAYOUT, {
|
||||
grid: function(can, silent) {
|
||||
return can.user.input(event, can, [{name: "m", value: 2}, {name: "n", value: 2}], function(data) { can.onlayout._grid(can, parseInt(data.m), parseInt(data.n)) }, silent), true
|
||||
},
|
||||
_grid: function(can, m, n) {
|
||||
can.getActionSize(function(height, width) {
|
||||
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.onlayout._plugin(can, "grid")
|
||||
})
|
||||
},
|
||||
_plugin: function(can, button) {
|
||||
can.core.List(can._plugins, function(sub) {
|
||||
sub.onaction._resize(sub, button == "" || button == "free" || button == "flow", can.ConfHeight(), can.ConfWidth())
|
||||
button == "" && can.page.style(can, sub._output, html.MAX_HEIGHT, "")
|
||||
})
|
||||
},
|
||||
_grid: function(can, m, n) { can.getActionSize(function(height, width) { 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.onlayout._plugin(can, "grid")
|
||||
}) },
|
||||
_plugin: function(can, button) { can.core.List(can._plugins, function(sub) {
|
||||
sub.onaction._resize(sub, button == "" || button == "free" || button == "flow", can.ConfHeight(), can.ConfWidth()), button == "" && can.page.style(can, sub._output, html.MAX_HEIGHT, "")
|
||||
}) },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {
|
||||
size: function(can, msg) {
|
||||
@ -202,24 +173,15 @@ Volcanos(chat.ONEXPORT, {
|
||||
msg.Option(html.SCROLL, can.user.isMobile? can._target.parentNode.parentNode.scrollTop: can._output.scrollTop)
|
||||
},
|
||||
layout: function(can, msg) { return can.Conf(chat.LAYOUT) },
|
||||
args: function(can, msg, cb, target) {
|
||||
can.core.Next(can._plugins, function(sub, next, index, array) {
|
||||
cb(can.page.SelectArgs(can, sub._option, "", function(target) { return target.value }), sub, next, index, array)
|
||||
})
|
||||
},
|
||||
args: function(can, msg, cb, target) { can.core.Next(can._plugins, function(sub, next, index, array) {
|
||||
cb(can.page.SelectArgs(can, sub._option, "", function(target) { return target.value }), sub, next, index, array)
|
||||
}) },
|
||||
plugin: function(can, msg, word) { var fields = can.core.Split(msg.Option(ice.MSG_FIELDS))
|
||||
can.core.List(can._plugins, function(sub) { var meta = sub.Conf(); if (meta.index.indexOf(word[1]) == -1) { return }
|
||||
var data = {ctx: "can", cmd: "Action",
|
||||
type: mdb.PLUGIN, name: sub._legend.innerHTML, text: shy("跳转", function(event) { sub.Focus() }),
|
||||
var data = {ctx: ice.CAN, cmd: "Action", type: mdb.PLUGIN, name: sub._legend.innerHTML, text: shy("跳转", function(event) { sub.Focus() }),
|
||||
argument: JSON.stringify(can.page.SelectArgs(can, sub._option, "", function(target) { return target.value })),
|
||||
}
|
||||
if (meta.index) {
|
||||
data.context = "", data.command = meta.index
|
||||
} else if (meta.cmd) {
|
||||
data.context = meta.ctx, data.command = meta.cmd
|
||||
} else {
|
||||
return
|
||||
} msg.Push(data, fields)
|
||||
}; if (meta.index) { data.context = "", data.command = meta.index } else if (meta.cmd) { data.context = meta.ctx, data.command = meta.cmd } else { return }
|
||||
msg.Push(data, fields)
|
||||
})
|
||||
},
|
||||
})
|
||||
@ -238,28 +200,25 @@ Volcanos(chat.ONENGINE, {_engine: function(event, sup, msg, can, cmds, cb) {
|
||||
}), can.base.isFunc(cb) && cb(msg) } return true
|
||||
}})
|
||||
Volcanos(chat.ONPLUGIN, {
|
||||
"command": shy("插件列表", {}, [], function(can, msg, arg) {
|
||||
var meta = can.onengine.plugin.meta
|
||||
can.core.Item(word[1] == ""? meta: meta[word[1]]? kit.Dict(word[1], meta[word[1]]): {}, function(name, command) {
|
||||
msg.Push(kit.Dict(ice.CTX, ice.CAN, ice.CMD, ctx.COMMAND,
|
||||
mdb.TYPE, ice.CAN, mdb.NAME, name, mdb.TEXT, command.help,
|
||||
ctx.CONTEXT, ice.CAN, ctx.COMMAND, name, ctx.INDEX, can.core.Keys(ice.CAN, name),
|
||||
), msg.Option(ice.MSG_FIELDS).split(ice.FS))
|
||||
})
|
||||
}),
|
||||
"plugin": shy("默认插件", {}, ["name", "list", "back"], function(can, msg, arg) {
|
||||
can.misc.Log("what", msg, arg)
|
||||
"command": shy("插件列表", {}, [], function(can, msg, arg) { var meta = can.onengine.plugin.meta
|
||||
can.core.Item(arg[0] == ""? meta: meta[arg[0]]? kit.Dict(arg[0], meta[arg[0]]): {}, function(name, command) {
|
||||
msg.Push(kit.Dict(ice.CTX, ice.CAN, ice.CMD, ctx.COMMAND,
|
||||
mdb.TYPE, ice.CAN, mdb.NAME, name, mdb.TEXT, command.help,
|
||||
ctx.CONTEXT, ice.CAN, ctx.COMMAND, name, ctx.INDEX, can.core.Keys(ice.CAN, name),
|
||||
), msg.Option(ice.MSG_FIELDS).split(ice.FS))
|
||||
})
|
||||
}),
|
||||
"plugin": shy("默认插件", {}, [mdb.NAME, ice.LIST, ice.BACK]),
|
||||
"parse": shy("生成网页", {
|
||||
"show": function(can, msg, cmds) { var name = cmds[1]||"can"; can.isCmdMode() && can.user.title(name)
|
||||
cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, ["/plugin/story/parse.js"], function(sub) {
|
||||
"show": function(can, msg, cmds) { var name = cmds[1]||ice.CAN; can.isCmdMode() && can.user.title(name)
|
||||
cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, [chat.PLUGIN_STORY+"parse.js"], function(sub) {
|
||||
sub.run = can.run, sub.Option = function() {}
|
||||
can.isCmdMode() && sub.ConfHeight(can.page.height())
|
||||
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)
|
||||
})
|
||||
},
|
||||
}, ["text", "name", "show:button@auto", "clear:button"]),
|
||||
}, [mdb.TEXT, mdb.NAME, "show:button@auto", "clear:button"]),
|
||||
"nfs.save": shy("保存文件", {
|
||||
"save": function(can, msg, cmds) { can.user.downloads(can, cmds[1], cmds[0]) }
|
||||
}, ["file=hi.txt", "text:textarea='hello world'", "save:button"]),
|
||||
|
123
panel/footer.js
123
panel/footer.js
@ -1,15 +1,10 @@
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, target) {
|
||||
can.onmotion.clear(can)
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
can.onimport._title(can, msg, target)
|
||||
can.onimport._state(can, msg, target)
|
||||
can.onimport._toast(can, msg, target)
|
||||
can.onimport._command(can, msg, target)
|
||||
},
|
||||
_title: function(can, msg, target) { if (can.user.isMobile) { return }
|
||||
can.core.List(msg.result, function(item) {
|
||||
can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}])
|
||||
})
|
||||
},
|
||||
_title: function(can, msg, target) { can.user.isMobile || can.core.List(msg.result, function(item) { can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}]) }) },
|
||||
_state: function(can, msg, target) {
|
||||
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: [
|
||||
@ -17,98 +12,48 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, target)
|
||||
], onclick: function(event) { can.onexport[item](can) }}])
|
||||
})
|
||||
},
|
||||
_toast: function(can, msg, target) {
|
||||
can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport["ntip"](can) }}]).first
|
||||
},
|
||||
_command: function(can, msg, target) {
|
||||
can.onappend.input(can, {type: html.TEXT, name: ice.CMD, onkeydown: function(event) {
|
||||
can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return }
|
||||
switch (event.target.value) {
|
||||
case cli.CLOSE: can.cli && can.cli.close(); break
|
||||
case cli.CLEAR: can.cli && can.cli.close(); break
|
||||
default:
|
||||
can.runAction(event, ice.RUN, can.core.Split(event.target.value, ice.SP), function(msg) { can.cli && can.cli.close()
|
||||
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")
|
||||
},
|
||||
|
||||
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.page.Modify(can, can.toast, [time, title, content].join(ice.SP))
|
||||
can.onimport.count(can, "ntip")
|
||||
},
|
||||
count: function(can, name) {
|
||||
can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) {
|
||||
item.innerHTML = can.Conf(name, parseInt(can.Conf(name)||"0")+1+"")+""
|
||||
})
|
||||
},
|
||||
ncmd: function(can, msg, _follow, _cmds) { can._cmds = can._cmds||can.request()
|
||||
can._cmds.Push({time: can.base.Time(), follow: _follow, cmds: _cmds})
|
||||
can.onimport.count(can, "ncmd")
|
||||
},
|
||||
_toast: function(can, msg, target) { can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport["ntip"](can) }}])._target },
|
||||
_command: function(can, msg, target) { can.onappend.input(can, {type: html.TEXT, name: ice.CMD, onkeydown: function(event) { can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return } switch (event.target.value) {
|
||||
case cli.CLOSE: can.cli && can.cli.close(); break
|
||||
case cli.CLEAR: can.cli && can.cli.close(); break
|
||||
default:
|
||||
can.runAction(event, ice.RUN, can.core.Split(event.target.value, ice.SP), function(msg) { can.cli && can.cli.close(); var ui = can.onexport.float(can, msg, "cli")
|
||||
can.getActionSize(function(left, top, height, width) { can.page.style(can, ui._target, html.LEFT, left, html.RIGHT, "", html.BOTTOM, can.onexport.height(can)) })
|
||||
})
|
||||
} }}, "", target, [chat.TITLE, ice.CMD]) },
|
||||
count: function(can, name) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { item.innerHTML = can.Conf(name, parseInt(can.Conf(name)||"0")+1+"")+"" }) },
|
||||
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.onimport.count(can, "ntip"), can.page.Modify(can, can.toast, [time, title, content].join(ice.SP)) },
|
||||
ncmd: function(can, msg, _follow, _cmds) { can._cmds = can._cmds||can.request(), can._cmds.Push({time: can.base.Time(), follow: _follow, cmds: _cmds}), can.onimport.count(can, "ncmd") },
|
||||
})
|
||||
Volcanos(chat.ONACTION, {help: "交互数据", _init: function(can, cb) {
|
||||
if (can.user.mod.isPod || can.user.isExtension) { can.onmotion.hidden(can) }
|
||||
can.base.isFunc(cb) && cb()
|
||||
},
|
||||
onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onimport._init(can, msg, can._output) }) },
|
||||
Volcanos(chat.ONACTION, {_init: function(can) { if (can.user.isExtension || can.user.mod.isPod) { can.onmotion.hidden(can) } },
|
||||
onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onmotion.clear(can), can.onimport._init(can, msg, can._output) }) },
|
||||
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}) },
|
||||
onaction_cmd: function(can, msg) { can.onmotion.hidden(can) },
|
||||
oncommand_focus: 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", html.INPUT], function(target) { can.onmotion.focus(can, target) }) },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {help: "导出数据",
|
||||
height: function(can) { return can._target.offsetHeight },
|
||||
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); can[name] = ui
|
||||
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.page.style(can, ui.first, html.RIGHT, 0, html.BOTTOM, can.onexport.height(can))
|
||||
Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight },
|
||||
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); can[name] = ui
|
||||
ui.close = function() { can.page.Remove(can, ui._target), delete(can[name]) }, ui.refresh = function() { ui.close(), can.toast.click() }
|
||||
can.getActionSize(function(left, top, height, width) { can.page.style(can, ui._target, 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, web.REFRESH, {input: html.TEXT, placeholder: "filter", onkeydown: function(event) {
|
||||
can.onkeymap.input(event, can); if (event.key != lang.ENTER) { return }
|
||||
can.onmotion.tableFilter(can, ui.output, event.target.value)
|
||||
can.onmotion.focus(can, event.target)
|
||||
can.onappend._action(can, [cli.CLOSE, web.REFRESH, {input: html.TEXT, placeholder: "filter", onkeydown: function(event) { can.onkeymap.input(event, can)
|
||||
event.key == lang.ENTER && (can.onmotion.tableFilter(can, ui.output, event.target.value), can.onmotion.focus(can, event.target))
|
||||
}}], ui.action, ui)
|
||||
|
||||
can.onappend.table(can, msg, function(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 ui
|
||||
},
|
||||
ntip: function(can) { can.onexport.float(can, can._tips, "ntip", function(value, key, index, line) {
|
||||
can.onappend.plugin(can, {type: chat.SRORY, mode: chat.FLOAT, index: "web.code.inner", args: ["usr/volcanos/"].concat(line.fileline.split(ice.DF))}, function(sub) {
|
||||
can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0
|
||||
sub.onimport.size(sub, sub.ConfHeight(height/2), sub.ConfWidth(width))
|
||||
can.onmotion.move(can, sub._target, {left: left, top: top+height/4})
|
||||
}), sub.onaction.close = function() { can.page.Remove(can, sub._target) }
|
||||
}, can._root._target)
|
||||
ntip: function(can) { can.onexport.float(can, can._tips, "ntip", function(value, key, index, line) { can.onappend._float(can, "web.code.inner", ["usr/volcanos/"].concat(line.fileline.split(ice.DF))) }) },
|
||||
ncmd: function(can) { can.onexport.float(can, can._cmds, "ncmd", function(value, key, index, line) {
|
||||
var cmds = can.base.Obj(line.cmds); switch (line.follow) {
|
||||
case "can.Action": cmds = cmds.slice(2); break
|
||||
case "can.Footer": cmds = cmds.slice(2); break
|
||||
}
|
||||
switch (cmds[0]) {
|
||||
case "web.wiki.word": cmds = cmds.slice(5); break
|
||||
}
|
||||
can.onappend._float(can, cmds[0], cmds.slice(1))
|
||||
}) },
|
||||
ncmd: function(can) {
|
||||
can.onexport.float(can, can._cmds, "ncmd", function(value, key, index, line) {
|
||||
var cmds = can.base.Obj(line.cmds); switch (line.follow) {
|
||||
case "can.Action": cmds = cmds.slice(2); break
|
||||
case "can.Footer": cmds = cmds.slice(2); break
|
||||
}
|
||||
switch (cmds[0]) {
|
||||
case "web.wiki.word": cmds = cmds.slice(5); break
|
||||
}
|
||||
|
||||
can.getActionSize(function(msg, left, top, width, height) {
|
||||
can.onappend.plugin(can, {type: "story", mode: chat.FLOAT, index: cmds[0], args: cmds.slice(1)}, function(sub) {
|
||||
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)
|
||||
sub.onmotion.move(sub, sub._target, {left: left, top: top+120})
|
||||
}, can._root._target)
|
||||
})
|
||||
})
|
||||
},
|
||||
})
|
||||
|
219
panel/header.js
219
panel/header.js
@ -1,23 +1,18 @@
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) {
|
||||
can.onmotion.clear(can)
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, target) {
|
||||
can.onimport._title(can, msg, target)
|
||||
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.base.isFunc(cb) && cb(msg)
|
||||
},
|
||||
_title: function(can, msg, target) { if (can.user.isMobile) { return }
|
||||
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.onaction.title(event, can)
|
||||
}}])
|
||||
can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}])
|
||||
})
|
||||
},
|
||||
_state: function(can, msg, target) { if (can.user.isMobile) { return }
|
||||
can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [mdb.TIME, aaa.USERNICK]), function(item) {
|
||||
can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [aaa.USERNICK, mdb.TIME]).reverse(), function(item) {
|
||||
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.onaction.carte(event, can, [can.page.Format(html.IMG, can.onexport.avatar(can), 160)])
|
||||
@ -28,168 +23,71 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
||||
}, _init: function(target) { item == mdb.TIME && can.onimport._time(can, target) }}])
|
||||
})
|
||||
},
|
||||
_avatar: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { 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) { return }
|
||||
can.onlayout.background(can, can.onexport.background(can))
|
||||
},
|
||||
_avatar: function(can, msg) { can.user.isExtension || can.user.isLocalFile || can.page.Modify(can, "div.state.avatar>img", {src: can.onexport.avatar(can)}) },
|
||||
_background: function(can, msg) { can.user.isExtension || can.user.isLocalFile || can.onlayout.background(can, can.onexport.background(can)) },
|
||||
_search: function(can, msg, target) {
|
||||
var ui = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) {
|
||||
can.onkeymap.input(event, can); switch (event.key) {
|
||||
case lang.ENTER: can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: event.target.value||""}))
|
||||
}
|
||||
}}, "", target, "title search"); can._search = ui, can.user.isMobile || can.onimport.menu(can, mdb.SEARCH, function() {
|
||||
can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: ui.value||""}))
|
||||
})
|
||||
can._search = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) { can.onkeymap.input(event, can)
|
||||
event.key == lang.ENTER && can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: event.target.value||""}))
|
||||
}}, "", target, [chat.TITLE, mdb.SEARCH])
|
||||
can.user.isMobile || can.onimport.menu(can, mdb.SEARCH, function() { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: can._search.value||""})) })
|
||||
},
|
||||
_menus: function(can, msg, target) { if (can.user.mod.isPod || can.user.isMobile) { return }
|
||||
can.setHeaderMenu(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.run(event, [button], function(msg) { can.user.toastSuccess(can, button) })
|
||||
}, {event: event, can: can, button: button})
|
||||
})
|
||||
can.core.CallFunc(can.onaction[button]||function(event, can) { can.runAction(event, button, [], function(msg) { can.user.toastSuccess(can, button) }) }, {event: event, can: can, button: button})
|
||||
})
|
||||
},
|
||||
|
||||
_time: function(can, target) {
|
||||
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
|
||||
_time: function(can, target) { can.core.Timer({interval: 100}, function() { can.onimport.time(can, target) })
|
||||
can.onappend.figure(can, {action: "date"}, target), target.onmouseenter = target.click
|
||||
},
|
||||
time: function(can, target) {
|
||||
can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")
|
||||
},
|
||||
time: function(can, target) { can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") },
|
||||
avatar: function(event, can, avatar) { if (can.user.isExtension || can.user.isLocalFile) { return }
|
||||
can.runAction(event, aaa.AVATAR, [avatar], function(msg) {
|
||||
can.user.info.avatar = avatar, can.onimport._avatar(can, msg), can.user.toastSuccess(can)
|
||||
})
|
||||
can.runAction(event, aaa.AVATAR, [avatar], function(msg) { can.user.info.avatar = avatar, can.onimport._avatar(can, msg), can.user.toastSuccess(can) })
|
||||
},
|
||||
background: function(event, can, background) { if (can.user.isExtension || can.user.isLocalFile) { return }
|
||||
can.runAction(event, aaa.BACKGROUND, [background], function(msg) {
|
||||
can.user.info.background = background, can.onimport._background(can, msg), can.user.toastSuccess(can)
|
||||
})
|
||||
can.runAction(event, aaa.BACKGROUND, [background], function(msg) { 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])
|
||||
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)) {
|
||||
return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) {
|
||||
can.base.isFunc(cb) && cb(event, item, [item])
|
||||
}}
|
||||
|
||||
} else if (can.base.isArray(item)) {
|
||||
var list = can.core.List(item, function(value, index) { return can.user.trans(can, value, trans) })
|
||||
if (can.base.isString(item)) { return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) { can.base.isFunc(cb) && cb(event, item, [item]) }} }
|
||||
if (can.base.isArray(item)) { var list = can.core.List(item, function(value, index) { return can.user.trans(can, value, trans) })
|
||||
return {view: [html.MENU, html.DIV, can.user.trans(can, list[0], trans)], onmouseenter: function(event) {
|
||||
can.onaction.carte(event, can, list.slice(1), function(event, button, meta, index) {
|
||||
can.base.isFunc(cb) && cb(event, item[index+1], item)
|
||||
}, trans)
|
||||
can.onaction.carte(event, can, list.slice(1), function(event, button, meta, index) { can.base.isFunc(cb) && cb(event, item[index+1], item) }, trans)
|
||||
}}
|
||||
|
||||
} else if (can.base.isObject(item)) {
|
||||
return item
|
||||
}
|
||||
}) }]).first
|
||||
} if (can.base.isObject(item)) { return item }
|
||||
}) }])._target
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONPLUGIN, {help: "注册插件",
|
||||
"title": shy("标题", {}, ["title", "run:button"], function(can, msg, cmds) {
|
||||
can.user.title(cmds[0])
|
||||
}),
|
||||
"topic": shy("主题", {}, ["topic:select=white,black", "run:button"], function(can, msg, cmds) {
|
||||
can.onimport.topic(can, cmds[0])
|
||||
}),
|
||||
"cookie": shy("参数", {}, ["name", "value", "list", "back"], function(can, msg, cmds) {
|
||||
can.core.Item(can.misc.Cookie(can), function(key, 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) {
|
||||
cmds && cmds[0] && can.user.alert(cmds[0])
|
||||
}),
|
||||
"log": shy("日志", {}, ["text", "list", "back"], function(can, msg, cmds) {
|
||||
console.log(cmds[0])
|
||||
}),
|
||||
"location": shy("地址", {
|
||||
copy: function(can, msg, cmds) {
|
||||
can.user.copy(msg._event, can, location.href)
|
||||
},
|
||||
}, ["link", "list", "back", "copy"], function(can, msg, cmds, cb) {
|
||||
var _msg = can.request({}, mdb.LINK, location.href)
|
||||
can.run(_msg._event, [web.SHARE], function(res) {
|
||||
msg.Echo(res.Append(mdb.TEXT))
|
||||
msg.Echo("\n")
|
||||
msg.Echo(can.page.Format(html.A, res.Append(mdb.NAME)))
|
||||
can.base.isFunc(cb) && cb(msg)
|
||||
})
|
||||
}),
|
||||
})
|
||||
Volcanos(chat.ONACTION, {help: "交互数据",
|
||||
Volcanos(chat.ONACTION, {
|
||||
_menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, "toimage"]],
|
||||
_trans: {
|
||||
"search": "搜索",
|
||||
|
||||
"setting": "设置",
|
||||
"black": "黑色主题",
|
||||
"white": "白色主题",
|
||||
"print": "打印主题",
|
||||
"webpack": "打包页面",
|
||||
"toimage": "生成图片",
|
||||
|
||||
"shareuser": "共享用户",
|
||||
"setnick": "设置昵称",
|
||||
"password": "修改密码",
|
||||
"language": "语言地区", "chinese": "中文",
|
||||
"clear": "清除背景",
|
||||
"logout": "退出登录",
|
||||
"setting": "设置", "black": "黑色主题", "white": "白色主题", "print": "打印主题", "webpack": "打包页面", "toimage": "生成图片",
|
||||
"shareuser": "共享用户", "setnick": "设置昵称", "password": "修改密码", "language": "语言地区", "chinese": "中文", "clear": "清除背景", "logout": "退出登录",
|
||||
},
|
||||
onsize: function(can, msg) {
|
||||
can.onimport.topic(can)
|
||||
},
|
||||
onmain: function(can, msg) {
|
||||
can.setHeader(chat.TOPIC)
|
||||
can.run({}, [], function(msg) {
|
||||
if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) {
|
||||
msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() {
|
||||
can.onengine.signal(can, chat.ONMAIN, msg)
|
||||
}, msg.Option(aaa.LOGIN), msg.Option("login.dev"))
|
||||
return // 登录认证
|
||||
}
|
||||
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)
|
||||
onmain: function(can, msg) { can.onimport.topic(can)
|
||||
can.run({}, [], function(msg) { if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) {
|
||||
return msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() { can.onengine.signal(can, chat.ONMAIN, msg) }, msg.Option(aaa.LOGIN), msg.Option("login.dev"))
|
||||
} can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.language = can.misc.Search(can, aaa.LANGUAGE)||msg.Option(aaa.LANGUAGE)
|
||||
can.user.info.background = msg.Option(aaa.BACKGROUND), 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.onmotion.clear(can), can.onimport._init(can, msg, can._output), can.ondaemon._init(can), can.onengine.signal(can, chat.ONLOGIN, msg)
|
||||
})
|
||||
},
|
||||
onsize: function(can, msg) { can.onimport.topic(can) },
|
||||
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) },
|
||||
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)
|
||||
})
|
||||
can.core.Item(Volcanos.meta.pack, function(key, msg) { can.core.List(["_event", "_can", "_xhr", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) }) })
|
||||
can.runAction(can.request({}, {args: "name,river,storm,topic,layout", _toast: "打包中...",
|
||||
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),
|
||||
}), code.WEBPACK, [], function(msg) { can.user.download(can, web.SHARE_LOCAL+msg.Result(), name, nfs.HTML), can.user.toastSuccess(can, "打包成功", code.WEBPACK) })
|
||||
})
|
||||
},
|
||||
onshare: function(can, msg, args) {
|
||||
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[]))
|
||||
},
|
||||
|
||||
title: function(event, can) {
|
||||
var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) })
|
||||
can.user.jumps(can.misc.MergeURL(can, args, true))
|
||||
},
|
||||
onshare: function(can, msg, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) },
|
||||
|
||||
title: function(event, can) { var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) }); can.user.jumps(can.misc.MergeURL(can, args, true)) },
|
||||
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) },
|
||||
print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.onengine.signal(can, chat.ONPRINT) },
|
||||
@ -203,32 +101,37 @@ Volcanos(chat.ONACTION, {help: "交互数据",
|
||||
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]) },
|
||||
setnick: function(event, can) {
|
||||
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.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.user.toastSuccess(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(list) {
|
||||
if (list[0] != list[1]) { return can.user.toast(can, "密码不一致"), ui.focus(), true }
|
||||
can.runAction(event, aaa.PASSWORD, [list[0]])
|
||||
})
|
||||
},
|
||||
setnick: function(event, can) { 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.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.user.toastSuccess(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(list) {
|
||||
if (list[0] != list[1]) { return can.user.toast(can, "密码不一致"), ui.focus(), true } can.runAction(event, aaa.PASSWORD, [list[0]])
|
||||
}) },
|
||||
chinese: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "zh") },
|
||||
english: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "en") },
|
||||
clear: function(event, can) { can.onimport.background(event, can, ""), can.onimport.avatar(event, can, "") },
|
||||
logout: function(event, can) { can.user.logout(can) },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {help: "导出数据",
|
||||
height: function(can) { return can._target.offsetHeight },
|
||||
Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight },
|
||||
topic: function(can) { return can._topic || can.misc.Search(can, chat.TOPIC) || (can.base.isNight()? chat.BLACK: chat.WHITE) },
|
||||
background: function(can) { return can.user.info.background == "void"? "": can.user.info.background },
|
||||
avatar: function(can) { return can.user.info.avatar == "void"? "": can.user.info.avatar },
|
||||
})
|
||||
Volcanos(chat.ONPLUGIN, {
|
||||
"title": shy("标题", {}, [chat.TITLE, ice.RUN], function(can, msg, cmds) { can.user.title(cmds[0]) }),
|
||||
"topic": shy("主题", {}, ["topic:select=white,black", ice.RUN], function(can, msg, cmds) { can.onimport.topic(can, cmds[0]) }),
|
||||
"cookie": shy("参数", {}, [mdb.NAME, mdb.VALUE, ice.AUTO], function(can, msg, cmds) {
|
||||
can.core.Item(can.misc.Cookie(can), function(key, value) { if (cmds[0] && key != cmds[0]) { return }
|
||||
msg.Push(mdb.NAME, key), msg.Push(mdb.VALUE, value)
|
||||
})
|
||||
}),
|
||||
"alert": shy("提示", {}, [mdb.TEXT, ice.AUTO], function(can, msg, cmds) { cmds && cmds[0] && can.user.alert(cmds[0]) }),
|
||||
"log": shy("日志", {}, [mdb.TEXT, ice.AUTO], function(can, msg, cmds) { can.misc.Log(cmds) }),
|
||||
"location": shy("地址", {
|
||||
copy: function(can, msg, cmds) { can.user.copy(msg._event, can, location.href) },
|
||||
}, [mdb.LINK, ice.AUTO, ice.COPY], function(can, msg, cmds, cb) {
|
||||
can.run(can.request({}, mdb.LINK, location.href), [web.SHARE], function(res) {
|
||||
msg.Echo(res.Append(mdb.TEXT)).Echo(ice.NL).Echo(can.page.Format(html.A, res.Append(mdb.NAME))), can.base.isFunc(cb) && cb(msg)
|
||||
})
|
||||
}),
|
||||
})
|
192
panel/river.js
192
panel/river.js
@ -1,7 +1,4 @@
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
|
||||
can.onmotion.clear(can), can.onimport._main(can, msg), can.onimport._menu(can, msg)
|
||||
can.river_list = {}, can.storm_list = {}
|
||||
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onimport._main(can, msg), can.onimport._menu(can, msg), can.river_list = {}, can.storm_list = {}, can.sublist = {}
|
||||
var select; can.page.Append(can, can._output, msg.Table(function(item, index) {
|
||||
return can.onimport._river(can, item, function(target) { (index == 0 || item.hash == can._main_river) && (select = target) })
|
||||
})), select && select.click()
|
||||
@ -15,154 +12,91 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
|
||||
can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)])
|
||||
})
|
||||
},
|
||||
_river: function(can, meta, cb) {
|
||||
return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) {
|
||||
can.onaction.storm(event, can, meta.hash)
|
||||
}, onmouseenter: function(event) {
|
||||
can.onimport._carte(can, can.ondetail.list, meta.hash)
|
||||
}, _init: function(target) { can.river_list[meta.hash] = target, cb(target) }}
|
||||
},
|
||||
_storm: function(can, meta, river) {
|
||||
return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) {
|
||||
can.onaction.action(event, can, river, meta.hash)
|
||||
}, onmouseenter: function(event) {
|
||||
can.onimport._carte(can, can.ondetail.sublist, river, meta.hash)
|
||||
}, _init: function(target) { can.storm_list[can.core.Keys(river, meta.hash)] = target }}
|
||||
},
|
||||
_carte: function(can, list, river, storm) { if (can.user.isMobile) { return }
|
||||
if (can.core.Value(can._root, can.core.Keys(chat.RIVER, river))) { return }
|
||||
_river: function(can, meta, cb) { return {text: [meta.name, html.DIV, html.ITEM],
|
||||
onclick: function(event) { can.onaction.storm(event, can, meta.hash) },
|
||||
onmouseenter: function(event) { can.onimport._carte(can, can.ondetail.list, meta.hash) },
|
||||
_init: function(target) { can.river_list[meta.hash] = target, cb(target) },
|
||||
} },
|
||||
_storm: function(can, meta, river) { return {text: [meta.name, html.DIV, html.ITEM],
|
||||
onclick: function(event) { can.onaction.action(event, can, river, meta.hash) },
|
||||
onmouseenter: function(event) { can.onimport._carte(can, can.ondetail.sublist, river, meta.hash) },
|
||||
_init: function(target) { can.storm_list[can.core.Keys(river, meta.hash)] = target },
|
||||
} },
|
||||
_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, meta) { meta[button](event, can, button, river, storm) })
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, can, msg, panel, cmds, cb) {
|
||||
var list = can.river
|
||||
cmds.length == 0 && can.core.ItemSort(list, "order", function(key, value) {
|
||||
if (can.core.Item(value.storm).length == 0) { return }
|
||||
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 群组列表
|
||||
}); if (cmds.length != 1 && cmds[1] != chat.STORM) { return false }
|
||||
|
||||
var river = list[cmds[0]]; if (!river) { return false }
|
||||
can.core.ItemSort(river.storm, "order", function(key, value) {
|
||||
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 应用列表
|
||||
}), can.base.isFunc(cb) && cb(msg); return true
|
||||
}})
|
||||
Volcanos(chat.ONACTION, {help: "操作数据", list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: function(can, cb) {
|
||||
can.onmotion.hidden(can), can.base.isFunc(cb) && cb()
|
||||
},
|
||||
onlogin: function(can, msg) {
|
||||
can.run({}, [], function(msg) { if (msg.Option(ice.MSG_RIVER) == "_share") { return }
|
||||
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 }
|
||||
can.onmotion.toggle(can, can._target, true)
|
||||
})
|
||||
},
|
||||
Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: function(can) { can.onmotion.hidden(can) },
|
||||
onlogin: function(can, msg) { can.run({}, [], function(msg) { if (msg.Option(ice.MSG_RIVER) == "_share") { return }
|
||||
can.onmotion.clear(can), can.onimport._init(can, msg), can.onappend._action(can, can.Conf(ctx.ACTION)||can.onaction.list)
|
||||
can.user.isMobile ||can.user.isExtension || can.user.mod.isPod || can.onmotion.toggle(can, can._target, true)
|
||||
}) },
|
||||
onresize: function(can, msg) { can.user.isMobile && can.onmotion.hidden(can, can._target) },
|
||||
onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || 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) },
|
||||
onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") },
|
||||
|
||||
storm: function(event, can, river) { can.sublist = can.sublist||{}
|
||||
can.onmotion.select(can, can._output, html.DIV_ITEM, can.river_list[river])
|
||||
storm: function(event, can, 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) }
|
||||
|
||||
can.run({}, [river, chat.STORM], function(msg) {
|
||||
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)
|
||||
return can.onimport._storm(can, item, river)
|
||||
}) }]).first, can.sublist[river] = list, list.children.length > 0 && list.children[select].click()
|
||||
event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling)
|
||||
})
|
||||
can.run({}, [river, chat.STORM], function(msg) { var select = 0; list = can.page.Append(can, can._output, [{view: html.LIST, list: msg.Table(function(item, index) {
|
||||
return river == can._main_river && item.hash == can._main_storm && (select = index), can.onimport._storm(can, item, river)
|
||||
}) }])._target, can.sublist[river] = list, list.children.length > 0 && list.children[select].click(), event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling) })
|
||||
},
|
||||
action: function(event, can, river, storm) {
|
||||
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_LIST, html.DIV_ITEM], can.storm_list[can.core.Keys(river, storm)])
|
||||
|
||||
can.onmotion.delay(can, function() { // can.onlayout._init(can)
|
||||
can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, {
|
||||
river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm),
|
||||
}))
|
||||
})
|
||||
},
|
||||
|
||||
create: function(event, can) {
|
||||
can.user.input(event, can, [
|
||||
{name: mdb.TYPE, values: [aaa.TECH, aaa.VOID], _trans: "类型"},
|
||||
{name: mdb.NAME, value: "hi", _trans: "群名"},
|
||||
{name: mdb.TEXT, value: "hello", _trans: "简介"},
|
||||
], function(args) {
|
||||
can.runAction(event, mdb.CREATE, args, function(msg) { can.misc.Search(can, {river: msg.Result()}) })
|
||||
})
|
||||
},
|
||||
share: function(event, can) {
|
||||
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) {
|
||||
can.misc.Search(can, {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), layout: can.getAction(chat.LAYOUT)})
|
||||
action: function(event, can, river, storm) { 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.toggle(can, can.sublist[river], true)
|
||||
can.onmotion.delay(can, function() { can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, {river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm)})) })
|
||||
},
|
||||
carte: function(event, can, list, cb) { can.user.carteRight(event, can, can.ondetail, list, cb) },
|
||||
|
||||
create: function(event, can) { can.user.input(event, can, [
|
||||
{name: mdb.TYPE, values: [aaa.TECH, aaa.VOID], _trans: "类型"}, {name: mdb.NAME, value: "hi", _trans: "群名"}, {name: mdb.TEXT, value: "hello", _trans: "简介"},
|
||||
], function(args) { can.runAction(event, mdb.CREATE, args, function(msg) { can.misc.Search(can, {river: msg.Result()}) }) }) },
|
||||
share: function(event, can) { 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) { can.misc.Search(can, {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), layout: can.getAction(chat.LAYOUT)}) },
|
||||
})
|
||||
Volcanos(chat.ONDETAIL, {help: "操作数据",
|
||||
list: ["添加应用", "重命名群组", "删除群组"],
|
||||
Volcanos(chat.ONDETAIL, {list: ["添加应用", "重命名群组", "删除群组"],
|
||||
sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"],
|
||||
|
||||
"创建群组": function(event, can) { can.onaction.create(event, can) },
|
||||
"重命名群组": function(event, can, button, river) {
|
||||
can.user.input(event, can, [mdb.NAME], function(args) {
|
||||
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) {
|
||||
can.runAction(event, mdb.REMOVE, [mdb.HASH, river], function(msg) { can.misc.Search(can, {river: "", storm: ""}) })
|
||||
},
|
||||
"重命名群组": function(event, can, button, river) { can.user.input(event, can, [mdb.NAME], function(args) {
|
||||
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) { 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) {
|
||||
"共享应用": 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) {
|
||||
can.getAction(ctx.ARGS, function(args, sub, next, index, array) { var toast = can.user.toast(can, (index+1)+ice.PS+array.length, button, 10000, (index+1)*100/array.length)
|
||||
}, function() { can.misc.Search(can, {river: river, storm: storm}) }) },
|
||||
"保存参数": function(event, can, button, river, storm) { can.getAction(ctx.ARGS, function(args, sub, next, index, array) { 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, sub.Conf(mdb.ID), ctx.ARGS, JSON.stringify(args)], function() {
|
||||
can.onmotion.delay(can, function() { toast.close(), next(), index == array.length-1 && can.user.toastSuccess(can) })
|
||||
})
|
||||
})
|
||||
},
|
||||
"重命名应用": function(event, can, button, river, storm) {
|
||||
can.user.input(event, can, [mdb.NAME], function(args) {
|
||||
can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function() {
|
||||
can.page.Modify(can, can.storm_list[can.core.Keys(river, storm)], args[1]), can.user.toastSuccess(can)
|
||||
})
|
||||
})
|
||||
},
|
||||
"删除应用": function(event, can, button, river, storm) {
|
||||
can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) })
|
||||
},
|
||||
}) },
|
||||
"重命名应用": function(event, can, button, river, storm) { can.user.input(event, can, [mdb.NAME], function(args) {
|
||||
can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function() { can.page.Modify(can, can.storm_list[can.core.Keys(river, storm)], args[1]), can.user.toastSuccess(can) })
|
||||
}) },
|
||||
"删除应用": function(event, can, button, river, storm) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) }) },
|
||||
|
||||
create: function(event, can, button, river) {
|
||||
can.user.input(event, can, [
|
||||
{name: mdb.NAME, value: "hi", _trans: "名称"}, {name: mdb.TEXT, value: "hello", _trans: "简介"},
|
||||
], function(args) {
|
||||
can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.misc.Search(can, {river: river, storm: msg.Result()}) })
|
||||
})
|
||||
},
|
||||
create: function(event, can, button, river) { can.user.input(event, can, [{name: mdb.NAME, value: "hi", _trans: "名称"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}], function(args) {
|
||||
can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.misc.Search(can, {river: river, storm: msg.Result()}) })
|
||||
}) },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {help: "导出数据",
|
||||
width: function(can) { return can._target.offsetWidth },
|
||||
storm: function(can, msg, word) {
|
||||
can.core.Item(can._root.river, function(river, value) { can.core.Item(value.storm, function(storm, item) {
|
||||
if (word[1] != "" && storm.indexOf(word[1]) == -1 && item.name.indexOf(word[1]) == -1) { return }
|
||||
m.Push({ctx: "can", cmd: "Storm", type: river, name: storm, text: shy("跳转", function(event) { can.onaction.action(event, can, river, storm) })})
|
||||
}) })
|
||||
},
|
||||
Volcanos(chat.ONEXPORT, {width: function(can) { return can._target.offsetWidth },
|
||||
storm: function(can, msg, word) { can.core.Item(can._root.river, function(river, value) { can.core.Item(value.storm, function(storm, item) { if (word[1] != "" && storm.indexOf(word[1]) == -1 && item.name.indexOf(word[1]) == -1) { return }
|
||||
msg.Push({ctx: ice.CAN, cmd: "Storm", type: river, name: storm, text: shy("跳转", function(event) { can.onaction.action(event, can, river, storm) })})
|
||||
}) }) },
|
||||
})
|
||||
Volcanos(chat.ONENGINE, {_engine: function(event, can, msg, panel, cmds, cb) {
|
||||
var list = can.river
|
||||
cmds.length == 0 && can.core.ItemSort(list, "order", function(key, value) {
|
||||
if (can.core.Item(value.storm).length == 0) { return }
|
||||
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name})
|
||||
}); if (cmds.length != 1 && cmds[1] != chat.STORM) { return false }
|
||||
|
||||
var river = list[cmds[0]]; if (!river) { return false }
|
||||
can.core.ItemSort(river.storm, "order", function(key, value) {
|
||||
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name})
|
||||
}), can.base.isFunc(cb) && cb(msg); return true
|
||||
}})
|
||||
|
@ -1,72 +1,48 @@
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { can.onmotion.clear(can, can.ui.content)
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can, can.ui.content), can.list = msg.Table()
|
||||
var table = can.onappend.table(can, msg, function(value, key, index, line) { 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) {
|
||||
if (can.page.tagis(event.target, html.A)) { return }
|
||||
return {text: [key == mdb.TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) { 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)))
|
||||
|
||||
can.page.Select(can, can._output, html.A, function(item) {
|
||||
item.onclick = function(event) { can.user.open(item.href), can.onkeymap.prevent(event) }
|
||||
}), can.onmotion.story.auto(can), can.list = msg.Table()
|
||||
|
||||
}, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(ice.FS))); can.onmotion.story.auto(can)
|
||||
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()
|
||||
can.onmotion.focus(can, can.ui.word)
|
||||
can.onmotion.focus(can, can.ui.word), msg.Length() == 1 && can.ui.profile.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click()
|
||||
can.page.style(can, can._output, html.MAX_HEIGHT, window.innerHeight-2*html.PLUGIN_MARGIN-5*html.ACTION_HEIGHT)
|
||||
},
|
||||
_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) {
|
||||
res.Option("word", cmds)
|
||||
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.getActionSize(function(left, top, 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, {left: left, top: top})
|
||||
can.getActionSize(function(left, top, 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, {left: left||0, top: top||0})
|
||||
can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight())
|
||||
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.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]
|
||||
|
||||
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)
|
||||
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) {
|
||||
can.onmotion.hidden(can), can.base.isFunc(cb) && cb()
|
||||
},
|
||||
onlogin: function(can, msg) {
|
||||
can.ui = can.page.Append(can, can._output, [chat.CONTENT, {view: [chat.DISPLAY, html.TABLE]}, chat.PROFILE])
|
||||
can.page.ClassList.add(can, can.ui.display, chat.CONTENT)
|
||||
|
||||
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)
|
||||
Volcanos(chat.ONACTION, {_init: function(can) { can.onmotion.hidden(can) }, list: [cli.CLOSE, cli.CLEAR, cli.DONE],
|
||||
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, chat.CONTENT], html.TABLE]}, chat.PROFILE])
|
||||
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.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1]
|
||||
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) }
|
||||
return can.input(event, event.target.value)
|
||||
} return event.ctrlKey? can.onaction[cli.DONE](event, can): can.input(event, event.target.value)
|
||||
}
|
||||
|
||||
if (event.ctrlKey) { if (event.key == "0") { return can.onaction.clear(event, can) }
|
||||
if ("1" <= event.key && event.key <= "9") {
|
||||
return can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr, index) {
|
||||
index+1 == event.key && tr.firstChild.click()
|
||||
})
|
||||
}
|
||||
}
|
||||
can.onmotion.tableFilter(can, can.ui.content, event.target.value)
|
||||
}] }]).first
|
||||
if ("1" <= event.key && event.key <= "9") { return can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr, index) { index+1 == event.key && tr.firstChild.click() }) }
|
||||
} can.onmotion.tableFilter(can, can.ui.content, event.target.value+event.key)
|
||||
}] }])._target
|
||||
},
|
||||
onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||mdb.FOREACH, word||""]) },
|
||||
|
||||
@ -74,27 +50,19 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLOSE, cli.CLEAR, cli.
|
||||
done: function(event, can) { can.base.isFunc(can.cb) && can.cb() },
|
||||
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) }
|
||||
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) {
|
||||
can.onappend.plugin(can, {index: cmd||msg.Option(mdb.INDEX), args: cmd == "web.wiki.word"? [line.name]: []}, function(sub, meta) { can.onmotion.delay(can, function() { sub.Focus() }, 20)
|
||||
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]
|
||||
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
|
||||
select: function(event, can, index) { var line = can.list[index]; 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 })
|
||||
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.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)
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {help: "导出数据",
|
||||
select: function(can) {
|
||||
return can.page.Select(can, can.ui.display, html.TR, function(tr) {
|
||||
return can.page.Select(can, tr, html.TD, function(td) { return td.innerHTML })
|
||||
}).slice(1)
|
||||
},
|
||||
Volcanos(chat.ONEXPORT, {
|
||||
select: function(can) { return can.page.Select(can, can.ui.display, html.TR, function(tr) { return can.page.Select(can, tr, html.TD, function(td) { return td.innerHTML }) }).slice(1) },
|
||||
})
|
||||
|
@ -21,7 +21,7 @@ Volcanos(chat.ONFIGURE, {date: {
|
||||
"over", function() { now.setFullYear(now.getFullYear()-1), show(now) },
|
||||
"come", function() { now.setFullYear(now.getFullYear()+1), show(now) },
|
||||
chat._TRANS, kit.Dict(TODAY, "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月", "over", "去年", "come", "今年"),
|
||||
)), can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
|
||||
)), can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}])._target
|
||||
target.value == "" && (now.setMinutes(now.getMinutes()>30? 30: 0), now.setSeconds(0))
|
||||
function show(now) {
|
||||
can.Action(YEAR, now.getFullYear())
|
||||
|
@ -28,7 +28,7 @@ Volcanos(chat.ONFIGURE, {keyboard: {
|
||||
add(can._shift? item.name.toUpperCase(): item.name)
|
||||
} can._shift = false, can._ctrl = false, can.page.Select(can, can._output, "div.hold", function(target) { can.page.ClassList.del(can, div, "hold") })
|
||||
}
|
||||
} }]).first
|
||||
} }])._target
|
||||
})
|
||||
},
|
||||
_number: function(can, msg) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
Volcanos(chat.ONFIGURE, {province: {
|
||||
onclick: function(event, can, meta, cbs, target) { cbs(function(can, cb) {
|
||||
can.require(["/require/shylinux.com/x/echarts/echarts.js", "/require/shylinux.com/x/echarts/china.js"], function() {
|
||||
var chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIV, style: {width: can.page.width()/2, height: can.page.height()/2}}]).first)
|
||||
var chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIV, style: {width: can.page.width()/2, height: can.page.height()/2}}])._target)
|
||||
chart.setOption({geo: {map: 'china'}}), chart.on(html.CLICK, function(params) { target.value = params.name, can.close() })
|
||||
})
|
||||
}) }
|
||||
|
@ -1,6 +1,6 @@
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) {
|
||||
can.ui = can.onlayout.display(can, target)
|
||||
can.ui.canvas = can.page.Append(can, can.ui.display, [{type: "canvas", width: 320, height: 240, style: {display: "none"}}]).first
|
||||
can.ui.canvas = can.page.Append(can, can.ui.display, [{type: "canvas", width: 320, height: 240, style: {display: "none"}}])._target
|
||||
|
||||
can.onappend.table(can, msg, function(value, key, index, line, array) {
|
||||
return {text: [value, "td"], onclick: function(event) {
|
||||
|
@ -295,7 +295,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
|
||||
can.ui.profile_output = sup._profile_output = can.ui._profile_output
|
||||
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2
|
||||
can.onimport.process(can, msg, can.ui._profile_output, can.ui.profile.offsetHeight, width)
|
||||
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS]).first)
|
||||
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS])._target)
|
||||
can.page.Select(can, can.ui._profile_output, html.TABLE, function(target) { can.onmotion.delay(can, function() {
|
||||
if (target.offsetWidth < can.ui._profile_output.offsetWidth) { can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can) }
|
||||
}) })
|
||||
|
@ -345,8 +345,8 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
"查找": function(event, can) {
|
||||
var ui = can.page.Append(can, can._output, [{view: "vimer find float", list: [html.ACTION, html.OUTPUT],
|
||||
style: {position: "absolute", left: can.ui.project.offsetWidth+can.ui.content.offsetWidth/2, top: can.base.Max(can.base.Min(can.current.line.offsetTop-can.ui.content.scrollTop, 100), can.ConfHeight()/2)+57+28}}])
|
||||
can.onmotion.delay(can, function() { can.page.style(can, ui.first, html.LEFT, can.ui.project.offsetWidth+can.ui.content.offsetWidth/2-ui.first.offsetWidth/2) }, 10)
|
||||
can.onmotion.move(can, ui.first)
|
||||
can.onmotion.delay(can, function() { can.page.style(can, ui._target, html.LEFT, can.ui.project.offsetWidth+can.ui.content.offsetWidth/2-ui._target.offsetWidth/2) }, 10)
|
||||
can.onmotion.move(can, ui._target)
|
||||
|
||||
var last = can.onaction._getLineno(can, can.current.line)
|
||||
function find(begin, text) { if (parseInt(text) > 0) { return can.onaction.selectLine(can, parseInt(text)) && meta.close() }
|
||||
@ -392,7 +392,7 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
can.undo.push(function() { can.onaction.selectLine(can, line), can.onaction.modifyLine(can, line, text) })
|
||||
can.current.text(text.replace(from.value, to.value))
|
||||
can.current.text().indexOf(from.value) == -1 && meta.find() },
|
||||
close: function() { can.page.Remove(can, ui.first) },
|
||||
close: function() { can.page.Remove(can, ui._target) },
|
||||
})
|
||||
},
|
||||
_complete: function(event, can, target) { target = target||can.ui.complete
|
||||
|
@ -41,7 +41,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(
|
||||
_profile: function(can, task) { can.onmotion.toggle(can, can.ui.profile, true), can.onexport.hash(can, task)
|
||||
if (can.onmotion.cache(can, function() { return can.sup.task = task, can.Status(task), [task.pod, task.zone, task.id].join(ice.PT) }, can.ui.profile, can.ui.display)) { return can.onimport.layout(can) }
|
||||
task.extra && can.core.Item(can.base.Obj(task.extra), function(key, value) { task["extra."+key] = value }), delete(task.extra)
|
||||
var table = can.page.Appends(can, can.ui.profile, [{view: [chat.CONTENT, html.TABLE], list: [{th: [can.user.trans(can, mdb.KEY, "字段"), can.user.trans(can, mdb.VALUE, "属性")]}]}]).first
|
||||
var table = can.page.Appends(can, can.ui.profile, [{view: [chat.CONTENT, html.TABLE], list: [{th: [can.user.trans(can, mdb.KEY, "字段"), can.user.trans(can, mdb.VALUE, "属性")]}]}])._target
|
||||
can.core.Item(task, function(key, value) { key != "_target" && can.page.Append(can, table, [{
|
||||
td: [key, key == ice.POD && value != ""? can.page.Format(html.A, can.misc.MergeURL(can, {pod: value}), value): value],
|
||||
onclick: function(event) { can.page.tagis(event.target, html.INPUT) && event.target.type == html.BUTTON && can.run(can.request(event, task), [ctx.ACTION, event.target.name]) },
|
||||
|
@ -7,7 +7,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl
|
||||
can.dir_root = msg.Option(nfs.DIR_ROOT), can.onimport.page(can, can.list, can.begin = parseInt(msg.Option(cli.BEGIN)||"0"))
|
||||
},
|
||||
_file: function(can, path, index) { var p = location.href.indexOf(ice.HTTP) == 0? "": "http://localhost:9020"
|
||||
return path.indexOf(ice.HTTP) == 0? path: p+can.base.Path(chat.SHARE_LOCAL, can.dir_root||"", path)
|
||||
return path.indexOf(ice.HTTP) == 0? path: p+can.base.Path(web.SHARE_LOCAL, can.dir_root||"", path)
|
||||
},
|
||||
file: function(can, path, index) { path = can.onimport._file(can, path, index)
|
||||
var cb = can.onfigure[can.base.Ext(path)]||can.onfigure[wiki.IMAGE]; can.Status(nfs.FILE, path)
|
||||
@ -67,8 +67,8 @@ Volcanos(chat.ONACTION, {list: [
|
||||
}).catch(function(err) { can.user.toast(can, err.name + ": " + err.message) })
|
||||
}) },
|
||||
record1: function(event, can) { can.onaction.record0(event, can, "shot", function(stream, cb) { var height = window.innerHeight
|
||||
var video = can.page.Append(can, document.body, [{type: html.VIDEO, height: height}]).first; video.srcObject = stream, video.onloadedmetadata = function() { video.play(), width = video.offsetWidth
|
||||
var canvas = can.page.Append(can, document.body, [{type: html.CANVAS, height: height, width: width}]).first; canvas.getContext("2d").drawImage(video, 0, 0, width, height)
|
||||
var video = can.page.Append(can, document.body, [{type: html.VIDEO, height: height}])._target; video.srcObject = stream, video.onloadedmetadata = function() { video.play(), width = video.offsetWidth
|
||||
var canvas = can.page.Append(can, document.body, [{type: html.CANVAS, height: height, width: width}])._target; canvas.getContext("2d").drawImage(video, 0, 0, width, height)
|
||||
canvas.toBlob((blob) => { cb([blob], nfs.PNG) })
|
||||
}
|
||||
}) },
|
||||
|
@ -165,7 +165,7 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
sub.page.Append(sub, sub.ui.content, [{view: "page"+(index==0? " first": ""), list: can.core.List(page, function(item) { var data = item.dataset||{}
|
||||
switch (data.type) {
|
||||
case wiki.PREMENU: item = item.cloneNode(false); break
|
||||
case chat.FIELD: item = can.onappend.field(can, chat.STORY, can.base.Obj(data.meta), sub.ui.content).first; break
|
||||
case chat.FIELD: item = can.onappend.field(can, chat.STORY, can.base.Obj(data.meta), sub.ui.content)._target; break
|
||||
default: item = item.cloneNode(true)
|
||||
}
|
||||
return can.core.CallFunc([can.onimport, data.type], [sub, data, item, can.page.width()]), item
|
||||
|
@ -16,7 +16,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
||||
_layout: function(can, cb) { var height = can.ConfHeight()
|
||||
can.ui.video = can.page.Appends(can, can.ui.output, [{type: html.VIDEO, data: {controls: "controls"}, style: {height: height*3/4}, _init: function(target) {
|
||||
can.onmotion.delay(can, function() { cb(target) })
|
||||
}}]).first, can.onimport._action(can, ["抓拍", "录制", "取消"])
|
||||
}}])._target, can.onimport._action(can, ["抓拍", "录制", "取消"])
|
||||
},
|
||||
_image: function(can, src) {
|
||||
can.page.insertBefore(can, [{img: src, style: {height: can.ConfHeight()/4}}], can.ui.display.firstChild, can.ui.display)
|
||||
@ -43,7 +43,7 @@ Volcanos(chat.ONACTION, {help: "操作数据", list: ["录屏", "摄像"],
|
||||
})
|
||||
},
|
||||
"抓拍": function(event, can) { var width = can.ui.video.offsetWidth, height = can.ui.video.offsetHeight
|
||||
var canvas = can.page.Append(can, can.ui.display, [{type: html.CANVAS, height: height, width: width}]).first
|
||||
var canvas = can.page.Append(can, can.ui.display, [{type: html.CANVAS, height: height, width: width}])._target
|
||||
canvas.getContext("2d").drawImage(can.ui.video, 0, 0, width, height, 0, 0, width, height)
|
||||
can.onimport._image(can, canvas.toDataURL('image/png')), can.page.Remove(can, canvas)
|
||||
},
|
||||
|
@ -80,7 +80,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: ["{", "}", html.HEAD, html.
|
||||
meta.keys = meta.keys||can.core.Keys(keys, meta.name||meta.type)
|
||||
var cb = can.onappend[type]; !can.onappend[meta.type] && cb && cb(can, item, meta, target, data)
|
||||
item._init = item._init||function(target) { meta.list && can.onappend.parse(can, meta.list, target, meta.keys, data, meta.subtype||type) }
|
||||
item.target = can.page.Append(can, target, [item]).first; meta.init && meta.init(item.target)
|
||||
item.target = can.page.Append(can, target, [item])._target; meta.init && meta.init(item.target)
|
||||
can.core.ItemCB(meta, function(key, cb) { item.target[key] = can.base.isFunc(cb)? cb: function(event) { can.onengine.signal(can, cb, can.request(event, meta)) } })
|
||||
},
|
||||
username: function(can, item, meta, target) {
|
||||
|
@ -54,11 +54,11 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl
|
||||
onclick: function(event) { can.onmotion.select(can, target, html.DIV_ITEM, event.target)
|
||||
cb(event, event.target, event.target._list && can.onmotion.toggle(can, event.target._list))
|
||||
}, onmouseenter: function(event) {
|
||||
if (can.base.isFunc(cbs)) { var menu = cbs(event, ui.first); if (menu) {
|
||||
if (can.base.isFunc(cbs)) { var menu = cbs(event, ui._target); if (menu) {
|
||||
can.user.carteRight(event, can, menu.meta, menu.list, menu)
|
||||
} }
|
||||
},
|
||||
}]); return ui.first
|
||||
}]); return ui._target
|
||||
},
|
||||
itemlist: function(can, list, cb, cbs, target) {
|
||||
return target._list = can.page.insertBefore(can, [{view: html.LIST, list: can.core.List(list, function(item) {
|
||||
@ -145,7 +145,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl
|
||||
})
|
||||
can.base.isFunc(each) && each(item), can.onmotion.delay(can, function() { item.click() })
|
||||
}}
|
||||
})).first
|
||||
}))._target
|
||||
},
|
||||
plug: function(can, meta, cb, target) { if (!meta || !meta.index) { return }
|
||||
meta.type = "plug", can.onappend.plugin(can, meta, function(sub) { sub.sup = can
|
||||
|
2
proto.js
2
proto.js
@ -73,7 +73,7 @@ var aaa = {
|
||||
var web = {
|
||||
SPACE: "space", DREAM: "dream", SHARE: "share",
|
||||
WEBSITE: "website", DRAW: "draw", RESIZE: "resize", REFRESH: "refresh", CLEAR: "clear", UPLOAD: "upload", DOWNLOAD: "download",
|
||||
SHARE_CACHE: "/share/cache/",
|
||||
SHARE_CACHE: "/share/cache/", SHARE_LOCAL: "/share/local/",
|
||||
|
||||
GET: "GET", PUT: "PUT", POST: "POST", DELETE: "DELETE",
|
||||
Accept: "Accept", ContentType: "Content-Type",
|
||||
|
Loading…
x
Reference in New Issue
Block a user