1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00

opt website

This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-02-06 20:16:07 +08:00
parent f3e5d748f5
commit 63958262c8
21 changed files with 157 additions and 120 deletions

View File

@ -14,8 +14,6 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
can.core.ItemCB(panel.onaction, function(key, cb) {
can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: panel, msg: msg}) })
}), can.core.CallFunc([panel.onaction, "_init"], {can: panel, cb: next, target: panel._target})
can.page.style(can, panel._target, panel.Conf(ctx.STYLE))
}, target)
}, function() { can.misc.Log(can.user.title(), ice.RUN, can)
can.require([can.volcano], null, function(can, name, sub) { can[name] = sub })
@ -56,10 +54,12 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
return can.base.isFunc(cb) && cb(msg)
}
if (msg.Option("_toast")) { var toast = can.user.toast(can, msg.Option("_toast"), "", -1) }
var names = msg.Option("_names")||panel._names||((can.Conf("iceberg")||"/chat/")+panel._name)
can.onengine.signal(can, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds}))
can.misc.Run(event, can, {names: names, daemon: can.core.Keys(can.ondaemon._list[0], msg._daemon)}, cmds, function(msg) {
Volcanos.meta.pack[key] = msg, delete(msg._handle), delete(msg._toast), can.base.isFunc(cb) && cb(msg)
toast && toast.close()
})
},
@ -134,6 +134,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
Action: function(key, value) { return can.page.SelectArgs(can, action, key, value)[0] },
Option: function(key, value) { return can.page.SelectArgs(can, option, key, value)[0] },
Update: function(event, cmds, cb, silent) { sub.onappend._output0(sub, sub.Conf(), event||{}, cmds||sub.Input(), cb, silent); return true },
Focus: function() { can.page.Select(can, option, html.INPUT_ARGS, function(item, index) { index == 0 && item.focus() }) },
Input: function(cmds, silent) {
cmds = cmds && cmds.length > 0? cmds: can.page.SelectArgs(can, option, ""), cmds = can.base.trim(cmds)
silent || cmds[0] == ctx.ACTION || can.base.Eq(sub._history[sub._history.length-1], cmds) || sub._history.push(cmds)
@ -146,14 +147,17 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
},
}, list, function(sub) { sub.Conf(meta), meta.feature = can.base.Obj(meta.feature, {})
can.page.ClassList.add(can, field, meta.index? meta.index.split(ice.PT).pop(): meta.name)
can.page.ClassList.add(can, field, meta.style||meta.feature.style||"")
var style = can.base.getValid(meta.style, meta.feature.style); switch (typeof style) {
case lang.STRING: can.page.ClassList.add(can, field, style); break
case lang.OBJECT: can.page.style(can, sub._target, style); break
}
meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg)
if (meta.msg) { var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)), sub.onappend._output(sub, msg, msg.Option(ice.MSG_DISPLAY)) }
can.page.Modify(can, sub._legend, {onmouseenter: function(event) {
can.page.Modify(can, sub._legend, kit.Dict(can.Conf("legend_event")||"onmouseenter", function(event) {
can.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["所有 ->"].concat(can.core.Item(meta.feature._trans))], [cli.CLOSE]))
}}), can.base.isFunc(cb) && cb(sub)
})), can.base.isFunc(cb) && cb(sub)
}); return sub
},
_option: function(can, meta, option, skip) { meta = meta||{}; var index = -1, args = can.base.Obj(meta.args||meta.arg||meta.opt, []), opts = can.base.Obj(meta.opts, {})
@ -201,8 +205,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
if (can._daemon) { msg._daemon = can._daemon }
}
if (msg.Option("_toast")) { var toast = can.user.toast(can, msg.Option("_toast"), "", -1) }
return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1")||{}; can._msg = msg, sub._msg = msg, toast && toast.close()
return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1")||{}; can._msg = msg, sub._msg = msg
if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return }
var process = msg._can == can || msg._can == sub
if (process && can.core.CallFunc([sub, chat.ONIMPORT, ice.MSG_PROCESS], {can: sub, msg: msg})) { return }
@ -224,6 +227,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.onmotion.clear(can, can._option), can.onappend._option(can, {inputs: table.onimport.list})
}
table._trans = can.base.Copy(table._trans||{}, can.core.Value(table, "onaction._trans"))
can.core.CallFunc([table, chat.ONIMPORT, "_init"], {can: table, msg: msg, list: msg.result||msg.append||[], cb: function(msg) {
table.onappend._action(table, msg.Option(ice.MSG_ACTION)||can.Conf(ice.MSG_ACTION))
table.onappend._status(table, msg.Option(ice.MSG_STATUS))
@ -384,9 +388,10 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
figure: function(can, meta, target, cbs) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return }
var input = meta.action||mdb.KEY; input != ice.AUTO && can.require(["/plugin/input/"+input+".js"], function(can) {
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) { on(event, can, meta, function(cb) {
can.sub? can.base.isFunc(cb) && cb(can.sub, cbs): can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, ["/plugin/input/"+input+".js"], function(sub) { sub.Conf(meta)
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option()); (meta.run||can.run)(event, cmds, cb, true) }, can.sub = sub
sub.close = function() { can.page.Remove(can, sub._target), delete(can.sub) }
if (target._can) { return can.base.isFunc(cb) && cb(target._can, cbs) }
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, ["/plugin/input/"+input+".js"], function(sub) { sub.Conf(meta)
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option()); (meta.run||can.run)(event, cmds, cb, true) }
sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }, target._can = sub
can.onappend._action(sub, [cli.CLOSE, cli.CLEAR, cli.REFRESH], sub._action, kit.Dict(
cli.REFRESH, function(event) { can.base.isFunc(cb) && cb(sub) },
@ -395,7 +400,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
)), can.onappend._status(sub, [mdb.TOTAL, mdb.INDEX])
can.page.style(sub, sub._target, meta.style), can.onmotion.hidden(can, sub._target)
can.base.isFunc(cb) && cb(sub, function() { can.onmotion.hidden(can, sub._target, true), can.base.isFunc(cbs) && cbs(sub) })
can.base.isFunc(cb) && cb(sub, function(sub, hide) { can.onmotion.hidden(can, sub._target, !hide), can.base.isFunc(cbs) && cbs(sub) })
}, document.body)
}, target, last) } })
})
@ -588,11 +593,10 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
key == chat.CARTE && can.page.Select(can, document.body, can.core.Keys(html.DIV, chat.CARTE), function(item) {
can.page.Remove(can, item)
})
this._hash[key] && can.page.Remove(can, this._hash[key]._target)
},
add: function(can, key, value) {
this.del(can, key), this._hash[key] = value
var last = this._hash[key]; if (!last) { return }
last.close? last.close(): can.page.Remove(can, last._target)
},
add: function(can, key, value) { return this.del(can, key), this._hash[key] = value },
auto: function(can, target, key) { var that = this
var list = can.core.List(arguments).slice(2)
if (list.length == 0) { list = [chat.CARTE, chat.INPUT] }
@ -749,6 +753,7 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
} can.onkeymap.prevent(event)
},
selectTableInput: function(event, can, target, cb) {
if (target.value == "") { return cb() }
if (event.ctrlKey) {
function select(order) { if (order == 0) { target.value = target._value }
var index = 0; return can.page.Select(can, can._output, html.TR, function(tr) {

View File

@ -176,7 +176,7 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
Search: shy("请求参数", function(can, key, value) { var args = {}
if (value == undefined && can.base.isString(key)) {
var ls = location.pathname.split(ice.PS); if (ls[1] == chat.SHARE) { args[chat.SHARE] = ls[2] }
for (var i = 2; i < ls.length; i += 2) { if ({"pod": true, "cmd": true}[ls[i]]) { args[ls[i]] + ls[i+1] } }
for (var i = 2; i < ls.length; i += 2) { if ({"pod": true, "cmd": true}[ls[i]]) { args[ls[i]] = ls[i+1] } }
}
location.search && location.search.slice(1).split("&").forEach(function(item) { var x = item.split("=")
x[1] != "" && (args[x[0]] = decodeURIComponent(x[1]))

View File

@ -371,6 +371,8 @@ Volcanos("page", {help: "用户界面", ClassList: {
for (var i = 2; i < arguments.length; i += 2) {
if (typeof arguments[i] == lang.OBJECT) {
can.base.Copy(value, arguments[i--])
} else if (typeof arguments[i] == lang.UNDEFINED) {
continue
} else {
value[arguments[i]] = arguments[i+1]
}

View File

@ -33,6 +33,8 @@ Volcanos("user", {help: "用户操作", agent: {
isDiv: location && location.pathname && (location.pathname.indexOf("/chat/div/") == 0),
isCmd: location && location.pathname && (location.pathname.indexOf("/chat/pod/") == 0 && location.pathname.indexOf("/cmd/") > 0 ||
location.pathname.indexOf("/chat/cmd/") == 0 || location.pathname.indexOf("/help/") == 0),
isWeb: location && location.pathname && (location.pathname.indexOf("/chat/pod/") == 0 && location.pathname.indexOf("/website/") > 0 ||
location.pathname.indexOf("/chat/website/") == 0),
},
alert: function(text) { alert(JSON.stringify(text)) },
@ -105,6 +107,7 @@ Volcanos("user", {help: "用户操作", agent: {
title: meta.title, content: meta.content,
time: can.base.Time(), fileline: can.misc.FileLine(2, 2),
}))
can.onmotion.float.add(can, chat.TOAST, action)
return action
},
share: function(can, msg, cmd) {
@ -230,7 +233,7 @@ Volcanos("user", {help: "用户操作", agent: {
input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() }
var msg = can.request(event)
var ui = can.page.Append(can, document.body, [{view: [html.INPUT], style: {left: 0, top: 0}, list: [
{view: [chat.OPTION, html.TABLE], list: can.core.List(form, function(item) {
{view: [chat.OPTION, html.TABLE], list: can.core.List(form, function(item) {
item = can.base.isString(item)? {type: html.TEXT, name: item}: item.length > 0? {type: html.SELECT, name: item[0], values: item.slice(1)}: item
item.type = item.type||(item.values? html.SELECT: item.name == html.TEXT? html.TEXTAREA: html.TEXT)
@ -249,16 +252,17 @@ Volcanos("user", {help: "用户操作", agent: {
return {type: html.TR, list: [{type: html.TD, list: [{text: item._trans||can.user.trans(can, item.name)||""}]}, {type: html.TD, list: [can.page.input(can, item)]} ]}
})}, {view: chat.ACTION},
]}]);
]}])
var layout = can.onlayout.figure(event, can, ui._target)
if (layout.left == undefined) { if (!layout.top) { layout.top = 32 }
layout.left = window.innerWidth/2-ui._target.offsetWidth/2
layout.right = ""
layout.left = window.innerWidth/2-ui._target.offsetWidth/2, layout.right = ""
can.page.style(can, ui._target, layout)
}
can.page.ClassList.add(can, ui._target, chat.FLOAT)
var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, {
focus: function(event) { can.page.Select(can, ui.first, html.INPUT_ARGS)[0].focus() },
cancel: function(event) { can.page.Remove(can, ui._target) },
_engine: function(event, can, button) { action.submit(event, can, button) },
submit: function(event, can, button) { var data = {}, args = [], list = []
@ -269,10 +273,7 @@ Volcanos("user", {help: "用户操作", agent: {
can.base.isFunc(cb) && !cb(event, button, data, list, args) && action.cancel()
}, _target: ui._target,
})
if (button === true) {
action.submit(event, can, "submit")
return action
}
if (button === true) { return action.submit(event, can, "submit"), action }
can.page.Select(can, ui._target, html.INPUT_ARGS, function(item, index) {
index == 0 && can.core.Timer(100, function() { can.onmotion.focus(can, item) })

View File

@ -90,8 +90,8 @@ td>input[type=button][name=stop] { background-color:red; }
legend { box-shadow:4px 4px 20px 4px #626bd0; cursor:pointer; }
fieldset { margin:0; border:0; padding:0; }
fieldset>form.option { float:left; display:contents; font-size:1.1rem; }
fieldset>form.option>div.item { float:left; margin-right:3px; height:2rem; min-height:25px; vertical-align:middle; }
fieldset>form.option { float:left; display:contents; }
fieldset>form.option>div.item { float:left; margin-right:3px; }
fieldset>form.option>div.item>label { display:none; }
fieldset>form.option>div.item input.args.char { width:20px; }
fieldset>form.option>div.item input.args.tiny { width:40px; }
@ -104,8 +104,8 @@ fieldset>form.option>div.item input.args[name=offset] { width:48px; }
fieldset>form.option>div.item input.args[name=offend] { width:48px; }
fieldset>form.option>div.item.textarea { clear:both; margin-top:4px; }
fieldset>div.action { float:left; display:contents; font-size:1.1rem; }
fieldset>div.action>div.item { float:left; margin-right:3px; height:2rem; vertical-align:middle; }
fieldset>div.action { float:left; display:contents; }
fieldset>div.action>div.item { float:left; margin-right:3px; }
fieldset>div.action>div.item.space { width:10px; }
fieldset div.action>div.item>label { display:none; }
fieldset>div.action>div.tabs { float:left; margin:0; padding:4px; cursor:pointer; }
@ -122,7 +122,7 @@ fieldset>div.status>div.item { float:left; padding:4px; height:18px; }
fieldset.panel>legend { display:none; }
fieldset.plugin { margin:10px; padding:10px; background-color:#061c3c9e; box-shadow:2px 2px 10px 4px #626bd0; }
fieldset.plugin>div.action { float:none; display:block; height:1.8rem; overflow:auto; }
fieldset.plugin>div.action { float:none; overflow:auto; }
fieldset.plugin>div.status { border-top:1px solid darkcyan; }
fieldset.output { margin:0; padding:0; }
fieldset.output>legend { display:none; }
@ -240,18 +240,20 @@ body.white table.content tr:hover { background-color:green; }
body.white fieldset.Action fieldset.plugin legend:hover { background-color:#6ee4e4; }
body.print fieldset.River>div.output div.item.select { background-color:white; border:solid 2px red; }
body.mobile select { font-size:1.4rem; height:1.4rem; margin-top:3px; }
body.mobile select { font-size:1.4rem; height:1.8rem; }
body.mobile legend { font-size:2rem; }
body.mobile input { font-size:1.2rem; }
body.mobile input[type=text] { margin-top:5px; height:1.4rem; }
body.mobile input[type=text] { height:1.6rem; }
body.mobile fieldset.Header.head { width:-webkit-fill-available; }
body.mobile fieldset.Header.head { background-color:#000000b8; font-size:2rem; height:2rem; position:fixed; top:0; }
body.mobile fieldset.Header.head div.output { height:2rem; }
body.mobile fieldset.Header.head>div.output>div { height:1.5rem; }
body.mobile fieldset.Header.head>div.output div.menu { height:1.5rem; }
body.mobile fieldset.Header.head { background-color:#000000b8; font-size:2rem; height:3rem; position:fixed; top:0; }
body.mobile fieldset.Header.head div.output { height:3rem; }
body.mobile fieldset.Header.head>div.output>div { height:2.2rem; }
body.mobile fieldset.Header.head>div.output div.menu { height:2.2rem; }
body.mobile fieldset.Header.head div.state.time { display:none; }
body.mobile fieldset.River.left { position:fixed; top:2rem; background-color:#243950bf; min-width:240px; font-size:2rem; }
body.mobile fieldset.River.left { position:fixed; top:3rem; background-color:#243950bf; min-width:240px; font-size:2rem; }
body.mobile>div.carte div.item { font-size:2rem; }
body.mobile fieldset.River>div.output div.list div.item { font-size:2rem; }
body.mobile fieldset.River>div.output div.item { font-size:2rem; }
body.mobile fieldset.Action.main { margin-top:4rem; }
body.mobile fieldset.Action.main.cmd { margin-top:0; margin-bottom:0; }
body.mobile fieldset.Footer.foot { width:-webkit-fill-available; }

View File

@ -49,10 +49,10 @@ Volcanos({name: "chat", panels: [
}},
project: {name: "研发群", storm: {
studio: {name: "研发 studio", list: [
{name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"], _action: ["autogen", "compile", "binpack"]},
{name: "vimer", help: "编辑器", index: "web.code.vimer"},
{name: "repos", help: "代码库", index: "web.code.git.status"},
{name: "plan", help: "任务表", index: "web.team.plan"},
{name: "ctx", help: "上下文", index: "web.wiki.word", args: ["src/main.shy"]},
{name: "ctx", help: "上下文", index: "web.wiki.word"},
]},
web: {name: "网页 web", list: [
{name: "HTML5", help: "浏览器", index: "web.wiki.word", args: ["usr/icebergs/misc/chrome/chrome.shy"]},

View File

@ -59,7 +59,6 @@ fieldset.panel.cmd>div.output>fieldset.plugin {
}
fieldset.panel.cmd>div.output>fieldset.plugin>legend {
float:left; padding:0 10px; margin-right:3px;
height:25px;
background-color:darkcyan;
cursor:pointer;
}

View File

@ -165,7 +165,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, cb, t
can.getActionSize(function(height, width) { var m = parseInt(data.m)||2, n = parseInt(data.n)||2
can.page.css(can.base.replaceAll(chat.ACTION_LAYOUT_FMT, "_width", (width-(4*m+1)*html.PLUGIN_MARGIN)/m+"px", "_height", (height-(4*n+1)*html.PLUGIN_MARGIN)/n+"px"))
})
}, true)
}, slient)
}
can.onlayout._init(can)
},
@ -189,14 +189,16 @@ Volcanos("onkeymap", {help: "键盘交互", list: [], _focus: [], _init: functio
" ": function(event, can, target) {
can.onengine.signal(can, "onsearchfocus")
can.onkeymap.prevent(event)
},
":": function(event, can, target) {
can.onengine.signal(can, "oncommandfocus")
can.onkeymap.prevent(event)
},
enter: function(event, can, target) { can.misc.Log("enter") },
escape: function(event, can, target) {
can.page.Select(can, document.body, html.FIELDSET_AUTO, function(item) {
can.onmotion.hidden(can, item)
// can.onmotion.hidden(can, item)
})
can.page.Select(can, document.body, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(item) {
can.page.Remove(can, item)

View File

@ -56,6 +56,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
})
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, target) {
if (can.user.mod.isPod) {
can.onmotion.hidden(can, can._target)
} else if (can.user.isMobile) {
can.onmotion.hidden(can, can._target)
} else if (can.user.isExtension) {
can.onmotion.hidden(can, can._target)
}
can.base.isFunc(cb) && cb()
},
onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) }) },

View File

@ -13,15 +13,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.base.isFunc(cb) && cb(msg)
},
_agent: function(can, msg, target) {
if (can.user.mod.isPod) {
can.onaction.River(can)
can.onaction.Footer(can)
} else if (can.user.isMobile) {
can.onaction.River(can)
can.onaction.Footer(can)
} else if (can.user.isExtension) {
can.onaction.River(can)
}
can.run({}, [chat.AGENT], function(msg) { if (!msg.Option(ssh.SCRIPT)) { return }
can.require(can.base.Obj(msg.Option(ssh.SCRIPT)), function(can) { can.onaction.source(can, msg) })
})
@ -75,7 +66,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
msg.Option(aaa.AVATAR) && can.page.Modify(can, "div.state.avatar>img", {src: "/share/local/avatar"})
},
_menus: function(can, msg, target) {
can.setHeaderMenu(can.user.mod.isPod||can.user.isMobile||can.user.isExtension? [chat.RIVER]:
can.setHeaderMenu(can.user.mod.isPod||can.user.isMobile||can.user.isExtension? []:
can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), can.onaction._menus), function(event, button) {
can.core.CallFunc(can.onaction[button]||function(event, can) {
can.run(event, [button], function(msg) { can.user.toast(can, "执行成功", can.user.trans(can, button)) })
@ -125,9 +116,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, target) {
can.base.isFunc(cb) && cb()
},
_menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, "webpack", "devpack", "toimage"]],
_menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, "webpack", "devpack", "toimage", "refresh"]],
_trans: {
"river": "菜单",
"search": "搜索",
"create": "创建",
"share": "共享",
@ -140,6 +130,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t
"shareuser": "共享用户",
"setnick": "设置昵称",
"password": "修改密码",
"language": "语言地区",
"chinese": "中文",
"clear": "清除背景",
@ -148,9 +139,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t
function init() { can.run({}, [], function(msg) {
can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {}))
can.onimport._init(can, msg, function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output)
can.search({}, ["River.onmotion.toggle"])
}) }; can.search({}, ["River.onmotion.hidden"])
}) }
if (can.misc.Search(can, ice.MSG_SESSID)) {
can.misc.CookieSessid(can, can.misc.Search(can, ice.MSG_SESSID))
return can.misc.Search(can, ice.MSG_SESSID, "")
@ -174,7 +163,6 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t
})
can.user.jumps(can.misc.MergeURL(can, args, true))
},
river: function(event, can) { can.onaction.River(can) },
black: function(event, can, button) { can.onlayout.topic(can, button), can.onlayout._init(can) },
white: function(event, can, button) { can.onlayout.topic(can, button), can.onlayout._init(can) },
@ -199,6 +187,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t
})
},
toimage: function(event, can, button) { can.onmotion.toimage(event, can, document.title, document.body) },
refresh: function(event, can, button) { can.onlayout._init(can) },
carte: function(event, can, list, cb, trans) { can.user.carte(event, can, can.onaction, list, cb) },
share: function(event, can, args) {
@ -207,7 +196,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t
},
usernick: function(event, can) {
can.onaction.carte(event, can, ["shareuser", "setnick", [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT])
can.onaction.carte(event, can, ["shareuser", "setnick", "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) {
@ -220,13 +209,24 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t
})
can.user.isMobile && can.page.Modify(can, ui._target, {style: {top: 40, right: 0, left: ""}})
},
password: function(event, can) {
var ui = can.user.input(event, can, [{type: html.PASSWORD, action: ice.AUTO}, {type: html.PASSWORD, action: ice.AUTO}], function(ev, button, data, list, args) {
if (list[0] != list[1]) {
can.user.toast(can, "密码不一致")
ui.focus()
return true
}
can.run(event, [aaa.PASSWORD, list[0]], function(msg) {
can.user.toastSuccess(can)
}, true)
})
can.user.isMobile && can.page.Modify(can, ui._target, {style: {top: 40, right: 0, left: ""}})
},
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, ""), can.user.reload(true) },
logout: function(event, can) { can.user.logout(can) },
River: function(can) { can.search({}, ["River.onmotion.toggle"]) },
Footer: function(can) { can.search({}, ["Footer.onmotion.toggle"]) },
})
Volcanos("onexport", {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight },

View File

@ -69,6 +69,16 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, c
}), can.base.isFunc(cb) && cb(msg); return true
}})
Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, cb, target) {
if (can.user.mod.isWeb) {
} else if (can.user.mod.isPod) {
can.onmotion.hidden(can, can._target)
} else if (can.user.isExtension) {
can.onmotion.hidden(can, can._target)
} else if (can.user.isMobile) {
can.onmotion.hidden(can, can._target)
}
can.onengine.plugin(can, "info", shy("信息", {}, ["text", "list", "back"], function(msg, cmds) {
msg.Echo(JSON.stringify(can))
}))
@ -198,6 +208,7 @@ Volcanos("ondetail", {help: "菜单交互",
},
"创建空间": function(event, can, button, river, storm) { can.request(event, {action: button})
can.user.input(event, can, [{name: "name", value: "hi"}, {name: "repos"}, {name: "template"}], function(event, button, data, list, args) {
can.request(event, {_toast: "创建中..."})
can.run(event, [ctx.ACTION, cli.START].concat(args, chat.RIVER, river), function(msg) {
var link = can.misc.MergeURL(can, {_path: "/chat/pod/"+can.core.Keys(can.misc.Search(can, ice.POD), msg.Option(mdb.NAME))})
can.user.toast(can, link), can.user.open(link)

View File

@ -105,6 +105,7 @@ Volcanos("onaction", {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DON
sub.run = function(event, cmds, cb) { var msg = can.request(event)
can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), cb, true)
}
sub.Focus()
}, can.ui.profile)
},
})

View File

@ -14,7 +14,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
refresh: function(event, can) { can.run(event) },
onclick: function(event, can) {
if (can.Conf(mdb.TYPE) == html.BUTTON) { can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) }
can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input()))
},
onchange: function(event, can) {
if (can.Conf(mdb.TYPE) == html.SELECT) { can.run(event) }

View File

@ -8,6 +8,6 @@ fieldset.input.date div.output td.next {
color:gray;
}
fieldset.input.date div.output td {
padding:2px 12px;
padding:2px 11px;
}

View File

@ -3,20 +3,21 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
// 添加控件
var now = target.value? new Date(target.value): new Date()
can._trans = {"today": "今天", "next": "下一月", "prev": "上一月"}
can.onmotion.clear(can, can._action), 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)),
"今天", "", "上一月", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), "下一月",
"today", "", "prev", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), "next",
], can._action, { close: function(event) { can.close() },
"hour": function(event, can, key, value) { now.setHours(parseInt(value)||0), show(now) },
"minute": function(event, can, key, value) { now.setMinutes(parseInt(value)||0), show(now) },
"second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) },
"今天": function(event) { now = new Date(), set(show(now)) },
"today": function(event) { now = new Date(), set(show(now)) },
"上一月": function(event) { now.setMonth(now.getMonth()-1), show(now) },
"prev": function(event) { now.setMonth(now.getMonth()-1), show(now) },
"year": function(event, can, key, value) { now.setFullYear(parseInt(value)), show(now) },
"month": function(event, can, key, value) { now.setMonth(parseInt(value)-1), show(now) },
"下一月": function(event) { now.setMonth(now.getMonth()+1), show(now) },
"next": function(event) { now.setMonth(now.getMonth()+1), show(now) },
"随机": function(event) { now.setDate((Math.random() * 100 - 50) + now.getDate()), show(now) },
"前一年": function(event) { now.setFullYear(now.getFullYear()-1), show(now) },

View File

@ -1,57 +1,45 @@
Volcanos("onfigure", {help: "控件详情", list: [], key: {
_init: function(can, msg, target) { var call = arguments.callee
_init: function(can, msg, target) { var call = arguments.callee; target._msg = msg
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) {
return {text: [value, html.TD], onclick: function(event) { target.value = line[key]
if (msg.Option(ice.MSG_PROCESS) != ice.PROCESS_AGAIN) { return can.close() }
can.run(event, [ctx.ACTION, mdb.INPUTS, can.Conf(mdb.NAME), target.value], function(msg) {
call(can, msg, target)
})
can.run(event, [ctx.ACTION, mdb.INPUTS, can.Conf(mdb.NAME), target.value], function(msg) { call(can, msg, target) })
}}
})
}), can.Status(mdb.TOTAL, msg.Length()), can.onmotion.hidden(can, can._target, msg.Length() > 0)
},
_show: function(can, meta, cbs, target) {
can.run(event, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) {
if (msg.Length() == 0) { return can.close() }
target._can && target._can.close(), target._can = can
can.onfigure.key._init(can, msg, target), can.Status(mdb.TOTAL, msg.Length())
target._msg = msg, can.base.isFunc(cbs) && cbs(can)
_show: function(event, can, name, cbs, target, value) {
can.run(event, [ctx.ACTION, mdb.INPUTS, name, value||target.value], function(msg) {
can.onfigure.key._init(can, msg, target), can.base.isFunc(cbs) && cbs(can, msg.Length() == 0)
})
},
onfocus: function(event, can, meta, cb, target) { if (target._figure) { return } target._figure = {}; cb(function(can, cbs) {
target._figure = can.onlayout.figure(event, can, can._target, false, {top: can.page.offsetTop(target)+target.offsetHeight, left: can.page.offsetLeft(target)})
can.onfigure.key._show(can, meta, cbs, target), can.onmotion.focus(can, target)
target.click()
can.onfigure.key._show(event, can, meta.name, cbs, target), can.onmotion.focus(can, target)
}) },
onblur: function(event, can, meta, cb, target) {
can.core.Timer(100, function() {
delete(target._figure), target._can && target._can.close()
})
can.onmotion.delay(can, function() { delete(target._figure), target._can && target._can.close() })
},
onclick: function(event, can, meta, cb, target) { if (target._figure) { target._figure = can.onlayout.figure(event, can, can.core.Value(target, "_can._target")||{}); return } target._figure = {}; cb(function(can, cbs) {
target._figure = can.onlayout.figure(event, can)
can.onfigure.key._show(can, meta, cbs, target)
can.onfigure.key._show(event, can, meta.name, cbs, target), can.onmotion.focus(can, target)
}) },
onkeydown: function(event, can, meta, cb, target, last) {
if (target._figure && target._can) { can = target._can
switch (event.key) { case lang.ENTER: can.close(); return }
can.onmotion.selectTableInput(event, can, target, function() {
can.run(event, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) {
can.onfigure.key._init(can, msg, target), can.Status(mdb.TOTAL, msg.Length())
target._msg = msg
})
})
}
onkeydown: function(event, can, meta, cb, target, last) { var sub = target._can
switch (event.key) {
case lang.ESCAPE: event.target.blur(); return
case lang.SHIFT: break
case lang.CONTROL: break
case lang.ENTER: sub.close(); break
case lang.ESCAPE: event.target.blur(); break
case lang.PS: can.onfigure.key._show(event, sub, meta.name, null, target, target.value+ice.PS); break
case lang.TAB:
if (event.target.tagName == "TEXTAREA") {
can.onkeymap.insertText(event.target, "\t")
can.onkeymap.prevent(event)
return
if (can.page.tagis(html.TEXTAREA, target)) {
can.onkeymap.insertText(event.target, "\t"), can.onkeymap.prevent(event)
break
}
default:
can.onmotion.selectTableInput(event, sub, target, function() {
can.onfigure.key._show(event, sub, meta.name, null, target)
}), can.base.isFunc(last) && last(event, can)
}
can.base.isFunc(last) && last(event, can)
},
}})

View File

@ -86,7 +86,7 @@ fieldset.inner>div.output div.profile>div.output>fieldset {
margin:0; padding:0;
}
fieldset.inner>div.output div.profile>div.output>fieldset>legend {
float:left;
float:left; padding:0.3rem;
}
fieldset.inner>div.output div.display>div.output {
clear:both; overflow:auto;

View File

@ -159,7 +159,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
},
plugin: function(can, meta, target, cb) {
can.onappend.plugin(can, meta, function(sub) {
sub.run = function(event, cmds, cb) {
sub.run = function(event, cmds, cb) { can.request(event, can.Option())
can.run(event, can.misc.concat(can, [ctx.ACTION, ice.RUN, meta.index], cmds), cb, true)
}, can.base.isFunc(cb) && cb(sub)
}, target)
@ -179,15 +179,14 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
if (can.page.ClassList.has(can, can._fields, "full")) {
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight)
} else {
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight-html.ACTION_HEIGHT)
can.page.styleHeight(can, can.ui.profile_output, can.ui.content.offsetHeight-html.ACTION_HEIGHT-2)
}
can.page.Select(can, can.ui.profile_output, html.IFRAME, function(item) {
can.page.style(can, item,
html.HEIGHT, can.ui.profile_output.offsetHeight-4,
html.WIDTH, can.ui.profile_output.offsetWidth-5,
"margin-left", "-10px", "margin-top", "-10px",
"position", "absolute",
"border", "0"
"position", "absolute", "border", "0"
)
})
},
@ -279,17 +278,21 @@ Volcanos("onkeymap", {help: "导入数据", _init: function(can, msg, cb, target
_insert: function(event, can) {},
_mode: {
plugin: {
Escape: function(event, can) { can.onaction["清屏"](event, can) },
g: function(event, can) { can.onaction["搜索"](event, can) },
f: function(event, can) { can.onaction["打开"](event, can) },
t: function(event, can) { can.onaction["添加"](event, can) },
p: function(event, can) { can.onaction["插件"](event, can) },
e: function(event, can) { can.onaction["扩展"](event, can) },
Escape: function(event, can) { can.actions(event, "清屏") },
g: function(event, can) { can.actions(event, "搜索") },
f: function(event, can) { can.actions(event, "打开") },
t: function(event, can) { can.actions(event, "添加") },
p: function(event, can) { can.actions(event, "插件") },
e: function(event, can) { can.actions(event, "扩展") },
q: function(event, can) { can.onaction["全屏"](event, can) },
r: function(event, can) { can.onaction["执行"](event, can) },
v: function(event, can) { can.onaction["展示"](event, can) },
s: function(event, can) { can.onaction["保存"](event, can) },
m: function(event, can) { can.actions(event, "autogen") },
c: function(event, can) { can.actions(event, "compile") },
w: function(event, can) { can.actions(event, "website") },
r: function(event, can) { can.actions(event, "执行") },
v: function(event, can) { can.actions(event, "展示") },
// s: function(event, can) { can.actions(event, "保存") },
a: function(event, can) { can.actions(event, "全屏") },
j: function(event, can) { can.current.scroll(1) },
k: function(event, can) { can.current.scroll(-1) },

View File

@ -124,7 +124,8 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
},
}, _engine: {},
})
Volcanos("onaction", {help: "控件交互", list: ["加载", nfs.SAVE, "autogen", "compile", "binpack", "刷新"],
Volcanos("onaction", {help: "控件交互", list: ["autogen", "compile", "website"],
_trans: {website: "网页"},
"刷新": function(event, can) {
can.onimport.tabview(can, "src/", "main.go", "", function() {}, true)
},
@ -149,7 +150,7 @@ Volcanos("onaction", {help: "控件交互", list: ["加载", nfs.SAVE, "autogen"
}, true)
})
},
compile: function(event, can, button) { var msg = can.ui.search.request(event, {_handle: ice.TRUE, _toast: "编译中..."})
compile: function(event, can, button) { var msg = can.ui.search.request(event, {_handle: ice.TRUE, _toast: "编译中..."}, can.Option())
can.run(event, [ctx.ACTION, button], function(msg) {
if (msg.Length() == 0) { var toast = can.user.toast(can, "重启中...", "", -1)
can.core.Timer(5000, function() { toast.close(), can.onaction["展示"]({}, can) })
@ -158,6 +159,11 @@ Volcanos("onaction", {help: "控件交互", list: ["加载", nfs.SAVE, "autogen"
}
}, true)
},
website: function(event, can, button) { can.request(event, {action: button})
can.user.input(event, can, [{name: nfs.FILE, value: "hi.txt"}], function(ev, btn, data, list, args) {
can.onimport.tabview(can, "src/", "website/"+list[0], "", function() {}, true)
})
},
_selectLine: function(event, can) {
can.page.Select(can, can.current.line, "td.text", function(td) { can.current.line.appendChild(can.ui.current)

View File

@ -72,13 +72,18 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
},
})
Volcanos("onaction", {help: "交互操作", list: [
"共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", "清空参数", "刷新数据", [
"共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", "清空参数", "刷新数据", "刷新页面", [
"其它 ->", "复制数据", "下载数据", "清空数据", "删除工具", "摄像头", "生成图片",
],
], _init: function(can, msg, list, cb, target) {},
_engine: function(event, can, button) {
can.Update(event, [ctx.ACTION, button].concat(can.Input([], true)))
},
"刷新页面": function(event, can) {
var sub = can.core.Value(can._outputs, "-1"), msg = sub._msg
can.core.CallFunc([sub, chat.ONIMPORT, "_init"], {can: sub, msg: msg, list: msg.result||msg.append||[], cb: function(msg) {
}, target: can._output})
},
"共享工具": function(event, can) { var meta = can.Conf()
can.onmotion.share(event, can, [{name: chat.TITLE, value: meta.name}, {name: chat.TOPIC, values: [cli.WHITE, cli.BLACK]}], [
mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)),

View File

@ -73,6 +73,7 @@ var web = {
SPACE: "space", SHARE: "share",
}
var aaa = {
PASSWORD: "password",
USERNAME: "username", USERNICK: "usernick", BACKGROUND: "background", AVATAR: "avatar",
LANGUAGE: "language", ENGLISH: "english", CHINESE: "chinese",
LOGIN: "login", LOGOUT: "logout", INVITE: "invite",
@ -239,6 +240,8 @@ var lang = {
STRING: "string", NUMBER: "number",
OBJECT: "object", FUNCTION: "function",
ESCAPE: "Escape", ENTER: "Enter", TAB: "Tab",
CONTROL: "Control", SHIFT: "Shift",
PS: "/",
}
function shy(help, meta, list, cb) {
var index = 0, args = arguments; function next(type) {
@ -313,6 +316,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
}): can.core.Item(can.base.isFunc(option)? option(): option, set)
}); return msg
},
actions: function(event, button) { can.run(event, [ctx.ACTION, button], null, true) },
search: function(event, cmds, cb) {
if (cmds && typeof cmds == lang.OBJECT && cmds.length > 0 && typeof cmds[0] == lang.OBJECT && cmds[0].length > 0 ) {