mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt chat
This commit is contained in:
parent
eeb842e1e4
commit
241c4021ad
28
frame.js
28
frame.js
@ -6,7 +6,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
|
||||
can.core.Next(list, function(item, next) { item.type = chat.PANEL
|
||||
can.onappend._init(can, can.base.Copy(item, can.core.Value(can, [chat.RIVER, item.name])), item.list, function(sub) { can[item.name] = sub
|
||||
sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[]; return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, sub, cmds, cb) }
|
||||
can.core.Item(sub.onplugin, function(key, cmd) { sub.onplugin.hasOwnProperty(key) && can.base.isFunc(cmd) && can.onengine.plugin(sub, "can."+key, cmd) })
|
||||
can.core.Item(sub.onplugin, function(key, cmd) { sub.onplugin.hasOwnProperty(key) && can.base.isFunc(cmd) && can.onengine.plugin(sub, can.core.Keys(ice.CAN, key), cmd) })
|
||||
can.core.ItemCB(sub.onaction, function(key, cb) { can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: sub, msg: msg}) }) })
|
||||
can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, cb: next, target: sub._target})
|
||||
}, target)
|
||||
@ -47,14 +47,16 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
|
||||
if (p) { return can.core.CallFunc(p, {can: p.can||panel, msg: msg, arg: cmds.slice(3), cmds: cmds.slice(3), cb: cb}), true }
|
||||
}
|
||||
var p = can.onengine.plugin(can, cmds[0]), n = 1; if (p) { if (p.meta && p.meta[cmds[1]] && cmds[0] == ctx.ACTION) { n = 3 } else if (p.meta && p.meta[cmds[0]]) { n = 2 }
|
||||
return can.core.CallFunc(p, {can: p.can||panel, msg: msg, arg: cmds.slice(n), cmds: cmds.slice(n), cb: cb}), true
|
||||
return can.core.CallFunc(p, {can: p.can||panel, sub: msg._can, msg: msg, arg: cmds.slice(n), cmds: cmds.slice(n), cb: cb}), true
|
||||
} return false
|
||||
},
|
||||
plugin: shy(function(can, name, command) {
|
||||
if (can.base.isUndefined(name) || !can.base.isString(name) || name.indexOf("can.") == -1) { return }
|
||||
if (can.base.isUndefined(command)) { return arguments.callee.meta[can.base.trimPrefix(name, "can.")] }
|
||||
var type = html.TEXT; command.list = can.core.List(command.list, function(item) { return can.base.isString(item) && (item = can.core.SplitInput(item, type)), type = item.type, item })
|
||||
command.can = can, command.meta.name = name, arguments.callee.meta[can.base.trimPrefix(name, "can.")] = command
|
||||
plugin: shy(function(can, name, command) { var _name = can.base.trimPrefix(name, "can.")
|
||||
if (can.base.isUndefined(name) || !can.base.isString(name) || name == _name) { return }
|
||||
if (can.base.isUndefined(command)) { return arguments.callee.meta[_name] }
|
||||
var button = false, type = html.TEXT; command.list = can.core.List(command.list, function(item) {
|
||||
return can.base.isString(item) && (item = can.core.SplitInput(item, type)), item.type != html.SELECT && (type = item.type), button = button || item.type == html.BUTTON, item
|
||||
}); if (!button) { command.list.push(can.core.SplitInput(ice.LIST, html.BUTTON)) }
|
||||
command.can = can, command.meta.name = name, arguments.callee.meta[_name] = command
|
||||
}),
|
||||
listen: shy(function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }),
|
||||
signal: function(can, name, msg) { msg = msg||can.request(); var _msg = name == chat.ONREMOTE? msg.Option("_msg"): msg
|
||||
@ -204,7 +206,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
})
|
||||
},
|
||||
|
||||
field: function(can, type, item, target) { type = type||html.PLUGIN, item = item||{}
|
||||
field: function(can, type, item, target) { type = type||html.STORY, item = item||{}
|
||||
var name = (item.nick||item.name||"").split(ice.SP)[0], title = !item.help || can.user.language(can) == "en"? name: name+"("+item.help.split(ice.SP)[0]+")"
|
||||
return can.page.Append(can, target||can._output, [{view: [can.base.join([type||"", item.name||"", item.pos||""]), html.FIELDSET], list: [
|
||||
(name||title)&&{text: [name == "word"? item.help.split(ice.SP)[0]: title, html.LEGEND]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS,
|
||||
@ -260,7 +262,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
}, target||can._output, field)
|
||||
},
|
||||
plugin: function(can, meta, cb, target, field) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)||ice.CAN_PLUGIN
|
||||
var res = {}; function _cb(sub, meta, skip) { kit.proto(res, sub), cb && cb(sub, meta, skip) } if (can.misc.Debug(can, chat.PLUGIN, meta.index, meta.args, meta)) { debugger }
|
||||
var res = {}; function _cb(sub, meta, skip) { kit.proto(res, sub), cb && cb(sub, meta, skip) }
|
||||
if (meta.inputs && meta.inputs.length > 0 || meta.meta) { can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, _cb, target, field); return res }
|
||||
var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, function(sub, meta, skip) {
|
||||
_cb(sub, meta, skip), can.onmotion.delay(can, function() { value.meta && value.meta._init && value.meta._init(sub, meta) })
|
||||
@ -269,8 +271,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
},
|
||||
_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})
|
||||
can.getActionSize(function(left, top, width, height) { sub.onimport.size(sub, sub.ConfHeight(height/2), sub.ConfWidth(width), true)
|
||||
can.onmotion.move(can, sub._target, {left: left||0, top: (top||0)+height/4}), can.onmotion.delay(can, function() { sub.Focus() })
|
||||
}), sub.onaction.close = function() { can.page.Remove(can, sub._target) }
|
||||
}, can._root._target)
|
||||
},
|
||||
@ -326,14 +328,14 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro
|
||||
}); return can.onmotion.move(can, target, layout), layout
|
||||
},
|
||||
|
||||
display: function(can, target) { return can.page.Appends(can, target||can._output, [{view: [chat.LAYOUT, html.TABLE], list: [
|
||||
display: function(can, target) { return can.page.Appends(can, target||can._output, [{view: [html.LAYOUT, html.TABLE], list: [
|
||||
{type: html.TR, list: [chat.CONTENT]}, {type: html.TR, list: [chat.DISPLAY]},
|
||||
]}]) },
|
||||
profile: function(can, target) {
|
||||
function toggle(view) { var show = view.style.display == html.NONE
|
||||
can.onmotion.toggle(can, view, show), view._toggle? view._toggle(event, show): can.onimport.layout && can.onimport.layout(can); return show
|
||||
} var gt = "❯", lt = "❮", down = lt, up = gt, button = {}
|
||||
var ui = can.page.Append(can, target||can._output, [{view: [chat.LAYOUT, html.TABLE], list: [
|
||||
var ui = can.page.Append(can, target||can._output, [{view: [html.LAYOUT, html.TABLE], list: [
|
||||
{view: [chat.PROJECT, html.TD], list: [chat.PROJECT]}, {type: html.TD, list: [ {type: html.TR, list: [{type: html.TR, list: [
|
||||
{view: [chat.CONTENT, html.TD], list: [chat.CONTENT,
|
||||
{view: [[html.TOGGLE, chat.PROJECT]], list: [{text: [gt, html.DIV]}], _init: function(target) {
|
||||
|
@ -136,7 +136,7 @@ Volcanos("base", {
|
||||
if (this.isArray(args)) { for (var i = args.length-1; i >= 0; i--) { if (!args[i]) { args.pop() } else { break } } }
|
||||
return args
|
||||
},
|
||||
trimPrefix: function(str, pre) { var callee = arguments.callee
|
||||
trimPrefix: function(str, pre) { if (typeof str != lang.STRING) { return str } var callee = arguments.callee
|
||||
if (arguments.length > 2) { for (var i = 1; i < arguments.length; i++) { str = callee(str, arguments[i]) } return str }
|
||||
if (str.indexOf(pre) == -1) { return str } return str.slice(pre.length)
|
||||
},
|
||||
|
@ -1,5 +1,4 @@
|
||||
Volcanos.meta.cache["/lib/lunar.js"] = []
|
||||
var calendar = { // @1900-2100区间内的公历转农历
|
||||
Volcanos("date", { // @1900-2100区间内的公历转农历
|
||||
solar2lunar: function(date) { var y = date.getFullYear(), m = date.getMonth()+1, d = date.getDate()
|
||||
var day = (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - Date.UTC(1900,0,31))/86400000
|
||||
for (var year = 1900, days = 0; year < 2101 && day > 0; year++) { days = this.lYearDays(year), day -= days } if (day < 0) { day += days, year-- }
|
||||
@ -243,4 +242,4 @@ var calendar = { // @1900-2100区间内的公历转农历
|
||||
'7f0e36665b66a449801e9808297c35','665f67f0e37f14898082b072297c35','7ec967f0e37f14998082b0787b06bd',
|
||||
'7f07e7f0e47f531b0723b0b6fb0721','7f0e26665b66a449801e9808297c35','665f67f0e37f1489801eb072297c35',
|
||||
'7ec967f0e37f14998082b0787b06bd','7f07e7f0e47f531b0723b0b6fb0721','7f0e27f1487f531b0b0bb0b6fb0722'],
|
||||
}
|
||||
})
|
28
lib/misc.js
28
lib/misc.js
@ -210,38 +210,49 @@ Volcanos("misc", {Message: function(event, can) { var msg = {}
|
||||
},
|
||||
|
||||
Log: function() {
|
||||
var args = [this._time(), this.FileLine(2, 3)]
|
||||
var args = [this._time(), this.FileLine(2, 3), ""]
|
||||
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
|
||||
console.log.apply(console, args)
|
||||
if (arguments[0] && arguments[0].onengine) { var can = arguments[0]; can.onengine.signal(can, chat.ONDEBUG, can.request({}, {time: can.misc._time(), fileline: can.misc.FileLine(-3), _args: args})) }
|
||||
},
|
||||
Info: function() {
|
||||
var args = [this._time(), this.FileLine(2, 3), log.INFO]
|
||||
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
|
||||
console.info.apply(console, args)
|
||||
if (arguments[0] && arguments[0].onengine) { var can = arguments[0]; can.onengine.signal(can, chat.ONDEBUG, can.request({}, {time: can.misc._time(), fileline: can.misc.FileLine(-3), _args: args})) }
|
||||
},
|
||||
Warn: function() {
|
||||
var args = [this._time(), this.fileLine(2, 3).link, log.WARN]
|
||||
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
|
||||
console.warn.apply(console, args)
|
||||
if (arguments[0] && arguments[0].onengine) { var can = arguments[0]; can.onengine.signal(can, chat.ONDEBUG, can.request({}, {time: can.misc._time(), fileline: can.misc.FileLine(-3), _args: args})) }
|
||||
},
|
||||
Error: function() {
|
||||
var args = [this._time(), this.fileLine(2, 3).link, log.ERROR]
|
||||
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
|
||||
args.push(ice.NL, this._stack().slice(1).join(ice.NL))
|
||||
console.error.apply(console, args)
|
||||
if (arguments[0] && arguments[0].onengine) { var can = arguments[0]; can.onengine.signal(can, chat.ONDEBUG, can.request({}, {time: can.misc._time(), fileline: can.misc.FileLine(-3), _args: args})) }
|
||||
},
|
||||
Debug: function(msg) { var filter = "", output = false
|
||||
Debug: function() {
|
||||
var args = [this._time(), this.fileLine(2, 3).link, log.DEBUG]
|
||||
for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) }
|
||||
args.push(ice.NL, this._stacks().slice(1, 4).join(ice.NL))
|
||||
console.debug.apply(console, args)
|
||||
if (arguments[0] && arguments[0].onengine) { var can = arguments[0]; can.onengine.signal(can, chat.ONDEBUG, can.request({}, {time: can.misc._time(), fileline: can.misc.FileLine(-3), _args: args})) }
|
||||
},
|
||||
Trace: function() { var filter = "", output = false
|
||||
var args = [this._time(), this.fileLine(2, 3).link, log.TRACE]
|
||||
for (var i in arguments) { var item = arguments[i]; if (item == undefined) { continue }
|
||||
if (item.misc && item.misc.Search) {
|
||||
filter += item.misc.Search(item, log.DEBUG)||""
|
||||
filter += item.misc.Search(item, log.TRACE)||""
|
||||
item._name && args.push(item._name)
|
||||
} else if (item.Option) {
|
||||
filter += item.Option(log.DEBUG)||""
|
||||
filter += item.Option(log.TRACE)||""
|
||||
} else if (arguments[i].indexOf && arguments[i].indexOf(filter||log.TRACE) > -1) {
|
||||
output = true
|
||||
} args.push(arguments[i])
|
||||
} if (output) { return console.debug.apply(console, args), true }
|
||||
} if (output) { return console.trace.apply(console, args), true }
|
||||
},
|
||||
FileLine: function(depth, length) { var file = this.fileLine(depth+1, length||9); return file.file+ice.DF+file.line },
|
||||
fileLine: function(depth, length) { var list = this._stack()
|
||||
@ -261,6 +272,13 @@ Volcanos("misc", {Message: function(event, can) { var msg = {}
|
||||
} return split(depth)||{}
|
||||
},
|
||||
_stack: function() { return ((new Error()).stack||"").split(ice.NL).slice(2) },
|
||||
_stacks: function() { var list = ((new Error()).stack||"").split(ice.NL).slice(2), prefix = location.protocol+"//"+location.host
|
||||
for (var i = 0; i < list.length; i++) { var ls = list[i].trim().split(ice.SP)
|
||||
list[i] = ls.pop().trim(); if (list[i][0] == "(") { list[i] = list[i].slice(1, -1) }
|
||||
if (list[i].indexOf(prefix) == 0) { list[i] = list[i].slice(prefix.length).split(ice.PS).slice(-2).join(ice.PS) }
|
||||
list[i] = ice.TB+list[i]; if (ls.length > 1) { list[i] += ice.TB+ls.pop() }
|
||||
} return list
|
||||
},
|
||||
_time: function() { var now = new Date()
|
||||
var hour = now.getHours(); hour < 10 && (hour = "0"+hour)
|
||||
var minute = now.getMinutes(); minute < 10 && (minute = "0"+minute)
|
||||
|
@ -188,7 +188,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]+"'>"
|
||||
|
39
lib/user.js
39
lib/user.js
@ -38,33 +38,26 @@ Volcanos("user", {info: {}, agent: {
|
||||
|
||||
title: function(text) { if (window.webview) { return title(text) } return text && (document.title = text), document.title },
|
||||
topic: function(can, name) { can.base.isString(name) && (name = [name]) || name || []
|
||||
can.user.isMobile && name.push("mobile") && can.user.isLandscape() && name.push("landscape")
|
||||
can.user.isMobile && name.push(html.MOBILE) && can.user.isLandscape() && name.push(html.LANDSCAPE)
|
||||
can.user.language(can) && name.push(can.user.language(can))
|
||||
can.Conf("display") && name.push(can.Conf("display"))
|
||||
can.user.isWebview && name.push("webview")
|
||||
can.Conf(chat.DISPLAY) && name.push(can.Conf(chat.DISPLAY))
|
||||
can.user.isWebview && name.push(html.WEBVIEW)
|
||||
can.user.mod.isCmd && name.push(chat.SIMPLE)
|
||||
can.page.styleClass(can, can._root._target, name.join(ice.SP))
|
||||
},
|
||||
language: function(can) { return can.misc.Search(can, "language")||can.user.info.language },
|
||||
language: function(can) { return can.misc.Search(can, aaa.LANGUAGE)||can.user.info.language },
|
||||
trans: function(can, text, list) { if (can.base.isFunc(text)) { text = text.name||"" }
|
||||
if (can.base.isObject(text)) { return can.core.Item(text, function(k, v) { can.core.Value(can._trans, k, v) }) }
|
||||
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": "导入", "search": "搜索",
|
||||
"link": "链接", "copy": "复制", "edit": "编辑", "save": "保存", "trash": "删除", "share": "共享", "toimage": "截图", "download": "下载", "upload": "上传",
|
||||
"run": "执行", "list": "查看", "back": "返回", "prev": "上一页", "next": "下一页",
|
||||
"source": "源码", "module": "模块", "action": "操作", "recent": "最近",
|
||||
|
||||
"open": "打开", "close": "关闭",
|
||||
"start": "启动", "stop": "停止",
|
||||
"begin": "开始", "end": "结束",
|
||||
"exec": "执行", "done": "完成",
|
||||
"clear": "清空", "refresh": "刷新",
|
||||
"submit": "提交", "cancel": "取消",
|
||||
|
||||
"Close": "关闭", "Close others": "关闭其它", "Close all": "关闭所有",
|
||||
}[text]||text
|
||||
return list&&list[text] || can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || kit.Dict(
|
||||
mdb.CREATE, "创建", mdb.REMOVE, "删除", mdb.INSERT, "添加", mdb.DELETE, "删除", mdb.MODIFY, "修改", mdb.PRUNES, "清理", mdb.EXPORT, "导出", mdb.IMPORT, "导入", mdb.SEARCH, "搜索",
|
||||
html.PLUGIN, "插件", html.LABEL, "标签", html.HEIGHT, "高度", html.WIDTH, "宽度", ice.SHOW, "显示", ice.HIDE, "隐藏", chat.PROJECT, "项目", chat.PROFILE, "详情", chat.ACTIONS, "参数",
|
||||
ctx.ACTION, "操作", ice.RUN, "执行", ice.LIST, "查看", ice.BACK, "返回", mdb.PREV, "上一页", mdb.NEXT, "下一页", mdb.LINK, "链接",
|
||||
nfs.COPY, "复制", nfs.EDIT, "编辑", nfs.SAVE, "保存", nfs.TRASH, "删除", nfs.SOURCE, "源码", nfs.MODULE, "模块", nfs.RECENT, "最近",
|
||||
cli.OPEN, "打开", cli.CLOSE, "关闭", cli.START, "启动", cli.STOP, "停止", cli.BEGIN, "开始", cli.END, "结束", cli.EXEC, "执行", cli.DONE, "完成",
|
||||
web.CLEAR, "清空", web.REFRESH, "刷新", web.SUBMIT, "提交", web.CANCEL, "取消", web.UPLOAD, "上传", web.DOWNLOAD, "下载", web.TOIMAGE, "截图", web.SHARE, "共享",
|
||||
"Close", "关闭", "Close others", "关闭其它", "Close all", "关闭所有",
|
||||
)[text]||text
|
||||
},
|
||||
time: function(can, time, fmt) { var now = can.base.Date(time)
|
||||
var list = can.user.language(can) == "en"? ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
|
||||
@ -100,11 +93,11 @@ Volcanos("user", {info: {}, agent: {
|
||||
}) },
|
||||
copy: function(event, can, text) { if (!text) { return }
|
||||
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 }
|
||||
if (ok) { return can.user.toastSuccess(can, text, "copy success"), can.misc.Log(nfs.COPY, text), text }
|
||||
}
|
||||
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
|
||||
return can.user.toastSuccess(can, text, "copy success"), can.misc.Log(nfs.COPY, text), text
|
||||
},
|
||||
|
||||
carte: function(event, can, meta, list, cb, parent) {
|
||||
@ -226,7 +219,7 @@ Volcanos("user", {info: {}, agent: {
|
||||
if (cmd == ice.MSG_SESSID) { return can.misc.CookieSessid(can, arg[0]), msg.Reply(), can.user.reload(true) }
|
||||
can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() })
|
||||
}) },
|
||||
"授权": function() { can.misc.WSS(can, {type: html.CHROME, cmd: chat.SSO, "back": location.href}, function(event, msg, cmd, arg) { if (!msg) { return }
|
||||
"授权": function() { can.misc.WSS(can, {type: html.CHROME, cmd: chat.SSO, back: location.href}, function(event, msg, cmd, arg) { if (!msg) { return }
|
||||
if (cmd == "pwd") { return location.href = arg[1] }
|
||||
if (cmd == ice.MSG_SESSID) { return can.misc.CookieSessid(can, arg[0]), msg.Reply(), can.user.reload(true) }
|
||||
can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() })
|
||||
|
@ -36,6 +36,9 @@ fieldset.Action.vertical>div.output>fieldset.plugin>div.status { display:none; }
|
||||
|
||||
fieldset.Action.grid>div.output>fieldset.plugin { float:left; overflow:auto; }
|
||||
fieldset.Action.grid>div.output>fieldset.plugin>div.output { overflow:auto; }
|
||||
fieldset.Action.grid>div.output>fieldset.plugin>div.action { display:none; }
|
||||
fieldset.Action.grid>div.output>fieldset.plugin>div.status { display:none; }
|
||||
fieldset.Action.grid>div.output>fieldset.plugin>form.option input[type=text] { width:80px; }
|
||||
fieldset.Action.flow>div.output>fieldset.plugin { float:left; }
|
||||
fieldset.Action.free>div.output>fieldset.plugin { position:absolute; }
|
||||
fieldset.Action.free>div.output>fieldset.plugin.select { display:block; }
|
||||
|
155
panel/action.js
155
panel/action.js
@ -1,13 +1,14 @@
|
||||
(function() { var TABS = "tabs", TABVIEW = "tabview", HORIZON = "horizon", VERTICAL = "vertical", GRID = "grid", FREE = "free", FLOW = "flow", PAGE = "page"
|
||||
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)
|
||||
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() })
|
||||
})
|
||||
}, function() { can.onaction.layout(can, can.misc.SearchOrConf(can, html.LAYOUT), true) })
|
||||
},
|
||||
_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.Mode(web.SHARE), 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))
|
||||
can.Conf(chat.RIVER, web.SHARE, chat.STORM, share), can.onimport._init(can, msg)
|
||||
}) },
|
||||
@ -16,16 +17,15 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can)
|
||||
return can.runActionCommand(event, sub._index, cmds, cb)
|
||||
}), can.user.title(meta.name), skip || next() }), can.onlayout._init(can)
|
||||
},
|
||||
_run: function(can, sub, cbs) {
|
||||
_run: function(can, sub, cbs) { can._plugins = can.misc.concat(can, can._plugins, [sub])
|
||||
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)
|
||||
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()) }
|
||||
if (sub._delay_refresh) { sub._delay_refresh = false, sub.onaction._resize(sub, can.Conf(html.LAYOUT) == "", can.ConfHeight(), can.ConfWidth()) }
|
||||
}, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}]
|
||||
sub._header_tabs = can.page.Append(can, can._header_tabs, tabs)._target, sub._tabs = can.page.Append(can, can._action, tabs)._target
|
||||
},
|
||||
@ -37,53 +37,51 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can)
|
||||
Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can)
|
||||
can.onengine.listen(can, chat.ONKEYDOWN, function(msg, model) { can._keylist = can.onkeymap._parse(msg._event, can, model, can._keylist||[], can._output) })
|
||||
},
|
||||
_mode: {
|
||||
normal: {
|
||||
j: function(event, can, target) { target.scrollBy(0, event.ctrlKey? 300: 30) },
|
||||
k: function(event, can, target) { target.scrollBy(0, event.ctrlKey? -300: -30) },
|
||||
_mode: { normal: {
|
||||
j: function(event, can, target) { target.scrollBy(0, event.ctrlKey? 300: 30) },
|
||||
k: function(event, can, target) { target.scrollBy(0, event.ctrlKey? -300: -30) },
|
||||
|
||||
b: function(event, can) { can.search(event, ["Header.onaction.black"]) },
|
||||
w: function(event, can) { can.search(event, ["Header.onaction.white"]) },
|
||||
c: function(event, can) { can.user.toimage(event, can, can.user.title(), can._target.parentNode, true) },
|
||||
b: function(event, can) { can.search(event, ["Header.onaction.black"]) },
|
||||
w: function(event, can) { can.search(event, ["Header.onaction.white"]) },
|
||||
c: function(event, can) { can.user.toimage(event, can, can.user.title(), can._target.parentNode, true) },
|
||||
|
||||
":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
|
||||
" ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },
|
||||
Enter: function(event, can) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event)) },
|
||||
Escape: function(event, can, target) { can.page.Select(can, can._root._target, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(target) { can.page.Remove(can, target) }) },
|
||||
},
|
||||
}, _engine: {},
|
||||
":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
|
||||
" ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },
|
||||
Enter: function(event, can) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event)) },
|
||||
Escape: function(event, can, target) { can.page.Select(can, can._root._target, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(target) { can.page.Remove(can, target) }) },
|
||||
}, }, _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)
|
||||
can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN), can.Conf(html.MARGIN_X, (can.user.isMobile? 2: 4)*html.PLUGIN_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))
|
||||
event.target.innerHTML = toggle()? gt: lt, can.onaction.layout(can, can.Conf(html.LAYOUT))
|
||||
}}])
|
||||
} target.ontouchstart = function(event) { can.onengine.signal(can, chat.ONACTION_TOUCH, can.request(event)) }
|
||||
},
|
||||
_menus: [
|
||||
[chat.LAYOUT, "auto", "tabs", "tabview", "horizon", "vertical", "free", "grid", "flow", "page"],
|
||||
[html.LAYOUT, ice.AUTO, TABS, TABVIEW, HORIZON, VERTICAL, GRID, FREE, FLOW, PAGE],
|
||||
[ice.HELP, "tutor", "manual", "service", "devops", "refer"],
|
||||
],
|
||||
_trans: {
|
||||
"layout": "布局",
|
||||
"auto": "默认布局",
|
||||
"tabs": "标签布局",
|
||||
"tabview": "标签分屏",
|
||||
"horizon": "左右分屏",
|
||||
"vertical": "上下分屏",
|
||||
"free": "自由布局",
|
||||
"grid": "网格布局",
|
||||
"flow": "流动布局",
|
||||
"page": "网页布局",
|
||||
_trans: kit.Dict(
|
||||
html.LAYOUT, "布局",
|
||||
ice.AUTO, "默认布局",
|
||||
TABS, "标签布局",
|
||||
TABVIEW, "标签分屏",
|
||||
HORIZON, "左右分屏",
|
||||
VERTICAL, "上下分屏",
|
||||
GRID, "网格布局",
|
||||
FREE, "自由布局",
|
||||
FLOW, "流动布局",
|
||||
PAGE, "网页布局",
|
||||
|
||||
"help": "帮助",
|
||||
"tutor": "入门简介",
|
||||
"manual": "使用手册",
|
||||
"service": "服务手册",
|
||||
"devops": "编程手册",
|
||||
"refer": "参考手册",
|
||||
},
|
||||
ice.HELP, "帮助",
|
||||
"tutor", "入门简介",
|
||||
"manual", "使用手册",
|
||||
"service", "服务手册",
|
||||
"devops", "编程手册",
|
||||
"refer", "参考手册",
|
||||
),
|
||||
onmain: function(can) { can.onimport._share(can, can.misc.Search(can, web.SHARE)) },
|
||||
onlogin: function(can) { if (!can.Conf(chat.TOOL) && !can.user.mod.isCmd) { return }
|
||||
can._names = location.pathname, can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
|
||||
@ -98,33 +96,34 @@ Volcanos(chat.ONACTION, {_init: function(can, target) {
|
||||
return cache[old] = can._plugins, can._plugins = cache[key]||[], key
|
||||
}, can._output, can._action, can._header_tabs)) {
|
||||
var conf = can.core.Value(can._root, can.core.Keys(chat.RIVER, river, chat.STORM, storm))||{}
|
||||
return can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||msg.Option(chat.LAYOUT)||conf.layout, true)
|
||||
return can.onaction.layout(can, can.misc.SearchOrConf(can, html.LAYOUT)||msg.Option(html.LAYOUT)||conf.layout, true)
|
||||
}
|
||||
can.run({}, [river, storm], function(msg) {
|
||||
if (msg.Length() == 0) { return can.onengine.signal(can, chat.ONACTION_NOTOOL, can.request({}, {river: river, storm: storm})) }
|
||||
can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||msg.Option(chat.LAYOUT), true)
|
||||
can.onaction.layout(can, can.misc.SearchOrConf(can, html.LAYOUT)||msg.Option(html.LAYOUT), true)
|
||||
return can.onkeymap._init(can), can.onimport._menu(can, msg), can.onimport._init(can, msg)
|
||||
})
|
||||
},
|
||||
onaction_cmd: function(can, msg) {
|
||||
can.Conf(html.MARGIN_Y, 2*html.ACTION_HEIGHT), can.Conf(html.MARGIN_X, 0)
|
||||
can.ConfHeight(can.page.height()-can.Conf(html.MARGIN_Y)), can.ConfWidth(can.page.width())
|
||||
can.page.style(can, can._target, html.HEIGHT, can.page.height(), html.WIDTH, can.page.width())
|
||||
onaction_cmd: function(can, msg) { can.Conf(html.MARGIN_Y, 2*html.ACTION_HEIGHT), can.Conf(html.MARGIN_X, 0)
|
||||
can.page.style(can, can._target, html.HEIGHT, can.ConfHeight(can.page.height()-can.Conf(html.MARGIN_Y)), html.WIDTH, can.ConfWidth(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") { var index = parseInt(event.key)-1
|
||||
onsearch: function(can, msg, arg) { var fields = msg.Option(ice.MSG_FIELDS).split(ice.FS)
|
||||
if (arg[0] == mdb.FOREACH || arg[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, arg, fields) }
|
||||
if (arg[0] == mdb.FOREACH || arg[0] == ctx.COMMAND) { can.onexport.command(can, msg, arg, fields) }
|
||||
},
|
||||
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()) },
|
||||
onresize: function(can, height, width) { can.onlayout._init(can), can.onaction.layout(can, can.Conf(html.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 = "" } 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, "")
|
||||
layout: function(can, button, silent) { button = button||ice.AUTO; can.page.ClassList.del(can, can._target, can.Conf(html.LAYOUT))
|
||||
if (button == ice.AUTO) { button = "" } else { can.page.ClassList.add(can, can._target, can.Conf(html.LAYOUT, button)) }
|
||||
can.user.isMobile || can.Mode() || (can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true))
|
||||
can.user.isMobile && can.Mode() && can.page.style(can, can._target, html.WIDTH, "", html.HEIGHT, "")
|
||||
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)
|
||||
},
|
||||
@ -135,10 +134,9 @@ Volcanos(chat.ONLAYOUT, {
|
||||
can.getActionSize(function(height, width) { can.ConfHeight(height-can.Conf(html.MARGIN_Y)+html.ACTION_MARGIN), can.ConfWidth(width-can.Conf(html.MARGIN_X)) })
|
||||
can.onmotion.select(can, can._action, html.DIV_TABS) || can.onmotion.select(can, can._action, html.DIV_TABS, 0, function(target) { target.click() })
|
||||
},
|
||||
tabview: function(can) { can.onmotion.toggle(can, can._header_tabs, true)
|
||||
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can)
|
||||
tabview: 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) })
|
||||
can.core.List(can._plugins, function(sub) { sub._delay_refresh = true })
|
||||
can.onmotion.toggle(can, can._header_tabs, true), can.core.List(can._plugins, function(sub) { sub._delay_refresh = true })
|
||||
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
|
||||
},
|
||||
@ -156,10 +154,10 @@ Volcanos(chat.ONLAYOUT, {
|
||||
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")
|
||||
can.ConfHeight(h-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, "")
|
||||
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, {
|
||||
@ -172,18 +170,20 @@ Volcanos(chat.ONEXPORT, {
|
||||
msg.Option(html.MARGIN_Y, can.Conf(html.MARGIN_Y))
|
||||
msg.Option(html.SCROLL, can.user.isMobile? can._target.parentNode.parentNode.scrollTop: can._output.scrollTop)
|
||||
},
|
||||
layout: function(can, msg) { return can.Conf(chat.LAYOUT) },
|
||||
layout: function(can, msg) { return can.Conf(html.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)
|
||||
}) },
|
||||
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: 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)
|
||||
})
|
||||
},
|
||||
plugin: function(can, msg, arg, fields) { can.core.List(can._plugins, function(sub) { var meta = sub.Conf(); if (meta.index.indexOf(arg[1]) == -1) { return }
|
||||
var data = {ctx: ice.CAN, cmd: can._name, type: mdb.PLUGIN, name: sub._legend.innerHTML, text: shy("跳转", function(event) { sub.Focus() })}
|
||||
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)
|
||||
}) },
|
||||
command: function(can, msg, arg, fields) { var meta = can.onengine.plugin.meta; can.core.Item(arg[1] == ""? meta: meta[arg[1]]? kit.Dict(arg[1], meta[arg[1]]): {}, function(name, command) {
|
||||
msg.Push(kit.Dict(ice.CTX, ice.CAN, ice.CMD, ctx.COMMAND, mdb.TYPE, ice.CAN, mdb.NAME, name||command.name, mdb.TEXT, command.help,
|
||||
ctx.CONTEXT, ice.CAN, ctx.COMMAND, name, ctx.INDEX, can.core.Keys(ice.CAN, name),
|
||||
), fields)
|
||||
}) }
|
||||
})
|
||||
Volcanos(chat.ONENGINE, {_engine: function(event, sup, msg, can, cmds, cb) {
|
||||
var storm = can.core.Value(can._root, can.core.Keys(chat.RIVER, cmds[0], chat.STORM, cmds[1])); if (!storm || cmds.length != 2) { return false }
|
||||
@ -200,26 +200,21 @@ 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(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||command.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]),
|
||||
plugin: shy("默认插件", [mdb.NAME, ice.LIST, ice.BACK]),
|
||||
layout: shy("界面布局", ["layout:select=auto,tabs,tabview,horizon,vertical,free,grid,flow,page", ice.RUN], function(can, msg, arg) { can.onaction.layout(can, arg[0], true) }),
|
||||
|
||||
"parse": shy("生成网页", {
|
||||
"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) {
|
||||
"show": function(can, msg, arg) { var name = arg[1]||ice.CAN; can.isCmdMode() && can.user.title(name)
|
||||
arg && arg[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)
|
||||
sub.onappend.parse(sub, sub.onappend._parse(sub, arg[0], name, sub.ConfHeight()), can._output)
|
||||
})
|
||||
},
|
||||
}, [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]) }
|
||||
"save": function(can, msg, arg) { can.user.downloads(can, arg[1], arg[0]) }
|
||||
}, ["file=hi.txt", "text:textarea='hello world'", "save:button"]),
|
||||
})
|
||||
})()
|
||||
|
@ -8,3 +8,6 @@ fieldset.Footer>div.output div.toast { background-color:darkcyan; float:right; }
|
||||
fieldset.Footer>div.output div.cmd { padding:0px; float:left; }
|
||||
fieldset.Footer>div.output input[name=cmd] { width:120px; border-radius:0; }
|
||||
fieldset.Footer>div.output input[name=cmd]:focus { width:320px; }
|
||||
|
||||
fieldset.story.nlog.float tbody tr.error { color:red; }
|
||||
fieldset.story.nlog.float tbody tr.warn { color:yellow; }
|
||||
|
@ -1,59 +1,72 @@
|
||||
(function() { var NTIP = "ntip", NCMD = "ncmd", NLOG = "nlog"
|
||||
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) { can.user.isMobile || can.core.List(can.base.getValid(msg.result, ["shylinuxc@gmail.com"]), 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), ["ntip", "ncmd"]).reverse(), function(item) {
|
||||
can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, can.Conf(item)], list: [
|
||||
{text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]},
|
||||
], 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) }}])._target },
|
||||
_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), [NTIP, NCMD, NLOG]).reverse(), function(item) {
|
||||
can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, can.Conf(item)], list: [
|
||||
{text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]},
|
||||
], 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) }}])._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)) })
|
||||
can.getActionSize(function(left) { 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") },
|
||||
toast: function(can, msg, title, content, fileline, time) { can.onimport._data(can, NTIP, {time: time, fileline: fileline, title: title, content: content}), can.page.Modify(can, can.toast, [time, title, content].join(ice.SP)) },
|
||||
debug: function(can, msg, _args, fileline, time) { can.onimport._data(can, NLOG, {time: time, fileline: fileline, type: _args[2], content: _args.slice(4).join(ice.SP)}) },
|
||||
ncmd: function(can, msg, _follow, _cmds) { can.onimport._data(can, NCMD, {time: can.base.Time(), follow: _follow, cmds: _cmds}) },
|
||||
_data: function(can, name, item) { can[name] = can[name]||can.request(), can[name].Push(item), can.onimport.count(can, name) },
|
||||
})
|
||||
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}) },
|
||||
ondebug: function(can, msg) { can.core.CallFunc(can.onimport.debug, {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", html.INPUT], function(target) { can.onmotion.focus(can, target) }) },
|
||||
})
|
||||
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))
|
||||
float: function(can, msg, name, cb) { if (!can[name]) { return } if (can[name]._target) { return can[name]._target.close() } var ui = can.onappend.field(can, chat.STORY, {name: name, pos: chat.FLOAT}, can._root._target); can[name]._target = ui
|
||||
ui.close = function() { can.page.Remove(can, ui._target), delete(can[name]._target) }, ui.refresh = function() { ui.close(), can.toast.click() }
|
||||
can.getActionSize(function(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)
|
||||
can.onappend._action(can, [cli.CLOSE, web.REFRESH, {input: html.TEXT, placeholder: web.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) {
|
||||
msg && 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), msg && 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._float(can, web.CODE_INNER, [ice.USR_VOLCANOS].concat(line.fileline.split(ice.DF))) }) },
|
||||
ncmd: function(can) { can.onexport.float(can, can._cmds, "ncmd", function(value, key, index, line) {
|
||||
ntip: function(can) { can.onexport.float(can, can[NTIP], NTIP, function(value, key, index, line) { can.onappend._float(can, web.CODE_INNER, [ice.USR_VOLCANOS].concat(line.fileline.split(ice.DF))) }) },
|
||||
nlog: function(can) { var ui = can.onexport.float(can, can[NLOG], NLOG, function(value, key, index, line) { can.onappend._float(can, web.CODE_INNER, [ice.USR_VOLCANOS].concat(line.fileline.split(ice.DF))) })
|
||||
ui && can.page.Select(can, ui.output, [html.TBODY, html.TR], function(tr, i) { can.page.ClassList.add(can, tr, can[NLOG][mdb.TYPE][i]) })
|
||||
},
|
||||
ncmd: function(can) { can.onexport.float(can, can[NCMD], 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.Search": cmds = cmds.slice(2); break
|
||||
case "can.Footer": cmds = cmds.slice(2); break
|
||||
default: return
|
||||
}
|
||||
switch (cmds[0]) {
|
||||
case web.WIKI_WORD: cmds = cmds.slice(5); break
|
||||
}
|
||||
can.onappend._float(can, cmds[0], cmds.slice(1))
|
||||
can.onappend._float(can, cmds[0], cmds[1] != ctx.ACTION? cmds.slice(1): [])
|
||||
}) },
|
||||
})
|
||||
Volcanos(chat.ONPLUGIN, {
|
||||
alert: shy("提示", [wiki.CONTENT], function(can, msg, arg) { arg && arg.length > 0 && can.user.alert(arg[0]) }),
|
||||
toast: shy("提示", [wiki.CONTENT, wiki.TITLE], function(can, msg, arg) { arg && arg.length > 0 && can.user.toast(can, arg[0], arg[1]), msg.Copy(can[NTIP]), msg.StatusTimeCount() }),
|
||||
debug: shy("日志", ["type:select=Info,Warn,Error,Debug", wiki.CONTENT], function(can, msg, arg) { arg && arg.length > 1 && can.misc[arg[0]](can, arg[1]), msg.Copy(can[NLOG]), msg.StatusTimeCount() }),
|
||||
})
|
||||
})()
|
||||
|
@ -59,11 +59,11 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {
|
||||
_menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, "toimage"]],
|
||||
_trans: {
|
||||
"setting": "设置", "black": "黑色主题", "white": "白色主题", "print": "打印主题", "webpack": "打包页面", "toimage": "生成图片",
|
||||
"shareuser": "共享用户", "setnick": "设置昵称", "password": "修改密码", "language": "语言地区", "chinese": "中文", "clear": "清除背景", "logout": "退出登录",
|
||||
},
|
||||
_menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, web.TOIMAGE]],
|
||||
_trans: kit.Dict(
|
||||
"setting", "设置", chat.BLACK, "黑色主题", chat.WHITE, "白色主题", chat.PRINT, "打印主题", code.WEBPACK, "打包页面", web.TOIMAGE, "生成图片",
|
||||
"shareuser", "共享用户", "setnick", "设置昵称", aaa.PASSWORD, "修改密码", aaa.LANGUAGE, "语言地区", aaa.CHINESE, "中文", web.CLEAR, "清除背景", aaa.LOGOUT, "退出登录",
|
||||
),
|
||||
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"))
|
||||
@ -75,17 +75,17 @@ Volcanos(chat.ONACTION, {
|
||||
},
|
||||
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) },
|
||||
onsearch_focus: function(can) { can._search && can._search.focus() },
|
||||
onshare: function(can, msg, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) },
|
||||
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]) }) })
|
||||
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),
|
||||
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(html.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)) },
|
||||
black: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) },
|
||||
@ -118,22 +118,36 @@ Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight
|
||||
avatar: function(can) { return can.user.info.avatar == "void"? "": can.user.info.avatar },
|
||||
})
|
||||
Volcanos(chat.ONPLUGIN, {
|
||||
title: shy("标题", {}, [chat.TITLE, ice.LIST], function(can, msg, cmds) { msg.Echo(can.user.title(cmds[0])) }),
|
||||
topic: shy("主题", {
|
||||
title: shy("应用标题", [chat.TITLE], function(can, msg, arg) {
|
||||
msg.Echo(can.user.title(arg[0]))
|
||||
}),
|
||||
topic: shy("界面主题", {
|
||||
_init: function(can) { can.Option(chat.TOPIC, can.getHeader(chat.TOPIC)) },
|
||||
}, ["topic:select=white,black", ice.RUN], function(can, msg, cmds) { msg.Echo(can.onimport.topic(can, cmds[0])) }),
|
||||
alert: shy("提示", {}, [mdb.TEXT, ice.LIST], function(can, msg, cmds) { cmds && cmds[0] && can.user.alert(cmds[0]) }),
|
||||
location: shy("地址", {
|
||||
copy: function(can, msg, cmds) { can.user.copy(msg._event, can, location.href) },
|
||||
}, [mdb.LINK, ice.LIST, ice.COPY], function(can, msg, cmds, cb) {
|
||||
can.run(can.request({}, mdb.LINK, location.href), [web.SHARE], function(res) {
|
||||
}, ["topic:select=white,black", ice.RUN], function(can, msg, arg) {
|
||||
msg.Echo(can.onimport.topic(can, arg[0]))
|
||||
}),
|
||||
location: shy("请求地址", {
|
||||
copy: function(can) { can.user.copy(msg._event, can, location.href) },
|
||||
}, [mdb.LINK, ice.LIST, ice.COPY], function(can, msg, cb) {
|
||||
can.run(can.request({}, kit.Dict(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)
|
||||
})
|
||||
}),
|
||||
cookie: shy("参数", {}, [mdb.NAME, mdb.VALUE, ice.LIST, ice.BACK], function(can, msg, cmds) {
|
||||
can.core.Item(can.misc.Cookie(can), function(key, value) { if (cmds[0] && key != cmds[0]) { return }
|
||||
cookie: shy("请求参数", [mdb.NAME, mdb.VALUE, ice.LIST, ice.BACK], function(can, msg, arg) {
|
||||
arg.length > 1 && can.misc.Cookie(can, arg[0], arg[1])
|
||||
can.core.Item(can.misc.Cookie(can), function(key, value) { if (!key || !value || arg[0] && key != arg[0]) { return }
|
||||
msg.Push(mdb.NAME, key), msg.Push(mdb.VALUE, value)
|
||||
})
|
||||
}), msg.StatusTimeCount()
|
||||
}),
|
||||
avatar: shy("用户头像", [mdb.LINK], function(can, sub, cb) {
|
||||
can.page.Append(can, sub._output, [{img: can.user.info.avatar, style: kit.Dict(html.MAX_HEIGHT, sub.ConfHeight(), html.MAX_WIDTH, sub.ConfWidth())}])
|
||||
}),
|
||||
background: shy("背景图片", [mdb.LINK], function(can, sub, cb) {
|
||||
can.page.Append(can, sub._output, [{img: can.user.info.background, style: kit.Dict(html.MAX_HEIGHT, sub.ConfHeight(), html.MAX_WIDTH, sub.ConfWidth())}])
|
||||
}),
|
||||
language: shy("语言地区", {
|
||||
_init: function(can) { can.Option(aaa.LANGUAGE, can.user.info.language||"zh") },
|
||||
}, ["language:select=zh,en", ice.RUN], function(can, msg, arg) {
|
||||
can.runAction(event, aaa.LANGUAGE, [arg[0]], function(msg) { can.user.reload() })
|
||||
}),
|
||||
log: shy("日志", {}, [mdb.TEXT, ice.LIST], function(can, msg, cmds) { can.misc.Log(cmds) }),
|
||||
})
|
||||
|
@ -1,16 +1,14 @@
|
||||
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()
|
||||
},
|
||||
_main: function(can, msg) {
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { 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() },
|
||||
_main: function(can, msg) { can.river_list = {}, can.storm_list = {}, can.sublist = {}
|
||||
can._main_river = can.misc.Search(can, chat.RIVER)||msg.Option(ice.MSG_RIVER)||can._main_river||"project"
|
||||
can._main_storm = can.misc.Search(can, chat.STORM)||msg.Option(ice.MSG_STORM)||can._main_storm||"studio"
|
||||
},
|
||||
_menu: function(can, msg) { if (can.user.mod.isPod||can.user.isMobile) { return }
|
||||
can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.ondetail._menus), function(event, button) {
|
||||
can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)])
|
||||
})
|
||||
}), can.onappend._action(can, can.Conf(ctx.ACTION)||can.onaction.list)
|
||||
},
|
||||
_river: function(can, meta, cb) { return {text: [meta.name, html.DIV, html.ITEM],
|
||||
onclick: function(event) { can.onaction.storm(event, can, meta.hash) },
|
||||
@ -26,17 +24,23 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onimport._main(can, msg
|
||||
can.onaction.carte(event, can, list, function(event, button, meta) { meta[button](event, can, button, river, storm) })
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: function(can) { can.onmotion.hidden(can) },
|
||||
Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.REFRESH, web.SHARE], _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.onmotion.clear(can), can.onimport._main(can, msg), can.onimport._init(can, msg), can.onimport._menu(can, msg)
|
||||
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) },
|
||||
onaction_notool: function(can, msg, river, storm) { can.ondetail["添加工具"](msg._event, can, "添加工具", river, storm) },
|
||||
onsearch: function(can, msg, arg) { if (arg[0] == mdb.FOREACH || arg[0] == chat.STORM) { can.onexport.storm(can, msg, arg) } },
|
||||
onresize: function(can, msg) { can.user.isMobile && can.onmotion.hidden(can, can._target) },
|
||||
onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") },
|
||||
|
||||
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()}) })
|
||||
}) },
|
||||
refresh: function(event, can) { can.misc.Search(can, {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), layout: can.getAction(html.LAYOUT)}) },
|
||||
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)]) },
|
||||
|
||||
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) {
|
||||
@ -48,12 +52,6 @@ Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: func
|
||||
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, {list: ["添加应用", "重命名群组", "删除群组"],
|
||||
sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"],
|
||||
@ -84,19 +82,15 @@ Volcanos(chat.ONDETAIL, {list: ["添加应用", "重命名群组", "删除群组
|
||||
}) },
|
||||
})
|
||||
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) })})
|
||||
storm: function(can, msg, arg) { can.core.Item(can._root.river, function(river, value) { can.core.Item(value.storm, function(storm, item) { if (arg[1] != "" && storm.indexOf(arg[1]) == -1 && item.name.indexOf(arg[1]) == -1) { return }
|
||||
msg.Push({ctx: ice.CAN, cmd: can._name, 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 }
|
||||
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) { can.core.Item(value.storm).length > 0 && 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
|
||||
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,4 +1,4 @@
|
||||
fieldset.Search { background-color:#041a25bd; padding:10px; position:fixed; left:0px; top:31px; display:none; }
|
||||
fieldset.Search input.word { width:-webkit-fill-available; }
|
||||
fieldset.panel.Search>div.status { border-top:1px solid darkcyan; }
|
||||
fieldset.panel.Search>div.output table { width:-webkit-fill-available; }
|
||||
fieldset.Search>div.output table { width:-webkit-fill-available; }
|
||||
fieldset.Search>div.status { border-top:1px solid darkcyan; }
|
||||
|
@ -1,66 +1,63 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can, can.ui.content), can.list = msg.Table()
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can, can.ui.content), can._plugins = [], 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 }
|
||||
can.onaction[can.type==mdb.FOREACH||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index)
|
||||
can.onaction[can.type == mdb.FOREACH || event.ctrlKey? mdb.PLUGIN: mdb.SELECT](event, can, index)
|
||||
}}
|
||||
}, 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"}))
|
||||
}, can.ui.content, can.core.List((msg.Option("sort")||msg.Option(ice.MSG_FIELDS)).split(ice.FS))); can.onmotion.story.auto(can)
|
||||
can.onappend._status(can, can.base.Obj(msg.Option(ice.MSG_STATUS), []).concat({name: mdb.SELECT, value: "0"}))
|
||||
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)
|
||||
_word: function(can, msg, arg, fields) { if (arg[1].indexOf(";") > -1) { var ls = can.core.Split(arg[1], "\t ;", "\t ;"); arg[0] = ls[0], arg[1] = ls[1] }
|
||||
can.run(can.request({}, {fields: fields.join(ice.FS)}, msg), arg, function(res) { res.Option(ice.ARG, arg)
|
||||
can.onengine.signal(can, chat.ONSEARCH, res), can.type = arg[0], 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||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]
|
||||
select: function(can, msg, cmds, cb) { can.getActionSize(function(left, top, width, height) { can.page.style(can, can._target, {left: left||0, top: top||0}), can.onaction.onsize(can, height, width) })
|
||||
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.onmotion.hidden(can, can.ui.display)
|
||||
can.ui.word.value = cmds[1], can.input = function(event, word) { cmds[1] = word||cmds[1]; can.onimport._word(can, msg, cmds, fields) }
|
||||
can.cb = function() { can.base.isFunc(cb) && cb(can.onexport.select(can)), can.onmotion.hide(can) }
|
||||
can.input = function(event, word) { cmds[1] = word||cmds[1]; can.onimport._word(can, msg, cmds, fields) }
|
||||
can.onimport._word(can, msg, cmds, fields)
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {_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)
|
||||
can.ui.word = can.page.Append(can, can._action, [{input: ["word", function(event) {
|
||||
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)
|
||||
return can.onaction[can.type == mdb.FOREACH? mdb.PLUGIN: html.SELECT](event, can, first.dataset.index)
|
||||
} 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+event.key)
|
||||
return can.onkeymap.selectCtrlN(event, can, can.ui.content, [html.TBODY, html.TR], function(target) { target.firstChild.click() })
|
||||
} event.key.length == 1 && 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||""]) },
|
||||
onkeydown: function(can, msg) { msg._event.key == lang.ESCAPE && can.onmotion.hidden(can, can._target) },
|
||||
onsize: function(can, height, width) { can.ConfHeight(height-2*html.PLUGIN_MARGIN-2*html.ACTION_HEIGHT), can.ConfWidth(width-2*html.PLUGIN_MARGIN)
|
||||
can.core.List([can.ui.content, can.ui.display, can.ui.profile], function(target) { can.page.style(can, target, html.MAX_WIDTH, can.ConfWidth()) })
|
||||
can.core.List(can._plugins, function(sub) { 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) })
|
||||
can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight()-html.ACTION_HEIGHT)
|
||||
},
|
||||
|
||||
close: function(event, can) { can.onmotion.hide(can) },
|
||||
clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) },
|
||||
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) }
|
||||
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, {index: cmd||msg.Option(mdb.INDEX), args: cmd == web.WIKI_WORD? [line.name]: []}, function(sub, meta) { can.onmotion.delay(can, function() { sub.Focus() }, 20)
|
||||
can.onappend.plugin(can, {index: cmd||msg.Option(mdb.INDEX), args: cmd == web.WIKI_WORD? [line.name]: []}, function(sub, meta) { can._plugins = (can._plugins||[]).concat(sub)
|
||||
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)
|
||||
can.onmotion.delay(can, function() { sub.Focus() })
|
||||
}, 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) }
|
||||
var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText })
|
||||
var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText }); can.onmotion.toggle(can, can.ui.display, true)
|
||||
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)
|
||||
can.page.Remove(can, event.target.parentNode), can.Status(mdb.SELECT, can.page.Select(can, can.ui.display, html.TR).length-1)
|
||||
}}]), can.Status(mdb.SELECT, can.page.Select(can, can.ui.display, html.TR).length-1)
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {
|
||||
|
@ -1,7 +1,6 @@
|
||||
Volcanos(chat.ONFIGURE, {date: {
|
||||
onclick: function(event, can, meta, target, cbs) { cbs(function(can, cb) {
|
||||
if (can._output.innerHTML) { return }
|
||||
function lunar(year, month, day) { return [] }
|
||||
const TODAY = "today", YEAR = "year", MONTH = "month", HOUR = "hour", MINUTE = "minute", SECOND = "second"
|
||||
var today = new Date(), now = can.base.Date((target.value||"").trim()); function _cb(_now) { cb(can, can.user.time(can, now = _now), target.value) }
|
||||
can.onappend._action(can, [cli.CLOSE, [HOUR].concat(can.core.List(24)), [MINUTE].concat(can.core.List(0, 60, 5)), [SECOND].concat(can.core.List(0, 60, 5)),
|
||||
@ -32,7 +31,7 @@ Volcanos(chat.ONFIGURE, {date: {
|
||||
|
||||
can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}])
|
||||
var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last } var _day = new Date(day)
|
||||
var l = lunar(day)
|
||||
var l = can.date.solar2lunar(day)
|
||||
can.page.Append(can, tr, [{view: [can.base.isIn(can.base.Time(day, "%y-%m-%d"), can.base.Time(now, "%y-%m-%d"), can.base.Time(today, "%y-%m-%d"))? html.SELECT: type, html.TD],
|
||||
onclick: function(event) { _day.setHours(now.getHours()), _day.setMinutes(now.getMinutes()), _day.getSeconds(now.getSeconds()), _cb(_day), meta._hold? show(_day): can.close() },
|
||||
list: [{text: day.getDate()+""}, {text: l.autoDay, "className": l.autoClass}]}])
|
||||
@ -46,12 +45,10 @@ Volcanos(chat.ONFIGURE, {date: {
|
||||
for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) { add(day, mdb.PREV) }
|
||||
for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) { add(day, mdb.MAIN) }
|
||||
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) { add(day, mdb.NEXT) }
|
||||
var l = lunar(now); can.page.Appends(can, can._status, [{view: "today", inner: [l.gzYear, l.Animal+"年", l.cnMonth, l.cnDay, l.lunarFestival||l.festival||l.Term, l.Astro].join(ice.SP)}])
|
||||
var l = can.date.solar2lunar(now); can.page.Appends(can, can._status, [{view: "today", inner: [l.gzYear, l.Animal+"年", l.cnMonth, l.cnDay, l.lunarFestival||l.festival||l.Term, l.Astro].join(ice.SP)}])
|
||||
return now
|
||||
}
|
||||
can.require(["/lib/lunar.js"], function() { lunar = function(day) { return calendar.solar2lunar(day) }
|
||||
show(now), can._show = function(d) { _cb(show(new Date(now.getTime()+d*24*3600*1000))) }
|
||||
})
|
||||
show(now), can._show = function(d) { _cb(show(new Date(now.getTime()+d*24*3600*1000))) }
|
||||
})},
|
||||
onkeydown: function(event, can, meta, cb, target, sub, last) { if (sub.hidden()) { return } switch (event.key) {
|
||||
case "n": can.page.SelectInput(can, sub._action, mdb.NEXT, function(target) { target.click() }); break
|
||||
|
@ -10,7 +10,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) {
|
||||
can.onmotion.select(can, can.ui.project, html.DIV_ITEM, event.target), can.current = event.target, can.onimport._profile(can, keys, item.meta)
|
||||
}, _add: function(data) { item.list.push(data), can.onimport._list(can, keys, item, ui.list, width, height) }}, {view: html.LIST}])
|
||||
|
||||
var field = can.onappend.field(can, item.meta.index? chat.PLUGIN: chat.LAYOUT, item.meta, target._target)
|
||||
var field = can.onappend.field(can, item.meta.index? chat.PLUGIN: html.LAYOUT, item.meta, target._target)
|
||||
can.page.style(can, ui.list._target = field.output, {width: width, height: height})
|
||||
item.meta.style && can.page.ClassList.add(can, ui.list._target, item.meta.style)
|
||||
|
||||
|
@ -69,7 +69,8 @@ body.black fieldset.inner.full>div.output div.content { color:white; }
|
||||
|
||||
/* body.white fieldset.inner.float>div.output div.profile { color:black; } */
|
||||
|
||||
body.simple fieldset.inner>div.output td.content>div.tabs { background-color:slategrey; padding:0px; height:31px; overflow:auto; display:block; }
|
||||
// body.simple fieldset.inner>div.output td.content>div.tabs { background-color:slategrey; padding:0px; height:31px; overflow:auto; display:block; }
|
||||
body.simple fieldset.inner>div.output td.content>div.tabs { background-color:#70809096; padding:0px; height:31px; overflow:auto; display:block; }
|
||||
body.simple fieldset.inner>div.output td.content>div.tabs div { background-color:teal; font-family:monospace; padding:7px 20px; height:17px; float:left; }
|
||||
body.simple fieldset.inner>div.output td.content>div.tabs div.select { background-color:#1d3349; }
|
||||
body.simple fieldset.inner>div.output td.content>div.tabs div:hover { background-color:#1d3349; }
|
||||
|
@ -82,7 +82,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(
|
||||
var begin = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1))
|
||||
var last = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay())
|
||||
var day = can.base.TimeAdd(last, (row-1)*7+col)
|
||||
var l = calendar.solar2lunar(day)
|
||||
var l = can.date.solar2lunar(day)
|
||||
return [can.page.Format(html.SPAN, day.getDate(), "day")+" "+can.page.Format(html.SPAN, l.autoDay, l.autoClass)].concat(hash[key(day)]||[])
|
||||
}
|
||||
function set(begin_time, col, row) {
|
||||
|
37
proto.js
37
proto.js
@ -61,10 +61,10 @@ var ctx = {
|
||||
EXTRA_INDEX: "extra.index", EXTRA_ARGS: "extra.args",
|
||||
}
|
||||
var cli = {
|
||||
DAEMON: "daemon", START: "start", STOP: "stop", OPEN: "open", CLOSE: "close", BEGIN: "begin", END: "end", GLASS: "#0000",
|
||||
DAEMON: "daemon", START: "start", STOP: "stop", OPEN: "open", CLOSE: "close", BEGIN: "begin", END: "end",
|
||||
COLOR: "color", WHITE: "white", BLACK: "black", RED: "red", GREEN: "green", BLUE: "blue",
|
||||
YELLOW: "yellow", CYAN: "cyan", PURPLE: "purple", MAGENTA: "magenta",
|
||||
MAKE: "make", MAIN: "main", DONE: "done", COST: "cost", FROM: "from", CLEAR: "clear",
|
||||
YELLOW: "yellow", CYAN: "cyan", PURPLE: "purple", MAGENTA: "magenta", GLASS: "#0000",
|
||||
MAKE: "make", MAIN: "main", EXEC: "exec", DONE: "done", COST: "cost", FROM: "from", CLEAR: "clear",
|
||||
}
|
||||
var aaa = {
|
||||
LOGIN: "login", LOGOUT: "logout", INVITE: "invite", TOKEN: "token",
|
||||
@ -74,15 +74,14 @@ var aaa = {
|
||||
}
|
||||
var web = {
|
||||
SPACE: "space", DREAM: "dream", SHARE: "share",
|
||||
WEBSITE: "website", DRAW: "draw", RESIZE: "resize", REFRESH: "refresh", CLEAR: "clear", UPLOAD: "upload", DOWNLOAD: "download",
|
||||
WEBSITE: "website", DRAW: "draw", CLEAR: "clear", REFRESH: "refresh", RESIZE: "resize", FILTER: "filter", SUBMIT: "submit", CANCEL: "cancel", UPLOAD: "upload", DOWNLOAD: "download", TOIMAGE: "toimage",
|
||||
SHARE_CACHE: "/share/cache/", SHARE_LOCAL: "/share/local/",
|
||||
|
||||
GET: "GET", PUT: "PUT", POST: "POST", DELETE: "DELETE",
|
||||
Accept: "Accept", ContentType: "Content-Type",
|
||||
ContentJSON: "application/json", ContentFORM: "application/x-www-form-urlencoded",
|
||||
|
||||
CODE_INNER: "web.code.inner",
|
||||
WIKI_WORD: "web.wiki.word",
|
||||
CODE_INNER: "web.code.inner", WIKI_WORD: "web.wiki.word",
|
||||
}
|
||||
var mdb = {
|
||||
DICT: "dict", META: "meta", HASH: "hash", LIST: "list",
|
||||
@ -102,8 +101,9 @@ var ssh = {
|
||||
}
|
||||
var nfs = {
|
||||
PATH: "path", FILE: "file", LINE: "line", SIZE: "size", ROOT: "root",
|
||||
SAVE: "save", LOAD: "load", FIND: "find", GREP: "grep", TAGS: "tags",
|
||||
DIR: "dir", CAT: "cat", DEFS: "defs", TRASH: "trash", SCRIPT: "script", CONTENT: "content", DIR_ROOT: "dir_root", PWD: "./",
|
||||
COPY: "copy", EDIT: "edit", SAVE: "save", LOAD: "load", FIND: "find", GREP: "grep", TAGS: "tags",
|
||||
DIR: "dir", CAT: "cat", DEFS: "defs", TRASH: "trash", DIR_ROOT: "dir_root", PWD: "./",
|
||||
CONTENT: "content", SOURCE: "source", SCRIPT: "script", MODULE: "module", RECENT: "recent",
|
||||
HTML: "html", CSS: "css", JS: "js", GO: "go", SH: "sh", CSV: "csv", JSON: "json",
|
||||
ZML: "zml", IML: "iml", TXT: "txt", PNG: "png", WEBM: "webm",
|
||||
_CSS: ".css", _JS: ".js",
|
||||
@ -137,14 +137,14 @@ var wiki = {
|
||||
var chat = {
|
||||
LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin", STORY: "story",
|
||||
TOAST: "toast", CARTE: "carte", INPUT: "input", UPLOAD: "upload", CONTEXTS: "contexts",
|
||||
LAYOUT: "layout", PROJECT: "project", CONTENT: "content", DISPLAY: "display", PROFILE: "profile",
|
||||
LAYOUT: "layout", PROJECT: "project", CONTENT: "content", DISPLAY: "display", PROFILE: "profile", ACTIONS: "actions",
|
||||
TITLE: "title", TOPIC: "topic", BLACK: "black", WHITE: "white", PRINT: "print",
|
||||
SHARE: "share", RIVER: "river", STORM: "storm", FIELD: "field", TOOL: "tool",
|
||||
STATE: "state", MENUS: "menus", SSO: "sso", LOCATION: "location",
|
||||
SIMPLE: "simple", OUTPUT: "output", FLOAT: "float", FULL: "full", CMD: "cmd",
|
||||
|
||||
HEADER: "Header", ACTION: "Action",
|
||||
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"],
|
||||
libs: ["/lib/base.js", "/lib/core.js", "/lib/date.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"],
|
||||
panel_list: [
|
||||
{name: "Header", pos: "head"}, {name: "River", pos: "left"}, {name: "Action", pos: "main"}, {name: "Search", pos: "auto"}, {name: "Footer", pos: "foot"},
|
||||
],
|
||||
@ -165,7 +165,6 @@ var chat = {
|
||||
"/plugin/local/wiki/word.js",
|
||||
"/plugin/local/team/plan.js",
|
||||
"/plugin/local/mall/goods.js",
|
||||
"/lib/lunar.js",
|
||||
], PLUGIN_INPUT: "/plugin/input/", PLUGIN_STORY: "/plugin/story/", PLUGIN_LOCAL: "/plugin/local/",
|
||||
SHARE_LOCAL: "/share/local/",
|
||||
PLUGIN_STATE_JS: "/plugin/state.js", PLUGIN_INPUT_JS: "/plugin/input.js", PLUGIN_TABLE_JS: "/plugin/table.js",
|
||||
@ -173,13 +172,14 @@ var chat = {
|
||||
ONIMPORT: "onimport", ONSYNTAX: "onsyntax", ONFIGURE: "onfigure", ONACTION: "onaction", ONDETAIL: "ondetail", ONEXPORT: "onexport", ONPLUGIN: "onplugin",
|
||||
|
||||
ONMAIN: "onmain", ONLOGIN: "onlogin", ONREMOTE: "onremote", ONSEARCH: "onsearch",
|
||||
ONSIZE: "onsize", ONTOAST: "ontoast", ONSHARE: "onshare", ONPRINT: "onprint",
|
||||
ONSIZE: "onsize", ONTOAST: "ontoast", ONDEBUG: "ondebug", ONSHARE: "onshare", ONPRINT: "onprint",
|
||||
ONRESIZE: "onresize", ONKEYUP: "onkeyup", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange",
|
||||
ONSTORM_SELECT: "onstorm_select", ONACTION_NOTOOL: "onaction_notool", ONACTION_TOUCH: "onaction_touch", ONACTION_CMD: "onaction_cmd",
|
||||
ONOPENSEARCH: "onopensearch", ONSEARCH_FOCUS: "onsearch_focus", ONCOMMAND_FOCUS: "oncommand_focus",
|
||||
|
||||
_INIT: "_init", _TRANS: "_trans", _ENGINE: "_engine", _SEARCH: "_search", _OUTPUTS_CURRENT: "_outputs.-1",
|
||||
_NAMES: "_names", _TOAST: "_toast",
|
||||
|
||||
}
|
||||
var team = {
|
||||
TASK: "task", PLAN: "plan",
|
||||
@ -215,7 +215,8 @@ var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 31, ACTION_MARGIN: 200,
|
||||
TABLE: "table", THEAD: "thead", TBODY: "tbody", TR: "tr", TH: "th", TD: "td", BR: "br", UL: "ul", LI: "li",
|
||||
H1: "h1", H2: "h2", H3: "h3", A: "a", LABEL: "label", INNER: "inner", TITLE: "title",
|
||||
SPAN: "span", CODE: "code", DIV: "div", IMG: "img", VIDEO: "video", SPACE: "space",
|
||||
WSS: "wss", SVG: "svg", CANVAS: "canvas", IFRAME: "iframe", CHROME: "chrome",
|
||||
WSS: "wss", SVG: "svg", CANVAS: "canvas", IFRAME: "iframe",
|
||||
WEBVIEW: "webview", CHROME: "chrome", MOBILE: "mobile", LANDSCAPE: "landscape",
|
||||
|
||||
CLASS: "class", DISPLAY: "display", BLOCK: "block", NONE: "none", HIDDEN: "hidden", TOGGLE: "toggle", SIZE: "size",
|
||||
HEIGHT: "height", WIDTH: "width", PADDING: "padding", MARGIN: "margin", LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom",
|
||||
@ -233,14 +234,16 @@ var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 31, ACTION_MARGIN: 200,
|
||||
DIV_CODE: "div.code", DIV_FLOAT: "div.float", DIV_CONTENT: "div.content", TABLE_CONTENT: "table.content",
|
||||
}
|
||||
var lang = {
|
||||
UNDEFINED: "undefined", STRING: "string", NUMBER: "number", BOOLEAN: "boolean", FUNCTION: "function", OBJECT: "object",
|
||||
UNDEFINED: "undefined", STRING: "string", NUMBER: "number", BOOLEAN: "boolean", FUNCTION: "function", OBJECT: "object", ARRAY: "array",
|
||||
META: "Meta", ALT: "Alt", CONTROL: "Control", SHIFT: "Shift", TAB: "Tab", ENTER: "Enter", ESCAPE: "Escape",
|
||||
CMD: "Cmd", CTRL: "Ctrl", SPACE: "Space", BACKSPACE: "Backspace", ESC: "Esc", PS: "/",
|
||||
}
|
||||
|
||||
function shy(help, meta, list, cb) { var args = arguments, i = 0
|
||||
function next(type) { if (i < args.length && (!type || type == typeof args[i])) { return args[i++] } }
|
||||
return cb = typeof args[args.length-1] == lang.FUNCTION? args[args.length-1]: function() {}, cb.help = next(lang.STRING)||"", cb.meta = next(lang.OBJECT)||{}, cb.list = next(lang.OBJECT)||[], cb
|
||||
function shy(help, meta, list, cb) { var args = arguments, i = 0; function next(type) {
|
||||
if (type == lang.OBJECT) { if (typeof args[i] == lang.OBJECT && args[i].length == undefined) { return args[i++] }
|
||||
} else if (type == lang.ARRAY) { if (typeof args[i] == lang.OBJECT && args[i].length != undefined) { return args[i++] }
|
||||
} else if (i < args.length && (!type || type == typeof args[i])) { return args[i++] }
|
||||
} return cb = typeof args[args.length-1] == lang.FUNCTION? args[args.length-1]: function() {}, cb.help = next(lang.STRING)||"", cb.meta = next(lang.OBJECT)||{}, cb.list = next(lang.ARRAY)||[], cb
|
||||
}; var _can_name = "", _can_path = ""
|
||||
var Volcanos = shy({iceberg: "/chat/", volcano: "/frame.js", cache: {}, pack: {}}, function(name, can, libs, cb) {
|
||||
var meta = arguments.callee.meta, list = arguments.callee.list; if (typeof name == lang.OBJECT) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user